2727import java .io .IOException ;
2828import java .lang .reflect .Type ;
2929import 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 .*;
3631import java .util .Map .Entry ;
3732import 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