Source code for lib_dd.io.ascii
"""save results as ASCII files to a given directory
This is the default output format
"""
import os
import json
import numpy as np
import lib_dd.version as version
import lib_dd.interface as lDDi
import lib_dd.io.helper as helper
[docs]def save_base_results(final_iterations, data):
"""
Save data files that are shared between
dd_single.py/dd_time.py/dd_space_time.py
"""
# convert all arrays to lists
for key in data['inv_opts'].keys():
if isinstance(data['inv_opts'][key], np.ndarray):
data['inv_opts'][key] = data['inv_opts'][key].tolist()
with open('inversion_options.json', 'w') as fid:
json.dump(data['inv_opts'], fid)
with open('version.dat', 'w') as fid:
fid.write(version._get_version_numbers() + '\n')
# with open('data_format.dat', 'w') as fid:
# fid.write(final_iterations[0][0].Data.obj.data_format + '\n')
# save call to debye_decomposition.py
with open('command.dat', 'w') as fid:
cmd = lDDi.get_command()
fid.write(cmd)
final_iterations[0][0].RMS.save_rms_definition('rms_definition.json')
# save tau/s
np.savetxt('tau.dat', final_iterations[0][0].Data.obj.tau)
np.savetxt('s.dat', final_iterations[0][0].Data.obj.s)
# save frequencies/omega
np.savetxt('frequencies.dat', final_iterations[0][0].Data.obj.frequencies)
np.savetxt('omega.dat', final_iterations[0][0].Data.obj.omega)
# save weighting factors
Wd_diag = final_iterations[0][0].Data.Wd.diagonal()
np.savetxt('errors.dat', Wd_diag)
# save lambdas
# TODO: We want all lambdas, not only from the last iteration
try:
lambdas = [x[0].lams for x in final_iterations]
np.savetxt('lambdas.dat', lambdas)
except Exception as e:
print('There was an error saving the lambda values')
print(e)
pass
# save number of iterations
nr_of_iterations = [x[0].nr for x in final_iterations]
np.savetxt('nr_iterations.dat', nr_of_iterations, fmt='%i')
# save normalization factors
if('norm_factors' in data):
np.savetxt('normalization_factors.dat', data['norm_factors'])
[docs]def save_data(data, NDlist):
"""Save fit results to the current directory
"""
final_iterations = [(x.iterations[-1], nr) for nr, x in enumerate(NDlist)]
save_base_results(final_iterations, data)
if not os.path.isdir('stats_and_rms'):
os.makedirs('stats_and_rms')
os.chdir('stats_and_rms')
stats_for_all_its = lDDi.aggregate_dicts(final_iterations, 'stat_pars')
if('norm_factors' in data):
norm_factors = data['norm_factors']
else:
norm_factors = None
lDDi.save_stat_pars(stats_for_all_its, norm_factors)
rms_for_all_its = lDDi.aggregate_dicts(final_iterations, 'rms_values')
lDDi.save_rms_values(rms_for_all_its, final_iterations[0][0].RMS.rms_names)
os.chdir('..')
# save original data
with open('data.dat', 'wb') as fid:
orig_data = data['raw_data']
if norm_factors is not None:
orig_data = orig_data / norm_factors[:, np.newaxis]
np.savetxt(fid, orig_data)
# (re)save the data format
# open('data_format.dat', 'w').write(prep_opts['data_format'])
open('data_format.dat', 'w').write(data['raw_format'])
# save model response
with open('f.dat', 'wb') as fid:
helper.save_f(fid, final_iterations, norm_factors)
# save times
if 'times' in data:
np.savetxt('times.dat', data['times'])