Skip to content

Commit e0b2e0a

Browse files
Merge pull request #89 from indecisiveuser/SmartSPIM_skip_tiles
fix SmartSPIM to skip tiles with skip=0 in metadata.json
2 parents 5fd7295 + 4a43795 commit e0b2e0a

File tree

1 file changed

+61
-43
lines changed

1 file changed

+61
-43
lines changed

src/main/java/net/preibisch/mvrecon/fiji/datasetmanager/SmartSPIM.java

Lines changed: 61 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,7 @@
2727
import java.io.IOException;
2828
import java.lang.reflect.Type;
2929
import java.net.URI;
30-
import java.util.ArrayList;
31-
import java.util.Arrays;
32-
import java.util.Collection;
33-
import java.util.HashMap;
34-
import java.util.List;
35-
import java.util.Map;
30+
import java.util.*;
3631
import java.util.Map.Entry;
3732
import java.util.stream.Collectors;
3833

@@ -162,11 +157,13 @@ protected ArrayList< ViewSetup > createViewSetups( final SmartSPIMMetaData meta,
162157
for ( int y = 0; y < meta.yTileLocations.size(); ++y )
163158
for ( int x = 0; x < meta.xTileLocations.size(); ++x )
164159
{
165-
final Tile tile = new Tile( i, "x" + x + "_y" + y );
166-
tile.setLocation( new double[] { meta.xTileLocations.get( x ) * scaleFactor, meta.yTileLocations.get( y ) * scaleFactor, 0 } );
160+
if (meta.tileMap.get(meta.xTileLocations.get( x )).contains(meta.yTileLocations.get( y ))) {
161+
final Tile tile = new Tile(i, "x" + x + "_y" + y);
162+
tile.setLocation(new double[]{meta.xTileLocations.get(x) * scaleFactor, meta.yTileLocations.get(y) * scaleFactor, 0});
167163

168-
tiles.add( tile );
169-
++i;
164+
tiles.add(tile);
165+
++i;
166+
}
170167
}
171168

172169
final ArrayList< ViewSetup > viewSetups = new ArrayList< ViewSetup >();
@@ -190,45 +187,48 @@ public static boolean populateImageSize( final SmartSPIMMetaData metadata, final
190187
for ( int xTile = 0; xTile < metadata.xTileLocations.size(); ++ xTile)
191188
for ( int yTile = 0; yTile < metadata.yTileLocations.size(); ++ yTile)
192189
{
193-
final URI imageDir = metadata.folderFor(
194-
metadata.channels.get( channel ),
195-
metadata.xTileLocations.get( xTile ),
196-
metadata.yTileLocations.get( yTile ) );
190+
if (metadata.tileMap.get(metadata.xTileLocations.get( xTile ))
191+
.contains(metadata.yTileLocations.get( yTile ))) {
192+
final URI imageDir = metadata.folderFor(
193+
metadata.channels.get( channel ),
194+
metadata.xTileLocations.get( xTile ),
195+
metadata.yTileLocations.get( yTile ) );
197196

198-
IOFunctions.println( "Directory: " + imageDir );
197+
IOFunctions.println( "Directory: " + imageDir );
199198

200-
final Pair< long[], List< String > > stackData =
201-
metadata.loadImageSize( channel, xTile, yTile );
199+
final Pair< long[], List< String > > stackData =
200+
metadata.loadImageSize( channel, xTile, yTile );
202201

203-
final long[] dimensions = stackData.getA();
202+
final long[] dimensions = stackData.getA();
204203

205-
IOFunctions.println( "dimensions: " + Util.printCoordinates( dimensions ) );
204+
IOFunctions.println( "dimensions: " + Util.printCoordinates( dimensions ) );
206205

207-
if ( dimensions == null )
208-
return false;
206+
if ( dimensions == null )
207+
return false;
209208

210-
if ( metadata.dimensions == null )
211-
{
212-
metadata.dimensions = dimensions;
213-
metadata.sortedFileNames = stackData.getB();
214-
}
209+
if ( metadata.dimensions == null )
210+
{
211+
metadata.dimensions = dimensions;
212+
metadata.sortedFileNames = stackData.getB();
213+
}
215214

216-
if ( !confirmAllImages )
217-
return true;
215+
if ( !confirmAllImages )
216+
return true;
218217

219-
if ( !Arrays.equals( metadata.dimensions, dimensions ) )
220-
{
221-
IOFunctions.println( "dimensions are not equal. Stopping: " + Util.printCoordinates( dimensions ) + ", " + Util.printCoordinates( metadata.dimensions ) );
222-
return false;
223-
}
218+
if ( !Arrays.equals( metadata.dimensions, dimensions ) )
219+
{
220+
IOFunctions.println( "dimensions are not equal. Stopping: " + Util.printCoordinates( dimensions ) + ", " + Util.printCoordinates( metadata.dimensions ) );
221+
return false;
222+
}
224223

225-
if ( !areListsEqual( metadata.sortedFileNames, stackData.getB() ) )
226-
{
227-
IOFunctions.println( "file names are not equal. Stopping." );
228-
return false;
229-
}
230-
231-
}
224+
if ( !areListsEqual( metadata.sortedFileNames, stackData.getB() ) )
225+
{
226+
IOFunctions.println( "file names are not equal. Stopping." );
227+
return false;
228+
}
229+
230+
}
231+
}
232232

233233
return true;
234234
}
@@ -293,6 +293,7 @@ public static SmartSPIMMetaData parseMetaDataFile( final URI md )
293293
IOFunctions.println( "number of tiles: " + tiles.size() );
294294

