ATLAS Offline Software
Loading...
Searching...
No Matches
ExtrapolationValidation.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// ExtrapolationValidation.cxx, (c) ATLAS Detector software
8
9// Tracking
10#include <cmath>
11
21// Validation mode - TTree includes
22#include "TTree.h"
23#include "GaudiKernel/ITHistSvc.h"
24
25//================ Constructor =================================================
26
27Trk::ExtrapolationValidation::ExtrapolationValidation(const std::string& name, ISvcLocator* pSvcLocator)
28 :
29 AthAlgorithm(name, pSvcLocator) {}
30
31//================ Destructor =================================================
32
34 // clear random number generators
35 delete m_gaussDist;
36 delete m_flatDist;
37}
38
39//================ Initialisation =================================================
40
42 // Code entered here will be executed once at program start.
43 ATH_MSG_INFO(" initialize()");
44
45 // Get Extrapolator from ToolService
46 ATH_CHECK(m_extrapolator.retrieve());
47
48 // create the new Tree
49 m_validationTree = new TTree(m_validationTreeName.value().c_str(),
50 m_validationTreeDescription.value().c_str());
51
52 // the branches for the parameters
53 m_validationTree->Branch("Parameters", &m_parameters, "params/I");
54 m_validationTree->Branch("ParametersLoc1", m_parameterLoc1, "paramLoc1[params]/F");
55 m_validationTree->Branch("ParametersLoc2", m_parameterLoc2, "paramLoc2[params]/F");
56 m_validationTree->Branch("ParametersPhi", m_parameterPhi, "paramPhi[params]/F");
57 m_validationTree->Branch("ParametersTheta", m_parameterTheta, "paramTheta[params]/F");
58 m_validationTree->Branch("ParametersEta", m_parameterEta, "paramEta[params]/F");
59 m_validationTree->Branch("ParametersQoverP", m_parameterQoverP, "paramQoverP[params]/F");
60 // for the covariance diagonals
61 m_validationTree->Branch("CovarianceLoc1", m_covarianceLoc1, "covLoc1[params]/F");
62 m_validationTree->Branch("CovarianceLoc2", m_covarianceLoc2, "covLoc2[params]/F");
63 m_validationTree->Branch("CovariancePhi", m_covariancePhi, "covPhi[params]/F");
64 m_validationTree->Branch("CovarianceTheta", m_covarianceTheta, "covTheta[params]/F");
65 m_validationTree->Branch("CovarianceQoverP", m_covarianceQoverP, "covQoverP[params]/F");
66 m_validationTree->Branch("CovarianceDeterminant", m_covarianceDeterminant, "covDet[params]/F");
67 // the start Momentum
68 m_validationTree->Branch("StartMomentum", &m_startP, "startP/F");
69 // for the start surface
70 m_validationTree->Branch("StartSurfaceX", &m_startX, "startX/F");
71 m_validationTree->Branch("StartSurfaceY", &m_startY, "startY/F");
72 m_validationTree->Branch("StartSurfaceR", &m_startR, "startR/F");
73 m_validationTree->Branch("StartSurfaceZ", &m_startZ, "startZ/F");
74 // the estimation of the parameters
75 m_validationTree->Branch("EstimationSurfaceX", &m_estimationX, "estimateX/F");
76 m_validationTree->Branch("EstimationSurfaceY", &m_estimationY, "estimateY/F");
77 m_validationTree->Branch("EstimationSurfaceR", &m_estimationR, "estimateR/F");
78 m_validationTree->Branch("EstimationSurfaceZ", &m_estimationZ, "estimateZ/F");
79 // for the surface type
80 m_validationTree->Branch("DestinationSurfaceType", &m_destinationSurfaceType, "surfaceType/I");
81 m_validationTree->Branch("DestinationSurfaceX", &m_destinationX, "surfaceX/F");
82 m_validationTree->Branch("DestinationSurfaceY", &m_destinationY, "surfaceY/F");
83 m_validationTree->Branch("DestinationSurfaceR", &m_destinationR, "surfaceR/F");
84 m_validationTree->Branch("DestinationSurfaceZ", &m_destinationZ, "surfaceZ/F");
85
86 // now register the Tree
87 SmartIF<ITHistSvc> tHistSvc {
88 service("THistSvc")
89 };
90 if (!tHistSvc) {
91 ATH_MSG_ERROR("initialize() Could not find Hist Service -> Switching ValidationMode Off !");
92 delete m_validationTree;
93 m_validationTree = nullptr;
94 }
95 if ((tHistSvc->regTree(m_validationTreeFolder, m_validationTree)).isFailure()) {
96 ATH_MSG_ERROR("initialize() Could not register the validation Tree -> Switching ValidationMode Off !");
97 delete m_validationTree;
98 m_validationTree = nullptr;
99 }
100
101 // intialize the random number generators
102 m_gaussDist = new Rndm::Numbers(randSvc(), Rndm::Gauss(0., 1.));
103 m_flatDist = new Rndm::Numbers(randSvc(), Rndm::Flat(0., 1.));
104
105 ATH_MSG_INFO("initialize() successful");
106 return StatusCode::SUCCESS;
107}
108
109//================ Finalisation =================================================
110
112 // Code entered here will be executed once at the end of the program run.
113 ATH_MSG_INFO("================== Output Statistics =========================");
114 ATH_MSG_INFO("= Navigation : ");
115 ATH_MSG_INFO("= - breaks fwd : " << static_cast<double>(m_breaksFront) / static_cast<double>(m_triesFront)
116 << " (" << m_breaksFront << "/" << m_triesFront << ")");
117 ATH_MSG_INFO("= - breaks bwd : " << static_cast<double>(m_breaksBack) / static_cast<double>(m_triesBack)
118 << " (" << m_breaksBack << "/" << m_triesBack << ")");
120 ATH_MSG_INFO("= Material collection : ");
121 ATH_MSG_INFO("= - layer collected fwd : " << m_collectedLayerFront);
122 ATH_MSG_INFO("= - layer collected bwd : " << m_collectedLayerBack);
123 }
124
125 ATH_MSG_INFO("==============================================================");
126
127 return StatusCode::SUCCESS;
128}
129
130//================ Execution ====================================================
131
132StatusCode Trk::ExtrapolationValidation::execute(const EventContext& ctx) {
133 // get the overall dimensions
134 if (!m_highestVolume) {
135 // get TrackingGeometry and highest volume
136 const Trk::TrackingGeometry* trackingGeometry = m_extrapolator->trackingGeometry();
137 m_highestVolume = trackingGeometry ? trackingGeometry->highestTrackingVolume() : nullptr;
138 const Trk::CylinderVolumeBounds* cylBounds = m_highestVolume ?
139 dynamic_cast<const Trk::CylinderVolumeBounds*>(&(m_highestVolume->
140 volumeBounds())) :
141 nullptr;
142 // bail out
143 if (!cylBounds) {
144 ATH_MSG_WARNING("No highest TrackingVolume / no VolumeBounds ... pretty useless! ");
145 return StatusCode::SUCCESS;
146 }
147 // get the numbers
148 m_maximumR = cylBounds->outerRadius();
149 m_maximumZ = cylBounds->halflengthZ();
150 }
151
152 // intialize the values
153 m_parameters = 0;
155 // -----------> start
156 m_startX = 0.;
157 m_startY = 0.;
158 m_startR = 0.;
159 m_startZ = 0.;
160 // -----------> estimation
161 m_estimationX = 0.;
162 m_estimationY = 0.;
163 m_estimationR = 0.;
164 m_estimationZ = 0.;
165 // -----------> destination
166 m_destinationX = 0.;
167 m_destinationY = 0.;
168 m_destinationR = 0.;
169 m_destinationZ = 0.;
170
171 // the local start parameters
174 // are adopted for planar and straight line surfaces
176 m_parameterPhi[m_parameters] *= (m_flatDist->shoot() > 0.5) ? -1. : 1.;
178 m_parameterTheta[m_parameters] = 2. * std::atan(std::exp(-m_parameterEta[m_parameters]));
179
184
185 // this is fine
186 double p = m_minP + m_flatDist->shoot() * (m_maxP - m_minP);
187 double charge = (m_flatDist->shoot() > 0.5) ? -1. : 1.;
189
191
192 // for the momentum logging
193 m_startP = p;
194
195 // start
196 m_startR = std::abs(m_sigmaR * m_gaussDist->shoot());
197 double surfacePhi = M_PI * m_flatDist->shoot();
198 surfacePhi *= (m_flatDist->shoot() > 0.5) ? -1. : 1.;
199 m_startX = m_startR * cos(surfacePhi);
200 m_startY = m_startR * sin(surfacePhi);
201 m_startZ = m_sigmaZ * m_gaussDist->shoot();
202
203 // rotate it around Z
204 double alphaZ = M_PI * m_flatDist->shoot();
205 alphaZ *= (m_flatDist->shoot() > 0.5) ? -1. : 1.;
206
207 // create the plane surface
209 m_startY,
210 m_startZ,
213 alphaZ),
214 10e3, 10e3);
215
216
217
218 AmgSymMatrix(5) covariance;
219 covariance.setZero();
221 covariance(0, 0) = m_covarianceLoc1[m_parameters];
223 covariance(1, 1) = m_covarianceLoc2[m_parameters];
225 covariance(2, 2) = m_covariancePhi[m_parameters];
227 covariance(3, 3) = m_covarianceTheta[m_parameters];
229 covariance(4, 4) = m_covarianceQoverP[m_parameters];
230 ATH_MSG_VERBOSE("Initial Setting: \n" << covariance);
231
232
233 m_covarianceDeterminant[m_parameters] = covariance.determinant();
234
235 // the initial perigee with random numbers
241 startSurface,
242 std::move(covariance));
243
244 ATH_MSG_VERBOSE("Start Parameters : " << startParameters);
245 if (startParameters.covariance()) ATH_MSG_VERBOSE("Start Covariance : \n" << *startParameters.covariance());
246
247
248 // destination position
250
251 // --------------- propagate to find a first intersection ---------------------
252 Amg::Transform3D CylTrf;
253 CylTrf.setIdentity();
254 Trk::CylinderSurface estimationCylinder(CylTrf, m_estimationR, 10e10);
255 const Trk::TrackParameters* estimationParameters = m_extrapolator->extrapolateDirectly(ctx,
256 startParameters,
257 estimationCylinder,
259 false).release();
260 if (!estimationParameters) {
261 ATH_MSG_VERBOSE("Estimation of intersection did not work - skip event !");
262 return StatusCode::SUCCESS;
263 } else if (m_highestVolume && estimationParameters && !(m_highestVolume->inside(estimationParameters->position()))) {
264 ATH_MSG_VERBOSE("Estimation of intersection is outside the known world - skip event !");
265 delete estimationParameters;
266 return StatusCode::SUCCESS;
267 }
268
269 ATH_MSG_VERBOSE("Estimation Parameters: " << *estimationParameters);
270
271 // record the estimation parameters
272 ++m_triesFront;
273 ++m_parameters;
274 m_parameterLoc1[m_parameters] = estimationParameters->parameters()[Trk::loc1];
275 m_parameterLoc2[m_parameters] = estimationParameters->parameters()[Trk::loc2];
276 m_parameterPhi[m_parameters] = estimationParameters->parameters()[Trk::phi];
277 m_parameterEta[m_parameters] = estimationParameters->eta();
278 m_parameterTheta[m_parameters] = estimationParameters->parameters()[Trk::theta];
279 m_parameterQoverP[m_parameters] = estimationParameters->parameters()[Trk::qOverP];
280 if (estimationParameters->covariance()) {
281 m_covarianceLoc1[m_parameters] = (*estimationParameters->covariance())(0, 0);
282 m_covarianceLoc2[m_parameters] = (*estimationParameters->covariance())(1, 1);
283 m_covariancePhi[m_parameters] = (*estimationParameters->covariance())(2, 2);
284 m_covarianceTheta[m_parameters] = (*estimationParameters->covariance())(3, 3);
285 m_covarianceQoverP[m_parameters] = (*estimationParameters->covariance())(4, 4);
286 m_covarianceDeterminant[m_parameters] = (estimationParameters->covariance())->determinant();
287 } else {
294 }
295 // the start Momentum
296
297 // get the estimated position
298 const Amg::Vector3D& estimatedPosition = estimationParameters->position();
299
300 m_estimationX = estimatedPosition.x();
301 m_estimationY = estimatedPosition.y();
302 m_estimationZ = estimatedPosition.z();
303
304 // cleanup for memory reasons
305 delete estimationParameters;
306 estimationParameters = nullptr;
307
308 // create the radom surface at the destination point
313 m_parameterTheta[m_parameters]), 10e5, 10e5);
314
315
316 ATH_MSG_VERBOSE("Extrapolation to Destination Surface: " << destinationSurface);
317
318 // the destination parameters
319 const Trk::TrackParameters* destParameters = nullptr;
320 // the standard validation ...
322 destParameters = m_extrapolator->extrapolate(ctx,
323 startParameters,
324 destinationSurface,
326 false,
327 static_cast<Trk::ParticleHypothesis>(m_particleType.value()),
328 Trk::addNoise).release();
329 else if (!m_direct) { // material collection validation
330 // get the vector of TrackStateOnSurfaces back
331 const std::vector<const Trk::TrackStateOnSurface*>*
332 collectedMaterial = m_extrapolator->extrapolateM(ctx,
333 startParameters,
334 destinationSurface,
336 false,
337 static_cast<Trk::ParticleHypothesis>(m_particleType.value()));
338
339 // get the last one and clone it
340 if (collectedMaterial && !collectedMaterial->empty()) {
341 // get the last track state on surface & clone the destination parameters
342 const Trk::TrackStateOnSurface* destinationState = collectedMaterial->back();
343 destParameters = destinationState->trackParameters() ? destinationState->trackParameters()->clone() : nullptr;
344 m_collectedLayerFront += collectedMaterial->size();
345 // delete the layers / cleanup
346 for (const auto* tsos : *collectedMaterial) {
347 delete tsos;
348 }
349 }
350 } else {
351 destParameters = m_extrapolator->extrapolateDirectly(ctx,
352 startParameters,
353 destinationSurface,
355 false,
356 static_cast<Trk::ParticleHypothesis>(m_particleType.value())).
357 release();
358 }
359 // ----------------------- check if forward call was successful and continue then
360 if (destParameters) {
361 // successful tries
362 ++m_triesBack;
363 // record the destination parameters
364 ++m_parameters;
365 m_parameterLoc1[m_parameters] = destParameters->parameters()[Trk::loc1];
366 m_parameterLoc2[m_parameters] = destParameters->parameters()[Trk::loc2];
367 m_parameterPhi[m_parameters] = destParameters->parameters()[Trk::phi];
368 m_parameterEta[m_parameters] = destParameters->eta();
369 m_parameterTheta[m_parameters] = destParameters->parameters()[Trk::theta];
370 m_parameterQoverP[m_parameters] = destParameters->parameters()[Trk::qOverP];
371 if (destParameters->covariance()) {
372 m_covarianceLoc1[m_parameters] = (*destParameters->covariance())(0, 0);
373 m_covarianceLoc2[m_parameters] = (*destParameters->covariance())(1, 1);
374 m_covariancePhi[m_parameters] = (*destParameters->covariance())(2, 2);
375 m_covarianceTheta[m_parameters] = (*destParameters->covariance())(3, 3);
376 m_covarianceQoverP[m_parameters] = (*destParameters->covariance())(4, 4);
377 m_covarianceDeterminant[m_parameters] = (destParameters->covariance())->determinant();
378 } else {
385 }
386 // record the destination parameters
387 const Amg::Vector3D& destinationPosition = destParameters->position();
388 m_destinationX = destinationPosition.x();
389 m_destinationY = destinationPosition.y();
390 m_destinationZ = destinationPosition.z();
391 m_destinationR = destinationPosition.perp();
392
393 // now simply go backwards
394 const Trk::TrackParameters* backParameters = nullptr;
395 // the standard validation ...
397 backParameters = m_extrapolator->extrapolate(ctx,
398 *destParameters,
399 startSurface,
401 false,
402 static_cast<Trk::ParticleHypothesis>(m_particleType.value()),
403 Trk::removeNoise).release();
404 else if (!m_direct) { // material collection validation
405 // get the vector of TrackStateOnSurfaces back
406 const std::vector<const Trk::TrackStateOnSurface*>*
407 collectedBackMaterial = m_extrapolator->extrapolateM(ctx,
408 *destParameters,
409 startSurface,
411 false,
412 static_cast<Trk::ParticleHypothesis>(m_particleType.value()));
413 // get the last one and clone it
414 if (collectedBackMaterial && !collectedBackMaterial->empty()) {
415 // get the last track state on surface & clone the destination parameters
416 const Trk::TrackStateOnSurface* startState = collectedBackMaterial->back();
417 // assign the last ones of the call
418 backParameters = startState->trackParameters() ? startState->trackParameters()->clone() : nullptr;
419 m_collectedLayerBack += collectedBackMaterial->size();
420 // delete the layers / cleanup
421 for (const auto* tsos : *collectedBackMaterial) {
422 delete tsos;
423 }
424 }
425 } else {
426 backParameters = m_extrapolator->extrapolateDirectly(ctx,
427 *destParameters,
428 startSurface,
430 false,
431 static_cast<Trk::ParticleHypothesis>(m_particleType.value()))
432 .release();
433 }
434 // ----------------------- check if backward call was successful and continue then
435 if (backParameters) {
436 ATH_MSG_VERBOSE("Back Parameters : " << *backParameters);
437
438 // record the back extrapolated ones
439 ++m_parameters;
440 m_parameterLoc1[m_parameters] = backParameters->parameters()[Trk::loc1];
441 m_parameterLoc2[m_parameters] = backParameters->parameters()[Trk::loc2];
442 m_parameterPhi[m_parameters] = backParameters->parameters()[Trk::phi];
443 m_parameterEta[m_parameters] = backParameters->eta();
444 m_parameterTheta[m_parameters] = backParameters->parameters()[Trk::theta];
445 m_parameterQoverP[m_parameters] = backParameters->parameters()[Trk::qOverP];
446 if (backParameters->covariance()) {
447 m_covarianceLoc1[m_parameters] = (*backParameters->covariance())(0, 0);
448 m_covarianceLoc2[m_parameters] = (*backParameters->covariance())(1, 1);
449 m_covariancePhi[m_parameters] = (*backParameters->covariance())(2, 2);
450 m_covarianceTheta[m_parameters] = (*backParameters->covariance())(3, 3);
451 m_covarianceQoverP[m_parameters] = (*backParameters->covariance())(4, 4);
452 m_covarianceDeterminant[m_parameters] = (backParameters->covariance())->determinant();
453 } else {
460 }
461 // memory cleanup
462 delete backParameters;
463 } else ++m_breaksBack;
464 // memory cleanup
465 delete destParameters;
466 } else ++m_breaksFront;
467 // increase ones more
468 ++m_parameters;
469 // memory cleanup
470
472
473
474 //std::cout<<"Cleaning up..."<<std::endl;
475 //delete covariance;
476
477 return StatusCode::SUCCESS;
478}
479
480//============================================================================================
482Trk::ExtrapolationValidation::createTransform(double x, double y, double z, double phi, double theta, double alphaZ) {
483 if (phi != 0. && theta != 0.) {
484 // create the Start Surface
485 Amg::Vector3D surfacePosition(x, y, z);
486 // z direction
487 Amg::Vector3D surfaceZdirection(cos(phi) * sin(theta),
488 sin(phi) * sin(theta),
489 cos(theta));
490 // the global z axis
491 Amg::Vector3D zAxis(0., 0., 1.);
492 // the y direction
493 Amg::Vector3D surfaceYdirection(zAxis.cross(surfaceZdirection));
494 // the x direction
495 Amg::Vector3D surfaceXdirection(surfaceYdirection.cross(surfaceZdirection));
496
497 double nx = 1. / sqrt(
498 surfaceXdirection[0] * surfaceXdirection[0] + surfaceXdirection[1] * surfaceXdirection[1] + surfaceXdirection[2] *
499 surfaceXdirection[2]);
500 double ny = 1. / sqrt(
501 surfaceYdirection[0] * surfaceYdirection[0] + surfaceYdirection[1] * surfaceYdirection[1] + surfaceYdirection[2] *
502 surfaceYdirection[2]);
503 surfaceXdirection[0] *= nx;
504 surfaceXdirection[1] *= nx;
505 surfaceXdirection[2] *= nx;
506
507 surfaceYdirection[0] *= ny;
508 surfaceYdirection[1] *= ny;
509 surfaceYdirection[2] *= ny;
510 // the rotation
511 Amg::RotationMatrix3D surfaceRotation;
512 surfaceRotation.col(0) = surfaceXdirection;
513 surfaceRotation.col(1) = surfaceYdirection;
514 surfaceRotation.col(2) = surfaceZdirection;
515 // return it
516 if (alphaZ == 0.) return Amg::Transform3D(surfaceRotation, surfacePosition);
517
518 Amg::Transform3D nominalTransform(surfaceRotation, surfacePosition);
519 return Amg::Transform3D(nominalTransform * Amg::AngleAxis3D(alphaZ, zAxis));
520 }
521
523}
#define M_PI
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
#define ATH_MSG_INFO(x,...)
double charge(const T &p)
Definition AtlasPID.h:1003
#define AmgSymMatrix(dim)
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Class for a CylinderSurface in the ATLAS detector.
Bounds for a cylindrical Volume, the decomposeToSurfaces method creates a vector of up to 6 surfaces:
double halflengthZ() const
This method returns the halflengthZ.
double outerRadius() const
This method returns the outer radius.
TTree * m_validationTree
Root Validation Tree.
Rndm::Numbers * m_gaussDist
Random Number setup.
const TrackingVolume * m_highestVolume
the highest volume
~ExtrapolationValidation()
Default Destructor.
float m_covarianceLoc2[TRKEXALGS_MAXPARAMETERS]
start local 2
unsigned int m_collectedLayerFront
collected material layers forward
float m_parameterTheta[TRKEXALGS_MAXPARAMETERS]
start theta
float m_parameterPhi[TRKEXALGS_MAXPARAMETERS]
start phi
StatusCode execute(const EventContext &ctx)
standard Athena-Algorithm method
ExtrapolationValidation(const std::string &name, ISvcLocator *pSvcLocator)
Standard Athena-Algorithm Constructor.
StatusCode finalize()
standard Athena-Algorithm method
float m_parameterLoc1[TRKEXALGS_MAXPARAMETERS]
start local 1
StatusCode initialize()
standard Athena-Algorithm method
unsigned int m_collectedLayerBack
collected material layers backwards
float m_parameterEta[TRKEXALGS_MAXPARAMETERS]
start eta
int m_destinationSurfaceType
destination surface type
float m_covariancePhi[TRKEXALGS_MAXPARAMETERS]
start phi
ToolHandle< IExtrapolator > m_extrapolator
The Extrapolator to be retrieved.
static Amg::Transform3D createTransform(double x, double y, double z, double phi=0., double theta=0., double alphaZ=0.)
private helper method to create a HepTransform
unsigned int m_breaksFront
breaks front
float m_covarianceQoverP[TRKEXALGS_MAXPARAMETERS]
start qOverP
double m_maximumR
maximum R of the highest
int m_parameters
maximum 3 : start - destination - backward
double m_maximumZ
maximum halfZ of the highest tracking volume
float m_covarianceLoc1[TRKEXALGS_MAXPARAMETERS]
start local 1
float m_parameterQoverP[TRKEXALGS_MAXPARAMETERS]
start qOverP
float m_covarianceTheta[TRKEXALGS_MAXPARAMETERS]
start theta
float m_covarianceDeterminant[TRKEXALGS_MAXPARAMETERS]
start qOverP
unsigned int m_triesFront
events front
float m_parameterLoc2[TRKEXALGS_MAXPARAMETERS]
start local 2
double eta() const
Access method for pseudorapidity - from momentum.
virtual ParametersBase< DIM, T > * clone() const override=0
clone method for polymorphic deep copy
const Amg::Vector3D & position() const
Access method for the position.
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
represents the track state (measurement, material, fit parameters and quality) at a surface.
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
The TrackingGeometry class is the owner of the constructed TrackingVolumes.
const TrackingVolume * highestTrackingVolume() const
return the world
static std::string release
Definition computils.h:50
Eigen::AngleAxisd AngleAxis3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Translation< double, 3 > Translation3D
@ oppositeMomentum
@ alongMomentum
@ x
Definition ParamDefs.h:55
@ z
global position (cartesian)
Definition ParamDefs.h:57
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
@ y
Definition ParamDefs.h:56
@ loc2
generic first and second local coordinate
Definition ParamDefs.h:35
@ phi
Definition ParamDefs.h:75
@ loc1
Definition ParamDefs.h:34
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters
ParametersT< TrackParametersDim, Charged, PlaneSurface > AtaPlane