ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::FitMeasurement Class Reference

#include <FitMeasurement.h>

Collaboration diagram for Trk::FitMeasurement:

Public Member Functions

 FitMeasurement (int hitIndex, HitOnTrack *hitOnTrack, const MeasurementBase *measurementBase)
 FitMeasurement (const MaterialEffectsBase *materialEffects, double particleMass, const Amg::Vector3D &position, double qOverP=0., bool calo=false)
 FitMeasurement (double radiationThickness, double deltaE, double particleMass, const Amg::Vector3D &position, const Amg::Vector3D &direction, double qOverP, const Surface *surface=0)
 FitMeasurement (const AlignmentEffectsOnTrack *alignmentEffects, const Amg::Vector3D &direction, const Amg::Vector3D &position)
 FitMeasurement (const TrackSurfaceIntersection &intersection, double shift)
 FitMeasurement (const TrackStateOnSurface &TSOS)
 FitMeasurement (int hitIndex, HitOnTrack *hitOnTrack, const Amg::Vector3D &position, double sigma, double sigma2, double sinStereo, int status, const Surface *surface, MeasurementType type)
 FitMeasurement (int hitIndex, HitOnTrack *hitOnTrack, const Amg::Vector3D &position, double sigma, double signedDriftDistance, double sinStereo, const Surface *surface)
 FitMeasurement (const TrackParameters &perigee)
 FitMeasurement (double d0, const Amg::Vector3D &position, double sigma)
 ~FitMeasurement (void)
bool afterCalo (void) const
double alignmentAngle (void) const
void alignmentAngle (double value)
const AlignmentEffectsOnTrackalignmentEffects (void) const
double alignmentOffset (void) const
void alignmentOffset (double value)
unsigned alignmentParameter (void) const
void alignmentParameter (unsigned value)
unsigned alignmentParameter2 (void) const
void alignmentParameter2 (unsigned value)
double derivative (int param) const
void derivative (int param, double value)
void derivative (double *pointer)
double derivative2 (int param) const
void derivative2 (int param, double value)
void derivative2 (double *pointer)
int derivativeRow (void) const
void derivativeRow (int row)
double d0 (void) const
double energyLoss (void) const
double energyLossSigma (void) const
unsigned firstParameter (void) const
void firstParameter (unsigned value)
void flipDriftDirection (void)
int hitIndex (void) const
const HitOnTrack * hitOnTrack (void) const
HitOnTrack * hitOnTrack (void)
bool hasIntersection (ExtrapolationType type) const
const TrackSurfaceIntersectionintersection (ExtrapolationType type) const
void intersection (ExtrapolationType type, const std::optional< TrackSurfaceIntersection > &value)
bool isAlignment (void) const
bool isCluster (void) const
bool isDrift (void) const
bool isEnergyDeposit (void) const
bool isFlipped (void) const
bool isMaterialDelimiter (void) const
bool isOutlier (void) const
bool isPassive (void) const
bool isPerigee (void) const
bool isPositionMeasurement (void) const
bool isPseudo (void) const
bool isScatterer (void) const
bool isTrapezoidCluster (void) const
bool isVertex (void) const
bool is2Dimensional (void) const
unsigned lastParameter (void) const
void lastParameter (unsigned value, bool afterCalo=false)
const MaterialEffectsBasematerialEffects (void) const
const MeasurementBasemeasurementBase (void) const
double minEnergyDeposit (void) const
const Amg::Vector3DminimizationDirection (void) const
void minimizationDirection (const Amg::Vector3D &value)
const Amg::Vector3Dnormal (void) const
int numberDoF (void) const
void numberDoF (int value)
bool numericalDerivative (void) const
const Amg::VectorXperigee (void) const
const Amg::MatrixXperigeeWeight (void) const
const Amg::Vector3Dposition (void) const
void print (MsgStream &log) const
double qOverP (void) const
void qOverP (double value)
double radiationThickness (void) const
double residual (void) const
void residual (double value)
void residual (std::vector< double >::iterator pointer)
double residual2 (void) const
void residual2 (double value)
double scattererPhi (void) const
void scattererPhi (double value)
double scattererTheta (void) const
void scattererTheta (double value)
void scatteringAngle (double angle, double totalRadiationThickness)
const Amg::Vector3DsensorDirection (void) const
void setEnergyGain (void)
void setMaterialEffectsOwner (void)
void setNumericalDerivative (void)
void setOutlier (void)
void setSigma (void)
void setSigmaMinus (void)
void setSigmaPlus (void)
void setSigmaSymmetric (void)
double sigma (void) const
double sigma2 (void) const
double signedDriftDistance (void) const
int status (void) const
const Surfacesurface (void) const
MeasurementType type (void) const
void unsetOutlier (void)
double weight (void) const
double weight2 (void) const

Static Public Member Functions

static void printHeading (MsgStream &log)

Private Member Functions

 FitMeasurement (const FitMeasurement &)
FitMeasurementoperator= (const FitMeasurement &)

Private Attributes

bool m_afterCalo
const AlignmentEffectsOnTrackm_alignmentEffects
unsigned m_alignmentParameter
unsigned m_alignmentParameter2
double m_betaSquared
double * m_derivative
double * m_derivative2
int m_derivativeRow
double m_d0
double m_energyLoss
unsigned m_firstParameter
bool m_flippedDriftDistance
int m_hitIndex
HitOnTrack * m_hitOnTrack
std::array< std::optional< TrackSurfaceIntersection >, ExtrapolationTypesm_intersection
unsigned m_lastParameter
const MaterialEffectsBasem_materialEffects
bool m_materialEffectsOwner
const MeasurementBasem_measurementBase
double m_minEnergyDeposit
Amg::Vector3D m_minimizationDirection
Amg::Vector3D m_normal
int m_numberDoF
bool m_numericalDerivative
bool m_outlier
double m_particleMassSquared
Amg::VectorX m_perigee
Amg::MatrixX m_perigeeWeight
Amg::Vector3D m_position
double m_qOverP
double m_radiationThickness
std::vector< double >::iterator m_residual
double m_scaleFactor
double m_scatterPhi
double m_scatterTheta
double m_scatteringAngle
double m_scatteringAngleOffSet
double m_secondResidual
Amg::Vector3D m_sensorDirection
double m_sigma
double m_sigmaMinus
double m_sigmaPlus
double m_signedDriftDistance
int m_status
const Surfacem_surface
MeasurementType m_type
double m_weight
double m_weight2

Detailed Description

Definition at line 40 of file FitMeasurement.h.

Constructor & Destructor Documentation

◆ FitMeasurement() [1/11]

Trk::FitMeasurement::FitMeasurement ( int hitIndex,
HitOnTrack * hitOnTrack,
const MeasurementBase * measurementBase )

Definition at line 41 of file FitMeasurement.cxx.

