SND@LHC Software
Loading...
Searching...
No Matches
genfit::KalmanFitterInfo Class Reference

Collects information needed and produced by a AbsKalmanFitter implementations and is specific to one AbsTrackRep of the Track. More...

#include <KalmanFitterInfo.h>

Inheritance diagram for genfit::KalmanFitterInfo:
Collaboration diagram for genfit::KalmanFitterInfo:

Public Member Functions

 KalmanFitterInfo ()
 
 KalmanFitterInfo (const TrackPoint *trackPoint, const AbsTrackRep *rep)
 
virtual ~KalmanFitterInfo ()
 
virtual KalmanFitterInfoclone () const
 Deep copy ctor for polymorphic class.
 
ReferenceStateOnPlanegetReferenceState () const
 
MeasuredStateOnPlanegetForwardPrediction () const
 
MeasuredStateOnPlanegetBackwardPrediction () const
 
MeasuredStateOnPlanegetPrediction (int direction) const
 
KalmanFittedStateOnPlanegetForwardUpdate () const
 
KalmanFittedStateOnPlanegetBackwardUpdate () const
 
KalmanFittedStateOnPlanegetUpdate (int direction) const
 
const std::vector< genfit::MeasurementOnPlane * > & getMeasurementsOnPlane () const
 
MeasurementOnPlanegetMeasurementOnPlane (int i=0) const
 
MeasurementOnPlane getAvgWeightedMeasurementOnPlane (bool ignoreWeights=false) const
 
MeasurementOnPlanegetClosestMeasurementOnPlane (const StateOnPlane *) const
 Get measurements which is closest to state.
 
unsigned int getNumMeasurements () const
 
std::vector< double > getWeights () const
 Get weights of measurements.
 
bool areWeightsFixed () const
 Are the weights fixed?
 
const MeasuredStateOnPlanegetFittedState (bool biased=true) const
 Get unbiased or biased (default) smoothed state.
 
MeasurementOnPlane getResidual (unsigned int iMeasurement=0, bool biased=false, bool onlyMeasurementErrors=true) const
 Get unbiased (default) or biased residual from ith measurement.
 
bool hasMeasurements () const
 
bool hasReferenceState () const
 
bool hasForwardPrediction () const
 
bool hasBackwardPrediction () const
 
bool hasForwardUpdate () const
 
bool hasBackwardUpdate () const
 
bool hasUpdate (int direction) const
 
bool hasPredictionsAndUpdates () const
 
void setReferenceState (ReferenceStateOnPlane *referenceState)
 
void setForwardPrediction (MeasuredStateOnPlane *forwardPrediction)
 
void setBackwardPrediction (MeasuredStateOnPlane *backwardPrediction)
 
void setPrediction (MeasuredStateOnPlane *prediction, int direction)
 
void setForwardUpdate (KalmanFittedStateOnPlane *forwardUpdate)
 
void setBackwardUpdate (KalmanFittedStateOnPlane *backwardUpdate)
 
void setUpdate (KalmanFittedStateOnPlane *update, int direction)
 
void setMeasurementsOnPlane (const std::vector< genfit::MeasurementOnPlane * > &measurementsOnPlane)
 
void addMeasurementOnPlane (MeasurementOnPlane *measurementOnPlane)
 
void addMeasurementsOnPlane (const std::vector< genfit::MeasurementOnPlane * > &measurementsOnPlane)
 
void setWeights (const std::vector< double > &)
 Set weights of measurements.
 
void fixWeights (bool arg=true)
 
void setRep (const AbsTrackRep *rep)
 
void deleteForwardInfo ()
 
void deleteBackwardInfo ()
 
void deletePredictions ()
 
void deleteReferenceInfo ()
 
void deleteMeasurementInfo ()
 
virtual void Print (const Option_t *="") const
 
virtual bool checkConsistency () const
 
- Public Member Functions inherited from genfit::AbsFitterInfo
 AbsFitterInfo ()
 
 AbsFitterInfo (const TrackPoint *trackPoint, const AbsTrackRep *rep)
 
virtual ~AbsFitterInfo ()
 
const TrackPointgetTrackPoint () const
 
const AbsTrackRepgetRep () const
 
void setTrackPoint (const TrackPoint *tp)
 
virtual bool hasPrediction (int direction) const
 
const SharedPlanePtrgetPlane () const
 
void setPlane (const SharedPlanePtr &plane)
 

Private Attributes

boost::scoped_ptr< ReferenceStateOnPlanereferenceState_
 Reference state. Used by KalmanFitterRefTrack.
 
boost::scoped_ptr< MeasuredStateOnPlaneforwardPrediction_
 
boost::scoped_ptr< KalmanFittedStateOnPlaneforwardUpdate_
 
boost::scoped_ptr< MeasuredStateOnPlanebackwardPrediction_
 
boost::scoped_ptr< KalmanFittedStateOnPlanebackwardUpdate_
 
boost::scoped_ptr< MeasuredStateOnPlanefittedStateUnbiased_
 
boost::scoped_ptr< MeasuredStateOnPlanefittedStateBiased_
 cache
 
std::vector< MeasurementOnPlane * > measurementsOnPlane_
 cache
 
bool fixWeights_
 

Additional Inherited Members

- Protected Attributes inherited from genfit::AbsFitterInfo
const TrackPointtrackPoint_
 
const AbsTrackReprep_
 No ownership.
 
SharedPlanePtr sharedPlane_
 No ownership.
 

Detailed Description

Collects information needed and produced by a AbsKalmanFitter implementations and is specific to one AbsTrackRep of the Track.

Definition at line 46 of file KalmanFitterInfo.h.

Constructor & Destructor Documentation

◆ KalmanFitterInfo() [1/2]

