Coverage for python/gsfit/database_writers/tokamak_energy_mdsplus_new/map_results_to_database.py: 0%
184 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 13:12 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 13:12 +0000
1from typing import TYPE_CHECKING
3import numpy as np
5# from st40_database import GetData
7if TYPE_CHECKING:
8 from ...gsfit import Gsfit
9 from . import DatabaseWriterTokamakEnergyMDSplusNew
12def map_results_to_database(
13 self: "DatabaseWriterTokamakEnergyMDSplusNew",
14 gsfit_controller: "Gsfit",
15) -> None:
16 """Map the results to MDSplus structure.
17 `gsfit_controller.results` is a `NestedDict` object, which is a 1:1 mapping to the MDSplus structure.
18 This function will mutate the `gsfit_controller` object.
19 """
21 # Take class object out of the `gsfit_controller` object
22 pulseNo = gsfit_controller.pulseNo
23 settings = gsfit_controller.settings
24 plasma = gsfit_controller.plasma
25 bp_probes = gsfit_controller.bp_probes
26 flux_loops = gsfit_controller.flux_loops
27 dialoop = gsfit_controller.dialoop
28 rogowski_coils = gsfit_controller.rogowski_coils
29 passives = gsfit_controller.passives
30 coils = gsfit_controller.coils
31 pressure_sensors = gsfit_controller.pressure_sensors
32 results = gsfit_controller.results
34 # Plasma boundary
35 results["BOUNDARY"]["GEO_AXIS"]["R"] = plasma.get_array1(["global", "r_geo"])
36 results["BOUNDARY"]["GEO_AXIS"]["Z"] = plasma.get_array1(["global", "z_geo"])
37 results["BOUNDARY"]["MINOR_RADIUS"] = plasma.get_array1(["global", "r_minor"])
38 results["BOUNDARY"]["ELONGATION"] = plasma.get_array1(["global", "elongation"])
39 results["BOUNDARY"]["PSI"] = plasma.get_array1(["global", "psi_b"])
40 results["BOUNDARY"]["PSI_NORM"] = np.ones_like(results["BOUNDARY"]["PSI"]) # flux defining LCFS, SPIDER has `psi_norm = 0.9999`
41 results["BOUNDARY"]["OUTLINE"]["N"] = np.array(plasma.get_vec_usize(["p_boundary", "nbnd"]))
42 results["BOUNDARY"]["OUTLINE"]["R"] = plasma.get_array2(["p_boundary", "rbnd"])
43 results["BOUNDARY"]["OUTLINE"]["Z"] = plasma.get_array2(["p_boundary", "zbnd"])
44 results["BOUNDARY"]["BOUNDING"]["R"] = plasma.get_array1(["p_boundary", "bounding_r"])
45 results["BOUNDARY"]["BOUNDING"]["Z"] = plasma.get_array1(["p_boundary", "bounding_z"])
47 # Convergence
48 results["CONVERGENCE"]["GS_ERROR"] = plasma.get_array1(["global", "gs_error"])
49 results["CONVERGENCE"]["ITERATIONS_N"] = np.array(plasma.get_vec_usize(["global", "n_iter"])).astype(np.int32)
51 # Global
52 results["GLOBAL"]["CURRENT_CENT"]["R"] = plasma.get_array1(["global", "r_cur"])
53 # results["GLOBAL"]["CURRENT_CENT"]["VELOCITY_Z"] = plasma.get_array1(["global", "current_cent", "velocity_z"])
54 results["GLOBAL"]["CURRENT_CENT"]["Z"] = plasma.get_array1(["global", "z_cur"])
55 # results["GLOBAL"]["MAG_AXIS"]["B_FIELD_PHI"] = plasma.get_array1(["global", "bt_at_r_mag"])
56 results["GLOBAL"]["MAG_AXIS"]["R"] = plasma.get_array1(["global", "r_mag"])
57 results["GLOBAL"]["MAG_AXIS"]["Z"] = plasma.get_array1(["global", "z_mag"])
58 results["GLOBAL"]["AREA"] = plasma.get_array1(["global", "area"])
59 results["GLOBAL"]["BETA_N"] = plasma.get_array1(["global", "beta_n"])
60 results["GLOBAL"]["BETA_P_1"] = plasma.get_array1(["global", "beta_p_1"])
61 results["GLOBAL"]["BETA_P_2"] = plasma.get_array1(["global", "beta_p_2"])
62 results["GLOBAL"]["BETA_P_3"] = plasma.get_array1(["global", "beta_p_3"])
63 results["GLOBAL"]["BETA_T"] = plasma.get_array1(["global", "beta_t"])
64 # results["GLOBAL"]["BP_OMP"] = plasma.get_array1(["global", "bp_omp"])
65 results["GLOBAL"]["BT_VAC_RGEO"] = plasma.get_array1(["global", "bt_vac_at_r_geo"])
66 # results["GLOBAL"]["CONN_LENGTH"] = plasma.get_array1(["global", "conn_length"])
67 # results["GLOBAL"]["DELTA_R_SEP"] = plasma.get_array1(["global", "delta_r_sep"])
68 results["GLOBAL"]["DELTA_Z"] = plasma.get_array1(["global", "delta_z"])
69 results["GLOBAL"]["ENERGY_MHD"] = plasma.get_array1(["global", "w_mhd"]) # TODO: something wrong with energy calculation
70 # results["GLOBAL"]["FX"] = plasma.get_array1(["global", "fx"])
71 results["GLOBAL"]["IP"] = plasma.get_array1(["global", "ip"])
72 results["GLOBAL"]["I_ROD"] = plasma.get_array1(["global", "i_rod"])
73 results["GLOBAL"]["LI_1"] = plasma.get_array1(["global", "li_1"])
74 results["GLOBAL"]["LI_2"] = plasma.get_array1(["global", "li_2"])
75 results["GLOBAL"]["LI_3"] = plasma.get_array1(["global", "li_3"])
76 results["GLOBAL"]["PHI_DIA"] = plasma.get_array1(["global", "phi_dia"])
77 results["GLOBAL"]["PSI_MAG_AXIS"] = plasma.get_array1(["global", "psi_a"])
78 results["GLOBAL"]["Q_AXIS"] = plasma.get_array1(["global", "q0"])
79 results["GLOBAL"]["Q_95"] = plasma.get_array1(["global", "q95"])
80 results["GLOBAL"]["V_LOOP"] = plasma.get_array1(["global", "v_loop"])
81 results["GLOBAL"]["VOLUME"] = plasma.get_array1(["global", "plasma_volume"]) # TODO: something wrong with plasma volume
82 results["GLOBAL"]["XPT_DIVERTED"] = np.array(plasma.get_vec_bool(["global", "xpt_diverted"])).astype(np.int32)
84 # Profiles_1d, psi_norm
85 results["PROFILES_1D"]["PSI_NORM"]["AREA"] = plasma.get_array2(["profiles", "area"])
86 results["PROFILES_1D"]["PSI_NORM"]["AREA_PRIME"] = plasma.get_array2(["profiles", "area_prime"])
87 # results["PROFILES_1D"]["PSI_NORM"]["ELONGATION"] = plasma.get_array2(["profiles", "elongation"])
88 results["PROFILES_1D"]["PSI_NORM"]["F"] = plasma.get_array2(["profiles", "f"])
89 results["PROFILES_1D"]["PSI_NORM"]["FF_PRIME"] = plasma.get_array2(["profiles", "ff_prime"])
90 results["PROFILES_1D"]["PSI_NORM"]["FLUX_TOR"] = plasma.get_array2(["profiles", "flux_tor"])
91 results["PROFILES_1D"]["PSI_NORM"]["P_PRIME"] = plasma.get_array2(["profiles", "p_prime"])
92 results["PROFILES_1D"]["PSI_NORM"]["PRESSURE"] = plasma.get_array2(["profiles", "p"])
93 # results["PROFILES_1D"]["PSI_NORM"]["PSI"] = plasma.get_array2(["profiles", "psi"])
94 results["PROFILES_1D"]["PSI_NORM"]["Q"] = plasma.get_array2(["profiles", "q"])
95 results["PROFILES_1D"]["PSI_NORM"]["RHO_POL"] = plasma.get_array2(["profiles", "rho_pol"])
96 results["PROFILES_1D"]["PSI_NORM"]["RHO_TOR"] = plasma.get_array2(["profiles", "rho_tor"])
97 results["PROFILES_1D"]["PSI_NORM"]["PSI_NORM"] = plasma.get_array1(["profiles", "psi_n"])
98 results["PROFILES_1D"]["PSI_NORM"]["VOL"] = plasma.get_array2(["profiles", "vol"])
99 results["PROFILES_1D"]["PSI_NORM"]["VOL_PRIME"] = plasma.get_array2(["profiles", "vol_prime"])
101 # Mid-plane profiles
102 results["PROFILES_1D"]["R_MIDPLANE"]["PRESSURE"] = plasma.get_array2(["profiles", "mid_plane", "p"])
103 results["PROFILES_1D"]["R_MIDPLANE"]["R"] = plasma.get_array1(["profiles", "mid_plane", "r"])
105 # Profiles_2d
106 results["PROFILES_2D"]["B_FIELD_PHI"] = plasma.get_array3(["two_d", "bt"])
107 results["PROFILES_2D"]["B_FIELD_R"] = plasma.get_array3(["two_d", "br"])
108 results["PROFILES_2D"]["B_FIELD_Z"] = plasma.get_array3(["two_d", "bz"])
109 results["PROFILES_2D"]["MASK"] = plasma.get_array3(["two_d", "mask"])
110 results["PROFILES_2D"]["PRESSURE"] = plasma.get_array3(["two_d", "p"])
111 results["PROFILES_2D"]["PSI"] = plasma.get_array3(["two_d", "psi"])
112 results["PROFILES_2D"]["R"] = plasma.get_array1(["grid", "r"])
113 results["PROFILES_2D"]["Z"] = plasma.get_array1(["grid", "z"])
115 # Constraints
116 results["CONSTRAINTS"]["CHI_SQ_MAG"] = plasma.get_array1(["global", "chi_mag"])
118 for sensor_name in bp_probes.keys():
119 # results["CONSTRAINTS"]["BP_PROBE"][pf_name]["EXACT"]
120 results["CONSTRAINTS"]["BP_PROBE"][sensor_name]["INCLUDE"] = np.int32(bp_probes.get_bool([sensor_name, "fit_settings", "include"]))
121 results["CONSTRAINTS"]["BP_PROBE"][sensor_name]["MEASURED"] = bp_probes.get_array1([sensor_name, "b", "measured", "value"])
122 results["CONSTRAINTS"]["BP_PROBE"][sensor_name]["RECONSTRUCT"] = bp_probes.get_array1([sensor_name, "b", "calculated", "value"])
123 results["CONSTRAINTS"]["BP_PROBE"][sensor_name]["WEIGHT"] = bp_probes.get_f64([sensor_name, "fit_settings", "weight"])
125 for sensor_name in flux_loops.keys():
126 # results["CONSTRAINTS"]["FLUX_LOOP"][pf_name]["EXACT"]
127 results["CONSTRAINTS"]["FLUX_LOOP"][sensor_name]["INCLUDE"] = np.int32(flux_loops.get_bool([sensor_name, "fit_settings", "include"]))
128 results["CONSTRAINTS"]["FLUX_LOOP"][sensor_name]["MEASURED"] = flux_loops.get_array1([sensor_name, "psi", "measured", "value"])
129 results["CONSTRAINTS"]["FLUX_LOOP"][sensor_name]["RECONSTRUCT"] = flux_loops.get_array1([sensor_name, "psi", "calculated", "value"])
130 results["CONSTRAINTS"]["FLUX_LOOP"][sensor_name]["WEIGHT"] = flux_loops.get_f64([sensor_name, "fit_settings", "weight"])
132 for sensor_name in rogowski_coils.keys():
133 # results["CONSTRAINTS"]["ROGOWSKI"][pf_name]["EXACT"]
134 results["CONSTRAINTS"]["ROGOWSKI"][sensor_name]["INCLUDE"] = np.int32(rogowski_coils.get_bool([sensor_name, "fit_settings", "include"]))
135 results["CONSTRAINTS"]["ROGOWSKI"][sensor_name]["MEASURED"] = rogowski_coils.get_array1([sensor_name, "i", "measured", "value"])
136 results["CONSTRAINTS"]["ROGOWSKI"][sensor_name]["RECONSTRUCT"] = rogowski_coils.get_array1([sensor_name, "i", "calculated", "value"])
137 results["CONSTRAINTS"]["ROGOWSKI"][sensor_name]["WEIGHT"] = rogowski_coils.get_f64([sensor_name, "fit_settings", "weight"])
139 # Diamagnetic flux (single diamagnetic flux loop "DIALOOP")
140 for sensor_name in dialoop.keys():
141 results["CONSTRAINTS"]["DIAMAG_FLUX"]["INCLUDE"] = np.int32(dialoop.get_bool([sensor_name, "fit_settings", "include"]))
142 results["CONSTRAINTS"]["DIAMAG_FLUX"]["MEASURED"] = dialoop.get_array1([sensor_name, "b", "measured", "value"])
143 results["CONSTRAINTS"]["DIAMAG_FLUX"]["RECONSTRUCT"] = dialoop.get_array1([sensor_name, "b", "calculated", "value"])
144 results["CONSTRAINTS"]["DIAMAG_FLUX"]["WEIGHT"] = dialoop.get_f64([sensor_name, "fit_settings", "weight"])
146 for pf_name in coils.keys(["pf"]):
147 # results["CONSTRAINTS"]["PF_CURRENT"][pf_name]["EXACT"]
148 # results["CONSTRAINTS"]["PF_CURRENT"][pf_name]["INCLUDE"] = np.int32(coils.get_bool(["pf", pf_name, "fit_settings", "include"]))
149 results["CONSTRAINTS"]["PF_CURRENT"][pf_name]["MEASURED"] = coils.get_array1(["pf", pf_name, "i", "measured", "value"])
150 # results["CONSTRAINTS"]["PF_CURRENT"][pf_name]["RECONSTRUCT"] = coils.get_array1(["pf", pf_name, "i", "calculated", "value"])
151 # results["CONSTRAINTS"]["PF_CURRENT"][pf_name]["WEIGHT"] = coils.get_f64(["pf", pf_name, "fit_settings", "weight"])
152 # TODO: need to handle circuits vs coils better
153 results["CONSTRAINTS"]["PF_CURRENT"]["BVL"]["MEASURED"] = coils.get_array1(["pf", "BVLT", "i", "measured", "value"])
154 results["CONSTRAINTS"]["PF_CURRENT"]["DIV"]["MEASURED"] = coils.get_array1(["pf", "DIVT", "i", "measured", "value"])
155 results["CONSTRAINTS"]["PF_CURRENT"]["PSH"]["MEASURED"] = coils.get_array1(["pf", "PSHT", "i", "measured", "value"])
157 # # X-points
158 # # TODO!!!!!!!!!!!
159 # results["XPOINTS"]["UPPER"]["R"] = plasma.get_array1(["xpoints", "upper", "r"])
160 # results["XPOINTS"]["UPPER"]["Z"] = plasma.get_array1(["xpoints", "upper", "z"])
161 # results["XPOINTS"]["LOWER"]["R"] = plasma.get_array1(["xpoints", "lower", "r"])
162 # results["XPOINTS"]["LOWER"]["Z"] = plasma.get_array1(["xpoints", "lower", "z"])
164 # Passives
165 for passive_name in passives.keys():
166 if passive_name == "IVC":
167 results["PASSIVES"]["IVC"]["DOF"]["EIG_01"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_01", "calculated"])
168 results["PASSIVES"]["IVC"]["DOF"]["EIG_01"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_01", "current_distribution"])
169 results["PASSIVES"]["IVC"]["DOF"]["EIG_02"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_02", "calculated"])
170 results["PASSIVES"]["IVC"]["DOF"]["EIG_02"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_02", "current_distribution"])
171 results["PASSIVES"]["IVC"]["DOF"]["EIG_03"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_03", "calculated"])
172 results["PASSIVES"]["IVC"]["DOF"]["EIG_03"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_03", "current_distribution"])
173 results["PASSIVES"]["IVC"]["DOF"]["EIG_04"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_04", "calculated"])
174 results["PASSIVES"]["IVC"]["DOF"]["EIG_04"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_04", "current_distribution"])
175 results["PASSIVES"]["IVC"]["DOF"]["EIG_05"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_05", "calculated"])
176 results["PASSIVES"]["IVC"]["DOF"]["EIG_05"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_05", "current_distribution"])
177 results["PASSIVES"]["IVC"]["DOF"]["EIG_06"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_06", "calculated"])
178 results["PASSIVES"]["IVC"]["DOF"]["EIG_06"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_06", "current_distribution"])
179 results["PASSIVES"]["IVC"]["DOF"]["EIG_07"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_07", "calculated"])
180 results["PASSIVES"]["IVC"]["DOF"]["EIG_07"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_07", "current_distribution"])
181 results["PASSIVES"]["IVC"]["DOF"]["EIG_08"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_08", "calculated"])
182 results["PASSIVES"]["IVC"]["DOF"]["EIG_08"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_08", "current_distribution"])
183 results["PASSIVES"]["IVC"]["DOF"]["EIG_09"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_09", "calculated"])
184 results["PASSIVES"]["IVC"]["DOF"]["EIG_09"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_09", "current_distribution"])
185 results["PASSIVES"]["IVC"]["DOF"]["EIG_10"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_10", "calculated"])
186 results["PASSIVES"]["IVC"]["DOF"]["EIG_10"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_10", "current_distribution"])
187 results["PASSIVES"]["IVC"]["DOF"]["EIG_11"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_11", "calculated"])
188 results["PASSIVES"]["IVC"]["DOF"]["EIG_11"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_11", "current_distribution"])
189 results["PASSIVES"]["IVC"]["DOF"]["EIG_12"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_12", "calculated"])
190 results["PASSIVES"]["IVC"]["DOF"]["EIG_12"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_12", "current_distribution"])
191 results["PASSIVES"]["IVC"]["DOF"]["EIG_13"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_13", "calculated"])
192 results["PASSIVES"]["IVC"]["DOF"]["EIG_13"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_13", "current_distribution"])
193 results["PASSIVES"]["IVC"]["DOF"]["EIG_14"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_14", "calculated"])
194 results["PASSIVES"]["IVC"]["DOF"]["EIG_14"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_14", "current_distribution"])
195 results["PASSIVES"]["IVC"]["DOF"]["EIG_15"]["CVALUE"] = passives.get_array1(["IVC", "dof", "eig_15", "calculated"])
196 results["PASSIVES"]["IVC"]["DOF"]["EIG_15"]["I_DIST"] = passives.get_array1(["IVC", "dof", "eig_15", "current_distribution"])
197 results["PASSIVES"]["IVC"]["GEOMETRY"]["ANGLE_1"] = passives.get_array1(["IVC", "geometry", "angle_1"])
198 results["PASSIVES"]["IVC"]["GEOMETRY"]["ANGLE_2"] = passives.get_array1(["IVC", "geometry", "angle_2"])
199 results["PASSIVES"]["IVC"]["GEOMETRY"]["D_R"] = passives.get_array1(["IVC", "geometry", "d_r"])
200 results["PASSIVES"]["IVC"]["GEOMETRY"]["D_Z"] = passives.get_array1(["IVC", "geometry", "d_z"])
201 results["PASSIVES"]["IVC"]["GEOMETRY"]["R"] = passives.get_array1(["IVC", "geometry", "r"])
202 results["PASSIVES"]["IVC"]["GEOMETRY"]["Z"] = passives.get_array1(["IVC", "geometry", "z"])
203 else:
204 results["PASSIVES"][passive_name]["DOF"]["CONSTANT_J"]["CVALUE"] = passives.get_array1(
205 [passive_name, "dof", "constant_current_density", "calculated"]
206 )
207 results["PASSIVES"][passive_name]["DOF"]["CONSTANT_J"]["I_DIST"] = passives.get_array1(
208 [passive_name, "dof", "constant_current_density", "current_distribution"]
209 )
210 results["PASSIVES"][passive_name]["GEOMETRY"]["ANGLE_1"] = passives.get_array1([passive_name, "geometry", "angle_1"])
211 results["PASSIVES"][passive_name]["GEOMETRY"]["ANGLE_2"] = passives.get_array1([passive_name, "geometry", "angle_2"])
212 results["PASSIVES"][passive_name]["GEOMETRY"]["D_R"] = passives.get_array1([passive_name, "geometry", "d_r"])
213 results["PASSIVES"][passive_name]["GEOMETRY"]["D_Z"] = passives.get_array1([passive_name, "geometry", "d_z"])
214 results["PASSIVES"][passive_name]["GEOMETRY"]["R"] = passives.get_array1([passive_name, "geometry", "r"])
215 results["PASSIVES"][passive_name]["GEOMETRY"]["Z"] = passives.get_array1([passive_name, "geometry", "z"])
217 # Scrape off layer (SOL)
218 results["SOL"]["HFS"]["CONTOUR"]["R"] = plasma.get_array2(["sol", "hfs", "contour", "r"]) # shape = [n_time, n_points]
219 results["SOL"]["HFS"]["CONTOUR"]["Z"] = plasma.get_array2(["sol", "hfs", "contour", "z"]) # shape = [n_time, n_points]
220 results["SOL"]["HFS"]["CONTOUR"]["N"] = np.array(plasma.get_vec_usize(["sol", "hfs", "contour", "n"])).astype(np.int32) # shape = [n_time]
221 results["SOL"]["HFS"]["STRIKE_POINT"]["R"] = plasma.get_array1(["sol", "hfs", "strike_point", "r"]) # shape = [n_time]
222 results["SOL"]["HFS"]["STRIKE_POINT"]["Z"] = plasma.get_array1(["sol", "hfs", "strike_point", "z"]) # shape = [n_time]
223 results["SOL"]["LFS"]["CONTOUR"]["R"] = plasma.get_array2(["sol", "lfs", "contour", "r"]) # shape = [n_time, n_points]
224 results["SOL"]["LFS"]["CONTOUR"]["Z"] = plasma.get_array2(["sol", "lfs", "contour", "z"]) # shape = [n_time, n_points]
225 results["SOL"]["LFS"]["CONTOUR"]["N"] = np.array(plasma.get_vec_usize(["sol", "lfs", "contour", "n"])).astype(np.int32) # shape = [n_time]
226 results["SOL"]["LFS"]["STRIKE_POINT"]["R"] = plasma.get_array1(["sol", "lfs", "strike_point", "r"]) # shape = [n_time]
227 results["SOL"]["LFS"]["STRIKE_POINT"]["Z"] = plasma.get_array1(["sol", "lfs", "strike_point", "z"]) # shape = [n_time]
229 if len(pressure_sensors.keys()) > 0:
230 sensor_names = list(pressure_sensors.keys())
232 # Per-sensor nodes (keyed by sensor name)
233 for sensor_name in sensor_names:
234 results["CONSTRAINTS"]["PRESSURE"][sensor_name]["MEASURED"] = pressure_sensors.get_array1([sensor_name, "pressure", "measured", "value"]) # shape = [n_time]
235 results["CONSTRAINTS"]["PRESSURE"][sensor_name]["RECONSTRUCT"] = pressure_sensors.get_array1([sensor_name, "pressure", "calculated", "value"]) # shape = [n_time]
236 results["CONSTRAINTS"]["PRESSURE"][sensor_name]["WEIGHT"] = pressure_sensors.get_f64([sensor_name, "fit_settings", "weight"]) # scalar
237 results["CONSTRAINTS"]["PRESSURE"][sensor_name]["POSITION"]["R"] = pressure_sensors.get_f64([sensor_name, "geometry", "r"]) # scalar
238 results["CONSTRAINTS"]["PRESSURE"][sensor_name]["POSITION"]["Z"] = pressure_sensors.get_f64([sensor_name, "geometry", "z"]) # scalar
239 results["CONSTRAINTS"]["PRESSURE"][sensor_name]["POSITION"]["PSI"] = pressure_sensors.get_array1([sensor_name, "pressure", "calculated", "psi"]) # shape = [n_time]
241 # ALL aggregate node
242 results["CONSTRAINTS"]["PRESSURE"]["ALL"]["MEASURED"] = pressure_sensors.get_array2(["*", "pressure", "measured", "value"]) # shape = [n_time, n_points]
243 results["CONSTRAINTS"]["PRESSURE"]["ALL"]["RECONSTRUCT"] = pressure_sensors.get_array2(["*", "pressure", "calculated", "value"]) # shape = [n_time, n_points]
244 results["CONSTRAINTS"]["PRESSURE"]["ALL"]["WEIGHT"] = pressure_sensors.get_array1(["*", "fit_settings", "weight"]) # shape = [n_points]
245 results["CONSTRAINTS"]["PRESSURE"]["ALL"]["POSITION"]["R"] = pressure_sensors.get_array1(["*", "geometry", "r"]) # shape = [n_points]
246 results["CONSTRAINTS"]["PRESSURE"]["ALL"]["POSITION"]["Z"] = pressure_sensors.get_array1(["*", "geometry", "z"]) # shape = [n_points]
247 results["CONSTRAINTS"]["PRESSURE"]["ALL"]["POSITION"]["PSI"] = pressure_sensors.get_array2(["*", "pressure", "calculated", "psi"]) # shape = [n_time, n_points]
248 results["CONSTRAINTS"]["PRESSURE"]["ALL"]["NAMES"] = np.array(sensor_names)
250 # Store "WORKFLOW"
251 database_reader_method = settings["GSFIT_code_settings.json"]["database_reader"]["method"]
253 code_names = settings["GSFIT_code_settings.json"]["database_reader"][database_reader_method]["workflow"].keys()
255 for code_name in code_names:
256 pulseNo_json = settings["GSFIT_code_settings.json"]["database_reader"][database_reader_method]["workflow"][code_name]["pulseNo"]
257 if pulseNo_json is not None:
258 results["INPUT"]["WORKFLOW"][code_name]["PULSE"] = pulseNo_json
259 else:
260 results["INPUT"]["WORKFLOW"][code_name]["PULSE"] = pulseNo
262 run_name = settings["GSFIT_code_settings.json"]["database_reader"][database_reader_method]["workflow"][code_name]["run_name"]
263 results["INPUT"]["WORKFLOW"][code_name]["RUN"] = run_name
265 usage = settings["GSFIT_code_settings.json"]["database_reader"][database_reader_method]["workflow"][code_name]["usage"]
266 results["INPUT"]["WORKFLOW"][code_name]["USAGE"] = usage