pylot/autoPyLoT.py

151 lines
5.5 KiB
Python
Raw Normal View History

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import argparse
import glob
import matplotlib.pyplot as plt
from obspy.core import read
from pylot.core.read.data import Data
from pylot.core.read.inputs import AutoPickParameter
from pylot.core.util.structure import DATASTRUCTURE
from pylot.core.pick.autopick import autopickevent
2015-10-27 10:00:16 +01:00
from pylot.core.pick.utils import writephases
2015-10-19 05:32:10 +02:00
from pylot.core.util.version import get_git_version as _getVersionString
2015-07-02 09:27:11 +02:00
__version__ = _getVersionString()
def autoPyLoT(inputfile):
'''
Determine phase onsets automatically utilizing the automatic picking
algorithms by Kueperkoch et al. 2010/2012.
:param inputfile: path to the input file containing all parameter
information for automatic picking (for formatting details, see.
`~pylot.core.read.input.AutoPickParameter`
:type inputfile: str
:return:
.. rubric:: Example
'''
2015-06-24 10:23:24 +02:00
print '************************************'
print '*********autoPyLoT starting*********'
print 'The Python picking and Location Tool'
print ' Version ', _getVersionString(), '2015'
2015-07-02 15:26:48 +02:00
print ' '
print 'Authors:'
print 'S. Wehling-Benatelli'
print ' Ruhr-Universität Bochum'
print 'L. Küperkoch'
print ' BESTEC GmbH, Landau (Pfalz)'
print 'K. Olbert'
print ' Christian-Albrechts Universität Kiel'
2015-06-24 10:23:24 +02:00
print '************************************'
# reading parameter file
parameter = AutoPickParameter(inputfile)
data = Data()
# getting information on data structure
if parameter.hasParam('datastructure'):
datastructure = DATASTRUCTURE[parameter.getParam('datastructure')]()
dsfields = {'root':parameter.getParam('rootpath'),
'dpath':parameter.getParam('datapath'),
'dbase':parameter.getParam('database')}
2015-05-20 09:59:06 +02:00
exf = ['root', 'dpath', 'dbase']
if parameter.hasParam('eventID'):
dsfields['eventID'] = parameter.getParam('eventID')
exf.append('eventID')
datastructure.modifyFields(**dsfields)
2015-05-20 09:59:06 +02:00
datastructure.setExpandFields(exf)
2015-08-27 05:51:03 +02:00
# get path to inventory or dataless-seed file with station meta data
invdir = parameter.getParam('invdir')
2015-10-27 10:00:16 +01:00
# get path and name of phase file
phasefile = parameter.getParam('phasefile')
# get path and name of NLLoc-control file
locfile = parameter.getparam('locfile')
# path and pattern of NLLoc ttimes from location grid
ttpattern = parameter.getparam('ttpattern')
2015-08-27 05:51:03 +02:00
# multiple event processing
# read each event in database
datapath = datastructure.expandDataPath()
2015-05-20 09:59:06 +02:00
if not parameter.hasParam('eventID'):
for event in [events for events in glob.glob(os.path.join(datapath, '*')) if os.path.isdir(events)]:
data.setWFData(glob.glob(os.path.join(datapath, event, '*')))
print 'Working on event %s' %event
print data
wfdat = data.getWFData() # all available streams
##########################################################
# !automated picking starts here!
picks = autopickevent(wfdat, parameter)
2015-06-26 16:00:20 +02:00
2015-10-27 10:00:16 +01:00
# write phases to NLLoc-phase file
writephases(picks, 'NLLoc', phasefile)
2015-06-02 13:42:44 +02:00
print '------------------------------------------'
print '-----Finished event %s!-----' % event
print '------------------------------------------'
# single event processing
2015-05-20 09:59:06 +02:00
else:
2015-06-02 13:43:39 +02:00
data.setWFData(glob.glob(os.path.join(datapath, parameter.getParam('eventID'), '*')))
print 'Working on event ', parameter.getParam('eventID')
2015-05-20 10:56:53 +02:00
print data
wfdat = data.getWFData() # all available streams
##########################################################
# !automated picking starts here!
picks = autopickevent(wfdat, parameter)
2015-10-27 10:00:16 +01:00
# write phases to NLLoc-phase file
writephases(picks, 'NLLoc', phasefile)
# create comment line for NLLoc-control file
locfiles = printf('LOCFILES %s NLLOC_OBS %s %s 0' % (phasefile, ttpattern, NLLocoutfile))
2015-06-26 16:00:20 +02:00
2015-06-02 13:42:44 +02:00
print '------------------------------------------'
print '-------Finished event %s!-------' % parameter.getParam('eventID')
print '------------------------------------------'
2015-07-02 15:26:48 +02:00
print '####################################'
2015-06-24 10:23:24 +02:00
print '************************************'
print '*********autoPyLoT terminates*******'
print 'The Python picking and Location Tool'
print '************************************'
if __name__ == "__main__":
# parse arguments
parser = argparse.ArgumentParser(
description='''autoPyLoT automatically picks phase onset times using higher order statistics,
autoregressive prediction and AIC''')
parser.add_argument('-i', '-I', '--inputfile', type=str,
action='store',
help='''full path to the file containing the input
parameters for autoPyLoT''',
default=os.path.join(os.path.expanduser('~'), '.pylot',
'autoPyLoT.in')
)
parser.add_argument('-v', '-V', '--version', action='version',
version='autoPyLoT ' + __version__,
help='show version information and exit')
cla = parser.parse_args()
autoPyLoT(str(cla.inputfile))