@@ -445,6 +445,79 @@ def get_twin(j2, j1):
445445 return group1, group2
446446
447447
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+
448521def quick_compare():
449522 parser = EddyParser(
450523 "Tool to have a quick comparison between several identification"
@@ -478,23 +551,17 @@ def quick_compare():
478551
479552 ref = EddiesObservations.load_file(args.ref, **kw)
480553 print(f"[ref] {args.ref} -> {len(ref)} obs")
481- groups_ref, groups_other = dict(), dict()
482554 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
496555
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+ )
497563 if args.path_out is not None:
564+ groups_ref, groups_other = run_compare(ref, others, **kwargs)
498565 if not exists(args.path_out):
499566 mkdir(args.path_out)
500567 for i, other_ in enumerate(args.others):
@@ -508,51 +575,4 @@ def quick_compare():
508575 basename_ = f"ref_{k}.nc"
509576 ref.index(v).write_file(filename=f"{dirname_}/{basename_}")
510577 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