ROOT logo
//*-- AUTHOR : A.Rustamov
//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////////
//HMdcTrackGSpline calculates momentum of particle using spline interpolation
//Input data are 4 points  from MDC chambers, OR the additional point from the
//intersection of inner segment with kickPlane
using namespace std;
#include <iostream>
#include <fstream>
#include "hmdctrackgspline.h"
#include "hgeomtransform.h"
#include "hgeomrotation.h"
#include "TMatrixD.h"
ClassImp(HMdcTrackGSpline)
   HMdcTrackGSpline::HMdcTrackGSpline(const Char_t* name, const Char_t * title):TNamed(name,title)
{
   initPlanes(); 
   initParams(50,4);
   N=4;
   //N1=50;
   //N2=50;
   pi=acos(-1.);
isInitialized=kFALSE;
isKickIsInitialized=kFALSE;  
}

void HMdcTrackGSpline::initPlanes()
{
   A1=-0.00; B1=0.9723054821; D1=78.50169451382;
   A2=-0.00; B2=1.3761110194; D2=125.35103798876;
   A3=-0.00; B3=1.1547000400; D3=207.24486448803;
   A4=-0.00; B4=1.1547000400; D4=256.11707204248;
}
void HMdcTrackGSpline::initMiddleParamsAll()
{
   for(Int_t s=0; s<6; s++)
      for(Int_t m=0; m<4; m++)
      {
	 middleGA[s][m]=geomParams[s][m].getX();
	 middleGB[s][m]=geomParams[s][m].getY();
	 middleGD[s][m]=geomParams[s][m].getZ();
      }
 isInitialized=kTRUE;
}

void HMdcTrackGSpline::initMiddleParams(HGeomVector params)
{
   middleA=params.getX();
   middleB=params.getY();
   middleD=params.getZ();
}

void HMdcTrackGSpline::initMiddleParamsP4(HGeomVector paramsP4)
{
   middleA4=paramsP4.getX();
   middleB4=paramsP4.getY();
   middleD4=paramsP4.getZ();  
}

void HMdcTrackGSpline::initParams(Int_t N,Int_t NN)
{
   N1=N;
   N2=N-2;
   x=new Double_t [12];
   equationXY=new HGeomVector [N];
   Bx=new Double_t [N];
   By=new Double_t [N];
   Bz=new Double_t [N];
   XZ=new Double_t [NN];
   YZ=new Double_t [NN];
   XZP=new Double_t [NN-1];
   YZP=new Double_t [NN-1];
   FXZ=new Double_t [N];
   FYZ=new Double_t [N];
   FXZP=new Double_t [N-1];
   FYZP=new Double_t [N-1];
   dydz=new Double_t [N];
   dxdz=new Double_t [N];
   d2xdz=new Double_t [N];
   d2ydz=new Double_t [N];
   curv=new Double_t [N];
   x2=new Double_t [N];
   zz2=new Double_t [N];
   z2=new Double_t [N];
   y2=new Double_t [N];
   dist=new Double_t [4];
   point=new HGeomVector [4];
   fieldpoints=new HGeomVector [N];
   secDer=new HGeomVector [N];
   Tfieldpoints=new HGeomVector [N];
   field=new HGeomVector [N];
   BB=new HGeomVector [N];

}
void HMdcTrackGSpline::clearParams()
{
  if(x) {remove(x);}
  if(equationXY) {remove(equationXY);}
  if(Bx) {remove(Bx);}
  if(By) {remove(By);}
  if(Bz) {remove(Bz);}
  if(XZ) {remove(XZ);}
  if(YZ) {remove(YZ);}
  if(XZP) {remove(XZP);}
  if(YZP) {remove(YZP); }
  if(FXZ) {remove(FXZ); }
  if(FYZ) {remove(FYZ); }
  if(FXZP) {remove(FXZP);}
  if(FYZP) {remove(FYZP);}
  if(dydz) {remove(dydz);}
  if(dxdz) {remove(dxdz);}
  if(d2ydz) {remove(d2ydz);}
  if(d2xdz) {remove(d2xdz);}
  if(curv)  {remove(curv);} 
  if(x2) {remove (x2);}
  if(zz2) {remove (zz2);}
  if(z2) {remove(z2);}
  if(y2) {remove(y2);}
  if(dist) {remove(dist);}
  if(point) {remove(point);}
  if(fieldpoints) {remove(fieldpoints);}
  if(secDer) {remove(secDer);}
  if(Tfieldpoints) {remove(Tfieldpoints);}
  if(field) {remove(field);}
  if(BB) {remove(BB);} 
}

void HMdcTrackGSpline::remove(Double_t *pF)
{
  delete [] pF; pF=0;
}
void HMdcTrackGSpline::remove(HGeomVector *pGV)
{
  delete [] pGV; pGV=0;
}

HMdcTrackGSpline::~HMdcTrackGSpline() 
{
  clearParams();
  //if(fGetCont) fGetCont->deleteCont();
}


Double_t HMdcTrackGSpline::det3(Double_t a[3][3])
{
  //calculates determinant of size 3
  return (a[0][0]*a[1][1]*a[2][2]+a[1][0]*a[2][1]*a[0][2]+
	  a[0][1]*a[1][2]*a[2][0]-a[0][2]*a[1][1]*a[2][0]-
	  a[2][1]*a[1][2]*a[0][0]-a[1][0]*a[0][1]*a[2][2]);
}

void HMdcTrackGSpline::init1()
{
  for(Int_t i=0;i<N2;i++)
    {
      transSplineB(60.,0.,BB[i],BB[i]);        
    }
}

void HMdcTrackGSpline::transteta()
{
  for (Int_t i=0;i<48;i++)
    {
      secDer[i].setY((secDer[i].getY()-tan(teta))/(secDer[i].getY()*tan(teta)+1));
      transSpline(0.,tetadig,fieldpoints[i],fieldpoints[i]);
    }
  
}
void HMdcTrackGSpline::transPhi()
{
  for(Int_t i=0; i<48; i++)
    {
      if(phidig<=90)
	{
	  transSpline(phidig,0.,secDer[i],secDer[i]);
	  transSpline(phidig,0.,fieldpoints[i],fieldpoints[i]);
	  transSpline((phidig-60.),0.,BB[i],BB[i]);
	}
      else
	{
	  transSpline(phidig-90.,0.,secDer[i],secDer[i]);
	  transSpline(phidig-90.,0.,fieldpoints[i],fieldpoints[i]);
	  transSpline((phidig-90.-60.),0.,BB[i],BB[i]);
	  
	  mixPoints(fieldpoints[i],fieldpoints[i]);
	  mixPoints(BB[i],BB[i]);
	  mixPoints(secDer[i],secDer[i]);
	  
	}
	    
    }
}
void HMdcTrackGSpline::getPoint()
{
   point[0].setXYZ(x[0],x[1],x[2]);
   point[1].setXYZ(x[3],x[4],x[5]);
   point[2].setXYZ(x[6],x[7],x[8]);
   point[3].setXYZ(x[9],x[10],x[11]);
   Double_t rr=sqrt(x[0]*x[0]+x[1]*x[1]+(x[2]-target)*(x[2]-target));
   phi=atan2(x[1],x[0]);
   
   phi=atan2((x[4]-x[1]),(x[3]-x[0]));
   
   
   
   teta=acos((x[2]-target)/rr);
   Double_t r2=sqrt((x[9]-x[6])*(x[9]-x[6])+
		    (x[10]-x[7])*(x[10]-x[7])+
		    (x[11]-x[8])*(x[11]-x[8]));    
   teta2dig=acos((x[11]-x[8])/r2)*180/pi;
   phi2dig=atan((x[10]-x[7])/(x[9]-x[6]))*180/pi;
   tetadig=teta*180/pi;
   
   if (tetadig<18) tetadig=18;
   if(tetadig>84) tetadig=84;
   phidig=phi*180/pi;
   phidigg=phidig;
   phi-=pi/2;
   SegmentPoints=point[2];
}
void HMdcTrackGSpline::transFieldpoints()
{
  for (Int_t i=0;i<N2;i++)
    {
      //if(fieldpoints[i].getX()<0.)
	    // {
      //  HGeomVector newfieldpoints;
      // newfieldpoints.setXYZ(fieldpoints[i].getX()*(-1.),fieldpoints[i].getY(),fieldpoints[i].getZ());
	       // transSpline(60.,0.,newfieldpoints,Tfieldpoints[i]);
	       // }
	       // else
      transSpline(60.,0.,fieldpoints[i],Tfieldpoints[i]); 
    }
}
void HMdcTrackGSpline::spline(HGeomVector *p, Double_t *Y,Double_t *YP,
			      Double_t *X,Double_t *XP,Int_t size)
{
  Double_t P[size],R[size],Q[size],h[size];
  Double_t t1,t2;
  for (Int_t i = 0; i<size-1; i++)
    h[i] = fabs(p[i+1].getZ() - p[i].getZ());
  for(Int_t i=0;i<size-2;i++)
      R[i]=3*((p[i+2].getY()-p[i+1].getY())/(h[i+1])-(p[i+1].getY()-
						      p[i].getY())/(h[i]))/(h[i]+h[i+1]);
  P[0]=1;
   Q[0]=0;
   for (Int_t i=0;i<size-2;i++)
     {
       t1=h[i]/(2*(h[i]+h[i+1]));
       t2=h[i+1]/(2*(h[i]+h[i+1]));
       P[i+1]= -t2/(1+t1*P[i]);
       Q[i+1]=(R[i]-t1*Q[i])/(1+t1*P[i]);  
     }
   Y[size-1]=Q[size-2]/(1-P[size-2]);
  Y[size-2]=Y[size-1];
  for (Int_t i=size-3;i>0;i--)
    Y[i]=P[i]*Y[i+1]+Q[i];
  Y[0]=Y[1];
  for (Int_t i=0;i<size-1;i++)
    YP[i]=(p[i+1].getY()-p[i].getY())/(h[i])-h[i]*
      Y[i]/3-h[i]*Y[i+1]/6;
   ///////////////////////////
  for(Int_t i=0;i<size-2;i++)
    R[i]=3*((p[i+2].getX()-p[i+1].getX())/(h[i+1])-
	    (p[i+1].getX()-
	     p[i].getX())/(h[i]))/(h[i]+h[i+1]);
  P[0]=1;
  Q[0]=0;
  for (Int_t i=0;i<size-2;i++)
    {
      t1=h[i]/(2*(h[i]+h[i+1]));
      t2=h[i+1]/(2*(h[i]+h[i+1]));
      P[i+1]= -t2/(1+t1*P[i]);
      Q[i+1]=(R[i]-t1*Q[i])/(1+t1*P[i]);  
    }
  X[size-1]=Q[size-2]/(1-P[size-2]);
  X[size-2]=X[size-1];
  for (Int_t i=size-3;i>0;i--)
    X[i]=P[i]*X[i+1]+Q[i];
  X[0]=X[1];
  for (Int_t i=0;i<size-1;i++)
    XP[i]=(p[i+1].getX()-p[i].getX())/(h[i])-h[i]*
      X[i]/3-h[i]*X[i+1]/6;      
}      
void HMdcTrackGSpline::getpoints()
{
  distfield=0;
  Double_t h=(point[2].getZ()-point[1].getZ())/(N1);
  Double_t hConst=(point[2].getZ()-point[1].getZ())*6;
  dist[0]=sqrt(point[0].getX()*point[0].getX()+
	       point[0].getY()*point[0].getY()+
	       point[0].getZ()*point[0].getZ());
  dist[1]=dist[0]+sqrt((point[1].getX()-point[0].getX())*
		       (point[1].getX()-point[0].getX())+
		       (point[1].getY()-point[0].getY())*
		       (point[1].getY()-point[0].getY())+
		       (point[1].getZ()-point[0].getZ())*
		       (point[1].getZ()-point[0].getZ()));
  for(Int_t i=0;i<N1;i++)
    {
      //points along Z axis
      z2[i]=point[1].getZ()+i*h;
      //points in YZ projection
      y2[i]=point[1].getY()+i*h*YZP[1]+i*i*h*h*YZ[1]/(2)+i*i*i*h*h*h*(YZ[2]-YZ[1])/hConst;
      //points Int_t XZ projection
      x2[i]=point[1].getX()+i*h*XZP[1]+i*i*h*h*XZ[1]/(2)+i*i*i*h*h*h*(XZ[2]-XZ[1])/hConst;
      
      dydz[i]=YZP[1]+i*h*YZ[1]+3*i*i*h*h*(YZ[2]-YZ[1])/hConst;
      dxdz[i]=XZP[1]+i*h*XZ[1]+3*i*i*h*h*(XZ[2]-XZ[1])/hConst;

      d2ydz[i]=YZ[1]+6*i*h*(YZ[2]-YZ[1])/hConst;
      d2xdz[i]=XZ[1]+6*i*h*(XZ[2]-XZ[1])/hConst;
      
      fieldpoints[i].setXYZ(x2[i],y2[i],z2[i]);
      secDer[i].setXYZ(dxdz[i],dydz[i],0.);
      

    }

   checkSecDer(d2ydz,dydz);
  
  for(Int_t i=1;i<N1-1;i++)
    {
      distfield+=sqrt((x2[i]-x2[i-1])*(x2[i]-x2[i-1])+
		      (y2[i]-y2[i-1])*(y2[i]-y2[i-1])+
		      (z2[i]-z2[i-1])*(z2[i]-z2[i-1]));
    }
  distfield+=sqrt((x2[N1-1]-x2[N1-2])*(x2[N1-1]-x2[N1-2])+
		  (y2[N1-1]-y2[N1-2])*(y2[N1-1]-y2[N1-2])+
		  (z2[N1-1]-z2[N1-2])*(z2[N1-1]-z2[N1-2]));

  distfield+=sqrt( (x2[N1-1]-point[2].getX())*(x2[N1-1]-point[2].getX())+
		   (y2[N1-1]-point[2].getY())*(y2[N1-1]-point[2].getY())+
		   (z2[N1-1]-point[2].getZ())*(z2[N1-1]-point[2].getZ()) );
		  
		  
  dist[2]=distfield+dist[0]+dist[1];
  dist[3]=dist[2]+sqrt((point[3].getX()-point[2].getX())*
		       (point[3].getX()-point[2].getX())+
		       (point[3].getY()-point[2].getY())*
		       (point[3].getY()-point[2].getY())+
		       (point[3].getZ()-point[2].getZ())*
		       (point[3].getZ()-point[2].getZ())); 
}
Double_t HMdcTrackGSpline::getMetaDistance(Double_t x,Double_t y,Double_t z)
{
  metaDistance=sqrt((x-point[2].getX())*(x-point[2].getX())+
		    (y-point[2].getY())*(y-point[2].getY())+
		    (z-point[2].getZ())*(z-point[2].getZ()))+
    distfield;
  return metaDistance;
}

