diff --git a/interface/JetNtuplizer.hpp b/interface/JetNtuplizer.hpp index 11e68e5..42d6c07 100644 --- a/interface/JetNtuplizer.hpp +++ b/interface/JetNtuplizer.hpp @@ -34,6 +34,7 @@ class JetNtuplizer : public NtuplizerBase const std::string _jetname; const std::string _jettype; + const std::string _jetidversion; const std::string _jecversion; const edm::EDGetToken _rhotoken; const edm::EDGetToken _vtxtoken; @@ -59,6 +60,12 @@ class JetNtuplizer : public NtuplizerBase std::string UserFloatName() const; std::string UserFloatPrefix() const; + + /******************************************************************************* + * Jet useful function + *******************************************************************************/ + bool GetJetID( const pat::Jet& jet, std::string version, std::string level ) const; + /******************************************************************************* * Fat jet related functions *******************************************************************************/ diff --git a/interface/format.h b/interface/format.h index ea745db..75378dd 100644 --- a/interface/format.h +++ b/interface/format.h @@ -457,6 +457,9 @@ class JetInfoBranches Float_t NEF [MAX_JETS]; Float_t NHF [MAX_JETS]; Float_t MUF [MAX_JETS]; + Bool_t JetIDLOOSE [MAX_JETS]; + Bool_t JetIDTIGHT [MAX_JETS]; + Bool_t JetIDTIGHTLEPVETO [MAX_JETS]; Float_t PtCorrRaw [MAX_JETS]; Float_t PtCorrL2 [MAX_JETS]; Float_t PtCorrL3 [MAX_JETS]; @@ -586,6 +589,9 @@ class JetInfoBranches root->Branch( ( name+".NEF" ).c_str(), NEF, ( name+".NEF["+name+".Size]/F" ).c_str() ); root->Branch( ( name+".NHF" ).c_str(), NHF, ( name+".NHF["+name+".Size]/F" ).c_str() ); root->Branch( ( name+".MUF" ).c_str(), MUF, ( name+".MUF["+name+".Size]/F" ).c_str() ); + root->Branch( ( name+".JetIDLOOSE" ).c_str(), JetIDLOOSE, ( name+".JetIDLOOSE["+name+".Size]/O" ).c_str() ); + root->Branch( ( name+".JetIDTIGHT" ).c_str(), JetIDTIGHT, ( name+".JetIDTIGHT["+name+".Size]/O" ).c_str() ); + root->Branch( ( name+".JetIDTIGHTLEPVETO" ).c_str(), JetIDTIGHTLEPVETO, ( name+".JetIDTIGHTLEPVETO["+name+".Size]/O" ).c_str() ); root->Branch( ( name+".PtCorrRaw" ).c_str(), PtCorrRaw, ( name+".PtCorrRaw["+name+".Size]/F" ).c_str() ); root->Branch( ( name+".PtCorrL2" ).c_str(), PtCorrL2, ( name+".PtCorrL2["+name+".Size]/F" ).c_str() ); root->Branch( ( name+".PtCorrL3" ).c_str(), PtCorrL3, ( name+".PtCorrL3["+name+".Size]/F" ).c_str() ); @@ -696,6 +702,9 @@ class JetInfoBranches root->SetBranchAddress( ( name+".NEF" ).c_str(), NEF ); root->SetBranchAddress( ( name+".NHF" ).c_str(), NHF ); root->SetBranchAddress( ( name+".MUF" ).c_str(), MUF ); + root->SetBranchAddress( ( name+".JetIDLOOSE" ).c_str(), JetIDLOOSE ); + root->SetBranchAddress( ( name+".JetIDTIGHT" ).c_str(), JetIDTIGHT ); + root->SetBranchAddress( ( name+".JetIDTIGHTLEPVETO" ).c_str(), JetIDTIGHTLEPVETO ); root->SetBranchAddress( ( name+".PtCorrRaw" ).c_str(), PtCorrRaw ); root->SetBranchAddress( ( name+".PtCorrL2" ).c_str(), PtCorrL2 ); root->SetBranchAddress( ( name+".PtCorrL3" ).c_str(), PtCorrL3 ); @@ -917,7 +926,7 @@ class LepInfoBranches Float_t ElTrackNormalizedChi2 [MAX_LEPTONS]; Int_t ElNTrackLayersWMeasurement [MAX_LEPTONS]; Int_t ElTrackNHits [MAX_LEPTONS]; - Int_t NumberOfExpectedInnerHits [MAX_LEPTONS]; + Int_t NumberOfExpectedMissingInnerHits [MAX_LEPTONS]; Int_t ElClassification [MAX_LEPTONS]; Float_t ElFBrem [MAX_LEPTONS]; Int_t ElNumberOfBrems [MAX_LEPTONS]; @@ -1087,7 +1096,7 @@ class LepInfoBranches root->Branch( ( name+".ElTrackNormalizedChi2" ).c_str(), ElTrackNormalizedChi2, ( name+".ElTrackNormalizedChi2["+name+".Size]/F" ).c_str() ); root->Branch( ( name+".ElNTrackLayersWMeasurement" ).c_str(), ElNTrackLayersWMeasurement, ( name+".ElNTrackLayersWMeasurement["+name+".Size]/I" ).c_str() ); root->Branch( ( name+".ElTrackNHits" ).c_str(), ElTrackNHits, ( name+".ElTrackNHits["+name+".Size]/I" ).c_str() ); - root->Branch( ( name+".NumberOfExpectedInnerHits" ).c_str(), NumberOfExpectedInnerHits, ( name+".NumberOfExpectedInnerHits["+name+".Size]/I" ).c_str() ); + root->Branch( ( name+".NumberOfExpectedMissingInnerHits" ).c_str(),NumberOfExpectedMissingInnerHits,( name+".NumberOfExpectedMissingInnerHits["+name+".Size]/I" ).c_str() ); root->Branch( ( name+".ElClassification" ).c_str(), ElClassification, ( name+".ElClassification["+name+".Size]/I" ).c_str() ); root->Branch( ( name+".ElFBrem" ).c_str(), ElFBrem, ( name+".ElFBrem["+name+".Size]/F" ).c_str() ); root->Branch( ( name+".ElNumberOfBrems" ).c_str(), ElNumberOfBrems, ( name+".ElNumberOfBrems["+name+".Size]/I" ).c_str() ); @@ -1257,7 +1266,7 @@ class LepInfoBranches root->SetBranchAddress( ( name+".ElTrackNormalizedChi2" ).c_str(), ElTrackNormalizedChi2 ); root->SetBranchAddress( ( name+".ElNTrackLayersWMeasurement" ).c_str(), ElNTrackLayersWMeasurement ); root->SetBranchAddress( ( name+".ElTrackNHits" ).c_str(), ElTrackNHits ); - root->SetBranchAddress( ( name+".NumberOfExpectedInnerHits" ).c_str(), NumberOfExpectedInnerHits ); + root->SetBranchAddress( ( name+".NumberOfExpectedMissingInnerHits" ).c_str(),NumberOfExpectedMissingInnerHits ); root->SetBranchAddress( ( name+".ElClassification" ).c_str(), ElClassification ); root->SetBranchAddress( ( name+".ElFBrem" ).c_str(), ElFBrem ); root->SetBranchAddress( ( name+".ElNumberOfBrems" ).c_str(), ElNumberOfBrems ); diff --git a/production/bprimeKit_cfg.py b/production/bprimeKit_cfg.py index 889f92f..505ecf8 100644 --- a/production/bprimeKit_cfg.py +++ b/production/bprimeKit_cfg.py @@ -71,34 +71,58 @@ # For settings, see the bprimeKit/python/jettoolbox_settings.py #------------------------------------------------------------------------------- print '\nBeginning jet toolbox setup.....\n' -from bpkFrameWork.bprimeKit.jettoolbox_settings import * -jettoolbox_settings( process, not mysetting.isData ) +from bpkFrameWork.bprimeKit.jetmet_settings import * +jet_settings( process, not mysetting.isData ) print '\nFinished jet toolbox setup.....\n' +print '\nBeginning met setup.....\n' +met_settings( process, mysetting.isData, mysetting.Year == '2017' ) +print '\n\nFinished met setup.....\n' #------------------------------------------------------------------------------- # Settings for Egamma Identification and Energy Correction bug fixing #------------------------------------------------------------------------------- -# ref : https://twiki.cern.ch/twiki/bin/view/CMS/EgammaMiniAODV2#2017_MiniAOD_V2 -#from RecoEgamma.EgammaTools.EgammaPostRecoTools import setupEgammaPostRecoSeq -#setupEgammaPostRecoSeq( -# process, -# runVID = True, -# runEnergyCorrections = True if mysetting.Year == '2017' else False, -# era = '2017-Nov17ReReco' if mysetting.Year == '2017' else '2016-Legacy' -# ) +# ref : https://twiki.cern.ch/twiki/bin/view/CMS/EgammaPostRecoRecipes#106X +from EgammaUser.EgammaPostRecoTools.EgammaPostRecoTools import setupEgammaPostRecoSeq + +Era = '' +if mysetting.Year == '2016': + Era = '2016-Legacy' +elif mysetting.Year == '2017': + Era = '2017-Nov17ReReco' +elif mysetting.Year == '2018': + Era = '2018-Prompt' + +fall17V2PhoIDModules = [ + 'RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Fall17_94X_V2_cff', + 'RecoEgamma.PhotonIdentification.Identification.cutBasedPhotonID_Fall17_94X_V2_cff' + ] +fall17V2EleIDModules = [ + 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Fall17_94X_V2_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V2_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V2_cff', + 'RecoEgamma.ElectronIdentification.Identification.heepElectronID_HEEPV70_cff' + ] + +setupEgammaPostRecoSeq( + process, + runVID = True, + eleIDModules = fall17V2EleIDModules, + phoIDModules = fall17V2PhoIDModules, + runEnergyCorrections = True, + era = Era + ) #------------------------------------------------------------------------------- -# Settings for MET bug fixing +# Level 1 ECAL prefiring #------------------------------------------------------------------------------- -# ref : https://twiki.cern.ch/twiki/bin/viewauth/CMS/MissingETUncertaintyPrescription#Instructions_for_9_4_X_X_9_for_2 -#from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD -#runMetCorAndUncFromMiniAOD ( -# process, -# isData = mysetting.isData, -# fixEE2017 = True, -# fixEE2017Params = {'userawPt': True, 'ptThreshold':50.0, 'minEtaThreshold':2.65, 'maxEtaThreshold': 3.139}, -# postfix = "ModifiedMET" -# ) +# ref : https://twiki.cern.ch/twiki/bin/viewauth/CMS/L1ECALPrefiringWeightRecipe +from PhysicsTools.PatUtils.l1ECALPrefiringWeightProducer_cfi import l1ECALPrefiringWeightProducer +process.prefiringweight = l1ECALPrefiringWeightProducer.clone( + DataEra = cms.string('2017BtoF' if mysetting.Year == '2017' else '2016BtoH'), + UseJetEMPt = cms.bool(False), + PrefiringRateSystematicUncty = cms.double(0.2), + SkipWarnings = False +) #------------------------------------------------------------------------------- # Extra MET filter for 2017 and 2018 @@ -142,14 +166,17 @@ # process.SimpleMemoryCheck = cms.Service('SimpleMemoryCheck',ignoreTotal = cms.untracked.int32(1) ) process.externalSequence = cms.Sequence() -#if ( mysetting.Year == '2017' ): -# process.externalSequence *= process.fullPatMetSequenceModifiedMET -if ( mysetting.Year == '2017' or mysetting.Year == '2018' ): +if mysetting.Year == '2016' or mysetting.Year == '2017': + if not mysetting.isData: + process.externalSequence *= process.prefiringweight + +if mysetting.Year == '2017' or mysetting.Year == '2018': process.externalSequence *= process.ecalBadCalibReducedMINIAODFilter process.Path = cms.Path( -# process.egammaPostRecoSeq* - process.externalSequence* + process.egammaPostRecoSeq* process.JetToolBoxSequence* + process.MetSequence* + process.externalSequence* process.bprimeKit ) diff --git a/python/Ntuplizer16_cfi.py b/python/Ntuplizer16_cfi.py index abbe0ed..3b4d21a 100644 --- a/python/Ntuplizer16_cfi.py +++ b/python/Ntuplizer16_cfi.py @@ -23,8 +23,9 @@ evtgenbase = cms.PSet( rhosrc = rhosrc, rhonofastjetsrc = rhonofastjetsrc, - metsrc = cms.InputTag('slimmedMETs'), + metsrc = cms.InputTag('slimmedMETsUpdated'), puppimetsrc = cms.InputTag('slimmedMETsPuppi'), + #puppimetsrc = cms.InputTag('slimmedMETsPuppiUpdated'), pusrc = cms.InputTag('slimmedAddPileupInfo'), beamspotsrc = beamspotsrc, prefwgtsrc = cms.InputTag('prefiringweight:nonPrefiringProb'), @@ -136,39 +137,44 @@ # Jet settings #------------------------------------------------------------------------------- jetcommon = cms.PSet( - jetname=cms.string('JetInfo'), - jettype=cms.string(''), - muonsrc=cms.InputTag('slimmedMuons'), - vtxsrc=vtxsrc, - rhosrc=rhosrc, - jetsrc=cms.InputTag(''), - subjetsrc=cms.InputTag(''), - jecversion=cms.string(''), + jetname = cms.string('JetInfo'), + jettype = cms.string(''), + jetidversion = cms.string(''), + muonsrc = cms.InputTag('slimmedMuons'), + vtxsrc = vtxsrc, + rhosrc = rhosrc, + jetsrc = cms.InputTag(''), + subjetsrc = cms.InputTag(''), + jecversion = cms.string(''), ) #------------------------------------------------------------------------- # AK4 Jet common settings #------------------------------------------------------------------------- ak4jetbase = jetcommon.clone() -ak4jetbase.jettype = cms.string('AK4PFchs') -ak4jetbase.jetsrc = cms.InputTag('slimmedJets') +ak4jetbase.jettype = cms.string('AK4PFchs') +ak4jetbase.jetsrc = cms.InputTag('selectedPatJetsAK4PFCHS') +ak4jetbase.jetidversion = cms.string('WINTER16') ak4jetpuppi = jetcommon.clone() -ak4jetpuppi.jetname = cms.string('JetInfoPuppi') -ak4jetpuppi.jettype = cms.string('AK4PFPuppi') -ak4jetpuppi.jetsrc = cms.InputTag('slimmedJetsPuppi') +ak4jetpuppi.jetname = cms.string('JetInfoPuppi') +ak4jetpuppi.jettype = cms.string('AK4PFPuppi') +ak4jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK4PFPuppi') +ak4jetpuppi.jetidversion = cms.string('WINTER16') #------------------------------------------------------------------------- # AK8/CA8 jet common settings #------------------------------------------------------------------------- ak8jetpuppi = jetcommon.clone() -ak8jetpuppi.jetname = cms.string('JetAK8Puppi') -ak8jetpuppi.jettype = cms.string('AK8PFPuppi') -ak8jetpuppi.jetsrc = cms.InputTag('slimmedJetsAK8') -ak8jetpuppi.subjetsrc = cms.InputTag('slimmedJetsAK8PFPuppiSoftDropPacked', 'SubJets', 'RECO') +ak8jetpuppi.jetname = cms.string('JetAK8Puppi') +ak8jetpuppi.jettype = cms.string('AK8PFPuppi') +ak8jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK8PFPuppi') +ak8jetpuppi.subjetsrc = cms.InputTag('slimmedJetsAK8PFPuppiSoftDropPacked', 'SubJets', 'RECO') +ak8jetpuppi.jetidversion = cms.string('WINTER16') ca8jetpuppi = jetcommon.clone() -ca8jetpuppi.jetname = cms.string('JetCA8Puppi') -ca8jetpuppi.jettype = cms.string('AK8PFPuppi') -ca8jetpuppi.jetsrc = cms.InputTag('slimmedJetsAK8') -ca8jetpuppi.subjetsrc = cms.InputTag('patJetsCMSTopTagPuppiPacked') +ca8jetpuppi.jetname = cms.string('JetCA8Puppi') +ca8jetpuppi.jettype = cms.string('AK8PFPuppi') +ca8jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK8PFPuppi') +ca8jetpuppi.subjetsrc = cms.InputTag('patJetsCMSTopTagPuppiPacked') +ca8jetpuppi.jetidversion = cms.string('WINTER16') diff --git a/python/Ntuplizer17_cfi.py b/python/Ntuplizer17_cfi.py index 4d7caeb..10f468e 100644 --- a/python/Ntuplizer17_cfi.py +++ b/python/Ntuplizer17_cfi.py @@ -23,8 +23,9 @@ evtgenbase = cms.PSet( rhosrc = rhosrc, rhonofastjetsrc = rhonofastjetsrc, - metsrc = cms.InputTag('slimmedMETs'), + metsrc = cms.InputTag('slimmedMETsUpdated'), puppimetsrc = cms.InputTag('slimmedMETsPuppi'), + #puppimetsrc = cms.InputTag('slimmedMETsPuppiUpdated'), pusrc = cms.InputTag('slimmedAddPileupInfo'), beamspotsrc = beamspotsrc, prefwgtsrc = cms.InputTag('prefiringweight:nonPrefiringProb'), @@ -133,39 +134,44 @@ # Jet settings #------------------------------------------------------------------------------- jetcommon = cms.PSet( - jetname=cms.string('JetInfo'), - jettype=cms.string(''), - muonsrc=cms.InputTag('slimmedMuons'), - vtxsrc=vtxsrc, - rhosrc=rhosrc, - jetsrc=cms.InputTag(''), - subjetsrc=cms.InputTag(''), - jecversion=cms.string(''), + jetname = cms.string('JetInfo'), + jettype = cms.string(''), + jetidversion = cms.string(''), + muonsrc = cms.InputTag('slimmedMuons'), + vtxsrc = vtxsrc, + rhosrc = rhosrc, + jetsrc = cms.InputTag(''), + subjetsrc = cms.InputTag(''), + jecversion = cms.string(''), ) #------------------------------------------------------------------------- # AK4 Jet common settings #------------------------------------------------------------------------- ak4jetbase = jetcommon.clone() -ak4jetbase.jettype = cms.string('AK4PFchs') -ak4jetbase.jetsrc = cms.InputTag('slimmedJets') +ak4jetbase.jettype = cms.string('AK4PFchs') +ak4jetbase.jetsrc = cms.InputTag('selectedPatJetsAK4PFCHS') +ak4jetbase.jetidversion = cms.string('WINTER17') ak4jetpuppi = jetcommon.clone() -ak4jetpuppi.jetname = cms.string('JetInfoPuppi') -ak4jetpuppi.jettype = cms.string('AK4PFPuppi') -ak4jetpuppi.jetsrc = cms.InputTag('slimmedJetsPuppi') +ak4jetpuppi.jetname = cms.string('JetInfoPuppi') +ak4jetpuppi.jettype = cms.string('AK4PFPuppi') +ak4jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK4PFPuppi') +ak4jetpuppi.jetidversion = cms.string('WINTER17PUPPI') #------------------------------------------------------------------------- # AK8/CA8 jet common settings #------------------------------------------------------------------------- ak8jetpuppi = jetcommon.clone() -ak8jetpuppi.jetname = cms.string('JetAK8Puppi') -ak8jetpuppi.jettype = cms.string('AK8PFPuppi') -ak8jetpuppi.jetsrc = cms.InputTag('slimmedJetsAK8') -ak8jetpuppi.subjetsrc = cms.InputTag('slimmedJetsAK8PFPuppiSoftDropPacked', 'SubJets', 'RECO') +ak8jetpuppi.jetname = cms.string('JetAK8Puppi') +ak8jetpuppi.jettype = cms.string('AK8PFPuppi') +ak8jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK8PFPuppi') +ak8jetpuppi.subjetsrc = cms.InputTag('slimmedJetsAK8PFPuppiSoftDropPacked', 'SubJets', 'RECO') +ak8jetpuppi.jetidversion = cms.string('WINTER17PUPPI') ca8jetpuppi = jetcommon.clone() -ca8jetpuppi.jetname = cms.string('JetCA8Puppi') -ca8jetpuppi.jettype = cms.string('AK8PFPuppi') -ca8jetpuppi.jetsrc = cms.InputTag('slimmedJetsAK8') -ca8jetpuppi.subjetsrc = cms.InputTag('patJetsCMSTopTagPuppiPacked') +ca8jetpuppi.jetname = cms.string('JetCA8Puppi') +ca8jetpuppi.jettype = cms.string('AK8PFPuppi') +ca8jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK8PFPuppi') +ca8jetpuppi.subjetsrc = cms.InputTag('patJetsCMSTopTagPuppiPacked') +ca8jetpuppi.jetidversion = cms.string('WINTER17PUPPI') diff --git a/python/Ntuplizer18_cfi.py b/python/Ntuplizer18_cfi.py index 4d7caeb..47dc87b 100644 --- a/python/Ntuplizer18_cfi.py +++ b/python/Ntuplizer18_cfi.py @@ -23,8 +23,9 @@ evtgenbase = cms.PSet( rhosrc = rhosrc, rhonofastjetsrc = rhonofastjetsrc, - metsrc = cms.InputTag('slimmedMETs'), + metsrc = cms.InputTag('slimmedMETsUpdated'), puppimetsrc = cms.InputTag('slimmedMETsPuppi'), + #puppimetsrc = cms.InputTag('slimmedMETsPuppiUpdated'), pusrc = cms.InputTag('slimmedAddPileupInfo'), beamspotsrc = beamspotsrc, prefwgtsrc = cms.InputTag('prefiringweight:nonPrefiringProb'), @@ -133,39 +134,44 @@ # Jet settings #------------------------------------------------------------------------------- jetcommon = cms.PSet( - jetname=cms.string('JetInfo'), - jettype=cms.string(''), - muonsrc=cms.InputTag('slimmedMuons'), - vtxsrc=vtxsrc, - rhosrc=rhosrc, - jetsrc=cms.InputTag(''), - subjetsrc=cms.InputTag(''), - jecversion=cms.string(''), + jetname = cms.string('JetInfo'), + jettype = cms.string(''), + jetidversion = cms.string(''), + muonsrc = cms.InputTag('slimmedMuons'), + vtxsrc = vtxsrc, + rhosrc = rhosrc, + jetsrc = cms.InputTag(''), + subjetsrc = cms.InputTag(''), + jecversion = cms.string(''), ) #------------------------------------------------------------------------- # AK4 Jet common settings #------------------------------------------------------------------------- ak4jetbase = jetcommon.clone() -ak4jetbase.jettype = cms.string('AK4PFchs') -ak4jetbase.jetsrc = cms.InputTag('slimmedJets') +ak4jetbase.jettype = cms.string('AK4PFchs') +ak4jetbase.jetsrc = cms.InputTag('selectedPatJetsAK4PFCHS') +ak4jetbase.jetidversion = cms.string('SUMMER18') ak4jetpuppi = jetcommon.clone() -ak4jetpuppi.jetname = cms.string('JetInfoPuppi') -ak4jetpuppi.jettype = cms.string('AK4PFPuppi') -ak4jetpuppi.jetsrc = cms.InputTag('slimmedJetsPuppi') +ak4jetpuppi.jetname = cms.string('JetInfoPuppi') +ak4jetpuppi.jettype = cms.string('AK4PFPuppi') +ak4jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK4PFPuppi') +ak4jetpuppi.jetidversion = cms.string('SUMMER18PUPPI') #------------------------------------------------------------------------- # AK8/CA8 jet common settings #------------------------------------------------------------------------- ak8jetpuppi = jetcommon.clone() -ak8jetpuppi.jetname = cms.string('JetAK8Puppi') -ak8jetpuppi.jettype = cms.string('AK8PFPuppi') -ak8jetpuppi.jetsrc = cms.InputTag('slimmedJetsAK8') -ak8jetpuppi.subjetsrc = cms.InputTag('slimmedJetsAK8PFPuppiSoftDropPacked', 'SubJets', 'RECO') +ak8jetpuppi.jetname = cms.string('JetAK8Puppi') +ak8jetpuppi.jettype = cms.string('AK8PFPuppi') +ak8jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK8PFPuppi') +ak8jetpuppi.subjetsrc = cms.InputTag('slimmedJetsAK8PFPuppiSoftDropPacked', 'SubJets', 'RECO') +ak8jetpuppi.jetidversion = cms.string('SUMMER18PUPPI') ca8jetpuppi = jetcommon.clone() -ca8jetpuppi.jetname = cms.string('JetCA8Puppi') -ca8jetpuppi.jettype = cms.string('AK8PFPuppi') -ca8jetpuppi.jetsrc = cms.InputTag('slimmedJetsAK8') -ca8jetpuppi.subjetsrc = cms.InputTag('patJetsCMSTopTagPuppiPacked') +ca8jetpuppi.jetname = cms.string('JetCA8Puppi') +ca8jetpuppi.jettype = cms.string('AK8PFPuppi') +ca8jetpuppi.jetsrc = cms.InputTag('selectedPatJetsAK8PFPuppi') +ca8jetpuppi.subjetsrc = cms.InputTag('patJetsCMSTopTagPuppiPacked') +ca8jetpuppi.jetidversion = cms.string('SUMMER18PUPPI') diff --git a/python/bprimeKit_Data17Jul2018.py b/python/bprimeKit_Data17Jul2018.py index 47d48e3..ffe1490 100644 --- a/python/bprimeKit_Data17Jul2018.py +++ b/python/bprimeKit_Data17Jul2018.py @@ -15,7 +15,7 @@ #------------------------------------------------------------------------------- Year = '2016' isData = True -GlobalTag = '94X_dataRun2_v10' +GlobalTag = '102X_dataRun2_v12' #------------------------------------------------------------------------------- # BprimeKit input tags diff --git a/python/bprimeKit_Data12Nov2019_RunII_UL2018.py b/python/bprimeKit_Data17Sep2018.py similarity index 97% rename from python/bprimeKit_Data12Nov2019_RunII_UL2018.py rename to python/bprimeKit_Data17Sep2018.py index 07086be..91249c5 100644 --- a/python/bprimeKit_Data12Nov2019_RunII_UL2018.py +++ b/python/bprimeKit_Data17Sep2018.py @@ -15,7 +15,7 @@ #------------------------------------------------------------------------------- Year = '2018' isData = True -GlobalTag = '106X_dataRun2_v24' +GlobalTag = '102X_dataRun2_v12' #------------------------------------------------------------------------------- # BprimeKit input tags diff --git a/python/bprimeKit_Data09Aug2019_RunII_UL2017.py b/python/bprimeKit_Data31Mar2018.py similarity index 97% rename from python/bprimeKit_Data09Aug2019_RunII_UL2017.py rename to python/bprimeKit_Data31Mar2018.py index ffded96..85c546c 100644 --- a/python/bprimeKit_Data09Aug2019_RunII_UL2017.py +++ b/python/bprimeKit_Data31Mar2018.py @@ -15,7 +15,7 @@ #------------------------------------------------------------------------------- Year = '2017' isData = True -GlobalTag = '106X_dataRun2_v20' +GlobalTag = '102X_dataRun2_v12' #------------------------------------------------------------------------------- # BprimeKit input tags diff --git a/python/bprimeKit_DataRun2018_PromptReco.py b/python/bprimeKit_DataRun2018_PromptReco.py new file mode 100644 index 0000000..c90290b --- /dev/null +++ b/python/bprimeKit_DataRun2018_PromptReco.py @@ -0,0 +1,49 @@ +#******************************************************************************* + # + # Filename : bprimeKit_MC_76X.py + # Description : Default settings for 76X + # Author : Yi-Mu 'Enoch' Chen [ ensc@hep1.phys.ntu.edu.tw ] + # + # Ditching original cfg framework 2016-03 + # +#******************************************************************************* +import FWCore.ParameterSet.Config as cms +import bpkFrameWork.bprimeKit.Ntuplizer18_cfi as ntpl + +#------------------------------------------------------------------------------- +# Additional tag settings +#------------------------------------------------------------------------------- +Year = '2018' +isData = True +GlobalTag = '102X_dataRun2_Prompt_v15' + +#------------------------------------------------------------------------------- +# BprimeKit input tags +#------------------------------------------------------------------------------- +bprimeKit = cms.EDAnalyzer( + 'bprimeKit', + + lherunsrc=cms.InputTag('externalLHEProducer'), + + evtgensetting = ntpl.evtgenbase, + vtxsetting = ntpl.vertexbase, + triggersetting = ntpl.triggerbase, + + #----- Photon information ----------------------------------------------- + photonsettings = cms.VPSet( + ntpl.photonbase + ), + + #----- Lepton related information --------------------------------------- + leptonsettings=cms.VPSet( + ntpl.leptonbase + ), + + #----- Jet Information -------------------------------------------------- + jetsettings=cms.VPSet( + ntpl.ak4jetbase, + ntpl.ak4jetpuppi, + ntpl.ak8jetpuppi, + ntpl.ca8jetpuppi + ) +) diff --git a/python/bprimeKit_MC_RunIISummer19UL18.py b/python/bprimeKit_MC_RunIIAutumn18.py similarity index 94% rename from python/bprimeKit_MC_RunIISummer19UL18.py rename to python/bprimeKit_MC_RunIIAutumn18.py index ad340c3..d0e15c5 100644 --- a/python/bprimeKit_MC_RunIISummer19UL18.py +++ b/python/bprimeKit_MC_RunIIAutumn18.py @@ -8,14 +8,14 @@ # #******************************************************************************* import FWCore.ParameterSet.Config as cms -import bpkFrameWork.bprimeKit.Ntuplizer17_cfi as ntpl +import bpkFrameWork.bprimeKit.Ntuplizer18_cfi as ntpl #------------------------------------------------------------------------------- # Additional tag settings #------------------------------------------------------------------------------- Year = '2018' isData = False -GlobalTag = '106X_upgrade2018_realistic_v11_L1v1' +GlobalTag = '102X_upgrade2018_realistic_v20' #------------------------------------------------------------------------------- #MET Filter Tag for MC diff --git a/python/bprimeKit_MC_RunIISummer19UL17.py b/python/bprimeKit_MC_RunIIFall17.py similarity index 97% rename from python/bprimeKit_MC_RunIISummer19UL17.py rename to python/bprimeKit_MC_RunIIFall17.py index be8fe59..9a35400 100644 --- a/python/bprimeKit_MC_RunIISummer19UL17.py +++ b/python/bprimeKit_MC_RunIIFall17.py @@ -15,7 +15,7 @@ #------------------------------------------------------------------------------- Year = '2017' isData = False -GlobalTag = '106X_mc2017_realistic_v6' +GlobalTag = '102X_mc2017_realistic_v7' #------------------------------------------------------------------------------- #MET Filter Tag for MC diff --git a/python/bprimeKit_MC_RunIISummer16.py b/python/bprimeKit_MC_RunIISummer16.py index 27cd6e9..96fcd05 100644 --- a/python/bprimeKit_MC_RunIISummer16.py +++ b/python/bprimeKit_MC_RunIISummer16.py @@ -15,7 +15,7 @@ #------------------------------------------------------------------------------- Year = '2016' isData = False -GlobalTag = '94X_mcRun2_asymptotic_v3' +GlobalTag = '102X_mcRun2_asymptotic_v7' #------------------------------------------------------------------------------- #MET Filter Tag for MC diff --git a/python/datasetparser.py b/python/datasetparser.py index 49a9539..1070366 100644 --- a/python/datasetparser.py +++ b/python/datasetparser.py @@ -8,16 +8,19 @@ import re def getdataprocess( dataset ): - if re.match( r'/.*/Run2018.*12Nov2019_UL2018.*/MINIAOD', dataset ): - return 'Data12Nov2019_RunII_UL2018' - elif re.match( r'/.*/Run2017.*09Aug2019_UL2017.*/MINIAOD', dataset ): - return 'Data09Aug2019_RunII_UL2017' + + if re.match( r'/.*/Run2018D.*-PromptReco.*/MINIAOD', dataset ): + return 'DataRun2018_PromptReco' + elif re.match( r'/.*/Run2018.*-17Sep2018.*/MINIAOD', dataset ): + return 'Data17Sep2018' + elif re.match( r'/.*/Run2017.*31Mar2018.*/MINIAOD', dataset ): + return 'Data31Mar2018' elif re.match( r'/.*/Run2016.*17Jul2018.*/MINIAOD', dataset ): return 'Data17Jul2018' - elif re.match( r'/.*/RunIISummer19UL18.*/MINIAODSIM', dataset ): - return 'MC_RunIISummer19UL18' - elif re.match( r'/.*/RunIISummer19UL17.*/MINIAODSIM', dataset ): - return 'MC_RunIISummer19UL17' + elif re.match( r'/.*/RunIIAutumn18MiniAOD.*/MINIAODSIM', dataset ): + return 'MC_RunIIAutumn18' + elif re.match( r'/.*/RunIIFall17.*12Apr2018.*/MINIAODSIM', dataset ): + return 'MC_RunIIFall17' elif re.match( r'/.*/RunIISummer16MiniAODv3.*/MINIAODSIM', dataset ): return 'MC_RunIISummer16' else: diff --git a/python/jetmet_settings.py b/python/jetmet_settings.py new file mode 100644 index 0000000..73f6c4a --- /dev/null +++ b/python/jetmet_settings.py @@ -0,0 +1,108 @@ +#******************************************************************************* + # + # Filename : jettoolbox_settings.py + # Description : Configuration settings for jet settings + # Author : Yi-Mu 'Enoch' Chen [ ensc@hep1.phys.ntu.edu.tw ] + # +#******************************************************************************* +import FWCore.ParameterSet.Config as cms +from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection +from JMEAnalysis.JetToolbox.jetToolbox_cff import jetToolbox +from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD + +listBtagDiscriminators = [ + #AK8 double b-tagging discriminator + 'pfBoostedDoubleSecondaryVertexAK8BJetTags', + 'pfMassIndependentDeepDoubleBvLJetTags:probHbb', + #Deep CSV + 'pfDeepCSVJetTags:probb', + 'pfDeepCSVJetTags:probbb', + 'pfDeepCSVJetTags:probc', + 'pfDeepCSVJetTags:probudsg' +] + +listBtagDiscriminatorsDeepFlavour = [ + 'pfDeepFlavourJetTags:probb', + 'pfDeepFlavourJetTags:probbb', + 'pfDeepFlavourJetTags:problepb', + 'pfDeepFlavourJetTags:probc', + 'pfDeepFlavourJetTags:probuds', + 'pfDeepFlavourJetTags:probg' +] + +def jet_settings( process , runMC ): + + JETCorrLevels = ['L2Relative', 'L3Absolute'] + + if not runMC: + JETCorrLevels += ['L2L3Residual'] + + jetToolbox( process, 'ak4', 'JetToolBoxSequence', 'noOutput', + updateCollection = 'slimmedJets', + PUMethod = 'CHS', + dataTier = 'miniAOD', + JETCorrPayload = 'AK4PFchs', + JETCorrLevels = ['L1FastJet'] + JETCorrLevels, + bTagDiscriminators = listBtagDiscriminators + listBtagDiscriminatorsDeepFlavour, + addQGTagger = True, + runOnMC = runMC + ) + + jetToolbox( process, 'ak4', 'JetToolBoxSequence', 'noOutput', + updateCollection = 'slimmedJetsPuppi', + PUMethod = 'Puppi', + dataTier = 'miniAOD', + JETCorrPayload = 'AK4PFPuppi', + JETCorrLevels = JETCorrLevels, + bTagDiscriminators = listBtagDiscriminators + listBtagDiscriminatorsDeepFlavour, + runOnMC = runMC + ) + + jetToolbox( process, 'ak8', 'JetToolBoxSequence', 'noOutput', + updateCollection = 'slimmedJetsAK8', + updateCollectionSubjets = 'slimmedJetsAK8PFPuppiSoftDropPacked:SubJets', + PUMethod = 'Puppi', + dataTier = 'miniAOD', + JETCorrPayload = 'AK8PFPuppi', + subJETCorrPayload = 'AK4PFPuppi', + JETCorrLevels = JETCorrLevels, + subJETCorrLevels = JETCorrLevels, + bTagDiscriminators = listBtagDiscriminators + listBtagDiscriminatorsDeepFlavour, + subjetBTagDiscriminators= ['pfDeepCSVJetTags:probb', 'pfDeepCSVJetTags:probbb'], + runOnMC = runMC + ) + + jetToolbox( process, 'ca8', 'JetToolBoxSequence', 'noOutput', + PUMethod = 'Puppi', + addMassDrop = True, + addCMSTopTagger = True, + GetJetMCFlavour = True, + GetSubjetMCFlavour = True, + bTagDiscriminators = listBtagDiscriminators, + runOnMC = runMC + ) + +def met_settings( process, runData, is2017 = False ): + + runMetCorAndUncFromMiniAOD( + process, + isData = runData, + fixEE2017 = is2017, + fixEE2017Params = {'userawPt': True, 'ptThreshold':50.0, 'minEtaThreshold':2.65, 'maxEtaThreshold': 3.139} if is2017 else None, + postfix = 'Updated' + ) + + from PhysicsTools.PatAlgos.slimming.puppiForMET_cff import makePuppiesFromMiniAOD + makePuppiesFromMiniAOD( process, True ) + + runMetCorAndUncFromMiniAOD( + process, + isData = runData, + metType = 'Puppi', + jetFlavor = 'AK4PFPuppi', + postfix = 'PuppiUpdated' + ) + + MetSequence = cms.Sequence( process.puppiMETSequence * process.fullPatMetSequenceUpdated * process.fullPatMetSequencePuppiUpdated ) + #MetSequence = cms.Sequence( process.fullPatMetSequenceUpdated ) + setattr( process, 'MetSequence', MetSequence ) diff --git a/python/jettoolbox_settings.py b/python/jettoolbox_settings.py deleted file mode 100644 index f36f2d3..0000000 --- a/python/jettoolbox_settings.py +++ /dev/null @@ -1,61 +0,0 @@ -#******************************************************************************* - # - # Filename : jettoolbox_settings.py - # Description : Configuration settings for jet settings - # Author : Yi-Mu 'Enoch' Chen [ ensc@hep1.phys.ntu.edu.tw ] - # -#******************************************************************************* -import FWCore.ParameterSet.Config as cms -from JMEAnalysis.JetToolbox.jetToolbox_cff import jetToolbox - -listBtagDiscriminators = [ - #AK8 double b-tagging discriminator - 'pfBoostedDoubleSecondaryVertexAK8BJetTags', - 'pfMassIndependentDeepDoubleBvLJetTags:probHbb', - #Deep CSV - 'pfDeepCSVJetTags:probb', - 'pfDeepCSVJetTags:probbb', - 'pfDeepCSVJetTags:probc', - 'pfDeepCSVJetTags:probudsg' -] - -def jettoolbox_settings( process , runMC ): - - process.load('CommonTools/PileupAlgos/Puppi_cff') - process.puppi.candName = cms.InputTag('packedPFCandidates') - process.puppi.vertexName = cms.InputTag('offlineSlimmedPrimaryVertices') - process.puppi.useExistingWeights = cms.bool(True) - - jetToolbox( process, 'ca8', 'ca8puppi', 'edmOut', - runOnMC = runMC, - PUMethod = 'Puppi', - newPFCollection = True, - nameNewPFCollection = 'puppi', - addMassDrop = True, - addCMSTopTagger = True, - GetJetMCFlavour = True, - GetSubjetMCFlavour = True, - bTagDiscriminators = listBtagDiscriminators, - Cut = '' - ) - - #Additional QGTagger Information - #How to include QGL database : https://twiki.cern.ch/twiki/bin/view/CMS/QuarkGluonLikelihood#Step_0_Load_database_object_only - from CondCore.DBCommon.CondDBSetup_cfi import CondDBSetup - - #Latest QGL database : https://twiki.cern.ch/twiki/bin/view/CMS/QuarkGluonLikelihood#2017_data_CMSSW_9_4_X_training - process.QGPoolDBESSource = cms.ESSource("PoolDBESSource", - CondDBSetup, - toGet = cms.VPSet( - cms.PSet( - record = cms.string('QGLikelihoodRcd'), - tag = cms.string('QGLikelihoodObject_v1_AK4'), - label = cms.untracked.string('QGL_AK4PFchs') - ), - ), - connect = cms.string('sqlite_fip:bpkFrameWork/bprimeKit/data/QGL_AK4chs_94X.db') - ) - process.es_prefer_qg = cms.ESPrefer('PoolDBESSource','QGPoolDBESSource') - - JetToolBoxSequence = cms.Sequence( process.jetTask ) - setattr( process, 'JetToolBoxSequence', JetToolBoxSequence) diff --git a/setup.sh b/setup.sh index 5f36293..7521c96 100755 --- a/setup.sh +++ b/setup.sh @@ -4,17 +4,13 @@ echo echo "Welcome to the bprimekit setup script!" echo -#echo "set up fixing codes for the electron energy scale and smearing interacts with the ECAL-tracker combination" -#git cms-merge-topic cms-egamma:EgammaPostRecoTools -#echo +echo "set up fixing codes for the electron energy scale and smearing interacts with the ECAL-tracker combination" +git clone git@github.com:cms-egamma/EgammaPostRecoTools.git EgammaUser/EgammaPostRecoTools +echo echo "Set up JetToolBox" -git clone https://github.com/cms-jet/JetToolbox.git JMEAnalysis/JetToolbox -b jetToolbox_94X_v3 +git clone git@github.com:cms-jet/JetToolbox.git JMEAnalysis/JetToolbox -b jetToolbox_102X_v3 echo -#echo "Set up MET bug fixing code" -#git cms-merge-topic cms-met:METFixEE2017_949_v2 -#echo - echo "Done with setup script! You still need to build!" echo diff --git a/src/JetNtuplizer.cc b/src/JetNtuplizer.cc index d0f5911..5db226a 100644 --- a/src/JetNtuplizer.cc +++ b/src/JetNtuplizer.cc @@ -9,6 +9,8 @@ // ----- Jet Specific CMSSW packages --------------------------------------------------------------- #include "FWCore/Framework/interface/ESHandle.h" +#include "PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h" + #include "CondFormats/JetMETObjects/interface/JetCorrectionUncertainty.h" #include "CondFormats/JetMETObjects/interface/JetCorrectorParameters.h" #include "JetMETCorrections/Modules/interface/JetResolution.h" @@ -32,6 +34,7 @@ JetNtuplizer::JetNtuplizer( const edm::ParameterSet& iConfig, bprimeKit* bpk ) : NtuplizerBase( iConfig, bpk ), _jetname( iConfig.getParameter( "jetname" ) ), _jettype( iConfig.getParameter( "jettype" ) ), + _jetidversion( iConfig.getParameter( "jetidversion" ) ), _jecversion( iConfig.getParameter( "jecversion" ) ), _rhotoken( GetToken( "rhosrc" ) ), _vtxtoken( GetToken >( "vtxsrc" ) ), @@ -141,6 +144,11 @@ JetNtuplizer::Analyze( const edm::Event& iEvent, const edm::EventSetup& iSetup ) JetInfo.JM[JetInfo.Size] = it_jet->chargedMultiplicity() + it_jet->neutralMultiplicity(); } + // ----- Jet ID ----------------------------------------------------------------- + JetInfo.JetIDLOOSE[JetInfo.Size] = GetJetID( *it_jet, _jetidversion, "LOOSE" ); + JetInfo.JetIDTIGHT[JetInfo.Size] = GetJetID( *it_jet, _jetidversion, "TIGHT" ); + JetInfo.JetIDTIGHTLEPVETO[JetInfo.Size] = GetJetID( *it_jet, _jetidversion, "TIGHTLEPVETO" ); + // ----- B Tagging discriminators ------------------------------------------------------------------ JetInfo.pfBoostedDoubleSecondaryVertexAK8BJetTags[JetInfo.Size] = it_jet->bDiscriminator( "pfBoostedDoubleSecondaryVertexAK8BJetTags" ); @@ -211,7 +219,7 @@ JetNtuplizer::Analyze( const edm::Event& iEvent, const edm::EventSetup& iSetup ) // ------------------------------------------------------------------------------ if( IsAK4() ){ if( _jetname == "JetInfo" ){ - JetInfo.QGTagsLikelihood [JetInfo.Size] = it_jet->userFloat( "QGTagger:qgLikelihood" ); + JetInfo.QGTagsLikelihood [JetInfo.Size] = it_jet->userFloat( "QGTaggerAK4PFCHS:qgLikelihood" ); JetInfo.PUJetIDfullDiscriminant [JetInfo.Size] = it_jet->userFloat( "pileupJetId:fullDiscriminant" ); JetInfo.PUJetIDcutbased [JetInfo.Size] = it_jet->userInt( "pileupJetId:fullId" ); } else if ( _jetname == "JetInfoPuppi" ){ @@ -328,6 +336,18 @@ JetNtuplizer::GetSubjetBunch( const vector::const_iterator& mainjet ) return _subjethandle->end(); } +bool +JetNtuplizer::GetJetID( const pat::Jet& jet, string version, string level ) const +{ + if( level == "LOOSE" ) version = "WINTER16"; + + edm::ParameterSet jetidParam; + jetidParam.addParameter( "version", version ); + jetidParam.addParameter( "quality", level ); + PFJetIDSelectionFunctor jetID( jetidParam ); + return jetID( jet ); +} + /******************************************************************************* * Jet type parsing functions *******************************************************************************/ diff --git a/src/LeptonNtuplizer_Electron.cc b/src/LeptonNtuplizer_Electron.cc index b69db7e..b12fa14 100644 --- a/src/LeptonNtuplizer_Electron.cc +++ b/src/LeptonNtuplizer_Electron.cc @@ -126,23 +126,23 @@ LeptonNtuplizer::FillElectron( const edm::Event& iEvent, const edm::EventSetup& LepInfo.Ip3dPVSignificance [LepInfo.Size] = hasPV ? it_el->dB(pat::Electron::PV3D) / it_el->edB(pat::Electron::PV3D) : max_value; // ----- Basic variables ----- - LepInfo.isEcalDriven [LepInfo.Size] = it_el->ecalDrivenSeed(); - LepInfo.isTrackerDriven [LepInfo.Size] = it_el->trackerDrivenSeed(); - LepInfo.ElTightCharge [LepInfo.Size] = it_el->isGsfScPixChargeConsistent() + it_el->isGsfCtfScPixChargeConsistent(); - LepInfo.ElMomentum [LepInfo.Size] = it_el->trackMomentumAtVtx().R(); - LepInfo.ElMomentumErr [LepInfo.Size] = it_el->trackMomentumError(); - LepInfo.ElTrackPt [LepInfo.Size] = it_el->gsfTrack()->pt(); - LepInfo.ElTrackEta [LepInfo.Size] = it_el->gsfTrack()->eta(); - LepInfo.ElTrackPhi [LepInfo.Size] = it_el->gsfTrack()->phi(); - LepInfo.ElTrackDz [LepInfo.Size] = hasPV ? it_el->gsfTrack()->dz( _vtxhandle->front().position() ) : max_value; - LepInfo.ElTrackDxy [LepInfo.Size] = hasPV ? it_el->gsfTrack()->dxy( _vtxhandle->front().position() ) : max_value; - LepInfo.ElTrackNormalizedChi2 [LepInfo.Size] = it_el->gsfTrack().isNonnull() ? + LepInfo.isEcalDriven [LepInfo.Size] = it_el->ecalDrivenSeed(); + LepInfo.isTrackerDriven [LepInfo.Size] = it_el->trackerDrivenSeed(); + LepInfo.ElTightCharge [LepInfo.Size] = it_el->isGsfScPixChargeConsistent() + it_el->isGsfCtfScPixChargeConsistent(); + LepInfo.ElMomentum [LepInfo.Size] = it_el->trackMomentumAtVtx().R(); + LepInfo.ElMomentumErr [LepInfo.Size] = it_el->trackMomentumError(); + LepInfo.ElTrackPt [LepInfo.Size] = it_el->gsfTrack()->pt(); + LepInfo.ElTrackEta [LepInfo.Size] = it_el->gsfTrack()->eta(); + LepInfo.ElTrackPhi [LepInfo.Size] = it_el->gsfTrack()->phi(); + LepInfo.ElTrackDz [LepInfo.Size] = hasPV ? it_el->gsfTrack()->dz( _vtxhandle->front().position() ) : max_value; + LepInfo.ElTrackDxy [LepInfo.Size] = hasPV ? it_el->gsfTrack()->dxy( _vtxhandle->front().position() ) : max_value; + LepInfo.ElTrackNormalizedChi2 [LepInfo.Size] = it_el->gsfTrack().isNonnull() ? it_el->gsfTrack()->normalizedChi2() : max_value; - LepInfo.ElNTrackLayersWMeasurement [LepInfo.Size] = it_el->gsfTrack()->hitPattern().trackerLayersWithMeasurement(); - LepInfo.ElTrackNHits [LepInfo.Size] = it_el->gsfTrack()->hitPattern().numberOfValidHits(); - LepInfo.NumberOfExpectedInnerHits [LepInfo.Size] - = it_el->gsfTrack()->hitPattern().numberOfAllHits( reco::HitPattern::MISSING_INNER_HITS ); - LepInfo.ElhasConv [LepInfo.Size] = ! it_el->passConversionVeto(); + LepInfo.ElNTrackLayersWMeasurement [LepInfo.Size] = it_el->gsfTrack()->hitPattern().trackerLayersWithMeasurement(); + LepInfo.ElTrackNHits [LepInfo.Size] = it_el->gsfTrack()->hitPattern().numberOfValidHits(); + LepInfo.NumberOfExpectedMissingInnerHits [LepInfo.Size] + = it_el->gsfTrack()->hitPattern().numberOfLostHits( reco::HitPattern::MISSING_INNER_HITS ); + LepInfo.ElhasConv [LepInfo.Size] = ! it_el->passConversionVeto(); // ----- Electron track Bremsstrahlung informations ----- LepInfo.ElClassification [LepInfo.Size] = it_el->classification();