#ifndef HRKTRACKBF2_H
#define HRKTRACKBF2_H
#include "hreconstructor.h"
#include "hgeomtransform.h"
#include "hmdctrkcand.h"
#include "hmdcgetcontainers.h"
#include "htofclustersim.h"
class HCategory;
class HIterator;
class HMetaMatch2;
class HMetaMatchPar;
class HMdcSeg;
class HMdcHit;
class HMdcTrkCand;
class HBaseTrack;
class HSplineTrack;
class HShowerHit;
class HTofHit;
class HTofCluster;
class HRungeKutta;
class HRKTrackB;
class HMdcTrackGFieldPar;
class HMagnetPar;
class HSpecGeomPar;
class HMdcGeomPar;
class HTofGeomPar;
class HRpcGeomPar;
class HShowerGeometry;
class HEmcGeomPar;
class HMdcGetContainers;
class HMdcSizesCells;
class HRpcCluster;
class HEmcCluster;
class HRKTrackBF2 : public HReconstructor
{
private:
Float_t fieldFactor;
Short_t mode;
HGeomTransform secTrans[6];
HGeomTransform showerSM[6];
HGeomTransform emcSM[6];
HGeomTransform tofSM[6][8];
HGeomTransform rpcSM[6];
HGeomTransform transMetaSM;
Float_t sigma2TofX[6];
Float_t sigma2TofY[6];
Float_t sTofX[6];
Float_t sTofY[6];
Float_t quality2TOFCut[6];
Float_t sigma2MdcInRpcX[6];
Float_t sigma2MdcInRpcY[6];
Float_t sigma2MdcInShrX[6];
Float_t sigma2MdcInShrY[6];
Float_t sigma2MdcInEmcX[6];
Float_t sigma2MdcInEmcY[6];
Float_t sShowerX[6];
Float_t sShowerY[6];
Float_t sEmcX[6];
Float_t sEmcY[6];
Float_t sRpcX[6];
Float_t sRpcY[6];
Float_t quality2RPCCut[6];
Float_t quality2SHOWERCut[6];
Float_t quality2EMCCut[6];
HMdcTrackGFieldPar* field;
HMagnetPar* pMagnet;
HSpecGeomPar* fSpecGeomPar;
HMdcGetContainers* fGetCont;
HTofGeomPar* fTofGeometry;
HRpcGeomPar* fRpcGeometry;
HShowerGeometry* fShowerGeometry;
HEmcGeomPar* fEmcGeometry;
HMdcSizesCells* pMSizesCells;
HCategory* fCatMetaMatch;
HIterator* fMetaMatchIter;
HMetaMatch2* pMetaMatch;
HMetaMatchPar* fMatchPar;
HCategory* fCatMdcTrkCand;
HMdcTrkCand* pMdcTrkCand;
HCategory* fCatMdcSeg;
HCategory* fCatMdcHit;
HCategory* fSplineTrack;
HSplineTrack* pSplineTrack;
HCategory* fCatKine;
HCategory* fCatShower;
HCategory* fCatEmc;
HCategory* fCatTof;
HTofHit * pTofHit[3];
HCategory* fCatTofCluster;
HCategory* fCatRpcCluster;
HTofCluster* pTofCluster;
HCategory* fCatRKTrack;
HRungeKutta* pRungeKutta;
HLocation sectorloc;
Int_t sector;
Short_t system;
HMdcSeg* pMdcSeg1;
HMdcSeg* pMdcSeg2;
Bool_t mdcInstalled[4][6];
Float_t multSig[8];
Float_t vertex[3];
HGeomVector normVecRpc[6];
HGeomVector centerRpc[6];
HGeomVector normVecShower[6];
HGeomVector normVecEmc[6];
HGeomVector normVecTof[6][8];
HGeomVector metaNormVec;
HGeomVector pointMeta;
Bool_t success;
Short_t qRK;
Float_t pRK;
Float_t momentumGuess;
Float_t chiqRK;
Float_t trackLength;
Float_t tof;
Float_t metaeloss;
Float_t beta;
Float_t mass2;
Float_t RKxyzMETA[3];
Float_t xTof,yTof,zTof;
Float_t zMod;
Float_t dXrms2;
Float_t dYrms2;
Float_t dX, dY;
Float_t qualityRpc;
Float_t qualityShower;
Float_t qualityEmc;
Float_t qualityTof;
HShowerHit *pShowerHit;
HEmcCluster *pEmcCluster;
HRpcCluster *pRpc;
Short_t indRpc;
Short_t indTof[3];
Short_t indShower;
Short_t indEmc;
Bool_t doMassStuff();
void matchWithRpc();
void matchWithShower();
void matchWithEmc();
void matchWithTof();
void calcBeta(Float_t, Int_t , Bool_t option = kTRUE);
Int_t indexRK;
HRKTrackB* fillData(HMdcSeg*,HMdcSeg*,HSplineTrack*, Int_t &);
Int_t calcPosDirFromSegment(HMdcSeg* pSeg,Int_t ioseg,Double_t*,Double_t*,Bool_t flag);
void setMatchingParams(Int_t );
Float_t getQuality(Float_t, Float_t, Float_t, Float_t);
public:
HRKTrackBF2();
HRKTrackBF2(const Text_t name[], Short_t m = 2);
~HRKTrackBF2();
void clear();
Bool_t init();
Bool_t reinit();
Int_t execute();
Bool_t finalize() { return kTRUE; }
ClassDef(HRKTrackBF2,0)
};
#endif