ROOT logo
//*--- Author : A.P.Jerusalimov
//*--- Modified: 23.01.07 V.Pechenov
//*--- Modified: 16.06.2005 by V.Pechenov
//*--- Modified: 10.10.2003 by A.P.Jerusalimov
//*--- Modified: 15.07.2003 by V.Pechenov
//*--- Modified: 27.02.2002
//*--- Modified: 24.03.2002 by V.Pechenov
//*--- Modified: 17.07.2002 by A.P.Jerusalimov
//*--- Modified: 08.08.2002 by A.P.Jerusalimov

#include "hmdctrackfittera.h"
#include "hmdctrackfitpar.h"
#include "hmdcsizescells.h"
#include "hsymmat.h"
#include "hmdccal1sim.h"
#include "hcategory.h"
#include "hmdcclus.h"
#include <stdlib.h>
#include "TMatrixD.h"

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
// 
// HMdcTrackFitterA
//
// Dubna track straight piece fitter. Version A.
//
//////////////////////////////////////////////////////////////////////////////

ClassImp(HMdcTrackFitterA)

//-----------------------------------------------------
HMdcTrackFitterA::HMdcTrackFitterA(HMdcTrackFitInOut* fIO)
    : HMdcTrackFitter(fIO) {
  setDefaultParam();
}

void HMdcTrackFitterA::setDefaultParam(void) {
  maxIteration = 250;  // maximal numer of iterations
  // Fit parameters for 1-st minim. method:
// !!!!!!!!!!!!!!!!!!!!!! 50. !!!!!!!!!!!!!!
  initStepFit       = 5.; //10.; //50.;     // init value of stepFit
  limIter1forFilter = 3;       // max. number of iter. at the filtering
  limFunct1to2      = 10.0;    // limit for functional
  limDeltaF1to2     = 0.001;   // limit for functional
  limGrad1to2       = 1.0;     //
  // DownhillOnGradient parameters:
  stepCh[0] = 2.0;
  stepCh[1] = 1.5;
  stepCh[2] = 1.5;
  stepCh[3] = 2.0;
  stepCh[4] = 1.2;
  stepCh[5] = 1.1;
  dFunctMax = 1.5;
  dFunctMin = 0.7;

  // Fit parameters for 2-nd minim. method:
  limGrad2    = 0.5;              //
  limStep2[0] = 0.25;             // dX1: limit for diff. old-new param.
  limStep2[1] = 0.15;             // dX2
  limStep2[2] = 0.25;             // dY1
  limStep2[3] = 0.15;             // dY2
  limIter2    = 6; /*3;*/         // max. number of iter.
}

//-----------------------------------------------------
HMdcTrackFitterA::~HMdcTrackFitterA(void) {
}

//-----------------------------------------------------
Double_t HMdcTrackFitterA::getFunctional(void) {
  // not used yet ???
  return wires.valueOfFunctional(finalParam);
}

//-----------------------------------------------------
Int_t HMdcTrackFitterA::minimize(Int_t iter) {
  if(fprint) {
    printf("\n  ********************************\n");
    printf("  *** PROGRAM OF TRACK FITTING ***\n");
    printf("  ********************************\n");
  }
  wires.setSizeGrad2Matr(initParam);
  finalParam.copyLine(initParam);
  finalParam.setIterNumb(0);
  parMin.copyPlanes(initParam);
  pari.copyPlanes(initParam);
  tmpPar.copyPlanes(initParam);
  //********* Initialisation of fit ************************
  stepFit=initStepFit;      // init value of step
  return2to1 = 0;           // counter

  wires.valueOfFunctional(finalParam);
  wires.calcTdcErrorsAndFunct(finalParam);
  iterAfterFilter=0;
  if(fitInOut->useTukey()) wires.filterOfHits(finalParam,1);
  
  return doMinimization();
}

