ROOT logo
//*-- Author : Anar Rustamov (27.08.2003)
#include <iostream>
#include "hsplinetrackF2.h"
#include "hades.h"
#include "hmetamatch2.h"
#include "hcategory.h"
#include "hdetector.h"
#include "hevent.h"
#include "htofhit.h"
#include "htofcluster.h"
#include "hsplinepar.h"
#include "hiterator.h"
#include "hgeomvolume.h"
#include "hgeomcompositevolume.h"
#include "hspectrometer.h"
#include "hruntimedb.h"
#include "hmdcgeompar.h"
#include "hspecgeompar.h" 
#include "tofdef.h"
#include "hmdcseg.h"
#include "rpcdef.h"
#include "showerdef.h"
#include "emcdef.h"
#include "hmdctrackgcorrpar.h"
#include "hmdctrackgfieldpar.h"
#include "hmatrixcategory.h"
#include "hgeomtransform.h"
#include "hmdctrackddef.h"
#include "hmdctrackgdef.h"
#include "hmdctrkcand.h"
#include "hmdctrackgspline.h"
#include "hgeomvector.h"
#include "hlocation.h"
#include "hsplinetrack.h"
#include "hmagnetpar.h"
#include "hshowerhitsim.h"
#include "hemcclustersim.h"
#include "hmdcsizescells.h"
#include "heventheader.h"
#include "hmdcgetcontainers.h"
#include "hrpccluster.h"

using namespace std;
  
ClassImp(HSplineTrackF2)
  
  HSplineTrackF2::HSplineTrackF2()
{
  setDef();
}

HSplineTrackF2::HSplineTrackF2(const Text_t *name,const Text_t *title):
  HReconstructor(name,title)
{
  setDef();
}

void HSplineTrackF2::setDef(void) {
  C = 299792458.;
  fCatSplineTrack = NULL;
  fCatMdcSegSim   = NULL;
  fMdcGeometry    = NULL;
  fSpecGeomPar    = NULL;
  Spline          = NULL;
  fMetaMatchIter  = NULL;
  fCatMdcTrkCand  = NULL;
  fCatTof         = NULL;
  fCatTofCluster  = NULL;
  fCatRpcCluster  = NULL;
  fCatShowerHit   = NULL;
  fCatEmcCluster  = NULL;
  field           = NULL;
  corr            = NULL;
  qSpline         = -1.f;
  fScal           =  0.f;
  qIOMatching     = -1.f;
  isSplinePar     = kFALSE;
  for(Int_t i = 0; i < 3; ++i)
    {
      pTofHit[0]  = NULL;
    }
  segments[0]     = NULL;
  segments[1]     = NULL;
  pRpc            = NULL;
}

void HSplineTrackF2::makeSplinePar()
{ 
  isSplinePar = kTRUE;
}

