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
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