#ifndef HMETAMATCHF2_H
#define HMETAMATCHF2_H
#include "hreconstructor.h"
#include "hgeomvector.h"
#include "hlocation.h"
#include "hmdckickplane.h"
class HCategory;
class HMdcSeg;
class HTofCluster;
class HTofHit;
class HRpcCluster;
class HShowerHit;
class HEmcCal;
class HEmcCluster;
class HIterator;
class HMdcTrkCand;
class HMdcTrackGSpline;
class HMetaMatch2;
class HGeomTransform;
class HMdcGetContainers;
class HRichHit;
class HTofGeomPar;
class HRpcGeomPar;
class HEmcGeomPar;
class HModGeomPar;
class HShowerGeometry;
class HMetaMatchPar;
class HMdcSizesCells;
#define RICH_BUF 3
#define MMF_BUF 5
class HMetaMatchF2 : public HReconstructor {
private:
HMdcSizesCells *pSizesCells;
HMetaMatchPar *fMatchPar;
Float_t invSigma2TofX[6];
Float_t invSigma2TofY[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 sRpcX[6];
Float_t sRpcY[6];
Float_t sEmcX[6];
Float_t sEmcY[6];
Float_t quality2RPCCut[6];
Float_t quality2SHOWERCut[6];
Float_t quality2EMCCut[6];
Float_t dThRich[6];
Float_t dPhRich[6];
Float_t dPhRichOff[6];
Float_t qualityRichCut[6];
Float_t richThetaMinCut[6];
Float_t richThetaMaxCut[6];
Float_t sigmaEmc;
const HGeomTransform *labTrans[6];
HMdcGetContainers *fGetCont;
HMetaMatch2 *meta;
HCategory *fCatTrkCand;
HCategory *fCatMetaMatch;
HCategory *fCatMdcSeg;
HCategory *fCatTof;
HCategory *fCatTofCluster;
HCategory *fCatShower;
HCategory *fCatRich;
HCategory *fCatRpcCluster;
HCategory *fCatEmc;
HCategory *fCatEmcCluster;
HMdcKickPlane kickplane;
HMdcTrackGSpline *pSpline;
HIterator *fTrkCandIter;
HIterator *iterTof;
HIterator *iterTofCluster;
HIterator *iterShower;
HIterator *iterRich;
HIterator *iterRpcCluster;
HLocation sectorLoc;
HTofGeomPar *fTofGeometry;
HShowerGeometry *fShrGeometry;
HRpcGeomPar *fRpcGeometry;
HEmcGeomPar *fEmcGeometry;
Int_t nRpcClusters[6];
HRpcCluster* fRpcClusters[6][200];
Int_t nShowerHits[6];
HShowerHit* fShowerHits[6][200];
Short_t indexShrHit[6][200];
Int_t nTofHits[6];
HGeomVector tofHits[6][100];
Char_t tofModule[6][100];
Short_t indexTofHit[6][100];
Char_t tofClustSize[6][100];
Int_t nEmcHits[6];
HEmcCal* fEmcHits[6][160];
Short_t indexEmcHit[6][160];
Int_t nEmcClusters[6];
HEmcCluster* fEmcCluster[6][160];
Short_t indexEmcCluster[6][160];
HMdcSeg *segments[2];
HGeomVector mdcTrackPar[4];
UChar_t nTofMatched;
Float_t qual2TofBestAr[MMF_BUF];
Float_t qual2TofAr[MMF_BUF][9];
Short_t tofInd[MMF_BUF][3];
UChar_t nShrMatched;
Float_t qual2ShrAr[MMF_BUF][3];
Short_t shrInd[MMF_BUF];
UChar_t nRpcMatched;
Float_t qual2RpcAr[MMF_BUF][3];
Short_t rpcInd[MMF_BUF];
UChar_t nEmcMatched;
Float_t qual2EmcAr[MMF_BUF][3];
Short_t emcInd[MMF_BUF];
UChar_t nEmcClusMatched;
Float_t qual2EmcClusAr[MMF_BUF][4];
Short_t emcClusInd[MMF_BUF];
UChar_t nRichId;
Short_t richInd[RICH_BUF];
Float_t qualRich[RICH_BUF];
Int_t sector;
Int_t nShowerHitsSec;
HShowerHit **fShowerHitsSec;
Short_t *indexShrHitSec;
Int_t nRpcClustersSec;
HRpcCluster **fRpcClustersSec;
Short_t *indexRpcClustersSec;
HGeomVector p1SegInMod;
HGeomVector p2SegInMod;
Double_t invDZ;
Int_t nTofHitsSec;
HGeomVector *tofHitsSec;
Short_t *indexTofHitSec;
Char_t *tofClustSizeSec;
Char_t *tofModuleSec;
const HGeomTransform* secLabTrans;
Int_t nEmcHitsSec;
HEmcCal **fEmcHitsSec;
Short_t *indexEmcHitSec;
Int_t nEmcClusSec;
HEmcCluster **fEmcClusSec;
Short_t *indexEmcClusSec;
Bool_t isPrint;
Float_t dX;
Float_t dY;
Float_t qual2TofC[9];
Short_t indTofC[3];
Float_t emcPath;
static Float_t scaleRpcRMS [2];
static Float_t scaleShowerRMS[2];
static Float_t scaleTofRMS [2];
static Float_t scaleEmcRMS [2];
static Float_t scaleRpcCut ;
static Float_t scaleShowerCut;
static Float_t scaleTofCut ;
static Float_t scaleEmcCut ;
Bool_t stNotMatTracks;
public:
HMetaMatchF2(void);
HMetaMatchF2(const Text_t *name,const Text_t *title);
~HMetaMatchF2();
Int_t execute();
Bool_t init();
Bool_t reinit();
Bool_t finalize();
void storeNotMatchedTracks(Bool_t fl=kTRUE) {stNotMatTracks = fl;}
static void setScaleRMS(Float_t tofrmsx,Float_t tofrmsy,Float_t rpcrmsx,Float_t rpcrmsy,Float_t shrrmsx,Float_t shrrmsy) {
scaleRpcRMS [0] = rpcrmsx;
scaleRpcRMS [1] = rpcrmsy;
scaleShowerRMS[0] = shrrmsx;
scaleShowerRMS[1] = shrrmsy;
scaleTofRMS [0] = tofrmsx;
scaleTofRMS [1] = tofrmsy;
scaleEmcRMS [0] = shrrmsx;
scaleEmcRMS [1] = shrrmsy;
}
static void setScaleCut(Float_t tofcut,Float_t rpccut,Float_t shrcut) {
scaleRpcCut = rpccut;
scaleTofCut = tofcut;
scaleShowerCut = shrcut;
scaleEmcCut = shrcut;
}
private:
void setInitParam(void);
void makeRichMatching(void);
void collectTofHits(void);
void collectRpcClusters(void);
void collectShowerHits(void);
void collectEmcHits(void);
void collectEmcClusters(void);
void makeOuterSegMatch(HMdcTrkCand* pTrkCand);
Bool_t getMetaMatchSlot(Int_t trkCandIndex);
Bool_t quality2TofClustS2(Int_t& hit);
Bool_t quality2TofClustS1(Int_t hit);
Bool_t quality2TofHit(Int_t hit);
Float_t quality2Shower(HShowerHit* pShrHit);
Float_t quality2Rpc(HRpcCluster* pRpcCl);
Float_t quality2Emc(HEmcCal* pEmcHit,HModGeomPar *pmodgeom,Double_t xSegCr,Double_t ySegCr);
Float_t quality2EmcClus(HEmcCluster* pEmcClus,Double_t xSegCr,Double_t ySegCr);
void setCurrentSector(Int_t sec);
void addTofCluster(HTofCluster* pTofCluster);
void addTofHit(HTofHit* pTofHit,Int_t clSize=0);
void addTof(HTofHit* pTofHit,Int_t index, Int_t clSize);
void addRing(Float_t quality, Short_t ind, Short_t* indTable,UChar_t& nRich);
void setMatchingParam(void);
void insertQual(Float_t qual,Short_t ind,UChar_t& nEl,Float_t qualArr[][3],Short_t indArr[]);
void insertQualTof(Float_t qual);
void insertQualEmcCl(Float_t qual,Short_t ind,UChar_t& nEl,Float_t qualArr[][4],Short_t indArr[]);
Float_t emcCellPath(HEmcCluster* pEmcClus,HModGeomPar *pmodgeom,Double_t xSegCr,Double_t ySegCr);
void transMdcToMeta(const HGeomTransform& modSys);
public:
ClassDef(HMetaMatchF2,0)
};
#endif