diff --git a/Common/util_eddies.py b/Common/util_eddies.py index abf988814e0d565a1989568f33eb03c0bb64c2e9..abf3a903acab48161b220295ad14300517b60ad2 100644 --- a/Common/util_eddies.py +++ b/Common/util_eddies.py @@ -253,3 +253,22 @@ def other_orient(orientation): return "Anticyclones" else: return "Cyclones" + +def node_to_date_eddy(node_index, e_overestim, only_date = False): + """Convert from node identification in graph to eddy identification in + shapefiles. Return date_index or (date_index, eddy_index). + + """ + k = (node_index - 1) // e_overestim + + if only_date: + return k + else: + return k, node_index - k * e_overestim + +def date_eddy_to_node(date, eddy_index, e_overestim): + """Convert from eddy identification in shapefiles to node + identification in graph. + + """ + return date * e_overestim + eddy_index diff --git a/Inst_eddies/Analysis/eddy_dump.py b/Inst_eddies/Analysis/eddy_dump.py index 6f1ca5d0bb4c95330a284c2a936a626a2f9a479d..a85ae691c228d18c1e0ca0f314cb5ef1f5a03ecf 100755 --- a/Inst_eddies/Analysis/eddy_dump.py +++ b/Inst_eddies/Analysis/eddy_dump.py @@ -11,7 +11,6 @@ from os import path import pprint import sys import util_eddies -import report_graph import json parser = argparse.ArgumentParser() @@ -28,7 +27,7 @@ if args.ishape: else: if args.node: with open("e_overestim.txt") as f: e_overestim = int(f.read()) - date, eddy_index = report_graph.node_to_date_eddy(args.node, + date, eddy_index = util_eddies.node_to_date_eddy(args.node, e_overestim) else: reply = input("date, eddy_index = ? ").split(",") diff --git a/Overlap/plot_components.py b/Overlap/plot_components.py index 15dd389fae3cdc7543199407a7a41555a88d3d31..d1b4c738b44551d522d159ca497d3555bd40d7d2 100755 --- a/Overlap/plot_components.py +++ b/Overlap/plot_components.py @@ -8,6 +8,7 @@ from matplotlib import patches import cartopy.crs as ccrs import report_graph import sys +import util_eddies color_iter = itertools.cycle(('#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', @@ -37,8 +38,8 @@ def is_node_type(G, n, label): elif label == "important": return G.in_degree[n] == 0 or G.out_degree[n] == 0 or G.degree[n] >= 3 elif label[0] == "date": - return report_graph.node_to_date_eddy(n, G.graph["e_overestim"], - only_date = True) == label[1] + return util_eddies.node_to_date_eddy(n, G.graph["e_overestim"], + only_date = True) == label[1] elif label[0] == "node": return n in label[1] else: @@ -100,7 +101,6 @@ def animate_nbunch(G, nbunch): if __name__ == "__main__": import argparse from os import path - import util_eddies import time parser = argparse.ArgumentParser(description = __doc__) diff --git a/Overlap/report_graph.py b/Overlap/report_graph.py index 4ca8a169591f952d3dcfd4d194d77411ded1e87f..49d1925c0505e0efef649c45eeb66b730fd2f8ad 100755 --- a/Overlap/report_graph.py +++ b/Overlap/report_graph.py @@ -8,25 +8,6 @@ import os import json import util_eddies -def node_to_date_eddy(node_index, e_overestim, only_date = False): - """Convert from node identification in graph to eddy identification in - shapefiles. Return date_index or (date_index, eddy_index). - - """ - k = (node_index - 1) // e_overestim - - if only_date: - return k - else: - return k, node_index - k * e_overestim - -def date_eddy_to_node(date, eddy_index, e_overestim): - """Convert from eddy identification in shapefiles to node - identification in graph. - - """ - return date * e_overestim + eddy_index - def read_eddy_graph(edgelist, shpc_dir = None, orientation = "Cyclones"): if os.access(edgelist, os.R_OK): G = nx.read_edgelist(edgelist, create_using = nx.DiGraph, @@ -50,7 +31,7 @@ def set_attribute(G, SHPC, orientation): if G.number_of_nodes() <= SHPC.get_n_shapes(0, orientation) / 100: for n in G: - date_index, eddy_index = node_to_date_eddy(n, + date_index, eddy_index = util_eddies.node_to_date_eddy(n, G.graph["e_overestim"]) ishape = SHPC.comp_ishape(date_index, eddy_index, 0, orientation) shape_rec = reader.shapeRecord(ishape) @@ -59,7 +40,7 @@ def set_attribute(G, SHPC, orientation): ssh = shape_rec.record.ssh) else: for shape_rec in reader: - n = date_eddy_to_node(shape_rec.record.date, + n = util_eddies.date_eddy_to_node(shape_rec.record.date, shape_rec.record.eddy_index, G.graph["e_overestim"]) @@ -78,7 +59,7 @@ def partition_graph_date(A, e_overestim): my_subgraphs = {} for n in A.iternodes(): - date_index = node_to_date_eddy(int(n), e_overestim, only_date = True) + date_index = util_eddies.node_to_date_eddy(int(n), e_overestim, only_date = True) if date_index in my_subgraphs: my_subgraphs[date_index].append(n) @@ -146,11 +127,11 @@ if __name__ == "__main__": if len_H >= 1: # First and last dates: node_index = min(G.nodes) - my_date = node_to_date_eddy(node_index, G.graph["e_overestim"], + my_date = util_eddies.node_to_date_eddy(node_index, G.graph["e_overestim"], only_date = True) print("First date:", my_date) node_index = max(G.nodes) - my_date = node_to_date_eddy(node_index, G.graph["e_overestim"], + my_date = util_eddies.node_to_date_eddy(node_index, G.graph["e_overestim"], only_date = True) print("Last date:", my_date) diff --git a/Trajectories/cost_function.py b/Trajectories/cost_function.py index 86feaaedcec54a18b2c8c6b90ee6dc780670f1da..f4b5efd42e29483e041df07af8e265a83ae47c60 100755 --- a/Trajectories/cost_function.py +++ b/Trajectories/cost_function.py @@ -21,7 +21,6 @@ script. import graph_tool import time import math -import report_graph import util_eddies import argparse @@ -67,7 +66,7 @@ def node_to_prop(node_list, e_overestim, SHPC, orientation): properties = [] for n in node_list: - date_index, eddy_index = report_graph.node_to_date_eddy(n, e_overestim) + date_index, eddy_index = util_eddies.node_to_date_eddy(n, e_overestim) i_slice = SHPC.get_slice(date_index) ishape = SHPC.comp_ishape(date_index, eddy_index, i_slice, orientation) shapeRec = SHPC.get_reader(i_slice, orientation, "extremum")\ diff --git a/Trajectories/draw_segments.py b/Trajectories/draw_segments.py index 215976e8e3bd52d5d28a61003538547047db8725..7f6663e6809d556040c56409dfd02e5fe3866b96 100755 --- a/Trajectories/draw_segments.py +++ b/Trajectories/draw_segments.py @@ -15,6 +15,7 @@ import argparse import report_graph import itertools +import util_eddies parser = argparse.ArgumentParser() parser.add_argument("input_file", help = "Graph-tool file") parser.add_argument("output_file", help = "Graphviz file") @@ -54,7 +55,7 @@ if args.t: except KeyError: break else: - date_index = report_graph.node_to_date_eddy(segment, + date_index = util_eddies.node_to_date_eddy(segment, g_in.gp.e_overestim, only_date = True) n.attr["label"] = f"{segment} in {i}\n({date_index})" @@ -62,7 +63,7 @@ if args.t: else: for n in g_out.iternodes(): segment = int(n) - date_index = report_graph.node_to_date_eddy(segment, + date_index = util_eddies.node_to_date_eddy(segment, g_in.gp.e_overestim, only_date = True) n.attr["label"] = f"{segment}\n({date_index})" diff --git a/Trajectories/filter_traj.py b/Trajectories/filter_traj.py index 5f00cedfa9b114faa054a662568a888db85c14d4..354ed35791906fdfc4b723e8d24bcfac1cf61cb7 100755 --- a/Trajectories/filter_traj.py +++ b/Trajectories/filter_traj.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 import json -import report_graph +import util_eddies import bisect import sys @@ -10,7 +10,7 @@ if len(sys.argv) != 4: last_date = int(sys.argv[1]) with open(sys.argv[2]) as f: expanded_traj = json.load(f) -last_node = report_graph.date_eddy_to_node( +last_node = util_eddies.date_eddy_to_node( last_date, expanded_traj["e_overestim"], expanded_traj["e_overestim"]) filt_traj = [] diff --git a/Trajectories/plot_traj.py b/Trajectories/plot_traj.py index e65aadac843276b97ba7763261d7f8ad9525aa81..76368d949911e17e8ace3544fa69742bbdbea89b 100755 --- a/Trajectories/plot_traj.py +++ b/Trajectories/plot_traj.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -import report_graph +import util_eddies import random import numpy as np @@ -14,7 +14,7 @@ def get_extr_coord(traj, e_overestim, SHPC, orientation): y = [] for node in traj: - date_index, eddy_index = report_graph.node_to_date_eddy(node, + date_index, eddy_index = util_eddies.node_to_date_eddy(node, e_overestim) i_slice = SHPC.get_slice(date_index) ishape = SHPC.comp_ishape(date_index, eddy_index, i_slice, orientation) @@ -42,9 +42,9 @@ def get_duration(expanded_traj): duration_list = [] for traj in expanded_traj["traj"]: - init_date = report_graph.node_to_date_eddy( + init_date = util_eddies.node_to_date_eddy( traj[0], expanded_traj["e_overestim"], only_date = True) - final_date = report_graph.node_to_date_eddy( + final_date = util_eddies.node_to_date_eddy( traj[- 1], expanded_traj["e_overestim"], only_date = True) duration_list.append(final_date - init_date) diff --git a/Trajectories/trajectories.py b/Trajectories/trajectories.py index 8458a3abd7792deb2797f440b3308a1108718921..bfc2a1e8a64898d17d1b843b5aef1d06962fbd39 100755 --- a/Trajectories/trajectories.py +++ b/Trajectories/trajectories.py @@ -16,7 +16,7 @@ import graph_tool from graph_tool import topology import json import sys -import report_graph +import util_eddies import numpy as np import time @@ -101,9 +101,9 @@ for n in topology.topological_sort(g): # date of the first eddy in segment n and the date of # splitting is the date of the last eddy in segment # n1. - date_merging = report_graph.node_to_date_eddy( + date_merging = util_eddies.node_to_date_eddy( g.vp.name[n], g.gp.e_overestim, only_date = True) - date_splitting = report_graph.node_to_date_eddy( + date_splitting = util_eddies.node_to_date_eddy( g.vp.inst_eddies[n1][- 1], g.gp.e_overestim, only_date = True)