HSplineTrackF2::~HSplineTrackF2()
{
  if(fMetaMatchIter) delete fMetaMatchIter;
  HMdcSizesCells::deleteCont();
  //HMdcGetContainers::deleteCont();
}
Bool_t HSplineTrackF2::init()
{
  if (gHades)
    {
      for(Int_t i = 0; i < 6; i++)
	{
	  tRans[i] = 0;
	}
      
      HRuntimeDb *rtdb = gHades -> getRuntimeDb();
      HSpectrometer *spec = gHades -> getSetup();
      HEvent *event = gHades -> getCurrentEvent();
      if(rtdb && spec && event)
	{
	  field = (HMdcTrackGFieldPar*)(rtdb->getContainer("MdcTrackGFieldPar"));
	  corr = (HMdcTrackGCorrPar*)(rtdb->getContainer("MdcTrackGCorrPar"));
	  fSpecGeomPar = (HSpecGeomPar*)(rtdb->getContainer("SpecGeomPar"));
	  pMagnet = (HMagnetPar*)(rtdb->getContainer("MagnetPar"));
	  fGetCont = HMdcGetContainers::getObject();
	  pSizesCells = HMdcSizesCells::getObject();
	  fGetCont -> getMdcGeomPar();
	  fGetCont -> getSpecGeomPar();
	} 
      
      fCatMdcTrkCand = event -> getCategory(catMdcTrkCand);
      if(!fCatMdcTrkCand) return kFALSE;
      fCatMetaMatch = event -> getCategory(catMetaMatch);
      if (!fCatMetaMatch) return kFALSE;
      fMetaMatchIter = (HIterator*)fCatMetaMatch->MakeIterator();
      if(!fMetaMatchIter) return kFALSE;
      fCatMdcSegSim = event -> getCategory(catMdcSeg);
      fCatTof = event -> getCategory(catTofHit);
      if(!fCatTof) Warning("init", "NO catTofHit in input!");;
      fCatTofCluster = event -> getCategory(catTofCluster);
      if(!fCatTofCluster) Warning("init","No catTofClustter in input!");
      fCatRpcCluster = event -> getCategory(catRpcCluster);
      if(!fCatRpcCluster) Warning("init", "NO catRpcCluster in input!");;
      
      
      fCatShowerHit  = event -> getCategory(catShowerHit);
      fCatEmcCluster = event->getCategory(catEmcCluster);
      if(fCatShowerHit == NULL && fCatEmcCluster == NULL) {
	  Warning("init", "NO catShowerHit and fCatEmcCluster in input!");
      }
      
      fCatSplineTrack = event -> getCategory(catSplineTrack);
      if(!fCatSplineTrack)
	{
	  Int_t size[2] = {6,8000};
	  fCatSplineTrack = new HMatrixCategory("HSplineTrack",2,size,0.5);  
	  if(fCatSplineTrack)
	    { 
	    event -> addCategory(catSplineTrack,fCatSplineTrack,"SplineTrack");
	    }	
	}
      
      fCatSplinePar = event -> getCategory(catSplinePar);
      if(!fCatSplinePar && isSplinePar)
	{
	  Int_t size[2] = {6,8000};
	  fCatSplinePar = new HMatrixCategory("HSplinePar",2,size,0.5);  
	  if(fCatSplinePar)
	    {
	    event -> addCategory(catSplinePar,fCatSplinePar,"SplinePar");
	    }	
	}    
	    
	    
    }
  return kTRUE;
}
Bool_t HSplineTrackF2::reinit()
{
  Spline=corr -> getSPline();
  if(!Spline -> splineIsInitialized())
    {
      Error("reinit()","HMetaMatch2 is not initialzed! Run HMetaMatchF2 task in front of HSplineTrackF2 !!!");
      return kFALSE;
    }
  //if(!Spline -> splineKickIsInitialized())
//    {
//      Error("reinit()","HMetaMatch2 is not initialzed! Run HMetaMatchF2 task in front of HSplineTrackF2 !!!");
//      return kFALSE;
//    }
  
  HMdcTrackGCorrections *corrScan[3];
  corr -> getCorrScan(corrScan);
  evHeader = gHades -> getCurrentEvent() -> getHeader();
  for(Int_t i=0; i<6; i++)
    {
      tRans[i]=0;
    }
  Spline -> setDataPointer(field -> getPointer(),corr -> getCorr1());
  Spline -> setCorrScan(corrScan);
  if(pMagnet -> getPolarity() >= 0)
    {
      Spline -> setMagnetScaling(pMagnet -> getScalingFactor());
      fScal = pMagnet -> getScalingFactor();
    }
  else 
  {
     Spline -> setMagnetScaling(pMagnet -> getScalingFactor()*(-1.));
     fScal = pMagnet -> getScalingFactor()*(-1.);
    }
  return kTRUE;
}

Bool_t HSplineTrackF2::finalize()
{
  return kTRUE;
}