Double_t HMdcTrackGSpline::getFieldDistance()
{
return distfield;
}

void HMdcTrackGSpline::fieldequation()
{
  Double_t k;
  Double_t A,B;
  for (Int_t i=0;i<N2;i++)
    {
      k=2*sqrt(1+secDer[i].getY()*secDer[i].getY()+
	       secDer[i].getX()*secDer[i].getX());
      // Y istigametinde
      
       B=k*(BB[i].getX()*(1+secDer[i].getY()*secDer[i].getY()));
       
      // X istigametinde
      A=k*(BB[i].getZ()*secDer[i].getY()+
	   BB[i].getX()*secDer[i].getX()*secDer[i].getY()-
	   BB[i].getY()*(1+secDer[i].getX()*secDer[i].getX()));
      
      field[i].setXYZ(A,B,fieldpoints[i].getZ());
      
    }
}
void HMdcTrackGSpline::solveMomentum()
{ 
  Float_t xVal[2]={0.,0.};
  Float_t yVal[2]={0.,0.};
  SolveDiffEquation(field,equationXY,N2,xVal,yVal);
}         
Int_t HMdcTrackGSpline::getMomentum(Bool_t cond,Int_t nchambers)
{
  polarity=1;
  precon=SplineMinimize(equationXY,fieldpoints,N2);
  if (precon<0)
     {
	precon*=-1;
	polarity*=-1;
	
     }  
  else  if(isSecDerY)
     {
	polarity=-1;
     }
  else
     {
	polarity=1;
     }
  Double_t corr1=1.;
  if (cond){ //bashla cond
    for(Int_t k=0;k<33;k++) //teta
      for(Int_t i=0;i<15;i++) //phi
	for (Int_t j=0;j<59;j++) //momentum
	  {
	    if(phidig>90)
	      phidigg=180-phidig;
	    if(phidigg >= c->phiI[i] && phidigg < c->phiI[i+1] &&
	       precon >= c->precI[j] && precon < c->precI[j+1] && tetadig >= c->tetaI[k] && tetadig < c->tetaI[k+1])
	      {
		
		
		if(polarity==-1)
		  {
		    if(nchambers==4)
		      getcorrE(k,i,j,corr1,4);
		    else if (nchambers==3)
		      getcorrE(k,i,j,corr1,3);
		  }
		else if(polarity==1)
		  {
		    if(nchambers==4)
		      getcorrP(k,i,j,corr1,4);
		    else if(nchambers==3)
		      getcorrP(k,i,j,corr1,3);
		  }
		precon/=corr1;
		if(precon<0)precon*=-1.;
		return 1;   
	      }
	  }
  }
  return 1;
}
Double_t HMdcTrackGSpline::calcMomentum(HMdcSeg *seg[2],Bool_t condition,Double_t targ)
{
  HGeomVector segpoints[4];
  calcSegPoints(seg,segpoints);
  return calcMomentum(segpoints,condition,targ,4);
}



Double_t HMdcTrackGSpline::calcMomentum123(HMdcSeg *seg[2],Bool_t condition,Double_t targ)
{
  HGeomVector segpoints[4];
  calcSegPoints123(seg,segpoints);
  return calcMomentum(segpoints,condition,targ,3);
}

Double_t HMdcTrackGSpline::calcMomentum123P4(HMdcSeg *seg[2],Bool_t condition,Double_t targ)
{
   HGeomVector segpoints[4];
   calcSegPoints123P4(seg,segpoints);
   return calcMomentum(segpoints,condition,targ,3);
}

void HMdcTrackGSpline::calcSegPoints(HMdcSeg *SEG[2],HGeomVector *SEGPOINTS)
{
  Double_t tetaseg[2],phiseg[2],zseg[2],roseg[2];
  tetaseg[0]=SEG[0]->getTheta();
  phiseg[0]=SEG[0]->getPhi();
  zseg[0]=SEG[0]->getZ();
  roseg[0]=SEG[0]->getR();
  
  tetaseg[1]=SEG[1]->getTheta();
  phiseg[1]=SEG[1]->getPhi();
  zseg[1]=SEG[1]->getZ();
  zGlobal=zseg[0];
  roseg[1]=SEG[1]->getR();
  
  Double_t Xseg[4],Yseg[4],Zseg[4];
  
  Xseg[0]=roseg[0]*cos(phiseg[0]+pi/2);
  Yseg[0]=roseg[0]*sin(phiseg[0]+pi/2);
  Zseg[0]=zseg[0];
  Xseg[1]=Xseg[0]+cos(phiseg[0])*sin(tetaseg[0]);
  Yseg[1]=Yseg[0]+sin(phiseg[0])*sin(tetaseg[0]);
  Zseg[1]=Zseg[0]+cos(tetaseg[0]);
  
  Xseg[2]=roseg[1]*cos(phiseg[1]+pi/2);
  Yseg[2]=roseg[1]*sin(phiseg[1]+pi/2);
  Zseg[2]=zseg[1];
  Xseg[3]=Xseg[2]+cos(phiseg[1])*sin(tetaseg[1]);
  Yseg[3]=Yseg[2]+sin(phiseg[1])*sin(tetaseg[1]);
  Zseg[3]=Zseg[2]+cos(tetaseg[1]);
  
  SEGPOINTS[0].setXYZ(0.1*Xseg[0],0.1*Yseg[0],0.1*Zseg[0]);
  SEGPOINTS[1].setXYZ(0.1*Xseg[1],0.1*Yseg[1],0.1*Zseg[1]);
  SEGPOINTS[2].setXYZ(0.1*Xseg[2],0.1*Yseg[2],0.1*Zseg[2]);
  SEGPOINTS[3].setXYZ(0.1*Xseg[3],0.1*Yseg[3],0.1*Zseg[3]);   
}



void HMdcTrackGSpline::calcSegPoints(HGeomVector *SEGPOINTS,HMdcSeg *SEG)
{
  Double_t tetaseg,phiseg,zseg,roseg;
  tetaseg=SEG->getTheta();
  phiseg=SEG->getPhi();
  zseg=SEG->getZ();
  roseg=SEG->getR();
  zGlobal=zseg;
  
  Double_t Xseg[2],Yseg[2],Zseg[2];
   
  Xseg[0]=roseg*cos(phiseg+pi/2);
  Yseg[0]=roseg*sin(phiseg+pi/2);
  Zseg[0]=zseg;
  Xseg[1]=Xseg[0]+cos(phiseg)*sin(tetaseg);
  Yseg[1]=Yseg[0]+sin(phiseg)*sin(tetaseg);
  Zseg[1]=Zseg[0]+cos(tetaseg);
  
  SEGPOINTS[0].setXYZ(0.1*Xseg[0],0.1*Yseg[0],0.1*Zseg[0]);
  SEGPOINTS[1].setXYZ(0.1*Xseg[1],0.1*Yseg[1],0.1*Zseg[1]);
}



void HMdcTrackGSpline::calcErrors(Double_t *tr)
{
  Double_t dError;
  Double_t error;
  error=sqrt((cos(tr[0])*tr[6])*(cos(tr[0])*tr[6])+tr[2]*tr[2]*(sin(tr[0])*tr[4])*(sin(tr[0])*tr[4]));
  
  dError=sqrt((cos(tr[0])*sin(tr[1]))*(cos(tr[0])*sin(tr[1]))*tr[4]*tr[4]+
	      (sin(tr[0])*cos(tr[1]))*(sin(tr[0])*cos(tr[1]))*tr[5]*tr[5]);
  errorY=0.1*sqrt(error*error+dError*dError);
  
}



void HMdcTrackGSpline::calcSegPoints123(HMdcSeg *SEG[2],HGeomVector *SEGPOINTS)
{
  
  Int_t sectorG=SEG[0]->getSec();
  Int_t moduleG=2;
  Double_t tetaseg[2],phiseg[2],zseg[2],roseg[2];
  tetaseg[0]=SEG[0]->getTheta();
  phiseg[0]=SEG[0]->getPhi();
  zseg[0]=SEG[0]->getZ();
  roseg[0]=SEG[0]->getR();
  zGlobal=zseg[0];
  
  tetaseg[1]=SEG[1]->getTheta();
  phiseg[1]=SEG[1]->getPhi();
  zseg[1]=SEG[1]->getZ();
  roseg[1]=SEG[1]->getR();
  
  Double_t Xseg[4],Yseg[4],Zseg[4];
  
  Xseg[0]=roseg[0]*cos(phiseg[0]+pi/2);
  Yseg[0]=roseg[0]*sin(phiseg[0]+pi/2);
  Zseg[0]=zseg[0];
  Xseg[1]=Xseg[0]+cos(phiseg[0])*sin(tetaseg[0]);
  Yseg[1]=Yseg[0]+sin(phiseg[0])*sin(tetaseg[0]);
  Zseg[1]=Zseg[0]+cos(tetaseg[0]);
  Double_t dirX=Xseg[1]-Xseg[0];
  Double_t dirY=Yseg[1]-Yseg[0];
  Double_t dirZ=Zseg[1]-Zseg[0]; 
  //Intersection with kickplane
  HGeomVector point,dir,interkickpoint;
  point.setXYZ(Xseg[0],Yseg[0],Zseg[0]);
  dir.setXYZ(dirX,dirY,dirZ);
  kickplane->calcIntersection(point,dir,interkickpoint);
  Xseg[2]=roseg[1]*cos(phiseg[1]+pi/2);
  Yseg[2]=roseg[1]*sin(phiseg[1]+pi/2);
  Zseg[2]=zseg[1];
  Xseg[3]=Xseg[2]+cos(phiseg[1])*sin(tetaseg[1]);
  Yseg[3]=Yseg[2]+sin(phiseg[1])*sin(tetaseg[1]);
  Zseg[3]=Zseg[2]+cos(tetaseg[1]); 
  //Third point from KickPlane, 4-from the middle of 3 chamber
  //calculation of 4 point
  HGeomVector point3, point4,interpoint;//interpoint in sm
  point3.setXYZ(0.1*Xseg[2],0.1*Yseg[2],0.1*Zseg[2]);
  point4.setXYZ(0.1*Xseg[3],0.1*Yseg[3],0.1*Zseg[3]);
  calcInter(middleGA[sectorG][moduleG],middleGB[sectorG][moduleG],middleGD[sectorG][moduleG],point3,point4,interpoint);
  
   
  Xseg[2]=interkickpoint.getX();
  Yseg[2]=interkickpoint.getY();
  Zseg[2]=interkickpoint.getZ();
   
   Xseg[3]=interpoint.getX();
   Yseg[3]=interpoint.getY();
   Zseg[3]=interpoint.getZ();
   
   SEGPOINTS[0].setXYZ(0.1*Xseg[0],0.1*Yseg[0],0.1*Zseg[0]);
   SEGPOINTS[1].setXYZ(0.1*Xseg[1],0.1*Yseg[1],0.1*Zseg[1]);
   SEGPOINTS[2].setXYZ(0.1*Xseg[2],0.1*Yseg[2],0.1*Zseg[2]);
   SEGPOINTS[3].setXYZ(Xseg[3],Yseg[3],Zseg[3]);   
}


void HMdcTrackGSpline::calcSegPoints123P4(HMdcSeg *SEG[2],HGeomVector *SEGPOINTS)
{
  Int_t sectorG=SEG[0]->getSec();
  Int_t moduleG=3;

  Double_t tetaseg[2],phiseg[2],zseg[2],roseg[2];
  tetaseg[0]=SEG[0]->getTheta();
  phiseg[0]=SEG[0]->getPhi();
  zseg[0]=SEG[0]->getZ();
  roseg[0]=SEG[0]->getR();
  zGlobal=zseg[0];
  
  tetaseg[1]=SEG[1]->getTheta();
  phiseg[1]=SEG[1]->getPhi();
  zseg[1]=SEG[1]->getZ();
  roseg[1]=SEG[1]->getR();
  
  Double_t Xseg[4],Yseg[4],Zseg[4];
  
  Xseg[0]=roseg[0]*cos(phiseg[0]+pi/2);
  Yseg[0]=roseg[0]*sin(phiseg[0]+pi/2);
  Zseg[0]=zseg[0];
  Xseg[1]=Xseg[0]+cos(phiseg[0])*sin(tetaseg[0]);
  Yseg[1]=Yseg[0]+sin(phiseg[0])*sin(tetaseg[0]);
  Zseg[1]=Zseg[0]+cos(tetaseg[0]);
  Double_t dirX=Xseg[1]-Xseg[0];
  Double_t dirY=Yseg[1]-Yseg[0];
  Double_t dirZ=Zseg[1]-Zseg[0]; 
  //Intersection with kickplane
  HGeomVector point,dir,interkickpoint;
  point.setXYZ(Xseg[0],Yseg[0],Zseg[0]);
  dir.setXYZ(dirX,dirY,dirZ);
  kickplane->calcIntersection(point,dir,interkickpoint);
  Xseg[2]=roseg[1]*cos(phiseg[1]+pi/2);
  Yseg[2]=roseg[1]*sin(phiseg[1]+pi/2);
  Zseg[2]=zseg[1];
  Xseg[3]=Xseg[2]+cos(phiseg[1])*sin(tetaseg[1]);
  Yseg[3]=Yseg[2]+sin(phiseg[1])*sin(tetaseg[1]);
  Zseg[3]=Zseg[2]+cos(tetaseg[1]); 
  //Third point from KickPlane, 4-from the middle of 3 chamber
  //calculation of 4 point
  HGeomVector point3, point4,interpoint;//interpoint in sm
  point3.setXYZ(0.1*Xseg[2],0.1*Yseg[2],0.1*Zseg[2]);
  point4.setXYZ(0.1*Xseg[3],0.1*Yseg[3],0.1*Zseg[3]);
  calcInter(middleGA[sectorG][moduleG],middleGB[sectorG][moduleG],middleGD[sectorG][moduleG],point3,point4,interpoint);
  
  Xseg[2]=interkickpoint.getX();
  Yseg[2]=interkickpoint.getY();
  Zseg[2]=interkickpoint.getZ();
   
   Xseg[3]=interpoint.getX();
   Yseg[3]=interpoint.getY();
   Zseg[3]=interpoint.getZ();
   
   SEGPOINTS[0].setXYZ(0.1*Xseg[0],0.1*Yseg[0],0.1*Zseg[0]);
   SEGPOINTS[1].setXYZ(0.1*Xseg[1],0.1*Yseg[1],0.1*Zseg[1]);
   SEGPOINTS[2].setXYZ(0.1*Xseg[2],0.1*Yseg[2],0.1*Zseg[2]);
   SEGPOINTS[3].setXYZ(Xseg[3],Yseg[3],Zseg[3]);   
}


void HMdcTrackGSpline::getDistance(Double_t *distance)
{
   for(Int_t i=0; i<4; i++)
      distance[i]=10*dist[i];
}

Double_t HMdcTrackGSpline::calcMomentum(HGeomVector  *pp,Bool_t cond,Double_t targ,Int_t nchambers)
{
   target=targ*0.1; 
   HGeomVector ppp[4];
   
   //   Double_t   A1=-0.00432978, B1=  0.976708,   D1=  75.573;
   //   Double_t   A2=-0.00350257, B2=  1.373,      D2=  124.44;
   //   Double_t   A3=0.00610111,  B3=  1.17128,    D3=  209.477;
   //   Double_t   A4=0.0220935,   B4=  1.18706,    D4=  260.799;
   //Double_t   A=  0.00610111B=  1.17128D=  2125.5;
   
   calcInter(A1,B1,D1,pp[0],pp[1],ppp[0]);
   calcInter(A2,B2,D2,pp[0],pp[1],ppp[1]);
   calcInter(A3,B3,D3,pp[2],pp[3],ppp[2]);
   calcInter(A4,B4,D4,pp[2],pp[3],ppp[3]);
   
   Double_t xVector[3],fieldVector[3];
   
   x[0]=ppp[0].getX();
   x[1]=ppp[0].getY();
   x[2]=ppp[0].getZ();
   x[3]=ppp[1].getX();
   x[4]=ppp[1].getY();
   x[5]=ppp[1].getZ();
   x[6]=ppp[2].getX();
   x[7]=ppp[2].getY();
   x[8]=ppp[2].getZ();
   x[9]=ppp[3].getX();
   x[10]=ppp[3].getY();
   x[11]=ppp[3].getZ();
   getPoint();
   spline(point,YZ,YZP,XZ,XZP,4);
   getpoints();
  // transFieldpoints();
   
  for(Int_t i=0;i<N2;i++)
      {
//	 xVector[0]=Tfieldpoints[i].getX();
//	 xVector[1]=Tfieldpoints[i].getY();
//	 xVector[2]=Tfieldpoints[i].getZ();
	 	 
	 
	 xVector[0]=fieldpoints[i].getX();
	 xVector[1]=fieldpoints[i].getY();
	 xVector[2]=fieldpoints[i].getZ();
	 
	 
	 
	 b->calcField(xVector,fieldVector,0.7215);
	 Bx[i]=fieldVector[0];
	 By[i]=fieldVector[1];
	 Bz[i]=fieldVector[2];
	 BB[i].setXYZ(Bx[i],By[i],Bz[i]);
      }
  // init1();
   fieldequation();
   solveMomentum();
   getMomentum(cond,nchambers);
   return precon;
} 
void HMdcTrackGSpline::getcorrE(Int_t k,Int_t i, Int_t j, Double_t & corr,Int_t nchambers)
{

   HMdcTrackGCorrections *cc=scanCorrections();
   
  // cc=c;
  
  if(nchambers==4)
    {
      corr=cc->corrE[k][i][j]+
	(cc->corrE[k][i][j+1]-cc->corrE[k][i][j])*(precon-cc->precI[j])/
	(cc->precI[j+1]-cc->precI[j])+(cc->corrE[k][i+1][j]-cc->corrE[k][i][j])*(phidigg-cc->phiI[i])/
	(cc->phiI[i+1]-cc->phiI[i])+(cc->corrE[k+1][i][j]-cc->corrE[k][i][j])*(tetadig-cc->tetaI[k])/
	(cc->tetaI[k+1]-cc->tetaI[k]);
    }
  else if(nchambers==3)
    {
      corr=cc->corrE1[k][i][j]+
	(cc->corrE1[k][i][j+1]-cc->corrE1[k][i][j])*(precon-cc->precI[j])/
	(cc->precI[j+1]-cc->precI[j])+(cc->corrE1[k][i+1][j]-cc->corrE1[k][i][j])*(phidigg-cc->phiI[i])/
	(cc->phiI[i+1]-cc->phiI[i])+(cc->corrE1[k+1][i][j]-cc->corrE1[k][i][j])*(tetadig-cc->tetaI[k])/
	(cc->tetaI[k+1]-cc->tetaI[k]);
    }
}
void HMdcTrackGSpline::getcorrP(Int_t k,Int_t i, Int_t j, Double_t & corr,Int_t nchambers)
{  

HMdcTrackGCorrections *cc=scanCorrections();
//cc=c;
  if(nchambers==4)
    {
      corr=cc->corrP[k][i][j]+
	(cc->corrP[k][i][j+1]-cc->corrP[k][i][j])*(precon-cc->precI[j])/
	(cc->precI[j+1]-cc->precI[j])+(cc->corrP[k][i+1][j]-cc->corrP[k][i][j])*(phidigg-cc->phiI[i])/
	(cc->phiI[i+1]-cc->phiI[i])+(cc->corrP[k+1][i][j]-cc->corrP[k][i][j])*(tetadig-cc->tetaI[k])/
	(cc->tetaI[k+1]-cc->tetaI[k]);
    }
  else if (nchambers==3)
    {
      corr=cc->corrP1[k][i][j]+
	(cc->corrP1[k][i][j+1]-cc->corrP1[k][i][j])*(precon-cc->precI[j])/
	(cc->precI[j+1]-cc->precI[j])+(cc->corrP1[k][i+1][j]-cc->corrP1[k][i][j])*(phidigg-cc->phiI[i])/
	(cc->phiI[i+1]-cc->phiI[i])+(cc->corrP1[k+1][i][j]-cc->corrP1[k][i][j])*(tetadig-cc->tetaI[k])/
	(cc->tetaI[k+1]-cc->tetaI[k]);
    }
}

void HMdcTrackGSpline::setDataPointer(HMdcTrackGField* field,HMdcTrackGCorrections* corr)
{
  b=field;
  c=corr;
}

void HMdcTrackGSpline::setCorrScan(HMdcTrackGCorrections* corr[])
{
   for(Int_t i=0; i<3; i++)
      {
         corrScan[i]=corr[i];
      }
}


void HMdcTrackGSpline::setCorrPointer(HMdcTrackGCorrections* corr)
{
  c=corr;
}

void HMdcTrackGSpline::setKickPointer(HMdcKickPlane *kickpointer)
{
  kickplane=kickpointer;
  isKickIsInitialized=kTRUE;
}
void HMdcTrackGSpline::calcInter(Double_t A,Double_t B,Double_t D,HGeomVector in1,HGeomVector in2,HGeomVector &out)
{
  Double_t x1,y1,z1,x2,y2,z2,x,y,z;
  x1=in1.getX();
  y1=in1.getY();
  z1=in1.getZ();
  
  x2=in2.getX();
  y2=in2.getY();
  z2=in2.getZ();
  
  Double_t dX=x2-x1;
  Double_t dY=y2-y1;
  Double_t dZ=z2-z1;
  Double_t del=1/(A*dX+B*dY+dZ);
  
  x=(dX*(D-z1-B*y1)+x1*(B*dY+dZ))*del;
  y=(dY*(D-z1-A*x1)+y1*(A*dX+dZ))*del;
  z=D-A*x-B*y;
  out.setXYZ(x,y,z);
}
void HMdcTrackGSpline::equationofLine(Double_t* xz1,Double_t *xz2,Double_t Z,Double_t &X)
{
  Double_t A,B;
  Double_t delta,deltaA,deltaB;
  delta=xz1[1]-xz2[1];
  deltaA=xz1[0]-xz2[0];
  deltaB=xz1[1]*xz2[0]-xz1[0]*xz2[1];
  A=deltaA/delta;
  B=deltaB/delta;
  X=A*Z+B;
}

void HMdcTrackGSpline::equationofLine3D(HGeomVector point1,HGeomVector point2,Double_t Z,Double_t &X,Double_t &Y)
{
  Double_t t;
  t=(Z-point1.getZ())/(point2.getZ()-point1.getZ());
  X=point1.getX()+t*(point2.getX()-point1.getX());
  Y=point1.getY()+t*(point2.getY()-point1.getY());
}
HGeomVector HMdcTrackGSpline::calcMetaDir(HMdcSeg *segment, HGeomVector fTof)
{
  HGeomVector directionToMeta;
  Double_t distanceMeta;
  HGeomVector   kickIntersection;
  kickIntersection=calcKickIntersection(segment);  
  directionToMeta=fTof-kickIntersection;
  distanceMeta=directionToMeta.length();
  directionToMeta/=distanceMeta;
  return directionToMeta;
}
HGeomVector HMdcTrackGSpline::calcKickIntersection(HMdcSeg *segment)
{
  HGeomVector XXpoint;
  HGeomVector XXdirection;
  HGeomVector kickIntersection;
  XX=(segment->getR())*cos(segment->getPhi()+pi/2);
  YY=(segment->getR())*sin(segment->getPhi()+pi/2);
  ZZ=segment->getZ();
  XXdir=cos(segment->getPhi())*sin(segment->getTheta());
  YYdir=sin(segment->getPhi())*sin(segment->getTheta());
  ZZdir=cos(segment->getTheta());
  XXpoint.setXYZ(XX,YY,ZZ);
  XXdirection.setXYZ(XXdir,YYdir,ZZdir);
  kickplane->calcIntersection(XXpoint,XXdirection,kickIntersection);
  return kickIntersection;
} 

void HMdcTrackGSpline::calcKickIntersectionErr(HMdcSeg *segment,HGeomVector &kickIntersection,HGeomVector &kickErr)
{
  HGeomVector XXpoint;
  HGeomVector XXdirection;
  HGeomVector intError;
  HGeomVector kickIntersectionDev[6];
  HGeomVector XXpointDev[3];
  HGeomVector XXdirectionDev[3]; 
  
  Float_t cosT=cos(segment->getTheta());
  Float_t sinT=sin(segment->getTheta());
  Float_t cosPhi=cos(segment->getPhi());
  Float_t sinPhi=sin(segment->getPhi());
  Float_t zz=segment->getZ();
  Float_t errRho=segment->getErrR();
  Float_t errPhi=segment->getErrPhi();
  Float_t errTheta=segment->getErrTheta();
  
  XX=(segment->getR())*cos(segment->getPhi()+pi/2);
  YY=(segment->getR())*sin(segment->getPhi()+pi/2);
 
  ZZ=zz;
  XXdir=sinT*cosPhi;
  YYdir=sinT*sinPhi;
  ZZdir=cosT;

  XXpoint.setXYZ(XX,YY,ZZ);
  XXdirection.setXYZ(XXdir,YYdir,ZZdir);

  Float_t devXX=sqrt(TMath::Power(cos(segment->getPhi()+pi/2)*errRho,2)+TMath::Power(YY*errPhi,2));
  Float_t devYY=sqrt(TMath::Power(sin(segment->getPhi()+pi/2)*errRho,2)+TMath::Power(XX*errPhi,2));
  Float_t devZZ=segment->getErrZ();
  Float_t devXXdir=sqrt(TMath::Power(cosT*cosPhi*errTheta,2)+TMath::Power(sinT*sinPhi*errPhi,2));
  Float_t devYYdir=sqrt(TMath::Power(cosT*sinPhi*errTheta,2)+TMath::Power(sinT*cosPhi*errPhi,2));
  Float_t devZZdir=sqrt(TMath::Power(sinT*errTheta,2));
  

  XXpointDev[0].setXYZ(XX+devXX,YY,ZZ);
  XXpointDev[1].setXYZ(XX,YY+devYY,ZZ);
  XXpointDev[2].setXYZ(XX,YY,ZZ+devZZ);
  XXdirectionDev[0].setXYZ(XXdir+devXXdir,YYdir,ZZdir);
  XXdirectionDev[1].setXYZ(XXdir,YYdir+devYYdir,ZZdir);
  XXdirectionDev[2].setXYZ(XXdir,YYdir,ZZdir+devZZdir);

  kickplane->calcIntersection(XXpoint,XXdirection,kickIntersection);

  kickplane->calcIntersection(XXpointDev[0],XXdirection,kickIntersectionDev[0]); //0

  kickplane->calcIntersection(XXpoint,XXdirectionDev[0],kickIntersectionDev[1]); //1

  kickplane->calcIntersection(XXpointDev[1],XXdirection,kickIntersectionDev[2]); //2

  kickplane->calcIntersection(XXpoint,XXdirectionDev[1],kickIntersectionDev[3]); //3

  kickplane->calcIntersection(XXpointDev[2],XXdirection,kickIntersectionDev[4]); //4

  kickplane->calcIntersection(XXpoint,XXdirectionDev[2],kickIntersectionDev[5]); //5

  Float_t sigmaX=0; 
  Float_t sigmaY=0;   
  Float_t sigmaZ=0;
  for(Int_t i=0; i<6; i++)
    {
      sigmaX+=TMath::Power(kickIntersection.getX()-kickIntersectionDev[i].getX(),2);
      sigmaY+=TMath::Power(kickIntersection.getY()-kickIntersectionDev[i].getY(),2);
      sigmaZ+=TMath::Power(kickIntersection.getZ()-kickIntersectionDev[i].getZ(),2);
    }

  kickErr.setXYZ(sqrt(sigmaX),sqrt(sigmaY),sqrt(sigmaZ));
} 





void  HMdcTrackGSpline::mixPoints(HGeomVector &in,HGeomVector &out)
{
  Double_t inXtemp=in.getX();
  Double_t inYtemp=in.getY();
  Double_t inZtemp=in.getZ();
  out.setXYZ(inYtemp,-1*inXtemp,inZtemp);
}


void  HMdcTrackGSpline::transSpline(Double_t phi,Double_t teta, HGeomVector &in,HGeomVector & out)
{
  
  if(teta==0.)
    {
      phi*=acos(-1.)/180;
      
      Double_t inXtemp;
      Double_t inYtemp;
      Double_t inZtemp;
      
      
      inXtemp=in.getX()*cos(phi)+in.getY()*sin(phi);
      inYtemp=-in.getX()*sin(phi)+in.getY()*cos(phi);
      inZtemp=in.getZ();
      
      out.setXYZ(inXtemp,inYtemp,inZtemp);
      
      
    }
  else if(phi==0.)
    {
      teta*=acos(-1.)/180;
      
      Double_t inXtemp;
      Double_t inYtemp;
      Double_t inZtemp;
      inXtemp=in.getX();
      inYtemp=in.getY()*cos(teta)+in.getZ()*sin(teta);
      inZtemp=-in.getY()*sin(teta)+in.getZ()*cos(teta);
      out.setXYZ(inXtemp,inYtemp,inZtemp);
    }
}

void  HMdcTrackGSpline::transSplineB(Double_t phi,Double_t teta, HGeomVector &in,HGeomVector & out)
{
  
  if(teta==0.)
    {
      phi*=acos(-1.)/180;
      
      Double_t inXtemp;
      Double_t inYtemp;
      Double_t inZtemp;
      
      
      inXtemp=in.getX()*cos(phi)-in.getY()*sin(phi);
      inYtemp=in.getX()*sin(phi)+in.getY()*cos(phi);
      inZtemp=in.getZ();
      
      out.setXYZ(inXtemp,inYtemp,inZtemp);
      
      
    }
  else if(phi==0.)
    {
      teta*=acos(-1.)/180;
      
      Double_t inXtemp;
      Double_t inYtemp;
      Double_t inZtemp;
      inXtemp=in.getX();
      inYtemp=in.getY()*cos(teta)+in.getZ()*sin(teta);
      inZtemp=-in.getY()*sin(teta)+in.getZ()*cos(teta);
      out.setXYZ(inXtemp,inYtemp,inZtemp);
    }
}


Double_t  HMdcTrackGSpline::SplineMinimize(HGeomVector *eq,HGeomVector *fp,Int_t size)
{
  Double_t sumz=0.,sumz2=0.;
  Double_t sumY=0.,sumy=0.,sumYy=0.,sumyz=0.,sumYz=0.,sumY2=0.,sumy2=0.;
  Double_t sumX=0.,sumx=0.,sumXx=0.,sumxz=0.,sumXz=0.,sumX2=0.,sumx2=0.;
  for (Int_t i=1;i<size;i++)
    {
      sumz+=eq[i].getZ()-eq[0].getZ();
      sumY+=eq[i].getY();
      sumX+=eq[i].getX(); 
      
      sumYz+=eq[i].getY()*(eq[i].getZ()-eq[0].getZ());
      sumXz+=eq[i].getX()*(eq[i].getZ()-eq[0].getZ());
      
      sumyz+=fp[i].getY()*(eq[i].getZ()-eq[0].getZ());
      sumxz+=fp[i].getX()*(eq[i].getZ()-eq[0].getZ());
      
      sumy+=fp[i].getY();
      sumx+=fp[i].getX();
      
      sumYy+=eq[i].getY()*fp[i].getY();
      sumXx+=eq[i].getX()*fp[i].getX();
      
      sumz2+=(eq[i].getZ()-eq[0].getZ())*(eq[i].getZ()-eq[0].getZ());
      
      sumY2+=eq[i].getY()*eq[i].getY();
      sumX2+=eq[i].getX()*eq[i].getX();
      
      sumy2+=fp[i].getY()*fp[i].getY();
      sumx2+=fp[i].getX()*fp[i].getX();
    }
 
  Double_t delta[3][3]={{(Double_t)(N2-1),sumz,sumY},
			{sumz,sumz2,sumYz},
			{sumY,sumYz,sumY2}};
  
  Double_t delta1[3][3]={{(Double_t)(N2-1),sumz,sumy},
			 {sumz,sumz2,sumyz},
			 {sumY,sumYz,sumYy}};
  
  Double_t deltaConst1[3][3]={{sumy,sumz,sumY},
			      {sumyz,sumz2,sumYz},
			      {sumYy,sumYz,sumY2}};

  Double_t deltaConst2[3][3]={{(Double_t)(N2-1),sumy,sumY},
			      {sumz,sumyz,sumYz},
			      {sumY,sumYy,sumY2}};
  
  Double_t det3Delta=det3(delta);
  Double_t det3Delta1=det3(delta1);
  Double_t det3DeltaConst1=det3(deltaConst1);
  Double_t det3DeltaConst2=det3(deltaConst2);
  
  precon=det3Delta/det3Delta1;
  qSpline=0.;
  for(Int_t i=1; i<N2; i++)
    {
      qSpline+=(det3DeltaConst1/det3Delta+det3DeltaConst2/det3Delta*(eq[i].getZ()-eq[0].getZ())+1/precon*eq[i].getY()-fp[i].getY())*
	       (det3DeltaConst1/det3Delta+det3DeltaConst2/det3Delta*(eq[i].getZ()-eq[0].getZ())+1/precon*eq[i].getY()-fp[i].getY());
    }
  qSpline/=45.;
  qSpline*=10000.;
  return precon;
}

HGeomVector HMdcTrackGSpline::takeMiddleParams(HMdcGetContainers *fGetCont,Int_t s,Int_t m)
{
  //Takes the parameters of middle plane
  HGeomTransform labTrMod;
  HGeomVector params;
  if(!(fGetCont->getLabTransMod(labTrMod,s,m)))
     {
	params.setXYZ(0.,0.,0);
	return params;
     }
  const HGeomVector& vc=labTrMod.getTransVector();
  const HGeomRotation& rot=labTrMod.getRotMatrix();
  Double_t parC=rot(0)*rot(4)-rot(3)*rot(1);
  Double_t parA=(rot(3)*rot(7)-rot(6)*rot(4))/parC;
  Double_t parB=(rot(6)*rot(1)-rot(0)*rot(7))/parC;
  Double_t parD=parA*vc(0)+parB*vc(1)+vc(2);
  params.setXYZ(parA,parB,parD*0.1);
  return params;
}


Int_t HMdcTrackGSpline::takeMiddleParams(const HGeomTransform* labTrMod, Int_t s,Int_t m)
{
  //Takes the parameters of middle plane
  if(labTrMod == NULL){
      geomParams[s][m].setXYZ(0.,0.,0.);
      return 0;
  }

  const HGeomVector& vc=labTrMod->getTransVector();
  const HGeomRotation& rot=labTrMod->getRotMatrix();
  Double_t parC=rot(0)*rot(4)-rot(3)*rot(1);
  Double_t parA=(rot(3)*rot(7)-rot(6)*rot(4))/parC;
  Double_t parB=(rot(6)*rot(1)-rot(0)*rot(7))/parC;
  Double_t parD=parA*vc(0)+parB*vc(1)+vc(2);
  geomParams[s][m].setXYZ(parA,parB,parD*0.1);
  return 1;
}







Float_t HMdcTrackGSpline::calcTarDist(HGeomVector &p1,HGeomVector &p2,HGeomVector &p3)
{
   Float_t dirX21=p2.getX()-p1.getX();
   Float_t dirY21=p2.getY()-p1.getY();
   Float_t dirZ21=p2.getZ()-p1.getZ();
   Float_t dirX31=p3.getX()-p1.getX();
   Float_t dirY31=p3.getY()-p1.getY();
   Float_t dirZ31=p3.getZ()-p1.getZ();
   
   Float_t delta=dirX21*dirX21+dirY21*dirY21+dirZ21*dirZ21;
   
   Float_t t=(dirX21*dirX31+dirY21*dirY31+dirZ21*dirZ31)/delta;

   Float_t xx=dirX21*t+p1.getX();
   Float_t yy=dirY21*t+p1.getY();
   Float_t zz=dirZ21*t+p1.getZ();

   Float_t dist=(p3.getX()-xx)*(p3.getX()-xx)+(p3.getY()-yy)*(p3.getY()-yy)+(p3.getZ()-zz)*(p3.getZ()-zz);

   return sqrt(dist);
}

Float_t HMdcTrackGSpline::calcTarDist(HVertex &vertex,HMdcSeg *SEG,HGeomTransform *secLabTrans)
{
   HGeomVector segpoints[2];
   HGeomVector vertPoint;
   if(vertex.getZ()==-1000) return -1000.;
   vertPoint.setXYZ(vertex.getX(),vertex.getY(),vertex.getZ());
   vertPoint=secLabTrans->transTo(vertPoint); //in sector;
   calcSegPoints(segpoints,SEG);
 
   segpoints[0]*=10.;
   segpoints[1]*=10.;
   
   return (calcTarDist(segpoints[0],segpoints[1],vertPoint));
}

void HMdcTrackGSpline::SolveDiffEquation(HGeomVector *in,HGeomVector *out,Int_t size,Float_t *inXval,Float_t *inYval)
{
  Double_t xDir[size],yDir[size];
  Double_t xDirP[size-1],yDirP[size-1];
  Float_t Yequation[size],Xequation[size];
  Float_t ypr[size]; 
  Float_t xpr[size];
  Float_t h[size];
  
  ypr[0]=inYval[0];
  xpr[0]=inXval[0];
  Yequation[0]=inYval[1];
  Xequation[0]=inXval[1];
  
  //for(Int_t i=0; i<size; i++)
  //{
  //  out[i].setZ(in[i].getZ());
  //}
  spline(in,yDir,yDirP,xDir,xDirP,size);
  
  for (Int_t i = 1; i<N2-1; i++)
      h[i] = in[i+1].getZ() - in[i].getZ();
      h[0]=0;  
  for(Int_t i = 0; i<size-1; i++)
    {
//      h[i] = in[i+1].getZ() - in[i].getZ();
      
      xpr[i+1]=xpr[i]+h[i]*(in[i+1].getX()+in[i].getX())/(2)-
	h[i]*h[i]*h[i]*(xDir[i]+xDir[i+1])/24;
      
      ypr[i+1]=ypr[i]+h[i]*(in[i+1].getY()+in[i].getY())/(2)-
	h[i]*h[i]*h[i]*(yDir[i]+yDir[i+1])/24;
      
    }
  
  
  for(Int_t i=0;i<size-1;i++)
    {
      Xequation[i+1]=Xequation[i]+
	xpr[i]*h[i]+h[i]*h[i]*(2*in[i].getX()+in[i+1].getX())/(6)-
	h[i]*h[i]*h[i]*h[i]*(0.8*xDir[i]+0.7*xDir[i+1])/(36);
      
      Yequation[i+1]=Yequation[i]+
	ypr[i]*h[i]+h[i]*h[i]*(2*in[i].getY()+in[i+1].getY())/(6)-
	h[i]*h[i]*h[i]*h[i]*(0.8*yDir[i]+0.7*yDir[i+1])/(36);
      
    }
  for(Int_t i=0; i<size;i++)
    {
      out[i].setXYZ(Xequation[i],Yequation[i],in[i].getZ());
      //out[i].setY(Yequation[i]);
    }
  
}

  void HMdcTrackGSpline::getXYpoint(Float_t *x,Float_t *y,Float_t *z)
  {
 
  x[0]=point[0].getX();
  y[0]=point[0].getY();
  z[0]=point[0].getZ();
  x[1]=point[1].getX();
  y[1]=point[1].getY();
  z[1]=point[1].getZ();
  for(Int_t i=2; i<N2+2; i++)
  {
  x[i]=fieldpoints[i-2].getX();
  y[i]=fieldpoints[i-2].getY();
  z[i]=fieldpoints[i-2].getZ();
  }
  x[N2+2]=point[2].getX();
  y[N2+2]=point[2].getY();
  z[N2+2]=point[2].getZ();
  x[N2+3]=point[3].getX();
  y[N2+3]=point[3].getY();
  z[N2+3]=point[3].getZ();
    }
    
void HMdcTrackGSpline::getField(Float_t *x,Float_t *y,Float_t *z)
{
for(Int_t i=0; i<N2; i++)
  {
  x[i]=BB[i].getX();
  y[i]=BB[i].getY();
  z[i]=BB[i].getZ();
  }
}

