parallization of picking algorithm
This commit is contained in:
parent
db17cb4f8d
commit
1f47f3dd85
@ -78,6 +78,12 @@ class SeismicShot(object):
|
|||||||
def setParameters(self, name, value):
|
def setParameters(self, name, value):
|
||||||
self.paras[name] = value
|
self.paras[name] = value
|
||||||
|
|
||||||
|
def setVmin(self, vmin):
|
||||||
|
self.setParameters('vmin', vmin)
|
||||||
|
|
||||||
|
def setVmax(self, vmax):
|
||||||
|
self.setParameters('vmax', vmax)
|
||||||
|
|
||||||
def setCut(self, cut):
|
def setCut(self, cut):
|
||||||
self.setParameters('cut', cut)
|
self.setParameters('cut', cut)
|
||||||
|
|
||||||
@ -102,6 +108,43 @@ class SeismicShot(object):
|
|||||||
def setSourcefile(self, sourcefile):
|
def setSourcefile(self, sourcefile):
|
||||||
self.setParameters('sourcefile', sourcefile)
|
self.setParameters('sourcefile', sourcefile)
|
||||||
|
|
||||||
|
def setMethod(self, method):
|
||||||
|
self.setParameters('method', method)
|
||||||
|
|
||||||
|
def setAicwindow(self, aicwindow):
|
||||||
|
self.setParameters('aicwindow', aicwindow)
|
||||||
|
|
||||||
|
def setFolm(self, folm):
|
||||||
|
self.setParameters('folm', folm)
|
||||||
|
|
||||||
|
def setDynPickwindow(self, traceID, cutdist = 5.):
|
||||||
|
distance = self.getDistance(traceID) # receive distance
|
||||||
|
|
||||||
|
vmin = self.getVmin()
|
||||||
|
vmax = self.getVmax()
|
||||||
|
|
||||||
|
pickwin_used = self.getCut()
|
||||||
|
cutwindow = self.getCut()
|
||||||
|
|
||||||
|
# for higher distances use a linear vmin/vmax to cut out late/early regions with high noise
|
||||||
|
if distance > cutdist:
|
||||||
|
pwleft = distance / vmax
|
||||||
|
pwright = distance / vmin
|
||||||
|
if pwright > cutwindow[1]:
|
||||||
|
pwright = cutwindow[1]
|
||||||
|
pickwin_used = (pwleft, pwright)
|
||||||
|
|
||||||
|
self.setPickwindow(traceID, pickwin_used)
|
||||||
|
|
||||||
|
def getMethod(self):
|
||||||
|
return self.paras['method']
|
||||||
|
|
||||||
|
def getAicwindow(self):
|
||||||
|
return self.paras['aicwindow']
|
||||||
|
|
||||||
|
def getFolm(self):
|
||||||
|
return self.paras['folm']
|
||||||
|
|
||||||
def getParas(self):
|
def getParas(self):
|
||||||
return self.paras
|
return self.paras
|
||||||
|
|
||||||
@ -132,6 +175,12 @@ class SeismicShot(object):
|
|||||||
def getSourcefile(self):
|
def getSourcefile(self):
|
||||||
return self.paras['sourcefile']
|
return self.paras['sourcefile']
|
||||||
|
|
||||||
|
def getVmin(self):
|
||||||
|
return self.paras['vmin']
|
||||||
|
|
||||||
|
def getVmax(self):
|
||||||
|
return self.paras['vmax']
|
||||||
|
|
||||||
def getManualPick(self, traceID):
|
def getManualPick(self, traceID):
|
||||||
if not self.getManualPickFlag(traceID) == 0:
|
if not self.getManualPickFlag(traceID) == 0:
|
||||||
return self.manualpicks[traceID]['mpp']
|
return self.manualpicks[traceID]['mpp']
|
||||||
@ -275,7 +324,21 @@ class SeismicShot(object):
|
|||||||
self.setPick(traceID, None)
|
self.setPick(traceID, None)
|
||||||
print 'Warning: ambigious or empty traceID: %s' % traceID
|
print 'Warning: ambigious or empty traceID: %s' % traceID
|
||||||
|
|
||||||
def pickTraces(self, traceID, folm, HosAic='hos', windowsize = (10, 0)): ########## input variables ##########
|
def pickParallel(self, folm, method = 'hos', aicwindow = (10, 0)):
|
||||||
|
import multiprocessing
|
||||||
|
|
||||||
|
self.setFolm(folm)
|
||||||
|
self.setMethod(method)
|
||||||
|
self.setAicwindow(aicwindow)
|
||||||
|
|
||||||
|
maxthreads = multiprocessing.cpu_count()
|
||||||
|
pool = multiprocessing.Pool(maxthreads)
|
||||||
|
|
||||||
|
traceIDs = self.getTraceIDlist()
|
||||||
|
|
||||||
|
pool.map(self.pickTrace, traceIDs)
|
||||||
|
|
||||||
|
def pickTrace(self, traceID):
|
||||||
'''
|
'''
|
||||||
Intitiate picking for a trace.
|
Intitiate picking for a trace.
|
||||||
|
|
||||||
@ -300,17 +363,17 @@ class SeismicShot(object):
|
|||||||
:param: HosAic, get hos or aic pick (can be 'hos'(default) or 'aic')
|
:param: HosAic, get hos or aic pick (can be 'hos'(default) or 'aic')
|
||||||
:type: 'string'
|
:type: 'string'
|
||||||
'''
|
'''
|
||||||
|
self.setDynPickwindow(traceID)
|
||||||
|
|
||||||
hoscf = self.getHOScf(traceID) ### determination of both, HOS and AIC (need to change threshold-picker) ###
|
hoscf = self.getHOScf(traceID) ### determination of both, HOS and AIC (need to change threshold-picker) ###
|
||||||
aiccf = self.getAICcf(traceID)
|
aiccf = self.getAICcf(traceID)
|
||||||
|
|
||||||
self.folm = folm
|
|
||||||
|
|
||||||
self.timeArray[traceID] = hoscf.getTimeArray()
|
self.timeArray[traceID] = hoscf.getTimeArray()
|
||||||
aiccftime, hoscftime = self.threshold(hoscf, aiccf, windowsize, self.getPickwindow(traceID), folm)
|
aiccftime, hoscftime = self.threshold(hoscf, aiccf, self.getAicwindow(), self.getPickwindow(traceID), self.getFolm())
|
||||||
setHosAic = {'hos': hoscftime,
|
setHosAic = {'hos': hoscftime,
|
||||||
'aic': aiccftime}
|
'aic': aiccftime}
|
||||||
|
|
||||||
self.setPick(traceID, setHosAic[HosAic])
|
self.setPick(traceID, setHosAic[self.getMethod()])
|
||||||
|
|
||||||
def setEarllatepick(self, traceID, nfac=1.5):
|
def setEarllatepick(self, traceID, nfac=1.5):
|
||||||
tgap = self.getTgap()
|
tgap = self.getTgap()
|
||||||
|
Loading…
Reference in New Issue
Block a user