diff --git a/Analyse/ana.py b/Analyse/ana.py index 7467e40..669d529 100644 --- a/Analyse/ana.py +++ b/Analyse/ana.py @@ -1,8 +1,11 @@ import os import csv import math -from ROOT import TH1D, TH2D, TCanvas, TGraph, TLine +from ROOT import TH1D, TH2D, TCanvas, TGraph, TLine, kRed, kBlue from array import array + + + ''' def CanvasPartition(C, Nx, Ny, lMargin, rMargin, @@ -69,7 +72,12 @@ pad.Draw() ''' - +def MAX(arr, m,M): + max=-1e10 + for i in xrange(m,M): + if (arr[i] > max): + max=arr[i] + return max @@ -95,9 +103,10 @@ def correct_mean(arr, mean): n=len(arr) + arr2=[] for i in xrange(0,n): - arr[i]=arr[i]-mean - return arr + arr2.append(arr[i]-mean) + return arr2 def integral(T,V): sum=0. @@ -163,21 +172,98 @@ #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) + + mkdir=scope+"_"+str(temperature)+"_"+sig + if not os.path.exists(mkdir): + os.makedirs(mkdir) + + + v1,v2,v3,rms1,rms2,rms3=ana.ana(mkdir+"/"+f_out) + if(v1>5.*rms1): + V1.append(v1) + #print "Appending: ", v1 + if(v2>5.*rms2): + V2.append(v2) + if(v3>5.*rms3): + V3.append(v3) RMS1.append(rms1) RMS2.append(rms2) RMS3.append(rms3) + print v1, rms1, v2, rms2, v3, rms3 + if(counter>=n_samples): + break + if(scope == "RS"): + for filename in os.listdir(data_file): + time=[] + V=[] + V_trig=[] + print filename + + 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") + mkdir=scope+"_"+str(temperature)+"_"+sig + if not os.path.exists(mkdir): + os.makedirs(mkdir) + + + v1,v2,v3,rms1,rms2,rms3=ana.ana(mkdir+"/"+f_out) + if(v1>5.*rms1): + V1.append(v1) + #print "Appending: ", v1 + if(v2>5.*rms2): + V2.append(v2) + if(v3>5.*rms3): + V3.append(v3) + RMS1.append(rms1) + RMS2.append(rms2) + RMS3.append(rms3) + + print v1, rms1, v2, rms2, v3, rms3 if(counter>=n_samples): break + if(scope=="TL"): + for filename in os.listdir(data_file): + print filename + + + + + + + + + return RMS1, RMS2, RMS3, V1, V2, V3 @@ -200,7 +286,7 @@ 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' ) @@ -210,35 +296,49 @@ 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]) + c_trig.append(self.V_trig[i]*1.e3) if(float(self.time[i])*1e9<-20.): t0=t0+1 - + t0=t0-10 gr1 = TGraph( lenght, t, c1 ) - mean_V1=mean(c1[0:t0]) - c1=correct_mean(c1,mean_V1) - rms_v1=RMS(c1[0:t0]) + mean_V1=mean(self.V[0:t0][0]) + c1c=correct_mean(c1,mean_V1) + rms_v1=RMS(c1c[0:t0]) gr1.SetTitle("Channel 1") gr1.GetXaxis().SetTitle("t [ns]") gr1.GetYaxis().SetTitle("U [mV]") - + l11=TLine(t[0], mean_V1-rms_v1, t[t0], mean_V1-rms_v1) + l12=TLine(t[0], mean_V1+rms_v1, t[t0], mean_V1+rms_v1) + l11.SetLineColor(kRed-3) + l12.SetLineColor(kRed-3) gr2 = TGraph( lenght, t, c2 ) - mean_V2=mean(c2[0:t0]) - c2=correct_mean(c2,mean_V2) - rms_v2=RMS(c2[0:t0]) + mean_V2=mean(self.V[0:t0][1]) + c2c=correct_mean(c2,mean_V2) + rms_v2=RMS(c2c[0:t0]) gr2.SetTitle("Channel 2") gr2.GetXaxis().SetTitle("t [ns]") gr2.GetYaxis().SetTitle("U [mV]") + l21=TLine(t[0], mean_V2-rms_v2, t[t0], mean_V2-rms_v2) + l22=TLine(t[0], mean_V2+rms_v2, t[t0], mean_V2+rms_v2) + l21.SetLineColor(kRed-3) + l22.SetLineColor(kRed-3) + + gr3 = TGraph( lenght, t, c3 ) - mean_V3=mean(c3[0:t0]) - c3=correct_mean(c3,mean_V3) - rms_v3=RMS(c3[0:t0]) + mean_V3=mean(self.V[0:t0][2]) + c3c=correct_mean(c3,mean_V3) + rms_v3=RMS(c3c[0:t0]) gr3.SetTitle("Channel 3") gr3.GetXaxis().SetTitle("t [ns]") gr3.GetYaxis().SetTitle("U [mV]") + l31=TLine(t[0], mean_V3-rms_v3, t[t0], mean_V3-rms_v3) + l32=TLine(t[0], mean_V3+rms_v3, t[t0], mean_V3+rms_v3) + l31.SetLineColor(kRed-3) + l32.SetLineColor(kRed-3) + gr_trig = TGraph( lenght, t, c_trig ) mean_trig=mean(c_trig[0:t0]) @@ -247,6 +347,10 @@ gr_trig.SetTitle("Triggering Channel") gr_trig.GetXaxis().SetTitle("t [ns]") gr_trig.GetYaxis().SetTitle("U [mV]") + + lt=TLine(t[t0-10], -6., t[t0+30], -6.) + lt.SetLineColor(kBlue-3) + lt.SetLineWidth(3) n=len(t) ''' @@ -260,19 +364,29 @@ can1.Divide(2,2,0.01,0.01) can1.cd(1) gr1.Draw() + l11.Draw() + l12.Draw() + can1.cd(2) gr2.Draw() + l21.Draw() + l22.Draw() + can1.cd(3) gr3.Draw() + l31.Draw() + l32.Draw() + can1.cd(4) gr_trig.Draw() - + lt.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 + MAXC1=MAX(c1,t0,t0+40) + MAXC2=MAX(c2,t0,t0+40) + MAXC3=MAX(c3,t0,t0+40) + #print c1[t0:t0+20] + #print MAXC1 + return MAXC1, MAXC2, MAXC3, rms_v1, rms_v2, rms_v3 diff --git a/Analyse/main.py b/Analyse/main.py index e39a1b8..1188384 100644 --- a/Analyse/main.py +++ b/Analyse/main.py @@ -1,3 +1,5 @@ +import sys +sys.argv.append( '-b-' ) from ROOT import * import csv import os @@ -9,7 +11,48 @@ from data_corrected import dict_data from ana import Reader +gROOT.SetBatch(True) +def RMS(arr): + mean=sum(arr)/len(arr) + + square = 0 + mean = 0.0 + root = 0.0 + n=len(arr) + #Calculate square + for i in range(0,n): + square += ( (arr[i]- mean)**2) + + #Calculate Mean + mean = (square / (float)(n)) + + #Calculate Root + root = math.sqrt(mean) + + return root + + +def get_dist(arr, name): + + if(len(arr)==0): + return TH1D("EMPTY, NO DATA", "EMPTY, NO DATA", 10, 0,1) + + MIN=min(arr) + MAX=max(arr) + + hist=TH1D(name, name, 100, MIN, MAX) + for a in arr: + hist.Fill(a) + + return hist + +def mean(list): + #print list + if(len(list)==0): + return -1. + + return sum(list)/len(list) def main(argv): print 'Software to analysis Cooling results for Magnet Stations' @@ -17,24 +60,195 @@ scope="RS" - RMS_noise=[] - V_signal=[] - temperature=[] + RMS1_noise=[] + V1_signal=[] + RMS2_noise=[] + V2_signal=[] + RMS3_noise=[] + V3_signal=[] + + + #temperature=[] + + + gr_noise1, gr_noise2,gr_noise3=array( 'd' ),array( 'd' ),array( 'd' ) + gr_sig1, gr_sig2, gr_sig3=array( 'd' ),array( 'd' ),array( 'd' ) + + gr_noise1e, gr_noise2e,gr_noise3e=array( 'd' ),array( 'd' ),array( 'd' ) + gr_sig1e, gr_sig2e, gr_sig3e=array( 'd' ),array( 'd' ),array( 'd' ) + + + temperature1=array( 'd' ) + temperature2=array( 'd' ) + temperature3=array( 'd' ) + temperature1s=array( 'd' ) + temperature2s=array( 'd' ) + temperature3s=array( 'd' ) + + temperature1e=array( 'd' ) + temperature2e=array( 'd' ) + temperature3e=array( 'd' ) + temperature1se=array( 'd' ) + temperature2se=array( 'd' ) + temperature3se=array( 'd' ) + + + + + reader=Reader(dict_data) for i in dict_data: if((i["scope"]==scope)): temp=i["temperature"] - - for j in ["noise", "sig"]: - reader=Reader(dict_data) - RMS1, RMS2, RMS3, V1, V2, V3=reader.read("RS", temp, j ,20) + #for j in ["noise", "sig"]: + j=i["type"] + print "Trying", i - if(j=="noise"): - RMS_noise.append(RMS1) - + #reader=Reader(dict_data) + RMS1, RMS2, RMS3, V1, V2, V3=reader.read(i["scope"], temp, j ,300) + + if(j=="noise"): - + + + if(mean(RMS1)>0): + hist1=get_dist(RMS1, "noise, temperature= "+str(temp)+" Channel 1") + gr_noise1.append(hist1.GetMean()) + gr_noise1e.append(hist1.GetRMS()) + temperature1.append(temp) + temperature1e.append(1.) + if(mean(RMS2)>0): + hist2=get_dist(RMS2, "noise, temperature= "+str(temp)+" Channel 2") + gr_noise2.append(hist2.GetMean()) + gr_noise2e.append(hist2.GetRMS()) + temperature2.append(temp) + temperature2e.append(1.) + if(mean(RMS3)>0): + hist3=get_dist(RMS3, "noise, temperature= "+str(temp)+" Channel 3") + gr_noise3.append(hist3.GetMean()) + gr_noise3e.append(hist3.GetRMS()) + temperature3.append(temp) + temperature3e.append(1.) + + + + + + hist1=get_dist(RMS1, "noise, temperature= "+str(temp)+" Channel 1") + hist2=get_dist(RMS2, "noise, temperature= "+str(temp)+" Channel 2") + hist3=get_dist(RMS3, "noise, temperature= "+str(temp)+" Channel 3") + + + print "Check: ", mean(RMS1), RMS(RMS1), hist1.GetMean(), hist1.GetRMS() + + can1=TCanvas("c1", "c1",1920,1080) + can1.Divide(2,2,0.01,0.01) + can1.cd(1) + hist1.Draw() + can1.cd(2) + hist2.Draw() + can1.cd(3) + hist3.Draw() + + can1.SaveAs("noise" +"_"+str(temp)+".pdf") + + if(j=="sig"): + + + if(mean(V1)>0): + gr_sig1.append(mean(V1)) + gr_sig1e.append(RMS(V1)) + temperature1s.append(temp) + temperature1se.append(1.) + if(mean(V2)>0): + gr_sig2.append(mean(V2)) + gr_sig2e.append(RMS(V2)) + temperature2s.append(temp) + temperature2se.append(1.) + if(mean(V3)>0): + gr_sig3.append(mean(V3)) + gr_sig3e.append(RMS(V3)) + temperature3s.append(temp) + temperature3se.append(1.) + + + + hist1=get_dist(V1, "sig" +"_"+str(temp)+" Channel 1") + hist2=get_dist(V2, "sig" +"_"+str(temp)+" Channel 2") + hist3=get_dist(V3, "sig" +"_"+str(temp)+" Channel 3") + + can1=TCanvas("c1", "c1",1920,1080) + can1.Divide(2,2,0.01,0.01) + can1.cd(1) + hist1.Draw() + can1.cd(2) + hist2.Draw() + can1.cd(3) + hist3.Draw() + + can1.SaveAs("sig" +"_"+str(temp)+".pdf") + + can2=TCanvas("c1", "c1",1920,1080) + can2.Divide(3,2,0.01,0.01) + + Gr_sig1=TGraphErrors(len(gr_sig1), temperature1s, gr_sig1, temperature1se, gr_sig1e) + Gr_sig2=TGraphErrors(len(gr_sig2), temperature2s, gr_sig2, temperature2se, gr_sig2e) + Gr_sig3=TGraphErrors(len(gr_sig3), temperature3s, gr_sig3, temperature3se, gr_sig3e) + + Gr_sig1.SetTitle("Signal Channel 1") + Gr_sig1.GetXaxis().SetTitle("Temperature [C]") + Gr_sig1.GetYaxis().SetTitle("V [mV]") + + Gr_sig2.SetTitle("Signal Channel 2") + Gr_sig2.GetXaxis().SetTitle("Temperature [C]") + Gr_sig2.GetYaxis().SetTitle("V [mV]") + + Gr_sig3.SetTitle("Signal Channel 3") + Gr_sig3.GetXaxis().SetTitle("Temperature [C]") + Gr_sig3.GetYaxis().SetTitle("V [mV]") + + + + + Gr_noise1=TGraphErrors(len(gr_noise1), temperature1, gr_noise1, temperature1e, gr_noise1e) + Gr_noise2=TGraphErrors(len(gr_noise2), temperature2, gr_noise2, temperature2e, gr_noise2e) + Gr_noise3=TGraphErrors(len(gr_noise3), temperature3, gr_noise3, temperature3e, gr_noise3e) + + Gr_noise1.SetTitle("Noise Channel 1") + Gr_noise1.GetXaxis().SetTitle("Temperature [C]") + Gr_noise1.GetYaxis().SetTitle("V [mV]") + + Gr_noise2.SetTitle("Noise Channel 2") + Gr_noise2.GetXaxis().SetTitle("Temperature [C]") + Gr_noise2.GetYaxis().SetTitle("V [mV]") + + Gr_noise3.SetTitle("Noise Channel 3") + Gr_noise3.GetXaxis().SetTitle("Temperature [C]") + Gr_noise3.GetYaxis().SetTitle("V [mV]") + + + + can2.cd(1) + Gr_sig1.Draw() + can2.cd(2) + Gr_sig2.Draw() + can2.cd(3) + Gr_sig3.Draw() + + + can2.cd(4) + Gr_noise1.Draw() + can2.cd(5) + Gr_noise2.Draw() + can2.cd(6) + Gr_noise3.Draw() + + can2.SaveAs("result.pdf") + + print gr_sig1 + print gr_noise1 + if __name__ == "__main__":