def defineStyle(self): import tdrStyle as tdrStyle tdrStyle.setTDRStyle() ROOT.TGaxis.SetExponentOffset(-0.08, 0.00, "y")
#!/usr/bin/env python import numpy as np import ROOT from ROOT import TCanvas, TPad, TFile, TPaveText, TLegend from ROOT import gBenchmark, gStyle, gROOT, TStyle from ROOT import TH1D, TF1, TGraphErrors, TMultiGraph from math import sqrt from array import array import tdrStyle tdrStyle.setTDRStyle() import CMS_lumi #change the CMS_lumi variables (see CMS_lumi.py) CMS_lumi.lumi_13TeV = '35.9 fb^{-1}' CMS_lumi.writeExtraText = 1 #CMS_lumi.extraText = 'Preliminary' CMS_lumi.extraText = '' iPos = 0 gStyle.SetOptFit(0) def k_value(Num, Den): if Num == 0 or Den == 0:
#! /usr/bin/python import ROOT import tdrStyle from array import array from selectionCuts import * ROOT.gROOT.LoadMacro("PlotBase.cc+") ROOT.gROOT.LoadMacro("PlotHists.cc+") ROOT.gROOT.LoadMacro("PlotResolution.cc+") tdrStyle.setTDRStyle() ROOT.gROOT.SetBatch(True) sampledir = "/afs/cern.ch/work/d/dabercro/public/Winter15/flatTreesSkimmedV7/" goodRuns = "/afs/cern.ch/work/d/dabercro/public/Winter15/flatTreesSkimmedV7/" MuonFile = ROOT.TFile(goodRuns + "monojet_SingleMuon.root") SingleElecFile = ROOT.TFile(goodRuns + "monojet_SingleElectron.root") SinglePhoFile = ROOT.TFile(goodRuns + "monojet_SinglePhoton.root") DYFile = ROOT.TFile(sampledir + "monojet_DYJetsToLL_M-50.root") GJetsFile = ROOT.TFile(sampledir + "monojet_GJets.root") MuonTree = MuonFile.Get("events") SingleElecTree = SingleElecFile.Get("events") SinglePhoTree = SinglePhoFile.Get("events") DYTree = DYFile.Get("events") GJetsTree = GJetsFile.Get("events") plotter = ROOT.PlotResolution()
sys.argv = grootargs doFit = opt.DOFIT doPlots = opt.DOPLOTS if (not os.path.exists("plots") and doPlots): os.system("mkdir plots") from ROOT import * from LoadData_Unc import * RooMsgService.instance().setGlobalKillBelow(RooFit.WARNING) if (opt.DOPLOTS and os.path.isfile('tdrStyle.py')): from tdrStyle import setTDRStyle setTDRStyle() Histos = {} acceptance = {} qcdUncert = {} pdfUncert = {} def getunc(channel, List, m4l_bins, m4l_low, m4l_high, obs_reco, obs_gen, obs_bins, genbin): obs_gen_low = obs_bins[genbin] obs_gen_high = obs_bins[genbin + 1] obs_gen_lowest = obs_bins[0] obs_gen_highest = obs_bins[len(obs_bins) - 1]
def systematicFits(): setTDRStyle(); # Choose the jet multiplicity jet_num = "2b_"; jet_num_temp = "ge2j"; metBin = ["1","2","3","4","5"] templ = "_central"; #differential histo xbins = [1,25,45,70,100,150] #histograms for comaprison #diff generators theor = TH1D("theor", "", 5, xbins); nlo = TH1D("nlo", "", 5, xbins); powheg = TH1D("powheg", "", 5, xbins); #syst samples sysup = TH1D("sysup", "", 5, xbins); sysdown = TH1D("sysdown", "", 5, xbins); mup = TH1D("mup", "", 5, xbins); mdown = TH1D("mdown", "", 5, xbins); #measured measured = TH1D("meas", "", 5, xbins); #muon ele = TH1D("ele", "", 5, xbins); comb = TH1D("comb", "", 5, xbins); #compare histo nominal = TH1D("nominal", "", 5, xbins); #theroy onn ttbar only due to stats (need to also change the string for w/z) syst = ["_qup","_qdown","_mup","_mdown"] #syst[8] = {"_jup","_jdown","_METup","_METdown","_pup","_pdown","_bup","_bdown"}; for sysErr in range(0,4): print syst[sysErr] #asymerrors n = 5; x = [0]*n; y = [0]*n; exl = [0]*n; exh = [0]*n; theorNum = 0; nloNum = 0; powhegNum = 0; #syst upNum = 0; downNum = 0; mupNum = 0; mdownNum = 0; theorXsect = 157.5; totXsect = 0; for met in range(0,5): #for systematics f_central = TFile.Open("PFhistosForFitting_met"+metBin[met]+templ+".root"); f_all = TFile.Open("PFhistosForFitting_metall"+templ+".root"); f_templates = TFile.Open("QCDetaData.root"); signal = f_central.Get("metEta_h_"+jet_num+"signal"); wjets = f_central.Get("metEta_h_"+jet_num+"wjets"); zjets = f_central.Get("metEta_h_"+jet_num+"zjets"); SinglT = f_central.Get("metEta_h_"+jet_num+"SinglT"); ttbar = f_central.Get("metEta_h_"+jet_num+"ttbar"); QCD = f_central.Get("metEta_h_"+jet_num+"QCD"); tt_Z = f_central.Get("metEta_h_"+jet_num+"tt_Z"); tt_W = f_central.Get("metEta_h_"+jet_num+"tt_W"); DATA = f_central.Get("metEta_h_"+jet_num+"data"); QCData = f_templates.Get("metEta_h_"+jet_num_temp); ttbarAll = f_all.Get("metEta_h_"+jet_num+"ttbar"); tt_sys = f_central.Get("metEta_h_"+jet_num+"tt"+syst[sysErr]); #wjets_sys = f_central.Get("metEta_h_"+jet_num+"wjets"+syst[sysErr]); #zjets_sys = f_central.Get("metEta_h_"+jet_num+"zjets"+syst[sysErr]); #for other gens ttbar_nlo = f_central.Get("metEta_h_"+jet_num+"nlo"); ttbar_powheg = f_central.Get("metEta_h_"+jet_num+"powheg"); ttbar_nloAll = f_all.Get("metEta_h_"+jet_num+"nlo"); ttbar_powhegAll = f_all.Get("metEta_h_"+jet_num+"powheg"); #for sys up/down ttbar_sys = f_central.Get("metEta_h_"+jet_num+"tt_qup"); ttbar_sysdown = f_central.Get("metEta_h_"+jet_num+"tt_qdown"); ttbarUpAll = f_all.Get("metEta_h_"+jet_num+"tt_qup"); ttbarDownAll = f_all.Get("metEta_h_"+jet_num+"tt_qdown"); ttbar_mup = f_central.Get("metEta_h_"+jet_num+"tt_mup"); ttbar_mdown = f_central.Get("metEta_h_"+jet_num+"tt_mdown"); ttbarUpAllMat = f_all.Get("metEta_h_"+jet_num+"tt_mup"); ttbarDownAllMat = f_all.Get("metEta_h_"+jet_num+"tt_mdown"); #Choose rebin factor... rebinF = 8; ttbar_sys.Rebin(rebinF); #tt_sys.Rebin(rebinF); #wjets_sys.Rebin(rebinF); #zjets_sys.Rebin(rebinF); ttbar_sysdown.Rebin(rebinF); ttbar_mup.Rebin(rebinF); ttbar_mdown.Rebin(rebinF); ttbar_nlo.Rebin(rebinF); ttbar_powheg.Rebin(rebinF); signal.Rebin(rebinF); wjets.Rebin(rebinF); zjets.Rebin(rebinF); QCD.Rebin(rebinF); SinglT.Rebin(rebinF); ttbar.Rebin(rebinF); tt_Z.Rebin(rebinF); tt_W.Rebin(rebinF); DATA.Rebin(rebinF); QCData.Rebin(rebinF/2); NttbarUp = ttbar_sys.Integral(); NtotPassUp = ttbarUpAll.Integral(); NttbarDown = ttbar_sysdown.Integral(); NtotPassDown = ttbarDownAll.Integral(); NttbarUpMat = ttbar_mup.Integral(); NtotPassUpMat = ttbarUpAllMat.Integral(); NttbarDownMat = ttbar_mdown.Integral(); NtotPassDownMat = ttbarDownAllMat.Integral(); NttbarNLO = ttbar_nlo.Integral(); NtotPassNLO = ttbar_nloAll.Integral(); NttbarPOW = ttbar_powheg.Integral(); NtotPassPOW = ttbar_powhegAll.Integral(); Nsignal = signal.Integral(); Nwjets = wjets.Integral(); Nzjets = zjets.Integral(); NQCD = QCD.Integral(); NSinglT = SinglT.Integral(); Nttbar = ttbar.Integral(); NtotPass = ttbarAll.Integral(); Ntt_Z =tt_Z.Integral(); Ntt_W =tt_W.Integral(); tot = Nttbar+NSinglT+NQCD+Nzjets+Nwjets+Ntt_Z+Ntt_W; Ndata = DATA.Integral(); wstring = "wjets"; zstring = "zjets"; qcdstring = ""; # Read in the data and templates. getDataFromHis(f_central, jet_num, nbins); # Get data histrogram form central selection getSignalFromHis(f_central, jet_num, syst[sysErr], nbins, ttbar_Vec, ttbar_err_Vec);# Get ttbar, single-top histrograms form MC with entral selection getTemFromHis(f_central, wstring, jet_num, nbins, wjets_Vec, wjets_err_Vec); getTemFromHis(f_central, zstring, jet_num, nbins, zjets_Vec, zjets_err_Vec); getTemFromHis(f_templates, qcdstring, jet_num_temp, nbins, qcd_Vec, qcd_err_Vec); f_central.Close(); f_templates.Close(); # Initialize minuit, set initial values etc. of parameters. npar = 4; # the number of parameters minuit = TMinuit(npar); minuit.SetFCN(fcn); #minuit.SetPrintLevel(1); minuit.SetPrintLevel(-1); minuit.SetErrorDef(1.); fraction= NSinglT/Nsignal; ierflg = 0; parName = ["ttbar+single-top", "wjets", "zjets", "qcd"] #background parameters par = [Nsignal, Nwjets, Nzjets, NQCD] #using the MC estimation as the start values 1fb for i=0 in range(0,npar): minuit.mnparm(i, parName[i], par[i], 10., 0, Ntotal, ierflg); #the following is copied from Fabian's fitting code to improve minimum, but you can comment it, it won't affect the fitting results. # 1 standard # 2 try to improve minimum (slower) arglist = [0]*10; arglist[0]=1; minuit.mnexcm("SET STR",arglist,1,ierflg); minuit.Migrad(); outpar = [0]*npar err = [0]*npar; for i=0 in range(0,npar): minuit.GetParameter(i,outpar[i],err[i]); xs_fit = (outpar[0]-NSinglT)/(NtotPass/theorXsect); #=out-Nsing/lumi*Accept Nsing should probs be xsect*Accept... 1fb xs_fitup = (outpar[0]+err[0]-NSinglT)/(NtotPass/theorXsect); #=out-Nsing/lumi*Accept Nsing should probs be xsect*Accept... 1fb xs_fitdown = (outpar[0]-err[0]-NSinglT)/(NtotPass/theorXsect); #=out-Nsing/lumi*Accept Nsing should probs be xsect*Accept... 1fb #madgraph theorNum = (Nttbar)/(NtotPass/theorXsect); nloNum = (NttbarNLO)/(NtotPassNLO/theorXsect); powhegNum = (NttbarPOW)/(NtotPassPOW/theorXsect); #systematics upNum = (NttbarUp)/(NtotPassUp/theorXsect); downNum = (NttbarDown)/(NtotPassDown/theorXsect); mupNum = (NttbarUpMat)/(NtotPassUpMat/theorXsect); mdownNum = (NttbarDownMat)/(NtotPassDownMat/theorXsect); totXsect += xs_fit; data_Vec = [] ttbar_Vec = [] wjets_Vec = [] zjets_Vec = [] qcd_Vec = [] ttbar_err_Vec = [] wjets_err_Vec = [] zjets_err_Vec = [] qcd_err_Vec = [] width = measured.GetBinWidth(met+1); measured.SetBinContent(met+1,xs_fit/width); measured.SetBinError(met+1,(xs_fitup-xs_fit)/width); nlo.SetBinContent(met+1,nloNum/157.5/width); powheg.SetBinContent(met+1,powhegNum/157.5/width); theor.SetBinContent(met+1, (theorNum/157.5/width)); sysup.SetBinContent(met+1, (upNum/157.5/width)); sysdown.SetBinContent(met+1, (downNum/157.5/width)); mup.SetBinContent(met+1, (mupNum/157.5/width)); mdown.SetBinContent(met+1, (mdownNum/157.5/width)); x[met] = measured.GetBinCenter(met+1); y[met] = xs_fit/width; #exl[met] = measured.GetBinWidth(met+1)/2.; #exh[met] = measured.GetBinWidth(met+1)/2.; exl[met] = 0.; exh[met] = 0.;
doFit = opt.DOFIT doPlots = opt.DOPLOTS if (not os.path.exists("plots") and doPlots): os.system("mkdir plots") from ROOT import * from LoadData_dsperka import * LoadData(opt.SOURCEDIR) save = "" RooMsgService.instance().setGlobalKillBelow(RooFit.WARNING) if (opt.DOPLOTS and os.path.isfile('tdrStyle.py')): from tdrStyle import setTDRStyle setTDRStyle() Histos = {} wrongfrac = {} dwrongfrac = {} binfrac_wrongfrac = {} dbinfrac_wrongfrac = {} outfrac = {} doutfrac = {} binfrac_outfrac = {} dbinfrac_outfrac = {} outinratio = {} doutinratio = {} CB_mean_post = {} CB_sigma_post = {} CB_dmean_post = {}
def CompareExpLimitsEachYear(dirname_prefix, tag=''): import tdrStyle as tdrStyle tdrStyle.setTDRStyle() tcanvas = ROOT.TCanvas('tcanvas' + tag, 'distro' + tag, 800, 600) tcanvas.cd() tcanvas.SetLogy() tcanvas.SetGrid() dic_limit = GetLimit(dirname_prefix + '2016' + tag, 'exp.txt') tgr_2016exp = GetLimitGraph(dic_limit) dic_2016exp = copy.deepcopy(dic_limit) dic_limit = GetLimit(dirname_prefix + '2017' + tag, 'exp.txt') tgr_2017exp = GetLimitGraph(dic_limit) dic_2017exp = copy.deepcopy(dic_limit) dic_limit = GetLimit(dirname_prefix + '2018' + tag, 'exp.txt') tgr_2018exp = GetLimitGraph(dic_limit) dic_2018exp = copy.deepcopy(dic_limit) dic_limit = GetLimit(dirname_prefix + '_201620172018' + tag, 'exp.txt') tgr_201620172018exp = GetLimitGraph(dic_limit) dic_201620172018exp = copy.deepcopy(dic_limit) dic_limit = GetggHWWXsec() tgr_theory = GetLimitGraph(dic_limit) dic_theory = copy.deepcopy(dic_limit) dic_3yr = copy.deepcopy(dic_2016exp) dic_3yr.update(dic_2017exp) dic_3yr.update(dic_2018exp) dic_3yr.update(dic_201620172018exp) dic_3yr.update(dic_theory) miny, maxy = GetMinMaxFromDic(dic_3yr) tgr_2016exp.SetLineStyle(2) tgr_2017exp.SetLineStyle(2) tgr_2018exp.SetLineStyle(2) tgr_201620172018exp.SetLineStyle(2) tgr_2016exp.SetLineColor(ROOT.kBlue) tgr_2017exp.SetLineColor(ROOT.kGreen) tgr_2018exp.SetLineColor(ROOT.kOrange) tgr_201620172018exp.SetLineColor(ROOT.kBlack) tgr_theory.SetLineColor(ROOT.kRed) masses = [ 200, 210, 230, 250, 270, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 1000, 1500, 2000, 2500, 3000, 4000, 5000 ] Nmass = len(masses) frame = ROOT.TH2F("frame", "", Nmass, min(masses), max(masses), 100, miny * 0.1, maxy * 10) frame.SetYTitle("Limit 95% CL_{s} on #sigma_{X#rightarrowWW} [pb]") frame.GetYaxis().SetTitleSize(0.05) frame.GetYaxis().SetLabelSize(0.03) frame.SetXTitle("m_{X} (GeV)") frame.GetXaxis().SetTitleSize(0.035) frame.GetXaxis().SetLabelSize(0.03) frame.GetXaxis().SetTitleOffset(1.5) frame.Draw() tgr_2016exp.Draw('l same') tgr_2017exp.Draw('l same') tgr_2018exp.Draw('l same') tgr_201620172018exp.Draw('l same') tgr_theory.Draw('l same') import CMS_lumi as CMS_lumi CMS_lumi.lumi_13TeV = '137 fb^{-1}' CMS_lumi.writeExtraText = 1 CMS_lumi.extraText = "Preliminary" CMS_lumi.relPosX = 0.12 CMS_lumi.lumi_sqrtS = '13 TeV' iPeriod = 4 iPos = 0 CMS_lumi.CMS_lumi(tcanvas, iPeriod, iPos) #x1 y1 x2 y2 leg = ROOT.TLegend(0.5, 0.75, 0.95, 0.94) leg.SetFillColor(0) leg.SetBorderSize(1) leg.SetTextFont(8) leg.SetTextSize(20) if not tag == '': tag = ' ' + tag leg.AddEntry(tgr_2016exp, "Expected Limit 2016" + tag, "l") leg.AddEntry(tgr_2017exp, "Expected Limit 2017" + tag, "l") leg.AddEntry(tgr_2018exp, "Expected Limit 2018" + tag, "l") leg.AddEntry(tgr_201620172018exp, "3yrs combined" + tag, "l") leg.AddEntry(tgr_theory, "SM-like scenario, f_{vbf}=0", 'l') leg.Draw("same") tag = tag.replace(' ', '_') tcanvas.SaveAs('compare' + tag + '.png')