55import java .io .IOException ;
66import java .util .ArrayList ;
77import java .util .Collection ;
8- import java .util .Date ;
98import java .util .HashMap ;
109import java .util .HashSet ;
1110import java .util .List ;
3433import net .imglib2 .realtransform .AffineTransform2D ;
3534import net .imglib2 .util .Pair ;
3635import net .imglib2 .util .ValuePair ;
36+ import org .apache .logging .log4j .Logger ;
37+ import util .LoggerUtil ;
38+ import util .Threads ;
3739
3840public class GlobalOpt
3941{
42+ private static final Logger logger = LoggerUtil .getLogger ();
43+
4044 public static double centerOfMassDistance ( final STData dataA , final STData dataB , final AffineTransform2D transformA , final AffineTransform2D transformB )
4145 {
4246 final Interval intervalA = dataA .getRenderInterval ();
@@ -115,7 +119,7 @@ protected static ArrayList< Alignment > loadPairwiseAlignments( final String fil
115119 }
116120 catch (IOException e )
117121 {
118- e . printStackTrace ( );
122+ logger . error ( "Could not load pairwise alignments" , e );
119123 return null ;
120124 }
121125
@@ -171,26 +175,25 @@ public static void iterativeGlobalOpt(
171175 {
172176 int unaligned = tc .preAlign ().size ();
173177 if ( unaligned > 0 )
174- System . out . println ( "(" + new Date ( System . currentTimeMillis () ) + "): pre -aligned all tiles but " + unaligned );
178+ logger . info ( "Pre -aligned all tiles but {}" , unaligned );
175179 else
176- System . out . println ( "(" + new Date ( System . currentTimeMillis () ) + "): prealigned all tiles" );
180+ logger . info ( "Prealigned all tiles" );
177181
178182 TileUtil .optimizeConcurrently (
179183 new ErrorStatistic ( maxPlateauwidth + 1 ), maxAllowedError , maxIterations , maxPlateauwidth , 1.0f ,
180184 tc , tc .getTiles (), tc .getFixedTiles (), numThreads );
181185
182- System . out . println ( "(" + new Date ( System . currentTimeMillis () ) + "): Global optimization of " + tc .getTiles ().size ());
183- System . out . println ( "(" + new Date ( System . currentTimeMillis () ) + "): Avg Error: " + tc .getError () + "px" );
184- System . out . println ( "(" + new Date ( System . currentTimeMillis () ) + "): Min Error: " + tc .getMinError () + "px" );
185- System . out . println ( "(" + new Date ( System . currentTimeMillis () ) + "): Max Error: " + tc .getMaxError () + "px" );
186+ logger . info ( " Global optimization of {}" , tc .getTiles ().size ());
187+ logger . info ( " Avg Error: {}px" , tc .getError ());
188+ logger . info ( " Min Error: {}px" , tc .getMinError ());
189+ logger . info ( " Max Error: {}px" , tc .getMaxError ());
186190
187191 // give some time for the output
188- try { Thread .sleep ( 50 ); } catch ( Exception e ) {}
192+ try { Thread .sleep ( 50 ); } catch ( Exception ignored ) {}
189193 }
190194 catch (Exception e )
191195 {
192- System .out .println ( "Global optimization failed, please report this bug: " + e );
193- e .printStackTrace ();
196+ logger .error ( "Global optimization failed, please report this bug: " , e );
194197 return ;
195198 }
196199
@@ -282,7 +285,7 @@ public static boolean isConverged(
282285 worstTile1 .removeConnectedTile ( worstTile2 );
283286 worstTile2 .removeConnectedTile ( worstTile1 );
284287
285- System . out . println ( new Date ( System . currentTimeMillis () ) + ": Removed link from " + tileToIndex .get ( worstTile1 ) + " to " + tileToIndex .get ( worstTile2 ) );
288+ logger . info ( " Removed link from {} to {}" , tileToIndex .get (worstTile1 ), tileToIndex .get (worstTile2 ) );
286289
287290 return new ValuePair <>( worstTile1 , worstTile2 );
288291 }
@@ -291,19 +294,10 @@ public static void main( String[] args ) throws IOException
291294 {
292295 new ImageJ ();
293296
294- final int debugA = 0 ;
295- int debugB = 4 ;
296-
297297 final String path = Path .getPath ();
298298
299299 final ArrayList < Alignment > alignments = loadPairwiseAlignments ( new File ( path + "/slide-seq" , "alignments2" ).getAbsolutePath (), false );
300300
301- // the inverse transformations were stored, upsi
302- //for ( final Alignment al : alignments )
303- // al.t = al.t.inverse();
304-
305- //final String[] pucks = new String[] { "Puck_180602_20", "Puck_180602_18", "Puck_180602_17", "Puck_180602_16", "Puck_180602_15", "Puck_180531_23", "Puck_180531_22", "Puck_180531_19", "Puck_180531_18", "Puck_180531_17", "Puck_180531_13", "Puck_180528_22", "Puck_180528_20" };
306-
307301 final ExecutorService service = Executors .newFixedThreadPool (8 );
308302 final SpatialDataContainer container = SpatialDataContainer .openForReading (path + "slide-seq-normalized-gzip3.n5" , service );
309303 final List <String > pucks = container .getDatasets ();
@@ -314,35 +308,13 @@ public static void main( String[] args ) throws IOException
314308
315309 for ( final Alignment align : alignments )
316310 if ( align .i < pucks .size () && align .j < pucks .size () )
317- System .out .println ( align .i + "-" + align .j + ": " + align .t );
318-
319- /*
320- i=0: 0=0.0 1=0.024038337709212782 2=0.24492487553469394 3=0.1518118833959881 4=0.7241020145787477 5=0.1306794304704525 6=0.15222925121638156 7=0.15483774054692553 8=0.132491429163626 9=0.17711581870553708 10=0.08701363466375361 11=0.2045784760110544 12=0.20891249466281947
321- i=1: 0=0.024038337709212782 1=0.0 2=0.3330466142561688 3=0.11319724753860656 4=0.10022550806834965 5=0.20877708923578545 6=0.11832271709488193 7=0.07353720095912314 8=0.1713950715270506 9=0.09502724052349071 10=0.23944240649678283 11=0.11694349640166943 12=0.11195066945693335
322- i=2: 0=0.24492487553469394 1=0.3330466142561688 2=0.0 3=0.24969917436088443 4=0.17472813760575273 5=0.9788951614909751 6=0.17426245380946803 7=0.18054806935102374 8=0.09074454325647692 9=0.09496693464673195 10=0.10267048518938668 11=0.1075661352374083 12=0.12349217922514331
323- i=3: 0=0.1518118833959881 1=0.11319724753860656 2=0.24969917436088443 3=0.0 4=0.20776253762129704 5=0.3521493379456508 6=0.19462129769496608 7=0.03320550904928819 8=0.04381501333935987 9=0.02137252255928331 10=0.0 11=0.04980400301525422 12=0.004242569157942368
324- i=4: 0=0.7241020145787477 1=0.10022550806834965 2=0.17472813760575273 3=0.20776253762129704 4=0.0 5=0.2760105640202167 6=0.5531206597483922 7=0.07913515105826611 8=0.15917311091873323 9=0.25045172666096027 10=0.16054736849735818 11=0.06656905561406037 12=0.0763166146516399
325- i=5: 0=0.1306794304704525 1=0.20877708923578545 2=0.9788951614909751 3=0.3521493379456508 4=0.2760105640202167 5=0.0 6=0.6588552463927722 7=0.01900772579346503 8=0.1335874659752252 9=0.1277205212237738 10=0.08614429525971219 11=0.09772324217675286 12=0.01858521788859697
326- i=6: 0=0.15222925121638156 1=0.11832271709488193 2=0.17426245380946803 3=0.19462129769496608 4=0.5531206597483922 5=0.6588552463927722 6=0.0 7=0.026002077904843646 8=0.1409801668617941 9=0.09114859275656546 10=0.31376868024657656 11=0.07260773747676567 12=4.418234511038576E-4
327- i=7: 0=0.15483774054692553 1=0.07353720095912314 2=0.18054806935102374 3=0.03320550904928819 4=0.07913515105826611 5=0.01900772579346503 6=0.026002077904843646 7=0.0 8=0.2876741736681163 9=0.06181190408928276 10=0.10964337542752722 11=0.2132312584540062 12=0.0675333286312243
328- i=8: 0=0.132491429163626 1=0.1713950715270506 2=0.09074454325647692 3=0.04381501333935987 4=0.15917311091873323 5=0.1335874659752252 6=0.1409801668617941 7=0.2876741736681163 8=0.0 9=1.0 10=0.15129672985645543 11=0.28507782241080326 12=0.4203623375451118
329- i=9: 0=0.17711581870553708 1=0.09502724052349071 2=0.09496693464673195 3=0.02137252255928331 4=0.25045172666096027 5=0.1277205212237738 6=0.09114859275656546 7=0.06181190408928276 8=1.0 9=0.0 10=0.09688531350422797 11=0.35687450831352985 12=0.38860932836273004
330- i=10: 0=0.08701363466375361 1=0.23944240649678283 2=0.10267048518938668 3=0.0 4=0.16054736849735818 5=0.08614429525971219 6=0.31376868024657656 7=0.10964337542752722 8=0.15129672985645543 9=0.09688531350422797 10=0.0 11=0.11920034539333373 12=0.2483245130454527
331- i=11: 0=0.2045784760110544 1=0.11694349640166943 2=0.1075661352374083 3=0.04980400301525422 4=0.06656905561406037 5=0.09772324217675286 6=0.07260773747676567 7=0.2132312584540062 8=0.28507782241080326 9=0.35687450831352985 10=0.11920034539333373 11=0.0 12=0.48298694045995
332- i=12: 0=0.20891249466281947 1=0.11195066945693335 2=0.12349217922514331 3=0.004242569157942368 4=0.0763166146516399 5=0.01858521788859697 6=4.418234511038576E-4 7=0.0675333286312243 8=0.4203623375451118 9=0.38860932836273004 10=0.2483245130454527 11=0.48298694045995 12=0.0
333-
334- c(i)=1: 0=302.8970299336632 1=0.0 2=1966.7125790780851 3=1127.5798466482315 4=1018.3643858073019 5=1244.0948936063103 6=1918.835171680812 7=1243.2553900055561 8=2550.2704505567276 9=250.05292046699788 10=2050.432852579864 11=755.2194098362946 12=1774.572922744189
335-
336- */
311+ logger .info ("{}-{}: {}" , align .i , align .j , align .t );
337312
338313 final List < Pair < STData , AffineTransform2D > > initialdata = new ArrayList <>();
339314
340- for ( int i = 0 ; i < puckData .size (); ++i )
341- initialdata .add (new ValuePair <>(puckData .get (i ).data (), new AffineTransform2D ()));
342-
343- // initialdata.add( new ValuePair<>( puckData.get( debugA ), new AffineTransform2D() ) );
344- // for ( debugB = debugA + 1; debugB < 11; ++debugB )
345- // initialdata.add( new ValuePair<>(puckData.get( debugB ), Alignment.getAlignment( alignments, debugA, debugB ).t ) );
315+ for (STDataAssembly puckDatum : puckData ) {
316+ initialdata .add (new ValuePair <>(puckDatum .data (), new AffineTransform2D ()));
317+ }
346318
347319 AlignTools .visualizeList ( initialdata );
348320 //visualizePair( puckData.get( debugA ), puckData.get( debugB ), new AffineTransform2D(), Alignment.getAlignment( alignments, debugA, debugB ).t );
@@ -365,17 +337,12 @@ public static void main( String[] args ) throws IOException
365337 {
366338 final Alignment align = Alignment .getAlignment ( alignments , i , j );
367339
368- //if ( align.quality < 0.6 )
369- // continue;
370-
371- //quality[ i ][ j ] = quality[ j ][ i ] = align.quality;
372-
373340 quality [i ][j ] = quality [j ][i ] = 1.0 / centerOfMassDistance (puckData .get (i ).data (), puckData .get (j ).data (), new AffineTransform2D (), Alignment .getAlignment (alignments , i , j ).t );
374341
375342 maxQuality = Math .max ( maxQuality , quality [ i ][ j ] );
376343 minQuality = Math .min ( minQuality , quality [ i ][ j ] );
377344
378- System . out . println ( "Connecting " + i + "-" + j );
345+ logger . debug ( "Connecting {}-{}" , i , j );
379346
380347 final STData stDataA = puckData .get (i ).data ();
381348 final STData stDataB = puckData .get (j ).data ();
@@ -415,8 +382,8 @@ public static void main( String[] args ) throws IOException
415382 }
416383 }
417384
418- System . out . println ( "minQ: " + minQuality );
419- System . out . println ( "maxQ: " + maxQuality );
385+ logger . debug ( "minQ: {}" , minQuality );
386+ logger . debug ( "maxQ: {}" , maxQuality );
420387
421388 for ( int i = 0 ; i < pucks .size (); ++i )
422389 {
@@ -434,13 +401,13 @@ public static void main( String[] args ) throws IOException
434401 System .out .println ();
435402 }
436403
437- System . out . println ( dataToTile .keySet ().size () + " / " + pucks .size () );
438- System . out . println ( tileToData .keySet ().size () + " / " + pucks .size () );
404+ logger . debug ( "{} / {}" , dataToTile .keySet ().size (), pucks .size ());
405+ logger . debug ( "{} / {}" , tileToData .keySet ().size (), pucks .size ());
439406
440407 //System.exit( 0 );
441408
442409 for ( int i = 0 ; i < pucks .size (); ++i )
443- System . out . println ( puckData .get ( i ) + ": " + dataToTile .get ( puckData .get ( i ) ) );
410+ logger . debug ( "{}: {}" , puckData .get (i ), dataToTile .get (puckData .get (i )) );
444411
445412 final TileConfiguration tileConfig = new TileConfiguration ();
446413
@@ -459,74 +426,24 @@ public static void main( String[] args ) throws IOException
459426 50 ,
460427 tileToIndex ,
461428 quality ,
462- util . Threads .numThreads () );
429+ Threads .numThreads ());
463430
464431 for ( final Pair < Tile < ? >, Tile < ? > > removed : removedInconsistentPairs )
465- System .out .println ( "Removed " + tileToIndex .get ( removed .getA () ) + " to " + tileToIndex .get ( removed .getB () ) + " (" + tileToData .get ( removed .getA () ) + " to " + tileToData .get ( removed .getB () ) + ")" );
466-
467- /*
468- try
469- {
470- tileConfig.preAlign();
471-
472- TileUtil.optimizeConcurrently(
473- new ErrorStatistic( 500 + 1 ),
474- 30,
475- 3000,
476- 500,
477- 1.0,
478- tileConfig,
479- tileConfig.getTiles(),
480- tileConfig.getFixedTiles(),
481- 30 );
482-
483- System.out.println( " avg=" + tileConfig.getError() + ", min=" + tileConfig.getMinError() + ", max=" + tileConfig.getMaxError() );
484- }
485- catch ( Exception e )
486- {
487- System.out.println( ": Could not solve, cause: " + e );
488- e.printStackTrace();
489- }
490- */
432+ logger .info ("Removed {} to {} ({} to {})" ,
433+ tileToIndex .get (removed .getA ()), tileToIndex .get (removed .getB ()), tileToData .get (removed .getA ()), tileToData .get (removed .getB ()));
491434
492435 final List < Pair < STData , AffineTransform2D > > data = new ArrayList <>();
493436
494437 for ( int i = 0 ; i < pucks .size (); ++i )
495438 {
496- System . out . println ( puckData .get ( i ) + ": " + dataToTile .get ( puckData .get ( i ) ).getModel () );
439+ logger . debug ( "{}: {}" , puckData .get (i ), dataToTile .get (puckData .get (i ) ).getModel ());
497440
498441 final RigidModel2D model = dataToTile .get ( puckData .get ( i ) ).getModel ();
499- /*
500- // m00, m10, m01, m11, m02, m12
501- final double[] array = new double[ 6 ];
502442
503- model.toArray(array);
504-
505- final AffineTransform2D t = new AffineTransform2D();
506- t.set( array[ 0 ], array[ 2 ], array[ 4 ], array[ 1 ], array[ 3 ], array[ 5 ] );
507- */
508443 data .add (new ValuePair <>(puckData .get (i ).data (), AlignTools .modelToAffineTransform2D (model )));
509444 }
510445
511446 AlignTools .visualizeList ( data );
512447 service .shutdown ();
513- /*
514- final RigidModel2D modelA = dataToTile.get( puckData.get( debugA ) ).getModel();
515- final RigidModel2D modelB = dataToTile.get( puckData.get( debugB ) ).getModel();
516-
517- // m00, m10, m01, m11, m02, m12
518- final double[] dataA = new double[ 6 ];
519- final double[] dataB = new double[ 6 ];
520-
521- modelA.toArray(dataA);
522- modelB.toArray(dataB);
523-
524- final AffineTransform2D tA = new AffineTransform2D();
525- final AffineTransform2D tB = new AffineTransform2D();
526-
527- tA.set( dataA[ 0 ], dataA[ 2 ], dataA[ 4 ], dataA[ 1 ], dataA[ 3 ], dataA[ 5 ] );
528- tB.set( dataB[ 0 ], dataB[ 2 ], dataB[ 4 ], dataB[ 1 ], dataB[ 3 ], dataB[ 5 ] );
529-
530- visualizePair( puckData.get( debugA ), puckData.get( debugB ), tA.inverse(), tB.inverse() );*/
531448 }
532449}
0 commit comments