From 1f8e270f26644d2fb2bb122bc780afe9eabfbe3e Mon Sep 17 00:00:00 2001 From: devicerandom Date: Tue, 27 May 2008 09:35:36 +0000 Subject: [PATCH] Merged force clamp patches by Marco Brucale --- generalclamp.py | 83 ++++++++++++++++++++++++++++++++++++------------- hemingclamp.py | 58 +++++++++++++++++++++++----------- hooke.conf | 8 +++-- 3 files changed, 106 insertions(+), 43 deletions(-) diff --git a/generalclamp.py b/generalclamp.py index 9390146..477454e 100644 --- a/generalclamp.py +++ b/generalclamp.py @@ -6,28 +6,68 @@ GENERALCLAMP.py Plugin regarding general force clamp measurements ''' from libhooke import WX_GOOD, ClickedPoint -import wxversion +import wxversion +import libhookecurve as lhc wxversion.select(WX_GOOD) -from wx import PostEvent +from wx import PostEvent -class generalclampCommands: - - - def do_showdefl(self,args): +class generalclampCommands: + + def plotmanip_clamp(self, plot, current, customvalue=False): ''' - SHOWDEFL - Shows the deflection plot for a force clamp curve. - Use 'close' to close the plot. - --- - Syntax: showdefl + Handles some viewing options for the "force clamp" data format, depending on the state of these configuration variables: + (1) If self.config['fc_showphase'] != 0, the 'phase' data column (i.e. the 2nd) is shown in the 0th graph (else it isn't) + (2) If self.config['fc_showimposed'] != 0, the 'imposed deflection' data column (i.e. the 5th) is shown in the 1st graph (else it isn't) + (3) If self.config['fc_interesting'] == 0, the entire curve is shown in the graphs; if it has a non-zero value N, only phase N is shown. + + NOTE - my implementation of point(3) feels quite awkward - someone smarter than me plz polish that! + ''' - if self.current.curve.experiment != 'clamp': - print 'This command makes no sense for a non-force clamp experiment!' - else: - self.current.vectors_to_plot(self.config['correct'],self.config['medfilt'],yclamp='defl') - plot_graph=self.list_of_events['plot_graph'] - wx.PostEvent(self.frame,plot_graph(current=self.current,xaxes=self.config['xaxes'],yaxes=self.config['yaxes'], destination=1)) - + + #not a fclamp curve... + if current.curve.experiment != 'clamp': + return plot + + if self.config['fc_interesting'] != 0 and plot.destination==0: + lower = int((self.config['fc_interesting'])-1) + upper = int((self.config['fc_interesting'])+1) + trim = current.curve.trimindexes()[lower:upper] + newtime = [] + newzpiezo = [] + newphase = [] + for x in range(trim[0],trim[1]): + newtime.append(self.plots[0].vectors[0][0][x]) + newzpiezo.append(self.plots[0].vectors[0][1][x]) + newphase.append(self.plots[0].vectors[1][1][x]) + self.plots[0].vectors[0][0] = newtime + self.plots[0].vectors[0][1] = newzpiezo + self.plots[0].vectors[1][0] = newtime + self.plots[0].vectors[1][1] = newphase + + if self.config['fc_interesting'] != 0 and plot.destination==1: + lower = int((self.config['fc_interesting'])-1) + upper = int((self.config['fc_interesting'])+1) + trim = current.curve.trimindexes()[lower:upper] + newtime = [] + newdefl = [] + newimposed = [] + for x in range(trim[0],trim[1]): + newtime.append(self.plots[1].vectors[0][0][x]) + newdefl.append(self.plots[1].vectors[0][1][x]) + newimposed.append(self.plots[1].vectors[1][1][x]) + self.plots[1].vectors[0][0] = newtime + self.plots[1].vectors[0][1] = newdefl + self.plots[1].vectors[1][0] = newtime + self.plots[1].vectors[1][1] = newimposed + + if self.config['fc_showphase'] == 0 and plot.destination==0: + self.plots[0].remove_set(1) + + if self.config['fc_showimposed'] == 0 and plot.destination==1: + self.plots[1].remove_set(1) + + return plot + def do_time(self,args): ''' TIME @@ -36,11 +76,10 @@ class generalclampCommands: ---- Syntax: time ''' - if self.current.curve.experiment == 'clamp': + if self.current.curve.experiment == 'clamp': print 'Click two points.' - points=self._measure_N_points(N=2) - time=abs(points[0].graph_coords[0]-points[1].graph_coords[0]) - print str(time)+' s' + time=self._delta(set=0)[0] + print str(time*1000)+' ms' else: print 'This command makes no sense for a non-force clamp experiment.' diff --git a/hemingclamp.py b/hemingclamp.py index bc2bc1d..780c5cb 100755 --- a/hemingclamp.py +++ b/hemingclamp.py @@ -69,32 +69,52 @@ class hemingclampDriver(lhc.Driver): return False def _getdata_all(self): - time = [] + time = [] + phase = [] zpiezo = [] - defl = [] - + defl = [] + imposed = [] + trim_indexes = [] + trim_counter = 0.0 + for i in self.data: temp = string.split(i) - #time.append(float(temp[0])*(1.0e-3)) + #time.append(float(temp[0])*(1.0e-3)) # This is managed differently now, since each data point = 1ms: see below + phase.append(float(temp[1])*(1.0e-7)) # The nonsensical (e-7) multiplier is just there to make phase data nicely plottable along other data zpiezo.append(float(temp[2])*(1.0e-9)) - defl.append(float(temp[3])*(1.0e-9)) - + defl.append(float(temp[3])*(1.0e-9)) + imposed.append(float(temp[4])*(1.0e-9)) + + for x in range (0,len(phase)): + if phase[x] != trim_counter: + trim_indexes.append(x) + trim_counter = phase[x] + #we rebuild the time counter assuming 1 point = 1 millisecond c=0.0 for z in zpiezo: time.append(c) - c+=(1.0e-3) + c+=(1.0e-3) - return time,zpiezo,defl + return time,phase,zpiezo,defl,imposed,trim_indexes def time(self): return DataChunk(self._getdata_all()[0]) - + + def phase(self): + return DataChunk(self._getdata_all()[1]) + def zpiezo(self): - return DataChunk(self._getdata_all()[1]) + return DataChunk(self._getdata_all()[2]) def deflection(self): - return DataChunk(self._getdata_all()[2]) + return DataChunk(self._getdata_all()[3]) + + def imposed(self): + return DataChunk(self._getdata_all()[4]) + + def trimindexes(self): + return DataChunk(self._getdata_all()[5]) def close_all(self): ''' @@ -106,18 +126,20 @@ class hemingclampDriver(lhc.Driver): main_plot=lhc.PlotObject() defl_plot=lhc.PlotObject() - time=self.time() + time=self.time() + phase=self.phase() zpiezo=self.zpiezo() - deflection=self.deflection() - - main_plot.vectors=[[time,zpiezo]] + deflection=self.deflection() + imposed=self.imposed() + + main_plot.vectors=[[time,zpiezo],[time,phase]] main_plot.units=['seconds','meters'] main_plot.destination=0 main_plot.title=self.filename - defl_plot.vectors=[[time,deflection]] + defl_plot.vectors=[[time,deflection],[time,imposed]] defl_plot.units=['seconds','Newtons'] - defl_plot.destination=1 - + defl_plot.destination=1 + return [main_plot, defl_plot] \ No newline at end of file diff --git a/hooke.conf b/hooke.conf index 2fc002d..b675646 100755 --- a/hooke.conf +++ b/hooke.conf @@ -2,13 +2,13 @@ - + - your_own_directory + insert directory + + -- 2.26.2