1 # -*- coding: utf-8 -*-
2 from libhooke import WX_GOOD, ClickedPoint
4 wxversion.select(WX_GOOD)
5 from wx import PostEvent
13 warnings.simplefilter('ignore',np.RankWarning)
16 class multidistanceCommands:
18 def do_multidistance(self,args):
22 Based on the convolution recognition automatically give the distances between the peaks found.
23 The command allow also to remove the unwanted peaks that can be due to interference.
24 When you first issue the command, it will ask for the filename. If you are giving the filename
25 of an existing file, autopeak will resume it and append measurements to it. If you are giving
26 a new filename, it will create the file and append to it until you close Hooke.
27 You can also define a minimun deviation of the peaks.
30 multidistance [deviation]
31 deviation = number of times the convolution signal is above the noise absolute deviation.
34 def find_current_peaks(noflatten, a):
37 a=self.convfilt_config['mindeviation']
41 print "Bad input, using default."
42 abs_devs=self.convfilt_config['mindeviation']
44 defplot=self.current.curve.default_plots()[0]
46 flatten=self._find_plotmanip('flatten') #Extract flatten plotmanip
47 defplot=flatten(defplot, self.current, customvalue=1) #Flatten curve before feeding it to has_peaks
48 pk_loc,peak_size=self.has_peaks(defplot, abs_devs)
49 return pk_loc, peak_size
53 peaks_location, peak_size=find_current_peaks(noflatten, args)
55 #if no peaks, we have nothing to plot. exit.
56 if len(peaks_location)==0:
59 #otherwise, we plot the peak locations.
60 xplotted_ret=self.plots[0].vectors[1][0]
61 yplotted_ret=self.plots[0].vectors[1][1]
62 xgood=[xplotted_ret[index] for index in peaks_location]
63 ygood=[yplotted_ret[index] for index in peaks_location]
65 recplot=self._get_displayed_plot()
66 recplot.vectors.append([xgood,ygood])
67 if recplot.styles==[]:
68 recplot.styles=[None,None,'scatter']
69 recplot.colors=[None,None,None]
71 recplot.styles+=['scatter']
72 recplot.colors+=[None]
74 self._send_plot([recplot])
76 print 'Peaks to ignore (0,1...n from contact point,return to take all)'
77 print 'N to discard measurement'
78 exclude_raw=raw_input('Input:')
83 if not exclude_raw=='':
84 exclude=exclude_raw.split(',')
85 #we convert in numbers the input
87 exclude=[int(item) for item in exclude]
89 print 'Bad input, taking nothing.'
92 # we remove the peaks that we don't want from the list, we need a counter beacause if we remove
93 # a peaks the other peaks in the list are shifted by one at each step
97 peaks_location=peaks_location[1:]
100 peaks_location= peaks_location[0:new_a]+peaks_location[new_a+1:]
101 peak_size= peak_size[0:new_a]+peak_size[new_a+1:]
104 #we calculate the distance vector
106 for i in range(len(peaks_location)-1):
107 dist.append(xplotted_ret[peaks_location[i]]-xplotted_ret[peaks_location[i+1]])
114 if self.autofile=='':
115 self.autofile=raw_input('Multidistance filename? (return to ignore) ')
116 if self.autofile=='':
120 if not os.path.exists(self.autofile):
121 f=open(self.autofile,'w+')
122 f.write('Analysis started '+time.asctime()+'\n')
123 f.write('----------------------------------------\n')
124 f.write('; Delta Distance length (m)\n')
125 f.write(self.current.path+'\n')
133 f=open(self.autofile,'a+')
135 f.write(self.current.path+'\n')