Int_t HMdcTrackFitterA::doMinimization(void) {
  //******************* BEGIN of FIT PROCEDURE ******************
  Int_t minimizationMethod = 1;
  for (iteration = 0; iteration < maxIteration; iteration++ ) {
    if(minimizationMethod==1) {
      minimizationMethod=firstMethod();
      if(minimizationMethod<1) break;
    } else if(minimizationMethod==2) {
      minimizationMethod=secondMethod();
      if(minimizationMethod<1) break;
    }
  } //end of iter loop
  exitFlag=(minimizationMethod<0) ? -minimizationMethod : 4;
  if(fprint) printResult();

  //******************* TEST of RESULT ***************************
  wires.valueOfFunctional(finalParam,2);
  if(!wires.calcNGoodWiresAndChi2(finalParam)) return 0;
  if(testChi2Cut() && exitFlag <= 3) {
//    if(wires.calculateErrors(finalParam)) { //Errors calculations
    if(wires.calcErrorsAnalyt(finalParam)) { //Errors calculations
      if(fprint) printf("    !!! GOOD EXIT !!!\n");
      return 1;
    }
    exitFlag=5;
  }
  return 0;
}

//---------------------------------------------------------------------
Int_t HMdcTrackFitterA::firstMethod(void) {
  //*** 1-st method
  // function return minimizationMethod flag
  Double_t funct1beforeFilter=finalParam.functional();
//  wires.calcDerivatives(finalParam,1);
  wires.calcAnalyticDerivatives1(finalParam);
  for(; iteration<maxIteration; iteration++) {
    downhillOnGradient(finalParam);
    if(fprint) finalParam.printParam("out1");

    iterAfterFilter++;
    //---------*** Test for method of minimization ***---------
    if(return2to1 > 0 && iterAfterFilter < 2) {
//      wires.calcDerivatives(finalParam,1);
      wires.calcAnalyticDerivatives1(finalParam);
      continue;
    }

    if((iterAfterFilter>=2 && ((finalParam>funct1beforeFilter && iteration>2) ||
        finalParam.isFunctRelChangLess(limDeltaF1to2))) ||
        finalParam<limFunct1to2) {
// nuzhna li fil'traciya
      wires.calcTdcErrorsAndFunct(finalParam,1);
      return 2; // mini. method
    }

    if(iterAfterFilter == limIter1forFilter) { // ??? == Pochemu???
      funct1beforeFilter = finalParam.functional();
      if(fitInOut->useTukey() && wires.filterOfHits(finalParam))
          iterAfterFilter=0;
      wires.calcTdcErrorsAndFunct(finalParam);
    }

//    wires.calcDerivatives(finalParam,1);
    wires.calcAnalyticDerivatives1(finalParam);
    // Scaled gradiend calculation // ??? Pochemu proveryaetsya sc.gr.???
    if(calcScaledAGrad(finalParam)<limGrad1to2) {
// nuzhna li fil'traciya
      wires.calcTdcErrorsAndFunct(finalParam,1);
      return 2; // mini. method
    }
  }
  return -4;
}

