1 # Copyright (C) 2010-2012 W. Trevor King <wking@drexel.edu>
3 # This file is part of Hooke.
5 # Hooke is free software: you can redistribute it and/or modify it
6 # under the terms of the GNU Lesser General Public License as
7 # published by the Free Software Foundation, either version 3 of the
8 # License, or (at your option) any later version.
10 # Hooke is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
13 # Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with Hooke. If not, see
17 # <http://www.gnu.org/licenses/>.
19 from ..libhooke import WX_GOOD
21 wxversion.select(WX_GOOD)
22 from wx import PostEvent
29 warnings.simplefilter('ignore',np.RankWarning)
31 from .. import libinput as linp
36 def do_review(self,args):
40 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.
41 By default curves are presented separated -30 nm in x and -100 pN in y.
42 Curve number one of each set is the one showing the approach.
45 review [x spacing (nm)] [y spacing (pN]
53 xgap=int(args[0])*1e-9 #scale to SI units
54 ygap=int(args[1])*1e-12
56 print 'Spacings must be numeric! Using defaults'
63 print 'Processing playlist...'
68 print 'You can stop the review at any moment by entering \'q\' you can go back ten curves entering \'b\''
69 print 'What curve no. you would like to start? (Enter for starting from the first)'
72 if skip.isdigit()==False:
76 print 'Skipping '+str(skip)+ ' curves'
79 while c < len(self.current_list):
82 #take a group of ten curves and plot them with some spacing
84 curveset=self.current_list[c:c+10]
89 multiplot=copy.deepcopy(self._get_displayed_plot(0))
90 self.current.curve.close_all()
93 if i >= len(curveset):
94 print 'End of the list'
95 print 'WARNING: maybe you want to finish!'
98 if not nextitem.identify(self.drivers):
100 nextplot=self.plotmanip_correct(nextitem.curve.default_plots()[0],nextitem)
101 nextvect=nextplot.vectors
102 nextitem.curve.close_all()
107 ymedian=np.median(nexty)
109 for j in range(0,len(nextx)):
110 nextx[j]=nextx[j]+i*xgap
111 nexty[j]=nexty[j]+i*ygap-ymedian
112 multiplot.add_set(nextx,nexty)
113 multiplot.styles.append('lines')
114 multiplot.colors.append(None)
116 self._send_plot([multiplot])
119 print 'Which ones you want to keep?'
123 print 'Going back ten curves'
126 print 'We are already at the start'
132 for i in keep.split():
133 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
134 keep_item=curveset[int(i)-1].path
135 if keep_item in keep_list:
136 print 'This curve ('+keep_item+') was already selected, skipping'
138 keep_list.append(keep_item)
140 print 'You entered an invalid value: '+i
144 #FIXME I don't know why the print below gives errors sometimes
146 print 'Kept '+str(len(keep_list))+' curves from '+str(min(c+i+1,len(self.current_list)))
148 print 'Display error, never mind, we continue. Below the amount of kept and total curves:'
149 print str(len(keep_list))
150 print str(len(self.current_list))
152 allok=0 #flag to keep from losing all the work in a slight mistake
154 if len(keep_list) == 0:
156 save=linp.safeinput('Do you want to save the selected curves?',['y','n'])
158 savedir=linp.safeinput('Destination directory?')
159 savedir=os.path.abspath(savedir)
160 if not os.path.isdir(savedir):
161 print 'Destination is not a directory. Try again'
167 for item in keep_list:
169 shutil.copy(item, savedir)
171 except (OSError, IOError):
172 print 'Cannot copy file. '+item+' Perhaps you gave me a wrong directory?'