def showENC(self): tree1 = TTree() header = 'idX/i:vL/F:vH:A:D/i:R:W' first = True for f in self.dataFiles: if first: tree1.ReadFile(f, header) else: tree1.ReadFile(f) p1 = TProfile('p1', 'p1;#DeltaU [V];Prob', self.bins[0], tree1.GetMinimum('vH-vL') * 0.8, tree1.GetMaximum('vH-vL') * 1.2) tree1.Draw("D:(vH-vL)>>p1", "", "profE") ### change it to tgraph g1 = TGraphErrors() for i in range(p1.GetNbinsX() + 2): N = p1.GetBinEntries(i) if N > 0: print i, N, p1.GetXaxis().GetBinCenter(i), p1.GetBinContent( i), p1.GetBinError(i) n = g1.GetN() g1.SetPoint(n, p1.GetXaxis().GetBinCenter(i), p1.GetBinContent(i)) g1.SetPointError(n, 0, p1.GetBinError(i)) p1.Draw("axis") g1.Draw('Psame') fun1 = TF1('fun1', '0.5*(1+TMath::Erf((x-[0])/(TMath::Sqrt(2)*[1])))', 0.05, 0.3) fun1.SetParameter(0, 0.155) fun1.SetParameter(1, 0.005) g1.Fit(fun1) fun1a = g1.GetFunction('fun1') fun1a.SetLineColor(2) v0 = fun1a.GetParameter(0) e0 = fun1a.GetParError(0) v1 = fun1a.GetParameter(1) e1 = fun1a.GetParError(1) print v0, v1 fUnit = 1000. self.lt.DrawLatexNDC( 0.185, 0.89, '#mu = {0:.1f} #pm {1:.1f} mV'.format(v0 * fUnit, e0 * fUnit)) self.lt.DrawLatexNDC( 0.185, 0.84, '#sigma = {0:.1f} #pm {1:.1f} mV'.format(v1 * fUnit, e1 * fUnit)) if self.Info: self.lt.DrawLatexNDC(0.185, 0.6, self.Info) print 'TMath::Gaus(x,{0:.5f},{1:.5f})'.format(v0, v1) fun2 = TF1('gaus1', 'TMath::Gaus(x,{0:.5f},{1:.5f})'.format(v0, v1)) fun2.SetLineColor(4) fun2.SetLineStyle(2) fun2.Draw('same') lg = TLegend(0.7, 0.4, 0.95, 0.5) lg.SetFillStyle(0) lg.AddEntry(p1, 'Measurement', 'p') lg.AddEntry(fun1a, 'Fit', 'l') lg.AddEntry(fun2, 'Gaus', 'l') lg.Draw() waitRootCmdX()
fin.close() floatGroup = r'([0-9\.]*)' Test1 = float(re.search('Test1 ' + floatGroup, firstLine).group(1)) Test2 = float(re.search('Test2 ' + floatGroup, firstLine).group(1)) pescale = float(re.search('pescale ' + floatGroup, firstLine).group(1)) print floatGroup, Test1, Test2, pescale gev2pe = 30. * pescale Resps = TTree() Resps.ReadFile( fname, 'TotPe/I:LivePxIntegral/F:NP/I:ped[3]/F:Layer/I:Response/F:GenPE/I:Response2/F:GenPE2/I:respForm[50]/F:genForm[50]/F' ) depths = int(Resps.GetMaximum('Layer')) BarrelPE = TH1F("BarrelPE", "Barrel PE", 100, 0., Test1 * 30. * pescale) BarrelPE2 = TH1F("BarrelPE2", "Barrel PE", 100, 0., Test2 * 30. * pescale) BarrelRes = TH1F("BarrelRes", "Barrel Resolution", 100, -0.3, 0.05) BarrelRes2 = TH1F("BarrelRes2", "Barrel Resolution", 100, -0.3, 0.05) BarrelSum = 0. BarrelSum2 = 0. BarrelDiff = 0. BarrelDiff2 = 0. for entry in Resps: if (entry.Layer > depths - 1): BarrelPE.Fill(BarrelSum) BarrelSum = 0. BarrelPE2.Fill(BarrelSum2) BarrelSum2 = 0. BarrelRes.Fill(BarrelDiff / gev2pe / Test1)