Int_t HMdcTrackFitterA::secondMethod(void) {
  //*** 2-nd method
  Int_t iteration2=0;
  Bool_t final = kFALSE;
  parMin.copyAllParam(finalParam);
  for(; iteration<maxIteration; iteration++) {
//    wires.calcDerivatives(parMin,2);
    wires.calcAnalyticDerivatives2(parMin);
    parMin.saveFunct();
    pari.copyParam(parMin);
    solutionOfLinearEquationsSystem(parMin);
    if(fprint) parMin.printParam((final) ? "outF":"out2");
//??? esli vesa pereschitaniy to kak sravnivat' s finalParam ???
    Bool_t parMinEqFinalParam = parMin < finalParam;
    if(parMinEqFinalParam) finalParam.copyAllParam(parMin);
    iteration2++;

    //***  Test for exit from minimization
    if(!final) {
      if(/*agrad < 1.5*limGrad2 ||*/ !pari.compare(parMin,limStep2,1.5) ||
            (return2to1>0 && iteration2>=limIter2)) {
// !??? /*agrad < 1.5*limGrad2 ||*/ Proverit'. I dlya agrad nado schita' proizv.!!!
        // For filtering take the best parameters:
        if(!parMinEqFinalParam) wires.valueOfFunctional(finalParam);
        if(fitInOut->useTukey() && wires.filterOfHits(finalParam))
            iterAfterFilter=0;
// !??? Pochemu net calcTdcErrorsAndFunct ???
        wires.setWeightsTo1or0(finalParam);  // for finalParam!
        iterAfterFilter = -1000000;
        if(finalParam > 100000.0) return -5; // Too large functional !
        parMin.copyAllParam(finalParam);
        final = kTRUE;
        iteration2 = 0;
      } else if(iteration2 >= limIter2) {
        //  For filtering take the best parameters:
        if(!parMinEqFinalParam) wires.valueOfFunctional(finalParam);
        if(fitInOut->useTukey() && wires.filterOfHits(finalParam))
            iterAfterFilter=0;
        wires.calcTdcErrorsAndFunct(finalParam);
        iteration2 = 0;
        return2to1++;
        return 1;   // go back to the first method
      }
    } else {
//      wires.calcDerivatives(parMin,2);
//      if(wires.getAGrad() < limGrad2) return -1;    // return exit flag 1
      if(wires.calcAGradAnalyt(parMin) < limGrad2) return -1;  // return exit flag 1
      if(iteration2 < 2) continue;
      if(!pari.compare(parMin,limStep2)) return -2; // return exit flag 2
      if(iteration2 >= limIter2) return -3;         // return exit flag 3
    }
  }
  return -4;
}

void HMdcTrackFitterA::solutionOfLinearEquationsSystem(HMdcTrackParam& par) {
  // input :  matrix grad2[i][j] (i-string, j-column),  vector grad[i]
  // output:  new param. in vector par[i]
  Double_t a[10][11];
  Int_t ieq[10];

  TMatrixD& grad2m=wires.getGrad2Matr();
  Double_t* grad=wires.getGrad();
  Int_t nmOfPar=par.getNumParam();
  for(Int_t i = 0; i < nmOfPar; i++) {
    for(Int_t j = 0; j < nmOfPar; j++) a[i][j] = grad2m(i,j);
    a[i][nmOfPar] = -grad[i];
    ieq[i] = -1;
  }
  Int_t iMax = 0;
  Int_t jMax = 0;
  for(Int_t l = 0; l < nmOfPar; l++) {
    Double_t maxA = 0.0 ;
    for(Int_t i = 0; i < nmOfPar; i++) {
      if(ieq[i] != -1) continue;
      for(Int_t j = 0; j < nmOfPar; j++) {
	if(fabs(a[i][j]) <= maxA) continue;
	maxA = fabs(a[i][j]);
	iMax = i;
	jMax = j;
      }
    }
    ieq[iMax] = jMax;
    Double_t corr = a[iMax][jMax];
    for(Int_t j = 0; j <= nmOfPar; j++) a[iMax][j] /= corr;
    for(Int_t i = 0; i < nmOfPar; i++) {
      if(i == iMax) continue;
      corr = a[i][jMax];
      for(Int_t j = 0; j <= nmOfPar; j++) a[i][j] -= a[iMax][j]*corr;
    }
  }

  for(Int_t i = 0; i < nmOfPar; i++) {
    Int_t iout = ieq[i];
    if(iout>=0) par.addToParam(iout,a[i][nmOfPar]); //!!!
  }

  wires.valueOfFunctional(par);
  par.incIterNumb();
}

//-----------------------------------------------------
void HMdcTrackFitterA::downhillOnGradient(HMdcTrackParam& par) {
  Int_t istepinc = 0;
  Int_t istepdec = 0;
  Int_t iprint = 0;

  //--- Scaling:
  Int_t numOfParam=par.getNumParam();
  Double_t scalePar[numOfParam];
  Double_t cosgrad[numOfParam];
  Double_t agrad=wires.getAGrad();
  Double_t* grad=wires.getGrad();
  TMatrixD& grad2=wires.getGrad2Matr();
  if(iteration>0) {
    agrad = 0.0;
    for(Int_t k=0; k<numOfParam; k++) {
      scalePar[k] = (grad2(k,k)>0.001) ? 1./sqrt(grad2(k,k)) : 1.;
      agrad += grad[k]*grad[k]*scalePar[k]*scalePar[k];
    }
    agrad = sqrt(agrad);
    if(agrad < 1.e-150) for(Int_t k=0;k<numOfParam;k++) cosgrad[k]=0.;
    else for(Int_t k=0;k<numOfParam;k++) cosgrad[k]=grad[k]*scalePar[k]/agrad;
  } else {
    for(Int_t k=0;k<numOfParam;k++) scalePar[k] = 1.0;
    if(agrad < 1.e-150) for(Int_t k=0;k<numOfParam;k++) cosgrad[k]=0.;
    else for(Int_t k=0;k<numOfParam;k++) cosgrad[k]=grad[k]/agrad;
  }

  Double_t functIn=par.functional();
  par.saveFunct();
  tmpPar.setIterNumb(par.getIterNumb());

  tmpPar.setScParam(par,cosgrad,0.001,scalePar);
  Double_t dFdR0 = (wires.valueOfFunctional(tmpPar)/functIn - 1.0)/(0.001);

  Double_t functi;
  Double_t  dFdRi;
  while(kTRUE) {
    tmpPar.setScParam(par,cosgrad,stepFit,scalePar);
    functi = wires.valueOfFunctional(tmpPar)/functIn;
    tmpPar.setScParam(par,cosgrad,stepFit*1.001,scalePar);
    dFdRi = (wires.valueOfFunctional(tmpPar)/functIn-functi)/(stepFit*0.001);
    if(dFdRi < 0) {
      if(functi > 1.0 && istepdec < 2) {
        stepFit = stepFit/5;
        istepdec++;
        if(fprint && iprint == 1) printStep("de",functi,stepFit);
      } else {
        if(istepinc ==2) break;
        stepFit *= stepCh[istepdec + 3*istepinc++];
        if(fprint && iprint == 1) printStep("in",functi,stepFit);
      }
    } else {   //dFdRi >= 0
      if(functi < dFunctMin) {
        if(istepinc ==2) break;
        stepFit *= stepCh[istepdec + 3*istepinc++];
        if(fprint && iprint == 1) printStep("in",functi,stepFit);
      } else if(functi > dFunctMax) {
        if(istepdec ==2) break;
        stepFit /= stepCh[istepinc + 3*istepdec++];
        if(fprint && iprint == 1) printStep("de",functi,stepFit);
      } else break;
    }
  }

  Double_t coeffC = 1.0;
  Double_t coeffB = dFdR0;
  Double_t coeffA = (functi - coeffC - coeffB*stepFit)/(stepFit*stepFit);
  Double_t stepFit1 = -coeffB/(2*coeffA);
  if(coeffA < 0.000001 || (stepFit1/stepFit) > 1.2)
      stepFit1 = (dFdRi > 0) ? stepFit/2.0 : stepFit/1.5;

  tmpPar.setScParam(par,cosgrad,stepFit1,scalePar);
  wires.valueOfFunctional(tmpPar);
  if(tmpPar < par) par.copyNewParam(tmpPar);
  else {
    par.setScParam(cosgrad,0.3*stepFit1,scalePar);  // 0.3 ????
    wires.valueOfFunctional(par);
  }
  par.incIterNumb();
}

Double_t HMdcTrackFitterA::calcScaledAGrad(HMdcTrackParam& par) {
  Double_t agradSc = 0.0;
  Int_t numOfParam=par.getNumParam();
  Double_t* grad=wires.getGrad();
  TMatrixD& grad2=wires.getGrad2Matr();
  for(Int_t k=0; k<numOfParam; k++) agradSc +=(grad2(k,k)>0.001) ?
    grad[k]*grad[k]/grad2(k,k) : grad[k]*grad[k];
  return sqrt(agradSc);
}