void  HMdcTrackGSpline::transSplineLocal(Double_t phi,Double_t teta, HGeomVector &in,HGeomVector & out)
{
  Double_t inXtemp;
  Double_t inYtemp;
  Double_t inZtemp;
  inXtemp=in.getX()*cos(phi)*cos(teta)+in.getY()*sin(phi)*cos(teta)-in.getZ()*sin(teta);
  inYtemp=-in.getX()*sin(phi)+in.getY()*cos(phi);
  inZtemp=in.getX()*cos(phi)*sin(teta)+in.getY()*sin(phi)*sin(teta)+in.getZ();
  out.setXYZ(inXtemp,inYtemp,inZtemp);
}

HMdcTrackGCorrections *HMdcTrackGSpline::scanCorrections()

{
   
//   zGlobal=0.;

   if(zGlobal>(-15))
     {
         return corrScan[0];
     }
   else
      if(zGlobal>(-35))
    {
            return corrScan[1];
    }
      else
    {
            return corrScan[2];
    }
   
}


void HMdcTrackGSpline::checkSecDer(Double_t *der2, Double_t *der1)
{
   isSecDerY=kFALSE;
   
   for(Int_t i=1; i<N2; i++)
      {
	 
	 curv[i]=fabs(der2[i])/(TMath::Power((1+der1[i]*der1[i]),3/2));
	 if(curv[i]>.5)
	    {
	       isSecDerY=kTRUE;
	       break;
	    }
	 
      }
   
   
}

