Loading src/scripts/model_maker.py +121 −32 Original line number Diff line number Diff line Loading @@ -36,8 +36,9 @@ def main(): print_help() else: sconf, gconf = load_model(argv[1]) if sconf is not None: if (sconf is not None) and (gconf is not None): result = write_legacy_sconf(sconf) if (result == 0): result += write_legacy_gconf(gconf) else: print("ERROR: could not create configuration.") result = 1 Loading @@ -52,7 +53,8 @@ def interpolate_constants(sconf): for i in range(sconf['configurations']): for j in range(sconf['nshl'][i]): file_idx = sconf['dielec_id'][i][j] file_name = sconf['dielec_file'][int(file_idx) - 1] dielec_path = PurePath(sconf['dielec_path'], sconf['dielec_file'][int(file_idx) - 1]) file_name = str(dielec_path) dielec_file = open(file_name, 'r') wavelengths = [] rpart = [] Loading Loading @@ -142,6 +144,7 @@ def load_model(model_file): sconf['xi_end'] = float(model['radiation_settings']['scale_end']) sconf['xi_step'] = float(model['radiation_settings']['scale_step']) sconf['configurations'] = int(model['particle_settings']['n_types']) sconf['dielec_path'] = model['material_settings']['dielec_path'] sconf['dielec_file'] = model['material_settings']['dielec_file'] num_dielec = len(model['particle_settings']['dielec_id']) if (len(model['particle_settings']['n_layers']) != sconf['configurations']): Loading Loading @@ -221,6 +224,44 @@ def load_model(model_file): else: for j in range(sconf['nshl'][i]): sconf['rcf'][i][j] = float(model['particle_settings']['rad_frac'][i][j]) # Create the gconf dict str_polar = model['radiation_settings']['polarization'] if (str_polar not in ["LINEAR", "CIRCULAR"]): print("ERROR: %s is not a recognized polarization state."%str_polar) return (None, None) gconf = { 'out_file': PurePath( model['input_settings']['input_folder'], model['input_settings']['geometry_file'] ) } gconf['nsph'] = sconf['nsph'] gconf['application'] = model['particle_settings']['application'] gconf['li'] = int(model['geometry_settings']['li']) gconf['le'] = int( gconf['li'] if gconf['application'] == "SPHERE" else model['geometry_settings']['le'] ) gconf['inpol'] = 0 if str_polar == "LINEAR" else 1 gconf['npnt'] = int(model['geometry_settings']['npnt']) gconf['npntts'] = int(model['geometry_settings']['npntts']) gconf['iavm'] = int(model['geometry_settings']['iavm']) gconf['isam'] = int(model['geometry_settings']['isam']) gconf['th'] = float(model['geometry_settings']['in_th_start']) gconf['thstp'] = float(model['geometry_settings']['in_th_step']) gconf['thlst'] = float(model['geometry_settings']['in_th_end']) gconf['ph'] = float(model['geometry_settings']['in_ph_start']) gconf['phstp'] = float(model['geometry_settings']['in_ph_step']) gconf['phlst'] = float(model['geometry_settings']['in_ph_end']) gconf['ths'] = float(model['geometry_settings']['in_th_start']) gconf['thsstp'] = float(model['geometry_settings']['in_th_step']) gconf['thslst'] = float(model['geometry_settings']['in_th_end']) gconf['phs'] = float(model['geometry_settings']['in_ph_start']) gconf['phsstp'] = float(model['geometry_settings']['in_ph_step']) gconf['phslst'] = float(model['geometry_settings']['in_ph_end']) gconf['vec_sph_x'] = [0.0 for i in range(gconf['nsph'])] gconf['vec_sph_y'] = [0.0 for i in range(gconf['nsph'])] gconf['vec_sph_z'] = [0.0 for i in range(gconf['nsph'])] gconf['jwtm'] = int(model['output_settings']['jwtm']) else: # model is None print("ERROR: could not parse " + model_file + "!") return (sconf, gconf) Loading @@ -241,7 +282,8 @@ def match_grid(sconf): for i in range(sconf['configurations']): for j in range(sconf['nshl'][i]): file_idx = sconf['dielec_id'][i][j] file_name = sconf['dielec_file'][int(file_idx) - 1] dielec_path = PurePath(sconf['dielec_path'], sconf['dielec_file'][int(file_idx) - 1]) file_name = str(dielec_path) dielec_file = open(file_name, 'r') wavelengths = [] rpart = [] Loading Loading @@ -302,8 +344,11 @@ def match_grid(sconf): ## \brief Print a command-line help summary. def print_help(): print(" ") print("*** MODEL_MAKER ***") print("###############################################") print("# #") print("# NPtm_code MODEL_MAKER #") print("# #") print("###############################################") print(" ") print("Create input files for FORTRAN and C++ code. ") print(" ") Loading @@ -315,18 +360,65 @@ def print_help(): print("--help Print this help and exit.") print(" ") def write_legacy_sconf(sconf): ## \brief Write the geometry configuration dictionary to legacy format. # # \param conf: `dict` Geometry configuration dictionary. # \return result: `int` An exit code (0 if successful). def write_legacy_gconf(conf): result = 0 out_file = str(conf['out_file']) nsph = conf['nsph'] str_line = "INIT" # Write legacy output output = open(out_file, 'w') if (conf['application'] == "SPHERE"): str_line = " {0:4d} {1:4d} {2:4d} {3:4d} {4:4d} {5:4d}\n".format( nsph, conf['li'], conf['inpol'], conf['npnt'], conf['npntts'], conf['isam'] ) output.write(str_line) else: mxndm = 2 * nsph * conf['li'] * (conf['li'] + 2) str_line = " {0:4d} {1:4d} {2:4d} {3:4d} {4:4d} {5:4d} {6:4d} {7:4d}\n".format( nsph, conf['li'], conf['le'], mxndm, conf['inpol'], conf['npnt'], conf['npntts'], conf['iavm'], conf['isam'] ) output.write(str_line) for si in range(nsph): str_line = " {0:15.8E} {1:15.8E} {2:15.8E}\n".format( conf['vec_sph_x'][si], conf['vec_sph_y'][si], conf['vec_sph_z'][si] ) output.write(str_line) str_line = " {0:7.2E} {1:7.2E} {2:7.2E} {3:7.2E} {4:7.2E} {5:7.2E}\n".format( conf['th'], conf['thstp'], conf['thlst'], conf['ph'], conf['phstp'], conf['phlst'] ) output.write(str_line) str_line = " {0:7.2E} {1:7.2E} {2:7.2E} {3:7.2E} {4:7.2E} {5:7.2E}\n".format( conf['ths'], conf['thsstp'], conf['thslst'], conf['phs'], conf['phsstp'], conf['phslst'] ) output.write(str_line) str_line = " {0:d}\n0\n".format(conf['jwtm']) output.write(str_line) output.close() return result ## \brief Write the scatterer configuration dictionary to legacy format. # # \param conf: `dict` Scatterer configuration dictionary. # \return result: `int` An exit code (0 if successful). def write_legacy_sconf(conf): result = 0 out_file = str(sconf['out_file']) nsph = sconf['nsph'] ies = sconf['ies'] exdc = sconf['exdc'] wp = sconf['wp'] xip = sconf['xip'] idfc = sconf['idfc'] instpc = sconf['instpc'] out_file = str(conf['out_file']) nsph = conf['nsph'] ies = conf['ies'] exdc = conf['exdc'] wp = conf['wp'] xip = conf['xip'] idfc = conf['idfc'] instpc = conf['instpc'] xi_flag = 3 nxi = sconf['nxi'] nxi = conf['nxi'] # Write legacy output output = open(out_file, 'w') str_line = " {0:3d}{1:3d}\n".format(nsph, ies) Loading @@ -337,14 +429,14 @@ def write_legacy_sconf(sconf): output.write(str_line) if (instpc == 0): for ixi in range(nxi): str_line = "{0:.3E}\n".format(sconf['vec_xi'][ixi]) str_line = "{0:.3E}\n".format(conf['vec_xi'][ixi]) output.write(str_line) else: str_line = "{0:.3E} {1:.3E}\n".format(sconf['xi_start'], sconf['xi_step']) str_line = "{0:.3E} {1:.3E}\n".format(conf['xi_start'], conf['xi_step']) output.write(str_line) sphere_count = 0 for si in range(nsph): str_line = "{0:5d}".format(sconf['vec_types'][si]) str_line = "{0:5d}".format(conf['vec_types'][si]) output.write(str_line) sphere_count += 1 if (sphere_count == 16): Loading @@ -352,20 +444,20 @@ def write_legacy_sconf(sconf): sphere_count = 0 if (sphere_count != 0): output.write("\n") for ci in range(sconf['configurations']): str_line = "{0:3d} {1:15.7E}\n".format(sconf['nshl'][ci], sconf['ros'][ci]) for ci in range(conf['configurations']): str_line = "{0:3d} {1:15.7E}\n".format(conf['nshl'][ci], conf['ros'][ci]) output.write(str_line) for cj in range(sconf['nshl'][ci]): str_line = " {0:.7E}\n".format(sconf['rcf'][ci][cj]) for cj in range(conf['nshl'][ci]): str_line = " {0:.7E}\n".format(conf['rcf'][ci][cj]) output.write(str_line) if (sconf['idfc'] == 0): if (conf['idfc'] == 0): # Write all wavelength dependent constants for each layer in each configuration for xi in range(sconf['configurations']): for xj in range(sconf['nshl'][xi]): for xk in range(sconf['nxi']): for xii in range(sconf['configurations']): rdc0 = sconf['rdc0'][xj][xii][xk] idc0 = sconf['idc0'][xj][xii][xk] for xi in range(conf['configurations']): for xj in range(conf['nshl'][xi]): for xk in range(conf['nxi']): for xii in range(conf['configurations']): rdc0 = conf['rdc0'][xj][xii][xk] idc0 = conf['idc0'][xj][xii][xk] if (rdc0 != 0.0 and idc0 != 0.0): str_line = "({0:11.5E},{1:11.5E})\n".format(rdc0, idc0) output.write(str_line) Loading @@ -373,9 +465,6 @@ def write_legacy_sconf(sconf): output.close() return result def write_gconf(model, out_file): return ## \brief Exit code (0 for success) exit_code = main() exit(exit_code) Loading
src/scripts/model_maker.py +121 −32 Original line number Diff line number Diff line Loading @@ -36,8 +36,9 @@ def main(): print_help() else: sconf, gconf = load_model(argv[1]) if sconf is not None: if (sconf is not None) and (gconf is not None): result = write_legacy_sconf(sconf) if (result == 0): result += write_legacy_gconf(gconf) else: print("ERROR: could not create configuration.") result = 1 Loading @@ -52,7 +53,8 @@ def interpolate_constants(sconf): for i in range(sconf['configurations']): for j in range(sconf['nshl'][i]): file_idx = sconf['dielec_id'][i][j] file_name = sconf['dielec_file'][int(file_idx) - 1] dielec_path = PurePath(sconf['dielec_path'], sconf['dielec_file'][int(file_idx) - 1]) file_name = str(dielec_path) dielec_file = open(file_name, 'r') wavelengths = [] rpart = [] Loading Loading @@ -142,6 +144,7 @@ def load_model(model_file): sconf['xi_end'] = float(model['radiation_settings']['scale_end']) sconf['xi_step'] = float(model['radiation_settings']['scale_step']) sconf['configurations'] = int(model['particle_settings']['n_types']) sconf['dielec_path'] = model['material_settings']['dielec_path'] sconf['dielec_file'] = model['material_settings']['dielec_file'] num_dielec = len(model['particle_settings']['dielec_id']) if (len(model['particle_settings']['n_layers']) != sconf['configurations']): Loading Loading @@ -221,6 +224,44 @@ def load_model(model_file): else: for j in range(sconf['nshl'][i]): sconf['rcf'][i][j] = float(model['particle_settings']['rad_frac'][i][j]) # Create the gconf dict str_polar = model['radiation_settings']['polarization'] if (str_polar not in ["LINEAR", "CIRCULAR"]): print("ERROR: %s is not a recognized polarization state."%str_polar) return (None, None) gconf = { 'out_file': PurePath( model['input_settings']['input_folder'], model['input_settings']['geometry_file'] ) } gconf['nsph'] = sconf['nsph'] gconf['application'] = model['particle_settings']['application'] gconf['li'] = int(model['geometry_settings']['li']) gconf['le'] = int( gconf['li'] if gconf['application'] == "SPHERE" else model['geometry_settings']['le'] ) gconf['inpol'] = 0 if str_polar == "LINEAR" else 1 gconf['npnt'] = int(model['geometry_settings']['npnt']) gconf['npntts'] = int(model['geometry_settings']['npntts']) gconf['iavm'] = int(model['geometry_settings']['iavm']) gconf['isam'] = int(model['geometry_settings']['isam']) gconf['th'] = float(model['geometry_settings']['in_th_start']) gconf['thstp'] = float(model['geometry_settings']['in_th_step']) gconf['thlst'] = float(model['geometry_settings']['in_th_end']) gconf['ph'] = float(model['geometry_settings']['in_ph_start']) gconf['phstp'] = float(model['geometry_settings']['in_ph_step']) gconf['phlst'] = float(model['geometry_settings']['in_ph_end']) gconf['ths'] = float(model['geometry_settings']['in_th_start']) gconf['thsstp'] = float(model['geometry_settings']['in_th_step']) gconf['thslst'] = float(model['geometry_settings']['in_th_end']) gconf['phs'] = float(model['geometry_settings']['in_ph_start']) gconf['phsstp'] = float(model['geometry_settings']['in_ph_step']) gconf['phslst'] = float(model['geometry_settings']['in_ph_end']) gconf['vec_sph_x'] = [0.0 for i in range(gconf['nsph'])] gconf['vec_sph_y'] = [0.0 for i in range(gconf['nsph'])] gconf['vec_sph_z'] = [0.0 for i in range(gconf['nsph'])] gconf['jwtm'] = int(model['output_settings']['jwtm']) else: # model is None print("ERROR: could not parse " + model_file + "!") return (sconf, gconf) Loading @@ -241,7 +282,8 @@ def match_grid(sconf): for i in range(sconf['configurations']): for j in range(sconf['nshl'][i]): file_idx = sconf['dielec_id'][i][j] file_name = sconf['dielec_file'][int(file_idx) - 1] dielec_path = PurePath(sconf['dielec_path'], sconf['dielec_file'][int(file_idx) - 1]) file_name = str(dielec_path) dielec_file = open(file_name, 'r') wavelengths = [] rpart = [] Loading Loading @@ -302,8 +344,11 @@ def match_grid(sconf): ## \brief Print a command-line help summary. def print_help(): print(" ") print("*** MODEL_MAKER ***") print("###############################################") print("# #") print("# NPtm_code MODEL_MAKER #") print("# #") print("###############################################") print(" ") print("Create input files for FORTRAN and C++ code. ") print(" ") Loading @@ -315,18 +360,65 @@ def print_help(): print("--help Print this help and exit.") print(" ") def write_legacy_sconf(sconf): ## \brief Write the geometry configuration dictionary to legacy format. # # \param conf: `dict` Geometry configuration dictionary. # \return result: `int` An exit code (0 if successful). def write_legacy_gconf(conf): result = 0 out_file = str(conf['out_file']) nsph = conf['nsph'] str_line = "INIT" # Write legacy output output = open(out_file, 'w') if (conf['application'] == "SPHERE"): str_line = " {0:4d} {1:4d} {2:4d} {3:4d} {4:4d} {5:4d}\n".format( nsph, conf['li'], conf['inpol'], conf['npnt'], conf['npntts'], conf['isam'] ) output.write(str_line) else: mxndm = 2 * nsph * conf['li'] * (conf['li'] + 2) str_line = " {0:4d} {1:4d} {2:4d} {3:4d} {4:4d} {5:4d} {6:4d} {7:4d}\n".format( nsph, conf['li'], conf['le'], mxndm, conf['inpol'], conf['npnt'], conf['npntts'], conf['iavm'], conf['isam'] ) output.write(str_line) for si in range(nsph): str_line = " {0:15.8E} {1:15.8E} {2:15.8E}\n".format( conf['vec_sph_x'][si], conf['vec_sph_y'][si], conf['vec_sph_z'][si] ) output.write(str_line) str_line = " {0:7.2E} {1:7.2E} {2:7.2E} {3:7.2E} {4:7.2E} {5:7.2E}\n".format( conf['th'], conf['thstp'], conf['thlst'], conf['ph'], conf['phstp'], conf['phlst'] ) output.write(str_line) str_line = " {0:7.2E} {1:7.2E} {2:7.2E} {3:7.2E} {4:7.2E} {5:7.2E}\n".format( conf['ths'], conf['thsstp'], conf['thslst'], conf['phs'], conf['phsstp'], conf['phslst'] ) output.write(str_line) str_line = " {0:d}\n0\n".format(conf['jwtm']) output.write(str_line) output.close() return result ## \brief Write the scatterer configuration dictionary to legacy format. # # \param conf: `dict` Scatterer configuration dictionary. # \return result: `int` An exit code (0 if successful). def write_legacy_sconf(conf): result = 0 out_file = str(sconf['out_file']) nsph = sconf['nsph'] ies = sconf['ies'] exdc = sconf['exdc'] wp = sconf['wp'] xip = sconf['xip'] idfc = sconf['idfc'] instpc = sconf['instpc'] out_file = str(conf['out_file']) nsph = conf['nsph'] ies = conf['ies'] exdc = conf['exdc'] wp = conf['wp'] xip = conf['xip'] idfc = conf['idfc'] instpc = conf['instpc'] xi_flag = 3 nxi = sconf['nxi'] nxi = conf['nxi'] # Write legacy output output = open(out_file, 'w') str_line = " {0:3d}{1:3d}\n".format(nsph, ies) Loading @@ -337,14 +429,14 @@ def write_legacy_sconf(sconf): output.write(str_line) if (instpc == 0): for ixi in range(nxi): str_line = "{0:.3E}\n".format(sconf['vec_xi'][ixi]) str_line = "{0:.3E}\n".format(conf['vec_xi'][ixi]) output.write(str_line) else: str_line = "{0:.3E} {1:.3E}\n".format(sconf['xi_start'], sconf['xi_step']) str_line = "{0:.3E} {1:.3E}\n".format(conf['xi_start'], conf['xi_step']) output.write(str_line) sphere_count = 0 for si in range(nsph): str_line = "{0:5d}".format(sconf['vec_types'][si]) str_line = "{0:5d}".format(conf['vec_types'][si]) output.write(str_line) sphere_count += 1 if (sphere_count == 16): Loading @@ -352,20 +444,20 @@ def write_legacy_sconf(sconf): sphere_count = 0 if (sphere_count != 0): output.write("\n") for ci in range(sconf['configurations']): str_line = "{0:3d} {1:15.7E}\n".format(sconf['nshl'][ci], sconf['ros'][ci]) for ci in range(conf['configurations']): str_line = "{0:3d} {1:15.7E}\n".format(conf['nshl'][ci], conf['ros'][ci]) output.write(str_line) for cj in range(sconf['nshl'][ci]): str_line = " {0:.7E}\n".format(sconf['rcf'][ci][cj]) for cj in range(conf['nshl'][ci]): str_line = " {0:.7E}\n".format(conf['rcf'][ci][cj]) output.write(str_line) if (sconf['idfc'] == 0): if (conf['idfc'] == 0): # Write all wavelength dependent constants for each layer in each configuration for xi in range(sconf['configurations']): for xj in range(sconf['nshl'][xi]): for xk in range(sconf['nxi']): for xii in range(sconf['configurations']): rdc0 = sconf['rdc0'][xj][xii][xk] idc0 = sconf['idc0'][xj][xii][xk] for xi in range(conf['configurations']): for xj in range(conf['nshl'][xi]): for xk in range(conf['nxi']): for xii in range(conf['configurations']): rdc0 = conf['rdc0'][xj][xii][xk] idc0 = conf['idc0'][xj][xii][xk] if (rdc0 != 0.0 and idc0 != 0.0): str_line = "({0:11.5E},{1:11.5E})\n".format(rdc0, idc0) output.write(str_line) Loading @@ -373,9 +465,6 @@ def write_legacy_sconf(sconf): output.close() return result def write_gconf(model, out_file): return ## \brief Exit code (0 for success) exit_code = main() exit(exit_code)