#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;
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;  
    HCategory*       fCatTofHit;      
    HCategory*       fCatTofCluster;  
    HCategory*       fCatRpcCluster;  
    HRpcGeomPar*     fRpcGeometry;    
    HRpcGeomCellPar* pGeomCellPar;    
    HEmcGeomPar*     fEmcGeometry;    
    HTofGeomPar*     fTofGeometry;    
    HSpecGeomPar*    pSpecGeomPar;    
    HGeomTransform   labSecTrans[6];       
    HGeomTransform   modSecTransRpc[6];    
    HGeomTransform   modSecTransEmc[6];    
    HGeomTransform   modSecTransTof[6][8]; 
    TVector3         normVecRpc[6][3];   
    TVector3         normVecEmc[6];      
    TVector3         normVecTof[6][8];   
    TVector3         centerVecRpc[6][3]; 
    TVector3         centerVecEmc[6];    
    TVector3         centerVecTof[6][8]; 
    HGeomVector cellRPC[6][6][RPCMAXCELL][4];  
    HGeomVector cellEMC[6][EMCMAXCELL][4];     
    HGeomVector cellTOF[6][8][8][4];           
    Float_t DPlanesRpc;        
    
    
    HRpcCluster rpccluster;   
    HTofCluster tofcluster;   
    HEmcCluster emccluster;   
    
    
    HGeomVector  trackMetaMod; 
    HGeomVector  trackMetaSec; 
    HGeomVector  trackMetaLab; 
    Bool_t fDebug;          
    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;}  
    const HGeomVector&  getTrackMetaSec() { return trackMetaSec;}  
    const HGeomVector&  getTrackMetaLab() { return trackMetaLab;}  
    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: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