128 lines
4.3 KiB
Python
128 lines
4.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
class AutoPickParameter(object):
|
|
'''
|
|
AutoPickParameters is a parameter type object capable to read and/or write
|
|
parameter ASCII and binary files.
|
|
|
|
Parameters are given for example as follows:
|
|
|
|
phl S # phaselabel
|
|
ff1 0.1 # freqmin
|
|
ff2 0.5 # freqmax
|
|
tdet 6.875 # det-window_(s)_for_ar
|
|
tpred 2.5 # pred-window_(s)_for_ar
|
|
order 4 # order_of_ar
|
|
fnoise 0 # noise_level_for_ar
|
|
suppp 7 # envelopecoeff
|
|
tolt 300 # (s)time around arrival time
|
|
f1tpwt 4 # propfact_minfreq_secondtaper
|
|
pickwindow 9 # length_of_pick_window
|
|
w1 1 # length_of_smoothing_window
|
|
w2 0.37 # cf(i-1)*(1+peps)_for_local_min
|
|
w3 0.25 # cf(i-1)*(1+peps)_for_local_min
|
|
tslope 0.8;2 # slope_det_window_loc_glob
|
|
aerr 30;60 # adjusted_error_slope_fitting_loc_glob
|
|
tsn 20;5;20;10 # length_signal_window_S/N
|
|
proPh Sn # nextprominentphase
|
|
'''
|
|
|
|
def __init__(self, fn=None):
|
|
'''
|
|
Initialize parameter object:
|
|
|
|
read content of an ASCII file an form a type consistent dictionary
|
|
contain all parameters.
|
|
'''
|
|
self.__filename = fn
|
|
parFileCont = {}
|
|
try:
|
|
if self.__filename is not None:
|
|
inputFile = open(self.__filename, 'r')
|
|
lines = inputFile.readlines()
|
|
for line in lines:
|
|
parspl = line.split('\t')[:2]
|
|
parFileCont[parspl[0].strip()] = parspl[1]
|
|
for key, value in parFileCont.iteritems():
|
|
try:
|
|
val = int(value)
|
|
except:
|
|
try:
|
|
val = float(value)
|
|
except:
|
|
if value.find(';') > 0:
|
|
vallist = value.strip().split(';')
|
|
val = []
|
|
for val0 in vallist:
|
|
val0 = float(val0)
|
|
val.append(val0)
|
|
else:
|
|
val = str(value.strip())
|
|
parFileCont[key] = val
|
|
else:
|
|
parFileCont = {}
|
|
except Exception, e:
|
|
self._printParameterError(e)
|
|
parFileCont = {}
|
|
self.__parameter = parFileCont
|
|
|
|
# Human-readable string representation of the object
|
|
def __str__(self):
|
|
string = ''
|
|
string += 'Automated picking parameter:\n\n'
|
|
if self.__parameter:
|
|
for key, value in self.__parameter.iteritems():
|
|
string += '%s:\t\t%s\n' % (key, value)
|
|
else:
|
|
string += 'Empty parameter dictionary.'
|
|
return string
|
|
|
|
# String representation of the object
|
|
def __repr__(self):
|
|
return "AutoPickParameter('%s')" % self.__filename
|
|
|
|
# Boolean test
|
|
def __nonzero__(self):
|
|
return self.__parameter
|
|
|
|
def __getitem__(self, key):
|
|
return self.__parameter[key]
|
|
|
|
def __setitem__(self, key, value):
|
|
self.__parameter[key] = value
|
|
|
|
def __delitem__(self, key):
|
|
del self.__parameter[key]
|
|
|
|
def __iter__(self):
|
|
return iter(self.__parameter)
|
|
|
|
def __len__(self):
|
|
return len(self.__parameter.keys())
|
|
|
|
def getParam(self, *args):
|
|
try:
|
|
for param in args:
|
|
try:
|
|
return self.__getitem__(param)
|
|
except KeyError, e:
|
|
self._printParameterError(e)
|
|
except TypeError:
|
|
try:
|
|
return self.__getitem__(args)
|
|
except KeyError, e:
|
|
self._printParameterError(e)
|
|
|
|
def setParam(self, **kwargs):
|
|
for param, value in kwargs.iteritems():
|
|
try:
|
|
self.__setitem__(param, value)
|
|
except KeyError, e:
|
|
self._printParameterError(e)
|
|
print self
|
|
|
|
def _printParameterError(self, errmsg):
|
|
print 'ParameterError:\n non-existent parameter %s' % errmsg
|