ATLAS Offline Software
Loading...
Searching...
No Matches
JetTruthLabelingTool Class Reference

#include <JetTruthLabelingTool.h>

Inheritance diagram for JetTruthLabelingTool:
Collaboration diagram for JetTruthLabelingTool:

Classes

struct  DecorHandles
 Upper mass cut for Z label. More...

Public Member Functions

 JetTruthLabelingTool (const std::string &name="JetTruthLabelingTool")
 default constructor - to be used in all derived classes
virtual StatusCode initialize () override
 Dummy implementation of the initialisation function.
StatusCode decorate (const xAOD::JetContainer &jets) const override
 decorate truth label to a jet collection
void print () const override
 Print configured parameters.
const std::string & getLargeRJetTruthLabelName () const
 returns the name of large-R jet truth label
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
virtual StatusCode modify (xAOD::JetContainer &jets) const override final
 Concrete implementation of the function inherited from IJetModifier.
Additional helper functions, not directly mimicking Athena
template<class T>
const T * getProperty (const std::string &name) const
 Get one of the tool's properties.
const std::string & msg_level_name () const __attribute__((deprecated))
 A deprecated function for getting the message level's name.
const std::string & getName (const void *ptr) const
 Get the name of an object that is / should be in the event store.
SG::sgkey_t getKey (const void *ptr) const
 Get the (hashed) key of an object that is in the event store.

Protected Member Functions

StatusCode labelTruthJets (DecorHandles &dh, const EventContext &ctx) const
 Label truth jet collection.
StatusCode labelTruthJets (DecorHandles &dh, const xAOD::JetContainer &jets, const EventContext &ctx) const
StatusCode labelRecoJets (DecorHandles &dh, const xAOD::JetContainer &jets, const EventContext &ctx) const
 Apply labels to all jets in a container.
int getTruthJetLabelDR (DecorHandles &dh, const xAOD::Jet &jet, const std::vector< std::pair< TLorentzVector, int > > &tlv_truthParts, const EventContext &ctx) const
 Get truth label using dR-matched particles.
int getTruthJetLabelGA (DecorHandles &dh, const xAOD::Jet &jet, const EventContext &ctx) const
 Get truth label using ghost-associated particles.
int getLabel (DecorHandles &dh, const xAOD::Jet &jet, bool matchH, bool matchW, bool matchZ, bool matchTop, const EventContext &ctx) const
 Get label based on matching and containment criteria.
float getWZSplit12Cut (float pt) const
 Get W/Z label Split12 cut.
float getTopSplit23Cut (float pt) const
 Get top label Split23 cut.
int getNGhostParticles (const xAOD::Jet &jet, std::string collection) const
 Get number of ghost associated particles.
bool getIsSherpa (const int DSID) const
 Check for Sherpa DSIDs.
void getTLVs (std::vector< std::pair< TLorentzVector, int > > &tlvs, const xAOD::TruthParticleContainer *truthBosons, const xAOD::TruthParticleContainer *truthTop, bool isSherpa=false) const
 Extract heavy particle 4-vectors from truth record.
bool selectTruthParticle (const xAOD::TruthParticle *tp, int pdgId) const
 Check if truth particle has correct DSID and isn't self decay.
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

Gaudi::Property< std::string > m_jetContainerName {this, "RecoJetContainer", "", "Input reco jet container name"}
Gaudi::Property< std::string > m_truthLabelName {this, "TruthLabelName", "R10TruthLabel_R21Consolidated", "Truth label name"}
Gaudi::Property< bool > m_isTruthJetCol {this, "IsTruthJetCollection", false, "Flag indicating whether input collection is a truth jet container"}
SG::ReadHandleKey< xAOD::EventInfom_evtInfoKey {this, "EventInfoKey", "EventInfo", "Name of EventInfo object"}
Gaudi::Property< bool > m_useTRUTH3 {this, "UseTRUTH3", false, "True for TRUTH3 format, false for TRUTH1"}
 TRUTH1 or TRUTH3.
SG::ReadHandleKey< xAOD::TruthParticleContainerm_truthParticleContainerName {this, "TruthParticleContainerName", "TruthParticles", "Truth particle container name"}
SG::ReadHandleKey< xAOD::TruthParticleContainerm_truthBosonContainerName {this, "TruthBosonContainerName", "TruthBosonsWithDecayParticles", "Truth boson container name"}
SG::ReadHandleKey< xAOD::TruthParticleContainerm_truthTopQuarkContainerName {this, "TruthTopQuarkContainerName", "TruthTopQuarkWithDecayParticles", "Truth top container name"}
SG::ReadHandleKey< xAOD::JetContainerm_truthJetCollectionName {this, "TruthJetContainer", "", "Do not configure manually!"}
 parameters for truth labeling
SG::ReadHandleKey< xAOD::JetContainerm_truthGroomedJetCollectionName {this, "TruthGroomedJetContainer", "", "Do not configure manually!"}
bool m_useDRMatch {}
bool m_useWZMassHigh {}
 Use dR to match partons to truth jet.
bool m_matchUngroomedParent {}
 Use upper mass cut for W/Z labels.
bool m_getTruthGroomedJetValues {}
 Use the ungroomed reco jet parent to match to truth jet.
double m_dRTruthJet {}
 When truth jet matching to ungroomed truth, allow saving properties of groomed truth jets.
double m_dRTruthPart {}
 dR to match truth jet to reco jet
double m_mLowTop {}
 dR to match truth particles to truth jet
double m_mLowW {}
 Lower mass cut for top label.
double m_mHighW {}
 Lower mass cut for W label.
double m_mLowZ {}
 Upper mass cut for W label.
double m_mHighZ {}
 Lower mass cut for Z label.
