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

class to apply selection to xAOD::TruthParticles,required by validation More...

#include <AthTruthSelectionTool.h>

Inheritance diagram for AthTruthSelectionTool:
Collaboration diagram for AthTruthSelectionTool:

Public Member Functions

 AthTruthSelectionTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~AthTruthSelectionTool ()
StatusCode initialize () final
StatusCode finalize () final
virtual IAthSelectionTool::CutResult accept (const xAOD::IParticle *particle) const final
 The most important method to determine whether the particle is accepted.
virtual IAthSelectionTool::CutResult testAllCuts (const xAOD::IParticle *p, std::vector< unsigned int > &counter) const final
 The most important method to determine whether the particle is accepted.
unsigned int nCuts () const final
 return the number of cuts.
std::vector< std::string > names () const final
 return the names of the cuts as a vector<string>
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

Static Public Member Functions

static const InterfaceID & interfaceID ()
 interfaceID reimplemented from base

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

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

Private Attributes

CutList< xAOD::TruthParticlem_cutList
FloatProperty m_maxEta {this, "maxEta", 2.5}
FloatProperty m_maxPt {this, "maxPt", -1.}
FloatProperty m_minPt {this, "minPt", 400.}
BooleanProperty m_requireOnlyPrimary {this, "requireOnlyPrimary", true}
BooleanProperty m_requireCharged {this, "requireCharged", true}
IntegerProperty m_selectedCharge {this, "selectedCharge", 0}
BooleanProperty m_requireStable {this, "requireStable", true}
IntegerProperty m_requireSiHit {this, "requireSiHit", 0}
FloatProperty m_maxProdVertRadius {this, "maxProdVertRadius", 110.}
IntegerProperty m_pdgId {this, "pdgId", -1}
IntegerProperty m_vetoPdgId {this, "vetoPdgId", -1}
BooleanProperty m_grandparent {this, "hasNoGrandparent", false}
BooleanProperty m_poselectronfromgamma {this, "poselectronfromgamma", false}
std::vector< unsigned int > m_counters {}
IntegerArrayProperty m_ancestors {this, "ancestorList", {}}
FloatProperty m_radiusCylinder
FloatProperty m_minZCylinder
FloatProperty m_maxZCylinder
FloatProperty m_zDisc
FloatProperty m_minRadiusDisc
FloatProperty m_maxRadiusDisc
std::unique_ptr< Trk::CylinderSurfacem_cylinder
std::unique_ptr< Trk::DiscSurfacem_disc1
std::unique_ptr< Trk::DiscSurfacem_disc2
PublicToolHandle< Trk::IExtrapolatorm_extrapolator {this,"Extrapolator","Trk::Extrapolator/AtlasExtrapolator",""}
 Too handle for truth-track extrapolation.
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

class to apply selection to xAOD::TruthParticles,required by validation

Definition at line 28 of file AthTruthSelectionTool.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

◆ AthTruthSelectionTool()

AthTruthSelectionTool::AthTruthSelectionTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 44 of file AthTruthSelectionTool.cxx.

45 :
46 AthAlgTool(type, name, parent)
47{
48 // declare interface from base class
49 declareInterface<IAthSelectionTool>(this);
50}
AthAlgTool()
Default constructor:

◆ ~AthTruthSelectionTool()

virtual AthTruthSelectionTool::~AthTruthSelectionTool ( )
inlinevirtual

Definition at line 31 of file AthTruthSelectionTool.h.

31 {
32 /*nop*/
33 };

Member Function Documentation

◆ accept()

IAthSelectionTool::CutResult AthTruthSelectionTool::accept ( const xAOD::IParticle * p) const
finalvirtual

The most important method to determine whether the particle is accepted.

Parameters
pPointer to particle baseclass, will be cast to truth or track
Returns
the number of cuts which are not passed or tested

Implements IAthSelectionTool.

Definition at line 256 of file AthTruthSelectionTool.cxx.

256 {
257 const xAOD::TruthParticle* pTruth = dynamic_cast<const xAOD::TruthParticle*>(particle);
258
259 //@TODO
260 if (not pTruth) {
261 return m_cutList.size()+1; // marker for invalid particles
262 }
263 return m_cutList.accept(*pTruth);
264}
CutList< xAOD::TruthParticle > m_cutList
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
TruthParticle_v1 TruthParticle
Typedef to implementation.

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

◆ 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

◆ finalize()

StatusCode AthTruthSelectionTool::finalize ( )
final

Definition at line 244 of file AthTruthSelectionTool.cxx.

244 {
245 // nop
246 return StatusCode::SUCCESS;
247}

◆ initialize()

StatusCode AthTruthSelectionTool::initialize ( )
final

Definition at line 53 of file AthTruthSelectionTool.cxx.

53 {
54 // can set cut properties now
55 using P_t = xAOD::TruthParticle;
56 using Accept_t = Accept<P_t>;
57 //
58 const std::vector<Accept_t> filters = {
59 // if p.pt=0, TVector3 generates an error when querying p.eta(); a limit of 1e-7 was not found to be enough to
60 // prevent this
61 // the following also vetoes the case where the p.pt()=NaN, as any inequality with NaN evaluates to false
62 Accept_t([this](const P_t& p) -> bool {
63 return((p.pt() > 0.1) ? (std::abs(p.eta()) < m_maxEta) : false);
64 }, std::string("eta")),
65 Accept_t([this](const P_t& p) -> bool {
66 return(p.pt() > m_minPt);
67 }, std::string("min_pt"))
68 };
69 //
70 m_cutList = CutList<P_t>(filters);
71 if (m_maxProdVertRadius>0) {
72 m_cutList.add(Accept_t([&m_maxProdVertRadius = std::as_const(m_maxProdVertRadius)](const P_t& p) -> bool {
73 return((not (p.hasProdVtx()))or(p.prodVtx()->perp() < m_maxProdVertRadius));
74 },
75 "decay_before_" + std::to_string(m_maxProdVertRadius)));
76 }
77 if (m_maxPt > 0) {
78 m_cutList.add(Accept_t([&m_maxPt = std::as_const(m_maxPt)](const P_t& p) {
79 return(p.pt() < m_maxPt);
80 }, "max_pt"));
81 }
82 if (m_requireSiHit > 0) {
83 m_cutList.add(Accept_t([&m_requireSiHit = std::as_const(m_requireSiHit)](const P_t& p) {
84 static const SG::AuxElement::ConstAccessor< float > nSilHitsAcc("nSilHits");
85 if (nSilHitsAcc.isAvailable(p)) return (nSilHitsAcc(p) >= m_requireSiHit);
86 else return false;
87 }, "siHit"));
88 }
90 m_cutList.add(Accept_t([](const P_t& p) {
92 }, "OnlyPrimary"));
93 }
94 if (m_requireCharged) {
95 m_cutList.add(Accept_t([&m_selectedCharge = std::as_const(m_selectedCharge)](const P_t& p) {
96 if(m_selectedCharge ==0) return(not (p.isNeutral()));
97 else return(not(p.isNeutral()) and p.charge()==m_selectedCharge);
98 }, "charged"));
99 }
100 if (m_requireStable) {
101 m_cutList.add(Accept_t([](const P_t& p) {
102 return(MC::isStable(&p));
103 }, "stable"));
104 }
105 if (m_pdgId > 0) {
106 m_cutList.add(Accept_t([&m_pdgId = std::as_const(m_pdgId)](const P_t& p) {
107 return(std::abs(p.pdgId()) == m_pdgId);
108 }, "pdgId"));
109 }
110 if (m_vetoPdgId > 0) {
111 m_cutList.add(Accept_t([&m_vetoPdgId = std::as_const(m_vetoPdgId)](const P_t& p) {
112 return(std::abs(p.pdgId()) != m_vetoPdgId);
113 }, "vetoPdgId"));
114 }
115 if (m_grandparent) {
116 m_cutList.add(Accept_t([](const P_t& p) {
117 return((p.nParents() == 0) || ((p.nParents() == 1)and((p.parent(0))->nParents() == 0)));
118 }, "hasNoGrandparent"));
119 }
120 //require the truth particles to come from certain ancesters
121 if (!m_ancestors.empty()) {
122 m_cutList.add(Accept_t([&m_ancestors = std::as_const(m_ancestors)](const P_t& p) -> bool {
123 const xAOD::TruthParticle* pTruth = dynamic_cast<const xAOD::TruthParticle*>(&p);
124 if (not pTruth) return false;
125 else return hasAncestor(pTruth, m_ancestors);
126 }, "ancestors"));
127 }
129 m_cutList.add(Accept_t([](const P_t& p) {
130 return((p.absPdgId() == electronId)and(p.nParents() >= 1) and(p.parent(0)) and(p.parent(0)->pdgId() == gammaId));
131 }, "poselectronfromgamma"));
132 }
133 if (m_radiusCylinder > 0) {
134 // m_cutList.add(Accept_t(acceptExtrapolatedTPToSurface, "SelectCylinder"));
135 if (not m_cylinder) {
136 ATH_MSG_VERBOSE("Creating and caching cylinder surface");
137 Amg::Transform3D trnsf;
138 trnsf.setIdentity();
139 m_cylinder = std::make_unique<Trk::CylinderSurface>( trnsf, m_radiusCylinder, 20000.);
140 }
141 m_cutList.add(Accept_t([this](const P_t& p) -> bool {
142 ATH_MSG_VERBOSE("Checking particle for intersection with cylinder of radius " << m_radiusCylinder);
143 //create surface we extrapolate to and cache it
144 const xAOD::TruthVertex* ptruthVertex = p.prodVtx();
145 if (ptruthVertex == nullptr) {
146 //cannot derive production vertex, reject track
147 ATH_MSG_VERBOSE("Rejecting particle without production vertex.");
148 return false;
149 }
150 const auto xPos = ptruthVertex->x();
151 const auto yPos = ptruthVertex->y();
152 const auto z_truth = ptruthVertex->z();
153 const Amg::Vector3D position(xPos, yPos, z_truth);
154 const Amg::Vector3D momentum(p.px(), p.py(), p.pz());
155 const Trk::CurvilinearParameters cParameters(position, momentum, p.charge());
156 const Trk::TrackParameters *exParameters = m_extrapolator->extrapolate(Gaudi::Hive::currentContext(),
157 cParameters,
158 *m_cylinder,
159 Trk::anyDirection, false, Trk::pion).release();
160 if (!exParameters) {
161 ATH_MSG_VERBOSE("Failed extrapolation. Rejecting track.");
162 return false;
163 }
164 ATH_MSG_VERBOSE("Extrapolated parameters to cylinder: " << *exParameters);
165 const float ex_abs_z = fabs(exParameters->position().z());
166 if ( (ex_abs_z > m_minZCylinder) and (ex_abs_z < m_maxZCylinder) ) {
167 ATH_MSG_VERBOSE("Particle accepted.");
168 return true;
169 }
170 //else..
171 ATH_MSG_VERBOSE("Particle rejected");
172 return false;
173 }, "SelectCylinder"));
174 } else if (m_zDisc > 0) {
175 //m_cutList.add(Accept_t(acceptExtrapolatedTPToSurface, "SelectDisc"));
176 if (not m_disc1 || not m_disc2) { //m_disc2 == 0 implied
177 ATH_MSG_VERBOSE("Creating and caching disc surface");
179 m_disc1 = std::make_unique<Trk::DiscSurface>( trnsf_shiftZ, m_minRadiusDisc, m_maxRadiusDisc);
180 trnsf_shiftZ = Amg::Translation3D(0.,0.,-m_zDisc);
181 m_disc2 = std::make_unique<Trk::DiscSurface>( trnsf_shiftZ, m_minRadiusDisc, m_maxRadiusDisc);
182 }
183 m_cutList.add(Accept_t([this](const P_t& p) -> bool {
184 ATH_MSG_VERBOSE("Checking particle for intersection with discs of |z| " << m_zDisc);
185 //create surface we extrapolate to and cache it
186 const xAOD::TruthVertex* ptruthVertex = p.prodVtx();
187 if (ptruthVertex == nullptr) {
188 //cannot derive production vertex, reject track
189 ATH_MSG_VERBOSE("Rejecting particle without production vertex.");
190 return false;
191 }
192 const auto xPos = ptruthVertex->x();
193 const auto yPos = ptruthVertex->y();
194 const auto z_truth = ptruthVertex->z();
195 const Amg::Vector3D position(xPos, yPos, z_truth);
196 const Amg::Vector3D momentum(p.px(), p.py(), p.pz());
197 const Trk::CurvilinearParameters cParameters(position, momentum, p.charge());
198 const Trk::TrackParameters *exParameters = m_extrapolator->extrapolate(Gaudi::Hive::currentContext(),
199 cParameters,
200 *m_disc1, Trk::anyDirection, true, Trk::pion).release();
201 if (exParameters) {
202 //since boundary check is true, should be enough to say we've hit the disk..
203 ATH_MSG_VERBOSE("Successfully extrapolated track to disk at +" << m_zDisc << ": " << *exParameters);
204 float ex_radius = sqrt(pow(exParameters->position().x(),2)+pow(exParameters->position().y(),2));
205 ATH_MSG_VERBOSE("radial position at surface: " << ex_radius);
206 if ((ex_radius > m_minRadiusDisc) and (ex_radius < m_maxRadiusDisc)) {
207 ATH_MSG_VERBOSE("Confirmed within the disk. Accepting particle");
208 return true;
209 }
210 //else...
211 ATH_MSG_VERBOSE("Strange, extrapolation succeeded but extrapolated position not within disc radius! Test next disc");
212 }
213 exParameters = m_extrapolator->extrapolate(Gaudi::Hive::currentContext(),cParameters, *m_disc2, Trk::anyDirection, true, Trk::pion).release();
214 if (exParameters) {
215 //since boundary check is true, should be enough to say we've hit the disk..
216 ATH_MSG_VERBOSE("Successfully extrapolated track to disk at -" << m_zDisc << ": " << *exParameters);
217 float ex_radius = sqrt(pow(exParameters->position().x(),2)+pow(exParameters->position().y(),2));
218 ATH_MSG_VERBOSE("radial position at surface: " << ex_radius);
219 if ((ex_radius > m_minRadiusDisc) and (ex_radius < m_maxRadiusDisc)) {
220 ATH_MSG_VERBOSE("Confirmed within the disk. Accepting particle");
221 return true;
222 }
223 //else...
224 ATH_MSG_VERBOSE("Strange, extrapolation succeeded but extrapolated position not within disc radius! Rejecting");
225 }
226 //else..
227 ATH_MSG_VERBOSE("Particle rejected");
228 return false;
229 }, "SelectDisc"));
230 } //m_zDisc > 0
231
232 std::string msg = std::to_string(m_cutList.size()) + " truth acceptance cuts are used:\n";
233 for (const auto& i:m_cutList.names()) {
234 msg += i + "\n";
235 }
237
238 ATH_CHECK(m_extrapolator.retrieve(EnableTool{ m_radiusCylinder > 0 || m_zDisc >0 }));
239
240 return StatusCode::SUCCESS;
241}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
constexpr int pow(int base, int exp) noexcept
MsgStream & msg() const
std::unique_ptr< Trk::CylinderSurface > m_cylinder
PublicToolHandle< Trk::IExtrapolator > m_extrapolator
Too handle for truth-track extrapolation.
std::unique_ptr< Trk::DiscSurface > m_disc1
BooleanProperty m_requireOnlyPrimary
BooleanProperty m_poselectronfromgamma
std::unique_ptr< Trk::DiscSurface > m_disc2
IntegerArrayProperty m_ancestors
const Amg::Vector3D & position() const
Access method for the position.
float z() const
Vertex longitudinal distance along the beam line form the origin.
float y() const
Vertex y displacement.
float x() const
Vertex x displacement.
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Translation< double, 3 > Translation3D
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
@ anyDirection
CurvilinearParametersT< TrackParametersDim, Charged, PlaneSurface > CurvilinearParameters
ParametersBase< TrackParametersDim, Charged > TrackParameters
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition TruthVertex.h:15

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

◆ interfaceID()

const InterfaceID & IAthSelectionTool::interfaceID ( )
inlinestaticinherited

interfaceID reimplemented from base

Definition at line 73 of file IAthSelectionTool.h.

73 {
75}
static const InterfaceID IID_IAthSelectionTool("IAthSelectionTool", 1, 0)

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

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

◆ names()

std::vector< std::string > AthTruthSelectionTool::names ( ) const
finalvirtual

return the names of the cuts as a vector<string>

Implements IAthSelectionTool.

Definition at line 251 of file AthTruthSelectionTool.cxx.

251 {
252 return m_cutList.names();
253}

◆ nCuts()

unsigned int AthTruthSelectionTool::nCuts ( ) const
inlinefinalvirtual

return the number of cuts.

Returns
the number of cuts

Implements IAthSelectionTool.

Definition at line 43 of file AthTruthSelectionTool.h.

43 {
44 return m_cutList.size();
45 }

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

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

◆ testAllCuts()

IAthSelectionTool::CutResult AthTruthSelectionTool::testAllCuts ( const xAOD::IParticle * p,
std::vector< unsigned int > & counter ) const
finalvirtual

The most important method to determine whether the particle is accepted.

Parameters
pPointer to particle baseclass, will be cast to truth or track
Returns
true if particle passes cuts

Implements IAthSelectionTool.

Definition at line 267 of file AthTruthSelectionTool.cxx.

267 {
268 const xAOD::TruthParticle* pTruth = dynamic_cast<const xAOD::TruthParticle*>(particle);
269
270 //@TODO
271 if (not pTruth) {
272 return m_cutList.size()+1; // marker for invalid particles
273 }
274 return m_cutList.testAllCuts(*pTruth,counter);
275}

◆ 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

Member Data Documentation

◆ m_ancestors

IntegerArrayProperty AthTruthSelectionTool::m_ancestors {this, "ancestorList", {}}
private

Definition at line 68 of file AthTruthSelectionTool.h.

68{this, "ancestorList", {}};

◆ m_counters

std::vector<unsigned int> AthTruthSelectionTool::m_counters {}
private

Definition at line 67 of file AthTruthSelectionTool.h.

67{};

◆ m_cutList

CutList<xAOD::TruthParticle> AthTruthSelectionTool::m_cutList
private

Definition at line 50 of file AthTruthSelectionTool.h.

◆ m_cylinder

std::unique_ptr<Trk::CylinderSurface> AthTruthSelectionTool::m_cylinder
private

Definition at line 87 of file AthTruthSelectionTool.h.

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

std::unique_ptr<Trk::DiscSurface> AthTruthSelectionTool::m_disc1
private

Definition at line 88 of file AthTruthSelectionTool.h.

◆ m_disc2

std::unique_ptr<Trk::DiscSurface> AthTruthSelectionTool::m_disc2
private

Definition at line 89 of file AthTruthSelectionTool.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_extrapolator

PublicToolHandle<Trk::IExtrapolator> AthTruthSelectionTool::m_extrapolator {this,"Extrapolator","Trk::Extrapolator/AtlasExtrapolator",""}
private

Too handle for truth-track extrapolation.

Definition at line 95 of file AthTruthSelectionTool.h.

96{this,"Extrapolator","Trk::Extrapolator/AtlasExtrapolator",""};

◆ m_grandparent

BooleanProperty AthTruthSelectionTool::m_grandparent {this, "hasNoGrandparent", false}
private

Definition at line 65 of file AthTruthSelectionTool.h.

65{this, "hasNoGrandparent", false};

◆ m_maxEta

FloatProperty AthTruthSelectionTool::m_maxEta {this, "maxEta", 2.5}
private

Definition at line 52 of file AthTruthSelectionTool.h.

52{this, "maxEta", 2.5};

◆ m_maxProdVertRadius

FloatProperty AthTruthSelectionTool::m_maxProdVertRadius {this, "maxProdVertRadius", 110.}
private

Definition at line 62 of file AthTruthSelectionTool.h.

62{this, "maxProdVertRadius", 110.};

◆ m_maxPt

FloatProperty AthTruthSelectionTool::m_maxPt {this, "maxPt", -1.}
private

Definition at line 53 of file AthTruthSelectionTool.h.

53{this, "maxPt", -1.};

◆ m_maxRadiusDisc

FloatProperty AthTruthSelectionTool::m_maxRadiusDisc
private
Initial value:
{this, "maxRadiusDisc", 0.,
"Maximum radius on disk for accepting extrapolated truth particle to surface."}

Definition at line 83 of file AthTruthSelectionTool.h.

83 {this, "maxRadiusDisc", 0.,
84 "Maximum radius on disk for accepting extrapolated truth particle to surface."};

◆ m_maxZCylinder

FloatProperty AthTruthSelectionTool::m_maxZCylinder
private
Initial value:
{this, "maxZCylinder", 0.,
"Maximum |Z| on cylinder for accepting extrapolated truth particle to surface."}

Definition at line 77 of file AthTruthSelectionTool.h.

77 {this, "maxZCylinder", 0.,
78 "Maximum |Z| on cylinder for accepting extrapolated truth particle to surface."};

◆ m_minPt

FloatProperty AthTruthSelectionTool::m_minPt {this, "minPt", 400.}
private

Definition at line 54 of file AthTruthSelectionTool.h.

54{this, "minPt", 400.};

◆ m_minRadiusDisc

FloatProperty AthTruthSelectionTool::m_minRadiusDisc
private
Initial value:
{this, "minRadiusDisc", 0.,
"Minimum radius on disk for accepting extrapolated truth particle to surface."}

Definition at line 81 of file AthTruthSelectionTool.h.

81 {this, "minRadiusDisc", 0.,
82 "Minimum radius on disk for accepting extrapolated truth particle to surface."};

◆ m_minZCylinder

FloatProperty AthTruthSelectionTool::m_minZCylinder
private
Initial value:
{this, "minZCylinder", 0.,
"Minimum |Z| on cylinder for accepting extrapolated truth particle to surface."}

Definition at line 75 of file AthTruthSelectionTool.h.

75 {this, "minZCylinder", 0.,
76 "Minimum |Z| on cylinder for accepting extrapolated truth particle to surface."};

◆ m_pdgId

IntegerProperty AthTruthSelectionTool::m_pdgId {this, "pdgId", -1}
private

Definition at line 63 of file AthTruthSelectionTool.h.

63{this, "pdgId", -1};

◆ m_poselectronfromgamma

BooleanProperty AthTruthSelectionTool::m_poselectronfromgamma {this, "poselectronfromgamma", false}
private

Definition at line 66 of file AthTruthSelectionTool.h.

66{this, "poselectronfromgamma", false};

◆ m_radiusCylinder

FloatProperty AthTruthSelectionTool::m_radiusCylinder
private
Initial value:
{this, "radiusCylinder", -1.,
"Select truth particle based on extrapolated position on cylinder placed at this radius. Enabled if greater than 0."}

Definition at line 73 of file AthTruthSelectionTool.h.

73 {this, "radiusCylinder", -1.,
74 "Select truth particle based on extrapolated position on cylinder placed at this radius. Enabled if greater than 0."};

◆ m_requireCharged

BooleanProperty AthTruthSelectionTool::m_requireCharged {this, "requireCharged", true}
private

Definition at line 56 of file AthTruthSelectionTool.h.

56{this, "requireCharged", true};

◆ m_requireOnlyPrimary

BooleanProperty AthTruthSelectionTool::m_requireOnlyPrimary {this, "requireOnlyPrimary", true}
private

Definition at line 55 of file AthTruthSelectionTool.h.

55{this, "requireOnlyPrimary", true};

◆ m_requireSiHit

IntegerProperty AthTruthSelectionTool::m_requireSiHit {this, "requireSiHit", 0}
private

Definition at line 59 of file AthTruthSelectionTool.h.

59{this, "requireSiHit", 0};

◆ m_requireStable

BooleanProperty AthTruthSelectionTool::m_requireStable {this, "requireStable", true}
private

Definition at line 58 of file AthTruthSelectionTool.h.

58{this, "requireStable", true};

◆ m_selectedCharge

IntegerProperty AthTruthSelectionTool::m_selectedCharge {this, "selectedCharge", 0}
private

Definition at line 57 of file AthTruthSelectionTool.h.

57{this, "selectedCharge", 0};

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vetoPdgId

IntegerProperty AthTruthSelectionTool::m_vetoPdgId {this, "vetoPdgId", -1}
private

Definition at line 64 of file AthTruthSelectionTool.h.

64{this, "vetoPdgId", -1};

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.

◆ m_zDisc

FloatProperty AthTruthSelectionTool::m_zDisc
private
Initial value:
{this, "zDisc", -1.,
"Select truth particle based on extrapolated position on disks placed at +/- z positions. Enabled if greater than 0."}

Definition at line 79 of file AthTruthSelectionTool.h.

79 {this, "zDisc", -1.,
80 "Select truth particle based on extrapolated position on disks placed at +/- z positions. Enabled if greater than 0."};

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