ROOT logo
#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;
    // Cut parameters:
    HMetaMatchPar     *fMatchPar;
    Float_t            invSigma2TofX[6];        // [6] - for 6 sectors
    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];              // matching window for 6 sectors
    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];       // Tof module of hit
    Short_t            indexTofHit[6][100];
    Char_t             tofClustSize[6][100];    // 0 - HTofHit obj., >=1 - HTofCluster

    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;             // Number of matched tof hits/clusters
    Float_t            qual2TofBestAr[MMF_BUF]; // Array of best quality of cluster,hit1 and hit2
    Float_t            qual2TofAr[MMF_BUF][9];  // Matchung quality^2,dx,dx of clust.,hit1 and hit2
    Short_t            tofInd[MMF_BUF][3];      // [][0]-HTofCluster index, [][1,2]-HTofHit index
    UChar_t            nShrMatched;             // Number of matched shower hits
    Float_t            qual2ShrAr[MMF_BUF][3];  // [][0]-quality^2,[][1]-dx,[][2]-dy
    Short_t            shrInd[MMF_BUF];         // HShowerHit indexis
    UChar_t            nRpcMatched;             // Number of matched rpc clusters
    Float_t            qual2RpcAr[MMF_BUF][3];  // [?][0]-quality^2,[?][1]-dx,[?][2]-dy
    Short_t            rpcInd[MMF_BUF];         // HRpcCluster indexis
    
    UChar_t            nEmcMatched;             // Number of matched shower hits
    Float_t            qual2EmcAr[MMF_BUF][3];  // [][0]-quality^2,[][1]-dx,[][2]-dy
    Short_t            emcInd[MMF_BUF];         // HEmcCal indexis
    UChar_t            nEmcClusMatched;         // Number of matched shower hits
    Float_t            qual2EmcClusAr[MMF_BUF][4];  // [][0]-quality^2,[][1]-dx,[][2]-dy
    Short_t            emcClusInd[MMF_BUF];     // HEmcCal indexis

    UChar_t            nRichId;                 // Number of matched HRichHit
    Short_t            richInd[RICH_BUF];       // indexis
    Float_t            qualRich[RICH_BUF];      // Matching quality
    
    Int_t              sector;                  // current sector                           
    Int_t              nShowerHitsSec;          // == nShowerHits[sec] for current sector
    HShowerHit       **fShowerHitsSec;          // ...
    Short_t           *indexShrHitSec;          // ...
    
    Int_t              nRpcClustersSec;         // == nRpcClusters[sec] for current sector
    HRpcCluster      **fRpcClustersSec;         // ...
    Short_t           *indexRpcClustersSec;     // ...
    HGeomVector        p1SegInMod;              // Segment point 1 in rpc or shower module coor.sys.
    HGeomVector        p2SegInMod;              // Segment point 2 in rpc or shower module coor.sys.
    Double_t           invDZ;                   // = 1./(p1SegInMod.Z()-p2SegInMod.Z())
    
    Int_t              nTofHitsSec;             // == nTofHits[sec] for current sector    
    HGeomVector       *tofHitsSec;              // ...
    Short_t           *indexTofHitSec;          // ...
    Char_t            *tofClustSizeSec;         // ...
    Char_t            *tofModuleSec;            // ...
    const HGeomTransform* secLabTrans;
    
    Int_t              nEmcHitsSec;             // == nEmcHits[sec] for current sector
    HEmcCal          **fEmcHitsSec;             // ...
    Short_t           *indexEmcHitSec;          // ...
    Int_t              nEmcClusSec;             // == nEmcHits[sec] for current sector
    HEmcCluster      **fEmcClusSec;             // ...
    Short_t           *indexEmcClusSec;         // ...
      
    Bool_t             isPrint;
    
    Float_t            dX;                   // Matching current deviation
    Float_t            dY;                   // Current va
    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;      // kTRUE - store not matched tracks in cat.
  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;  // for EMS parameter shrrmsx is used
	scaleEmcRMS   [1] = shrrmsy;  // for EMS parameter shrrmsy is used
    }
    static void  setScaleCut(Float_t tofcut,Float_t rpccut,Float_t shrcut) {
	scaleRpcCut    = rpccut;
	scaleTofCut    = tofcut;
	scaleShowerCut = shrcut;
	scaleEmcCut    = shrcut;    // for EMS parameter shrcut is used
    }
  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
 hmetamatchF2.h:1
 hmetamatchF2.h:2
 hmetamatchF2.h:3
 hmetamatchF2.h:4
 hmetamatchF2.h:5
 hmetamatchF2.h:6
 hmetamatchF2.h:7
 hmetamatchF2.h:8
 hmetamatchF2.h:9
 hmetamatchF2.h:10
 hmetamatchF2.h:11
 hmetamatchF2.h:12
 hmetamatchF2.h:13
 hmetamatchF2.h:14
 hmetamatchF2.h:15
 hmetamatchF2.h:16
 hmetamatchF2.h:17
 hmetamatchF2.h:18
 hmetamatchF2.h:19
 hmetamatchF2.h:20
 hmetamatchF2.h:21
 hmetamatchF2.h:22
 hmetamatchF2.h:23
 hmetamatchF2.h:24
 hmetamatchF2.h:25
 hmetamatchF2.h:26
 hmetamatchF2.h:27
 hmetamatchF2.h:28
 hmetamatchF2.h:29
 hmetamatchF2.h:30
 hmetamatchF2.h:31
 hmetamatchF2.h:32
 hmetamatchF2.h:33
 hmetamatchF2.h:34
 hmetamatchF2.h:35
 hmetamatchF2.h:36
 hmetamatchF2.h:37
 hmetamatchF2.h:38
 hmetamatchF2.h:39
 hmetamatchF2.h:40
 hmetamatchF2.h:41
 hmetamatchF2.h:42
 hmetamatchF2.h:43
 hmetamatchF2.h:44
 hmetamatchF2.h:45
 hmetamatchF2.h:46
 hmetamatchF2.h:47
 hmetamatchF2.h:48
 hmetamatchF2.h:49
 hmetamatchF2.h:50
 hmetamatchF2.h:51
 hmetamatchF2.h:52
 hmetamatchF2.h:53
 hmetamatchF2.h:54
 hmetamatchF2.h:55
 hmetamatchF2.h:56
 hmetamatchF2.h:57
 hmetamatchF2.h:58
 hmetamatchF2.h:59
 hmetamatchF2.h:60
 hmetamatchF2.h:61
 hmetamatchF2.h:62
 hmetamatchF2.h:63
 hmetamatchF2.h:64
 hmetamatchF2.h:65
 hmetamatchF2.h:66
 hmetamatchF2.h:67
 hmetamatchF2.h:68
 hmetamatchF2.h:69
 hmetamatchF2.h:70
 hmetamatchF2.h:71
 hmetamatchF2.h:72
 hmetamatchF2.h:73
 hmetamatchF2.h:74
 hmetamatchF2.h:75
 hmetamatchF2.h:76
 hmetamatchF2.h:77
 hmetamatchF2.h:78
 hmetamatchF2.h:79
 hmetamatchF2.h:80
 hmetamatchF2.h:81
 hmetamatchF2.h:82
 hmetamatchF2.h:83
 hmetamatchF2.h:84
 hmetamatchF2.h:85
 hmetamatchF2.h:86
 hmetamatchF2.h:87
 hmetamatchF2.h:88
 hmetamatchF2.h:89
 hmetamatchF2.h:90
 hmetamatchF2.h:91
 hmetamatchF2.h:92
 hmetamatchF2.h:93
 hmetamatchF2.h:94
 hmetamatchF2.h:95
 hmetamatchF2.h:96
 hmetamatchF2.h:97
 hmetamatchF2.h:98
 hmetamatchF2.h:99
 hmetamatchF2.h:100
 hmetamatchF2.h:101
 hmetamatchF2.h:102
 hmetamatchF2.h:103
 hmetamatchF2.h:104
 hmetamatchF2.h:105
 hmetamatchF2.h:106
 hmetamatchF2.h:107
 hmetamatchF2.h:108
 hmetamatchF2.h:109
 hmetamatchF2.h:110
 hmetamatchF2.h:111
 hmetamatchF2.h:112
 hmetamatchF2.h:113
 hmetamatchF2.h:114
 hmetamatchF2.h:115
 hmetamatchF2.h:116
 hmetamatchF2.h:117
 hmetamatchF2.h:118
 hmetamatchF2.h:119
 hmetamatchF2.h:120
 hmetamatchF2.h:121
 hmetamatchF2.h:122
 hmetamatchF2.h:123
 hmetamatchF2.h:124
 hmetamatchF2.h:125
 hmetamatchF2.h:126
 hmetamatchF2.h:127
 hmetamatchF2.h:128
 hmetamatchF2.h:129
 hmetamatchF2.h:130
 hmetamatchF2.h:131
 hmetamatchF2.h:132
 hmetamatchF2.h:133
 hmetamatchF2.h:134
 hmetamatchF2.h:135
 hmetamatchF2.h:136
 hmetamatchF2.h:137
 hmetamatchF2.h:138
 hmetamatchF2.h:139
 hmetamatchF2.h:140
 hmetamatchF2.h:141
 hmetamatchF2.h:142
 hmetamatchF2.h:143
 hmetamatchF2.h:144
 hmetamatchF2.h:145
 hmetamatchF2.h:146
 hmetamatchF2.h:147
 hmetamatchF2.h:148
 hmetamatchF2.h:149
 hmetamatchF2.h:150
 hmetamatchF2.h:151
 hmetamatchF2.h:152
 hmetamatchF2.h:153
 hmetamatchF2.h:154
 hmetamatchF2.h:155
 hmetamatchF2.h:156
 hmetamatchF2.h:157
 hmetamatchF2.h:158
 hmetamatchF2.h:159
 hmetamatchF2.h:160
 hmetamatchF2.h:161
 hmetamatchF2.h:162
 hmetamatchF2.h:163
 hmetamatchF2.h:164
 hmetamatchF2.h:165
 hmetamatchF2.h:166
 hmetamatchF2.h:167
 hmetamatchF2.h:168
 hmetamatchF2.h:169
 hmetamatchF2.h:170
 hmetamatchF2.h:171
 hmetamatchF2.h:172
 hmetamatchF2.h:173
 hmetamatchF2.h:174
 hmetamatchF2.h:175
 hmetamatchF2.h:176
 hmetamatchF2.h:177
 hmetamatchF2.h:178
 hmetamatchF2.h:179
 hmetamatchF2.h:180
 hmetamatchF2.h:181
 hmetamatchF2.h:182
 hmetamatchF2.h:183
 hmetamatchF2.h:184
 hmetamatchF2.h:185
 hmetamatchF2.h:186
 hmetamatchF2.h:187
 hmetamatchF2.h:188
 hmetamatchF2.h:189
 hmetamatchF2.h:190
 hmetamatchF2.h:191
 hmetamatchF2.h:192
 hmetamatchF2.h:193
 hmetamatchF2.h:194
 hmetamatchF2.h:195
 hmetamatchF2.h:196
 hmetamatchF2.h:197
 hmetamatchF2.h:198
 hmetamatchF2.h:199
 hmetamatchF2.h:200
 hmetamatchF2.h:201
 hmetamatchF2.h:202
 hmetamatchF2.h:203
 hmetamatchF2.h:204
 hmetamatchF2.h:205
 hmetamatchF2.h:206
 hmetamatchF2.h:207
 hmetamatchF2.h:208
 hmetamatchF2.h:209
 hmetamatchF2.h:210
 hmetamatchF2.h:211
 hmetamatchF2.h:212
 hmetamatchF2.h:213
 hmetamatchF2.h:214
 hmetamatchF2.h:215
 hmetamatchF2.h:216
 hmetamatchF2.h:217
 hmetamatchF2.h:218
 hmetamatchF2.h:219
 hmetamatchF2.h:220
 hmetamatchF2.h:221
 hmetamatchF2.h:222
 hmetamatchF2.h:223
 hmetamatchF2.h:224
 hmetamatchF2.h:225
 hmetamatchF2.h:226
 hmetamatchF2.h:227
 hmetamatchF2.h:228
 hmetamatchF2.h:229
 hmetamatchF2.h:230
 hmetamatchF2.h:231
 hmetamatchF2.h:232
 hmetamatchF2.h:233
 hmetamatchF2.h:234
 hmetamatchF2.h:235
 hmetamatchF2.h:236
 hmetamatchF2.h:237
 hmetamatchF2.h:238
 hmetamatchF2.h:239
 hmetamatchF2.h:240
 hmetamatchF2.h:241
 hmetamatchF2.h:242
 hmetamatchF2.h:243
 hmetamatchF2.h:244
 hmetamatchF2.h:245