#ifndef HMETAMATCH_H #define HMETAMATCH_H #include "hreconstructor.h" #include "TString.h" #include "TObject.h" #define RICH_TAB_SIZE 3 class HMetaMatch:public TObject { private: Short_t trkCandInd; // index of HTrkCand object Short_t showerHitInd; // index of HShowerHitTof object Short_t tofHitInd; // index of HTofHit or HTofCluster object Short_t nCandForMeta; // number of MetaMatch obj. for the same HTrkCand // >0 for first MetaMatch obj. in this chain // <0 one of the next MetaMatch obj. Short_t nextCandForMeta; // index of next MetaMatch obj. for the same HTrkCand // = -1 no next object Short_t firstCandForMeta; // index of the first MetaMatch obj. for the same HTrkCand in this chain Float_t qualityTOF; // MDC TOF matching quality Float_t qualitySHOWER; // MDC SHOWER matching quality Float_t dxMeta; // Deviation in X-coordinate in META between hit and segment Float_t dyMeta; // Deviation in X-coordinate in META between hit and segment Short_t splineInd; // index of HSplineTrack object Short_t rtInd; // index of HRtMetaTrack object Short_t kickInd; // index of HKickTrackB in catKickTrackB Short_t kick123Ind; // index of HKickTrack123B in catKickTrack123B Short_t rungeKuttaInd; // index of HRKTrackB in catRKTrackB Char_t sector; // sector number Short_t nRichId; // number of matched rings in aRichIndTable[] Short_t nRichIPUId; // number of matched rings in aRichIPUIndTable[] Int_t aRichIndTable[RICH_TAB_SIZE]; // arr.of indexes of HRichHit objects Int_t aRichIPUIndTable[RICH_TAB_SIZE]; // arr.of indexes of HRichHitIPU objects // arrais are sorted by matching quality Char_t flag; // User flags bit array (8 flags, one bit / flag) // First bit for spline track // Second bit for Rt track // Third bit for kick track // Fourth bit for kick123 track // Sixth bit reserved for rungeKutta track (but not yet implemented) // If flag for corresponding track =1, // this track is accepted Char_t tofClusterSize; // tofClusterSize / tofHitInd // ==0 / HTofHit index in catTofHit // >=1 / HTofCluster index in catTofCluster // ==-1 / HTofHit index; hit belong TofCluster // / with size >2 Short_t indMMForTofClst; // index of MetaMatch obj. with tofTofClusterSize>1 Short_t nextMMForTofHit; // index of MetaMatch obj. with next stripe(TofHit) from TofCluster Short_t numMMForSameMeta; // number of MetaMatch obj. for the same meta hit Short_t nextMMForSameMeta; // index of the next MetaMatch obj. for the same meta hit Short_t firstMMForSameMeta; // index of the first MetaMatch obj. for the same meta hit in this chain Float_t xSegCr; // x,y (z=0) - cross point of MdcSeg with meta Float_t ySegCr; // detector (tof or shower) in module coor.sys. // of this meta hit public: HMetaMatch(); ~HMetaMatch(){;} HMetaMatch(Short_t sec, Short_t tkInd, Short_t ind); HMetaMatch(HMetaMatch* fMetaMatch, Short_t ind); HMetaMatch& operator=(HMetaMatch& met); void setTrkCandInd(Short_t trkind){trkCandInd=trkind;} void setMetaHitInd(Short_t shower, Short_t tof){ showerHitInd=shower; tofHitInd=tof;} void setShowerHitInd(Short_t shower) {showerHitInd=shower;} void setTofHitInd(Short_t tof) {tofHitInd=tof;} void setTofClusterSize(Char_t clsz) {tofClusterSize=clsz;} void setNCandForMeta(Short_t nmeta){nCandForMeta=nmeta;} // old func.name void setNextCandForMeta( Short_t nextmeta){nextCandForMeta=nextmeta;} // old func.name void setFirstCandForMeta(Short_t firstmeta){firstCandForMeta=firstmeta;} // old func.name void setNumMMForSameTrCnd(Short_t nmeta){nCandForMeta=nmeta;} // new one void setNextMMForSameTrCnd( Short_t nextmeta){nextCandForMeta=nextmeta;} // new one void setFirstMMForSameTrCnd(Short_t firstmeta){firstCandForMeta=firstmeta;} // new one void setQualityTOF(Float_t QUALITYTOF) {qualityTOF=QUALITYTOF;} void setQualitySHOWER(Float_t QUALITYSHOWER){qualitySHOWER=QUALITYSHOWER;} void setdxMeta(Float_t DXMETA) {dxMeta=DXMETA;} void setdyMeta(Float_t DYMETA) {dyMeta=DYMETA;} void setMdcSegCross(Float_t x, Float_t y) {xSegCr=x; ySegCr=y;} void setSplineInd( Short_t splind); void setRtInd( Short_t rtind); void setKickInd( Short_t kicktr); void setKick123Ind( Short_t kicktr); void setRungeKuttaInd( Short_t rktr); void setSector( Char_t sec) {sector=sec;} void setNCandForRich( Short_t nrich){nRichId=nrich;} void setNCandForIPU( Short_t nrich){nRichIPUId=nrich;} void setARichInd( Short_t id, Short_t richind) { if(id>=0&& id=0&& id-1 && tofHitInd>-1) ? kTRUE:kFALSE; } Short_t getMetaHitInd(void) const { return (getSystem()==1) ? tofHitInd:showerHitInd;} //??? Int_t getSystem(void) const { return (tofHitInd>-1) ? 1 : ((showerHitInd>-1) ? 0:-1); } //??? Short_t getShowerHitInd(void) const {return showerHitInd;} Short_t getTofHitInd(void) const {return tofHitInd;} Char_t getTofClusterSize(void) const {return tofClusterSize;} void getMdcSegCross(Float_t& x, Float_t& y) {x=xSegCr; y=ySegCr;} Float_t getXSegCross(void) const {return xSegCr;} Float_t getYSegCross(void) const {return ySegCr;} Short_t getNCandForRich(void) const {return nRichId;} Short_t getNCandForIPU(void) const {return nRichIPUId;} Short_t getARichInd(const Short_t id) const { return (id