ROOT logo
//_HADES_CLASS_DESCRIPTION 
////////////////////////////////////////////////////////////////////////////
//*-- AUTHOR : G. Kornakov
//
// HTofWalkPar
//
// Container class for the TOF walking correction in HTofHitF2
//
// (Condition Style)
//
// The walking effect is described by a functional with two clearly
// definded regions by a constant. Then the first part, at low charges
// is described by an exponential and the second part is described by an
// linear combiantion of an exponential and an potential function.
//
////////////////////////////////////////////////////////////////////////////
#include "htofwalkpar.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hparamlist.h"
#include "htofdigipar.h"
#include "htofcalpar.h"
#include "htofgeompar.h"
#include "htofraw.h"

ClassImp(HTofWalkPar)

HTofWalkPar::HTofWalkPar(const Char_t* name,const Char_t* title,
                       const Char_t* context)
    : HParCond(name,title,context)
{
    fWPars.Set(6*8*8*4*20*9); // 6 sectors x 8 modules x 8 cells x (2 x 2) sides x 20 bins x 9 parameters
    fWErrors.Set(6*8*8*4*20); // 6 sectors x 8 modules x 8 cells x (2 x 2) sides x 20 bins x 1 parameters
    fSideIsUsed.Set(6*8*8*2);
    fParsSX.Set(6*8*8*3);
    fParsDX.Set(6*8*8*5);
    fParsGeantToData.Set(2);
    fParsGroupVelocityData.Set(6*8*8);
    fParsGroupVelocityScale =1;
    func          = new TF1("func",HTofWalkPar::ffunc,0,5000,9);

    fdxsigma      = new TF1("fdxsigma" ,"[0]+[1]*x**[2]",0,25);
    fdxoffset     = new TF1("fdxoffset","[0]+[1]*exp(x*[2])+[3]*exp(x*[4])",0,25);
    fscaleDxSigma = new TF1("fscaleDxSigma","pol2",0,1);
    clear();
}
HTofWalkPar::~HTofWalkPar()
{
    // destructor

    delete fdxsigma;
    delete fdxoffset;
    delete fscaleDxSigma;
    delete func;

}
void HTofWalkPar::getContainers()
{
    fCalPar      =(HTofCalPar  *)gHades->getRuntimeDb()->getContainer("TofCalPar");
    fTofGeometry =(HTofGeomPar *)gHades->getRuntimeDb()->getContainer("TofGeomPar");
    fDigiPar     =(HTofDigiPar *)gHades->getRuntimeDb()->getContainer("TofDigiPar");
}

void HTofWalkPar::clear()
{

    fWPars.Reset(0.);
    fWErrors.Reset(0.);
    fSideIsUsed.Reset(1);
    fParsSX.Reset(0);
    fParsDX.Reset(0);
    fParsGeantToData.Reset(0);
    fParsGroupVelocityData.Reset(0);
    fParsGroupVelocityScale =1;
    status = kFALSE;
    resetInputVersions();
    changed = kFALSE;

}
void HTofWalkPar::putParams(HParamList* l)
{
    // Puts all params of HTofWalkPar to the parameter list of
    // HParamList (which is used by the io);
    if (!l) return;
    l->add("fWPars"                 ,fWPars      );
    l->add("fWErrors"               ,fWErrors    );
    l->add("fSideIsUsed"            ,fSideIsUsed );
    l->add("fParsSX"                ,fParsSX      );
    l->add("fParsDX"                ,fParsDX      );
    l->add("fParsGeantToData"       ,fParsGeantToData);
    l->add("fParsGroupVelocityData" ,fParsGroupVelocityData);
    l->add("fParsGroupVelocityScale",fParsGroupVelocityScale);

}
Bool_t HTofWalkPar::getParams(HParamList* l)
{
    if (!l) return kFALSE;
    if(!( l->fill("fWPars"                 , &fWPars     ))) return kFALSE;
    if(!( l->fill("fWErrors"               , &fWErrors   ))) return kFALSE;
    if(!( l->fill("fSideIsUsed"            , &fSideIsUsed))) return kFALSE;
    if(!( l->fill("fParsSX"                , &fParsSX    ))) return kFALSE;
    if(!( l->fill("fParsDX"                , &fParsDX    ))) return kFALSE;
    if(!( l->fill("fParsGeantToData"       , &fParsGeantToData))) return kFALSE;
    if(!( l->fill("fParsGroupVelocityData" , &fParsGroupVelocityData))) return kFALSE;
    if(!( l->fill("fParsGroupVelocityScale", &fParsGroupVelocityScale))) return kFALSE;

    return kTRUE;
}

Double_t HTofWalkPar::ffunc(Double_t* x, Double_t* par)
{
    if(x[0]<par[8]) return par[2]+par[0]*exp(x[0]*par[1]);
    else            return par[7]+par[3]*exp(x[0]*par[4])+par[5]*pow(x[0],par[6]);
}

Float_t HTofWalkPar::getOffset(Float_t x, Int_t side, Float_t q, Int_t sector, Int_t module, Int_t cell)
{

    Double_t corrs[4] = {0.,0.,0.,0.};
    Double_t locX [4] = {0.,0.,0.,0.};

    HTofDigiParCell& cellg = (*fDigiPar)[sector][module][cell];

    Float_t hl = cellg.getHalfLen();
    if(x!=x)x = 0;
    Float_t xtemp = hl;
    if(side==0 || side==1) {
	xtemp = hl - x;
    } else {
	xtemp = hl + x;
    }
    if(xtemp>hl*2.) xtemp = hl*2.;
    if(xtemp<0)     xtemp = 0.;
    Int_t xbin  = floor(xtemp/(hl*2.)*20);
    Int_t xbint = floor((xtemp + hl/20.)/(hl*2.)*20);
    if(xbin<0)    xbin = 0;
    if(xbin>19)   xbin = 19;
    if(xbint<0)  xbint = 0;
    if(xbint>19) xbint = 19;
    Int_t binsX[4] = {0,1,2,3};
    Int_t binUsed = 0;
    if(xbin==19) {
	binsX[0] = 16;
	binsX[1] = 17;
	binsX[2] = 18;
	binsX[3] = 19;
	binUsed = 3;

    } else if(xbin>1){
	binsX[0] =xbin-2;
	binsX[1] =xbin-1;
	binsX[2] =xbin;
	binsX[3] =xbin+1;

        binUsed = 2;
    }
    for(Int_t i=0;i<4;i++) {
        if(binsX[i]<20)
        locX[i] = hl*2./20.*(binsX[i]) + hl/20.;
        else
        locX[i] = hl*2./20.*(binsX[i]) + hl/20.;
    }

    const Int_t nPar=func->GetNpar();
    Double_t pars[nPar];
    for(Int_t i=0;i<4;i++) {
	const Float_t* par= getPars(sector,module,cell,side,binsX[i]);
	for(Int_t j=0;j<nPar;j++) {
             pars[j]=par[j];
	}
	func->SetParameters(pars);
	corrs[i] = func->Eval(q);
    }
    // Interpolate between bins the correct value!
    if(binsX[binUsed]>0 && binsX[binUsed]<19) {
	if(xtemp<locX[binUsed]) {
	    return corrs[binUsed-1]+(xtemp-locX[binUsed-1])*(corrs[binUsed]-corrs[binUsed-1])/(locX[binUsed]-locX[binUsed-1]);
	} else {
	    return corrs[binUsed]+(xtemp-locX[binUsed])*(corrs[binUsed+1]-corrs[binUsed])/(locX[binUsed+1]-locX[binUsed]);
	}
    } else if(binsX[binUsed]==0) {
	return corrs[binUsed]+(xtemp-locX[binUsed])*(corrs[binUsed+1]-corrs[binUsed])/(locX[binUsed+1]-locX[binUsed]);
    } else {
	return corrs[binUsed-1]+(xtemp-locX[binUsed-1])*(corrs[binUsed]-corrs[binUsed-1])/(locX[binUsed]-locX[binUsed-1]);
    }
}
void HTofWalkPar::getOffsets(Float_t x, Float_t ql,Float_t qr,
			     Int_t sector, Int_t module, Int_t cell,
			     Float_t& const1,Float_t& const2,Float_t& const3,Float_t& const4)
{
    const1 = getOffset(x, 0, ql, sector, module, cell);
    const2 = getOffset(x, 2, qr, sector, module, cell);
    const3 = getOffset(x, 1, qr, sector, module, cell);
    const4 = getOffset(x, 3, ql, sector, module, cell);
}

void HTofWalkPar::getErrors(Float_t x, Float_t ql,Float_t qr,
			    Int_t sector, Int_t module, Int_t cell,
			    Float_t& const1,Float_t& const2,Float_t& const3,Float_t& const4)
{

    const1 = fabs(getOffset(x, 0, ql*0.93, sector, module, cell)      - getOffset(x, 0, ql*1.07, sector, module, cell));
    const2 = fabs(getOffset(x, 2, qr*0.93, sector, module, cell)      - getOffset(x, 2, qr*1.07, sector, module, cell));
    const3 = fabs(getOffset(x, 1, qr*0.93, sector, module, cell)      - getOffset(x, 1, qr*1.07, sector, module, cell));
    const4 = fabs(getOffset(x, 3, ql*0.93, sector, module, cell)      - getOffset(x, 3, ql*1.07, sector, module, cell));

    if(const1<0.02) const1 = 0.02;
    if(const2<0.02) const2 = 0.02;
    if(const3<0.02) const3 = 0.02;
    if(const4<0.02) const4 = 0.02;

}
void HTofWalkPar::getTofPos(HTofRaw* tofraw,Float_t& tof,Float_t& pos, Float_t x, Float_t startTMP) {

    Int_t sector = tofraw->getSector();
    Int_t module = tofraw->getModule();
    Int_t cell   = tofraw->getCell();
    HLocation loc;
    loc.set(3,0,0,0);
    loc[0]=sector;
    loc[1]=module;
    loc[2]=cell;


    tof = -100.;
    pos = -10000.;


    HTofCalParCell& cellp=(*fCalPar)[loc[0]][loc[1]][loc[2]];
    HTofDigiParCell& cellg=(*fDigiPar)[loc[0]][loc[1]][loc[2]];

    Float_t hl = cellg.getHalfLen();
    Float_t vg = cellp.getVGroup();

    Float_t ql = tofraw->getLeftCharge()  - cellp.getPedestalL();
    Float_t qr = tofraw->getRightCharge() - cellp.getPedestalR();
    Float_t tl = (tofraw->getLeftTime()*0.097)   - startTMP - cellp.getTimK();
    Float_t tr = (tofraw->getRightTime()*0.097)  - startTMP - cellp.getTimK();

    Float_t atof;
    Float_t axpos = x;
    Float_t xl = 0.;
    Float_t xr = 0.;

    xl = hl-axpos;
    xr = hl+axpos;


    Float_t corrl1;
    Float_t corrl2;
    Float_t corrr1;
    Float_t corrr2;

    Float_t errl1;
    Float_t errl2;
    Float_t errr1;
    Float_t errr2;

    getOffsets(axpos, ql, qr, sector, module, cell, corrl1,corrr1,corrl2,corrr2);
    getErrors (axpos, ql, qr, sector, module, cell, errl1 ,errr1 ,errl2 ,errr2);

    //Float_t corr1,corr2,corr3,corr
    Float_t wl1  = 1e-12;
    Float_t wl2  = 1e-12;
    Float_t wr1  = 1e-12;
    Float_t wr2  = 1e-12;
    Float_t sigl = 0.180;
    Float_t sigr = 0.180;

    xl = hl-axpos;
    xr = hl+axpos;
    Int_t xbinl1 = floor(xl/(hl*2.)*20);
    Int_t xbinr1 = floor(xr/(hl*2.)*20);
    if(xbinl1<0)  xbinl1 = 0;
    if(xbinl1>19) xbinl1 = 19;
    if(xbinr1<0)  xbinr1 = 0;
    if(xbinr1>19) xbinr1 = 19;

    sigl = getError(sector, module, cell, 0, xbinl1);
    sigr = getError(sector, module, cell, 3, xbinr1);

    if(sigl==0)sigl = 0.4;
    if(sigr==0)sigr = 0.4;

    // is left side used (Q)?
    if(getIsUsed(sector,module,cell,0)) {
	wl1 = 1./sqrt(sigl*sigl+errl1*errl1);
	wr2 = 1./sqrt(sigr*sigr+errr2*errr2);
    }

    sigl = getError(sector, module, cell, 1, xbinl1);
    sigr = getError(sector, module, cell, 2, xbinr1);

    if(sigl==0)sigl = 0.4;
    if(sigr==0)sigr = 0.4;

    // is right side used (Q)?
    if(getIsUsed(sector,module,cell,1)) {
	wl2 = 1./sqrt(sigl*sigl+errl2*errl2);
	wr1 = 1./sqrt(sigr*sigr+errr1*errr1);
    }

    if(ql<0 && qr<0) return;

    if(ql<0) {wl1=0.;wr2=0.; }
    if(qr<0) {wl2=0.;wr1=0.; }

    if((wl1==0.&&wl2==0.)||(wr1==0.&&wr2==0.)) return;

    axpos = 0.5 * ( ((tr-corrr1)*wr1+(tr-corrr2)*wr2)/(wr1+wr2) - ((tl-corrl1)*wl1+(tl-corrl2)*wl2)/(wl1+wl2) ) * vg ;
    atof  = ( (tl-corrl1+axpos/vg)*wl1+(tl-corrl2+axpos/vg)*wl2 + (tr-corrr1-axpos/vg)*wr1+(tr-corrr2-axpos/vg)*wr2  )/(wl1+wl2+wr1+wr2);

    tof = atof;
    pos = axpos-cellp.getPosK();


}


