ROOT logo
#ifndef HMDCTRACKFITTER_H
#define HMDCTRACKFITTER_H

#include <cmath>
#include "TObject.h"
#include "hlocation.h"
#include "hmdctrackparam.h"
#include "hmdcwiredata.h"
#include "hmdcdrifttimepar.h"

class HMdcTrackFitPar;
class HMdcSizesCells;
class HMdcSizesCellsMod;
class HMdcSizesCellsLayer;
class HMdcClus;
class HMdcWireFit;
class HMdcClusFit;
class HCategory;
class HMdcDigitPar;
class HMdcEvntListCells;

class HMdcTrackFitInOut : public TObject {
  protected:
    Int_t version;          // =0 - old version of drift time calc.
                            // =1 - using of funct. HMdcCal2Par::calcTime(...)
                            // for recalc. distance to drift time.
    HMdcDriftTimePar* fDriftTimePar;
    HMdcTrackFitPar*  fitPar;     // fit parameters container
    HCategory*    fCalCat;        // pointer to MdcCal1 category
    HCategory*    fClusFitCat;    // cat. for debuging inform.
    HCategory*    fWireFitCat;    // -/-
    HCategory*    fGeantKineCat;  // pointer to HGeantKine category
    HCategory*    fGeantMdcCat;   // pointer to HGeantMdc category
    HLocation     locClusFit;     // location for new "HMdcClusFit" object
    HLocation     locWireFit;     // location for new "HMdcWireFit" object
    HLocation     loc;            // location for HMdcCal1 object

    Bool_t        geantFlag;      // =kTRUE for GEANT data
    Int_t         wireOffsetFlag; // remove signal time on wire from drift time
    HMdcDigitPar* fDigitPar;      // "phys" digitization parameters
    Float_t       signalSpeed;    // speed of signal on the wire (ns/mm)
    Bool_t        fprint;         // flag for control print-out
    Int_t         printStartEv;   // start to print from this event number
    Int_t         nEventPrint;    // print this number of events (def=1000000000)
    HMdcSizesCells*    fSizesCells;     //
    HMdcSizesCellsMod* fSCModAr[6][4];  //

    Bool_t   useRndbPar;        // kFALSE - use default parameters, kTRUE - RnDb
    
    // Track fitter cuts and parameters:
    Double_t cutWeight;         // cut for Tukey weight
    Int_t    tofFlag;           // =1 - calculate tof for each module
                                //     Don't use tofFlag=1 !!!
                                // =2 - calculate tof for each segment
                                // =3 - calculate one tof for all modules
    Bool_t   useRtdbTofFlag;    // =kFALSE - tofFlag is setted in macro
    Double_t minTimeOffset;     // cut on minimal value of time offset
    Double_t maxTimeOffset;     // cut on maximal value of time offset
    Int_t    minCellsNum;       // cut on the min.number of wires passed fit
    Double_t totalChi2Cut;      // cut on value of functional
    Double_t chi2PerNdfCut;     // cut on value of functional/NDF
    Bool_t   chi2CutFlag;       // if kTRUE - functional<totalChi2Cut
                                // else functional/NDF<chi2PerNdfCut

    // Tukey weights constants:
    Bool_t   useTukeyFlag;      // flag for using or not Tukey weights.
    Bool_t   useRtdbTFlag;      // =kFALSE if it setted in macro
    Double_t cnWs;    // if     (chi2<cnWs*sig2) wt=(1-(chi2/(cn4s*sig2))^2)^2
    Double_t cn2s;    // else if(chi2<cn2s*sig2) wt=(1- chi2/(cn2s*sig2)   )^2
    Double_t cn4s;    // else wt=0.
    Double_t tukeyScale;        // scaling of chi2 for tukey weight
    Double_t minSig2;           // minimal value of sugma^2
    Int_t    maxNFilterIter;    // max. number of iterations in wires filtering
    Double_t minWeight;         // weight=(weight<minWeight) ? 0.:1.;
    Double_t maxChi2;           // weight=(chi2[time]>maxChi2) ? 0.:1.;
    Bool_t   doTargScan;        // HMdcTrackFitterB use this flag
    Bool_t   useRtdbTScFlag;    // =kFALSE if it setted in macro
    UChar_t  calcInitValue;     // =0 don't calculate initial track parameters.
                                // =1 calculate initial track param. for all segments
                                // =2 calc.init.param and refit if fit had problem