genfit::KalmanFitterInfo::KalmanFitterInfo ( )

Definition at line 36 of file KalmanFitterInfo.cc.

◆ KalmanFitterInfo() [2/2]

genfit::KalmanFitterInfo::KalmanFitterInfo ( const TrackPoint trackPoint,
const AbsTrackRep rep 
)

Definition at line 42 of file KalmanFitterInfo.cc.

42 :
43 AbsFitterInfo(trackPoint, rep), fixWeights_(false)
44{
45 ;
46}

◆ ~KalmanFitterInfo()

genfit::KalmanFitterInfo::~KalmanFitterInfo ( )
virtual

Definition at line 48 of file KalmanFitterInfo.cc.

Member Function Documentation

◆ addMeasurementOnPlane()

void genfit::KalmanFitterInfo::addMeasurementOnPlane ( MeasurementOnPlane measurementOnPlane)

Definition at line 366 of file KalmanFitterInfo.cc.

366 {
367 if (measurementsOnPlane_.size() == 0)
368 setPlane(measurementOnPlane->getPlane());
369
370 measurementsOnPlane_.push_back(measurementOnPlane);
371}
void setPlane(const SharedPlanePtr &plane)
std::vector< MeasurementOnPlane * > measurementsOnPlane_
cache

◆ addMeasurementsOnPlane()

void genfit::KalmanFitterInfo::addMeasurementsOnPlane ( const std::vector< genfit::MeasurementOnPlane * > &  measurementsOnPlane)

Definition at line 373 of file KalmanFitterInfo.cc.

373 {
374 for (std::vector<MeasurementOnPlane*>::const_iterator m = measurementsOnPlane.begin(), mend = measurementsOnPlane.end(); m < mend; ++m) {
376 }
377}
Double_t m
void addMeasurementOnPlane(MeasurementOnPlane *measurementOnPlane)
subroutine mend
End of 'module' printout.
Definition pede.f90:8786

◆ areWeightsFixed()

bool genfit::KalmanFitterInfo::areWeightsFixed ( ) const
inline

Are the weights fixed?

Definition at line 74 of file KalmanFitterInfo.h.

74{return fixWeights_;}

◆ checkConsistency()

bool genfit::KalmanFitterInfo::checkConsistency ( ) const
virtual

Implements genfit::AbsFitterInfo.

Definition at line 480 of file KalmanFitterInfo.cc.

