ATLAS Offline Software
Loading...
Searching...
No Matches
DiTauRecTools::DiTauIDVarCalculator Class Reference

#include <DiTauIDVarCalculator.h>

Inheritance diagram for DiTauRecTools::DiTauIDVarCalculator:
Collaboration diagram for DiTauRecTools::DiTauIDVarCalculator:

Public Member Functions

virtual void print () const
 Print the state of the tool.
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
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

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.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

virtual ASG_TOOL_CLASS(DiTauIDVarCalculator, DiTauRecTools::IDiTauToolBase) public ~DiTauIDVarCalculator ()
 Create a proper constructor for Athena.
virtual StatusCode initialize () override
 Dummy implementation of the initialisation function.
virtual StatusCode calculateIDVariables (const xAOD::DiTauJet &xDiTau) const
virtual StatusCode execute (const xAOD::DiTauJet &xDiTau) const override
 Declare the interface that the class provides.
float ditau_pt (const xAOD::DiTauJet &xDiTau) const
float f_core (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float f_subjet (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float f_subjets (const xAOD::DiTauJet &xDiTau) const
float f_track (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float R_max (const xAOD::DiTauJet &xDiTau, int iSubjet) const
int n_tracks (const xAOD::DiTauJet &xDiTau, int iSubjet) const
int n_othertrack (const xAOD::DiTauJet &xDiTau) const
float R_track (const xAOD::DiTauJet &xDiTau) const
float R_track_all (const xAOD::DiTauJet &xDiTau) const
float R_track_core (const xAOD::DiTauJet &xDiTau) const
float R_isotrack (const xAOD::DiTauJet &xDiTau) const
float R_core (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float R_tracks (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float mass_track (const xAOD::DiTauJet &xDiTau) const
float mass_track_core (const xAOD::DiTauJet &xDiTau) const
float mass_core (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float mass_track_all (const xAOD::DiTauJet &xDiTau) const
float mass_tracks (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float E_frac (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float R_subjets (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float d0_leadtrack (const xAOD::DiTauJet &xDiTau, int iSubjet) const
float f_isotracks (const xAOD::DiTauJet &xDiTau) const
StatusCode decorNtracks (const xAOD::DiTauJet &xDiTau) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Static Private Member Functions

static float n_subjets (const xAOD::DiTauJet &xDiTau)
static int n_track (const xAOD::DiTauJet &xDiTau)
static int n_isotrack (const xAOD::DiTauJet &xDiTau)

Private Attributes

Gaudi::Property< float > m_dDefault {this, "DefaultValue", -1234}
Gaudi::Property< float > m_Rsubjet {this, "R_subjet", 0.2}
Gaudi::Property< float > m_Rcore {this, "R_core", 0.1}
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

Detailed Description

Definition at line 27 of file DiTauIDVarCalculator.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Member Function Documentation

◆ calculateIDVariables()

StatusCode DiTauIDVarCalculator::calculateIDVariables ( const xAOD::DiTauJet & xDiTau) const
privatevirtual

Definition at line 35 of file DiTauIDVarCalculator.cxx.

35 {
36 return execute(xDiTau);
37}
virtual StatusCode execute(const xAOD::DiTauJet &xDiTau) const override
Declare the interface that the class provides.

◆ d0_leadtrack()

float DiTauIDVarCalculator::d0_leadtrack ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 906 of file DiTauIDVarCalculator.cxx.

907{
908 double pt_leadtrk = 0;
909 double d0 = m_dDefault;
910 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
911 if (!trackLinksAcc.isAvailable(xDiTau) )
912 {
913 ATH_MSG_WARNING("Track links not available");
914 }
915
916 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
917 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
918 return m_dDefault;
919 }
920
921 TLorentzVector tlvSubjet;
922 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
923 xDiTau.subjetEta(iSubjet),
924 xDiTau.subjetPhi(iSubjet),
925 xDiTau.subjetE(iSubjet) );
926
927 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
928
929 TLorentzVector tlvTrack;
930
931 for (auto &xTrack: xTracks)
932 {
933 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
934 (*xTrack)->eta(),
935 (*xTrack)->phi(),
936 (*xTrack)->e() );
937
938 if (tlvTrack.DeltaR(tlvSubjet) < m_Rcore)
939 {
940 if (tlvTrack.Pt() > pt_leadtrk)
941 {
942 pt_leadtrk = tlvTrack.Pt();
943 d0 = (*xTrack)->d0();
944 }
945 }
946 }
947 return d0;
948}
#define ATH_MSG_WARNING(x)
float subjetEta(unsigned int numSubjet) const
float subjetE(unsigned int numSubjet) const
float subjetPt(unsigned int numSubjet) const
float subjetPhi(unsigned int numSubjet) const
const TrackParticleLinks_t & trackLinks() const
std::vector< ElementLink< xAOD::TrackParticleContainer > > TrackParticleLinks_t

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

◆ decorNtracks()

StatusCode DiTauIDVarCalculator::decorNtracks ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 978 of file DiTauIDVarCalculator.cxx.

979{
980 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
981 if (!trackLinksAcc.isAvailable(xDiTau) )
982 {
983 Warning("decorNtracks()", "Track links not available.");
984 return StatusCode::FAILURE;
985 }
986
987 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
988 int nSubjets = n_subjetsAcc(xDiTau);
989
990 std::vector<int> nTracks(nSubjets, 0);
991
992 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
993 for (const auto &xTrack: xTracks)
994 {
995 double dRmin = 1111;
996 double itrmin = -1;
997
998 for (int i=0; i<nSubjets; ++i)
999 {
1000 TLorentzVector tlvSubjet = TLorentzVector();
1001 tlvSubjet.SetPtEtaPhiE(xDiTau.subjetPt(i),
1002 xDiTau.subjetEta(i),
1003 xDiTau.subjetPhi(i),
1004 xDiTau.subjetE(i));
1005 double dR = tlvSubjet.DeltaR((*xTrack)->p4());
1006
1007
1008 if ((dR < m_Rsubjet) && (dR < dRmin))
1009 {
1010 dRmin = dR;
1011 itrmin = i;
1012 }
1013 } // loop over subjets
1014 if (itrmin > -1) nTracks[itrmin]++;
1015 } // loop over tracks
1016
1017 static const SG::Decorator< std::vector<int> > n_tracksDec("n_tracks");
1018 n_tracksDec(xDiTau) = nTracks;
1019
1020 return StatusCode::SUCCESS;
1021}

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

◆ ditau_pt()

float DiTauIDVarCalculator::ditau_pt ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 140 of file DiTauIDVarCalculator.cxx.

141{
142 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
143 if (n_subjetsAcc(xDiTau) < 2 ) {
144 return m_dDefault;
145 }
146
147 return xDiTau.subjetPt(0)+xDiTau.subjetPt(1);
148}

◆ E_frac()

float DiTauIDVarCalculator::E_frac ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 866 of file DiTauIDVarCalculator.cxx.

867{
868 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
869 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
870 return m_dDefault;
871 }
872
873 return xDiTau.subjetE(iSubjet) / xDiTau.subjetE(0);
874}

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

◆ execute()

StatusCode DiTauIDVarCalculator::execute ( const xAOD::DiTauJet & xDiTau) const
overrideprivatevirtual

Declare the interface that the class provides.

Implements DiTauRecTools::IDiTauToolBase.

Definition at line 39 of file DiTauIDVarCalculator.cxx.

40{
41
42 ATH_MSG_DEBUG("Calculate DiTau ID variables");
43
44 static const SG::Decorator< int > n_subjetsDec("n_subjets");
45 n_subjetsDec(xDiTau) = n_subjets(xDiTau);
46 ATH_CHECK( decorNtracks(xDiTau) );
47
48 static const SG::Decorator< float > ditau_ptDec("ditau_pt");
49 static const SG::Decorator< float > f_core_leadDec("f_core_lead");
50 static const SG::Decorator< float > f_core_sublDec("f_core_subl");
51 static const SG::Decorator< float > f_subjet_leadDec("f_subjet_lead");
52 static const SG::Decorator< float > f_subjet_sublDec("f_subjet_subl");
53 static const SG::Decorator< float > f_subjetsDec("f_subjets");
54 static const SG::Decorator< float > f_track_leadDec("f_track_lead");
55 static const SG::Decorator< float > f_track_sublDec("f_track_subl");
56 static const SG::Decorator< float > R_max_leadDec("R_max_lead");
57 static const SG::Decorator< float > R_max_sublDec("R_max_subl");
58 static const SG::Decorator< int > n_trackDec("n_track");
59 static const SG::Decorator< int > n_tracks_leadDec("n_tracks_lead");
60 static const SG::Decorator< int > n_tracks_sublDec("n_tracks_subl");
61 static const SG::Decorator< int > n_isotrackDec("n_isotrack");
62 static const SG::Decorator< float > R_trackDec("R_track");
63 static const SG::Decorator< float > R_track_coreDec("R_track_core");
64 static const SG::Decorator< float > R_track_allDec("R_track_all");
65 static const SG::Decorator< float > R_isotrackDec("R_isotrack");
66 static const SG::Decorator< float > R_core_leadDec("R_core_lead");
67 static const SG::Decorator< float > R_core_sublDec("R_core_subl");
68 static const SG::Decorator< float > R_tracks_leadDec("R_tracks_lead");
69 static const SG::Decorator< float > R_tracks_sublDec("R_tracks_subl");
70 static const SG::Decorator< float > M_trackDec("m_track");
71 static const SG::Decorator< float > M_track_coreDec("m_track_core");
72 static const SG::Decorator< float > M_core_leadDec("m_core_lead");
73 static const SG::Decorator< float > M_core_sublDec("m_core_subl");
74 static const SG::Decorator< float > M_track_allDec("m_track_all");
75 static const SG::Decorator< float > M_tracks_leadDec("m_tracks_lead");
76 static const SG::Decorator< float > M_tracks_sublDec("m_tracks_subl");
77 static const SG::Decorator< float > E_frac_sublDec("E_frac_subl");
78 static const SG::Decorator< float > E_frac_subsublDec("E_frac_subsubl");
79 static const SG::Decorator< float > R_subjets_sublDec("R_subjets_subl");
80 static const SG::Decorator< float > R_subjets_subsublDec("R_subjets_subsubl");
81 static const SG::Decorator< float > d0_leadtrack_leadDec("d0_leadtrack_lead");
82 static const SG::Decorator< float > d0_leadtrack_sublDec("d0_leadtrack_subl");
83 static const SG::Decorator< float > f_isotracksDec("f_isotracks");
84
85 ditau_ptDec(xDiTau) = ditau_pt(xDiTau);
86 f_core_leadDec(xDiTau) = f_core(xDiTau, 0);
87 f_core_sublDec(xDiTau) = f_core(xDiTau, 1);
88 f_subjet_leadDec(xDiTau) = f_subjet(xDiTau, 0);
89 f_subjet_sublDec(xDiTau) = f_subjet(xDiTau, 1);
90 f_subjetsDec(xDiTau) = f_subjets(xDiTau);
91 f_track_leadDec(xDiTau) = f_track(xDiTau, 0);
92 f_track_sublDec(xDiTau) = f_track(xDiTau, 1);
93 R_max_leadDec(xDiTau) = R_max(xDiTau, 0);
94 R_max_sublDec(xDiTau) = R_max(xDiTau, 1);
95 n_trackDec(xDiTau) = n_track(xDiTau);
96 n_tracks_leadDec(xDiTau) = n_tracks(xDiTau, 0);
97 n_tracks_sublDec(xDiTau) = n_tracks(xDiTau, 1);
98 n_isotrackDec(xDiTau) = n_isotrack(xDiTau);
99 R_trackDec(xDiTau) = R_track(xDiTau);
100 R_track_coreDec(xDiTau) = R_track_core(xDiTau);
101 R_track_allDec(xDiTau) = R_track_all(xDiTau);
102 R_isotrackDec(xDiTau) = R_isotrack(xDiTau);
103 R_core_leadDec(xDiTau) = R_core(xDiTau, 0);
104 R_core_sublDec(xDiTau) = R_core(xDiTau, 1);
105 R_tracks_leadDec(xDiTau) = R_tracks(xDiTau, 0);
106 R_tracks_sublDec(xDiTau) = R_tracks(xDiTau, 1);
107 M_trackDec(xDiTau) = mass_track(xDiTau);
108 M_track_coreDec(xDiTau) = mass_track_core(xDiTau);
109 M_core_leadDec(xDiTau) = mass_core(xDiTau, 0);
110 M_core_sublDec(xDiTau) = mass_core(xDiTau, 1);
111 M_track_allDec(xDiTau) = mass_track_all(xDiTau);
112 M_tracks_leadDec(xDiTau) = mass_tracks(xDiTau, 0);
113 M_tracks_sublDec(xDiTau) = mass_tracks(xDiTau, 1);
114 E_frac_sublDec(xDiTau) = E_frac(xDiTau,1);
115 E_frac_subsublDec(xDiTau) = E_frac(xDiTau, 2);
116 R_subjets_sublDec(xDiTau) = R_subjets(xDiTau, 1);
117 R_subjets_subsublDec(xDiTau) = R_subjets(xDiTau, 2);
118 d0_leadtrack_leadDec(xDiTau) = d0_leadtrack(xDiTau, 0);
119 d0_leadtrack_sublDec(xDiTau) = d0_leadtrack(xDiTau, 1);
120 f_isotracksDec(xDiTau) = f_isotracks(xDiTau);
121
122 return StatusCode::SUCCESS;
123}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
float mass_track_core(const xAOD::DiTauJet &xDiTau) const
float f_subjet(const xAOD::DiTauJet &xDiTau, int iSubjet) const
static float n_subjets(const xAOD::DiTauJet &xDiTau)
float R_tracks(const xAOD::DiTauJet &xDiTau, int iSubjet) const
static int n_track(const xAOD::DiTauJet &xDiTau)
float f_subjets(const xAOD::DiTauJet &xDiTau) const
StatusCode decorNtracks(const xAOD::DiTauJet &xDiTau) const
float R_track(const xAOD::DiTauJet &xDiTau) const
float f_core(const xAOD::DiTauJet &xDiTau, int iSubjet) const
float mass_core(const xAOD::DiTauJet &xDiTau, int iSubjet) const
static int n_isotrack(const xAOD::DiTauJet &xDiTau)
float d0_leadtrack(const xAOD::DiTauJet &xDiTau, int iSubjet) const
float f_isotracks(const xAOD::DiTauJet &xDiTau) const
float R_track_all(const xAOD::DiTauJet &xDiTau) const
float ditau_pt(const xAOD::DiTauJet &xDiTau) const
int n_tracks(const xAOD::DiTauJet &xDiTau, int iSubjet) const
float mass_track_all(const xAOD::DiTauJet &xDiTau) const
float R_isotrack(const xAOD::DiTauJet &xDiTau) const
float R_max(const xAOD::DiTauJet &xDiTau, int iSubjet) const
float E_frac(const xAOD::DiTauJet &xDiTau, int iSubjet) const
float mass_tracks(const xAOD::DiTauJet &xDiTau, int iSubjet) const
float f_track(const xAOD::DiTauJet &xDiTau, int iSubjet) const
float mass_track(const xAOD::DiTauJet &xDiTau) const
float R_core(const xAOD::DiTauJet &xDiTau, int iSubjet) const
float R_track_core(const xAOD::DiTauJet &xDiTau) const
float R_subjets(const xAOD::DiTauJet &xDiTau, int iSubjet) const

◆ 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

◆ f_core()

float DiTauIDVarCalculator::f_core ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 152 of file DiTauIDVarCalculator.cxx.

153{
154 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
155 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
156 return m_dDefault;
157 }
158
159 return xDiTau.fCore(iSubjet);
160}
float fCore(unsigned int numSubjet) const

◆ f_isotracks()

float DiTauIDVarCalculator::f_isotracks ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 951 of file DiTauIDVarCalculator.cxx.

952{
953 double iso_pt = 0;
954 static const SG::ConstAccessor<TrackParticleLinks_t> isoTrackLinksAcc("isoTrackLinks");
955 if (!isoTrackLinksAcc.isAvailable(xDiTau) )
956 {
957 ATH_MSG_WARNING("Track links not available");
958 }
959
960 TrackParticleLinks_t xIsoTracks = xDiTau.isoTrackLinks();
961
962 TLorentzVector tlvIsoTrack;
963
964 for (const auto& xIsoTrack: xIsoTracks)
965 {
966 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
967 (*xIsoTrack)->eta(),
968 (*xIsoTrack)->phi(),
969 (*xIsoTrack)->e() );
970
971 iso_pt += tlvIsoTrack.Pt();
972 }
973
974 return iso_pt / xDiTau.pt();
975}
const TrackParticleLinks_t & isoTrackLinks() const
virtual double pt() const
The transverse momentum ( ) of the particle.

◆ f_subjet()

float DiTauIDVarCalculator::f_subjet ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 164 of file DiTauIDVarCalculator.cxx.

165{
166 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
167 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
168 return m_dDefault;
169 }
170
171 return xDiTau.subjetPt(iSubjet) / xDiTau.pt();
172}

◆ f_subjets()

float DiTauIDVarCalculator::f_subjets ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 176 of file DiTauIDVarCalculator.cxx.

177{
178 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
179 if (n_subjetsAcc(xDiTau) < 2 ) {
180 return m_dDefault;
181 }
182
183 return (xDiTau.subjetPt(0) + xDiTau.subjetPt(1))/ xDiTau.pt();
184}

◆ f_track()

float DiTauIDVarCalculator::f_track ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 188 of file DiTauIDVarCalculator.cxx.

189{
190 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
191 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
192 return m_dDefault;
193 }
194
195 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
196 if (!trackLinksAcc.isAvailable(xDiTau) )
197 {
198 ATH_MSG_WARNING("Link not available");
199 }
200
201 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
202
203 TLorentzVector tlvSubjet;
204 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
205 xDiTau.subjetEta(iSubjet),
206 xDiTau.subjetPhi(iSubjet),
207 xDiTau.subjetE(iSubjet) );
208
209 TLorentzVector tlvTrack;
210 TLorentzVector tlvLeadTrack;
211 tlvLeadTrack.SetPtEtaPhiE( 0,0,0, 0);
212
213 for (const auto &xTrack: xTracks)
214 {
215 if (!xTrack)
216 {
217 ATH_MSG_ERROR("Could not read Track");
218 continue;
219 }
220 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
221 (*xTrack)->eta(),
222 (*xTrack)->phi(),
223 (*xTrack)->e() );
224
225 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
226 {
227 if (tlvLeadTrack.Pt() < tlvTrack.Pt())
228 {
229 tlvLeadTrack = tlvTrack;
230 }
231 }
232 }
233
234 return tlvLeadTrack.Pt() / tlvSubjet.Pt();
235}
#define ATH_MSG_ERROR(x)

