ROOT logo
//*--- AUTHOR : Vladimir Pechenov
//*--- Modified : 18/08/05 V.Pechenov

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////////////
//
// HMdcDriftTimePar
//
// Container class for the distance->time parameterization.
// Contains functions for calculating distance->time for track fitter.
//
///////////////////////////////////////////////////////////////////////////////

#include "hmdcdrifttimepar.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hruntimedb.h"
#include "hmdccal2parsim.h"
#include "hmdccal2par.h"
#include "hmdcgetcontainers.h"

ClassImp(HMdcDriftTimeParBin)
ClassImp(HMdcDriftTimeParAngle)
ClassImp(HMdcDriftTimeParMod)
ClassImp(HMdcDriftTimeParSec)
ClassImp(HMdcDriftTimePar)



HMdcDriftTimeParBin::HMdcDriftTimeParBin(void) {
  c0 = 0.;
  c1 = 0.;
  c2 = 0.;
  c3 = 0.;
  d0 = 0.;
  d1 = 0.;
  d2 = 0.;
  d3 = 0.;
}

void HMdcDriftTimeParBin::print(void) const {
  printf("DriftTime = %.5g + %.5g*alpha + %.5g*dist + %.5g*alpha*dist\n",
      c0,c1,c2,c3);
  printf("ErrDriftTime = %.5g + %.5g*alpha + %.5g*dist + %.5g*alpha*dist\n",
      c0err,c1err,c2err,c3err);
}

void HMdcDriftTimeParBin::printTable(void) const {
  printf("| %10.4g | %10.4g | %10.4g | %10.4g || %10.4g | %10.4g | %10.4g | %10.4g |\n",
      c0,c1,c2,c3,c0err,c1err,c2err,c3err);
}

HMdcDriftTimeParMod::HMdcDriftTimeParMod(Int_t nAnBins, Int_t nDsBins) {
  // Constructor create array of HMdcDriftTimeParAngle objects.
  // One object per one impact angle bin.
//  for(Int_t i=0; i<nAnBins; ++i) AddAt(new HMdcDriftTimeParAngle(),i);
  nAngleBins      = nAnBins;
  lAngleBin       = nAngleBins-1;
  angleBinSize    = 90./nAngleBins;
  lastAngleBin    = lAngleBin*angleBinSize;
  invAngleBinSize = 1./angleBinSize;
  nDistBins       = nDsBins;
  lDistBin        = nDistBins-1;
  setDistBinSize(0.1); // default bin size
}

void HMdcDriftTimeParMod::setDistBinSize(Double_t dBSize) {
  distBinSize    = dBSize;
  lastBinDist    = lDistBin*distBinSize;
  invDistBinSize = 1./distBinSize;
}

void HMdcDriftTimeParMod::setTimeBinSize(Double_t tBSize) {
  timeBinSize = tBSize;
  lastBinTime = lDistBin*timeBinSize;
  invTimeBinSize = 1./timeBinSize;
}

Bool_t HMdcDriftTimeParMod::initContainer(HMdcCal2ParModSim& fC2PModS,HMdcCal2ParMod& fC2PMod,
                                          Double_t slOut,Double_t scaleErr) {
  slopeOutside = slOut;
  for(Int_t anBin=0; anBin<nAngleBins; anBin++) {
    for(Int_t dsBin=0; dsBin<nDistBins; dsBin++) {
      HMdcDriftTimeParBin* bin=at(anBin)->at(dsBin);
      if(bin==0) return kFALSE;
      HMdcCal2ParAngleSim& rAng1 = fC2PModS[anBin];// pointer to the first set
      HMdcCal2ParAngleSim& rAng2 = anBin<lAngleBin ? fC2PModS[anBin+1] : rAng1;
      
      fillDriftTime(rAng1,rAng2,bin,anBin,dsBin);
      fillDriftTimeErr(rAng1,rAng2,bin,anBin,dsBin,scaleErr);
      
      HMdcCal2ParAngle& tAng1 = fC2PMod[anBin];// pointer to the first set
      HMdcCal2ParAngle& tAng2 = anBin<lAngleBin ? fC2PMod[anBin+1] : tAng1;
      fillDriftDist(tAng1,tAng2,bin,anBin,dsBin);
    }
  }
  return kTRUE;
}

void HMdcDriftTimeParMod::print(void) {
  for(Int_t anBin=0; anBin<nAngleBins; anBin++) {
    for(Int_t dsBin=0; dsBin<nDistBins; dsBin++) {
      HMdcDriftTimeParBin* bin=at(anBin)->at(dsBin);
      if(bin==0) continue;
//      printf("ang.bin=%i dist.bin=%i: ",anBin,dsBin);
      printf("%3i   %3i ",anBin,dsBin);
      bin->printTable();
    }
  }
}

