FairRoot/PandaRoot
|
Determinstic Annealing Filter (DAF) implementation. More...
#include <DAF.h>
Public Member Functions | |
DAF (bool useRefKalman=true, double deltaWeight=1e-3, double deltaPval=1e-3) | |
Create DAF. Per default, use KalmanFitterRefTrack as fitter. More... | |
DAF (AbsKalmanFitter *kalman, double deltaWeight=1e-3, double deltaPval=1e-3) | |
Create DAF. Use the provided AbsKalmanFitter as fitter. More... | |
~DAF () | |
void | processTrackWithRep (Track *tr, const AbsTrackRep *rep, bool resortHits=false) |
Process a track using the DAF. More... | |
void | setProbCut (const double prob_cut) |
Set the probability cut for the weight calculation for the hits. More... | |
void | addProbCut (const double prob_cut, const int measDim) |
Set the probability cut for the weight calculation for the hits for a specific measurement dimensionality. More... | |
void | setBetas (double b1, double b2=-1, double b3=-1., double b4=-1., double b5=-1., double b6=-1., double b7=-1., double b8=-1., double b9=-1., double b10=-1.) |
Configure the annealing scheme. More... | |
const std::vector< double > & | getBetas () |
void | setAnnealingScheme (double bStart, double bFinal, unsigned int nSteps) |
Configure the annealing scheme. More... | |
void | setMaxIterations (unsigned int n) |
Set the maximum number of iterations. More... | |
void | setConvergenceDeltaWeight (double delta) |
If all weights change less than delta between two iterations, the fit is regarded as converged. More... | |
AbsKalmanFitter * | getKalman () const |
virtual void | setMaxFailedHits (int val) |
virtual void | setDebugLvl (unsigned int lvl=1) |
void | getChiSquNdf (const Track *tr, const AbsTrackRep *rep, double &bChi2, double &fChi2, double &bNdf, double &fNdf) const |
double | getChiSqu (const Track *tr, const AbsTrackRep *rep, int direction=-1) const |
double | getNdf (const Track *tr, const AbsTrackRep *rep, int direction=-1) const |
double | getRedChiSqu (const Track *tr, const AbsTrackRep *rep, int direction=-1) const |
double | getPVal (const Track *tr, const AbsTrackRep *rep, int direction=-1) const |
unsigned int | getMinIterations () const |
unsigned int | getMaxIterations () const |
double | getDeltaPval () const |
double | getRelChi2Change () const |
double | getBlowUpFactor () const |
bool | getResetOffDiagonals () const |
double | getBlowUpMaxVal () const |
eMultipleMeasurementHandling | getMultipleMeasurementHandling () const |
int | getMaxFailedHits () const |
virtual void | setMinIterations (unsigned int n) |
Set the minimum number of iterations. More... | |
void | setDeltaPval (double deltaPval) |
Set Convergence criterion. More... | |
void | setRelChi2Change (double relChi2Change) |
void | setBlowUpFactor (double blowUpFactor) |
void | setResetOffDiagonals (bool resetOffDiagonals) |
void | setBlowUpMaxVal (double blowUpMaxVal) |
Limit the cov entries to this maximum value when blowing up the cov. Set to negative value to disable. Default is 1.E6. More... | |
void | setMultipleMeasurementHandling (eMultipleMeasurementHandling mmh) |
How should multiple measurements be handled? More... | |
bool | isTrackPrepared (const Track *tr, const AbsTrackRep *rep) const |
bool | isTrackFitted (const Track *tr, const AbsTrackRep *rep) const |
bool | canIgnoreWeights () const |
returns if the fitter can ignore the weights and handle the MeasurementOnPlanes as if they had weight 1. More... | |
void | processTrack (Track *, bool resortHits=false) |
Protected Member Functions | |
const std::vector < MeasurementOnPlane * > | getMeasurements (const KalmanFitterInfo *fi, const TrackPoint *tp, int direction) const |
get the measurementsOnPlane taking the multipleMeasurementHandling_ into account More... | |
Protected Attributes | |
unsigned int | minIterations_ |
Minimum number of iterations to attempt. Forward and backward are counted as one iteration. More... | |
unsigned int | maxIterations_ |
Maximum number of iterations to attempt. Forward and backward are counted as one iteration. More... | |
double | deltaPval_ |
Convergence criterion. More... | |
double | relChi2Change_ |
double | blowUpFactor_ |
Blow up the covariance of the forward (backward) fit by this factor before seeding the backward (forward) fit. More... | |
bool | resetOffDiagonals_ |
Reset the off-diagonals to 0 when blowing up the cov. More... | |
double | blowUpMaxVal_ |
Limit the cov entries to this maxuimum value when blowing up the cov. More... | |
eMultipleMeasurementHandling | multipleMeasurementHandling_ |
How to handle if there are multiple MeasurementsOnPlane. More... | |
int | maxFailedHits_ |
unsigned int | debugLvl_ |
Private Member Functions | |
DAF (const DAF &) | |
DAF & | operator= (genfit::DAF const &) |
bool | calcWeights (Track *trk, const AbsTrackRep *rep, double beta) |
Calculate and set the weights for the next fitting pass. Return if convergence is met. The convergence criterium is the largest absolute change of all weights. More... | |
Private Attributes | |
double | deltaWeight_ |
std::vector< double > | betas_ |
double | chi2Cuts_ [7] |
boost::scoped_ptr < AbsKalmanFitter > | kalman_ |
Determinstic Annealing Filter (DAF) implementation.
The DAF is an iterative Kalman filter with annealing. It is capable of fitting tracks which are contaminated with noise hits. The algorithm is taken from the references R. Fruehwirth & A. Strandlie, Computer Physics Communications 120 (1999) 197-214 and CERN thesis: Dissertation by Matthias Winkler.
The weights which were assigned to the hits by the DAF are accessible in the MeasurementOnPlane objects in the KalmanFitterInfo objects.
|
private |
genfit::DAF::DAF | ( | bool | useRefKalman = true , |
double | deltaWeight = 1e-3 , |
||
double | deltaPval = 1e-3 |
||
) |
Create DAF. Per default, use KalmanFitterRefTrack as fitter.
useRefKalman | If false, use KalmanFitter as fitter. |
genfit::DAF::DAF | ( | AbsKalmanFitter * | kalman, |
double | deltaWeight = 1e-3 , |
||
double | deltaPval = 1e-3 |
||
) |
Create DAF. Use the provided AbsKalmanFitter as fitter.
void genfit::DAF::addProbCut | ( | const double | prob_cut, |
const int | measDim | ||
) |
Set the probability cut for the weight calculation for the hits for a specific measurement dimensionality.
|
private |
Calculate and set the weights for the next fitting pass. Return if convergence is met. The convergence criterium is the largest absolute change of all weights.
|
inherited |
returns if the fitter can ignore the weights and handle the MeasurementOnPlanes as if they had weight 1.
|
inline |
|
inlineinherited |
Definition at line 78 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::blowUpFactor_.
|
inlineinherited |
Definition at line 80 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::blowUpMaxVal_.
|
inherited |
|
inherited |
|
inlineinherited |
Definition at line 76 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::deltaPval_.
|
inline |
Definition at line 105 of file DAF.h.
References kalman_.
Referenced by setDebugLvl(), and setMaxFailedHits().
|
inlineinherited |
Definition at line 82 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::maxFailedHits_.
|
inlineinherited |
Definition at line 75 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::maxIterations_.
|
protectedinherited |
get the measurementsOnPlane taking the multipleMeasurementHandling_ into account
|
inlineinherited |
Definition at line 74 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::minIterations_.
|
inlineinherited |
Definition at line 81 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::multipleMeasurementHandling_.
|
inherited |
|
inherited |
|
inherited |
|
inlineinherited |
Definition at line 77 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::relChi2Change_.
|
inlineinherited |
Definition at line 79 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::resetOffDiagonals_.
|
inherited |
|
inherited |
|
private |
|
inherited |
Process all reps. Start with the cardinalRep and resort the hits if necessary (and supported by the fitter)
Referenced by PndRecoDafFit2::Fit(), and PndRecoKalmanFit2::Fit().
|
virtual |
Process a track using the DAF.
Implements genfit::AbsFitter.
void genfit::DAF::setAnnealingScheme | ( | double | bStart, |
double | bFinal, | ||
unsigned int | nSteps | ||
) |
Configure the annealing scheme.
Set a start and end temperature and the number of steps. A logarithmic sequence of temperatures will be calculated. Also sets minIterations_ and maxIterations_.
void genfit::DAF::setBetas | ( | double | b1, |
double | b2 = -1 , |
||
double | b3 = -1. , |
||
double | b4 = -1. , |
||
double | b5 = -1. , |
||
double | b6 = -1. , |
||
double | b7 = -1. , |
||
double | b8 = -1. , |
||
double | b9 = -1. , |
||
double | b10 = -1. |
||
) |
Configure the annealing scheme.
In the current implementation you need to provide at least one temperature and not more then ten temperatures. Also sets minIterations_ and maxIterations_.
|
inlineinherited |
Definition at line 108 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::blowUpFactor_.
|
inlineinherited |
Limit the cov entries to this maximum value when blowing up the cov. Set to negative value to disable. Default is 1.E6.
This is especially useful for fits where the measurements do not constrain one direction, e.g. parallel wire measurements. The fit will not be constrained along the wire direction. This also means that the covariance along the wire direction will not get smaller during the fit. However, it will be blown up before the next iteration, leading to an exponential growth of the covariance element(s) corresponding to the wire direction. This can then lead to numerical problems. To prevent this, the maximum value of the covariance elements after blowing up can be limited.
Definition at line 119 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::blowUpMaxVal_.
|
inline |
If all weights change less than delta between two iterations, the fit is regarded as converged.
Definition at line 103 of file DAF.h.
References deltaWeight_.
|
inlinevirtual |
Reimplemented from genfit::AbsFitter.
Definition at line 109 of file DAF.h.
References getKalman(), and genfit::AbsFitter::setDebugLvl().
|
inlineinherited |
Set Convergence criterion.
if track total P-value changes less than this between consecutive iterations, consider the track converged. chiĀ² from the backwards fit is used.
Definition at line 95 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::deltaPval_.
|
inlinevirtual |
Reimplemented from genfit::AbsKalmanFitter.
Definition at line 107 of file DAF.h.
References getKalman(), and genfit::AbsKalmanFitter::setMaxFailedHits().
|
inlinevirtual |
Set the maximum number of iterations.
Reimplemented from genfit::AbsKalmanFitter.
Definition at line 100 of file DAF.h.
References betas_, genfit::AbsKalmanFitter::maxIterations_, and n.
Referenced by PndRecoDafFit2::Init().
|
inlinevirtualinherited |
Set the minimum number of iterations.
Definition at line 85 of file AbsKalmanFitter.h.
References max(), genfit::AbsKalmanFitter::maxIterations_, and genfit::AbsKalmanFitter::minIterations_.
|
inlineinherited |
How should multiple measurements be handled?
Definition at line 122 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::multipleMeasurementHandling_.
void genfit::DAF::setProbCut | ( | const double | prob_cut | ) |
Set the probability cut for the weight calculation for the hits.
By default the cut values for measurements of dimensionality from 1 to 5 are calculated. If you what to have cut values for an arbitrary measurement dimensionality use addProbCut(double prob_cut, int maxDim);
|
inlineinherited |
@ brief Set Non-convergence criterion
if the relative chi^2 between two iterations is larger than relChi2Change_, the fit is NOT converged and further iterations will be done, even if the deltaPval_ convergence criterium is met. This is especially useful for fits which have a p-value of almost 0 (possibly due to bad start values), where the p-value from one iteration to the next might not change much. However, a significant change in chi^2 tells us, that the fit might not yet be converged.
Definition at line 106 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::relChi2Change_.
|
inlineinherited |
Definition at line 109 of file AbsKalmanFitter.h.
References genfit::AbsKalmanFitter::resetOffDiagonals_.
|
private |
Definition at line 121 of file DAF.h.
Referenced by getBetas(), and setMaxIterations().
|
protectedinherited |
Blow up the covariance of the forward (backward) fit by this factor before seeding the backward (forward) fit.
Definition at line 161 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::getBlowUpFactor(), and genfit::AbsKalmanFitter::setBlowUpFactor().
|
protectedinherited |
Limit the cov entries to this maxuimum value when blowing up the cov.
Definition at line 165 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::getBlowUpMaxVal(), and genfit::AbsKalmanFitter::setBlowUpMaxVal().
|
protectedinherited |
Definition at line 55 of file AbsFitter.h.
Referenced by genfit::AbsFitter::setDebugLvl().
|
protectedinherited |
Convergence criterion.
if track total P-value changes less than this between consecutive iterations, consider the track converged. chiĀ² from the backwards fit is used.
Definition at line 148 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::getDeltaPval(), and genfit::AbsKalmanFitter::setDeltaPval().
|
private |
Definition at line 120 of file DAF.h.
Referenced by setConvergenceDeltaWeight().
|
private |
Definition at line 127 of file DAF.h.
Referenced by getKalman().
|
protectedinherited |
after how many failed hits (exception during construction of plane, extrapolation etc.) should the fit be cancelled. -1 means don't cancel
Definition at line 172 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::getMaxFailedHits(), and genfit::AbsKalmanFitter::setMaxFailedHits().
|
protectedinherited |
Maximum number of iterations to attempt. Forward and backward are counted as one iteration.
Definition at line 141 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::AbsKalmanFitter(), genfit::AbsKalmanFitter::getMaxIterations(), genfit::AbsKalmanFitter::setMaxIterations(), setMaxIterations(), and genfit::AbsKalmanFitter::setMinIterations().
|
protectedinherited |
Minimum number of iterations to attempt. Forward and backward are counted as one iteration.
Definition at line 138 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::AbsKalmanFitter(), genfit::AbsKalmanFitter::getMinIterations(), genfit::AbsKalmanFitter::setMaxIterations(), and genfit::AbsKalmanFitter::setMinIterations().
|
protectedinherited |
How to handle if there are multiple MeasurementsOnPlane.
Definition at line 168 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::getMultipleMeasurementHandling(), and genfit::AbsKalmanFitter::setMultipleMeasurementHandling().
|
protectedinherited |
@ brief Non-convergence criterion
if the relative chi^2 between two iterations is larger than relChi2Change_, the fit is NOT converged and further iterations will be done, even if the deltaPval_ convergence criterium is met. This is especially useful for fits which have a p-value of almost 0 (possibly due to bad start values), where the p-value from one iteration to the next might not change much. However, a significant change in chi^2 tells us, that the fit might not yet be converged.
Definition at line 158 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::getRelChi2Change(), and genfit::AbsKalmanFitter::setRelChi2Change().
|
protectedinherited |
Reset the off-diagonals to 0 when blowing up the cov.
Definition at line 163 of file AbsKalmanFitter.h.
Referenced by genfit::AbsKalmanFitter::getResetOffDiagonals(), and genfit::AbsKalmanFitter::setResetOffDiagonals().