ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
IDTPM::TruthHitDecoratorAlg Class Reference

#include <TruthHitDecoratorAlg.h>

Inheritance diagram for IDTPM::TruthHitDecoratorAlg:
Collaboration diagram for IDTPM::TruthHitDecoratorAlg:

Public Member Functions

 TruthHitDecoratorAlg (const std::string &name, ISvcLocator *pSvcLocator)
 Local includes. More...
 
virtual ~TruthHitDecoratorAlg ()=default
 
virtual StatusCode initialize () override
 
virtual StatusCode execute (const EventContext &ctx) const override
 
virtual StatusCode sysInitialize () override
 Override sysInitialize. More...
 
virtual bool isClonable () const override
 Specify if the algorithm is clonable. More...
 
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
 
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
virtual bool filterPassed (const EventContext &ctx) const
 
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
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. More...
 

Private Types

enum  TruthDecorations {
  D0, Z0, Phi, Theta,
  Z0st, QOverP, ProdR, ProdZ,
  NSilHits, NDecorations
}
 
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

StatusCode decorateTruth (const xAOD::TruthParticle &particle, std::vector< IDTPM::OptionalDecoration< xAOD::TruthParticleContainer, float > > &float_decor, const Amg::Vector3D &beamPos, std::unordered_map< int, float > &pixelMap, std::unordered_map< int, float > &sctMap, const EventContext &ctx) const
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

PublicToolHandle< Trk::IExtrapolatorm_extrapolator
 
SG::ReadDecorHandleKeyArray< xAOD::EventInfom_beamSpotDecoKey
 
std::atomic< bool > m_errorEmitted { false }
 
SG::ReadHandleKey< xAOD::TruthParticleContainerm_truthParticleName
 TruthParticle container's name needed to create decorators. More...
 
StringProperty m_prefix { this, "Prefix", "", "Decoration prefix to avoid clashes." }
 
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainerm_truthPixelClusterName
 
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainerm_truthSCTClusterName
 
const std::vector< std::string > m_decor_names
 
std::vector< std::pair< SG::WriteDecorHandleKey< xAOD::TruthParticleContainer >, SG::AuxElement::ConstAccessor< float > > > m_decor {}
 
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 44 of file TruthHitDecoratorAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ TruthDecorations

Enumerator
D0 
Z0 
Phi 
Theta 
Z0st 
QOverP 
ProdR 
ProdZ 
NSilHits 
NDecorations 

Definition at line 90 of file TruthHitDecoratorAlg.h.

90  {
91  D0,
92  Z0,
93  Phi,
94  Theta,
95  Z0st,
96  QOverP,
97  ProdR,
98  ProdZ,
99  NSilHits,
101  };

Constructor & Destructor Documentation

◆ TruthHitDecoratorAlg()

IDTPM::TruthHitDecoratorAlg::TruthHitDecoratorAlg ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Local includes.

EDM includes ROOT includes STD includes


----— Constructor ----—

Definition at line 30 of file TruthHitDecoratorAlg.cxx.

32  :
33  AthReentrantAlgorithm( name, pSvcLocator ) { }

◆ ~TruthHitDecoratorAlg()

virtual IDTPM::TruthHitDecoratorAlg::~TruthHitDecoratorAlg ( )
virtualdefault

Member Function Documentation

◆ cardinality()

unsigned int AthReentrantAlgorithm::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Override this to return 0 for reentrant algorithms.

Definition at line 55 of file AthReentrantAlgorithm.cxx.

