Stabilized AICPicker by introducing 1st derivative of CF to find global maximum.
This commit is contained in:
		
							parent
							
								
									380cccdf16
								
							
						
					
					
						commit
						ea68b38f7e
					
				@ -52,7 +52,7 @@ class AutoPicking(object):
 | 
			
		||||
        :type: float
 | 
			
		||||
 | 
			
		||||
        :param: Pick1, initial (prelimenary) onset time, starting point for PragPicker and
 | 
			
		||||
         EarlLatePick
 | 
			
		||||
         EarlLatePicker
 | 
			
		||||
        :type: float
 | 
			
		||||
 | 
			
		||||
        '''
 | 
			
		||||
@ -189,8 +189,16 @@ class AICPicker(AutoPicking):
 | 
			
		||||
        #remove offset
 | 
			
		||||
        offset = abs(min(aic) - min(aicsmooth))
 | 
			
		||||
        aicsmooth = aicsmooth - offset
 | 
			
		||||
        #get maximum of CF as starting point
 | 
			
		||||
        icfmax = np.argmax(aic)
 | 
			
		||||
        #get maximum of 1st derivative of CF (more stable!) as starting point
 | 
			
		||||
        diffcf = np.diff(aicsmooth)
 | 
			
		||||
        #find NaN's
 | 
			
		||||
        nn = np.isnan(diffcf)
 | 
			
		||||
        if len(nn) > 1:
 | 
			
		||||
           diffcf[nn] = 0
 | 
			
		||||
        #taper CF to get rid off side maxima
 | 
			
		||||
        tap = np.hanning(len(diffcf))
 | 
			
		||||
        diffcf = tap * diffcf * max(abs(aicsmooth))
 | 
			
		||||
        icfmax = np.argmax(diffcf)
 | 
			
		||||
        
 | 
			
		||||
        #find minimum in front of maximum
 | 
			
		||||
        lpickwindow = int(round(self.PickWindow / self.dt))
 | 
			
		||||
@ -222,6 +230,11 @@ class AICPicker(AutoPicking):
 | 
			
		||||
           #find maximum within slope determination window
 | 
			
		||||
           #'cause slope should be calculated up to first local minimum only!
 | 
			
		||||
           imax = np.argmax(self.Data[0].data[islope])
 | 
			
		||||
           if imax == 0:
 | 
			
		||||
              print 'AICPicker: Maximum for slope determination right at the beginning of the window!'
 | 
			
		||||
              print 'Choose longer slope determination window!'
 | 
			
		||||
              pdb.set_trace()
 | 
			
		||||
              return
 | 
			
		||||
           islope = islope[0][0 :imax]
 | 
			
		||||
           dataslope = self.Data[0].data[islope]
 | 
			
		||||
           #calculate slope as polynomal fit of order 1
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user