ROOT logo
#include "hmdchitsegfiller.h"
#include "hmdcgeomobj.h"
#include "hmdchit.h"
#include "hmdcseg.h"
#include "hmdcclus.h"
#include "hmdcsizescells.h"
#include "hmdctrackparam.h"

//*-- Author : A.Ierusalimov & Vladimir Pechenov
//*-- Modified : 25/06/2004 by V. Pechenov

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////////////////
//
// HMdcHitSegFiller
//
// class for error propagation from Dubna track fitter and cluster
// finder to HMdcSeg and HMdcHit straight line parametrization 
// and filling HMdcSeg and HMdcHit containers.
//
/////////////////////////////////////////////////////////////////////////

void HMdcHitSegFiller::setFitParam(HMdcTrackParam& par) {
  plane1  = par.getFirstPlane();
  A1      = plane1->A();
  B1      = plane1->B();
  x1      = par.x1();
  y1      = par.y1();
  z1      = par.z1();
  plane2  = par.getSecondPlane();
  A2      = plane2->A();
  B2      = plane2->B();
  x2      = par.x2();
  y2      = par.y2();
  z2      = par.z2();
  covMatr = &(par.getErrMatr());
  Double_t* tos      = par.getTimeOffset(); //!
  Double_t* errTOSet = par.getErrTimeOffset(); //!
  for(Int_t m=0;m<4;m++) {
    timeOffSet[m]    = tos[m];
    errTimeOffSet[m] = errTOSet[m];
  }
}

void HMdcHitSegFiller::setFitParamForSecondSec(HMdcTrackParam& par) {
  // !!! For cosmic 2 sectors data only !!!
  plane1  = par.getFirstPlane();
  A1      = plane1->A();
  B1      = plane1->B();
  x1      = par.x1();
  y1      = par.y1();
  z1      = par.z1();
  plane2  = par.getSecondPlane();
  A2      = plane2->A();
  B2      = plane2->B();
  x2      = par.x2();
  y2      = par.y2();
  z2      = par.z2();
  covMatr = &(par.getErrMatr());
  Double_t* tos      = par.getTimeOffset(); //!
  Double_t* errTOSet = par.getErrTimeOffset(); //!
  for(Int_t m=0;m<4;m++) {
    timeOffSet[m]    = tos[m+4];
    errTimeOffSet[m] = errTOSet[m+4];
  }
}

void HMdcHitSegFiller::setClusParam(HMdcClus* clus, Bool_t isCoilOff) {
  x1=clus->getXTarg();
  y1=clus->getYTarg();
  z1=clus->getZTarg();
  x2=clus->getX();
  y2=clus->getY();
  z2=clus->getZ();
  A2=clus->A();
  B2=clus->B();
  clus->fillErrMatClus(isCoilOff,clusErrMatr);
  covMatr=&clusErrMatr;
  if(isCoilOff || clus->getIOSeg()==0) typeClusVert=0;
  else {
    typeClusVert=1;
    A1=0.;
    B1=clus->getBParKickPl();
  }
  for(Int_t m=0;m<4;m++) timeOffSet[m]=errTimeOffSet[m]=0.;
}

void HMdcHitSegFiller::calcSegPar(const HGeomVector* targ) {
  Double_t dX=x2-x1;
  Double_t dY=y2-y1;
  Double_t dZ=z2-z1;
  Double_t rXY2=dX*dX+dY*dY;
  Double_t rXY=sqrt(rXY2);
  if(rXY<2.E-5) {
    x2+=1.E-5;
    y2+=1.E-5;
    calcSegPar();
    return;
  }
  theta=atan2(rXY,dZ);
  phi=atan2(dY,dX);
  zPrime=z=z1 - (x1*dX+y1*dY)/rXY2*dZ;
  rPrime=r=(y1*dX-x1*dY)/rXY;
  if(targ) {
    zPrime += (targ->getX()*dX+targ->getY()*dY)*dZ/rXY2;
    rPrime += (targ->getX()*dY-targ->getY()*dX)/rXY;
  }
}

void HMdcHitSegFiller::calcDerMatrToSeg(void) {
  Double_t rXY=1./sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
  Double_t x1o=x1*rXY;
  Double_t x2o=x2*rXY;
  Double_t y1o=y1*rXY;
  Double_t y2o=y2*rXY;
  Double_t dZ=(z2-z1)*rXY;
  Double_t dX=x2o-x1o;
  Double_t dY=y2o-y1o;
  Double_t var1 = x1o*dX+y1o*dY;
  Double_t var2 = y1o*dX-x1o*dY;
  Double_t var3 = rXY/(dZ*dZ+1.);
  Double_t dXdZ=dX*dZ;
  Double_t dYdZ=dY*dZ;
  
  dP2dP1[0][0] = -A1 - dXdZ + x1o*dZ - var1*(A1+2.0*dXdZ);  // dZmdX1
  dP2dP1[0][1] = -B1 - dYdZ + y1o*dZ - var1*(B1+2.0*dYdZ);  // dZmdY1
  dP2dP1[0][2] = -x1o*dZ + var1*(A2+2.0*dXdZ);              // dZmdX2
  dP2dP1[0][3] = -y1o*dZ + var1*(B2+2.0*dYdZ);              // dZmdY2

  dP2dP1[1][0] =  var2*dX - y2o;                            // dR0dX1
  dP2dP1[1][1] =  var2*dY + x2o;                            // dR0dY1
  dP2dP1[1][2] = -var2*dX + y1o;                            // dR0dX2
  dP2dP1[1][3] = -var2*dY - x1o;                            // dR0dY2

  dP2dP1[2][0] = -(dXdZ + A1)*var3;                         // dThdX1
  dP2dP1[2][1] = -(dYdZ + B1)*var3;                         // dThdY1
  dP2dP1[2][2] =  (dXdZ + A2)*var3;                         // dThdX2
  dP2dP1[2][3] =  (dYdZ + B2)*var3;                         // dThdY2

  dP2dP1[3][0] =  dY*rXY;                                   // dPhdX1
  dP2dP1[3][1] = -dX*rXY;                                   // dPhdY1
  dP2dP1[3][2] = -dY*rXY;                                   // dPhdX2
  dP2dP1[3][3] =  dX*rXY;                                   // dPhdY2
}

void HMdcHitSegFiller::calcDerMatrClus1ToSeg(void) {
  // Calcul. error matrix of HMdcSeg from seg.1 cluster.  
  Double_t dX=x2-x1;
  Double_t dY=y2-y1;
  Double_t dZ=z2-z1;
  Double_t rXY=1./sqrt(dX*dX+dY*dY);
  dX *= rXY;
  dY *= rXY;
  dZ *= rXY;
  Double_t var2=x1*dX+y1*dY;
  Double_t var5=rXY/(1.+dZ*dZ);

  dP2dP1[0][0] = (x2*dX+y2*dY)*rXY;                // dZmdZ1
  dP2dP1[0][1] = 0.;                               // no param.
  dP2dP1[0][2] = (var2*A2+2*dX*(z1-z)-x1*dZ)*rXY;  // dZmdX2
  dP2dP1[0][3] = (var2*B2+2*dY*(z1-z)-y1*dZ)*rXY;  // dZmdY2

  dP2dP1[1][0] = 0.;                               // dR0dZ1 
  dP2dP1[1][1] = 0.;                               // no param.
  dP2dP1[1][2] = (y1-r*dX)*rXY;                    // dR0dX2
  dP2dP1[1][3] =-(x1+r*dY)*rXY;                    // dR0dY2
  
  dP2dP1[2][0] = var5;                             // dThdZ1
  dP2dP1[2][1] = 0.;                               // no param.
  dP2dP1[2][2] = (dZ*dX+A2)*var5;                  // dThdX2
  dP2dP1[2][3] = (dZ*dY+B2)*var5;                  // dThdY2

  dP2dP1[3][0] = 0.;                               // dPhdZ1
  dP2dP1[3][1] = 0.;                               // no param.
  dP2dP1[3][2] =-dY*rXY;                           // dPhdX2
  dP2dP1[3][3] = dX*rXY;                           // dPhdY2
}

