gLcOverD0.Draw('p') gLcOverD0.Fit('fLcOverD0', 'r') dfDplus = dfD0FONLL.copy() for col in dfDplus.columns: if col not in ['ptmin', 'ptmax']: dfDplus[col] = dfDplus.apply(lambda x: x[col] * gDplusOverD0.Eval( (x['ptmax'] + x['ptmin']) / 2), axis=1) dfDs = dfD0FONLL.copy() for col in dfDs.columns: if col not in ['ptmin', 'ptmax']: dfDs[col] = dfDs.apply(lambda x: x[col] * gDsOverD0.Eval( (x['ptmax'] + x['ptmin']) / 2), axis=1) dfLc = dfD0FONLL.copy() for col in dfLc.columns: if col not in ['ptmin', 'ptmax']: dfLc[col] = dfLc.apply(lambda x: x[col] * gLcOverD0.Eval( (x['ptmax'] + x['ptmin']) / 2), axis=1) dfDplus.to_csv('models/FONLLDataDriven-Dplus-pp14TeV-y05-measbins.txt', sep=' ') dfDs.to_csv('models/FONLLDataDriven-Ds-pp14TeV-y05-measbins.txt', sep=' ') dfLc.to_csv('models/FONLLDataDriven-Lc-pp14TeV-y05-measbins.txt', sep=' ') input('Press enter to exit')
def trigger_efficiency(year, separate=False): from root_numpy import root2array, fill_hist from aliases import triggers, triggers_PFHT, triggers_Jet, triggers_BTag import numpy as np #spec_triggers = {"PFHT": triggers_PFHT, "Jet": triggers_Jet, "BTag": triggers_BTag} spec_triggers = { "HT/Jet": "(" + triggers_PFHT + " || " + triggers_Jet + ")", "BTag": triggers_BTag } spec_triggers_colors = { "PFHT": 418, "Jet": 4, "BTag": 6, "HT/Jet": 4, "total": 2 } hist_pass = TH1F("pass", "pass", 100, 0., 10000.) if separate: hist_pass_spec = {} for trig in spec_triggers.keys(): hist_pass_spec[trig] = TH1F("pass_" + trig, "pass_" + trig, 100, 0., 10000.) hist_all = TH1F("all", "all", 100, 0., 10000.) file_list = [] data_2016_letters = ["B", "C", "D", "E", "F", "G", "H"] data_2017_letters = ["B", "C", "D", "E", "F"] data_2018_letters = ["A", "B", "C", "D"] sample_names = [] if year == '2016': letters = data_2016_letters elif year == '2017': letters = data_2017_letters elif year == '2018': letters = data_2018_letters else: print "unknown year" sys.exit() for letter in letters: #dir_content = os.listdir(TRIGGERDIR+"/SingleMuon_{}_{}/".format(year, letter)) ## intended to run directly on ntuples #for entry in dir_content: # if "_flatTuple" in entry: file_list.append(TRIGGERDIR+"/SingleMuon_{}_{}/".format(year, letter)+entry) file_list.append(TRIGGERDIR + "/SingleMuon_{}_{}.root".format(year, letter)) print "appending:", TRIGGERDIR + "/SingleMuon_{}_{}.root".format( year, letter) for file_name in file_list: temp_array = root2array(file_name, treename='tree', branches='jj_mass_widejet', selection="jj_deltaEta_widejet<1.1") fill_hist(hist_all, temp_array) temp_array = root2array(file_name, treename='tree', branches='jj_mass_widejet', selection="jj_deltaEta_widejet<1.1 && " + triggers) fill_hist(hist_pass, temp_array) if separate: for trig in spec_triggers.keys(): temp_array = root2array( file_name, treename='tree', branches='jj_mass_widejet', selection="jj_deltaEta_widejet<1.1 && " + spec_triggers[trig]) fill_hist(hist_pass_spec[trig], temp_array) temp_array = None import array from aliases import dijet_bins binning = [] for num in dijet_bins: if num <= 10000: binning.append(num) #binning = range(0,1500,100)+range(1500,2000,100)+range(2000,3100,150)+range(3100,10000,300) binning_ = array.array('d', binning) hist_pass2 = hist_pass.Rebin( len(binning_) - 1, "hist_pass_rebinned", binning_) hist_all2 = hist_all.Rebin( len(binning_) - 1, "hist_all_rebinned", binning_) if separate: hist_pass_spec2 = {} for trig in spec_triggers.keys(): hist_pass_spec2[trig] = hist_pass_spec[trig].Rebin( len(binning_) - 1, "hist_pass_" + trig + "_rebinned", binning_) hist_pass2.Sumw2() hist_all2.Sumw2() eff = TGraphAsymmErrors() eff.Divide(hist_pass2, hist_all2) eff.SetMarkerColor(spec_triggers_colors["total"]) if separate: eff.SetMarkerStyle(5) else: eff.SetMarkerStyle(1) eff.SetLineColor(spec_triggers_colors["total"]) eff.SetLineWidth(2) if separate: eff_spec = {} for trig in spec_triggers.keys(): hist_pass_spec2[trig].Sumw2() eff_spec[trig] = TGraphAsymmErrors() eff_spec[trig].Divide(hist_pass_spec2[trig], hist_all2) eff_spec[trig].SetMarkerColor(spec_triggers_colors[trig]) eff_spec[trig].SetMarkerStyle(1) eff_spec[trig].SetLineColor(spec_triggers_colors[trig]) eff_spec[trig].SetLineWidth(2) one_line = TGraph() one_line.SetPoint(0, 0., 1.) one_line.SetPoint(1, 10000., 1.) one_line.SetLineStyle(2) c1 = TCanvas("c1", "Trigger Efficiency", 800, 800) c1.cd(1) eff.Draw("AP") one_line.Draw("L") eff.SetTitle(";m_{jj} (GeV);trigger efficiency") eff.SetMinimum(0.) eff.SetMaximum(1.4) #0.65 ## new dijet_bin_centers = [] for b, lthr in enumerate(dijet_bins[:-1]): if lthr < 1200 or lthr > 2500: continue dijet_bin_centers.append(0.5 * (dijet_bins[b] + dijet_bins[b + 1])) print "total trigger efficiency:" for cval in dijet_bin_centers: print cval, ":", eff.Eval(cval) ## end new if separate: leg = TLegend(0.65, 0.75, 0.9, 0.95) leg.AddEntry(eff, "total") for trig in spec_triggers.keys(): leg.AddEntry(eff_spec[trig], trig + "-based") eff_spec[trig].Draw("P SAME") ## new print trig, "trigger efficiency" for cval in dijet_bin_centers: print cval, ":", eff_spec[trig].Eval(cval) ## end new leg.Draw() eff.GetXaxis().SetTitleSize(0.045) eff.GetYaxis().SetTitleSize(0.045) eff.GetYaxis().SetTitleOffset(1.1) eff.GetXaxis().SetTitleOffset(1.05) eff.GetXaxis().SetLimits(700., 5000.) c1.SetTopMargin(0.05) #drawCMS(-1, "Preliminary", year=year) #Preliminary #drawCMS(-1, "Work in Progress", year=year, suppressCMS=True) drawCMS(-1, "", year=year, suppressCMS=True) drawAnalysis("") suffix = "" if separate: suffix = "_sep" c1.Print("plots/Efficiency/trigger_" + year + suffix + ".pdf") c1.Print("plots/Efficiency/trigger_" + year + suffix + ".png")