    Double_t minTOffsetIter;    // time offset cut for intermediate iterations

    // Fit parameters for derivatives calc.:
    Double_t funCt1;           // if functional < funCt1 stepD1 will used
    Double_t stepD1;
    Double_t funCt2;           // else if functional < funCt2 stepD2 will used
    Double_t stepD2;
    Double_t stepD3;           // else stepD3 will used

    // For alignment check
    Bool_t   exclLay[6][4][6]; // exclud layer from fit
  public:
    HMdcTrackFitInOut(void);
    ~HMdcTrackFitInOut(void) {HMdcDriftTimePar::deleteCont();}
    Bool_t init(void);
    Bool_t reinit(void);
    void   setDefaultFitParam(void);
    void   setNoTof(void)                        {tofFlag=0; useRtdbTofFlag=kFALSE;}
    void   setModuleTof(void)                    {tofFlag=1; useRtdbTofFlag=kFALSE;}
    void   setSegmetTof(void)                    {tofFlag=2; useRtdbTofFlag=kFALSE;}
    void   setSectorTof(void)                    {tofFlag=3; useRtdbTofFlag=kFALSE;}
    Int_t  useWireOffset(void) const             {return wireOffsetFlag;}
    Bool_t isGeant(void)                         {return geantFlag;}
    void   setUseTukeyFlag(Bool_t flag)          {useTukeyFlag=flag; useRtdbTFlag=kFALSE;}
    void   setTukeyConstants(Double_t cw,Double_t c2,Double_t c4);
    void   setTukeyScale(Double_t tS)            {tukeyScale=tS;}
    void   setTukeyWtMinSigma(Double_t sig)      {minSig2=sig*sig;}
    void   setMaxNumFilterIter(Int_t ni)         {maxNFilterIter=ni;}
    void   setMinTOffsetIter(Double_t mt)        {minTOffsetIter=mt;}
    void   setMinWeight(Double_t mw)             {minWeight=mw;}
    void   setMaxMaxChi2(Double_t mc)            {maxChi2=mc;}
    void   setFunCut1(Double_t fc1)              {funCt1=fc1;}
    void   setStepD1(Double_t sd1)               {stepD1=sd1;}
    void   setFunCut2(Double_t fc2)              {funCt2=fc2;}
    void   setStepD2(Double_t sd2)               {stepD2=sd2;}
    void   setStepD3(Double_t sd3)               {stepD3=sd3;}
    void   setTargetScanFlag(Bool_t fl)          {doTargScan=fl; useRtdbTScFlag=kFALSE;}
    void   setPrintFlag(Bool_t prnt)             {fprint=prnt;}
    void   setPrintFlag(Int_t currentEvent);
    void   setNEventsPrint(Int_t start,Int_t nev);
    void   setChi2PerNdfCut(Double_t cut=50.); 
    void   setTotalChi2Cut(Double_t cut=300.);
    void   setSignalSpeed(Float_t ss)            {signalSpeed = ss;}
    void   setWeightCut(Double_t wc)             {cutWeight = wc;}
    void   excludeLayer(UInt_t s,UInt_t m,UInt_t l);
    void   excludeModule(UInt_t s,UInt_t m);

