ROOT logo
#ifndef HMDCTRACKFITTERA_H
#define HMDCTRACKFITTERA_H

#include "hmdctrackfitter.h"

class HMdcTrackFitterA : public HMdcTrackFitter {
  protected:
    // Fit parameters for 1-st minim. method:
    Double_t initStepFit;       // init value of stepFit
    Int_t    limIter1forFilter; // max. number of iter. at the filtering
    Double_t limFunct1to2;      // limit for functional
    Double_t limDeltaF1to2;     // limit for functional
    Double_t limGrad1to2;       // limit for functional
    // DownhillOnGradient parameters:
    Double_t stepCh[6];
    Double_t dFunctMax;
    Double_t dFunctMin;

    // Fit parameters for 2-nd minim. method:
    Double_t limGrad2;          //
    Double_t limStep2[10];      // limit for diff. old-new param.
    Int_t    limIter2;          // max. number of iter.

    Double_t stepFit;           // current value of step for gradient dowhill
    Int_t    iterAfterFilter;   // counter of iter.number after filtering
    Int_t    return2to1;        // counter of method2->method1 switching
    HMdcTrackParam pari;        // track fit parameters for inner purpose
    HMdcTrackParam parMin;      // track fit parameters for inner purpose
    HMdcTrackParam tmpPar;      // track fit parameters for inner purpose

  public:
    HMdcTrackFitterA(HMdcTrackFitInOut* fIO);
    virtual ~HMdcTrackFitterA(void);
    virtual Int_t minimize(Int_t iter=0);
    void setDefaultParam(void);
    
    // Fit parameters for 1-st minim. method:
    void setInitStepFit(Double_t vl)       {initStepFit=vl;}
    void setLimIter1forFilter(Int_t vl)    {limIter1forFilter=vl;}
    void setLimFunct1to2(Double_t vl)      {limFunct1to2=vl;}
    void setLimDeltaF1to2(Double_t vl)     {limDeltaF1to2=vl;}
    void setLimGrad1to2(Double_t vl)       {limGrad1to2=vl;}
    // DownhillOnGradient parameters:
    void setStepCh(UInt_t i,Double_t vl)   {if(i<6) stepCh[i]=vl;}
    void setDFunctMax(Double_t vl)         {dFunctMax=vl;}
    void setDFunctMin(Double_t vl)         {dFunctMin=vl;}
    // Fit parameters for 2-nd minim. method:
    void setLimGrad2(Double_t vl)          {limGrad2=vl;}
    void setLimStep2(UInt_t i,Double_t vl) {if(i<10) limStep2[i]=vl;}
    void setLimIter2(Int_t vl)             {limIter2=vl;}

    virtual Double_t getFunctional(void);
    
  protected:
    void printResult(void);
    void printResult(const Char_t* status, HMdcTrackParam& par);
    void printStep(const Char_t* cond, Double_t fun, Double_t step);
    virtual void solutionOfLinearEquationsSystem(HMdcTrackParam& par);
    void downhillOnGradient(HMdcTrackParam& par);
    virtual Int_t firstMethod(void);
    virtual Int_t secondMethod(void);
    Double_t calcScaledAGrad(HMdcTrackParam& par);
    virtual Int_t doMinimization(void);

    ClassDef(HMdcTrackFitterA,0)  // Dubna track piece fitter. Version A.
};

#endif
 hmdctrackfittera.h:1
 hmdctrackfittera.h:2
 hmdctrackfittera.h:3
 hmdctrackfittera.h:4
 hmdctrackfittera.h:5
 hmdctrackfittera.h:6
 hmdctrackfittera.h:7
 hmdctrackfittera.h:8
 hmdctrackfittera.h:9
 hmdctrackfittera.h:10
 hmdctrackfittera.h:11
 hmdctrackfittera.h:12
 hmdctrackfittera.h:13
 hmdctrackfittera.h:14
 hmdctrackfittera.h:15
 hmdctrackfittera.h:16
 hmdctrackfittera.h:17
 hmdctrackfittera.h:18
 hmdctrackfittera.h:19
 hmdctrackfittera.h:20
 hmdctrackfittera.h:21
 hmdctrackfittera.h:22
 hmdctrackfittera.h:23
 hmdctrackfittera.h:24
 hmdctrackfittera.h:25
 hmdctrackfittera.h:26
 hmdctrackfittera.h:27
 hmdctrackfittera.h:28
 hmdctrackfittera.h:29
 hmdctrackfittera.h:30
 hmdctrackfittera.h:31
 hmdctrackfittera.h:32
 hmdctrackfittera.h:33
 hmdctrackfittera.h:34
 hmdctrackfittera.h:35
 hmdctrackfittera.h:36
 hmdctrackfittera.h:37
 hmdctrackfittera.h:38
 hmdctrackfittera.h:39
 hmdctrackfittera.h:40
 hmdctrackfittera.h:41
 hmdctrackfittera.h:42
 hmdctrackfittera.h:43
 hmdctrackfittera.h:44
 hmdctrackfittera.h:45
 hmdctrackfittera.h:46
 hmdctrackfittera.h:47
 hmdctrackfittera.h:48
 hmdctrackfittera.h:49
 hmdctrackfittera.h:50
 hmdctrackfittera.h:51
 hmdctrackfittera.h:52
 hmdctrackfittera.h:53
 hmdctrackfittera.h:54
 hmdctrackfittera.h:55
 hmdctrackfittera.h:56
 hmdctrackfittera.h:57
 hmdctrackfittera.h:58
 hmdctrackfittera.h:59
 hmdctrackfittera.h:60
 hmdctrackfittera.h:61
 hmdctrackfittera.h:62
 hmdctrackfittera.h:63
 hmdctrackfittera.h:64
 hmdctrackfittera.h:65
 hmdctrackfittera.h:66
 hmdctrackfittera.h:67
 hmdctrackfittera.h:68