@@ -445,6 +445,79 @@ def get_twin(j2, j1):
445
445
return group1 , group2
446
446
447
447
448
+ def run_compare (ref , others , invalid = 1 , low = 20 , high = 80 , intern = False , ** kwargs ):
449
+ groups_ref , groups_other = dict (), dict ()
450
+ for i , (k , other ) in enumerate (others .items ()):
451
+ print (f"[{ i } ] { k } -> { len (other )} obs" )
452
+ gr1 , gr2 = get_group (
453
+ ref ,
454
+ other ,
455
+ * ref .match (other , intern = intern , ** kwargs ),
456
+ invalid = invalid ,
457
+ low = low ,
458
+ high = high ,
459
+ )
460
+ groups_ref [k ] = gr1
461
+ groups_other [k ] = gr2
462
+ return groups_ref , groups_other
463
+
464
+
465
+ def display_compare (
466
+ ref , others , invalid = 1 , low = 20 , high = 80 , area = False , intern = False , ** kwargs
467
+ ):
468
+ gr_ref , gr_others = run_compare (
469
+ ref , others , invalid = invalid , low = low , high = high , intern = intern , ** kwargs
470
+ )
471
+
472
+ def display (value , ref = None ):
473
+ outs = list ()
474
+ for v in value :
475
+ if ref :
476
+ if area :
477
+ outs .append (f"{ v / ref * 100 :.1f} % ({ v :.1f} Mkm²)" )
478
+ else :
479
+ outs .append (f"{ v / ref * 100 :.1f} % ({ v } )" )
480
+ else :
481
+ outs .append (v )
482
+ if area :
483
+ return "" .join ([f"{ v :^16} " for v in outs ])
484
+ else :
485
+ return "" .join ([f"{ v :^15} " for v in outs ])
486
+
487
+ def get_values (v , dataset ):
488
+ if area :
489
+ area_ = dataset ["speed_area" if intern else "effective_area" ]
490
+ return [area_ [v_ ].sum () / 1e12 for v_ in v .values ()]
491
+ else :
492
+ return [
493
+ v_ .sum () if v_ .dtype == "bool" else v_ .shape [0 ] for v_ in v .values ()
494
+ ]
495
+
496
+ labels = dict (
497
+ high = f"{ high :0.0f} <= high" ,
498
+ low = f"{ invalid :0.0f} <= low < { low :0.0f} " ,
499
+ )
500
+
501
+ keys = [labels .get (key , key ) for key in list (gr_ref .values ())[0 ].keys ()]
502
+ print (" " , display (keys ))
503
+ if area :
504
+ ref_ = ref ["speed_area" if intern else "effective_area" ].sum () / 1e12
505
+ else :
506
+ ref_ = len (ref )
507
+ for i , v in enumerate (gr_ref .values ()):
508
+ print (f"[{ i :2} ] " , display (get_values (v , ref ), ref = ref_ ))
509
+
510
+ print (" Point of view of study dataset" )
511
+ print (" " , display (keys ))
512
+ for i , (k , v ) in enumerate (gr_others .items ()):
513
+ other = others [k ]
514
+ if area :
515
+ ref_ = other ["speed_area" if intern else "effective_area" ].sum () / 1e12
516
+ else :
517
+ ref_ = len (other )
518
+ print (f"[{ i :2} ] " , display (get_values (v , other ), ref = ref_ ))
519
+
520
+
448
521
def quick_compare ():
449
522
parser = EddyParser (
450
523
"Tool to have a quick comparison between several identification"
@@ -478,23 +551,17 @@ def quick_compare():
478
551
479
552
ref = EddiesObservations .load_file (args .ref , ** kw )
480
553
print (f"[ref] { args .ref } -> { len (ref )} obs" )
481
- groups_ref , groups_other = dict (), dict ()
482
554
others = {other : EddiesObservations .load_file (other , ** kw ) for other in args .others }
483
- for i , other_ in enumerate (args .others ):
484
- other = others [other_ ]
485
- print (f"[{ i } ] { other_ } -> { len (other )} obs" )
486
- gr1 , gr2 = get_group (
487
- ref ,
488
- other ,
489
- * ref .match (other , intern = args .intern , minimal_area = args .minimal_area ),
490
- invalid = args .invalid ,
491
- low = args .low ,
492
- high = args .high ,
493
- )
494
- groups_ref [other_ ] = gr1
495
- groups_other [other_ ] = gr2
496
555
556
+ kwargs = dict (
557
+ invalid = args .invalid ,
558
+ low = args .low ,
559
+ high = args .high ,
560
+ intern = args .intern ,
561
+ minimal_area = args .minimal_area ,
562
+ )
497
563
if args .path_out is not None :
564
+ groups_ref , groups_other = run_compare (ref , others , ** kwargs )
498
565
if not exists (args .path_out ):
499
566
mkdir (args .path_out )
500
567
for i , other_ in enumerate (args .others ):
@@ -508,51 +575,4 @@ def quick_compare():
508
575
basename_ = f"ref_{ k } .nc"
509
576
ref .index (v ).write_file (filename = f"{ dirname_ } /{ basename_ } " )
510
577
return
511
-
512
- def display (value , ref = None ):
513
- outs = list ()
514
- for v in value :
515
- if ref :
516
- if args .area :
517
- outs .append (f"{ v / ref * 100 :.1f} % ({ v :.1f} Mkm²)" )
518
- else :
519
- outs .append (f"{ v / ref * 100 :.1f} % ({ v } )" )
520
- else :
521
- outs .append (v )
522
- if args .area :
523
- return "" .join ([f"{ v :^16} " for v in outs ])
524
- else :
525
- return "" .join ([f"{ v :^15} " for v in outs ])
526
-
527
- def get_values (v , dataset ):
528
- if args .area :
529
- area = dataset ["speed_area" if args .intern else "effective_area" ]
530
- return [area [v_ ].sum () / 1e12 for v_ in v .values ()]
531
- else :
532
- return [
533
- v_ .sum () if v_ .dtype == "bool" else v_ .shape [0 ] for v_ in v .values ()
534
- ]
535
-
536
- labels = dict (
537
- high = f"{ args .high :0.0f} <= high" ,
538
- low = f"{ args .invalid :0.0f} <= low < { args .low :0.0f} " ,
539
- )
540
-
541
- keys = [labels .get (key , key ) for key in gr1 .keys ()]
542
- print (" " , display (keys ))
543
- if args .area :
544
- ref_ = ref ["speed_area" if args .intern else "effective_area" ].sum () / 1e12
545
- else :
546
- ref_ = len (ref )
547
- for i , v in enumerate (groups_ref .values ()):
548
- print (f"[{ i :2} ] " , display (get_values (v , ref ), ref = ref_ ))
549
-
550
- print (" Point of view of study dataset" )
551
- print (" " , display (keys ))
552
- for i , (k , v ) in enumerate (groups_other .items ()):
553
- other = others [k ]
554
- if args .area :
555
- ref_ = other ["speed_area" if args .intern else "effective_area" ].sum () / 1e12
556
- else :
557
- ref_ = len (other )
558
- print (f"[{ i :2} ] " , display (get_values (v , other ), ref = ref_ ))
578
+ display_compare (ref , others , ** kwargs , area = args .area )
0 commit comments