◆ 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()

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

◆ getProperty()

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

Get one of the tool's properties.

◆ initialize()

StatusCode DiTauIDVarCalculator::initialize ( void )
overrideprivatevirtual

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.

Definition at line 24 of file DiTauIDVarCalculator.cxx.

25{
26 ATH_MSG_INFO( "Initializing DiTauIDVarCalculator" );
27
28 return StatusCode::SUCCESS;
29}
#define ATH_MSG_INFO(x)

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

◆ mass_core()

float DiTauIDVarCalculator::mass_core ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 690 of file DiTauIDVarCalculator.cxx.

691{
692
693 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
694 if (!trackLinksAcc.isAvailable(xDiTau) )
695 {
696 ATH_MSG_WARNING("Link not available");
697 }
698
699 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
700 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
701 return m_dDefault;
702 }
703
704 TLorentzVector tlvallTracks;
705
706
707 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
708
709 TLorentzVector tlvSubjet;
710 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
711 xDiTau.subjetEta(iSubjet),
712 xDiTau.subjetPhi(iSubjet),
713 xDiTau.subjetE(iSubjet) );
714
715 TLorentzVector tlvTrack;
716
717 for (const auto& xTrack: xTracks)
718 {
719 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
720 (*xTrack)->eta(),
721 (*xTrack)->phi(),
722 (*xTrack)->e() );
723 if ( tlvSubjet.DeltaR(tlvTrack) < m_Rcore )
724 {
725 //ATH_MSG_DEBUG("smaller");
726 tlvallTracks += tlvTrack;
727 }
728 }
729
730 if (tlvallTracks.M() < 0)
731 {
732 return m_dDefault;
733 }
734
735 return tlvallTracks.M();
736}

