ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
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. More...
 
virtual StatusCode retrieve (ToolHandle< IFormatTool > &FormatTool)
 Retrieve all the data. More...
 
virtual std::string dataTypeName () const
 Return the name of the data type. More...
 
StatusCode initialize ()
 Default AthAlgTool methods. More...
 

Private Attributes

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

Detailed Description

Retrieves the McEventCollection or the TrackRecordCollection in simulated cosmics.

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  }

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  }

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:
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
JiveXML::TruthTrackRetriever::m_McEvtCollName
std::string m_McEvtCollName
Storegate key for the McEventCollection (different between RDO/ESD and AOD)
Definition: TruthTrackRetriever.h:62
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
JiveXML::DataVect
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition: DataType.h:58
python.SystemOfUnits.MeV
int MeV
Definition: SystemOfUnits.py:154
test_pyathena.pt
pt
Definition: test_pyathena.py:11
M_PI
#define M_PI
Definition: ActiveFraction.h:11
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
JiveXML::TruthTrackRetriever::m_MinPtCut
double m_MinPtCut
Minimum pT for a particle to get accepted.
Definition: TruthTrackRetriever.h:64
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
histSizes.code
code
Definition: histSizes.py:129
python.Dumpers.barcodes
def barcodes(beg, end, sz)
Definition: Dumpers.py:2800
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
JiveXML::TruthTrackRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type.
Definition: TruthTrackRetriever.h:52
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
test_pyathena.parent
parent
Definition: test_pyathena.py:15
McEventCollection
This defines the McEventCollection, which is really just an ObjectVector of McEvent objects.
Definition: McEventCollection.h:33
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:227
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
JiveXML::TruthTrackRetriever::m_MinRhoCut
double m_MinRhoCut
Minium radius of the end-vertex for the particle to get accepted.
Definition: TruthTrackRetriever.h:66
JiveXML::TruthTrackRetriever::m_typeName
const std::string m_typeName
The data type that is generated by this retriever.
Definition: TruthTrackRetriever.h:59
JiveXML::TruthTrackRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
Definition: TruthTrackRetriever.cxx:48
dqBeamSpot.nEntries
int nEntries
Definition: dqBeamSpot.py:73
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.