X-Git-Url: http://git.tremily.us/?p=hooke.git;a=blobdiff_plain;f=hooke%2Fplugin%2Fprocplots.py;fp=procplots.py;h=b7826aed227cc2499adf0778c9365ddb6db1c24f;hp=8c58f70d764ee7f002c9e30f08a6c290639bffdc;hb=41ef0130e16c0cf8d2c0f1acc9e06986d62f7607;hpb=7fc996abaf986c43c0354ac3b4127ed7876ad41a;ds=sidebyside diff --git a/procplots.py b/hooke/plugin/procplots.py old mode 100755 new mode 100644 similarity index 88% rename from procplots.py rename to hooke/plugin/procplots.py index 8c58f70..b7826ae --- a/procplots.py +++ b/hooke/plugin/procplots.py @@ -1,27 +1,27 @@ -#!/usr/bin/env python - ''' PROCPLOTS Processed plots plugin for force curves. Licensed under the GNU GPL version 2 ''' -from libhooke import WX_GOOD +from ..libhooke import WX_GOOD import wxversion wxversion.select(WX_GOOD) import wx -import libhookecurve as lhc import numpy as np import scipy as sp import scipy.signal import copy -class procplotsCommands: - +from .. import libhookecurve as lhc + + +class procplotsCommands(object): + def _plug_init(self): pass - + def do_derivplot(self,args): ''' DERIVPLOT @@ -29,30 +29,30 @@ class procplotsCommands: Plots the derivate (actually, the discrete differentiation) of the current force curve --------- Syntax: derivplot - ''' - dplot=self.derivplot_curves() - plot_graph=self.list_of_events['plot_graph'] + ''' + dplot=self.derivplot_curves() + plot_graph=self.list_of_events['plot_graph'] wx.PostEvent(self.frame,plot_graph(plots=[dplot])) - + def derivplot_curves(self): ''' do_derivplot helper function - + create derivate plot curves for force curves. - ''' + ''' dplot=lhc.PlotObject() - dplot.vectors=[] - + dplot.vectors=[] + for vector in self.plots[0].vectors: dplot.vectors.append([]) dplot.vectors[-1].append(vector[0][:-1]) dplot.vectors[-1].append(np.diff(vector[1])) - + dplot.destination=1 dplot.units=self.plots[0].units - - return dplot - + + return dplot + def do_subtplot(self,args): ''' SUBTPLOT @@ -62,42 +62,42 @@ class procplotsCommands: Syntax: subtplot ''' #FIXME: sub_filter and sub_order must be args - + if len(self.plots[0].vectors) != 2: print 'This command only works on a curve with two different plots.' pass - + outplot=self.subtract_curves(sub_order=1) - - plot_graph=self.list_of_events['plot_graph'] + + plot_graph=self.list_of_events['plot_graph'] wx.PostEvent(self.frame,plot_graph(plots=[outplot])) - + def subtract_curves(self, sub_order): ''' subtracts the extension from the retraction - ''' + ''' xext=self.plots[0].vectors[0][0] yext=self.plots[0].vectors[0][1] xret=self.plots[0].vectors[1][0] yret=self.plots[0].vectors[1][1] - + #we want the same number of points maxpoints_tot=min(len(xext),len(xret)) xext=xext[0:maxpoints_tot] yext=yext[0:maxpoints_tot] xret=xret[0:maxpoints_tot] yret=yret[0:maxpoints_tot] - + if sub_order: ydiff=[yretval-yextval for yretval,yextval in zip(yret,yext)] else: #reverse subtraction (not sure it's useful, but...) - ydiff=[yextval-yretval for yextval,yretval in zip(yext,yret)] - + ydiff=[yextval-yretval for yextval,yretval in zip(yext,yret)] + outplot=copy.deepcopy(self.plots[0]) outplot.vectors[0][0], outplot.vectors[1][0] = xext,xret #FIXME: if I use xret, it is not correct! outplot.vectors[1][1]=ydiff outplot.vectors[0][1]=[0 for item in outplot.vectors[1][0]] - + return outplot @@ -110,21 +110,21 @@ class procplotsCommands: median_filter=customvalue else: median_filter=self.config['medfilt'] - + if median_filter==0: return plot - + if float(median_filter)/2 == int(median_filter)/2: median_filter+=1 - + nplots=len(plot.vectors) c=0 while cstartvalue: cutindex=index else: @@ -209,12 +209,12 @@ class procplotsCommands: plot.vectors[0][0]=plot.vectors[0][0][:cutindex] plot.vectors[0][1]=plot.vectors[0][1][:cutindex] - + return plot - ''' - - - + ''' + + + #FFT--------------------------- def fft_plot(self, vector): ''' @@ -222,22 +222,22 @@ class procplotsCommands: ''' fftplot=lhc.PlotObject() fftplot.vectors=[[]] - + fftlen=len(vector)/2 #need just 1/2 of length - fftplot.vectors[-1].append(np.arange(1,fftlen).tolist()) - + fftplot.vectors[-1].append(np.arange(1,fftlen).tolist()) + try: fftplot.vectors[-1].append(abs(np.fft(vector)[1:fftlen]).tolist()) except TypeError: #we take care of newer NumPy (1.0.x) fftplot.vectors[-1].append(abs(np.fft.fft(vector)[1:fftlen]).tolist()) - - + + fftplot.destination=1 - - + + return fftplot - - + + def do_fft(self,args): ''' FFT @@ -245,15 +245,15 @@ class procplotsCommands: Plots the fast Fourier transform of the selected plot --- Syntax: fft [top,bottom] [select] [0,1...] - + By default, fft performs the Fourier transform on all the 0-th data set on the top plot. - + [top,bottom]: which plot is the data set to fft (default: top) [select]: you pick up two points on the plot and fft only the segment between [0,1,...]: which data set on the selected plot you want to fft (default: 0) ''' - + #args parsing #whatplot = plot to fft #whatset = set to fft in the plot @@ -270,7 +270,7 @@ class procplotsCommands: whatset=int(arg) except ValueError: pass - + if select: points=self._measure_N_points(N=2, whatset=whatset) boundaries=[points[0].index, points[1].index] @@ -278,9 +278,8 @@ class procplotsCommands: y_to_fft=self.plots[whatplot].vectors[whatset][1][boundaries[0]:boundaries[1]] #y else: y_to_fft=self.plots[whatplot].vectors[whatset][1] #y - - fftplot=self.fft_plot(y_to_fft) + + fftplot=self.fft_plot(y_to_fft) fftplot.units=['frequency', 'power'] - plot_graph=self.list_of_events['plot_graph'] + plot_graph=self.list_of_events['plot_graph'] wx.PostEvent(self.frame,plot_graph(plots=[fftplot])) -