1 |
nikolas |
1.1 |
#ifndef PAMVMC_DETECTOR_HIT_H |
2 |
|
|
#define PAMVMC_DETECTOR_HIT_H |
3 |
|
|
#include <cmath> |
4 |
|
|
#include <iostream> |
5 |
|
|
|
6 |
|
|
#include <TObject.h> |
7 |
|
|
#include <TVirtualMC.h> |
8 |
|
|
#include <TParticle.h> |
9 |
|
|
#include <TG4G3Units.h> |
10 |
|
|
|
11 |
|
|
#include "PamVMCGeoID.h" |
12 |
|
|
|
13 |
|
|
using std::sqrt; |
14 |
|
|
using std::cout; |
15 |
|
|
using std::endl; |
16 |
|
|
|
17 |
|
|
class pHitData: public TObject { |
18 |
|
|
|
19 |
|
|
public: |
20 |
|
|
Int_t fPOS; |
21 |
|
|
Int_t fPDG; //Particle PDG |
22 |
|
|
Double_t fPATH; //PATH length in specific SD in (cm) |
23 |
|
|
Double_t fTOF; |
24 |
|
|
Double_t fPIN; |
25 |
|
|
Double_t fXOUT; |
26 |
|
|
Double_t fYOUT; |
27 |
|
|
Double_t fZOUT; |
28 |
|
|
Double_t fEREL; //Energy released during hit |
29 |
|
|
Double_t fXIN; |
30 |
|
|
Double_t fYIN; |
31 |
|
|
Double_t fZIN; |
32 |
|
|
|
33 |
|
|
pHitData(): fPOS(0), fPDG(0), fPATH(0.), fTOF(0.), fPIN(0.), fXOUT (0.), |
34 |
|
|
fYOUT (0.), fZOUT (0.), fEREL (0.), |
35 |
|
|
fXIN(0.), fYIN (0.), fZIN (0.) { }; |
36 |
|
|
|
37 |
|
|
// pHitData( pHitData & p ): fPOS(p.fPOS), fPDG(p.fPDG), fPATH(p.fPATH), fTOF(p.fTOF), |
38 |
|
|
// fPIN(p.fPIN), fXOUT (p.fXOUT), |
39 |
|
|
// fYOUT( p.fYOUT), fZOUT (p.fZOUT), fEREL( p.fEREL), |
40 |
|
|
// fXIN(p.fXIN), fYIN( p.fYIN), fZIN( p.fZIN) { }; |
41 |
|
|
|
42 |
|
|
|
43 |
|
|
void Clean() { |
44 |
|
|
fPOS=fPDG=0; |
45 |
|
|
fPATH= fTOF= fPIN= fXOUT = |
46 |
|
|
fYOUT = fZOUT = fEREL = |
47 |
|
|
fXIN= fYIN = fZIN = 0.; |
48 |
|
|
} |
49 |
|
|
|
50 |
|
|
// pHitData & operator+=( const pHitData &a);//, const pHitData & p) ; |
51 |
|
|
void Print(Option_t * ="" ) const |
52 |
|
|
{ cout << "pHitData: "<<endl |
53 |
|
|
<<"ID of SD volume: " << fPOS << endl |
54 |
|
|
<<"HIT INFORMATION: " << endl |
55 |
|
|
<<"Partice PDG: " << fPDG << endl |
56 |
|
|
<<"XIN: " << fXIN << " (cm)"<<endl |
57 |
|
|
<<"YIN: " << fYIN << " (cm)"<<endl |
58 |
|
|
<<"ZIN: " << fZIN << " (cm)"<<endl |
59 |
|
|
<<"PIN: " << fPIN << " (GeV/c)"<<endl |
60 |
|
|
<<"XOUT: " << fXOUT << " (cm)"<<endl |
61 |
|
|
<<"XOUT: " << fXOUT << " (cm)"<<endl |
62 |
|
|
<<"YOUT: " << fYOUT << " (cm)"<<endl |
63 |
|
|
<<"ZOUT: " << fZOUT << " (cm)"<<endl |
64 |
|
|
<<"PATH: " << fPATH << " (cm)"<<endl |
65 |
|
|
<<"EREL: " << fEREL*1E6 << " (keV)"<<endl |
66 |
|
|
<<"TOF: " << fTOF << " (s)"<<endl; } |
67 |
|
|
|
68 |
|
|
ClassDef(pHitData,1) |
69 |
|
|
|
70 |
|
|
}; |
71 |
|
|
|
72 |
|
|
|
73 |
|
|
pHitData & operator+=( pHitData &a, const pHitData & p); |
74 |
|
|
|
75 |
|
|
|
76 |
|
|
class PamVMCDetectorHit : public TObject |
77 |
|
|
{ |
78 |
|
|
public: |
79 |
|
|
PamVMCDetectorHit(); |
80 |
|
|
virtual ~PamVMCDetectorHit(); |
81 |
|
|
|
82 |
|
|
//Set and Add methods |
83 |
|
|
|
84 |
|
|
void CleanHit() { |
85 |
|
|
fhitdata.Clean(); |
86 |
|
|
fnocall=0; |
87 |
|
|
} |
88 |
|
|
pHitData * GenHit() { return new pHitData(fhitdata);} |
89 |
|
|
|
90 |
|
|
|
91 |
|
|
virtual void FillHitEntering(pHitData &phd){ |
92 |
|
|
SetHit(phd); } |
93 |
|
|
|
94 |
|
|
virtual void Print(Option_t* option = "") const; |
95 |
|
|
|
96 |
|
|
void FillHit(TVirtualMC *g) { |
97 |
|
|
fnocall++; |
98 |
|
|
// SetPOS(pos); |
99 |
|
|
/// TLorentzVector k; |
100 |
|
|
double x,y,z,e; |
101 |
|
|
g->TrackPosition(x,y,z); |
102 |
|
|
UpdPDG(g->TrackPid()); |
103 |
|
|
UpdXIN(x); |
104 |
|
|
UpdYIN(y); |
105 |
|
|
UpdZIN(z); |
106 |
|
|
SetXOUT(x); |
107 |
|
|
SetYOUT(y); |
108 |
|
|
SetZOUT(z); |
109 |
|
|
g->TrackMomentum(x,y,z,e); |
110 |
|
|
UpdPIN(sqrt(x*x+y*y+z*z)); |
111 |
|
|
AddTOF((g->GetStack()->GetCurrentTrack()->T())/TG4G3Units::Time()+(g->TrackTime())); |
112 |
|
|
AddPATH(g->TrackStep()); |
113 |
|
|
AddEREL(g->Edep()); |
114 |
|
|
|
115 |
|
|
} |
116 |
|
|
|
117 |
|
|
void SetHit( const pHitData &phd){ |
118 |
|
|
fnocall++; |
119 |
|
|
SetPOS(phd.fPOS); |
120 |
|
|
AddTOF(phd.fTOF); |
121 |
|
|
AddPATH( phd.fPATH ); |
122 |
|
|
AddEREL( phd.fEREL ); |
123 |
|
|
UpdPDG( phd.fPDG ); |
124 |
|
|
UpdXIN( phd.fXIN ); |
125 |
|
|
UpdYIN( phd.fYIN ); |
126 |
|
|
UpdZIN( phd.fZIN ); |
127 |
|
|
UpdPIN( phd.fPIN ); |
128 |
|
|
SetXOUT( phd.fXOUT ); |
129 |
|
|
SetYOUT( phd.fYOUT ); |
130 |
|
|
SetZOUT( phd.fZOUT ); |
131 |
|
|
} |
132 |
|
|
|
133 |
|
|
void UpdXIN(Double_t x){ |
134 |
|
|
if(! fhitdata.fXIN) SetXIN( x );} |
135 |
|
|
void UpdYIN(Double_t x){ |
136 |
|
|
if(! fhitdata.fYIN) SetYIN( x );} |
137 |
|
|
void UpdZIN(Double_t x){ |
138 |
|
|
if(! fhitdata.fZIN) SetZIN( x );} |
139 |
|
|
void UpdPIN(Double_t x){ |
140 |
|
|
if(! fhitdata.fPIN) SetPIN( x );} |
141 |
|
|
void UpdPDG(Int_t x){ |
142 |
|
|
if(! fhitdata.fPDG) SetPDG( x );} |
143 |
|
|
// void Incnocall () {fnocall++;} |
144 |
|
|
void SetPOS (Int_t pos) { fhitdata.fPOS = pos; } |
145 |
|
|
void SetPDG (Int_t pdg) { fhitdata.fPDG = pdg; } |
146 |
|
|
void AddPATH (Double_t ln) { fhitdata.fPATH += ln; } |
147 |
|
|
void AddEREL (Double_t de) { fhitdata.fEREL += de; } |
148 |
|
|
void SetXIN (Double_t xin) { fhitdata.fXIN = xin; } |
149 |
|
|
void SetYIN (Double_t yin) { fhitdata.fYIN = yin; } |
150 |
|
|
void SetZIN (Double_t zin) { fhitdata.fZIN = zin; } |
151 |
|
|
void SetTOF (Double_t tofin) { fhitdata.fTOF = tofin; } |
152 |
|
|
void SetPIN (Double_t pxin) { fhitdata.fPIN = pxin; } |
153 |
|
|
void SetXOUT (Double_t xout) { fhitdata.fXOUT = xout; } |
154 |
|
|
void SetYOUT (Double_t yout) { fhitdata.fYOUT = yout; } |
155 |
|
|
void SetZOUT (Double_t zout) { fhitdata.fZOUT = zout; } |
156 |
|
|
void Reset(); //{ fhitdata.Clean(); } |
157 |
|
|
|
158 |
|
|
// Get methods |
159 |
|
|
|
160 |
|
|
const pHitData *GetHit() {return &fhitdata;} |
161 |
|
|
//Int_t Getnocall() { return fnocall; }; |
162 |
|
|
Int_t GetPOS() { return fhitdata.fPOS; }; |
163 |
|
|
Int_t GetPDG() { return fhitdata.fPDG; }; |
164 |
|
|
Double_t GetPATH() { return fhitdata.fPATH; }; |
165 |
|
|
Double_t GetEREL() { return fhitdata.fEREL; }; |
166 |
|
|
Double_t GetXIN() { return fhitdata.fXIN; }; |
167 |
|
|
Double_t GetYIN() { return fhitdata.fYIN; }; |
168 |
|
|
Double_t GetZIN() { return fhitdata.fZIN; }; |
169 |
|
|
Double_t GetTOF() { return fhitdata.fTOF; }; |
170 |
|
|
Double_t GetPIN() { return fhitdata.fPIN; }; |
171 |
|
|
Double_t GetXOUT() { return fhitdata.fXOUT; }; |
172 |
|
|
Double_t GetYOUT() { return fhitdata.fYOUT; }; |
173 |
|
|
Double_t GetZOUT() { return fhitdata.fZOUT; }; |
174 |
|
|
|
175 |
|
|
protected: |
176 |
|
|
|
177 |
|
|
pHitData fhitdata; |
178 |
|
|
// Int_t fHITN; |
179 |
|
|
// Int_t fPOS; //Number, defines copy number of SD volume; |
180 |
|
|
Int_t fnocall; |
181 |
|
|
// Double_t IncrementAve ( Double_t t, Double_t d) |
182 |
|
|
// { return (t*(fnocall-1) + d)/fnocall; } |
183 |
|
|
void AddTOF (Double_t tofin) { |
184 |
|
|
//fhitdata.fTOF = IncrementAve(fhitdata.fTOF,tofin); |
185 |
|
|
if (tofin!=0.) SetTOF((GetTOF()==0.) ? tofin: (GetTOF()+tofin)/2.); |
186 |
|
|
} |
187 |
|
|
|
188 |
|
|
ClassDef(PamVMCDetectorHit,1) //PamVMCDetectorHit |
189 |
|
|
}; |
190 |
|
|
|
191 |
|
|
#endif //PAMVMC_DETECTOR_HIT_H |