ATLAS Offline Software
Loading...
Searching...
No Matches
JiveXML::TruthTrackRetriever Class Reference

Retrieves the McEventCollection or the TrackRecordCollection in simulated cosmics. More...

#include <TruthTrackRetriever.h>

Inheritance diagram for JiveXML::TruthTrackRetriever:
Collaboration diagram for JiveXML::TruthTrackRetriever:

Public Member Functions

 TruthTrackRetriever (const std::string &type, const std::string &name, const IInterface *parent)
 Standard Constructor.
virtual StatusCode retrieve (ToolHandle< IFormatTool > &FormatTool)
 Retrieve all the data.
virtual std::string dataTypeName () const
 Return the name of the data type.
StatusCode initialize ()
 Default AthAlgTool methods.

Private Attributes

const std::string m_typeName
 The data type that is generated by this retriever.
std::string m_McEvtCollName
 Storegate key for the McEventCollection (different between RDO/ESD and AOD)
double m_MinPtCut
 Minimum pT for a particle to get accepted.
double m_MinRhoCut
 Minium radius of the end-vertex for the particle to get accepted.

Detailed Description

Retrieves the McEventCollection or the TrackRecordCollection in simulated cosmics.

  • Properties
    • StoreGateKey = TruthEvent : Storegate key for the McEventCollection (different between RDO/ESD and AOD)
  • UnstableMinPtCut = 100*MeV Minimum pT for a particle to get accepted.
  • UnstableMinRhoCut = 40*mm Minium radius of the end-vertex for the particle to get accepted.
  • Retrieved Data
    • code : the PDG ID of the particle
    • id : the particle barcode
    • pt : transverse momentum
    • eta, phi : \(\eta\) and \(\phi\) of the momentum vector
    • rhoVertex,phiVertex,zVertex : position of the production vertex in \(\rho\), \(\phi\) and \(z\)
    • rhoEndVertex,phiEndVertex,zEndVertex : position of the end-vertex in \(\rho\), \(\phi\) and \(z\)

Definition at line 41 of file TruthTrackRetriever.h.

Constructor & Destructor Documentation

◆ TruthTrackRetriever()

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

Standard Constructor.

This is the standard AthAlgTool constructor.

Parameters
typeAlgTool type name
nameAlgTool instance name
parentAlgTools parent owning this tool

Definition at line 26 of file TruthTrackRetriever.cxx.

26 :
27 base_class(type,name,parent),
28 m_typeName("STr")
29 {
30 declareProperty("StoreGateKey", m_McEvtCollName = "TruthEvent", "Name of the McEventCollection");
31 declareProperty("UnstableMinPtCut", m_MinPtCut = 100*Gaudi::Units::MeV, "Minimum pT for an unstable particle to get accepted");
32 declareProperty("UnstableMinRhoCut", m_MinRhoCut = 40*Gaudi::Units::mm, "Minium radius of the end-vertex for unstable particle to get accepted");
33
34 }
std::string m_McEvtCollName
Storegate key for the McEventCollection (different between RDO/ESD and AOD)
double m_MinRhoCut
Minium radius of the end-vertex for the particle to get accepted.
double m_MinPtCut
Minimum pT for a particle to get accepted.
const std::string m_typeName
The data type that is generated by this retriever.

Member Function Documentation

◆ dataTypeName()

virtual std::string JiveXML::TruthTrackRetriever::dataTypeName ( ) const
inlinevirtual

Return the name of the data type.

Definition at line 52 of file TruthTrackRetriever.h.

52{ return m_typeName; };

◆ initialize()

StatusCode JiveXML::TruthTrackRetriever::initialize ( )

Default AthAlgTool methods.

Initialize before event loop.

Definition at line 39 of file TruthTrackRetriever.cxx.

39 {
40 //Nothing to do here
41 return StatusCode::SUCCESS;
42 }

◆ retrieve()