56 {
57  return 0;
58 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

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

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

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

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

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

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

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ decorateTruth()

StatusCode IDTPM::TruthHitDecoratorAlg::decorateTruth ( const xAOD::TruthParticle particle,
std::vector< IDTPM::OptionalDecoration< xAOD::TruthParticleContainer, float > > &  float_decor,
const Amg::Vector3D beamPos,
std::unordered_map< int, float > &  pixelMap,
std::unordered_map< int, float > &  sctMap,
const EventContext &  ctx 
) const
private

-— decorateTruth -—

Skip neutral truth particles

Retrieve the cluster count from the pre-filled maps

Decoration for NSiHits

Other hit decorations

Definition at line 147 of file TruthHitDecoratorAlg.cxx.

153  {
154 
156  if( particle.isNeutral() ) {
157  return StatusCode::SUCCESS;
158  }
159 
160  const Amg::Vector3D momentum( particle.px(), particle.py(), particle.pz() );
161  const int pid( particle.pdgId() );
162  double charge = particle.charge();
163 
164  if( std::isnan(charge) ) {
165  ATH_MSG_DEBUG( "Charge not found on particle with pid " << pid );
166  return StatusCode::SUCCESS;
167  }
168 
171  it1 = pixelMap.find( HepMC::barcode(particle) ); // FIXME barcode-based
172  it2 = sctMap.find( HepMC::barcode(particle) ); // FIXME barcode-based
173  float nSiHits = 0;
174  if( it1 !=pixelMap.end() ) nSiHits += (*it1).second;
175  if( it2 !=sctMap.end() ) nSiHits += (*it2).second;
176 
179 
180  const xAOD::TruthVertex* ptruthVertex(nullptr);
181  try {
182  ptruthVertex = particle.prodVtx();
183  } catch( const std::exception& e ) {
184  if ( not m_errorEmitted ) {
185  ATH_MSG_WARNING( "A non existent production vertex was requested in calculating the track parameters d0 etc" );
186  }
187  m_errorEmitted = true;
188  return StatusCode::RECOVERABLE; //SUCCESS;
189  }
190 
191  if( not ptruthVertex ) {
192  ATH_MSG_DEBUG( "A production vertex pointer was retrieved, but it is NULL" );
193  return StatusCode::SUCCESS;
194  }
195 
196  const auto xPos = ptruthVertex->x();
197  const auto yPos = ptruthVertex->y();
198  const auto z_truth = ptruthVertex->z();
199  const Amg::Vector3D position( xPos, yPos, z_truth );
200  const float prodR_truth = std::sqrt( xPos * xPos + yPos * yPos );
201  const Trk::CurvilinearParameters cParameters( position, momentum, charge );
202 
203  Trk::PerigeeSurface persf( beamPos );
204 
205  std::unique_ptr< const Trk::TrackParameters > tP(
206  m_extrapolator->extrapolate( ctx, cParameters,
207  persf, Trk::anyDirection, false ) );
208  if( not tP ) {
209  ATH_MSG_DEBUG( "The TrackParameters pointer for this TruthParticle is NULL" );
210  return StatusCode::SUCCESS;
211  }
212 
214  float d0_truth = tP->parameters()[ Trk::d0 ];
215  float theta_truth = tP->parameters()[ Trk::theta ];
216  float z0_truth = tP->parameters()[ Trk::z0 ];
217  float phi_truth = tP->parameters()[ Trk::phi ];
218  float qOverP_truth = tP->parameters()[ Trk::qOverP ]; // P or Pt ??
219  float z0st_truth = z0_truth * std::sin( theta_truth );
220 
221  ATH_MSG_DEBUG( "Truth particle (pT = " << particle.pt() <<
222  " has impact parameter (d0, z0) = (" << d0_truth <<
223  " ," << z0_truth << ")" );
224 
225  IDTPM::decorateOrRejectQuietly( particle, float_decor[D0], d0_truth );
226  IDTPM::decorateOrRejectQuietly( particle, float_decor[Z0], z0_truth );
227  IDTPM::decorateOrRejectQuietly( particle, float_decor[Phi], phi_truth );
228  IDTPM::decorateOrRejectQuietly( particle, float_decor[Theta], theta_truth );
229  IDTPM::decorateOrRejectQuietly( particle, float_decor[Z0st], z0st_truth );
230  IDTPM::decorateOrRejectQuietly( particle, float_decor[QOverP], qOverP_truth );
231  IDTPM::decorateOrRejectQuietly( particle, float_decor[ProdR], prodR_truth );
232  IDTPM::decorateOrRejectQuietly( particle, float_decor[ProdZ], z_truth );
233 
234  return StatusCode::SUCCESS;
235 }

◆ detStore()

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

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

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

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

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

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( ) const
inlineinherited

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

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

StatusCode IDTPM::TruthHitDecoratorAlg::execute ( const EventContext &  ctx) const
overridevirtual

----— execute ----—

retrieve truth particle container

truthbarcode-cluster maps to be pre-stored at event level

Loop over the pixel and sct clusters to fill the truth barcode - cluster count maps

Loop over truth SCT clusters

Loop over truth Pixel clusters

Retrieving BeamSpot info

decorate current truth particle with hit info

Definition at line 64 of file TruthHitDecoratorAlg.cxx.

65  {
66 
69  if( not ptruth.isValid() ) {
70  ATH_MSG_ERROR( "Failed to retrieve truth particle container" );
71  return StatusCode::FAILURE;
72  }
73 
74  std::vector< IDTPM::OptionalDecoration< xAOD::TruthParticleContainer, float > >
76  *ptruth, m_decor, ctx, msgLvl(MSG::DEBUG) ) );
77 
79  // FIXME barcode-based requires xAOD::TrackMeasurementValidation to be migrated to use unique ID
80  std::unordered_map< int, float > barcodeSCTclustercount;
81  std::unordered_map< int, float > barcodePIXclustercount;
82 
87 
88  //only decorate the truth particles with truth silicon hits if both containers are available
89  if( sctClusters.isValid() && pixelClusters.isValid() ) {
90 
91  static const SG::AuxElement::ConstAccessor< std::vector<int> > barcodeAcc( "truth_barcode" );
92 
94  for( const xAOD::TrackMeasurementValidation* sctCluster : *sctClusters ) {
95  std::vector<int> truth_barcode;
96  if( barcodeAcc.isAvailable( *sctCluster ) ) {
97  truth_barcode = barcodeAcc( *sctCluster );
98  for( const int& barcode : truth_barcode ) {
99  auto result = barcodeSCTclustercount.emplace( std::pair<int, float>(barcode, 0.0) );
100  if( !result.second ) ++( result.first->second );
101  }
102  }
103  } // close loop over truth SCT clusters
104 
106  for( const xAOD::TrackMeasurementValidation* pixCluster : *pixelClusters ) {
107  std::vector<int> truth_barcode;
108  if( barcodeAcc.isAvailable( *pixCluster ) ) {
109  truth_barcode = barcodeAcc( *pixCluster );
110  for( const int& barcode : truth_barcode ) {
111  auto result = barcodePIXclustercount.emplace( std::pair<int, float>(barcode, 0.0) );
112  if( !result.second ) ++( result.first->second );
113  }
114  }
115  } // close loop over truth Pixel clusters
116  } // close if sctClusters and pixelClusters isValid
117 
118  if( float_decor.empty() ) {
119  ATH_MSG_ERROR( "Failed to book Truth particles Hit decorations" );
120  return StatusCode::FAILURE;
121  }
122 
127  if( (not beamPosX.isValid()) or (not beamPosY.isValid()) or (not beamPosZ.isValid()) ) {
128  ATH_MSG_WARNING( "Failed to retrieve beam position" );
129  return StatusCode::RECOVERABLE;
130  }
131  Amg::Vector3D beamPos = Amg::Vector3D( beamPosX(0), beamPosY(0), beamPosZ(0) );
132 
133  for( const xAOD::TruthParticle* truth_particle : *ptruth ) {
136  *truth_particle, float_decor, beamPos,
137  barcodePIXclustercount, barcodeSCTclustercount, ctx ) );
138  }
139 
140  return StatusCode::SUCCESS;
141 }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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

