8 ROOT.TH1.SetDefaultSumw2()
9 c = ROOT.TChain(
"tree",
"tree")
10 c.Add(
"/net/cms2/cms2r0/babymaker/babies/2017_01_21/mc/unprocessed/*_TTJets_*.root")
12 btags = [(
"loose", 0.5426),
16 btags_deep = [(
"loose", 0.2219),
20 eta_cuts = [0., 1.2, 2.4]
21 pt_cuts = [30., 50., 70., 100., 140., 200., 300., 670., 1.e4]
22 flavor_cuts = [-0.5, 3.5, 4.5, 5.5]
24 numerators = [ROOT.TH3D(
"btagEfficiency_"+btag[0],
"btagEfficiency_"+btag[0],
25 len(eta_cuts)-1, array.array(
'd', eta_cuts),
26 len(pt_cuts)-1, array.array(
'd', pt_cuts),
27 len(flavor_cuts)-1, array.array(
'd', flavor_cuts))
29 numerators_deep = [ROOT.TH3D(
"btagEfficiency_deep_"+btag[0],
"btagEfficiency_deep_"+btag[0],
30 len(eta_cuts)-1, array.array(
'd', eta_cuts),
31 len(pt_cuts)-1, array.array(
'd', pt_cuts),
32 len(flavor_cuts)-1, array.array(
'd', flavor_cuts))
33 for btag
in btags_deep]
35 denominator = numerators[0].Clone(
"btagEfficiency_denominator")
38 num_entries = c.GetEntries()
40 if entry % 10000 == 0:
41 print "Completed",
'{:.2f}'.format(100.*entry/num_entries)+
"%" 44 if not (getattr(c,
"pass")):
continue 46 if (c.nleps<1
or c.st<=500.
or c.met<=200.
or c.njets<5):
48 for ijet
in xrange(len(c.jets_csv)):
49 if (c.jets_islep[ijet]):
continue 50 flavor = abs(c.jets_hflavor[ijet])
52 eta = abs(c.jets_eta[ijet])
53 csv = c.jets_csv[ijet]
54 csvd = c.jets_csvd[ijet]
56 denominator.Fill(eta, pt, flavor)
57 for inum
in xrange(len(btags)):
58 if csv > btags[inum][1]:
59 numerators[inum].Fill(eta, pt, flavor)
60 for inum
in xrange(len(btags_deep)):
61 if csvd > btags_deep[inum][1]:
62 numerators_deep[inum].Fill(eta, pt, flavor)
66 for n
in numerators_deep:
69 out_file = ROOT.TFile(out_file_path,
"recreate")
72 doc = ROOT.TNamed(
"Documentation: this file contains a parameterization in (eta, pt, flavor) for CSVv2 b-tagger",
"")
76 out_file = ROOT.TFile(out_file_path.replace(
".root",
"_deep.root"),
"recreate")
77 for n
in numerators_deep:
79 doc = ROOT.TNamed(
"Documentation: this file contains a parameterization in (eta, pt, flavor) for the deep CSV b-tagger",
"")
83 if __name__ ==
"__main__":
84 parser = argparse.ArgumentParser(description=
"Computes b-tagging efficiency as a function of pT, eta, and flavor",
85 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
86 parser.add_argument(
"-o",
"--out_file", metavar=
"OUT_FILE", default=
"btagEfficiency.root",
87 help=
"Save efficiences to %(metavar)s")
88 parser.add_argument(
"-c",
"--docuts", action=
"store_true",
89 help=
"Use all available events, applying only basic filters")
90 args = parser.parse_args()
def ParameterizeEfficiency(out_file_path, docuts)