diff --git a/src/main/java/org/janelia/saalfeldlab/hotknife/SparkComputeCostMultiSem.java b/src/main/java/org/janelia/saalfeldlab/hotknife/SparkComputeCostMultiSem.java index ee4ca9fc..c11c0b96 100644 --- a/src/main/java/org/janelia/saalfeldlab/hotknife/SparkComputeCostMultiSem.java +++ b/src/main/java/org/janelia/saalfeldlab/hotknife/SparkComputeCostMultiSem.java @@ -151,6 +151,13 @@ public String getCostDatasetName(final int index) { @Option(name = "--surfaceMaxDistance", usage = "maximum distance between the both surfaces, e.g. 30") private double surfaceMaxDistance = 30; + @Option(name = "--surfaceBlockSize", usage = "surface block size in pixels, e.g. 128,128") + private String surfaceBlockSizeString = "128,128"; + + private long[] getSurfaceBlockSize() { + return parseCSLongArray(surfaceBlockSizeString); + } + @Option(name = "--localSparkBindAddress", usage = "specify Spark bind address as localhost") private boolean localSparkBindAddress = false; @@ -195,6 +202,9 @@ public static void computeCost( System.out.println("median Z: " + options.median ); System.out.println("smooth cost Z: " + options.smoothCost ); + final long[] surfaceBlockSize = options.getSurfaceBlockSize(); + System.out.println("surfaceBlockSize: " + Util.printCoordinates(surfaceBlockSize) ); + final N5Reader n5 = new N5FSReader(n5Path); final N5Writer n5w = new N5FSWriter(costN5Path); @@ -321,7 +331,8 @@ public static void computeCost( options.surfaceMaxDistance, true, // no need to permute with multi-sem false); - sparkSurfaceFit.callWithSparkContext(sparkContext); + sparkSurfaceFit.callWithSparkContext(sparkContext, + options.getSurfaceBlockSize()); } } diff --git a/src/main/java/org/janelia/saalfeldlab/hotknife/SparkSurfaceFit.java b/src/main/java/org/janelia/saalfeldlab/hotknife/SparkSurfaceFit.java index 8549142b..01cd2838 100644 --- a/src/main/java/org/janelia/saalfeldlab/hotknife/SparkSurfaceFit.java +++ b/src/main/java/org/janelia/saalfeldlab/hotknife/SparkSurfaceFit.java @@ -16,6 +16,8 @@ */ package org.janelia.saalfeldlab.hotknife; +import com.beust.jcommander.Parameter; + import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; @@ -1408,6 +1410,12 @@ else if ( IntegerType.class.isInstance( t ) ) public void callWithSparkContext(final JavaSparkContext sc) throws IOException { + callWithSparkContext(sc, new long[] {128, 128}); + } + + public void callWithSparkContext(final JavaSparkContext sc, + final long[] blockSize) + throws IOException { final N5Reader n5 = isZarr( n5Path ) ? new N5ZarrReader( n5Path ) : new N5FSReader(n5Path); @@ -1491,7 +1499,6 @@ public void callWithSparkContext(final JavaSparkContext sc) System.out.println( "Processing scale: " + s ); - final long[] blockSize = new long[] {128, 128}; final long[] blockPadding = new long[] {32, 32}; final double maxDeltaZ = (s == lastScaleIndex ) ? this.finalMaxDeltaZ : this.maxDeltaZ;