185 lines
8.6 KiB
Python
185 lines
8.6 KiB
Python
|
|
import os
|
||
|
|
import argparse
|
||
|
|
from ruamel.yaml import YAML
|
||
|
|
from contextlib import suppress
|
||
|
|
|
||
|
|
def map_value_to_bool(params_in, target_key, orig_key=None):
|
||
|
|
"""
|
||
|
|
Map an integer value to a boolean and update the target key in params_in.
|
||
|
|
|
||
|
|
Parameters:
|
||
|
|
params_in (dict): The input dictionary.
|
||
|
|
target_key (str): The key whose value needs to be mapped to a boolean.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
None
|
||
|
|
"""
|
||
|
|
if orig_key is None:
|
||
|
|
orig_key = target_key
|
||
|
|
print('key name {} is changed to {}'.format(orig_key, target_key))
|
||
|
|
|
||
|
|
value = params_in.get(orig_key, None)
|
||
|
|
if value is not None:
|
||
|
|
params_in[target_key] = bool(value)
|
||
|
|
print('value {} type is changed from int to bool'.format(target_key))
|
||
|
|
|
||
|
|
# remove the old key
|
||
|
|
if orig_key != target_key:
|
||
|
|
params_in.pop(orig_key, None)
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
# parse the argument for the input file
|
||
|
|
parser = argparse.ArgumentParser(description='Convert a parameter file from version 2 to version 3')
|
||
|
|
parser.add_argument('-i', '--input', help='Input file name', required=True)
|
||
|
|
|
||
|
|
args = parser.parse_args()
|
||
|
|
infile = args.input
|
||
|
|
|
||
|
|
|
||
|
|
# get path to this file
|
||
|
|
path_this = os.path.dirname(os.path.realpath(__file__))
|
||
|
|
|
||
|
|
# path to the v3 model file
|
||
|
|
v3_model_file = path_this + '/params_model_v3.yaml'
|
||
|
|
|
||
|
|
yaml = YAML()
|
||
|
|
|
||
|
|
# read the input file
|
||
|
|
try:
|
||
|
|
with open(infile, 'r') as f:
|
||
|
|
str_in = f.read()
|
||
|
|
params_in = yaml.load(str_in)
|
||
|
|
|
||
|
|
except IOError:
|
||
|
|
raise ValueError('Cannot read the input file')
|
||
|
|
|
||
|
|
# read the v3 model file
|
||
|
|
try:
|
||
|
|
with open(v3_model_file, 'r') as f:
|
||
|
|
str_v3 = f.read()
|
||
|
|
params_v3 = yaml.load(str_v3)
|
||
|
|
except IOError:
|
||
|
|
raise ValueError('Cannot read the v3 model file')
|
||
|
|
|
||
|
|
# check the version of the input file
|
||
|
|
if params_in['version'] != 2:
|
||
|
|
raise ValueError('The input file is not version 2')
|
||
|
|
|
||
|
|
# change version to 3
|
||
|
|
params_v3['version'] = 3
|
||
|
|
|
||
|
|
# copy the values in the input file to the output file
|
||
|
|
#
|
||
|
|
# domain section
|
||
|
|
#
|
||
|
|
params_v3['domain'] = params_in['domain']
|
||
|
|
|
||
|
|
#
|
||
|
|
# source section
|
||
|
|
#
|
||
|
|
params_v3['source'] = params_in['source']
|
||
|
|
map_value_to_bool(params_v3['source'], 'swap_src_rec')
|
||
|
|
|
||
|
|
#
|
||
|
|
# model section
|
||
|
|
#
|
||
|
|
params_v3['model'] = params_in['model']
|
||
|
|
|
||
|
|
#
|
||
|
|
# parallel section
|
||
|
|
#
|
||
|
|
params_v3['parallel'] = params_in['parallel']
|
||
|
|
|
||
|
|
# change parallel->use_gpu from 0,1 to false,true
|
||
|
|
map_value_to_bool(params_v3['parallel'], 'use_gpu')
|
||
|
|
|
||
|
|
#
|
||
|
|
# output_setting section
|
||
|
|
#
|
||
|
|
with suppress(KeyError): params_v3['output_setting']['output_dir'] = params_in['inversion']['output_dir']
|
||
|
|
with suppress(KeyError): params_v3['output_setting']['output_source_field'] = params_in['output_setting']['is_output_source_field']
|
||
|
|
with suppress(KeyError): params_v3['output_setting']['output_model_dat'] = params_in['output_setting']['is_output_model_dat']
|
||
|
|
with suppress(KeyError): params_v3['output_setting']['output_final_model'] = params_in['output_setting']['is_output_final_model']
|
||
|
|
with suppress(KeyError): params_v3['output_setting']['output_in_process'] = params_in['output_setting']['is_output_in_process']
|
||
|
|
with suppress(KeyError): params_v3['output_setting']['single_precision_output'] = params_in['output_setting']['is_single_precision_output']
|
||
|
|
|
||
|
|
map_value_to_bool(params_v3['output_setting'], 'output_source_field')
|
||
|
|
map_value_to_bool(params_v3['output_setting'], 'output_model_dat')
|
||
|
|
map_value_to_bool(params_v3['output_setting'], 'output_final_model')
|
||
|
|
map_value_to_bool(params_v3['output_setting'], 'output_in_process')
|
||
|
|
map_value_to_bool(params_v3['output_setting'], 'single_precision_output')
|
||
|
|
|
||
|
|
# remove the old key 'output_setting'->'is_verbose_output'
|
||
|
|
params_v3['output_setting'].pop('is_verbose_output', None)
|
||
|
|
|
||
|
|
with suppress(KeyError): params_v3['output_setting']['output_file_format'] = params_in['calculation']['output_file_format']
|
||
|
|
|
||
|
|
#
|
||
|
|
# run_mode section
|
||
|
|
#
|
||
|
|
params_v3['run_mode'] = params_in['inversion']['run_mode']
|
||
|
|
|
||
|
|
#
|
||
|
|
# model_update section
|
||
|
|
#
|
||
|
|
with suppress(KeyError): params_v3['model_update']['max_iterations'] = params_in['inversion']['max_iterations_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['optim_method'] = params_in['inversion']['optim_method']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['step_length'] = params_in['inversion']['step_size']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['optim_method_0']['step_length_decay'] = params_in['inversion']['step_size_decay']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['optim_method_0']['step_length_sc'] = params_in['inversion']['step_size_sc']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['optim_method_1_2']['max_sub_iterations'] = params_in['inversion']['max_sub_iterations']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['optim_method_1_2']['regularization_weight'] = params_in['inversion']['regularization_weight']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['smoothing']['smooth_method'] = params_in['inversion']['smooth_method']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['smoothing']['l_smooth_rtp'] = params_in['inversion']['l_smooth_rtp']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['n_inversion_grid'] = params_in['inversion']['n_inversion_grid']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['type_invgrid_dep'] = params_in['inversion']['type_dep_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['type_invgrid_lat'] = params_in['inversion']['type_lat_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['type_invgrid_lon'] = params_in['inversion']['type_lon_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['n_inv_dep_lat_lon'] = params_in['inversion']['n_inv_dep_lat_lon']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['min_max_dep_inv'] = params_in['inversion']['min_max_dep_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['min_max_lat_inv'] = params_in['inversion']['min_max_lat_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['min_max_lon_inv'] = params_in['inversion']['min_max_lon_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['dep_inv'] = params_in['inversion']['dep_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['lat_inv'] = params_in['inversion']['lat_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['lon_inv'] = params_in['inversion']['lon_inv']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['sta_correction_file'] = params_in['inversion']['sta_correction_file']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['update_slowness'] = params_in['inv_strategy']['is_inv_slowness']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['update_azi_ani'] = params_in['inv_strategy']['is_inv_azi_ani']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['update_rad_ani'] = params_in['inv_strategy']['is_inv_rad_ani']
|
||
|
|
map_value_to_bool(params_v3['model_update'], 'update_slowness')
|
||
|
|
map_value_to_bool(params_v3['model_update'], 'update_azi_ani')
|
||
|
|
map_value_to_bool(params_v3['model_update'], 'update_rad_ani')
|
||
|
|
|
||
|
|
with suppress(KeyError): params_v3['model_update']['depth_taper'] = params_in['inv_strategy']['kernel_taper']
|
||
|
|
with suppress(KeyError): params_v3['model_update']['use_sta_correction'] = params_in['inv_strategy']['is_sta_correction']
|
||
|
|
map_value_to_bool(params_v3['model_update'], 'use_sta_correction')
|
||
|
|
|
||
|
|
|
||
|
|
#
|
||
|
|
# relocation section
|
||
|
|
#
|
||
|
|
# replocation section is completely new in v3, so we don't need to move any value
|
||
|
|
|
||
|
|
#
|
||
|
|
# inversion_strategy section
|
||
|
|
#
|
||
|
|
# inversion_strategy section is completely new in v3, so we don't need to move any value
|
||
|
|
|
||
|
|
#
|
||
|
|
# calculation section
|
||
|
|
#
|
||
|
|
params_v3['calculation'] = params_in['calculation']
|
||
|
|
# erase the old key 'calculation'->'output_file_format' if it exists
|
||
|
|
params_v3['calculation'].pop('output_file_format', None)
|
||
|
|
|
||
|
|
# write the output file with adding .v3 to the file name
|
||
|
|
outfile = infile + '.v3.yaml'
|
||
|
|
with open(outfile, 'w') as f:
|
||
|
|
yaml.dump(params_v3, f)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|