34#include <TDatabasePDG.h>
78 std::vector <AbsMeasurement*> factoryHits = factory.
createMany(trackCand);
80 if (factoryHits.size() != trackCand.
getNHits()) {
81 Exception exc(
"Track::Track ==> factoryHits.size() != trackCand->getNHits()",__LINE__,__FILE__);
87 for (
unsigned int i=0; i<factoryHits.size(); ++i){
97 covSeed_(TMatrixDSym::kUnit, TMatrixDSym(6))
105 covSeed_(TMatrixDSym::kUnit, TMatrixDSym(6))
127 std::map<const AbsTrackRep*, AbsTrackRep*> oldRepNewRep;
129 for (std::vector<AbsTrackRep*>::const_iterator it=rhs.
trackReps_.begin(); it!=rhs.
trackReps_.end(); ++it) {
130 AbsTrackRep* newRep = (*it)->clone();
132 oldRepNewRep[(*it)] = newRep;
137 trackPoints_.push_back(new TrackPoint(**it, oldRepNewRep));
138 trackPoints_.back()->setTrack(this);
141 for (std::map< const AbsTrackRep*, FitStatus* >::const_iterator it=rhs.
fitStatuses_.begin(); it!=rhs.
fitStatuses_.end(); ++it) {
142 setFitStatus(it->second->clone(), oldRepNewRep[it->first]);
154 (*it)->setTrack(
this);
195 for (
size_t i = 0; i <
trackReps_.size(); ++i)
232 if ((*it)->hasFitterInfo(rep)) {
242 if ((*it)->hasFitterInfo(rep)) {
262 if ((*it)->hasFitterInfo(rep)) {
271 for (std::vector<TrackPoint*>::const_reverse_iterator it =
trackPoints_.rbegin(); it !=
trackPoints_.rend(); ++it) {
272 if ((*it)->hasFitterInfo(rep)) {
290 if (point ==
nullptr) {
291 Exception exc(
"Track::getFittedState ==> no trackPoint with fitterInfo for rep",__LINE__,__FILE__);
301 for (
size_t i = 0; i <
trackReps_.size(); ++i)
305 Exception exc(
"Track::getIdForRep ==> cannot find TrackRep in Track",__LINE__,__FILE__);
365 debugOut <<
"Track::insertPoint at position " <<
id <<
"\n";
367 assert(point!=
nullptr);
423 int n = points.size();
432 for (std::vector<TrackPoint*>::iterator p = points.begin(); p != points.end(); ++p)
433 (*p)->setTrack(
this);
473 debugOut <<
"Track::deletePoint at position " <<
id <<
"\n";
517 if(trackPoint->hasFitterInfo(rep)) {
518 trackPoint->deleteFitterInfo(rep);
533 std::map<const AbsTrackRep*, AbsTrackRep*> otherRepThisRep;
534 std::vector<const AbsTrackRep*> otherRepsToRemove;
536 for (std::vector<AbsTrackRep*>::const_iterator otherRep=other->
trackReps_.begin(); otherRep!=other->
trackReps_.end(); ++otherRep) {
538 for (std::vector<AbsTrackRep*>::const_iterator thisRep=
trackReps_.begin(); thisRep!=
trackReps_.end(); ++thisRep) {
539 if ((*thisRep)->isSame(*otherRep)) {
540 otherRepThisRep[*otherRep] = *thisRep;
542 debugOut <<
" map other rep " << *otherRep <<
" to " << (*thisRep) <<
"\n";
545 Exception exc(
"Track::mergeTrack ==> more than one matching rep.",__LINE__,__FILE__);
554 otherRepsToRemove.push_back(*otherRep);
556 debugOut <<
" remove other rep " << *otherRep <<
"\n";
562 std::vector<TrackPoint*> points;
565 for (std::vector<TrackPoint*>::const_iterator otherTp=other->
trackPoints_.begin(); otherTp!=other->
trackPoints_.end(); ++otherTp) {
566 points.push_back(
new TrackPoint(**otherTp, otherRepThisRep, &otherRepsToRemove));
592 for (std::vector<TrackPoint*>::const_iterator pointIt =
trackPoints_.begin(); pointIt !=
trackPoints_.end(); ++pointIt) {
593 (*pointIt)->deleteFitterInfo(rep);
611 if (
id >= 0 && (
unsigned int)
id <
trackReps_.size())
615 errorOut <<
"Track::setCardinalRep: Attempted to set cardinalRep_ to a value out of bounds. Resetting cardinalRep_ to 0." << std::endl;
627 double minChi2(9.E99);
630 for (std::map< const AbsTrackRep*, FitStatus* >::const_iterator it =
fitStatuses_.begin(); it !=
fitStatuses_.end(); ++it) {
631 if (it->second->isFitConverged()) {
632 if (it->second->getChi2() < minChi2) {
633 minChi2 = it->second->getChi2();
639 if (bestRep !=
nullptr) {
658 int equalUntil(-1), equalFrom(nPoints);
659 for (
int i = 0; i<nPoints; ++i) {
666 if (equalUntil == nPoints-1)
672 for (
int i = nPoints-1; i>equalUntil; --i) {
680 debugOut <<
"Track::sort. Equal up to (including) hit " << equalUntil <<
" and from (including) hit " << equalFrom <<
" \n";
701 double fittedCharge = fittedState.
getCharge();
703 for (
unsigned int i = 0; i<
trackReps_.size(); ++i) {
704 if (
trackReps_[i]->getPDGCharge() * fittedCharge < 0) {
730 if (rep !=
nullptr) {
735 for (
unsigned int i = 0; i<
trackReps_.size(); ++i) {
751 debugOut <<
"Track::deleteForwardInfo from position " << startId <<
" to " << endId <<
"\n";
762 assert (endId >= startId);
764 for (std::vector<TrackPoint*>::const_iterator pointIt =
trackPoints_.begin() + startId; pointIt !=
trackPoints_.begin() + endId; ++pointIt) {
765 if (rep !=
nullptr) {
766 if ((*pointIt)->hasFitterInfo(rep))
767 (*pointIt)->getFitterInfo(rep)->deleteForwardInfo();
770 const std::vector<AbsFitterInfo*> fitterInfos = (*pointIt)->getFitterInfos();
771 for (std::vector<AbsFitterInfo*>::const_iterator fitterInfoIt = fitterInfos.begin(); fitterInfoIt != fitterInfos.end(); ++fitterInfoIt) {
772 (*fitterInfoIt)->deleteForwardInfo();
781 debugOut <<
"Track::deleteBackwardInfo from position " << startId <<
" to " << endId <<
"\n";
792 assert (endId >= startId);
795 for (std::vector<TrackPoint*>::const_iterator pointIt =
trackPoints_.begin() + startId; pointIt !=
trackPoints_.begin() + endId; ++pointIt) {
796 if (rep !=
nullptr) {
797 if ((*pointIt)->hasFitterInfo(rep))
798 (*pointIt)->getFitterInfo(rep)->deleteBackwardInfo();
801 const std::vector<AbsFitterInfo*> fitterInfos = (*pointIt)->getFitterInfos();
802 for (std::vector<AbsFitterInfo*>::const_iterator fitterInfoIt = fitterInfos.begin(); fitterInfoIt != fitterInfos.end(); ++fitterInfoIt) {
803 (*fitterInfoIt)->deleteBackwardInfo();
812 debugOut <<
"Track::deleteReferenceInfo from position " << startId <<
" to " << endId <<
"\n";
823 assert (endId >= startId);
825 for (std::vector<TrackPoint*>::const_iterator pointIt =
trackPoints_.begin() + startId; pointIt !=
trackPoints_.begin() + endId; ++pointIt) {
826 if (rep !=
nullptr) {
827 if ((*pointIt)->hasFitterInfo(rep))
828 (*pointIt)->getFitterInfo(rep)->deleteReferenceInfo();
831 std::vector<AbsFitterInfo*> fitterInfos = (*pointIt)->getFitterInfos();
832 for (std::vector<AbsFitterInfo*>::const_iterator fitterInfoIt = fitterInfos.begin(); fitterInfoIt != fitterInfos.end(); ++fitterInfoIt) {
833 (*fitterInfoIt)->deleteReferenceInfo();
842 debugOut <<
"Track::deleteMeasurementInfo from position " << startId <<
" to " << endId <<
"\n";
853 assert (endId >= startId);
855 for (std::vector<TrackPoint*>::const_iterator pointIt =
trackPoints_.begin() + startId; pointIt !=
trackPoints_.begin() + endId; ++pointIt) {
856 if (rep !=
nullptr) {
857 if ((*pointIt)->hasFitterInfo(rep))
858 (*pointIt)->getFitterInfo(rep)->deleteMeasurementInfo();
861 std::vector<AbsFitterInfo*> fitterInfos = (*pointIt)->getFitterInfos();
862 for (std::vector<AbsFitterInfo*>::const_iterator fitterInfoIt = fitterInfos.begin(); fitterInfoIt != fitterInfos.end(); ++fitterInfoIt) {
863 (*fitterInfoIt)->deleteMeasurementInfo();
872 debugOut <<
"Track::deleteFitterInfo from position " << startId <<
" to " << endId <<
"\n";
883 assert (endId >= startId);
885 for (std::vector<TrackPoint*>::const_iterator pointIt =
trackPoints_.begin() + startId; pointIt !=
trackPoints_.begin() + endId; ++pointIt) {
886 if (rep !=
nullptr) {
887 if ((*pointIt)->hasFitterInfo(rep))
888 (*pointIt)->deleteFitterInfo(rep);
891 for (std::vector<AbsTrackRep*>::const_iterator repIt =
trackReps_.begin(); repIt !=
trackReps_.end(); ++repIt) {
892 if ((*pointIt)->hasFitterInfo(*repIt))
893 (*pointIt)->deleteFitterInfo(*repIt);
907 bool backwards(
false);
908 if (startId > endId) {
909 double temp = startId;
923 for (std::vector<TrackPoint*>::const_iterator pointIt =
trackPoints_.begin() + startId; pointIt !=
trackPoints_.begin() + endId; ++pointIt) {
924 if (! (*pointIt)->hasFitterInfo(rep)) {
925 Exception e(
"Track::getTracklength: trackPoint has no fitterInfo", __LINE__,__FILE__);
933 state = (*pointIt)->getFitterInfo(rep)->getFittedState();
954 for (
unsigned int j = 0; j < measurements.size(); ++j) {
986 if (startId > endId) {
987 std::swap(startId, endId);
1002 Exception e(
"Track::getTOF: trackPoint has no fitterInfo", __LINE__,__FILE__);
1019 assert(startId >= 0);
1020 assert(startId <= endId);
1023 std::vector< AbsFitterInfo* > fis;
1025 for (std::vector<TrackPoint*>::iterator tp =
trackPoints_.begin() + startId; tp !=
trackPoints_.begin() + endId; ++tp) {
1027 if (rep ==
nullptr) {
1028 fis = (*tp)->getFitterInfos();
1030 else if ((*tp)->hasFitterInfo(rep)) {
1031 fis.push_back((*tp)->getFitterInfo(rep));
1034 for (std::vector< AbsFitterInfo* >::iterator fi = fis.begin(); fi != fis.end(); ++fi) {
1050 for (std::map< const AbsTrackRep*, FitStatus* >::const_iterator it=
fitStatuses_.begin(); it!=
fitStatuses_.end(); ++it) {
1051 it->second->getPruneFlags().setFlags(option);
1073 for (
unsigned int i = 0; i <
trackReps_.size(); ++i) {
1087 std::vector< AbsFitterInfo* > fis =
trackPoints_[i]->getFitterInfos();
1088 for (
unsigned int j = 0; j<fis.size(); ++j) {
1091 fis[j]->deleteForwardInfo();
1093 fis[j]->deleteBackwardInfo();
1095 fis[j]->deleteForwardInfo();
1097 fis[j]->deleteBackwardInfo();
1105 fis[j]->deleteReferenceInfo();
1107 fis[j]->deleteMeasurementInfo();
1121 TString opt = option;
1123 if (opt.Contains(
"C")) {
1181 printf(
"% -9.3g ",
trackPoints_[i]->getSortingParameter());
1184 for (std::vector<AbsTrackRep*>::const_iterator rep =
trackReps_.begin(); rep !=
trackReps_.end(); ++rep) {
1257 printOut <<
"=======================================================================================\n";
1261 for (
unsigned int i=0; i<
trackReps_.size(); ++i) {
1264 printOut <<
" (This is the cardinal rep)";
1269 printOut <<
"---------------------------------------------------------------------------------------\n";
1272 printOut <<
"TrackPoint Nr. " << i <<
"\n";
1274 printOut <<
"..........................................................................\n";
1277 for (std::map< const AbsTrackRep*, FitStatus* >::const_iterator it=
fitStatuses_.begin(); it!=
fitStatuses_.end(); ++it) {
1278 it->second->Print();
1281 printOut <<
"=======================================================================================\n";
1289 bool consistent =
true;
1290 std::stringstream failures;
1292 std::map<const AbsTrackRep*, const KalmanFitterInfo*> prevFis;
1296 failures <<
"Track::checkConsistency(): stateSeed_ dimension != 6" << std::endl;
1302 failures <<
"Track::checkConsistency(): covSeed_ dimension != 6" << std::endl;
1310 failures <<
"Track::checkConsistency(): Warning: covSeed_ is zero" << std::endl;
1315 failures <<
"Track::checkConsistency(): Number of fitStatuses is != number of TrackReps " << std::endl;
1322 failures <<
"Track::checkConsistency(): cardinalRep id " <<
cardinalRep_ <<
" out of bounds" << std::endl;
1327 for (std::vector<AbsTrackRep*>::const_iterator rep =
trackReps_.begin(); rep !=
trackReps_.end(); ++rep) {
1329 if ((*rep) ==
nullptr) {
1330 failures <<
"Track::checkConsistency(): TrackRep is nullptr" << std::endl;
1336 TParticlePDG* particle = TDatabasePDG::Instance()->GetParticle((*rep)->getPDG());
1337 if (particle ==
nullptr) {
1338 failures <<
"Track::checkConsistency(): TrackRep pdg ID " << (*rep)->getPDG() <<
" is not valid" << std::endl;
1345 failures <<
"Track::checkConsistency(): No FitStatus for Rep or FitStatus is nullptr" << std::endl;
1354 if ((*tp) ==
nullptr) {
1355 failures <<
"Track::checkConsistency(): TrackPoint is nullptr" << std::endl;
1360 if ((*tp)->getTrack() !=
this) {
1361 failures <<
"Track::checkConsistency(): TrackPoint does not point back to this track" << std::endl;
1367 const std::vector<AbsMeasurement*>& rawMeasurements = (*tp)->getRawMeasurements();
1368 for (std::vector<AbsMeasurement*>::const_iterator m = rawMeasurements.begin(); m != rawMeasurements.end(); ++m) {
1370 if ((*m) ==
nullptr) {
1371 failures <<
"Track::checkConsistency(): Measurement is nullptr" << std::endl;
1376 if ((*m)->getTrackPoint() != *tp) {
1377 failures <<
"Track::checkConsistency(): Measurement does not point back to correct TrackPoint" << std::endl;
1384 std::vector<AbsFitterInfo*> fitterInfos = (*tp)->getFitterInfos();
1385 for (std::vector<AbsFitterInfo*>::const_iterator fi = fitterInfos.begin(); fi != fitterInfos.end(); ++fi) {
1387 if ((*fi) ==
nullptr) {
1388 failures <<
"Track::checkConsistency(): FitterInfo is nullptr. TrackPoint: " << *tp << std::endl;
1395 for (std::vector<AbsTrackRep*>::const_iterator rep =
trackReps_.begin(); rep !=
trackReps_.end(); ++rep) {
1396 if ( (*rep) == (*fi)->getRep() ) {
1401 failures <<
"Track::checkConsistency(): fitterInfo points to TrackRep which is not in Track" << std::endl;
1406 if (!( (*fi)->checkConsistency(&(this->getFitStatus((*fi)->getRep())->getPruneFlags())) ) ) {
1407 failures <<
"Track::checkConsistency(): FitterInfo not consistent. TrackPoint: " << *tp << std::endl;
1413 if (prevFis[(*fi)->getRep()] !=
nullptr &&
1415 prevFis[(*fi)->getRep()]->hasReferenceState() ) {
1417 double prevLen = prevFis[(*fi)->getRep()]->getReferenceState()->getBackwardSegmentLength();
1418 if (fabs(prevLen + len) > 1E-10 ) {
1419 failures <<
"Track::checkConsistency(): segment lengths of reference states for rep " << (*fi)->getRep() <<
" (id " <<
getIdForRep((*fi)->getRep()) <<
") at TrackPoint " << (*tp) <<
" don't match" << std::endl;
1420 failures << prevLen <<
" + " << len <<
" = " << prevLen + len << std::endl;
1421 failures <<
"TrackPoint " << *tp <<
", FitterInfo " << *fi <<
", rep " <<
getIdForRep((*fi)->getRep()) << std::endl;
1430 prevFis[(*fi)->getRep()] =
nullptr;
1438 std::vector<TrackPoint*> trackPointsWithMeasurement;
1441 if ((*it)->hasRawMeasurements()) {
1442 trackPointsWithMeasurement.push_back(*it);
1447 failures <<
"Track::checkConsistency(): trackPointsWithMeasurement_ has incorrect size" << std::endl;
1452 for (
unsigned int i = 0; i < trackPointsWithMeasurement.size(); ++i) {
1454 failures <<
"Track::checkConsistency(): trackPointsWithMeasurement_ is not correct" << std::endl;
1456 failures <<
"should have id " << i <<
", address " << trackPointsWithMeasurement[i] << std::endl;
1462 if (not consistent) {
1471 debugOut <<
"Track::trackHasChanged \n";
1477 for (std::map< const AbsTrackRep*, FitStatus* >::const_iterator it=
fitStatuses_.begin(); it!=
fitStatuses_.end(); ++it) {
1478 it->second->setHasTrackChanged();
1488 if ((*it)->hasRawMeasurements()) {
1495void Track::Streamer(TBuffer &R__b)
1498 const bool streamTrackPoints =
true;
1502 if (R__b.IsReading()) {
1504 Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v) { }
1505 TObject::Streamer(R__b);
1507 std::vector<AbsTrackRep*> &R__stl =
trackReps_;
1511 Error(
"trackReps_ streamer",
"Missing the TClass object for genfit::AbsTrackRep!");
1516 R__stl.reserve(R__n);
1517 for (R__i = 0; R__i < R__n; R__i++) {
1518 genfit::AbsTrackRep* R__t;
1520 R__stl.push_back(R__t);
1524 if (streamTrackPoints)
1528 TClass *R__tcl1 = TBuffer::GetClass(
typeid(genfit::TrackPoint));
1530 Error(
"trackPoints_ streamer",
"Missing the TClass object for genfit::TrackPoint!");
1535 R__stl.reserve(R__n);
1536 for (R__i = 0; R__i < R__n; R__i++) {
1537 genfit::TrackPoint* R__t;
1538 R__t = (genfit::TrackPoint*)R__b.ReadObjectAny(R__tcl1);
1541 R__stl.push_back(R__t);
1545 std::map<const AbsTrackRep*,FitStatus*> &R__stl =
fitStatuses_;
1547 TClass *R__tcl1 = TBuffer::GetClass(
typeid(genfit::AbsTrackRep));
1549 Error(
"fitStatuses_ streamer",
"Missing the TClass object for genfit::AbsTrackRep!");
1552 TClass *R__tcl2 = TBuffer::GetClass(
typeid(genfit::FitStatus));
1554 Error(
"fitStatuses_ streamer",
"Missing the TClass object for genfit::FitStatus!");
1559 for (R__i = 0; R__i < R__n; R__i++) {
1562 genfit::FitStatus* R__t2;
1563 R__t2 = (genfit::FitStatus*)R__b.ReadObjectAny(R__tcl2);
1577 R__b.CheckByteCount(R__s, R__c, thisClass::IsA());
1581 R__c = R__b.WriteVersion(thisClass::IsA(), kTRUE);
1582 TObject::Streamer(R__b);
1584 std::vector<AbsTrackRep*> &R__stl =
trackReps_;
1585 int R__n=int(R__stl.size());
1588 TClass *R__tcl1 = TBuffer::GetClass(
typeid(genfit::AbsTrackRep));
1590 Error(
"trackReps_ streamer",
"Missing the TClass object for genfit::AbsTrackRep!");
1593 std::vector<AbsTrackRep*>::iterator R__k;
1594 for (R__k = R__stl.begin(); R__k != R__stl.end(); ++R__k) {
1600 if (streamTrackPoints)
1603 int R__n=int(R__stl.size());
1606 std::vector<TrackPoint*>::iterator R__k;
1607 for (R__k = R__stl.begin(); R__k != R__stl.end(); ++R__k) {
1613 std::map<const AbsTrackRep*,FitStatus*> &R__stl =
fitStatuses_;
1614 int R__n=int(R__stl.size());
1617 TClass *R__tcl1 = TBuffer::GetClass(
typeid(genfit::AbsTrackRep));
1619 Error(
"fitStatuses_ streamer",
"Missing the TClass object for genfit::AbsTrackRep!");
1622 TClass *R__tcl2 = TBuffer::GetClass(
typeid(genfit::FitStatus));
1624 Error(
"fitStatuses_ streamer",
"Missing the TClass object for genfit::FitStatus!");
1627 std::map<const AbsTrackRep*,FitStatus*>::iterator R__k;
1628 for (R__k = R__stl.begin(); R__k != R__stl.end(); ++R__k) {
1631 R__b << ((*R__k).second);
1638 R__b.SetByteCount(R__c, kTRUE);
1649 for (std::map< const AbsTrackRep*, FitStatus* >::iterator it =
fitStatuses_.begin(); it!=
fitStatuses_.end(); ++it)
This class collects all information needed and produced by a specific AbsFitter and is specific to on...
virtual bool hasForwardUpdate() const =0
virtual bool hasForwardPrediction() const =0
virtual bool hasBackwardUpdate() const =0
virtual const MeasuredStateOnPlane & getFittedState(bool biased=true) const =0
virtual bool hasReferenceState() const =0
virtual bool hasBackwardPrediction() const =0
virtual bool hasMeasurements() const =0
Contains the measurement and covariance in raw detector coordinates.
virtual bool isLeftRightMeasurement() const
If the AbsMeasurement is a wire hit, the left/right resolution will be used.
virtual int getLeftRightResolution() const
Abstract base class for a track representation.
virtual double extrapolateToPlane(StateOnPlane &state, const genfit::SharedPlanePtr &plane, bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to plane, and returns the extrapolation length and, via reference,...
bool switchPDGSign()
try to multiply pdg code with -1. (Switch from particle to anti-particle and vice versa).
virtual double getTime(const StateOnPlane &) const =0
Get the time corresponding to the StateOnPlane. Extrapolation.
Exception class for error handling in GENFIT (provides storage for diagnostic information)
void setFatal(bool b=true)
Set fatal flag.
Class where important numbers and properties of a fit can be stored.
FitStatus for use with AbsKalmanFitter implementations.
Collects information needed and produced by a AbsKalmanFitter implementations and is specific to one ...
ReferenceStateOnPlane * getReferenceState() const
bool hasReferenceState() const override
void fixWeights(bool arg=true)
StateOnPlane with additional covariance matrix.
TMatrixDSym get6DCov() const
Factory object to create AbsMeasurement objects from digitized and clustered data.
std::vector< measurement_T * > createMany(const TrackCand &cand) const
Create a collection of Measurements.
Measurement class implementing a planar hit geometry (1 or 2D).
double getForwardSegmentLength() const
A state with arbitrary dimension defined in a DetPlane.
TVectorD get6DState() const
const SharedPlanePtr & getPlane() const
Hit object for use in TrackCand. Provides IDs and sorting parameters.
double getSortingParameter() const
Track candidate – seed values and indices.
void addHit(int detId, int hitId, int planeId=-1, double sortingParameter=0)
void setTime6DSeedAndPdgCode(double time, const TVectorD &state6D, const int pdgCode)
This function works the same as set6DSeed but instead of a charge hypothesis you can set a pdg code w...
const TVectorD & getStateSeed() const
Returns the 6D seed state; should be in global coordinates.
void setCovSeed(const TMatrixDSym &cov6D)
set the covariance matrix seed (6D).
int getMcTrackId() const
Get the MCT track id, for MC simulations - default value = -1.
unsigned int getNHits() const
double getTimeSeed() const
Get the time at which the seed state is defined.
const TMatrixDSym & getCovSeed() const
get the covariance matrix seed (6D).
void setMcTrackId(int i)
Set the MCT track id, for MC simulations.
TrackCandHit * getHit(int i) const
Collection of TrackPoint objects, AbsTrackRep objects and FitStatus objects.
TrackPoint * getPoint(int id) const
void addTrackRep(AbsTrackRep *trackRep)
std::map< const AbsTrackRep *, FitStatus * > fitStatuses_
helper
void setCardinalRep(int id)
TrackCand * constructTrackCand() const
Construct a new TrackCand containing the hit IDs of the measurements.
AbsTrackRep * getTrackRep(int id) const
FitStatus * getFitStatus(const AbsTrackRep *rep=nullptr) const
Get FitStatus for a AbsTrackRep. Per default, return FitStatus for cardinalRep.
void deleteTrackRep(int id)
Delete a AbsTrackRep and all corresponding AbsFitterInfo objects in every TrackPoint.
void reverseTrackPoints()
Flip the ordering of the TrackPoints.
void deleteTrackPointsAndFitStatus()
Delete all measurement information and the track points of the track. Does not delete track represent...
bool hasFitStatus(const AbsTrackRep *rep=nullptr) const
Check if track has a FitStatus for given AbsTrackRep. Per default, check for cardinal rep.
void reverseMomSeed()
Flip direction of momentum seed.
void switchPDGSigns(AbsTrackRep *rep=nullptr)
Switch the pdg signs of specified rep (of all reps if rep == nullptr).
std::vector< AbsTrackRep * > trackReps_
unsigned int getNumPoints() const
int getIdForRep(const AbsTrackRep *rep) const
This is used when streaming TrackPoints.
void insertMeasurement(AbsMeasurement *measurement, int id=-1)
Creates a new TrackPoint containing the measurement, and adds it to the track.
void deleteBackwardInfo(int startId=0, int endId=-1, const AbsTrackRep *rep=nullptr)
TrackPoint * getPointWithMeasurement(int id) const
void prune(const Option_t *="CFLWRMIU")
Delete unneeded information from the Track.
void setCovSeed(const TMatrixDSym &c)
bool hasKalmanFitStatus(const AbsTrackRep *rep=nullptr) const
Check if track has a KalmanFitStatus for given AbsTrackRep. Per default, check for cardinal rep.
void fixWeights(AbsTrackRep *rep=nullptr, int startId=0, int endId=-1)
virtual void Clear(Option_t *="")
TrackPoint * getPointWithMeasurementAndFitterInfo(int id, const AbsTrackRep *rep=nullptr) const
void createMeasurements(const TrackCand &trackCand, const MeasurementFactory< genfit::AbsMeasurement > &factory)
void deleteFittedState(const genfit::AbsTrackRep *rep)
void insertPoint(TrackPoint *point, int id=-1)
Insert TrackPoint BEFORE TrackPoint with position id, if id >= 0.
void insertPoints(std::vector< genfit::TrackPoint * > points, int id=-1)
Insert TrackPoints BEFORE TrackPoint with position id, if id >= 0.
void checkConsistency() const
KalmanFitStatus * getKalmanFitStatus(const AbsTrackRep *rep=nullptr) const
If FitStatus is a KalmanFitStatus, return it. Otherwise return nullptr.
std::vector< TrackPoint * > trackPoints_
double getTOF(AbsTrackRep *rep=nullptr, int startId=0, int endId=-1) const
get time of flight in ns between to trackPoints (if nullptr, for cardinal rep)
TrackPoint * getPointWithFitterInfo(int id, const AbsTrackRep *rep=nullptr) const
void setTimeSeed(double time)
bool udpateSeed(int id=0, AbsTrackRep *rep=nullptr, bool biased=true)
void Print(const Option_t *="") const
AbsTrackRep * getCardinalRep() const
Get cardinal track representation.
void mergeTrack(const Track *other, int id=-1)
Merge two tracks.
void deleteMeasurementInfo(int startId=0, int endId=-1, const AbsTrackRep *rep=nullptr)
void determineCardinalRep()
See with which AbsTrackRep the track was fitted best (converged fit w/ smallest chi2) and set the car...
void deleteFitterInfo(int startId=0, int endId=-1, const AbsTrackRep *rep=nullptr)
bool sort()
Sort TrackPoint and according to their sorting parameters.
std::vector< TrackPoint * > trackPointsWithMeasurement_
void deleteForwardInfo(int startId=0, int endId=-1, const AbsTrackRep *rep=nullptr)
double getTrackLen(AbsTrackRep *rep=nullptr, int startId=0, int endId=-1) const
get TrackLength between to trackPoints (if nullptr, for cardinal rep)
unsigned int cardinalRep_
const MeasuredStateOnPlane & getFittedState(int id=0, const AbsTrackRep *rep=nullptr, bool biased=true) const
Shortcut to get FittedStates.
void fillPointsWithMeasurement()
void deleteReferenceInfo(int startId=0, int endId=-1, const AbsTrackRep *rep=nullptr)
void reverseTrack()
Make track ready to be fitted in reverse direction.
void setFitStatus(FitStatus *fitStatus, const AbsTrackRep *rep)
void setStateSeed(const TVectorD &s)
Helper class for TrackPoint sorting, used in Track::sort().
Object containing AbsMeasurement and AbsFitterInfo objects.
bool hasFitterInfo(const AbsTrackRep *rep) const
bool hasRawMeasurements() const
const std::vector< genfit::AbsMeasurement * > & getRawMeasurements() const
void setTrack(Track *track)
void setSortingParameter(double sortingParameter)
void fixupRepsForReading()
AbsFitterInfo * getFitterInfo(const AbsTrackRep *rep=nullptr) const
Get fitterInfo for rep. Per default, use cardinal rep.
double getSortingParameter() const
Hit object for use in TrackCand. Provides additional left/right parameter.
Defines for I/O streams used for error and debug printing.
Info which information has been pruned from the Track.
void setFlags(Option_t *option="")
does not reset! If a flag is already true and is not in opt, it will stay true.
bool hasFlags(Option_t *option="CFLWRMIU") const
check if all the given flags are set