#ifndef HSPLINETRACKF2_H
#define HSPLINETRACKF2_H
#include "hreconstructor.h"
#include "hgeomvector.h"
class HCategory;
class HMdcSeg;
class HMdcGeomPar;
class HTofGeomPar;
class HTofinoGeomPar;
class HSpecGeomPar;
class HIterator;
class HMdcTrackGFieldPar;
class HMdcTrackGCorrPar;
class HMdcTrackGSpline;
class HSplineTrack;
class HSplinePar;
class HGeomTransform;
class HTofHit;
class HMetaMatch2;
class HShowerHit;
class HEmcCluster;
class HMagnetPar;
class HMdcSizesCells;
class HEventHeader;
class HMdcGetContainers;
class HMdcTrkCand;
class HRpcCluster;
class HSplineTrackF2 : public HReconstructor {
private:
   HGeomVector pointMeta;
   HGeomTransform *tRans[6];
  
   HMdcSizesCells *pSizesCells;
   Float_t qIOMatching;
   HEventHeader *evHeader;
   Float_t tarDist;   
   Double_t target;
   Double_t distanceTof;
   Float_t xTof,yTof,zTof;
   Double_t C;
   Int_t system;
   Short_t outerHitInd;
   Short_t indTrkCand;
   Short_t index1;
   Short_t index2;
   Float_t tof;
   Float_t mass2;
   Float_t beta;
   Double_t TOFdistance;
   Char_t sector;
   HMdcGetContainers *fGetCont;
   HMdcSeg *segments[2];
   HRpcCluster *pRpc;
   Int_t polarity;
   Double_t dist;
   Short_t IndTrkCand;  
   Int_t tofClSize;
   Short_t metaInd;
   HSplineTrack *sp;
   HCategory *fCatMdcTrkCand;
   HCategory *fCatSplineTrack;
   HCategory *fCatSplinePar;
   HCategory *fCatMdcSegSim;
   HCategory *fCatTof;
   HCategory *fCatTofCluster;
   HMetaMatch2 *pMetaMatch;
   HMdcTrkCand *pMdcTrkCand;      
   HCategory *fCatRpcCluster;     
   HCategory *fCatShowerHit;    
   HCategory *fCatEmcCluster;
   HCategory *fCatMetaMatch;  
   HMdcGeomPar *fMdcGeometry;
   HSpecGeomPar *fSpecGeomPar;
   HTofHit *pTofHit[3];
   HShowerHit  *pShowerHit; 
   HEmcCluster *pEmcCluster;
   HMdcTrackGSpline *Spline;
   HIterator *fMetaMatchIter;
   HIterator *IterTof;
   HIterator *IterShower;
   HMdcTrackGFieldPar *field;
   HMdcTrackGCorrPar *corr;
   HMagnetPar *pMagnet;
   Float_t Momentum;
   Float_t errP,errMass2;
   HLocation sectorloc;
   void calcMomentum(HMdcSeg **,HMetaMatch2 *);
   void calcMomentum(HMdcSeg *segments[]);
   Bool_t doMassStuff(HMetaMatch2 *);
   void doMassStuff2(TString , HMetaMatch2 *); 
   void calcBeta(Float_t , Float_t , Float_t , Float_t );    
   Bool_t doMomentum(HMetaMatch2 *);
   Int_t firstCandIndex;
   Float_t fScal;
   Float_t qSpline;
   Int_t numChambers;
   
  
  
   Bool_t isSplinePar;
   Float_t xPoints[52];
   Float_t yPoints[52];
   Float_t zPoints[52];
public:
   HSplineTrack  *fillData(HMdcSeg *,Bool_t cond = kTRUE);
   
   HSplinePar  *fillParData();
   HSplineTrackF2(void);
   HSplineTrackF2(const Text_t name[],const Text_t title[]);
   ~HSplineTrackF2();
   Int_t  execute();
   Bool_t init();
   Bool_t reinit();
   Bool_t finalize();
   void   makeSplinePar();
   Short_t indRpc;
   Short_t indTof[3];
   Short_t indShower;
   Short_t indEmc;
  
   
private:   
   void setDef(void);
public:
   ClassDef(HSplineTrackF2,0)
      };
#endif