def read_data(): d = ixppy.dataset('/reg/g/xpp/data/example_data/diode/time_tool/hdf5/xppi0412-r0113.h5',['timeTool','ipm2','ipm3','diodeU','opal0','eventCode']) # scanning motor print d.scanMot # number of scansteps print d.noofsteps return d
def __init__(self,data=None,Iref=None,Imat=None,fina=None): self.data = data self.Iref = Iref self.refDataFilter = 1 if fina is not None: assert fina[-7:]=='.ixp.h5', "File name has to be of extension ... .ixp.h5" self.dataset = dataset(fina) if 'corrNonLin_I0' in self.dataset.__dict__: self.I0 = self.dataset['corrNonLin_I0'] else: self.I0 = None if 'corrNonLin_Imat' in self.dataset.__dict__: self.Imat = self.dataset['corrNonLin_Imat'] else: self.Imat = None else: self.dataset = None
def extractData(run,calibcycles=None,Nmax=None): f=open("run%03d_extract.txt" % run,"w") sys.stderr = f sys.stout = f dets = ['ipm2','ipm3',"diodeU","diode3","timeTool","opal0"] d=ixppy.dataset(('xpp52512',run),dets) d.filtTimestamps() ixppy.TTextractProfiles(d.opal0,d.ipm2.sum,Nmax=Nmax,refthreshold=0.01,profileLimits=roiTT,profileLimitsRef=roiTTref,calibcycles=calibcycles) h=h5.openOrCreateFile("run%03d_extract.h5" % run,"w") h.attrs["ScanMot"] = d.scanMot h.attrs["ScanVec"] = d.scanVec my_steps = [] x=np.arange(1024) n=200 N=800 fitrange=100 h.attrs["TTfitinfo"] = "from %s to %s (fitrange %d)" % (n,N,fitrange) for i in range(len(d.opal0.TTtraces)): my_stepsc=[] for s in range(len(d.opal0.TTtraces[i])): if (d.ipm2.sum[i][s] < 0.01): my_stepsc.append([0,0,0]) else: y = d.opal0.TTtraces[i][s][n:N] (step,amp,sig,xfit,yfit)=ttfit(x[n:N],y,fitrange=fitrange) my_stepsc.append( [step,amp,sig] ) my_steps.append ( np.array(my_stepsc) ) for i in range(len(d.opal0.TTtraces)): h5w(h,"/c%03d/TTtraces" % i,d.opal0.TTtraces[i].value) h5w(h,"/c%03d/ipm2" % i,d.ipm2.data[i]) h5w(h,"/c%03d/ipm3" % i,d.ipm3.data[i]) h5w(h,"/c%03d/diodeU" % i,d.diodeU.data[i]) h5w(h,"/c%03d/diode3" % i,d.diode3.data[i]) h5w(h,"/c%03d/TTXPP/pos" % i,d.timeTool.fltpos[i]) h5w(h,"/c%03d/TTXPP/ampl" % i,d.timeTool.ampl[i]) h5w(h,"/c%03d/TTXPP/fwhm" % i,d.timeTool.fltposfwhm[i]) h5w(h,"/c%03d/TTERF/pos" % i,my_steps[i][:,0]) h5w(h,"/c%03d/TTERF/amp" % i,my_steps[i][:,1]) h5w(h,"/c%03d/TTERF/fwhm" % i,my_steps[i][:,2]*2.35) f.close() sys.exit(0)
def createWireMask(self,data=None): if data==None: import ixppy d = ixppy.dataset('/reg/g/xpp/data/example_data/cspad/liquid_scattering/hdf5/xpp43512-r0004.h5',['cspad']) data = d.cspad.rdStepData(0,range(10)) i = np.mean(data,axis=0) ib = self.bin(i) tools.imagesc(self.xVec,self.yVec,ib) tools.clim_std() pl.draw() print "Roughly select wire end pairs, press middle mouse button when finished." wires = [] tpos = np.array(pl.ginput(2)) pointno = 0 while not tpos==[]: tpos = np.array(tpos) pl.plot(tpos[:,0],tpos[:,1],'go-') for pno in range(2):pl.text(tpos[pno,0],tpos[pno,1],str(pointno),color='r') wires.append(tpos) pointno += 1 tpos = pl.ginput(2) refwires = [] for pos in wires: refwires.append(self._refinePoints(pos,ib)) wirewidths = [] print refwires for refwire in refwires: trad = self._getOneWire(refwire,i,rmax=1000) wirewidths.append(trad) masked = np.zeros(np.shape(i),dtype=bool) ax = self.xpx ay = self.ypx for refwire,wirewidth in zip(refwires,wirewidths): points = refwire m = np.diff(points[:,1])/np.diff(points[:,0]) c = points[0,1] - points[0,0]*m m_ = -1/m dist_perp = (ay-m*ax-c)/np.sqrt(m**2+1) dist_par = (ay-m_*ax)/np.sqrt(m_**2+1) masked[np.abs(dist_perp)<wirewidth] = True np.save('cspad_last_pixel_mask.npy',masked)
def readDataFile(fina,fieldname=None): name,extension = os.path.splitext(fina) if extension=='.m': if fieldname is not None: return loadmat(fina)[fieldname] else: return loadmat(fina) elif extension=='.npy': return np.load(fina) elif extension=='.h5': sname,sext = os.path.splitext(name) if sext=='.ixp': return ixppy.dataset(fina) return h5py.File(fina) else: try: return np.loadtxt(fina) except Exception(e): logbook("could not read that file. \nError ---->\n ") logbook(e)
def timeTool_calibration(): d = ixppy.dataset(('xppi0412',115),['timeTool']) nfigure('step Timetool hist') for t in d.timeTool.fltpos: clf() hist(t)
def extractFromRunList(runlist,exp,datasetname='opal2',profileLimits=None,xrayoffCode=None,laseroffCode=None,filter=None,save=False): for run in runlist: d = ixppy.dataset((exp,run)) logbook("TT extracting from run %d" %run) extractFromRun(d,datasetname=datasetname,profileLimits=profileLimits,xrayoffCode=xrayoffCode,laseroffCode=laseroffCode,filter=filter,save=save) logbook("done!")
def calcScan(run,correctnonlin=True): dark_limit = 0.01 d=ixppy.dataset(('xpp52512',run),['ipm2','ipm3',"diodeU","diode3"]) d.filtTimestamps() Ncal = len(d.ipm2.sum) mon2 = d.ipm2.__sum() mon3 = d.ipm3.__sum() xpos = d.ipm3.__xpos() fluo = d.diodeU.__channel0() tra = d.diode3.__channel0() mon = mon2 x = d.scanVec if (d.scanMot == "ccmE_vernier"): correctnonlin=False kt.nfigure("Data run %s" % run,figsize=(8,4)) p.clf() p.subplots_adjust(wspace=0.4, hspace=0.6) if (correctnonlin): M = np.hstack(mon[-4:-1]) D = np.hstack(fluo[-4:-1]) idx = (D<1.7) & (M>0.01) & (D>0.01) & (np.abs(D/M -np.median(D/M)) < 0.1) idx = (D<1.7) & (M>0.01); # & (D>0.01) & (np.abs(D/M -np.median(D/M)) < 0.1) nonLinFluo.use(M[idx],D[idx]) D = np.hstack(tra[1:4]) idx = (D<1.7) & (M>0.01) & (D>0.01) & (np.abs(D/M -np.median(D/M)) < 0.1) idx = (D<1.7) & (M>0.01);# & (D>0.01) & (np.abs(D/M -np.median(D/M)) < 0.1) nonLinTra.use(M[idx],D[idx]) outF=[] outFinfo=[] outT=[] outTinfo=[] for i in range(Ncal): m = mon[i] f = fluo[i] t = tra[i] A = utils.myAveragingAndFilter() A.addFilter( m>dark_limit,"mon > %s" % (dark_limit)) A.addFilter( f<1.7,"fluo<1.7") # F.add( np.abs(TTs-np.median(TTs))<2*kt.mad(TTs),"TTs 1 sigma") # print F.info() if (correctnonlin): if (i==0): p.subplot("222",title="Non lin correction") p.plot(m,f/m,"+",label="fluo before"); p.plot(m,t/m,"+",label="tra before") (m,f) = nonLinFluo.correct(m,f) (m,t) = nonLinTra.correct(m,t) if (i==0): p.subplot("222",title="Non lin correction") p.plot(m,f/m,"o",label="fluo after") p.plot(m,t/m,"o",label="tra after") p.legend(bbox_to_anchor = (0.8,-0.2)) p.xlabel("mon") p.ylabel("[fluo|tra]/mon") (vF,infoF) = A.calcDiodeNormalized(m,f) outF.append(vF); outFinfo.append(infoF) (vT,infoT) = A.calcDiodeNormalized(m,t) outT.append(vT); outTinfo.append(infoT) f=open(g_outdir+"plotScan_run%s_fluo.txt" % run,"w") f.write("%s " % d.scanMot) H=A.header() for h in H: f.write("%s " % h) f.write("info\n") for i in range(Ncal): f.write("%s " % x[i]) for j in range(len(outF[i])): f.write("%s " % (outF[i][j])) f.write("%s\n" % outFinfo[i]) outF=np.array(outF)[:,0] outT=np.array(outT)[:,0] f.close() sub1 = p.subplot("221",title="Fluo run %s" % run) print x.shape,outF.shape p.plot(x,outF) p.subplot("223",title="Tra run %s" % run,sharex=sub1) p.xlabel(d.scanMot) p.plot(x,outT,label="run %s" % run) p.savefig(g_outdir+"plotScan_run%s.pdf" % run,trasparent=True,papertype="a4") PdfPlots.savefig(trasparent=True,papertype="a4")
for i in range(Ncal): f.write("%s " % x[i]) for j in range(len(outF[i])): f.write("%s " % (outF[i][j])) f.write("%s\n" % outFinfo[i]) outF=np.array(outF)[:,0] outT=np.array(outT)[:,0] f.close() sub1 = p.subplot("221",title="Fluo run %s" % run) print x.shape,outF.shape p.plot(x,outF) p.subplot("223",title="Tra run %s" % run,sharex=sub1) p.xlabel(d.scanMot) p.plot(x,outT,label="run %s" % run) p.savefig(g_outdir+"plotScan_run%s.pdf" % run,trasparent=True,papertype="a4") PdfPlots.savefig(trasparent=True,papertype="a4") #format = #crystal2 = (34,185,"c2 hscan", # 35,185,"c2 runs = (213,214,215,216,218,219) runs = (40,41,164,165) runs = range(40,90) for r in runs: print r d=ixppy.dataset(('xpp52512',r),['ipm2','ipm3',"diodeU","diode3"]) if (hasattr(d,"scanMot") and (d.scanMot == "ccmE_vernier")): print "|||",r calcScan(r) PdfPlots.close()
def _getAttachDropObj(self): if self._res is None: self._res = ixppy.dataset(self.resultFile) self._res['det'] = ixppy.tools.dropObject() return self._res