WIP: Simplify data structure #39
38
PyLoT.py
38
PyLoT.py
@ -178,6 +178,7 @@ class MainWindow(QMainWindow):
|
||||
self.autodata = Data(self)
|
||||
|
||||
self.fnames = None
|
||||
self.fnames_comp = None
|
||||
self._stime = None
|
||||
|
||||
# track deleted picks for logging
|
||||
@ -1129,16 +1130,19 @@ class MainWindow(QMainWindow):
|
||||
else:
|
||||
return
|
||||
|
||||
def getWFFnames_from_eventbox(self, eventbox=None):
|
||||
def getWFFnames_from_eventbox(self, eventbox: str = None, subpath: str = None) -> list:
|
||||
'''
|
||||
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 subpath:
|
||||
eventpath = os.path.join(eventpath, subpath)
|
||||
if not os.path.isdir(eventpath):
|
||||
return []
|
||||
if self.dataStructure:
|
||||
if not eventpath:
|
||||
return
|
||||
return []
|
||||
fnames = [os.path.join(eventpath, f) for f in os.listdir(eventpath)]
|
||||
else:
|
||||
raise DatastructureError('not specified')
|
||||
@ -1960,13 +1964,20 @@ class MainWindow(QMainWindow):
|
||||
|
||||
def prepareLoadWaveformData(self):
|
||||
self.fnames = self.getWFFnames_from_eventbox()
|
||||
self.fnames_syn = []
|
||||
self.fnames_comp = []
|
||||
fnames_comp = self.getWFFnames_from_eventbox(subpath='compare')
|
||||
self.dataPlot.activateCompareOptions(bool(fnames_comp))
|
||||
if fnames_comp:
|
||||
if self.dataPlot.comp_checkbox.isChecked():
|
||||
self.fnames_comp = fnames_comp
|
||||
|
||||
eventpath = self.get_current_event_path()
|
||||
basepath = eventpath.split(os.path.basename(eventpath))[0]
|
||||
self.obspy_dmt = check_obspydmt_structure(basepath)
|
||||
self.dataPlot.activateObspyDMToptions(self.obspy_dmt)
|
||||
if self.obspy_dmt:
|
||||
self.prepareObspyDMT_data(eventpath)
|
||||
self.dataPlot.activateCompareOptions(True)
|
||||
|
||||
def loadWaveformData(self):
|
||||
'''
|
||||
@ -1999,7 +2010,7 @@ class MainWindow(QMainWindow):
|
||||
tstop = None
|
||||
|
||||
self.data.setWFData(self.fnames,
|
||||
self.fnames_syn,
|
||||
self.fnames_comp,
|
||||
checkRotated=True,
|
||||
metadata=self.metadata,
|
||||
tstart=tstart,
|
||||
@ -2007,7 +2018,7 @@ class MainWindow(QMainWindow):
|
||||
|
||||
def prepareObspyDMT_data(self, eventpath):
|
||||
qcbox_processed = self.dataPlot.qcombo_processed
|
||||
qcheckb_syn = self.dataPlot.syn_checkbox
|
||||
qcheckb_syn = self.dataPlot.comp_checkbox
|
||||
qcbox_processed.setEnabled(False)
|
||||
qcheckb_syn.setEnabled(False)
|
||||
for fpath in os.listdir(eventpath):
|
||||
@ -2015,8 +2026,8 @@ class MainWindow(QMainWindow):
|
||||
if 'syngine' in fpath:
|
||||
eventpath_syn = os.path.join(eventpath, fpath)
|
||||
qcheckb_syn.setEnabled(True)
|
||||
if self.dataPlot.syn_checkbox.isChecked():
|
||||
self.fnames_syn = [os.path.join(eventpath_syn, filename) for filename in os.listdir(eventpath_syn)]
|
||||
if self.dataPlot.comp_checkbox.isChecked():
|
||||
self.fnames_comp = [os.path.join(eventpath_syn, filename) for filename in os.listdir(eventpath_syn)]
|
||||
if 'processed' in fpath:
|
||||
qcbox_processed.setEnabled(True)
|
||||
if qcbox_processed.isEnabled():
|
||||
@ -2297,7 +2308,7 @@ class MainWindow(QMainWindow):
|
||||
comp = self.getComponent()
|
||||
title = 'section: {0} components'.format(zne_text[comp])
|
||||
wfst = self.get_data().getWFData()
|
||||
wfsyn = self.get_data().getSynWFData()
|
||||
wfsyn = self.get_data().getAltWFdata()
|
||||
if self.filterActionP.isChecked() and filter:
|
||||
self.filterWaveformData(plot=False, phase='P')
|
||||
elif self.filterActionS.isChecked() and filter:
|
||||
@ -2609,18 +2620,21 @@ class MainWindow(QMainWindow):
|
||||
print("Warning! No network, station, and location info available!")
|
||||
return
|
||||
self.update_status('picking on station {0}'.format(station))
|
||||
data = self.get_data().getOriginalWFData().copy()
|
||||
wfdata = self.get_data().getOriginalWFData().copy()
|
||||
wfdata_comp = self.get_data().getAltWFdata().copy()
|
||||
event = self.get_current_event()
|
||||
wftype = self.dataPlot.qcombo_processed.currentText() if self.obspy_dmt else None
|
||||
pickDlg = PickDlg(self, parameter=self._inputs,
|
||||
data=data.select(station=station),
|
||||
data=wfdata.select(station=station),
|
||||
data_compare=wfdata_comp.select(station=station),
|
||||
station=station, network=network,
|
||||
location=location,
|
||||
picks=self.getPicksOnStation(station, 'manual'),
|
||||
autopicks=self.getPicksOnStation(station, 'auto'),
|
||||
metadata=self.metadata, event=event,
|
||||
model=self.inputs.get('taup_model'),
|
||||
filteroptions=self.filteroptions, wftype=wftype)
|
||||
filteroptions=self.filteroptions, wftype=wftype,
|
||||
show_comp_data=self.dataPlot.comp_checkbox.isChecked())
|
||||
if self.filterActionP.isChecked():
|
||||
pickDlg.currentPhase = "P"
|
||||
pickDlg.filterWFData()
|
||||
|
@ -450,10 +450,11 @@ class Data(object):
|
||||
data.filter(**kwargs)
|
||||
self.dirty = True
|
||||
|
||||
def setWFData(self, fnames, fnames_syn=None, checkRotated=False, metadata=None, tstart=0, tstop=0):
|
||||
def setWFData(self, fnames, fnames_alt=None, checkRotated=False, metadata=None, tstart=0, tstop=0):
|
||||
"""
|
||||
Clear current waveform data and set given waveform data
|
||||
:param fnames: waveform data names to append
|
||||
:param fnames_alt: alternative data to show (e.g. synthetic/processed)
|
||||
:type fnames: list
|
||||
"""
|
||||
def check_fname_exists(filenames: list) -> list:
|
||||
@ -463,14 +464,14 @@ class Data(object):
|
||||
|
||||
self.wfdata = Stream()
|
||||
self.wforiginal = None
|
||||
self.wfsyn = Stream()
|
||||
self.wf_alt = Stream()
|
||||
if tstart == tstop:
|
||||
tstart = tstop = None
|
||||
self.tstart = tstart
|
||||
self.tstop = tstop
|
||||
|
||||
fnames = check_fname_exists(fnames)
|
||||
fnames_syn = check_fname_exists(fnames_syn)
|
||||
fnames_alt = check_fname_exists(fnames_alt)
|
||||
# if obspy_dmt:
|
||||
# wfdir = 'raw'
|
||||
# self.processed = False
|
||||
@ -488,8 +489,8 @@ class Data(object):
|
||||
# wffnames = fnames
|
||||
if fnames is not None:
|
||||
self.appendWFData(fnames)
|
||||
if fnames_syn is not None:
|
||||
self.appendWFData(fnames_syn, synthetic=True)
|
||||
if fnames_alt is not None:
|
||||
self.appendWFData(fnames_alt, alternative=True)
|
||||
else:
|
||||
return False
|
||||
|
||||
@ -511,7 +512,7 @@ class Data(object):
|
||||
self.dirty = False
|
||||
return True
|
||||
|
||||
def appendWFData(self, fnames, synthetic=False):
|
||||
def appendWFData(self, fnames, alternative=False):
|
||||
"""
|
||||
Read waveform data from fnames and append it to current wf data
|
||||
:param fnames: waveform data to append
|
||||
@ -524,20 +525,20 @@ class Data(object):
|
||||
if self.dirty:
|
||||
self.resetWFData()
|
||||
|
||||
real_or_syn_data = {True: self.wfsyn,
|
||||
False: self.wfdata}
|
||||
orig_or_alternative_data = {True: self.wf_alt,
|
||||
False: self.wfdata}
|
||||
|
||||
warnmsg = ''
|
||||
for fname in set(fnames):
|
||||
try:
|
||||
real_or_syn_data[synthetic] += read(fname, starttime=self.tstart, endtime=self.tstop)
|
||||
orig_or_alternative_data[alternative] += read(fname, starttime=self.tstart, endtime=self.tstop)
|
||||
except TypeError:
|
||||
try:
|
||||
real_or_syn_data[synthetic] += read(fname, format='GSE2', starttime=self.tstart, endtime=self.tstop)
|
||||
orig_or_alternative_data[alternative] += read(fname, format='GSE2', starttime=self.tstart, endtime=self.tstop)
|
||||
except Exception as e:
|
||||
try:
|
||||
real_or_syn_data[synthetic] += read(fname, format='SEGY', starttime=self.tstart,
|
||||
endtime=self.tstop)
|
||||
orig_or_alternative_data[alternative] += read(fname, format='SEGY', starttime=self.tstart,
|
||||
endtime=self.tstop)
|
||||
except Exception as e:
|
||||
warnmsg += '{0}\n{1}\n'.format(fname, e)
|
||||
except SacIOError as se:
|
||||
@ -552,8 +553,8 @@ class Data(object):
|
||||
def getOriginalWFData(self):
|
||||
return self.wforiginal
|
||||
|
||||
def getSynWFData(self):
|
||||
return self.wfsyn
|
||||
def getAltWFdata(self):
|
||||
return self.wf_alt
|
||||
|
||||
def resetWFData(self):
|
||||
"""
|
||||
|
@ -474,17 +474,19 @@ class Array_map(QtWidgets.QWidget):
|
||||
transform=ccrs.PlateCarree(), label='deleted'))
|
||||
|
||||
def openPickDlg(self, ind):
|
||||
data = self._parent.get_data().getWFData()
|
||||
wfdata = self._parent.get_data().getWFData()
|
||||
wfdata_comp = self._parent.get_data().getWFDataComp()
|
||||
for index in ind:
|
||||
network, station = self._station_onpick_ids[index].split('.')[:2]
|
||||
pyl_mw = self._parent
|
||||
try:
|
||||
data = data.select(station=station)
|
||||
if not data:
|
||||
wfdata = wfdata.select(station=station)
|
||||
wfdata_comp = wfdata_comp.select(station=station)
|
||||
if not wfdata:
|
||||
self._warn('No data for station {}'.format(station))
|
||||
return
|
||||
pickDlg = PickDlg(self._parent, parameter=self.parameter,
|
||||
data=data, network=network, station=station,
|
||||
data=wfdata.copy(), data_compare=wfdata_comp.copy(), network=network, station=station,
|
||||
picks=self._parent.get_current_event().getPick(station),
|
||||
autopicks=self._parent.get_current_event().getAutopick(station),
|
||||
filteroptions=self._parent.filteroptions, metadata=self.metadata,
|
||||
|
Loading…
Reference in New Issue
Block a user