/[PAMELA software]/PamVMC/include/PamVMCDetectorHit.h
ViewVC logotype

Annotation of /PamVMC/include/PamVMCDetectorHit.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download)
Fri Jun 12 18:39:17 2009 UTC (15 years, 6 months ago) by pam-rm2
Branch: MAIN
CVS Tags: v1r0, HEAD
Changes since 1.1: +12 -5 lines
File MIME type: text/plain
- Introduced user-defined names of output files and random seeds number.
Users can do it use options of PamVMCApplication constructor:
PamVMCApplication(const char* name,  const char *title, const char*
filename="pamtest", Int_t seed=0).
The Random object that I use is TRandom3 object which has astronomical
large period (in case of default initialization 0). All random generators
in the code use this object by calling of gRandom singleton which keeps
it.

- Corrected TOF digitization routine. No problems with TDC hits due to
hadronic interactions anymore.

- Some small changes was done to compile code under Root 5.23. +
geant4_vmc v. 2.6 without any warnings

- Some classes of PamG4RunConfiguartion was changed for geant4_vmc v.
2.6.Some obsolete classes was deleted as soon as developers implemented
regions.

- Navigation was changed from "geomRootToGeant4" to "geomRoot", because on
VMC web page written that as soon as Geant4 has no option ONLY/MANY
translation of overlapped geometry to Geant4 through VGM could be wrong.
I'd like to stay with Root navigation:
http://root.cern.ch/root/vmc/Geant4VMC.html. This should be default
option.

- New Tracker digitization routine written by Sergio was implemented

- PamVMC again became compatible with geant4_vmc v.2.5 and ROOT 5.20.
 The problem was that ROOT developers introduced in TVirtualMC class a new
method SetMagField and new base class:TVirtualMagField from which
user-defined classes shoukd be derived

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    
10     #include "PamVMCGeoID.h"
11    
12     using std::sqrt;
13     using std::cout;
14     using std::endl;
15    
16     class pHitData: public TObject {
17    
18     public:
19     Int_t fPOS;
20     Int_t fPDG; //Particle PDG
21     Double_t fPATH; //PATH length in specific SD in (cm)
22     Double_t fTOF;
23     Double_t fPIN;
24     Double_t fXOUT;
25     Double_t fYOUT;
26     Double_t fZOUT;
27     Double_t fEREL; //Energy released during hit
28     Double_t fXIN;
29     Double_t fYIN;
30     Double_t fZIN;
31 pam-rm2 1.5 Bool_t fPRIM; //1 if it was a hit from primary particle
32 nikolas 1.1
33     pHitData(): fPOS(0), fPDG(0), fPATH(0.), fTOF(0.), fPIN(0.), fXOUT (0.),
34 pam-rm2 1.5 fYOUT (0.), fZOUT (0.), fEREL (0.),
35     fXIN(0.), fYIN (0.), fZIN (0.), fPRIM(kFALSE) { };
36 nikolas 1.1
37    
38     // Kept for back-compatibility
39     virtual void Clean() {
40     fPOS=fPDG=0;
41     fPATH= fTOF= fPIN= fXOUT =
42     fYOUT = fZOUT = fEREL =
43     fXIN= fYIN = fZIN = 0.;
44 pam-rm2 1.5 fPRIM = kFALSE;
45 nikolas 1.1 }
46    
47     // Inherithed from TObject
48    
49     virtual void Clear( Option_t * = "") { Clean(); }
50    
51     virtual 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     <<"YOUT: " << fYOUT << " (cm)"<<endl
62     <<"ZOUT: " << fZOUT << " (cm)"<<endl
63     <<"PATH: " << fPATH << " (cm)"<<endl
64     <<"EREL: " << fEREL*1E6 << " (keV)"<<endl
65 pam-rm2 1.5 <<"TOF: " << fTOF << " (s)"<<endl
66     <<"PRIMARY: "<<fPRIM<<endl; }
67 nikolas 1.1
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     virtual void CleanHit() {
85     fhitdata.Clean();
86     fnocall=0;
87     }
88    
89     virtual void Clear(Option_t * = ""){ this->~PamVMCDetectorHit(); }
90    
91     virtual pHitData * GenHit() { return new pHitData(fhitdata);}
92    
93     void operator = (const PamVMCDetectorHit & p );
94    
95     void operator += (const PamVMCDetectorHit & p );
96    
97     virtual void FillHitEntering(pHitData &phd){
98     SetHit(phd); }
99    
100     virtual void Print(Option_t* option = "") const;
101    
102 pam-rm2 1.5 void FillHit(TVirtualMC *g, Bool_t is_prim) {
103 nikolas 1.1 fnocall++;
104     double x,y,z,e;
105     g->TrackPosition(x,y,z);
106     UpdPDG(g->TrackPid());
107     UpdXIN(x);
108     UpdYIN(y);
109     UpdZIN(z);
110     SetXOUT(x);
111     SetYOUT(y);
112     SetZOUT(z);
113     g->TrackMomentum(x,y,z,e);
114     UpdPIN(sqrt(x*x+y*y+z*z));
115     AddTOF((g->GetStack()->GetCurrentTrack()->T())/1.0E9 /*TG4G3Units::Time()*/+(g->TrackTime()));
116     AddPATH(g->TrackStep());
117     AddEREL(g->Edep());
118 pam-rm2 1.5 SetPRIM(is_prim);
119 nikolas 1.1 }
120    
121 pam-rm2 1.5
122 nikolas 1.1 void SetHit( const pHitData &phd){
123     fnocall++;
124     SetPOS(phd.fPOS);
125     AddTOF(phd.fTOF);
126     AddPATH( phd.fPATH );
127     AddEREL( phd.fEREL );
128     UpdPDG( phd.fPDG );
129     UpdXIN( phd.fXIN );
130     UpdYIN( phd.fYIN );
131     UpdZIN( phd.fZIN );
132     UpdPIN( phd.fPIN );
133     SetXOUT( phd.fXOUT );
134     SetYOUT( phd.fYOUT );
135     SetZOUT( phd.fZOUT );
136 pam-rm2 1.5 SetPRIM( phd.fPRIM );
137 nikolas 1.1 }
138    
139     void UpdXIN(Double_t x){
140     if(! fhitdata.fXIN) SetXIN( x );}
141     void UpdYIN(Double_t x){
142     if(! fhitdata.fYIN) SetYIN( x );}
143     void UpdZIN(Double_t x){
144     if(! fhitdata.fZIN) SetZIN( x );}
145     void UpdPIN(Double_t x){
146     if(! fhitdata.fPIN) SetPIN( x );}
147     void UpdPDG(Int_t x){
148     if(! fhitdata.fPDG) SetPDG( x );}
149     void SetPOS (Int_t pos) { fhitdata.fPOS = pos; }
150     void SetPDG (Int_t pdg) { fhitdata.fPDG = pdg; }
151     void AddPATH (Double_t ln) { fhitdata.fPATH += ln; }
152     void AddEREL (Double_t de) { fhitdata.fEREL += de; }
153     void SetXIN (Double_t xin) { fhitdata.fXIN = xin; }
154     void SetYIN (Double_t yin) { fhitdata.fYIN = yin; }
155     void SetZIN (Double_t zin) { fhitdata.fZIN = zin; }
156     void SetTOF (Double_t tofin) { fhitdata.fTOF = tofin; }
157     void SetPIN (Double_t pxin) { fhitdata.fPIN = pxin; }
158     void SetXOUT (Double_t xout) { fhitdata.fXOUT = xout; }
159     void SetYOUT (Double_t yout) { fhitdata.fYOUT = yout; }
160     void SetZOUT (Double_t zout) { fhitdata.fZOUT = zout; }
161 pam-rm2 1.5 void SetPRIM (Bool_t prim) { fhitdata.fPRIM = prim; }
162 nikolas 1.1 void Reset();
163    
164     // Get methods
165    
166     const pHitData *GetHit() {return &fhitdata;}
167     Int_t GetPOS() { return fhitdata.fPOS; };
168     Int_t GetPDG() { return fhitdata.fPDG; };
169     Double_t GetPATH() { return fhitdata.fPATH; };
170     Double_t GetEREL() { return fhitdata.fEREL; };
171     Double_t GetXIN() { return fhitdata.fXIN; };
172     Double_t GetYIN() { return fhitdata.fYIN; };
173     Double_t GetZIN() { return fhitdata.fZIN; };
174     Double_t GetTOF() { return fhitdata.fTOF; };
175     Double_t GetPIN() { return fhitdata.fPIN; };
176     Double_t GetXOUT() { return fhitdata.fXOUT; };
177     Double_t GetYOUT() { return fhitdata.fYOUT; };
178     Double_t GetZOUT() { return fhitdata.fZOUT; };
179 pam-rm2 1.5 Bool_t GetPRIM() { return fhitdata.fPRIM; };
180 nikolas 1.1
181     protected:
182    
183     pHitData fhitdata;
184     Int_t fnocall;
185     void AddTOF (Double_t tofin) {
186     if (tofin!=0.) SetTOF((GetTOF()==0.) ? tofin: (GetTOF()+tofin)/2.);
187     }
188    
189     ClassDef(PamVMCDetectorHit,1) //PamVMCDetectorHit
190     };
191    
192     //PamVMCDetectorHit & operator+=(PamVMCDetectorHit & a, const PamVMCDetectorHit & p );
193    
194     #endif //PAMVMC_DETECTOR_HIT_H

  ViewVC Help
Powered by ViewVC 1.1.23