    HMdcWireFit* getNewWireFitSlot(Int_t* indWireFit);
    HMdcClusFit* getNewClusFitSlot(Int_t* indClusFit);
    void getTukeyConstants(Double_t& cw,Double_t& c2,Double_t& c4) const;
    HMdcSizesCellsMod** getSCellsModArr(Int_t s) {return fSCModAr[s];}
    HMdcSizesCells*     getMdcSizesCells(void)   {return fSizesCells;}
    HCategory* getWireFitCat(void)               {return fWireFitCat;}
    HCategory* getMdcCal1Cat(void)               {return fCalCat;}
    HCategory* getGeantKineCat(void)             {return fGeantKineCat;}
    HCategory* getGeantMdcCat(void)              {return fGeantMdcCat;}
    HMdcDriftTimePar* getDriftTimePar(void)      {return fDriftTimePar;}
    Double_t getWeightCut(void) const            {return cutWeight;}
    Int_t    getTofFlag(void) const              {return tofFlag;}
    Float_t  getSignalSpeed(void) const          {return signalSpeed;}
    Int_t    getDrTimeCalcVer(void) const        {return version;}
    Bool_t   getTukeyFlag(void) const            {return useTukeyFlag;}
    Bool_t   useTukey(void) const                {return useTukeyFlag;}
    Double_t getTukeyConstWs(void) const         {return cnWs;}
    Double_t getTukeyConst2s(void) const         {return cn2s;}
    Double_t getTukeyConst4s(void) const         {return cn4s;}
    Double_t getTukeyScale(void)                 {return tukeyScale;}
    Double_t getTukeyWtMinSigma(void) const      {return sqrt(minSig2);}
    Double_t getTukeyWtMinSigma2(void) const     {return minSig2;}
    Int_t    maxNumFilterIter(void) const        {return maxNFilterIter;}
    Double_t getMinTOffsetIter(void) const       {return minTOffsetIter;}
    Double_t getMinWeight(void) const            {return minWeight;}
    Double_t getMaxChi2(void) const              {return maxChi2;}
    Double_t getFunCut1(void) const              {return funCt1;}
    Double_t getStepD1(void) const               {return stepD1;}
    Double_t getFunCut2(void) const              {return funCt2;}
    Double_t getStepD2(void) const               {return stepD2;}
    Double_t getStepD3(void) const               {return stepD3;}
    Double_t getStepDer(Double_t funct) const;
    Bool_t   getPrintFlag(void) const            {return fprint;}
    Int_t    getPrintStartEvent(void) const      {return printStartEv;}
    Int_t    getNEventPrint(void) const          {return nEventPrint;}
    Bool_t   getDoTargScanFlag(void) const       {return doTargScan;}
    UChar_t  getCalcInitValueFlag(void) const    {return calcInitValue;}
    Double_t getMinTimeOffset(void) const        {return minTimeOffset;}
    Double_t getMaxTimeOffset(void) const        {return maxTimeOffset;}
    Int_t    getMinCellsNum(void) const          {return minCellsNum;}
    Double_t getTotalChi2Cut(void) const         {return totalChi2Cut;}
    Double_t getChi2PerNdfCut(void) const        {return chi2PerNdfCut;}
    Bool_t   getChi2CutFlag (void) const         {return chi2CutFlag;}
    Bool_t   isLayerExcluded(Int_t s,Int_t m,Int_t l) const;
    HCategory*      getClusFitCat(void)          {return fClusFitCat;}

  ClassDef(HMdcTrackFitInOut,0) // Service class for for Dubna track piece fitters
};

class HMdcTrackFitter : public TObject {
  protected:
    HMdcTrackFitInOut *fitInOut;
    Int_t              indClusFit;     // HMdcClusFit object index
    HMdcWiresArr       wires;          // array of wires for fit
    HMdcTrackParam     initParam;      // initial track parameters
    HMdcTrackParam     finalParam;     // final track parameters
    Int_t              iteration;      // counter of iterations

    Int_t              maxIteration;   // maximum number of interations for fit
    Int_t              tofFlag;        // see HMdcTrackFitInOut
    Bool_t             fprint;         // flag for control print-out
    Char_t             exitFlag;       // flag of track fitter exit (=1,2,3,4,5)
    Bool_t             fitStatus;      // =kTRUE if cluster fit accepted
    Int_t              segIndex;       // HMdcSeg index

  public:
    HMdcTrackFitter(HMdcTrackFitInOut* fIO);
    virtual         ~HMdcTrackFitter(void) {}
    virtual Int_t    minimize(Int_t iter=0) {return 0;}
    Bool_t           fillListHits(HMdcClus* cl1,HMdcClus* cl2);
    Bool_t           fillListHits(HMdcClus* cl1,HMdcClus* cl2,HMdcClus* cl3,HMdcClus* cl4) { 
                                  return fillListHits(cl1,cl2,cl3,cl4,NULL,NULL,NULL,NULL);}
    Bool_t           fillListHits(HMdcClus* cl1,HMdcClus* cl2,HMdcClus* cl3,HMdcClus* cl4,
                                  HMdcClus* cl5,HMdcClus* cl6) {
                                  return fillListHits(cl1,cl2,cl3,cl4,cl5,cl6,NULL,NULL);}
    Bool_t           fillListHits(HMdcClus* cl1,HMdcClus* cl2,HMdcClus* cl3,HMdcClus* cl4,
                                  HMdcClus* cl5,HMdcClus* cl6,HMdcClus* cl7,HMdcClus* cl8);
    Bool_t           fillListHits(HMdcEvntListCells* store,HMdcClus* clus1,HMdcClus* clus2);
    Bool_t           fillListHits(HMdcEvntListCells* store);