◆ extraOutputDeps()

const DataObjIDColl & AthReentrantAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 79 of file AthReentrantAlgorithm.cxx.

80 {
81  // If we didn't find any symlinks to add, just return the collection
82  // from the base class. Otherwise, return the extended collection.
83  if (!m_extendedExtraObjects.empty()) {
85  }
86  return Algorithm::extraOutputDeps();
87 }

◆ filterPassed()

virtual bool AthReentrantAlgorithm::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 135 of file AthReentrantAlgorithm.h.

135  {
136  return execState( ctx ).filterPassed();
137  }

◆ initialize()

StatusCode IDTPM::TruthHitDecoratorAlg::initialize ( )
overridevirtual

----— initialize ----—

Creating/booking decorations for truth particles

Definition at line 39 of file TruthHitDecoratorAlg.cxx.

39  {
40 
41  ATH_CHECK( m_extrapolator.retrieve() );
42  ATH_CHECK( m_beamSpotDecoKey.initialize() );
43  ATH_CHECK( m_truthPixelClusterName.initialize() );
44  ATH_CHECK( m_truthSCTClusterName.initialize() );
46 
49  *this, m_truthParticleName,
50  m_prefix.value(), m_decor_names, m_decor );
51 
52  if( m_decor.size() != NDecorations ) {
53  ATH_MSG_ERROR( "Incorrect booking of truth hits decorations" );
54  return StatusCode::FAILURE;
55  }
56 
57  return StatusCode::SUCCESS;
58 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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.