43 : m_afterCalo(false),
44 m_alignmentEffects(nullptr),
47 m_betaSquared(1.),
48 m_derivative(nullptr),
49 m_derivative2(nullptr),
51 m_d0(0.),
52 m_energyLoss(0.),
58 m_materialEffects(nullptr),
63 m_normal{},
64 m_numberDoF(measurementBase->localCovariance().cols()),
66 m_outlier(false),
68 m_perigee{},
70 m_position(measurementBase->associatedSurface().center()),
71 m_qOverP(0.),
73 m_residual(0),
74 m_scaleFactor(0.),
75 m_scatterPhi(0.),
81 m_sigma(0.),
82 m_sigmaMinus(0.),
83 m_sigmaPlus(0.),
85 m_status(0),
86 m_surface(&measurementBase->associatedSurface()),
88 m_weight(1.),
89 m_weight2(1.) {
90 double sigma = 0.;
91 if (m_numberDoF > 0)
92 sigma = Amg::error(measurementBase->localCovariance(), locX);
93 double sigma2 = 0.;
94 if (m_numberDoF > 1)
95 sigma2 = Amg::error(measurementBase->localCovariance(), locY);
96
97 // remaining data according to surface (normal, sensor, minimization
98 // directions etc)
99 if (dynamic_cast<const PlaneSurface*>(m_surface)) {
100 m_normal = Amg::Vector3D(m_surface->transform().rotation().col(2));
101 const Amg::Vector3D posptr =
102 m_surface->localToGlobal(measurementBase->localParameters());
103 m_position = posptr;
104
105 // special case to get sensor for endcap trapezoids (discs represented as
106 // planes) thus sensor direction rotates according to localX - rather than
107 // being parallel and there is only 1 'real' degree of freedom for
108 // covariance
109 if (m_numberDoF == 2 &&
110 dynamic_cast<const TrapezoidBounds*>(&m_surface->bounds())) {
111 m_numberDoF = 1;
113 const double aa = measurementBase->localCovariance()(locX, locX);
114 const double ab = measurementBase->localCovariance()(locX, locY);
115 const double bb = measurementBase->localCovariance()(locY, locY);
116 const double sum = aa + bb;
117 const double diff = std::sqrt(sum * sum - 4. * (aa * bb - ab * ab));
118 // used by obsolete scaling
119 // double lengthSq = 0.5*(sum + diff);
120 const double widthSq = 0.5 * (sum - diff);
121 sigma = std::sqrt(widthSq);
122 const double term = 0.5 * (aa - bb) / diff;
123 const double cosStereo = std::sqrt(0.5 - term);
124 double sinStereo = 0.0;
125 if (term > -0.5) {
126 sinStereo = std::sqrt(0.5 + term);
127 if (ab * m_normal.z() < 0.)
128 sinStereo = -sinStereo;
129 }
130
131 const Amg::Vector3D& axis = m_surface->transform().rotation().col(1);
133 Amg::Vector3D(axis(0) * cosStereo + axis(1) * sinStereo,
134 axis(1) * cosStereo - axis(0) * sinStereo, axis(2));
135 } else {
137 Amg::Vector3D(m_surface->transform().rotation().col(1));
138 }
139
141 if (m_numberDoF == 2)
143 } else if (dynamic_cast<const StraightLineSurface*>(m_surface)) {
144 // StraightLines can be driftCircles or pseudoMeasurements along the wire
145 if (!measurementBase->localParameters().contains(locY)) {
146 // driftCircles will eventually have sagged surfaces.
147 // then may need something like:
148 // get z-along wire from (globPos-center).dot(sensor)
149 // then loc3D = (0,0,zalongwire)
150 // position = surface->transform() * loc3D
151 // but probably just same as using centre with wire direction ...
153 Amg::Vector3D(m_surface->transform().rotation().col(2));
156 } else {
157 // pseudomeasurement - minimize along wire direction
159 Amg::Vector3D(m_surface->transform().rotation().col(2));
160 const double mag = m_surface->center().mag();
161 m_normal = mag > 1e-6 ? Amg::Vector3D(m_surface->center() / mag)
162 : Amg::Vector3D(m_surface->normal());
163 m_position = measurementBase->globalPosition();
168 }
169 }
170
171 const PerigeeSurface* perigee =
172 dynamic_cast<const PerigeeSurface*>(m_surface);
173 if (perigee) {
174 m_position = m_surface->center();
175 m_sensorDirection = Amg::Vector3D(0., 0., 1.);
177 if (m_numberDoF == 2)
178 m_type = vertex;
179 }
180
181 // there are no measurements from Atlas detectors of cylinder or disc type
182 // const CylinderSurface* cylinder = dynamic_cast<const
183 // CylinderSurface*>(m_surface); if (cylinder)
184 // {
185 // }
186
187 // const DiscSurface* disc = dynamic_cast<const
188 // DiscSurface*>(m_surface); if (disc)
189 // {
190 // }
191
192 // add protection against junk input
193 if (sigma > 0.)
194 m_weight = 1. / sigma;
195 if (sigma2 > 0.)
196 m_weight2 = 1. / sigma2;
197}
Scalar mag() const
mag method
void diff(const Jet &rJet1, const Jet &rJet2, std::map< std::string, double > varDiff)
Difference between jets - Non-Class function required by trigger.
Definition Jet.cxx:631
Eigen::Matrix< double, 3, 1 > Vector3D
const AlignmentEffectsOnTrack * m_alignmentEffects
const Surface * m_surface
HitOnTrack * m_hitOnTrack
const Amg::VectorX & perigee(void) const
const HitOnTrack * hitOnTrack(void) const
Amg::Vector3D m_normal
double sigma2(void) const
Amg::Vector3D m_position
MeasurementType m_type
const MeasurementBase * m_measurementBase
Amg::MatrixX m_perigeeWeight
const MeasurementBase * measurementBase(void) const
double sigma(void) const
const MaterialEffectsBase * m_materialEffects
const Amg::Vector3D & normal(void) const
Amg::Vector3D m_sensorDirection
std::vector< double >::iterator m_residual
int hitIndex(void) const
Amg::Vector3D m_minimizationDirection
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Eigen::Matrix< double, 3, 1 > Vector3D
@ pseudoMeasurement
@ stripCluster
@ transverseVertex
@ pixelCluster
@ trapezoidCluster
@ driftCircle
@ driftRadius
trt, straws
Definition ParamDefs.h:53
@ locY
local cartesian
Definition ParamDefs.h:38
@ locX
Definition ParamDefs.h:37

◆ FitMeasurement() [2/11]

Trk::FitMeasurement::FitMeasurement ( const MaterialEffectsBase * materialEffects,
double particleMass,
const Amg::Vector3D & position,
double qOverP = 0.,
bool calo = false )

Definition at line 200 of file FitMeasurement.cxx.

204 : m_afterCalo(false),
205 m_alignmentEffects(nullptr),
208 m_betaSquared(1.),
209 m_derivative(nullptr),
210 m_derivative2(nullptr),
211 m_derivativeRow(-1),
212 m_d0(0.),
213 m_energyLoss(0.),
216 m_hitIndex(0),
217 m_hitOnTrack(nullptr),
221 m_measurementBase(nullptr),
224 m_normal{},
225 m_numberDoF(0),
227 m_outlier(false),
228 m_particleMassSquared(particleMass * particleMass),
229 m_perigee{},
233 m_radiationThickness(materialEffects->thicknessInX0()),
234 m_residual(0),
235 m_scaleFactor(0.),
236 m_scatterPhi(0.),
237 m_scatterTheta(0.),
242 m_sigma(0.),
243 m_sigmaMinus(0.),
244 m_sigmaPlus(0.),
246 m_status(0),
247 m_surface(&materialEffects->associatedSurface()),
249 m_weight(0.),
250 m_weight2(0.) {
251 if (dynamic_cast<const CylinderSurface*>(m_surface) ||
252 std::abs(m_surface->normal()(2)) < 0.5)
254
255 if (calo)
257
258 // set any energy loss
259 const EnergyLoss* energyLoss = nullptr;
260 const ScatteringAngles* scattering = nullptr;
261 const MaterialEffectsOnTrack* meot =
262 dynamic_cast<const MaterialEffectsOnTrack*>(materialEffects);
263 if (meot) {
264 energyLoss = meot->energyLoss();
265 scattering = meot->scatteringAngles();
266 }
267
268 if (energyLoss) {
269 // note: EDM defines energy loss to be negative
270 // but here take opposite as this convention is not accepted by
271 // CaloEnergy clients (exception to take verbatim for CaloEnergy)
272 // m_energyLoss = -energyLoss->deltaE();
273 m_energyLoss = std::abs(energyLoss->deltaE());
274
275 // calo energy deposit treated as a single pure energy loss measurement,
276 // with fit taking error into account
277 if (calo && !scattering && energyLoss->sigmaDeltaE() > 0.) {
278 m_energyLoss = energyLoss->deltaE();
279 m_numberDoF = 1;
280 m_sigma = energyLoss->sigmaDeltaE();
281 m_sigmaMinus = energyLoss->sigmaMinusDeltaE();
282 m_sigmaPlus = energyLoss->sigmaPlusDeltaE();
284 m_weight = 1. / m_sigma;
286 if (m_energyLoss > 0. && m_energyLoss > 5.0 * m_sigmaMinus) {
288 } else if (m_energyLoss < 0. && m_energyLoss < -5.0 * m_sigmaMinus) {
290 }
291 }
292 }
293
294 // initialize scattering angles
295 if (scattering) {
296 m_scatterPhi = scattering->deltaPhi();
297 m_scatterTheta = scattering->deltaTheta();
298 if (calo)
299 m_scatteringAngleOffSet = scattering->sigmaDeltaTheta();
300 // if(calo) std::cout << " Calorimeter scaterrer with sigmaDeltaPhi "
301 // << scattering->sigmaDeltaPhi() << " sigmaDeltaTheta " <<
302 // scattering->sigmaDeltaTheta() << std::endl;
303 }
304}
double energyLoss(void) const
const MaterialEffectsBase * materialEffects(void) const
double qOverP(void) const
const Amg::Vector3D & position(void) const
@ endcapScatterer
@ energyDeposit
@ calorimeterScatterer
@ barrelScatterer

