예제 #1
0
    numOfEvents = h.Integral(-1, 99999999) + 0.000000000001
    print "Number of event:", numOfEvents

    t = f.Get("tEvent")
    t.GetEntry(0)
    fileBasename = None
    cs = 1
    if bg:
        fileBasename = os.path.basename(fileName).split(".root")[
            0]  #.split("RunIISummer16MiniAODv3.")[1].split("_TuneCUETP8M1")[0]
        cs = utils.dyCrossSections.get(fileBasename)
    else:
        fileBasename = (
            os.path.basename(fileName).split("Chi20Chipm")[0]).replace(
                "p", ".")
        cs = utils.getCrossSection(fileBasename)
    print "Getting cross section for ", fileBasename
    print "CrossSection:", cs
    var_CrossSection = np.zeros(1, dtype=float)
    var_CrossSection[0] = cs
    nentries = t.GetEntries()
    if t.GetBranchStatus("CrossSection"):
        branch = t.GetBranch("CrossSection")
        branch.Reset()
        branch.SetAddress(var_CrossSection)
        for ientry in range(nentries):
            branch.Fill()
        t.Write("tEvent", TObject.kOverwrite)
        print "Done"
        f.Close()
        continue
예제 #2
0
def main():
    chain = TChain('TreeMaker2/PreSelection')
    chain.Add(input_file)
    c = chain.CloneTree()
    chain = None
    print "Creating " + output_file
    fnew = TFile(output_file, 'recreate')

    hHt = TH1F('hHt', 'hHt', 100, 0, 3000)
    hHtWeighted = TH1F('hHtWeighted', 'hHtWeighted', 100, 0, 3000)
    hHtAfterMadHt = TH1F('hHtAfterMadHt', 'hHtAfterMadHt', 100, 0, 3000)
    hHt.Sumw2()

    var_Met = np.zeros(1, dtype=float)
    var_METPhi = np.zeros(1, dtype=float)
    var_CrossSection = np.zeros(1, dtype=float)
    var_NJets = np.zeros(1, dtype=int)
    var_BTags = np.zeros(1, dtype=int)
    var_Ht = np.zeros(1, dtype=float)
    var_Mht = np.zeros(1, dtype=float)
    var_MetDHt = np.zeros(1, dtype=float)
    #var_MetDHt2 = np.zeros(1,dtype=float)
    var_Mt2 = np.zeros(1, dtype=float)
    var_Electrons = ROOT.std.vector(TLorentzVector)()
    var_Electrons_charge = ROOT.std.vector(int)()
    var_Muons = ROOT.std.vector(TLorentzVector)()
    var_Muons_charge = ROOT.std.vector(int)()
    var_NL = np.zeros(1, dtype=int)
    var_invMass = np.zeros(1, dtype=float)

    var_Jets = ROOT.std.vector(TLorentzVector)()

    var_MinDeltaPhiMetJets = np.zeros(1, dtype=float)
    var_MinDeltaPhiMhtJets = np.zeros(1, dtype=float)

    #### TRACKS ####

    tEvent = TTree('tEvent', 'tEvent')
    tEvent.Branch('Met', var_Met, 'Met/D')
    tEvent.Branch('METPhi', var_METPhi, 'METPhi/D')
    tEvent.Branch('CrossSection', var_CrossSection, 'CrossSection/D')
    tEvent.Branch('NJets', var_NJets, 'NJets/I')
    tEvent.Branch('BTags', var_BTags, 'BTags/I')
    tEvent.Branch('NL', var_NL, 'NL/I')
    tEvent.Branch('Ht', var_Ht, 'Ht/D')
    tEvent.Branch('Mht', var_Mht, 'Mht/D')
    tEvent.Branch('MetDHt', var_MetDHt, 'MetDHt/D')
    #tEvent.Branch('MetDHt2', var_MetDHt2,'MetDHt2/D')
    tEvent.Branch('Mt2', var_Mt2, 'Mt2/D')
    tEvent.Branch('invMass', var_invMass, 'invMass/D')

    tEvent.Branch('Electrons', 'std::vector<TLorentzVector>', var_Electrons)
    tEvent.Branch('Electrons_charge', 'std::vector<int>', var_Electrons_charge)
    tEvent.Branch('Muons', 'std::vector<TLorentzVector>', var_Muons)
    tEvent.Branch('Muons_charge', 'std::vector<int>', var_Muons_charge)

    tEvent.Branch('Jets', 'std::vector<TLorentzVector>', var_Jets)

    tEvent.Branch('MinDeltaPhiMetJets', var_MinDeltaPhiMetJets,
                  'MinDeltaPhiMetJets/D')
    tEvent.Branch('MinDeltaPhiMhtJets', var_MinDeltaPhiMhtJets,
                  'MinDeltaPhiMhtJets/D')

    nentries = c.GetEntries()
    print 'Analysing', nentries, "entries"

    count = 0
    afterPreselection = 0
    afterMET = 0
    afterBTAGS = 0
    afterNj = 0
    nLMap = {}

    crossSection = 1
    if signal:
        filename = (
            os.path.basename(input_file).split("Chi20Chipm")[0]).replace(
                "p", ".")
        crossSection = utils.getCrossSection(filename)
        if crossSection is None:
            if utils.crossSections.get(filename) is not None:
                crossSection = utils.crossSections.get(filename)
            else:
                crossSection = 1.21547
    print "Starting Loop"
    for ientry in range(nentries):
        if ientry % 1000 == 0:
            print "Processing " + str(ientry)
        c.GetEntry(ientry)

        ### MADHT ###
        rightProcess = True

        if signal:
            rightProcess = analysis_ntuples.isX1X2X1Process(c)
        elif bg:
            crossSection = c.CrossSection
            if (madHTgt is not None
                    and c.madHT < madHTgt) or (madHTlt is not None
                                               and c.madHT > madHTlt):
                rightProcess = False
        elif data:
            runnum = c.RunNum
            lumisec = c.LumiBlockNum
            if runnum not in runs:
                runs[runnum] = []
            if lumisec not in runs[runnum]:
                runs[runnum].append(lumisec)

        hHt.Fill(c.HT)
        #print "crossSection=" + str(crossSection)
        hHtWeighted.Fill(c.HT, crossSection)

        if not rightProcess:
            continue
        count += 1
        if not data:
            hHtAfterMadHt.Fill(c.madHT)

        nj, btags, ljet = analysis_ntuples.numberOfJets25Pt2_4Eta_Loose(c)
        nL = c.Electrons.size() + c.Muons.size()

        var_NL[0] = nL

        #### PRECUTS ###
        #if not signal:
        #    if not analysis_ntuples.passed2016BTrigger(c, data): continue

        partSize = c.GenParticles.size()
        genLeps = []
        for ipart in range(partSize):
            if c.GenParticles_Status[ipart] == 1 and (
                    abs(c.GenParticles_PdgId[ipart]) == 11
                    or abs(c.GenParticles_PdgId[ipart]) == 13):
                genLeps.append(ipart)

        if len(genLeps) != 2 or abs(c.GenParticles_PdgId[genLeps[0]]) != abs(
                c.GenParticles_PdgId[genLeps[1]]) or c.GenParticles_PdgId[
                    genLeps[0]] * c.GenParticles_PdgId[genLeps[1]] > 0:
            #  print "*********"
            #             print "No!!! size=" + str(len(genLeps))
            #             for i in genLeps:
            #                 print c.GenParticles_ParentId[i]
            continue
        if c.GenParticles_ParentIdx[genLeps[0]] == c.GenParticles_ParentIdx[
                genLeps[1]]:
            print "HERE! ", c.GenParticles_ParentId[genLeps[0]]
        if c.GenParticles_ParentIdx[genLeps[0]] != c.GenParticles_ParentIdx[
                genLeps[1]] or (c.GenParticles_ParentId[genLeps[0]] != 22
                                and c.GenParticles_ParentId[genLeps[0]] != 23):
            continue

        #print "Yes! ", c.GenParticles_ParentId[genLeps[0]]
        #else:
        #    print "YES!!"

        #if nL != 2 or (c.Electrons.size() != 2 and c.Muons.size() != 2):
        #    continue

        l1 = None
        l2 = None

        #         if c.Electrons.size() == 2:
        #             if c.Electrons_charge[0] * c.Electrons_charge[1] > 0:
        #                 continue
        #             l1 = c.Electrons[0]
        #             l2 = c.Electrons[1]
        #         else:
        #             if c.Muons_charge[0] * c.Muons_charge[1] > 0:
        #                 continue
        #             l1 = c.Muons[0]
        #             l2 = c.Muons[1]

        #if l1.Pt() < 30 or l2.Pt() < 30:
        #   continue
        l1 = c.GenParticles[genLeps[0]]
        l2 = c.GenParticles[genLeps[1]]

        var_invMass[0] = (l1 + l2).M()

        #if var_invMass[0] < (91.19 - 10.0) or var_invMass[0] > (91.19 + 10.0):
        if var_invMass[0] > (91.19 + 10.0):
            continue

        afterPreselection += 1

        var_Met[0] = c.MET
        var_METPhi[0] = c.METPhi
        var_Mht[0] = c.MHT
        var_Ht[0] = c.HT
        var_Mt2[0] = c.MT2
        var_CrossSection[0] = crossSection
        var_NJets[0] = nj
        var_BTags[0] = btags

        var_Electrons = c.Electrons
        var_Electrons_charge = c.Electrons_charge
        var_Muons = c.Muons
        var_Muons_charge = c.Muons_charge
        var_Jets = c.Jets

        tEvent.SetBranchAddress('Electrons', var_Electrons)
        tEvent.SetBranchAddress('Electrons_charge', var_Electrons_charge)
        tEvent.SetBranchAddress('Muons', var_Muons)
        tEvent.SetBranchAddress('Muons_charge', var_Muons_charge)
        tEvent.SetBranchAddress('Jets', var_Jets)

        metDHt = 9999999
        if c.HT != 0:
            metDHt = c.MET / c.HT

        var_MetDHt[0] = metDHt

        tEvent.Fill()

    fnew.cd()
    tEvent.Write()
    print 'just created', fnew.GetName()
    print "Total: " + str(nentries)
    print "After Preselection: " + str(afterPreselection)
    hHt.Write()
    print "*"
    hHtWeighted.Write()
    print "**"
    hHtAfterMadHt.Write()
    print "***"
    fnew.Close()
    print "****"
