ATLAS Offline Software
Loading...
Searching...
No Matches
DumpEventDataToJsonAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include <cmath>
8#include <fstream>
9#include <string>
10#include <algorithm> // std::reverse
11
12#include "Acts/EventData/TrackContainer.hpp"
13#include "Acts/EventData/BoundTrackParameters.hpp"
15#include "Gaudi/Property.h"
16#include "GaudiKernel/Algorithm.h"
17#include "GaudiKernel/MsgStream.h"
27
28
29
31 ISvcLocator *pSvcLocator)
32 : AthAlgorithm(name, pSvcLocator) {}
33
35 ATH_CHECK(m_eventInfoKey.initialize());
37 ATH_CHECK(m_jetKeys.initialize(!m_jetKeys.empty()));
39 ATH_CHECK(m_caloCellKey.initialize(!m_caloCellKey.empty()));
40 ATH_CHECK(m_muonKeys.initialize(!m_muonKeys.empty()));
41 ATH_CHECK(m_tauJetKeys.initialize(!m_tauJetKeys.empty()));
42 ATH_CHECK(m_electronKeys.initialize(!m_electronKeys.empty()));
43 ATH_CHECK(m_photonKeys.initialize(!m_photonKeys.empty()));
45
46 // ACTS
47 ATH_CHECK(m_trackContainerKeys.initialize());
57
58 ATH_CHECK(m_extrapolator.retrieve( DisableTool{m_extrapolator.empty()} ));
59 if (m_extrapolator.empty()) {
60 ATH_MSG_WARNING("No extrapolator found. Will not be able to extrapolate tracks.");
61 } else {
62 ATH_MSG_INFO("Extrapolator found. Will be able to extrapolate tracks.");
63 }
64
66
67 return StatusCode::SUCCESS;
68}
69
70nlohmann::json DumpEventDataToJsonAlg::getActsData(const typename ActsTrk::TrackContainer::ConstTrackProxy &track,
71 const Acts::GeometryContext& gctx) {
72 nlohmann::json data;
73
74 // ACTS units are GeV, whilst ATLAS is MeV. So we need to convert.
75 data["dparams"] = {track.loc0(), track.loc1(), track.phi(), track.theta(), track.qOverP() * 0.001};
76 ATH_MSG_VERBOSE(" Track has dparams"<<data["dparams"][0]<<", "<<data["dparams"][1]<<", "<<data["dparams"][2]<<", "<<data["dparams"][3]<<", "<<data["dparams"][4]);
77 ATH_MSG_VERBOSE(track.referenceSurface().toString(gctx));
78
79 // Add dparams positions to the output
80 const Acts::BoundTrackParameters trackparams(track.referenceSurface().getSharedPtr(),
81 track.parameters(), std::nullopt, Acts::ParticleHypothesis::pion());
82 auto trackPosition = trackparams.position(gctx);;
83 data["pos"].push_back(trackPosition.x());
84 data["pos"].push_back(trackPosition.y());
85 data["pos"].push_back(trackPosition.z());
86
87 unsigned int nTrackStates = track.nTrackStates();
88 ATH_MSG_VERBOSE("Track has " << nTrackStates << " states.");
89 // Unfortunately actsTracks are stored in reverse order, so we need to do some gymnastics
90 // (There is certainly a more elegant way to do this, but since this will all be changed soon I don't think it matters)
91 std::vector<typename ActsTrk::TrackContainer::ConstTrackStateProxy> trackStates;
92 trackStates.reserve(nTrackStates);
93 for (auto trackstate : track.trackStatesReversed()) {
94 trackStates.push_back(trackstate);
95 }
96
97 std::reverse(trackStates.begin(), trackStates.end());
98
99 unsigned int count = 0;
100 for (auto trackstate : trackStates) {
101 // Currently only converting smoothed states, but we will extend this later.
102 if (trackstate.hasSmoothed() && trackstate.hasReferenceSurface()) {
103 const Acts::BoundTrackParameters params(trackstate.referenceSurface().getSharedPtr(),
104 trackstate.smoothed(),
105 trackstate.smoothedCovariance(),
106 Acts::ParticleHypothesis::pion());
107 ATH_MSG_VERBOSE("Track parameters: "<<params.parameters());
108
109 auto pos = params.position(gctx);
110 data["pos"].push_back(pos.x());
111 data["pos"].push_back(pos.y());
112 data["pos"].push_back(pos.z());
113 ATH_MSG_VERBOSE("TrackState "<<count<<" has smoothed state and reference surface. Position is "<<pos.x()<<", "<<pos.y()<<", "<<pos.z());
114 ATH_MSG_VERBOSE(params.referenceSurface().toString(gctx));
115 ATH_MSG_VERBOSE("GeometryId "<<params.referenceSurface().geometryId().value());
116 } else {
117 ATH_MSG_WARNING("TrackState "<<count<<" does not have smoothed state ["<<trackstate.hasSmoothed()<<"] or reference surface ["<<trackstate.hasReferenceSurface()<<"]. Skipping.");
118 }
119 // TODO: Add measurements etc
120 count++;
121 }
122
123 return data;
124}
125
126StatusCode DumpEventDataToJsonAlg::execute(const EventContext& ctx) {
128 if (!eventInfo.isValid()) {
129 ATH_MSG_WARNING("Did not find xAOD::EventInfo at " << m_eventInfoKey);
130 return StatusCode::SUCCESS;
131 }
132
133 if (m_dumpTestEvent) {
135 m_dumpTestEvent = false;
136 }
137
138 ATH_MSG_VERBOSE("Run num :" << eventInfo->runNumber()
139 << " Event num: " << eventInfo->eventNumber());
140
141 nlohmann::json j;
142 j["event number"] = eventInfo->eventNumber();
143 j["run number"] = eventInfo->runNumber();
144
154
155 // ACTS
156 if (!m_geometryContextKey.empty()){
157 auto tcHandles = m_trackContainerKeys.makeHandles(ctx);
158 const ActsTrk::GeometryContext* gctx{};
160
161 for ( SG::ReadHandle<ActsTrk::TrackContainer>& tcHandle: tcHandles ) {
162 // Temporary debugging information
163 ATH_MSG_VERBOSE("TrackStateContainer has "<< tcHandle->size() << " elements");
164
165 ATH_MSG_VERBOSE("Trying to load " << tcHandle.key() << " with " << tcHandle->size() << " tracks");
166 const ActsTrk::TrackContainer* tc = tcHandle.get();
167 for (auto track : *tc) {
168 nlohmann::json tmp = getActsData(track, gctx->context());
169 j["TrackContainers"][tcHandle.key()].push_back(tmp);
170 }
171 }
172 }
173
174 // hits
183 // ATH_CHECK(getAndFillContainer(j, m_trtPrepRawDataKey, "Hits")); // Need
184 // specialisation. TODO.
185
186 // For the moment the label is just the event/run number again, but can be
187 // manually overwritten in the output file
188 std::string label = std::to_string(eventInfo->eventNumber()) + "/" +
189 std::to_string(eventInfo->runNumber());
190 m_eventData[label] = j;
191
192 return StatusCode::SUCCESS;
193}
194
196 ATH_MSG_VERBOSE("Prepending a test event.");
197 nlohmann::json j;
198
199 // FIXME - this
200 auto writeEtaPhiLabel = [](float eta, float phi) {
201 return std::to_string(eta) + "/" + std::to_string(phi);
202 };
203
204 j["event number"] = 999;
205 j["run number"] = 999;
206
207 // Here we want to draw some tracks at predefined positons
208 unsigned int maxSteps = 3;
209 Amg::Vector3D trackPos;
210 float phi, eta;
211 for (unsigned int nPhi = 0; nPhi < maxSteps; ++nPhi) {
212 phi = static_cast<float>(nPhi) / static_cast<float>(maxSteps) *
213 M_PI; // Want to range from 0 to M_PI
214 for (unsigned int nEta = 0; nEta < maxSteps; ++nEta) {
215 eta = static_cast<float>(nEta) / static_cast<float>(maxSteps) *
216 3.0; // Want to range from 0 to 3.0
217
218 // Create a calo cluster at each value
219 nlohmann::json cluster;
220 cluster["phi"] = phi;
221 cluster["eta"] = eta;
222 cluster["energy"] = 999.9;
223 cluster["label"] = writeEtaPhiLabel(eta, phi);
224
225 j["CaloClusters"]["TestClusters"].push_back(cluster);
226
227 // create a jet at each value
228 nlohmann::json jet;
229 jet["phi"] = phi;
230 jet["eta"] = eta;
231 jet["energy"] = 99999.9;
232 jet["label"] = writeEtaPhiLabel(eta, phi);
233 j["Jets"]["TestJets"].push_back(jet);
234
235 nlohmann::json track;
236 track["chi2"] = 0.0;
237 track["dof"] = 0.0;
238
239 double theta = 2 * std::atan(std::exp(-eta));
240 // d0, z0, phi, theta, qOverP
241 track["dparams"] = {0.0, 0.0, phi, theta, 0.0};
242 // Add three positions (less than this might not count as a)
243 for (unsigned int i = 0; i < 4; ++i) {
244 Amg::setRThetaPhi(trackPos, i * 1000., theta, phi);
245 track["pos"].push_back({trackPos.x(), trackPos.y(), trackPos.z()});
246 }
247 track["label"] = writeEtaPhiLabel(eta, phi);
248 j["Tracks"]["TestTracks"].push_back(track);
249 }
250 }
251 m_eventData["Test"] = j;
252}
253
254template <class TYPE>
256 nlohmann::json &event, const SG::ReadHandleKeyArray<TYPE> &keys,
257 const std::string &jsonType) {
258 for (SG::ReadHandle<TYPE> handle : keys.makeHandles()) {
259 ATH_MSG_VERBOSE("Trying to load " << handle.key());
260 ATH_CHECK(handle.isValid());
261 ATH_MSG_VERBOSE("Got back " << handle->size());
262
263 for (auto object : *handle) {
264 nlohmann::json tmp = getData(*object);
265 event[jsonType][handle.key()].push_back(tmp);
266 }
267 }
268 return StatusCode::SUCCESS;
269}
270
271// Specialisation for Jets
272template <>
274 nlohmann::json data;
275 data["phi"] = jet.phi();
276 data["eta"] = jet.eta();
277 data["energy"] = jet.e();
278 return data;
279}
280
281// Specialisation for CaloClusters
282template <>
284 nlohmann::json data;
285 data["phi"] = clust.phi();
286 data["eta"] = clust.eta();
287 data["energy"] = clust.e();
288 // data["etaSize"] = clust.getClusterEtaSize(); // empty
289 // data["phiSize"] = clust.getClusterPhiSize(); // empty
290 return data;
291}
292
293// Specialisation for CaloCells
294template <>
295nlohmann::json DumpEventDataToJsonAlg::getData(const CaloCell &cell) {
296 nlohmann::json data;
297 data["phi"] = cell.phi();
298 data["eta"] = cell.eta();
299 data["energy"] = cell.e();
300 // data["etaSize"] = clust.getClusterEtaSize(); // empty
301 // data["phiSize"] = clust.getClusterPhiSize(); // empty
302 return data;
303}
304
305// Specialisation for TracksParticles
306template <>
308 nlohmann::json data;
309 data["chi2"] = tp.chiSquared();
310 data["dof"] = tp.numberDoF();
311 data["dparams"] = {tp.d0(), tp.z0(), tp.phi0(), tp.theta(), tp.qOverP()};
312
313 if (m_physlite) {
314 ATH_MSG_VERBOSE("Physlite mode enabled. Not adding track parameters.");
315 return data;
316 }
317
318 if (m_extrapolator.empty()) {
319 data["pos"] = {tp.perigeeParameters().position().x(),
320 tp.perigeeParameters().position().y(),
321 tp.perigeeParameters().position().z()};
322 for (unsigned int i = 0; i < tp.numberOfParameters(); ++i) {
323 data["pos"].push_back(tp.parameterX(i));
324 data["pos"].push_back(tp.parameterY(i));
325 data["pos"].push_back(tp.parameterZ(i));
326 }
327 } else {
328 std::vector<Amg::Vector3D> positions;
329 const Trk::Perigee &peri = tp.perigeeParameters();
330 positions.push_back(Amg::Vector3D(peri.position().x(), peri.position().y(),
331 peri.position().z()));
332
333 Trk::CurvilinearParameters startParameters(peri.position(), peri.momentum(),
334 peri.charge());
339 Trk::ExtrapolationCode eCode = m_extrapolator->extrapolate(ecc);
340 if (eCode.isSuccess()) {
341 // loop over the collected information
342 for (auto &es : ecc.extrapolationSteps) {
343
344 // continue if we have parameters
345 const Trk::TrackParameters *parameters = es.parameters;
346 if (parameters) {
347 Amg::Vector3D pos = parameters->position();
348 positions.push_back(pos);
349 delete parameters;
350 }
351 }
352 positions.push_back(ecc.endParameters->position());
353
354 // Now add the positions to the output
355 for (auto pos : positions) {
356 data["pos"].push_back(pos.x());
357 data["pos"].push_back(pos.y());
358 data["pos"].push_back(pos.z());
359 }
360
361 } else {
363 "Failure in extrapolation for Track with start parameters "
364 << startParameters);
365 }
366 }
367
368 return data;
369}
370
371// Specialisation for Tracks
372template <>
373nlohmann::json DumpEventDataToJsonAlg::getData(const Trk::Track &track) {
374 nlohmann::json data;
375 const Trk::FitQuality *quality = track.fitQuality();
376
377 data["chi2"] = (quality ? quality->chiSquared() : 0.0);
378 data["dof"] = (quality ? quality->doubleNumberDoF() : 0.0);
379
380 const Trk::Perigee *peri = track.perigeeParameters();
381 if (peri) {
382 data["dparams"] = {peri->parameters()[Trk::d0], peri->parameters()[Trk::z0],
383 peri->parameters()[Trk::phi0],
384 peri->parameters()[Trk::theta],
385 peri->parameters()[Trk::qOverP]};
386
387 } else {
388 data["pos"] = {};
389 }
390
392 track.trackParameters();
393 if (parameters) {
394 for (const Trk::TrackParameters *param : *parameters) {
395 data["pos"].push_back(param->position().x());
396 data["pos"].push_back(param->position().y());
397 data["pos"].push_back(param->position().z());
398 }
399 } else {
400 const DataVector<const Trk::MeasurementBase> *measurements =
401 track.measurementsOnTrack();
402 if (measurements) {
403 for (const Trk::MeasurementBase *meas : *measurements) {
404 data["pos"].push_back(meas->globalPosition().x());
405 data["pos"].push_back(meas->globalPosition().y());
406 data["pos"].push_back(meas->globalPosition().z());
407 }
408 }
409 }
410
411 return data;
412}
413
414// Specialisation for Muons
415template <>
416nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::Muon &muon) {
417 nlohmann::json data;
418 data["Phi"] = muon.phi();
419 data["Eta"] = muon.eta();
420
421 data["Quality"] = muon.toString(muon.quality());
422 data["Type"] = muon.toString(muon.muonType());
423
425 if (const xAOD::CaloCluster* cluster = muon.cluster(); cluster != nullptr) {
426 clusterLink = {static_cast<const xAOD::CaloClusterContainer&>(*cluster->container()),
427 cluster->index()};
428 }
429 addLink(clusterLink, data["LinkedClusters"]);
430
431 using Track_t = xAOD::Muon::TrackParticleType;
433 auto makeMuonLink = [&muon](const Track_t tType) -> Link_t {
434 const xAOD::TrackParticle* trk = muon.trackParticle(tType);
435 if (!trk) {
436 return Link_t{};
437 }
438 return Link_t{static_cast<const xAOD::TrackParticleContainer&>(*trk->container()),
439 trk->index()};
440 };
441
442
443 addLink(makeMuonLink(Track_t::InnerDetectorTrackParticle), data["LinkedTracks"]);
444 addLink(makeMuonLink(Track_t::MuonSpectrometerTrackParticle), data["LinkedTracks"]);
445 addLink(makeMuonLink(Track_t::ExtrapolatedMuonSpectrometerTrackParticle),
446 data["LinkedTracks"]);
447
448 return data;
449}
450
451// Specialisation for Tau Jets
452template <>
453nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::TauJet &tauJet) {
454 nlohmann::json data;
455 data["phi"] = tauJet.phi();
456 data["eta"] = tauJet.eta();
457 data["energy"] = tauJet.e();
458 return data;
459}
460
461// Specialisation for Electrons
462template <>
463nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::Electron &electron) {
464 nlohmann::json data;
465 data["phi"] = electron.phi();
466 data["eta"] = electron.eta();
467 data["energy"] = electron.e();
468 addLink(electron.caloClusterLink(), data["LinkedClusters"]);
469 addLink(electron.trackParticleLink(), data["LinkedTracks"]);
470
471 return data;
472}
473
474// Specialisation for Photons
475template <>
476nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::Photon &photon) {
477 nlohmann::json data;
478 data["phi"] = photon.phi();
479 data["eta"] = photon.eta();
480 data["energy"] = photon.e();
481 addLink(photon.caloClusterLink(), data["LinkedClusters"]);
482
483 return data;
484}
485
486template <class TYPE>
487void DumpEventDataToJsonAlg::addLink(const TYPE &link, nlohmann::json &data) {
488 if (link.isValid()) {
489 data.push_back(link.dataID() + ":" + std::to_string(link.index()));
490 }
491}
492
494 std::ofstream outputFile(m_outputJSON_Name);
495 if (!outputFile.is_open()) {
496 ATH_MSG_WARNING("Unable to open " << m_outputJSON_Name << " for writing.");
497 return StatusCode::FAILURE;
498 }
499 outputFile << m_eventData;
500 return StatusCode::SUCCESS;
501}
502
503template <class TYPE>
505 nlohmann::json &event, const SG::ReadHandleKey<TYPE> &key,
506 const std::string &jsonType) {
507 if (key.empty()) {
508 return StatusCode::SUCCESS;
509 }
510 SG::ReadHandle<TYPE> handle(key);
511
512 ATH_MSG_VERBOSE("Trying to load " << handle.key());
513 ATH_CHECK(handle.isValid());
514 ATH_MSG_VERBOSE("Which has " << handle->numberOfCollections()
515 << " collections: ");
516
517 nlohmann::json tmp = getData(*handle);
518 if (!tmp.is_null()) {
519 ATH_MSG_VERBOSE("Writing " << jsonType << " : " << handle.key() << " with"
520 << tmp.size() << " elements:");
521 event[jsonType][handle.key()] = tmp;
522 }
523 return StatusCode::SUCCESS;
524}
525
526// Generic PRD
527template <class TYPE>
528nlohmann::json DumpEventDataToJsonAlg::getData(const TYPE &container) {
529
530 nlohmann::json colldata = {};
531 for (const auto &coll : container) {
532 for (const auto &prd : *coll) {
533 nlohmann::json data;
534 data["pos"] = {prd->globalPosition().x(), prd->globalPosition().y(),
535 prd->globalPosition().z()};
536 Identifier id = prd->identify();
537 data["id"] = id.get_compact();
538 colldata.push_back(data);
539 }
540 }
541
542 return colldata;
543}
#define M_PI
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
Scalar theta() const
theta method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
static Double_t tc
ElementLink< xAOD::TruthParticleContainer > Link_t
#define TYPE(CODE, TYP, IOTYP)
Acts::GeometryContext context() const
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Data object for each calorimeter readout cell.
Definition CaloCell.h:57
Derived DataVector<T>.
Definition DataVector.h:795
SG::ReadHandleKeyArray< xAOD::TauJetContainer > m_tauJetKeys
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_mdtPrepRawDataKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Gaudi::Property< bool > m_physlite
SG::ReadHandleKeyArray< xAOD::CaloClusterContainer > m_caloClustersKeys
SG::ReadHandleKeyArray< xAOD::TrackParticleContainer > m_trackParticleKeys
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_mmPrepRawDataKey
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_tgcPrepRawDataKey
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
ToolHandle< Trk::IExtrapolationEngine > m_extrapolator
Gaudi::Property< bool > m_dumpTestEvent
SG::ReadHandleKey< InDet::PixelClusterContainer > m_pixelPrepRawDataKey
SG::ReadHandleKeyArray< xAOD::PhotonContainer > m_photonKeys
Gaudi::Property< std::string > m_outputJSON_Name
StatusCode getAndFillContainer(nlohmann::json &event, const SG::ReadHandleKey< TYPE > &key, const std::string &jsonType)
SG::ReadHandleKeyArray< xAOD::MuonContainer > m_muonKeys
SG::ReadHandleKeyArray< ActsTrk::TrackContainer > m_trackContainerKeys
SG::ReadHandleKeyArray< TrackCollection > m_trackCollectionKeys
SG::ReadHandleKeyArray< xAOD::ElectronContainer > m_electronKeys
void prependTestEvent()
Dumps a dummy event with some objects at specific eta/phi coordinates for calibration.
SG::ReadHandleKey< InDet::TRT_DriftCircleContainer > m_trtPrepRawDataKey
void addLink(const TYPE &link, nlohmann::json &data)
SG::ReadHandleKey< Muon::CscPrepDataContainer > m_cscPrepRawDataKey
ActsTrk::GeoContextReadKey_t m_geometryContextKey
StatusCode getAndFillArrayOfContainers(nlohmann::json &event, const SG::ReadHandleKeyArray< TYPE > &keys, const std::string &jsonType)
SG::ReadHandleKeyArray< CaloCellContainer > m_caloCellKey
SG::ReadHandleKeyArray< xAOD::JetContainer > m_jetKeys
nlohmann::json getActsData(const typename ActsTrk::TrackContainer::ConstTrackProxy &track, const Acts::GeometryContext &gctx)
nlohmann::json getData(const TYPE &object)
virtual StatusCode initialize() override
inherited from Algorithm
virtual StatusCode finalize() override
DumpEventDataToJsonAlg(const std::string &name, ISvcLocator *pService)
Algorithm constructor.
SG::ReadHandleKey< Muon::sTgcPrepDataContainer > m_stgcPrepRawDataKey
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_rpcPrepRawDataKey
SG::ReadHandleKey< InDet::SCT_ClusterContainer > m_sctPrepRawDataKey
Property holding a SG store/key/clid from which a ReadHandle is made.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
templated class as an input-output object of the extrapolation, only public members,...
void addConfigurationMode(ExtrapolationMode::eMode em)
add a configuration mode
T * endParameters
by pointer - are newly created and can be optionally 0
std::vector< ExtrapolationStep< T > > extrapolationSteps
parameters on sensitive detector elements
bool isSuccess() const
return success
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition FitQuality.h:97
double chiSquared() const
returns the of the overall track fit
Definition FitQuality.h:56
double doubleNumberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as double
Definition FitQuality.h:68
This class is the pure abstract base class for all fittable tracking measurements.
const Amg::Vector3D & momentum() const
Access method for the momentum.
const Amg::Vector3D & position() const
Access method for the position.
double charge() const
Returns the charge.
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double e() const
The total energy of the particle.
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual double e() const
The total energy of the particle.
Definition TauJet_v3.cxx:87
virtual double eta() const
The pseudorapidity ( ) of the particle.
float z0() const
Returns the parameter.
float theta() const
Returns the parameter, which has range 0 to .
float numberDoF() const
Returns the number of degrees of freedom of the overall track or vertex fit as float.
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
float parameterX(unsigned int index) const
Returns the parameter x position, for 'index'.
float parameterZ(unsigned int index) const
Returns the parameter z position, for 'index'.
float d0() const
Returns the parameter.
size_t numberOfParameters() const
Returns the number of additional parameters stored in the TrackParticle.
float qOverP() const
Returns the parameter.
float parameterY(unsigned int index) const
Returns the parameter y position, for 'index'.
float chiSquared() const
Returns the of the overall track fit.
float phi0() const
Returns the parameter, which has range to .
int count(std::string s, const std::string &regx)
count how many occurances of a regx are in a string
Definition hcg.cxx:148
std::string label(const std::string &format, int i)
Definition label.h:19
void setRThetaPhi(Amg::Vector3D &v, double r, double theta, double phi)
sets radius, the theta and phi angle of a vector.
Eigen::Matrix< double, 3, 1 > Vector3D
HandleKeyArray< ReadHandle< T >, ReadHandleKey< T >, Gaudi::DataHandle::Reader > ReadHandleKeyArray
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
CurvilinearParametersT< TrackParametersDim, Charged, PlaneSurface > CurvilinearParameters
@ phi0
Definition ParamDefs.h:65
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64
ParametersBase< TrackParametersDim, Charged > TrackParameters
void reverse(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of reverse for DataVector/List.
Jet_v1 Jet
Definition of the current "jet version".
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TauJet_v3 TauJet
Definition of the current "tau version".
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Muon_v1 Muon
Reference the current persistent version:
Photon_v1 Photon
Definition of the current "egamma version".
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.
Electron_v1 Electron
Definition of the current "egamma version".