◆ FitMeasurement() [3/11]

Trk::FitMeasurement::FitMeasurement ( double radiationThickness,
double deltaE,
double particleMass,
const Amg::Vector3D & position,
const Amg::Vector3D & direction,
double qOverP,
const Surface * surface = 0 )

Definition at line 307 of file FitMeasurement.cxx.

312 : m_afterCalo(false),
313 m_alignmentEffects(nullptr),
316 m_betaSquared(1.),
317 m_derivative(nullptr),
318 m_derivative2(nullptr),
319 m_derivativeRow(-1),
320 m_d0(0.),
321 m_energyLoss(-deltaE),
324 m_hitIndex(0),
325 m_hitOnTrack(nullptr),
327 m_materialEffects(nullptr),
329 m_measurementBase(nullptr),
332 m_normal{},
333 m_numberDoF(0),
335 m_outlier(false),
336 m_particleMassSquared(particleMass * particleMass),
337 m_perigee{},
342 m_residual(0),
343 m_scaleFactor(0.),
344 m_scatterPhi(0.),
345 m_scatterTheta(0.),
350 m_sigma(0.),
351 m_sigmaMinus(0.),
352 m_sigmaPlus(0.),
354 m_status(0),
357 m_weight(0.),
358 m_weight2(0.) {
359 // plane surface with normal along input direction
360 if (m_surface && (dynamic_cast<const CylinderSurface*>(m_surface) ||
361 std::abs(m_surface->normal()(2)) < 0.5))
363 else if (std::abs(direction(2)) < 0.5)
365 if (!m_surface) {
366 const CurvilinearUVT uvt(direction);
367 m_surface = new PlaneSurface(position, uvt);
368 }
369
370 // create MaterialEffects
371 std::bitset<MaterialEffectsBase::NumberOfMaterialEffectsTypes> typeMaterial;
372 if (deltaE != 0.)
374 auto energyLoss = std::make_unique<EnergyLoss>(deltaE, 0., 0., 0.);
375 m_materialEffects = new MaterialEffectsOnTrack(
376 radiationThickness, std::move(energyLoss), *m_surface, typeMaterial);
377 if (!surface)
378 delete m_surface;
379 m_surface = &m_materialEffects->associatedSurface();
380
382 std::make_optional<TrackSurfaceIntersection>(position, direction, 0.);
383}
double radiationThickness(void) const
std::array< std::optional< TrackSurfaceIntersection >, ExtrapolationTypes > m_intersection
const Surface * surface(void) const
@ EnergyLossEffects
contains energy loss corrections
@ FittedTrajectory

◆ FitMeasurement() [4/11]

Trk::FitMeasurement::FitMeasurement ( const AlignmentEffectsOnTrack * alignmentEffects,
const Amg::Vector3D & direction,
const Amg::Vector3D & position )

Definition at line 386 of file FitMeasurement.cxx.

389 : m_afterCalo(false),
393 m_betaSquared(1.),
394 m_derivative(nullptr),
395 m_derivative2(nullptr),
396 m_derivativeRow(-1),
397 m_d0(0.),
398 m_energyLoss(0.),
401 m_hitIndex(0),
402 m_hitOnTrack(nullptr),
404 m_materialEffects(nullptr),
406 m_measurementBase(nullptr),
409 m_normal{},
410 m_numberDoF(2),
412 m_outlier(false),
414 m_perigee{},
417 m_qOverP(0.),
419 m_residual(0),
420 m_scaleFactor(0.),
421 m_scatterPhi(alignmentEffects->deltaAngle()),
422 m_scatterTheta(alignmentEffects->deltaTranslation()),
427 m_sigma(0.),
428 m_sigmaMinus(alignmentEffects->sigmaDeltaAngle()),
429 m_sigmaPlus(alignmentEffects->sigmaDeltaTranslation()),
431 m_status(0),
432 m_surface(&alignmentEffects->associatedSurface()),
434 m_weight(1.),
435 m_weight2(1.) {
436 // set weights
437 if (m_sigmaMinus)
438 m_weight = 1. / m_sigmaMinus;
439 if (m_sigmaPlus)
440 m_weight2 = 1. / m_sigmaPlus;
441
443 std::make_optional<TrackSurfaceIntersection>(position, direction, 0.);
444}
const AlignmentEffectsOnTrack * alignmentEffects(void) const

◆ FitMeasurement() [5/11]

Trk::FitMeasurement::FitMeasurement ( const TrackSurfaceIntersection & intersection,
double shift )

Definition at line 447 of file FitMeasurement.cxx.

449 : m_afterCalo(false),
450 m_alignmentEffects(nullptr),
453 m_betaSquared(1.),
454 m_derivative(nullptr),
455 m_derivative2(nullptr),
456 m_derivativeRow(-1),
457 m_d0(0.),
458 m_energyLoss(0.),
461 m_hitIndex(0),
462 m_hitOnTrack(nullptr),
464 m_materialEffects(nullptr),
466 m_measurementBase(nullptr),
469 m_normal{},
470 m_numberDoF(0),
472 m_outlier(false),
474 m_perigee{},
476 m_position(intersection.position()),
477 m_qOverP(0.),
479 m_residual(0),
480 m_scaleFactor(0.),
481 m_scatterPhi(0.),
482 m_scatterTheta(0.),
487 m_sigma(0.),
488 m_sigmaMinus(0.),
489 m_sigmaPlus(0.),
491 m_status(0),
492 m_surface(nullptr),
494 m_weight(0.),
495 m_weight2(0.) {
496 // plane surface with normal along input direction and shift wrt position
497 const Amg::Vector3D offset = intersection.direction() * shift;
499 const CurvilinearUVT uvt(intersection.direction());
500 m_surface = new PlaneSurface(m_position, uvt);
501
502 m_intersection[FittedTrajectory] = std::make_optional<TrackSurfaceIntersection>(
503 m_position, intersection.direction(), 0.);
504}
const TrackSurfaceIntersection & intersection(ExtrapolationType type) const
@ materialDelimiter

◆ FitMeasurement() [6/11]

Trk::FitMeasurement::FitMeasurement ( const TrackStateOnSurface & TSOS)

Definition at line 507 of file FitMeasurement.cxx.

508 : m_afterCalo(false),
509 m_alignmentEffects(nullptr),
512 m_betaSquared(1.),
513 m_derivative(nullptr),
514 m_derivative2(nullptr),
515 m_derivativeRow(-1),
516 m_d0(0.),
517 m_energyLoss(0.),
520 m_hitIndex(0),
521 m_hitOnTrack(nullptr),
523 m_materialEffects(nullptr),
525 m_measurementBase(nullptr),
528 m_normal{},
529 m_numberDoF(0),
531 m_outlier(false),
533 m_perigee{},
535 m_position(TSOS.trackParameters()->position()),
536 m_qOverP(0.),
538 m_residual(0),
539 m_scaleFactor(0.),
540 m_scatterPhi(0.),
541 m_scatterTheta(0.),
546 m_sigma(0.),
547 m_sigmaMinus(0.),
548 m_sigmaPlus(0.),
550 m_status(0),
551 m_surface(&TSOS.trackParameters()->associatedSurface()),
552 m_type(hole),
553 m_weight(0.),
554 m_weight2(0.) {
555 // set type if necessary (hole = default)
556 if (TSOS.type(TrackStateOnSurface::Outlier)) {
557 m_outlier = true;
558 }
559 // else if (TSOS.type(TrackStateOnSurface::Perigee))
560 // {
561 // m_type = MSperigee;
562 // }
563}
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...