Int_t HSplineTrackF2::execute()
{
 fMetaMatchIter -> Reset();
  while((pMetaMatch = (HMetaMatch2*)(fMetaMatchIter -> Next()))!=0)
    {
      if( !doMomentum(pMetaMatch) ) continue;
         fillData(segments[0], kFALSE);
    }
  return 0;
}


Bool_t HSplineTrackF2::doMomentum(HMetaMatch2 *pMetaMatch)
{ //Impuls hesblamasini bashla()

  sector = pMetaMatch -> getSector();
  sectorloc.set(1,(Int_t)sector);
  indTrkCand = pMetaMatch -> getTrkCandInd();
  pMdcTrkCand=(HMdcTrkCand*)fCatMdcTrkCand->getObject(indTrkCand);
  if(!pMdcTrkCand) return kFALSE;
  index1 = pMdcTrkCand -> getSeg1Ind();
  index2 = pMdcTrkCand -> getSeg2Ind();
  if(index1 < 0 || index2 < 0) return kFALSE;
   segments[0] = (HMdcSeg*)fCatMdcSegSim -> getObject(index1);
   segments[1] = (HMdcSeg*)fCatMdcSegSim -> getObject(index2);
   
   if(tRans[(Int_t)sector] == 0)
     {
       tRans[(Int_t)sector] = new HGeomTransform();
       if(!fGetCont -> getLabTransSec(*(tRans[(Int_t)sector]),sector))
	 {
	   return kFALSE;
	 }
     }
      
   HVertex &vertex = gHades->getCurrentEvent() -> getHeader() -> getVertex();            
   tarDist = Spline -> calcTarDist(vertex,segments[0],tRans[(Int_t)sector]);
   
   system = pMetaMatch -> getSystem();
   if(!segments[0] || !segments[1]) {qIOMatching = -1.; return kFALSE;}
   qIOMatching=Spline->calcIOMatching(segments);
   calcMomentum(segments);  //not this: calcMomentum(segments,pMetaMatch);     

   if(fScal != 0.){
       polarity = Spline -> getPolarity() ;
   } else {
       polarity = 1;
   }
   return kTRUE;
}

Bool_t HSplineTrackF2::doMassStuff(HMetaMatch2 *pMetaMatch)
{ 
  Bool_t isMatched = kFALSE; 
  if( pMetaMatch -> getSystem() == -1) return kFALSE;  
  
  if( pMetaMatch -> getNRpcClusters() )
    { 
      isMatched = kTRUE; 
      doMassStuff2("rpc", pMetaMatch);
    }
  if( fCatShowerHit!=NULL &&  pMetaMatch -> getNShrHits() )
    {
      isMatched = kTRUE;
      doMassStuff2("shower", pMetaMatch);
    }
  else if( fCatEmcCluster!=NULL && pMetaMatch -> getNEmcClusters() )
    {
      isMatched = kTRUE;
      doMassStuff2("emc", pMetaMatch);
    }
  if ( pMetaMatch -> getNTofHits() )
    {
      isMatched = kTRUE;
      doMassStuff2("tof", pMetaMatch);
    }
  if(!isMatched) return kFALSE;
  return kTRUE;
}

