Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
xAODTrackParticleRetriever.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "CLHEP/Units/SystemOfUnits.h"
7 
9 
10 namespace JiveXML {
11 
18  xAODTrackParticleRetriever::xAODTrackParticleRetriever(const std::string& type,const std::string& name,const IInterface* parent):
20 
25  StatusCode xAODTrackParticleRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
26 
27  ATH_MSG_DEBUG("In retrieve()");
28 
29  std::vector<std::string> keys = getKeys();
30 
31  if(keys.empty()){
32  ATH_MSG_WARNING("No StoreGate keys found");
33  return StatusCode::SUCCESS;
34  }
35 
36  // Loop through the keys and retrieve the corresponding data
37  for (const std::string& key : keys) {
39  if (cont.isValid()) {
40  DataMap data = getData(&(*cont));
41  if (FormatTool->AddToEvent(dataTypeName(), key + "_xAOD", &data).isFailure()) {
42  ATH_MSG_WARNING("Failed to retrieve Collection " << key);
43  } else {
44  ATH_MSG_DEBUG(" (" << key << ") retrieved");
45  }
46  } else {
47  ATH_MSG_WARNING("Collection " << key << " not found in SG");
48  }
49  }
50  return StatusCode::SUCCESS;
51  }
52 
53 
59 
60  ATH_MSG_DEBUG("in getData()");
61 
63 
64  DataVect d0; d0.reserve(TrackParticleCont->size());
65  DataVect z0; z0.reserve(TrackParticleCont->size());
66  DataVect pt; pt.reserve(TrackParticleCont->size());
67  DataVect phi0; phi0.reserve(TrackParticleCont->size());
68  DataVect cotTheta; cotTheta.reserve(TrackParticleCont->size());
69  DataVect label; label.reserve(TrackParticleCont->size());
70  DataVect nBLayerHits; nBLayerHits.reserve(TrackParticleCont->size());
71  DataVect nPixHits; nPixHits.reserve(TrackParticleCont->size());
72  DataVect nSCTHits; nSCTHits.reserve(TrackParticleCont->size());
73  DataVect nTRTHits; nTRTHits.reserve(TrackParticleCont->size());
74 
75  xAOD::TrackParticleContainer::const_iterator TrackParticleItr = TrackParticleCont->begin();
76  xAOD::TrackParticleContainer::const_iterator TrackParticleItrE = TrackParticleCont->end();
77 
78  int counter = 0;
79  float charge = 0.;
80  float myQOverP = 0.;
81  double countHits = 0.;
82  std::string labelStr = "unknownHits";
83 
84  for (; TrackParticleItr != TrackParticleItrE; ++TrackParticleItr) {
85 
86  ATH_MSG_VERBOSE(" TrackParticle #" << counter++ << " : d0 = " << (*TrackParticleItr)->d0() << ", z0 = "
87  << (*TrackParticleItr)->z0() << ", pt[GeV] = " << (*TrackParticleItr)->pt()*(1./CLHEP::GeV)
88  << ", phi = " << (*TrackParticleItr)->phi()
89  << ", qOverP = " << (*TrackParticleItr)->qOverP()
90  << ", abs(qOverP) = " << fabs((*TrackParticleItr)->qOverP()));
91 
92  // Event/xAOD/xAODTrackingCnv/trunk/src/TrackParticleCnvAlg.cxx#L190 Info from Nick Styles
93 
95  uint8_t numberOfBLayerHits_tmp=0;
96  if ( (*TrackParticleItr)->summaryValue(numberOfBLayerHits_tmp,xAOD::numberOfBLayerHits) ){
97  numberOfBLayerHits += numberOfBLayerHits_tmp;
98  }
100  uint8_t numberOfPixelHits_tmp = 0;
101  if ( (*TrackParticleItr)->summaryValue(numberOfPixelHits_tmp,xAOD::numberOfPixelHits)){
102  numberOfPixelHits += numberOfPixelHits_tmp;
103  }
105  uint8_t numberOfTRTHits_tmp = 0;
106  if ( (*TrackParticleItr)->summaryValue(numberOfTRTHits_tmp,xAOD::numberOfTRTHits)){
107  numberOfTRTHits += numberOfTRTHits_tmp;
108  }
110  uint8_t numberOfSCTHits_tmp = 0;
111  if ( (*TrackParticleItr)->summaryValue(numberOfSCTHits_tmp,xAOD::numberOfSCTHits)){
112  numberOfSCTHits += numberOfSCTHits_tmp;
113  }
114  labelStr = "_PixelHits"+DataType( (double)numberOfPixelHits ).toString()
115  + "_SCTHits"+DataType( (double)numberOfSCTHits ).toString()
116  + "_BLayerHits"+DataType( (double)numberOfBLayerHits ).toString()
117  + "_TRTHits"+DataType( (double)numberOfTRTHits ).toString() ;
118 
119  countHits = (double)numberOfBLayerHits + (double)numberOfPixelHits
121 
122  ATH_MSG_VERBOSE(" TrackParticle #" << counter
123  << " BLayer hits: " << (double)numberOfBLayerHits
124  << ", Pixel hits: " << (double)numberOfPixelHits
125  << ", SCT hits: " << (double)numberOfSCTHits
126  << ", TRT hits: " << (double)numberOfTRTHits
127  << ", Total hits: " << countHits
128  << "; Label: " << labelStr);
129 
130  nBLayerHits.emplace_back( DataType( (double)numberOfBLayerHits ));
131  nPixHits.emplace_back( DataType( (double)numberOfPixelHits ));
132  nSCTHits.emplace_back( DataType( (double)numberOfSCTHits ));
133  nTRTHits.emplace_back( DataType( (double)numberOfTRTHits ));
134 
135  label.emplace_back( DataType( labelStr ).toString() );
136  d0.emplace_back(DataType((*TrackParticleItr)->d0()/CLHEP::cm));
137  z0.emplace_back(DataType((*TrackParticleItr)->z0()/CLHEP::cm));
138  phi0.emplace_back(DataType((*TrackParticleItr)->phi()));
139 
140  // pt is always positive, get charge from qOverP
141  myQOverP = (*TrackParticleItr)->qOverP() ;
142  if (fabs(myQOverP) != myQOverP){
143  charge = -1.;
144  }else{
145  charge = +1.;
146  }
147  pt.emplace_back(DataType(( charge*(*TrackParticleItr)->pt() )/CLHEP::GeV));
148 
149  if ( (*TrackParticleItr)->theta() == 0.) {
150  cotTheta.emplace_back(DataType(9999.));
151  } else {
152  cotTheta.emplace_back(DataType(1./tan((*TrackParticleItr)->theta())));
153  }
154  } // end TrackParticleIterator
155 
156  // four-vectors
157  DataMap["d0"] = d0;
158  DataMap["z0"] = z0;
159  DataMap["pt"] = pt;
160  DataMap["phi0"] = phi0;
161  DataMap["cotTheta"] = cotTheta;
162  DataMap["label"] = label;
163  DataMap["nBLayerHits"] = nBLayerHits;
164  DataMap["nPixHits"] = nPixHits;
165  DataMap["nSCTHits"] = nSCTHits;
166  DataMap["nTRTHits"] = nTRTHits;
167 
168  ATH_MSG_DEBUG(dataTypeName() << " retrieved with " << d0.size() << " entries");
169 
170  //All collections retrieved okay
171  return DataMap;
172 
173  }
174 
175 
176  const std::vector<std::string> xAODTrackParticleRetriever::getKeys() {
177  ATH_MSG_DEBUG("in getKeys()");
178 
179  std::vector<std::string> keys = {};
180 
181  // Remove m_priorityKey from m_otherKeys if it exists, we don't want to write it twice
182  auto it = std::find(m_otherKeys.begin(), m_otherKeys.end(), m_priorityKey);
183  if(it != m_otherKeys.end()){
184  m_otherKeys.erase(it);
185  }
186 
187  // Add m_priorityKey as the first element if it is not ""
188  if(m_priorityKey!=""){
189  keys.push_back(m_priorityKey);
190  }
191 
192  if(!m_otherKeys.empty()){
193  keys.insert(keys.end(), m_otherKeys.begin(), m_otherKeys.end());
194  }
195 
196  // If all collections are requested, obtain all available keys from StoreGate
197  std::vector<std::string> allKeys;
199  evtStore()->keys<xAOD::TrackParticleContainer>(allKeys);
200  // Add keys that are not the priority key and do not add containers with "HLT" in their name if requested
201  for(const std::string& key : allKeys){
202  // Don't include key if it's already in keys
203  auto it2 = std::find(keys.begin(), keys.end(), key);
204  if(it2 != keys.end())continue;
205  if(key.find("HLT") == std::string::npos || m_doWriteHLT){
206  keys.emplace_back(key);
207  }
208  }
209  }
210  return keys;
211  }
212 
213 } // JiveXML namespace
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
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
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
InDetAccessor::phi0
@ phi0
Definition: InDetAccessor.h:33
JiveXML::DataVect
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition: DataType.h:58
JiveXML::xAODTrackParticleRetriever::m_priorityKey
Gaudi::Property< std::string > m_priorityKey
Definition: xAODTrackParticleRetriever.h:58
DataType
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
Definition: RoIBResultByteStreamTool.cxx:25
skel.it
it
Definition: skel.GENtoEVGEN.py:407
test_pyathena.pt
pt
Definition: test_pyathena.py:11
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:260
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:276
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
JiveXML::xAODTrackParticleRetriever::getData
const DataMap getData(const xAOD::TrackParticleContainer *)
Puts the variables into a DataMap.
Definition: xAODTrackParticleRetriever.cxx:58
JiveXML::xAODTrackParticleRetriever::getKeys
const std::vector< std::string > getKeys()
Gets the StoreGate keys for the desired containers.
Definition: xAODTrackParticleRetriever.cxx:176
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
xAOD::numberOfBLayerHits
@ numberOfBLayerHits
these are the hits in the first pixel layer, i.e.
Definition: TrackingPrimitives.h:232
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
JiveXML::xAODTrackParticleRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
For each TrackParticle collections retrieve basic parameters.
Definition: xAODTrackParticleRetriever.cxx:25
JiveXML::xAODTrackParticleRetriever::m_otherKeys
Gaudi::Property< std::vector< std::string > > m_otherKeys
Definition: xAODTrackParticleRetriever.h:57
IDTPM::nSCTHits
float nSCTHits(const U &p)
Definition: TrackParametersHelper.h:393
IDTPM::nTRTHits
float nTRTHits(const U &p)
Definition: TrackParametersHelper.h:446
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
add-xsec-uncert-quadrature-N.label
label
Definition: add-xsec-uncert-quadrature-N.py:104
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
JiveXML::xAODTrackParticleRetriever::m_doWriteHLT
Gaudi::Property< bool > m_doWriteHLT
Definition: xAODTrackParticleRetriever.h:55
test_pyathena.parent
parent
Definition: test_pyathena.py:15
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
JiveXML
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
Definition: BadLArRetriever.cxx:22
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
charge
double charge(const T &p)
Definition: AtlasPID.h:931
JiveXML::xAODTrackParticleRetriever::m_doWriteAllCollections
Gaudi::Property< bool > m_doWriteAllCollections
Definition: xAODTrackParticleRetriever.h:56
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAODTrackParticleRetriever.h
JiveXML::xAODTrackParticleRetriever::xAODTrackParticleRetriever
xAODTrackParticleRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: xAODTrackParticleRetriever.cxx:18
JiveXML::xAODTrackParticleRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type that is generated by this retriever.
Definition: xAODTrackParticleRetriever.h:48
TRT::Track::cotTheta
@ cotTheta
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:65
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:269
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
AthAlgTool
Definition: AthAlgTool.h:26
test_pyathena.counter
counter
Definition: test_pyathena.py:15
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrackParticleContainer.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37