[initial] first changes to supply an interface to an obspyDMT database
This commit is contained in:
parent
79412c392d
commit
366db9aef0
26
PyLoT.py
26
PyLoT.py
@ -46,6 +46,9 @@ from obspy import UTCDateTime
|
||||
from obspy.core.event import Magnitude, Origin
|
||||
from obspy.core.util import AttribDict
|
||||
|
||||
from pylot.core.util.obspyDMT_interface import check_obspydmt_structure
|
||||
|
||||
|
||||
try:
|
||||
import pyqtgraph as pg
|
||||
except Exception as e:
|
||||
@ -75,7 +78,8 @@ from pylot.core.util.dataprocessing import read_metadata, restitute_data
|
||||
from pylot.core.util.utils import fnConstructor, getLogin, \
|
||||
full_range, readFilterInformation, trim_station_components, check4gaps, make_pen, pick_color_plt, \
|
||||
pick_linestyle_plt, remove_underscores, check4doubled, identifyPhaseID, excludeQualityClasses, has_spe, \
|
||||
check4rotated, transform_colors_mpl, transform_colors_mpl_str, getAutoFilteroptions
|
||||
check4rotated, transform_colors_mpl, transform_colors_mpl_str, getAutoFilteroptions, check_all_obspy, \
|
||||
check_all_pylot
|
||||
from pylot.core.util.event import Event
|
||||
from pylot.core.io.location import create_creation_info, create_event
|
||||
from pylot.core.util.widgets import FilterOptionsDialog, NewEventDlg, \
|
||||
@ -987,8 +991,14 @@ class MainWindow(QMainWindow):
|
||||
'''
|
||||
Return waveform filenames from event in eventbox.
|
||||
'''
|
||||
# TODO: add dataStructure class for obspyDMT here, this is just a workaround!
|
||||
eventpath = self.get_current_event_path(eventbox)
|
||||
basepath = eventpath.split(os.path.basename(eventpath))[0]
|
||||
if check_obspydmt_structure(basepath):
|
||||
directory = os.path.join(eventpath, 'raw')
|
||||
else:
|
||||
directory = eventpath
|
||||
if self.dataStructure:
|
||||
directory = self.get_current_event_path(eventbox)
|
||||
if not directory:
|
||||
return
|
||||
fnames = [os.path.join(directory, f) for f in os.listdir(directory)]
|
||||
@ -1036,13 +1046,15 @@ class MainWindow(QMainWindow):
|
||||
ed = getExistingDirectories(self, 'Select event directories...')
|
||||
if ed.exec_():
|
||||
eventlist = ed.selectedFiles()
|
||||
# select only folders that start with 'e', containin two dots and have length 12
|
||||
eventlist = [item for item in eventlist if item.split('/')[-1].startswith('e')
|
||||
and len(item.split('/')[-1].split('.')) == 3
|
||||
and len(item.split('/')[-1]) == 12]
|
||||
basepath = eventlist[0].split(os.path.basename(eventlist[0]))[0]
|
||||
if check_obspydmt_structure(basepath):
|
||||
print('Recognized obspyDMT structure in selected files.')
|
||||
eventlist = check_all_obspy(eventlist)
|
||||
else:
|
||||
eventlist = check_all_pylot(eventlist)
|
||||
if not eventlist:
|
||||
print('No events found! Expected structure for event folders: [eEVID.DOY.YR],\n'
|
||||
' e.g. eventID=1, doy=2, yr=2016: e0001.002.16')
|
||||
' e.g. eventID=1, doy=2, yr=2016: e0001.002.16 or obspyDMT database')
|
||||
return
|
||||
else:
|
||||
return
|
||||
|
@ -1 +1 @@
|
||||
39f92-dirty
|
||||
7941-dirty
|
||||
|
28
pylot/core/util/obspyDMT_interface.py
Normal file
28
pylot/core/util/obspyDMT_interface.py
Normal file
@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
from obspy import UTCDateTime
|
||||
|
||||
def check_obspydmt_structure(path):
|
||||
'''
|
||||
Check path for obspyDMT event structure.
|
||||
:param path:
|
||||
:return:
|
||||
'''
|
||||
ev_info = os.path.join(path, 'EVENTS-INFO')
|
||||
if os.path.isdir(ev_info):
|
||||
if os.path.isfile(os.path.join(ev_info, 'logger_command.txt')):
|
||||
return True
|
||||
return False
|
||||
|
||||
def check_obspydmt_eventfolder(folder):
|
||||
try:
|
||||
time = folder.split('.')[0]
|
||||
time = time.replace('_', 'T')
|
||||
time = UTCDateTime(time)
|
||||
return True, time
|
||||
except Exception as e:
|
||||
return False, e
|
||||
|
||||
check_obspydmt_eventfolder('20110311_054623.a')
|
@ -9,4 +9,4 @@ Created on Wed Jan 26 17:47:25 2015
|
||||
from pylot.core.io.data import SeiscompDataStructure, PilotDataStructure
|
||||
|
||||
DATASTRUCTURE = {'PILOT': PilotDataStructure, 'SeisComP': SeiscompDataStructure,
|
||||
None: None}
|
||||
'obspyDMT': None, None: None}
|
||||
|
@ -6,6 +6,7 @@ import os
|
||||
import platform
|
||||
import re
|
||||
import subprocess
|
||||
import warnings
|
||||
|
||||
import numpy as np
|
||||
from obspy import UTCDateTime, read
|
||||
@ -13,6 +14,8 @@ from obspy.core import AttribDict
|
||||
from obspy.signal.rotate import rotate2zne
|
||||
from obspy.io.xseed.utils import SEEDParserException
|
||||
|
||||
from pylot.core.util.obspyDMT_interface import check_obspydmt_eventfolder
|
||||
|
||||
from pylot.core.io.inputs import PylotParameter, FilterOptions
|
||||
from pylot.styles import style_settings
|
||||
|
||||
@ -1216,6 +1219,46 @@ def has_spe(pick):
|
||||
return pick['spe']
|
||||
|
||||
|
||||
def check_all_obspy(eventlist):
|
||||
ev_type = 'obspydmt'
|
||||
return check_event_folders(eventlist, ev_type)
|
||||
|
||||
|
||||
def check_all_pylot(eventlist):
|
||||
ev_type = 'pylot'
|
||||
return check_event_folders(eventlist, ev_type)
|
||||
|
||||
|
||||
def check_event_folders(eventlist, ev_type):
|
||||
checklist = []
|
||||
clean_eventlist = []
|
||||
for path in eventlist:
|
||||
folder_check = check_event_folder(path)
|
||||
if not folder_check:
|
||||
warnings.warn('Unrecognized event folder: {}'.format(path))
|
||||
continue
|
||||
checklist.append(folder_check == ev_type)
|
||||
clean_eventlist.append(path)
|
||||
if all(checklist) or len(checklist) == 0:
|
||||
return clean_eventlist
|
||||
else:
|
||||
warnings.warn('Not all selected folders of type {}'.format(ev_type))
|
||||
return []
|
||||
|
||||
|
||||
def check_event_folder(path):
|
||||
ev_type = None
|
||||
folder = path.split('/')[-1]
|
||||
# for pylot: select only folders that start with 'e', containin two dots and have length 12
|
||||
if (folder.startswith('e')
|
||||
and len(folder.split('.')) == 3
|
||||
and len(folder) == 12):
|
||||
ev_type = 'pylot'
|
||||
elif check_obspydmt_eventfolder(folder)[0]:
|
||||
ev_type = 'obspydmt'
|
||||
return ev_type
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user