ROOT logo
#ifndef HMDCIDEALTRACKING_H
#define HMDCIDEALTRACKING_H

#include "hreconstructor.h"
#include "hlocation.h"
#include "hmdclistgroupcells.h"

class HIterator;
class HMdcHitSim;
class HMdcSegSim;
class HCategory;
class HMdcTrkCand;
class HMdcSizesCells;
class HGeantKine;
class HGeantMdc;

class HMdcIdealTracking : public HReconstructor {
  private:
    // Input categories:
    HCategory* pGeantKineCat;      // pointer to the category catGeantKine
    HCategory* pGeantMdcCat;       // pointer to the category catMdcGeantRaw
    HCategory* pMdcCal1Cat;        // pointer to the category catMdcCal1
    HIterator* iterGeantKine;      // iterator for catGeantKine
    HLocation  locCal1;            // location of HMdcCal1Sim object
    
    // Output categories:
    HCategory* pMdcSegCat;         // pointer to the category catMdcSeg
    HCategory* pMdcHitCat;         // pointer to the category catMdcHit
    HCategory* pMdcTrkCandCat;     // pointer to the category catMdcTrkCand    
    HLocation  locSeg;             // location for new "segment" object
    HLocation  locHit;             // location for new "hit" object
    HLocation  locTrkCand;         // location for new HMdcTrkCand object

    HMdcSizesCells* pMSizesCells;
    Bool_t isMdcActive[6][4];     // [sec][mod] =kTRUE if MDC is active
    
    // Cuts:
    Int_t nFiredLayersSeg1cut;    // minimal number of fired layers in inner segment
    Int_t nFiredLayersSeg2cut;    // minimal number of fired layers in outer segment
    
    // Current track:
    Int_t      trackNumber;       // track number
    Int_t      trackSector;       // sector number of track
    HGeantMdc* geantHitMod[4];    // geant hits in 4 modules of sector
    HGeantMdc* geantHitLay[4][6]; // geant hits in 24 layers of sector
    UChar_t    nGeantMdcLay[4];   // num. of HGeantMdc or HMdcCal1 hits in each module
    Double_t   x1[4],y1[4],z1[4]; // x1,y1,z1 - x2,y2,z2 track piece param.
    Double_t   x2[4],y2[4],z2[4]; // in sector coor.sys. for each module
    HMdcList24GroupCells* lCells; // list of fired cells from this track
    Bool_t     fillParallel;      // switch : kTRUE will fill HMdcHitSim,HMdcSegSim and HMdcTrkCand to ideal categories

    Double_t   sigX[4];           // sigma for gaussian resolution for MDC in x [mm]
    Double_t   sigY[4];           // sigma for gaussian resolution for MDC in y [mm]

  public:
    HMdcIdealTracking(void);
    HMdcIdealTracking(const Text_t *name,const Text_t *title);
    ~HMdcIdealTracking(void);
    void   fillParallelCategories(){fillParallel=kTRUE;}
    void   setResolutionX(Double_t x0,Double_t x1,Double_t x2,Double_t x3) {sigX[0] = x0; sigX[1] = x1; sigX[2] = x2; sigX[3] = x3;}
    void   setResolutionY(Double_t y0,Double_t y1,Double_t y2,Double_t y3) {sigY[0] = y0; sigY[1] = y1; sigY[2] = y2; sigY[3] = y3;}
    Bool_t init(void);
    Bool_t reinit(void);
    Bool_t finalize(void);
    Int_t  execute(void);
    void   setNFiredLayersCuts(Int_t c1,Int_t c2) {nFiredLayersSeg1cut=c1; nFiredLayersSeg2cut=c2;}
    void printStatus(void);

  private:
    void         clear(void);
    Bool_t       testTrack(HGeantKine* pGeantKine);
    Int_t        fillHitsSeg(Int_t segment);
    HMdcSegSim*  getSegSlot(Int_t segment, Int_t& index);
    Int_t        fillHit(Int_t module);
    HMdcHitSim*  getHitSlot(Int_t module, Int_t& index);
    HMdcTrkCand* fillTrkCandISeg(Int_t segIndex);
    HMdcTrkCand* fillTrkCandOSeg(HMdcTrkCand* fTCand,Int_t segIndex);
    void         collectWires(Int_t s,Int_t m, Int_t l, HGeantMdc* pGeantMdc);
    void         setWires(HMdcSegSim* pMdcSeg, Int_t seg);
    void         setWires(HMdcHitSim* pMdcHit, Int_t mod);

  ClassDef(HMdcIdealTracking,0) // Filling HMdcSeg, HMdcHit and HMdcTrkCand by GEANT hits
};

#endif
 hmdcidealtracking.h:1
 hmdcidealtracking.h:2
 hmdcidealtracking.h:3
 hmdcidealtracking.h:4
 hmdcidealtracking.h:5
 hmdcidealtracking.h:6
 hmdcidealtracking.h:7
 hmdcidealtracking.h:8
 hmdcidealtracking.h:9
 hmdcidealtracking.h:10
 hmdcidealtracking.h:11
 hmdcidealtracking.h:12
 hmdcidealtracking.h:13
 hmdcidealtracking.h:14
 hmdcidealtracking.h:15
 hmdcidealtracking.h:16
 hmdcidealtracking.h:17
 hmdcidealtracking.h:18
 hmdcidealtracking.h:19
 hmdcidealtracking.h:20
 hmdcidealtracking.h:21
 hmdcidealtracking.h:22
 hmdcidealtracking.h:23
 hmdcidealtracking.h:24
 hmdcidealtracking.h:25
 hmdcidealtracking.h:26
 hmdcidealtracking.h:27
 hmdcidealtracking.h:28
 hmdcidealtracking.h:29
 hmdcidealtracking.h:30
 hmdcidealtracking.h:31
 hmdcidealtracking.h:32
 hmdcidealtracking.h:33
 hmdcidealtracking.h:34
 hmdcidealtracking.h:35
 hmdcidealtracking.h:36
 hmdcidealtracking.h:37
 hmdcidealtracking.h:38
 hmdcidealtracking.h:39
 hmdcidealtracking.h:40
 hmdcidealtracking.h:41
 hmdcidealtracking.h:42
 hmdcidealtracking.h:43
 hmdcidealtracking.h:44
 hmdcidealtracking.h:45
 hmdcidealtracking.h:46
 hmdcidealtracking.h:47
 hmdcidealtracking.h:48
 hmdcidealtracking.h:49
 hmdcidealtracking.h:50
 hmdcidealtracking.h:51
 hmdcidealtracking.h:52
 hmdcidealtracking.h:53
 hmdcidealtracking.h:54
 hmdcidealtracking.h:55
 hmdcidealtracking.h:56
 hmdcidealtracking.h:57
 hmdcidealtracking.h:58
 hmdcidealtracking.h:59
 hmdcidealtracking.h:60
 hmdcidealtracking.h:61
 hmdcidealtracking.h:62
 hmdcidealtracking.h:63
 hmdcidealtracking.h:64
 hmdcidealtracking.h:65
 hmdcidealtracking.h:66
 hmdcidealtracking.h:67
 hmdcidealtracking.h:68
 hmdcidealtracking.h:69
 hmdcidealtracking.h:70
 hmdcidealtracking.h:71
 hmdcidealtracking.h:72
 hmdcidealtracking.h:73
 hmdcidealtracking.h:74
 hmdcidealtracking.h:75
 hmdcidealtracking.h:76
 hmdcidealtracking.h:77
 hmdcidealtracking.h:78
 hmdcidealtracking.h:79
 hmdcidealtracking.h:80
 hmdcidealtracking.h:81
 hmdcidealtracking.h:82
 hmdcidealtracking.h:83
 hmdcidealtracking.h:84
 hmdcidealtracking.h:85