◆ FitMeasurement() [7/11]

Trk::FitMeasurement::FitMeasurement ( int hitIndex,
HitOnTrack * hitOnTrack,
const Amg::Vector3D & position,
double sigma,
double sigma2,
double sinStereo,
int status,
const Surface * surface,
MeasurementType type )

Definition at line 566 of file FitMeasurement.cxx.

570 : m_afterCalo(false),
571 m_alignmentEffects(nullptr),
574 m_betaSquared(1.),
575 m_derivative(nullptr),
576 m_derivative2(nullptr),
577 m_derivativeRow(-1),
578 m_d0(0.),
579 m_energyLoss(0.),
585 m_materialEffects(nullptr),
587 m_measurementBase(nullptr),
589 m_numberDoF(1),
591 m_outlier(false),
593 m_perigee{},
596 m_qOverP(0.),
598 m_residual(0),
599 m_scaleFactor(0.),
600 m_scatterPhi(0.),
601 m_scatterTheta(0.),
605 m_sigma(0.),
606 m_sigmaMinus(0.),
607 m_sigmaPlus(0.),
611 m_type(type),
612 m_weight(1.),
613 m_weight2(1.) {
614 // pixel has 2-D measurement
615 if (type == pixelCluster) {
616 m_numberDoF = 2;
617 }
618
619 // special treatment for projective trapezoidal chambers in the endcap
620 // take sensorDirection from stereo angle as I don't understand Surface axes
621 // in this case
622 m_normal = Amg::Vector3D(m_surface->transform().rotation().col(2));
623 if (m_numberDoF == 1 && std::abs(m_normal.z()) > 0.99 &&
624 std::abs(sinStereo) < 0.5) // end-cap projective geometry
625 {
626 const double cosStereo = std::sqrt(1. - sinStereo * sinStereo);
628 Amg::Vector3D(position(0) * cosStereo + position(1) * sinStereo,
629 -position(0) * sinStereo + position(1) * cosStereo, 0.);
631 } else // otherwise chambers have parallel strips with sensor direction =
632 // appropriate module axis
633 {
634 m_sensorDirection = Amg::Vector3D(m_surface->transform().rotation().col(1));
635 }
637
638 // add protection against junk input
639 if (sigma > 0.) {
640 m_weight = 1. / sigma;
641 } else {
642 m_numberDoF = 0;
643 m_outlier = true;
644 }
645 if (m_numberDoF == 2) {
646 if (sigma2 > 0.) {
647 m_weight2 = 1. / sigma2;
648 } else {
649 m_numberDoF = 0;
650 m_outlier = true;
651 }
652 }
653}
int status(void) const
MeasurementType type(void) const

◆ FitMeasurement() [8/11]

Trk::FitMeasurement::FitMeasurement ( int hitIndex,
HitOnTrack * hitOnTrack,
const Amg::Vector3D & position,
double sigma,
double signedDriftDistance,
double sinStereo,
const Surface * surface )

Definition at line 656 of file FitMeasurement.cxx.

660 : m_afterCalo(false),
661 m_alignmentEffects(nullptr),
664 m_betaSquared(1.),
665 m_derivative(nullptr),
666 m_derivative2(nullptr),
667 m_derivativeRow(-1),
668 m_d0(0.),
669 m_energyLoss(0.),
675 m_materialEffects(nullptr),
677 m_measurementBase(nullptr),
680 m_normal{},
681 m_numberDoF(1),
683 m_outlier(false),
685 m_perigee{},
688 m_qOverP(0.),
690 m_residual(0),
691 m_scaleFactor(0.),
692 m_scatterPhi(0.),
693 m_scatterTheta(0.),
697 m_sigma(0.),
698 m_sigmaMinus(0.),
699 m_sigmaPlus(0.),
701 m_status(0),
704 m_weight(1.),
705 m_weight2(1.) {
706 m_sensorDirection = Amg::Vector3D(m_surface->transform().rotation().col(2));
707
708 // add protection against junk input
709 if (sigma > 0.) {
710 m_weight = 1. / sigma;
711 } else {
712 m_numberDoF = 0;
713 m_outlier = true;
714 }
715}
double signedDriftDistance(void) const

◆ FitMeasurement() [9/11]

Trk::FitMeasurement::FitMeasurement ( const TrackParameters & perigee)

Definition at line 718 of file FitMeasurement.cxx.

719 : m_afterCalo(false),
720 m_alignmentEffects(nullptr),
723 m_betaSquared(1.),
724 m_derivative(nullptr),
725 m_derivative2(nullptr),
726 m_derivativeRow(-1),
727 m_d0(0.),
728 m_energyLoss(0.),
731 m_hitIndex(0),
732 m_hitOnTrack(nullptr),
734 m_materialEffects(nullptr),
736 m_measurementBase(nullptr),
739 m_normal{},
740 m_numberDoF(0),
742 m_outlier(true), // use base class for additional trackParameters at
743 // detector boundary
745 m_perigee{},
747 m_position(perigee.associatedSurface().center()),
748 m_qOverP(0.),
750 m_residual(0),
751 m_scaleFactor(0.),
752 m_scatterPhi(0.),
753 m_scatterTheta(0.),
758 m_sigma(0.),
759 m_sigmaMinus(0.),
760 m_sigmaPlus(0.),
762 m_status(0),
763 m_surface(&perigee.associatedSurface()),
765 m_weight(1.),
766 m_weight2(1.) {
767 // perigee axis needed for propagation of fitted parameters
768 m_sensorDirection = Amg::Vector3D(m_surface->transform().rotation().col(2));
769
770 // is this perigee to be used as a measurement?
771 if (perigee.covariance() && !m_outlier) {
772 // use as measurement
773 m_numberDoF = 5;
774 m_outlier = false;
775
776 // perigeeParameters as HepVector
777 Amg::Vector3D momentum = perigee.momentum();
778 double ptInv0 = 1. / momentum.perp();
779 const double cosPhi = ptInv0 * momentum(0);
780 const double sinPhi = ptInv0 * momentum(1);
781 const double cotTheta = ptInv0 * momentum(2);
782 ptInv0 *= perigee.charge();
783
785 parameters(0) = perigee.parameters()[Trk::d0];
786 parameters(1) = perigee.parameters()[Trk::z0];
787 parameters(2) = cosPhi;
788 parameters(3) = sinPhi;
789 parameters(4) = cotTheta;
790 parameters(5) = ptInv0;
791 m_perigee = Amg::VectorX(parameters);
792
793 // weight = inverse covariance
794 AmgSymMatrix(5) covariance(*perigee.covariance());
795
796 // convert to internal units (TeV) to avoid rounding
797 for (int row = 0; row < 5; ++row) {
798 covariance(4, row) *= Gaudi::Units::TeV;
799 covariance(row, 4) = covariance(4, row);
800 }
801 covariance(4, 4) *= Gaudi::Units::TeV;
802 covariance.inverse();
803
804 JacobianCotThetaPtToThetaP jacobian(cotTheta, ptInv0);
806 Amg::MatrixX(jacobian * covariance * jacobian.transpose());
807 }
808}
#define AmgSymMatrix(dim)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
@ perigeeParameters
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64

◆ FitMeasurement() [10/11]

Trk::FitMeasurement::FitMeasurement ( double d0,
const Amg::Vector3D & position,
double sigma )

Definition at line 811 of file FitMeasurement.cxx.

