HYDRA_development_version
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
hemcdigitizer.h
Go to the documentation of this file.
1 #ifndef HEMCDIGITIZER_H
2 #define HEMCDIGITIZER_H
3 
4 using namespace std;
5 #include "hreconstructor.h"
6 #include "hgeomtransform.h"
7 #include "hlocation.h"
8 #include "emcdef.h"
9 #include <vector>
10 
11 class HIterator;
12 class HCategory;
13 class HLinearCategory;
14 class HEmcCal;
15 class HEmcDetector;
16 class HEmcGeomPar;
17 class HEmcDigiPar;
18 class HEmcCellStatusPar;
19 class HEmcSimulPar;
20 class HGeantEmc;
21 
22 class HEmcDigitizer : public HReconstructor {
23 protected:
24 
25  //---------------------------------------------------------------
26  // define some auxiliary structures
27  typedef struct celltrack { // stores all needed infos per cell
28  Float_t gtime; // GEANT time (used for sorting)
29  Int_t gtrack; // GEANT track number
30  Float_t trackEn; // number of photo electrons
31 
32  // Reset initial values
33  void reset() {
34  gtime = 10000.;
35  gtrack = -1;
36  trackEn = 0;
37  }
38 
39  Bool_t static cmpTime(celltrack* a, celltrack* b) {
40  // sort by GEANT time in increasing order
41  return (a->gtime < b->gtime);
42  }
43  Bool_t static cmpEnergy(celltrack* a, celltrack* b) {
44  // sort by GEANT time in increasing order
45  return (a->trackEn > b->trackEn);
46  }
47  } celltrack;
48 
49  typedef struct { // collects all tracks per cell
50  Float_t energy; // number of photo electrons
51  Bool_t isEmbeddedReal; // kTRUE - real data cell
52  vector<celltrack*> ctracks; // all tracks in the cell
53  vector<Int_t> inputTracks; // tracks in the cell ("inputTracks" is not always equal to "ctracks")
54 
55  void reset() { // Resets initial values, deletes vector
56  energy = 0.;
57  isEmbeddedReal = kFALSE;
58  for (UInt_t i=0;i<ctracks.size();i++) { delete ctracks[i]; }
59  inputTracks.clear();
60  ctracks.clear();
61  }
62 
63  // Sorts by increasing GEANT time
64  void sortTime(void) {
65  std::sort(ctracks.begin(),ctracks.end(),celltrack::cmpTime);
66  }
67 
68  void sortEnergy(void) {
69  std::sort(ctracks.begin(),ctracks.end(),celltrack::cmpEnergy);
70  }
71 
72  } celldata;
73 
74  vector<celldata* > cellobjects; // temporary working array for digitized data
75  void clearCellobjects();
76 
77  //---------------------------------------------------------------
78 
79  Int_t embeddingmode; // switch for keeping geant hits / realistic embedding
80 
81  HLocation fLoc; // Location for new object
82  HCategory* fGeantEmcCat; // GeantEmc data category
83  HLinearCategory* fGeantKineCat; // GeantKine data category
84  HCategory* fCalCat; // Cal data category
85  HCategory* fStartHitCat; // StartHit data category
86  HEmcDetector* fEmcDet; // EmcDetector
87  HEmcGeomPar* fGeomPar; // Geometry parameters
88  HEmcDigiPar* fDigiPar; // Digitization parameters
89  HEmcCellStatusPar* pStatuspar; //! pointer to calibration parameters
90  HEmcSimulPar* fSimulPar; // Simulation parameter: lookup table for PMT types
91  HIterator* iterGeantEmc; // Iterator over catEmcGeantRaw category
92  HGeomTransform labTrans[6]; // Transfomation lab. <-> emc_module
93 
94  Int_t maxCell; // maximal number of cells (including spares)
95  Float_t sigmaT; // time resolution
96  Float_t phot2Energy[3]; // mean energy deposit per photo electron for different types of PMT (1000./1306.) [MeV]
97  Float_t facEnergSmear[3]; // factor for energy smearing for different types of PMT
98  Double_t zVertBorder; // tracks without HGeantEmc hit but with vertex in region zVertBorder (coor.sys. of emc module)
99  // will be analysed as track with HGeantEmc hit
100  // Input plane of EMC module corresponds to zVertBorder=0.
101  Float_t energyDepositCut; // Cut for the minimal energy deposit in the cell. It is used for time1 determination.
102  Float_t signalVelocity; // Velocity of the signal propagation along cell (default: speed of light in the vacuum)
103  Float_t halfOfCellLength; // It is needed because HGeanEmc hits now are shifted by half of cell relative coor.system of EMC !
104 
105 public:
106  HEmcDigitizer(void);
107  HEmcDigitizer(const Text_t* name,const Text_t* title);
108  ~HEmcDigitizer(void);
109  Bool_t init(void);
110  Bool_t reinit(void);
111  Bool_t finalize(void) {return kTRUE;}
112  Int_t execute(void);
113  void setzVertBorder(Double_t vc) {zVertBorder = vc;}
114  void setEnergyDepositCut(Double_t cut) {energyDepositCut = cut;}
115  void setSignalVelocity(Double_t v) {signalVelocity = v;}
116 
117  void setEmbeddingMode(Int_t mode) {embeddingmode = mode;}
118  Int_t getEmbeddingMode(void) const {return embeddingmode;}
119 
120 
121 protected:
122  void initVariables(void);
123  Bool_t setParameterContainers(void);
124  Int_t cellObjectsSize(void) const {return 6 * emcMaxComponents;} // size of "cellobjects" vector
125  Int_t cellObjectIndex(Int_t s,Int_t c) const {return s * emcMaxComponents +c;} // sector&cell ==> index in "cellobjects" vector
126  Int_t sectorFromIndex(Int_t ind) const {return ind / emcMaxComponents;} // index in "cellobjects" vector ==> sector
127  Int_t cellFromIndex(Int_t ind) const {return ind % emcMaxComponents;} // index in "cellobjects" vector ==> cell
128  HGeantEmc* getInputHit(HGeantEmc* pGeantEmc,Int_t &inputTrack) const;
129 
130  ClassDef(HEmcDigitizer,0) //Digitizer of EMC data.
131 };
132 
133 #endif
static Bool_t cmpEnergy(celltrack *a, celltrack *b)
Definition: hemcdigitizer.h:43
Double_t zVertBorder
Definition: hemcdigitizer.h:98
static Bool_t cmpTime(celltrack *a, celltrack *b)
Definition: hemcdigitizer.h:39
HCategory * fCalCat
Definition: hemcdigitizer.h:84
Int_t cellObjectsSize(void) const
HEmcSimulPar * fSimulPar
pointer to calibration parameters
Definition: hemcdigitizer.h:90
vector< celltrack * > ctracks
Definition: hemcdigitizer.h:52
HEmcCellStatusPar * pStatuspar
Definition: hemcdigitizer.h:89
Int_t embeddingmode
Definition: hemcdigitizer.h:79
HEmcDetector * fEmcDet
Definition: hemcdigitizer.h:86
vector< Int_t > inputTracks
Definition: hemcdigitizer.h:53
Float_t energyDepositCut
Float_t halfOfCellLength
Int_t cellObjectIndex(Int_t s, Int_t c) const
HCategory * fGeantEmcCat
Definition: hemcdigitizer.h:82
HEmcDigiPar * fDigiPar
Definition: hemcdigitizer.h:88
HCategory * fStartHitCat
Definition: hemcdigitizer.h:85
Int_t getEmbeddingMode(void) const
void setzVertBorder(Double_t vc)
Int_t sectorFromIndex(Int_t ind) const
void setEnergyDepositCut(Double_t cut)
HIterator * iterGeantEmc
Definition: hemcdigitizer.h:91
HLocation fLoc
Definition: hemcdigitizer.h:81
Definition: hemccal.h:8
Bool_t finalize(void)
vector< celldata * > cellobjects
Definition: hemcdigitizer.h:74
HEmcGeomPar * fGeomPar
Definition: hemcdigitizer.h:87
Int_t cellFromIndex(Int_t ind) const
HLinearCategory * fGeantKineCat
Definition: hemcdigitizer.h:83
const Int_t emcMaxComponents
Definition: emcdef.h:15
Int_t mode
Float_t signalVelocity
Float_t sigmaT
Definition: hemcdigitizer.h:95
void setSignalVelocity(Double_t v)
void setEmbeddingMode(Int_t mode)