void  HSplineTrackF2::doMassStuff2(TString opt, HMetaMatch2 *pMetaMatch )
{
  if( opt.Contains("rpc") )
    {
      for(UChar_t n = 0; n < pMetaMatch -> getNRpcClusters(); ++n )
	{
	  indRpc = pMetaMatch -> getRpcClstInd(n);
	  if( indRpc < 0 ) 
	    {
	      Warning("Spline","Rpc index is < 0, DISASTER!");
	      continue;
	    }
	  
	  pRpc = (HRpcCluster*)fCatRpcCluster -> getObject(indRpc);
	  if(!pRpc) 
	    { 
	      Warning("Spline","Pointer to Rpc is NULL, DISASTER!");
	    }

	  calcBeta(pRpc -> getTof(), pRpc -> getXSec(), pRpc -> getYSec(), pRpc -> getZSec());
	  fillData(segments[0]);    
	}
    }

  if( opt.Contains("tof") )
    {
      for(UChar_t n = 0; n < pMetaMatch -> getNTofHits(); ++n )
	{
	  indTof[0]  = pMetaMatch -> getTofHit1Ind(n);
	  indTof[1]  = pMetaMatch -> getTofHit2Ind(n);
	  indTof[2]  = pMetaMatch -> getTofClstInd(n);

	  
	  for(Int_t i = 0; i < 3; ++i )
	    {
	      if( indTof[i] < 0 ) continue;
		
		  if (i == 2)
		    pTofHit[i] = (HTofHit*)fCatTofCluster->getObject(indTof[i]);
		  else
		    pTofHit[i] = (HTofHit*)fCatTof->getObject(indTof[i]);
		  if( !pTofHit[i] )
		    {
		      Warning("Spline","Pointer to Tof is NULL, DISASTER!");
		      continue;
		    }

		  pTofHit[i] -> getXYZLab(xTof, yTof, zTof);
                  pointMeta.setXYZ(xTof,yTof,zTof);
		  pointMeta = tRans[(Int_t)sector]->transTo(pointMeta);
		  calcBeta(pTofHit[i] -> getTof(), pointMeta.getX(), pointMeta.getY(), pointMeta.getZ());  
		  fillData(segments[0]);
		
	    } 
	}
    }
    
    
    
  
  if( opt.Contains("shower"))
    {
      
    
      for(UChar_t n = 0; n < pMetaMatch -> getNShrHits(); ++n )
	{
	  indShower = pMetaMatch -> getShowerHitInd(n);
	  if( indShower < 0 ) 
	    { 
	      Warning("Spline","Index of shower is < 0, DISASTER!");
	      continue;
            }
	    
 	    pShowerHit = (HShowerHit*)fCatShowerHit -> getObject(indShower);
                  
            if(!pShowerHit) 
	    { 
	      Warning("Spline","Pointer to Shower is NULL, DISASTER!");
	    }        
            
	     //pShowerHit -> getLabXYZ(&xTof,&yTof,&zTof);
	
	     fillData(segments[0], kFALSE);
	}
      	
    }
    
  if( opt.Contains("emc"))
    {
      
    
      for(UChar_t n = 0; n < pMetaMatch -> getNEmcClusters(); ++n )
	{
	  indEmc = pMetaMatch->getEmcClusterInd(n);
	  if( indEmc < 0 ) 
	    { 
	      Warning("Spline","Index of emc is < 0, DISASTER!");
	      continue;
            }
	    
 	    pEmcCluster = (HEmcCluster*)fCatEmcCluster -> getObject(indEmc);
                  
            if(!pEmcCluster) 
	    { 
	      Warning("Spline","Pointer to Emc is NULL, DISASTER!");
	    }        
            
	    pEmcCluster -> getXYZLab(xTof,yTof,zTof);
            pointMeta.setXYZ(xTof,yTof,zTof);
	    pointMeta = tRans[(Int_t)sector]->transTo(pointMeta);
            calcBeta(pEmcCluster->getTime(), pointMeta.getX(), pointMeta.getY(), pointMeta.getZ());  
            fillData(segments[0]);
	}
      	
    }
    	
}

void HSplineTrackF2::calcBeta(Float_t tof, Float_t x, Float_t y, Float_t z)
{

    if(fScal != 0.)
    {
	distanceTof = Spline -> getMetaDistance(x*0.1, y*0.1, z*0.1);
	const HGeomVector& targetPos=((*pSizesCells)[sector]).getTargetMiddlePoint();
	HGeomVector POINT1 = Spline -> getPointOne();
	POINT1 *= 10.;
	Double_t dist = (POINT1 - targetPos).length();
	TOFdistance = dist + distanceTof*10.; //in mm
	beta = TOFdistance/tof/C;
	beta *= 1e6;
	mass2 = Momentum*Momentum*(1-beta*beta)/(beta*beta);
	polarity = Spline -> getPolarity();
    } else {
	TOFdistance  = 3000;
	beta     = 1;
	mass2    = 10000;
        polarity = 1;

    }
}
 