SG::WriteDecorHandleKey< xAOD::JetContainerm_label_truthKey {this, "label_TruthKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_dR_W_truthKey {this, "dR_W_TruthKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_dR_Z_truthKey {this, "dR_Z_TruthKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_dR_H_truthKey {this, "dR_H_TruthKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_dR_Top_truthKey {this, "dR_Top_TruthKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_NB_truthKey {this, "NB_TruthKey", "", "Do not configure manually!"}
SG::ReadDecorHandleKey< xAOD::JetContainerm_split12_truthKey {this, "Split12_TruthKey", "", "Do not configure manually!"}
SG::ReadDecorHandleKey< xAOD::JetContainerm_split23_truthKey {this, "Split23_TruthKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_label_recoKey {this, "label_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_dR_W_recoKey {this, "dR_W_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_dR_Z_recoKey {this, "dR_Z_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_dR_H_recoKey {this, "dR_H_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_dR_Top_recoKey {this, "dR_Top_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_NB_recoKey {this, "NB_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_truthSplit12_recoKey {this, "TruthSplit12_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_truthSplit23_recoKey {this, "TruthSplit23_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_truthJetMass_recoKey {this, "TruthJetMass_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_truthJetPt_recoKey {this, "TruthJetPt_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_truthGroomedJetMass_recoKey {this, "TruthGroomedJetMass_RecoKey", "", "Do not configure manually!"}
SG::WriteDecorHandleKey< xAOD::JetContainerm_truthGroomedJetPt_recoKey {this, "TruthGroomedJetPt_RecoKey", "", "Do not configure manually!"}

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Friends

struct DecorHandles

Detailed Description

Definition at line 23 of file JetTruthLabelingTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ JetTruthLabelingTool()

JetTruthLabelingTool::JetTruthLabelingTool ( const std::string & name = "JetTruthLabelingTool")

default constructor - to be used in all derived classes

Definition at line 14 of file JetTruthLabelingTool.cxx.

14 :
15 asg::AsgTool(name)
16{}

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ decorate()

StatusCode JetTruthLabelingTool::decorate ( const xAOD::JetContainer & jets) const
overridevirtual

decorate truth label to a jet collection

Apply label to truth jet collections

Copy label to matched reco jets

Implements IJetDecorator.

Definition at line 317 of file JetTruthLabelingTool.cxx.

317 {
318 const EventContext& ctx = Gaudi::Hive::currentContext();
319 DecorHandles dh (*this, ctx);
320
322 if(m_isTruthJetCol) {
323 return labelTruthJets(dh, jets, ctx);
324 }
325
327 else {
328 ATH_CHECK( labelTruthJets(dh, ctx) );
329 return labelRecoJets(dh, jets, ctx);
330 }
331
332 return StatusCode::SUCCESS;
333}
#define ATH_CHECK
Evaluate an expression and check for errors.
StatusCode labelRecoJets(DecorHandles &dh, const xAOD::JetContainer &jets, const EventContext &ctx) const
Apply labels to all jets in a container.
StatusCode labelTruthJets(DecorHandles &dh, const EventContext &ctx) const
Label truth jet collection.
Gaudi::Property< bool > m_isTruthJetCol

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

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

◆ getIsSherpa()

bool JetTruthLabelingTool::getIsSherpa ( const int DSID) const
inlineprotected

Check for Sherpa DSIDs.

Definition at line 142 of file JetTruthLabelingTool.h.

142 {
143 if(
144 (304307 <= DSID && DSID <= 304309) || // Sherpa 2.2.1 W+jets
145 (304707 <= DSID && DSID <= 304709) // Sherpa 2.2.1 Z+jets
146 ) {
147 return true;
148 }
149 return false;
150 };

◆ getKey()

SG::sgkey_t asg::AsgTool::getKey ( const void * ptr) const
inherited

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
ptrThe 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.

119 {
120
121#ifdef XAOD_STANDALONE
122 // In case we use @c xAOD::TEvent, we have a direct function call
123 // for this.
124 return evtStore()->event()->getKey( ptr );
125#else
126 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
127 return ( proxy == nullptr ? 0 : proxy->sgkey() );
128#endif // XAOD_STANDALONE
129 }
ServiceHandle< StoreGateSvc > & evtStore()

◆ getLabel()

int JetTruthLabelingTool::getLabel ( DecorHandles & dh,
const xAOD::Jet & jet,
bool matchH,
bool matchW,
bool matchZ,
bool matchTop,
const EventContext & ctx ) const
protected

Get label based on matching and containment criteria.

Booleans for containment selections

Use R21Consolidated definition

Use R21Precision definition

This method can be expanded to include custom label priorities

If it isn't matched to any heavy particles, is it QCD

Contained H->bb

Contained H->cc

Contained H->tautau

Other from H

Contained top

Contained W from a top

Contained W not from a top

Contained Z->bb

Contained Z->cc

Contained Z->tautau

Contained Z->qq

Uncontained top

Uncontained V

Definition at line 775 of file JetTruthLabelingTool.cxx.

781 {
782
783 // store GhostBHadronsFinal count
784 int nMatchB = getNGhostParticles( jet, "GhostBHadronsFinal" );
785 (*dh.nbHandle)(jet) = nMatchB;
786
788 bool is_bb = false;
789 bool is_cc = false;
790 bool is_tautauEl = false;
791 bool is_tautauMu = false;
792 bool is_tautauHad = false;
793 bool isTop = false;
794 bool isW = false;
795 bool isZ = false;
796
798 if ( m_truthLabelName == "R10TruthLabel_R21Consolidated" ) {
799 is_bb = ( nMatchB > 1 );
800 isTop = ( matchTop && nMatchB > 0 && jet.m() / 1000. > m_mLowTop );
801 isW = matchW && nMatchB == 0 && jet.m() / 1000. > m_mLowW && jet.m() / 1000. < m_mHighW;
802 isZ = matchZ && jet.m() / 1000. > m_mLowZ && jet.m() / 1000. < m_mHighZ;
803 }
804
806 if ( m_truthLabelName == "R10TruthLabel_R21Precision" ) {
807 SG::ReadDecorHandle<xAOD::JetContainer, float> split23Handle(m_split23_truthKey, ctx);
808 is_bb = ( nMatchB > 1 );
809 isTop = ( matchTop && matchW && nMatchB > 0 && jet.m() / 1000. > m_mLowTop && split23Handle(jet) / 1000. > getTopSplit23Cut( jet.pt() / 1000. ) );
810 isW = matchW && nMatchB == 0 && jet.m() / 1000. > m_mLowW && jet.m() / 1000. < m_mHighW;
811 isZ = matchZ && jet.m() / 1000. > m_mLowZ && jet.m() / 1000. < m_mHighZ;
812 }
813
814 // Use R21Precision_2022v1 definition
815 if ( m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" ) {
816 SG::ReadDecorHandle<xAOD::JetContainer, float> split23Handle(m_split23_truthKey, ctx);
817 SG::ReadDecorHandle<xAOD::JetContainer, float> split12Handle(m_split12_truthKey, ctx);
818 is_bb = ( nMatchB > 1 );
819 isTop = ( matchTop && matchW && nMatchB > 0 && jet.m() / 1000. > m_mLowTop && split23Handle(jet) / 1000. > getTopSplit23Cut( jet.pt() / 1000. ) );
820 isW = matchW && nMatchB == 0 && jet.m() / 1000. > m_mLowW && split12Handle(jet) / 1000. > getWZSplit12Cut( jet.pt() / 1000. );
821 isZ = matchZ && jet.m() / 1000. > m_mLowZ && split12Handle(jet) / 1000. > getWZSplit12Cut( jet.pt() / 1000. );
822 }
823
824 // Use R10TruthLabel_R22v1 definition
825 if ( m_truthLabelName == "R10TruthLabel_R22v1" || m_truthLabelName == "R10WZTruthLabel_R22v1") {
826 // get extended ghost associated truth label
827 int extended_GA_label = -1;
828 if (not jet.getAttribute("HadronGhostExtendedTruthLabelID", extended_GA_label)) {
829 ATH_MSG_ERROR( "HadronGhostExtendedTruthLabelID not available for " + m_truthJetCollectionName.key() );
830 }
831
832 SG::ReadDecorHandle<xAOD::JetContainer, float> split23Handle(m_split23_truthKey, ctx);
833 SG::ReadDecorHandle<xAOD::JetContainer, float> split12Handle(m_split12_truthKey, ctx);
834 is_bb = ( extended_GA_label == 55 );
835 is_cc = ( extended_GA_label == 44 );
836 is_tautauEl = ( extended_GA_label == 151511 );
837 is_tautauMu = ( extended_GA_label == 151513 );
838 is_tautauHad = ( extended_GA_label == 1515 );
839 isTop = ( matchTop && matchW && nMatchB > 0 && jet.m() / 1000. > m_mLowTop && split23Handle(jet) / 1000. > getTopSplit23Cut( jet.pt() / 1000. ) );
840 isW = matchW && nMatchB == 0 && jet.m() / 1000. > m_mLowW && split12Handle(jet) / 1000. > getWZSplit12Cut( jet.pt() / 1000. );
841 isZ = matchZ && jet.m() / 1000. > m_mLowZ && split12Handle(jet) / 1000. > getWZSplit12Cut( jet.pt() / 1000. );
842 }
843
844
846
847 /* The default priority of labels is:
848 * 1) Hbb/cc/tautau
849 * 2) Contained top
850 * 3) Contained W
851 * 4) Contained Zbb/cc/qq/tautau
852 * 5) Uncontained top
853 * 6) Uncontained V
854 */
855
857 if( !(matchTop || matchW || matchZ || matchH) ) {
859 }
860
861 // Higgs
862 if ( matchH ) {
864 if ( is_bb ) return LargeRJetTruthLabel::Hbb;
866 if ( is_cc ) return LargeRJetTruthLabel::Hcc;
868 if ( is_tautauEl ) return LargeRJetTruthLabel::HtautauEl;
869 if ( is_tautauMu ) return LargeRJetTruthLabel::HtautauMu;
870 if ( is_tautauHad ) return LargeRJetTruthLabel::HtautauHad;
873 }
874
876 if ( isTop ) return LargeRJetTruthLabel::tqqb;
877
878 if ( isW ) {
880 if ( matchTop ) return LargeRJetTruthLabel::Wqq_From_t;
883 }
884
885 if ( matchZ ) {
887 if ( is_bb ) return LargeRJetTruthLabel::Zbb;
889 if ( is_cc ) return LargeRJetTruthLabel::Zcc;
891 if ( is_tautauEl ) return LargeRJetTruthLabel::ZtautauEl;
892 if ( is_tautauMu ) return LargeRJetTruthLabel::ZtautauMu;
893 if ( is_tautauHad ) return LargeRJetTruthLabel::ZtautauHad;
894 }
895 if ( isZ ) {
898 }
899
901 if ( matchTop ) return LargeRJetTruthLabel::other_From_t;
902
905
906}
#define ATH_MSG_ERROR(x)
bool isW(const T &p)
Definition AtlasPID.h:382
bool isZ(const T &p)
Definition AtlasPID.h:379
bool isTop(const T &p)
Definition AtlasPID.h:185
Gaudi::Property< std::string > m_truthLabelName
double m_mHighZ
Lower mass cut for Z label.
double m_mLowZ
Upper mass cut for W label.
float getTopSplit23Cut(float pt) const
Get top label Split23 cut.
double m_mLowTop
dR to match truth particles to truth jet
float getWZSplit12Cut(float pt) const
Get W/Z label Split12 cut.
int getNGhostParticles(const xAOD::Jet &jet, std::string collection) const
Get number of ghost associated particles.
SG::ReadDecorHandleKey< xAOD::JetContainer > m_split23_truthKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_split12_truthKey
SG::ReadHandleKey< xAOD::JetContainer > m_truthJetCollectionName
parameters for truth labeling
double m_mLowW
Lower mass cut for top label.
double m_mHighW
Lower mass cut for W label.
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition Jet_v1.cxx:44
virtual double m() const
The invariant mass of the particle.
Definition Jet_v1.cxx:59
bool getAttribute(AttributeID type, T &value) const
Retrieve attribute moment by enum.

◆ getLargeRJetTruthLabelName()

const std::string & JetTruthLabelingTool::getLargeRJetTruthLabelName ( ) const
inline

returns the name of large-R jet truth label

Definition at line 42 of file JetTruthLabelingTool.h.

42 {
43 return m_truthLabelName;
44 };

◆ 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
ptrThe 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.

106 {
107
108#ifdef XAOD_STANDALONE
109 // In case we use @c xAOD::TEvent, we have a direct function call
110 // for this.
111 return evtStore()->event()->getName( ptr );
112#else
113 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
114 static const std::string dummy = "";
115 return ( proxy == nullptr ? dummy : proxy->name() );
116#endif // XAOD_STANDALONE
117 }

◆ getNGhostParticles()

int JetTruthLabelingTool::getNGhostParticles ( const xAOD::Jet & jet,
std::string collection ) const
protected

Get number of ghost associated particles.

Definition at line 759 of file JetTruthLabelingTool.cxx.

759 {
760
761 int nMatchPart = 0;
762
763 if( !jet.getAttribute<int>( collection+"Count", nMatchPart ) ){
764
765 std::vector<const xAOD::TruthParticle*> ghostParts;
766 if( !jet.getAssociatedObjects<xAOD::TruthParticle>( collection, ghostParts ) ){
767 ATH_MSG_ERROR( collection + " cannot be retrieved! Truth label definition might be wrong" );
768 }
769 nMatchPart = ghostParts.size();
770 }
771
772 return nMatchPart;
773}
std::vector< const T * > getAssociatedObjects(const std::string &name) const
get associated objects as a vector<object> this compact form throws an exception if the object is not...
TruthParticle_v1 TruthParticle
Typedef to implementation.

◆ getProperty()

template<class T>
const T * asg::AsgTool::getProperty ( const std::string & name) const
inherited

Get one of the tool's properties.

◆ getTLVs()

void JetTruthLabelingTool::getTLVs ( std::vector< std::pair< TLorentzVector, int > > & tlvs,
const xAOD::TruthParticleContainer * truthBosons,
const xAOD::TruthParticleContainer * truthTop,
bool isSherpa = false ) const
protected

Extract heavy particle 4-vectors from truth record.

Sherpa W/Z+jets samples need special treatment

Decay products

W candidate

Flag for W or Z candidates

Flag to check if qq' pair is in the mass window

Skip decayed/stable

Skip anything that isn't a light quark

We want to look at first 2 partons except beam particles. Sometimes beam particles are dropped from DxAODs...

Keep particles as first daughter

Find the next particle in the list with status == 3

Skip decayed/stable

Skip anything that isn't a light quark

Daughters of Z decay should be same-flavor but opposite charge

W+ daughters should have a positive u or c

W+ daughters should have a positive u or c

If p1 is a daughter of W/Z decay, the next one is the other daughter

~98% efficiency to W/Z signals. (95% if it is changed to [65, 105]GeV and 90% if [70,100]GeV)

Store W/Z/H bosons

Save 4-vector and pdgId

Store top quarks

Save 4-vector and pdgId

Definition at line 597 of file JetTruthLabelingTool.cxx.

597 {
598
599 tlvs.clear();
600
602 if(isSherpa) {
603 int countStatus3 = 0;
604
606 TLorentzVector p1(0,0,0,0);
607 TLorentzVector p2(0,0,0,0);
608
610 TLorentzVector WZCand(0,0,0,0);
611
613 bool isWPCand = false;
614 bool isWMCand = false;
615 bool isZCand = false;
616
618 bool inMassWindow = false;
619
620 for ( unsigned int ipart = 0; ipart < truthBosons->size(); ipart++ ){
621
622 const xAOD::TruthParticle* part1 = truthBosons->at(ipart);
623
625 if ( MC::isPhysical(part1) ) continue;
626
628 if ( std::abs(part1->pdgId()) > MC::BQUARK ) continue;
629
630 countStatus3++;
632 if ( countStatus3 > 3 ) continue;
634 p1 = part1->p4();
635
637 for ( unsigned int jpart = ipart+1; jpart < truthBosons->size(); jpart++ ) {
638
639 const xAOD::TruthParticle* part2 = truthBosons->at(jpart);
640
642 if ( MC::isPhysical(part2) ) continue;
643
645 if ( std::abs(part2->pdgId()) > MC::BQUARK ) continue;
646
647 p2 = part2->p4();
648
650 if ( part1->pdgId() + part2->pdgId() == 0 ) {
651 isZCand = true;
652 }
654 else if ( part1->pdgId() == MC::UQUARK || part1->pdgId() == MC::CQUARK || part2->pdgId() == MC::UQUARK || part2->pdgId() == MC::CQUARK ) {
655 isWPCand = true;
656 }
658 else {
659 isWMCand = true;
660 }
661
663 break;
664
665 }
666
667 WZCand = p1 + p2;
668
670 if ( 60000 < WZCand.M() && WZCand.M() < 140000. ) {
671 inMassWindow = true;
672 break;
673 }
674
675 }
676
677 if ( inMassWindow && (isWPCand || isWMCand || isZCand) ) {
678 std::pair<TLorentzVector,int> WZ;
679 if ( isZCand ) {
680 WZ = std::make_pair(WZCand,23);
681 }
682 if ( isWPCand ) {
683 WZ = std::make_pair(WZCand,24);
684 }
685 if ( isWMCand ) {
686 WZ = std::make_pair(WZCand,-24);
687 }
688 tlvs.push_back(WZ);
689 }
690
691 }
692
694 for ( const xAOD::TruthParticle* part : *truthBosons ) {
697 tlvs.push_back(std::make_pair(part->p4(),part->pdgId()));
698 }
699
701 for ( const xAOD::TruthParticle* part : *truthTop ) {
702 if ( !selectTruthParticle(part,MC::TQUARK) ) continue;
704 tlvs.push_back(std::make_pair(part->p4(),part->pdgId()));
705 }
706
707}
const T * at(size_type n) const
Access an element, as an rvalue.
size_type size() const noexcept
Returns the number of elements in the collection.
bool selectTruthParticle(const xAOD::TruthParticle *tp, int pdgId) const
Check if truth particle has correct DSID and isn't self decay.
int pdgId() const
PDG ID code.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
static const int UQUARK
static const int Z0BOSON
static const int CQUARK
static const int TQUARK
static const int HIGGSBOSON
static const int BQUARK
static const int WPLUSBOSON
bool isPhysical(const T &p)
Identify if the particle is physical, i.e. is stable or decayed.

◆ getTopSplit23Cut()

float JetTruthLabelingTool::getTopSplit23Cut ( float pt) const
protected

Get top label Split23 cut.

The functional form and parameters come from optimization studies: https://indico.cern.ch/event/931498/contributions/3921872/attachments/2064188/3463746/JSS_25June.pdf

Definition at line 737 of file JetTruthLabelingTool.cxx.

737 {
738
741
742 float split23 = -999.0;
743
744 if ( m_truthLabelName == "R10TruthLabel_R21Precision" ||
745 m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" ||
746 m_truthLabelName == "R10TruthLabel_R22v1" ||
747 m_truthLabelName == "R10WZTruthLabel_R22v1") {
748
749 const float c0 = 3.3;
750 const float c1 = -6.98e-4;
751
752 split23 = std::exp( c0 + c1 * pt );
753
754 }
755
756 return split23;
757}

◆ getTruthJetLabelDR()

int JetTruthLabelingTool::getTruthJetLabelDR ( DecorHandles & dh,
const xAOD::Jet & jet,
const std::vector< std::pair< TLorentzVector, int > > & tlv_truthParts,
const EventContext & ctx ) const
protected

Get truth label using dR-matched particles.

Booleans to check associated heavy particles

Distances to truth particles

Add matching criteria decorations

Definition at line 221 of file JetTruthLabelingTool.cxx.

224 {
225
227 bool matchW = false;
228 bool matchZ = false;
229 bool matchH = false;
230 bool matchTop = false;
231
233 float dR_W = 9999;
234 float dR_Z = 9999;
235 float dR_H = 9999;
236 float dR_Top = 9999;
237
238 for (const auto& tlv_truth : tlv_truthParts) {
239 float dR = tlv_truth.first.DeltaR(jet.p4());
240 if( dR < m_dRTruthPart ) {
241
242 if ( MC::isZ(tlv_truth.second) && !matchZ ) {
243 dR_Z = dR;
244 matchZ = true;
245 }
246
247 if ( MC::isW(tlv_truth.second) && !matchW ) {
248 dR_W = dR;
249 matchW = true;
250 }
251
252 if ( MC::isHiggs(tlv_truth.second) && !matchH ) {
253 dR_H = dR;
254 matchH = true;
255 }
256
257 if ( MC::isTop(tlv_truth.second) && !matchTop ) {
258 dR_Top = dR;
259 matchTop = true;
260 }
261
262 }
263 }
264
266 (*dh.dRWHandle)(jet) = dR_W;
267 (*dh.dRZHandle)(jet) = dR_Z;
268 (*dh.dRHHandle)(jet) = dR_H;
269 (*dh.dRTopHandle)(jet) = dR_Top;
270
271 return getLabel( dh, jet, matchH, matchW, matchZ, matchTop, ctx );
272
273}
double m_dRTruthPart
dR to match truth jet to reco jet
int getLabel(DecorHandles &dh, const xAOD::Jet &jet, bool matchH, bool matchW, bool matchZ, bool matchTop, const EventContext &ctx) const
Get label based on matching and containment criteria.
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition Jet_v1.cxx:71
bool isZ(const T &p)
bool isW(const T &p)
bool isTop(const T &p)
bool isHiggs(const T &p)
APID: HIGGS boson is only one particle.

◆ getTruthJetLabelGA()

int JetTruthLabelingTool::getTruthJetLabelGA ( DecorHandles & dh,
const xAOD::Jet & jet,
const EventContext & ctx ) const
protected

Get truth label using ghost-associated particles.

Booleans to check ghost-associated heavy particles

Find ghost associated W bosons

Find ghost associated Z bosons

Find ghost associated H bosons

Find ghost associated top quarks

Definition at line 275 of file JetTruthLabelingTool.cxx.

278{
280 bool matchW = false;
281 bool matchZ = false;
282 bool matchH = false;
283 bool matchTop = false;
284
286 int nMatchW = getNGhostParticles( jet, "GhostWBosons" );
287
288 if ( nMatchW ) {
289 matchW = true;
290 }
291
293 int nMatchZ = getNGhostParticles( jet, "GhostZBosons" );
294
295 if ( nMatchZ ) {
296 matchZ = true;
297 }
298
300 int nMatchH = getNGhostParticles( jet, "GhostHBosons" );
301
302 if ( nMatchH ) {
303 matchH = true;
304 }
305
307 int nMatchTop = getNGhostParticles( jet, "GhostTQuarksFinal" );
308
309 if ( nMatchTop ) {
310 matchTop = true;
311 }
312
313 return getLabel( dh, jet, matchH, matchW, matchZ, matchTop, ctx );
314
315}

◆ getWZSplit12Cut()

float JetTruthLabelingTool::getWZSplit12Cut ( float pt) const
protected

Get W/Z label Split12 cut.

The functional form and parameters come from optimization studies: https://cds.cern.ch/record/2777009/files/ATL-PHYS-PUB-2021-029.pdf

Definition at line 719 of file JetTruthLabelingTool.cxx.

719 {
720
723
724 float split12 = -999.0;
725
726 if ( m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" || m_truthLabelName == "R10TruthLabel_R22v1" || m_truthLabelName == "R10WZTruthLabel_R22v1") {
727 const float c0 = 55.25;
728 const float c1 = -2.34e-3;
729
730 split12 = c0 * std::exp( c1 * pt );
731 }
732
733 return split12;
734
735}

◆ initialize()

StatusCode JetTruthLabelingTool::initialize ( void )
overridevirtual

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...

Hard-code some values for R10TruthLabel_R21Consolidated
Functionality to customize labeling will be added later

Hard-code some values for R10TruthLabel_R21Precision

Hard-code some values for R10TruthLabel_R21Precision_2022v1 and R10TruthLabel_R22v1

Hard-code some values for R10WZTruthLabel_R22v1

Check if TruthLabelName is supported. If not, give an error and return FAILURE

Reimplemented from asg::AsgTool.

Definition at line 18 of file JetTruthLabelingTool.cxx.

18 {
19
20 ATH_MSG_INFO("Initializing " << name());
21
24 if(m_truthLabelName == "R10TruthLabel_R21Consolidated") {
25 m_truthJetCollectionName="AntiKt10TruthTrimmedPtFrac5SmallR20Jets";
27 m_dRTruthJet = 0.75;
28 m_useDRMatch = true;
29 m_dRTruthPart = 0.75;
30 m_useWZMassHigh = true;
31 m_mLowTop = 140.0;
32 m_mLowW = 50.0;
33 m_mHighW = 100.0;
34 m_mLowZ = 60.0;
35 m_mHighZ = 110.0;
37 }
39 else if(m_truthLabelName == "R10TruthLabel_R21Precision") {
40 m_truthJetCollectionName="AntiKt10TruthJets";
42 m_dRTruthJet = 0.75;
43 m_useDRMatch = false;
44 m_useWZMassHigh = true;
45 m_mLowTop = 140.0;
46 m_mLowW = 50.0;
47 m_mHighW = 100.0;
48 m_mLowZ = 60.0;
49 m_mHighZ = 110.0;
51 }
53 else if( m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" or m_truthLabelName == "R10TruthLabel_R22v1" ) {
54 m_truthJetCollectionName="AntiKt10TruthJets";
56 m_dRTruthJet = 0.75;
57 m_useDRMatch = false;
58 m_useWZMassHigh = false;
59 m_mLowTop = 140.0;
60 m_mLowW = 50.0;
61 m_mLowZ = 50.0;
62 if ( m_truthLabelName == "R10TruthLabel_R22v1" ) {
64 m_truthGroomedJetCollectionName = "AntiKt10TruthSoftDropBeta100Zcut10Jets";
65 } else {
67 }
68 }
70 else if( m_truthLabelName == "R10WZTruthLabel_R22v1" ) {
71 m_truthJetCollectionName="AntiKt10TruthDressedWZJets";
73 m_dRTruthJet = 0.75;
74 m_useDRMatch = false;
75 m_useWZMassHigh = false;
76 m_mLowTop = 140.0;
77 m_mLowW = 50.0;
78 m_mLowZ = 50.0;
80 m_truthGroomedJetCollectionName = "AntiKt10TruthDressedWZSoftDropBeta100Zcut10Jets";
81 }
82
83 print();
84
86
87 bool isSupportedLabel = false;
88 isSupportedLabel = isSupportedLabel || (m_truthLabelName=="R10TruthLabel_R21Consolidated");
89 isSupportedLabel = isSupportedLabel || (m_truthLabelName=="R10TruthLabel_R21Precision");
90 isSupportedLabel = isSupportedLabel || (m_truthLabelName=="R10TruthLabel_R21Precision_2022v1");
91 isSupportedLabel = isSupportedLabel || (m_truthLabelName=="R10TruthLabel_R22v1");
92 isSupportedLabel = isSupportedLabel || (m_truthLabelName=="R10WZTruthLabel_R22v1");
93
94 if(!isSupportedLabel) {
95 ATH_MSG_ERROR("TruthLabelName " << m_truthLabelName << " is not supported. Exiting...");
96 return StatusCode::FAILURE;
97 }
98
105 m_split12_truthKey = m_truthJetCollectionName.key() + ".Split12";
106 m_split23_truthKey = m_truthJetCollectionName.key() + ".Split23";
107
108 if(!m_isTruthJetCol){
115 m_truthSplit12_recoKey = m_jetContainerName + "." + m_truthLabelName + "_TruthJetSplit12";
116 m_truthSplit23_recoKey = m_jetContainerName + "." + m_truthLabelName + "_TruthJetSplit23";
119 m_truthGroomedJetMass_recoKey = m_jetContainerName + "." + m_truthLabelName + "_TruthGroomedJetMass";
120 m_truthGroomedJetPt_recoKey = m_jetContainerName + "." + m_truthLabelName + "_TruthGroomedJetPt";
121 }
122
123 ATH_CHECK(m_evtInfoKey.initialize());
129
130 ATH_CHECK(m_label_truthKey.initialize());
135 ATH_CHECK(m_NB_truthKey.initialize());
136
137 ATH_CHECK(m_split12_truthKey.initialize(m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" || m_truthLabelName == "R10TruthLabel_R22v1" || m_truthLabelName == "R10WZTruthLabel_R22v1"));
138 ATH_CHECK(m_split23_truthKey.initialize(m_truthLabelName == "R10TruthLabel_R21Precision" || m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" || m_truthLabelName == "R10TruthLabel_R22v1" || m_truthLabelName == "R10WZTruthLabel_R22v1"));
139
146 ATH_CHECK(m_truthSplit12_recoKey.initialize(!m_isTruthJetCol && (m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" || m_truthLabelName == "R10TruthLabel_R22v1" || m_truthLabelName == "R10WZTruthLabel_R22v1") ));
147 ATH_CHECK(m_truthSplit23_recoKey.initialize(!m_isTruthJetCol && (m_truthLabelName == "R10TruthLabel_R21Precision" || m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" || m_truthLabelName == "R10TruthLabel_R22v1" || m_truthLabelName == "R10WZTruthLabel_R22v1")));
150
153
154 return StatusCode::SUCCESS;
155}
#define ATH_MSG_INFO(x)
Gaudi::Property< std::string > m_jetContainerName
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthTopQuarkContainerName
bool m_getTruthGroomedJetValues
Use the ungroomed reco jet parent to match to truth jet.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_truthJetMass_recoKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_NB_truthKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_label_recoKey
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthBosonContainerName
Gaudi::Property< bool > m_useTRUTH3
TRUTH1 or TRUTH3.
void print() const override
Print configured parameters.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_truthJetPt_recoKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_truthGroomedJetPt_recoKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_dR_H_recoKey
SG::ReadHandleKey< xAOD::JetContainer > m_truthGroomedJetCollectionName
SG::WriteDecorHandleKey< xAOD::JetContainer > m_truthSplit23_recoKey
bool m_useWZMassHigh
Use dR to match partons to truth jet.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_dR_H_truthKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_dR_Top_recoKey
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticleContainerName
SG::WriteDecorHandleKey< xAOD::JetContainer > m_truthSplit12_recoKey
SG::ReadHandleKey< xAOD::EventInfo > m_evtInfoKey
bool m_matchUngroomedParent
Use upper mass cut for W/Z labels.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_dR_Z_recoKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_label_truthKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_dR_Z_truthKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_NB_recoKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_dR_W_truthKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_truthGroomedJetMass_recoKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_dR_W_recoKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_dR_Top_truthKey
double m_dRTruthJet
When truth jet matching to ungroomed truth, allow saving properties of groomed truth jets.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

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.

◆ labelRecoJets()

StatusCode JetTruthLabelingTool::labelRecoJets ( DecorHandles & dh,
const xAOD::JetContainer & jets,
const EventContext & ctx ) const
protected

Apply labels to all jets in a container.

Get parent ungroomed reco jet for matching

Find matched truth jet

If parent jet has been retrieved, calculate dR w.r.t. it instead

If m_dRTruthJet < 0, the closest truth jet is used as matched jet. Otherwise, only match if dR < m_dRTruthJet

If m_dRTruthJet < 0, the closest truth jet is used as matched jet. Otherwise, only match if dR < m_dRTruthJet

Decorate truth label

Decorate additional information used for truth labeling

Definition at line 335 of file JetTruthLabelingTool.cxx.

337 {
338
339 SG::ReadHandle<xAOD::JetContainer> truthJets(m_truthJetCollectionName, ctx);
340 SG::ReadHandle<xAOD::JetContainer> truthGroomedJets;
342 truthGroomedJets = SG::makeHandle(m_truthGroomedJetCollectionName, ctx);
343 }
345 static const SG::ConstAccessor< ElementLink< xAOD::JetContainer > > ParentAcc ("Parent");
346 for(const xAOD::Jet *jet : jets) {
347
349 const xAOD::Jet* parent = nullptr;
351 ElementLink<xAOD::JetContainer> element_link = ParentAcc (*jet);
352 if ( element_link.isValid() ) {
353 parent = *element_link;
354 }
355 else {
356 ATH_MSG_ERROR("Unable to get a link to the parent jet! Returning a NULL pointer.");
357 return StatusCode::FAILURE;
358 }
359 }
360
362 float dRmin = 9999;
363 const xAOD::Jet* matchTruthJet = nullptr;
364 float dRminGroomed = 9999;
365 const xAOD::Jet* matchTruthGroomedJet = nullptr;
366
367 // Ensure that the reco jet has at least one constituent
368 // (and thus a well-defined four-vector)
369 if(jet->numConstituents() > 0){
370 for ( const xAOD::Jet* truthJet : *truthJets ) {
371 float dR = jet->p4().DeltaR( truthJet->p4() );
373 if ( parent ) dR = parent->p4().DeltaR( truthJet->p4() );
375 if ( m_dRTruthJet < 0 || dR < m_dRTruthJet ) {
376 if ( dR < dRmin ) {
377 dRmin = dR;
378 matchTruthJet = truthJet;
379 }
380 }
381 }
382 }
383
385 float dR_truthJet_W = 9999;
386 float dR_truthJet_Z = 9999;
387 float dR_truthJet_Top = 9999;
388 float dR_truthJet_H = 9999;
389 int truthJetNB = -1;
390 float truthJetSplit12 = -9999;
391 float truthJetSplit23 = -9999;
392 float truthJetMass = -9999;
393 float truthJetPt = -9999;
394
395 if ( matchTruthJet ) {
396 // Can't use the WriteDecorHandle to read --- the decoration may have
397 // been added and locked by a previous algorithm.
398 SG::ConstAccessor<int> labelAcc (dh.labelHandle->auxid());
399 label = labelAcc(*matchTruthJet);
400 if ( m_useDRMatch ) {
401 if(dh.dRWHandle->isAvailable()) dR_truthJet_W = (*dh.dRWHandle)(*matchTruthJet);
402 if(dh.dRZHandle->isAvailable()) dR_truthJet_Z = (*dh.dRZHandle)(*matchTruthJet);
403 if(dh.dRHHandle->isAvailable()) dR_truthJet_H = (*dh.dRHHandle)(*matchTruthJet);
404 if(dh.dRTopHandle->isAvailable()) dR_truthJet_Top = (*dh.dRTopHandle)(*matchTruthJet);
405 }
406 if ( m_truthLabelName == "R10TruthLabel_R21Precision" ) {
407 SG::ReadDecorHandle<xAOD::JetContainer, float> split23Handle(m_split23_truthKey, ctx);
408 if(split23Handle.isAvailable()) truthJetSplit23 = split23Handle(*matchTruthJet);
409 }
410 if ( m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" || m_truthLabelName == "R10TruthLabel_R22v1" || m_truthLabelName == "R10WZTruthLabel_R22v1" ) {
411 SG::ReadDecorHandle<xAOD::JetContainer, float> split23Handle(m_split23_truthKey, ctx);
412 if(split23Handle.isAvailable()) truthJetSplit23 = split23Handle(*matchTruthJet);
413 SG::ReadDecorHandle<xAOD::JetContainer, float> split12Handle(m_split12_truthKey, ctx);
414 if(split12Handle.isAvailable()) truthJetSplit12 = split12Handle(*matchTruthJet);
415 }
416 if(nbAcc.isAvailable(*matchTruthJet)) truthJetNB = nbAcc (*matchTruthJet);
417 truthJetMass = matchTruthJet->m();
418 truthJetPt = matchTruthJet->pt();
419 }
420
421 // Save Groomed Truth Jet variables
422 float truthGroomedJetMass = -9999;
423 float truthGroomedJetPt = -9999;
425 if ( matchTruthJet ) {
426 for ( const xAOD::Jet* truthGroomedJet : *truthGroomedJets ) {
427 ElementLink<xAOD::JetContainer> element_link = ParentAcc (*truthGroomedJet);
428 if ( !element_link.isValid() ) { continue; }
429 if ( matchTruthJet == *element_link ) {
430 matchTruthGroomedJet = truthGroomedJet;
431 break;
432 }
433 }
434 }
435 // If no matched jet found or matched jet has no corresponding groomed jet, use dR matching
436 if ( !matchTruthGroomedJet ) {
437 for ( const xAOD::Jet* truthGroomedJet : *truthGroomedJets ) {
438 float dR = jet->p4().DeltaR( truthGroomedJet->p4() );
440 if ( m_dRTruthJet < 0 || dR < m_dRTruthJet ) {
441 if ( dR < dRminGroomed ) {
442 dRminGroomed = dR;
443 matchTruthGroomedJet = truthGroomedJet;
444 }
445 }
446 }
447 }
448 if ( matchTruthGroomedJet ) {
449 truthGroomedJetMass = matchTruthGroomedJet->m();
450 truthGroomedJetPt = matchTruthGroomedJet->pt();
451 }
452 }
453
455 (*dh.labelRecoHandle)(*jet) = label;
456
458 if ( m_useDRMatch ) {
459 (*dh.dRWRecoHandle)(*jet) = dR_truthJet_W;
460 (*dh.dRZRecoHandle)(*jet) = dR_truthJet_Z;
461 (*dh.dRHRecoHandle)(*jet) = dR_truthJet_H;
462 (*dh.dRTopRecoHandle)(*jet) = dR_truthJet_Top;
463 }
464 if ( m_truthLabelName == "R10TruthLabel_R21Precision" ) {
465 (*dh.split23Handle)(*jet) = truthJetSplit23;
466 }
467
468 if ( m_truthLabelName == "R10TruthLabel_R21Precision_2022v1" || m_truthLabelName == "R10TruthLabel_R22v1" || m_truthLabelName == "R10WZTruthLabel_R22v1" ) {
469 (*dh.split23Handle)(*jet) = truthJetSplit23;
470 (*dh.split12Handle)(*jet) = truthJetSplit12;
471 }
472
473 (*dh.nbRecoHandle)(*jet) = truthJetNB;
474 (*dh.truthMassHandle)(*jet) = truthJetMass;
475 (*dh.truthPtHandle)(*jet) = truthJetPt;
476
478 (*dh.truthGroomedMassHandle)(*jet) = truthGroomedJetMass;
479 (*dh.truthGroomedPtHandle)(*jet) = truthGroomedJetPt;
480 }
481 }
482
483 return StatusCode::SUCCESS;
484}
SG::Accessor< T, ALLOC > Accessor
Definition AuxElement.h:572
std::string label(const std::string &format, int i)
Definition label.h:19
int enumToInt(const TypeEnum type)
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Jet_v1 Jet
Definition of the current "jet version".

◆ labelTruthJets() [1/2]

StatusCode JetTruthLabelingTool::labelTruthJets ( DecorHandles & dh,
const EventContext & ctx ) const
protected

Label truth jet collection.

Retrieve appropriate truth jet container

Make sure the truth jet collection has been retrieved

Definition at line 486 of file JetTruthLabelingTool.cxx.

487 {
488
490 SG::ReadHandle<xAOD::JetContainer> truthJets(m_truthJetCollectionName, ctx);
491
493 if ( !truthJets.isValid() ) {
494 ATH_MSG_ERROR("No truth jet container retrieved. Please make sure you are using a supported TruthLabelName.");
495 return StatusCode::FAILURE;
496 }
497
498 return labelTruthJets(dh, *truthJets, ctx);
499
500}

◆ labelTruthJets() [2/2]

StatusCode JetTruthLabelingTool::labelTruthJets ( DecorHandles & dh,
const xAOD::JetContainer & jets,
const EventContext & ctx ) const
protected

Make sure there is at least 1 jet in truth collection

Check if the truth jet collection already has labels applied

Get MC channel number

Get the EventInfo to identify Sherpa samples

Vectors of W/Z/H/Top TLorentzVectors

Get truth particles directly if using dR matching

Check if it is a Sherpa sample

TRUTH3

Check for boson container

Check for top quark container

Get truth particle TLVs

TRUTH1

Get truth particle TLVs

Apply label to truth jet

Definition at line 502 of file JetTruthLabelingTool.cxx.

505{
507 if ( !(truthJets.size()) ) return StatusCode::SUCCESS;
508
510 if(dh.labelHandle->isAvailable()){
511 // Beware: if we get here, the configuration is probably not MT-compatible.
512 ATH_MSG_DEBUG("labelTruthJets: Truth jet collection already labelled with " << m_truthLabelName);
513 return StatusCode::SUCCESS;
514 }
515
517 int channelNumber = -999;
518
520 SG::ReadHandle<xAOD::EventInfo> eventInfo(m_evtInfoKey, ctx);
521 if(!eventInfo.isValid()){
522 ATH_MSG_ERROR("Failed to retrieve event information.");
523 return StatusCode::FAILURE;
524 }
525
527 std::vector<std::pair<TLorentzVector,int> > tlv_truthParts;
528
530 if ( m_useDRMatch ) {
531
532 channelNumber = eventInfo->mcChannelNumber();
533
534 if ( channelNumber < 0 ) {
535 ATH_MSG_ERROR("Channel number was not set correctly");
536 return StatusCode::FAILURE;
537 }
538
540 bool isSherpa = getIsSherpa(channelNumber);
541
542 if ( m_useTRUTH3 && isSherpa ) {
543 ATH_MSG_ERROR("Cannot apply truth labels to Sherpa 2.2.1 samples using TRUTH3 containers");
544 return StatusCode::FAILURE;
545 }
546
548 if( m_useTRUTH3 ) {
550 SG::ReadHandle<xAOD::TruthParticleContainer> truthPartsBoson(m_truthBosonContainerName, ctx);
551 if(!truthPartsBoson.isValid()){
552 ATH_MSG_ERROR("Unable to find " << m_truthBosonContainerName.key() << ". Please check the content of your input file.");
553 return StatusCode::FAILURE;
554 }
556 SG::ReadHandle<xAOD::TruthParticleContainer> truthPartsTop(m_truthTopQuarkContainerName, ctx);
557 if(!truthPartsTop.isValid()){
558 ATH_MSG_ERROR("Unable to find " << m_truthTopQuarkContainerName.key() << ". Please check the content of your input file.");
559 return StatusCode::FAILURE;
560 }
562 getTLVs(tlv_truthParts, truthPartsBoson.cptr(), truthPartsTop.cptr(), isSherpa);
563 }
564
566 else {
567 SG::ReadHandle<xAOD::TruthParticleContainer> truthParts(m_truthParticleContainerName, ctx);
568 if(!truthParts.isValid()){
569 ATH_MSG_ERROR("Unable to find " << m_truthParticleContainerName << ". Please check the content of your input file.");
570 return StatusCode::FAILURE;
571 }
573 getTLVs(tlv_truthParts, truthParts.cptr(), truthParts.cptr(), isSherpa);
574 }
575 }
576
579 for ( const xAOD::Jet *jet : truthJets ) {
580
581 if ( m_useDRMatch ) {
582 ATH_MSG_DEBUG("Getting truth label using dR matching");
583 label = getTruthJetLabelDR(dh, *jet, tlv_truthParts, ctx);
584 }
585
586 else {
587 ATH_MSG_DEBUG("Getting truth label using ghost-association");
588 label = getTruthJetLabelGA(dh, *jet, ctx);
589 }
590
591 (*dh.labelHandle)(*jet) = label;
592 }
593
594 return StatusCode::SUCCESS;
595}
#define ATH_MSG_DEBUG(x)
int getTruthJetLabelGA(DecorHandles &dh, const xAOD::Jet &jet, const EventContext &ctx) const
Get truth label using ghost-associated particles.
void getTLVs(std::vector< std::pair< TLorentzVector, int > > &tlvs, const xAOD::TruthParticleContainer *truthBosons, const xAOD::TruthParticleContainer *truthTop, bool isSherpa=false) const
Extract heavy particle 4-vectors from truth record.
int getTruthJetLabelDR(DecorHandles &dh, const xAOD::Jet &jet, const std::vector< std::pair< TLorentzVector, int > > &tlv_truthParts, const EventContext &ctx) const
Get truth label using dR-matched particles.
bool getIsSherpa(const int DSID) const
Check for Sherpa DSIDs.

◆ modify()

virtual StatusCode IJetDecorator::modify ( xAOD::JetContainer & jets) const
inlinefinaloverridevirtualinherited

Concrete implementation of the function inherited from IJetModifier.

Implements IJetModifier.

Definition at line 32 of file IJetDecorator.h.

32{return decorate(jets);};
virtual StatusCode decorate(const xAOD::JetContainer &jets) const =0
Decorate a jet collection without otherwise modifying it.

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ 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.

101 {
102
103 return MSG::name( msg().level() );
104 }
MsgStream & msg() const
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
Definition MsgLevel.cxx:19

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

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.

◆ print()

void JetTruthLabelingTool::print ( ) const
overridevirtual

Print configured parameters.

Reimplemented from asg::AsgTool.

Definition at line 157 of file JetTruthLabelingTool.cxx.

157 {
158 ATH_MSG_INFO("Parameters for " << name());
159
160 ATH_MSG_INFO("xAOD information:");
161 ATH_MSG_INFO("TruthLabelName: " << m_truthLabelName);
162 ATH_MSG_INFO("UseTRUTH3: " << ( m_useTRUTH3 ? "True" : "False"));
163
164 if(m_useTRUTH3) {
165 ATH_MSG_INFO("TruthBosonContainerName: " << m_truthBosonContainerName);
166 ATH_MSG_INFO("TruthTopQuarkContainerName: " << m_truthTopQuarkContainerName);
167 }
168 else {
169 ATH_MSG_INFO("TruthParticleContainerName: " << m_truthParticleContainerName);
170 }
171
172 ATH_MSG_INFO("TruthJetCollectionName: " << m_truthJetCollectionName.key());
173 ATH_MSG_INFO("dRTruthJet: " << std::to_string(m_dRTruthJet));
174
175 if ( m_useDRMatch ) {
176 ATH_MSG_INFO("dRTruthPart: " << std::to_string(m_dRTruthPart));
177 }
178
179 ATH_MSG_INFO("mLowTop: " << std::to_string(m_mLowTop));
180 ATH_MSG_INFO("mLowW: " << std::to_string(m_mLowW));
182 ATH_MSG_INFO("mHighW: " << std::to_string(m_mHighW));
183 ATH_MSG_INFO("mLowZ: " << std::to_string(m_mLowZ));
185 ATH_MSG_INFO("mHighZ: " << std::to_string(m_mHighZ));
186
188 ATH_MSG_INFO("truthGroomedJetCollectionName: " << m_truthGroomedJetCollectionName.key());
189 }
190}

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ selectTruthParticle()

bool JetTruthLabelingTool::selectTruthParticle ( const xAOD::TruthParticle * tp,
int pdgId ) const
protected

Check if truth particle has correct DSID and isn't self decay.

Definition at line 709 of file JetTruthLabelingTool.cxx.

709 {
710 if ( std::abs(tp->pdgId()) != pdgId ) return false;
711 for ( unsigned int iChild = 0; iChild < tp->nChildren(); iChild++ ) {
712 const xAOD::TruthParticle *child = tp->child(iChild);
713 if ( !child ) continue;
714 if ( child->pdgId() == tp->pdgId() ) return false;
715 }
716 return true;
717}

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

◆ DecorHandles

friend struct DecorHandles
friend

Definition at line 102 of file JetTruthLabelingTool.h.

Member Data Documentation

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_dR_H_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_dR_H_recoKey {this, "dR_H_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 170 of file JetTruthLabelingTool.h.

170{this, "dR_H_RecoKey", "", "Do not configure manually!"};

◆ m_dR_H_truthKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_dR_H_truthKey {this, "dR_H_TruthKey", "", "Do not configure manually!"}
protected

Definition at line 161 of file JetTruthLabelingTool.h.

161{this, "dR_H_TruthKey", "", "Do not configure manually!"};

◆ m_dR_Top_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_dR_Top_recoKey {this, "dR_Top_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 171 of file JetTruthLabelingTool.h.

171{this, "dR_Top_RecoKey", "", "Do not configure manually!"};

◆ m_dR_Top_truthKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_dR_Top_truthKey {this, "dR_Top_TruthKey", "", "Do not configure manually!"}
protected

Definition at line 162 of file JetTruthLabelingTool.h.

162{this, "dR_Top_TruthKey", "", "Do not configure manually!"};

◆ m_dR_W_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_dR_W_recoKey {this, "dR_W_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 168 of file JetTruthLabelingTool.h.

168{this, "dR_W_RecoKey", "", "Do not configure manually!"};

◆ m_dR_W_truthKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_dR_W_truthKey {this, "dR_W_TruthKey", "", "Do not configure manually!"}
protected

Definition at line 159 of file JetTruthLabelingTool.h.

159{this, "dR_W_TruthKey", "", "Do not configure manually!"};

◆ m_dR_Z_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_dR_Z_recoKey {this, "dR_Z_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 169 of file JetTruthLabelingTool.h.

169{this, "dR_Z_RecoKey", "", "Do not configure manually!"};

◆ m_dR_Z_truthKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_dR_Z_truthKey {this, "dR_Z_TruthKey", "", "Do not configure manually!"}
protected

Definition at line 160 of file JetTruthLabelingTool.h.

160{this, "dR_Z_TruthKey", "", "Do not configure manually!"};

◆ m_dRTruthJet

double JetTruthLabelingTool::m_dRTruthJet {}
protected

When truth jet matching to ungroomed truth, allow saving properties of groomed truth jets.

Definition at line 68 of file JetTruthLabelingTool.h.

68{};

◆ m_dRTruthPart

double JetTruthLabelingTool::m_dRTruthPart {}
protected

dR to match truth jet to reco jet

Definition at line 69 of file JetTruthLabelingTool.h.

69{};

◆ m_evtInfoKey

SG::ReadHandleKey<xAOD::EventInfo> JetTruthLabelingTool::m_evtInfoKey {this, "EventInfoKey", "EventInfo", "Name of EventInfo object"}
protected

Definition at line 53 of file JetTruthLabelingTool.h.

53{this, "EventInfoKey", "EventInfo", "Name of EventInfo object"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_getTruthGroomedJetValues

bool JetTruthLabelingTool::m_getTruthGroomedJetValues {}
protected

Use the ungroomed reco jet parent to match to truth jet.

Definition at line 67 of file JetTruthLabelingTool.h.

67{};

◆ m_isTruthJetCol

Gaudi::Property<bool> JetTruthLabelingTool::m_isTruthJetCol {this, "IsTruthJetCollection", false, "Flag indicating whether input collection is a truth jet container"}
protected

Definition at line 51 of file JetTruthLabelingTool.h.

51{this, "IsTruthJetCollection", false, "Flag indicating whether input collection is a truth jet container"};

◆ m_jetContainerName

Gaudi::Property<std::string> JetTruthLabelingTool::m_jetContainerName {this, "RecoJetContainer", "", "Input reco jet container name"}
protected

Definition at line 48 of file JetTruthLabelingTool.h.

48{this, "RecoJetContainer", "", "Input reco jet container name"};

◆ m_label_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_label_recoKey {this, "label_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 167 of file JetTruthLabelingTool.h.

167{this, "label_RecoKey", "", "Do not configure manually!"};

◆ m_label_truthKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_label_truthKey {this, "label_TruthKey", "", "Do not configure manually!"}
protected

Definition at line 158 of file JetTruthLabelingTool.h.

158{this, "label_TruthKey", "", "Do not configure manually!"};

◆ m_matchUngroomedParent

bool JetTruthLabelingTool::m_matchUngroomedParent {}
protected

Use upper mass cut for W/Z labels.

Definition at line 66 of file JetTruthLabelingTool.h.

66{};

◆ m_mHighW

double JetTruthLabelingTool::m_mHighW {}
protected

Lower mass cut for W label.

Definition at line 72 of file JetTruthLabelingTool.h.

72{};

◆ m_mHighZ

double JetTruthLabelingTool::m_mHighZ {}
protected

Lower mass cut for Z label.

Definition at line 74 of file JetTruthLabelingTool.h.

74{};

◆ m_mLowTop

double JetTruthLabelingTool::m_mLowTop {}
protected

dR to match truth particles to truth jet

Definition at line 70 of file JetTruthLabelingTool.h.

70{};

◆ m_mLowW

double JetTruthLabelingTool::m_mLowW {}
protected

Lower mass cut for top label.

Definition at line 71 of file JetTruthLabelingTool.h.

71{};

◆ m_mLowZ

double JetTruthLabelingTool::m_mLowZ {}
protected

Upper mass cut for W label.

Definition at line 73 of file JetTruthLabelingTool.h.

73{};

◆ m_NB_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_NB_recoKey {this, "NB_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 172 of file JetTruthLabelingTool.h.

172{this, "NB_RecoKey", "", "Do not configure manually!"};

◆ m_NB_truthKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_NB_truthKey {this, "NB_TruthKey", "", "Do not configure manually!"}
protected

Definition at line 163 of file JetTruthLabelingTool.h.

163{this, "NB_TruthKey", "", "Do not configure manually!"};

◆ m_split12_truthKey

SG::ReadDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_split12_truthKey {this, "Split12_TruthKey", "", "Do not configure manually!"}
protected

Definition at line 164 of file JetTruthLabelingTool.h.

164{this, "Split12_TruthKey", "", "Do not configure manually!"};

◆ m_split23_truthKey

SG::ReadDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_split23_truthKey {this, "Split23_TruthKey", "", "Do not configure manually!"}
protected

Definition at line 165 of file JetTruthLabelingTool.h.

165{this, "Split23_TruthKey", "", "Do not configure manually!"};

◆ m_truthBosonContainerName

SG::ReadHandleKey<xAOD::TruthParticleContainer> JetTruthLabelingTool::m_truthBosonContainerName {this, "TruthBosonContainerName", "TruthBosonsWithDecayParticles", "Truth boson container name"}
protected

Definition at line 58 of file JetTruthLabelingTool.h.

58{this, "TruthBosonContainerName", "TruthBosonsWithDecayParticles", "Truth boson container name"};

◆ m_truthGroomedJetCollectionName

SG::ReadHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_truthGroomedJetCollectionName {this, "TruthGroomedJetContainer", "", "Do not configure manually!"}
protected

Definition at line 63 of file JetTruthLabelingTool.h.

63{this, "TruthGroomedJetContainer", "", "Do not configure manually!"};

◆ m_truthGroomedJetMass_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_truthGroomedJetMass_recoKey {this, "TruthGroomedJetMass_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 177 of file JetTruthLabelingTool.h.

177{this, "TruthGroomedJetMass_RecoKey", "", "Do not configure manually!"};

◆ m_truthGroomedJetPt_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_truthGroomedJetPt_recoKey {this, "TruthGroomedJetPt_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 178 of file JetTruthLabelingTool.h.

178{this, "TruthGroomedJetPt_RecoKey", "", "Do not configure manually!"};

◆ m_truthJetCollectionName

SG::ReadHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_truthJetCollectionName {this, "TruthJetContainer", "", "Do not configure manually!"}
protected

parameters for truth labeling

Definition at line 62 of file JetTruthLabelingTool.h.

62{this, "TruthJetContainer", "", "Do not configure manually!"};

◆ m_truthJetMass_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_truthJetMass_recoKey {this, "TruthJetMass_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 175 of file JetTruthLabelingTool.h.

175{this, "TruthJetMass_RecoKey", "", "Do not configure manually!"};

◆ m_truthJetPt_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_truthJetPt_recoKey {this, "TruthJetPt_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 176 of file JetTruthLabelingTool.h.

176{this, "TruthJetPt_RecoKey", "", "Do not configure manually!"};

◆ m_truthLabelName

Gaudi::Property<std::string> JetTruthLabelingTool::m_truthLabelName {this, "TruthLabelName", "R10TruthLabel_R21Consolidated", "Truth label name"}
protected

Definition at line 49 of file JetTruthLabelingTool.h.

49{this, "TruthLabelName", "R10TruthLabel_R21Consolidated", "Truth label name"};

◆ m_truthParticleContainerName

SG::ReadHandleKey<xAOD::TruthParticleContainer> JetTruthLabelingTool::m_truthParticleContainerName {this, "TruthParticleContainerName", "TruthParticles", "Truth particle container name"}
protected

Definition at line 57 of file JetTruthLabelingTool.h.

57{this, "TruthParticleContainerName", "TruthParticles", "Truth particle container name"};

◆ m_truthSplit12_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_truthSplit12_recoKey {this, "TruthSplit12_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 173 of file JetTruthLabelingTool.h.

173{this, "TruthSplit12_RecoKey", "", "Do not configure manually!"};

◆ m_truthSplit23_recoKey

SG::WriteDecorHandleKey<xAOD::JetContainer> JetTruthLabelingTool::m_truthSplit23_recoKey {this, "TruthSplit23_RecoKey", "", "Do not configure manually!"}
protected

Definition at line 174 of file JetTruthLabelingTool.h.

174{this, "TruthSplit23_RecoKey", "", "Do not configure manually!"};

◆ m_truthTopQuarkContainerName

SG::ReadHandleKey<xAOD::TruthParticleContainer> JetTruthLabelingTool::m_truthTopQuarkContainerName {this, "TruthTopQuarkContainerName", "TruthTopQuarkWithDecayParticles", "Truth top container name"}
protected

Definition at line 59 of file JetTruthLabelingTool.h.

59{this, "TruthTopQuarkContainerName", "TruthTopQuarkWithDecayParticles", "Truth top container name"};

◆ m_useDRMatch

bool JetTruthLabelingTool::m_useDRMatch {}
protected

Definition at line 64 of file JetTruthLabelingTool.h.

64{};

◆ m_useTRUTH3

Gaudi::Property<bool> JetTruthLabelingTool::m_useTRUTH3 {this, "UseTRUTH3", false, "True for TRUTH3 format, false for TRUTH1"}
protected

TRUTH1 or TRUTH3.

Definition at line 56 of file JetTruthLabelingTool.h.

56{this, "UseTRUTH3", false, "True for TRUTH3 format, false for TRUTH1"};

◆ m_useWZMassHigh

bool JetTruthLabelingTool::m_useWZMassHigh {}
protected

Use dR to match partons to truth jet.

Definition at line 65 of file JetTruthLabelingTool.h.

65{};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: