ROOT logo
//*--- Author : V.Pechenov
//*--- Modified: 16.08.05 V.Pechenov

using namespace std;
#include <iostream>
#include <iomanip>

#include "hmdctrackparam.h"
#include "hmdcclusfit.h"
#include "hmdcgeomobj.h"
#include "hmdcwiredata.h"


//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
//
//  HMdcTrackParam
//
//    Class keep track fit parameters
//
//////////////////////////////////////////////////////////////////////////////

ClassImp(HMdcTrackParam)

HMdcTrackParam::HMdcTrackParam(void) {
  nParam         = 4;
  timeOffsetFlag = 3;
  numOfGoodWires = 0;
  isTmoffFixed   = 0;
  iterNumb       = 0;
  chi2perDF      = -1.;
  funct          = -1.;
  oldFunct       = -1.;
  nMods          = 4;
}

void HMdcTrackParam::copyNewParam(const HMdcTrackParam& tp) {
  copyParam(tp);
  copyTimeOffsets(tp);
  funct          = tp.funct;
  iterNumb       = tp.iterNumb;
  numOfGoodWires = tp.numOfGoodWires;
  chi2perDF      = tp.chi2perDF;
  sumWeight      = tp.sumWeight;
  nMods          = tp.nMods;
  for(Int_t m=0;m<nMods;m++) sWht[m] = tp.sWht[m]; //!!!!!!!!!!!!! mozhet perenesti v wires arr.
}

void HMdcTrackParam::copyParAndAdd(const HMdcTrackParam& tp, Int_t ip, Double_t add) {
  copyParam(tp);
  addToParam(ip,add);
  isTmoffFixed = tp.isTmoffFixed;
  nMods        = tp.nMods;
}

void HMdcTrackParam::copyParAndAdd(const HMdcTrackParam& tp,
    Int_t ip1, Double_t add1, Int_t ip2, Double_t add2) {
  copyParam(tp);
  addToParam(ip1,add1,ip2,add2);
  isTmoffFixed = tp.isTmoffFixed;
  nMods        = tp.nMods;
}

void HMdcTrackParam::clearFunct(void) {
  funct        = 0.;
  sumWeight    = 0.;
  if(isTmoffFixed>0) isTmoffFixed = 0;
  for(Int_t m=0;m<nMods;m++) {
    sDev[m] = 0.;
    sWht[m] = 0.;
  }
}

void HMdcTrackParam::calcTimeOffsets(Int_t tofFlag) {
  // tofFlag=1 - calcul. timeOffsets for each Mdc
  // tofFlag=2 - calcul. timeOffsets for each segment
  // else      - calcul. one timeOffset for all mdc's
  if(isTmoffFixed < 0) return;
  timeOffsetFlag = tofFlag;
  if     (timeOffsetFlag==0) for(Int_t m=0;m<nMods;m++) timeOffset[m] = 0.;
  else if(timeOffsetFlag==1) for(Int_t m=0;m<nMods;m++) timeOffset[m] = sWht[m]>0. ? -sDev[m]/sWht[m]:0.;
  else if(timeOffsetFlag==2) {
    for(Int_t m=0;m<nMods;m+=2) {
      Double_t sW     = sWht[m]+sWht[m+1];
      Double_t tos    = sW >0. ? -(sDev[m]+sDev[m+1])/sW : 0.;
      timeOffset[m]   = sWht[m]  >0. ? tos : 0.;
      timeOffset[m+1] = sWht[m+1]>0. ? tos : 0.;
    }
  } else {
    Double_t sD = 0;
    Double_t sW = 0;
    for(Int_t m=0;m<nMods;m++) sD += sDev[m];
    for(Int_t m=0;m<nMods;m++) sW += sWht[m];
    Double_t tos = -sD/sW;
    for(Int_t m=0;m<nMods;m++) timeOffset[m] = sWht[m]>0. ? tos : 0.; // ! ???
  }
  isTmoffFixed = 0;
}