Double_t HTofWalkPar::getDxSigma (Int_t s,Int_t m,Int_t c,Double_t eloss)
{
    const   Double_t* SX = getParsSX(s,m,c);
    fdxsigma->SetParameters( SX );
    return fdxsigma -> Eval(eloss);
}
Double_t HTofWalkPar::getDxSigmaDigi (Int_t s,Int_t m,Int_t c,Double_t eloss,Double_t vgroup,Double_t beta)
{
    const   Double_t* SX = getParsSX(s,m,c);
    fdxsigma->SetParameters( SX );
    if(beta<0.3)  beta = 0.3;
    if(beta>0.96) beta = 0.96;
    fscaleDxSigma ->SetParameters(fParsGroupVelocityScale.GetArray());
    Double_t scale = fscaleDxSigma ->Eval(beta);
    return fdxsigma -> Eval(eloss) * (getGroupVelocity(s,m,c)/vgroup) * scale;
}

Double_t HTofWalkPar::getDxOffset(Int_t s,Int_t m,Int_t c,Double_t eloss)
{
    const   Double_t* DX = getParsDX(s,m,c);
    fdxoffset->SetParameters( DX );
    return fdxoffset -> Eval(eloss);
}

Double_t HTofWalkPar::getNormedDX(Int_t s,Int_t m,Int_t c,Double_t eloss,Double_t rkDX,Bool_t sim){

    Double_t sigma = HTofWalkPar::getDxSigma(s,m,c,eloss);
    if(sim){
	return rkDX/sigma;
    } else {
	Double_t offset = HTofWalkPar::getDxOffset(s,m,c,eloss);
	return (rkDX-offset)/sigma;
    }
}


void HTofWalkPar::Streamer(TBuffer &R__b)
{
   // Stream an object of class HTofWalkPar.

   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      HParCond::Streamer(R__b);
      fWPars.Streamer(R__b);
      fWErrors.Streamer(R__b);
      fSideIsUsed.Streamer(R__b);
      if(R__v < 2){
           fParsSX.Set(6*8*8*3);
	   fParsDX.Set(6*8*8*5);
	   fParsGeantToData.Set(2);
           fParsSX.Reset(0);
           fParsDX.Reset(0);
	   fParsGeantToData.Reset(0);
	   fParsGroupVelocityData .Set(6*8*8);
	   fParsGroupVelocityData .Reset(0);
	   fParsGroupVelocityScale.Set(3);
           fParsGroupVelocityScale.Reset(0);
      } else {
	  fParsSX.Streamer(R__b);
	  fParsDX.Streamer(R__b);
	  fParsGeantToData.Streamer(R__b);
	  fParsGroupVelocityData.Streamer(R__b);
	  fParsGroupVelocityScale.Streamer(R__b);

      }

      R__b.CheckByteCount(R__s, R__c, HTofWalkPar::IsA());
   } else {
      R__c = R__b.WriteVersion(HTofWalkPar::IsA(), kTRUE);
      HParCond::Streamer(R__b);
      fWPars.Streamer(R__b);
      fWErrors.Streamer(R__b);
      fSideIsUsed.Streamer(R__b);
      fParsSX.Streamer(R__b);
      fParsDX.Streamer(R__b);
      fParsGeantToData.Streamer(R__b);
      fParsGroupVelocityData.Streamer(R__b);
      fParsGroupVelocityScale.Streamer(R__b);
      R__b.SetByteCount(R__c, kTRUE);
   }
}







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