Clusters hadrons, partons, and jet contituents to determine the jet flavour. More...
#include <PhysicsTools/JetMCAlgos/plugins/JetFlavourClustering.cc>
Public Member Functions | |
JetFlavourClustering (const edm::ParameterSet &) | |
~JetFlavourClustering () override | |
Public Member Functions inherited from edm::stream::EDProducer<> | |
EDProducer ()=default | |
EDProducer (const EDProducer &)=delete | |
bool | hasAbilityToProduceInBeginLumis () const final |
bool | hasAbilityToProduceInBeginProcessBlocks () const final |
bool | hasAbilityToProduceInBeginRuns () const final |
bool | hasAbilityToProduceInEndLumis () const final |
bool | hasAbilityToProduceInEndProcessBlocks () const final |
bool | hasAbilityToProduceInEndRuns () const final |
const EDProducer & | operator= (const EDProducer &)=delete |
Static Public Member Functions | |
static void | fillDescriptions (edm::ConfigurationDescriptions &descriptions) |
Private Member Functions | |
void | assignToSubjets (const reco::GenParticleRefVector &clusteredParticles, const edm::Handle< edm::View< reco::Jet >> &subjets, const std::vector< int > &subjetIndices, std::vector< reco::GenParticleRefVector > &assignedParticles) |
void | insertGhosts (const edm::Handle< reco::GenParticleRefVector > &particles, const double ghostRescaling, const bool isHadron, const bool isbHadron, const bool isParton, const bool isLepton, std::vector< fastjet::PseudoJet > &constituents) |
void | matchGroomedJets (const edm::Handle< edm::View< reco::Jet >> &jets, const edm::Handle< edm::View< reco::Jet >> &matchedJets, std::vector< int > &matchedIndices) |
void | matchReclusteredJets (const edm::Handle< edm::View< reco::Jet >> &jets, const std::vector< fastjet::PseudoJet > &matchedJets, std::vector< int > &matchedIndices) |
void | matchSubjets (const std::vector< int > &groomedIndices, const edm::Handle< edm::View< reco::Jet >> &groomedJets, const edm::Handle< edm::View< reco::Jet >> &subjets, std::vector< std::vector< int >> &matchedIndices) |
void | produce (edm::Event &, const edm::EventSetup &) override |
void | setFlavours (const reco::GenParticleRefVector &clusteredbHadrons, const reco::GenParticleRefVector &clusteredcHadrons, const reco::GenParticleRefVector &clusteredPartons, int &hadronFlavour, int &partonFlavour) |
Private Attributes | |
const edm::EDGetTokenT< reco::GenParticleRefVector > | bHadronsToken_ |
const edm::EDGetTokenT< reco::GenParticleRefVector > | cHadronsToken_ |
ClusterSequencePtr | fjClusterSeq_ |
JetDefPtr | fjJetDefinition_ |
const double | ghostRescaling_ |
edm::EDGetTokenT< edm::View< reco::Jet > > | groomedJetsToken_ |
const bool | hadronFlavourHasPriority_ |
const std::string | jetAlgorithm_ |
const double | jetPtMin_ |
const edm::EDGetTokenT< edm::View< reco::Jet > > | jetsToken_ |
edm::EDGetTokenT< reco::GenParticleRefVector > | leptonsToken_ |
const edm::EDGetTokenT< reco::GenParticleRefVector > | partonsToken_ |
const double | relPtTolerance_ |
const double | rParam_ |
edm::EDGetTokenT< edm::View< reco::Jet > > | subjetsToken_ |
const bool | useLeptons_ |
const bool | useSubjets_ |
edm::EDGetTokenT< edm::ValueMap< float > > | weightsToken_ |
Additional Inherited Members | |
Public Types inherited from edm::stream::EDProducer<> | |
using | CacheTypes = CacheContexts< T... > |
using | GlobalCache = typename CacheTypes::GlobalCache |
using | HasAbility = AbilityChecker< T... > |
using | InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache |
using | LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache |
using | LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache > |
using | LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache |
using | RunCache = typename CacheTypes::RunCache |
using | RunContext = RunContextT< RunCache, GlobalCache > |
using | RunSummaryCache = typename CacheTypes::RunSummaryCache |
Clusters hadrons, partons, and jet contituents to determine the jet flavour.
This producer clusters hadrons, partons and jet contituents to determine the jet flavour. The jet flavour information is stored in the event as an AssociationVector which associates an object of type JetFlavourInfo to each of the jets.
The producer takes as input jets and hadron and partons selected by the HadronAndPartonSelector producer. The hadron and parton four-momenta are rescaled by a very small number (default rescale factor is 10e-18) which turns them into the so-called "ghosts". The "ghost" hadrons and partons are clustered together with all of the jet constituents. It is important to use the same clustering algorithm and jet size as for the original input jet collection. Since the "ghost" hadrons and partons are extremely soft, the resulting jet collection will be practically identical to the original one but now with "ghost" hadrons and partons clustered inside jets. The jet flavour is determined based on the "ghost" hadrons clustered inside a jet:
To further assign a more specific flavour to light-flavour jets, "ghost" partons are used:
In rare instances a conflict between the hadron- and parton-based flavours can occur. In such cases it is possible to keep both flavours or to give priority to the hadron-based flavour. This is controlled by the 'hadronFlavourHasPriority' switch. The priority is given to the hadron-based flavour as follows:
The producer is also capable of assigning the flavour to subjets of fat jets, in which case it produces an additional AssociationVector providing the flavour information for subjets. In order to assign the flavour to subjets, three input jet collections are required:
The "ghost" hadrons and partons clustered inside a fat jet are assigned to the closest subjet in the rapidity-phi space. Once hadrons and partons have been assigned to subjets, the subjet flavour is determined in the same way as for jets. The reason for requiring three jet collections as input in order to determine the subjet flavour is to avoid possible inconsistencies between the fat jet and subjet flavours (such as a non-b fat jet having a b subjet and vice versa) as well as the fact that re-clustering the constituents of groomed fat jets will generally result in a jet collection different from the input groomed fat jets. Also note that "ghost" particles generally cannot be clustered inside subjets in the same way this is done for fat jets. This is because some of the jet grooming techniques could reject such very soft particle. So instead, the "ghost" particles are assigned to the closest subjet.
Finally, "ghost" leptons can also be clustered inside jets but they are not used in any way to determine the jet flavour. This functionality is optional and is potentially useful to identify jets from hadronic taus.
For more details, please refer to https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideBTagMCTools
Definition at line 144 of file JetFlavourClustering.cc.
|
explicit |
Definition at line 215 of file JetFlavourClustering.cc.
References Exception, edm::ParameterSet::existsAs(), fjJetDefinition_, edm::ParameterSet::getParameter(), groomedJetsToken_, jetAlgorithm_, leptonsToken_, rParam_, subjetsToken_, useLeptons_, useSubjets_, and weightsToken_.
|
override |
Definition at line 263 of file JetFlavourClustering.cc.
|
private |
Definition at line 731 of file JetFlavourClustering.cc.
References edm::RefVector< C, T, F >::begin(), reco::deltaR2(), HLT_2024v14_cff::distance, edm::RefVector< C, T, F >::end(), ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, and phi.
Referenced by produce().
|
static |
Definition at line 755 of file JetFlavourClustering.cc.
References edm::ConfigurationDescriptions::addDefault(), and submitPVResolutionJobs::desc.
|
private |
Definition at line 538 of file JetFlavourClustering.cc.
References AK4PFJetsMCFlavourInfos_cfi::ghostRescaling, reco::isLepton(), CandMCTagUtils::isParton(), ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, AlCaHLTBitMon_ParallelJobs::p, and ecalTrigSettings_cff::particles.
Referenced by produce().
|
private |
Definition at line 600 of file JetFlavourClustering.cc.
References reco::deltaR2(), HLT_2024v14_cff::distance, spr::find(), dqmiolumiharvest::j, PDWG_EXODelayedJetMET_cff::jets, rParam_, and mathSSE::sqrt().
Referenced by produce().
|
private |
Definition at line 559 of file JetFlavourClustering.cc.
References reco::deltaR2(), dqmiolumiharvest::j, PDWG_EXODelayedJetMET_cff::jets, rParam_, and mathSSE::sqrt().
Referenced by produce().
|
private |
Definition at line 648 of file JetFlavourClustering.cc.
References g, and alignCSCRings::s.
Referenced by produce().
|
overrideprivate |
Definition at line 273 of file JetFlavourClustering.cc.
References funct::abs(), assignToSubjets(), AK4GenJetFlavourInfos_cfi::bHadrons, bHadronsToken_, AK4GenJetFlavourInfos_cfi::cHadrons, cHadronsToken_, fjClusterSeq_, fjJetDefinition_, ghostRescaling_, groomedJetsToken_, custom_jme_cff::hadronFlavour, mps_fire::i, iEvent, insertGhosts(), edm::Ptr< T >::isAvailable(), GhostInfo::isbHadron(), GhostInfo::isHadron(), GhostInfo::isLepton(), edm::Ptr< T >::isNonnull(), GhostInfo::isParton(), edm::EDGetTokenT< T >::isUninitialized(), ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, GenHFHadronMatcher_cfi::jetFlavourInfos, jetPtMin_, PDWG_EXODelayedJetMET_cff::jets, jetsToken_, HLT_2024v14_cff::leptons, leptonsToken_, visualization-live-secondInstance_cfg::m, matchGroomedJets(), matchReclusteredJets(), matchSubjets(), eostools::move(), GhostInfo::particleRef(), custom_jme_cff::partonFlavour, dqmAnalyzer_cff::partons, partonsToken_, DiDispStaMuonMonitor_cfi::pt, edm::RefVector< C, T, F >::push_back(), relPtTolerance_, setFlavours(), subjetsToken_, useLeptons_, useSubjets_, w(), hltDeepSecondaryVertexTagInfosPFPuppi_cfi::weights, and weightsToken_.
|
private |
Definition at line 678 of file JetFlavourClustering.cc.
References funct::abs(), edm::RefVector< C, T, F >::begin(), edm::RefVector< C, T, F >::empty(), edm::RefVector< C, T, F >::end(), custom_jme_cff::hadronFlavour, hadronFlavourHasPriority_, CandMCTagUtils::isLightParton(), edm::Ref< C, T, F >::isNonnull(), edm::Ref< C, T, F >::isNull(), ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, and custom_jme_cff::partonFlavour.
Referenced by produce().
|
private |
Definition at line 188 of file JetFlavourClustering.cc.
Referenced by produce().
|
private |
Definition at line 189 of file JetFlavourClustering.cc.
Referenced by produce().
|
private |
Definition at line 204 of file JetFlavourClustering.cc.
Referenced by produce().
|
private |
Definition at line 205 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering(), and produce().
|
private |
Definition at line 197 of file JetFlavourClustering.cc.
Referenced by produce().
|
private |
Definition at line 186 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering(), and produce().
|
private |
Definition at line 199 of file JetFlavourClustering.cc.
Referenced by setFlavours().
|
private |
Definition at line 194 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering().
|
private |
Definition at line 196 of file JetFlavourClustering.cc.
Referenced by produce().
|
private |
Definition at line 185 of file JetFlavourClustering.cc.
Referenced by produce().
|
private |
Definition at line 192 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering(), and produce().
|
private |
Definition at line 190 of file JetFlavourClustering.cc.
Referenced by produce().
|
private |
Definition at line 198 of file JetFlavourClustering.cc.
Referenced by produce().
|
private |
Definition at line 195 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering(), matchGroomedJets(), and matchReclusteredJets().
|
private |
Definition at line 187 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering(), and produce().
|
private |
Definition at line 202 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering(), and produce().
|
private |
Definition at line 200 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering(), and produce().
|
private |
Definition at line 191 of file JetFlavourClustering.cc.
Referenced by JetFlavourClustering(), and produce().