//-----------------------------------------------------
void HMdcTrackFitterA::printResult(void) {
  if(exitFlag==1) printResult(" conversion ok, exit=1 ",finalParam);
  else if(exitFlag==2) printResult(" conversion ok, exit=2 ",finalParam);
  else if(exitFlag==3) printResult(" no conversion, exit=3 ",finalParam);
  else if(exitFlag==4) printResult(" no conversion, exit=4 ",finalParam);
  else printResult(" no conversion, Too large functional!",finalParam);
}

void HMdcTrackFitterA::printResult(const Char_t* status,HMdcTrackParam& par) {
  printf("%s\n",status);
  par.printParam("final");
  printf("**************************************************************\n\n");
}

void HMdcTrackFitterA::printStep(const Char_t* cond, Double_t fun, Double_t step) {
  printf("  *functi(dFdRi>0)=%g  *!  step is %screased, now stepFit=%g\n",
      fun,cond,step);
}
 hmdctrackfittera.cc:1
 hmdctrackfittera.cc:2
 hmdctrackfittera.cc:3
 hmdctrackfittera.cc:4
 hmdctrackfittera.cc:5
 hmdctrackfittera.cc:6
 hmdctrackfittera.cc:7
 hmdctrackfittera.cc:8
 hmdctrackfittera.cc:9
 hmdctrackfittera.cc:10
 hmdctrackfittera.cc:11
 hmdctrackfittera.cc:12
 hmdctrackfittera.cc:13
 hmdctrackfittera.cc:14
 hmdctrackfittera.cc:15
 hmdctrackfittera.cc:16
 hmdctrackfittera.cc:17
 hmdctrackfittera.cc:18
 hmdctrackfittera.cc:19
 hmdctrackfittera.cc:20
 hmdctrackfittera.cc:21
 hmdctrackfittera.cc:22
 hmdctrackfittera.cc:23
 hmdctrackfittera.cc:24
 hmdctrackfittera.cc:25
 hmdctrackfittera.cc:26
 hmdctrackfittera.cc:27
 hmdctrackfittera.cc:28
 hmdctrackfittera.cc:29
 hmdctrackfittera.cc:30
 hmdctrackfittera.cc:31
 hmdctrackfittera.cc:32
 hmdctrackfittera.cc:33
 hmdctrackfittera.cc:34
 hmdctrackfittera.cc:35
 hmdctrackfittera.cc:36
 hmdctrackfittera.cc:37
 hmdctrackfittera.cc:38
 hmdctrackfittera.cc:39
 hmdctrackfittera.cc:40
 hmdctrackfittera.cc:41
 hmdctrackfittera.cc:42
 hmdctrackfittera.cc:43
 hmdctrackfittera.cc:44
 hmdctrackfittera.cc:45
 hmdctrackfittera.cc:46
 hmdctrackfittera.cc:47
 hmdctrackfittera.cc:48
 hmdctrackfittera.cc:49
 hmdctrackfittera.cc:50
 hmdctrackfittera.cc:51
 hmdctrackfittera.cc:52
 hmdctrackfittera.cc:53
 hmdctrackfittera.cc:54
 hmdctrackfittera.cc:55
 hmdctrackfittera.cc:56
 hmdctrackfittera.cc:57
 hmdctrackfittera.cc:58
 hmdctrackfittera.cc:59
 hmdctrackfittera.cc:60
 hmdctrackfittera.cc:61
 hmdctrackfittera.cc:62
 hmdctrackfittera.cc:63
 hmdctrackfittera.cc:64
 hmdctrackfittera.cc:65
 hmdctrackfittera.cc:66
 hmdctrackfittera.cc:67
 hmdctrackfittera.cc:68
 hmdctrackfittera.cc:69
 hmdctrackfittera.cc:70
 hmdctrackfittera.cc:71
 hmdctrackfittera.cc:72
 hmdctrackfittera.cc:73
 hmdctrackfittera.cc:74
 hmdctrackfittera.cc:75
 hmdctrackfittera.cc:76
 hmdctrackfittera.cc:77
 hmdctrackfittera.cc:78
 hmdctrackfittera.cc:79
 hmdctrackfittera.cc:80
 hmdctrackfittera.cc:81
 hmdctrackfittera.cc:82
 hmdctrackfittera.cc:83
 hmdctrackfittera.cc:84
 hmdctrackfittera.cc:85
 hmdctrackfittera.cc:86
 hmdctrackfittera.cc:87
 hmdctrackfittera.cc:88
 hmdctrackfittera.cc:89
 hmdctrackfittera.cc:90
 hmdctrackfittera.cc:91
 hmdctrackfittera.cc:92
 hmdctrackfittera.cc:93
 hmdctrackfittera.cc:94
 hmdctrackfittera.cc:95
 hmdctrackfittera.cc:96
 hmdctrackfittera.cc:97
 hmdctrackfittera.cc:98
 hmdctrackfittera.cc:99
 hmdctrackfittera.cc:100
 hmdctrackfittera.cc:101
 hmdctrackfittera.cc:102
 hmdctrackfittera.cc:103
 hmdctrackfittera.cc:104
 hmdctrackfittera.cc:105
 hmdctrackfittera.cc:106
 hmdctrackfittera.cc:107
 hmdctrackfittera.cc:108
 hmdctrackfittera.cc:109
 hmdctrackfittera.cc:110
 hmdctrackfittera.cc:111
 hmdctrackfittera.cc:112
 hmdctrackfittera.cc:113
 hmdctrackfittera.cc:114
 hmdctrackfittera.cc:115
 hmdctrackfittera.cc:116
 hmdctrackfittera.cc:117
 hmdctrackfittera.cc:118
 hmdctrackfittera.cc:119
 hmdctrackfittera.cc:120
 hmdctrackfittera.cc:121
 hmdctrackfittera.cc:122
 hmdctrackfittera.cc:123
 hmdctrackfittera.cc:124
 hmdctrackfittera.cc:125
 hmdctrackfittera.cc:126
 hmdctrackfittera.cc:127
 hmdctrackfittera.cc:128
 hmdctrackfittera.cc:129
 hmdctrackfittera.cc:130
 hmdctrackfittera.cc:131
 hmdctrackfittera.cc:132
 hmdctrackfittera.cc:133
 hmdctrackfittera.cc:134
 hmdctrackfittera.cc:135
 hmdctrackfittera.cc:136
 hmdctrackfittera.cc:137
 hmdctrackfittera.cc:138
 hmdctrackfittera.cc:139
 hmdctrackfittera.cc:140
 hmdctrackfittera.cc:141
 hmdctrackfittera.cc:142
 hmdctrackfittera.cc:143
 hmdctrackfittera.cc:144
 hmdctrackfittera.cc:145
 hmdctrackfittera.cc:146
 hmdctrackfittera.cc:147
 hmdctrackfittera.cc:148
 hmdctrackfittera.cc:149
 hmdctrackfittera.cc:150
 hmdctrackfittera.cc:151
 hmdctrackfittera.cc:152
 hmdctrackfittera.cc:153
 hmdctrackfittera.cc:154
 hmdctrackfittera.cc:155
 hmdctrackfittera.cc:156
 hmdctrackfittera.cc:157
 hmdctrackfittera.cc:158
 hmdctrackfittera.cc:159
 hmdctrackfittera.cc:160
 hmdctrackfittera.cc:161
 hmdctrackfittera.cc:162
 hmdctrackfittera.cc:163
 hmdctrackfittera.cc:164
 hmdctrackfittera.cc:165
 hmdctrackfittera.cc:166
 hmdctrackfittera.cc:167
 hmdctrackfittera.cc:168
 hmdctrackfittera.cc:169
 hmdctrackfittera.cc:170
 hmdctrackfittera.cc:171
 hmdctrackfittera.cc:172
 hmdctrackfittera.cc:173
 hmdctrackfittera.cc:174
 hmdctrackfittera.cc:175
 hmdctrackfittera.cc:176
 hmdctrackfittera.cc:177
 hmdctrackfittera.cc:178
 hmdctrackfittera.cc:179
 hmdctrackfittera.cc:180
 hmdctrackfittera.cc:181
 hmdctrackfittera.cc:182
 hmdctrackfittera.cc:183
 hmdctrackfittera.cc:184
 hmdctrackfittera.cc:185
 hmdctrackfittera.cc:186
 hmdctrackfittera.cc:187
 hmdctrackfittera.cc:188
 hmdctrackfittera.cc:189
 hmdctrackfittera.cc:190
 hmdctrackfittera.cc:191
 hmdctrackfittera.cc:192
 hmdctrackfittera.cc:193
 hmdctrackfittera.cc:194
 hmdctrackfittera.cc:195
 hmdctrackfittera.cc:196
 hmdctrackfittera.cc:197
 hmdctrackfittera.cc:198
 hmdctrackfittera.cc:199
 hmdctrackfittera.cc:200
 hmdctrackfittera.cc:201
 hmdctrackfittera.cc:202
 hmdctrackfittera.cc:203
 hmdctrackfittera.cc:204
 hmdctrackfittera.cc:205
 hmdctrackfittera.cc:206
 hmdctrackfittera.cc:207
 hmdctrackfittera.cc:208
 hmdctrackfittera.cc:209
 hmdctrackfittera.cc:210
 hmdctrackfittera.cc:211
 hmdctrackfittera.cc:212
 hmdctrackfittera.cc:213
 hmdctrackfittera.cc:214
 hmdctrackfittera.cc:215
 hmdctrackfittera.cc:216
 hmdctrackfittera.cc:217
 hmdctrackfittera.cc:218
 hmdctrackfittera.cc:219
 hmdctrackfittera.cc:220
 hmdctrackfittera.cc:221
 hmdctrackfittera.cc:222
 hmdctrackfittera.cc:223
 hmdctrackfittera.cc:224
 hmdctrackfittera.cc:225
 hmdctrackfittera.cc:226
 hmdctrackfittera.cc:227
 hmdctrackfittera.cc:228
 hmdctrackfittera.cc:229
 hmdctrackfittera.cc:230
 hmdctrackfittera.cc:231
 hmdctrackfittera.cc:232
 hmdctrackfittera.cc:233
 hmdctrackfittera.cc:234
 hmdctrackfittera.cc:235
 hmdctrackfittera.cc:236
 hmdctrackfittera.cc:237
 hmdctrackfittera.cc:238
 hmdctrackfittera.cc:239
 hmdctrackfittera.cc:240
 hmdctrackfittera.cc:241
 hmdctrackfittera.cc:242
 hmdctrackfittera.cc:243
 hmdctrackfittera.cc:244
 hmdctrackfittera.cc:245
 hmdctrackfittera.cc:246
 hmdctrackfittera.cc:247
 hmdctrackfittera.cc:248
 hmdctrackfittera.cc:249
 hmdctrackfittera.cc:250
 hmdctrackfittera.cc:251
 hmdctrackfittera.cc:252
 hmdctrackfittera.cc:253
 hmdctrackfittera.cc:254
 hmdctrackfittera.cc:255
 hmdctrackfittera.cc:256
 hmdctrackfittera.cc:257
 hmdctrackfittera.cc:258
 hmdctrackfittera.cc:259
 hmdctrackfittera.cc:260
 hmdctrackfittera.cc:261
 hmdctrackfittera.cc:262
 hmdctrackfittera.cc:263
 hmdctrackfittera.cc:264
 hmdctrackfittera.cc:265
 hmdctrackfittera.cc:266
 hmdctrackfittera.cc:267
 hmdctrackfittera.cc:268
 hmdctrackfittera.cc:269
 hmdctrackfittera.cc:270
 hmdctrackfittera.cc:271
 hmdctrackfittera.cc:272
 hmdctrackfittera.cc:273
 hmdctrackfittera.cc:274
 hmdctrackfittera.cc:275
 hmdctrackfittera.cc:276
 hmdctrackfittera.cc:277
 hmdctrackfittera.cc:278
 hmdctrackfittera.cc:279
 hmdctrackfittera.cc:280
 hmdctrackfittera.cc:281
 hmdctrackfittera.cc:282
 hmdctrackfittera.cc:283
 hmdctrackfittera.cc:284
 hmdctrackfittera.cc:285
 hmdctrackfittera.cc:286
 hmdctrackfittera.cc:287
 hmdctrackfittera.cc:288
 hmdctrackfittera.cc:289
 hmdctrackfittera.cc:290
 hmdctrackfittera.cc:291
 hmdctrackfittera.cc:292
 hmdctrackfittera.cc:293
 hmdctrackfittera.cc:294
 hmdctrackfittera.cc:295
 hmdctrackfittera.cc:296
 hmdctrackfittera.cc:297
 hmdctrackfittera.cc:298
 hmdctrackfittera.cc:299
 hmdctrackfittera.cc:300
 hmdctrackfittera.cc:301
 hmdctrackfittera.cc:302
 hmdctrackfittera.cc:303
 hmdctrackfittera.cc:304
 hmdctrackfittera.cc:305
 hmdctrackfittera.cc:306
 hmdctrackfittera.cc:307
 hmdctrackfittera.cc:308
 hmdctrackfittera.cc:309
 hmdctrackfittera.cc:310
 hmdctrackfittera.cc:311
 hmdctrackfittera.cc:312
 hmdctrackfittera.cc:313
 hmdctrackfittera.cc:314
 hmdctrackfittera.cc:315
 hmdctrackfittera.cc:316
 hmdctrackfittera.cc:317
 hmdctrackfittera.cc:318
 hmdctrackfittera.cc:319
 hmdctrackfittera.cc:320
 hmdctrackfittera.cc:321
 hmdctrackfittera.cc:322
 hmdctrackfittera.cc:323
 hmdctrackfittera.cc:324
 hmdctrackfittera.cc:325
 hmdctrackfittera.cc:326
 hmdctrackfittera.cc:327
 hmdctrackfittera.cc:328
 hmdctrackfittera.cc:329
 hmdctrackfittera.cc:330
 hmdctrackfittera.cc:331
 hmdctrackfittera.cc:332
 hmdctrackfittera.cc:333
 hmdctrackfittera.cc:334
 hmdctrackfittera.cc:335
 hmdctrackfittera.cc:336
 hmdctrackfittera.cc:337
 hmdctrackfittera.cc:338
 hmdctrackfittera.cc:339
 hmdctrackfittera.cc:340
 hmdctrackfittera.cc:341
 hmdctrackfittera.cc:342
 hmdctrackfittera.cc:343
 hmdctrackfittera.cc:344
 hmdctrackfittera.cc:345
 hmdctrackfittera.cc:346
 hmdctrackfittera.cc:347
 hmdctrackfittera.cc:348
 hmdctrackfittera.cc:349
 hmdctrackfittera.cc:350
 hmdctrackfittera.cc:351
 hmdctrackfittera.cc:352
 hmdctrackfittera.cc:353
 hmdctrackfittera.cc:354
 hmdctrackfittera.cc:355
 hmdctrackfittera.cc:356
 hmdctrackfittera.cc:357
 hmdctrackfittera.cc:358
 hmdctrackfittera.cc:359
 hmdctrackfittera.cc:360
 hmdctrackfittera.cc:361
 hmdctrackfittera.cc:362
 hmdctrackfittera.cc:363
 hmdctrackfittera.cc:364
 hmdctrackfittera.cc:365
 hmdctrackfittera.cc:366
 hmdctrackfittera.cc:367
 hmdctrackfittera.cc:368
 hmdctrackfittera.cc:369
 hmdctrackfittera.cc:370
 hmdctrackfittera.cc:371
 hmdctrackfittera.cc:372
 hmdctrackfittera.cc:373
 hmdctrackfittera.cc:374
 hmdctrackfittera.cc:375
 hmdctrackfittera.cc:376
 hmdctrackfittera.cc:377
 hmdctrackfittera.cc:378
 hmdctrackfittera.cc:379
 hmdctrackfittera.cc:380
 hmdctrackfittera.cc:381
 hmdctrackfittera.cc:382
 hmdctrackfittera.cc:383
 hmdctrackfittera.cc:384
 hmdctrackfittera.cc:385
 hmdctrackfittera.cc:386
 hmdctrackfittera.cc:387