1 # Copyright (C) 2010-2011 Alberto Gomez-Casado
2 # W. Trevor King <wking@drexel.edu>
4 # This file is part of Hooke.
6 # Hooke is free software: you can redistribute it and/or modify it
7 # under the terms of the GNU Lesser General Public License as
8 # published by the Free Software Foundation, either version 3 of the
9 # License, or (at your option) any later version.
11 # Hooke is distributed in the hope that it will be useful, but WITHOUT
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
14 # Public License for more details.
16 # You should have received a copy of the GNU Lesser General Public
17 # License along with Hooke. If not, see
18 # <http://www.gnu.org/licenses/>.
20 from ..libhooke import WX_GOOD
22 wxversion.select(WX_GOOD)
23 from wx import PostEvent
30 warnings.simplefilter('ignore',np.RankWarning)
32 from .. import libinput as linp
37 def do_review(self,args):
41 Presents curves (in current playlist) in groups of ten. User can indicate which curves will be selected to be saved in a separate directory for further analysis.
42 By default curves are presented separated -30 nm in x and -100 pN in y.
43 Curve number one of each set is the one showing the approach.
46 review [x spacing (nm)] [y spacing (pN]
54 xgap=int(args[0])*1e-9 #scale to SI units
55 ygap=int(args[1])*1e-12
57 print 'Spacings must be numeric! Using defaults'
64 print 'Processing playlist...'
69 print 'You can stop the review at any moment by entering \'q\' you can go back ten curves entering \'b\''
70 print 'What curve no. you would like to start? (Enter for starting from the first)'
73 if skip.isdigit()==False:
77 print 'Skipping '+str(skip)+ ' curves'
80 while c < len(self.current_list):
83 #take a group of ten curves and plot them with some spacing
85 curveset=self.current_list[c:c+10]
90 multiplot=copy.deepcopy(self._get_displayed_plot(0))
91 self.current.curve.close_all()
94 if i >= len(curveset):
95 print 'End of the list'
96 print 'WARNING: maybe you want to finish!'
99 if not nextitem.identify(self.drivers):
101 nextplot=self.plotmanip_correct(nextitem.curve.default_plots()[0],nextitem)
102 nextvect=nextplot.vectors
103 nextitem.curve.close_all()
108 ymedian=np.median(nexty)
110 for j in range(0,len(nextx)):
111 nextx[j]=nextx[j]+i*xgap
112 nexty[j]=nexty[j]+i*ygap-ymedian
113 multiplot.add_set(nextx,nexty)
114 multiplot.styles.append('lines')
115 multiplot.colors.append(None)
117 self._send_plot([multiplot])
120 print 'Which ones you want to keep?'
124 print 'Going back ten curves'
127 print 'We are already at the start'
133 for i in keep.split():
134 if i.isdigit() and int(i)>0 and int(i)<11: #if it is not digit the int() call is never made, so no exception should be happening
135 keep_item=curveset[int(i)-1].path
136 if keep_item in keep_list:
137 print 'This curve ('+keep_item+') was already selected, skipping'
139 keep_list.append(keep_item)
141 print 'You entered an invalid value: '+i
145 #FIXME I don't know why the print below gives errors sometimes
147 print 'Kept '+str(len(keep_list))+' curves from '+str(min(c+i+1,len(self.current_list)))
149 print 'Display error, never mind, we continue. Below the amount of kept and total curves:'
150 print str(len(keep_list))
151 print str(len(self.current_list))
153 allok=0 #flag to keep from losing all the work in a slight mistake
155 if len(keep_list) == 0:
157 save=linp.safeinput('Do you want to save the selected curves?',['y','n'])
159 savedir=linp.safeinput('Destination directory?')
160 savedir=os.path.abspath(savedir)
161 if not os.path.isdir(savedir):
162 print 'Destination is not a directory. Try again'
168 for item in keep_list:
170 shutil.copy(item, savedir)
172 except (OSError, IOError):
173 print 'Cannot copy file. '+item+' Perhaps you gave me a wrong directory?'