void HSplineTrackF2::calcMomentum(HMdcSeg *segments[])
{
    if(fScal != 0.){

	if(segments[1] -> getHitInd(1) == -1)
	{
	    //cout<<"3 chamber hali"<<endl;
	    Momentum = Spline -> calcMomentum123(segments,kTRUE,segments[0] -> getZ());
	    numChambers = 3;
	}
	else if(segments[1] -> getHitInd(0) == -1)
	{
	    Momentum = Spline -> calcMomentum123P4(segments,kTRUE,segments[0] -> getZ());
	    numChambers = 3;
	}
	else
	{
	    //cout<<"4 chamber hali"<<endl;
	    Momentum = Spline -> calcMomentum(segments,kTRUE,segments[0] -> getZ());
	    numChambers = 4;
	}
	Momentum /= 0.7215/fScal;
	qSpline = Spline -> getqSpline();
    } else {

	Momentum    = 5000.;
        numChambers = 4;
        qSpline     = 1;
    }
}

void HSplineTrackF2::calcMomentum(HMdcSeg *segments[], HMetaMatch2 *pMetaMatch)
{
  calcMomentum(segments);
  doMassStuff(pMetaMatch);
}

HSplineTrack*  HSplineTrackF2::fillData(HMdcSeg *segment, Bool_t condition)
{
  Int_t indexspline;
  HSplineTrack *sp=(HSplineTrack*)fCatSplineTrack -> getNewSlot(sectorloc,&indexspline);
  if(!sp)
    {
      Error("fillData","No slot available");
      return 0;
    }
  sp = (HSplineTrack*)(new(sp)HSplineTrack);
  if(sp)
    {        

      sp -> setP(Momentum,0.);
      sp -> setZ(segment->getZ(),segment->getErrZ());
      sp -> setR(segment->getR(),segment->getErrR());
      sp -> setTheta(segment->getTheta(),segment->getErrTheta());
      sp -> setPhi(segment->getPhi(),segment->getErrPhi());
      sp -> setPolarity(polarity*pMagnet -> getPolarity());
      sp -> setSector(sector);
      pMetaMatch -> setSplineInd(indexspline);
      //         sp->setTofHitInd(pMetaMatch->getTofHitInd());
      //         sp->setShowerHitInd(pMetaMatch->getShowerHitInd());
      sp -> setNumOfChambers(numChambers);
      //         if(qSpline<5.)
      sp -> setQSpline(qSpline);
      sp -> setTarDist(tarDist);
      sp -> setIOMatching(qIOMatching);
      if(condition)
	{
	  sp -> setTofDist(TOFdistance);
	  sp -> setBeta(beta);
	  sp -> setMass2(mass2,0.);
	  sp -> setTof(tof);
	}
      
      if(isSplinePar) {fillParData();}
    }
  else
    Error("FillData","No slots free");
  return sp;
}


HSplinePar *HSplineTrackF2::fillParData()
{
   Int_t indexsplinepar;
   HSplinePar *sppar=(HSplinePar*)fCatSplinePar->
      getNewSlot(sectorloc,&indexsplinepar);
   if(!sppar)
      {
         Error("fillData","No slot available");
	 return 0;
      }
   sppar=(HSplinePar*)(new(sppar)HSplinePar);
   if(sppar)
      {    
         Spline -> getXYpoint(xPoints,yPoints,zPoints);
	 sppar  -> setSplinePoints(xPoints,yPoints,zPoints);
      }
   return sppar;
}






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