813 : m_afterCalo(false),
814 m_alignmentEffects(nullptr),
817 m_betaSquared(1.),
818 m_derivative(nullptr),
819 m_derivative2(nullptr),
820 m_derivativeRow(-1),
821 m_d0(d0), // FIXME:: kept for cache tag as d0 is never used anywhere
822 m_energyLoss(0.),
825 m_hitIndex(0),
826 m_hitOnTrack(nullptr),
828 m_materialEffects(nullptr),
830 m_measurementBase(nullptr),
833 m_normal{},
834 m_numberDoF(1),
836 m_outlier(false),
838 m_perigee{},
841 m_qOverP(0.),
843 m_residual(0),
844 m_scaleFactor(0.),
845 m_scatterPhi(0.),
846 m_scatterTheta(0.),
850 m_sensorDirection(Amg::Vector3D(0., 0., 1.)),
851 m_sigma(0.),
852 m_sigmaMinus(0.),
853 m_sigmaPlus(0.),
855 m_status(0),
856 m_surface(new const Trk::PerigeeSurface(position)),
858 m_weight(1. / sigma),
859 m_weight2(1.) {}
double d0(void) const

◆ ~FitMeasurement()

Trk::FitMeasurement::~FitMeasurement ( void )

Definition at line 862 of file FitMeasurement.cxx.

862 {
865 delete m_surface;
867 delete m_materialEffects;
868}

◆ FitMeasurement() [11/11]

Trk::FitMeasurement::FitMeasurement ( const FitMeasurement & )
private

Member Function Documentation

◆ afterCalo()

bool Trk::FitMeasurement::afterCalo ( void ) const
inline

Definition at line 243 of file FitMeasurement.h.

243 {
244 return m_afterCalo;
245}

◆ alignmentAngle() [1/2]

void Trk::FitMeasurement::alignmentAngle ( double value)
inline

Definition at line 251 of file FitMeasurement.h.

251 {
253}

◆ alignmentAngle() [2/2]

double Trk::FitMeasurement::alignmentAngle ( void ) const
inline

Definition at line 247 of file FitMeasurement.h.

247 {
248 return m_scatterPhi;
249}

◆ alignmentEffects()

const AlignmentEffectsOnTrack * Trk::FitMeasurement::alignmentEffects ( void ) const
inline

Definition at line 255 of file FitMeasurement.h.

256 {
257 return m_alignmentEffects;
258}

◆ alignmentOffset() [1/2]

void Trk::FitMeasurement::alignmentOffset ( double value)
inline

Definition at line 264 of file FitMeasurement.h.

264 {
266}

◆ alignmentOffset() [2/2]

double Trk::FitMeasurement::alignmentOffset ( void ) const
inline

Definition at line 260 of file FitMeasurement.h.

260 {
261 return m_scatterTheta;
262}

◆ alignmentParameter() [1/2]

void Trk::FitMeasurement::alignmentParameter ( unsigned value)
inline

Definition at line 272 of file FitMeasurement.h.

272 {
274}

◆ alignmentParameter() [2/2]

unsigned Trk::FitMeasurement::alignmentParameter ( void ) const
inline

Definition at line 268 of file FitMeasurement.h.

268 {
270}

◆ alignmentParameter2() [1/2]

void Trk::FitMeasurement::alignmentParameter2 ( unsigned value)
inline

Definition at line 280 of file FitMeasurement.h.

280 {
282}

◆ alignmentParameter2() [2/2]

unsigned Trk::FitMeasurement::alignmentParameter2 ( void ) const
inline

Definition at line 276 of file FitMeasurement.h.

276 {
278}

◆ d0()

double Trk::FitMeasurement::d0 ( void ) const
inline

Definition at line 316 of file FitMeasurement.h.

316 {
317 return m_d0;
318}

◆ derivative() [1/3]

void Trk::FitMeasurement::derivative ( double * pointer)
inline

Definition at line 292 of file FitMeasurement.h.

292 {
293 m_derivative = pointer;
294}

◆ derivative() [2/3]

double Trk::FitMeasurement::derivative ( int param) const
inline

Definition at line 284 of file FitMeasurement.h.

284 {
285 return *(m_derivative + param);
286}

◆ derivative() [3/3]

void Trk::FitMeasurement::derivative ( int param,
double value )
inline

Definition at line 288 of file FitMeasurement.h.

288 {
289 *(m_derivative + param) = value;
290}

◆ derivative2() [1/3]

void Trk::FitMeasurement::derivative2 ( double * pointer)
inline

Definition at line 304 of file FitMeasurement.h.

304 {
305 m_derivative2 = pointer;
306}

◆ derivative2() [2/3]

double Trk::FitMeasurement::derivative2 ( int param) const
inline

Definition at line 296 of file FitMeasurement.h.

296 {
297 return *(m_derivative2 + param);
298}

◆ derivative2() [3/3]

void Trk::FitMeasurement::derivative2 ( int param,
double value )
inline

Definition at line 300 of file FitMeasurement.h.

300 {
301 *(m_derivative2 + param) = value;
302}

◆ derivativeRow() [1/2]

void Trk::FitMeasurement::derivativeRow ( int row)
inline

Definition at line 312 of file FitMeasurement.h.

312 {
314}
row
Appending html table to final .html summary file.

◆ derivativeRow() [2/2]

int Trk::FitMeasurement::derivativeRow ( void ) const
inline

Definition at line 308 of file FitMeasurement.h.

308 {
309 return m_derivativeRow;
310}

◆ energyLoss()

double Trk::FitMeasurement::energyLoss ( void ) const
inline

Definition at line 320 of file FitMeasurement.h.

320 {
321 return m_energyLoss;
322}

◆ energyLossSigma()

double Trk::FitMeasurement::energyLossSigma ( void ) const
inline

Definition at line 324 of file FitMeasurement.h.

324 {
325 return m_sigma;
326}

◆ firstParameter() [1/2]

void Trk::FitMeasurement::firstParameter ( unsigned value)
inline

Definition at line 332 of file FitMeasurement.h.

332 {
334}

◆ firstParameter() [2/2]

unsigned Trk::FitMeasurement::firstParameter ( void ) const
inline

Definition at line 328 of file FitMeasurement.h.

328 {
329 return m_firstParameter;
330}

◆ flipDriftDirection()

void Trk::FitMeasurement::flipDriftDirection ( void )
inline

Definition at line 336 of file FitMeasurement.h.

336 {
337 if (m_type == driftCircle) {
340 }
341}

◆ hasIntersection()

bool Trk::FitMeasurement::hasIntersection ( ExtrapolationType type) const
inline

Definition at line 355 of file FitMeasurement.h.

355 {
356 return (bool)m_intersection[type];
357}

◆ hitIndex()

int Trk::FitMeasurement::hitIndex ( void ) const
inline

Definition at line 343 of file FitMeasurement.h.

343 {
344 return m_hitIndex;
345}

◆ hitOnTrack() [1/2]

HitOnTrack * Trk::FitMeasurement::hitOnTrack ( void )
inline

Definition at line 351 of file FitMeasurement.h.

351 {
352 return m_hitOnTrack;
353}

◆ hitOnTrack() [2/2]

const HitOnTrack * Trk::FitMeasurement::hitOnTrack ( void ) const
inline

Definition at line 347 of file FitMeasurement.h.

347 {
348 return m_hitOnTrack;
349}

◆ intersection() [1/2]

const TrackSurfaceIntersection & Trk::FitMeasurement::intersection ( ExtrapolationType type) const
inline

Definition at line 359 of file FitMeasurement.h.

360 {
361 return *m_intersection[type];
362}

◆ intersection() [2/2]

void Trk::FitMeasurement::intersection ( ExtrapolationType type,
const std::optional< TrackSurfaceIntersection > & value )

Definition at line 870 of file FitMeasurement.cxx.

871 {
873}

◆ is2Dimensional()

bool Trk::FitMeasurement::is2Dimensional ( void ) const
inline

Definition at line 423 of file FitMeasurement.h.

423 {
424 return (m_numberDoF == 2);
425}

◆ isAlignment()

bool Trk::FitMeasurement::isAlignment ( void ) const
inline

Definition at line 364 of file FitMeasurement.h.

364 {
365 return (m_type == alignment);
366}

◆ isCluster()

bool Trk::FitMeasurement::isCluster ( void ) const
inline

Definition at line 368 of file FitMeasurement.h.

