Esempio n. 1
0
    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)