ROOT logo
#ifndef HSTART2HITFSIM_H
#define HSTART2HITFSIM_H

#include "hreconstructor.h"
#include "hgeomvector.h"
#include <vector>
#include <algorithm>

class HCategory;
class HIterator;
class HCategory;
class HStart2Hit;
class HStart2GeomPar;
class HStart2DigiPar;
class HSpecGeomPar;

class HStart2HitFSim : public HReconstructor {
private:
  //---------------------------------------------------------------
  // define some auxiliary strutures
  typedef struct celltrack { // stores all needed infos per cell
    Float_t gtime;           // GEANT time (used for sorting)
    Int_t   gtrack;          // GEANT track number
    Float_t geloss;          // GEANT energy loss

    // Reset initial values
    void reset() {
      gtime  =  10000.;
      gtrack = -1;
      geloss = 0.f;
    }

    Bool_t static cmpTime(celltrack* a, celltrack* b) {
      // sort by GEANT time in increasing order
      return (a->gtime < b->gtime);
    }
  } celltrack;

  typedef struct {
    // collection of all tracks per cell

    vector<celltrack*> ctracks; // all cell tracks

    void reset() { // Reset initial values. deletes vector
      for (UInt_t i=0;i<ctracks.size();i++) { delete ctracks[i]; }
      ctracks.clear();
    }

    // Sort by increasing GEANT time
    void sortTime(void) {
      std::sort(ctracks.begin(),ctracks.end(),celltrack::cmpTime);
    }

  } celldata;

  vector<celldata* > cellobjects; //! temporary working array for digitized data
  void clearCellobjects();
  //---------------------------------------------------------------

   HCategory*      fCatHit;         //! pointer to the hit data
   Double_t        fresolution;     //! time resolution in ns
   HCategory*      fCatGeantStart;  //! pointer to Start Geant data category
   HIterator*      iterGeantStart;  //! iterator over catStartGeantRaw category
   HCategory*      fCatGeantKine;   //! pointer to Geant kine category
   HStart2GeomPar* fGeomPar;        //! geometry parameters of Start detector
   HStart2DigiPar* fDigiPar;        //! digitization parameters
   HSpecGeomPar*   fSpecGeomPar;    //! pointer to HSpecGeomPar parameter container
   HGeomVector     targetCenter;    //! Lab position of target center
static  HStart2HitFSim* fHitFinder;  //!
static  Bool_t     doGeantHit;       //! switch (default true) : geant hit will be used.
                                     //  set kFALSE if geant input has start cat , but should not be used
public:
   HStart2HitFSim(void);
   HStart2HitFSim(const Text_t* name, const Text_t* title,Double_t resol=0.06);

   ~HStart2HitFSim(void);
   static HStart2HitFSim* getHitFinder(){ return fHitFinder;}
   static void setDoGeantHit(Bool_t doit) { doGeantHit = doit; }
   void   setResolution(Double_t res) { fresolution = res ; }

   Bool_t init(void);
   Bool_t reinit(void);
   Int_t  execute(void);
   Bool_t finalize(){return kTRUE;}

private:
   void   initVar(void);
   Bool_t setParameterContainers(void);
   void   digitize(HStart2Hit*);

public:
   ClassDef(HStart2HitFSim, 0) // Hit finder for START2 detector
};

#endif /* !HSTART2HITFSIM_H */

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