Loading [MathJax]/extensions/tex2jax.js
 |
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 > | particleTruthClassifier (const HepMcParticleLink &theLink, MCTruthPartClassifier::Info *info=nullptr) const override final |
|
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > | particleTruthClassifier (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 > &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 |
|
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 > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &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 225 of file MCTruthClassifierGen.cxx.
245 if (numOfParents > 1)
ATH_MSG_DEBUG(
"DefOrigOfElectron:: electron has more than one mother ");
248 info.setMotherProperties(mother);
251 int motherPDG = mother->
pdgId();
254 bool samePart =
false;
256 if (!theDaug)
continue;
280 parent_prdVtx = MotherParent->hasProdVtx() ? MotherParent->prodVtx() :
nullptr;
281 parent_endVtx = MotherParent->decayVtx();
283 if (mother_endVtx == parent_prdVtx && mother_prdVtx == parent_endVtx) {
284 MotherParent = mother;
288 if (MotherParent) pPDG = MotherParent->
pdgId();
290 if (mother == MotherParent)
break;
299 mother = MotherParent;
302 motherPDG = mother->
pdgId();
308 info.setMotherProperties(mother);
326 if (!theDaug)
continue;
327 int DaugType = theDaug->pdgId();
330 else if (abs(DaugType) == MC::NU_E) NumOfElNeut++;
331 else if (abs(DaugType) == MC::NU_MU) NumOfMuNeut++;
333 else if (DaugType == MC::ELECTRON) NumOfEl++;
334 else if (DaugType == MC::POSITRON) NumOfPos++;
335 else if (DaugType == MC::MUON) NumOfMuMin++;
336 else if (DaugType == -MC::MUON) NumOfMuPl++;
337 else if (
MC::isTau(DaugType)) NumOfTau++;
338 else if (abs(DaugType) == MC::NU_TAU) NumOfTauNeut++;
341 if (numOfParents == 1 &&
343 (
MC::isNucleus(DaugType) || DaugType == 0 || DaugType == MC::PROTON || DaugType == MC::NEUTRON ||
344 abs(DaugType) == MC::PIPLUS || abs(DaugType) == MC::PI0))
350 for (
const auto& theMother: mothOriVert->
particles_in()) {
351 if (!theMother)
continue;
352 info.photonMother = theMother;
356 if ((
MC::isPhoton(motherPDG) && numOfDaug == 2 && NumOfEl == 1 && NumOfPos == 1) || (
MC::isPhoton(motherPDG) && numOfDaug == 1 && (NumOfEl == 1 || NumOfPos == 1)))
return PhotonConv;
361 if (numOfParents == 1 && abs(motherPDG) == MC::PIPLUS && numOfDaug > 2 && NumOfNucFr != 0)
return ElMagProc;
370 if (motherPDG == MC::ELECTRON && numOfDaug == 2 && NumOfEl == 2 && NumOfPos == 0)
return ElMagProc;
373 if (motherPDG == MC::POSITRON && numOfDaug == 2 && NumOfEl == 0 && NumOfPos == 2)
return ElMagProc;
380 if (numOfDaug == 2 && (NumOfEl == 1 || NumOfPos == 1) && !
MC::isElectron(motherPDG) && samePart)
return ElMagProc;
382 if ((motherPDG == MC::PI0 && numOfDaug == 3 && NumOfPhot == 1 && NumOfEl == 1 && NumOfPos == 1) ||
383 (motherPDG == MC::PI0 && numOfDaug == 4 && NumOfPhot == 0 && NumOfEl == 2 && NumOfPos == 2))
387 if (
MC::isSMQuark(motherPDG) && numOfParents == 1 && numOfDaug == 3 && NumOfquark == 1 && NumOfElNeut == 1)
return QuarkWeakDec;
400 }
while (
MC::isW(ptrPart) && prodVert);
403 if (abs(ptrPart->
pdgId()) == MC::RH_NU_E)
return NuREle;
404 if (abs(ptrPart->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
405 if (abs(ptrPart->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
419 bool isZboson =
false;
420 bool isWboson =
false;
421 bool skipnext =
false;
423 for (
unsigned int ipOut = 0; ipOut + 1 < partOriVert->
nOutgoingParticles(); ++ipOut) {
425 if (!theDaug)
continue;
427 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partOriVert->
nOutgoingParticles(); ipOut1++) {
429 if (theNextDaug)
break;
431 if (!theNextDaug)
continue;
439 if (thePartToCheck == theDaug || thePartToCheck == theNextDaug) {
446 if (thePartToCheck == theDaug || thePartToCheck == theNextDaug) {
453 if (isWboson)
return WBoson;
454 if (isZboson)
return ZBoson;
456 if (numOfParents == 2) {
460 if ((numOfDaug - NumOfquark - NumOfgluon) == 2 && NumOfEl == 1 && NumOfPos == 1)
return ZBoson;
463 if ((numOfDaug - NumOfquark - NumOfgluon) == 2 && (NumOfEl == 1 || NumOfPos == 1) && NumOfElNeut == 1)
return WBoson;
466 if ((numOfDaug - NumOfquark - NumOfgluon) == 4 && (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 4) &&
470 if ((numOfDaug - NumOfquark - NumOfgluon - NumOfPhot) == 6 && (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 6) &&
475 if (partOriVert == mothOriVert && partOriVert) {
476 int NumOfEleLoop = 0;
477 int NumOfLepLoop = 0;
478 int NumOfEleNeuLoop = 0;
481 for (
const auto *
const pin: partOriVert->
particles_in()) {
485 if (std::abs(pin->pdgId()) == MC::NU_E) NumOfEleNeuLoop++;
489 if (NumOfEleLoop == 2 && NumOfEleNeuLoop == 0)
return ZBoson;
490 if (NumOfEleLoop == 1 && NumOfEleNeuLoop == 1)
return WBoson;
491 if ((NumOfEleLoop == 4 && NumOfEleNeuLoop == 0) || (NumOfEleLoop == 3 && NumOfEleNeuLoop == 1) ||
492 (NumOfEleLoop == 2 && NumOfEleNeuLoop == 2))
494 if (NumOfLepLoop == 4)
return DiBoson;
512 if (abs(motherPDG) == MC::WBOSON_LRSM)
return WBosonLRSM;
513 if (abs(motherPDG) == MC::RH_NU_E)
return NuREle;
514 if (abs(motherPDG) == MC::RH_NU_MU)
return NuRMu;
515 if (abs(motherPDG) == MC::RH_NU_TAU)
return NuRTau;
◆ defOrigOfMuon()
Definition at line 525 of file MCTruthClassifierGen.cxx.
545 if (numOfParents > 1)
ATH_MSG_DEBUG(
"DefOrigOfMuon:: muon has more than one mother ");
548 info.setMotherProperties(mother);
552 int motherPDG = mother->
pdgId();
571 parent_prdVtx = MotherParent->hasProdVtx() ? MotherParent->prodVtx() :
nullptr;
572 parent_endVtx = MotherParent->decayVtx();
575 if (mother_endVtx == parent_prdVtx && mother_prdVtx == parent_endVtx) {
576 MotherParent = mother;
581 if (mother == MotherParent) {
586 pPDG = MotherParent->
pdgId();
588 mother = MotherParent;
589 info.setMotherProperties(mother);
598 info.setMotherProperties(mother);
602 motherPDG = mother->
pdgId();
608 info.setMotherProperties(mother);
609 auto DP = DecayProducts(partOriVert);
610 const int NumOfPhot = DP.pd(MC::PHOTON);
611 const int NumOfEl = DP.pd(MC::ELECTRON);
612 const int NumOfPos = DP.pd(MC::POSITRON);
613 const int NumOfElNeut = DP.apd(MC::NU_E);
614 const int NumOfMuNeut = DP.apd(MC::NU_MU);
615 const int NumOfLQ = DP.apd(MC::LEPTOQUARK);
616 const int NumOfquark = DP.apd({MC::DQUARK,MC::UQUARK,MC::SQUARK,MC::CQUARK,MC::BQUARK,MC::TQUARK});
617 const int NumOfgluon = DP.apd(MC::GLUON);
618 const int NumOfMuPl = DP.pd(-MC::MUON);
619 const int NumOfMuMin = DP.pd(MC::MUON);
620 const int NumOfTau = DP.apd(MC::TAU);
621 const int NumOfTauNeut = DP.apd(MC::NU_TAU);
622 if (std::abs(motherPDG) == MC::PIPLUS && numOfDaug == 2 && NumOfMuNeut == 1)
return PionDecay;
623 if (std::abs(motherPDG) == MC::KPLUS && numOfDaug == 2 && NumOfMuNeut == 1)
return KaonDecay;
632 if (
MC::isSMQuark(motherPDG) && numOfParents == 1 && numOfDaug == 3 && NumOfquark == 1 && NumOfMuNeut == 1)
return QuarkWeakDec;
640 }
while (
MC::isW(itrP) && prodVert);
643 if (abs(itrP->
pdgId()) == MC::RH_NU_E)
return NuREle;
644 if (abs(itrP->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
645 if (abs(itrP->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
657 bool isZboson =
false;
658 bool isWboson =
false;
659 bool skipnext =
false;
660 for (
unsigned int ipOut = 0; ipOut + 1 < partOriVert->
nOutgoingParticles(); ipOut++) {
666 if (!theDaug)
continue;
668 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partOriVert->
nOutgoingParticles(); ipOut1++) {
670 if (theNextDaug)
break;
672 if (!theNextDaug)
continue;
675 if (thePriPart == theDaug || thePriPart == theNextDaug) {
680 }
else if (
MC::isMuon(theDaug) && abs(theNextDaug->pdgId()) == MC::NU_MU) {
682 if (thePriPart == theDaug || thePriPart == theNextDaug) {
689 if (isWboson)
return WBoson;
690 if (isZboson)
return ZBoson;
692 if (numOfParents == 2 ) {
696 if ((numOfDaug - NumOfquark - NumOfgluon) == 2 && NumOfMuPl == 1 && NumOfMuMin == 1)
return ZBoson;
700 if ((numOfDaug - NumOfquark - NumOfgluon) == 2 && (NumOfMuPl == 1 || NumOfMuMin == 1) && NumOfMuNeut == 1)
return WBoson;
703 if ((numOfDaug - NumOfquark - NumOfgluon) == 4 &&
704 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 4) &&
708 if ((numOfDaug - NumOfquark - NumOfgluon - NumOfPhot) == 6 &&
709 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 6) &&
714 if (partOriVert == mothOriVert) {
716 int NumOfMuNeuLoop = 0;
717 int NumOfLepLoop = 0;
724 if (std::abs(
pout->pdg_id()) == MC::NU_MU) NumOfMuNeuLoop++;
729 if (NumOfMuLoop == 2 && NumOfMuNeuLoop == 0)
return ZBoson;
730 if (NumOfMuLoop == 1 && NumOfMuNeuLoop == 1)
return WBoson;
731 if ((NumOfMuLoop == 4 && NumOfMuNeuLoop == 0) || (NumOfMuLoop == 3 && NumOfMuNeuLoop == 1) || (NumOfMuLoop == 2 && NumOfMuNeuLoop == 2))
return DiBoson;
732 if (NumOfLepLoop == 4)
return DiBoson;
743 if (abs(motherPDG) == MC::WBOSON_LRSM)
return WBosonLRSM;
744 if (abs(motherPDG) == MC::RH_NU_E)
return NuREle;
745 if (abs(motherPDG) == MC::RH_NU_MU)
return NuRMu;
746 if (abs(motherPDG) == MC::RH_NU_TAU)
return NuRTau;
◆ defOrigOfNeutrino()
Definition at line 1190 of file MCTruthClassifierGen.cxx.
1197 const int nuFlav = abs(thePart->
pdgId());
1211 if (numOfParents > 1)
ATH_MSG_DEBUG(
"DefOrigOfNeutrino:: neutrino has more than one mother ");
1214 info.setMotherProperties(mother);
1217 int motherPDG = mother->
pdgId();
1221 bool samePart =
false;
1224 if ((abs(motherPDG) == nuFlav ||
MC::isTau(motherPDG) ||
MC::isW(motherPDG)) && mothOriVert &&
1236 mother_endVtx = mother->
decayVtx();
1241 parent_prdVtx = MotherParent->hasProdVtx() ? MotherParent->prodVtx() :
nullptr;
1242 parent_endVtx = MotherParent->decayVtx();
1244 if (mother_endVtx == parent_prdVtx && mother_prdVtx == parent_endVtx) {
1245 MotherParent = mother;
1250 pPDG = MotherParent->
pdgId();
1253 if (mother == MotherParent) {
1257 mother = MotherParent;
1258 info.setMotherProperties(mother);
1267 mother = MotherParent;
1268 info.setMotherProperties(mother);
1274 motherPDG = mother->
pdgId();
1280 info.setMotherProperties(mother);
1288 int NumOfTauNeut(0);
1295 if (!theDaug)
continue;
1296 int DaugType = theDaug->pdgId();
1299 else if (abs(DaugType) == MC::NU_E) NumOfElNeut++;
1300 else if (std::abs(DaugType) == MC::NU_MU) NumOfMuNeut++;
1301 else if (std::abs(DaugType) == MC::NU_TAU) NumOfTauNeut++;
1305 else if (
MC::isTau(DaugType)) NumOfTau++;
1311 if (
MC::isQuark(motherPDG) && numOfParents == 1 && numOfDaug == 3 && NumOfquark == 1 && (NumOfEl == 1 || NumOfMu == 1 || NumOfTau == 1))
return QuarkWeakDec;
1320 }
while (
MC::isW(ptrPart) && prodVert);
1323 if (abs(ptrPart->
pdgId()) == MC::RH_NU_E)
return NuREle;
1324 if (abs(ptrPart->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
1325 if (abs(ptrPart->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
1341 bool isZboson =
false;
1342 bool isWboson =
false;
1343 bool skipnext =
false;
1345 for (
unsigned int ipOut = 0; ipOut + 1 < partOriVert->
nOutgoingParticles(); ++ipOut) {
1347 if (!theDaug)
continue;
1349 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partOriVert->
nOutgoingParticles(); ipOut1++) {
1351 if (theNextDaug)
break;
1353 if (!theNextDaug)
continue;
1360 const int apdgID1 = abs(theDaug->
pdgId());
1361 const int apdgID2 = abs(theNextDaug->pdgId());
1364 if (thePartToCheck == theDaug || thePartToCheck == theNextDaug) {
1369 }
else if ((apdgID1 == MC::ELECTRON && apdgID2 == MC::NU_E) ||
1370 (apdgID1 == MC::NU_E && apdgID2 == MC::ELECTRON) ||
1371 (apdgID1 == MC::MUON && apdgID2 == MC::NU_MU) ||
1372 (apdgID1 == MC::NU_MU && apdgID2 == MC::MUON) ||
1373 (apdgID1 == MC::TAU && apdgID2 == MC::NU_TAU) ||
1374 (apdgID1 == MC::NU_TAU && apdgID2 == MC::TAU)
1377 if (thePartToCheck == theDaug || thePartToCheck == theNextDaug) {
1384 if (isWboson)
return WBoson;
1385 if (isZboson)
return ZBoson;
1388 if (numOfParents == 2) {
1392 if ( (numOfDaug - NumOfquark - NumOfgluon) == 2 && (NumOfElNeut == 2 || NumOfMuNeut == 2 || NumOfTauNeut == 2))
return ZBoson;
1395 if ((numOfDaug - NumOfquark - NumOfgluon) == 2 && ((NumOfEl == 1 && NumOfElNeut == 1) || (NumOfMu == 1 && NumOfMuNeut == 1) || (NumOfTau == 1 && NumOfTauNeut == 1)))
return WBoson;
1398 if ( (numOfDaug - NumOfquark - NumOfgluon) == 4 && (NumOfEl + NumOfMu + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 4) &&
1402 if ((numOfDaug - NumOfquark - NumOfgluon - NumOfPhot) == 6 && (NumOfEl + NumOfMu + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 6) &&
1407 if (partOriVert == mothOriVert && partOriVert) {
1408 int NumOfLepLoop = 0;
1409 int NumOfNeuLoop = 0;
1411 if (!
pout)
continue;
1412 for (
const auto *
const pin: partOriVert->
particles_in()) {
1415 const int apdgid = abs(
pout->pdgId());
1418 else { NumOfLepLoop++; }
1422 if (NumOfNeuLoop == 2 && NumOfLepLoop == 0)
return ZBoson;
1423 if (NumOfNeuLoop == 1 && NumOfLepLoop == 1)
return WBoson;
1424 if (NumOfNeuLoop + NumOfLepLoop == 4)
return DiBoson;
1439 if (abs(motherPDG) == MC::WBOSON_LRSM)
return WBosonLRSM;
1440 if (abs(motherPDG) == MC::RH_NU_E)
return NuREle;
1441 if (abs(motherPDG) == MC::RH_NU_MU)
return NuRMu;
1442 if (abs(motherPDG) == MC::RH_NU_TAU)
return NuRTau;
◆ defOrigOfPhoton()
Definition at line 930 of file MCTruthClassifierGen.cxx.
938 info.resetMotherProperties();
939 info.photonMother =
nullptr;
957 info.setMotherProperties(mother);
960 int motherPDG = mother->
pdgId();
975 long NumOfPartons(0);
979 DaugType =
pout->pdg_id();
981 (
MC::isNucleus(DaugType) || DaugType == 0 || DaugType == MC::PROTON || DaugType == MC::NEUTRON))
983 if (DaugType == MC::PHOTON) NumOfPht++;
984 else if (DaugType == MC::ELECTRON) NumOfEl++;
985 else if (DaugType == MC::POSITRON) NumOfPos++;
987 else if (
MC::isTau(DaugType)) NumOfTau++;
990 else if (abs(DaugType) == MC::NU_E || abs(DaugType) == MC::NU_MU || abs(DaugType) == MC::NU_TAU) NumOfNeut++;
991 if (abs(DaugType) < MC::ELECTRON || (abs(DaugType) > MC::NU_TAU && abs(DaugType) < 43 && !
MC::isPhoton(DaugType))) {
998 if (DaugType == motherPDG) {
1003 bool foundISR =
false;
1004 bool foundFSR =
false;
1018 for (
const auto & pin: Vert->particles_in()) {
1020 PartPDG = abs(pin->pdgId());
1021 prodVert = pin->prodVtx();
1029 }
while (prodVert && abs(motherPDG) == PartPDG);
1040 (numOfParents == 1 && abs(motherPDG) == MC::PIPLUS && numOfDaug > 10 && NumOfNucFr != 0) ||
1042 (numOfParents == 1 &&
MC::isNucleus(motherPDG) && std::abs(motherPDG) != MC::PROTON))
1055 if (!
pout)
continue;
1056 if (motherPDG !=
pout->pdgId())
continue;
1058 if (!Vrtx)
continue;
1071 if (numOfParents == 2 && ((
MC::isElectron(motherPDG) && NumOfEl == 1 && NumOfPos == 1) || (
MC::isMuon(motherPDG) && NumOfMu == 2) || (
MC::isTau(motherPDG) && NumOfTau == 2))) {
1075 if (numOfParents == 2 && NumOfLep == 1 && NumOfNeut == 1 && (
MC::isElectron(motherPDG) || abs(motherPDG) == MC::NU_E))
return FSRPhot;
1078 if (
MC::isElectron(motherPDG) && numOfParents == 1 && numOfDaug == 2 && (NumOfEl == 1 || NumOfPos == 1) && NumOfPht == 1 &&
1083 if (
MC::isZ(motherPDG) && ((NumOfEl + NumOfPos == 2 || NumOfEl + NumOfPos == 4) || (NumOfMu == 2 || NumOfMu == 4) || (NumOfTau == 2 || NumOfTau == 4)) && NumOfPht > 0)
return FSRPhot;
1087 if (numOfParents == 2 && NumOfLQ == 1)
return FSRPhot;
1094 if (NumOfLep == 1 && NumOfNeut == 1 && numOfDaug == NumOfLep + NumOfNeut + NumOfPht)
return FSRPhot;
1102 }
while (
MC::isW(itrP) && prodVert);
1107 if ( abs(itrP->
pdgId()) == MC::RH_NU_E)
return NuREle;
1108 if ( abs(itrP->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
1109 if ( abs(itrP->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
1117 bool isZboson =
false;
1118 bool isWboson =
false;
1119 bool skipnext =
false;
1120 for (
unsigned int ipOut = 0; ipOut + 1 < partOriVert->
nOutgoingParticles(); ipOut++) {
1126 if (!theDaug)
continue;
1128 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partOriVert->
nOutgoingParticles(); ipOut1++) {
1130 if (theNextDaug)
break;
1132 if (!theNextDaug)
continue;
1135 if (thePriPart == theDaug || thePriPart == theNextDaug) {
1140 }
else if (
MC::isTau(theDaug) && abs(theNextDaug->pdgId()) == MC::NU_TAU) {
1142 if (thePriPart == theDaug || thePriPart == theNextDaug) {
1149 if (isWboson)
return WBoson;
1150 if (isZboson)
return ZBoson;
1154 if (numOfParents == 4 && (numOfDaug - NumOfPht) == 4 && (NumOfLep + NumOfNeut == 4)) {
1161 if (partOriVert == mothOriVert && partOriVert) {
1162 int NumOfPhtLoop = 0;
1164 if (!
pout)
continue;
1165 for (
const auto *
const pin: partOriVert->
particles_in()) {
1174 if (abs(motherPDG) == MC::PI0)
return PiZero;
◆ defOrigOfTau()
Definition at line 757 of file MCTruthClassifierGen.cxx.
776 if (numOfParents > 1)
ATH_MSG_DEBUG(
"DefOrigOfTau:: tau has more than one mother ");
779 info.setMotherProperties(mother);
786 if (
MC::isW(motherPDGin) && mothOriVert) {
791 pPDG = MotherParent->pdgId();
793 mother = MotherParent;
794 info.setMotherProperties(mother);
799 int motherPDG = mother->
pdgId();
800 info.setMotherProperties(mother);
806 auto DP = DecayProducts(partOriVert);
807 const int numOfDaug = DP.size();
808 const int NumOfPhot = DP.pd(MC::PHOTON);
809 const int NumOfEl = DP.pd(MC::ELECTRON);
810 const int NumOfPos = DP.pd(MC::POSITRON);
811 const int NumOfElNeut = DP.apd(MC::NU_E);
812 const int NumOfMuNeut = DP.apd(MC::NU_MU);
814 const int NumOfquark = DP.apd({MC::DQUARK,MC::UQUARK,MC::SQUARK,MC::CQUARK,MC::BQUARK,MC::TQUARK});
815 const int NumOfgluon = DP.apd(MC::GLUON);
816 const int NumOfMuPl = DP.pd(-MC::MUON);
817 const int NumOfMuMin = DP.pd(MC::MUON);
818 const int NumOfTau = DP.apd(MC::TAU);
819 const int NumOfTauNeut = DP.apd(MC::NU_TAU);
828 }
while (
MC::isW(itrP) && prodVert);
831 if (abs(itrP->
pdgId()) == MC::RH_NU_E)
return NuREle;
832 if (abs(itrP->
pdgId()) == MC::RH_NU_MU)
return NuRMu;
833 if (abs(itrP->
pdgId()) == MC::RH_NU_TAU)
return NuRTau;
840 bool isZboson =
false;
841 bool isWboson =
false;
842 bool skipnext =
false;
843 for (
unsigned int ipOut = 0; ipOut + 1 < partOriVert->
nOutgoingParticles(); ipOut++) {
849 if (!theDaug)
continue;
851 for (
unsigned int ipOut1 = ipOut + 1; ipOut1 < partOriVert->
nOutgoingParticles(); ipOut1++) {
853 if (theNextDaug)
break;
860 if (thePriPart == theDaug || thePriPart == theNextDaug) {
865 }
else if (
MC::isTau(theDaug) && abs(theNextDaug->pdgId()) == MC::NU_TAU) {
867 if (thePriPart == theDaug || thePriPart == theNextDaug) {
874 if (isWboson)
return WBoson;
875 if (isZboson)
return ZBoson;
877 if (numOfParents == 2 ) {
884 if ((numOfDaug - NumOfquark - NumOfgluon) == 2 && NumOfTau == 1 && NumOfTauNeut == 1)
return WBoson;
887 if ((numOfDaug - NumOfquark - NumOfgluon) == 4 &&
888 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 4) &&
892 if ((numOfDaug - NumOfquark - NumOfgluon - NumOfPhot) == 6 &&
893 (NumOfEl + NumOfPos + NumOfMuPl + NumOfMuMin + NumOfTau + NumOfElNeut + NumOfMuNeut + NumOfTauNeut == 6) &&
897 if (partOriVert == mothOriVert) {
898 int NumOfTauLoop = 0;
899 int NumOfTauNeuLoop = 0;
900 int NumOfLepLoop = 0;
903 for (
const auto *
const pin: partOriVert->
particles_in()) {
907 if (std::abs(
pout->pdgId()) == MC::NU_TAU) NumOfTauNeuLoop++;
911 if (NumOfTauLoop == 2 && NumOfTauNeuLoop == 0)
return ZBoson;
912 if (NumOfTauLoop == 1 && NumOfTauNeuLoop == 1)
return WBoson;
913 if ((NumOfTauLoop == 4 && NumOfTauNeuLoop == 0) || (NumOfTauLoop == 3 && NumOfTauNeuLoop == 1) || (NumOfTauLoop == 2 && NumOfTauNeuLoop == 2))
return DiBoson;
914 if (NumOfLepLoop == 4)
return DiBoson;
920 if (abs(motherPDG) == MC::WBOSON_LRSM)
return WBosonLRSM;
921 if (abs(motherPDG) == MC::RH_NU_TAU)
return NuRTau;
924 if (abs(motherPDG) == 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);
302 for (
const auto *particle0 :
vec) {
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.
◆ particleTruthClassifier() [1/9]
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());
◆ particleTruthClassifier() [2/9]
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() [3/9]
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() [4/9]
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() [5/9]
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() [6/9]
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() [7/9]
◆ particleTruthClassifier() [8/9]
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 ");
136 const int motherPDG = theMoth?theMoth->pdg_id():0;
137 info.setMotherProperties(theMoth);
154 if (!partOriVert &&
MC::isTau(thePart)) {
156 partOrig =
defOrigOfTau(*truthParticleContainerReadHandle, thePart, motherPDG,
info);
168 return std::make_pair(
Neutrino, partOrig);
174 if (isPartHadr)
return std::make_pair(
Hadron, partOrig);
207 partOrig =
defOrigOfTau(*truthParticleContainerReadHandle, thePart, motherPDG,
info);
220 return std::make_pair(partType, partOrig);
◆ particleTruthClassifier() [9/9]
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);
◆ 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, 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, 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.
◆ 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)
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
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.
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)
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.
bool isQuark(const T &p)
PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to dot...
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
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)
const TruthParticle_v1 * incomingParticle(size_t index) const
Get one of the incoming particles.
ParticleType defTypeOfHadron(int pdg)
bool isSUSY(const T &p)
PDG rule 11d Fundamental supersymmetric particles are identified by adding a nonzero n to the particl...
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 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.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
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