    void             setPrintFlag(Bool_t prnt);
    void             setModuleTof(void)            {tofFlag=1;}  // tof for each module
    void             setSegmentTof(void)           {tofFlag=2;}  // tof for each segment
    void             setSectorTof(void)            {tofFlag=3;}  // one tof for all modules

    // Input data:
    Bool_t           setClustAndFill(HMdcClus* cl1, HMdcClus* cl2=NULL);
    Bool_t           setClustAndFill(HMdcClus* cl1,      HMdcClus* cl2,
                                     HMdcClus* cl3,      HMdcClus* cl4,
                                     HMdcClus* cl5=NULL, HMdcClus* cl6=NULL,
                                     HMdcClus* cl7=NULL, HMdcClus* cl8=NULL);
    Bool_t           setClustAndFill(HMdcEvntListCells* store,
	                             Double_t x1, Double_t y1, Double_t z1,
	                             Double_t x2, Double_t y2, Double_t z2);
    void             setFitStatus(Bool_t st)        {fitStatus = st;}

    // Fit final parameters:
    Int_t            getNumOfParam(void) const      {return finalParam.getNumParam();}
    Double_t         getFunMin(void) const          {return finalParam.functional();}
    Double_t         getChi2(void) const            {return finalParam.getChi2();}
    Int_t            getIterationNumber(void) const {return iteration;}
    Char_t           getExitFlag(void) const        {return exitFlag;}
    Bool_t           getFitStatus(void) const       {return fitStatus;}
    HMdcTrackParam  *getFinalParam(void)            {return &finalParam;}
    HMdcTrackParam  *getInitParam(void)             {return &initParam;}

    HMdcWireData    *getWiresList(void)             {return wires.getWiresArray();}
    HMdcWiresArr    &getWiresArr(void)              {return wires;}
    HMdcWireData    &getWire(Int_t n)               {return wires[n];}
    Int_t            getSegIndex(void) const        {return segIndex;}
    void             setSegIndex(Int_t si)          {segIndex = si;}
    Int_t            getIndClusFit(void) const      {return indClusFit;}
    virtual Double_t getFunctional(void) const      {return -1.;} 
    void             fillOutput();

    Bool_t           fillClusFitCont(void);
    Bool_t           fitCluster(Int_t fittingMod=-1);
    void             refitCluster(Int_t fittingMod=-1);
    void             setRegionOfWires(Int_t mod=-1);
    void             switchOffWires(Int_t sec, Int_t mod, Int_t lay=-1, Int_t cell=-1)
                                    {wires.switchOff( sec, mod, lay, cell);}

  protected:
    void             init(void);
    void             setPlanes(void);
    Bool_t           testChi2Cut(void);
    Bool_t           fit(Int_t fittingMod=-1);

  ClassDef(HMdcTrackFitter,0) // Base class for Dubna track piece fitter
};