Float_t HMdcTrackGSpline::calcIOMatching(HMdcSeg *segments[2])
{
  HGeomVector innerInt;
  HGeomVector innerErr;
  HGeomVector outerInt;
  HGeomVector outerErr;
  
  calcKickIntersectionErr(segments[0],innerInt,innerErr);
  calcKickIntersectionErr(segments[1],outerInt,outerErr);
  
  Float_t devvX=sqrt(TMath::Power(innerErr.getX(),2)+TMath::Power(outerErr.getX(),2));
  Float_t devvY=sqrt(TMath::Power(innerErr.getY(),2)+TMath::Power(outerErr.getY(),2));
  
  
  Float_t qIOMatching=TMath::Power((innerInt.getX()-outerInt.getX())/devvX,2)+
    TMath::Power((innerInt.getY()-outerInt.getY())/devvY,2); 
  
  return sqrt(qIOMatching);
}
 hmdctrackgspline.cc:1
 hmdctrackgspline.cc:2
 hmdctrackgspline.cc:3
 hmdctrackgspline.cc:4
 hmdctrackgspline.cc:5
 hmdctrackgspline.cc:6
 hmdctrackgspline.cc:7
 hmdctrackgspline.cc:8
 hmdctrackgspline.cc:9
 hmdctrackgspline.cc:10
 hmdctrackgspline.cc:11
 hmdctrackgspline.cc:12
 hmdctrackgspline.cc:13
 hmdctrackgspline.cc:14
 hmdctrackgspline.cc:15
 hmdctrackgspline.cc:16
 hmdctrackgspline.cc:17
 hmdctrackgspline.cc:18
 hmdctrackgspline.cc:19
 hmdctrackgspline.cc:20
 hmdctrackgspline.cc:21
 hmdctrackgspline.cc:22
 hmdctrackgspline.cc:23
 hmdctrackgspline.cc:24
 hmdctrackgspline.cc:25
 hmdctrackgspline.cc:26
 hmdctrackgspline.cc:27
 hmdctrackgspline.cc:28
 hmdctrackgspline.cc:29
 hmdctrackgspline.cc:30
 hmdctrackgspline.cc:31
 hmdctrackgspline.cc:32
 hmdctrackgspline.cc:33
 hmdctrackgspline.cc:34
 hmdctrackgspline.cc:35
 hmdctrackgspline.cc:36
 hmdctrackgspline.cc:37
 hmdctrackgspline.cc:38
 hmdctrackgspline.cc:39
 hmdctrackgspline.cc:40
 hmdctrackgspline.cc:41
 hmdctrackgspline.cc:42
 hmdctrackgspline.cc:43
 hmdctrackgspline.cc:44
 hmdctrackgspline.cc:45
 hmdctrackgspline.cc:46
 hmdctrackgspline.cc:47
 hmdctrackgspline.cc:48
 hmdctrackgspline.cc:49
 hmdctrackgspline.cc:50
 hmdctrackgspline.cc:51
 hmdctrackgspline.cc:52
 hmdctrackgspline.cc:53
 hmdctrackgspline.cc:54
 hmdctrackgspline.cc:55
 hmdctrackgspline.cc:56
 hmdctrackgspline.cc:57
 hmdctrackgspline.cc:58
 hmdctrackgspline.cc:59
 hmdctrackgspline.cc:60
 hmdctrackgspline.cc:61
 hmdctrackgspline.cc:62
 hmdctrackgspline.cc:63
 hmdctrackgspline.cc:64
 hmdctrackgspline.cc:65
 hmdctrackgspline.cc:66
 hmdctrackgspline.cc:67
 hmdctrackgspline.cc:68
 hmdctrackgspline.cc:69
 hmdctrackgspline.cc:70
 hmdctrackgspline.cc:71
 hmdctrackgspline.cc:72
 hmdctrackgspline.cc:73
 hmdctrackgspline.cc:74
 hmdctrackgspline.cc:75
 hmdctrackgspline.cc:76
 hmdctrackgspline.cc:77
 hmdctrackgspline.cc:78
 hmdctrackgspline.cc:79
 hmdctrackgspline.cc:80
 hmdctrackgspline.cc:81
 hmdctrackgspline.cc:82
 hmdctrackgspline.cc:83
 hmdctrackgspline.cc:84
 hmdctrackgspline.cc:85
 hmdctrackgspline.cc:86
 hmdctrackgspline.cc:87
 hmdctrackgspline.cc:88
 hmdctrackgspline.cc:89
 hmdctrackgspline.cc:90
 hmdctrackgspline.cc:91
 hmdctrackgspline.cc:92
 hmdctrackgspline.cc:93
 hmdctrackgspline.cc:94
 hmdctrackgspline.cc:95
 hmdctrackgspline.cc:96
 hmdctrackgspline.cc:97
 hmdctrackgspline.cc:98
 hmdctrackgspline.cc:99
 hmdctrackgspline.cc:100
 hmdctrackgspline.cc:101
 hmdctrackgspline.cc:102
 hmdctrackgspline.cc:103
 hmdctrackgspline.cc:104
 hmdctrackgspline.cc:105
 hmdctrackgspline.cc:106
 hmdctrackgspline.cc:107
 hmdctrackgspline.cc:108
 hmdctrackgspline.cc:109
 hmdctrackgspline.cc:110
 hmdctrackgspline.cc:111
 hmdctrackgspline.cc:112
 hmdctrackgspline.cc:113
 hmdctrackgspline.cc:114
 hmdctrackgspline.cc:115
 hmdctrackgspline.cc:116
 hmdctrackgspline.cc:117
 hmdctrackgspline.cc:118
 hmdctrackgspline.cc:119
 hmdctrackgspline.cc:120
 hmdctrackgspline.cc:121
 hmdctrackgspline.cc:122
 hmdctrackgspline.cc:123
 hmdctrackgspline.cc:124
 hmdctrackgspline.cc:125
 hmdctrackgspline.cc:126
 hmdctrackgspline.cc:127
 hmdctrackgspline.cc:128
 hmdctrackgspline.cc:129
 hmdctrackgspline.cc:130
 hmdctrackgspline.cc:131
 hmdctrackgspline.cc:132
 hmdctrackgspline.cc:133
 hmdctrackgspline.cc:134
 hmdctrackgspline.cc:135
 hmdctrackgspline.cc:136
 hmdctrackgspline.cc:137
 hmdctrackgspline.cc:138
 hmdctrackgspline.cc:139
 hmdctrackgspline.cc:140
 hmdctrackgspline.cc:141
 hmdctrackgspline.cc:142
 hmdctrackgspline.cc:143
 hmdctrackgspline.cc:144
 hmdctrackgspline.cc:145
 hmdctrackgspline.cc:146
 hmdctrackgspline.cc:147
 hmdctrackgspline.cc:148
 hmdctrackgspline.cc:149
 hmdctrackgspline.cc:150
 hmdctrackgspline.cc:151
 hmdctrackgspline.cc:152
 hmdctrackgspline.cc:153
 hmdctrackgspline.cc:154
 hmdctrackgspline.cc:155
 hmdctrackgspline.cc:156
 hmdctrackgspline.cc:157
 hmdctrackgspline.cc:158
 hmdctrackgspline.cc:159
 hmdctrackgspline.cc:160
 hmdctrackgspline.cc:161
 hmdctrackgspline.cc:162
 hmdctrackgspline.cc:163
 hmdctrackgspline.cc:164
 hmdctrackgspline.cc:165
 hmdctrackgspline.cc:166
 hmdctrackgspline.cc:167
 hmdctrackgspline.cc:168
 hmdctrackgspline.cc:169
 hmdctrackgspline.cc:170
 hmdctrackgspline.cc:171
 hmdctrackgspline.cc:172
 hmdctrackgspline.cc:173
 hmdctrackgspline.cc:174
 hmdctrackgspline.cc:175
 hmdctrackgspline.cc:176
 hmdctrackgspline.cc:177
 hmdctrackgspline.cc:178
 hmdctrackgspline.cc:179
 hmdctrackgspline.cc:180
 hmdctrackgspline.cc:181
 hmdctrackgspline.cc:182
 hmdctrackgspline.cc:183
 hmdctrackgspline.cc:184
 hmdctrackgspline.cc:185
 hmdctrackgspline.cc:186
 hmdctrackgspline.cc:187
 hmdctrackgspline.cc:188
 hmdctrackgspline.cc:189
 hmdctrackgspline.cc:190
 hmdctrackgspline.cc:191
 hmdctrackgspline.cc:192
 hmdctrackgspline.cc:193
 hmdctrackgspline.cc:194
 hmdctrackgspline.cc:195
 hmdctrackgspline.cc:196
 hmdctrackgspline.cc:197
 hmdctrackgspline.cc:198
 hmdctrackgspline.cc:199
 hmdctrackgspline.cc:200
 hmdctrackgspline.cc:201
 hmdctrackgspline.cc:202
 hmdctrackgspline.cc:203
 hmdctrackgspline.cc:204
 hmdctrackgspline.cc:205
 hmdctrackgspline.cc:206
 hmdctrackgspline.cc:207
 hmdctrackgspline.cc:208
 hmdctrackgspline.cc:209
 hmdctrackgspline.cc:210
 hmdctrackgspline.cc:211
 hmdctrackgspline.cc:212
 hmdctrackgspline.cc:213
 hmdctrackgspline.cc:214
 hmdctrackgspline.cc:215
 hmdctrackgspline.cc:216
 hmdctrackgspline.cc:217
 hmdctrackgspline.cc:218
 hmdctrackgspline.cc:219
 hmdctrackgspline.cc:220
 hmdctrackgspline.cc:221
 hmdctrackgspline.cc:222
 hmdctrackgspline.cc:223
 hmdctrackgspline.cc:224
 hmdctrackgspline.cc:225
 hmdctrackgspline.cc:226
 hmdctrackgspline.cc:227
 hmdctrackgspline.cc:228
 hmdctrackgspline.cc:229
 hmdctrackgspline.cc:230
 hmdctrackgspline.cc:231
 hmdctrackgspline.cc:232
 hmdctrackgspline.cc:233
 hmdctrackgspline.cc:234
 hmdctrackgspline.cc:235
 hmdctrackgspline.cc:236
 hmdctrackgspline.cc:237
 hmdctrackgspline.cc:238
 hmdctrackgspline.cc:239
 hmdctrackgspline.cc:240
 hmdctrackgspline.cc:241
 hmdctrackgspline.cc:242
 hmdctrackgspline.cc:243
 hmdctrackgspline.cc:244
 hmdctrackgspline.cc:245
 hmdctrackgspline.cc:246
 hmdctrackgspline.cc:247
 hmdctrackgspline.cc:248
 hmdctrackgspline.cc:249
 hmdctrackgspline.cc:250
 hmdctrackgspline.cc:251
 hmdctrackgspline.cc:252
 hmdctrackgspline.cc:253
 hmdctrackgspline.cc:254
 hmdctrackgspline.cc:255
 hmdctrackgspline.cc:256
 hmdctrackgspline.cc:257
 hmdctrackgspline.cc:258
 hmdctrackgspline.cc:259
 hmdctrackgspline.cc:260
 hmdctrackgspline.cc:261
 hmdctrackgspline.cc:262
 hmdctrackgspline.cc:263
 hmdctrackgspline.cc:264
 hmdctrackgspline.cc:265
 hmdctrackgspline.cc:266
 hmdctrackgspline.cc:267
 hmdctrackgspline.cc:268
 hmdctrackgspline.cc:269
 hmdctrackgspline.cc:270
 hmdctrackgspline.cc:271
 hmdctrackgspline.cc:272
 hmdctrackgspline.cc:273
 hmdctrackgspline.cc:274
 hmdctrackgspline.cc:275
 hmdctrackgspline.cc:276
 hmdctrackgspline.cc:277
 hmdctrackgspline.cc:278
 hmdctrackgspline.cc:279
 hmdctrackgspline.cc:280
 hmdctrackgspline.cc:281
 hmdctrackgspline.cc:282
 hmdctrackgspline.cc:283
 hmdctrackgspline.cc:284
 hmdctrackgspline.cc:285
 hmdctrackgspline.cc:286
 hmdctrackgspline.cc:287
 hmdctrackgspline.cc:288
 hmdctrackgspline.cc:289
 hmdctrackgspline.cc:290
 hmdctrackgspline.cc:291
 hmdctrackgspline.cc:292
 hmdctrackgspline.cc:293
 hmdctrackgspline.cc:294
 hmdctrackgspline.cc:295
 hmdctrackgspline.cc:296
 hmdctrackgspline.cc:297
 hmdctrackgspline.cc:298
 hmdctrackgspline.cc:299
 hmdctrackgspline.cc:300
 hmdctrackgspline.cc:301
 hmdctrackgspline.cc:302
 hmdctrackgspline.cc:303
 hmdctrackgspline.cc:304
 hmdctrackgspline.cc:305
 hmdctrackgspline.cc:306
 hmdctrackgspline.cc:307
 hmdctrackgspline.cc:308
 hmdctrackgspline.cc:309
 hmdctrackgspline.cc:310
 hmdctrackgspline.cc:311
 hmdctrackgspline.cc:312
 hmdctrackgspline.cc:313
 hmdctrackgspline.cc:314
 hmdctrackgspline.cc:315
 hmdctrackgspline.cc:316
 hmdctrackgspline.cc:317
 hmdctrackgspline.cc:318
 hmdctrackgspline.cc:319
 hmdctrackgspline.cc:320
 hmdctrackgspline.cc:321
 hmdctrackgspline.cc:322
 hmdctrackgspline.cc:323
 hmdctrackgspline.cc:324
 hmdctrackgspline.cc:325
 hmdctrackgspline.cc:326
 hmdctrackgspline.cc:327
 hmdctrackgspline.cc:328
 hmdctrackgspline.cc:329
 hmdctrackgspline.cc:330
 hmdctrackgspline.cc:331
 hmdctrackgspline.cc:332
 hmdctrackgspline.cc:333
 hmdctrackgspline.cc:334
 hmdctrackgspline.cc:335
 hmdctrackgspline.cc:336
 hmdctrackgspline.cc:337
 hmdctrackgspline.cc:338
 hmdctrackgspline.cc:339
 hmdctrackgspline.cc:340
 hmdctrackgspline.cc:341
 hmdctrackgspline.cc:342
 hmdctrackgspline.cc:343
 hmdctrackgspline.cc:344
 hmdctrackgspline.cc:345
 hmdctrackgspline.cc:346
 hmdctrackgspline.cc:347
 hmdctrackgspline.cc:348
 hmdctrackgspline.cc:349
 hmdctrackgspline.cc:350
 hmdctrackgspline.cc:351
 hmdctrackgspline.cc:352
 hmdctrackgspline.cc:353
 hmdctrackgspline.cc:354
 hmdctrackgspline.cc:355
 hmdctrackgspline.cc:356
 hmdctrackgspline.cc:357
 hmdctrackgspline.cc:358
 hmdctrackgspline.cc:359
 hmdctrackgspline.cc:360
 hmdctrackgspline.cc:361
 hmdctrackgspline.cc:362
 hmdctrackgspline.cc:363
 hmdctrackgspline.cc:364
 hmdctrackgspline.cc:365
 hmdctrackgspline.cc:366
 hmdctrackgspline.cc:367
 hmdctrackgspline.cc:368
 hmdctrackgspline.cc:369
 hmdctrackgspline.cc:370
 hmdctrackgspline.cc:371
 hmdctrackgspline.cc:372
 hmdctrackgspline.cc:373
 hmdctrackgspline.cc:374
 hmdctrackgspline.cc:375
 hmdctrackgspline.cc:376
 hmdctrackgspline.cc:377
 hmdctrackgspline.cc:378
 hmdctrackgspline.cc:379
 hmdctrackgspline.cc:380
 hmdctrackgspline.cc:381
 hmdctrackgspline.cc:382
 hmdctrackgspline.cc:383
 hmdctrackgspline.cc:384
 hmdctrackgspline.cc:385
 hmdctrackgspline.cc:386
 hmdctrackgspline.cc:387
 hmdctrackgspline.cc:388
 hmdctrackgspline.cc:389
 hmdctrackgspline.cc:390
 hmdctrackgspline.cc:391
 hmdctrackgspline.cc:392
 hmdctrackgspline.cc:393
 hmdctrackgspline.cc:394
 hmdctrackgspline.cc:395
 hmdctrackgspline.cc:396
 hmdctrackgspline.cc:397
 hmdctrackgspline.cc:398
 hmdctrackgspline.cc:399
 hmdctrackgspline.cc:400
 hmdctrackgspline.cc:401
 hmdctrackgspline.cc:402
 hmdctrackgspline.cc:403
 hmdctrackgspline.cc:404
 hmdctrackgspline.cc:405
 hmdctrackgspline.cc:406
 hmdctrackgspline.cc:407
 hmdctrackgspline.cc:408
 hmdctrackgspline.cc:409
 hmdctrackgspline.cc:410
 hmdctrackgspline.cc:411
 hmdctrackgspline.cc:412
 hmdctrackgspline.cc:413
 hmdctrackgspline.cc:414
 hmdctrackgspline.cc:415
 hmdctrackgspline.cc:416
 hmdctrackgspline.cc:417
 hmdctrackgspline.cc:418
 hmdctrackgspline.cc:419
 hmdctrackgspline.cc:420
 hmdctrackgspline.cc:421
 hmdctrackgspline.cc:422
 hmdctrackgspline.cc:423
 hmdctrackgspline.cc:424
 hmdctrackgspline.cc:425
 hmdctrackgspline.cc:426
 hmdctrackgspline.cc:427
 hmdctrackgspline.cc:428
 hmdctrackgspline.cc:429
 hmdctrackgspline.cc:430
 hmdctrackgspline.cc:431
 hmdctrackgspline.cc:432
 hmdctrackgspline.cc:433
 hmdctrackgspline.cc:434
 hmdctrackgspline.cc:435
 hmdctrackgspline.cc:436
 hmdctrackgspline.cc:437
 hmdctrackgspline.cc:438
 hmdctrackgspline.cc:439
 hmdctrackgspline.cc:440
 hmdctrackgspline.cc:441
 hmdctrackgspline.cc:442
 hmdctrackgspline.cc:443
 hmdctrackgspline.cc:444
 hmdctrackgspline.cc:445
 hmdctrackgspline.cc:446
 hmdctrackgspline.cc:447
 hmdctrackgspline.cc:448
 hmdctrackgspline.cc:449
 hmdctrackgspline.cc:450
 hmdctrackgspline.cc:451
 hmdctrackgspline.cc:452
 hmdctrackgspline.cc:453
 hmdctrackgspline.cc:454
 hmdctrackgspline.cc:455
 hmdctrackgspline.cc:456
 hmdctrackgspline.cc:457
 hmdctrackgspline.cc:458
 hmdctrackgspline.cc:459
 hmdctrackgspline.cc:460
 hmdctrackgspline.cc:461
 hmdctrackgspline.cc:462
 hmdctrackgspline.cc:463
 hmdctrackgspline.cc:464
 hmdctrackgspline.cc:465
 hmdctrackgspline.cc:466
 hmdctrackgspline.cc:467
 hmdctrackgspline.cc:468
 hmdctrackgspline.cc:469
 hmdctrackgspline.cc:470
 hmdctrackgspline.cc:471
 hmdctrackgspline.cc:472
 hmdctrackgspline.cc:473
 hmdctrackgspline.cc:474
 hmdctrackgspline.cc:475
 hmdctrackgspline.cc:476
 hmdctrackgspline.cc:477
 hmdctrackgspline.cc:478
 hmdctrackgspline.cc:479
 hmdctrackgspline.cc:480
 hmdctrackgspline.cc:481
 hmdctrackgspline.cc:482
 hmdctrackgspline.cc:483
 hmdctrackgspline.cc:484
 hmdctrackgspline.cc:485
 hmdctrackgspline.cc:486
 hmdctrackgspline.cc:487
 hmdctrackgspline.cc:488
 hmdctrackgspline.cc:489
 hmdctrackgspline.cc:490
 hmdctrackgspline.cc:491
 hmdctrackgspline.cc:492
 hmdctrackgspline.cc:493
 hmdctrackgspline.cc:494
 hmdctrackgspline.cc:495
 hmdctrackgspline.cc:496
 hmdctrackgspline.cc:497
 hmdctrackgspline.cc:498
 hmdctrackgspline.cc:499
 hmdctrackgspline.cc:500
 hmdctrackgspline.cc:501
 hmdctrackgspline.cc:502
 hmdctrackgspline.cc:503
 hmdctrackgspline.cc:504
 hmdctrackgspline.cc:505
 hmdctrackgspline.cc:506
 hmdctrackgspline.cc:507
 hmdctrackgspline.cc:508
 hmdctrackgspline.cc:509
 hmdctrackgspline.cc:510
 hmdctrackgspline.cc:511
 hmdctrackgspline.cc:512
 hmdctrackgspline.cc:513
 hmdctrackgspline.cc:514
 hmdctrackgspline.cc:515
 hmdctrackgspline.cc:516
 hmdctrackgspline.cc:517
 hmdctrackgspline.cc:518
 hmdctrackgspline.cc:519
 hmdctrackgspline.cc:520
 hmdctrackgspline.cc:521
 hmdctrackgspline.cc:522
 hmdctrackgspline.cc:523
 hmdctrackgspline.cc:524
 hmdctrackgspline.cc:525
 hmdctrackgspline.cc:526
 hmdctrackgspline.cc:527
 hmdctrackgspline.cc:528
 hmdctrackgspline.cc:529
 hmdctrackgspline.cc:530
 hmdctrackgspline.cc:531
 hmdctrackgspline.cc:532
 hmdctrackgspline.cc:533
 hmdctrackgspline.cc:534
 hmdctrackgspline.cc:535
 hmdctrackgspline.cc:536
 hmdctrackgspline.cc:537
 hmdctrackgspline.cc:538
 hmdctrackgspline.cc:539
 hmdctrackgspline.cc:540
 hmdctrackgspline.cc:541
 hmdctrackgspline.cc:542
 hmdctrackgspline.cc:543
 hmdctrackgspline.cc:544
 hmdctrackgspline.cc:545
 hmdctrackgspline.cc:546
 hmdctrackgspline.cc:547
 hmdctrackgspline.cc:548
 hmdctrackgspline.cc:549
 hmdctrackgspline.cc:550
 hmdctrackgspline.cc:551
 hmdctrackgspline.cc:552
 hmdctrackgspline.cc:553
 hmdctrackgspline.cc:554
 hmdctrackgspline.cc:555
 hmdctrackgspline.cc:556
 hmdctrackgspline.cc:557
 hmdctrackgspline.cc:558
 hmdctrackgspline.cc:559
 hmdctrackgspline.cc:560
 hmdctrackgspline.cc:561
 hmdctrackgspline.cc:562
 hmdctrackgspline.cc:563
 hmdctrackgspline.cc:564
 hmdctrackgspline.cc:565
 hmdctrackgspline.cc:566
 hmdctrackgspline.cc:567
 hmdctrackgspline.cc:568
 hmdctrackgspline.cc:569
 hmdctrackgspline.cc:570
 hmdctrackgspline.cc:571
 hmdctrackgspline.cc:572
 hmdctrackgspline.cc:573
 hmdctrackgspline.cc:574
 hmdctrackgspline.cc:575
 hmdctrackgspline.cc:576
 hmdctrackgspline.cc:577
 hmdctrackgspline.cc:578
 hmdctrackgspline.cc:579
 hmdctrackgspline.cc:580
 hmdctrackgspline.cc:581
 hmdctrackgspline.cc:582
 hmdctrackgspline.cc:583
 hmdctrackgspline.cc:584
 hmdctrackgspline.cc:585
 hmdctrackgspline.cc:586
 hmdctrackgspline.cc:587
 hmdctrackgspline.cc:588
 hmdctrackgspline.cc:589
 hmdctrackgspline.cc:590
 hmdctrackgspline.cc:591
 hmdctrackgspline.cc:592
 hmdctrackgspline.cc:593
 hmdctrackgspline.cc:594
 hmdctrackgspline.cc:595
 hmdctrackgspline.cc:596
 hmdctrackgspline.cc:597
 hmdctrackgspline.cc:598
 hmdctrackgspline.cc:599
 hmdctrackgspline.cc:600
 hmdctrackgspline.cc:601
 hmdctrackgspline.cc:602
 hmdctrackgspline.cc:603
 hmdctrackgspline.cc:604
 hmdctrackgspline.cc:605
 hmdctrackgspline.cc:606
 hmdctrackgspline.cc:607
 hmdctrackgspline.cc:608
 hmdctrackgspline.cc:609
 hmdctrackgspline.cc:610
 hmdctrackgspline.cc:611
 hmdctrackgspline.cc:612
 hmdctrackgspline.cc:613
 hmdctrackgspline.cc:614
 hmdctrackgspline.cc:615
 hmdctrackgspline.cc:616
 hmdctrackgspline.cc:617
 hmdctrackgspline.cc:618
 hmdctrackgspline.cc:619
 hmdctrackgspline.cc:620
 hmdctrackgspline.cc:621
 hmdctrackgspline.cc:622
 hmdctrackgspline.cc:623
 hmdctrackgspline.cc:624
 hmdctrackgspline.cc:625
 hmdctrackgspline.cc:626
 hmdctrackgspline.cc:627
 hmdctrackgspline.cc:628
 hmdctrackgspline.cc:629
 hmdctrackgspline.cc:630
 hmdctrackgspline.cc:631
 hmdctrackgspline.cc:632
 hmdctrackgspline.cc:633
 hmdctrackgspline.cc:634
 hmdctrackgspline.cc:635
 hmdctrackgspline.cc:636
 hmdctrackgspline.cc:637
 hmdctrackgspline.cc:638
 hmdctrackgspline.cc:639
 hmdctrackgspline.cc:640
 hmdctrackgspline.cc:641
 hmdctrackgspline.cc:642
 hmdctrackgspline.cc:643
 hmdctrackgspline.cc:644
 hmdctrackgspline.cc:645
 hmdctrackgspline.cc:646
 hmdctrackgspline.cc:647
 hmdctrackgspline.cc:648
 hmdctrackgspline.cc:649
 hmdctrackgspline.cc:650
 hmdctrackgspline.cc:651
 hmdctrackgspline.cc:652
 hmdctrackgspline.cc:653
 hmdctrackgspline.cc:654
 hmdctrackgspline.cc:655
 hmdctrackgspline.cc:656
 hmdctrackgspline.cc:657
 hmdctrackgspline.cc:658
 hmdctrackgspline.cc:659
 hmdctrackgspline.cc:660
 hmdctrackgspline.cc:661
 hmdctrackgspline.cc:662
 hmdctrackgspline.cc:663
 hmdctrackgspline.cc:664
 hmdctrackgspline.cc:665
 hmdctrackgspline.cc:666
 hmdctrackgspline.cc:667
 hmdctrackgspline.cc:668
 hmdctrackgspline.cc:669
 hmdctrackgspline.cc:670
 hmdctrackgspline.cc:671
 hmdctrackgspline.cc:672
 hmdctrackgspline.cc:673
 hmdctrackgspline.cc:674
 hmdctrackgspline.cc:675
 hmdctrackgspline.cc:676
 hmdctrackgspline.cc:677
 hmdctrackgspline.cc:678
 hmdctrackgspline.cc:679
 hmdctrackgspline.cc:680
 hmdctrackgspline.cc:681
 hmdctrackgspline.cc:682
 hmdctrackgspline.cc:683
 hmdctrackgspline.cc:684
 hmdctrackgspline.cc:685
 hmdctrackgspline.cc:686
 hmdctrackgspline.cc:687
 hmdctrackgspline.cc:688
 hmdctrackgspline.cc:689
 hmdctrackgspline.cc:690
 hmdctrackgspline.cc:691
 hmdctrackgspline.cc:692
 hmdctrackgspline.cc:693
 hmdctrackgspline.cc:694
 hmdctrackgspline.cc:695
 hmdctrackgspline.cc:696
 hmdctrackgspline.cc:697
 hmdctrackgspline.cc:698
 hmdctrackgspline.cc:699
 hmdctrackgspline.cc:700
 hmdctrackgspline.cc:701
 hmdctrackgspline.cc:702
 hmdctrackgspline.cc:703
 hmdctrackgspline.cc:704
 hmdctrackgspline.cc:705
 hmdctrackgspline.cc:706
 hmdctrackgspline.cc:707
 hmdctrackgspline.cc:708
 hmdctrackgspline.cc:709
 hmdctrackgspline.cc:710
 hmdctrackgspline.cc:711
 hmdctrackgspline.cc:712
 hmdctrackgspline.cc:713
 hmdctrackgspline.cc:714
 hmdctrackgspline.cc:715
 hmdctrackgspline.cc:716
 hmdctrackgspline.cc:717
 hmdctrackgspline.cc:718
 hmdctrackgspline.cc:719
 hmdctrackgspline.cc:720
 hmdctrackgspline.cc:721
 hmdctrackgspline.cc:722
 hmdctrackgspline.cc:723
 hmdctrackgspline.cc:724
 hmdctrackgspline.cc:725
 hmdctrackgspline.cc:726
 hmdctrackgspline.cc:727
 hmdctrackgspline.cc:728
 hmdctrackgspline.cc:729
 hmdctrackgspline.cc:730
 hmdctrackgspline.cc:731
 hmdctrackgspline.cc:732
 hmdctrackgspline.cc:733
 hmdctrackgspline.cc:734
 hmdctrackgspline.cc:735
 hmdctrackgspline.cc:736
 hmdctrackgspline.cc:737
 hmdctrackgspline.cc:738
 hmdctrackgspline.cc:739
 hmdctrackgspline.cc:740
 hmdctrackgspline.cc:741
 hmdctrackgspline.cc:742
 hmdctrackgspline.cc:743
 hmdctrackgspline.cc:744
 hmdctrackgspline.cc:745
 hmdctrackgspline.cc:746
 hmdctrackgspline.cc:747
 hmdctrackgspline.cc:748
 hmdctrackgspline.cc:749
 hmdctrackgspline.cc:750
 hmdctrackgspline.cc:751
 hmdctrackgspline.cc:752
 hmdctrackgspline.cc:753
 hmdctrackgspline.cc:754
 hmdctrackgspline.cc:755
 hmdctrackgspline.cc:756
 hmdctrackgspline.cc:757
 hmdctrackgspline.cc:758
 hmdctrackgspline.cc:759
 hmdctrackgspline.cc:760
 hmdctrackgspline.cc:761
 hmdctrackgspline.cc:762
 hmdctrackgspline.cc:763
 hmdctrackgspline.cc:764
 hmdctrackgspline.cc:765
 hmdctrackgspline.cc:766
 hmdctrackgspline.cc:767
 hmdctrackgspline.cc:768
 hmdctrackgspline.cc:769
 hmdctrackgspline.cc:770
 hmdctrackgspline.cc:771
 hmdctrackgspline.cc:772
 hmdctrackgspline.cc:773
 hmdctrackgspline.cc:774
 hmdctrackgspline.cc:775
 hmdctrackgspline.cc:776
 hmdctrackgspline.cc:777
 hmdctrackgspline.cc:778
 hmdctrackgspline.cc:779
 hmdctrackgspline.cc:780
 hmdctrackgspline.cc:781
 hmdctrackgspline.cc:782
 hmdctrackgspline.cc:783
 hmdctrackgspline.cc:784
 hmdctrackgspline.cc:785
 hmdctrackgspline.cc:786
 hmdctrackgspline.cc:787
 hmdctrackgspline.cc:788
 hmdctrackgspline.cc:789
 hmdctrackgspline.cc:790
 hmdctrackgspline.cc:791
 hmdctrackgspline.cc:792
 hmdctrackgspline.cc:793
 hmdctrackgspline.cc:794
 hmdctrackgspline.cc:795
 hmdctrackgspline.cc:796
 hmdctrackgspline.cc:797
 hmdctrackgspline.cc:798
 hmdctrackgspline.cc:799
 hmdctrackgspline.cc:800
 hmdctrackgspline.cc:801
 hmdctrackgspline.cc:802
 hmdctrackgspline.cc:803
 hmdctrackgspline.cc:804
 hmdctrackgspline.cc:805
 hmdctrackgspline.cc:806
 hmdctrackgspline.cc:807
 hmdctrackgspline.cc:808
 hmdctrackgspline.cc:809
 hmdctrackgspline.cc:810
 hmdctrackgspline.cc:811
 hmdctrackgspline.cc:812
 hmdctrackgspline.cc:813
 hmdctrackgspline.cc:814
 hmdctrackgspline.cc:815
 hmdctrackgspline.cc:816
 hmdctrackgspline.cc:817
 hmdctrackgspline.cc:818
 hmdctrackgspline.cc:819
 hmdctrackgspline.cc:820
 hmdctrackgspline.cc:821
 hmdctrackgspline.cc:822
 hmdctrackgspline.cc:823
 hmdctrackgspline.cc:824
 hmdctrackgspline.cc:825
 hmdctrackgspline.cc:826
 hmdctrackgspline.cc:827
 hmdctrackgspline.cc:828
 hmdctrackgspline.cc:829
 hmdctrackgspline.cc:830
 hmdctrackgspline.cc:831
 hmdctrackgspline.cc:832
 hmdctrackgspline.cc:833
 hmdctrackgspline.cc:834
 hmdctrackgspline.cc:835
 hmdctrackgspline.cc:836
 hmdctrackgspline.cc:837
 hmdctrackgspline.cc:838
 hmdctrackgspline.cc:839
 hmdctrackgspline.cc:840
 hmdctrackgspline.cc:841
 hmdctrackgspline.cc:842
 hmdctrackgspline.cc:843
 hmdctrackgspline.cc:844
 hmdctrackgspline.cc:845
 hmdctrackgspline.cc:846
 hmdctrackgspline.cc:847
 hmdctrackgspline.cc:848
 hmdctrackgspline.cc:849
 hmdctrackgspline.cc:850
 hmdctrackgspline.cc:851
 hmdctrackgspline.cc:852
 hmdctrackgspline.cc:853
 hmdctrackgspline.cc:854
 hmdctrackgspline.cc:855
 hmdctrackgspline.cc:856
 hmdctrackgspline.cc:857
 hmdctrackgspline.cc:858
 hmdctrackgspline.cc:859
 hmdctrackgspline.cc:860
 hmdctrackgspline.cc:861
 hmdctrackgspline.cc:862
 hmdctrackgspline.cc:863
 hmdctrackgspline.cc:864
 hmdctrackgspline.cc:865
 hmdctrackgspline.cc:866
 hmdctrackgspline.cc:867
 hmdctrackgspline.cc:868
 hmdctrackgspline.cc:869
 hmdctrackgspline.cc:870
 hmdctrackgspline.cc:871
 hmdctrackgspline.cc:872
 hmdctrackgspline.cc:873
 hmdctrackgspline.cc:874
 hmdctrackgspline.cc:875
 hmdctrackgspline.cc:876
 hmdctrackgspline.cc:877
 hmdctrackgspline.cc:878
 hmdctrackgspline.cc:879
 hmdctrackgspline.cc:880
 hmdctrackgspline.cc:881
 hmdctrackgspline.cc:882
 hmdctrackgspline.cc:883
 hmdctrackgspline.cc:884
 hmdctrackgspline.cc:885
 hmdctrackgspline.cc:886
 hmdctrackgspline.cc:887
 hmdctrackgspline.cc:888
 hmdctrackgspline.cc:889
 hmdctrackgspline.cc:890
 hmdctrackgspline.cc:891
 hmdctrackgspline.cc:892
 hmdctrackgspline.cc:893
 hmdctrackgspline.cc:894
 hmdctrackgspline.cc:895
 hmdctrackgspline.cc:896
 hmdctrackgspline.cc:897
 hmdctrackgspline.cc:898
 hmdctrackgspline.cc:899
 hmdctrackgspline.cc:900
 hmdctrackgspline.cc:901
 hmdctrackgspline.cc:902
 hmdctrackgspline.cc:903
 hmdctrackgspline.cc:904
 hmdctrackgspline.cc:905
 hmdctrackgspline.cc:906
 hmdctrackgspline.cc:907
 hmdctrackgspline.cc:908
 hmdctrackgspline.cc:909
 hmdctrackgspline.cc:910
 hmdctrackgspline.cc:911
 hmdctrackgspline.cc:912
 hmdctrackgspline.cc:913
 hmdctrackgspline.cc:914
 hmdctrackgspline.cc:915
 hmdctrackgspline.cc:916
 hmdctrackgspline.cc:917
 hmdctrackgspline.cc:918
 hmdctrackgspline.cc:919
 hmdctrackgspline.cc:920
 hmdctrackgspline.cc:921
 hmdctrackgspline.cc:922
 hmdctrackgspline.cc:923
 hmdctrackgspline.cc:924
 hmdctrackgspline.cc:925
 hmdctrackgspline.cc:926
 hmdctrackgspline.cc:927
 hmdctrackgspline.cc:928
 hmdctrackgspline.cc:929
 hmdctrackgspline.cc:930
 hmdctrackgspline.cc:931
 hmdctrackgspline.cc:932
 hmdctrackgspline.cc:933
 hmdctrackgspline.cc:934
 hmdctrackgspline.cc:935
 hmdctrackgspline.cc:936
 hmdctrackgspline.cc:937
 hmdctrackgspline.cc:938
 hmdctrackgspline.cc:939
 hmdctrackgspline.cc:940
 hmdctrackgspline.cc:941
 hmdctrackgspline.cc:942
 hmdctrackgspline.cc:943
 hmdctrackgspline.cc:944
 hmdctrackgspline.cc:945
 hmdctrackgspline.cc:946
 hmdctrackgspline.cc:947
 hmdctrackgspline.cc:948
 hmdctrackgspline.cc:949
 hmdctrackgspline.cc:950
 hmdctrackgspline.cc:951
 hmdctrackgspline.cc:952
 hmdctrackgspline.cc:953
 hmdctrackgspline.cc:954
 hmdctrackgspline.cc:955
 hmdctrackgspline.cc:956
 hmdctrackgspline.cc:957
 hmdctrackgspline.cc:958
 hmdctrackgspline.cc:959
 hmdctrackgspline.cc:960
 hmdctrackgspline.cc:961
 hmdctrackgspline.cc:962
 hmdctrackgspline.cc:963
 hmdctrackgspline.cc:964
 hmdctrackgspline.cc:965
 hmdctrackgspline.cc:966
 hmdctrackgspline.cc:967
 hmdctrackgspline.cc:968
 hmdctrackgspline.cc:969
 hmdctrackgspline.cc:970
 hmdctrackgspline.cc:971
 hmdctrackgspline.cc:972
 hmdctrackgspline.cc:973
 hmdctrackgspline.cc:974
 hmdctrackgspline.cc:975
 hmdctrackgspline.cc:976
 hmdctrackgspline.cc:977
 hmdctrackgspline.cc:978
 hmdctrackgspline.cc:979
 hmdctrackgspline.cc:980
 hmdctrackgspline.cc:981
 hmdctrackgspline.cc:982
 hmdctrackgspline.cc:983
 hmdctrackgspline.cc:984
 hmdctrackgspline.cc:985
 hmdctrackgspline.cc:986
 hmdctrackgspline.cc:987
 hmdctrackgspline.cc:988
 hmdctrackgspline.cc:989
 hmdctrackgspline.cc:990
 hmdctrackgspline.cc:991
 hmdctrackgspline.cc:992
 hmdctrackgspline.cc:993
 hmdctrackgspline.cc:994
 hmdctrackgspline.cc:995
 hmdctrackgspline.cc:996
 hmdctrackgspline.cc:997
 hmdctrackgspline.cc:998
 hmdctrackgspline.cc:999
 hmdctrackgspline.cc:1000
 hmdctrackgspline.cc:1001
 hmdctrackgspline.cc:1002
 hmdctrackgspline.cc:1003
 hmdctrackgspline.cc:1004
 hmdctrackgspline.cc:1005
 hmdctrackgspline.cc:1006
 hmdctrackgspline.cc:1007
 hmdctrackgspline.cc:1008
 hmdctrackgspline.cc:1009
 hmdctrackgspline.cc:1010
 hmdctrackgspline.cc:1011
 hmdctrackgspline.cc:1012
 hmdctrackgspline.cc:1013
 hmdctrackgspline.cc:1014
 hmdctrackgspline.cc:1015
 hmdctrackgspline.cc:1016
 hmdctrackgspline.cc:1017
 hmdctrackgspline.cc:1018
 hmdctrackgspline.cc:1019
 hmdctrackgspline.cc:1020
 hmdctrackgspline.cc:1021
 hmdctrackgspline.cc:1022
 hmdctrackgspline.cc:1023
 hmdctrackgspline.cc:1024
 hmdctrackgspline.cc:1025
 hmdctrackgspline.cc:1026
 hmdctrackgspline.cc:1027
 hmdctrackgspline.cc:1028
 hmdctrackgspline.cc:1029
 hmdctrackgspline.cc:1030
 hmdctrackgspline.cc:1031
 hmdctrackgspline.cc:1032
 hmdctrackgspline.cc:1033
 hmdctrackgspline.cc:1034
 hmdctrackgspline.cc:1035
 hmdctrackgspline.cc:1036
 hmdctrackgspline.cc:1037
 hmdctrackgspline.cc:1038
 hmdctrackgspline.cc:1039
 hmdctrackgspline.cc:1040
 hmdctrackgspline.cc:1041
 hmdctrackgspline.cc:1042
 hmdctrackgspline.cc:1043
 hmdctrackgspline.cc:1044
 hmdctrackgspline.cc:1045
 hmdctrackgspline.cc:1046
 hmdctrackgspline.cc:1047
 hmdctrackgspline.cc:1048
 hmdctrackgspline.cc:1049
 hmdctrackgspline.cc:1050
 hmdctrackgspline.cc:1051
 hmdctrackgspline.cc:1052
 hmdctrackgspline.cc:1053
 hmdctrackgspline.cc:1054
 hmdctrackgspline.cc:1055
 hmdctrackgspline.cc:1056
 hmdctrackgspline.cc:1057
 hmdctrackgspline.cc:1058
 hmdctrackgspline.cc:1059
 hmdctrackgspline.cc:1060
 hmdctrackgspline.cc:1061
 hmdctrackgspline.cc:1062
 hmdctrackgspline.cc:1063
 hmdctrackgspline.cc:1064
 hmdctrackgspline.cc:1065
 hmdctrackgspline.cc:1066
 hmdctrackgspline.cc:1067
 hmdctrackgspline.cc:1068
 hmdctrackgspline.cc:1069
 hmdctrackgspline.cc:1070
 hmdctrackgspline.cc:1071
 hmdctrackgspline.cc:1072
 hmdctrackgspline.cc:1073
 hmdctrackgspline.cc:1074
 hmdctrackgspline.cc:1075
 hmdctrackgspline.cc:1076
 hmdctrackgspline.cc:1077
 hmdctrackgspline.cc:1078
 hmdctrackgspline.cc:1079
 hmdctrackgspline.cc:1080
 hmdctrackgspline.cc:1081
 hmdctrackgspline.cc:1082
 hmdctrackgspline.cc:1083
 hmdctrackgspline.cc:1084
 hmdctrackgspline.cc:1085
 hmdctrackgspline.cc:1086
 hmdctrackgspline.cc:1087
 hmdctrackgspline.cc:1088
 hmdctrackgspline.cc:1089
 hmdctrackgspline.cc:1090
 hmdctrackgspline.cc:1091
 hmdctrackgspline.cc:1092
 hmdctrackgspline.cc:1093
 hmdctrackgspline.cc:1094
 hmdctrackgspline.cc:1095
 hmdctrackgspline.cc:1096
 hmdctrackgspline.cc:1097
 hmdctrackgspline.cc:1098
 hmdctrackgspline.cc:1099
 hmdctrackgspline.cc:1100
 hmdctrackgspline.cc:1101
 hmdctrackgspline.cc:1102
 hmdctrackgspline.cc:1103
 hmdctrackgspline.cc:1104
 hmdctrackgspline.cc:1105
 hmdctrackgspline.cc:1106
 hmdctrackgspline.cc:1107
 hmdctrackgspline.cc:1108
 hmdctrackgspline.cc:1109
 hmdctrackgspline.cc:1110
 hmdctrackgspline.cc:1111
 hmdctrackgspline.cc:1112
 hmdctrackgspline.cc:1113
 hmdctrackgspline.cc:1114
 hmdctrackgspline.cc:1115
 hmdctrackgspline.cc:1116
 hmdctrackgspline.cc:1117
 hmdctrackgspline.cc:1118
 hmdctrackgspline.cc:1119
 hmdctrackgspline.cc:1120
 hmdctrackgspline.cc:1121
 hmdctrackgspline.cc:1122
 hmdctrackgspline.cc:1123
 hmdctrackgspline.cc:1124
 hmdctrackgspline.cc:1125
 hmdctrackgspline.cc:1126
 hmdctrackgspline.cc:1127
 hmdctrackgspline.cc:1128
 hmdctrackgspline.cc:1129
 hmdctrackgspline.cc:1130
 hmdctrackgspline.cc:1131
 hmdctrackgspline.cc:1132
 hmdctrackgspline.cc:1133
 hmdctrackgspline.cc:1134
 hmdctrackgspline.cc:1135
 hmdctrackgspline.cc:1136
 hmdctrackgspline.cc:1137
 hmdctrackgspline.cc:1138
 hmdctrackgspline.cc:1139
 hmdctrackgspline.cc:1140
 hmdctrackgspline.cc:1141
 hmdctrackgspline.cc:1142
 hmdctrackgspline.cc:1143
 hmdctrackgspline.cc:1144
 hmdctrackgspline.cc:1145
 hmdctrackgspline.cc:1146
 hmdctrackgspline.cc:1147
 hmdctrackgspline.cc:1148
 hmdctrackgspline.cc:1149
 hmdctrackgspline.cc:1150
 hmdctrackgspline.cc:1151
 hmdctrackgspline.cc:1152
 hmdctrackgspline.cc:1153
 hmdctrackgspline.cc:1154
 hmdctrackgspline.cc:1155
 hmdctrackgspline.cc:1156
 hmdctrackgspline.cc:1157
 hmdctrackgspline.cc:1158
 hmdctrackgspline.cc:1159
 hmdctrackgspline.cc:1160
 hmdctrackgspline.cc:1161
 hmdctrackgspline.cc:1162
 hmdctrackgspline.cc:1163
 hmdctrackgspline.cc:1164
 hmdctrackgspline.cc:1165
 hmdctrackgspline.cc:1166
 hmdctrackgspline.cc:1167
 hmdctrackgspline.cc:1168
 hmdctrackgspline.cc:1169
 hmdctrackgspline.cc:1170
 hmdctrackgspline.cc:1171
 hmdctrackgspline.cc:1172
 hmdctrackgspline.cc:1173
 hmdctrackgspline.cc:1174
 hmdctrackgspline.cc:1175
 hmdctrackgspline.cc:1176
 hmdctrackgspline.cc:1177
 hmdctrackgspline.cc:1178
 hmdctrackgspline.cc:1179
 hmdctrackgspline.cc:1180
 hmdctrackgspline.cc:1181
 hmdctrackgspline.cc:1182
 hmdctrackgspline.cc:1183
 hmdctrackgspline.cc:1184
 hmdctrackgspline.cc:1185
 hmdctrackgspline.cc:1186
 hmdctrackgspline.cc:1187
 hmdctrackgspline.cc:1188
 hmdctrackgspline.cc:1189
 hmdctrackgspline.cc:1190
 hmdctrackgspline.cc:1191
 hmdctrackgspline.cc:1192
 hmdctrackgspline.cc:1193
 hmdctrackgspline.cc:1194
 hmdctrackgspline.cc:1195
 hmdctrackgspline.cc:1196
 hmdctrackgspline.cc:1197
 hmdctrackgspline.cc:1198
 hmdctrackgspline.cc:1199
 hmdctrackgspline.cc:1200
 hmdctrackgspline.cc:1201
 hmdctrackgspline.cc:1202
 hmdctrackgspline.cc:1203
 hmdctrackgspline.cc:1204
 hmdctrackgspline.cc:1205
 hmdctrackgspline.cc:1206
 hmdctrackgspline.cc:1207
 hmdctrackgspline.cc:1208
 hmdctrackgspline.cc:1209
 hmdctrackgspline.cc:1210
 hmdctrackgspline.cc:1211
 hmdctrackgspline.cc:1212
 hmdctrackgspline.cc:1213
 hmdctrackgspline.cc:1214
 hmdctrackgspline.cc:1215
 hmdctrackgspline.cc:1216
 hmdctrackgspline.cc:1217
 hmdctrackgspline.cc:1218
 hmdctrackgspline.cc:1219
 hmdctrackgspline.cc:1220
 hmdctrackgspline.cc:1221
 hmdctrackgspline.cc:1222
 hmdctrackgspline.cc:1223
 hmdctrackgspline.cc:1224
 hmdctrackgspline.cc:1225
 hmdctrackgspline.cc:1226
 hmdctrackgspline.cc:1227
 hmdctrackgspline.cc:1228
 hmdctrackgspline.cc:1229
 hmdctrackgspline.cc:1230
 hmdctrackgspline.cc:1231
 hmdctrackgspline.cc:1232
 hmdctrackgspline.cc:1233
 hmdctrackgspline.cc:1234
 hmdctrackgspline.cc:1235
 hmdctrackgspline.cc:1236
 hmdctrackgspline.cc:1237
 hmdctrackgspline.cc:1238
 hmdctrackgspline.cc:1239
 hmdctrackgspline.cc:1240
 hmdctrackgspline.cc:1241
 hmdctrackgspline.cc:1242
 hmdctrackgspline.cc:1243
 hmdctrackgspline.cc:1244
 hmdctrackgspline.cc:1245
 hmdctrackgspline.cc:1246
 hmdctrackgspline.cc:1247
 hmdctrackgspline.cc:1248
 hmdctrackgspline.cc:1249
 hmdctrackgspline.cc:1250
 hmdctrackgspline.cc:1251
 hmdctrackgspline.cc:1252
 hmdctrackgspline.cc:1253
 hmdctrackgspline.cc:1254
 hmdctrackgspline.cc:1255
 hmdctrackgspline.cc:1256
 hmdctrackgspline.cc:1257
 hmdctrackgspline.cc:1258
 hmdctrackgspline.cc:1259
 hmdctrackgspline.cc:1260
 hmdctrackgspline.cc:1261
 hmdctrackgspline.cc:1262
 hmdctrackgspline.cc:1263
 hmdctrackgspline.cc:1264
 hmdctrackgspline.cc:1265
 hmdctrackgspline.cc:1266
 hmdctrackgspline.cc:1267
 hmdctrackgspline.cc:1268
 hmdctrackgspline.cc:1269
 hmdctrackgspline.cc:1270
 hmdctrackgspline.cc:1271
 hmdctrackgspline.cc:1272
 hmdctrackgspline.cc:1273
 hmdctrackgspline.cc:1274
 hmdctrackgspline.cc:1275
 hmdctrackgspline.cc:1276
 hmdctrackgspline.cc:1277
 hmdctrackgspline.cc:1278
 hmdctrackgspline.cc:1279
 hmdctrackgspline.cc:1280
 hmdctrackgspline.cc:1281
 hmdctrackgspline.cc:1282
 hmdctrackgspline.cc:1283
 hmdctrackgspline.cc:1284
 hmdctrackgspline.cc:1285
 hmdctrackgspline.cc:1286
 hmdctrackgspline.cc:1287
 hmdctrackgspline.cc:1288
 hmdctrackgspline.cc:1289
 hmdctrackgspline.cc:1290
 hmdctrackgspline.cc:1291
 hmdctrackgspline.cc:1292
 hmdctrackgspline.cc:1293
 hmdctrackgspline.cc:1294
 hmdctrackgspline.cc:1295
 hmdctrackgspline.cc:1296
 hmdctrackgspline.cc:1297
 hmdctrackgspline.cc:1298
 hmdctrackgspline.cc:1299
 hmdctrackgspline.cc:1300
 hmdctrackgspline.cc:1301
 hmdctrackgspline.cc:1302
 hmdctrackgspline.cc:1303
 hmdctrackgspline.cc:1304
 hmdctrackgspline.cc:1305
 hmdctrackgspline.cc:1306
 hmdctrackgspline.cc:1307
 hmdctrackgspline.cc:1308
 hmdctrackgspline.cc:1309
 hmdctrackgspline.cc:1310
 hmdctrackgspline.cc:1311
 hmdctrackgspline.cc:1312
 hmdctrackgspline.cc:1313
 hmdctrackgspline.cc:1314
 hmdctrackgspline.cc:1315
 hmdctrackgspline.cc:1316
 hmdctrackgspline.cc:1317
 hmdctrackgspline.cc:1318
 hmdctrackgspline.cc:1319
 hmdctrackgspline.cc:1320
 hmdctrackgspline.cc:1321
 hmdctrackgspline.cc:1322
 hmdctrackgspline.cc:1323
 hmdctrackgspline.cc:1324
 hmdctrackgspline.cc:1325
 hmdctrackgspline.cc:1326