Source code for volt_correct_temperature

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Tool to substract the temperature effect of given rawdata in a volt.dat file.
The calculation is done after Hayley (2010):

    d_obs^TC = d_obs + (d_est^TC - d_est)

Necessary Input:
* d_obs: measured field data to correct
* d_est: synthetic data of inversion result from d_obs
* d_estTC: synthetic data of temperature corrected inversion result of d_obs

Options:
* output: output file
'''
import numpy as np
from optparse import OptionParser


[docs] def handle_options(): '''Handle options. ''' parser = OptionParser() parser.set_defaults(aniso=False) parser.add_option("--dobs", dest="d_obs", help="field data", metavar="file", default="mod/volt.dat", ) parser.add_option("--dest", dest="d_est", help="synthetic data of inversion result", metavar="file", ) parser.add_option("--desttc", dest="d_estTC", help="synthetic data of corrected inversionr esult", metavar="file", ) # output options parser.add_option("-o", "--output", dest="output", help="output file", metavar="file", default="temp/volt.dat", ) (options, args) = parser.parse_args() return options
[docs] def readin_volt(filename): """Read in measurement data from a volt.dat file and return electrodes and measured resistance. """ with open(filename, 'r') as fid: content = np.loadtxt(fid, skiprows=1, usecols=[0, 1, 2]) volt = content[:, 2] elecs = content[:, 0:2] return elecs, volt
[docs] def calc_correction(volt1, volt2, volt3): """Remove the temperature effect from field data using inversion results of that data: print(volt[0]) d_obs^TC = d_obs + (d_est^TC - d_est) Parameters ---------- d_obs: measured field data to correct (volt1) d_est: synthetic data of inversion result from d_obs (volt2) d_estTC: synthetic data of temperature corrected inversion result of d_obs (volt3) """ volt = np.array([a - b + c for a, b, c in zip(volt1, volt2, volt3)]) volt[np.where(volt < 0)] = 0.000001 return volt
[docs] def save_volt(elecs, volt, filename): """Save the values in volt-format. """ # bring data in shape content = np.column_stack((elecs, volt, np.zeros(len(volt)))) # save datapoints with open(filename, 'w') as fid: fid.write('{0}\n'.format(content.shape[0])) with open(filename, 'ab') as fid: np.savetxt(fid, np.array(content), fmt='%i %i %f %f')
[docs] def main(): """Function to remove temperature effect from field data """ options = handle_options() # read in observed and synthetic data elecs, d_obs = readin_volt(options.d_obs) elecs, d_est = readin_volt(options.d_est) elecs, d_estTC = readin_volt(options.d_estTC) # calculate corrected data volt_corr = calc_correction(d_obs, d_est, d_estTC, ) # save data save_volt(elecs, volt_corr, options.output, )
if __name__ == '__main__': main()