368 {
369 return (m_type == pixelCluster || m_type == stripCluster ||
371}

◆ isDrift()

bool Trk::FitMeasurement::isDrift ( void ) const
inline

Definition at line 373 of file FitMeasurement.h.

373 {
374 return (m_type == driftCircle);
375}

◆ isEnergyDeposit()

bool Trk::FitMeasurement::isEnergyDeposit ( void ) const
inline

Definition at line 377 of file FitMeasurement.h.

377 {
378 return (m_type == energyDeposit);
379}

◆ isFlipped()

bool Trk::FitMeasurement::isFlipped ( void ) const
inline

Definition at line 381 of file FitMeasurement.h.

381 {
383}

◆ isMaterialDelimiter()

bool Trk::FitMeasurement::isMaterialDelimiter ( void ) const
inline

Definition at line 385 of file FitMeasurement.h.

385 {
386 return (m_type == materialDelimiter);
387}

◆ isOutlier()

bool Trk::FitMeasurement::isOutlier ( void ) const
inline

Definition at line 389 of file FitMeasurement.h.

389 {
390 return m_outlier;
391}

◆ isPassive()

bool Trk::FitMeasurement::isPassive ( void ) const
inline

Definition at line 393 of file FitMeasurement.h.

393 {
394 return (m_type > bremPoint);
395}

◆ isPerigee()

bool Trk::FitMeasurement::isPerigee ( void ) const
inline

Definition at line 397 of file FitMeasurement.h.

397 {
398 return (m_type == perigeeParameters);
399}

◆ isPositionMeasurement()

bool Trk::FitMeasurement::isPositionMeasurement ( void ) const
inline

Definition at line 401 of file FitMeasurement.h.

401 {
402 return (m_type < barrelScatterer);
403}

◆ isPseudo()

bool Trk::FitMeasurement::isPseudo ( void ) const
inline

Definition at line 405 of file FitMeasurement.h.

405 {
406 return (m_type == pseudoMeasurement);
407}

◆ isScatterer()

bool Trk::FitMeasurement::isScatterer ( void ) const
inline

Definition at line 409 of file FitMeasurement.h.

409 {
410 return (m_type == barrelScatterer || m_type == endcapScatterer ||
413}
@ endcapInert
@ barrelInert

◆ isTrapezoidCluster()

bool Trk::FitMeasurement::isTrapezoidCluster ( void ) const
inline

Definition at line 415 of file FitMeasurement.h.

415 {
416 return (m_type == trapezoidCluster);
417}

◆ isVertex()

bool Trk::FitMeasurement::isVertex ( void ) const
inline

Definition at line 419 of file FitMeasurement.h.

419 {
420 return (m_type == vertex || m_type == transverseVertex);
421}

◆ lastParameter() [1/2]

void Trk::FitMeasurement::lastParameter ( unsigned value,
bool afterCalo = false )
inline

Definition at line 431 of file FitMeasurement.h.

431 {
434}
bool afterCalo(void) const

◆ lastParameter() [2/2]

unsigned Trk::FitMeasurement::lastParameter ( void ) const
inline

Definition at line 427 of file FitMeasurement.h.

427 {
428 return m_lastParameter;
429}

◆ materialEffects()

const MaterialEffectsBase * Trk::FitMeasurement::materialEffects ( void ) const
inline

Definition at line 436 of file FitMeasurement.h.

436 {
437 return m_materialEffects;
438}

◆ measurementBase()

const MeasurementBase * Trk::FitMeasurement::measurementBase ( void ) const
inline

Definition at line 440 of file FitMeasurement.h.

440 {
441 return m_measurementBase;
442}

◆ minEnergyDeposit()

double Trk::FitMeasurement::minEnergyDeposit ( void ) const
inline

Definition at line 444 of file FitMeasurement.h.

444 {
445 return m_minEnergyDeposit;
446}

◆ minimizationDirection() [1/2]

void Trk::FitMeasurement::minimizationDirection ( const Amg::Vector3D & value)
inline

Definition at line 452 of file FitMeasurement.h.

452 {
454}

◆ minimizationDirection() [2/2]

const Amg::Vector3D & Trk::FitMeasurement::minimizationDirection ( void ) const
inline

Definition at line 448 of file FitMeasurement.h.

448 {
450}

◆ normal()

const Amg::Vector3D & Trk::FitMeasurement::normal ( void ) const
inline

Definition at line 456 of file FitMeasurement.h.

456 {
457 return m_normal;
458}

◆ numberDoF() [1/2]

void Trk::FitMeasurement::numberDoF ( int value)
inline

Definition at line 466 of file FitMeasurement.h.

466 {
468}

◆ numberDoF() [2/2]

int Trk::FitMeasurement::numberDoF ( void ) const
inline

Definition at line 460 of file FitMeasurement.h.

460 {
461 if (m_outlier)
462 return 0;
463 return m_numberDoF;
464}

◆ numericalDerivative()

bool Trk::FitMeasurement::numericalDerivative ( void ) const
inline

Definition at line 470 of file FitMeasurement.h.

470 {
472}

◆ operator=()

FitMeasurement & Trk::FitMeasurement::operator= ( const FitMeasurement & )
private

◆ perigee()

const Amg::VectorX & Trk::FitMeasurement::perigee ( void ) const
inline

Definition at line 474 of file FitMeasurement.h.

474 {
475 return m_perigee;
476}

◆ perigeeWeight()

const Amg::MatrixX & Trk::FitMeasurement::perigeeWeight ( void ) const
inline

Definition at line 478 of file FitMeasurement.h.

478 {
479 return m_perigeeWeight;
480}

◆ position()

const Amg::Vector3D & Trk::FitMeasurement::position ( void ) const
inline

Definition at line 482 of file FitMeasurement.h.

482 {
483 return m_position;
484}

◆ print()

void Trk::FitMeasurement::print ( MsgStream & log) const

Definition at line 882 of file FitMeasurement.cxx.

882 {
884 log << m_type << std::setiosflags(std::ios::fixed);
885 if (numberDoF()) {
886 log << std::setw(9) << std::setprecision(3) << *m_residual;
887 if (m_numberDoF > 1) {
888 log << std::setw(9) << std::setprecision(3) << *(m_residual + 1);
889 } else if (m_alignmentParameter2) {
890 log << " A" << std::setw(1) << m_alignmentParameter << " A"
891 << std::setw(1) << m_alignmentParameter2 << " ";
892 } else if (m_alignmentParameter) {
893 log << " A" << std::setw(1) << m_alignmentParameter << " ";
894 } else {
895 log << " ";
896 }
897 } else {
898 if (isPositionMeasurement()) {
899 log << std::setw(9) << std::setprecision(3) << *m_residual << " outlier ";
900 } else {
901 log << " ";
902 }
905 }
906 log << std::setw(10) << std::setprecision(1) << position.perp()
907 << std::setw(9) << std::setprecision(4) << position.phi() << std::setw(10)
908 << std::setprecision(1) << position(2);
909
910 if (isPositionMeasurement()) {
911 log << std::setw(13) << std::setprecision(3) << 1. / m_weight;
912 if (m_numberDoF == 2) {
913 log << std::setw(8) << std::setprecision(3) << 1. / m_weight2;
914 } else if (isDrift()) {
915 log << "(" << std::setw(7) << std::setprecision(3)
916 << m_signedDriftDistance << ")";
917 } else {
918 log << " ";
919 }
920 } else if (isScatterer()) {
921 log << std::setw(33) << std::setprecision(3)
922 << 1. / std::abs(m_qOverP * Gaudi::Units::GeV) << std::setw(12)
923 << std::setprecision(4) << m_energyLoss / Gaudi::Units::GeV;
925 const double totScat = sqrt(m_scatteringAngle * std::abs(m_qOverP) *
926 m_scatteringAngle * std::abs(m_qOverP) +
928 log << std::setw(16) << std::setprecision(6) << totScat << std::setw(13)
929 << std::setprecision(3) << m_radiationThickness;
930 }
931 } else if (isAlignment()) {
932 log << std::setw(13) << std::setprecision(3) << 1. / m_weight;
933 if (m_numberDoF == 2) {
934 log << std::setw(8) << std::setprecision(3) << 1. / m_weight2;
935 }
936 } else if (isEnergyDeposit()) {
937 if (m_numberDoF) {
938 log << std::setw(13) << std::setprecision(3)
939 << 1. / (m_weight * Gaudi::Units::GeV) << std::setw(32)
940 << std::setprecision(4) << m_energyLoss / Gaudi::Units::GeV;
941 } else {
942 log << std::setw(33) << std::setprecision(3)
943 << 1. / std::abs(m_qOverP * Gaudi::Units::GeV);
944 log << std::setw(12) << std::setprecision(4)
945 << m_energyLoss / Gaudi::Units::GeV;
946 }
947 }
948 log << std::endl;
949}
bool isPositionMeasurement(void) const
bool isScatterer(void) const
bool isDrift(void) const
bool isAlignment(void) const
bool isEnergyDeposit(void) const
int numberDoF(void) const

◆ printHeading()

void Trk::FitMeasurement::printHeading ( MsgStream & log)
static

Definition at line 875 of file FitMeasurement.cxx.

875 {
876 log << " residual 1........2 r phi z"
877 << " sigma 1.......2 energy energyLoss scatteringAngle "
878 "integral X0"
879 << std::endl;
880}

◆ qOverP() [1/2]

void Trk::FitMeasurement::qOverP ( double value)

Definition at line 951 of file FitMeasurement.cxx.

951 {
952 m_qOverP = value;
953
954 // for scatterer measurements: correct the weight for the local momentum value
957 m_scatteringAngle > 0.) {
958 const double pSquare = 1. / (value * value);
959 m_betaSquared = pSquare / (pSquare + m_particleMassSquared);
960 m_weight = std::sqrt(m_betaSquared * pSquare) / m_scatteringAngle;
961 }
962
964 if (m_weight > 0) {
965 m_weight = sqrt(1. / (1. / m_weight / m_weight +
967 } else {
969 }
970 }
971}

◆ qOverP() [2/2]

double Trk::FitMeasurement::qOverP ( void ) const
inline

Definition at line 486 of file FitMeasurement.h.

486 {
487 return m_qOverP;
488}

◆ radiationThickness()

double Trk::FitMeasurement::radiationThickness ( void ) const
inline

Definition at line 490 of file FitMeasurement.h.

490 {
492}

◆ residual() [1/3]

void Trk::FitMeasurement::residual ( double value)
inline

Definition at line 498 of file FitMeasurement.h.

498 {
499 *m_residual = value;
500}

◆ residual() [2/3]

void Trk::FitMeasurement::residual ( std::vector< double >::iterator pointer)
inline

Definition at line 502 of file FitMeasurement.h.

502 {
503 m_residual = pointer;
504}

◆ residual() [3/3]

double Trk::FitMeasurement::residual ( void ) const
inline

Definition at line 494 of file FitMeasurement.h.

494 {
495 return *m_residual;
496}

◆ residual2() [1/2]

void Trk::FitMeasurement::residual2 ( double value)
inline

Definition at line 510 of file FitMeasurement.h.

510 {
511 *(m_residual + 1) = value;
512}

◆ residual2() [2/2]

double Trk::FitMeasurement::residual2 ( void ) const
inline

Definition at line 506 of file FitMeasurement.h.

506 {
507 return *(m_residual + 1);
508}

◆ scattererPhi() [1/2]

void Trk::FitMeasurement::scattererPhi ( double value)
inline

Definition at line 518 of file FitMeasurement.h.

518 {
520}

◆ scattererPhi() [2/2]

double Trk::FitMeasurement::scattererPhi ( void ) const
inline

Definition at line 514 of file FitMeasurement.h.

514 {
515 return m_scatterPhi;
516}

◆ scattererTheta() [1/2]

void Trk::FitMeasurement::scattererTheta ( double value)
inline

Definition at line 526 of file FitMeasurement.h.

526 {
528}

◆ scattererTheta() [2/2]

double Trk::FitMeasurement::scattererTheta ( void ) const
inline

Definition at line 522 of file FitMeasurement.h.

522 {
523 return m_scatterTheta;
524}

◆ scatteringAngle()

void Trk::FitMeasurement::scatteringAngle ( double angle,
double totalRadiationThickness )

Definition at line 973 of file FitMeasurement.cxx.

974 {
975 // update the m_scatteringAngleOffSet at initialisation
976
978 m_qOverP != 0.) {
979 //
980 const double angle_iPat = angle * std::abs(m_qOverP);
981
982 // std::cout << " scatteringAngle type " << m_type << " angle_iPat "
983 // << angle_iPat << " m_scatteringAngleOffSet " <<
984 // m_scatteringAngleOffSet;
985
986 if (angle_iPat < m_scatteringAngleOffSet) {
989 angle_iPat * angle_iPat);
990 } else {
992 }
993 // std::cout << " corrected m_scatteringAngleOffSet " <<
994 // m_scatteringAngleOffSet << std::endl;
995 }
996
998 m_radiationThickness = totalRadiationThickness;
999 if (m_type == barrelInert) {
1001 } else if (m_type == endcapInert) {
1003 }
1004
1005 if (m_qOverP != 0.) {
1006 const double pSquare = 1. / (m_qOverP * m_qOverP);
1007 m_betaSquared = pSquare / (pSquare + m_particleMassSquared);
1008 m_weight = std::sqrt(m_betaSquared * pSquare) / m_scatteringAngle;
1010 if (m_weight > 0) {
1011 m_weight =
1012 sqrt(1. / (1. / m_weight / m_weight +
1014 } else {
1016 }
1017 }
1018 }
1019}
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)