void HMdcDriftTimeParMod::fillDriftTime(HMdcCal2ParAngleSim& rAng1,
    HMdcCal2ParAngleSim& rAng2, HMdcDriftTimeParBin* bin,
    Int_t anBin, Int_t dsBin) {
  Double_t k0=90./angleBinSize-anBin;
  if(dsBin==lDistBin) {  // distance outside matrix
    Double_t y1=rAng1.getDriftTime1(lDistBin);
    Double_t y2=rAng2.getDriftTime1(lDistBin);
    Double_t k1=y1-y2;
    bin->setC0(y1-lastBinDist*slopeOutside - k0*k1);
    bin->setC1(k1/angleBinSize);
    bin->setC2(slopeOutside);
    bin->setC3(0.);
  } else {
    Double_t y1=rAng1.getDriftTime1(dsBin);
    Double_t y2=rAng2.getDriftTime1(dsBin);
    Double_t y3=rAng2.getDriftTime1(dsBin+1);
    Double_t y4=rAng1.getDriftTime1(dsBin+1);
    Double_t k1=y1-y2;
    Double_t k2=y1-y4;
    Double_t k3=k1+y3-y4;
    k1+=dsBin*k3;
    bin->setC0(y1 + dsBin*k2 - k0*k1);
    bin->setC1(k1/angleBinSize);
    bin->setC2((k0*k3-k2)/distBinSize);
    bin->setC3(-k3/distBinSize/angleBinSize);
  }
}

void HMdcDriftTimeParMod::fillDriftTimeErr(HMdcCal2ParAngleSim& rAng1,
    HMdcCal2ParAngleSim& rAng2, HMdcDriftTimeParBin* bin,Int_t anBin, Int_t dsBin,Double_t scaleErr) {
  Double_t k0=90./angleBinSize-anBin;
  if(dsBin==lDistBin) {  // distance outside matrix
    Double_t y1=rAng1.getDriftTime1Error(lDistBin) * scaleErr;
    Double_t y2=rAng2.getDriftTime1Error(lDistBin) * scaleErr;
    Double_t k1=y1-y2;
    bin->setC0Err(y1 - k0*k1);
    bin->setC1Err(k1/angleBinSize);
    bin->setC2Err(0.);
    bin->setC3Err(0.);
  } else {
    Double_t y1=rAng1.getDriftTime1Error(dsBin)   * scaleErr;
    Double_t y2=rAng2.getDriftTime1Error(dsBin)   * scaleErr;
    Double_t y3=rAng2.getDriftTime1Error(dsBin+1) * scaleErr;
    Double_t y4=rAng1.getDriftTime1Error(dsBin+1) * scaleErr;
    Double_t k1=y1-y2;
    Double_t k2=y1-y4;
    Double_t k3=k1+y3-y4;
    k1+=dsBin*k3;
    bin->setC0Err(y1 + dsBin*k2 - k0*k1);
    bin->setC1Err(k1/angleBinSize);
    bin->setC2Err((k0*k3-k2)/distBinSize);
    bin->setC3Err(-k3/distBinSize/angleBinSize);
  }
}

void HMdcDriftTimeParMod::fillDriftDist(HMdcCal2ParAngle& tAng1,HMdcCal2ParAngle& tAng2, 
    HMdcDriftTimeParBin* bin,Int_t anBin, Int_t tmBin) {
  Double_t k0=90./angleBinSize-anBin;
  if(tmBin==lDistBin) {  // distance outside matrix
    Double_t y1 = tAng1.getDistance(lDistBin/10,lDistBin%10);
    Double_t y2 = tAng2.getDistance(lDistBin/10,lDistBin%10);
    Double_t k1 = y1-y2;
    bin->setD0(y1-lastBinTime/slopeOutside - k0*k1);
    bin->setD1(k1/angleBinSize);
    bin->setD2(1./slopeOutside);
    bin->setD3(0.);
  } else {
    Double_t y1 = tAng1.getDistance(tmBin/10,tmBin%10);
    Double_t y2 = tAng2.getDistance(tmBin/10,tmBin%10);
    Double_t y3 = tAng2.getDistance((tmBin+1)/10,(tmBin+1)%10);
    Double_t y4 = tAng1.getDistance((tmBin+1)/10,(tmBin+1)%10);
    Double_t k1 = y1-y2;
    Double_t k2 = y1-y4;
    Double_t k3 = k1+y3-y4;
    k1 += tmBin*k3;
    bin->setD0(y1 + tmBin*k2 - k0*k1);
    bin->setD1(k1/angleBinSize);
    bin->setD2((k0*k3-k2)/timeBinSize);
    bin->setD3(-k3/timeBinSize/angleBinSize);
  }
}

Bool_t HMdcDriftTimeParMod::testSizes(Int_t anSz, Int_t dsSz) const {
  return anSz==nAngleBins && dsSz==nDistBins;
}

HMdcDriftTimeParSec::HMdcDriftTimeParSec(void) : TObjArray(4) {
  // Constructor create TObjArray for HMdcDriftTimeParMod objects.
}

Bool_t HMdcDriftTimeParSec::initContainer(HMdcCal2ParSecSim& fC2PSecS,HMdcCal2ParSec& fC2PSec,
                                          Int_t sec, Double_t slOut,Double_t* scaleError) {
  sector=  sec;
  for(Int_t m=0; m<4; m++) if(HMdcGetContainers::getObject()->isModActive(sec,m)) {
    HMdcCal2ParModSim& fC2PModS = fC2PSecS[m];
    if(&fC2PModS == 0) return kFALSE;
    HMdcCal2ParMod& fC2PMod = fC2PSec[m];
    if(&fC2PModS == 0) return kFALSE;
    Int_t    nAngleBins  = fC2PModS.getSize();
    Int_t    nDistBins   = 100;    //!!!!!
    Double_t distBinSize = 0.1;    //!!!!!
    Double_t timeBinSize = 4.0;    //!!!!!
    if(At(m)==0) AddAt(new HMdcDriftTimeParMod(nAngleBins,nDistBins),m);
    else if(!at(m)->testSizes(nAngleBins,nDistBins)) {
      delete at(m);
      AddAt(new HMdcDriftTimeParMod(nAngleBins,nDistBins),m);
    }
    at(m)->setDistBinSize(distBinSize);
    at(m)->setTimeBinSize(timeBinSize);
    if(!at(m)->initContainer(fC2PModS,fC2PMod,slOut,scaleError[m])) return kFALSE;
  }
  return kTRUE;
}

void HMdcDriftTimeParSec::print(void) {
  for(Int_t m=0; m<4; m++) if(HMdcGetContainers::getObject()->isModActive(sector,m)) {
    printf("\n HMdcDriftTimePar: %i sector  %i module \n",sector+1,m+1);
    printf("---bin---------------------------------------------------------");
    printf(          "-----------------------------------------------------\n");
    printf("ang. dis. |     c0     |     c1     |     c2     |     c3     |");
    printf(          "|    c0err   |    c1err   |    c2err   |    c3err   |\n");
    printf("----------|------------|------------|------------|------------|");
    printf(          "|------------|------------|------------|------------|\n");
    at(m)->print();
  }
}

HMdcDriftTimeParSec::~HMdcDriftTimeParSec(void) {
  // destructor
  Delete();
}

HMdcDriftTimePar* HMdcDriftTimePar::fMdcDriftTimePar  = NULL;

HMdcDriftTimePar::HMdcDriftTimePar(void) : TObjArray(6) { // 6 sectors
  // Constructor create TObjArray for HMdcDriftTimeParSec objects.
  fMdcDriftTimePar = this;
  pCal2ParSim      = (HMdcCal2ParSim*)gHades->getRuntimeDb()->getContainer("MdcCal2ParSim");
  pCal2Par         = (HMdcCal2Par*)gHades->getRuntimeDb()->getContainer("MdcCal2Par");
  isInited         = kFALSE;
  setScalerTime1Err(1.,1.,1.,1.);
}

HMdcDriftTimePar* HMdcDriftTimePar::getObject(void) {
  if(fMdcDriftTimePar == NULL) fMdcDriftTimePar = new HMdcDriftTimePar();
  return fMdcDriftTimePar;
}

void HMdcDriftTimePar::deleteCont(void) {
  if(fMdcDriftTimePar == NULL) return;
  delete fMdcDriftTimePar;
  fMdcDriftTimePar = NULL;
}

void HMdcDriftTimePar::setScalerTime1Err(Double_t m0,Double_t m1,Double_t m2,Double_t m3) {
  scaleError[0] = m0;
  scaleError[1] = m1;
  scaleError[2] = m2;
  scaleError[3] = m3;
}

Bool_t HMdcDriftTimePar::initContainer(void) {
  if( isInited ) return kTRUE;
  if(pCal2ParSim == NULL || !HMdcGetContainers::isInited(pCal2ParSim)) return kFALSE;
  if(pCal2Par    == NULL || !HMdcGetContainers::isInited(pCal2Par))    return kFALSE;
  
  Double_t slopeOutside = pCal2ParSim->getSlopeOutside();
  for(Int_t s=0; s<6; s++) if( HMdcGetContainers::getObject()->isSecActive(s) ) {
    HMdcCal2ParSecSim& fC2PSecS = (*pCal2ParSim)[s];
    if(&fC2PSecS == NULL) return kFALSE;
    HMdcCal2ParSec& fC2PSec = (*pCal2Par)[s];
    if(&fC2PSec == NULL) return kFALSE;
    if(At(s)==0) AddAt(new HMdcDriftTimeParSec(),s);
    if( !at(s)->initContainer(fC2PSecS,fC2PSec,s,slopeOutside,scaleError) ) return kFALSE;
  }
  isInited = kTRUE;
  return kTRUE;
}

void HMdcDriftTimePar::print(void) {
  for(Int_t s=0; s<6; s++) if(HMdcGetContainers::getObject()->isSecActive(s)) at(s)->print();
}

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