refresh plot for plotAllPicks by replotting
This commit is contained in:
parent
a19cdc4fee
commit
34abad46e2
@ -18,6 +18,7 @@ class Survey(object):
|
|||||||
self.setParametersForShots()
|
self.setParametersForShots()
|
||||||
self._removeAllEmptyTraces()
|
self._removeAllEmptyTraces()
|
||||||
self._updateShots()
|
self._updateShots()
|
||||||
|
self.setArtificialPick(0, 0) # artificial pick at source origin
|
||||||
|
|
||||||
def _generateSurvey(self):
|
def _generateSurvey(self):
|
||||||
from obspy.core import read
|
from obspy.core import read
|
||||||
@ -33,17 +34,23 @@ class Survey(object):
|
|||||||
shot_dict[shotnumber] = seismicshot.SeismicShot(obsfile)
|
shot_dict[shotnumber] = seismicshot.SeismicShot(obsfile)
|
||||||
shot_dict[shotnumber].setParameters('shotnumber', shotnumber)
|
shot_dict[shotnumber].setParameters('shotnumber', shotnumber)
|
||||||
|
|
||||||
self.setArtificialPick(0, 0) # artificial pick at source origin
|
|
||||||
|
|
||||||
self.data = shot_dict
|
self.data = shot_dict
|
||||||
print ("Generated Survey object for %d shots" % len(shotlist))
|
print ("Generated Survey object for %d shots" % len(shotlist))
|
||||||
print ("Total number of traces: %d \n" %self.countAllTraces())
|
print ("Total number of traces: %d \n" %self.countAllTraces())
|
||||||
|
|
||||||
|
def setArtificialPick(self, traceID, pick):
|
||||||
|
'''
|
||||||
|
Sets an artificial pick for a traceID of all shots in the survey object.
|
||||||
|
(This can be used to create a pick with t = 0 at the source origin)
|
||||||
|
'''
|
||||||
|
for shot in self.data.values():
|
||||||
|
shot.setPick(traceID, pick)
|
||||||
|
|
||||||
def setParametersForShots(self, cutwindow = (0, 0.2), tmovwind = 0.3, tsignal = 0.03, tgap = 0.0007):
|
def setParametersForShots(self, cutwindow = (0, 0.2), tmovwind = 0.3, tsignal = 0.03, tgap = 0.0007):
|
||||||
if (cutwindow == (0, 0.2) and tmovwind == 0.3 and
|
if (cutwindow == (0, 0.2) and tmovwind == 0.3 and
|
||||||
tsignal == 0.03 and tgap == 0.0007):
|
tsignal == 0.03 and tgap == 0.0007):
|
||||||
print ("Warning: Standard values used for "
|
print ("Warning: Standard values used for "
|
||||||
"setParamters. This may not be clever.")
|
"setParamters. This might not be clever.")
|
||||||
# CHANGE this later. Parameters only needed for survey, not for each shot.
|
# CHANGE this later. Parameters only needed for survey, not for each shot.
|
||||||
for shot in self.data.values():
|
for shot in self.data.values():
|
||||||
shot.setCut(cutwindow)
|
shot.setCut(cutwindow)
|
||||||
@ -120,14 +127,13 @@ class Survey(object):
|
|||||||
shot.setPickwindow(traceID, pickwin_used)
|
shot.setPickwindow(traceID, pickwin_used)
|
||||||
shot.pickTraces(traceID, windowsize, folm, HosAic) # picker
|
shot.pickTraces(traceID, windowsize, folm, HosAic) # picker
|
||||||
|
|
||||||
# ++ TEST: set and check SNR before adding to distance bin ############################
|
|
||||||
shot.setSNR(traceID)
|
shot.setSNR(traceID)
|
||||||
#if shot.getSNR(traceID)[0] < snrthreshold:
|
#if shot.getSNR(traceID)[0] < snrthreshold:
|
||||||
if shot.getSNR(traceID)[0] < shot.getSNRthreshold(traceID):
|
if shot.getSNR(traceID)[0] < shot.getSNRthreshold(traceID):
|
||||||
shot.removePick(traceID)
|
shot.removePick(traceID)
|
||||||
# -- TEST: set and check SNR before adding to distance bin ############################
|
|
||||||
|
|
||||||
if shot.getFlag(traceID) is not 0:
|
# set epp and lpp if SNR > 1 (else earllatepicker cant set values)
|
||||||
|
if shot.getSNR(traceID)[0] > 1:
|
||||||
shot.setEarllatepick(traceID)
|
shot.setEarllatepick(traceID)
|
||||||
|
|
||||||
tpicksum += (datetime.now() - tstartpick); tpick = tpicksum/count
|
tpicksum += (datetime.now() - tstartpick); tpick = tpicksum/count
|
||||||
@ -137,6 +143,22 @@ class Survey(object):
|
|||||||
self._update_progress(shot.getShotname(), tend, progress)
|
self._update_progress(shot.getShotname(), tend, progress)
|
||||||
print('\npickAllShots: Finished\n')
|
print('\npickAllShots: Finished\n')
|
||||||
|
|
||||||
|
def recover(self):
|
||||||
|
'''
|
||||||
|
Recovers all (accidently) removed picks. Still regards SNR threshold.
|
||||||
|
'''
|
||||||
|
print('Recovering survey...')
|
||||||
|
numpicks = 0
|
||||||
|
for shot in self.data.values():
|
||||||
|
for traceID in shot.getTraceIDlist():
|
||||||
|
if shot.getFlag(traceID) == 0:
|
||||||
|
shot.setFlag(traceID, 1)
|
||||||
|
if shot.getSNR(traceID)[0] < shot.getSNRthreshold(traceID):
|
||||||
|
shot.removePick(traceID)
|
||||||
|
else:
|
||||||
|
numpicks += 1
|
||||||
|
print('Recovered %d picks'%numpicks)
|
||||||
|
|
||||||
def setArtificialPick(self, traceID, pick):
|
def setArtificialPick(self, traceID, pick):
|
||||||
for shot in self.data.values():
|
for shot in self.data.values():
|
||||||
shot.setPick(traceID, pick)
|
shot.setPick(traceID, pick)
|
||||||
@ -256,41 +278,116 @@ class Survey(object):
|
|||||||
count += 1
|
count += 1
|
||||||
return count
|
return count
|
||||||
|
|
||||||
def plotAllPicks(self, plotDeleted = False):
|
def countAllPickedTraces(self):
|
||||||
|
count = 0
|
||||||
|
for shot in self.data.values():
|
||||||
|
for traceID in shot.getTraceIDlist():
|
||||||
|
if shot.getFlag(traceID) is not 0:
|
||||||
|
count += 1
|
||||||
|
return count
|
||||||
|
|
||||||
|
def plotAllPicks(self, plotRemoved = False, ax = None):
|
||||||
'''
|
'''
|
||||||
Plots all picks over the distance between source and receiver. Returns (ax, region)
|
Plots all picks over the distance between source and receiver. Returns (ax, region).
|
||||||
|
Picks can be checked and removed by using region class.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
region.chooseRectangles():
|
||||||
|
- lets the user choose several rectangular regions in the plot
|
||||||
|
|
||||||
|
region.plotTracesInRegions():
|
||||||
|
- creates plots (shot.plot_traces) for all traces in the active regions (i.e. chosen by e.g. chooseRectangles)
|
||||||
|
|
||||||
|
region.setActiveRegionsForDeletion():
|
||||||
|
- highlights all shots in a the active regions for deletion
|
||||||
|
|
||||||
|
region.deleteMarkedPicks():
|
||||||
|
- deletes the picks (pick flag set to 0) for all shots set for deletion
|
||||||
|
|
||||||
|
region.deselectSelection(number):
|
||||||
|
- deselects the region of number = number
|
||||||
|
|
||||||
'''
|
'''
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import math
|
import math
|
||||||
plt.interactive(True)
|
plt.interactive(True)
|
||||||
from pylot.core.active.surveyPlotTools import regions
|
from pylot.core.active.surveyPlotTools import regions
|
||||||
|
refreshPlot = False
|
||||||
|
|
||||||
|
if ax is not None: refreshPlot = True
|
||||||
|
|
||||||
dist = []
|
dist = []
|
||||||
pick = []
|
pick = []
|
||||||
snrloglist = []
|
snrloglist = []
|
||||||
for shot in self.data.values():
|
for shot in self.data.values():
|
||||||
for traceID in shot.getTraceIDlist():
|
for traceID in shot.getTraceIDlist():
|
||||||
if plotDeleted == False:
|
if plotRemoved == False:
|
||||||
if shot.getFlag(traceID) is not 0:
|
if shot.getFlag(traceID) is not 0:
|
||||||
dist.append(shot.getDistance(traceID))
|
dist.append(shot.getDistance(traceID))
|
||||||
pick.append(shot.getPick(traceID))
|
pick.append(shot.getPick(traceID))
|
||||||
snrloglist.append(math.log10(shot.getSNR(traceID)[0]))
|
snrloglist.append(math.log10(shot.getSNR(traceID)[0]))
|
||||||
elif plotDeleted == True:
|
elif plotRemoved == True:
|
||||||
dist.append(shot.getDistance(traceID))
|
dist.append(shot.getDistance(traceID))
|
||||||
pick.append(shot.getPick(traceID))
|
pick.append(shot.getPickIncludeRemoved(traceID))
|
||||||
snrloglist.append(math.log10(shot.getSNR(traceID)[0]))
|
snrloglist.append(math.log10(shot.getSNR(traceID)[0]))
|
||||||
|
|
||||||
|
if refreshPlot is False:
|
||||||
ax = self.createPlot(dist, pick, snrloglist, label = 'log10(SNR)')
|
ax = self.createPlot(dist, pick, snrloglist, label = 'log10(SNR)')
|
||||||
region = regions(ax, self.data)
|
region = regions(ax, self)
|
||||||
ax.legend()
|
ax.legend()
|
||||||
|
|
||||||
return ax, region
|
return ax, region
|
||||||
|
elif refreshPlot is True:
|
||||||
|
ax = self.createPlot(dist, pick, snrloglist, label = 'log10(SNR)', ax = ax)
|
||||||
|
ax.legend()
|
||||||
|
return ax
|
||||||
|
|
||||||
def createPlot(self, dist, pick, inkByVal, label):
|
def plotAllShots(self, rows = 3, columns = 4):
|
||||||
|
'''
|
||||||
|
Plots all shots as Matrices with the color corresponding to the traveltime for each receiver.
|
||||||
|
NOTE: Topography (z - coordinate) is not considered in the diagrams!
|
||||||
|
'''
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from mpl_toolkits.mplot3d import Axes3D
|
||||||
|
plt.interactive(True)
|
||||||
|
|
||||||
|
fig = plt.figure()
|
||||||
|
ax = fig.add_subplot(111)
|
||||||
|
|
||||||
|
figPerSubplot = columns * rows
|
||||||
|
|
||||||
|
index = 1
|
||||||
|
#shotnames = []
|
||||||
|
#shotnumbers = []
|
||||||
|
|
||||||
|
# for shot in self.data.values():
|
||||||
|
# shotnames.append(shot.getShotname())
|
||||||
|
# shotnumbers.append(shot.getShotnumber())
|
||||||
|
|
||||||
|
# shotnumbers = [shotnumbers for (shotnumbers, shotnames) in sorted(zip(shotnumbers, shotnames))]
|
||||||
|
|
||||||
|
for shotnumber in self.getShotlist():
|
||||||
|
if index <= figPerSubplot:
|
||||||
|
#ax = fig.add_subplot(3,3,i, projection = '3d', title = 'shot:'
|
||||||
|
#+str(shot_dict[shotnumber].getShotnumber()), xlabel = 'X', ylabel = 'Y', zlabel = 'traveltime')
|
||||||
|
#shot_dict[shotnumber].plot3dttc(ax = ax, plotpicks = True)
|
||||||
|
ax = fig.add_subplot(3, 4, index)
|
||||||
|
self.getShot(shotnumber).matshow(ax = ax, colorbar = False, annotations = True)
|
||||||
|
index += 1
|
||||||
|
if index > figPerSubplot:
|
||||||
|
fig.subplots_adjust(left = 0, bottom = 0, right = 1, top = 1, wspace = 0, hspace = 0)
|
||||||
|
fig = plt.figure()
|
||||||
|
index = 1
|
||||||
|
|
||||||
|
fig.subplots_adjust(left = 0, bottom = 0, right = 1, top = 1, wspace = 0, hspace = 0)
|
||||||
|
|
||||||
|
def createPlot(self, dist, pick, inkByVal, label, ax = None):
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
plt.interactive(True)
|
plt.interactive(True)
|
||||||
cm = plt.cm.jet
|
cm = plt.cm.jet
|
||||||
|
|
||||||
|
if ax is None:
|
||||||
|
print('Generating new plot...')
|
||||||
fig = plt.figure()
|
fig = plt.figure()
|
||||||
ax = fig.add_subplot(111)
|
ax = fig.add_subplot(111)
|
||||||
fig = ax.scatter(dist, pick, cmap = cm, c = inkByVal, s = 5, edgecolors = 'none', label = label)
|
fig = ax.scatter(dist, pick, cmap = cm, c = inkByVal, s = 5, edgecolors = 'none', label = label)
|
||||||
@ -299,6 +396,9 @@ class Survey(object):
|
|||||||
plt.title('Plot of all Picks')
|
plt.title('Plot of all Picks')
|
||||||
plt.xlabel('Distance [m]')
|
plt.xlabel('Distance [m]')
|
||||||
plt.ylabel('Time [s]')
|
plt.ylabel('Time [s]')
|
||||||
|
else:
|
||||||
|
print('Refreshing plot...')
|
||||||
|
ax.scatter(dist, pick, cmap = cm, c = inkByVal, s = 5, edgecolors = 'none', label = label)
|
||||||
|
|
||||||
return ax
|
return ax
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user