def loadChain(s, verbose=False): '''Use this function to add the chain to the sample dictionary. Will not load again if has already loaded''' if not s.has_key('chain'): if verbose: print "Loading chain for sample %s. (Only the first time)." % s[ 'name'] s['chain'] = getChain(s)
def cutflow(sig): ####################################################### # SELECT WHAT YOU WANT TO DO HERE # ####################################################### reduceStat = 100 #recude the statistics, i.e. 10 is ten times less samples to look at ####################################################### # Define cutflow you want to make # ####################################################### mt2llcut = 80. metcut = 40. lumi = 10000. baselineamount = { 'samples':{}, 'SoverB': None,} cutflow = {\ 'metsig':{'baseline': 0., 'cuts': {\ 3:{'samples':{}, 'SoverB': None}, 4:{'samples':{}, 'SoverB': None}, 5:{'samples':{}, 'SoverB': None}, 6:{'samples':{}, 'SoverB': None}, 7:{'samples':{}, 'SoverB': None}, 8:{'samples':{}, 'SoverB': None}, 9:{'samples':{}, 'SoverB': None}, 10:{'samples':{}, 'SoverB': None}, 10:{'samples':{}, 'SoverB': None}, }, 'event': None, }, 'nbjets':{'baseline': 1., 'cuts': {\ 0:{'samples':{}, 'SoverB': None}, 1:{'samples':{}, 'SoverB': None}, 2:{'samples':{}, 'SoverB': None}, 3:{'samples':{}, 'SoverB': None}, 4:{'samples':{}, 'SoverB': None}, 5:{'samples':{}, 'SoverB': None}, }, 'event': None, }, 'njets': {'baseline': 2., 'cuts': {\ 1:{'samples':{}, 'SoverB': None}, 2:{'samples':{}, 'SoverB': None}, 3:{'samples':{}, 'SoverB': None}, 4:{'samples':{}, 'SoverB': None}, 5:{'samples':{}, 'SoverB': None}, 6:{'samples':{}, 'SoverB': None}, 7:{'samples':{}, 'SoverB': None}, }, 'event': None, }, 'ht': {'baseline': 0., 'cuts': {\ 50: {'samples':{}, 'SoverB': None}, 100:{'samples':{}, 'SoverB': None}, 200:{'samples':{}, 'SoverB': None}, 300:{'samples':{}, 'SoverB': None}, 400:{'samples':{}, 'SoverB': None}, 500:{'samples':{}, 'SoverB': None}, }, 'event': None, }, } #preselection: MET>40, njets>=2, n_bjets>=1, n_lep>=2 #For now see here for the Sum$ syntax: https://root.cern.ch/root/html/TTree.html#TTree:Draw@2 preselection = 'met_pt>'+str(metcut)+'&&Sum$(LepGood_pt>20)==2' ####################################################### # load all the samples # ####################################################### backgrounds = [singleTop_50ns,DY_50ns,TTJets_50ns] #signals = [SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop650_mLSP325, SMS_T2tt_2J_mStop850_mLSP100] signal = [sig] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds+signal: s['chain'] = getChain(s,histname="") ####################################################### # Start filling in the histograms # ####################################################### for s in backgrounds+signal: for cuttype in cutflow.keys(): for cut in cutflow[cuttype]['cuts'].keys(): cutflow[cuttype]['cuts'][cut]['samples'][s["name"]] = 0 baselineamount['samples'][s['name']] = 0 chain = s["chain"] #Using Event loop #get EList after preselection print "Looping over %s" % s["name"] eList = getEList(chain, preselection) nEvents = eList.GetN()/reduceStat print "Found %i events in %s after preselection %s, looping over %i" % (eList.GetN(),s["name"],preselection,nEvents) for ev in range(nEvents): increment = 50 if nEvents>increment and ev%(nEvents/increment)==0: sys.stdout.write('\r' + "=" * (ev / (nEvents/increment)) + " " * ((nEvents - ev)/ (nEvents/increment)) + "]" + str(round((ev+1) / (float(nEvents)/100),2)) + "%") sys.stdout.flush() sys.stdout.write('\r') chain.GetEntry(eList.GetEntry(ev)) mt2Calc.reset() #event weight (L= 4fb^-1) weight = reduceStat*getVarValue(chain, "weight") weight = weight*(lumi/4000.) #MET met = getVarValue(chain, "met_pt") metPhi = getVarValue(chain, "met_phi") #jetpt leadingjetpt = getVarValue(chain, "Jet_pt",0) subleadingjetpt = getVarValue(chain, "Jet_pt",1) #Leptons allLeptons = getLeptons(chain) muons = filter(looseMuID, allLeptons) electrons = filter(looseEleID, allLeptons) nlep = len(allLeptons) #SF and OF channels leptons = {\ 'mu': {'name': 'mumu', 'file': muons}, 'e': {'name': 'ee', 'file': electrons}, 'emu': {'name': 'emu', 'file': [electrons,muons]}, } for lep in leptons.keys(): twoleptons = False #Same Flavor if lep != 'emu': if len(leptons[lep]['file'])==2 and leptons[lep]['file'][0]['pdgId']*leptons[lep]['file'][1]['pdgId']<0: twoleptons = True l0pt, l0eta, l0phi = leptons[lep]['file'][0]['pt'], leptons[lep]['file'][0]['eta'], leptons[lep]['file'][0]['phi'] l1pt, l1eta, l1phi = leptons[lep]['file'][1]['pt'], leptons[lep]['file'][1]['eta'], leptons[lep]['file'][1]['phi'] leadingleptonpt = l0pt subleadingleptonpt = l1pt mll = sqrt(2.*l0pt*l1pt*(cosh(l0eta-l1eta)-cos(l0phi-l1phi))) zveto = True #Opposite Flavor if lep == 'emu': if len(leptons[lep]['file'][0])==1 and len(leptons[lep]['file'][1])==1 and leptons[lep]['file'][0][0]['pdgId']*leptons[lep]['file'][1][0]['pdgId']<0: twoleptons = True l0pt, l0eta, l0phi = leptons[lep]['file'][0][0]['pt'], leptons[lep]['file'][0][0]['eta'], leptons[lep]['file'][0][0]['phi'] l1pt, l1eta, l1phi = leptons[lep]['file'][1][0]['pt'], leptons[lep]['file'][1][0]['eta'], leptons[lep]['file'][1][0]['phi'] if l1pt > l0pt : leadingleptonpt = l1pt subleadingleptonpt = l0pt else: leadingleptonpt = l0pt subleadingleptonpt = l1pt mll = sqrt(2.*l0pt*l1pt*(cosh(l0eta-l1eta)-cos(l0phi-l1phi))) zveto = False if (twoleptons and mll>20 and not zveto) or (twoleptons and mll > 20 and zveto and abs(mll-90.2)>15): mt2Calc.setMet(met,metPhi) mt2Calc.setLeptons(l0pt, l0eta, l0phi, l1pt, l1eta, l1phi) mt2ll = mt2Calc.mt2ll() jets = filter(lambda j:j['pt']>30 and abs(j['eta'])<2.4 and j['id'], getJets(chain)) bjetspt = filter(lambda j:j['btagCSV']>0.89, jets) nobjets = filter(lambda j:j['btagCSV']<=0.89, jets) nmuons = len(muons) nelectrons = len(electrons) ht = sum([j['pt'] for j in jets]) if len(jets)<1: continue if mt2ll<mt2llcut: continue cutflow['metsig']['event'] = met/sqrt(ht) cutflow['nbjets']['event'] = len(bjetspt) cutflow['njets']['event'] = len(jets) cutflow['ht']['event'] = ht for cuttype in cutflow.keys(): eventisgood = True for cuttype2 in cutflow.keys(): if cuttype2 != cuttype: if cutflow[cuttype2]['event'] < cutflow[cuttype2]['baseline']: eventisgood = False if eventisgood: for cut in cutflow[cuttype]['cuts']: if cutflow[cuttype]['event'] >= cut: cutflow[cuttype]['cuts'][cut]['samples'][s['name']] += weight baselineisgood = True for cuttype in cutflow.keys(): if cutflow[cuttype]['event'] < cutflow[cuttype]['baseline']: baselineisgood = False if baselineisgood: baselineamount['samples'][s['name']] += weight del eList sigtot = baselineamount['samples'][signal[0]['name']] bkgtot = sum(baselineamount['samples'].values()) - sigtot if bkgtot > 0: baselineamount['SoverB'] = 100 * (sigtot/sqrt(bkgtot)) else: baselineamount['SoverB'] = 0. for cuttype in cutflow.keys(): for cut in cutflow[cuttype]['cuts']: sigtot = cutflow[cuttype]['cuts'][cut]['samples'][signal[0]['name']] bkgtot = sum(cutflow[cuttype]["cuts"][cut]['samples'].values()) - sigtot if bkgtot > 0: cutflow[cuttype]['cuts'][cut]['SoverB'] = 100 * (sigtot/sqrt(bkgtot)) else: cutflow[cuttype]['cuts'][cut]['SoverB'] = 0. maketable(baselineamount, cutflow, mt2llcut, metcut,signal,lumi)
presel_mll = 'dl_mass>' + str(mllcut) presel_metsig = 'met_pt/sqrt(Sum$(Jet_pt*(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id)))>' + str( metsignifcut) presel_OS = 'isOS' presel_dPhi = 'cos(met_phi-Jet_phi[0])<cos(' + str( dphicut) + ')&&cos(met_phi-Jet_phi[1])<cos(' + str(dphicut) + ')' preselection = presel_met + '&&' + presel_ngoodlep + '&&' + presel_mll + '&&' + presel_OS + '&&' + presel_metsig + '&&' + presel_dPhi datacut = "(Flag_HBHENoiseFilter&&Flag_goodVertices&&Flag_CSCTightHaloFilter&&Flag_eeBadScFilter&&weight>0)" ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds: s['chain'] = getChain(s, histname="") ####################################################### # Define piecharts you want to make # ####################################################### mt2llcuts = [0., 80., 100., 120., 140., 200.] piechart = {} for cut in mt2llcuts: piechart[str(cut)] = {\ "EE":{\ "(0,0)" :{}, "(1,0)" :{}, "(1,1)" :{}, "(>=2,0)" :{}, "(>=2,>=1)" :{}, },
from StopsDilepton.tools.pdgToName import pdgToName mt2Calc = mt2Calculator() from StopsDilepton.tools.localInfo import * reduceStat = 1 lumiScale = 10. lepPdgs = [11, 13, 15] nuPdgs = [12, 14, 16] #load all the samples from StopsDilepton.samples.cmgTuples_Spring15_mAODv2_25ns_1l_postProcessed import * small = False maxN = 3 if small else -1 ttjets = TTJets_Lep ttjets['name'] = "TTLep_1l2l" ttjets['chain'] = getChain(ttjets, histname="", maxN=maxN) prefix = "mAODv2" #others={'name':'ST/VV/TTX', 'chain':getChain([WJetsToLNu,DY,singleTop,TTX,diBoson], histname="")} samples = [TTJets_Lep] ##vetoed by patched CSC def vecPtSum(objs, subtract=[]): px = sum([o['pt'] * cos(o['phi']) for o in objs]) py = sum([o['pt'] * sin(o['phi']) for o in objs]) px -= sum([o['pt'] * cos(o['phi']) for o in subtract]) py -= sum([o['pt'] * sin(o['phi']) for o in subtract]) return sqrt(px**2 + py**2)
"$CMSSW_BASE/src/StopsDilepton/tools/python/puReweightingData/officialDataPileuphistogram_DoubleMuon_1500.root" ), "pileup", ) # load all the samples from StopsDilepton.samples.cmgTuples_Spring15_mAODv2_25ns_1l_postProcessed import * backgrounds = [DY, TTJets_Lep, TTX, diBoson, singleTop, singleTop, WJetsToLNu, QCD_Mu5] # backgrounds = [TTJets_25ns, DY_25ns, singleTop_25ns, diBoson_25ns, WJetsHTToLNu_25ns]#, QCD] for b in backgrounds: b["isData"] = False # get the TChains for each sample for s in backgrounds: s["chain"] = getChain(s, histname="") # plots plots = {"nTrueInt": {"title": "nTrueInt", "name": "nTrueInt", "binning": [50, 0, 50], "histo": {}}} # make plot in each sample: for s in backgrounds: for pk in plots.keys(): plots[pk]["histo"][s["name"]] = getPlotFromChain( s["chain"], plots[pk]["name"], plots[pk]["binning"], cutString=preselection ) for pk in plots.keys(): plots[pk]["sum"] = plots[pk]["histo"][backgrounds[0]["name"]].Clone() for b in backgrounds[1:]: plots[pk]["sum"].Add(plots[pk]["histo"][b["name"]])
QCDSample = QCD_Mu5 if opts.mode=="doubleEle": cutString = "&&".join(["isEE==1&&nGoodMuons==0&&nGoodElectrons==2", triggerEleEle, getZCut(opts.zMode)] + preselCuts) dataCut = "&&".join([filterCut]) dataSample = DoubleEG_Run2015D QCDSample = QCD_EMbcToE if opts.mode=="muEle": cutString = "&&".join(["isEMu==1&&nGoodMuons==1&&nGoodElectrons==1",triggerMuEle, getZCut(opts.zMode)] + preselCuts) dataCut = "&&".join([filterCut]) dataSample = MuonEG_Run2015D QCDSample = QCD_Mu5EMbcToE cutFunc = None lumiScaleFac = dataSample["lumi"]/1000. backgrounds = [TTJets, WJetsToLNu, DY, singleTop, QCDSample, TTX, diBoson] data = getYieldFromChain(getChain(dataSample,histname="",maxN=maxN), cutString = "&&".join([cutString, dataCut]), weight='weight') bkg = 0. for s in backgrounds: bkg+= getYieldFromChain(getChain(s,histname="", maxN=maxN), cutString, weight='weight') scaleFac = data/(bkg*lumiScaleFac) print "After lumiscale %3.3f there is bkg %7.1f and data %7.1f: re-normalizing scaleFac by %3.3f"%(lumiScaleFac, lumiScaleFac*bkg, data, scaleFac) ratioOps = {'yLabel':'Data/MC', 'numIndex':1, 'denIndex':0 ,'yRange':None, 'logY':False, 'color':ROOT.kBlack, 'yRange':(0.1, 2.1)} #ratioOps = None def getStack(labels, var, binning, cut, options={}): style_Data = {'legendText':dataSample['name'], 'style':"e", 'lineThickness':0, 'errorBars':True, 'color':ROOT.kBlack, 'markerStyle':20, 'markerSize':1} style_WJets = {'legendText':'W + Jets', 'style':"f", 'lineThickness':0, 'errorBars':False, 'color':42, 'markerStyle':None, 'markerSize':None}
"(Jet_btagCSV>0.890)>>hOther(100,-1,2)", cut + "&&Jet_id>0&&(abs(Jet_hadronFlavour) < 4 || abs(Jet_hadronFlavour) > 5)&& " + etaCut + "&&" + ptCut) hbQuark = ROOT.gDirectory.Get("hbQuark") hcQuark = ROOT.gDirectory.Get("hcQuark") hOther = ROOT.gDirectory.Get("hOther") mceff[tuple(ptBin)][tuple(etaBin)]["b"] = hbQuark.GetMean() mceff[tuple(ptBin)][tuple(etaBin)]["c"] = hcQuark.GetMean() mceff[tuple(ptBin)][tuple(etaBin)]["other"] = hOther.GetMean() print "Eta", etaBin, etaCut, "Pt", ptBin, ptCut, "Found b/c/other", mceff[ tuple(ptBin)][tuple(etaBin)]["b"], mceff[tuple(ptBin)][tuple( etaBin)]["c"], mceff[tuple(ptBin)][tuple(etaBin)]["other"] del hbQuark, hcQuark, hOther return mceff #for sample in [TTJets, TTJets_Lep]: #for sample in [ TTJets_DiLepton, TTJets]: c = getChain(getChunks(TTJets_DiLepton)[0] + getChunks(TTJets_DiLepton_ext)[0], treeName="tree") res = getBTagMCTruthEfficiencies( c, cut= "(Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id))>=2&&Sum$(LepGood_pt>20&&abs(LepGood_eta)<2.4)>=2" ) print "Efficiencies:" print res pickle.dump(res, \ file(os.path.expandvars('$CMSSW_BASE/src/StopsDilepton/tools/data/btagEfficiencyData/TTJets_DiLepton_comb_2j_2l.pkl'), 'w') )
for etaBin in etaBins: mceff[tuple(ptBin)][tuple(etaBin)] = {} etaCut = "abs(Jet_eta)>"+str(etaBin[0])+"&&abs(Jet_eta)<"+str(etaBin[1]) ptCut = "abs(Jet_pt)>"+str(ptBin[0]) if ptBin[1]>0: ptCut += "&&abs(Jet_pt)<"+str(ptBin[1]) c.Draw("(Jet_btagCSV>0.890)>>hbQuark(100,-1,2)",cut+"&&Jet_id>0&&abs(Jet_hadronFlavour)==5&& "+etaCut+"&&"+ptCut) c.Draw("(Jet_btagCSV>0.890)>>hcQuark(100,-1,2)",cut+"&&Jet_id>0&&abs(Jet_hadronFlavour)==4&& "+etaCut+"&&"+ptCut) c.Draw("(Jet_btagCSV>0.890)>>hOther(100,-1,2)" ,cut+"&&Jet_id>0&&(abs(Jet_hadronFlavour) < 4 || abs(Jet_hadronFlavour) > 5)&& "+etaCut+"&&"+ptCut) hbQuark = ROOT.gDirectory.Get("hbQuark") hcQuark = ROOT.gDirectory.Get("hcQuark") hOther = ROOT.gDirectory.Get("hOther") mceff[tuple(ptBin)][tuple(etaBin)]["b"] = hbQuark.GetMean() mceff[tuple(ptBin)][tuple(etaBin)]["c"] = hcQuark.GetMean() mceff[tuple(ptBin)][tuple(etaBin)]["other"] = hOther.GetMean() print "Eta",etaBin,etaCut,"Pt",ptBin,ptCut,"Found b/c/other", mceff[tuple(ptBin)][tuple(etaBin)]["b"], mceff[tuple(ptBin)][tuple(etaBin)]["c"], mceff[tuple(ptBin)][tuple(etaBin)]["other"] del hbQuark, hcQuark, hOther return mceff #for sample in [TTJets, TTJets_Lep]: #for sample in [ TTJets_DiLepton, TTJets]: c = getChain(getChunks(TTJets_DiLepton)[0] + getChunks(TTJets_DiLepton_ext)[0], treeName="tree") res= getBTagMCTruthEfficiencies(c, cut="(Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id))>=2&&Sum$(LepGood_pt>20&&abs(LepGood_eta)<2.4)>=2" ) print "Efficiencies:" print res pickle.dump(res, \ file(os.path.expandvars('$CMSSW_BASE/src/StopsDilepton/tools/data/btagEfficiencyData/TTJets_DiLepton_comb_2j_2l.pkl'), 'w') )
presel_ngoodlep = '((nGoodMuons+nGoodElectrons)=='+str(ngoodleptons)+')' presel_mll = 'dl_mass>'+str(mllcut) presel_metsig = 'met_pt/sqrt(Sum$(Jet_pt*(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id)))>'+str(metsignifcut) presel_OS = 'isOS' presel_dPhi = 'cos(met_phi-Jet_phi[0])<cos('+str(dphicut)+')&&cos(met_phi-Jet_phi[1])<cos('+str(dphicut)+')' preselection = presel_met+'&&'+presel_ngoodlep+'&&'+presel_mll+'&&'+presel_OS+'&&'+presel_metsig+'&&'+presel_dPhi datacut = "(Flag_HBHENoiseFilter&&Flag_goodVertices&&Flag_CSCTightHaloFilter&&Flag_eeBadScFilter&&weight>0)" ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds: s['chain'] = getChain(s,histname="") ####################################################### # Define piecharts you want to make # ####################################################### mt2llcuts = [0.,80.,100.,120.,140.,200.] piechart = {} for cut in mt2llcuts: piechart[str(cut)] = {\ "EE":{\ "(0,0)" :{}, "(1,0)" :{}, "(1,1)" :{}, "(>=2,0)" :{}, "(>=2,>=1)" :{},
data = [DoubleEG_Run2015D] luminosity = data[0]["lumi"] datacut = "(Flag_HBHENoiseFilter&&Flag_goodVertices&&Flag_CSCTightHaloFilter&&Flag_eeBadScFilter&&weight>0)" preselection = presel_njet+'&&'+presel_OS+'&&'+presel_mll+'&&'+presel_dPhi+'&&'+presel_met+'&&'+presel_metsig+'&&'+presel_flavour+'&&'+presel_mt2ll backgrounds = [DY_HT_LO,TTJets_Lep,TTZ,singleTop, diBoson, triBoson, TTXNoZ, WJetsToLNu_HT, QCD_HT] #backgrounds = [DY_HT_LO,TTJets] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds+data: s['chain'] = getChain(s,histname="") mt2llbinning = "(15,0,300)" mllbinning = "(50,0,150)" plots = {\ 'dl_mt2ll':{\ '_onZ_0b': {'title':'MT2ll (GeV)', 'name':'MT2ll_onZ_b==0b',"legend":"(onZ,0 b-tag)", 'binning': mt2llbinning, 'histo':{}}, '_offZ_0b': {'title':'MT2ll (GeV)', 'name':'MT2ll_offZ_b==0b',"legend":"(offZ,0 b-tag)",'binning': mt2llbinning, 'histo':{}}, '_onZ_1mb': {'title':'MT2ll (GeV)', 'name':'MT2ll_onZ_b>=1', "legend":"(onZ,>0 b-tag)", 'binning': mt2llbinning, 'histo':{}}, '_offZ_1mb': {'title':'MT2ll (GeV)', 'name':'MT2ll_offZ_b>=1', "legend":"(offZ,>0 b-tag)", 'binning': mt2llbinning, 'histo':{}}, }, 'dl_mass':{\ '_onZ_0b': {'title':'m_{ll} (GeV)', 'name':'Mll_onZ_b==0b', "legend":"(onZ,0 b-tag)",'binning': mllbinning, 'histo':{}}, '_offZ_0b': {'title':'m_{ll} (GeV)', 'name':'Mll_offZ_b==0b', "legend":"(offZ,0 b-tag)", 'binning': mllbinning, 'histo':{}}, '_onZ_1mb': {'title':'m_{ll} (GeV)', 'name':'Mll_onZ_b>=1', "legend":"(onZ,>0 b-tag)", 'binning': mllbinning, 'histo':{}},
# load all the samples # ####################################################### from StopsDilepton.samples.cmgTuplesPostProcessed_PHYS14 import * from StopsDilepton.samples.cmgTuples_SPRING15_WardPrivateProduction import * #backgrounds = [WJetsHTToLNu, TTH, TTW, TTZ, DYWARD, singleTop, TTJets]#, QCD] backgrounds = [DY_15, TTJets_15] signals = [SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop650_mLSP325 ] #, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop850_mLSP100] #signals = [] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds + signals: if s.has_key('totalweight'): s['chain'] = getChain(s, histname="", treeName="tree") else: s['chain'] = getChain(s, histname="") plots = {\ 'ee':{\ 'met': {'title':'E^{miss}_{T} (GeV)', 'name':'MET', 'histo':{}}, 'dPhi_1':{'title':'cos(dPhi(MET,jet_1))', 'name':'CosDphiLeadingJet', 'histo':{}}, 'dPhi_2':{'title':'cos(dPhi(MET,jet_2))', 'name':'CosDphiSubleadingJet', 'histo':{}}, 'minDphi':{'title':'cos(min(dPhi(MET,jet_1|jet_2)))', 'name':'MinDphiJets', 'histo':{}}, 'njets': {'title':'nJets', 'name':'nJets', 'histo':{}}, }, 'mumu':{\ 'met': {'title':'E^{miss}_{T} (GeV)', 'name':'MET', 'histo':{}}, 'dPhi_1':{'title':'cos(dPhi(MET,jet_1))', 'name':'CosDphiLeadingJet', 'histo':{}}, 'dPhi_2':{'title':'cos(dPhi(MET,jet_2))', 'name':'CosDphiSubleadingJet', 'histo':{}},
import ROOT #helpers from StopsDilepton.samples.cmgTuples_Spring15_25ns_postProcessed import * from StopsDilepton.samples.cmgTuples_Data25ns_postProcessed import * from StopsDilepton.tools.helpers import getVarValue, getYieldFromChain, getChain from StopsDilepton.tools.localInfo import plotDir #Define chains for signals and backgrounds c_bkg = getChain([TTLep_25ns, DY_25ns, singleTop_25ns], histname='') signals=[ SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop650_mLSP325, SMS_T2tt_2J_mStop850_mLSP100, ] for s in signals: s['chain'] = getChain(s,histname='') cuts=[ ("lepVeto", "nGoodMuons+nGoodElectrons==2"), ("njet2", "(Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id))>=2"), ("nbtag1", "Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id&&Jet_btagCSV>0.890)>=1"), ("mll20", "dl_mass>20"), ("met80", "met_pt>80"), ("metSig5", "met_pt/sqrt(Sum$(Jet_pt*(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id)))>5"), # ("dPhiJet0-dPhiJet1", "abs(cos(met_phi-Jet_phi[0]))<cos(0.25)&&abs(cos(met_phi-Jet_phi[1]))<cos(0.25)"), ("isOS","isOS==1"), ("SFOF","( (isMuMu==1||isEE==1)&&abs(dl_mass-90.2)>=15 || isEMu==1 )"), ] preselection = "&&".join(c[1] for c in cuts)
"isEMu==1&&nGoodMuons==1&&nGoodElectrons==1", triggerMuEle, getZCut(opts.zMode) ] + preselCuts) dataCut = "&&".join([filterCut]) dataSample = MuonEG_Run2015D QCDSample = QCD_Mu5EMbcToE w = weightMC + '*reweightTopPt' if opts.doTopPtReweighting else weightMC wf = topPtReweighting if opts.doTopPtReweighting else None cutFunc = None lumiScaleFac = dataSample["lumi"] / 1000. backgrounds = [ TTJets, WJetsToLNu, DY_HT_LO, singleTop, QCDSample, TTX, diBoson ] data = getYieldFromChain(getChain(dataSample, histname="", maxN=maxN), cutString="&&".join([cutString, dataCut]), weight='weight') bkg = 0. for s in backgrounds: bkg += getYieldFromChain(getChain(s, histname="", maxN=maxN), cutString, weight=w) scaleFac = data / (bkg * lumiScaleFac) print "After lumiscale %3.3f there is bkg %7.1f and data %7.1f: re-normalizing scaleFac by %3.3f" % ( lumiScaleFac, lumiScaleFac * bkg, data, scaleFac) ratioOps = { 'yLabel': 'Data/MC', 'numIndex': 1, 'denIndex': 0,
presel_mll = 'dl_mass>' + str(mllcut) presel_metsig = 'met_pt/sqrt(Sum$(Jet_pt*(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id)))>' + str( metsignifcut) presel_OS = 'isOS' presel_dPhi = 'cos(met_phi-Jet_phi[0])<cos(' + str( dphicut) + ')&&cos(met_phi-Jet_phi[1])<cos(' + str(dphicut) + ')' preselection = presel_met + '&&' + presel_ngoodlep + '&&' + presel_mll + '&&' + presel_OS + '&&' + presel_metsig + '&&' + presel_dPhi datacut = "(Flag_HBHENoiseFilter&&Flag_goodVertices&&Flag_CSCTightHaloFilter&&Flag_eeBadScFilter&&weight>0)" ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds: s['chain'] = getChain(s, histname="") ####################################################### # Define piecharts you want to make # ####################################################### mt2llcuts = [0., 100., 120., 140.] piechart = {} for cut in mt2llcuts: piechart[str(cut)] = {\ "EE":{\ #"(1,0)" :{}, #"(1,1)" :{}, #"(>=2,0)" :{},
from StopsDilepton.tools.objectSelection import getGoodLeptons, looseMuID, looseEleID, getJets, leptonVars, jetVars from StopsDilepton.tools.mt2Calculator import mt2Calculator mt2Calc = mt2Calculator() from StopsDilepton.tools.user import * reduceStat = 1 lumiScale = 10. #load all the samples from StopsDilepton.samples.cmgTuples_Spring15_mAODv2_25ns_1l_postProcessed import * #ttjets = TTJets_Lep #ttjets['name']="TTLep_1l2l" ttjets = TTJets ttjets['name']="TTJetsNLO" ttjets['chain'] = getChain(ttjets,histname="") #prefix = "mRelIso01" prefix="mAODv2" #others={'name':'ST/VV/TTX', 'chain':getChain([WJetsToLNu,DY,singleTop,TTX,diBoson], histname="")} #samples = [ttjets, others] samples = [ttjets] cuts=[ ("lepVeto", "nGoodMuons+nGoodElectrons==2"), ("njet2", "(Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id))>=2"), ("nbtag1", "Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id&&Jet_btagCSV>0.890)>=1"), ("mll20", "dl_mass>20"), ("met80", "met_pt>80"), ("metSig5", "met_pt/sqrt(Sum$(Jet_pt*(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id)))>5"), ("dPhiJet0-dPhiJet1", "cos(met_phi-Jet_phi[0])<cos(0.25)&&cos(met_phi-Jet_phi[1])<cos(0.25)"),
import ROOT #helpers from StopsDilepton.samples.cmgTuples_Spring15_25ns_postProcessed import * from StopsDilepton.samples.cmgTuples_Data25ns_postProcessed import * from StopsDilepton.tools.helpers import getVarValue, getYieldFromChain, getChain from StopsDilepton.tools.localInfo import plotDir #Helper: returns cut string for given variable and bin def cutString(varName, bin): res=varName+">="+str(bin[0]) if bin[1]>0:res=res+"&&"+varName+"<"+str(bin[1]) return res #Define chains for signals and backgrounds c_bkg = getChain([diBosons_25ns,WJetsToLNu_25ns,singleTop_25ns,QCDMu_25ns,TTX_25ns,DY_25ns,TTLep_25ns], histname='') signals=[ SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop650_mLSP325, SMS_T2tt_2J_mStop850_mLSP100, ] for s in signals: s['chain'] = getChain(s,histname='') cuts=[ ("lepVeto", "nGoodMuons+nGoodElectrons==2"), ("njet2", "(Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id))>=2"), ("nbtag1", "Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id&&Jet_btagCSV>0.890)>=1"), ("mll20", "dl_mass>20"),
def cutflow(sig): ####################################################### # SELECT WHAT YOU WANT TO DO HERE # ####################################################### reduceStat = 100 #recude the statistics, i.e. 10 is ten times less samples to look at ####################################################### # Define cutflow you want to make # ####################################################### mt2llcut = 80. metcut = 40. lumi = 10000. baselineamount = { 'samples': {}, 'SoverB': None, } cutflow = {\ 'metsig':{'baseline': 0., 'cuts': {\ 3:{'samples':{}, 'SoverB': None}, 4:{'samples':{}, 'SoverB': None}, 5:{'samples':{}, 'SoverB': None}, 6:{'samples':{}, 'SoverB': None}, 7:{'samples':{}, 'SoverB': None}, 8:{'samples':{}, 'SoverB': None}, 9:{'samples':{}, 'SoverB': None}, 10:{'samples':{}, 'SoverB': None}, 10:{'samples':{}, 'SoverB': None}, }, 'event': None, }, 'nbjets':{'baseline': 1., 'cuts': {\ 0:{'samples':{}, 'SoverB': None}, 1:{'samples':{}, 'SoverB': None}, 2:{'samples':{}, 'SoverB': None}, 3:{'samples':{}, 'SoverB': None}, 4:{'samples':{}, 'SoverB': None}, 5:{'samples':{}, 'SoverB': None}, }, 'event': None, }, 'njets': {'baseline': 2., 'cuts': {\ 1:{'samples':{}, 'SoverB': None}, 2:{'samples':{}, 'SoverB': None}, 3:{'samples':{}, 'SoverB': None}, 4:{'samples':{}, 'SoverB': None}, 5:{'samples':{}, 'SoverB': None}, 6:{'samples':{}, 'SoverB': None}, 7:{'samples':{}, 'SoverB': None}, }, 'event': None, }, 'ht': {'baseline': 0., 'cuts': {\ 50: {'samples':{}, 'SoverB': None}, 100:{'samples':{}, 'SoverB': None}, 200:{'samples':{}, 'SoverB': None}, 300:{'samples':{}, 'SoverB': None}, 400:{'samples':{}, 'SoverB': None}, 500:{'samples':{}, 'SoverB': None}, }, 'event': None, }, } #preselection: MET>40, njets>=2, n_bjets>=1, n_lep>=2 #For now see here for the Sum$ syntax: https://root.cern.ch/root/html/TTree.html#TTree:Draw@2 preselection = 'met_pt>' + str(metcut) + '&&Sum$(LepGood_pt>20)==2' ####################################################### # load all the samples # ####################################################### backgrounds = [singleTop_50ns, DY_50ns, TTJets_50ns] #signals = [SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop650_mLSP325, SMS_T2tt_2J_mStop850_mLSP100] signal = [sig] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds + signal: s['chain'] = getChain(s, histname="") ####################################################### # Start filling in the histograms # ####################################################### for s in backgrounds + signal: for cuttype in cutflow.keys(): for cut in cutflow[cuttype]['cuts'].keys(): cutflow[cuttype]['cuts'][cut]['samples'][s["name"]] = 0 baselineamount['samples'][s['name']] = 0 chain = s["chain"] #Using Event loop #get EList after preselection print "Looping over %s" % s["name"] eList = getEList(chain, preselection) nEvents = eList.GetN() / reduceStat print "Found %i events in %s after preselection %s, looping over %i" % ( eList.GetN(), s["name"], preselection, nEvents) for ev in range(nEvents): increment = 50 if nEvents > increment and ev % (nEvents / increment) == 0: sys.stdout.write( '\r' + "=" * (ev / (nEvents / increment)) + " " * ((nEvents - ev) / (nEvents / increment)) + "]" + str(round((ev + 1) / (float(nEvents) / 100), 2)) + "%") sys.stdout.flush() sys.stdout.write('\r') chain.GetEntry(eList.GetEntry(ev)) mt2Calc.reset() #event weight (L= 4fb^-1) weight = reduceStat * getVarValue(chain, "weight") weight = weight * (lumi / 4000.) #MET met = getVarValue(chain, "met_pt") metPhi = getVarValue(chain, "met_phi") #jetpt leadingjetpt = getVarValue(chain, "Jet_pt", 0) subleadingjetpt = getVarValue(chain, "Jet_pt", 1) #Leptons allLeptons = getLeptons(chain) muons = filter(looseMuID, allLeptons) electrons = filter(looseEleID, allLeptons) nlep = len(allLeptons) #SF and OF channels leptons = {\ 'mu': {'name': 'mumu', 'file': muons}, 'e': {'name': 'ee', 'file': electrons}, 'emu': {'name': 'emu', 'file': [electrons,muons]}, } for lep in leptons.keys(): twoleptons = False #Same Flavor if lep != 'emu': if len(leptons[lep]['file']) == 2 and leptons[lep]['file'][ 0]['pdgId'] * leptons[lep]['file'][1]['pdgId'] < 0: twoleptons = True l0pt, l0eta, l0phi = leptons[lep]['file'][0][ 'pt'], leptons[lep]['file'][0]['eta'], leptons[ lep]['file'][0]['phi'] l1pt, l1eta, l1phi = leptons[lep]['file'][1][ 'pt'], leptons[lep]['file'][1]['eta'], leptons[ lep]['file'][1]['phi'] leadingleptonpt = l0pt subleadingleptonpt = l1pt mll = sqrt(2. * l0pt * l1pt * (cosh(l0eta - l1eta) - cos(l0phi - l1phi))) zveto = True #Opposite Flavor if lep == 'emu': if len(leptons[lep]['file'][0]) == 1 and len( leptons[lep]['file'] [1]) == 1 and leptons[lep]['file'][0][0][ 'pdgId'] * leptons[lep]['file'][1][0]['pdgId'] < 0: twoleptons = True l0pt, l0eta, l0phi = leptons[lep]['file'][0][0][ 'pt'], leptons[lep]['file'][0][0]['eta'], leptons[ lep]['file'][0][0]['phi'] l1pt, l1eta, l1phi = leptons[lep]['file'][1][0][ 'pt'], leptons[lep]['file'][1][0]['eta'], leptons[ lep]['file'][1][0]['phi'] if l1pt > l0pt: leadingleptonpt = l1pt subleadingleptonpt = l0pt else: leadingleptonpt = l0pt subleadingleptonpt = l1pt mll = sqrt(2. * l0pt * l1pt * (cosh(l0eta - l1eta) - cos(l0phi - l1phi))) zveto = False if (twoleptons and mll > 20 and not zveto) or (twoleptons and mll > 20 and zveto and abs(mll - 91.2) > 15): mt2Calc.setMet(met, metPhi) mt2Calc.setLeptons(l0pt, l0eta, l0phi, l1pt, l1eta, l1phi) mt2ll = mt2Calc.mt2ll() jets = filter( lambda j: j['pt'] > 30 and abs(j['eta']) < 2.4 and j[ 'id'], getJets(chain)) bjetspt = filter(lambda j: j['btagCSV'] > 0.89, jets) nobjets = filter(lambda j: j['btagCSV'] <= 0.89, jets) nmuons = len(muons) nelectrons = len(electrons) ht = sum([j['pt'] for j in jets]) if len(jets) < 1: continue if mt2ll < mt2llcut: continue cutflow['metsig']['event'] = met / sqrt(ht) cutflow['nbjets']['event'] = len(bjetspt) cutflow['njets']['event'] = len(jets) cutflow['ht']['event'] = ht for cuttype in cutflow.keys(): eventisgood = True for cuttype2 in cutflow.keys(): if cuttype2 != cuttype: if cutflow[cuttype2]['event'] < cutflow[ cuttype2]['baseline']: eventisgood = False if eventisgood: for cut in cutflow[cuttype]['cuts']: if cutflow[cuttype]['event'] >= cut: cutflow[cuttype]['cuts'][cut]['samples'][ s['name']] += weight baselineisgood = True for cuttype in cutflow.keys(): if cutflow[cuttype]['event'] < cutflow[cuttype][ 'baseline']: baselineisgood = False if baselineisgood: baselineamount['samples'][s['name']] += weight del eList sigtot = baselineamount['samples'][signal[0]['name']] bkgtot = sum(baselineamount['samples'].values()) - sigtot if bkgtot > 0: baselineamount['SoverB'] = 100 * (sigtot / sqrt(bkgtot)) else: baselineamount['SoverB'] = 0. for cuttype in cutflow.keys(): for cut in cutflow[cuttype]['cuts']: sigtot = cutflow[cuttype]['cuts'][cut]['samples'][signal[0] ['name']] bkgtot = sum( cutflow[cuttype]["cuts"][cut]['samples'].values()) - sigtot if bkgtot > 0: cutflow[cuttype]['cuts'][cut]['SoverB'] = 100 * (sigtot / sqrt(bkgtot)) else: cutflow[cuttype]['cuts'][cut]['SoverB'] = 0. maketable(baselineamount, cutflow, mt2llcut, metcut, signal, lumi)
presel_flavour_EEMu = '(nGoodElectrons+nGoodMuons)>=2&&HLT_2e1mu&&'+looseEleIDString(10)+'==2&&'+looseMuIDString(10)+'==1' luminosity = data[0]["lumi"] datacut = "(Flag_HBHENoiseFilter&&Flag_goodVertices&&Flag_CSCTightHaloFilter&&Flag_eeBadScFilter&&weight>0)" preselection = presel_njet+'&&'+presel_nLooseBjet+'&&'+presel_nMedBjet+'&&'+presel_met+'&&'+presel_metsig+'&&'+presel_dPhi backgrounds = [DY_HT_LO,TTJets_Lep,TTZ,singleTop, diBoson, triBoson, TTXNoZ, WJetsToLNu_HT] #backgrounds = [TTZ,TTH,TTW] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds+data: s['chain'] = getChain(s,histname="") mt2llbinning = "(15,0,300)" mllbinning = "(50,0,150)" metbinning = "(30,0,300)" lepbinning = "(50,0,300)" plots = {\ # '2l':{\ # 'dl_mt2ll':{'title':'MT2ll (GeV)', 'name':'MT2ll_2l', 'binning': mt2llbinning, 'histo':{'totalbkg':0.,}}, # 'dl_mass':{'title':'M_{ll} (GeV)', 'name':'Mll_2l', 'binning': mllbinning, 'histo':{'totalbkg':0.,}}, # 'met_pt':{'title':'MET (GeV)', 'name':'MET_2l', 'binning': metbinning, 'histo':{'totalbkg':0.,}}, # 'LepGood_pt[0]':{'title':'l1 p_{T} (GeV)', 'name':'l1pt_2l', 'binning': lepbinning, 'histo':{'totalbkg':0.,}}, # 'LepGood_pt[1]':{'title':'l2 p_{T} (GeV)', 'name':'l2pt_2l', 'binning': lepbinning, 'histo':{'totalbkg':0.,}}, # 'LepGood_pt[2]':{'title':'l3 p_{T} (GeV)', 'name':'l3pt_2l', 'binning': lepbinning, 'histo':{'totalbkg':0.,}}, # },
####################################################### # load all the samples # ####################################################### from StopsDilepton.samples.cmgTuplesPostProcessed_PHYS14 import * from StopsDilepton.samples.cmgTuples_SPRING15_WardPrivateProduction import * #backgrounds = [WJetsHTToLNu, TTH, TTW, TTZ, DYWARD, singleTop, TTJets]#, QCD] backgrounds = [DY_15,TTJets_15] signals = [SMS_T2tt_2J_mStop425_mLSP325,SMS_T2tt_2J_mStop650_mLSP325]#, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop850_mLSP100] #signals = [] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds+signals: if s.has_key('totalweight'): s['chain'] = getChain(s,histname="",treeName="tree") else: s['chain'] = getChain(s,histname="") plots = {\ 'ee':{\ 'met': {'title':'E^{miss}_{T} (GeV)', 'name':'MET', 'histo':{}}, 'dPhi_1':{'title':'cos(dPhi(MET,jet_1))', 'name':'CosDphiLeadingJet', 'histo':{}}, 'dPhi_2':{'title':'cos(dPhi(MET,jet_2))', 'name':'CosDphiSubleadingJet', 'histo':{}}, 'minDphi':{'title':'cos(min(dPhi(MET,jet_1|jet_2)))', 'name':'MinDphiJets', 'histo':{}}, 'njets': {'title':'nJets', 'name':'nJets', 'histo':{}}, }, 'mumu':{\ 'met': {'title':'E^{miss}_{T} (GeV)', 'name':'MET', 'histo':{}}, 'dPhi_1':{'title':'cos(dPhi(MET,jet_1))', 'name':'CosDphiLeadingJet', 'histo':{}}, 'dPhi_2':{'title':'cos(dPhi(MET,jet_2))', 'name':'CosDphiSubleadingJet', 'histo':{}}, 'minDphi':{'title':'cos(min(dPhi(MET,jet_1|jet_2)))', 'name':'MinDphiJets', 'histo':{}},
from StopsDilepton.tools.mt2Calculator import mt2Calculator mt2Calc = mt2Calculator() from StopsDilepton.tools.localInfo import * reduceStat = 1 lumiScale = 10. lepPdgs = [11,13,15] muPdgs = [12,14,16] #load all the samples from StopsDilepton.samples.cmgTuples_Spring15_mAODv2_25ns_1l_postProcessed import * small=False maxN=3 if small else -1 ttjets = TTJets_Lep ttjets['name']="TTLep_1l2l" ttjets['chain'] = getChain(ttjets,histname="", maxN=maxN) prefix="mAODv2" #others={'name':'ST/VV/TTX', 'chain':getChain([WJetsToLNu,DY,singleTop,TTX,diBoson], histname="")} samples=[TTJets_Lep] cuts=[ ("lepVeto", "nGoodMuons+nGoodElectrons==2"), ("njet2", "(Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id))>=2"), ("nbtag1", "Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id&&Jet_btagCSV>0.890)>=1"), ("mll20", "dl_mass>20"), ("met80", "met_pt>80"), ("metSig5", "met_pt/sqrt(Sum$(Jet_pt*(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id)))>5"), ("dPhiJet0-dPhiJet1", "cos(met_phi-Jet_phi[0])<cos(0.25)&&cos(met_phi-Jet_phi[1])<cos(0.25)"), ("isOS","isOS==1"), ("SFZVeto","( (isMuMu==1||isEE==1)&&abs(dl_mass-90.2)>=15 || isEMu==1 )"),
from StopsDilepton.tools.objectSelection import getGoodLeptons, looseMuID, looseEleID, getJets, leptonVars, jetVars from StopsDilepton.tools.mt2Calculator import mt2Calculator mt2Calc = mt2Calculator() from StopsDilepton.tools.localInfo import * reduceStat = 1 lumiScale = 10. #load all the samples from StopsDilepton.samples.cmgTuples_Spring15_mAODv2_25ns_1l_postProcessed import * #ttjets = TTJets_Lep #ttjets['name']="TTLep_1l2l" ttjets = TTJets ttjets['name'] = "TTJetsNLO" ttjets['chain'] = getChain(ttjets, histname="") #prefix = "mRelIso01" prefix = "mAODv2" #others={'name':'ST/VV/TTX', 'chain':getChain([WJetsToLNu,DY,singleTop,TTX,diBoson], histname="")} #samples = [ttjets, others] samples = [ttjets] cuts = [ ("lepVeto", "nGoodMuons+nGoodElectrons==2"), ("njet2", "(Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id))>=2"), ("nbtag1", "Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id&&Jet_btagCSV>0.890)>=1"), ("mll20", "dl_mass>20"), ("met80", "met_pt>80"), ("metSig5",
####################################################### # load all the samples # ####################################################### from StopsDilepton.plots.cmgTuplesPostProcessed_PHYS14 import * #backgrounds = [WJetsHTToLNu, TTH, TTW, TTZ, DYWARD, singleTop, TTJets]#, QCD] backgrounds = [TTH] #signals = [SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop650_mLSP325, SMS_T2tt_2J_mStop850_mLSP100] signals = [] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds+signals: if s==DYWARD: s['chain'] = getChain(s,histname="",treeName="tree") else: s['chain'] = getChain(s,histname="") ####################################################### # Define piecharts you want to make # ####################################################### piechart = {\ "OF":{\ "njets_0_bjets_0" :{}, "njets_1_bjets_0" :{}, "njets_1_bjets_1" :{}, "njets_2andmore_bjets_0" :{}, "njets_2andmore_bjets_1andmore" :{}, }, "SF":{\
data = [DoubleEG_Run2015D] luminosity = data[0]["lumi"] datacut = "(Flag_HBHENoiseFilter&&Flag_goodVertices&&Flag_CSCTightHaloFilter&&Flag_eeBadScFilter&&weight>0)" preselection = presel_njet + '&&' + presel_OS + '&&' + presel_mll + '&&' + presel_dPhi + '&&' + presel_met + '&&' + presel_metsig + '&&' + presel_flavour backgrounds = [DY_HT_LO, TTJets, WJetsToLNu, singleTop, QCD_Mu5, TTX, diBoson] #backgrounds = [DY_HT_LO,TTJets] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds + data: s['chain'] = getChain(s, histname="") mt2llbinning = "(15,0,300)" mllbinning = "(50,0,150)" plots = {\ 'dl_mt2ll':{\ '_onZ_0b': {'title':'MT2ll (GeV)', 'name':'MT2ll_onZ_b==0b',"legend":"(onZ,0 b-tag)", 'binning': mt2llbinning, 'histo':{}}, '_offZ_0b': {'title':'MT2ll (GeV)', 'name':'MT2ll_offZ_b==0b',"legend":"(offZ,0 b-tag)",'binning': mt2llbinning, 'histo':{}}, '_onZ_1mb': {'title':'MT2ll (GeV)', 'name':'MT2ll_onZ_b>=1', "legend":"(onZ,>0 b-tag)", 'binning': mt2llbinning, 'histo':{}}, '_offZ_1mb': {'title':'MT2ll (GeV)', 'name':'MT2ll_offZ_b>=1', "legend":"(offZ,>0 b-tag)", 'binning': mt2llbinning, 'histo':{}}, }, 'dl_mass':{\ '_onZ_0b': {'title':'m_{ll} (GeV)', 'name':'Mll_onZ_b==0b', "legend":"(onZ,0 b-tag)",'binning': mllbinning, 'histo':{}}, '_offZ_0b': {'title':'m_{ll} (GeV)', 'name':'Mll_offZ_b==0b', "legend":"(offZ,0 b-tag)", 'binning': mllbinning, 'histo':{}}, '_onZ_1mb': {'title':'m_{ll} (GeV)', 'name':'Mll_onZ_b>=1', "legend":"(onZ,>0 b-tag)", 'binning': mllbinning, 'histo':{}},
from StopsDilepton.samples.cmgTuples_Data25ns_postProcessed import * from StopsDilepton.tools.helpers import getVarValue, getYieldFromChain, getChain from StopsDilepton.tools.localInfo import plotDir #Helper: returns cut string for given variable and bin def cutString(varName, bin): res = varName + ">=" + str(bin[0]) if bin[1] > 0: res = res + "&&" + varName + "<" + str(bin[1]) return res #Define chains for signals and backgrounds c_bkg = getChain([ diBosons_25ns, WJetsToLNu_25ns, singleTop_25ns, QCDMu_25ns, TTX_25ns, DY_25ns, TTLep_25ns ], histname='') signals = [ SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop650_mLSP325, SMS_T2tt_2J_mStop850_mLSP100, ] for s in signals: s['chain'] = getChain(s, histname='') cuts = [ ("lepVeto", "nGoodMuons+nGoodElectrons==2"), ("njet2", "(Sum$(Jet_pt>30&&abs(Jet_eta)<2.4&&Jet_id))>=2"),
####################################################### from StopsDilepton.samples.cmgTuples_Spring15_25ns_postProcessed import * backgrounds = [diBosons_25ns,WJetsToLNu_25ns,TTX_25ns,singleTop_25ns, QCDMu_25ns, DY_25ns, TTLep_25ns] #backgrounds = [] #signals = [SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop650_mLSP325, SMS_T2tt_2J_mStop850_mLSP100] signals = [SMS_T2tt_2J_mStop425_mLSP325] #data = [DoubleEG_25ns,DoubleMuon_25ns,MuonEG_25ns] #data = [] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds+signals: s['chain'] = getChain(s,histname="") # A TChain is basically a TTree that contains a lot of data plots = {\ 'met': {'name':'MET', 'xtitle': "E_{T}^{miss}", 'unit': "GeV" ,'binning': [25, 0, 800] , 'variable': 'met_pt' , 'histo':{}} } ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds+signals: for plot in plots: plots[plot]['histo'][s['name']] = ROOT.TH1F(plot + "_" + s["name"], plot + "_" + s["name"], *(plots[plot]['binning']))
import ROOT ROOT.gROOT.LoadMacro("$CMSSW_BASE/src/StopsDilepton/tools/scripts/tdrstyle.C") ROOT.setTDRStyle() from StopsDilepton.tools.helpers import getChain, getObjDict, getEList, getVarValue, getPlotFromChain from StopsDilepton.samples.cmgTuples_Spring15_mAODv2_25ns_0l_postProcessed import GJets from samples import * from formulas import * #mg_delphes_atlas.Draw(hep_sumPt+":"+delphes_sumPtFormula(),"","COLZ") gJets = getChain(GJets, histname="") stuff=[] for name, varP, cutP, varC,cutC, binning in [ # ('MET_Inclusive', "MissingET.MET",'(1)', 'met_pt', '(1)', [45,0,450]), # ('MET_GenPhoton80', "MissingET.MET",'(1)', 'met_pt', '(Sum$(genPartAll_pt>80&&genPartAll_pdgId==22)>=1)', [45,0,450]), # ('MET_GenPhoton145', "MissingET.MET",'(1)', 'met_pt', '(Sum$(genPartAll_pt>145&&genPartAll_pdgId==22)>=1)', [45,0,450]), # ('ptGenGamma_compMET', "Max$(Particle.PT*(Particle.Status==1&&abs(Particle.PID)==22))",'Max$(Particle.PT*(Particle.Status==1&&Particle.PID==22))>50', 'Max$(genPartAll_pt*( abs(genPartAll_pdgId)==22&&genPartAll_status==1 ))', 'Max$(genPartAll_pt*(genPartAll_pdgId==22&&genPartAll_status==1))>50', [50,0,300]), # ('ptGenGamma', "Max$(Particle.PT*(Particle.Status==1&&abs(Particle.PID)==22))","(1)", 'Max$(genPartAll_pt*( abs(genPartAll_pdgId)==22&&genPartAll_status==1 ))',"(1)", [50,0,300]), # ('HT', "Sum$(JetMA5.PT*(JetMA5.PT>30))",'Max$(Particle.PT*(Particle.Status==1&&Particle.PID==22))>50', 'Sum$(Jet_pt*(Jet_pt>30))', 'Max$(genPartAll_pt*(genPartAll_pdgId==22&&genPartAll_status==1))>50', [50,0,1000]), # ('MET', "Max$(MissingET.MET)",'Max$(Particle.PT*(Particle.Status==1&&Particle.PID==22))>50', 'met_pt', 'Max$(genPartAll_pt*(genPartAll_pdgId==22&&genPartAll_status==1))>50', [100,0,500]), ('Jet0Pt', "Max$(JetMA5.PT*(JetMA5.PT>30))",'Max$(Particle.PT*(Particle.Status==1&&Particle.PID==22))>50', 'Max$(Jet_pt*(Jet_pt>30))', 'Max$(genPartAll_pt*(genPartAll_pdgId==22&&genPartAll_status==1))>50', [50,0,1000]), # ('SumPt', "Sum$(Particle.PT*(Particle.Status==1))", 'met_sumEt', [100,0,3000]), ]: h_c =getPlotFromChain(gJets, varC, binning, cutC,weight="weight") h_mg=getPlotFromChain(mg_delphes_cms_13TeV, varP, binning,cutP,weight="(1)") # h_p8=getPlotFromChain(p8_delphes_cms, varP, binning,cutP,weight="(1)")
####################################################### # load all the samples # ####################################################### #from StopsDilepton.samples.cmgTuplesPostProcessed_PHYS14 import * from StopsDilepton.samples.cmgTuples_Spring15_50ns_postProcessed import * backgrounds = [diBosons_50ns,WJetsToLNu_50ns,singleTop_50ns,QCDMu_50ns,DYHT_50ns,TTJets_50ns] #backgrounds = [singleTop_50ns,DY_50ns,TTJets_50ns] signals = [SMS_T2tt_2J_mStop425_mLSP325, SMS_T2tt_2J_mStop500_mLSP325, SMS_T2tt_2J_mStop650_mLSP325, SMS_T2tt_2J_mStop850_mLSP100] data = [DoubleEG_50ns,DoubleMuon_50ns,MuonEG_50ns] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds+signals+data: s['chain'] = getChain(s,histname="") ####################################################### # define binning of 1D histograms # ####################################################### njetsbinning = [15,0,15] nbjetsbinning = [10,0,10] ####################################################### # make plot in each sample: # ####################################################### plots = {\ 'mumu':{\ 'nbjets': {'title': 'nbjets', 'name':'nbjets', 'binning': nbjetsbinning, 'histo':{}}, 'njets': {'title': 'njets', 'name':'njets', 'binning': njetsbinning, 'histo':{}}, },
datacut = "(Flag_HBHENoiseFilter&&Flag_goodVertices&&Flag_CSCTightHaloFilter&&Flag_eeBadScFilter&&weight>0)" preselection = presel_njet + '&&' + presel_nLooseBjet + '&&' + presel_nMedBjet + '&&' + presel_met + '&&' + presel_metsig + '&&' + presel_dPhi backgrounds = [ DY_HT_LO, TTJets_Lep, TTZ, singleTop, diBoson, triBoson, TTXNoZ, WJetsToLNu_HT ] #backgrounds = [TTZ,TTH,TTW] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds + data: s['chain'] = getChain(s, histname="") mt2llbinning = "(15,0,300)" mllbinning = "(50,0,150)" metbinning = "(30,0,300)" lepbinning = "(50,0,300)" plots = {\ # '2l':{\ # 'dl_mt2ll':{'title':'MT2ll (GeV)', 'name':'MT2ll_2l', 'binning': mt2llbinning, 'histo':{'totalbkg':0.,}}, # 'dl_mass':{'title':'M_{ll} (GeV)', 'name':'Mll_2l', 'binning': mllbinning, 'histo':{'totalbkg':0.,}}, # 'met_pt':{'title':'MET (GeV)', 'name':'MET_2l', 'binning': metbinning, 'histo':{'totalbkg':0.,}}, # 'LepGood_pt[0]':{'title':'l1 p_{T} (GeV)', 'name':'l1pt_2l', 'binning': lepbinning, 'histo':{'totalbkg':0.,}}, # 'LepGood_pt[1]':{'title':'l2 p_{T} (GeV)', 'name':'l2pt_2l', 'binning': lepbinning, 'histo':{'totalbkg':0.,}}, # 'LepGood_pt[2]':{'title':'l3 p_{T} (GeV)', 'name':'l3pt_2l', 'binning': lepbinning, 'histo':{'totalbkg':0.,}}, # },
datacut = "(Flag_HBHENoiseFilter&&Flag_goodVertices&&Flag_CSCTightHaloFilter&&Flag_eeBadScFilter&&weight>0)" preselection = presel_njet + '&&' + presel_nbjet + '&&' + presel_nlep + '&&' + presel_triggers backgrounds = [ DY_HT_LO, TTJets, WJetsToLNu, singleTop, QCD_Mu5, TTZ, TTW, TZQ, TTH, diBoson ] #backgrounds = [TTZ,TTJets] ####################################################### # get the TChains for each sample # ####################################################### for s in backgrounds + data: s['chain'] = getChain(s, histname="") mt2llbinning = [15, 0, 300] mllbinning = [50, 0, 150] metbinning = [30, 0, 300] zptbinning = [50, 0, 300] lepptbinning = [40, 0, 400] njetsbinning = [10, 0, 10] nbjetsbinning = [10, 0, 10] ListOfDataEvents = [] plots = {\ '2l':{\ #'dl_mt2ll_onZ':{'title':'MT2ll (GeV)', 'name':'MT2ll_2l_onZ', 'binning': mt2llbinning, 'histo':{'totalbkg':0.,}}, #offZ mt2ll doesn't make sense
def loadChain(s, verbose=False): '''Use this function to add the chain to the sample dictionary. Will not load again if has already loaded''' if not s.has_key('chain'): if verbose:print "Loading chain for sample %s. (Only the first time)."%s['name'] s['chain']=getChain(s)