ROOT logo
#ifndef HParticleMetaMatcher_h
#define HParticleMetaMatcher_h

#include "hgeomtransform.h"
#include "hgeomvector.h"
#include "hreconstructor.h"

#include "hrpccluster.h"
#include "hemccluster.h"
#include "htofcluster.h"


#include "TVector3.h"

#include <vector>


#define EMCMAXCELL 163
#define RPCMAXCELL 31

using namespace std;

// from hydra
class HCategory;
class HGeomVector;
class HMetaMatchPar;
class HRpcGeomPar;
class HRpcGeomCellPar;
class HEmcGeomPar;
class HTofGeomPar;
class HParticleCand;
class HSpecGeomPar;


class HParticleMetaMatcher : public HReconstructor {

protected:

    HCategory*       fCatEmcCluster;  //! pointer to the Emc cluster category
    HCategory*       fCatTofHit;      //! pointer to the Tof hit category
    HCategory*       fCatTofCluster;  //! pointer to the Tof cluster category
    HCategory*       fCatRpcCluster;  //! pointer to the Rpc cluster category.

    HRpcGeomPar*     fRpcGeometry;    //! Rpc geometry
    HRpcGeomCellPar* pGeomCellPar;    //! Rpc cell info
    HEmcGeomPar*     fEmcGeometry;    //! Emc geometry
    HTofGeomPar*     fTofGeometry;    //! TOF geometry
    HSpecGeomPar*    pSpecGeomPar;    //! sector lab trans

    HGeomTransform   labSecTrans[6];       //! [sec]
    HGeomTransform   modSecTransRpc[6];    //! [sec]
    HGeomTransform   modSecTransEmc[6];    //! [sec]
    HGeomTransform   modSecTransTof[6][8]; //! [sec][mod]

    TVector3         normVecRpc[6][3];   //! [sec][plane col{0,2,4}, {1,3,5}, mid]  normal vector on the RPC module in the sector coordinate system
    TVector3         normVecEmc[6];      //! [sec] normal vector on the Emc module in the sector coordinate system
    TVector3         normVecTof[6][8];   //! [sec][mod] normal vector on each Tof module in the sector coordinate system

    TVector3         centerVecRpc[6][3]; //! [sec][plane col{0,2,4}, {1,3,5}, mid] center vector on the RPC module in the sector coordinate system
    TVector3         centerVecEmc[6];    //! [sec] center vector on the Emc module in the sector coordinate system
    TVector3         centerVecTof[6][8]; //! [sec][mod] center vector on each Tof module in the sector coordinate system


    HGeomVector cellRPC[6][6][RPCMAXCELL][4];  //! [sec][col][cell]  4points
    HGeomVector cellEMC[6][EMCMAXCELL][4];     //! [sec][cell]       4points
    HGeomVector cellTOF[6][8][8][4];           //! [sec][mod][cell]  4points


    Float_t DPlanesRpc;        //! RPC displacement for collumns

    //------------------------------------
    // return fake objects for recalcXXX() functions
    HRpcCluster rpccluster;   //!
    HTofCluster tofcluster;   //!
    HEmcCluster emccluster;   //!

    //------------------------------------
    // MDC hit on meta calculated by  recalcXXX() functions
    HGeomVector  trackMetaMod; //!
    HGeomVector  trackMetaSec; //!
    HGeomVector  trackMetaLab; //!

    Bool_t fDebug;          //! switch print on/off

    void   calcSegPoints(TVector3& p1,TVector3& p2,Double_t phiseg,Double_t thetaseg,Double_t roseg,Double_t zseg);
    Bool_t findIntersectionLinePlane(TVector3 &pointIntersect,
				     const TVector3 &pos, const TVector3 &dir,
				     const TVector3 &planeCenter, const  TVector3 &planeNormal);
    Bool_t traceToMeta(const HParticleCand* cand,TVector3 &metaHit, const TVector3 &metaCenter, const TVector3 &metaNorm);

    Bool_t isInRpcCell(HGeomVector& vmod,Int_t s,Int_t col,Int_t c);
    Bool_t isInTofCell(HGeomVector& vmod,Int_t s,Int_t col,Int_t c);
    Bool_t isInEmcCell(HGeomVector& vmod,Int_t s,Int_t c);

public:

    HParticleMetaMatcher(const Text_t *name = "HParticleMetaMatcher",const Text_t *title ="HParticleMetaMatcher");

    virtual ~HParticleMetaMatcher() { ; }
    void     setDebug(Bool_t debug=kTRUE) {fDebug = debug;}

    const HRpcCluster*  recalcRpc(HParticleCand* cand);
    const HTofCluster*  recalcTof(HParticleCand* cand);
    const HEmcCluster*  recalcEmc(HParticleCand* cand);

    const HGeomVector&  getTrackMetaMod() { return trackMetaMod;}  // only valid direct following recalcXXX() call!
    const HGeomVector&  getTrackMetaSec() { return trackMetaSec;}  // only valid direct following recalcXXX() call!
    const HGeomVector&  getTrackMetaLab() { return trackMetaLab;}  // only valid direct following recalcXXX() call!

    Bool_t              predictRpcCell(HParticleCand* cand,HGeomVector& hit1,HGeomVector& hit2,Int_t& s,Int_t& col1,Int_t& cell1,Int_t& col2,Int_t& cell2);
    Bool_t              predictTofCell(HParticleCand* cand,HGeomVector& hit0,HGeomVector& hit1,Int_t& s,Int_t& mod0,Int_t& cell0,Int_t& mod1,Int_t& cell1);
    Bool_t              predictEmcCell(HParticleCand* cand,HGeomVector& hit,Int_t& s,Int_t& pos,Int_t& cell);