◆ sensorDirection()

const Amg::Vector3D & Trk::FitMeasurement::sensorDirection ( void ) const
inline

Definition at line 530 of file FitMeasurement.h.

530 {
531 return m_sensorDirection;
532}

◆ setEnergyGain()

void Trk::FitMeasurement::setEnergyGain ( void )
inline

Definition at line 534 of file FitMeasurement.h.

534 {
535 m_energyLoss = -fabs(m_energyLoss);
536}

◆ setMaterialEffectsOwner()

void Trk::FitMeasurement::setMaterialEffectsOwner ( void )
inline

Definition at line 538 of file FitMeasurement.h.

538 {
540}

◆ setNumericalDerivative()

void Trk::FitMeasurement::setNumericalDerivative ( void )
inline

Definition at line 542 of file FitMeasurement.h.

542 {
544}

◆ setOutlier()

void Trk::FitMeasurement::setOutlier ( void )
inline

Definition at line 546 of file FitMeasurement.h.

546 {
547 m_numberDoF = 0;
548 m_outlier = true;
549 m_weight = 1.0;
550 m_weight2 = 1.0;
551}

◆ setSigma()

void Trk::FitMeasurement::setSigma ( void )
inline

Definition at line 553 of file FitMeasurement.h.

553 {
554 m_weight = 1. / m_sigma;
555}

◆ setSigmaMinus()

void Trk::FitMeasurement::setSigmaMinus ( void )
inline

Definition at line 557 of file FitMeasurement.h.

557 {
558 m_weight = 1. / m_sigmaMinus;
559}

◆ setSigmaPlus()

void Trk::FitMeasurement::setSigmaPlus ( void )
inline

Definition at line 561 of file FitMeasurement.h.

561 {
562 m_weight = 1. / m_sigmaPlus;
563}

◆ setSigmaSymmetric()

void Trk::FitMeasurement::setSigmaSymmetric ( void )

Definition at line 1021 of file FitMeasurement.cxx.

