import os import csv import math from ROOT import TH1D, TH2D, TCanvas, TGraph, TLine from array import array ''' def CanvasPartition(C, Nx, Ny, lMargin, rMargin, bMargin, tMargin): if (!C): return # Setup Pad layout: vSpacing = 0.0 vStep = (1.- bMargin - tMargin - (Ny-1) * vSpacing) / Ny hSpacing = 0.0 hStep = (1.- lMargin - rMargin - (Nx-1) * hSpacing) / Nx vposd,vposu,vmard,vmaru,vfactor hposl,hposr,hmarl,hmarr,hfactor for i in xrange( 0, Nx): if (i==0): hposl = 0.0 hposr = lMargin + hStep hfactor = hposr-hposl hmarl = lMargin / hfactor hmarr = 0.0 else if (i == Nx-1): hposl = hposr + hSpacing hposr = hposl + hStep + rMargin hfactor = hposr-hposl hmarl = 0.0 hmarr = rMargin / (hposr-hposl) else: hposl = hposr + hSpacing hposr = hposl + hStep hfactor = hposr-hposl hmarl = 0.0 hmarr = 0.0 for j in xrange(0,Ny): if (j==0): vposd = 0.0 vposu = bMargin + vStep vfactor = vposu-vposd vmard = bMargin / vfactor vmaru = 0.0 else if (j == Ny-1): vposd = vposu + vSpacing vposu = vposd + vStep + tMargin vfactor = vposu-vposd vmard = 0.0 vmaru = tMargin / (vposu-vposd) else: vposd = vposu + vSpacing vposu = vposd + vStep vfactor = vposu-vposd vmard = 0.0 vmaru = 0.0 C.cd(0) pad = new TPad(string(i)+strting(j),"",hposl,vposd,hposr,vposu) pad.SetLeftMargin(hmarl) pad.SetRightMargin(hmarr) pad.SetBottomMargin(vmard) pad.SetTopMargin(vmaru) pad.SetFrameBorderMode(0) pad.SetBorderMode(0) pad.SetBorderSize(0) pad.Draw() ''' def RMS(arr): square = 0 mean = 0.0 root = 0.0 n=len(arr) #Calculate square for i in range(0,n): square += (arr[i]**2) #Calculate Mean mean = (square / (float)(n)) #Calculate Root root = math.sqrt(mean) return root def mean(arr): return sum(arr)/float(len(arr)) def correct_mean(arr, mean): n=len(arr) for i in xrange(0,n): arr[i]=arr[i]-mean return arr def integral(T,V): sum=0. n=len(T) for i in range(1,n): sum+= (T[i]-T[i-1])*(V[i]+V[i-1])/2. return sum class Reader: def __init__(self, data): self.data=data def read(self,scope, temperature, sig, n_samples): print 'Reading the data from Scope: ', scope, "temprature: ", temperature, "Signal/noise: ", sig data_file="data/" if(scope == "TL"): data_file+="lecroy_unpacked/" # now reading data dir,chan=self.get_dir(scope,temperature, sig) if(len(dir)>1): print 'WARNING, We have 2 entries for Scope: ', scope, "temprature: ", temperature, "Signal/noise: ", sig data_file+=dir[0] print data_file print chan counter=0 RMS1=[] RMS2=[] RMS3=[] V1=[] V2=[] V3=[] if(scope == "RS"): for filename in os.listdir(data_file): time=[] V=[] V_trig=[] print filename if(filename=="INDEX.CSV"): continue counter+=1 with open(data_file+"/"+filename, 'r') as file: data_csv=csv.reader(file, delimiter=',') first=True for row in data_csv: if(first): first=False continue time.append(float(row[0])*1.e9) #print chan[0] #print row V_tmp=[] for c in xrange(1,5): if(c != chan[0]): V_tmp.append(float(row[c])) #print 'Appendet channel ', c V.append(V_tmp) V_trig.append(float(row[chan[0]])) ana=Analysis(time,V,V_trig) f_out=filename f_out=f_out.replace("CSV", "pdf") v1,v2,v3,rms1,rms2,rms3=ana.ana(f_out) V1.append(v1) V2.append(v2) V3.append(v3) RMS1.append(rms1) RMS2.append(rms2) RMS3.append(rms3) if(counter>=n_samples): break return RMS1, RMS2, RMS3, V1, V2, V3 def get_dir(self,scope,temperature, sig): ret=[] t_chan=[] for i in self.data: if( (i["scope"]==scope) and (i["temperature"]>temperature-0.1 and i["temperature"]<temperature+0.1) and i["type"]==sig ): print "Found file with scope= ", scope, " temprature = ", temperature, "signal type= ", sig ret.append(i["dir"]) t_chan.append(i["trig_channel"]) return ret, t_chan class Analysis: def __init__(self,time,V, V_trig): self.time=time self.V=V self.V_trig=V_trig self.save=False def ana(self, out): t0=0 t,c1,c2,c3, c_trig=array( 'd' ), array( 'd' ),array( 'd' ),array( 'd' ),array( 'd' ) lenght=len(self.time) for i in xrange(0,lenght): t.append(self.time[i]) c1.append(self.V[i][0]*1.e3) c2.append(self.V[i][1]*1.e3) c3.append(self.V[i][2]*1.e3) c_trig.append(self.V_trig[i]) if(float(self.time[i])*1e9<-20.): t0=t0+1 gr1 = TGraph( lenght, t, c1 ) mean_V1=mean(c1[0:t0]) c1=correct_mean(c1,mean_V1) rms_v1=RMS(c1[0:t0]) gr1.SetTitle("Channel 1") gr1.GetXaxis().SetTitle("t [ns]") gr1.GetYaxis().SetTitle("U [mV]") gr2 = TGraph( lenght, t, c2 ) mean_V2=mean(c2[0:t0]) c2=correct_mean(c2,mean_V2) rms_v2=RMS(c2[0:t0]) gr2.SetTitle("Channel 2") gr2.GetXaxis().SetTitle("t [ns]") gr2.GetYaxis().SetTitle("U [mV]") gr3 = TGraph( lenght, t, c3 ) mean_V3=mean(c3[0:t0]) c3=correct_mean(c3,mean_V3) rms_v3=RMS(c3[0:t0]) gr3.SetTitle("Channel 3") gr3.GetXaxis().SetTitle("t [ns]") gr3.GetYaxis().SetTitle("U [mV]") gr_trig = TGraph( lenght, t, c_trig ) mean_trig=mean(c_trig[0:t0]) c_trig=correct_mean(c_trig,mean_trig) rms_trig=RMS(c_trig[0:t0]) gr_trig.SetTitle("Triggering Channel") gr_trig.GetXaxis().SetTitle("t [ns]") gr_trig.GetYaxis().SetTitle("U [mV]") n=len(t) ''' gr1 = TGraph( n, t, c1 ) gr2 = TGraph( n, t, c2 ) gr3 = TGraph( n, t, c3 ) gr_trig = TGraph( n, t, c_trig ) ''' if(out): can1=TCanvas("c1", "c1",1920,1080) can1.Divide(2,2,0.01,0.01) can1.cd(1) gr1.Draw() can1.cd(2) gr2.Draw() can1.cd(3) gr3.Draw() can1.cd(4) gr_trig.Draw() can1.SaveAs(out) print "saved as", out integral1=integral(t,c1) integral2=integral(t,c2) integral3=integral(t,c3) return max(c1), max(c2), max(c3), rms_v1, rms_v2, rms_v3