diff --git a/omas/machine_mappings/_efit.json b/omas/machine_mappings/_efit.json index 6a67a1f4..b163c27a 100644 --- a/omas/machine_mappings/_efit.json +++ b/omas/machine_mappings/_efit.json @@ -16,15 +16,15 @@ "VALUE": 1 }, "equilibrium.time": { - "TDI": "dim_of(\\{EFIT_tree}::TOP.RESULTS.GEQDSK.BCENTR)/1000.", + "TDI": "\\{EFIT_tree}::TOP.RESULTS.GEQDSK.GTIME/1000.", "treename": "{EFIT_tree}" }, "equilibrium.time_slice.:.time": { - "TDI": "dim_of(\\{EFIT_tree}::TOP.RESULTS.GEQDSK.BCENTR)/1000.", + "TDI": "\\{EFIT_tree}::TOP.RESULTS.GEQDSK.GTIME/1000.", "treename": "{EFIT_tree}" }, "equilibrium.time_slice.:": { - "TDI": "size(\\{EFIT_tree}::TOP.RESULTS.GEQDSK.BCENTR)", + "TDI": "size(\\{EFIT_tree}::TOP.RESULTS.GEQDSK.GTIME)", "treename": "{EFIT_tree}" }, "equilibrium.time_slice.:.boundary.outline.r": { diff --git a/omas/machine_mappings/d3d.json b/omas/machine_mappings/d3d.json index 1dbf8035..8e876ae3 100644 --- a/omas/machine_mappings/d3d.json +++ b/omas/machine_mappings/d3d.json @@ -6,16 +6,16 @@ ], "__mdsserver__": "atlas.gat.com:8000", "__options__": { + "EFIT_run_id": null, "EFIT_tree": "EFIT01", + "PROFILES_run_id": null, "PROFILES_tree": "ZIPFIT01", "analysis_type": "CERQUICK", "default_tree": "D3D", "fast_ece": false, "get_all": true, "nref": 0, - "revision": "BLESSED", - "PROFILES_run_id": null, - "EFIT_run_id": null + "revision": "BLESSED" }, "bolometer.channel.:": { "PYTHON": "bolometer_hardware(ods, {pulse})" @@ -135,6 +135,9 @@ "core_profiles.profiles_1d.:.e_field.radial_error_upper": { "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, + "core_profiles.profiles_1d.:.electrons.density": { + "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" + }, "core_profiles.profiles_1d.:.electrons.density_error_upper": { "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, @@ -148,7 +151,7 @@ "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, "core_profiles.profiles_1d.:.electrons.density_thermal": { - "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r})" + "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, "core_profiles.profiles_1d.:.electrons.density_thermal_error_upper": { "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r})" @@ -184,10 +187,10 @@ "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r})" }, "core_profiles.profiles_1d.:.ion.:.density_fit.psi_norm": { - "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r})" + "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, "core_profiles.profiles_1d.:.ion.:.density_thermal": { - "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r})" + "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, "core_profiles.profiles_1d.:.ion.:.density_thermal_error_upper": { "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r})" @@ -198,9 +201,6 @@ "core_profiles.profiles_1d.:.ion.:.density_thermal_fit.measured_error_upper": { "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r})" }, - "core_profiles.profiles_1d.:.ion.:.density_fit.psi_norm": { - "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" - }, "core_profiles.profiles_1d.:.ion.:.element.:": { "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, @@ -252,7 +252,7 @@ "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, "core_profiles.profiles_1d.:.time": { - "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r})" + "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" }, "core_profiles.time": { "PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})" @@ -369,9 +369,6 @@ "ece.line_of_sight.second_point.z": { "PYTHON": "electron_cyclotron_emission_hardware(ods, {pulse}, {fast_ece!r})" }, - "equilibrium": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, "equilibrium.code": { "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r})" }, @@ -1017,12 +1014,6 @@ "equilibrium.ids_properties.homogeneous_time": { "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" }, - "equilibrium.time": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, "equilibrium.time_slice.:.boundary.outline.r": { "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" }, @@ -1171,234 +1162,6 @@ "equilibrium.time_slice.:.convergence.iterations_n": { "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" }, - "equilibrium.time_slice.:.global_quantities.area": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.beta_normal": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.beta_pol": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.beta_tor": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.ip": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.li_3": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.magnetic_axis.b_field_tor": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.magnetic_axis.r": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.magnetic_axis.z": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.psi_axis": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.psi_boundary": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.q_95": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.q_axis": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.q_min.rho_tor_norm": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.global_quantities.q_min.value": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.area": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.b_field_average": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.b_field_max": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.b_field_min": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.centroid.r": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.centroid.r_max": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.centroid.r_min": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.centroid.z": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.darea_dpsi": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.darea_drho_tor": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.dpressure_dpsi": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.dpsi_drho_tor": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.dvolume_dpsi": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.dvolume_drho_tor": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.elongation": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.f": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.f_df_dpsi": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.geometric_axis.r": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.geometric_axis.z": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.gm1": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.gm2": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.gm5": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.gm8": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.gm9": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.j_tor": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.phi": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.pressure": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.psi": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.q": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.r_inboard": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.r_outboard": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.rho_tor": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.rho_tor_norm": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.squareness_lower_inner": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.squareness_lower_outer": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.squareness_upper_inner": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.squareness_upper_outer": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.surface": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.trapped_fraction": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.triangularity_lower": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.triangularity_upper": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_1d.volume": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:.b_field_r": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:.b_field_tor": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:.b_field_z": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:.grid.dim1": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:.grid.dim2": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:.grid_type.index": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:.phi": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.profiles_2d.:.psi": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.time_slice.:.time": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.vacuum_toroidal_field.b0": { - "COCOSIO": 11, - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, - "equilibrium.vacuum_toroidal_field.r0": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, "gas_injection.pipe.:": { "PYTHON": "gas_injection_hardware(ods, {pulse})" }, @@ -1755,10 +1518,10 @@ "wall.description_2d.:.limiter.unit.:.outline.z": { "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" }, - "wall.time": { - "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" - }, "wall.ids_properties.homogeneous_time": { "VALUE": 1 + }, + "wall.time": { + "PYTHON": "equilibrium_special(ods, {pulse}, {EFIT_tree!r}, {get_all!r})" } } \ No newline at end of file diff --git a/omas/machine_mappings/d3d.py b/omas/machine_mappings/d3d.py index b6bc3056..7165aa8e 100644 --- a/omas/machine_mappings/d3d.py +++ b/omas/machine_mappings/d3d.py @@ -1378,41 +1378,37 @@ def ip_bt_dflux_data(ods, pulse): ods['tf.b_field_tor_vacuum_r.data'] *= 1.6955 -@machine_mapping_function(__regression_arguments__, pulse=19438702, EFIT_tree="EFIT") -def equilibirum_time(ods, pulse, EFIT_tree="EFIT"): - unwrap(equilibrium_special)(ods, pulse, EFIT_tree, False) - - @machine_mapping_function(__regression_arguments__, pulse=19438702, EFIT_tree="EFIT", get_all=True) def equilibrium_special(ods, pulse, EFIT_tree="EFIT", get_all=True): from omfit_classes.omfit_eqdsk import from_mds_plus, OMFITkeqdsk - times = mdsvalue('d3d', treename=EFIT_tree, pulse=pulse, TDI="\\TOP.RESULTS.GEQDSK.GTIME").raw() - if times is None: - print("No MDSplus data") - raise ValueError(f"Could not find any data in MDSplus for {pulse} and {EFIT_tree}") - ods["equilibrium.ids_properties.homogeneous_time"] = 1 - ods["equilibrium.time"]= times / 1.e3 - if get_all == False: + + if not get_all: return - for i_time, time in enumerate(times): - ods[f"equilibrium.time_slice[{i_time}].time"] = time / 1.e3 - kfiles = mdsvalue('d3d', treename=EFIT_tree, pulse=pulse, TDI="\\TOP.NAMELISTS.KEQDSKS").raw() # + + times = mdsvalue('d3d', treename=EFIT_tree, pulse=pulse, TDI="\\TOP.RESULTS.GEQDSK.GTIME").raw() + + # mfile eq = from_mds_plus(device="d3d", shot=pulse, times=times, exact=True, snap_file=EFIT_tree, get_afile=False, get_mfile=True, show_missing_data_warnings=None, close=True) for time_index, time in enumerate(times): - kstrstr = '\n'.join(list(kfiles[time_index])) - kEQDSK = OMFITkeqdsk(f'k{pulse}.{time_index}',fromString=kstrstr) - kEQDSK.to_omas(ods, time_index=time_index) - eq['gEQDSK'][time].to_omas(ods, time_index=time_index) - ods = eq['mEQDSK'][time].to_omas(ods, time_index=time_index) - if (np.abs(ods[f"equilibrium.time_slice[{time_index}].global_quantities.ip"] - - ods[f"equilibrium.code.parameters.time_slice.{time_index}.in1.plasma"]) > - np.abs(0.08*ods[f"equilibrium.time_slice[{time_index}].global_quantities.ip"])): - raise ValueError("Cannot reconstruct contraints, current constraints not met.") - ods[f"equilibrium.code.parameters.time_slice.{time_index}.inwant.vzeroj"] *= \ - ods[f"equilibrium.time_slice[{time_index}].global_quantities.ip"] /\ - ods[f"equilibrium.time_slice[{time_index}].global_quantities.area"] +# eq['gEQDSK'][time].to_omas(ods, time_index=time_index) # we don't do this since the gEQDSK data is filled from omas/machine_mappings/_efit.json + eq['mEQDSK'][time].to_omas(ods, time_index=time_index) + + # kfile + kfiles = mdsvalue('d3d', treename=EFIT_tree, pulse=pulse, TDI="\\TOP.NAMELISTS.KEQDSKS").raw() # + if kfiles is not None: + for time_index, time in enumerate(times): + kstrstr = '\n'.join(list(kfiles[time_index])) + kEQDSK = OMFITkeqdsk(f'k{pulse}.{time_index}',fromString=kstrstr) + kEQDSK.to_omas(ods, time_index=time_index) + if (np.abs(ods[f"equilibrium.time_slice[{time_index}].global_quantities.ip"] - + ods[f"equilibrium.code.parameters.time_slice.{time_index}.in1.plasma"]) > + np.abs(0.08*ods[f"equilibrium.time_slice[{time_index}].global_quantities.ip"])): + raise ValueError("Cannot reconstruct contraints, current constraints not met.") + ods[f"equilibrium.code.parameters.time_slice.{time_index}.inwant.vzeroj"] *= \ + ods[f"equilibrium.time_slice[{time_index}].global_quantities.ip"] /\ + ods[f"equilibrium.time_slice[{time_index}].global_quantities.area"] def add_extra_profile_structures():