class ECRadRayManipulator(object): ''' classdocs ''' def __init__(self, ECRad_result_file): ''' Constructor ''' self.org_results_file = ECRad_result_file self.ECRad_results = ECRadResults() self.ECRad_results.from_mat_file(ECRad_result_file) self.N_ch = self.ECRad_results.Scenario.ray_launch[0]["f"] self.N_ray = self.ECRad_results.Config["Physics"]["N_ray"] if (self.ECRad_results.Config["Physics"]["considered_modes"] == 1): self.modes = ["X"] elif (self.ECRad_results.Config["Physics"]["considered_modes"] == 2): self.modes = ["O"] elif (self.ECRad_results.Config["Physics"]["considered_modes"] == 3): self.modes = ["X", "O"] else: raise ValueError("Invalid value in considered modes") def get_Rz_single_ray(self, it, ich, mode="X", iray=0): if (self.N_ray == 1): R = np.sqrt(self.ECRad_results.ray["x"+mode][it][ich]**2 + \ self.ECRad_results.ray["y"+mode][it][ich]**2) return R, self.ECRad_results.ray["z" + mode][it][ich] else: R = np.sqrt(self.ECRad_results.ray["x"+mode][it][ich][iray]**2 + \ self.ECRad_results.ray["y"+mode][it][ich][iray]**2) return R, self.ECRad_results.ray["z" + mode][it][ich][iray] def get_field_single_ray(self, field, it, ich, mode="X", iray=0): if (self.N_ray == 1): return self.ECRad_results.ray[field + mode][it][ich] else: return self.ECRad_results.ray[field + mode][it][ich][iray] def set_field_single_ray(self, field, values, it, ich, mode="X", iray=0): if (self.N_ray == 1): if (self.ECRad_results.ray[field + mode][it][ich].shape != values.shape): raise ValueError( "The new values must have the same shape as the original values" ) self.ECRad_results.ray[field + mode][it][ich] = values else: if (self.ECRad_results.ray[field + mode][it][ich][iray].shape != values.shape): raise ValueError( "The new values must have the same shape as the original values" ) self.ECRad_results.ray[field + mode][it][ich][iray] = values def save(self, new_filename, comment=""): if (new_filename == self.org_results_file): print("This routine does not allow overwriting of the old file!") return self.ECRad_results.to_mat_file(new_filename, comment)
def manipiulate_rays(result_file_in, result_file_out): res = ECRadResults() res.from_mat_file(result_file_in) for index in range(len(res.time)): for ich in range(len(res.Scenario.ray_launch[index]["f"])): for mode in res.modes: if (res.Config["Physics"]["N_ray"] > 1): for iray in range(len(res.ray["s" + mode][index][ich])): res.ray["Te" + mode][index][ich][iray][:] /= 2.0 else: res.ray["Te" + mode][index][ich][:] /= 2.0 res.to_mat_file(result_file_out)
def repair_ECRad_results(folder_in, folder_out=None): # Allows to make bulk modification of result files using glob # If folder_out is True it overwrites! filelist = glob.glob(os.path.join(folder_in, "*.mat")) # filelist = ['/tokp/work/sdenk/DRELAX_Results/ECRad_35662_ECECTACTC_run0208.mat'] cur_result = ECRadResults() for filename in filelist: cur_result.reset() cur_result.from_mat_file(filename) # Enter bulk modifcations here cur_result.Scenario.used_diags_dict["CTC"].diag = "CTC" if(folder_out is None): cur_result.to_mat_file(filename) else: cur_result.to_mat_file(os.path.join(folder_out, os.path.basename(filename)))
def run_ECRad(): args = sys.argv working_dir = args[1] shot = int(args[2]) diag_id = args[3] shot_data_file = os.path.join(working_dir, args[4]) times_to_analyze = None try: if(len(args) > 5): try: times_to_analyze = np.loadtxt(os.path.join(working_dir, args[5])) if(times_to_analyze.ndim == 0): times_to_analyze = np.array([times_to_analyze]) except: print("Failed to load " + os.path.join(working_dir, args[5])) print("Analyzing everything") except Exception as e: print("Initialization failed.") print("Error:", e) print("Usage: python run_ECRad_no_GUI.py <shotno> <diag id>") if(globalsettings.TCV): print("Possible diag ids: UCE, LCE, VCE, CCE") elif(globalsettings.AUG): print("Possible diag ids: ECE, CTA, CTC, IEC, ECN, ECO") else: print("Only AUG or TCV supported at this time") print("Got the following args", args) return -1 try: Config = ECRadConfig() Config.from_mat_file(path=os.path.join(working_dir, "UserConfig.mat")) except IOError: print("Failed to load user config at : ") print(os.path.join(working_dir, "UserConfig.mat")) Config.working_dir = working_dir if(globalsettings.TCV): Config.time, Config.plasma_dict = load_plasma_from_mat(Config, shot_data_file) if(diag_id in ["UCE", "LCE", "VCE"]): Config.used_diags_dict.update({diag_id: Diag(diag_id, "TCV", diag_id, 0)}) else: print("Selected diag_id {0:s} is not supported for TCV".format(diag_id)) return -1 Config.Ext_plasma = True elif(globalsettings.AUG): Config.time, Config.plasma_dict = load_IDA_data(shot, timepoints=None, exp="AUGD", ed=0) if(diag_id == "ECE"): Config.used_diags_dict.update({diag_id: Diag(diag_id, "AUGD", 'RMD', 0)}) elif(diag_id in ["CTA", "CTC", "IEC"]): if(shot > 33724): if(diag_id == "CTA"): beamline = 7 elif(diag_id == "CTC"): beamline = 8 else: beamline = 5 else: if(diag_id == "CTA"): beamline = 6 else: beamline = 5 Config.used_diags_dict.update({diag_id: ECRH_diag(diag_id, "AUGD", diag_id, 0, beamline, 1.0, True)}) elif(diag_id in ["ECN", "ECO"]): if(diag_id == "ECN"): Config.used_diags_dict.update({diag_id: ECI_diag(diag_id, "AUGD", "TDI", 0, "ECEI", "RZN", 0)}) else: Config.used_diags_dict.update({diag_id: ECI_diag(diag_id, "AUGD", "TDI", 0, "ECEI", "RZO", 0)}) Config.ECI_dict = get_ECI_launch(Config.used_diags_dict[diag_id], Config.shot) else: print("Selected diag_id {0:s} is not supported for TCV".format(diag_id)) return -1 else: print("Only AUG or TCV supported at this time") if(Config.time == None): print("Failed to initialize") return -1 Config.shot = shot Config.working_dir = working_dir for diag_key in Config.used_diags_dict: if("CT" in diag_key or "IEC" == diag_key): if(str(Config.used_diags_dict[diag_key].beamline) not in Config.gy_dict): new_gy = get_ECRH_viewing_angles(Config.shot, \ Config.used_diags_dict[diag_key].beamline) if(new_gy.error == 0): Config.gy_dict[str(Config.used_diags_dict[diag_key].beamline)] = new_gy else: print("Error when reading viewing angles") print("Launch aborted") return Results = ECRadResults() Results.parse_config(Config, Config.time) if(not times_to_analyze is None): it_ext = 0 actual_times = [] for i in range(len(times_to_analyze)): actual_times.append(np.argmin(np.abs(Config.time - times_to_analyze[it_ext]))) actual_times = np.array(actual_times) Config.time = Config.time[actual_times] Config.plasma_dict["Te"] = Config.plasma_dict["Te"][actual_times] Config.plasma_dict["ne"] = Config.plasma_dict["ne"][actual_times] Config.plasma_dict["rhop"] = Config.plasma_dict["rhop"][actual_times] Config.plasma_dict["ne_rhop_scale"] = Config.plasma_dict["ne_rhop_scale"][actual_times] if(Config.plasma_dict["eq_data"] is not None): Config.plasma_dict["eq_data"] = Config.plasma_dict["eq_data"][actual_times] if(not Config.debug and globalsettings.AUG): InvokeECRad = "/afs/ipp-garching.mpg.de/home/s/sdenk/F90/ECRad_Model/ECRad_model" elif(globalsettings.AUG): InvokeECRad = "/marconi_work/eufus_gw/work/g2sdenk/ECRad_Model_parallel/ECRad_model" elif(globalsettings.TCV and Config.debug): InvokeECRad = "../ECRad_Model_TCV/ECRad_model" elif(globalsettings.TCV): InvokeECRad = "../ECRad_Model_TCV_no_debug/ECRad_model" else: print('Neither AUG nor TCV selected - no Machine!!') raise IOError Results = run_ECRad_from_script(working_dir, shot, Config, InvokeECRad, working_dir) Results.to_mat_file() print("Finished successfully")