◆ isClonable()

bool AthReentrantAlgorithm::isClonable ( ) const
overridevirtualinherited

◆ msg() [1/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ setFilterPassed()

virtual void AthReentrantAlgorithm::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 139 of file AthReentrantAlgorithm.h.

139  {
140  execState( ctx ).setFilterPassed( state );
141  }

◆ sysExecute()

StatusCode AthReentrantAlgorithm::sysExecute ( const EventContext &  ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 67 of file AthReentrantAlgorithm.cxx.

68 {
69  return Gaudi::Algorithm::sysExecute (ctx);
70 }

◆ sysInitialize()

StatusCode AthReentrantAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in InputMakerBase, and HypoBase.

Definition at line 96 of file AthReentrantAlgorithm.cxx.

96  {
98 
99  if (sc.isFailure()) {
100  return sc;
101  }
102 
103  ServiceHandle<ICondSvc> cs("CondSvc",name());
104  for (auto h : outputHandles()) {
105  if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
106  // do this inside the loop so we don't create the CondSvc until needed
107  if ( cs.retrieve().isFailure() ) {
108  ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
109  return StatusCode::SUCCESS;
110  }
111  if (cs->regHandle(this,*h).isFailure()) {
112  sc = StatusCode::FAILURE;
113  ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
114  << " with CondSvc");
115  }
116  }
117  }
118  return sc;
119 }

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_beamSpotDecoKey

SG::ReadDecorHandleKeyArray< xAOD::EventInfo > IDTPM::TruthHitDecoratorAlg::m_beamSpotDecoKey
private
Initial value:
{
this, "BeamSpotDecoKeys",
{ "EventInfo.beamPosX", "EventInfo.beamPosY", "EventInfo.beamPosZ" },
"Beamspot position decoration keys" }

Definition at line 71 of file TruthHitDecoratorAlg.h.

◆ m_decor

std::vector< std::pair< SG::WriteDecorHandleKey< xAOD::TruthParticleContainer >, SG::AuxElement::ConstAccessor< float > > > IDTPM::TruthHitDecoratorAlg::m_decor {}
private

Definition at line 117 of file TruthHitDecoratorAlg.h.

◆ m_decor_names

const std::vector< std::string > IDTPM::TruthHitDecoratorAlg::m_decor_names
private
Initial value:
{
"d0",
"z0",
"phi",
"theta",
"z0st",
"qOverP",
"prodR",
"prodZ",
"nSilHits"
}

Definition at line 103 of file TruthHitDecoratorAlg.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_errorEmitted

std::atomic<bool> IDTPM::TruthHitDecoratorAlg::m_errorEmitted { false }
mutableprivate

Definition at line 76 of file TruthHitDecoratorAlg.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthReentrantAlgorithm::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 153 of file AthReentrantAlgorithm.h.

◆ m_extrapolator

PublicToolHandle< Trk::IExtrapolator > IDTPM::TruthHitDecoratorAlg::m_extrapolator
private
Initial value:
{
this, "Extrapolator", "Trk::Extrapolator/AtlasExtrapolator", "" }

Definition at line 68 of file TruthHitDecoratorAlg.h.

◆ m_prefix

StringProperty IDTPM::TruthHitDecoratorAlg::m_prefix { this, "Prefix", "", "Decoration prefix to avoid clashes." }
private

Definition at line 82 of file TruthHitDecoratorAlg.h.

◆ m_truthParticleName

SG::ReadHandleKey< xAOD::TruthParticleContainer > IDTPM::TruthHitDecoratorAlg::m_truthParticleName
private
Initial value:
{
this, "TruthParticleContainerName", "TruthParticles", "" }

TruthParticle container's name needed to create decorators.

Definition at line 79 of file TruthHitDecoratorAlg.h.

◆ m_truthPixelClusterName

SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > IDTPM::TruthHitDecoratorAlg::m_truthPixelClusterName
private
Initial value:
{
this, "PixelClusterContainerName", "PixelClusters", "" }

Definition at line 84 of file TruthHitDecoratorAlg.h.

◆ m_truthSCTClusterName

SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > IDTPM::TruthHitDecoratorAlg::m_truthSCTClusterName
private
Initial value:
{
this, "SCTClusterContainerName", "SCT_Clusters", "" }

Definition at line 87 of file TruthHitDecoratorAlg.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
IDTPM::TruthHitDecoratorAlg::m_errorEmitted
std::atomic< bool > m_errorEmitted
Definition: TruthHitDecoratorAlg.h:76
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
IDTPM::TruthHitDecoratorAlg::m_decor_names
const std::vector< std::string > m_decor_names
Definition: TruthHitDecoratorAlg.h:103
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
IDTPM::TruthHitDecoratorAlg::m_truthParticleName
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticleName
TruthParticle container's name needed to create decorators.
Definition: TruthHitDecoratorAlg.h:79
IDTPM::TruthHitDecoratorAlg::m_extrapolator
PublicToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: TruthHitDecoratorAlg.h:68
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
IDTPM::TruthHitDecoratorAlg::QOverP
@ QOverP
Definition: TruthHitDecoratorAlg.h:96
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
IDTPM::TruthHitDecoratorAlg::Z0st
@ Z0st
Definition: TruthHitDecoratorAlg.h:95
IDTPM::decorateOrRejectQuietly
void decorateOrRejectQuietly(const T_Cont_Elm &particle, OptionalDecoration< T_Cont, T > &decorator, const T &value)
Safe method to fill the decoration if decor flag is true.
Definition: SafeDecorator.h:197
AthCommonDataStore::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 > renounce(T &h)
Definition: AthCommonDataStore.h:380
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
Trk::z0
@ z0
Definition: ParamDefs.h:70
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
IDTPM::TruthHitDecoratorAlg::Theta
@ Theta
Definition: TruthHitDecoratorAlg.h:94
IDTPM::createDecoratorsIfNeeded
std::vector< OptionalDecoration< T_Cont, T > > createDecoratorsIfNeeded(const T_Cont &container, const std::vector< WriteKeyAccessorPair< T_Cont, T > > &keys, const EventContext &ctx, bool verbose=false)
Like above - FIXME: maybe not needed.
Definition: SafeDecorator.h:114
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
IDTPM::TruthHitDecoratorAlg::ProdR
@ ProdR
Definition: TruthHitDecoratorAlg.h:97
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
xAOD::TrackMeasurementValidation_v1
Class describing a TrackMeasurementValidation.
Definition: TrackMeasurementValidation_v1.h:27
TauGNNUtils::Variables::Track::nSiHits
bool nSiHits(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:691
AthCommonDataStore
Definition: AthCommonDataStore.h:52
IDTPM::TruthHitDecoratorAlg::NSilHits
@ NSilHits
Definition: TruthHitDecoratorAlg.h:99
AthReentrantAlgorithm::AthReentrantAlgorithm
AthReentrantAlgorithm()
Default constructor:
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
IDTPM::TruthHitDecoratorAlg::D0
@ D0
Definition: TruthHitDecoratorAlg.h:91
Trk::theta
@ theta
Definition: ParamDefs.h:72
DetDescrDictionaryDict::it1
std::vector< HWIdentifier >::iterator it1
Definition: DetDescrDictionaryDict.h:17
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
calibdata.exception
exception
Definition: calibdata.py:496
ParticleGun_EoverP_Config.pid
pid
Definition: ParticleGun_EoverP_Config.py:62
IDTPM::TruthHitDecoratorAlg::m_decor
std::vector< std::pair< SG::WriteDecorHandleKey< xAOD::TruthParticleContainer >, SG::AuxElement::ConstAccessor< float > > > m_decor
Definition: TruthHitDecoratorAlg.h:117
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Trk::CurvilinearParametersT
Definition: CurvilinearParametersT.h:48
IDTPM::TruthHitDecoratorAlg::decorateTruth
StatusCode decorateTruth(const xAOD::TruthParticle &particle, std::vector< IDTPM::OptionalDecoration< xAOD::TruthParticleContainer, float > > &float_decor, const Amg::Vector3D &beamPos, std::unordered_map< int, float > &pixelMap, std::unordered_map< int, float > &sctMap, const EventContext &ctx) const
Definition: TruthHitDecoratorAlg.cxx:147
IDTPM::TruthHitDecoratorAlg::m_truthSCTClusterName
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_truthSCTClusterName
Definition: TruthHitDecoratorAlg.h:87
AthReentrantAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthReentrantAlgorithm.h:153
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
xAOD::TruthVertex_v1
Class describing a truth vertex in the MC record.
Definition: TruthVertex_v1.h:41
IDTPM::createDecoratorKeysAndAccessor
void createDecoratorKeysAndAccessor(T_Parent &parent, const SG::ReadHandleKey< T_Cont > &container_key, const std::string &prefix, const std::vector< std::string > &decor_names, std::vector< WriteKeyAccessorPair< T_Cont, T > > &decor_out)
create a pair composed of a WriteDecorHandleKey to create a decorator handle and an accessor to check...
Definition: SafeDecorator.h:52
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Trk::d0
@ d0
Definition: ParamDefs.h:69
IDTPM::TruthHitDecoratorAlg::m_beamSpotDecoKey
SG::ReadDecorHandleKeyArray< xAOD::EventInfo > m_beamSpotDecoKey
Definition: TruthHitDecoratorAlg.h:71
AthReentrantAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthReentrantAlgorithm.cxx:96
charge
double charge(const T &p)
Definition: AtlasPID.h:494
IDTPM::TruthHitDecoratorAlg::ProdZ
@ ProdZ
Definition: TruthHitDecoratorAlg.h:98
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
a
TList * a
Definition: liststreamerinfos.cxx:10
h
IDTPM::TruthHitDecoratorAlg::m_prefix
StringProperty m_prefix
Definition: TruthHitDecoratorAlg.h:82
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DEBUG
#define DEBUG
Definition: page_access.h:11
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
IDTPM::TruthHitDecoratorAlg::NDecorations
@ NDecorations
Definition: TruthHitDecoratorAlg.h:100
IDTPM::TruthHitDecoratorAlg::m_truthPixelClusterName
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_truthPixelClusterName
Definition: TruthHitDecoratorAlg.h:84
Trk::phi
@ phi
Definition: ParamDefs.h:81
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
IDTPM::TruthHitDecoratorAlg::Z0
@ Z0
Definition: TruthHitDecoratorAlg.h:92
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
IDTPM::TruthHitDecoratorAlg::Phi
@ Phi
Definition: TruthHitDecoratorAlg.h:93
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
fitman.k
k
Definition: fitman.py:528
ServiceHandle< ICondSvc >