480 {
481
482 bool retVal(true);
483
484 // check if in a TrackPoint
485 if (!trackPoint_) {
486 std::cerr << "KalmanFitterInfo::checkConsistency(): trackPoint_ is NULL" << std::endl;
487 retVal = false;
488 }
489
490 // check if there is a reference state
491 /*if (!referenceState_) {
492 std::cerr << "KalmanFitterInfo::checkConsistency(): referenceState_ is NULL" << std::endl;
493 retVal = false;
494 }*/
495
496 SharedPlanePtr plane = getPlane();
497
498 if (plane.get() == NULL) {
500 return true;
501 std::cerr << "KalmanFitterInfo::checkConsistency(): plane is NULL" << std::endl;
502 retVal = false;
503 }
504
505 TVector3 oTest = plane->getO(); // see if the plane object is there
506 oTest *= 47.11;
507
508 // if more than one measurement, check if they have the same dimensionality
509 if (measurementsOnPlane_.size() > 1) {
510 int dim = measurementsOnPlane_[0]->getState().GetNrows();
511 for (unsigned int i = 1; i<measurementsOnPlane_.size(); ++i) {
512 if(measurementsOnPlane_[i]->getState().GetNrows() != dim) {
513 std::cerr << "KalmanFitterInfo::checkConsistency(): measurementsOnPlane_ do not all have the same dimensionality" << std::endl;
514 retVal = false;
515 }
516 }
517 if (dim == 0) {
518 std::cerr << "KalmanFitterInfo::checkConsistency(): measurementsOnPlane_ have dimension 0" << std::endl;
519 retVal = false;
520 }
521 }
522
523 // see if everything else is defined wrt this plane and rep_
524 int dim = rep_->getDim(); // check dim
525 if (referenceState_) {
526 if(referenceState_->getPlane() != plane) {
527 std::cerr << "KalmanFitterInfo::checkConsistency(): referenceState_ is not defined with the correct plane " << referenceState_->getPlane().get() << " vs. " << plane.get() << std::endl;
528 retVal = false;
529 }
530 if (referenceState_->getRep() != rep_) {
531 std::cerr << "KalmanFitterInfo::checkConsistency(): referenceState_ is not defined with the correct TrackRep" << std::endl;
532 retVal = false;
533 }
534 if (referenceState_->getState().GetNrows() != dim) {
535 std::cerr << "KalmanFitterInfo::checkConsistency(): referenceState_ does not have the right dimension!" << std::endl;
536 retVal = false;
537 }
538 }
539
540 if (forwardPrediction_) {
541 if(forwardPrediction_->getPlane() != plane) {
542 std::cerr << "KalmanFitterInfo::checkConsistency(): forwardPrediction_ is not defined with the correct plane" << std::endl;
543 retVal = false;
544 }
545 if(forwardPrediction_->getRep() != rep_) {
546 std::cerr << "KalmanFitterInfo::checkConsistency(): forwardPrediction_ is not defined with the correct TrackRep" << std::endl;
547 retVal = false;
548 }
549 if (forwardPrediction_->getState().GetNrows() != dim || forwardPrediction_->getCov().GetNrows() != dim) {
550 std::cerr << "KalmanFitterInfo::checkConsistency(): forwardPrediction_ does not have the right dimension!" << std::endl;
551 retVal = false;
552 }
553 }
554 if (forwardUpdate_) {
555 if(forwardUpdate_->getPlane() != plane) {
556 std::cerr << "KalmanFitterInfo::checkConsistency(): forwardUpdate_ is not defined with the correct plane" << std::endl;
557 retVal = false;
558 }
559 if(forwardUpdate_->getRep() != rep_) {
560 std::cerr << "KalmanFitterInfo::checkConsistency(): forwardUpdate_ is not defined with the correct TrackRep" << std::endl;
561 retVal = false;
562 }
563 if (forwardUpdate_->getState().GetNrows() != dim || forwardUpdate_->getCov().GetNrows() != dim) {
564 std::cerr << "KalmanFitterInfo::checkConsistency(): forwardUpdate_ does not have the right dimension!" << std::endl;
565 retVal = false;
566 }
567 }
568
570 if(backwardPrediction_->getPlane() != plane) {
571 std::cerr << "KalmanFitterInfo::checkConsistency(): backwardPrediction_ is not defined with the correct plane" << std::endl;
572 retVal = false;
573 }
574 if(backwardPrediction_->getRep() != rep_) {
575 std::cerr << "KalmanFitterInfo::checkConsistency(): backwardPrediction_ is not defined with the correct TrackRep" << std::endl;
576 retVal = false;
577 }
578 if (backwardPrediction_->getState().GetNrows() != dim || backwardPrediction_->getCov().GetNrows() != dim) {
579 std::cerr << "KalmanFitterInfo::checkConsistency(): backwardPrediction_ does not have the right dimension!" << std::endl;
580 retVal = false;
581 }
582 }
583 if (backwardUpdate_) {
584 if(backwardUpdate_->getPlane() != plane) {
585 std::cerr << "KalmanFitterInfo::checkConsistency(): backwardUpdate_ is not defined with the correct plane" << std::endl;
586 retVal = false;
587 }
588 if(backwardUpdate_->getRep() != rep_) {
589 std::cerr << "KalmanFitterInfo::checkConsistency(): backwardUpdate_ is not defined with the correct TrackRep" << std::endl;
590 retVal = false;
591 }
592 if (backwardUpdate_->getState().GetNrows() != dim || backwardUpdate_->getCov().GetNrows() != dim) {
593 std::cerr << "KalmanFitterInfo::checkConsistency(): backwardUpdate_ does not have the right dimension!" << std::endl;
594 retVal = false;
595 }
596 }
597
598 for (std::vector<MeasurementOnPlane*>::const_iterator it = measurementsOnPlane_.begin(); it != measurementsOnPlane_.end(); ++it) {
599 if((*it)->getPlane() != plane) {
600 std::cerr << "KalmanFitterInfo::checkConsistency(): measurement is not defined with the correct plane" << std::endl;
601 retVal = false;
602 }
603 if((*it)->getRep() != rep_) {
604 std::cerr << "KalmanFitterInfo::checkConsistency(): measurement is not defined with the correct TrackRep" << std::endl;
605 retVal = false;
606 }
607 if ((*it)->getState().GetNrows() == 0) {
608 std::cerr << "KalmanFitterInfo::checkConsistency(): measurement has dimension 0!" << std::endl;
609 retVal = false;
610 }
611 }
612
613 // see if there is an update w/o prediction or measurement
615 std::cerr << "KalmanFitterInfo::checkConsistency(): forwardUpdate_ w/o forwardPrediction_" << std::endl;
616 retVal = false;
617 }
618
619 if (forwardUpdate_ && measurementsOnPlane_.size() == 0) {
620 std::cerr << "KalmanFitterInfo::checkConsistency(): forwardUpdate_ w/o measurement" << std::endl;
621 retVal = false;
622 }
623
624
626 std::cerr << "KalmanFitterInfo::checkConsistency(): backwardUpdate_ w/o backwardPrediction_" << std::endl;
627 retVal = false;
628 }
629
630 if (backwardUpdate_ && measurementsOnPlane_.size() == 0) {
631 std::cerr << "KalmanFitterInfo::checkConsistency(): backwardUpdate_ w/o measurement" << std::endl;
632 retVal = false;
633 }
634
635
636 return retVal;
637}
const TrackPoint * trackPoint_
const SharedPlanePtr & getPlane() const
const AbsTrackRep * rep_
No ownership.
virtual unsigned int getDim() const =0
Get the dimension of the state vector used by the track representation.
boost::scoped_ptr< ReferenceStateOnPlane > referenceState_
Reference state. Used by KalmanFitterRefTrack.
boost::scoped_ptr< KalmanFittedStateOnPlane > forwardUpdate_
boost::scoped_ptr< KalmanFittedStateOnPlane > backwardUpdate_
boost::scoped_ptr< MeasuredStateOnPlane > backwardPrediction_
boost::scoped_ptr< MeasuredStateOnPlane > forwardPrediction_
int i
Definition ShipAna.py:86
boost::shared_ptr< genfit::DetPlane > SharedPlanePtr
Shared Pointer to a DetPlane.

◆ clone()

KalmanFitterInfo * genfit::KalmanFitterInfo::clone ( ) const
virtual

Deep copy ctor for polymorphic class.

Implements genfit::AbsFitterInfo.

Definition at line 53 of file KalmanFitterInfo.cc.

53 {
54 KalmanFitterInfo* retVal = new KalmanFitterInfo(this->getTrackPoint(), this->getRep());
56 retVal->setReferenceState(new ReferenceStateOnPlane(*getReferenceState()));
58 retVal->setForwardPrediction(new MeasuredStateOnPlane(*getForwardPrediction()));
59 if (hasForwardUpdate())
60 retVal->setForwardUpdate(new KalmanFittedStateOnPlane(*getForwardUpdate()));
62 retVal->setBackwardPrediction(new MeasuredStateOnPlane(*getBackwardPrediction()));
64 retVal->setBackwardUpdate(new KalmanFittedStateOnPlane(*getBackwardUpdate()));
65
66 retVal->measurementsOnPlane_.reserve(getNumMeasurements());
67 for (std::vector<MeasurementOnPlane*>::const_iterator it = this->measurementsOnPlane_.begin(); it != this->measurementsOnPlane_.end(); ++it) {
68 retVal->addMeasurementOnPlane(new MeasurementOnPlane(**it));
69 }
70
71 retVal->fixWeights_ = this->fixWeights_;
72
73 return retVal;
74}
const AbsTrackRep * getRep() const
const TrackPoint * getTrackPoint() const
ReferenceStateOnPlane * getReferenceState() const
unsigned int getNumMeasurements() const
MeasuredStateOnPlane * getForwardPrediction() const
KalmanFittedStateOnPlane * getBackwardUpdate() const
MeasuredStateOnPlane * getBackwardPrediction() const
KalmanFittedStateOnPlane * getForwardUpdate() const

◆ deleteBackwardInfo()

void genfit::KalmanFitterInfo::deleteBackwardInfo ( )
virtual

Implements genfit::AbsFitterInfo.

Definition at line 428 of file KalmanFitterInfo.cc.

428 {
430 setBackwardUpdate(NULL);
431 fittedStateUnbiased_.reset();
432 fittedStateBiased_.reset();
433}
void setBackwardUpdate(KalmanFittedStateOnPlane *backwardUpdate)
void setBackwardPrediction(MeasuredStateOnPlane *backwardPrediction)
boost::scoped_ptr< MeasuredStateOnPlane > fittedStateUnbiased_
boost::scoped_ptr< MeasuredStateOnPlane > fittedStateBiased_
cache

◆ deleteForwardInfo()

void genfit::KalmanFitterInfo::deleteForwardInfo ( )
virtual

Implements genfit::AbsFitterInfo.

Definition at line 421 of file KalmanFitterInfo.cc.

421 {
423 setForwardUpdate(NULL);
424 fittedStateUnbiased_.reset();
425 fittedStateBiased_.reset();
426}
void setForwardUpdate(KalmanFittedStateOnPlane *forwardUpdate)
void setForwardPrediction(MeasuredStateOnPlane *forwardPrediction)

◆ deleteMeasurementInfo()

void genfit::KalmanFitterInfo::deleteMeasurementInfo ( )
virtual

Implements genfit::AbsFitterInfo.

Definition at line 442 of file KalmanFitterInfo.cc.

442 {
443 // FIXME: need smart pointers / smart containers here
444 for (size_t i = 0; i < measurementsOnPlane_.size(); ++i)
445 delete measurementsOnPlane_[i];
446
447 measurementsOnPlane_.clear();
448}

◆ deletePredictions()

void genfit::KalmanFitterInfo::deletePredictions ( )

Definition at line 435 of file KalmanFitterInfo.cc.

435 {
438 fittedStateUnbiased_.reset();
439 fittedStateBiased_.reset();
440}

◆ deleteReferenceInfo()

void genfit::KalmanFitterInfo::deleteReferenceInfo ( )
inlinevirtual

Implements genfit::AbsFitterInfo.

Definition at line 107 of file KalmanFitterInfo.h.

107{setReferenceState(NULL);}
void setReferenceState(ReferenceStateOnPlane *referenceState)

◆ fixWeights()

void genfit::KalmanFitterInfo::fixWeights ( bool  arg = true)
inline

Definition at line 101 of file KalmanFitterInfo.h.

101{fixWeights_ = arg;}

◆ getAvgWeightedMeasurementOnPlane()

MeasurementOnPlane genfit::KalmanFitterInfo::getAvgWeightedMeasurementOnPlane ( bool  ignoreWeights = false) const

Get weighted mean of all measurements.

Parameters
ignoreWeightsIf set, the weights of the individual measurements will be ignored (they will be treated as if they all had weight 1)

Definition at line 77 of file KalmanFitterInfo.cc.

77 {
78
79 MeasurementOnPlane retVal(*(measurementsOnPlane_[0]));
80
81 if(measurementsOnPlane_.size() == 1) {
82 if (ignoreWeights) {
83 retVal.setWeight(1.);
84 }
85 else {
86 double weight = (measurementsOnPlane_[0])->getWeight();
87 if (weight != 1.) {
88 retVal.getCov() *= 1. / weight;
89 }
90 retVal.setWeight(weight);
91 }
92 return retVal;
93 }
94
95 // more than one hit
96
97 double sumOfWeights(0), weight(0);
98
99 retVal.getState().Zero();
100 retVal.getCov().Zero();
101
102 TMatrixDSym covInv;
103
104 for(unsigned int i=0; i<measurementsOnPlane_.size(); ++i) {
105
106 if (i>0) {
107 // make sure we have compatible measurement types
108 // TODO: replace with Exceptions!
110 assert(*(measurementsOnPlane_[i]->getHMatrix()) == *(measurementsOnPlane_[0]->getHMatrix()));
111 }
112
113 tools::invertMatrix(measurementsOnPlane_[i]->getCov(), covInv); // invert cov
114 if (ignoreWeights) {
115 sumOfWeights += 1.;
116 }
117 else {
118 weight = measurementsOnPlane_[i]->getWeight();
119 sumOfWeights += weight;
120 covInv *= weight; // weigh cov
121 }
122 retVal.getCov() += covInv; // covInv is already inverted and weighted
123
124 retVal.getState() += covInv * measurementsOnPlane_[i]->getState();
125 }
126
127 // invert Cov
128 tools::invertMatrix(retVal.getCov());
129
130 retVal.getState() *= retVal.getCov();
131
132 retVal.setWeight(sumOfWeights);
133
134 return retVal;
135}
void invertMatrix(const TMatrixDSym &mat, TMatrixDSym &inv, double *determinant=NULL)
Invert a matrix, throwing an Exception when inversion fails. Optional calculation of determinant.
Definition Tools.cc:38

◆ getBackwardPrediction()

MeasuredStateOnPlane * genfit::KalmanFitterInfo::getBackwardPrediction ( ) const
inline

Definition at line 58 of file KalmanFitterInfo.h.

58{return backwardPrediction_.get();}

◆ getBackwardUpdate()

KalmanFittedStateOnPlane * genfit::KalmanFitterInfo::getBackwardUpdate ( ) const
inline

Definition at line 61 of file KalmanFitterInfo.h.

61{return backwardUpdate_.get();}

◆ getClosestMeasurementOnPlane()

MeasurementOnPlane * genfit::KalmanFitterInfo::getClosestMeasurementOnPlane ( const StateOnPlane sop) const

Get measurements which is closest to state.

Definition at line 138 of file KalmanFitterInfo.cc.

138 {
139 if(measurementsOnPlane_.size() == 0)
140 return NULL;
141
142 if(measurementsOnPlane_.size() == 1)
143 return getMeasurementOnPlane(0);
144
145 double normMin(9.99E99);
146 unsigned int iMin(0);
147 const AbsHMatrix* H = measurementsOnPlane_[0]->getHMatrix();
148 for (unsigned int i=0; i<getNumMeasurements(); ++i) {
149 if (*(measurementsOnPlane_[i]->getHMatrix()) != *H){
150 Exception e("KalmanFitterInfo::getClosestMeasurementOnPlane: Cannot compare measurements with different H-Matrices. Maybe you have to select a different multipleMeasurementHandling.", __LINE__,__FILE__);
151 e.setFatal();
152 throw e;
153 }
154
155 TVectorD res = measurementsOnPlane_[i]->getState() - H->Hv(sop->getState());
156 double norm = sqrt(res.Norm2Sqr());
157 if (norm < normMin) {
158 normMin = norm;
159 iMin = i;
160 }
161 }
162
163 return getMeasurementOnPlane(iMin);
164}
MeasurementOnPlane * getMeasurementOnPlane(int i=0) const

◆ getFittedState()

const MeasuredStateOnPlane & genfit::KalmanFitterInfo::getFittedState ( bool  biased = true) const
virtual

Get unbiased or biased (default) smoothed state.

Implements genfit::AbsFitterInfo.

Definition at line 178 of file KalmanFitterInfo.cc.

178 {
179 if (biased) {
180 if (fittedStateBiased_.get() != NULL)
181 return *fittedStateBiased_;
182
183 if (this->getTrackPoint()->getTrack()->getPointWithMeasurementAndFitterInfo(-1, this->getRep())
184 == this->getTrackPoint()) {// last measurement
185 if(forwardUpdate_.get() == NULL) {
186 Exception e("KalmanFitterInfo::getFittedState: Needed updates/redictions not available in this FitterInfo.", __LINE__,__FILE__);
187 e.setFatal();
188 throw e;
189 }
190 #ifdef DEBUG
191 std::cout << "KalmanFitterInfo::getFittedState - biased at last measurement = forwardUpdate_ \n";
192 #endif
193 return *forwardUpdate_;
194 }
195 else if (this->getTrackPoint()->getTrack()->getPointWithMeasurementAndFitterInfo(0, this->getRep())
196 == this->getTrackPoint()) { // first measurement
197 if(backwardUpdate_.get() == NULL) {
198 Exception e("KalmanFitterInfo::getFittedState: Needed updates/redictions not available in this FitterInfo.", __LINE__,__FILE__);
199 e.setFatal();
200 throw e;
201 }
202 #ifdef DEBUG
203 std::cout << "KalmanFitterInfo::getFittedState - biased at first measurement = backwardUpdate_ \n";
204 backwardUpdate_->Print();
205 #endif
206 return *backwardUpdate_;
207 }
208
209 if(forwardUpdate_.get() == NULL || backwardPrediction_.get() == NULL) {
210 Exception e("KalmanFitterInfo::getFittedState: Needed updates/redictions not available in this FitterInfo.", __LINE__,__FILE__);
211 e.setFatal();
212 throw e;
213 }
214 #ifdef DEBUG
215 std::cout << "KalmanFitterInfo::getFittedState - biased = mean(forwardUpdate_, backwardPrediction_) \n";
216 #endif
217 fittedStateBiased_.reset(new MeasuredStateOnPlane(calcAverageState(*forwardUpdate_, *backwardPrediction_)));
218 return *fittedStateBiased_;
219 }
220 else { // unbiased
221 if (fittedStateUnbiased_.get() != NULL)
222 return *fittedStateUnbiased_;
223
224 if (this->getTrackPoint()->getTrack()->getPointWithMeasurementAndFitterInfo(-1, this->getRep())
225 == this->getTrackPoint()) { // last measurement
226 if(forwardPrediction_.get() == NULL) {
227 Exception e("KalmanFitterInfo::getFittedState: Needed updates/redictions not available in this FitterInfo.", __LINE__,__FILE__);
228 e.setFatal();
229 throw e;
230 }
231 #ifdef DEBUG
232 std::cout << "KalmanFitterInfo::getFittedState - unbiased at last measurement = forwardPrediction_ \n";
233 #endif
234 return *forwardPrediction_;
235 }
236 else if (this->getTrackPoint()->getTrack()->getPointWithMeasurementAndFitterInfo(0, this->getRep())
237 == this->getTrackPoint()) { // first measurement
238 if(backwardPrediction_.get() == NULL) {
239 Exception e("KalmanFitterInfo::getFittedState: Needed updates/redictions not available in this FitterInfo.", __LINE__,__FILE__);
240 e.setFatal();
241 throw e;
242 }
243 #ifdef DEBUG
244 std::cout << "KalmanFitterInfo::getFittedState - unbiased at first measurement = backwardPrediction_ \n";
245 #endif
246 return *backwardPrediction_;
247 }
248
249 if(forwardPrediction_.get() == NULL || backwardPrediction_.get() == NULL) {
250 Exception e("KalmanFitterInfo::getFittedState: Needed updates/redictions not available in this FitterInfo.", __LINE__,__FILE__);
251 e.setFatal();
252 throw e;
253 }
254 #ifdef DEBUG
255 std::cout << "KalmanFitterInfo::getFittedState - unbiased = mean(forwardPrediction_, backwardPrediction_) \n";
256 #endif
258 return *fittedStateUnbiased_;
259 }
260
261}
MeasuredStateOnPlane calcAverageState(const MeasuredStateOnPlane &forwardState, const MeasuredStateOnPlane &backwardState)
Calculate weighted average between two MeasuredStateOnPlanes.