    const HGeomVector* getRpcCellGeom(Int_t s,Int_t col,Int_t cell);
    const HGeomVector* getTofCellGeom(Int_t s,Int_t mod,Int_t cell);
    const HGeomVector* getEmcCellGeom(Int_t s,Int_t cell);
    void               getEmcCellArray(Int_t s,Int_t cell,vector<Int_t>& vcells);
    Bool_t  init           ();
    Bool_t  reinit         ();
    Int_t   execute()  { return 0; }
    Bool_t  finalize() { return kTRUE; }

    ClassDef(HParticleMetaMatcher,0)
};

#endif // HParticleMetaMatcher_h

 hparticlemetamatcher.h:1
 hparticlemetamatcher.h:2
 hparticlemetamatcher.h:3
 hparticlemetamatcher.h:4
 hparticlemetamatcher.h:5
 hparticlemetamatcher.h:6
 hparticlemetamatcher.h:7
 hparticlemetamatcher.h:8
 hparticlemetamatcher.h:9
 hparticlemetamatcher.h:10
 hparticlemetamatcher.h:11
 hparticlemetamatcher.h:12
 hparticlemetamatcher.h:13
 hparticlemetamatcher.h:14
 hparticlemetamatcher.h:15
 hparticlemetamatcher.h:16
 hparticlemetamatcher.h:17
 hparticlemetamatcher.h:18
 hparticlemetamatcher.h:19
 hparticlemetamatcher.h:20
 hparticlemetamatcher.h:21
 hparticlemetamatcher.h:22
 hparticlemetamatcher.h:23
 hparticlemetamatcher.h:24
 hparticlemetamatcher.h:25
 hparticlemetamatcher.h:26
 hparticlemetamatcher.h:27
 hparticlemetamatcher.h:28
 hparticlemetamatcher.h:29
 hparticlemetamatcher.h:30
 hparticlemetamatcher.h:31
 hparticlemetamatcher.h:32
 hparticlemetamatcher.h:33
 hparticlemetamatcher.h:34
 hparticlemetamatcher.h:35
 hparticlemetamatcher.h:36
 hparticlemetamatcher.h:37
 hparticlemetamatcher.h:38
 hparticlemetamatcher.h:39
 hparticlemetamatcher.h:40
 hparticlemetamatcher.h:41
 hparticlemetamatcher.h:42
 hparticlemetamatcher.h:43
 hparticlemetamatcher.h:44
 hparticlemetamatcher.h:45
 hparticlemetamatcher.h:46
 hparticlemetamatcher.h:47
 hparticlemetamatcher.h:48
 hparticlemetamatcher.h:49
 hparticlemetamatcher.h:50
 hparticlemetamatcher.h:51
 hparticlemetamatcher.h:52
 hparticlemetamatcher.h:53
 hparticlemetamatcher.h:54
 hparticlemetamatcher.h:55
 hparticlemetamatcher.h:56
 hparticlemetamatcher.h:57
 hparticlemetamatcher.h:58
 hparticlemetamatcher.h:59
 hparticlemetamatcher.h:60
 hparticlemetamatcher.h:61
 hparticlemetamatcher.h:62
 hparticlemetamatcher.h:63
 hparticlemetamatcher.h:64
 hparticlemetamatcher.h:65
 hparticlemetamatcher.h:66
 hparticlemetamatcher.h:67
 hparticlemetamatcher.h:68
 hparticlemetamatcher.h:69
 hparticlemetamatcher.h:70
 hparticlemetamatcher.h:71
 hparticlemetamatcher.h:72
 hparticlemetamatcher.h:73
 hparticlemetamatcher.h:74
 hparticlemetamatcher.h:75
 hparticlemetamatcher.h:76
 hparticlemetamatcher.h:77
 hparticlemetamatcher.h:78
 hparticlemetamatcher.h:79
 hparticlemetamatcher.h:80
 hparticlemetamatcher.h:81
 hparticlemetamatcher.h:82
 hparticlemetamatcher.h:83
 hparticlemetamatcher.h:84
 hparticlemetamatcher.h:85
 hparticlemetamatcher.h:86
 hparticlemetamatcher.h:87
 hparticlemetamatcher.h:88
 hparticlemetamatcher.h:89
 hparticlemetamatcher.h:90
 hparticlemetamatcher.h:91
 hparticlemetamatcher.h:92
 hparticlemetamatcher.h:93
 hparticlemetamatcher.h:94
 hparticlemetamatcher.h:95
 hparticlemetamatcher.h:96
 hparticlemetamatcher.h:97
 hparticlemetamatcher.h:98
 hparticlemetamatcher.h:99
 hparticlemetamatcher.h:100
 hparticlemetamatcher.h:101
 hparticlemetamatcher.h:102
 hparticlemetamatcher.h:103
 hparticlemetamatcher.h:104
 hparticlemetamatcher.h:105
 hparticlemetamatcher.h:106
 hparticlemetamatcher.h:107
 hparticlemetamatcher.h:108
 hparticlemetamatcher.h:109
 hparticlemetamatcher.h:110
 hparticlemetamatcher.h:111
 hparticlemetamatcher.h:112
 hparticlemetamatcher.h:113
 hparticlemetamatcher.h:114
 hparticlemetamatcher.h:115
 hparticlemetamatcher.h:116
 hparticlemetamatcher.h:117
 hparticlemetamatcher.h:118
 hparticlemetamatcher.h:119
 hparticlemetamatcher.h:120
 hparticlemetamatcher.h:121
 hparticlemetamatcher.h:122
 hparticlemetamatcher.h:123
 hparticlemetamatcher.h:124
 hparticlemetamatcher.h:125
 hparticlemetamatcher.h:126
 hparticlemetamatcher.h:127
 hparticlemetamatcher.h:128