def __init__(self): self.bins = to_array(0., 0.04, 0.07, 4) self.nbins = len(self.bins)-1 # 2015 is included in 2016. We scale/sum up 2015, 2016hip, 2016nonhip below, instead of that being done separately in # SignalEfficiencyCombiner--this simplifies the datacard and plot making downstream. self.years = '2016', '2017', '2018' self.nyears = len(self.years) import JMTucker.MFVNeutralino.AnalysisConstants as ac self.int_lumis = ac.scaled_int_lumi_2015p6, ac.scaled_int_lumi_2017, ac.scaled_int_lumi_2018 self.fn = 'limitsinput.root' self.l1eeprefiring_2017 = True # whether to simulate L1 EE prefiring in 2017 self.hem1516_2018 = True # whether to simulate the HEM 15/16 failure in for part of 2018
def fmt(h, name, color, save=[]): binning = to_array(0., 0.04, 0.07, 0.15) h = h.Rebin(len(binning)-1, name, binning) h.Sumw2() h.SetStats(0) h.SetLineWidth(3) h.SetLineColor(color) h.SetTitle(';d_{VV} (cm);event rate (unit norm.)') move_overflow_into_last_bin(h) h.Scale(1./h.Integral(0,h.GetNbinsX()+2)) save.append(h) return h
def axisize(l): l = sorted(set(l)) delta = l[-1] - l[-2] l.append(l[-1] + delta) return to_array(l)
rec_eff,l,u = clopper_pearson(rec_hist.GetEntries(), nrec) rec_err = (u-l)/2 if generated[i] != '': gen_hist = f.Get('mfvGen%s/h_gen%s_dvv' % (generated[i], match)) gen_eff,l,u = clopper_pearson(gen_hist.GetEntries(), ngen) gen_err = (u-l)/2 gen_rec_div = gen_eff/rec_eff if rec_eff != 0 else 9999 gen_rec_err = (gen_rec_div * ((rec_err/rec_eff)**2 + (gen_err/gen_eff)**2))**0.5 if rec_eff != 0 and gen_eff != 0 else 9999 if generated[i] == gen_num: print '%20s%6d%20s%6d%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n' % (rec, rec_hist.GetEntries(), generated[i], gen_hist.GetEntries(), rec_eff, rec_err, gen_eff, gen_err, gen_rec_div, gen_rec_err) print r'%s & $%4.3f \pm %4.3f$ & $%4.3f \pm %4.3f$ & $%4.3f \pm %4.3f$ \\' % (sample.latex, rec_eff, rec_err, gen_eff, gen_err, gen_rec_div, gen_rec_err) x.append(rec_eff) y.append(gen_eff) ex.append(rec_err) ey.append(gen_err) g = ROOT.TGraphErrors(1, to_array(rec_eff), to_array(gen_eff), to_array(rec_err), to_array(gen_err)) g.SetMarkerStyle(style(sample)) g.SetMarkerColor(color(sample)) gs.append(g) label = sample.latex.split(',')[0] + sample.latex.split(',')[2] label = label.replace('\\','#').replace('#GeV',' GeV').replace('$','').replace(' M',', M') if sample.tau == 1000 or ctau != '': if style(sample) == 20: l1.AddEntry(g, label.split(', ')[1], 'P') if color(sample) == 6: l2.AddEntry(g, label.split(', ')[0], 'P') if gen_eff >= (1-0.01*gen_rec_cut)*rec_eff and gen_eff <= (1+0.01*gen_rec_cut)*rec_eff: matched.append(sample.name) else: not_matched.append(sample.name) break