Esempio n. 1
0
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')
Esempio n. 2
0
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")