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 under the
6 # terms of the GNU Lesser General Public License as published by the Free
7 # Software Foundation, either version 3 of the License, or (at your option) any
10 # Hooke is distributed in the hope that it will be useful, but WITHOUT ANY
11 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12 # A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15 # You should have received a copy of the GNU Lesser General Public License
16 # along with Hooke. If not, see <http://www.gnu.org/licenses/>.
18 from ..libhooke import WX_GOOD
20 wxversion.select(WX_GOOD)
21 from wx import PostEvent
28 warnings.simplefilter('ignore',np.RankWarning)
30 from .. import libinput as linp
35 def do_review(self,args):
39 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.
40 By default curves are presented separated -30 nm in x and -100 pN in y.
41 Curve number one of each set is the one showing the approach.
44 review [x spacing (nm)] [y spacing (pN]
52 xgap=int(args[0])*1e-9 #scale to SI units
53 ygap=int(args[1])*1e-12
55 print 'Spacings must be numeric! Using defaults'
62 print 'Processing playlist...'
67 print 'You can stop the review at any moment by entering \'q\' you can go back ten curves entering \'b\''
68 print 'What curve no. you would like to start? (Enter for starting from the first)'
71 if skip.isdigit()==False:
75 print 'Skipping '+str(skip)+ ' curves'
78 while c < len(self.current_list):
81 #take a group of ten curves and plot them with some spacing
83 curveset=self.current_list[c:c+10]
88 multiplot=copy.deepcopy(self._get_displayed_plot(0))
89 self.current.curve.close_all()
92 if i >= len(curveset):
93 print 'End of the list'
94 print 'WARNING: maybe you want to finish!'
97 if not nextitem.identify(self.drivers):
99 nextplot=self.plotmanip_correct(nextitem.curve.default_plots()[0],nextitem)
100 nextvect=nextplot.vectors
101 nextitem.curve.close_all()
106 ymedian=np.median(nexty)
108 for j in range(0,len(nextx)):
109 nextx[j]=nextx[j]+i*xgap
110 nexty[j]=nexty[j]+i*ygap-ymedian
111 multiplot.add_set(nextx,nexty)
112 multiplot.styles.append('lines')
113 multiplot.colors.append(None)
115 self._send_plot([multiplot])
118 print 'Which ones you want to keep?'
122 print 'Going back ten curves'
125 print 'We are already at the start'
131 for i in keep.split():
132 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
133 keep_item=curveset[int(i)-1].path
134 if keep_item in keep_list:
135 print 'This curve ('+keep_item+') was already selected, skipping'
137 keep_list.append(keep_item)
139 print 'You entered an invalid value: '+i
143 #FIXME I don't know why the print below gives errors sometimes
145 print 'Kept '+str(len(keep_list))+' curves from '+str(min(c+i+1,len(self.current_list)))
147 print 'Display error, never mind, we continue. Below the amount of kept and total curves:'
148 print str(len(keep_list))
149 print str(len(self.current_list))
151 allok=0 #flag to keep from losing all the work in a slight mistake
153 if len(keep_list) == 0:
155 save=linp.safeinput('Do you want to save the selected curves?',['y','n'])
157 savedir=linp.safeinput('Destination directory?')
158 savedir=os.path.abspath(savedir)
159 if not os.path.isdir(savedir):
160 print 'Destination is not a directory. Try again'
166 for item in keep_list:
168 shutil.copy(item, savedir)
170 except (OSError, IOError):
171 print 'Cannot copy file. '+item+' Perhaps you gave me a wrong directory?'