// MdcSeg ==> fit param. ------------------------------------------

void HMdcHitSegFiller::setSegParam(HMdcPlane* pl1, HMdcPlane* pl2,
        Double_t zm, Double_t r0, Double_t th, Double_t ph) {
  z=zm;
  r=r0;
  theta=th;
  phi=ph;
  plane1=pl1;
  plane2=pl2;
  A1=pl1->A();
  B1=pl1->B();
  A2=pl2->A();
  B2=pl2->B();
  calcFitPar();
}

void HMdcHitSegFiller::calcFitPar() {
  plane1->calcSegIntersec(z,r,theta,phi,x1,y1,z1);
  plane2->calcSegIntersec(z,r,theta,phi,x2,y2,z2);
}

void HMdcHitSegFiller::calcDerMatrToFit(void) {
  // ne provereno ???????!!!!!!!!!!! i ne uproscheno
  Double_t cosTheta = cos(theta);
  Double_t sinTheta = sin(theta);
  Double_t cosPhi = cos(phi);
  Double_t sinPhi = sin(phi);
  Double_t cl = cosPhi*sinTheta;
  Double_t cm = sinPhi*sinTheta;
  Double_t cn = cosTheta;
  Double_t xM = -r*sinPhi;
  Double_t yM =  r*cosPhi;
  Double_t D1 = plane1->D();
  Double_t D2 = plane2->D();
  Double_t E0 = A1*cl+B1*cm+cn;
  Double_t F0 = D1-(A1*xM+B1*yM+z);
  Double_t EN = A2*cl+B2*cm+cn;
  Double_t FN = D2-(A2*xM+B2*yM+z);

  dP1dP2[0][0] = -cl/E0;
  dP1dP2[1][0] = -cm/E0;
  dP1dP2[2][0] = -cl/EN;
  dP1dP2[3][0] = -cm/EN;
  dP1dP2[0][1] =  -sinPhi + (A1*sinPhi - B1*cosPhi)*cl/E0;
  dP1dP2[1][1] =   cosPhi + (A1*sinPhi - B1*cosPhi)*cm/E0;
  dP1dP2[2][1] =  -sinPhi + (A2*sinPhi - B2*cosPhi)*cl/EN;
  dP1dP2[3][1] =   cosPhi + (A2*sinPhi - B2*cosPhi)*cm/EN;
  dP1dP2[0][2] = F0/(E0*E0)*cosPhi;
  dP1dP2[1][2] = F0/(E0*E0)*sinPhi;
  dP1dP2[2][2] = FN/(EN*EN)*cosPhi;
  dP1dP2[3][2] = FN/(EN*EN)*sinPhi;
  dP1dP2[0][3] = -yM - cm*F0/E0 + cl/E0*((A1*yM-B1*xM) + F0/E0*(A1*cm-B1*cl));
  dP1dP2[1][3] =  xM + cl*F0/E0 + cm/E0*((A1*yM-B1*xM) + F0/E0*(A1*cm-B1*cl));
  dP1dP2[2][3] = -yM - cm*FN/EN + cl/EN*((A2*yM-B2*xM) + FN/EN*(A2*cm-B2*cl));
  dP1dP2[3][3] =  xM + cl*FN/EN + cm/EN*((A2*yM-B2*xM) + FN/EN*(A2*cm-B2*cl));
}

// ----------------------------------------------------------------
void HMdcHitSegFiller::propogErrToSeg(HSymMat4& errMatOut) {
  // propogation of errMatS1 to errMatS2
  calcDerMatrToSeg();
  errMatOut.transform(*covMatr,dP2dP1[0]);
}

void HMdcHitSegFiller::fillMdcSeg(HMdcSeg* mdcSeg, const HGeomVector* targ) {
  calcSegPar(targ);
  calcDerMatrToSeg();
  fillSegPar(mdcSeg);
  mdcSeg->getCovariance().transform(*covMatr,dP2dP1[0]);
  mdcSeg->setXYPar(x1,y1,x2,y2);
}

void HMdcHitSegFiller::fillMdcSegByClus(HMdcSeg* mdcSeg, const HGeomVector* targ,HMdcTrackParam* trPar) {
  //  plane1=plane2=0;
  calcSegPar(targ);
  fillSegPar(mdcSeg);
  if(typeClusVert==0) calcDerMatrClus1ToSeg();
  else                calcDerMatrToSeg();
  mdcSeg->getCovariance().transform(*covMatr,dP2dP1[0]);
  if(trPar != NULL) mdcSeg->setXYPar(trPar->x1(),trPar->y1(),trPar->x2(),trPar->y2());
  else              mdcSeg->setXYPar(x1,y1,x2,y2);  // Cluster parametrisation
}

void HMdcHitSegFiller::fillSegPar(HMdcSeg* mdcSeg) {
  mdcSeg->setPar(z,r,theta,phi);
  mdcSeg->setZprime(zPrime);
  mdcSeg->setRprime(rPrime);
}

void HMdcHitSegFiller::propogErrToFit(HSymMat4& errMatIn, HSymMat4& errMatOut) {
  // propogation of errMatIn to errMatOut
  calcDerMatrToFit();
  errMatOut.transform(errMatIn,dP1dP2[0]);
}

// --- HMdcHit -----------------------------------------
void HMdcHitSegFiller::fillMdcHit(HMdcSizesCellsMod* fSCMod, HMdcHit* mdcHit) {
  // Calcul. a cross of the line with plane MDC (parA*x+parB*y+c*z=parD),
  // transform. this point to mdc coor.sys. (z=0) and calc.
  // hit direction in mdc coor.sys. and matrix errors
  const Double_t* tfSysRSec=fSCMod->getTfSysRSec();
  const Double_t* ct=fSCMod->getMdcHitLookupTb();
  Double_t parA=fSCMod->A();
  Double_t parB=fSCMod->B();
  Double_t parD=fSCMod->D();
  Double_t dX=x2-x1;
  Double_t dY=y2-y1;
  Double_t dZ=z2-z1;
  Double_t del=1/(parA*dX+parB*dY+dZ);
  Double_t cxz1=(parD-z1-parA*x1)*del;
  Double_t cxz2=(parD-z2-parA*x2)*del;
  Double_t cyz1=(parD-z1-parB*y1)*del;
  Double_t cyz2=(parD-z2-parB*y2)*del;
  Double_t xt0=x2*cyz1 - x1*cyz2;
  Double_t yt0=y2*cxz1 - y1*cxz2;
  
  Double_t xt=xt0-tfSysRSec[ 9];
  Double_t yt=yt0-tfSysRSec[10];
  Double_t rXYZ=1/sqrt(dX*dX+dY*dY+dZ*dZ);
  dX *= rXYZ; // unit vector
  dY *= rXYZ;
  dZ *= rXYZ;
  //---Hit parameters----------------------------------------------------
  x=ct[0]*xt+ct[1]*yt+ct[2];
  y=ct[3]*xt+ct[4]*yt+ct[5];
  xDir=tfSysRSec[0]*dX+tfSysRSec[3]*dY+tfSysRSec[6]*dZ;
  yDir=tfSysRSec[1]*dX+tfSysRSec[4]*dY+tfSysRSec[7]*dZ;
  Int_t mod=fSCMod->getMod();
  mdcHit->setPar(x,y,xDir,yDir,timeOffSet[mod]);
  //---------------------------------------------------------------------  
  Double_t x1t=(x1-xt0)*del;
  Double_t y1t=(y1-yt0)*del;
  Double_t xt2=(xt0-x2)*del;
  Double_t yt2=(yt0-y2)*del;
  Double_t xtA=xt0*parA*del;
  Double_t ytB=yt0*parB*del;
  Double_t dXtdX2=-x1t*A2+cyz1-xtA;
  Double_t dYtdY2=-y1t*B2+cxz1-ytB;
  Double_t dXtdX1=-xt2*A1-cyz2+xtA;
  Double_t dYtdY1=-yt2*B1-cxz2+ytB;
  Double_t dXtdY2=x1t*(parB-B2);
  Double_t dYtdX2=y1t*(parA-A2);
  Double_t dXtdY1=xt2*(parB-B1);
  Double_t dYtdX1=yt2*(parA-A1);
  
  dP2dP1[0][0]=ct[0]*dXtdX1+ct[1]*dYtdX1;   // dXdX1
  dP2dP1[0][1]=ct[0]*dXtdY1+ct[1]*dYtdY1;   // dXdY1
  dP2dP1[0][2]=ct[0]*dXtdX2+ct[1]*dYtdX2;   // dXdX2
  dP2dP1[0][3]=ct[0]*dXtdY2+ct[1]*dYtdY2;   // dXdY2
  
  dP2dP1[1][0]=ct[3]*dXtdX1+ct[4]*dYtdX1;   // dYdX1
  dP2dP1[1][1]=ct[3]*dXtdY1+ct[4]*dYtdY1;   // dYdY1
  dP2dP1[1][2]=ct[3]*dXtdX2+ct[4]*dYtdX2;   // dYdX2
  dP2dP1[1][3]=ct[3]*dXtdY2+ct[4]*dYtdY2;   // dYdY2
   
  Double_t c0xx=(tfSysRSec[0]-xDir*dX)*rXYZ;
  Double_t c3xy=(tfSysRSec[3]-xDir*dY)*rXYZ;
  Double_t c6xz=(tfSysRSec[6]-xDir*dZ)*rXYZ;
  Double_t c1yx=(tfSysRSec[1]-yDir*dX)*rXYZ;
  Double_t c4yy=(tfSysRSec[4]-yDir*dY)*rXYZ;
  Double_t c7yz=(tfSysRSec[7]-yDir*dZ)*rXYZ;
  
  dP2dP1[2][0] =-c0xx+c6xz*A1;   // dXDdX1
  dP2dP1[2][1] =-c3xy+c6xz*B1;   // dXDdY1
  dP2dP1[2][2] = c0xx-c6xz*A2;   // dXDdX2
  dP2dP1[2][3] = c3xy-c6xz*B2;   // dXDdY2
  
  dP2dP1[3][0] =-c1yx+c7yz*A1;   // dYDdX1
  dP2dP1[3][1] =-c4yy+c7yz*B1;   // dYDdY1
  dP2dP1[3][2] = c1yx-c7yz*A2;   // dYDdX2
  dP2dP1[3][3] = c4yy-c7yz*B2;   // dYDdY2

  hitErr.transform(*covMatr,dP2dP1[0]);
  HSymMat& cov = mdcHit->getCovariance();
  for(Int_t i=0;i<4;i++) for(Int_t j=i;j<4;j++) cov.setElement(i,j,hitErr(i,j));
  cov.setElement(4,4,errTimeOffSet[mod]*errTimeOffSet[mod]);
}