예제 #3
0
def main():
    
    import os
    from lib import utils
    
    chain = TChain('TreeMaker2/PreSelection')
    print "Opening", input_file
    chain.Add(input_file)
    c = chain.CloneTree()
    chain = None
    print "Creating " + output_file
    fnew = TFile(output_file,'recreate')
    print "Created."

    hHt = TH1F('hHt','hHt',100,0,3000)
    hHtWeighted = TH1F('hHtWeighted','hHtWeighted',100,0,3000)
    hHtAfterMadHt = TH1F('hHtAfterMadHt','hHtAfterMadHt',100,0,3000)
    hHt.Sumw2()
    
    lumiSecs = LumiSectMap()
    
    var_RunNum = np.zeros(1,dtype=int)
    var_LumiBlockNum = np.zeros(1,dtype=int)
    var_EvtNum = np.zeros(1,dtype=long)
    
    var_Met = np.zeros(1,dtype=float)
    var_METPhi = np.zeros(1,dtype=float)
    var_CrossSection = np.zeros(1,dtype=float)
    var_NJets = np.zeros(1,dtype=int)
    var_BTags = np.zeros(1,dtype=int)
    var_Ht = np.zeros(1,dtype=float)
    var_madHT = np.zeros(1,dtype=float)
    var_Mht = np.zeros(1,dtype=float)
    var_MetDHt = np.zeros(1,dtype=float)
    #var_MetDHt2 = np.zeros(1,dtype=float)
    var_Mt2 = np.zeros(1,dtype=float)
    var_Electrons = ROOT.std.vector(TLorentzVector)()
    var_Electrons_charge = ROOT.std.vector(int)()
    var_Electrons_mediumID = ROOT.std.vector(bool)()
    var_Electrons_passIso = ROOT.std.vector(bool)()
    var_Electrons_tightID = ROOT.std.vector(bool)()
    var_Electrons_EnergyCorr = ROOT.std.vector(double)()
    var_Electrons_MiniIso = ROOT.std.vector(double)()
    var_Electrons_MT2Activity = ROOT.std.vector(double)()
    var_Electrons_MTW = ROOT.std.vector(double)()
    var_Electrons_TrkEnergyCorr = ROOT.std.vector(double)()
    
    var_Muons = ROOT.std.vector(TLorentzVector)()
    var_Muons_charge = ROOT.std.vector(int)()
    var_Muons_mediumID = ROOT.std.vector(bool)()
    var_Muons_passIso = ROOT.std.vector(bool)()
    var_Muons_tightID = ROOT.std.vector(bool)()
    var_Muons_MiniIso = ROOT.std.vector(double)()
    var_Muons_MT2Activity = ROOT.std.vector(double)()
    var_Muons_MTW = ROOT.std.vector(double)()
    
    var_GenParticles = ROOT.std.vector(TLorentzVector)()
    var_GenParticles_ParentId = ROOT.std.vector(int)()
    var_GenParticles_ParentIdx = ROOT.std.vector(int)()
    var_GenParticles_PdgId = ROOT.std.vector(int)()
    var_GenParticles_Status = ROOT.std.vector(int)()
    var_LeadingJetPt = np.zeros(1,dtype=float)
    var_NL = np.zeros(1,dtype=int)
    var_NLGen = np.zeros(1,dtype=int)
    var_NLGenZ = np.zeros(1,dtype=int)
    var_puWeight = np.zeros(1,dtype=float)

    var_Jets = ROOT.std.vector(TLorentzVector)()
    var_Jets_bDiscriminatorCSV = ROOT.std.vector(double)()

    var_LeadingJetPartonFlavor = np.zeros(1,dtype=int)
    var_LeadingJetQgLikelihood = np.zeros(1,dtype=float)
    var_MinDeltaPhiMetJets = np.zeros(1,dtype=float)
    var_MinDeltaPhiMhtJets = np.zeros(1,dtype=float)
    
    var_MinCsv30 = np.zeros(1,dtype=float)
    var_MinCsv25 = np.zeros(1,dtype=float)
    var_MaxCsv30 = np.zeros(1,dtype=float)
    var_MaxCsv25 = np.zeros(1,dtype=float)
    #### TRACKS ####

    var_tracks          = ROOT.std.vector(TLorentzVector)()
    var_tracks_charge   = ROOT.std.vector(int)()
    var_tracks_chi2perNdof = ROOT.std.vector(double)()
    var_tracks_dxyVtx   = ROOT.std.vector(double)()
    var_tracks_dzVtx    = ROOT.std.vector(double)()
    var_tracks_trackJetIso = ROOT.std.vector(double)()
    #var_tracks_trackLeptonIso = ROOT.std.vector(double)()
    var_tracks_trkMiniRelIso = ROOT.std.vector(double)()
    var_tracks_trkRelIso = ROOT.std.vector(double)()
    var_tracks_trackQualityHighPurity = ROOT.std.vector(bool)()
    
    var_leptons         = ROOT.std.vector(TLorentzVector)()
    var_leptons_charge  = ROOT.std.vector(int)()
    var_leptonFlavour   = ROOT.std.string()
    
    var_LeadingJet = TLorentzVector()


    tEvent = TTree('tEvent','tEvent')
    
    tEvent.Branch('RunNum', var_RunNum,'RunNum/I')
    tEvent.Branch('LumiBlockNum', var_LumiBlockNum,'LumiBlockNum/I')
    tEvent.Branch('EvtNum', var_EvtNum,'EvtNum/L')
    
    tEvent.Branch('Met', var_Met,'Met/D')
    tEvent.Branch('METPhi', var_METPhi,'METPhi/D')
    tEvent.Branch('CrossSection', var_CrossSection,'CrossSection/D')
    tEvent.Branch('NJets', var_NJets,'NJets/I')
    tEvent.Branch('BTags', var_BTags,'BTags/I')
    tEvent.Branch('NL', var_NL,'NL/I')
    tEvent.Branch('NLGen', var_NLGen,'NLGen/I')
    tEvent.Branch('NLGenZ', var_NLGenZ,'NLGenZ/I')
    tEvent.Branch('Ht', var_Ht,'Ht/D')
    tEvent.Branch('madHT', var_madHT,'madHT/D')
    tEvent.Branch('Mht', var_Mht,'Mht/D')
    tEvent.Branch('MetDHt', var_MetDHt,'MetDHt/D')
    #tEvent.Branch('MetDHt2', var_MetDHt2,'MetDHt2/D')
    tEvent.Branch('Mt2', var_Mt2,'Mt2/D')
    tEvent.Branch('puWeight', var_puWeight,'puWeight/D')
    

    tEvent.Branch('Electrons', 'std::vector<TLorentzVector>', var_Electrons)
    tEvent.Branch('Electrons_charge', 'std::vector<int>', var_Electrons_charge)
    
    tEvent.Branch('Electrons_EnergyCorr', 'std::vector<double>', var_Electrons_EnergyCorr)
    tEvent.Branch('Electrons_MiniIso', 'std::vector<double>', var_Electrons_MiniIso)
    tEvent.Branch('Electrons_MT2Activity', 'std::vector<double>', var_Electrons_MT2Activity)
    tEvent.Branch('Electrons_MTW', 'std::vector<double>', var_Electrons_MTW)
    tEvent.Branch('Electrons_TrkEnergyCorr', 'std::vector<double>', var_Electrons_TrkEnergyCorr)
    
    tEvent.Branch('Electrons_mediumID', 'std::vector<bool>', var_Electrons_mediumID)
    tEvent.Branch('Electrons_passIso', 'std::vector<bool>', var_Electrons_passIso)
    tEvent.Branch('Electrons_tightID', 'std::vector<bool>', var_Electrons_tightID)
    
    tEvent.Branch('Muons', 'std::vector<TLorentzVector>', var_Muons)
    tEvent.Branch('Muons_charge', 'std::vector<int>', var_Muons_charge)
    tEvent.Branch('Muons_mediumID', 'std::vector<bool>', var_Muons_mediumID)
    tEvent.Branch('Muons_passIso', 'std::vector<bool>', var_Muons_passIso)
    tEvent.Branch('Muons_tightID', 'std::vector<bool>', var_Muons_tightID)
    
    tEvent.Branch('Muons_MiniIso', 'std::vector<double>', var_Muons_MiniIso)
    tEvent.Branch('Muons_MT2Activity', 'std::vector<double>', var_Muons_MT2Activity)
    tEvent.Branch('Muons_MTW', 'std::vector<double>', var_Muons_MTW)
    
    tEvent.Branch('GenParticles', 'std::vector<TLorentzVector>', var_GenParticles)
    tEvent.Branch('GenParticles_ParentId', 'std::vector<int>', var_GenParticles_ParentId)
    tEvent.Branch('GenParticles_ParentIdx', 'std::vector<int>', var_GenParticles_ParentIdx)
    tEvent.Branch('GenParticles_PdgId', 'std::vector<int>', var_GenParticles_PdgId)
    tEvent.Branch('GenParticles_Status', 'std::vector<int>', var_GenParticles_Status)

    tEvent.Branch('Jets', 'std::vector<TLorentzVector>', var_Jets)
    tEvent.Branch('Jets_bDiscriminatorCSV', 'std::vector<double>', var_Jets_bDiscriminatorCSV)

    tEvent.Branch('LeadingJetPartonFlavor', var_LeadingJetPartonFlavor,'LeadingJetPartonFlavor/I')
    tEvent.Branch('LeadingJetQgLikelihood', var_LeadingJetQgLikelihood,'LeadingJetQgLikelihood/D')
    tEvent.Branch('MinDeltaPhiMetJets', var_MinDeltaPhiMetJets,'MinDeltaPhiMetJets/D')
    tEvent.Branch('MinDeltaPhiMhtJets', var_MinDeltaPhiMhtJets,'MinDeltaPhiMhtJets/D')
    tEvent.Branch('LeadingJetPt', var_LeadingJetPt,'LeadingJetPt/D')

        ###### Tracks #######
    tEvent.Branch('tracks', 'std::vector<TLorentzVector>', var_tracks)
    tEvent.Branch('tracks_charge', 'std::vector<int>', var_tracks_charge)
    tEvent.Branch('tracks_chi2perNdof', 'std::vector<double>', var_tracks_chi2perNdof)
    tEvent.Branch('tracks_dxyVtx', 'std::vector<double>', var_tracks_dxyVtx)
    tEvent.Branch('tracks_dzVtx', 'std::vector<double>', var_tracks_dzVtx)
    tEvent.Branch('tracks_trackJetIso', 'std::vector<double>', var_tracks_trackJetIso)
    #tEvent.Branch('tracks_trackLeptonIso', 'std::vector<double>', var_tracks_trackLeptonIso)
    tEvent.Branch('tracks_trkMiniRelIso', 'std::vector<double>', var_tracks_trkMiniRelIso)
    tEvent.Branch('tracks_trkRelIso', 'std::vector<double>', var_tracks_trkRelIso)
    tEvent.Branch('tracks_trackQualityHighPurity', 'std::vector<bool>', var_tracks_trackQualityHighPurity)
    
    tEvent.Branch('LeadingJet', 'TLorentzVector', var_LeadingJet)
    
    tEvent.Branch('MinCsv30', var_MinCsv30,'MinCsv30/D')
    tEvent.Branch('MinCsv25', var_MinCsv25,'MinCsv25/D')
    tEvent.Branch('MaxCsv30', var_MaxCsv30,'MaxCsv30/D')
    tEvent.Branch('MaxCsv25', var_MaxCsv25,'MaxCsv25/D')
    

    nentries = c.GetEntries()
    print 'Analysing', nentries, "entries"

    count = 0
    afterPreselection = 0
    afterMET = 0
    afterBTAGS = 0
    afterNj = 0
    afterLeptons = 0
    nLMap = {}
    nLGenMap = {}
    nLGenMapZ = {}
    baseFileName = os.path.basename(input_file)
    crossSection = 1
    if signal:
        filename = (os.path.basename(input_file).split("Chi20Chipm")[0]).replace("p", ".")
        crossSection = utils.getCrossSection(filename)
        if crossSection is None:
            if utils.crossSections.get(filename) is not None:
                crossSection = utils.crossSections.get(filename)
            else:
                crossSection = 1.21547
    elif bg and "DYJetsToLL_M-5to50_" in input_file:
        fileBasename = os.path.basename(input_file).split(".root")[0].split("RunIISummer16MiniAODv3.")[1].split("_TuneCUETP8M1")[0]
        cs = utils.dyCrossSections.get(fileBasename)
    
    currLeptonCollectionMap = None
    currLeptonCollectionFileMapFile = None
    
    print "Starting Loop"
    for ientry in range(nentries):
        if ientry % 1000 == 0:
            print "Processing " + str(ientry)
        c.GetEntry(ientry)

        ### MADHT ###
        rightProcess = True
    
        if signal:
            rightProcess = analysis_ntuples.isX1X2X1Process(c)
        elif bg:
            if "DYJetsToLL_M-5to50_" not in input_file:
                crossSection = c.CrossSection
            rightProcess = utils.madHtCheck(baseFileName, c.madHT)
        elif data:
            lumiSecs.insert(c.RunNum, c.LumiBlockNum)

        hHt.Fill(c.HT)
        #print "crossSection=" + str(crossSection)
        hHtWeighted.Fill(c.HT, crossSection)

        if not rightProcess:
            continue
        count += 1
        if not data:
            hHtAfterMadHt.Fill(c.madHT)
        
        nj, btags, ljet = analysis_ntuples.numberOfJets25Pt2_4Eta_Loose(c)
        if ljet is None:
            #print "No ljet:",ljet 
            continue
        nL = c.Electrons.size() + c.Muons.size()
        nT = c.tracks.size()
        
    
        #### GEN LEVEL STUFF ####
        nLGen = 0
        nLGenZ = 0
        if not data:
            partSize = c.GenParticles.size()
            for ipart in range(partSize):
                if c.GenParticles_Status[ipart] == 1 and (abs(c.GenParticles_PdgId[ipart]) == 11 or abs(c.GenParticles_PdgId[ipart]) == 13):
                    nLGen += 1
                    if c.GenParticles_ParentId[ipart] == 1000023 or c.GenParticles_ParentId[ipart] == 23:
                        nLGenZ += 1
    
    
            if nLMap.get(nL) is not None:
                nLMap[nL] += 1
            else:
                nLMap[nL] = 1
            if nLGenMap.get(nLGen) is not None:
                nLGenMap[nLGen] += 1
            else:
                nLGenMap[nLGen] = 1
            if nLGenMapZ.get(nLGenZ) is not None:
                nLGenMapZ[nLGenZ] += 1
            else:
                nLGenMapZ[nLGenZ] = 1
        #### END OF GEN LEVEL STUFF ####
    
        var_NLGen[0] = nLGen
        var_NLGenZ[0] = nLGenZ
    
        #### PRECUTS ###
        if not signal:
            if not analysis_ntuples.passed2016BTrigger(c, data): continue
        
        afterMET += 1
        #if btags > 0: continue
        afterBTAGS += 1
        #if nj < 1: continue
        afterNj += 1
        #if not duoLepton: continue
        var_MinDeltaPhiMetJets[0] = analysis_ntuples.minDeltaPhiMetJets25Pt2_4Eta(c)
        var_MinDeltaPhiMhtJets[0] = analysis_ntuples.minDeltaPhiMhtJets25Pt2_4Eta(c)
        if var_MinDeltaPhiMetJets[0] < 0.4: continue
        if c.MHT < 100: continue
        if c.MET < 120: continue
        ## END PRECUTS##
        
        nj, btags, ljet = analysis_ntuples.numberOfJets25Pt2_4Eta_Loose(c)
        
        var_RunNum[0] = c.RunNum
        var_LumiBlockNum[0] = c.LumiBlockNum
        var_EvtNum[0] = c.EvtNum

        var_Met[0] = c.MET
        var_METPhi[0] = c.METPhi
        var_Mht[0] = c.MHT
        var_Ht[0] = c.HT
        var_Mt2[0] = c.MT2
        var_CrossSection[0] = crossSection
        var_NJets[0] = nj
        var_BTags[0] = btags
        var_LeadingJetPt[0] = c.Jets[ljet].Pt()
        var_LeadingJet = c.Jets[ljet]
        
        var_MinCsv30[0], var_MaxCsv30[0] = analysis_ntuples.minMaxCsv(c, 30)
        var_MinCsv25[0], var_MaxCsv25[0] = analysis_ntuples.minMaxCsv(c, 25)
        
        if var_MaxCsv25[0] > 0.7:
            continue
        
        afterPreselection += 1
        
        if not data:
            var_puWeight[0] = c.puWeight
            var_madHT[0] = c.madHT
        else:
            var_puWeight[0] = 1
            var_madHT[0] = 1
        
        takeLeptonsFrom = None
        
        if replace_lepton_collection:
            if currLeptonCollectionMap is None or not currLeptonCollectionMap.contains(c.RunNum, c.LumiBlockNum, c.EvtNum):
                print "NEED NEW LEPTON COLLECTION..."
                if currLeptonCollectionMap is not None:
                    currLeptonCollectionMap.Delete()
                    currLeptonCollectionMap = None
                currLeptonCollection = None
                currLeptonCollectionFileMapFile = utils.getLeptonCollectionFileMapFile(baseFileName)
                if currLeptonCollectionFileMapFile is None:
                    print "FATAL: could not open LeptonCollectionFileMapFile"
                    exit(1)
                print "currLeptonCollectionFileMapFile", currLeptonCollectionFileMapFile
                currLeptonCollectionFileMap = utils.getLeptonCollectionFileMap(currLeptonCollectionFileMapFile, c.RunNum, c.LumiBlockNum, c.EvtNum)
                print "Got currLeptonCollectionFileMap"
                if currLeptonCollectionFileMap is None:
                    print "FATAL: could not find file map. continuing..."
                    exit(1) 
                currLeptonCollectionFileName = currLeptonCollectionFileMap.get(c.RunNum, c.LumiBlockNum, c.EvtNum)
                currLeptonCollectionFileMap.Delete()
                currLeptonCollectionFileMap = None
                print "currLeptonCollectionFileName=", currLeptonCollectionFileName
                
                currLeptonCollectionMap = utils.getLeptonCollection(currLeptonCollectionFileName)
                print "currLeptonCollectionMap=", currLeptonCollectionMap
                currLeptonCollectionFileMapFile.Close()
            
            if currLeptonCollectionMap is None:
                print "FATAL: could not find lepton map for ",c.RunNum, c.LumiBlockNum, c.EvtNum, " continuing..."
                exit(1)
            
            takeLeptonsFrom = currLeptonCollectionMap.get(c.RunNum, c.LumiBlockNum, c.EvtNum)
        else:
            takeLeptonsFrom = c

        
        afterLeptons += 1
        
        var_Electrons = takeLeptonsFrom.Electrons
        var_Electrons_charge= takeLeptonsFrom.Electrons_charge
        var_Electrons_mediumID = takeLeptonsFrom.Electrons_mediumID
        var_Electrons_passIso = takeLeptonsFrom.Electrons_passIso
        var_Electrons_tightID = takeLeptonsFrom.Electrons_tightID
        var_Electrons_EnergyCorr = takeLeptonsFrom.Electrons_EnergyCorr
        var_Electrons_MiniIso = takeLeptonsFrom.Electrons_MiniIso
        var_Electrons_MT2Activity = takeLeptonsFrom.Electrons_MT2Activity
        var_Electrons_MTW = takeLeptonsFrom.Electrons_MTW
        var_Electrons_TrkEnergyCorr = takeLeptonsFrom.Electrons_TrkEnergyCorr
    
        var_Muons = takeLeptonsFrom.Muons
        var_Muons_charge = takeLeptonsFrom.Muons_charge
        var_Muons_mediumID = takeLeptonsFrom.Muons_mediumID
        var_Muons_passIso = takeLeptonsFrom.Muons_passIso
        var_Muons_tightID = takeLeptonsFrom.Muons_tightID
        var_Muons_MiniIso = takeLeptonsFrom.Muons_MiniIso
        var_Muons_MT2Activity = takeLeptonsFrom.Muons_MT2Activity
        var_Muons_MTW = takeLeptonsFrom.Muons_MTW
        
        var_Jets = c.Jets
        var_Jets_bDiscriminatorCSV = c.Jets_bDiscriminatorCSV
        
        var_NL[0] = nL
        
        if data:
            var_GenParticles = ROOT.std.vector(TLorentzVector)()
            var_GenParticles_ParentId = ROOT.std.vector(int)()
            var_GenParticles_ParentIdx = ROOT.std.vector(int)()
            var_GenParticles_PdgId = ROOT.std.vector(int)()
            var_GenParticles_Status = ROOT.std.vector(int)()
        else:
            var_GenParticles = c.GenParticles
            var_GenParticles_ParentId = c.GenParticles_ParentId
            var_GenParticles_ParentIdx = c.GenParticles_ParentIdx
            var_GenParticles_PdgId = c.GenParticles_PdgId
            var_GenParticles_Status = c.GenParticles_Status
    
        ###### Tracks ######
        var_tracks = c.tracks
        var_tracks_charge = c.tracks_charge
        var_tracks_chi2perNdof = c.tracks_chi2perNdof
        var_tracks_dxyVtx = c.tracks_dxyVtx
        var_tracks_dzVtx = c.tracks_dzVtx
        var_tracks_trackJetIso = c.tracks_trackJetIso
        #var_tracks_trackLeptonIso = c.tracks_trackLeptonIso
        var_tracks_trkMiniRelIso = c.tracks_trkMiniRelIso
        var_tracks_trkRelIso = c.tracks_trkRelIso
        var_tracks_trackQualityHighPurity = c.tracks_trackQualityHighPurity
    
        tEvent.SetBranchAddress('Electrons', var_Electrons)
        tEvent.SetBranchAddress('Electrons_charge', var_Electrons_charge)
        tEvent.SetBranchAddress('Muons', var_Muons)
        tEvent.SetBranchAddress('Muons_charge', var_Muons_charge)
        
        tEvent.SetBranchAddress('Electrons_mediumID', var_Electrons_mediumID)
        tEvent.SetBranchAddress('Electrons_passIso', var_Electrons_passIso)
        tEvent.SetBranchAddress('Electrons_tightID', var_Electrons_tightID)
        
        tEvent.SetBranchAddress('Electrons_EnergyCorr', var_Electrons_EnergyCorr)
        tEvent.SetBranchAddress('Electrons_MiniIso', var_Electrons_MiniIso)
        tEvent.SetBranchAddress('Electrons_MT2Activity', var_Electrons_MT2Activity)
        tEvent.SetBranchAddress('Electrons_MTW', var_Electrons_MTW)
        tEvent.SetBranchAddress('Electrons_TrkEnergyCorr', var_Electrons_TrkEnergyCorr)
        
        
        tEvent.SetBranchAddress('Muons_mediumID', var_Muons_mediumID)
        tEvent.SetBranchAddress('Muons_passIso', var_Muons_passIso)
        tEvent.SetBranchAddress('Muons_tightID', var_Muons_tightID)
        
        tEvent.SetBranchAddress('Muons_MiniIso', var_Muons_MiniIso)
        tEvent.SetBranchAddress('Muons_MT2Activity', var_Muons_MT2Activity)
        tEvent.SetBranchAddress('Muons_MTW', var_Muons_MTW)

        tEvent.SetBranchAddress('GenParticles', var_GenParticles)
        tEvent.SetBranchAddress('GenParticles_ParentId', var_GenParticles_ParentId)
        tEvent.SetBranchAddress('GenParticles_Status', var_GenParticles_Status)
        tEvent.SetBranchAddress('GenParticles_ParentIdx', var_GenParticles_ParentIdx)
        tEvent.SetBranchAddress('GenParticles_PdgId', var_GenParticles_PdgId)
        tEvent.SetBranchAddress('Jets', var_Jets)
        tEvent.SetBranchAddress('Jets_bDiscriminatorCSV', var_Jets_bDiscriminatorCSV)
    
        tEvent.SetBranchAddress('tracks', var_tracks)
        tEvent.SetBranchAddress('tracks_charge', var_tracks_charge)
        tEvent.SetBranchAddress('tracks_chi2perNdof', var_tracks_chi2perNdof)
        tEvent.SetBranchAddress('tracks_dxyVtx', var_tracks_dxyVtx)
        tEvent.SetBranchAddress('tracks_dzVtx', var_tracks_dzVtx)
        tEvent.SetBranchAddress('tracks_trackJetIso', var_tracks_trackJetIso)
        #tEvent.SetBranchAddress('tracks_trackLeptonIso', var_tracks_trackLeptonIso)
        tEvent.SetBranchAddress('tracks_trkMiniRelIso', var_tracks_trkMiniRelIso)
        tEvent.SetBranchAddress('tracks_trkRelIso', var_tracks_trkRelIso)
        tEvent.SetBranchAddress('tracks_trackQualityHighPurity', var_tracks_trackQualityHighPurity)
        
        tEvent.SetBranchAddress('LeadingJet', var_LeadingJet)           
            

        metDHt = 9999999
        if c.HT != 0:
            metDHt = c.MET / c.HT

        var_MetDHt[0] = metDHt
        var_LeadingJetPartonFlavor[0] = c.Jets_partonFlavor[ljet]
        var_LeadingJetQgLikelihood[0] = c.Jets_qgLikelihood[ljet]
    
        tEvent.Fill()

    fnew.cd()
    tEvent.Write()
    print 'just created', fnew.GetName()
    print "Total: " + str(nentries)
    print "Right Process: " + str(count)
    print "After MET: " + str(afterMET)
    print "After BTAGS: " + str(afterBTAGS)
    print "After NJ: " + str(afterNj)
    print "After Preselection: " + str(afterPreselection)
    print "After Leptons: " + str(afterLeptons)
    print "nL:"
    print nLMap
    print "nLGen:"
    print nLGenMap
    print "nLGenZ:"
    print nLGenMapZ

    hHt.Write()
    hHtWeighted.Write()
    hHtAfterMadHt.Write()
    
    if data:
        lumiSecs.Write("lumiSecs") 
    
    fnew.Close()