295295
metadata.channels = SmartSPIM_Tile.channels( tiles.values() );
296+
metadata.tileMap = SmartSPIM_Tile.tileMap( tiles.values() );
296297
metadata.xTileLocations = SmartSPIM_Tile.xTileLocations( tiles.values() );
297298
metadata.yTileLocations = SmartSPIM_Tile.yTileLocations( tiles.values() );
298299
metadata.zOffsets = SmartSPIM_Tile.zOffsets( tiles.values() );
@@ -380,6 +381,7 @@ public static class SmartSPIMMetaData
380381
public List<Long> xTileLocations;
381382
public List<Long> yTileLocations;
382383
public List<Long> zOffsets;
384+
public HashMap<Long, Set<Long>> tileMap;
383385

384386
public SmartSPIMMetaData( final URI metadataFile ) throws SpimDataIOException
385387
{
@@ -472,11 +474,27 @@ private static class SmartSPIM_Tile
472474
public int Skip;
473475
public int Filter;
474476

475-
public static List< Long > xTileLocations( final Collection< SmartSPIM_Tile > tiles )
477+
public static HashMap<Long, Set<Long>> tileMap( final Collection< SmartSPIM_Tile > tiles )
476478
{
477-
return tiles.stream().map( t -> t.X ).distinct().sorted().collect(Collectors.toList());
479+
HashMap<Long, Set<Long>> getTiles = new HashMap<Long, Set<Long>>(xTileLocations(tiles).size());
480+
for (SmartSPIM_Tile t : tiles) {
481+
if (t.Skip == 1) {
482+
getTiles.computeIfAbsent(t.X, k -> new HashSet<>()).add(t.Y);
483+
}
484+
}
485+
486+
System.out.println("Valid X/Y Combos:");
487+
getTiles.forEach((key, value) -> {
488+
System.out.println("X: " + key + ", Ys: " + value);
489+
});
490+
return getTiles;
478491
}
479492

493+
public static List< Long > xTileLocations( final Collection< SmartSPIM_Tile > tiles )
494+
{
495+
return tiles.stream().map( t -> t.X ).distinct().sorted().collect(Collectors.toList());
496+
}
497+
480498
public static List< Long > yTileLocations( final Collection< SmartSPIM_Tile > tiles )
481499
{
482500
return tiles.stream().map( t -> t.Y ).distinct().sorted().collect(Collectors.toList());
@@ -502,7 +520,7 @@ public static void main( String[] args )
502520
{
503521
//parseMetaDataFile( URITools.toURI("/Users/preibischs/Documents/Janelia/Projects/BigStitcher/SmartSPIM/metadata.json"));
504522
SmartSPIMMetaData metadata =
505-
parseMetaDataFile( URITools.toURI( "/Volumes/johnsonlab/LM/20241031_11_59_44_RJ_mouse_2_vDisco_hindleg_right_Destripe_DONE/metadata.json") );
523+
parseMetaDataFile( URITools.toURI( "/Volumes/johnsonlab/LM/20240826_15_33_26_RJ_mouse_1_anterior_ventral_Destripe_DONE/metadata.json") );
506524

507525
//populateImageSize( metadata, true );
508526
}

0 commit comments

Comments
 (0)