◆ getForwardPrediction()

MeasuredStateOnPlane * genfit::KalmanFitterInfo::getForwardPrediction ( ) const
inline

Definition at line 57 of file KalmanFitterInfo.h.

57{return forwardPrediction_.get();}

◆ getForwardUpdate()

KalmanFittedStateOnPlane * genfit::KalmanFitterInfo::getForwardUpdate ( ) const
inline

Definition at line 60 of file KalmanFitterInfo.h.

60{return forwardUpdate_.get();}

◆ getMeasurementOnPlane()

MeasurementOnPlane * genfit::KalmanFitterInfo::getMeasurementOnPlane ( int  i = 0) const
inline

Definition at line 64 of file KalmanFitterInfo.h.

64{if (i<0) i += measurementsOnPlane_.size(); return measurementsOnPlane_.at(i);}

◆ getMeasurementsOnPlane()

const std::vector< genfit::MeasurementOnPlane * > & genfit::KalmanFitterInfo::getMeasurementsOnPlane ( ) const
inline

Definition at line 63 of file KalmanFitterInfo.h.

◆ getNumMeasurements()

unsigned int genfit::KalmanFitterInfo::getNumMeasurements ( ) const
inline

Definition at line 70 of file KalmanFitterInfo.h.

70{return measurementsOnPlane_.size();}

◆ getPrediction()

MeasuredStateOnPlane * genfit::KalmanFitterInfo::getPrediction ( int  direction) const
inline

Definition at line 59 of file KalmanFitterInfo.h.

59{if (direction >=0) return forwardPrediction_.get(); return backwardPrediction_.get();}

◆ getReferenceState()

ReferenceStateOnPlane * genfit::KalmanFitterInfo::getReferenceState ( ) const
inline

Definition at line 56 of file KalmanFitterInfo.h.

56{return referenceState_.get();}

◆ getResidual()

MeasurementOnPlane genfit::KalmanFitterInfo::getResidual ( unsigned int  iMeasurement = 0,
bool  biased = false,
bool  onlyMeasurementErrors = true 
) const
virtual

Get unbiased (default) or biased residual from ith measurement.

Implements genfit::AbsFitterInfo.

Definition at line 264 of file KalmanFitterInfo.cc.

264 {
265
266 const MeasuredStateOnPlane& smoothedState = getFittedState(biased);
267 const MeasurementOnPlane* measurement = measurementsOnPlane_.at(iMeasurement);
268 const SharedPlanePtr& plane = measurement->getPlane();
269
270 // check equality of planes and reps
271 if(*(smoothedState.getPlane()) != *plane) {
272 Exception e("KalmanFitterInfo::getResidual: smoothedState and measurement are not defined in the same plane.", __LINE__,__FILE__);
273 throw e;
274 }
275 if(smoothedState.getRep() != measurement->getRep()) {
276 Exception e("KalmanFitterInfo::getResidual: smoothedState and measurement are not defined wrt the same TrackRep.", __LINE__,__FILE__);
277 throw e;
278 }
279
280 const AbsHMatrix* H = measurement->getHMatrix();
281
282 //TODO: shouldn't the definition be (smoothed - measured) ?
283 // res = -(H*smoothedState - measuredState)
284 TVectorD res(H->Hv(smoothedState.getState()));
285 res -= measurement->getState();
286 res *= -1;
287
288 if (onlyMeasurementErrors) {
289 return MeasurementOnPlane(res, measurement->getCov(), plane, smoothedState.getRep(), H->clone(), measurement->getWeight());
290 }
291
292 TMatrixDSym cov(smoothedState.getCov());
293 H->HMHt(cov);
294 cov += measurement->getCov();
295
296 return MeasurementOnPlane(res, cov, plane, smoothedState.getRep(), H->clone(), measurement->getWeight());
297}
const MeasuredStateOnPlane & getFittedState(bool biased=true) const
Get unbiased or biased (default) smoothed state.

◆ getUpdate()

KalmanFittedStateOnPlane * genfit::KalmanFitterInfo::getUpdate ( int  direction) const
inline

Definition at line 62 of file KalmanFitterInfo.h.

62{if (direction >=0) return forwardUpdate_.get(); return backwardUpdate_.get();}

◆ getWeights()

std::vector< double > genfit::KalmanFitterInfo::getWeights ( ) const

Get weights of measurements.

Definition at line 167 of file KalmanFitterInfo.cc.

167 {
168 std::vector<double> retVal(getNumMeasurements());
169
170 for (unsigned int i=0; i<getNumMeasurements(); ++i) {
171 retVal[i] = getMeasurementOnPlane(i)->getWeight();
172 }
173
174 return retVal;
175}

◆ hasBackwardPrediction()

bool genfit::KalmanFitterInfo::hasBackwardPrediction ( ) const
inlinevirtual

Implements genfit::AbsFitterInfo.

Definition at line 83 of file KalmanFitterInfo.h.

83{return (backwardPrediction_.get() != NULL);}

◆ hasBackwardUpdate()

bool genfit::KalmanFitterInfo::hasBackwardUpdate ( ) const
inlinevirtual

Implements genfit::AbsFitterInfo.

Definition at line 85 of file KalmanFitterInfo.h.

85{return (backwardUpdate_.get() != NULL);}

◆ hasForwardPrediction()

bool genfit::KalmanFitterInfo::hasForwardPrediction ( ) const
inlinevirtual

Implements genfit::AbsFitterInfo.

Definition at line 82 of file KalmanFitterInfo.h.

82{return (forwardPrediction_.get() != NULL);}

◆ hasForwardUpdate()

bool genfit::KalmanFitterInfo::hasForwardUpdate ( ) const
inlinevirtual

Implements genfit::AbsFitterInfo.

Definition at line 84 of file KalmanFitterInfo.h.

84{return (forwardUpdate_.get() != NULL);}

◆ hasMeasurements()

bool genfit::KalmanFitterInfo::hasMeasurements ( ) const
inlinevirtual

Implements genfit::AbsFitterInfo.

Definition at line 80 of file KalmanFitterInfo.h.

80{return getNumMeasurements() > 0;}

◆ hasPredictionsAndUpdates()

bool genfit::KalmanFitterInfo::hasPredictionsAndUpdates ( ) const
inline

Definition at line 87 of file KalmanFitterInfo.h.

◆ hasReferenceState()

bool genfit::KalmanFitterInfo::hasReferenceState ( ) const
inlinevirtual

Implements genfit::AbsFitterInfo.

Definition at line 81 of file KalmanFitterInfo.h.

81{return (referenceState_.get() != NULL);}

◆ hasUpdate()

bool genfit::KalmanFitterInfo::hasUpdate ( int  direction) const
inlinevirtual

Reimplemented from genfit::AbsFitterInfo.

Definition at line 86 of file KalmanFitterInfo.h.

86{if (direction < 0) return hasBackwardUpdate(); return hasForwardUpdate();}

◆ Print()

void genfit::KalmanFitterInfo::Print ( const Option_t *  = "") const
virtual

Reimplemented from genfit::AbsFitterInfo.

Definition at line 451 of file KalmanFitterInfo.cc.

451 {
452 std::cout << "genfit::KalmanFitterInfo. Belongs to TrackPoint " << trackPoint_ << "; TrackRep " << rep_ << "\n";
453
454 if (fixWeights_)
455 std::cout << "Weights are fixed.\n";
456
457 for (unsigned int i=0; i<measurementsOnPlane_.size(); ++i) {
458 std::cout << "MeasurementOnPlane Nr " << i <<": "; measurementsOnPlane_[i]->Print();
459 }
460
461 if (referenceState_) {
462 std::cout << "Reference state: "; referenceState_->Print();
463 }
464 if (forwardPrediction_) {
465 std::cout << "Forward prediction_: "; forwardPrediction_->Print();
466 }
467 if (forwardUpdate_) {
468 std::cout << "Forward update: "; forwardUpdate_->Print();
469 }
471 std::cout << "Backward prediction_: "; backwardPrediction_->Print();
472 }
473 if (backwardUpdate_) {
474 std::cout << "Backward update: "; backwardUpdate_->Print();
475 }
476
477}

◆ setBackwardPrediction()

void genfit::KalmanFitterInfo::setBackwardPrediction ( MeasuredStateOnPlane backwardPrediction)

Definition at line 332 of file KalmanFitterInfo.cc.

332 {
333 backwardPrediction_.reset(backwardPrediction);
334 fittedStateUnbiased_.reset();
335 fittedStateBiased_.reset();
337 setPlane(backwardPrediction_->getPlane());
338}

◆ setBackwardUpdate()

void genfit::KalmanFitterInfo::setBackwardUpdate ( KalmanFittedStateOnPlane backwardUpdate)

Definition at line 348 of file KalmanFitterInfo.cc.

348 {
349 backwardUpdate_.reset(backwardUpdate);
350 fittedStateUnbiased_.reset();
351 fittedStateBiased_.reset();
352 if (backwardUpdate_)
353 setPlane(backwardUpdate_->getPlane());
354}

◆ setForwardPrediction()

void genfit::KalmanFitterInfo::setForwardPrediction ( MeasuredStateOnPlane forwardPrediction)

Definition at line 324 of file KalmanFitterInfo.cc.

324 {
325 forwardPrediction_.reset(forwardPrediction);
326 fittedStateUnbiased_.reset();
327 fittedStateBiased_.reset();
329 setPlane(forwardPrediction_->getPlane());
330}

◆ setForwardUpdate()

void genfit::KalmanFitterInfo::setForwardUpdate ( KalmanFittedStateOnPlane forwardUpdate)

Definition at line 340 of file KalmanFitterInfo.cc.

340 {
341 forwardUpdate_.reset(forwardUpdate);
342 fittedStateUnbiased_.reset();
343 fittedStateBiased_.reset();
344 if (forwardUpdate_)
345 setPlane(forwardUpdate_->getPlane());
346}

◆ setMeasurementsOnPlane()