예제 #4
0
def main():
    chain = TChain('TreeMaker2/PreSelection')
    chain.Add(input_file)
    c = chain.CloneTree()
    chain = None
    print "Creating " + output_file
    fnew = TFile(output_file,'recreate')

    hHt = TH1F('hHt','hHt',100,0,3000)
    hHtWeighted = TH1F('hHtWeighted','hHtWeighted',100,0,3000)
    hHtAfterMadHt = TH1F('hHtAfterMadHt','hHtAfterMadHt',100,0,3000)
    hHt.Sumw2()
    
    lumiSecs = LumiSectMap()

    var_Met = np.zeros(1,dtype=float)
    var_METPhi = np.zeros(1,dtype=float)
    var_CrossSection = np.zeros(1,dtype=float)
    var_NJets = np.zeros(1,dtype=int)
    var_BTags = np.zeros(1,dtype=int)
    var_Ht = np.zeros(1,dtype=float)
    var_madHT = np.zeros(1,dtype=float)
    var_Mht = np.zeros(1,dtype=float)
    var_MetDHt = np.zeros(1,dtype=float)
    #var_MetDHt2 = np.zeros(1,dtype=float)
    var_Mt2 = np.zeros(1,dtype=float)
    var_Electrons = ROOT.std.vector(TLorentzVector)()
    var_Electrons_charge = ROOT.std.vector(int)()
    var_Electrons_mediumID = ROOT.std.vector(bool)()
    var_Electrons_passIso = ROOT.std.vector(bool)()
    var_Electrons_tightID = ROOT.std.vector(bool)()
    var_Muons_charge = ROOT.std.vector(int)()
    var_Muons_mediumID = ROOT.std.vector(bool)()
    var_Muons_passIso = ROOT.std.vector(bool)()
    var_Muons_tightID = ROOT.std.vector(bool)()
    var_Muons = ROOT.std.vector(TLorentzVector)()
    var_Muons_charge    = ROOT.std.vector(int)()
    var_NL = np.zeros(1,dtype=int)
    var_invMass = np.zeros(1,dtype=float)
    var_puWeight = np.zeros(1,dtype=float)

    var_Jets = ROOT.std.vector(TLorentzVector)()

    var_MinDeltaPhiMetJets = np.zeros(1,dtype=float)
    var_MinDeltaPhiMhtJets = np.zeros(1,dtype=float)

    #### TRACKS ####

    tEvent = TTree('tEvent','tEvent')
    tEvent.Branch('Met', var_Met,'Met/D')
    tEvent.Branch('METPhi', var_METPhi,'METPhi/D')
    tEvent.Branch('CrossSection', var_CrossSection,'CrossSection/D')
    tEvent.Branch('NJets', var_NJets,'NJets/I')
    tEvent.Branch('BTags', var_BTags,'BTags/I')
    tEvent.Branch('NL', var_NL,'NL/I')
    tEvent.Branch('Ht', var_Ht,'Ht/D')
    tEvent.Branch('madHT', var_madHT,'madHT/D')
    tEvent.Branch('Mht', var_Mht,'Mht/D')
    tEvent.Branch('MetDHt', var_MetDHt,'MetDHt/D')
    #tEvent.Branch('MetDHt2', var_MetDHt2,'MetDHt2/D')
    tEvent.Branch('Mt2', var_Mt2,'Mt2/D')
    tEvent.Branch('invMass', var_invMass,'invMass/D')
    tEvent.Branch('puWeight', var_puWeight,'puWeight/D')

    tEvent.Branch('Electrons', 'std::vector<TLorentzVector>', var_Electrons)
    tEvent.Branch('Electrons_charge', 'std::vector<int>', var_Electrons_charge)
    tEvent.Branch('Muons', 'std::vector<TLorentzVector>', var_Muons)
    tEvent.Branch('Muons_charge', 'std::vector<int>', var_Muons_charge)
    
    tEvent.Branch('Electrons_mediumID', 'std::vector<bool>', var_Electrons_mediumID)
    tEvent.Branch('Electrons_passIso', 'std::vector<bool>', var_Electrons_passIso)
    tEvent.Branch('Electrons_tightID', 'std::vector<bool>', var_Electrons_tightID)
    tEvent.Branch('Muons_mediumID', 'std::vector<bool>', var_Muons_mediumID)
    tEvent.Branch('Muons_passIso', 'std::vector<bool>', var_Muons_passIso)
    tEvent.Branch('Muons_tightID', 'std::vector<bool>', var_Muons_tightID)

    tEvent.Branch('Jets', 'std::vector<TLorentzVector>', var_Jets)

    tEvent.Branch('MinDeltaPhiMetJets', var_MinDeltaPhiMetJets,'MinDeltaPhiMetJets/D')
    tEvent.Branch('MinDeltaPhiMhtJets', var_MinDeltaPhiMhtJets,'MinDeltaPhiMhtJets/D')

    nentries = c.GetEntries()
    print 'Analysing', nentries, "entries"

    count = 0
    afterPreselection = 0
    afterMET = 0
    afterBTAGS = 0
    afterNj = 0
    nLMap = {}
    baseFileName = os.path.basename(input_file)
    crossSection = 1
    if signal:
        filename = (os.path.basename(input_file).split("Chi20Chipm")[0]).replace("p", ".")
        crossSection = utils.getCrossSection(filename)
        if crossSection is None:
            if utils.crossSections.get(filename) is not None:
                crossSection = utils.crossSections.get(filename)
            else:
                crossSection = 1.21547
    print "Starting Loop"
    for ientry in range(nentries):
        if ientry % 1000 == 0:
            print "Processing " + str(ientry)
        c.GetEntry(ientry)

        ### MADHT ###
        rightProcess = True
    
        if signal:
            rightProcess = analysis_ntuples.isX1X2X1Process(c)
        elif bg:
            crossSection = c.CrossSection
            rightProcess = utils.madHtCheck(baseFileName, c.madHT)
        elif data:
            lumiSecs.insert(c.RunNum, c.LumiBlockNum)

        hHt.Fill(c.HT)
        #print "crossSection=" + str(crossSection)
        hHtWeighted.Fill(c.HT, crossSection)

        if not rightProcess:
            continue
        count += 1
        if not data:
            hHtAfterMadHt.Fill(c.madHT)

        nj, btags, ljet = analysis_ntuples.numberOfJets25Pt2_4Eta_Loose(c)
        nL = 0
    
        #### PRECUTS ###
        if not signal:
            if not analysis_ntuples.passed2016BTrigger(c, data): continue
            
        
        #if nL != 2:# or (c.Electrons.size() != 2 and c.Muons.size() != 2):
        #    continue

        l1 = None
        l2 = None
        
        for i in range(0, c.Muons.size()):
            if c.Muons[i].Pt() < 30:
                continue
            if not bool(c.Muons_tightID[i]):
                continue
            if not bool(c.Muons_passIso[i]):
                continue
            if abs(c.Muons[i].Eta()) > 2.4:
                continue
            nL+=1
            if nL > 2:
                break
            if l1 is None:
                l1 = i
            else:
                l2 = i
        
        
        if nL != 2:
            continue
        
        if c.Muons_charge[l1] * c.Muons_charge[l2] > 0:
            continue
        
        # if c.Electrons.size() == 2:
