ATLAS Offline Software
Loading...
Searching...
No Matches
DumpEventDataToJsonAlg.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
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/TrackParameters.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
65 if (!m_geometryContextKey.empty())
66 ATH_CHECK(m_geometryContextKey.initialize());
67
68 return StatusCode::SUCCESS;
69}
70
71nlohmann::json DumpEventDataToJsonAlg::getActsData(const typename ActsTrk::TrackContainer::ConstTrackProxy &track,
72 const Acts::GeometryContext& gctx) {
73 nlohmann::json data;
74
75 // ACTS units are GeV, whilst ATLAS is MeV. So we need to convert.
76 data["dparams"] = {track.loc0(), track.loc1(), track.phi(), track.theta(), track.qOverP() * 0.001};
77 ATH_MSG_VERBOSE(" Track has dparams"<<data["dparams"][0]<<", "<<data["dparams"][1]<<", "<<data["dparams"][2]<<", "<<data["dparams"][3]<<", "<<data["dparams"][4]);
78 ATH_MSG_VERBOSE(track.referenceSurface().toString(gctx));
79
80 // Add dparams positions to the output
81 const Acts::BoundTrackParameters trackparams(track.referenceSurface().getSharedPtr(),
82 track.parameters(), std::nullopt, Acts::ParticleHypothesis::pion());
83 auto trackPosition = trackparams.position(gctx);;
84 data["pos"].push_back(trackPosition.x());
85 data["pos"].push_back(trackPosition.y());
86 data["pos"].push_back(trackPosition.z());
87
88 unsigned int nTrackStates = track.nTrackStates();
89 ATH_MSG_VERBOSE("Track has " << nTrackStates << " states.");
90 // Unfortunately actsTracks are stored in reverse order, so we need to do some gymnastics
91 // (There is certainly a more elegant way to do this, but since this will all be changed soon I don't think it matters)
92 std::vector<typename ActsTrk::TrackContainer::ConstTrackStateProxy> trackStates;
93 trackStates.reserve(nTrackStates);
94 for (auto trackstate : track.trackStatesReversed()) {
95 trackStates.push_back(trackstate);
96 }
97
98 std::reverse(trackStates.begin(), trackStates.end());
99
100 unsigned int count = 0;
101 for (auto trackstate : trackStates) {
102 // Currently only converting smoothed states, but we will extend this later.
103 if (trackstate.hasSmoothed() && trackstate.hasReferenceSurface()) {
104 const Acts::BoundTrackParameters params(trackstate.referenceSurface().getSharedPtr(),
105 trackstate.smoothed(),
106 trackstate.smoothedCovariance(),
107 Acts::ParticleHypothesis::pion());
108 ATH_MSG_VERBOSE("Track parameters: "<<params.parameters());
109
110 auto pos = params.position(gctx);
111 data["pos"].push_back(pos.x());
112 data["pos"].push_back(pos.y());
113 data["pos"].push_back(pos.z());
114 ATH_MSG_VERBOSE("TrackState "<<count<<" has smoothed state and reference surface. Position is "<<pos.x()<<", "<<pos.y()<<", "<<pos.z());
115 ATH_MSG_VERBOSE(params.referenceSurface().toString(gctx));
116 ATH_MSG_VERBOSE("GeometryId "<<params.referenceSurface().geometryId().value());
117 } else {
118 ATH_MSG_WARNING("TrackState "<<count<<" does not have smoothed state ["<<trackstate.hasSmoothed()<<"] or reference surface ["<<trackstate.hasReferenceSurface()<<"]. Skipping.");
119 }
120 // TODO: Add measurements etc
121 count++;
122 }
123
124 return data;
125}
126
129 if (!eventInfo.isValid()) {
130 ATH_MSG_WARNING("Did not find xAOD::EventInfo at " << m_eventInfoKey);
131 return StatusCode::SUCCESS;
132 }
133
134 if (m_dumpTestEvent) {
136 m_dumpTestEvent = false;
137 }
138
139 ATH_MSG_VERBOSE("Run num :" << eventInfo->runNumber()
140 << " Event num: " << eventInfo->eventNumber());
141
142 nlohmann::json j;
143 j["event number"] = eventInfo->eventNumber();
144 j["run number"] = eventInfo->runNumber();
145
155
156 // ACTS
157 if (!m_geometryContextKey.empty()){
158 auto tcHandles = m_trackContainerKeys.makeHandles();
159 SG::ReadHandle gcx(m_geometryContextKey, Gaudi::Hive::currentContext());
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, gcx->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 std::vector<std::string> quality = {"Tight", "Medium", "Loose", "VeryLoose"};
422 data["Quality"] = quality[static_cast<unsigned int>(muon.quality())];
423 std::vector<std::string> type = {"Combined", "Standalone", "SegmentTagged",
424 "CaloTagged", "SiAssociatedForward"};
425 data["Type"] = type[static_cast<unsigned int>(muon.muonType())];
426
427 addLink(muon.clusterLink(), data["LinkedClusters"]);
428 addLink(muon.inDetTrackParticleLink(), data["LinkedTracks"]);
429 addLink(muon.muonSpectrometerTrackParticleLink(), data["LinkedTracks"]);
430 addLink(muon.extrapolatedMuonSpectrometerTrackParticleLink(),
431 data["LinkedTracks"]);
432
433 return data;
434}
435
436// Specialisation for Tau Jets
437template <>
438nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::TauJet &tauJet) {
439 nlohmann::json data;
440 data["phi"] = tauJet.phi();
441 data["eta"] = tauJet.eta();
442 data["energy"] = tauJet.e();
443 return data;
444}
445
446// Specialisation for Electrons
447template <>
448nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::Electron &electron) {
449 nlohmann::json data;
450 data["phi"] = electron.phi();
451 data["eta"] = electron.eta();
452 data["energy"] = electron.e();
453 addLink(electron.caloClusterLink(), data["LinkedClusters"]);
454 addLink(electron.trackParticleLink(), data["LinkedTracks"]);
455
456 return data;
457}
458
459// Specialisation for Photons
460template <>
461nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::Photon &photon) {
462 nlohmann::json data;
463 data["phi"] = photon.phi();
464 data["eta"] = photon.eta();
465 data["energy"] = photon.e();
466 addLink(photon.caloClusterLink(), data["LinkedClusters"]);
467
468 return data;
469}
470
471template <class TYPE>
472void DumpEventDataToJsonAlg::addLink(const TYPE &link, nlohmann::json &data) {
473 if (link.isValid()) {
474 data.push_back(link.dataID() + ":" + std::to_string(link.index()));
475 }
476}
477
479 std::ofstream outputFile(m_outputJSON_Name);
480 if (!outputFile.is_open()) {
481 ATH_MSG_WARNING("Unable to open " << m_outputJSON_Name << " for writing.");
482 return StatusCode::FAILURE;
483 }
484 outputFile << m_eventData;
485 return StatusCode::SUCCESS;
486}
487
488template <class TYPE>
490 nlohmann::json &event, const SG::ReadHandleKey<TYPE> &key,
491 const std::string &jsonType) {
492 if (key.empty()) {
493 return StatusCode::SUCCESS;
494 }
495 SG::ReadHandle<TYPE> handle(key);
496
497 ATH_MSG_VERBOSE("Trying to load " << handle.key());
498 ATH_CHECK(handle.isValid());
499 ATH_MSG_VERBOSE("Which has " << handle->numberOfCollections()
500 << " collections: ");
501
502 nlohmann::json tmp = getData(*handle);
503 if (!tmp.is_null()) {
504 ATH_MSG_VERBOSE("Writing " << jsonType << " : " << handle.key() << " with"
505 << tmp.size() << " elements:");
506 event[jsonType][handle.key()] = tmp;
507 }
508 return StatusCode::SUCCESS;
509}
510
511// Generic PRD
512template <class TYPE>
514
515 nlohmann::json colldata = {};
516 for (const auto &coll : container) {
517 for (const auto &prd : *coll) {
518 nlohmann::json data;
519 data["pos"] = {prd->globalPosition().x(), prd->globalPosition().y(),
520 prd->globalPosition().z()};
521 Identifier id = prd->identify();
522 data["id"] = id.get_compact();
523 colldata.push_back(data);
524 }
525 }
526
527 return colldata;
528}
#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)
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
static Double_t tc
#define TYPE(CODE, TYP, IOTYP)
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
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< ActsTrk::GeometryContext > m_geometryContextKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Gaudi::Property< bool > m_physlite
SG::ReadHandleKeyArray< xAOD::CaloClusterContainer > m_caloClustersKeys
SG::ReadHandleKeyArray< xAOD::TrackParticleContainer > m_trackParticleKeys
virtual StatusCode execute() override
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_mmPrepRawDataKey
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_tgcPrepRawDataKey
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
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?
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
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.
int count(std::string s, const std::string &regx)
count how many occurances of a regx are in a string
Definition hcg.cxx:146
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
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".
Muon_v1 Muon
Reference the current persistent version:
Photon_v1 Photon
Definition of the current "egamma version".
Electron_v1 Electron
Definition of the current "egamma version".