1021 {
1022 const double sigma = std::sqrt(
1024 m_weight = 1. / sigma;
1025}

◆ sigma()

double Trk::FitMeasurement::sigma ( void ) const
inline

Definition at line 565 of file FitMeasurement.h.

565 {
566 if (!m_weight)
567 return 0;
568 return 1. / m_weight;
569}

◆ sigma2()

double Trk::FitMeasurement::sigma2 ( void ) const
inline

Definition at line 571 of file FitMeasurement.h.

571 {
572 if (!m_weight2)
573 return 0;
574 return 1. / m_weight2;
575}

◆ signedDriftDistance()

double Trk::FitMeasurement::signedDriftDistance ( void ) const
inline

Definition at line 577 of file FitMeasurement.h.

577 {
579}

◆ status()

int Trk::FitMeasurement::status ( void ) const
inline

Definition at line 581 of file FitMeasurement.h.

581 {
582 return m_status;
583}

◆ surface()

const Surface * Trk::FitMeasurement::surface ( void ) const
inline

Definition at line 585 of file FitMeasurement.h.

585 {
586 return m_surface;
587}

◆ type()

MeasurementType Trk::FitMeasurement::type ( void ) const
inline

Definition at line 589 of file FitMeasurement.h.

589 {
590 return m_type;
591}

◆ unsetOutlier()

void Trk::FitMeasurement::unsetOutlier ( void )
inline

Definition at line 593 of file FitMeasurement.h.

593 {
594 m_outlier = false;
595}

◆ weight()

double Trk::FitMeasurement::weight ( void ) const
inline

Definition at line 597 of file FitMeasurement.h.

597 {
598 return m_weight;
599}

◆ weight2()

double Trk::FitMeasurement::weight2 ( void ) const
inline

Definition at line 601 of file FitMeasurement.h.

601 {
602 return m_weight2;
603}

Member Data Documentation

◆ m_afterCalo

bool Trk::FitMeasurement::m_afterCalo
private

Definition at line 190 of file FitMeasurement.h.

◆ m_alignmentEffects

const AlignmentEffectsOnTrack* Trk::FitMeasurement::m_alignmentEffects
private

Definition at line 191 of file FitMeasurement.h.

◆ m_alignmentParameter

unsigned Trk::FitMeasurement::m_alignmentParameter
private

Definition at line 192 of file FitMeasurement.h.

◆ m_alignmentParameter2

unsigned Trk::FitMeasurement::m_alignmentParameter2
private

Definition at line 193 of file FitMeasurement.h.

◆ m_betaSquared

double Trk::FitMeasurement::m_betaSquared
private

Definition at line 194 of file FitMeasurement.h.

◆ m_d0

double Trk::FitMeasurement::m_d0
private

Definition at line 198 of file FitMeasurement.h.

◆ m_derivative

double* Trk::FitMeasurement::m_derivative
private

Definition at line 195 of file FitMeasurement.h.

◆ m_derivative2

double* Trk::FitMeasurement::m_derivative2
private

Definition at line 196 of file FitMeasurement.h.

◆ m_derivativeRow

int Trk::FitMeasurement::m_derivativeRow
private

Definition at line 197 of file FitMeasurement.h.

◆ m_energyLoss

double Trk::FitMeasurement::m_energyLoss
private

Definition at line 199 of file FitMeasurement.h.

◆ m_firstParameter

unsigned Trk::FitMeasurement::m_firstParameter
private

Definition at line 200 of file FitMeasurement.h.

◆ m_flippedDriftDistance

bool Trk::FitMeasurement::m_flippedDriftDistance
private

Definition at line 201 of file FitMeasurement.h.

◆ m_hitIndex

int Trk::FitMeasurement::m_hitIndex
private

Definition at line 202 of file FitMeasurement.h.

◆ m_hitOnTrack

HitOnTrack* Trk::FitMeasurement::m_hitOnTrack
private

Definition at line 203 of file FitMeasurement.h.

◆ m_intersection

std::array<std::optional<TrackSurfaceIntersection>, ExtrapolationTypes> Trk::FitMeasurement::m_intersection
private

Definition at line 205 of file FitMeasurement.h.

◆ m_lastParameter

unsigned Trk::FitMeasurement::m_lastParameter
private

Definition at line 206 of file FitMeasurement.h.

◆ m_materialEffects

const MaterialEffectsBase* Trk::FitMeasurement::m_materialEffects
private

Definition at line 207 of file FitMeasurement.h.

◆ m_materialEffectsOwner

bool Trk::FitMeasurement::m_materialEffectsOwner
private

Definition at line 208 of file FitMeasurement.h.

◆ m_measurementBase

const MeasurementBase* Trk::FitMeasurement::m_measurementBase
private

Definition at line 209 of file FitMeasurement.h.

◆ m_minEnergyDeposit

double Trk::FitMeasurement::m_minEnergyDeposit
private

Definition at line 210 of file FitMeasurement.h.

◆ m_minimizationDirection

Amg::Vector3D Trk::FitMeasurement::m_minimizationDirection
private

Definition at line 211 of file FitMeasurement.h.

◆ m_normal

Amg::Vector3D Trk::FitMeasurement::m_normal
private

Definition at line 212 of file FitMeasurement.h.

◆ m_numberDoF

int Trk::FitMeasurement::m_numberDoF
private

Definition at line 213 of file FitMeasurement.h.

◆ m_numericalDerivative

bool Trk::FitMeasurement::m_numericalDerivative
private

Definition at line 214 of file FitMeasurement.h.

◆ m_outlier

bool Trk::FitMeasurement::m_outlier
private

Definition at line 215 of file FitMeasurement.h.

◆ m_particleMassSquared

double Trk::FitMeasurement::m_particleMassSquared
private

Definition at line 216 of file FitMeasurement.h.

◆ m_perigee

Amg::VectorX Trk::FitMeasurement::m_perigee
private

Definition at line 217 of file FitMeasurement.h.

◆ m_perigeeWeight

Amg::MatrixX Trk::FitMeasurement::m_perigeeWeight
private

Definition at line 218 of file FitMeasurement.h.

◆ m_position

Amg::Vector3D Trk::FitMeasurement::m_position
private

Definition at line 219 of file FitMeasurement.h.

◆ m_qOverP

double Trk::FitMeasurement::m_qOverP
private

Definition at line 220 of file FitMeasurement.h.

◆ m_radiationThickness

double Trk::FitMeasurement::m_radiationThickness
private

Definition at line 221 of file FitMeasurement.h.

◆ m_residual

std::vector<double>::iterator Trk::FitMeasurement::m_residual
private

Definition at line 222 of file FitMeasurement.h.

◆ m_scaleFactor

double Trk::FitMeasurement::m_scaleFactor
private

Definition at line 223 of file FitMeasurement.h.

◆ m_scatteringAngle

double Trk::FitMeasurement::m_scatteringAngle
private

Definition at line 226 of file FitMeasurement.h.

◆ m_scatteringAngleOffSet

double Trk::FitMeasurement::m_scatteringAngleOffSet
private

Definition at line 227 of file FitMeasurement.h.

◆ m_scatterPhi

double Trk::FitMeasurement::m_scatterPhi
private

Definition at line 224 of file FitMeasurement.h.

◆ m_scatterTheta

double Trk::FitMeasurement::m_scatterTheta
private

Definition at line 225 of file FitMeasurement.h.

◆ m_secondResidual

double Trk::FitMeasurement::m_secondResidual
private

Definition at line 228 of file FitMeasurement.h.

◆ m_sensorDirection

Amg::Vector3D Trk::FitMeasurement::m_sensorDirection
private

Definition at line 229 of file FitMeasurement.h.

◆ m_sigma

double Trk::FitMeasurement::m_sigma
private

Definition at line 230 of file FitMeasurement.h.

◆ m_sigmaMinus

double Trk::FitMeasurement::m_sigmaMinus
private

Definition at line 231 of file FitMeasurement.h.

◆ m_sigmaPlus

double Trk::FitMeasurement::m_sigmaPlus
private

Definition at line 232 of file FitMeasurement.h.

◆ m_signedDriftDistance

double Trk::FitMeasurement::m_signedDriftDistance
private

Definition at line 233 of file FitMeasurement.h.

◆ m_status

int Trk::FitMeasurement::m_status
private

Definition at line 234 of file FitMeasurement.h.

◆ m_surface

const Surface* Trk::FitMeasurement::m_surface
private

Definition at line 235 of file FitMeasurement.h.

◆ m_type

MeasurementType Trk::FitMeasurement::m_type
private

Definition at line 236 of file FitMeasurement.h.

◆ m_weight

double Trk::FitMeasurement::m_weight
private

Definition at line 237 of file FitMeasurement.h.

◆ m_weight2

double Trk::FitMeasurement::m_weight2
private

Definition at line 238 of file FitMeasurement.h.


The documentation for this class was generated from the following files: