 |
ATLAS Offline Software
|
#include <MCTruthClassifier.h>
|
| MCTruthClassifier (const std::string &type) |
|
virtual | ~MCTruthClassifier ()=default |
|
virtual StatusCode | initialize () override |
| Dummy implementation of the initialisation function. More...
|
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleTruthClassifier (const xAOD::TruthParticle *, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleHepMCTruthClassifier (const HepMcParticleLink &theLink, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleHepMCTruthClassifier (HepMC::ConstGenParticlePtr, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual const xAOD::TruthParticle * | getGenPart (const xAOD::TrackParticle *, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual const xAOD::TruthParticle * | egammaClusMatch (const xAOD::CaloCluster *, bool, MCTruthPartClassifier::Info *info) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleTruthClassifier (const xAOD::TrackParticle *, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleTruthClassifier (const xAOD::Electron *, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleTruthClassifier (const xAOD::Photon *, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleTruthClassifier (const xAOD::Muon *, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleTruthClassifier (const xAOD::CaloCluster *, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleTruthClassifier (const xAOD::Jet *, bool DR, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual void | print () const =0 |
| Print the state of the tool. More...
|
|
virtual void | print () const |
| Print the state of the tool. More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T, V, H > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
double | detEta (double x, double y) const |
|
double | detPhi (double x, double y) const |
|
bool | TruthLoopDetectionMethod1 (const xAOD::TruthVertex *childOrigVtx, const xAOD::TruthParticle *parent) const |
|
bool | TruthLoopDetectionMethod2 (const xAOD::TruthParticle *child, const xAOD::TruthParticle *parent) const |
|
bool | TruthLoopDetectionMethod3 (const xAOD::TruthVertex *childOrigVtx, const xAOD::TruthParticle *parent) const |
|
MCTruthPartClassifier::ParticleOrigin | defOrigOfElectron (const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, bool &isPrompt, MCTruthPartClassifier::Info &info) const |
|
MCTruthPartClassifier::ParticleOrigin | defOrigOfMuon (const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, bool &isPrompt, MCTruthPartClassifier::Info &info) const |
|
MCTruthPartClassifier::ParticleOrigin | defOrigOfTau (const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, int motherPDG, MCTruthPartClassifier::Info &info) const |
|
MCTruthPartClassifier::ParticleOrigin | defOrigOfPhoton (const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, bool &isPrompt, MCTruthPartClassifier::Info &info) const |
|
MCTruthPartClassifier::ParticleOrigin | defOrigOfNeutrino (const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, bool &isPrompt, MCTruthPartClassifier::Info &info) const |
|
bool | genPartToCalo (const EventContext &ctx, const xAOD::CaloCluster *clus, const xAOD::TruthParticle *thePart, bool isFwrdEle, double &dRmatch, bool &isNarrowCone, const CaloDetDescrManager &caloDDMgr) const |
|
double | fracParticleInJet (const xAOD::TruthParticle *, const xAOD::Jet *, bool DR, bool nparts) const |
|
void | findJetConstituents (const xAOD::Jet *, std::set< const xAOD::TruthParticle * > &constituents, bool DR) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
SG::ReadHandleKey< xAOD::TruthParticleContainer > | m_truthParticleContainerKey {this,"xAODTruthParticleContainerName","TruthParticles","ReadHandleKey for xAOD::TruthParticleContainer"} |
|
ToolHandle< Trk::IParticleCaloExtensionTool > | m_caloExtensionTool {this,"ParticleCaloExtensionTool",""} |
|
SG::ReadCondHandleKey< CaloDetDescrManager > | m_caloMgrKey {this,"CaloDetDescrManager",""} |
|
ToolHandle< xAOD::ITruthParticlesInConeTool > | m_truthInConeTool {this,"TruthInConeTool","xAOD::TruthParticlesInConeTool/TruthParticlesInConeTool"} |
|
bool | m_FwdElectronUseG4Sel |
|
float | m_FwdElectronTruthExtrEtaCut |
|
float | m_FwdElectronTruthExtrEtaWindowCut |
|
float | m_partExtrConeEta |
|
float | m_partExtrConePhi |
|
bool | m_useCaching |
|
float | m_phtClasConePhi |
|
float | m_phtClasConeEta |
|
float | m_phtdRtoTrCut |
|
float | m_fwrdEledRtoTrCut |
|
bool | m_ROICone |
|
float | m_pTChargePartCut |
|
float | m_pTNeutralPartCut |
|
bool | m_inclG4part |
|
SG::ReadHandleKey< xAODTruthParticleLinkVector > | m_truthLinkVecReadHandleKey {this,"xAODTruthLinkVector","xAODTruthLinks", "ReadHandleKey for xAODTruthParticleLinkVector"} |
|
float | m_deltaRMatchCut |
|
float | m_deltaPhiMatchCut |
|
int | m_NumOfSiHitsCut |
|
float | m_jetPartDRMatch |
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
Definition at line 55 of file MCTruthClassifier.h.
◆ StoreGateSvc_t
◆ MCTruthClassifier()
MCTruthClassifier::MCTruthClassifier |
( |
const std::string & |
type | ) |
|
|
inline |
◆ ~MCTruthClassifier()
virtual MCTruthClassifier::~MCTruthClassifier |
( |
| ) |
|
|
virtualdefault |
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
253 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
229 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
338 return PBASE::declareProperty(
name, property,
doc);
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ defOrigOfElectron()
Definition at line 280 of file MCTruthClassifierGen.cxx.
301 info.setMotherProperties(ancestor);
317 if (ancestor == ancestorParent) {
break; }
319 ancestorParent = ancestor;
324 if (ancestorParent) {
325 pPDG = ancestorParent->
pdgId();
327 ancestor = ancestorParent;
336 ancestor = ancestorParent;
340 info.setMotherProperties(ancestor);
341 const int ancestorPDG = ancestor->
pdgId();
348 auto DP = DecayProducts(partProdVtx);
349 const int NumOfPhot = DP.pd(MC::PHOTON);
350 const int NumOfEl = DP.pd(MC::ELECTRON);
351 const int NumOfPos = DP.pd(MC::POSITRON);
352 const int NumOfquark = DP.apd({MC::DQUARK,MC::UQUARK,MC::SQUARK,MC::CQUARK,MC::BQUARK,MC::TQUARK});
353 const int NumOfgluon = DP.apd(MC::GLUON);
354 const int NumOfElNeut = DP.apd(MC::NU_E);
355 const int NumOfLQ = DP.apd(MC::LEPTOQUARK);
356 const int NumOfMuPl = DP.pd(-MC::MUON);
357 const int NumOfMuMin = DP.pd(MC::MUON);
358 const int NumOfMuNeut = DP.apd(MC::NU_MU);
359 const int NumOfTau = DP.apd(MC::TAU);
360 const int NumOfTauNeut = DP.apd(MC::NU_TAU);
364 const bool possibleNuclearFragment = (numOfParents == 1 && (
MC::isPhoton(ancestorPDG) ||
MC::isElectron(ancestorPDG) ||
MC::isMuon(ancestorPDG) || std::abs(ancestorPDG) == MC::PIPLUS));
366 if (!aChild)
continue;
367 const int childPDG = aChild->pdgId();
369 if (possibleNuclearFragment &&
370 (
MC::isNucleus(childPDG) || childPDG == 0 || childPDG == MC::PROTON || childPDG == MC::NEUTRON ||
371 std::abs(childPDG) == MC::PIPLUS || std::abs(childPDG) == MC::PI0))
378 for (
const auto& photonParent: ancestorProdVtx->
particles_in()) {
379 if (!photonParent)
continue;
380 info.photonMother = photonParent;
384 if ((
MC::isPhoton(ancestorPDG) && numberOfChildren == 2 && NumOfEl == 1 && NumOfPos == 1) || (
MC::isPhoton(ancestorPDG) && numberOfChildren == 1 && (NumOfEl == 1 || NumOfPos == 1)))
return PhotonConv;
389 if (numOfParents == 1 && std::abs(ancestorPDG) == MC::PIPLUS && numberOfChildren > 2 && NumOfNucFr != 0)
return ElMagProc;
398 if (ancestorPDG == MC::ELECTRON && numberOfChildren == 2 && NumOfEl == 2 && NumOfPos == 0)
return ElMagProc;
401 if (ancestorPDG == MC::POSITRON && numberOfChildren == 2 && NumOfEl == 0 && NumOfPos == 2)
return ElMagProc;
408 if (numberOfChildren == 2 && (NumOfEl == 1 || NumOfPos == 1) && !
MC::isElectron(ancestorPDG) && samePart)
return ElMagProc;
410 if ((ancestorPDG == MC::PI0 && numberOfChildren == 3 && NumOfPhot == 1 && NumOfEl == 1 && NumOfPos == 1) ||
411 (ancestorPDG == MC::PI0 && numberOfChildren == 4 && NumOfPhot == 0 && NumOfEl == 2 && NumOfPos == 2))
415 if (
MC::isSMQuark(ancestorPDG) && numOfParents == 1 && numberOfChildren == 3 && NumOfquark == 1 && NumOfElNeut == 1)
return QuarkWeakDec;
427 prodVert = ptrPart->hasProdVtx() ? ptrPart->prodVtx() :
nullptr;
428 }
while (
MC::isW(ptrPart) && prodVert);
431 if (std::abs(ptrPart->pdgId()) == MC::RH_NU_E)
return NuREle;
432 if (std::abs(ptrPart->pdgId()) == MC::RH_NU_MU)
return NuRMu;
433 if (std::abs(ptrPart->pdgId()) == MC::RH_NU_TAU)
return NuRTau;
447 bool isZboson =
false;
448 bool isWboson =
false;
449 bool skipnext =
false;
451 for (
unsigned int ipOut = 0; ipOut + 1 < partProdVtx->
nOutgoingParticles(); ++ipOut) {
453 if (!aChild)
continue;
455 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partProdVtx->
nOutgoingParticles(); ipOut1++) {
457 if (theNextChild)
break;
459 if (!theNextChild)
continue;
467 if (thePartToCheck == aChild || thePartToCheck == theNextChild) {
474 if (thePartToCheck == aChild || thePartToCheck == theNextChild) {
481 if (isWboson)
return WBoson;
482 if (isZboson)
return ZBoson;
484 if (numOfParents == 2) {
486 if ((numberOfChildren - NumOfquark - NumOfgluon) == 2 && NumOfEl == 1 && NumOfPos == 1)
return ZBoson;
489 if ((numberOfChildren - NumOfquark - NumOfgluon) == 2 && (NumOfEl == 1 || NumOfPos == 1) && NumOfElNeut == 1)
return WBoson;
494 if ((numberOfChildren - NumOfquark - NumOfgluon) == 4 &&
495 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 4) &&
499 if ((numberOfChildren - NumOfquark - NumOfgluon - NumOfPhot) == 6 &&
500 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 6) &&
505 if (partProdVtx == ancestorProdVtx) {
506 int NumOfEleLoop = 0;
507 int NumOfLepLoop = 0;
508 int NumOfEleNeuLoop = 0;
511 for (
const auto *
const pin: partProdVtx->
particles_in()) {
515 if (std::abs(
pout->pdgId()) == MC::NU_E) NumOfEleNeuLoop++;
520 if (NumOfEleLoop == 2 && NumOfEleNeuLoop == 0)
return ZBoson;
521 if (NumOfEleLoop == 1 && NumOfEleNeuLoop == 1)
return WBoson;
522 if ((NumOfEleLoop == 4 && NumOfEleNeuLoop == 0) || (NumOfEleLoop == 3 && NumOfEleNeuLoop == 1) ||
523 (NumOfEleLoop == 2 && NumOfEleNeuLoop == 2))
return DiBoson;
524 if (NumOfLepLoop == 4)
return DiBoson;
542 if (std::abs(ancestorPDG) == MC::WBOSON_LRSM)
return WBosonLRSM;
543 if (std::abs(ancestorPDG) == MC::RH_NU_E)
return NuREle;
544 if (std::abs(ancestorPDG) == MC::RH_NU_MU)
return NuRMu;
545 if (std::abs(ancestorPDG) == MC::RH_NU_TAU)
return NuRTau;
◆ defOrigOfMuon()
Definition at line 556 of file MCTruthClassifierGen.cxx.
577 info.setMotherProperties(ancestor);
590 if (ancestor == ancestorParent) {
break; }
592 ancestorParent = ancestor;
597 if (ancestorParent) {
598 pPDG = ancestorParent->
pdgId();
601 ancestor = ancestorParent;
610 ancestor = ancestorParent;
614 info.setMotherProperties(ancestor);
615 const int ancestorPDG = ancestor->
pdgId();
622 auto DP = DecayProducts(partProdVtx);
623 const int NumOfPhot = DP.pd(MC::PHOTON);
624 const int NumOfEl = DP.pd(MC::ELECTRON);
625 const int NumOfPos = DP.pd(MC::POSITRON);
626 const int NumOfElNeut = DP.apd(MC::NU_E);
627 const int NumOfMuNeut = DP.apd(MC::NU_MU);
628 const int NumOfLQ = DP.apd(MC::LEPTOQUARK);
629 const int NumOfquark = DP.apd({MC::DQUARK,MC::UQUARK,MC::SQUARK,MC::CQUARK,MC::BQUARK,MC::TQUARK});
630 const int NumOfgluon = DP.apd(MC::GLUON);
631 const int NumOfMuPl = DP.pd(-MC::MUON);
632 const int NumOfMuMin = DP.pd(MC::MUON);
633 const int NumOfTau = DP.apd(MC::TAU);
634 const int NumOfTauNeut = DP.apd(MC::NU_TAU);
637 if (std::abs(ancestorPDG) == MC::PIPLUS && numberOfChildren == 2 && NumOfMuNeut == 1)
return PionDecay;
638 if (std::abs(ancestorPDG) == MC::KPLUS && numberOfChildren == 2 && NumOfMuNeut == 1)
return KaonDecay;
647 if (
MC::isSMQuark(ancestorPDG) && numOfParents == 1 && numberOfChildren == 3 && NumOfquark == 1 && NumOfMuNeut == 1)
return QuarkWeakDec;
655 }
while (
MC::isW(itrP) && prodVert);
658 if (std::abs(itrP->
pdgId()) == MC::RH_NU_E)
return NuREle;
659 if (std::abs(itrP->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
660 if (std::abs(itrP->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
666 if (
MC::isPhoton(ancestorPDG) && numberOfChildren == 2 && NumOfMuMin == 1 && NumOfMuPl == 1)
return PhotonConv;
671 bool isZboson =
false;
672 bool isWboson =
false;
673 bool skipnext =
false;
674 for (
unsigned int ipOut = 0; ipOut + 1 < partProdVtx->
nOutgoingParticles(); ipOut++) {
680 if (!aChild)
continue;
682 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partProdVtx->
nOutgoingParticles(); ipOut1++) {
684 if (theNextChild)
break;
686 if (!theNextChild)
continue;
689 if (thePriPart == aChild || thePriPart == theNextChild) {
694 }
else if (
MC::isMuon(aChild) && std::abs(theNextChild->pdgId()) == MC::NU_MU) {
696 if (thePriPart == aChild || thePriPart == theNextChild) {
703 if (isWboson)
return WBoson;
704 if (isZboson)
return ZBoson;
706 if (numOfParents == 2 ) {
708 if ((numberOfChildren - NumOfquark - NumOfgluon) == 2 && NumOfMuPl == 1 && NumOfMuMin == 1)
return ZBoson;
712 if ((numberOfChildren - NumOfquark - NumOfgluon) == 2 && (NumOfMuPl == 1 || NumOfMuMin == 1) && NumOfMuNeut == 1)
return WBoson;
717 if ((numberOfChildren - NumOfquark - NumOfgluon) == 4 &&
718 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 4) &&
722 if ((numberOfChildren - NumOfquark - NumOfgluon - NumOfPhot) == 6 &&
723 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 6) &&
728 if (partProdVtx == ancestorProdVtx) {
730 int NumOfMuNeuLoop = 0;
731 int NumOfLepLoop = 0;
738 if (std::abs(
pout->pdg_id()) == MC::NU_MU) NumOfMuNeuLoop++;
744 if (NumOfMuLoop == 2 && NumOfMuNeuLoop == 0)
return ZBoson;
745 if (NumOfMuLoop == 1 && NumOfMuNeuLoop == 1)
return WBoson;
746 if ((NumOfMuLoop == 4 && NumOfMuNeuLoop == 0) || (NumOfMuLoop == 3 && NumOfMuNeuLoop == 1) ||
747 (NumOfMuLoop == 2 && NumOfMuNeuLoop == 2))
return DiBoson;
748 if (NumOfLepLoop == 4)
return DiBoson;
759 if (std::abs(ancestorPDG) == MC::WBOSON_LRSM)
return WBosonLRSM;
760 if (std::abs(ancestorPDG) == MC::RH_NU_E)
return NuREle;
761 if (std::abs(ancestorPDG) == MC::RH_NU_MU)
return NuRMu;
762 if (std::abs(ancestorPDG) == MC::RH_NU_TAU)
return NuRTau;
◆ defOrigOfNeutrino()
Definition at line 1210 of file MCTruthClassifierGen.cxx.
1217 const int nuFlav = std::abs(thePart->
pdgId());
1232 info.setMotherProperties(ancestor);
1249 ancestorParent = ancestor;
1253 if (ancestorParent) {
1254 pPDG = ancestorParent->
pdgId();
1257 if (ancestor == ancestorParent) {
break; }
1261 ancestor = ancestorParent;
1262 info.setMotherProperties(ancestor);
1271 ancestor = ancestorParent;
1272 info.setMotherProperties(ancestor);
1278 info.setMotherProperties(ancestor);
1279 const int ancestorPDG = ancestor->
pdgId();
1280 partProdVtx = ancestor->
decayVtx();
1286 auto DP = DecayProducts(partProdVtx);
1287 const int NumOfPhot = DP.pd(MC::PHOTON);
1288 const int NumOfquark = DP.apd({MC::DQUARK,MC::UQUARK,MC::SQUARK,MC::CQUARK,MC::BQUARK,MC::TQUARK});
1289 const int NumOfgluon = DP.apd(MC::GLUON);
1290 const int NumOfLQ = DP.apd(MC::LEPTOQUARK);
1291 const int NumOfElNeut = DP.apd(MC::NU_E);
1292 const int NumOfMuNeut = DP.apd(MC::NU_MU);
1293 const int NumOfTauNeut = DP.apd(MC::NU_TAU);
1294 const int NumOfEl = DP.apd(MC::ELECTRON);
1295 const int NumOfMu = DP.apd(MC::MUON);
1296 const int NumOfTau = DP.apd(MC::TAU);
1300 if (!aChild)
continue;
1309 if (
MC::isQuark(ancestorPDG) && numOfParents == 1 && numberOfChildren == 3 && NumOfquark == 1 && (NumOfEl == 1 || NumOfMu == 1 || NumOfTau == 1))
return QuarkWeakDec;
1318 }
while (
MC::isW(ptrPart) && prodVert);
1321 if (std::abs(ptrPart->
pdgId()) == MC::RH_NU_E)
return NuREle;
1322 if (std::abs(ptrPart->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
1323 if (std::abs(ptrPart->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
1339 bool isZboson =
false;
1340 bool isWboson =
false;
1341 bool skipnext =
false;
1343 for (
unsigned int ipOut = 0; ipOut + 1 < partProdVtx->
nOutgoingParticles(); ++ipOut) {
1345 if (!aChild)
continue;
1347 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partProdVtx->
nOutgoingParticles(); ipOut1++) {
1349 if (theNextChild)
break;
1351 if (!theNextChild)
continue;
1358 const int apdgID1 = std::abs(aChild->
pdgId());
1359 const int apdgID2 = std::abs(theNextChild->pdgId());
1362 if (thePartToCheck == aChild || thePartToCheck == theNextChild) {
1367 }
else if ((apdgID1 == MC::ELECTRON && apdgID2 == MC::NU_E) ||
1368 (apdgID1 == MC::NU_E && apdgID2 == MC::ELECTRON) ||
1369 (apdgID1 == MC::MUON && apdgID2 == MC::NU_MU) ||
1370 (apdgID1 == MC::NU_MU && apdgID2 == MC::MUON) ||
1371 (apdgID1 == MC::TAU && apdgID2 == MC::NU_TAU) ||
1372 (apdgID1 == MC::NU_TAU && apdgID2 == MC::TAU)
1375 if (thePartToCheck == aChild || thePartToCheck == theNextChild) {
1382 if (isWboson)
return WBoson;
1383 if (isZboson)
return ZBoson;
1386 if (numOfParents == 2) {
1388 if ( (numberOfChildren - NumOfquark - NumOfgluon) == 2 && (NumOfElNeut == 2 || NumOfMuNeut == 2 || NumOfTauNeut == 2))
return ZBoson;
1391 if ((numberOfChildren - NumOfquark - NumOfgluon) == 2 && ((NumOfEl == 1 && NumOfElNeut == 1) || (NumOfMu == 1 && NumOfMuNeut == 1) || (NumOfTau == 1 && NumOfTauNeut == 1)))
return WBoson;
1396 if ( (numberOfChildren - NumOfquark - NumOfgluon) == 4 && (NumOfEl + NumOfMu + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 4) &&
1400 if ((numberOfChildren - NumOfquark - NumOfgluon - NumOfPhot) == 6 && (NumOfEl + NumOfMu + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 6) &&
1405 if (partProdVtx == ancestorProdVtx) {
1406 int NumOfLepLoop = 0;
1407 int NumOfNeuLoop = 0;
1409 if (!
pout)
continue;
1410 for (
const auto *
const pin: partProdVtx->
particles_in()) {
1413 const int apdgid = std::abs(
pout->pdgId());
1416 else { NumOfLepLoop++; }
1421 if (NumOfNeuLoop == 2 && NumOfLepLoop == 0)
return ZBoson;
1422 if (NumOfNeuLoop == 1 && NumOfLepLoop == 1)
return WBoson;
1423 if (NumOfNeuLoop + NumOfLepLoop == 4)
return DiBoson;
1438 if (std::abs(ancestorPDG) == MC::WBOSON_LRSM)
return WBosonLRSM;
1439 if (std::abs(ancestorPDG) == MC::RH_NU_E)
return NuREle;
1440 if (std::abs(ancestorPDG) == MC::RH_NU_MU)
return NuRMu;
1441 if (std::abs(ancestorPDG) == MC::RH_NU_TAU)
return NuRTau;
◆ defOrigOfPhoton()
Definition at line 947 of file MCTruthClassifierGen.cxx.
955 info.resetMotherProperties();
956 info.photonMother =
nullptr;
974 info.setMotherProperties(ancestor);
977 int ancestorPDG = ancestor->
pdgId();
987 auto DP = DecayProducts(partProdVtx);
988 const int NumOfEl = DP.pd(MC::ELECTRON);
989 const int NumOfPos = DP.pd(MC::POSITRON);
990 const int NumOfMu = DP.apd(MC::MUON);
991 const int NumOfTau = DP.apd(MC::TAU);
992 const int NumOfLQ = DP.apd(MC::LEPTOQUARK);
993 const int NumOfLep = NumOfEl + NumOfPos + NumOfMu + NumOfTau;
994 const int NumOfNeut = DP.apd({MC::NU_E,MC::NU_MU,MC::NU_TAU});
995 const int NumOfPht = DP.pd(MC::PHOTON);
1000 const bool possibleNuclearFragment = (numOfParents == 1 && (
MC::isPhoton(ancestorPDG) ||
MC::isElectron(ancestorPDG) || std::abs(ancestorPDG) == MC::PIPLUS));
1003 if (!
pout)
continue;
1004 childPDG =
pout->pdg_id();
1005 if (possibleNuclearFragment &&
1006 (
MC::isNucleus(childPDG) || childPDG == 0 || childPDG == MC::PROTON || childPDG == MC::NEUTRON)) {
1009 if (std::abs(childPDG) < MC::ELECTRON ||
1010 (std::abs(childPDG) > MC::NU_TAU && std::abs(childPDG) < 43 && !
MC::isPhoton(childPDG))) {
1017 if (childPDG == ancestorPDG) {
1023 bool foundISR =
false;
1024 bool foundFSR =
false;
1026 if (numOfParents == 1 && numberOfChildren == 2 &&
MC::isElectron(ancestorPDG) && NumOfPht == 2)
return ElMagProc;
1038 for (
const auto & pin: Vert->particles_in()) {
1040 PartPDG = std::abs(pin->pdgId());
1041 prodVert = pin->prodVtx();
1049 }
while (prodVert && std::abs(ancestorPDG) == PartPDG);
1059 if ((numOfParents == 1 && (
MC::isPhoton(ancestorPDG) ||
MC::isElectron(ancestorPDG)) && numberOfChildren > 2 && NumOfNucFr != 0) ||
1060 (numOfParents == 1 && std::abs(ancestorPDG) == MC::PIPLUS && numberOfChildren > 10 && NumOfNucFr != 0) ||
1062 (numOfParents == 1 &&
MC::isNucleus(ancestorPDG) && std::abs(ancestorPDG) != MC::PROTON))
1065 if (
MC::isMuon(ancestorPDG) && NumOfMu == 0)
return Mu;
1075 if (!
pout)
continue;
1076 if (ancestorPDG !=
pout->pdgId())
continue;
1078 if (!Vrtx)
continue;
1091 if (numOfParents == 2 && ((
MC::isElectron(ancestorPDG) && NumOfEl == 1 && NumOfPos == 1) || (
MC::isMuon(ancestorPDG) && NumOfMu == 2) || (
MC::isTau(ancestorPDG) && NumOfTau == 2))) {
1095 if (numOfParents == 2 && NumOfLep == 1 && NumOfNeut == 1 && (
MC::isElectron(ancestorPDG) || std::abs(ancestorPDG) == MC::NU_E))
return FSRPhot;
1098 if (
MC::isElectron(ancestorPDG) && numOfParents == 1 && numberOfChildren == 2 && (NumOfEl == 1 || NumOfPos == 1) && NumOfPht == 1 &&
1103 if (
MC::isZ(ancestorPDG) && ((NumOfEl + NumOfPos == 2 || NumOfEl + NumOfPos == 4) || (NumOfMu == 2 || NumOfMu == 4) || (NumOfTau == 2 || NumOfTau == 4)) && NumOfPht > 0)
return FSRPhot;
1105 if (NumOfPht > 0 && (std::abs(ancestorPDG) == MC::WBOSON_LRSM ||
MC::isNeutrinoRH(ancestorPDG)))
return FSRPhot;
1107 if (numOfParents == 2 && NumOfLQ == 1)
return FSRPhot;
1114 if (NumOfLep == 1 && NumOfNeut == 1 && numberOfChildren == NumOfLep + NumOfNeut + NumOfPht)
return FSRPhot;
1122 }
while (
MC::isW(itrP) && prodVert);
1127 if ( std::abs(itrP->
pdgId()) == MC::RH_NU_E)
return NuREle;
1128 if ( std::abs(itrP->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
1129 if ( std::abs(itrP->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
1137 bool isZboson =
false;
1138 bool isWboson =
false;
1139 bool skipnext =
false;
1140 for (
unsigned int ipOut = 0; ipOut + 1 < partProdVtx->
nOutgoingParticles(); ipOut++) {
1146 if (!aChild)
continue;
1148 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partProdVtx->
nOutgoingParticles(); ipOut1++) {
1150 if (theNextChild)
break;
1152 if (!theNextChild)
continue;
1155 if (thePriPart == aChild || thePriPart == theNextChild) {
1160 }
else if (
MC::isTau(aChild) && std::abs(theNextChild->pdgId()) == MC::NU_TAU) {
1162 if (thePriPart == aChild || thePriPart == theNextChild) {
1169 if (isWboson)
return WBoson;
1170 if (isZboson)
return ZBoson;
1174 if (numOfParents == 4 && (numberOfChildren - NumOfPht) == 4 && (NumOfLep + NumOfNeut == 4)) {
1181 if (partProdVtx == ancestorProdVtx) {
1183 if (!
pout)
continue;
1184 for (
const auto *
const pin: partProdVtx->
particles_in()) {
1194 if (std::abs(ancestorPDG) == MC::PI0)
return PiZero;
◆ defOrigOfTau()
Definition at line 774 of file MCTruthClassifierGen.cxx.
795 info.setMotherProperties(ancestor);
805 ancestor = ancestorParent;
809 const int ancestorPDG = ancestor->
pdgId();
810 info.setMotherProperties(ancestor);
817 auto DP = DecayProducts(partProdVtx);
818 const int numberOfChildren = DP.size();
819 const int NumOfPhot = DP.pd(MC::PHOTON);
820 const int NumOfEl = DP.pd(MC::ELECTRON);
821 const int NumOfPos = DP.pd(MC::POSITRON);
822 const int NumOfElNeut = DP.apd(MC::NU_E);
823 const int NumOfMuNeut = DP.apd(MC::NU_MU);
825 const int NumOfquark = DP.apd({MC::DQUARK,MC::UQUARK,MC::SQUARK,MC::CQUARK,MC::BQUARK,MC::TQUARK});
826 const int NumOfgluon = DP.apd(MC::GLUON);
827 const int NumOfMuPl = DP.pd(-MC::MUON);
828 const int NumOfMuMin = DP.pd(MC::MUON);
829 const int NumOfTau = DP.apd(MC::TAU);
830 const int NumOfTauNeut = DP.apd(MC::NU_TAU);
840 }
while (
MC::isW(itrP) && prodVert);
843 if (std::abs(itrP->
pdgId()) == MC::RH_NU_E)
return NuREle;
844 if (std::abs(itrP->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
845 if (std::abs(itrP->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
852 bool isZboson =
false;
853 bool isWboson =
false;
854 bool skipnext =
false;
855 for (
unsigned int ipOut = 0; ipOut + 1 < partProdVtx->
nOutgoingParticles(); ipOut++) {
861 if (!aChild)
continue;
863 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partProdVtx->
nOutgoingParticles(); ipOut1++) {
865 if (theNextChild)
break;
872 if (thePriPart == aChild || thePriPart == theNextChild) {
877 }
else if (
MC::isTau(aChild) && std::abs(theNextChild->pdgId()) == MC::NU_TAU) {
879 if (thePriPart == aChild || thePriPart == theNextChild) {
886 if (isWboson)
return WBoson;
887 if (isZboson)
return ZBoson;
889 if (numOfParents == 2 ) {
896 if ((numberOfChildren - NumOfquark - NumOfgluon) == 2 && NumOfTau == 1 && NumOfTauNeut == 1)
return WBoson;
899 if ((numberOfChildren - NumOfquark - NumOfgluon) == 4 &&
900 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 4) &&
904 if ((numberOfChildren - NumOfquark - NumOfgluon - NumOfPhot) == 6 &&
905 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 6) &&
910 if (partProdVtx == ancestorProdVtx) {
911 int NumOfTauLoop = 0;
912 int NumOfTauNeuLoop = 0;
913 int NumOfLepLoop = 0;
916 for (
const auto *
const pin: partProdVtx->
particles_in()) {
920 if (std::abs(
pout->pdgId()) == MC::NU_TAU) NumOfTauNeuLoop++;
925 if (NumOfTauLoop == 2 && NumOfTauNeuLoop == 0)
return ZBoson;
926 if (NumOfTauLoop == 1 && NumOfTauNeuLoop == 1)
return WBoson;
927 if ((NumOfTauLoop == 4 && NumOfTauNeuLoop == 0) || (NumOfTauLoop == 3 && NumOfTauNeuLoop == 1) || (NumOfTauLoop == 2 && NumOfTauNeuLoop == 2))
return DiBoson;
928 if (NumOfLepLoop == 4)
return DiBoson;
936 if (std::abs(ancestorPDG) == MC::WBOSON_LRSM)
return WBosonLRSM;
937 if (std::abs(ancestorPDG) == MC::RH_NU_TAU)
return NuRTau;
940 if (std::abs(ancestorPDG) == MC::JPSI)
return JPsi;
◆ detEta()
double MCTruthClassifier::detEta |
( |
double |
x, |
|
|
double |
y |
|
) |
| const |
|
inlineprivate |
◆ detPhi()
double MCTruthClassifier::detPhi |
( |
double |
x, |
|
|
double |
y |
|
) |
| const |
|
inlineprivate |
◆ detStore()
◆ egammaClusMatch()
Implements IMCTruthClassifier.
Definition at line 44 of file MCTruthClassifierAthena.cxx.
48 const EventContext& ctx =
info ?
info->eventContext : Gaudi::Hive::currentContext();
52 if (!truthParticleContainerReadHandle.isValid()) {
53 ATH_MSG_WARNING(
" Invalid ReadHandle for xAOD::TruthParticleContainer with key: " << truthParticleContainerReadHandle.key());
58 if (!caloMgrHandle.isValid()) {
68 double LeadingPhtPT(0);
69 double LeadingPartPT(0);
70 double LeadingPhtdR(999.);
71 double LeadingPartdR(999.);
72 double BestPartdR(999.);
73 double etaClus = clus->
etaBE(2);
74 double phiClus = clus->
phiBE(2);
76 etaClus = clus->
eta();
79 phiClus = clus->
phi();
81 std::vector<const xAOD::TruthParticle*> tps;
87 for (
const auto*
const thePart : tps) {
92 long iParticlePDG = thePart->
pdgId();
94 if (std::abs(iParticlePDG) == 12 || std::abs(iParticlePDG) == 14 || std::abs(iParticlePDG) == 16)
continue;
96 double q = thePart?thePart->charge():0.0;
107 (((etaClus < 0) - (thePart->eta() < 0) != 0)
116 bool isNCone =
false;
117 bool isExt =
genPartToCalo(ctx, clus, thePart, isFwrdEle, dR, isNCone, *caloDDMgr);
118 if (!isExt)
continue;
119 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(), thePart);
121 info->egPartPtr.push_back(thePart);
122 info->egPartdR.push_back(dR);
129 if ((iParticlePDG == 22 || std::abs(iParticlePDG) == 11) && isNCone &&
pt > LeadingPhtPT) {
136 if ((iParticlePDG != 22 && std::abs(iParticlePDG) != 11) && isNCone &&
pt > LeadingPartPT) {
137 theLeadingPartInCone = thePart;
143 if (!isNCone && dR < BestPartdR) {
144 theBestPartOutCone = thePart;
148 if (dR < BestPartdR) {
149 theBestPartdR = thePart;
155 if (theEgamma !=
nullptr) {
156 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(), theEgamma);
157 if (
info)
info->deltaRMatch = LeadingPhtdR;
158 }
else if (theLeadingPartInCone !=
nullptr) {
159 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(),theLeadingPartInCone);
160 if (
info)
info->deltaRMatch = LeadingPartdR;
161 }
else if (theBestPartOutCone !=
nullptr) {
162 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(),theBestPartOutCone);
163 if (
info)
info->deltaRMatch = BestPartdR;
164 }
else if (isFwrdEle && theBestPartdR !=
nullptr) {
165 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(),theBestPartdR );
166 if (
info)
info->deltaRMatch = BestPartdR;
168 theMatchPart =
nullptr;
170 if (isFwrdEle || theMatchPart !=
nullptr || !
m_inclG4part)
return theMatchPart;
173 for (
const auto*
const thePart : tps) {
176 long iParticlePDG = thePart->
pdgId();
178 if (std::abs(iParticlePDG) == 12 || std::abs(iParticlePDG) == 14 || std::abs(iParticlePDG) == 16)
continue;
179 if (thePart->decayVtx() !=
nullptr)
continue;
183 double q = thePart->charge();
189 bool isNCone =
false;
190 bool isExt =
genPartToCalo(ctx, clus, thePart, isFwrdEle, dR, isNCone, *caloDDMgr);
191 if (!isExt)
continue;
193 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(),thePart);
195 info->egPartPtr.push_back(thePart);
196 info->egPartdR.push_back(dR);
201 if ((iParticlePDG == 22 || std::abs(iParticlePDG) == 11) && isNCone &&
pt > LeadingPhtPT) {
208 if ((iParticlePDG != 22 && std::abs(iParticlePDG) != 11) && isNCone &&
pt > LeadingPartPT) {
209 theLeadingPartInCone = thePart;
215 if (!isNCone && dR < BestPartdR) {
216 theBestPartOutCone = thePart;
221 if (theEgamma !=
nullptr) {
222 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(),theEgamma);
223 if (
info)
info->deltaRMatch = LeadingPhtdR;
224 }
else if (theLeadingPartInCone !=
nullptr) {
225 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(),theLeadingPartInCone);
226 if (
info)
info->deltaRMatch = LeadingPartdR;
227 }
else if (theBestPartOutCone !=
nullptr) {
228 theMatchPart =
MC::findMatching(truthParticleContainerReadHandle.ptr(),theBestPartOutCone);
229 if (
info)
info->deltaRMatch = BestPartdR;
231 theMatchPart =
nullptr;
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ findJetConstituents()
Definition at line 278 of file MCRecoToTruth.cxx.
287 if (!truthParticleContainerReadHandle.isValid()) {
288 ATH_MSG_WARNING(
" Invalid ReadHandle for xAOD::TruthParticleContainer with key: " << truthParticleContainerReadHandle.key());
291 ATH_MSG_DEBUG(
"xAODTruthParticleContainer with key " << truthParticleContainerReadHandle.key() <<
" has valid ReadHandle ");
293 for (
const auto *
const thePart : *truthParticleContainerReadHandle) {
296 constituents.insert(thePart);
305 constituents.insert(thePart);
◆ fracParticleInJet()
Definition at line 310 of file MCRecoToTruth.cxx.
312 std::set<const xAOD::TruthParticle*> constituents;
313 std::set<const xAOD::TruthParticle*> daughters;
314 std::set<const xAOD::TruthParticle*>
intersect;
318 if (daughters.empty()) daughters.insert(thePart);
326 if (nparts)
return 1.0*
intersect.size() / daughters.size();
329 for (
const auto *daughter : daughters) { tot += daughter->pt();}
◆ genPartToCalo()
Definition at line 237 of file MCTruthClassifierAthena.cxx.
246 isNarrowCone =
false;
247 if (thePart ==
nullptr)
return false;
248 double phiClus = clus->
phiBE(2);
249 double etaClus = clus->
etaBE(2);
250 if (etaClus < -900) {
251 etaClus = clus->
eta();
253 if (phiClus < -900) {
254 phiClus = clus->
phi();
257 if (isFwrdEle || (etaClus == 0. && phiClus == 0.)) {
258 phiClus = clus->
phi();
259 etaClus = clus->
eta();
271 }
else if (isFwrdEle && clus->
inEndcap()) {
277 std::unique_ptr<Trk::CurvilinearParameters>
params = extractParamFromTruth(*thePart);
278 if (!
params)
return false;
280 std::vector<CaloSampling::CaloSample> samples = {
sample };
282 bool extensionOK = (!extension.empty());
284 ATH_MSG_WARNING(
"extrapolation of Truth Particle with eta " << thePart->
eta() <<
" , charge " << thePart->
charge() <<
" , Pt " << thePart->
pt() <<
" to calo failed");
287 double etaCalo = extension[0].second->position().eta();
288 double phiCalo = extension[0].second->position().phi();
◆ getGenPart()
Implements IMCTruthClassifier.
Definition at line 181 of file MCRecoToTruth.cxx.
185 if (!trk)
return nullptr;
187 info->deltaRMatch = -999.;
188 info->deltaPhi = -999.;
189 info->probTrkToTruth = 0;
190 info->numOfSiHits = 0;
198 if (!tPL.isAvailable(*trk)) {
199 ATH_MSG_DEBUG(
"Track particle is not associated to truth particle");
203 const auto& truthLink = tPL(*trk);
204 if (!truthLink.isValid()) {
210 if (!theGenParticle) {
217 if (tMP.isAvailable(*trk)) {
218 info->probTrkToTruth = tMP(*trk);
224 if (theGenParticle->
status() == 3) {
237 if (EndVrtx !=
nullptr) {
240 theGenPartTmp =
nullptr;
242 if (!theDaugt)
continue;
243 if (theDaugt->pdgId() == theGenParticle->
pdgId()) theGenPartTmp = theDaugt;
244 if (theDaugt->pdgId() != theGenParticle->
pdgId() && !
MC::isPhoton(theDaugt)) theGenPartTmp =
nullptr;
251 EndVrtx = theGenPartTmp ? theGenPartTmp->decayVtx() :
nullptr;
252 }
while (theGenPartTmp && theGenPartTmp->pdgId() == theGenParticle->
pdgId() &&
MC::isDecayed(theGenPartTmp) && EndVrtx !=
nullptr);
254 if (theGenPartTmp && theGenPartTmp->pdgId() == theGenParticle->
pdgId()) theGenParticle = theGenPartTmp;
261 uint8_t NumOfSiHits = NumOfSCTHits + NumOfPixHits;
264 float deteta =
detEta(theGenParticle->
eta(), trk->
eta());
265 float deltaRMatch = std::hypot(
deltaPhi, deteta);
267 (NumOfSiHits <= m_NumOfSiHitsCut && deltaPhi >
m_deltaPhiMatchCut)) theGenParticle =
nullptr;
270 info->deltaRMatch = deltaRMatch;
272 info->numOfSiHits = NumOfSiHits;
275 return (theGenParticle);
◆ getKey()
Get the (hashed) key of an object that is in the event store.
This is a bit of a special one. StoreGateSvc
and xAOD::TEvent
both provide ways for getting the SG::sgkey_t
key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.
In order to allow tools to efficiently perform this operation, they can use this helper function.
- See also
- asg::AsgTool::getName
- Parameters
-
ptr | The bare pointer to the object that the event store should know about |
- Returns
- The hashed key of the object in the store. If not found, an invalid (zero) key.
Definition at line 119 of file AsgTool.cxx.
121 #ifdef XAOD_STANDALONE
127 return (
proxy ==
nullptr ? 0 :
proxy->sgkey() );
128 #endif // XAOD_STANDALONE
◆ getName()
const std::string & asg::AsgTool::getName |
( |
const void * |
ptr | ) |
const |
|
inherited |
Get the name of an object that is / should be in the event store.
This is a bit of a special one. StoreGateSvc
and xAOD::TEvent
both provide ways for getting the std::string
name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.
In order to allow tools to efficiently perform this operation, they can use this helper function.
- See also
- asg::AsgTool::getKey
- Parameters
-
ptr | The bare pointer to the object that the event store should know about |
- Returns
- The string name of the object in the store. If not found, an empty string.
Definition at line 106 of file AsgTool.cxx.
108 #ifdef XAOD_STANDALONE
114 static const std::string
dummy =
"";
116 #endif // XAOD_STANDALONE
◆ getProperty()
template<class T >
const T* asg::AsgTool::getProperty |
( |
const std::string & |
name | ) |
const |
|
inherited |
Get one of the tool's properties.
◆ initialize()
virtual StatusCode MCTruthClassifier::initialize |
( |
| ) |
|
|
inlineoverridevirtual |
Dummy implementation of the initialisation function.
It's here to allow the dual-use tools to skip defining an initialisation function. Since many are doing so...
Reimplemented from asg::AsgTool.
Reimplemented in D3PD::D3PDMCTruthClassifier.
Definition at line 101 of file MCTruthClassifier.h.
121 return StatusCode::SUCCESS;
123 virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
126 #ifndef XAOD_ANALYSIS
127 virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ msg() [1/2]
◆ msg() [2/2]
◆ msg_level_name()
const std::string & asg::AsgTool::msg_level_name |
( |
| ) |
const |
|
inherited |
A deprecated function for getting the message level's name.
Instead of using this, weirdly named function, user code should get the string name of the current minimum message level (in case they really need it...), with:
MSG::name( msg().level() )
This function's name doesn't follow the ATLAS coding rules, and as such will be removed in the not too distant future.
- Returns
- The string name of the current minimum message level that's printed
Definition at line 101 of file AsgTool.cxx.
◆ msgLvl()
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ particleHepMCTruthClassifier() [1/2]
Implements IMCTruthClassifier.
Definition at line 26 of file MCTruthClassifierGen.cxx.
28 const EventContext& ctx =
info ?
info->eventContext : Gaudi::Hive::currentContext();
30 if (!truthParticleLinkVecReadHandle.isValid()) {
31 ATH_MSG_WARNING(
" Invalid ReadHandle for xAODTruthParticleLinkVector with key: " << truthParticleLinkVecReadHandle.key());
◆ particleHepMCTruthClassifier() [2/2]
Implements IMCTruthClassifier.
Definition at line 42 of file MCTruthClassifierGen.cxx.
46 if (!theGenPart)
return std::make_pair(partType, partOrig);
49 const EventContext& ctx =
info ?
info->eventContext : Gaudi::Hive::currentContext();
52 if (!truthParticleLinkVecReadHandle.isValid()) {
53 ATH_MSG_WARNING(
" Invalid ReadHandle for xAODTruthParticleLinkVector with key: " << truthParticleLinkVecReadHandle.key());
54 return std::make_pair(partType, partOrig);
56 for (
const auto *
const entry : *truthParticleLinkVecReadHandle) {
59 if (!theGenPart || !truthParticle ||
60 theGenPart->pdg_id() != truthParticle->
pdgId() ||
61 theGenPart->status() != truthParticle->
status() ||
64 "HepMC::GenParticle and xAOD::TruthParticle do not match");
65 return std::make_pair(partType, partOrig);
70 return std::make_pair(partType, partOrig);
◆ particleTruthClassifier() [1/7]
Implements IMCTruthClassifier.
Definition at line 114 of file MCRecoToTruth.cxx.
116 ATH_MSG_DEBUG(
"Executing egamma photon Classifier with cluster Input");
119 if (!clus)
return std::make_pair(parttype, partorig);
120 if (std::fabs(clus->
eta()) > 10.0 || std::fabs(clus->
phi()) >
M_PI || (clus->
et()) <= 0.)
return std::make_pair(parttype, partorig);
122 #ifndef XAOD_ANALYSIS // Fwd electron available only in Athena
125 ATH_MSG_WARNING(
"Cluster Classification using extrapolation to Calo is available only in Athena , check your enviroment. ");
127 if (!genPart)
return std::make_pair(parttype, partorig);
◆ particleTruthClassifier() [2/7]
Implements IMCTruthClassifier.
Definition at line 24 of file MCRecoToTruth.cxx.
35 return std::make_pair(parttype, partorig);
39 #ifndef XAOD_ANALYSIS // cluster matching available only in Athena
43 ATH_MSG_WARNING(
"Forward Electron classification using extrapolation to Calo is available only in Athena , check your enviroment. ");
48 if (!genPart)
return std::make_pair(parttype, partorig);
◆ particleTruthClassifier() [3/7]
Implements IMCTruthClassifier.
Definition at line 134 of file MCRecoToTruth.cxx.
140 std::set<const xAOD::TruthParticle*> allJetMothers;
141 std::set<const xAOD::TruthParticle*> constituents;
142 if (!
jet)
return std::make_pair(parttype, partorig);
143 allJetMothers.clear();
144 constituents.clear();
149 for (
const auto& thePart: constituents) {
155 if (tempparttype !=
Hadron)
continue;
163 if (parttype !=
BJet) parttype =
CJet;
167 if (parttype !=
BJet && parttype !=
CJet) parttype =
LJet;
174 allJetMothers.clear();
175 constituents.clear();
177 return std::make_pair(parttype, partorig);
◆ particleTruthClassifier() [4/7]
Implements IMCTruthClassifier.
Definition at line 93 of file MCRecoToTruth.cxx.
99 if (
mu->primaryTrackParticleLink().isValid()) trkPtr = *
mu->primaryTrackParticleLink();
100 else if (
mu->combinedTrackParticleLink().isValid()) trkPtr = *
mu->combinedTrackParticleLink();
101 else if (
mu->inDetTrackParticleLink().isValid()) trkPtr = *
mu->combinedTrackParticleLink();
102 else if (
mu->muonSpectrometerTrackParticleLink().isValid()) trkPtr = *
mu->muonSpectrometerTrackParticleLink();
104 if (!trkPtr)
return std::make_pair(parttype, partorig);
107 if (!genPart)
return std::make_pair(parttype, partorig);
◆ particleTruthClassifier() [5/7]
Implements IMCTruthClassifier.
Definition at line 54 of file MCRecoToTruth.cxx.
60 if (!clus)
return std::make_pair(parttype, partorig);
61 if (std::fabs(clus->
eta()) > 10.0 || std::fabs(clus->
phi()) > 6.28 || (clus->
et()) <= 0.)
return std::make_pair(parttype, partorig);
64 if (VxCvPtr !=
nullptr) {
66 if (itrk > 1)
continue;
68 if (!trkPtr)
continue;
72 info->cnvPhotTrkPtr.push_back(trkPtr);
73 info->cnvPhotTrkToTruthPart.push_back(thePart);
74 info->cnvPhotPartType.push_back(classif.first);
75 info->cnvPhotPartOrig.push_back(classif.second);
81 #ifndef XAOD_ANALYSIS // Fwd electron available only in Athena
84 ATH_MSG_WARNING(
"Photon Classification using extrapolation to Calo is available only in Athena , check your enviroment. ");
86 if (!genPart)
return std::make_pair(parttype, partorig);
◆ particleTruthClassifier() [6/7]
◆ particleTruthClassifier() [7/7]
Implements IMCTruthClassifier.
Definition at line 75 of file MCTruthClassifierGen.cxx.
84 return std::make_pair(partType, partOrig);
86 info.genPart = thePart;
90 if (!truthParticleContainerReadHandle.isValid()) {
91 ATH_MSG_WARNING(
" Invalid ReadHandle for xAOD::TruthParticleContainer with key: " << truthParticleContainerReadHandle.key());
92 return std::make_pair(partType, partOrig);
95 ATH_MSG_DEBUG(
"xAODTruthParticleContainer with key " << truthParticleContainerReadHandle.key() <<
" has valid ReadHandle ");
153 if (!partProdVtx &&
MC::isTau(thePart)) {
155 partOrig =
defOrigOfTau(*truthParticleContainerReadHandle, thePart, parentPDG,
info);
167 return std::make_pair(
Neutrino, partOrig);
173 if (isPartHadr)
return std::make_pair(
Hadron, partOrig);
206 partOrig =
defOrigOfTau(*truthParticleContainerReadHandle, thePart, parentPDG,
info);
219 return std::make_pair(partType, partOrig);
◆ print() [1/2]
void asg::AsgTool::print |
( |
| ) |
const |
|
virtualinherited |
Print the state of the tool.
Implements asg::IAsgTool.
Reimplemented in JetRecTool, JetFinder, JetModifiedMassDrop, JetFromPseudojet, JetReclusterer, JetReclusteringTool, JetTruthLabelingTool, JetPileupLabelingTool, HI::HIPileupTool, LundVariablesTool, JetDumper, JetBottomUpSoftDrop, JetRecursiveSoftDrop, JetSoftDrop, JetConstituentsRetriever, JetSubStructureMomentToolsBase, JetSplitter, JetToolRunner, JetPruner, JetPseudojetRetriever, JetTrimmer, AsgHelloTool, and KtDeltaRTool.
Definition at line 131 of file AsgTool.cxx.
◆ print() [2/2]
virtual void asg::IAsgTool::print |
( |
| ) |
const |
|
pure virtualinherited |
Print the state of the tool.
Implemented in JetRecTool, JetFinder, JetModifiedMassDrop, JetFromPseudojet, JetReclusterer, JetReclusteringTool, JetTruthLabelingTool, JetPileupLabelingTool, HI::HIPileupTool, LundVariablesTool, asg::AsgTool, JetDumper, JetBottomUpSoftDrop, JetRecursiveSoftDrop, JetSoftDrop, JetConstituentsRetriever, JetSubStructureMomentToolsBase, JetSplitter, JetToolRunner, JetPruner, JetPseudojetRetriever, JetTrimmer, AsgHelloTool, and KtDeltaRTool.
◆ renounce()
◆ renounceArray()
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ TruthLoopDetectionMethod1()
◆ TruthLoopDetectionMethod2()
Definition at line 244 of file MCTruthClassifierGen.cxx.
257 parent_prdVtx =
parent->hasProdVtx() ?
parent->prodVtx() :
nullptr;
258 parent_endVtx =
parent->decayVtx();
262 return (child_endVtx == parent_prdVtx && child_prdVtx == parent_endVtx);
◆ TruthLoopDetectionMethod3()
◆ updateVHKA()
◆ m_caloExtensionTool
◆ m_caloMgrKey
◆ m_deltaPhiMatchCut
float MCTruthClassifier::m_deltaPhiMatchCut |
|
private |
◆ m_deltaRMatchCut
float MCTruthClassifier::m_deltaRMatchCut |
|
private |
◆ m_detStore
◆ m_evtStore
◆ m_FwdElectronTruthExtrEtaCut
float MCTruthClassifier::m_FwdElectronTruthExtrEtaCut |
|
private |
◆ m_FwdElectronTruthExtrEtaWindowCut
float MCTruthClassifier::m_FwdElectronTruthExtrEtaWindowCut |
|
private |
◆ m_FwdElectronUseG4Sel
bool MCTruthClassifier::m_FwdElectronUseG4Sel |
|
private |
◆ m_fwrdEledRtoTrCut
float MCTruthClassifier::m_fwrdEledRtoTrCut |
|
private |
◆ m_inclG4part
bool MCTruthClassifier::m_inclG4part |
|
private |
◆ m_jetPartDRMatch
float MCTruthClassifier::m_jetPartDRMatch |
|
private |
◆ m_NumOfSiHitsCut
int MCTruthClassifier::m_NumOfSiHitsCut |
|
private |
◆ m_partExtrConeEta
float MCTruthClassifier::m_partExtrConeEta |
|
private |
◆ m_partExtrConePhi
float MCTruthClassifier::m_partExtrConePhi |
|
private |
◆ m_phtClasConeEta
float MCTruthClassifier::m_phtClasConeEta |
|
private |
◆ m_phtClasConePhi
float MCTruthClassifier::m_phtClasConePhi |
|
private |
◆ m_phtdRtoTrCut
float MCTruthClassifier::m_phtdRtoTrCut |
|
private |
◆ m_pTChargePartCut
float MCTruthClassifier::m_pTChargePartCut |
|
private |
◆ m_pTNeutralPartCut
float MCTruthClassifier::m_pTNeutralPartCut |
|
private |
◆ m_ROICone
bool MCTruthClassifier::m_ROICone |
|
private |
◆ m_truthInConeTool
◆ m_truthLinkVecReadHandleKey
◆ m_truthParticleContainerKey
◆ m_useCaching
bool MCTruthClassifier::m_useCaching |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
virtual double phi() const
The azimuthal angle ( ) of the particle.
size_t nOutgoingParticles() const
Get the number of outgoing particles.
ParticleOutCome defOutComeOfMuon(T thePart)
ParticleType defTypeOfPhoton(ParticleOrigin PhotOrig)
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
def pout(output, newline=True)
bool isNucleus(const T &p)
PDG rule 16 Nuclear codes are given as 10-digit numbers ±10LZZZAAAI.
bool is_same_vertex(const T1 &p1, const T2 &p2)
Method to establish if two particles in the GenEvent actually represent the same vertex.
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
float m_FwdElectronTruthExtrEtaWindowCut
bool isHeavyBoson(const T &p)
APID: Additional "Heavy"/"prime" versions of W and Z bosons (Used in MCTruthClassifier)
std::vector< const TruthParticle * > particles_in() const
Get the incoming particles.
void findParticleAncestors(T thePart, std::set< T > &allancestors)
Function to find all ancestors of the particle.
Helper class to provide type-safe access to aux data.
bool isBSM(const T &p)
APID: graviton and all Higgs extensions are BSM.
void findJetConstituents(const xAOD::Jet *, std::set< const xAOD::TruthParticle * > &constituents, bool DR) const
ParticleOutCome defOutComeOfTau(T thePart)
MCTruthPartClassifier::ParticleOrigin defOrigOfElectron(const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, bool &isPrompt, MCTruthPartClassifier::Info &info) const
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
uint16_t author(uint16_t bitmask=EgammaParameters::AuthorALL) const
Get author.
bool isNeutrino(const T &p)
APID: the fourth generation neutrinos are neutrinos.
bool TruthLoopDetectionMethod1(const xAOD::TruthVertex *childOrigVtx, const xAOD::TruthParticle *parent) const
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
ToolHandle< Trk::IParticleCaloExtensionTool > m_caloExtensionTool
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
const xAOD::TrackParticle * trackParticle(size_t index=0) const
Pointer to the xAOD::TrackParticle/s that match the electron candidate.
float phiBE(const unsigned layer) const
Get the phi in one layer of the EM Calo.
std::vector< size_t > vec
ParticleType defTypeOfElectron(ParticleOrigin EleOrig, bool isPrompt)
const uint16_t AuthorFwdElectron
Electron reconstructed by the Forward cluster-based algorithm.
const std::string & key() const
Return the StoreGate ID for the referenced object.
bool const RAWDATA *ch2 const
int pdg_id() const
PDG ID code.
bool is_same_particle(const T1 &p1, const T2 &p2)
Method to establish if two particles in the GenEvent actually represent the same particle.
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticleContainerKey
bool isValid() const
Test to see if the link can be dereferenced.
bool isSMLepton(const T &p)
APID: the fourth generation leptons are not standard model leptons.
bool isSMQuark(const T &p)
virtual void setOwner(IDataHandleHolder *o)=0
bool isHiggs(const T &p)
APID: HIGGS boson is only one particle.
ParticleType defTypeOfMuon(ParticleOrigin MuOrig, bool isPrompt)
float etaBE(const unsigned layer) const
Get the eta in one layer of the EM Calo.
bool isPhysical(const T &p)
Identify if the particle is physical, i.e. is stable or decayed.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
bool isQuark(const T &p)
PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to do ...
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Description of a calorimeter cluster.
bool inEndcap() const
Returns true if at least one clustered cell in the endcap.
float m_FwdElectronTruthExtrEtaCut
bool is_same_generator_particle(const T1 &p1, const T2 &p2)
Method to establish if two particles in the GenEvent actually represent the same generated particle.
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
virtual double eta() const
The pseudorapidity ( ) of the particle.
ElementLink< xAOD::TruthParticleContainer > TruthLink_t
T findMatching(C TruthContainer, T p)
Function to find a particle in container.
MCTruthPartClassifier::ParticleOrigin defOrigOfMuon(const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, bool &isPrompt, MCTruthPartClassifier::Info &info) const
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
bool isElectron(const xAOD::Egamma *eg)
is the object an electron (not Fwd)
Class describing a truth particle in the MC record.
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
const xAOD::CaloCluster * caloCluster(size_t index=0) const
Pointer to the xAOD::CaloCluster/s that define the electron candidate.
bool hasProdVtx() const
Check for a production vertex on this particle.
MCTruthPartClassifier::ParticleOrigin defOrigOfNeutrino(const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, bool &isPrompt, MCTruthPartClassifier::Info &info) const
bool inBarrel() const
Returns true if at least one clustered cell in the barrel.
virtual const xAOD::TruthParticle * egammaClusMatch(const xAOD::CaloCluster *, bool, MCTruthPartClassifier::Info *info) const override final
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
SG::ReadHandleKey< xAODTruthParticleLinkVector > m_truthLinkVecReadHandleKey
void findParticleStableDescendants(T thePart, std::set< T > &allstabledescendants)
Function to get the particle stable MC daughters.
T findMother(T thePart)
Function to get a mother of particle. MCTruthClassifier legacy.
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
bool TruthLoopDetectionMethod2(const xAOD::TruthParticle *child, const xAOD::TruthParticle *parent) const
const TruthParticle_v1 * incomingParticle(size_t index) const
Get one of the incoming particles.
ParticleType defTypeOfHadron(int pdg)
MCTruthPartClassifier::ParticleOrigin defOrigOfPhoton(const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, bool &isPrompt, MCTruthPartClassifier::Info &info) const
bool genPartToCalo(const EventContext &ctx, const xAOD::CaloCluster *clus, const xAOD::TruthParticle *thePart, bool isFwrdEle, double &dRmatch, bool &isNarrowCone, const CaloDetDescrManager &caloDDMgr) const
bool TruthLoopDetectionMethod3(const xAOD::TruthVertex *childOrigVtx, const xAOD::TruthParticle *parent) const
bool isConditionA(const T &p)
To be understood.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
ElementLink implementation for ROOT usage.
const TruthVertex_v1 * decayVtx() const
The decay vertex of this particle.
const TruthVertex_v1 * prodVtx() const
The production vertex of this particle.
Class describing a truth vertex in the MC record.
ParticleOutCome defOutComeOfElectron(T thePart)
bool isHadron(const T &p)
bool isNeutrinoRH(const T &p)
PDG Rule 12: APID: Helper function for right-handed neutrino states These are generator defined PDG I...
StatusCode initialize(bool used=true)
std::vector< const TruthParticle * > particles_out() const
Get the outgoing particles.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
int status() const
Status code.
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
float eSample(const CaloSample sampling) const
Class describing a Vertex.
This class provides the client interface for accessing the detector description information common to...
std::optional< double > intersect(const AmgVector(N)&posA, const AmgVector(N)&dirA, const AmgVector(N)&posB, const AmgVector(N)&dirB)
Calculates the point B' along the line B that's closest to a second line A.
virtual double phi() const override final
The azimuthal angle ( ) of the particle.
int isPrompt(const unsigned int classify, bool allow_prompt_tau_decays=true)
#define ATH_MSG_WARNING(x)
size_t nIncomingParticles() const
Get the number of incoming particles.
bool isDecayed(const T &p)
Identify if the particle decayed.
bool isPhoton(const xAOD::Egamma *eg)
is the object a photon
bool isBeam(const T &p)
Identify if the particle is beam particle.
ParticleOrigin convHadronTypeToOrig(ParticleType pType, int motherPDG)
ParticleOrigin defJetOrig(const T &allJetMothers)
bool isSMNeutrino(const T &p)
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
@ numberOfSCTHits
number of hits in SCT [unit8_t].
ParticleType defTypeOfTau(ParticleOrigin TauOrig)
A vector of jet constituents at the scale used during jet finding.
ToolHandle< xAOD::ITruthParticlesInConeTool > m_truthInConeTool
ParticleOutCome defOutComeOfPhoton(T thePart)
Class describing a TrackParticle.
int pdgId() const
PDG ID code.
MCTruthPartClassifier::ParticleOrigin defOrigOfTau(const xAOD::TruthParticleContainer &xTruthParticleContainer, const xAOD::TruthParticle *, int motherPDG, MCTruthPartClassifier::Info &info) const
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Set * set_intersection(Set *set1, Set *set2)
Perform an intersection of two sets.
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const xAOD::TruthParticle *, MCTruthPartClassifier::Info *info=nullptr) const override final
bool m_FwdElectronUseG4Sel
const xAOD::Vertex * vertex(size_t index=0) const
Pointer to the xAOD::Vertex/es that match the photon candidate.
const TruthParticle_v1 * outgoingParticle(size_t index) const
Get one of the outgoing particles.
double detEta(double x, double y) const
double charge() const
Physical charge.
bool isMSSMHiggs(const T &p)
APID: Additional Higgs bosons for MSSM (Used in MCTruthClassifier)
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
bool isHardScatteringVertex(T pVert)
Function to classify the vertex as hard scattering vertex.
double detPhi(double x, double y) const
bool isLeptoQuark(const T &p)
PDG rule 11c: “One-of-a-kind” exotic particles are assigned numbers in the range 41–80.
virtual const xAOD::TruthParticle * getGenPart(const xAOD::TrackParticle *, MCTruthPartClassifier::Info *info=nullptr) const override final