Skip to content

Commit 36a58be

Browse files
committed
fix DownsampleHelper bug
1 parent 651afc6 commit 36a58be

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

render-ws-spark-client/src/main/java/org/janelia/render/client/spark/n5/DownsampleHelper.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ public void run(final JavaSparkContext sparkContext)
106106
final String outputGroupPath = sZeroDatasetPath.substring(0, sZeroDatasetPath.lastIndexOf('/'));
107107

108108
int numberOfDownsampledDatasets = 0;
109-
long downsampledBlockCount = 2;
110-
for (int scale = 1; (downsampledBlockCount > 1) || scale <= requiredSLevel; scale++) {
109+
long previousDownsampledBlockCount = -1;
110+
for (int scale = 1; ; scale++) {
111111

112112
final String fromDataset = scale == 1 ? sZeroDatasetPath : outputGroupPath + "/s" + (scale - 1);
113113
final String toDataset = outputGroupPath + "/s" + scale;
@@ -117,14 +117,15 @@ public void run(final JavaSparkContext sparkContext)
117117
scaleFactors[d] = (int) Math.round(Math.pow(downsampleFactors[d], scale));
118118
}
119119

120-
long blockCount = 1;
120+
// note that the downsampledBlockCount reflects potential grid blocks
121+
// and is likely more than the actual block count since empty blocks are not written
122+
long downsampledBlockCount = 1;
121123
final long[] downsampledDimensions = new long[numberOfDimensions];
122124
for (int d = 0; d < numberOfDimensions; d++) {
123125
downsampledDimensions[d] = dimensions[d] / scaleFactors[d];
124126
final long blocksInDim = (downsampledDimensions[d] + outputBlockSize[d] - 1) / outputBlockSize[d];
125-
blockCount *= blocksInDim;
127+
downsampledBlockCount *= blocksInDim;
126128
}
127-
downsampledBlockCount = blockCount;
128129

129130
if (n5.datasetExists(toDataset)) {
130131

@@ -176,6 +177,13 @@ public void run(final JavaSparkContext sparkContext)
176177
}
177178

178179
numberOfDownsampledDatasets++;
180+
181+
final boolean moreBlocksToDownsample = ((downsampledBlockCount > 1) &&
182+
(downsampledBlockCount != previousDownsampledBlockCount));
183+
if ((! moreBlocksToDownsample) || (scale <= requiredSLevel)) {
184+
break;
185+
}
186+
previousDownsampledBlockCount = downsampledBlockCount;
179187
}
180188

181189
// save additional parameters so that n5 can be viewed in neuroglancer

0 commit comments

Comments
 (0)