ATLAS Offline Software
Loading...
Searching...
No Matches
TrkObjToString.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include "VP1Base/VP1Msg.h"
7
8//Parameters
10
11//DetectorElements
18
19//MeasurementBase
21
22//ROTs
35
36
37//CompetingROTs
39
40//Pseudo Measurements
42
43//Segments
44#include "TrkSegment/Segment.h"
45
46// PRDs
55
56//TrkMaterialOnTrack
62
87
90{
91 if (dynamic_cast<const Trk::RIO_OnTrack*>(meas)){
92 // ROTS
93 if (dynamic_cast<const InDet::PixelClusterOnTrack*> (meas))
94 {return TrkObjToString::Pixel;}
95 if (dynamic_cast<const InDet::SCT_ClusterOnTrack*> (meas))
96 {return TrkObjToString::SCT;}
97 if (dynamic_cast<const InDet::TRT_DriftCircleOnTrack*> (meas))
98 {return TrkObjToString::TRT;}
99 if (dynamic_cast<const Muon::CscClusterOnTrack*> (meas))
100 {return TrkObjToString::CSC;}
101 if (dynamic_cast<const Muon::RpcClusterOnTrack*> (meas))
102 {return TrkObjToString::RPC;}
103 if (dynamic_cast<const Muon::TgcClusterOnTrack*> (meas))
104 {return TrkObjToString::TGC;}
105 if (dynamic_cast<const Muon::MdtDriftCircleOnTrack*> (meas))
106 {return TrkObjToString::MDT;}
107 if (dynamic_cast<const Muon::MMClusterOnTrack*> (meas))
108 {return TrkObjToString::MM;}
109 if (dynamic_cast<const Muon::sTgcClusterOnTrack*> (meas))
110 {return TrkObjToString::sTGC;}
111 } else {
112 // Other types
113 if (dynamic_cast<const Trk::CompetingRIOsOnTrack*>(meas) )
115 if (dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(meas) )
117 if (dynamic_cast<const Trk::Segment*>(meas) )
119 }
120 return TrkObjToString::Unknown; // Couldn't cast ROT to anything known
121}
122
125 const InDetDD::SiDetectorElement* siDetEl = dynamic_cast<const InDetDD::SiDetectorElement*> (detEl);
126 if (siDetEl){
127 if (siDetEl->isPixel()) {return TrkObjToString::Pixel;}
128 if (siDetEl->isSCT()) {return TrkObjToString::Pixel;}
129 }
130 if (dynamic_cast<const InDetDD::TRT_BaseElement*> (detEl))
131 {return TrkObjToString::TRT;}
132
133 if (dynamic_cast<const MuonGM::CscReadoutElement*> (detEl))
134 {return TrkObjToString::CSC;}
135 if (dynamic_cast<const MuonGM::RpcReadoutElement*> (detEl))
136 {return TrkObjToString::RPC;}
137 if (dynamic_cast<const MuonGM::TgcReadoutElement*> (detEl))
138 {return TrkObjToString::TGC;}
139 if (dynamic_cast<const MuonGM::MdtReadoutElement*> (detEl))
140 {return TrkObjToString::MDT;}
141 return TrkObjToString::Unknown; // Couldn't cast ROT to anything known
142}
143
145{
146 MeasurementType tmptype = type(&mb);
147 std::string tmpname = typeName( tmptype );
148
149 if (tmptype==CompetingROT) {
150 const Trk::CompetingRIOsOnTrack* crot = dynamic_cast<const Trk::CompetingRIOsOnTrack *>(&mb);
151 if (!crot) return {"Error!"};
152 tmpname+=" [";
153 switch (type (&crot->rioOnTrack(crot->indexOfMaxAssignProb() ) ) ){
154 case Pixel: { tmpname+="Pix"; break; }
155 case SCT: { tmpname+="SCT"; break; }
156 case TRT: { tmpname+="TRT"; break; }
157 case CSC: { tmpname+="CSC"; break; }
158 case RPC: { tmpname+="RPC"; break; }
159 case TGC: { tmpname+="TGC"; break; }
160 case MDT: { tmpname+="MDT"; break; }
161 case MM: { tmpname+="MM"; break; }
162 case sTGC: { tmpname+="sTGC"; break; }
163 case Hole:
164 case CompetingROT:
166 case Segment:
167 case Unknown:
168 {
169 tmpname+="Error!";
170 break;
171 }
172 }
173 tmpname+="]";
174 }
175
176 return {tmpname.c_str()};
177}
178
179QString
181 QString name;
182 if (tp.covariance()) name="Measured";
183 if (dynamic_cast<const Trk::Perigee*>(&tp)) name+="Perigee";
184 if (dynamic_cast<const Trk::AtaPlane*>(&tp)) name+="AtaPlane";
185 if (dynamic_cast<const Trk::AtaCylinder*>(&tp)) name+="AtaCylinder";
186 if (dynamic_cast<const Trk::AtaStraightLine*>(&tp)) name+="AtaStraightLine";
187 if (dynamic_cast<const Trk::AtaDisc*>(&tp)) name="AtaDisc";
188 if (dynamic_cast<const Trk::AtaCone*>(&tp)) name="AtaCone";
189 if (dynamic_cast<const Trk::CurvilinearParameters*>(&tp)) name="Curvilinear";
190 if (name=="") std::cout<<"Unknown type of parameter"<<tp<<std::endl;
191 return name+=QString(" Parameters");
192}
193
194QString
196 QString name("Unknown");
197 if (dynamic_cast<const Trk::MaterialEffectsOnTrack*>(&mb)) name="MaterialEffectsOnTrack";
198 if (dynamic_cast<const Trk::EstimatedBremOnTrack*>(&mb)) name="EstimatedBremOnTrack";
199 return name;
200}
201
202QString
204 return {"FitQuality"};
205}
206
207QString
209{
210 MeasurementType tmptype = type(&mb);
211 QString info;
212 switch (tmptype){
213 case Pixel:
214 case SCT:
215 case TRT:
216 case CSC:
217 case RPC:
218 case TGC:
219 case MDT:
220 case MM:
221 case sTGC:
222 case Hole:
223 {
224 addBaseROTInfo(info,mb);
225 break;
226 }
227 case CompetingROT:
228 {
229 info+="Contains ";
230 const Trk::CompetingRIOsOnTrack* tmpCROT = dynamic_cast<const Trk::CompetingRIOsOnTrack*>(&mb);
231 if (tmpCROT){
232 info+=QString::number(tmpCROT->numberOfContainedROTs());
233 info+=QString::number(tmpCROT->numberOfContainedROTs());
234 info+=" ROTs";
235 }
236 break;
237 }
239 case Segment:
240 case Unknown:
241 {
242 info+="Not yet implemented.";
243 break;
244 }
245 }
246 return info;
247}
248
249void
251{
252 info.append("Local: (");
253 info.append( QString::number(mb.localParameters ()[Trk::loc1] ) );
254 if (mb.localParameters ().dimension()==2 ) {
255 info.append(", ");
256 info.append( QString::number(mb.localParameters ()[Trk::loc2] ) );
257 }
258 info.append(").");
259}
260
261QString
263 const Amg::Vector2D & locPos= tp.localPosition ();
264 QString info ("Local: (");
265 info+= QString::number(locPos[Trk::loc1] );
266 info+=", ";
267 info+= QString::number(locPos[Trk::loc2] );
268 info+=") [CLHEP::mm], P=";
269 info+=VP1Msg::str(tp.momentum()/CLHEP::MeV);
270 info+=" [MeV], |P|="+VP1Msg::str(tp.momentum().mag()/CLHEP::GeV);
271 info+=" [GeV], |Pt|="+VP1Msg::str(tp.momentum().perp()/CLHEP::GeV);
272 info+=" [GeV]";
273
274 return info;
275}
276
277QString
279 QString info;
280
281 const Trk::MaterialEffectsOnTrack* meot = dynamic_cast<const Trk::MaterialEffectsOnTrack*>(&me);
282 const Trk::EstimatedBremOnTrack* ebot = dynamic_cast<const Trk::EstimatedBremOnTrack*>(&me);
283 if (meot) {
284 if (meot->energyLoss())
285 {
286 info.append("Energy loss [MeV]: ");
287 if (meot->energyLoss()->sigmaPlusDeltaE()==meot->energyLoss()->sigmaMinusDeltaE()){
288 info+=QString::number(meot->energyLoss()->deltaE()/CLHEP::MeV);
289 info.append(" +/- ");
290 info+=QString::number(meot->energyLoss()->sigmaPlusDeltaE()/CLHEP::MeV);
291 } else {
292 info+=QString::number(meot->energyLoss()->deltaE()/CLHEP::MeV);
293 info.append(" +/- ");
294 info+=QString::number(meot->energyLoss()->sigmaPlusDeltaE()/CLHEP::MeV);
295 info+="/";
296 info+=QString::number(meot->energyLoss()->sigmaMinusDeltaE()/CLHEP::MeV);
297 }
298 }
299 if (meot->scatteringAngles())
300 {
301 if (meot->energyLoss()) info.append(", ");
302 info.append("Delta phi: (");
303 info+=QString::number(meot->scatteringAngles()->deltaPhi());
304 info.append(" +/- ");
305 info+=QString::number(meot->scatteringAngles()->sigmaDeltaPhi());
306 info.append("), Delta theta: (");
307 info+=QString::number(meot->scatteringAngles()->deltaTheta());
308 info.append(" +/- ");
309 info+=QString::number(meot->scatteringAngles()->sigmaDeltaTheta());
310 info.append(")");
311 }
312 } else if (ebot) {
313 info="Not yet implemented.";
314 } else {
315 info="Not known!";
316 }
317 return info;
318}
319
320QString
322 QString info("(Chi^2, DOF)=(");
323 info+=QString::number(fqos.chiSquared());
324 info.append(", ");
325 info+=QString::number(fqos.numberDoF());
326 info.append(")");
327 return info;
328}
329
330QStringList
332{
333 const Amg::Vector2D & locPos= tp.localPosition ();
334 QStringList info ("Local");
335 info+= "("+QString::number(locPos[Trk::loc1] ) +", "+ QString::number(locPos[Trk::loc2] )+") [CLHEP::mm]";
336 info+="Momentum";
337 info+=VP1Msg::str(tp.momentum()/CLHEP::MeV)+" [MeV], |P|=("+VP1Msg::str(tp.momentum().mag()/CLHEP::GeV)+") [GeV], |Pt|=("
338 +VP1Msg::str(tp.momentum().perp()/CLHEP::GeV)+") [GeV]";
339 info+="Parameters";
340 QString parameters="(";
341 for (int i = 0; i< tp.parameters().rows(); i++){
342 parameters+=VP1Msg::str((tp.parameters())[i]);
343 if (i<(tp.parameters().rows()-1)) parameters+=", ";
344 }
345 info+=parameters+")";
346 return info;
347}
348
349QStringList
351 QStringList info("Chi^2");
352 info+=QString::number(fqos.chiSquared());
353 info+="NDF";
354 info+=QString::number(fqos.numberDoF()) ;
355 return info;
356}
357
358QStringList
360 QStringList info;
361
362 const Trk::MaterialEffectsOnTrack* meot = dynamic_cast<const Trk::MaterialEffectsOnTrack*>(&me);
363 const Trk::EstimatedBremOnTrack* ebot = dynamic_cast<const Trk::EstimatedBremOnTrack*>(&me);
364 if (meot) {
365 if (meot->energyLoss())
366 {
367 info.append("Energy loss");
368 if (meot->energyLoss()->sigmaPlusDeltaE()==meot->energyLoss()->sigmaMinusDeltaE()){
369 info+=QString::number(meot->energyLoss()->deltaE()/CLHEP::MeV)+QString(" +/- ")+QString::number(meot->energyLoss()->sigmaPlusDeltaE()/CLHEP::MeV)+QString(" [MeV]");
370 } else {
371 info+=QString::number(meot->energyLoss()->deltaE()/CLHEP::MeV)+QString(" +/- ")
372 +QString::number(meot->energyLoss()->sigmaPlusDeltaE()/CLHEP::MeV)+QString("/")+QString::number(meot->energyLoss()->sigmaMinusDeltaE()/CLHEP::MeV)
373 +QString(" [MeV]");
374 }
375 }
376 if (meot->scatteringAngles())
377 {
378 info.append("Delta phi");
379 info+=QString::number(meot->scatteringAngles()->deltaPhi())+QString(" +/- ")+QString::number(meot->scatteringAngles()->sigmaDeltaPhi());
380 info+="Delta theta";
381 info+=QString::number(meot->scatteringAngles()->deltaTheta())+QString(" +/- ")+QString::number(meot->scatteringAngles()->sigmaDeltaTheta());
382 }
383 } else if (ebot) {
384 info+="Not yet implemented.";
385 info+="";
386 } else {
387 info+="Not known!";
388 info+="";
389 }
390 return info;
391}
392
393QStringList
395{
396
397 QStringList info ("Local");
398
399 QString posInfo("");
400 if (meas.localParameters().contains(Trk::loc1)) {
401 posInfo = QString("(") + QString::number(meas.localParameters()[Trk::loc1]) ;
402
403 if (meas.localParameters ().dimension()==2 ) {
404 posInfo.append(", ");
405 posInfo.append( QString::number(meas.localParameters ()[Trk::loc2] ) );
406 }
407 posInfo.append(") [CLHEP::mm]");
408 info+= posInfo;
409 } else {
410 info+= QString("[no 'Local' parameters available]");
411 }
412
413 const Amg::MatrixX& err = meas.localCovariance();
414 info+="Error";
415
416 int dim= err.rows();
417 QString errInfo=QString("(") + QString::number(err(0,0));
418 if (dim==1){
419 errInfo+=")";
420 info+=errInfo;
421
422 } else {
423 // assuming 2-dim!
424 errInfo+=",";
425 errInfo+=QString::number(err(0,1));
426 info+=errInfo;
427 //row 2
428 info+=QString("");
429 info+=(QString("(") + QString::number(err(1,0))+QString(",")+QString::number(err(1,1))+QString(")"));
430 }
431
432 // Okay, now let's get specific!
433 const Trk::RIO_OnTrack* rot = dynamic_cast<const Trk::RIO_OnTrack*>(&meas);
434 if (rot) addFullInfo(info,rot);
435
436 const Trk::CompetingRIOsOnTrack* crot= dynamic_cast<const Trk::CompetingRIOsOnTrack*>(&meas);
437 if (crot) addFullInfo(info,crot);
438
439 const Trk::PseudoMeasurementOnTrack* pmeas= dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(&meas);
440 if (pmeas) addFullInfo(info,pmeas);
441
442 const Trk::Segment* seg= dynamic_cast<const Trk::Segment*>(&meas);
443 if (seg) addFullInfo(info,seg);
444
445 return info;
446}
447
448void
449TrkObjToString::addFullInfo(QStringList& info, const Trk::RIO_OnTrack* rot){
450 // ROTS
451 info+="Identifier";
452 info+=QString::number(rot->identify().get_compact());
453 info+="Local";
454 QString locParams="("+QString::number(rot->localParameters ()[Trk::loc1] );
455 if (rot->localParameters ().dimension()==2 ) {
456 locParams.append(", ");
457 locParams.append( QString::number(rot->localParameters ()[Trk::loc2] ) );
458 }
459 locParams.append(")");
460 info+=locParams;
461 const InDet::PixelClusterOnTrack* pix =dynamic_cast<const InDet::PixelClusterOnTrack*> (rot);
462 if (pix) {
463 info+="Cluster Ambiguity";
464 info+=pix->hasClusterAmbiguity () ? "True": "False";
465 info+="Fake";
466 info+=pix->isFake () ? "True": "False";
467 info+="Energy Loss";
468 info+=QString::number(pix->energyLoss ())+QString(" [Mev]");
469 return;
470 }
471
472 const InDet::SCT_ClusterOnTrack* sct =dynamic_cast<const InDet::SCT_ClusterOnTrack*> (rot);
473 if (sct) {
474 //Nothing yet
475 return;
476 }
477
478 const InDet::TRT_DriftCircleOnTrack* trt =dynamic_cast<const InDet::TRT_DriftCircleOnTrack*> (rot);
479 if (trt) {
480 info+="Side";
481 switch (trt->side()){
482 case Trk::NONE: { info+="None"; break;}
483 case Trk::LEFT: { info+="Left"; break;}
484 case Trk::RIGHT: { info+="Right"; break;}
485 }
486
487 info+="Status";
488 switch (trt->status()){
489 case Trk::DECIDED: { info+="Decided"; break;}
490 case Trk::UNDECIDED: { info+="Undecided"; break;}
491 case Trk::CORRUPT: { info+="Corrupt"; break;}
492 case Trk::NODRIFTTIME: { info+="No Drift Time"; break;}
493 }
494
495 info+="High Level";
496 info+=trt->highLevel () ? "True": "False";
497 info+="Time over threshold";
498 info+=QString::number(trt->timeOverThreshold ())+QString(" [CLHEP::ns]");
499
500 return;
501 }
502
503 const Muon::CscClusterOnTrack* csc =dynamic_cast<const Muon::CscClusterOnTrack*> (rot);
504 if (csc) {
505 info+="Status";
506
507 info+=Muon::toString(csc->status()).c_str();
508 return;
509 }
510
511 const Muon::RpcClusterOnTrack* rpc =dynamic_cast<const Muon::RpcClusterOnTrack*> (rot);
512 if (rpc) {
513 // nothing
514 }
515
516 const Muon::TgcClusterOnTrack* tgc =dynamic_cast<const Muon::TgcClusterOnTrack*> (rot);
517 if (tgc) {
518 //nothing
519 }
520
521 const Muon::MdtDriftCircleOnTrack* mdt =dynamic_cast<const Muon::MdtDriftCircleOnTrack*> (rot);
522 if (mdt) {
523 info+="Side";
524 switch (mdt->side()){
525 case Trk::NONE: { info+="None"; break;}
526 case Trk::LEFT: { info+="Left"; break;}
527 case Trk::RIGHT: { info+="Right"; break;}
528 }
529
530 info+="Status";
531 switch (mdt->status()){
532 case Trk::DECIDED: { info+="Decided"; break;}
533 case Trk::UNDECIDED: { info+="Undecided"; break;}
534 case Trk::CORRUPT: { info+="Corrupt"; break;}
535 case Trk::NODRIFTTIME: { info+="No Drift Time"; break;}
536 }
537 info+="Drift time";
538 info+=QString::number(mdt->driftTime ())+QString(" [CLHEP::ns]");
539 //TK: Uncomment timing mode for now due to const issues
540 //info+="Timing mode";
541 // info+=QString::number(mdt->timingMode ());
542
543// FIXME! Add creation parameters
544
545 // info+="Status";
546 // switch (mdt->status()){
547 // case Trk::DECIDED: { info+="Decided"; break;}
548 // case Trk::UNDECIDED: { info+="Undecided"; break;}
549 // case Trk::CORRUPT: { info+="Corrupt"; break;}
550 // case Trk::NODRIFTTIME: { info+="No Drift Time"; break;}
551 // }
552 return;
553 }
554}
555
556void
558{
559 info+="Contains IDs";
560 unsigned int nrio = crot->numberOfContainedROTs();
561 QString rots;
562 for (unsigned int n = 0; n < nrio; n++)
563 {
564 rots+=QString::number(crot->rioOnTrack(n).identify().get_compact());
565 if (n<(nrio-1)) rots+=", ";
566 }
567 info+=rots;
568}
569
570void
574
575void
577{
578}
value_type get_compact() const
Get the compact id.
Class to hold geometrical description of a silicon detector element.
Virtual base class of TRT readout elements.
Specific class to represent the pixel measurements.
Specific class to represent the SCT measurements.
Represents 'corrected' measurements from the TRT (for example, corrected for wire sag).
bool highLevel() const
returns true if the high level threshold was passed
Trk::DriftCircleSide side() const
returns the side on which the drift radius is.
double timeOverThreshold() const
returns time over threshold in ns for valid digits; zero otherwise
Trk::DriftCircleStatus status() const
returns the status of the drift radius calibration.
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
Class to represent the calibrated clusters created from CSC strips.
CscClusterStatus status() const
Returns Csc position measurement status flag.
Class to represent calibrated clusters formed from TGC strips.
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
Trk::DriftCircleStatus status() const
Returns the status of the drift radius calibration.
double driftTime() const
Returns the value of the drift time used to obtain the drift radius.
Trk::DriftCircleSide side() const
Returns the side on which the drift radius is wrt to the track.
Class to represent calibrated clusters formed from RPC strips.
Class to represent calibrated clusters formed from TGC strips.
Class to represent calibrated clusters formed from TGC strips.
static void addFullInfo(QStringList &info, const Trk::RIO_OnTrack *)
static void addBaseROTInfo(QString &info, const Trk::MeasurementBase &mb)
static MeasurementType type(const Trk::PrepRawData *prd)
static QString name(const Trk::MeasurementBase &mb)
static QString shortInfo(const Trk::MeasurementBase &mb)
static std::string typeName(MeasurementType type)
Returns a very short summary of the object type.
static QStringList fullInfo(const Trk::MeasurementBase &tp)
Returns list of key, value, key, value etc.
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
virtual unsigned int numberOfContainedROTs() const =0
Number of RIO_OnTracks to be contained by this CompetingRIOsOnTrack.
unsigned int indexOfMaxAssignProb() const
Index of the ROT with the highest assignment probability.
virtual const RIO_OnTrack & rioOnTrack(unsigned int) const =0
returns the RIO_OnTrack (also known as ROT) objects depending on the integer.
double sigmaPlusDeltaE() const
returns the positive side
double sigmaMinusDeltaE() const
returns the negative side
double deltaE() const
returns the
class holding information about momentum reduction and an additional noise term due to significant en...
simple/trivial Implemenation class for fit the fit quality.
Definition FitQuality.h:32
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition FitQuality.h:60
double chiSquared() const
returns the of the overall track fit
Definition FitQuality.h:56
bool contains(ParamDefs par) const
The simple check for the clients whether the parameter is contained.
int dimension() const
Dimension of this localParameters() vector.
base class to integrate material effects on Trk::Track in a flexible way.
represents the full description of deflection and e-loss of a track in material.
const EnergyLoss * energyLoss() const
returns the energy loss object.
const ScatteringAngles * scatteringAngles() const
returns the MCS-angles object.
This class is the pure abstract base class for all fittable tracking measurements.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
virtual bool type(PrepRawDataType type) const
Interface method checking the type.
Class to handle pseudo-measurements in fitters and on track objects.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
Definition RIO_OnTrack.h:70
Identifier identify() const
return the identifier -extends MeasurementBase
double sigmaDeltaPhi() const
returns the
double deltaPhi() const
returns the
double sigmaDeltaTheta() const
returns the
double deltaTheta() const
returns the
Base class for all TrackSegment implementations, extends the common MeasurementBase.
This is the base class for all tracking detector elements with read-out relevant information.
static QString str(const QString &s)
Definition VP1String.h:49
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
std::string toString(CscStripStatus cstat)
Return a string description of a CSC cluster status flag.
Definition TgcBase.h:6
Definition HitInfo.h:33
ParametersT< TrackParametersDim, Charged, DiscSurface > AtaDisc
@ RIGHT
the drift radius is positive (see Trk::AtaStraightLine)
@ LEFT
the drift radius is negative (see Trk::AtaStraightLine)
@ NONE
it was not possible to determine the which side of the straw the track passed;
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersT< TrackParametersDim, Charged, StraightLineSurface > AtaStraightLine
CurvilinearParametersT< TrackParametersDim, Charged, PlaneSurface > CurvilinearParameters
@ NODRIFTTIME
drift time was not used - drift radius is 0.
@ DECIDED
sign of drift radius has been determined
@ CORRUPT
the measurement is corrupt, but for some reason has been left on a track.
@ UNDECIDED
sign of drift radius has not been determined
@ loc2
generic first and second local coordinate
Definition ParamDefs.h:35
@ loc1
Definition ParamDefs.h:34
ParametersBase< TrackParametersDim, Charged > TrackParameters
ParametersT< TrackParametersDim, Charged, PlaneSurface > AtaPlane
ParametersT< TrackParametersDim, Charged, CylinderSurface > AtaCylinder
ParametersT< TrackParametersDim, Charged, ConeSurface > AtaCone