StatusCode JiveXML::TruthTrackRetriever::retrieve ( ToolHandle< IFormatTool > & FormatTool)
virtual

Retrieve all the data.

Loop over all true particles and get their basic parameters.

Parameters
FormatToolthe tool that will create formated output from the DataMap

Definition at line 48 of file TruthTrackRetriever.cxx.

48 {
49
50 //be verbose
51 ATH_MSG_DEBUG( "Retrieving " << dataTypeName() );
52
53 //Retrieve the collection
54 const McEventCollection* McEvtColl = NULL;
55 if ( !evtStore()->contains<McEventCollection>( m_McEvtCollName )){
56 ATH_MSG_DEBUG( "Could not find McEventCollection " << m_McEvtCollName );
57 return StatusCode::SUCCESS;
58 }
59 if( evtStore()->retrieve(McEvtColl, m_McEvtCollName).isFailure() ){
60 ATH_MSG_DEBUG( "Could not retrieve McEventCollection " << m_McEvtCollName );
61 return StatusCode::SUCCESS;
62 }
63
64 // Calculate the size
65 long NParticles=0;
66 McEventCollection::const_iterator McEvtCollItr = McEvtColl->begin();
67 for ( ; McEvtCollItr != McEvtColl->end(); ++McEvtCollItr)
68 NParticles += (*McEvtCollItr)->particles_size();
69
70 //Show in verbose mode
71 ATH_MSG_DEBUG( "Total number of particles in McEventCollection \"" << m_McEvtCollName << "\" is " << NParticles );
72
73 //Reserve space for the output data
74 DataVect pt; pt.reserve(NParticles);
75 DataVect phi; phi.reserve(NParticles);
76 DataVect eta; eta.reserve(NParticles);
77 DataVect rhoVertex; rhoVertex.reserve(NParticles);
78 DataVect phiVertex; phiVertex.reserve(NParticles);
79 DataVect zVertex; zVertex.reserve(NParticles);
80 DataVect code; code.reserve(NParticles);
81 DataVect id; id.reserve(NParticles);
82 DataVect rhoEndVertex; rhoEndVertex.reserve(NParticles);
83 DataVect phiEndVertex; phiEndVertex.reserve(NParticles);
84 DataVect zEndVertex; zEndVertex.reserve(NParticles);
85
86
87 //Now loop events and retrieve
88 for ( McEvtCollItr = McEvtColl->begin(); McEvtCollItr != McEvtColl->end(); ++McEvtCollItr){
89
90 //Loop over particles in the event
91#ifdef HEPMC3
92 const auto &barcodes = (*McEvtCollItr)->attribute<HepMC::GenEventBarcodes> ("barcodes");
93 std::map<int,int> id_to_barcode_map;
94 if (barcodes) id_to_barcode_map = barcodes->id_to_barcode_map();
95#endif
96 for (const auto& particle: *(*McEvtCollItr) ) {
97
98 //Additional cuts for decaying particles
99 if ( particle->end_vertex() ) {
100 //Reject particles that fail the pt cut
101 if ( particle->momentum().perp() < m_MinPtCut) continue ;
102 //Reject particles that fail the minimum end-vertex cut
103 if (particle->end_vertex()->position().perp() < m_MinRhoCut ) continue ;
104 }
105
106 //Get basic parameters (eta, phi, pt, ...)
107 pt.emplace_back(particle->momentum().perp()/Gaudi::Units::GeV);
108 float thePhi = particle->momentum().phi();
109 phi.emplace_back( (thePhi<0) ? thePhi+=2*M_PI : thePhi );
110 eta.emplace_back( particle->momentum().pseudoRapidity() );
111 code.emplace_back( particle->pdg_id() );
112#ifdef HEPMC3
113 id.emplace_back( id_to_barcode_map.at(particle->id() ));
114#else
115 id.emplace_back( HepMC::barcode(*particle) );
116#endif
117
118 // Get the vertex information
119 const auto& vertexprod = particle->production_vertex();
120 if (vertexprod) {
121 const auto& pos=vertexprod->position();
122 rhoVertex.emplace_back( std::sqrt(pos.x()*pos.x()+pos.y()*pos.y()+pos.z()*pos.z())*Gaudi::Units::mm/Gaudi::Units::cm );
123 float vtxPhi = pos.phi();
124 phiVertex.emplace_back( (vtxPhi<0)? vtxPhi+=2*M_PI : vtxPhi );
125 zVertex.emplace_back( pos.z()*Gaudi::Units::mm/Gaudi::Units::cm );
126 } else {
127 rhoVertex.emplace_back( 0. );
128 phiVertex.emplace_back( 0. );
129 zVertex.emplace_back( 0. );
130 }
131 //Do the same for the end vertex
132 const auto& vertexend = particle->end_vertex();
133 if ( vertexend ) {
134 const auto& pos=vertexend->position();
135 rhoEndVertex.emplace_back(std::sqrt(pos.x()*pos.x()+pos.y()*pos.y()+pos.z()*pos.z())*Gaudi::Units::mm/Gaudi::Units::cm);
136 float vtxPhi = pos.phi();
137 phiEndVertex.emplace_back( (vtxPhi<0)? vtxPhi+=2*M_PI : vtxPhi );
138 zEndVertex.emplace_back(pos.z()*Gaudi::Units::mm/Gaudi::Units::cm);
139 } else {
140 rhoEndVertex.emplace_back( 0. );
141 phiEndVertex.emplace_back( 0. );
142 zEndVertex.emplace_back( 0. );
143 }
144 }
145 }
146
147 DataMap myDataMap;
148 const auto nEntries = pt.size();
149 myDataMap["pt"] = std::move(pt);
150 myDataMap["phi"] = std::move(phi);
151 myDataMap["eta"] = std::move(eta);
152 myDataMap["code"] = std::move(code);
153 myDataMap["id"] = std::move(id);
154 myDataMap["rhoVertex"] = std::move(rhoVertex);
155 myDataMap["phiVertex"] = std::move(phiVertex);
156 myDataMap["zVertex"] = std::move(zVertex);
157 myDataMap["rhoEndVertex"] = std::move(rhoEndVertex);
158 myDataMap["phiEndVertex"] = std::move(phiEndVertex);
159 myDataMap["zEndVertex"] = std::move(zEndVertex);
160
161 //Be verbose
162 ATH_MSG_DEBUG( dataTypeName() << ": "<< nEntries );
163
164 //forward data to formating tool
165 return FormatTool->AddToEvent(dataTypeName(), m_McEvtCollName, &myDataMap);
166 }
#define M_PI
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_MSG_DEBUG(x)
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
virtual std::string dataTypeName() const
Return the name of the data type.
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
int barcode(const T *p)
Definition Barcode.h:16
std::map< std::string, DataVect > DataMap
Definition DataType.h:59
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition DataType.h:58
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
barcodes(beg, end, sz)
Definition Dumpers.py:2831

Member Data Documentation

◆ m_McEvtCollName

std::string JiveXML::TruthTrackRetriever::m_McEvtCollName
private

Storegate key for the McEventCollection (different between RDO/ESD and AOD)

Definition at line 62 of file TruthTrackRetriever.h.

◆ m_MinPtCut

double JiveXML::TruthTrackRetriever::m_MinPtCut
private

Minimum pT for a particle to get accepted.

Definition at line 64 of file TruthTrackRetriever.h.

◆ m_MinRhoCut

double JiveXML::TruthTrackRetriever::m_MinRhoCut
private

Minium radius of the end-vertex for the particle to get accepted.

Definition at line 66 of file TruthTrackRetriever.h.

◆ m_typeName

const std::string JiveXML::TruthTrackRetriever::m_typeName
private

The data type that is generated by this retriever.

Definition at line 59 of file TruthTrackRetriever.h.


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