def createmask(self): fsn=self.getfsn() data,dataerr,param=B1python.read2dintfile(fsn,dirs=self.getinputdirs()) if len(data)!=1 and len(dataerr)!=1 and len(param)!=1: self.logger("Could not find files for FSN %d"%fsn,priority="error") return self.maskmatrix=np.ones(data.shape,dtype=np.uint8) self.logger('Created an empty %d x %d mask'%data[0].shape) self.setflag('mask',True)
def adjustmask(self): fsn=self.getfsn() data,dataerr,param=B1python.read2dintfile(fsn,dirs=self.getinputdirs()) if len(data)!=1 and len(dataerr)!=1 and len(param)!=1: self.logger("Could not find files for FSN %d"%fsn,priority="error") return if self.maskmatrix is None: self.maskmatrix=np.zeros(data[0].shape,dtype=np.uint8) try: self.maskmatrix=B1python.makemask(self.maskmatrix,data[0]) except: self.logger("Mask editing was interrupted by user!",'WARNING')
def replot(self): self.setflag('busy',True) fsn=self.getfsn() data,dataerr,param=B1python.read2dintfile(fsn,dirs=self.getinputdirs()) self.setflag('busy',False) if len(data)!=1 and len(dataerr)!=1 and len(param)!=1: self.logger("Could not find files for FSN %d"%fsn,priority="error") return else: self.logger('Files for FSN %d loaded successfully'%fsn,priority='INFO') mask=self.maskmatrix self.setflag('busy',True) if self.getplottype()=='2D': try: self.figure.show() except: self.figure=pylab.figure(self.figurenum) pylab.figure(self.figurenum) self.figure.clf() B1python.plot2dmatrix(data[0],header=param[0],showqscale=True,mask=self.maskmatrix) pylab.xlabel(u'q (1/%c)'%197) pylab.ylabel(u'q (1/%c)'%197) pylab.colorbar() elif self.getplottype()=='1D': if mask is None: mask=np.ones(data[0].shape,dtype=np.uint8) if not (self.qminmanual.get() and self.qmaxmanual.get() and self.Nqmanual.get()): qmin,qmax,Nq=B1python.qrangefrommask(mask, param[0]['EnergyCalibrated'],param[0]['Dist'],param[0]['PixelSize'],param[0]['BeamPosX'],param[0]['BeamPosY']) self.logger('Auto-determined integration bounds: %.8f < q < %.8f, optimal number of bins is %d' %(qmin,qmax,Nq)) if self.qminmanual.get(): qmin=float(self.qmin.get()) else: self.qmin['state']='normal' self.qmin.delete(0,Tkinter.END) self.qmin.insert(0,'%.8f' % qmin) self.qmin['state']='disabled' if self.qmaxmanual.get(): qmax=float(self.qmax.get()) else: self.qmax['state']='normal' self.qmax.delete(0,Tkinter.END) self.qmax.insert(0,'%.8f' % qmax) self.qmax['state']='disabled' if self.Nqmanual.get(): Nq=long(self.Nq.get()) else: self.Nq['state']='normal' self.Nq.delete(0,Tkinter.END) self.Nq.insert(0,'%.8f' % Nq) self.Nq['state']='disabled' phi0=None dphi=None if self.phi0manual.get(): phi0=float(self.phi0.get())*np.pi/180.0 if self.dphimanual.get(): dphi=float(self.dphi.get())*np.pi/180.0 qrange=np.linspace(qmin,qmax,Nq) self.logger('Integration starting...',"INFO") t0=time.time() q,I,E,A,maskout=B1python.radintC(data[0],dataerr[0],param[0]['EnergyCalibrated'],param[0]['Dist'],param[0]['PixelSize'],param[0]['BeamPosX'],param[0]['BeamPosY'],1-mask,qrange,phi0=phi0,dphi=dphi,returnmask=True,returnavgq=True) maskout=1-maskout self.currentdataset=B1python.SASDict(q,I,E,Area=A) self.currentdataset.sanitize() self.currentparam=param[0] self.setflag('intdata',True) self.logger('Integration finished in %.2f seconds'%(time.time()-t0),"INFO") try: self.figure.show() except: self.figure=pylab.figure(self.figurenum) pylab.figure(self.figurenum) B1python.plotintegrated(data[0],q,I,E,A,qrange,maskout,param[0],mode='radial') elif self.setplottype()=='Azimuthal': self.logger('Azimuthal integration not yet supported!','WARNING') self.setflag('busy',False) pylab.draw() pylab.gcf().show() del data del dataerr del param