#             if c.Electrons_charge[0] * c.Electrons_charge[1] > 0:
#                 continue
#             if not bool(c.Electrons_mediumID[0]) or not bool(c.Electrons_mediumID[1]):
#                 continue
#             if not bool(c.Electrons_passIso[0]) or not bool(c.Electrons_passIso[1]):
#                 continue
#             l1 = c.Electrons[0]
#             l2 = c.Electrons[1]
#         else:
#             if c.Muons_charge[0] * c.Muons_charge[1] > 0:
#                 continue
#                 
#             if not bool(c.Muons_tightID[0]) or not bool(c.Muons_tightID[1]):
#                 continue
#             
#             if not bool(c.Muons_passIso[0]) or not bool(c.Muons_passIso[1]):
#                 continue
#                 
#             l1 = c.Muons[0]
#             l2 = c.Muons[1]
        
        var_NL[0] = nL
            
        var_invMass[0] = (c.Muons[l1] + c.Muons[l2]).M()
        if not data:
            var_puWeight[0] = c.puWeight
        else:
            var_puWeight[0] = 1
        
        if not abs(var_invMass[0]-91.19)<10: continue

        afterPreselection += 1

        var_Met[0] = c.MET
        var_METPhi[0] = c.METPhi
        var_Mht[0] = c.MHT
        var_Ht[0] = c.HT
        var_madHT[0] = c.madHT
        var_Mt2[0] = c.MT2
        var_CrossSection[0] = crossSection
        var_NJets[0] = nj
        var_BTags[0] = btags
        
    
        var_Electrons = c.Electrons
        var_Electrons_charge= c.Electrons_charge
        var_Muons = c.Muons
        var_Muons_charge = c.Muons_charge
        var_Jets = c.Jets
        
        tEvent.SetBranchAddress('Electrons', var_Electrons)
        tEvent.SetBranchAddress('Electrons_charge', var_Electrons_charge)
        tEvent.SetBranchAddress('Muons', var_Muons)
        tEvent.SetBranchAddress('Muons_charge', var_Muons_charge)
        tEvent.SetBranchAddress('Jets', var_Jets)
        tEvent.SetBranchAddress('Electrons_mediumID', var_Electrons_mediumID)
        tEvent.SetBranchAddress('Electrons_passIso', var_Electrons_passIso)
        tEvent.SetBranchAddress('Electrons_tightID', var_Electrons_tightID)
        tEvent.SetBranchAddress('Muons_mediumID', var_Muons_mediumID)
        tEvent.SetBranchAddress('Muons_passIso', var_Muons_passIso)
        tEvent.SetBranchAddress('Muons_tightID', var_Muons_tightID)

        metDHt = 9999999
        if c.HT != 0:
            metDHt = c.MET / c.HT

        var_MetDHt[0] = metDHt
    
        tEvent.Fill()

    fnew.cd()
    tEvent.Write()
    print 'just created', fnew.GetName()
    print "Total: " + str(nentries)
    print "Right Process: " + str(count)
    print "After MET: " + str(afterMET)
    print "After BTAGS: " + str(afterBTAGS)
    print "After NJ: " + str(afterNj)
    print "After Preselection: " + str(afterPreselection)

    hHt.Write()
    hHtWeighted.Write()
    hHtAfterMadHt.Write()
    
    if data:
        lumiSecs.Write("lumiSecs") 
        
    fnew.Close()