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{
35 // clear random number generators
36 delete m_gaussDist;
37 delete m_flatDist;
38}
39
40
41//================ Initialisation =================================================
42
44{
45 // Code entered here will be executed once at program start.
46 ATH_MSG_INFO( " initialize()" );
47
48 // Get Extrapolator from ToolService
49 ATH_CHECK( m_extrapolator.retrieve());
50
51 // create the new Tree
52 m_validationTree = new TTree(m_validationTreeName.value().c_str(),
53 m_validationTreeDescription.value().c_str());
54
55 // the branches for the parameters
56 m_validationTree->Branch("Parameters", &m_parameters, "params/I");
57 m_validationTree->Branch("ParametersLoc1", m_parameterLoc1, "paramLoc1[params]/F");
58 m_validationTree->Branch("ParametersLoc2", m_parameterLoc2, "paramLoc2[params]/F");
59 m_validationTree->Branch("ParametersPhi", m_parameterPhi, "paramPhi[params]/F");
60 m_validationTree->Branch("ParametersTheta", m_parameterTheta, "paramTheta[params]/F");
61 m_validationTree->Branch("ParametersEta", m_parameterEta, "paramEta[params]/F");
62 m_validationTree->Branch("ParametersQoverP", m_parameterQoverP, "paramQoverP[params]/F");
63 // for the covariance diagonals
64 m_validationTree->Branch("CovarianceLoc1", m_covarianceLoc1, "covLoc1[params]/F");
65 m_validationTree->Branch("CovarianceLoc2", m_covarianceLoc2, "covLoc2[params]/F");
66 m_validationTree->Branch("CovariancePhi", m_covariancePhi, "covPhi[params]/F");
67 m_validationTree->Branch("CovarianceTheta", m_covarianceTheta, "covTheta[params]/F");
68 m_validationTree->Branch("CovarianceQoverP", m_covarianceQoverP, "covQoverP[params]/F");
69 m_validationTree->Branch("CovarianceDeterminant", m_covarianceDeterminant, "covDet[params]/F");
70 // the start Momentum
71 m_validationTree->Branch("StartMomentum", &m_startP, "startP/F");
72 // for the start surface
73 m_validationTree->Branch("StartSurfaceX", &m_startX, "startX/F");
74 m_validationTree->Branch("StartSurfaceY", &m_startY, "startY/F");
75 m_validationTree->Branch("StartSurfaceR", &m_startR, "startR/F");
76 m_validationTree->Branch("StartSurfaceZ", &m_startZ, "startZ/F");
77 // the estimation of the parameters
78 m_validationTree->Branch("EstimationSurfaceX", &m_estimationX, "estimateX/F");
79 m_validationTree->Branch("EstimationSurfaceY", &m_estimationY, "estimateY/F");
80 m_validationTree->Branch("EstimationSurfaceR", &m_estimationR, "estimateR/F");
81 m_validationTree->Branch("EstimationSurfaceZ", &m_estimationZ, "estimateZ/F");
82 // for the surface type
83 m_validationTree->Branch("DestinationSurfaceType", &m_destinationSurfaceType, "surfaceType/I");
84 m_validationTree->Branch("DestinationSurfaceX", &m_destinationX, "surfaceX/F");
85 m_validationTree->Branch("DestinationSurfaceY", &m_destinationY, "surfaceY/F");
86 m_validationTree->Branch("DestinationSurfaceR", &m_destinationR, "surfaceR/F");
87 m_validationTree->Branch("DestinationSurfaceZ", &m_destinationZ, "surfaceZ/F");
88
89 // now register the Tree
90 SmartIF<ITHistSvc> tHistSvc{service("THistSvc")};
91 if (!tHistSvc){
92 ATH_MSG_ERROR("initialize() Could not find Hist Service -> Switching ValidationMode Off !" );
93 delete m_validationTree; 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; m_validationTree = nullptr;
98 }
99
100 // intialize the random number generators
101 m_gaussDist = new Rndm::Numbers(randSvc(), Rndm::Gauss(0.,1.));
102 m_flatDist = new Rndm::Numbers(randSvc(), Rndm::Flat(0.,1.));
103
104 ATH_MSG_INFO( "initialize() successful");
105 return StatusCode::SUCCESS;
106}
107
108//================ Finalisation =================================================
109
111{
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{
134 // get the overall dimensions
135 if (!m_highestVolume){
136 // get TrackingGeometry and highest volume
137 const Trk::TrackingGeometry* trackingGeometry = m_extrapolator->trackingGeometry();
138 m_highestVolume = trackingGeometry ? trackingGeometry->highestTrackingVolume() : nullptr;
139 const Trk::CylinderVolumeBounds* cylBounds = m_highestVolume ?
140 dynamic_cast<const Trk::CylinderVolumeBounds*>(&(m_highestVolume->volumeBounds())) : nullptr;
141 // bail out
142 if (!cylBounds){
143 ATH_MSG_WARNING("No highest TrackingVolume / no VolumeBounds ... pretty useless! ");
144 return StatusCode::SUCCESS;
145 }
146 // get the numbers
147 m_maximumR = cylBounds->outerRadius();
148 m_maximumZ = cylBounds->halflengthZ();
149 }
150
151 // intialize the values
152 m_parameters = 0;
154 // -----------> start
155 m_startX = 0.;
156 m_startY = 0.;
157 m_startR = 0.;
158 m_startZ = 0.;
159 // -----------> estimation
160 m_estimationX = 0.;
161 m_estimationY = 0.;
162 m_estimationR = 0.;
163 m_estimationZ = 0.;
164 // -----------> destination
165 m_destinationX = 0.;
166 m_destinationY = 0.;
167 m_destinationR = 0.;
168 m_destinationZ = 0.;
169
170 // the local start parameters
173 // are adopted for planar and straight line surfaces
175 m_parameterPhi[m_parameters] *= (m_flatDist->shoot() > 0.5 ) ? -1. : 1.;
177 m_parameterTheta[m_parameters] = 2.*std::atan(std::exp(-m_parameterEta[m_parameters]));
178
183
184 // this is fine
185 double p = m_minP + m_flatDist->shoot()*(m_maxP-m_minP);
186 double charge = (m_flatDist->shoot() > 0.5 ) ? -1. : 1.;
188
190
191 // for the momentum logging
192 m_startP = p;
193
194 // start
195 m_startR = std::abs(m_sigmaR * m_gaussDist->shoot());
196 double surfacePhi = M_PI * m_flatDist->shoot();
197 surfacePhi *= (m_flatDist->shoot() > 0.5 ) ? -1. : 1.;
198 m_startX = m_startR*cos(surfacePhi);
199 m_startY = m_startR*sin(surfacePhi);
200 m_startZ = m_sigmaZ * m_gaussDist->shoot();
201
202 // rotate it around Z
203 double alphaZ = M_PI * m_flatDist->shoot();
204 alphaZ *= (m_flatDist->shoot() > 0.5 ) ? -1. : 1.;
205
206 // create the plane surface
208 m_startY,
209 m_startZ,
212 alphaZ),
213 10e3,10e3);
214
215
216
217 AmgSymMatrix(5) covariance;
218 covariance.setZero();
220 covariance(0,0) = m_covarianceLoc1[m_parameters];
222 covariance(1,1) = m_covarianceLoc2[m_parameters];
224 covariance(2,2) = m_covariancePhi[m_parameters];
226 covariance(3,3) = m_covarianceTheta[m_parameters];
228 covariance(4,4) = m_covarianceQoverP[m_parameters];
229 ATH_MSG_VERBOSE("Initial Setting: \n"<<covariance);
230
231
232 m_covarianceDeterminant[m_parameters] = covariance.determinant();
233
234 // the initial perigee with random numbers
240 startSurface,
241 std::move(covariance));
242
243 ATH_MSG_VERBOSE( "Start Parameters : " << startParameters );
244 if(startParameters.covariance())ATH_MSG_VERBOSE( "Start Covariance : \n" << *startParameters.covariance() );
245
246
247 // destination position
249
250 // --------------- propagate to find a first intersection ---------------------
251 Amg::Transform3D CylTrf;
252 CylTrf.setIdentity();
253 Trk::CylinderSurface estimationCylinder(CylTrf, m_estimationR, 10e10);
254 const Trk::TrackParameters* estimationParameters = m_extrapolator->extrapolateDirectly(ctx,
255 startParameters,
256 estimationCylinder,
258 false).release();
259 if (!estimationParameters) {
260 ATH_MSG_VERBOSE( "Estimation of intersection did not work - skip event !" );
261 return StatusCode::SUCCESS;
262 }
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 }
288 else{
295 }
296 // the start Momentum
297
298 // get the estimated position
299 const Amg::Vector3D& estimatedPosition = estimationParameters->position();
300
301 m_estimationX = estimatedPosition.x();
302 m_estimationY = estimatedPosition.y();
303 m_estimationZ = estimatedPosition.z();
304
305 // cleanup for memory reasons
306 delete estimationParameters; 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 }
351
352 else{
353 destParameters = m_extrapolator->extrapolateDirectly(ctx,
354 startParameters,
355 destinationSurface,
357 false,
358 static_cast<Trk::ParticleHypothesis>(m_particleType.value())).release();
359
360 }
361 // ----------------------- check if forward call was successful and continue then
362 if (destParameters){
363 // successful tries
364 ++m_triesBack;
365 // record the destination parameters
366 ++m_parameters;
367 m_parameterLoc1[m_parameters] = destParameters->parameters()[Trk::loc1];
368 m_parameterLoc2[m_parameters] = destParameters->parameters()[Trk::loc2];
369 m_parameterPhi[m_parameters] = destParameters->parameters()[Trk::phi];
370 m_parameterEta[m_parameters] = destParameters->eta();
371 m_parameterTheta[m_parameters] = destParameters->parameters()[Trk::theta];
372 m_parameterQoverP[m_parameters] = destParameters->parameters()[Trk::qOverP];
373 if(destParameters->covariance()){
374 m_covarianceLoc1[m_parameters] = (*destParameters->covariance())(0,0);
375 m_covarianceLoc2[m_parameters] = (*destParameters->covariance())(1,1);
376 m_covariancePhi[m_parameters] = (*destParameters->covariance())(2,2);
377 m_covarianceTheta[m_parameters] = (*destParameters->covariance())(3,3);
378 m_covarianceQoverP[m_parameters] = (*destParameters->covariance())(4,4);
379 m_covarianceDeterminant[m_parameters] = (destParameters->covariance())->determinant();
380 }
381 else{
388 }
389 // record the destination parameters
390 const Amg::Vector3D& destinationPosition = destParameters->position();
391 m_destinationX = destinationPosition.x();
392 m_destinationY = destinationPosition.y();
393 m_destinationZ = destinationPosition.z();
394 m_destinationR = destinationPosition.perp();
395
396 // now simply go backwards
397 const Trk::TrackParameters* backParameters = nullptr;
398 // the standard validation ...
400 backParameters = m_extrapolator->extrapolate(ctx,
401 *destParameters,
402 startSurface,
404 false,
405 static_cast<Trk::ParticleHypothesis>(m_particleType.value()),
406 Trk::removeNoise).release();
407 else if(!m_direct){ // material collection validation
408 // get the vector of TrackStateOnSurfaces back
409 const std::vector<const Trk::TrackStateOnSurface*>*
410 collectedBackMaterial = m_extrapolator->extrapolateM(ctx,
411 *destParameters,
412 startSurface,
414 false,
415 static_cast<Trk::ParticleHypothesis>(m_particleType.value()));
416 // get the last one and clone it
417 if (collectedBackMaterial && !collectedBackMaterial->empty()){
418 // get the last track state on surface & clone the destination parameters
419 const Trk::TrackStateOnSurface* startState = collectedBackMaterial->back();
420 // assign the last ones of the call
421 backParameters = startState->trackParameters() ? startState->trackParameters()->clone() : nullptr;
422 m_collectedLayerBack += collectedBackMaterial->size();
423 // delete the layers / cleanup
424 for (const auto* tsos : *collectedBackMaterial) {
425 delete tsos;
426 }
427 }
428 }
429
430 else{
431 backParameters = m_extrapolator->extrapolateDirectly(ctx,
432 *destParameters,
433 startSurface,
435 false,
436 static_cast<Trk::ParticleHypothesis>(m_particleType.value())).release();
437
438 }
439 // ----------------------- check if backward call was successful and continue then
440 if (backParameters){
441
442 ATH_MSG_VERBOSE( "Back Parameters : " << *backParameters );
443
444 // record the back extrapolated ones
445 ++m_parameters;
446 m_parameterLoc1[m_parameters] = backParameters->parameters()[Trk::loc1];
447 m_parameterLoc2[m_parameters] = backParameters->parameters()[Trk::loc2];
448 m_parameterPhi[m_parameters] = backParameters->parameters()[Trk::phi];
449 m_parameterEta[m_parameters] = backParameters->eta();
450 m_parameterTheta[m_parameters] = backParameters->parameters()[Trk::theta];
451 m_parameterQoverP[m_parameters] = backParameters->parameters()[Trk::qOverP];
452 if(backParameters->covariance()){
453 m_covarianceLoc1[m_parameters] = (*backParameters->covariance())(0,0);
454 m_covarianceLoc2[m_parameters] = (*backParameters->covariance())(1,1);
455 m_covariancePhi[m_parameters] = (*backParameters->covariance())(2,2);
456 m_covarianceTheta[m_parameters] = (*backParameters->covariance())(3,3);
457 m_covarianceQoverP[m_parameters] = (*backParameters->covariance())(4,4);
458 m_covarianceDeterminant[m_parameters] = (backParameters->covariance())->determinant();
459 }
460 else{
467 }
468 // memory cleanup
469 delete backParameters;
470 } else
471 ++m_breaksBack;
472 // memory cleanup
473 delete destParameters;
474 } else
476 // increase ones more
477 ++m_parameters;
478 // memory cleanup
479
481 m_validationTree->Fill();
482
483
484 //std::cout<<"Cleaning up..."<<std::endl;
485 //delete covariance;
486
487 return StatusCode::SUCCESS;
488}
489
490//============================================================================================
492Trk::ExtrapolationValidation::createTransform(double x, double y, double z, double phi, double theta, double alphaZ)
493{
494
495 if (phi!=0. && theta != 0.){
496 // create the Start Surface
497 Amg::Vector3D surfacePosition(x,y,z);
498 // z direction
499 Amg::Vector3D surfaceZdirection(cos(phi)*sin(theta),
500 sin(phi)*sin(theta),
501 cos(theta));
502 // the global z axis
503 Amg::Vector3D zAxis(0.,0.,1.);
504 // the y direction
505 Amg::Vector3D surfaceYdirection(zAxis.cross(surfaceZdirection));
506 // the x direction
507 Amg::Vector3D surfaceXdirection(surfaceYdirection.cross(surfaceZdirection));
508
509 double nx = 1./sqrt(surfaceXdirection[0]*surfaceXdirection[0]+surfaceXdirection[1]*surfaceXdirection[1]+surfaceXdirection[2]*surfaceXdirection[2]);
510 double ny = 1./sqrt(surfaceYdirection[0]*surfaceYdirection[0]+surfaceYdirection[1]*surfaceYdirection[1]+surfaceYdirection[2]*surfaceYdirection[2]);
511 surfaceXdirection[0]*=nx;
512 surfaceXdirection[1]*=nx;
513 surfaceXdirection[2]*=nx;
514
515 surfaceYdirection[0]*=ny;
516 surfaceYdirection[1]*=ny;
517 surfaceYdirection[2]*=ny;
518 // the rotation
519 Amg::RotationMatrix3D surfaceRotation;
520 surfaceRotation.col(0) = surfaceXdirection;
521 surfaceRotation.col(1) = surfaceYdirection;
522 surfaceRotation.col(2) = surfaceZdirection;
523 // return it
524 if (alphaZ==0.)
525 return Amg::Transform3D(surfaceRotation, surfacePosition);
526 Amg::Transform3D nominalTransform(surfaceRotation, surfacePosition);
527 return Amg::Transform3D(nominalTransform*Amg::AngleAxis3D(alphaZ,zAxis));
528
529 }
530
532}
533
#define M_PI
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
double charge(const T &p)
Definition AtlasPID.h:997
#define AmgSymMatrix(dim)
virtual StatusCode execute()
Execute method without EventContext (deprecated).
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
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
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
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