void genfit::KalmanFitterInfo::setMeasurementsOnPlane ( const std::vector< genfit::MeasurementOnPlane * > &  measurementsOnPlane)

Definition at line 357 of file KalmanFitterInfo.cc.

357 {
359
360 for (std::vector<MeasurementOnPlane*>::const_iterator m = measurementsOnPlane.begin(), mend = measurementsOnPlane.end(); m < mend; ++m) {
362 }
363}

◆ setPrediction()

void genfit::KalmanFitterInfo::setPrediction ( MeasuredStateOnPlane prediction,
int  direction 
)
inline

Definition at line 92 of file KalmanFitterInfo.h.

92{if (direction >=0) setForwardPrediction(prediction); else setBackwardPrediction(prediction);}

◆ setReferenceState()

void genfit::KalmanFitterInfo::setReferenceState ( ReferenceStateOnPlane referenceState)

Definition at line 300 of file KalmanFitterInfo.cc.

300 {
301 referenceState_.reset(referenceState);
302 if (referenceState_)
303 setPlane(referenceState_->getPlane());
304
305 // if plane has changed, delete outdated info
306 /*if (forwardPrediction_ && forwardPrediction_->getPlane() != getPlane())
307 setForwardPrediction(0);
308
309 if (forwardUpdate_ && forwardUpdate_->getPlane() != getPlane())
310 setForwardUpdate(0);
311
312 if (backwardPrediction_ && backwardPrediction_->getPlane() != getPlane())
313 setBackwardPrediction(0);
314
315 if (backwardUpdate_ && backwardUpdate_->getPlane() != getPlane())
316 setBackwardUpdate(0);
317
318 if (measurementsOnPlane_.size() > 0 && measurementsOnPlane_[0]->getPlane() != getPlane())
319 deleteMeasurementInfo();
320 */
321}

◆ setRep()

void genfit::KalmanFitterInfo::setRep ( const AbsTrackRep rep)
virtual

Reimplemented from genfit::AbsFitterInfo.

Definition at line 380 of file KalmanFitterInfo.cc.

380 {
381 rep_ = rep;
382
383 if (referenceState_)
384 referenceState_->setRep(rep);
385
387 forwardPrediction_->setRep(rep);
388
389 if (forwardUpdate_)
390 forwardUpdate_->setRep(rep);
391
393 backwardPrediction_->setRep(rep);
394
395 if (backwardUpdate_)
396 backwardUpdate_->setRep(rep);
397
398 for (std::vector<MeasurementOnPlane*>::iterator it = measurementsOnPlane_.begin(); it != measurementsOnPlane_.end(); ++it) {
399 (*it)->setRep(rep);
400 }
401}

◆ setUpdate()

void genfit::KalmanFitterInfo::setUpdate ( KalmanFittedStateOnPlane update,
int  direction 
)
inline

Definition at line 95 of file KalmanFitterInfo.h.

95{if (direction >=0) setForwardUpdate(update); else setBackwardUpdate(update);}

◆ setWeights()

void genfit::KalmanFitterInfo::setWeights ( const std::vector< double > &  weights)

Set weights of measurements.

Definition at line 404 of file KalmanFitterInfo.cc.

404 {
405
406 if (weights.size() != getNumMeasurements()) {
407 Exception e("KalmanFitterInfo::setWeights: weights do not have the same size as measurementsOnPlane", __LINE__,__FILE__);
408 throw e;
409 }
410
411 if (fixWeights_) {
412 std::cerr << "KalmanFitterInfo::setWeights - WARNING: setting weights even though weights are fixed!" << std::endl;
413 }
414
415 for (unsigned int i=0; i<getNumMeasurements(); ++i) {
416 getMeasurementOnPlane(i)->setWeight(weights[i]);
417 }
418}
void setWeight(double weight)

Member Data Documentation

◆ backwardPrediction_

boost::scoped_ptr<MeasuredStateOnPlane> genfit::KalmanFitterInfo::backwardPrediction_
private

Definition at line 122 of file KalmanFitterInfo.h.

◆ backwardUpdate_

boost::scoped_ptr<KalmanFittedStateOnPlane> genfit::KalmanFitterInfo::backwardUpdate_
private

Definition at line 123 of file KalmanFitterInfo.h.

◆ fittedStateBiased_

boost::scoped_ptr<MeasuredStateOnPlane> genfit::KalmanFitterInfo::fittedStateBiased_
mutableprivate

cache

Definition at line 125 of file KalmanFitterInfo.h.

◆ fittedStateUnbiased_

boost::scoped_ptr<MeasuredStateOnPlane> genfit::KalmanFitterInfo::fittedStateUnbiased_
mutableprivate

Definition at line 124 of file KalmanFitterInfo.h.

◆ fixWeights_

bool genfit::KalmanFitterInfo::fixWeights_
private

Definition at line 151 of file KalmanFitterInfo.h.

◆ forwardPrediction_

boost::scoped_ptr<MeasuredStateOnPlane> genfit::KalmanFitterInfo::forwardPrediction_
private

Definition at line 120 of file KalmanFitterInfo.h.

◆ forwardUpdate_

boost::scoped_ptr<KalmanFittedStateOnPlane> genfit::KalmanFitterInfo::forwardUpdate_
private

Definition at line 121 of file KalmanFitterInfo.h.

◆ measurementsOnPlane_

std::vector<MeasurementOnPlane*> genfit::KalmanFitterInfo::measurementsOnPlane_
private

cache

Definition at line 150 of file KalmanFitterInfo.h.

◆ referenceState_

boost::scoped_ptr<ReferenceStateOnPlane> genfit::KalmanFitterInfo::referenceState_
private

Reference state. Used by KalmanFitterRefTrack.

Definition at line 119 of file KalmanFitterInfo.h.


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