From 19f943627a88d3777a05b1a304ca1896d8fcf0b5 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 26 Jun 2018 17:07:38 +0200 Subject: [PATCH] [bugfixes] autopylot --- autoPyLoT.py | 18 +++--- pylot/core/io/data.py | 2 +- pylot/core/util/dataprocessing.py | 101 +++++++++++++++++++----------- pylot/core/util/widgets.py | 1 + 4 files changed, 76 insertions(+), 46 deletions(-) diff --git a/autoPyLoT.py b/autoPyLoT.py index 3c88742f..bf482d1f 100755 --- a/autoPyLoT.py +++ b/autoPyLoT.py @@ -194,16 +194,16 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even events = [events for events in glob.glob(os.path.join(datapath, '*')) if os.path.isdir(events)] elif fnames == 'None' and parameter['eventID'] is not '*' and not type(parameter['eventID']) == list: # single event processing - events = glob.glob(os.path.join(datapath, parameter['eventID'], wfpath_extension)) + events = glob.glob(os.path.join(datapath, parameter['eventID'])) elif fnames == 'None' and type(parameter['eventID']) == list: # multiple event processing events = [] for eventID in parameter['eventID']: - events.append(os.path.join(datapath, eventID, wfpath_extension)) + events.append(os.path.join(datapath, eventID)) else: # autoPyLoT was initialized from GUI events = [] - events.append(os.path.join(eventid, wfpath_extension)) + events.append(eventid) evID = os.path.split(eventid)[-1] locflag = 2 else: @@ -214,8 +214,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even for eventID in eventid: events.append(os.path.join(datapath, parameter['database'], - eventID, - wfpath_extension)) + eventID)) if not events: print('autoPyLoT: No events given. Return!') @@ -229,10 +228,9 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even allpicks = {} glocflag = locflag for eventpath in events: - if not wfpath_extension: - evID = os.path.split(eventpath)[-1] - else: - evID = os.path.split(os.path.split(eventpath)[0])[-1] + evID = os.path.split(eventpath)[-1] + if wfpath_extension: + event_datapath = os.path.join(eventpath, wfpath_extension) fext = '.xml' filename = os.path.join(eventpath, 'PyLoT_' + evID + fext) try: @@ -245,7 +243,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even pylot_event = Event(eventpath) # event should be path to event directory data.setEvtData(pylot_event) if fnames == 'None': - data.setWFData(glob.glob(os.path.join(datapath, eventpath, '*'))) + data.setWFData(glob.glob(os.path.join(datapath, event_datapath, '*'))) # the following is necessary because within # multiple event processing no event ID is provided # in autopylot.in diff --git a/pylot/core/io/data.py b/pylot/core/io/data.py index f10242db..e84badea 100644 --- a/pylot/core/io/data.py +++ b/pylot/core/io/data.py @@ -43,7 +43,7 @@ class Data(object): elif isinstance(evtdata, dict): evt = readPILOTEvent(**evtdata) evtdata = evt - elif isinstance(evtdata, str): + elif type(evtdata) in [str, unicode]: try: cat = read_events(evtdata) if len(cat) is not 1: diff --git a/pylot/core/util/dataprocessing.py b/pylot/core/util/dataprocessing.py index a83d3f1e..cd8cd004 100644 --- a/pylot/core/util/dataprocessing.py +++ b/pylot/core/util/dataprocessing.py @@ -222,41 +222,72 @@ def read_metadata(path_to_inventory): # return metadata_objects -# def read_metadata_file(path_to_inventory_filename): -# # functions used to read metadata for different file endings (or file types) -# read_functions = {'dless': _read_dless, -# 'dseed': _read_dless, -# 'xml': _read_inventory_file, -# 'resp': _read_inventory_file} -# file_ending = path_to_inventory_filename.split('.')[-1] -# if file_ending in read_functions.keys(): -# robj, exc = read_functions[file_ending](path_to_inventory_filename) -# if exc is not None: -# raise exc -# return file_ending, robj -# # in case file endings did not match the above keys, try and error -# for file_type in ['dless', 'xml']: -# robj, exc = read_functions[file_type](path_to_inventory_filename) -# if exc is None: -# return file_type, robj -# -# -# def _read_dless(path_to_inventory): -# exc = None -# try: -# parser = Parser(path_to_inventory) -# except Exception as exc: -# parser = None -# return parser, exc -# -# -# def _read_inventory_file(path_to_inventory): -# exc = None -# try: -# inv = read_inventory(path_to_inventory) -# except Exception as exc: -# inv = None -# return inv, exc +def read_metadata_iterator(path_to_inventory, station_seed_id): + ''' + # search for metadata for a specific station iteratively + ''' + station, network, location, channel = station_seed_id.split('.') + fnames = glob.glob(os.path.join(path_to_inventory, '*' + station_seed_id + '*')) + if not fnames: + # search for station name in filename + fnames = glob.glob(os.path.join(path_to_inventory, '*' + station + '*')) + if not fnames: + # search for network name in filename + fnames = glob.glob(os.path.join(path_to_inventory, '*' + network + '*')) + if not fnames: + print('Could not find filenames matching station name, network name or seed id') + return + for fname in fnames: + invtype, robj = read_metadata_file(os.path.join(path_to_inventory, fname)) + try: + robj.get_coordinates(station_seed_id) + return invtype, robj + except Exception as e: + continue + print('Could not find metadata for station_seed_id {} in path {}'.format(station_seed_id, path_to_inventory)) + + + +def read_metadata_file(path_to_inventory_filename): + ''' + function reading metadata files (either dataless seed, xml or resp) + :param path_to_inventory_filename: + :return: file type/ending, inventory object (Parser or Inventory) + ''' + # functions used to read metadata for different file endings (or file types) + read_functions = {'dless': _read_dless, + 'dseed': _read_dless, + 'xml': _read_inventory_file, + 'resp': _read_inventory_file} + file_ending = path_to_inventory_filename.split('.')[-1] + if file_ending in read_functions.keys(): + robj, exc = read_functions[file_ending](path_to_inventory_filename) + if exc is not None: + raise exc + return file_ending, robj + # in case file endings did not match the above keys, try and error + for file_type in ['dless', 'xml']: + robj, exc = read_functions[file_type](path_to_inventory_filename) + if exc is None: + return file_type, robj + + +def _read_dless(path_to_inventory): + exc = None + try: + parser = Parser(path_to_inventory) + except Exception as exc: + parser = None + return parser, exc + + +def _read_inventory_file(path_to_inventory): + exc = None + try: + inv = read_inventory(path_to_inventory) + except Exception as exc: + inv = None + return inv, exc def restitute_trace(input_tuple): diff --git a/pylot/core/util/widgets.py b/pylot/core/util/widgets.py index 95d42fca..b94998eb 100644 --- a/pylot/core/util/widgets.py +++ b/pylot/core/util/widgets.py @@ -3476,6 +3476,7 @@ class TuneAutopicker(QWidget): def clear_all(self): if hasattr(self, 'pdlg_widget'): if self.pdlg_widget: + self.pdlg_widget.setParent(None) del(self.pdlg_widget) if hasattr(self, 'overview'): self.overview.setParent(None)