◆ mass_track()

float DiTauIDVarCalculator::mass_track ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 785 of file DiTauIDVarCalculator.cxx.

786{
787
788 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
789 if (!trackLinksAcc.isAvailable(xDiTau) )
790 {
791 ATH_MSG_WARNING("Link not available");
792 }
793
794 TLorentzVector tlvallTracks;
795
796 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
797
798 TLorentzVector tlvTrack;
799
800 for (const auto& xTrack: xTracks)
801 {
802 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
803 (*xTrack)->eta(),
804 (*xTrack)->phi(),
805 (*xTrack)->e() );
806
807 tlvallTracks += tlvTrack;
808 }
809
810 if (tlvallTracks.M() < 0)
811 {
812 return m_dDefault;
813 }
814 return tlvallTracks.M();
815}

◆ mass_track_all()

float DiTauIDVarCalculator::mass_track_all ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 817 of file DiTauIDVarCalculator.cxx.

818{
819
820 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
821 if (!trackLinksAcc.isAvailable(xDiTau) )
822 {
823 ATH_MSG_WARNING("Link not available");
824 }
825
826 TLorentzVector tlvallTracks;
827
828 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
829
830 TLorentzVector tlvTrack;
831
832 for (const auto& xTrack: xTracks)
833 {
834 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
835 (*xTrack)->eta(),
836 (*xTrack)->phi(),
837 (*xTrack)->e() );
838
839 tlvallTracks += tlvTrack;
840 }
841
842
843 TrackParticleLinks_t xIsoTracks = xDiTau.isoTrackLinks();
844
845 TLorentzVector tlvIsoTrack;
846
847 for (const auto& xIsoTrack: xIsoTracks)
848 {
849 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
850 (*xIsoTrack)->eta(),
851 (*xIsoTrack)->phi(),
852 (*xIsoTrack)->e() );
853
854 tlvallTracks += tlvIsoTrack;
855 }
856
857 if (tlvallTracks.M() < 0)
858 {
859 return m_dDefault;
860 }
861
862 return tlvallTracks.M();
863}