#endif
 hmdctrackfitter.h:1
 hmdctrackfitter.h:2
 hmdctrackfitter.h:3
 hmdctrackfitter.h:4
 hmdctrackfitter.h:5
 hmdctrackfitter.h:6
 hmdctrackfitter.h:7
 hmdctrackfitter.h:8
 hmdctrackfitter.h:9
 hmdctrackfitter.h:10
 hmdctrackfitter.h:11
 hmdctrackfitter.h:12
 hmdctrackfitter.h:13
 hmdctrackfitter.h:14
 hmdctrackfitter.h:15
 hmdctrackfitter.h:16
 hmdctrackfitter.h:17
 hmdctrackfitter.h:18
 hmdctrackfitter.h:19
 hmdctrackfitter.h:20
 hmdctrackfitter.h:21
 hmdctrackfitter.h:22
 hmdctrackfitter.h:23
 hmdctrackfitter.h:24
 hmdctrackfitter.h:25
 hmdctrackfitter.h:26
 hmdctrackfitter.h:27
 hmdctrackfitter.h:28
 hmdctrackfitter.h:29
 hmdctrackfitter.h:30
 hmdctrackfitter.h:31
 hmdctrackfitter.h:32
 hmdctrackfitter.h:33
 hmdctrackfitter.h:34
 hmdctrackfitter.h:35
 hmdctrackfitter.h:36
 hmdctrackfitter.h:37
 hmdctrackfitter.h:38
 hmdctrackfitter.h:39
 hmdctrackfitter.h:40
 hmdctrackfitter.h:41
 hmdctrackfitter.h:42
 hmdctrackfitter.h:43
 hmdctrackfitter.h:44
 hmdctrackfitter.h:45
 hmdctrackfitter.h:46
 hmdctrackfitter.h:47
 hmdctrackfitter.h:48
 hmdctrackfitter.h:49
 hmdctrackfitter.h:50
 hmdctrackfitter.h:51
 hmdctrackfitter.h:52
 hmdctrackfitter.h:53
 hmdctrackfitter.h:54
 hmdctrackfitter.h:55
 hmdctrackfitter.h:56
 hmdctrackfitter.h:57
 hmdctrackfitter.h:58
 hmdctrackfitter.h:59
 hmdctrackfitter.h:60
 hmdctrackfitter.h:61
 hmdctrackfitter.h:62
 hmdctrackfitter.h:63
 hmdctrackfitter.h:64
 hmdctrackfitter.h:65
 hmdctrackfitter.h:66
 hmdctrackfitter.h:67
 hmdctrackfitter.h:68
 hmdctrackfitter.h:69
 hmdctrackfitter.h:70
 hmdctrackfitter.h:71
 hmdctrackfitter.h:72
 hmdctrackfitter.h:73
 hmdctrackfitter.h:74
 hmdctrackfitter.h:75
 hmdctrackfitter.h:76
 hmdctrackfitter.h:77
 hmdctrackfitter.h:78
 hmdctrackfitter.h:79
 hmdctrackfitter.h:80
 hmdctrackfitter.h:81
 hmdctrackfitter.h:82
 hmdctrackfitter.h:83
 hmdctrackfitter.h:84
 hmdctrackfitter.h:85
 hmdctrackfitter.h:86
 hmdctrackfitter.h:87
 hmdctrackfitter.h:88
 hmdctrackfitter.h:89
 hmdctrackfitter.h:90
 hmdctrackfitter.h:91
 hmdctrackfitter.h:92
 hmdctrackfitter.h:93
 hmdctrackfitter.h:94
 hmdctrackfitter.h:95
 hmdctrackfitter.h:96
 hmdctrackfitter.h:97
 hmdctrackfitter.h:98
 hmdctrackfitter.h:99
 hmdctrackfitter.h:100
 hmdctrackfitter.h:101
 hmdctrackfitter.h:102
 hmdctrackfitter.h:103
 hmdctrackfitter.h:104
 hmdctrackfitter.h:105
 hmdctrackfitter.h:106
 hmdctrackfitter.h:107
 hmdctrackfitter.h:108
 hmdctrackfitter.h:109
 hmdctrackfitter.h:110
 hmdctrackfitter.h:111
 hmdctrackfitter.h:112
 hmdctrackfitter.h:113
 hmdctrackfitter.h:114
 hmdctrackfitter.h:115
 hmdctrackfitter.h:116
 hmdctrackfitter.h:117
 hmdctrackfitter.h:118
 hmdctrackfitter.h:119
 hmdctrackfitter.h:120
 hmdctrackfitter.h:121
 hmdctrackfitter.h:122
 hmdctrackfitter.h:123
 hmdctrackfitter.h:124
 hmdctrackfitter.h:125
 hmdctrackfitter.h:126
 hmdctrackfitter.h:127
 hmdctrackfitter.h:128
 hmdctrackfitter.h:129
 hmdctrackfitter.h:130
 hmdctrackfitter.h:131
 hmdctrackfitter.h:132
 hmdctrackfitter.h:133
 hmdctrackfitter.h:134
 hmdctrackfitter.h:135
 hmdctrackfitter.h:136
 hmdctrackfitter.h:137
 hmdctrackfitter.h:138
 hmdctrackfitter.h:139
 hmdctrackfitter.h:140
 hmdctrackfitter.h:141
 hmdctrackfitter.h:142
 hmdctrackfitter.h:143
 hmdctrackfitter.h:144
 hmdctrackfitter.h:145
 hmdctrackfitter.h:146
 hmdctrackfitter.h:147
 hmdctrackfitter.h:148
 hmdctrackfitter.h:149
 hmdctrackfitter.h:150
 hmdctrackfitter.h:151
 hmdctrackfitter.h:152
 hmdctrackfitter.h:153
 hmdctrackfitter.h:154
 hmdctrackfitter.h:155
 hmdctrackfitter.h:156
 hmdctrackfitter.h:157
 hmdctrackfitter.h:158
 hmdctrackfitter.h:159
 hmdctrackfitter.h:160
 hmdctrackfitter.h:161
 hmdctrackfitter.h:162
 hmdctrackfitter.h:163
 hmdctrackfitter.h:164
 hmdctrackfitter.h:165
 hmdctrackfitter.h:166
 hmdctrackfitter.h:167
 hmdctrackfitter.h:168
 hmdctrackfitter.h:169
 hmdctrackfitter.h:170
 hmdctrackfitter.h:171
 hmdctrackfitter.h:172
 hmdctrackfitter.h:173
 hmdctrackfitter.h:174
 hmdctrackfitter.h:175
 hmdctrackfitter.h:176
 hmdctrackfitter.h:177
 hmdctrackfitter.h:178
 hmdctrackfitter.h:179
 hmdctrackfitter.h:180
 hmdctrackfitter.h:181
 hmdctrackfitter.h:182
 hmdctrackfitter.h:183
 hmdctrackfitter.h:184
 hmdctrackfitter.h:185
 hmdctrackfitter.h:186
 hmdctrackfitter.h:187
 hmdctrackfitter.h:188
 hmdctrackfitter.h:189
 hmdctrackfitter.h:190
 hmdctrackfitter.h:191
 hmdctrackfitter.h:192
 hmdctrackfitter.h:193
 hmdctrackfitter.h:194
 hmdctrackfitter.h:195
 hmdctrackfitter.h:196
 hmdctrackfitter.h:197
 hmdctrackfitter.h:198
 hmdctrackfitter.h:199
 hmdctrackfitter.h:200
 hmdctrackfitter.h:201
 hmdctrackfitter.h:202
 hmdctrackfitter.h:203
 hmdctrackfitter.h:204
 hmdctrackfitter.h:205
 hmdctrackfitter.h:206
 hmdctrackfitter.h:207
 hmdctrackfitter.h:208
 hmdctrackfitter.h:209
 hmdctrackfitter.h:210
 hmdctrackfitter.h:211
 hmdctrackfitter.h:212
 hmdctrackfitter.h:213
 hmdctrackfitter.h:214
 hmdctrackfitter.h:215
 hmdctrackfitter.h:216
 hmdctrackfitter.h:217
 hmdctrackfitter.h:218
 hmdctrackfitter.h:219
 hmdctrackfitter.h:220
 hmdctrackfitter.h:221
 hmdctrackfitter.h:222
 hmdctrackfitter.h:223
 hmdctrackfitter.h:224
 hmdctrackfitter.h:225
 hmdctrackfitter.h:226
 hmdctrackfitter.h:227
 hmdctrackfitter.h:228
 hmdctrackfitter.h:229
 hmdctrackfitter.h:230
 hmdctrackfitter.h:231
 hmdctrackfitter.h:232
 hmdctrackfitter.h:233
 hmdctrackfitter.h:234
 hmdctrackfitter.h:235
 hmdctrackfitter.h:236
 hmdctrackfitter.h:237
 hmdctrackfitter.h:238
 hmdctrackfitter.h:239
 hmdctrackfitter.h:240
 hmdctrackfitter.h:241
 hmdctrackfitter.h:242
 hmdctrackfitter.h:243
 hmdctrackfitter.h:244
 hmdctrackfitter.h:245
 hmdctrackfitter.h:246
 hmdctrackfitter.h:247
 hmdctrackfitter.h:248
 hmdctrackfitter.h:249
 hmdctrackfitter.h:250
 hmdctrackfitter.h:251
 hmdctrackfitter.h:252
 hmdctrackfitter.h:253
 hmdctrackfitter.h:254
 hmdctrackfitter.h:255
 hmdctrackfitter.h:256
 hmdctrackfitter.h:257
 hmdctrackfitter.h:258
 hmdctrackfitter.h:259
 hmdctrackfitter.h:260