void HMdcHitSegFiller::fillMdcHitByClus(HMdcSizesCellsMod* fSCMod, 
    HMdcHit* mdcHit) {
  // Calcul. a cross of the line with plane MDC (parA*x+parB*y+c*z=parD),
  // transform. this point to mdc coor.sys. (z=0) and calc.
  // hit direction in mdc coor.sys. and matrix errors
  if(typeClusVert) {
    fillMdcHit(fSCMod, mdcHit);
    return;
  }
  const Double_t* tfSysRSec=fSCMod->getTfSysRSec();
  const Double_t* ct=fSCMod->getMdcHitLookupTb();
  Double_t parA=fSCMod->A();
  Double_t parB=fSCMod->B();
  Double_t parD=fSCMod->D();
  Double_t dX=x2-x1;
  Double_t dY=y2-y1;
  Double_t dZ=z2-z1;
  Double_t del=1/(parA*dX+parB*dY+dZ);
  Double_t cxz1=(parD-z1-parA*x1)*del;
  Double_t cxz2=(parD-z2-parA*x2)*del;
  Double_t cyz1=(parD-z1-parB*y1)*del;
  Double_t cyz2=(parD-z2-parB*y2)*del;
  Double_t xt0=x2*cyz1 - x1*cyz2;
  Double_t yt0=y2*cxz1 - y1*cxz2;
  Double_t xt=xt0-tfSysRSec[ 9];
  Double_t yt=yt0-tfSysRSec[10];
  Double_t rXYZ=1/sqrt(dX*dX+dY*dY+dZ*dZ);
  dX *= rXYZ; // unit vector
  dY *= rXYZ;
  dZ *= rXYZ;
  //---Hit parameters----------------------------------------------------
  x=ct[0]*xt+ct[1]*yt+ct[2];
  y=ct[3]*xt+ct[4]*yt+ct[5];
  xDir=tfSysRSec[0]*dX+tfSysRSec[3]*dY+tfSysRSec[6]*dZ;
  yDir=tfSysRSec[1]*dX+tfSysRSec[4]*dY+tfSysRSec[7]*dZ;
  mdcHit->setPar(x,y,xDir,yDir,timeOffSet[fSCMod->getMod()]);
  //---------------------------------------------------------------------  
  Double_t x1t=(x1-xt0)*del;
  Double_t y1t=(y1-yt0)*del;
  Double_t xtA=xt0*parA*del;
  Double_t ytB=yt0*parB*del;
  Double_t dXtdZ1=(xt0-x2)*del;
  Double_t dYtdZ1=(yt0-y2)*del;
  Double_t dXtdX2=-x1t*A2+cyz1-xtA;
  Double_t dYtdY2=-y1t*B2+cxz1-ytB;
  Double_t dXtdY2=x1t*(parB-B2);
  Double_t dYtdX2=y1t*(parA-A2);
  
  dP2dP1[0][0]=ct[0]*dXtdZ1+ct[1]*dYtdZ1;   // dXdZ1 
  dP2dP1[0][1]=0;                           //
  dP2dP1[0][2]=ct[0]*dXtdX2+ct[1]*dYtdX2;   // dXdX2
  dP2dP1[0][3]=ct[0]*dXtdY2+ct[1]*dYtdY2;   // dXdY2
  
  dP2dP1[1][0]=ct[3]*dXtdZ1+ct[4]*dYtdZ1;   // dYdZ1
  dP2dP1[1][1]=0;                           //
  dP2dP1[1][2]=ct[3]*dXtdX2+ct[4]*dYtdX2;   // dYdX2
  dP2dP1[1][3]=ct[3]*dXtdY2+ct[4]*dYtdY2;   // dYdY2
  
  Double_t c0xx=(tfSysRSec[0]-xDir*dX)*rXYZ;
  Double_t c3xy=(tfSysRSec[3]-xDir*dY)*rXYZ;
  Double_t c6xz=(tfSysRSec[6]-xDir*dZ)*rXYZ;
  Double_t c1yx=(tfSysRSec[1]-yDir*dX)*rXYZ;
  Double_t c4yy=(tfSysRSec[4]-yDir*dY)*rXYZ;
  Double_t c7yz=(tfSysRSec[7]-yDir*dZ)*rXYZ;
  
  dP2dP1[2][0] =-c6xz;           // dXDdZ1
  dP2dP1[2][1] =0;               //
  dP2dP1[2][2] = c0xx-c6xz*A2;   // dXDdX2
  dP2dP1[2][3] = c3xy-c6xz*B2;   // dXDdY2
  
  dP2dP1[3][0] =-c7yz;           // dYDdZ1
  dP2dP1[3][1] =0;               //
  dP2dP1[3][2] = c1yx-c7yz*A2;   // dYDdX2
  dP2dP1[3][3] = c4yy-c7yz*B2;   // dYDdY2

  hitErr.transform(*covMatr,dP2dP1[0]);
  HSymMat& cov = mdcHit->getCovariance();
  for(Int_t i=0;i<4;i++) for(Int_t j=i;j<4;j++) cov.setElement(i,j,hitErr(i,j));
}

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