ROOT logo
#ifndef HMDCTRACKFINDER_H
#define HMDCTRACKFINDER_H

#include "hreconstructor.h"

#include "TStopwatch.h"

class HIterator;
class HCategory;
class HMdc34ClFinder;
class HMdcLookUpTb;
class HMdcEvntListCells;
class HMdcGeantEvent;
class HMdcClusMetaMatch;

class HMdcTrackFinder : public HReconstructor {
protected:
  HMdcLookUpTb      *fLookUpTb;         // MDC1&2 clus.finder (+3&4 for type=1)
  HMdc34ClFinder    *p34ClFinder;       // Clusters finder for MDC3&4
  HMdcClusMetaMatch *pClusMetaMatch;
  Int_t              nModules[6];       // [s] - number of MDCs for HMdcLookUpTb
  Int_t              numLayers[6][4];   // [s][m] - number of layers in MDC mod.
  Int_t              typeClFinder;      // =0 - finding in all mdc in sec.
                                        // =1 - finding in each mdc indep.
                                        // =2 - mixed cluster finder
  Bool_t             isClustToHit;      // kTRUE -> Cl.ToHit;  kFALSE->12Fit;
  HCategory         *fClusCat;          // pointer to HMdcClus data category
  HCategory         *fSegCat;           // pointer to Segment data category
  Bool_t             perMdcClus;        // =kTRUE - write HMdcClus to file
  HLocation          locClus;           // loc. for HMdcClus category
  HLocation          locNewCl;          // loc. for HMdcClus category
  HIterator         *iterClus;          // iterator for fClusCat
  HMdcEvntListCells *event;             // list of fired wires in current event
  Bool_t             isMdcLCellsOwn;    // =kTRUE if MdcEvntListCells is own
  HMdcGeantEvent    *geantEvent;        // mdc geant tracks collection
  Bool_t             isGeantEventOwn;   // =kTRUE if HMdcGeantEvent is own
  Int_t              level4[2];         // [seg] - level for 4-layers finding
  Int_t              level5[2];         // [seg] - level for 5-layers finding
  Int_t              clFndrLevel[6][4]; // [s][m] - level for current event
  Bool_t             prntSt;            // kTRUE - status printed already
  Bool_t             tarSFinderOnly;    // kTRUE - do vertex finder only (no clust.finder)
  
public:
  HMdcTrackFinder(Bool_t isCOff, Int_t typeClFn=0);
  HMdcTrackFinder(const Text_t *name, const Text_t *title, 
                  Bool_t isCOff, Int_t typeClFn=0);
  HMdcTrackFinder(void);
  HMdcTrackFinder(const Text_t *name, const Text_t *title);
  ~HMdcTrackFinder(void);
  Bool_t init(void);
  Bool_t reinit(void);
  Int_t  execute(void);
  Bool_t finalize(void) {return kTRUE;}
  void   setPersistency(Bool_t perCl);
  void   setParContainers();
  void   setNLayers(Int_t *lst);
  void   setLevel(Int_t l4s1, Int_t l5s1, Int_t l4s2, Int_t l5s2);
  void   setLevelSeg1(Int_t l4, Int_t l5);
  void   setLevelSeg2(Int_t l4, Int_t l5);
  void   printStatus(void);
  void   calcClFndrLevel(void);
  Int_t  clFndrBeforField(void);
  void   targSegFinderOnly(void)                 {tarSFinderOnly = kTRUE;}
  HMdcClusMetaMatch* getClusMetaMatch(void)      {return pClusMetaMatch;}

protected:
  Int_t  findOuterSegClusters(void);
  void   setMod34Levels(void);
  void   sortTracksInClusters(void);
  Bool_t initMetaMatch(void);
  
  ClassDef(HMdcTrackFinder,0) // Cluster finder manager class.
};

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