Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
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., 80., 100., 120., 140., 200.]
piechart = {}
for cut in mt2llcuts:
    piechart[str(cut)] = {\
        "EE":{\
            "(0,0)" :{},
            "(1,0)" :{},
            "(1,1)" :{},
            "(>=2,0)" :{},
            "(>=2,>=1)" :{},
        },
Esempio n. 4
0
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}
Esempio n. 7
0
                "(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')
            )
Esempio n. 8
0
    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')
)
Esempio n. 9
0
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)" :{},
Esempio n. 10
0
  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':{}},
Esempio n. 11
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':{}},
Esempio n. 12
0
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)
Esempio n. 13
0
                "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,
Esempio n. 14
0
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)" :{},
Esempio n. 15
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)" :{},


Esempio n. 16
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)"),
Esempio n. 17
0
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"),
Esempio n. 18
0
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)
Esempio n. 19
0
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.,}},
    #   },
Esempio n. 20
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':{}},
Esempio n. 21
0
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 )"), 
Esempio n. 22
0
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",
Esempio n. 23
0
#######################################################
#                 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":{\
Esempio n. 24
0
    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':{}},
Esempio n. 25
0
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"),
Esempio n. 26
0
#######################################################
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']))

Esempio n. 27
0
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)")
Esempio n. 28
0
#######################################################
#                 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':{}},
  },
Esempio n. 29
0
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.,}},
    #   },
Esempio n. 30
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
Esempio n. 31
0
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)