◆ mass_track_core()

float DiTauIDVarCalculator::mass_track_core ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 639 of file DiTauIDVarCalculator.cxx.

640{
641
642 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
643 if (!trackLinksAcc.isAvailable(xDiTau) )
644 {
645 ATH_MSG_WARNING("Link not available");
646 }
647
648 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
649 if (n_subjetsAcc(xDiTau) < 2) {
650 return m_dDefault;
651 }
652
653 TLorentzVector tlvallTracks;
654
655 for (int i = 0; i<=1; i++)
656 {
657
658 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
659
660 TLorentzVector tlvSubjet;
661 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(i),
662 xDiTau.subjetEta(i),
663 xDiTau.subjetPhi(i),
664 xDiTau.subjetE(i) );
665
666 TLorentzVector tlvTrack;
667
668 for (const auto& xTrack: xTracks)
669 {
670 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
671 (*xTrack)->eta(),
672 (*xTrack)->phi(),
673 (*xTrack)->e() );
674 if ( tlvSubjet.DeltaR(tlvTrack) < m_Rcore )
675 {
676 //ATH_MSG_DEBUG("smaller");
677 tlvallTracks += tlvTrack;
678 }
679 }
680 }
681 if (tlvallTracks.M() < 0)
682 {
683 return m_dDefault;
684 }
685
686 return tlvallTracks.M();
687}

◆ mass_tracks()

float DiTauIDVarCalculator::mass_tracks ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 739 of file DiTauIDVarCalculator.cxx.

740{
741
742 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
743 if (!trackLinksAcc.isAvailable(xDiTau) )
744 {
745 ATH_MSG_WARNING("Link not available");
746 }
747
748 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
749 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
750 return m_dDefault;
751 }
752
753 TLorentzVector tlvallTracks;
754
755 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
756
757 TLorentzVector tlvSubjet;
758 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
759 xDiTau.subjetEta(iSubjet),
760 xDiTau.subjetPhi(iSubjet),
761 xDiTau.subjetE(iSubjet) );
762
763 TLorentzVector tlvTrack;
764
765 for (const auto& xTrack: xTracks)
766 {
767 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
768 (*xTrack)->eta(),
769 (*xTrack)->phi(),
770 (*xTrack)->e() );
771 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
772 {
773 tlvallTracks += tlvTrack;
774 }
775 }
776
777 if (tlvallTracks.M() < 0)
778 {
779 return m_dDefault;
780 }
781
782 return tlvallTracks.M();
783}

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

◆ n_isotrack()

int DiTauIDVarCalculator::n_isotrack ( const xAOD::DiTauJet & xDiTau)
staticprivate

Definition at line 331 of file DiTauIDVarCalculator.cxx.

332{
333 return xDiTau.nIsoTracks();
334}
size_t nIsoTracks() const

◆ n_othertrack()

int DiTauRecTools::DiTauIDVarCalculator::n_othertrack ( const xAOD::DiTauJet & xDiTau) const
private

◆ n_subjets()

float DiTauIDVarCalculator::n_subjets ( const xAOD::DiTauJet & xDiTau)
staticprivate

Definition at line 128 of file DiTauIDVarCalculator.cxx.

129{
130 int nSubjet = 0;
131 while (xDiTau.subjetPt(nSubjet) > 0. )
132 {
133 nSubjet++;
134 }
135
136 return nSubjet;
137}

◆ n_track()

int DiTauIDVarCalculator::n_track ( const xAOD::DiTauJet & xDiTau)
staticprivate

Definition at line 279 of file DiTauIDVarCalculator.cxx.

280{
281 return xDiTau.nTracks();
282}
size_t nTracks() const

◆ n_tracks()

int DiTauIDVarCalculator::n_tracks ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 285 of file DiTauIDVarCalculator.cxx.

286{
287 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
288 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
289 return m_dDefault;
290 }
291
292 static const SG::ConstAccessor<std::vector<int> > n_tracksAcc("n_tracks");
293 if (!n_tracksAcc.isAvailable(xDiTau))
294 {
295 ATH_MSG_DEBUG("n_tracks decoration not available. Try with track links.");
296
297 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
298 if (!trackLinksAcc.isAvailable(xDiTau) )
299 {
300 ATH_MSG_WARNING("Track links not available. Return 0.");
301 return (int)m_dDefault;
302 }
303
304 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
305
306 TLorentzVector tlvSubjet;
307 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
308 xDiTau.subjetEta(iSubjet),
309 xDiTau.subjetPhi(iSubjet),
310 xDiTau.subjetE(iSubjet) );
311
312 TLorentzVector tlvTrack;
313 int nTracks = 0;
314 for (const auto &xTrack: xTracks)
315 {
316 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
317 (*xTrack)->eta(),
318 (*xTrack)->phi(),
319 (*xTrack)->e() );
320 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 ) nTracks++;
321 }
322
323 return nTracks;
324 }
325
326 return n_tracksAcc(xDiTau).at(iSubjet);
327
328}

◆ 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()

◆ R_core()

float DiTauIDVarCalculator::R_core ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 387 of file DiTauIDVarCalculator.cxx.

388{
389 double R_sum = 0;
390 double pt = 0;
391
392 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
393 if (!trackLinksAcc.isAvailable(xDiTau) )
394 {
395 ATH_MSG_WARNING("Link not available");
396 }
397 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
398 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
399 return m_dDefault;
400 }
401
402 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
403
404 TLorentzVector tlvSubjet;
405 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
406 xDiTau.subjetEta(iSubjet),
407 xDiTau.subjetPhi(iSubjet),
408 xDiTau.subjetE(iSubjet) );
409
410 TLorentzVector tlvTrack;
411
412 for (const auto& xTrack: xTracks)
413 {
414 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
415 (*xTrack)->eta(),
416 (*xTrack)->phi(),
417 (*xTrack)->e() );
418
419 if ( tlvSubjet.DeltaR(tlvTrack) < m_Rcore )
420 {
421 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
422 pt += tlvTrack.Pt();
423 }
424 }
425
426 if (pt == 0)
427 {
428 return m_dDefault;
429 }
430
431 return R_sum / pt;
432}

◆ R_isotrack()

float DiTauIDVarCalculator::R_isotrack ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 586 of file DiTauIDVarCalculator.cxx.

587{
588 double R_sum = 0;
589 double pt = 0;
590
591 static const SG::ConstAccessor<TrackParticleLinks_t> isoTrackLinksAcc("isoTrackLinks");
592 if (!isoTrackLinksAcc.isAvailable(xDiTau) )
593 {
594 ATH_MSG_WARNING("Link not available");
595 }
596
597 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
598 if (n_subjetsAcc(xDiTau) < 2) {
599 return m_dDefault;
600 }
601
602 for (int i = 0; i<=1; i++)
603 {
604
605 TrackParticleLinks_t xIsoTracks = xDiTau.isoTrackLinks();
606
607 TLorentzVector tlvSubjet;
608 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(i),
609 xDiTau.subjetEta(i),
610 xDiTau.subjetPhi(i),
611 xDiTau.subjetE(i) );
612
613 TLorentzVector tlvIsoTrack;
614
615 for (const auto& xIsoTrack: xIsoTracks)
616 {
617 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
618 (*xIsoTrack)->eta(),
619 (*xIsoTrack)->phi(),
620 (*xIsoTrack)->e() );
621
622 if (tlvSubjet.DeltaR(tlvIsoTrack) < 0.4)
623 {
624 R_sum += tlvSubjet.DeltaR(tlvIsoTrack)*tlvIsoTrack.Pt();
625 pt += tlvIsoTrack.Pt();
626 }
627 }
628 }
629
630 if (pt == 0)
631 {
632 return m_dDefault;
633 }
634
635 return R_sum / pt;
636}

◆ R_max()

float DiTauIDVarCalculator::R_max ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 239 of file DiTauIDVarCalculator.cxx.

240{
241 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
242 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
243 return m_dDefault;
244 }
245
246 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
247
248 TLorentzVector tlvSubjet;
249 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
250 xDiTau.subjetEta(iSubjet),
251 xDiTau.subjetPhi(iSubjet),
252 xDiTau.subjetE(iSubjet) );
253
254 TLorentzVector tlvTrack;
255 TLorentzVector tlvRmaxTrack;
256 double Rmax = 0;
257
258 for (const auto &xTrack: xTracks)
259 {
260 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
261 (*xTrack)->eta(),
262 (*xTrack)->phi(),
263 (*xTrack)->e() );
264
265 if ( tlvSubjet.DeltaR(tlvTrack) < m_Rsubjet )
266 {
267 if (tlvTrack.DeltaR(tlvSubjet) > Rmax)
268 {
269 Rmax = tlvTrack.DeltaR(tlvSubjet);
270 }
271 }
272 }
273
274 return Rmax;
275}

◆ R_subjets()

float DiTauIDVarCalculator::R_subjets ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 877 of file DiTauIDVarCalculator.cxx.

878{
879
880 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
881 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
882 return m_dDefault;
883 }
884
885 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
886 if (!trackLinksAcc.isAvailable(xDiTau) )
887 {
888 ATH_MSG_WARNING("Track links not available");
889 }
890
891 TLorentzVector tlvLeadSubjet;
892 tlvLeadSubjet.SetPtEtaPhiE( xDiTau.subjetPt(0),
893 xDiTau.subjetEta(0),
894 xDiTau.subjetPhi(0),
895 xDiTau.subjetE(0) );
896
897 TLorentzVector tlvSubjet;
898 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
899 xDiTau.subjetEta(iSubjet),
900 xDiTau.subjetPhi(iSubjet),
901 xDiTau.subjetE(iSubjet) );
902 return tlvLeadSubjet.DeltaR(tlvSubjet);
903}

◆ R_track()

float DiTauIDVarCalculator::R_track ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 487 of file DiTauIDVarCalculator.cxx.

488{
489 double R_sum = 0;
490 double pt = 0;
491
492 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
493 if (!trackLinksAcc.isAvailable(xDiTau) )
494 {
495 ATH_MSG_WARNING("Link not available");
496 }
497 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
498 if (n_subjetsAcc(xDiTau) < 2) {
499 return m_dDefault;
500 }
501
502 for (int i = 0; i<=1; i++)
503 {
504
505 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
506
507 TLorentzVector tlvSubjet;
508 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(i),
509 xDiTau.subjetEta(i),
510 xDiTau.subjetPhi(i),
511 xDiTau.subjetE(i) );
512
513 TLorentzVector tlvTrack;
514
515 for (const auto& xTrack: xTracks)
516 {
517 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
518 (*xTrack)->eta(),
519 (*xTrack)->phi(),
520 (*xTrack)->e() );
521
522 if (tlvSubjet.DeltaR(tlvTrack) < 0.2)
523 {
524 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
525 pt += tlvTrack.Pt();
526 }
527 }
528 }
529 if (pt == 0)
530 {
531 return m_dDefault;
532 }
533
534 return R_sum / pt;
535}

◆ R_track_all()

float DiTauIDVarCalculator::R_track_all ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 537 of file DiTauIDVarCalculator.cxx.

