GEMC  1.8
Geant4 Monte-Carlo Framework
OTOF_hitprocess.cc
Go to the documentation of this file.
1 // %%%%%%%%%%
2 // G4 headers
3 // %%%%%%%%%%
4 #include "G4UnitsTable.hh"
5 
6 // %%%%%%%%%%%%%
7 // gemc headers
8 // %%%%%%%%%%%%%
9 #include "OTOF_hitprocess.h"
10 
12 {
13  PH_output out;
14  out.identity = aHit->GetId();
15  HCname = "OTOF Hit Process";
16 
17  // %%%%%%%%%%%%%%%%%%%
18  // Raw hit information
19  // %%%%%%%%%%%%%%%%%%%
20  int nsteps = aHit->GetPos().size();
21 
22  // Get Total Energy deposited
23  double Etot = 0;
24  vector<G4double> Edep = aHit->GetEdep();
25  for(int s=0; s<nsteps; s++) Etot = Etot + Edep[s];
26 
27  // average global, local positions of the hit
28  double x, y, z;
29  double lx, ly, lz;
30  x = y = z = lx = ly = lz = 0;
31  vector<G4ThreeVector> pos = aHit->GetPos();
32  vector<G4ThreeVector> Lpos = aHit->GetLPos();
33 
34  if(Etot>0)
35  for(int s=0; s<nsteps; s++)
36  {
37  x = x + pos[s].x()*Edep[s]/Etot;
38  y = y + pos[s].y()*Edep[s]/Etot;
39  z = z + pos[s].z()*Edep[s]/Etot;
40  lx = lx + Lpos[s].x()*Edep[s]/Etot;
41  ly = ly + Lpos[s].y()*Edep[s]/Etot;
42  lz = lz + Lpos[s].z()*Edep[s]/Etot;
43  }
44  else
45  {
46  x = pos[0].x();
47  y = pos[0].y();
48  z = pos[0].z();
49  lx = Lpos[0].x();
50  ly = Lpos[0].y();
51  lz = Lpos[0].z();
52  }
53 
54  // average time
55  double time = 0;
56  vector<G4double> times = aHit->GetTime();
57  for(int s=0; s<nsteps; s++) time = time + times[s]/nsteps;
58 
59  // Energy of the track
60  double Ene = aHit->GetE();
61 
62  out.raws.push_back(Etot);
63  out.raws.push_back(x);
64  out.raws.push_back(y);
65  out.raws.push_back(z);
66  out.raws.push_back(lx);
67  out.raws.push_back(ly);
68  out.raws.push_back(lz);
69  out.raws.push_back(time);
70  out.raws.push_back((double) aHit->GetPID());
71  out.raws.push_back(aHit->GetVert().getX());
72  out.raws.push_back(aHit->GetVert().getY());
73  out.raws.push_back(aHit->GetVert().getZ());
74  out.raws.push_back(Ene);
75  out.raws.push_back((double) aHit->GetmPID());
76  out.raws.push_back(aHit->GetmVert().getX());
77  out.raws.push_back(aHit->GetmVert().getY());
78  out.raws.push_back(aHit->GetmVert().getZ());
79  out.raws.push_back(aHit->GetMom().getX());
80  out.raws.push_back(aHit->GetMom().getY());
81  out.raws.push_back(aHit->GetMom().getZ());
82 
83 
84  // %%%%%%%%%%%%
85  // Digitization
86  // %%%%%%%%%%%%
87 
88  int sector = out.identity[0].id;
89  int paddle = out.identity[1].id;
90 
91  // Get the paddle length: in TOF paddles are boxes, it's the x
92  double length = aHit->GetDetector().dimensions[0];
93 
94  // Distances from left, right
95  double dLeft = length + lx;
96  double dRight = length - lx;
97 
98  // dummy formulas for now, parameters could come from DB
99  int ADCL = (int) (100*Etot*exp(-dLeft/length/2 ));
100  int ADCR = (int) (100*Etot*exp(-dRight/length/2 ));
101 
102  // speed of light is 30 cm/s
103  int TDCL = (int) (100*(time/ns + dLeft/cm/30.0));
104  int TDCR = (int) (100*(time/ns + dRight/cm/30.0));
105 
106  out.dgtz.push_back(sector);
107  out.dgtz.push_back(paddle);
108  out.dgtz.push_back(ADCL);
109  out.dgtz.push_back(ADCR);
110  out.dgtz.push_back(TDCL);
111  out.dgtz.push_back(TDCR);
112 
113  return out;
114 }
115 
116 vector<identifier> OTOF_HitProcess :: ProcessID(vector<identifier> id, G4Step* aStep, detector Detector, gemc_opts Opt)
117 {
118  id[id.size()-1].id_sharing = 1;
119  return id;
120 }
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
G4ThreeVector GetVert()
Definition: MHit.h:72
vector< double > raws
Raw information.
Definition: MPHBaseClass.h:26
int GetPID()
Definition: MHit.h:107
int GetmPID()
Definition: MHit.h:122
vector< identifier > GetId()
Definition: MHit.h:96
string HCname
Hit Collection name.
Definition: MPHBaseClass.h:41
G4ThreeVector GetmVert()
Definition: MHit.h:127
PH_output ProcessHit(MHit *, gemc_opts)
Method to process the hit.
vector< identifier > identity
Identifier.
Definition: MPHBaseClass.h:28
vector< G4ThreeVector > GetLPos()
Definition: MHit.h:69
vector< identifier > ProcessID(vector< identifier >, G4Step *, detector, gemc_opts)
Method to calculate new identifier.
double GetE()
Definition: MHit.h:89
vector< G4ThreeVector > GetPos()
Definition: MHit.h:65
G4ThreeVector GetMom()
Definition: MHit.h:85
Definition: MHit.h:29
vector< double > GetTime()
Definition: MHit.h:82
vector< double > dimensions
vector of dimensions. Size, units depends on solid type
Definition: detector.h:63
vector< double > GetEdep()
Definition: MHit.h:76
detector GetDetector()
Definition: MHit.h:101
vector< int > dgtz
Digitized information.
Definition: MPHBaseClass.h:27