Beispiel #1
0
def add_points(graph, directory, layer, usePU):

    ipt = graph.GetN()

    # List runs
    for root, directories, files in os.walk(directory):
        for rundir in sorted(directories):
            if "run_" in rundir:
                # start to process run
                run = rundir[4:]
                #print "processing run ", run

                lumi = 0
                lumi_err = 0

                # Get informations for a given run
                frun = TFile(directory + "/" + rundir +
                             "/withMasking/rootfile/SiStripHitEffHistos_run" +
                             run + ".root")
                fdir = frun.GetDirectory("SiStripHitEff")

                # for efficiency
                hfound = fdir.Get("found")
                htotal = fdir.Get("all")

                if htotal == None:
                    print '  Missing histogram in file ' + frun.GetName()
                    continue

                # lumi
                if usePU == 0: hlumi = fdir.Get("instLumi")
                else: hlumi = fdir.Get("PU")
                if hlumi == None:
                    print '  Missing lumi/pu histogram in file ' + frun.GetName(
                    )
                    continue
                lumi = hlumi.GetMean()
                lumi_err = hlumi.GetRMS()
                #print "lumi (avg+/-rms): ", lumi, "+/-", lumi_err

                # efficiency for a given layer
                found = hfound.GetBinContent(layer)
                total = htotal.GetBinContent(layer)
                if total > 0: eff = found / total
                else: eff = 0
                #print run, eff, lumi, lumi_err

                # remove run without lumi informations
                if lumi > 1:
                    eff_vs_lumi.SetPoint(ipt, lumi, eff)
                    low = TEfficiency.Bayesian(total, found, .683, 1, 1, False)
                    up = TEfficiency.Bayesian(total, found, .683, 1, 1, True)
                    if eff - low > 0.01:
                        print 'large error bar for run', run, 'layer', layer, 'eff:', '{:.4f}'.format(
                            eff), 'err:', '{:.4f}'.format(eff - low)
                    #if lumi_err > lumi/3.: print 'wide lumi range for run', run, 'layer', layer, 'eff:', '{:.4f}'.format(eff), 'lumi/pu:', '{:.4f}'.format(lumi), 'rms:', '{:.4f}'.format(lumi_err)
                    eff_vs_lumi.SetPointError(ipt, lumi_err, lumi_err,
                                              eff - low, up - eff)
                    ipt += 1
                frun.Close()
def add_points(graph, directory, subdir, layer):

    ipt = graph.GetN()
    labels = []

    # List runs
    for root, directories, files in os.walk(directory):
        for rundir in sorted(directories):
            if "run_" in rundir:
                # start to process run
                run = rundir[4:]
                #print "processing run ", run

                # for efficiency
                frun = TFile(directory + "/" + rundir + "/" + subdir +
                             "/rootfile/SiStripHitEffHistos_run" + run +
                             ".root")
                fdir = frun.GetDirectory("SiStripHitEff")
                hfound = fdir.Get("found")
                htotal = fdir.Get("all")

                if htotal == None:
                    print '  Missing histogram in file ' + frun.GetName()
                    continue

                # efficiency for a given layer
                found = hfound.GetBinContent(int(layer))
                total = htotal.GetBinContent(int(layer))
                if total > 0: eff = found / total
                else: eff = 0
                #print run, eff

                graph.SetPoint(ipt, ipt + 1, eff)
                labels.append(run)
                low = TEfficiency.Bayesian(total, found, .683, 1, 1, False)
                up = TEfficiency.Bayesian(total, found, .683, 1, 1, True)
                #eff_vs_run.SetPointError(ipt, 0, 0, eff-low, up-eff)
                ipt += 1
                frun.Close()

    axis = graph.GetXaxis()
    for i in range(graph.GetN()):
        axis.SetBinLabel(axis.FindBin(i + 1), labels[i])
        #print i, axis.FindBin(i+1), labels[i]
    return labels
Beispiel #3
0
    def PrintEff(self, Nev):

        table = PrettyTable([self.SRname, 'cut-name', 'Eff'])
        table.padding_width = 2        
        nden = int(Nev)
        OrderedDict(sorted(self.id.items(), key=lambda t: t[1]))
        for name, idd in self.id.iteritems():
            nsel = int(self.cut[name])
            
            Eff = float(nsel) / float(Nev)
            err_plus = TEfficiency.Bayesian(nden, nsel, .6827, 0.5,0.5, True)
            err_minus = TEfficiency.Bayesian(nden, nsel, .6827, 0.5,0.5, False)
            
            
            Eff = str(Eff) + ' + ' + str(abs(err_plus-Eff)) +" - " +str(abs(err_minus-Eff))
            table.add_row( [idd, name, Eff] )

        #print '='*10 +' '+ self.SRname +' '+ '='*10 
        print table