538{
539 double R_sum = 0;
540 double pt = 0;
541
542 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
543 if (!trackLinksAcc.isAvailable(xDiTau) )
544 {
545 ATH_MSG_WARNING("Link not available");
546 }
547
548 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
549 for (int i = 0; i<n_subjetsAcc(xDiTau); i++)
550 {
551
552 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
553
554 TLorentzVector tlvSubjet;
555 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(i),
556 xDiTau.subjetEta(i),
557 xDiTau.subjetPhi(i),
558 xDiTau.subjetE(i) );
559
560 TLorentzVector tlvTrack;
561
562 for (const auto& xTrack: xTracks)
563 {
564 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
565 (*xTrack)->eta(),
566 (*xTrack)->phi(),
567 (*xTrack)->e() );
568
569 if (tlvSubjet.DeltaR(tlvTrack) <= 0.2)
570 {
571 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
572 pt += tlvTrack.Pt();
573 }
574 }
575 }
576
577 if (pt == 0)
578 {
579 return m_dDefault;
580 }
581
582 return R_sum / pt;
583}

◆ R_track_core()

float DiTauIDVarCalculator::R_track_core ( const xAOD::DiTauJet & xDiTau) const
private

Definition at line 435 of file DiTauIDVarCalculator.cxx.

436{
437 double R_sum = 0;
438 double pt = 0;
439
440 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
441 if (!trackLinksAcc.isAvailable(xDiTau) )
442 {
443 ATH_MSG_WARNING("Link not available");
444 }
445 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
446 if (n_subjetsAcc(xDiTau) < 2) {
447 return m_dDefault;
448 }
449
450
451 for (int i = 0; i<=1; i++)
452 {
453
454 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
455
456 TLorentzVector tlvSubjet;
457 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(i),
458 xDiTau.subjetEta(i),
459 xDiTau.subjetPhi(i),
460 xDiTau.subjetE(i) );
461
462 TLorentzVector tlvTrack;
463
464 for (const auto& xTrack: xTracks)
465 {
466 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
467 (*xTrack)->eta(),
468 (*xTrack)->phi(),
469 (*xTrack)->e() );
470 if ( tlvSubjet.DeltaR(tlvTrack) < m_Rcore )
471 {
472 //ATH_MSG_DEBUG("smaller");
473 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
474 pt += tlvTrack.Pt();
475 }
476 }
477 }
478 if (pt == 0)
479 {
480 return m_dDefault;
481 }
482
483 return R_sum / pt;
484}

◆ R_tracks()

float DiTauIDVarCalculator::R_tracks ( const xAOD::DiTauJet & xDiTau,
int iSubjet ) const
private

Definition at line 337 of file DiTauIDVarCalculator.cxx.

338{
339 double R_sum = 0;
340 double pt = 0;
341
342 static const SG::ConstAccessor<TrackParticleLinks_t> trackLinksAcc("trackLinks");
343 if (!trackLinksAcc.isAvailable(xDiTau) )
344 {
345 ATH_MSG_WARNING("Link not available");
346 }
347
348 static const SG::ConstAccessor<int> n_subjetsAcc("n_subjets");
349 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
350 return m_dDefault;
351 }
352
353 TrackParticleLinks_t xTracks = xDiTau.trackLinks();
354
355 TLorentzVector tlvSubjet;
356 tlvSubjet.SetPtEtaPhiE( xDiTau.subjetPt(iSubjet),
357 xDiTau.subjetEta(iSubjet),
358 xDiTau.subjetPhi(iSubjet),
359 xDiTau.subjetE(iSubjet) );
360
361 TLorentzVector tlvTrack;
362
363 for (const auto& xTrack: xTracks)
364 {
365 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
366 (*xTrack)->eta(),
367 (*xTrack)->phi(),
368 (*xTrack)->e() );
369
370 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
371 {
372 //ATH_MSG_DEBUG("smaller");
373 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
374 pt += tlvTrack.Pt();
375 }
376 }
377
378 if (pt == 0)
379 {
380 return m_dDefault;
381 }
382
383 return R_sum / pt;
384}

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

◆ 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

◆ ~DiTauIDVarCalculator()

DiTauIDVarCalculator::~DiTauIDVarCalculator ( )
privatevirtualdefault

Create a proper constructor for Athena.

Member Data Documentation

◆ m_dDefault

Gaudi::Property<float> DiTauRecTools::DiTauIDVarCalculator::m_dDefault {this, "DefaultValue", -1234}
private

Definition at line 52 of file DiTauIDVarCalculator.h.

52{this, "DefaultValue", -1234};

◆ 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_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_Rcore

Gaudi::Property<float> DiTauRecTools::DiTauIDVarCalculator::m_Rcore {this, "R_core", 0.1}
private

Definition at line 54 of file DiTauIDVarCalculator.h.

54{this, "R_core", 0.1};

◆ m_Rsubjet

Gaudi::Property<float> DiTauRecTools::DiTauIDVarCalculator::m_Rsubjet {this, "R_subjet", 0.2}
private

Definition at line 53 of file DiTauIDVarCalculator.h.

53{this, "R_subjet", 0.2};

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