def makeLeps(event, sample, level): ''' Add important leptons (no full list of leptons is required for now) ''' preTag = 'reco' if level == 'reco' else 'gen' tag = 'reco' if level == 'reco' else 'genLep' # Define W leptons event.W_l0 = getObjDict(event, '%sLep_' % preTag, ['pt', 'eta', 'phi', 'pdgId'], 0) event.W_l1 = getObjDict(event, '%sLep_' % preTag, ['pt', 'eta', 'phi', 'pdgId'], 1) # Add extra vectors for p in [event.W_l0, event.W_l1]: addTransverseVector(p) addTLorentzVector(p) # Import additional functions/classes specified for the level of reconstruction if level == 'reco': from TTXPheno.Tools.objectSelection import isGoodRecoLepton as isGoodLepton else: from TTXPheno.Tools.objectSelection import isGoodGenLepton as isGoodLepton # We may loose some events by cross-cleaning or by thresholds. event.foundWl0 = isGoodLepton(event.W_l0) event.foundWl1 = isGoodLepton(event.W_l1) event.found2lep = event.W_l0['pdgId'] * event.W_l1['pdgId'] > 0 # choose your selection on leptons event.passing_leptons = event.found2lep and event.foundWl0 and event.foundWl1
def makeJets( event, sample, level ): ''' Add a list of filtered jets to the event (full list is required for lepton cross cleaning) ''' preTag = 'reco' if level == 'reco' else 'gen' tag = 'reco' if level == 'reco' else 'genLep' # Import additional functions/classes specified for the level of reconstruction if level == 'reco': from TTXPheno.Tools.objectSelection import isGoodRecoJet as isGoodJet else: from TTXPheno.Tools.objectSelection import isGoodGenJet as isGoodJet # load jets btag = 'bTag_medium' if level == 'reco' else 'matchBParton' event.jets = getCollection( event, '%sJet'%preTag, ['pt', 'eta', 'phi', btag, 'nNeutrals', 'nCharged' ], 'n%sJet'%preTag ) # event.jets = list( filter( lambda j: isGoodJet(j), event.jets ) ) # Define leptonic b-jets event.bj0lep = getObjDict( event, '%sJet_'%preTag, ['pt', 'eta', 'phi', 'nNeutrals', 'nCharged'], getattr( event, '%sBjLeadlep_index'%preTag ) ) if getattr( event, '%sBjLeadlep_index'%preTag ) >= 0 else nanJet() event.bj0had = getObjDict( event, '%sJet_'%preTag, ['pt', 'eta', 'phi', 'nNeutrals', 'nCharged'], getattr( event, '%sBjLeadhad_index'%preTag ) ) if getattr( event, '%sBjLeadhad_index'%preTag ) >= 0 else nanJet() # Define non-Z b-jets event.bjNonZlep = getObjDict( event, '%sJet_'%preTag, ['pt', 'eta', 'phi', 'nNeutrals', 'nCharged'], getattr( event, '%sBjNonZlep_index'%preTag ) ) if getattr( event, '%sBjNonZlep_index'%preTag ) >= 0 else nanJet() event.bjNonZhad = getObjDict( event, '%sJet_'%preTag, ['pt', 'eta', 'phi', 'nNeutrals', 'nCharged'], getattr( event, '%sBjNonZhad_index'%preTag ) ) if getattr( event, '%sBjNonZhad_index'%preTag ) >= 0 else nanJet() # get (second) hardest bjets event.bj0 = {'pt':getattr( event, '%sBj0_pt'%preTag ), 'phi':getattr( event, '%sBj0_phi'%preTag ), 'eta':getattr( event, '%sBj0_eta'%preTag ), 'nNeutrals':getattr( event, '%sBj0_nNeutrals'%preTag ), 'nCharged':getattr( event, '%sBj0_nCharged'%preTag )} event.bj1 = {'pt':getattr( event, '%sBj1_pt'%preTag ), 'phi':getattr( event, '%sBj1_phi'%preTag ), 'eta':getattr( event, '%sBj1_eta'%preTag ), 'nNeutrals':getattr( event, '%sBj0_nNeutrals'%preTag ), 'nCharged':getattr( event, '%sBj0_nCharged'%preTag )} # Add extra vectors for p in [event.bj0, event.bj1, event.bj0lep, event.bj0had, event.bjNonZlep, event.bjNonZhad]: addTransverseVector( p ) addTLorentzVector( p )
def makeJets( event, sample, level ): ''' Add a list of filtered jets to the event (full list is required for lepton cross cleaning) ''' preTag = 'reco' if level == 'reco' else 'gen' tag = 'reco' if level == 'reco' else 'genLep' # load jets btag = 'bTag' if level == 'reco' else 'matchBParton' event.jets = getCollection( event, '%sJet'%preTag, ['pt', 'eta', 'phi', btag ], 'n%sJet'%preTag ) event.bjets = list( filter( lambda j: j[btag], event.jets ) ) # get (second) hardest bjets event.bj0 = {'pt':getattr( event, '%sBj0_pt'%preTag ), 'phi':getattr( event, '%sBj0_phi'%preTag ), 'eta':getattr( event, '%sBj0_eta'%preTag )} event.bj1 = {'pt':getattr( event, '%sBj1_pt'%preTag ), 'phi':getattr( event, '%sBj1_phi'%preTag ), 'eta':getattr( event, '%sBj1_eta'%preTag )} # Define leptonic b-jets event.bj0lep = getObjDict( event, '%sJet_'%preTag, ['pt', 'eta', 'phi'], getattr( event, '%sBjLeadlep_index'%preTag ) ) if getattr( event, '%sBjLeadlep_index'%preTag ) >= 0 else nanJet() # event.bj0had = getObjDict( event, '%sJet_'%preTag, ['pt', 'eta', 'phi'], getattr( event, '%sBjLeadhad_index'%preTag ) ) if getattr( event, '%sBjLeadlep_index'%preTag ) >= 0 else nanJet() # Add extra vectors for p in [event.bj0, event.bj1, event.bj0lep]: addTransverseVector( p ) addTLorentzVector( p ) # Import additional functions/classes specified for the level of reconstruction if level == 'reco': from TTXPheno.Tools.objectSelection import isGoodRecoJet as isGoodJet else: from TTXPheno.Tools.objectSelection import isGoodGenJet as isGoodJet # selection checks event.foundBj0 = isGoodJet( event.bj0 ) # event.foundBj0lep = getattr( event, '%sBjLeadlep_index'%preTag ) >= 0 and isGoodJet( event.bj0lep ) # choose your selection on b-jets event.passing_bjets = event.foundBj0
def makeLeps( event, sample, level, leptonFlavor ): ''' Add important leptons (no full list of leptons is required for now) ''' preTag = 'reco' if level == 'reco' else 'gen' tag = 'reco' if level == 'reco' else 'genLep' if level == 'reco': leptonList = ['pt', 'eta', 'phi', 'pdgId', 'isolationVar', 'isolationVarRhoCorr', 'sumPtCharged', 'sumPtNeutral', 'sumPtChargedPU', 'sumPt', 'ehadOverEem', 'genIndex'] else: leptonList = ['pt', 'eta', 'phi', 'pdgId'] # Define Z leptons event.Z_l0 = getObjDict( event, '%sLep_'%preTag, leptonList, getattr( event, '%sZ_l1_index'%tag ) ) if getattr( event, '%sZ_l1_index'%tag ) >= 0 else nanLepton() event.Z_l1 = getObjDict( event, '%sLep_'%preTag, leptonList, getattr( event, '%sZ_l2_index'%tag ) ) if getattr( event, '%sZ_l2_index'%tag ) >= 0 else nanLepton() # Define non-Z leptons event.NonZ_l0 = getObjDict( event, '%sLep_'%preTag, leptonList, getattr( event, '%sNonZ_l1_index'%tag ) ) if getattr( event, '%sNonZ_l1_index'%tag ) >= 0 else nanLepton() event.NonZ_l1 = getObjDict( event, '%sLep_'%preTag, leptonList, getattr( event, '%sNonZ_l2_index'%tag ) ) if getattr( event, '%sNonZ_l2_index'%tag ) >= 0 else nanLepton() # Add extra vectors for p in [ event.Z_l0, event.Z_l1, event.NonZ_l0, event.NonZ_l1 ]: addTransverseVector( p ) addTLorentzVector( p ) if level == 'reco': addIDeltaBeta( p ) # Import additional functions/classes specified for the level of reconstruction if level == 'reco': from TTXPheno.Tools.objectSelection import isGoodRecoLepton as isGoodLepton else: from TTXPheno.Tools.objectSelection import isGoodGenLepton as isGoodLepton # We may loose some events by cross-cleaning or by thresholds. event.foundZl0 = getattr( event, '%sZ_l1_index'%tag ) >= 0 and isGoodLepton( event.Z_l0 ) event.foundZl1 = getattr( event, '%sZ_l2_index'%tag ) >= 0 and isGoodLepton( event.Z_l1 ) event.foundZ = event.Z_l0['pdgId'] * event.Z_l1['pdgId'] < 0 and abs(event.Z_l0['pdgId']) == abs(event.Z_l1['pdgId']) event.found3lep = getattr( event, '%sNonZ_l1_index'%tag ) >= 0 and isGoodLepton( event.NonZ_l0 ) # choose your selection on leptons event.passing_leptons = event.found3lep and event.foundZl0 and event.foundZl1 and event.foundZ lepFlavors = [ abs(event.NonZ_l0['pdgId']), abs(event.Z_l0['pdgId']), abs(event.Z_l1['pdgId']) ] if leptonFlavor == 'e': event.passing_leptons = event.passing_leptons and abs(event.NonZ_l0['pdgId'])==11 elif leptonFlavor == 'mu': event.passing_leptons = event.passing_leptons and abs(event.NonZ_l0['pdgId'])==13 elif leptonFlavor == 'mumumu': event.passing_leptons = event.passing_leptons and lepFlavors.count(13)==3 elif leptonFlavor == 'mumue': event.passing_leptons = event.passing_leptons and lepFlavors.count(13)==2 and lepFlavors.count(11)==1 elif leptonFlavor == 'muee': event.passing_leptons = event.passing_leptons and lepFlavors.count(13)==1 and lepFlavors.count(11)==2 elif leptonFlavor == 'eee': event.passing_leptons = event.passing_leptons and lepFlavors.count(11)==3