Double_t HMdcTrackParam::getSumWtNorm(Int_t m) const {
  // Return sum of weight/errTdcTime^2 for all valid wires
  if(isTmoffFixed<0 || m<0 || m>=nMods || timeOffsetFlag==0) return 0.;
  if(timeOffsetFlag == 3) {                           // One Toff per track
    Double_t sW = 0;
    for(Int_t im=0;im<nMods;im++) sW += sWht[im];
    return sW;
  }
  if(timeOffsetFlag == 2) {                         // One Toff per segment
    m &= 254;  // = (m/2)*2
    return sWht[m]+sWht[m+1];
  } 
  if(timeOffsetFlag == 1) return sWht[m];           // One Toff per module
  return 0.;
}

void HMdcTrackParam::correctMinTimeOffsets(Double_t minTos) {
  // if timeOffset[m]<minTos timeOffset[m]=minTos
  if(isTmoffFixed<0) return;
  for(Int_t m=0;m<nMods;m++) if(sWht[m]>0. && timeOffset[m]<minTos) {
    timeOffset[m] = minTos;
    isTmoffFixed |= 1<<m;
  }
}

void HMdcTrackParam::addToTOffsetErr(Int_t m, Double_t* dTdA, Double_t wtNorm) {
  for(Int_t ip=0;ip<nParam;ip++) dTdPar[ip][m] += dTdA[ip]*wtNorm;
}

void HMdcTrackParam::clearTOffsetDer(void) {
  for(Int_t ip=0;ip<nParam;ip++) for(Int_t m=0;m<nMods;m++) dTdPar[ip][m] = 0.;
}

void HMdcTrackParam::getTimeOffsetDer(Double_t* der) {
  for(Int_t k=0;k<nParam;k++) der[k] = 0.;
  if(isTmoffFixed<0 || timeOffsetFlag==0) return;
  if(timeOffsetFlag==1) {                                // One timeoffset per module:
    for(Int_t m=0;m<nMods;m++) if(sWht[m]>0. && !isMdcTimeOffsetFixed(m)) {
      for(Int_t k=0;k<nParam;k++) der[k] -= dTdPar[k][m]/sWht[m];
    }
  } else if(timeOffsetFlag==2) {                         // One timeoffset per segment:
    for(Int_t m=0;m<nMods;m+=2) {
      Double_t sW = sWht[m]+sWht[m+1];
      if(sW>0. && !isSegTimeOffsetFixed(m/2)) for(Int_t k=0;k<nParam;k++)
        der[k] -= (dTdPar[k][m]+dTdPar[k][m+1])/sW;
    }
  } else {                                               // One timeoffset per track:
    Double_t sW = 0;
    for(Int_t m=0;m<nMods;m++) sW += sWht[m];
    if(sW>0. && !isTrackTimeOffsetFixed()) for(Int_t k=0;k<nParam;k++) {
      Double_t sDT = 0.;
      for(Int_t m=0;m<nMods;m++) sDT += dTdPar[k][m];
      der[k] = -sDT/sW;
    }
  }
}

void HMdcTrackParam::addTimeOffsetDer1(TMatrixD& grad2) {
  if(isTmoffFixed<0 || timeOffsetFlag==0) return;
  if(timeOffsetFlag==1) {                       // One timeoffset per module:
    for(Int_t m=0;m<nMods;m++) if(sWht[m]>0. && !isMdcTimeOffsetFixed(m)) {
      for(Int_t k=0;k<nParam;k++) 
          grad2(k,k) -= 2.*dTdPar[k][m]*dTdPar[k][m]/sWht[m];
    }
  } else if(timeOffsetFlag==2) {                // One timeoffset per segment:
    for(Int_t m=0;m<nMods;m+=2) {
      Double_t sW  = sWht[m]+sWht[m+1];
      if(sW>0. && !isSegTimeOffsetFixed(m/2)) for(Int_t k=0;k<nParam;k++) {
        Double_t dTdP = dTdPar[k][m]+dTdPar[k][m+1];
        grad2(k,k)   -= 2.*dTdP*dTdP/sW;
      }
    }
  } else {                                      // One timeoffset per track:
    Double_t sW = 0;
    for(Int_t m=0;m<nMods;m++) sW += sWht[m];
    if(sW>0. && !isTrackTimeOffsetFixed()) for(Int_t k=0;k<nParam;k++) {
      Double_t dTdP = 0;
      for(Int_t m=0;m<nMods;m++) dTdP += dTdPar[k][m];
      grad2(k,k) -= 2.*dTdP*dTdP/sW;
    }
  }
}

void HMdcTrackParam::addTimeOffsetDer2(TMatrixD& grad2) {
  if(isTmoffFixed<0 || timeOffsetFlag==0) return;
  if(timeOffsetFlag==1) {                          // One timeoffset per module:
    for(Int_t m=0;m<nMods;m++) if(sWht[m]>0. && !isMdcTimeOffsetFixed(m)) {
      for(Int_t k=0;k<nParam;k++) {
        Double_t dTdP = -2.*dTdPar[k][m]/sWht[m];
        for(Int_t l=0;l<=k;l++) grad2(k,l) += dTdP*dTdPar[l][m];
      }
    }
  } else if(timeOffsetFlag==2) {                   // One timeoffset per segment:
    for(Int_t m=0;m<nMods;m+=2) {
      Double_t sW  = sWht[m]+sWht[m+1];
      if(sW>0. && !isSegTimeOffsetFixed(m/2)) for(Int_t k=0;k<nParam;k++) {
        Double_t dTdP = -2.*(dTdPar[k][m]+dTdPar[k][m+1])/sW;
        for(Int_t l=0;l<=k;l++) grad2(k,l) += dTdP*(dTdPar[l][m]+dTdPar[l][m+1]);
      }
    }
  } else {                                         // One timeoffset per track:
    Double_t sW = 0;
    for(Int_t m=0;m<nMods;m++) sW += sWht[m];
    if(sW>0. && !isTrackTimeOffsetFixed()) for(Int_t k=0;k<nParam;k++) {
      Double_t dTdPk = 0;
      for(Int_t m=0;m<nMods;m++) dTdPk += dTdPar[k][m];
      dTdPk *= -2./sW;
      for(Int_t l=0;l<=k;l++) {
        Double_t dTdPl = 0;
        for(Int_t m=0;m<nMods;m++) dTdPl += dTdPar[l][m];
        grad2(k,l) += dTdPk*dTdPl;
      }
    }
  }
}

void HMdcTrackParam::calcTimeOffsetsErr(void) {
  if(isTmoffFixed<0 || timeOffsetFlag==0) return;
  if(timeOffsetFlag==1) for(Int_t m=0;m<nMods;m++) errTimeOffset[m] = calcTosErr(m);
  else if(timeOffsetFlag==2) {
    for(Int_t m=0;m<nMods;m+=2) {
      Double_t err = calcTosErr(m,m+1);
      errTimeOffset[m]   = sWht[m]  >0. ? err : 0.;
      errTimeOffset[m+1] = sWht[m+1]>0. ? err : 0.;
    }
  } else {
    Double_t err = calcTosErr();
    for(Int_t m=0;m<nMods;m++) errTimeOffset[m] = sWht[m]>0. ? err : 0.;
  }
}

Double_t HMdcTrackParam::calcTosErr(Int_t m) {
  if(isTmoffFixed < 0) return 0.;
  if(sWht[m]==0.) return 0.;
  Double_t sum=0.;
  for(Int_t ip=0; ip<nParam; ip++) sum += calcTosErr(sWht[m],dTdPar[ip][m],errMatr(ip,ip));
  return sqrt(sum);
}

Double_t HMdcTrackParam::calcTosErr(Int_t m1, Int_t m2) {
  if(isTmoffFixed<0) return 0.;
  if(sWht[m1]==0. && sWht[m2]==0.) return 0.;
  Double_t sum=0.;
  if(sWht[m1]>0. || sWht[m2]>0.) for(Int_t ip=0; ip<nParam; ip++) sum +=
      calcTosErr(sWht[m1]+sWht[m2],dTdPar[ip][m1]+dTdPar[ip][m2],errMatr(ip,ip));
  return sqrt(sum);
}

Double_t HMdcTrackParam::calcTosErr(void) {
  if(isTmoffFixed<0) return 0.;
  Double_t sW = 0;
  for(Int_t m=0;m<nMods;m++) sW += sWht[m];
  Double_t sum=0.;
  for(Int_t ip=0; ip<nParam; ip++) {
    Double_t sTd = 0;
    for(Int_t m=0;m<nMods;m++) sTd += dTdPar[ip][m];
    sum += calcTosErr(sW,sTd,errMatr(ip,ip));
  }
  return sqrt(sum);
}

void HMdcTrackParam::fillErrorsMatr(TMatrixD& matrH) {
  for(Int_t i=0; i<nParam; i++) for(Int_t j=i; j<nParam; j++)
      errMatr.setElement(i,j,matrH(i,j));
}

Double_t HMdcTrackParam::calcChi2PerDF(Int_t nGWires) {
  if(nGWires>0) numOfGoodWires=nGWires;
  chi2perDF = (numOfGoodWires>nParam) ? funct/(numOfGoodWires - nParam) : -1.;
  return chi2perDF;
}

void HMdcTrackParam::printParam(const Char_t* title) const {
  if(title) printf("%s ",title);
  Char_t zf=(funct<=oldFunct) ? '+':'-';
  printf("%3i%c fun.=%5.4g=>%5.4g Par.=%6.2f %6.2f %6.2f %6.2f TOF=",
      iterNumb,zf,oldFunct,funct,point1.X(),point1.Y(),point2.X(),point2.Y());
  for(Int_t m=0;m<nMods;m++) printf("%5.1f ",timeOffset[m]);
  printf("\n");
}

void HMdcTrackParam::printFunctChange(const Char_t* title) const {
  if(title) printf("%s ",title);
  printf("fun.=%-6g->%-6g\n",oldFunct,funct);
}

void HMdcTrackParam::printErrors(void) {
  errMatr.print();
  printf("  timeoffsets:");
  for(Int_t m=0;m<nMods;m++) if(errTimeOffset[m]>0)
      printf(" mod%i=%g+/-%g",m+1,timeOffset[m],errTimeOffset[m]);
  printf("\n");
}

void HMdcTrackParam::fillClusFit(HMdcClusFit* fClusFit) {
  fClusFit->setNParam(nParam);
  fClusFit->setFunMin(funct);
  fClusFit->setTimeOff(timeOffset);
  fClusFit->setX1(point1.X());
  fClusFit->setY1(point1.Y());
  fClusFit->setZ1(point1.Z());
  fClusFit->setX2(point2.X());
  fClusFit->setY2(point2.Y());
  fClusFit->setZ2(point2.Z());
  fClusFit->setNumIter(iterNumb);
  fClusFit->setNumOfWires(numOfGoodWires);
  fClusFit->setErrors(errMatr.getErr(0),errMatr.getErr(1),errMatr.getErr(2),errMatr.getErr(3));
}

Bool_t HMdcTrackParam::testParameters(Double_t tosMin, Double_t tosMax) {
  if(isTmoffFixed<0) return kTRUE;
  for(Int_t m=0;m<nMods;m++) if(timeOffset[m]<tosMin||timeOffset[m]>tosMax) return kFALSE;
  return kTRUE;
}

void HMdcTrackParam::setFixedTimeOffset(Double_t o1,Double_t o2,Double_t o3,Double_t o4) {
  timeOffset[0] = o1;
  timeOffset[1] = o2;
  timeOffset[2] = o3;
  timeOffset[3] = o4;
  isTmoffFixed  = -1;
  for(Int_t m=4;m<16;m++) timeOffset[m] = 0;
}

void HMdcTrackParam::setTimeOffsets(Double_t* tos,Int_t size) {
  if(size<0) size = 0;
  if(size>0 && size<16) for(Int_t m=0;m<size;m++) timeOffset[m] = tos[m];
  for(Int_t m=size;m<16;m++) timeOffset[m] = 0;
}

void HMdcTrackParam::copyPlanes(HMdcTrackParam& p) {
  ((HMdcLineParam*)this)->copyPlanes(p);
  nMods = p.nMods;
}
void HMdcTrackParam::cleanTO(void) {
  for(Int_t m=0;m<nMods;m++) timeOffset[m] = 0.;
}
 hmdctrackparam.cc:1
 hmdctrackparam.cc:2
 hmdctrackparam.cc:3
 hmdctrackparam.cc:4
 hmdctrackparam.cc:5
 hmdctrackparam.cc:6
 hmdctrackparam.cc:7
 hmdctrackparam.cc:8
 hmdctrackparam.cc:9
 hmdctrackparam.cc:10
 hmdctrackparam.cc:11
 hmdctrackparam.cc:12
 hmdctrackparam.cc:13
 hmdctrackparam.cc:14
 hmdctrackparam.cc:15
 hmdctrackparam.cc:16
 hmdctrackparam.cc:17
 hmdctrackparam.cc:18
 hmdctrackparam.cc:19
 hmdctrackparam.cc:20
 hmdctrackparam.cc:21
 hmdctrackparam.cc:22
 hmdctrackparam.cc:23
 hmdctrackparam.cc:24
 hmdctrackparam.cc:25
 hmdctrackparam.cc:26
 hmdctrackparam.cc:27
 hmdctrackparam.cc:28
 hmdctrackparam.cc:29
 hmdctrackparam.cc:30
 hmdctrackparam.cc:31
 hmdctrackparam.cc:32
 hmdctrackparam.cc:33
 hmdctrackparam.cc:34
 hmdctrackparam.cc:35
 hmdctrackparam.cc:36
 hmdctrackparam.cc:37
 hmdctrackparam.cc:38
 hmdctrackparam.cc:39
 hmdctrackparam.cc:40
 hmdctrackparam.cc:41
 hmdctrackparam.cc:42
 hmdctrackparam.cc:43
 hmdctrackparam.cc:44
 hmdctrackparam.cc:45
 hmdctrackparam.cc:46
 hmdctrackparam.cc:47
 hmdctrackparam.cc:48
 hmdctrackparam.cc:49
 hmdctrackparam.cc:50
 hmdctrackparam.cc:51
 hmdctrackparam.cc:52
 hmdctrackparam.cc:53
 hmdctrackparam.cc:54
 hmdctrackparam.cc:55
 hmdctrackparam.cc:56
 hmdctrackparam.cc:57
 hmdctrackparam.cc:58
 hmdctrackparam.cc:59
 hmdctrackparam.cc:60
 hmdctrackparam.cc:61
 hmdctrackparam.cc:62
 hmdctrackparam.cc:63
 hmdctrackparam.cc:64
 hmdctrackparam.cc:65
 hmdctrackparam.cc:66
 hmdctrackparam.cc:67
 hmdctrackparam.cc:68
 hmdctrackparam.cc:69
 hmdctrackparam.cc:70
 hmdctrackparam.cc:71
 hmdctrackparam.cc:72
 hmdctrackparam.cc:73
 hmdctrackparam.cc:74
 hmdctrackparam.cc:75
 hmdctrackparam.cc:76
 hmdctrackparam.cc:77
 hmdctrackparam.cc:78
 hmdctrackparam.cc:79
 hmdctrackparam.cc:80
 hmdctrackparam.cc:81
 hmdctrackparam.cc:82
 hmdctrackparam.cc:83
 hmdctrackparam.cc:84
 hmdctrackparam.cc:85
 hmdctrackparam.cc:86
 hmdctrackparam.cc:87
 hmdctrackparam.cc:88
 hmdctrackparam.cc:89
 hmdctrackparam.cc:90
 hmdctrackparam.cc:91
 hmdctrackparam.cc:92
 hmdctrackparam.cc:93
 hmdctrackparam.cc:94
 hmdctrackparam.cc:95
 hmdctrackparam.cc:96
 hmdctrackparam.cc:97
 hmdctrackparam.cc:98
 hmdctrackparam.cc:99
 hmdctrackparam.cc:100
 hmdctrackparam.cc:101
 hmdctrackparam.cc:102
 hmdctrackparam.cc:103
 hmdctrackparam.cc:104
 hmdctrackparam.cc:105
 hmdctrackparam.cc:106
 hmdctrackparam.cc:107
 hmdctrackparam.cc:108
 hmdctrackparam.cc:109
 hmdctrackparam.cc:110
 hmdctrackparam.cc:111
 hmdctrackparam.cc:112
 hmdctrackparam.cc:113
 hmdctrackparam.cc:114
 hmdctrackparam.cc:115
 hmdctrackparam.cc:116
 hmdctrackparam.cc:117
 hmdctrackparam.cc:118
 hmdctrackparam.cc:119
 hmdctrackparam.cc:120
 hmdctrackparam.cc:121
 hmdctrackparam.cc:122
 hmdctrackparam.cc:123
 hmdctrackparam.cc:124
 hmdctrackparam.cc:125
 hmdctrackparam.cc:126
 hmdctrackparam.cc:127
 hmdctrackparam.cc:128
 hmdctrackparam.cc:129
 hmdctrackparam.cc:130
 hmdctrackparam.cc:131
 hmdctrackparam.cc:132
 hmdctrackparam.cc:133
 hmdctrackparam.cc:134
 hmdctrackparam.cc:135
 hmdctrackparam.cc:136
 hmdctrackparam.cc:137
 hmdctrackparam.cc:138
 hmdctrackparam.cc:139
 hmdctrackparam.cc:140
 hmdctrackparam.cc:141
 hmdctrackparam.cc:142
 hmdctrackparam.cc:143
 hmdctrackparam.cc:144
 hmdctrackparam.cc:145
 hmdctrackparam.cc:146
 hmdctrackparam.cc:147
 hmdctrackparam.cc:148
 hmdctrackparam.cc:149
 hmdctrackparam.cc:150
 hmdctrackparam.cc:151
 hmdctrackparam.cc:152
 hmdctrackparam.cc:153
 hmdctrackparam.cc:154
 hmdctrackparam.cc:155
 hmdctrackparam.cc:156
 hmdctrackparam.cc:157
 hmdctrackparam.cc:158
 hmdctrackparam.cc:159
 hmdctrackparam.cc:160
 hmdctrackparam.cc:161
 hmdctrackparam.cc:162
 hmdctrackparam.cc:163
 hmdctrackparam.cc:164
 hmdctrackparam.cc:165
 hmdctrackparam.cc:166
 hmdctrackparam.cc:167
 hmdctrackparam.cc:168
 hmdctrackparam.cc:169
 hmdctrackparam.cc:170
 hmdctrackparam.cc:171
 hmdctrackparam.cc:172
 hmdctrackparam.cc:173
 hmdctrackparam.cc:174
 hmdctrackparam.cc:175
 hmdctrackparam.cc:176
 hmdctrackparam.cc:177
 hmdctrackparam.cc:178
 hmdctrackparam.cc:179
 hmdctrackparam.cc:180
 hmdctrackparam.cc:181
 hmdctrackparam.cc:182
 hmdctrackparam.cc:183
 hmdctrackparam.cc:184
 hmdctrackparam.cc:185
 hmdctrackparam.cc:186
 hmdctrackparam.cc:187
 hmdctrackparam.cc:188
 hmdctrackparam.cc:189
 hmdctrackparam.cc:190
 hmdctrackparam.cc:191
 hmdctrackparam.cc:192
 hmdctrackparam.cc:193
 hmdctrackparam.cc:194
 hmdctrackparam.cc:195
 hmdctrackparam.cc:196
 hmdctrackparam.cc:197
 hmdctrackparam.cc:198
 hmdctrackparam.cc:199
 hmdctrackparam.cc:200
 hmdctrackparam.cc:201
 hmdctrackparam.cc:202
 hmdctrackparam.cc:203
 hmdctrackparam.cc:204
 hmdctrackparam.cc:205
 hmdctrackparam.cc:206
 hmdctrackparam.cc:207
 hmdctrackparam.cc:208
 hmdctrackparam.cc:209
 hmdctrackparam.cc:210
 hmdctrackparam.cc:211
 hmdctrackparam.cc:212
 hmdctrackparam.cc:213
 hmdctrackparam.cc:214
 hmdctrackparam.cc:215
 hmdctrackparam.cc:216
 hmdctrackparam.cc:217
 hmdctrackparam.cc:218
 hmdctrackparam.cc:219
 hmdctrackparam.cc:220
 hmdctrackparam.cc:221
 hmdctrackparam.cc:222
 hmdctrackparam.cc:223
 hmdctrackparam.cc:224
 hmdctrackparam.cc:225
 hmdctrackparam.cc:226
 hmdctrackparam.cc:227
 hmdctrackparam.cc:228
 hmdctrackparam.cc:229
 hmdctrackparam.cc:230
 hmdctrackparam.cc:231
 hmdctrackparam.cc:232
 hmdctrackparam.cc:233
 hmdctrackparam.cc:234
 hmdctrackparam.cc:235
 hmdctrackparam.cc:236
 hmdctrackparam.cc:237
 hmdctrackparam.cc:238
 hmdctrackparam.cc:239
 hmdctrackparam.cc:240
 hmdctrackparam.cc:241
 hmdctrackparam.cc:242
 hmdctrackparam.cc:243
 hmdctrackparam.cc:244
 hmdctrackparam.cc:245
 hmdctrackparam.cc:246
 hmdctrackparam.cc:247
 hmdctrackparam.cc:248
 hmdctrackparam.cc:249
 hmdctrackparam.cc:250
 hmdctrackparam.cc:251
 hmdctrackparam.cc:252
 hmdctrackparam.cc:253
 hmdctrackparam.cc:254
 hmdctrackparam.cc:255
 hmdctrackparam.cc:256
 hmdctrackparam.cc:257
 hmdctrackparam.cc:258
 hmdctrackparam.cc:259
 hmdctrackparam.cc:260
 hmdctrackparam.cc:261
 hmdctrackparam.cc:262
 hmdctrackparam.cc:263
 hmdctrackparam.cc:264
 hmdctrackparam.cc:265
 hmdctrackparam.cc:266
 hmdctrackparam.cc:267
 hmdctrackparam.cc:268
 hmdctrackparam.cc:269
 hmdctrackparam.cc:270
 hmdctrackparam.cc:271
 hmdctrackparam.cc:272
 hmdctrackparam.cc:273
 hmdctrackparam.cc:274
 hmdctrackparam.cc:275
 hmdctrackparam.cc:276
 hmdctrackparam.cc:277
 hmdctrackparam.cc:278
 hmdctrackparam.cc:279
 hmdctrackparam.cc:280
 hmdctrackparam.cc:281
 hmdctrackparam.cc:282
 hmdctrackparam.cc:283
 hmdctrackparam.cc:284
 hmdctrackparam.cc:285
 hmdctrackparam.cc:286
 hmdctrackparam.cc:287
 hmdctrackparam.cc:288
 hmdctrackparam.cc:289
 hmdctrackparam.cc:290
 hmdctrackparam.cc:291
 hmdctrackparam.cc:292
 hmdctrackparam.cc:293
 hmdctrackparam.cc:294
 hmdctrackparam.cc:295
 hmdctrackparam.cc:296
 hmdctrackparam.cc:297
 hmdctrackparam.cc:298
 hmdctrackparam.cc:299
 hmdctrackparam.cc:300
 hmdctrackparam.cc:301
 hmdctrackparam.cc:302
 hmdctrackparam.cc:303
 hmdctrackparam.cc:304
 hmdctrackparam.cc:305
 hmdctrackparam.cc:306
 hmdctrackparam.cc:307
 hmdctrackparam.cc:308
 hmdctrackparam.cc:309
 hmdctrackparam.cc:310
 hmdctrackparam.cc:311
 hmdctrackparam.cc:312
 hmdctrackparam.cc:313
 hmdctrackparam.cc:314
 hmdctrackparam.cc:315
 hmdctrackparam.cc:316
 hmdctrackparam.cc:317
 hmdctrackparam.cc:318
 hmdctrackparam.cc:319
 hmdctrackparam.cc:320
 hmdctrackparam.cc:321
 hmdctrackparam.cc:322
 hmdctrackparam.cc:323
 hmdctrackparam.cc:324
 hmdctrackparam.cc:325
 hmdctrackparam.cc:326
 hmdctrackparam.cc:327
 hmdctrackparam.cc:328
 hmdctrackparam.cc:329
 hmdctrackparam.cc:330
 hmdctrackparam.cc:331
 hmdctrackparam.cc:332
 hmdctrackparam.cc:333
 hmdctrackparam.cc:334
 hmdctrackparam.cc:335
 hmdctrackparam.cc:336