source: snovis/trunk/source/G4Lab/cxx/Trajectory.cxx@ 291

Last change on this file since 291 was 288, checked in by barrand, 18 years ago
  • Property svn:eol-style set to native
File size: 11.3 KB
Line 
1
2// this :
3#include <G4Lab/Trajectory.h>
4
5// Lib :
6#include <Lib/Debug.h>
7
8// Geant4 :
9#include <G4Track.hh>
10#include <G4VProcess.hh>
11
12static G4Allocator<G4Lab::Trajectory> sTrajectoryAllocator; // Beurk.
13
14namespace G4Lab {
15class TrajectoryPoint {
16public:
17 TrajectoryPoint(G4TrajectoryPoint* aPoint,double aGlobalTime)
18 :fPoint(aPoint),fGlobalTime(aGlobalTime){}
19 virtual ~TrajectoryPoint() { delete fPoint;}
20 G4TrajectoryPoint* point() const { return fPoint;}
21 double globalTime() const { return fGlobalTime;}
22private:
23 G4TrajectoryPoint* fPoint;
24 double fGlobalTime;
25 Lib::Debug fDebug; // To check memory balance.
26};
27}
28
29//////////////////////////////////////////////////////////////////////////////
30G4Lab::Trajectory::Trajectory(
31 const G4Track* aTrack
32)
33:G4Trajectory(aTrack)
34,fProcess(0)
35,fSave(false)
36,fStoppingVolume(0)
37//////////////////////////////////////////////////////////////////////////////
38//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
39{
40 fKineticEnergy = aTrack->GetKineticEnergy();
41 fTotalEnergy = aTrack->GetTotalEnergy();
42 fGlobalTime = aTrack->GetGlobalTime();
43 fProcess = aTrack->GetCreatorProcess();
44
45 fStoppingPoint = aTrack->GetPosition();
46 fStoppingVolume = aTrack->GetVolume();
47
48 /*
49 printf("debug : G4Lab::Trajectory : \"%s\", kineticEnergy : %g, totalEnergy : %g, globalTime : %g\n",
50 GetParticleName().c_str(),
51 fKineticEnergy,fTotalEnergy,fGlobalTime);
52 */
53 TrajectoryPoint* tp =
54 new TrajectoryPoint(
55 new G4TrajectoryPoint(aTrack->GetPosition()),
56 aTrack->GetGlobalTime());
57 fPoints.push_back(tp);
58
59}
60//////////////////////////////////////////////////////////////////////////////
61G4Lab::Trajectory::Trajectory(
62 Trajectory& aFrom
63)
64:G4Trajectory(aFrom)
65//,IGeant4Trajectory(aFrom)
66//////////////////////////////////////////////////////////////////////////////
67//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
68{
69 fKineticEnergy = aFrom.fKineticEnergy;
70 fTotalEnergy = aFrom.fTotalEnergy;
71 fGlobalTime = aFrom.fGlobalTime;
72 fProcess = aFrom.fProcess;
73 fSave = aFrom.fSave;
74
75 size_t number = aFrom.fPoints.size();
76 for(size_t index=0;index<number;index++) {
77 G4TrajectoryPoint* point = aFrom.fPoints[index]->point();
78 TrajectoryPoint* tp =
79 new TrajectoryPoint(new G4TrajectoryPoint(*point),aFrom.fGlobalTime);
80 fPoints.push_back(tp);
81 }
82
83}
84//////////////////////////////////////////////////////////////////////////////
85G4Lab::Trajectory::~Trajectory(
86)
87//////////////////////////////////////////////////////////////////////////////
88//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
89{
90 size_t number = fPoints.size();
91 for(size_t index=0;index<number;index++) {
92 delete fPoints[index];
93 }
94 fPoints.clear();
95}
96//////////////////////////////////////////////////////////////////////////////
97//////////////////////////////////////////////////////////////////////////////
98//////////////////////////////////////////////////////////////////////////////
99//////////////////////////////////////////////////////////////////////////////
100double G4Lab::Trajectory::kineticEnergy(
101) const
102//////////////////////////////////////////////////////////////////////////////
103//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
104{
105 return fKineticEnergy;
106}
107//////////////////////////////////////////////////////////////////////////////
108double G4Lab::Trajectory::totalEnergy(
109) const
110//////////////////////////////////////////////////////////////////////////////
111//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
112{
113 return fTotalEnergy;
114}
115//////////////////////////////////////////////////////////////////////////////
116double G4Lab::Trajectory::globalTime(
117) const
118//////////////////////////////////////////////////////////////////////////////
119//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
120{
121 return fGlobalTime;
122}
123//////////////////////////////////////////////////////////////////////////////
124unsigned int G4Lab::Trajectory::pointEntries(
125) const
126//////////////////////////////////////////////////////////////////////////////
127//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
128{
129 return fPoints.size();
130}
131//////////////////////////////////////////////////////////////////////////////
132double G4Lab::Trajectory::pointGlobalTime(
133 unsigned int aIndex
134) const
135//////////////////////////////////////////////////////////////////////////////
136//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
137{
138 return fPoints[aIndex]->globalTime();
139}
140//////////////////////////////////////////////////////////////////////////////
141std::string G4Lab::Trajectory::creatorProcessName(
142) const
143//////////////////////////////////////////////////////////////////////////////
144//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
145{
146 if(!fProcess) return "";
147 return fProcess->GetProcessName();
148}
149//////////////////////////////////////////////////////////////////////////////
150std::string G4Lab::Trajectory::creatorProcessType(
151) const
152//////////////////////////////////////////////////////////////////////////////
153//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
154{
155 if(!fProcess) return "NotDefined";
156 switch(fProcess->GetProcessType()){
157 case fNotDefined: return "NotDefined";
158 case fTransportation: return "Transportation";
159 case fElectromagnetic: return "Electromagnetic";
160 case fOptical: return "Optical";
161 case fHadronic: return "Hadronic";
162 case fPhotolepton_hadron: return "Photolepton_hadron";
163 case fDecay: return "Decay";
164 case fGeneral: return "General";
165 case fParameterisation: return "Parameterisation";
166 case fUserDefined: return "UserDefined";
167 };
168 return "NotDefined";
169}
170//////////////////////////////////////////////////////////////////////////////
171void G4Lab::Trajectory::setSave(
172 bool aFlag
173)
174//////////////////////////////////////////////////////////////////////////////
175//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
176{
177 fSave = aFlag;
178}
179//////////////////////////////////////////////////////////////////////////////
180bool G4Lab::Trajectory::save(
181) const
182//////////////////////////////////////////////////////////////////////////////
183//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
184{
185 return fSave;
186}
187//////////////////////////////////////////////////////////////////////////////
188std::vector<double> G4Lab::Trajectory::stoppingPoint(
189) const
190//////////////////////////////////////////////////////////////////////////////
191//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
192{
193 std::vector<double> v(3);
194 v[0] = fStoppingPoint.x();
195 v[1] = fStoppingPoint.y();
196 v[2] = fStoppingPoint.z();
197 return v;
198}
199//////////////////////////////////////////////////////////////////////////////
200G4VPhysicalVolume* G4Lab::Trajectory::stoppingPhysicalVolume(
201) const
202//////////////////////////////////////////////////////////////////////////////
203//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
204{
205 return fStoppingVolume;
206}
207//////////////////////////////////////////////////////////////////////////////
208//////////////////////////////////////////////////////////////////////////////
209//////////////////////////////////////////////////////////////////////////////
210void* G4Lab::Trajectory::operator new(
211 size_t
212)
213//////////////////////////////////////////////////////////////////////////////
214//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
215{
216 return (void*)sTrajectoryAllocator.MallocSingle();
217}
218//////////////////////////////////////////////////////////////////////////////
219void G4Lab::Trajectory::operator delete(
220 void* aTrajectory
221)
222//////////////////////////////////////////////////////////////////////////////
223//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
224{
225 sTrajectoryAllocator.FreeSingle((G4Lab::Trajectory*)aTrajectory);
226}
227//////////////////////////////////////////////////////////////////////////////
228int G4Lab::Trajectory::operator == (
229 const G4Lab::Trajectory& aRight
230) const
231//////////////////////////////////////////////////////////////////////////////
232//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
233{
234 return (this==&aRight);
235}
236//////////////////////////////////////////////////////////////////////////////
237void G4Lab::Trajectory::ShowTrajectory(
238 std::ostream&
239) const
240//////////////////////////////////////////////////////////////////////////////
241//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
242{
243}
244//////////////////////////////////////////////////////////////////////////////
245void G4Lab::Trajectory::DrawTrajectory(
246 G4int
247) const
248//////////////////////////////////////////////////////////////////////////////
249//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
250{
251}
252//////////////////////////////////////////////////////////////////////////////
253void G4Lab::Trajectory::AppendStep(
254 const G4Step* aStep
255)
256//////////////////////////////////////////////////////////////////////////////
257//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
258{
259 TrajectoryPoint* tp =
260 new TrajectoryPoint(
261 new G4TrajectoryPoint(aStep->GetPostStepPoint()->GetPosition()),
262 aStep->GetPostStepPoint()->GetGlobalTime());
263 fPoints.push_back(tp);
264}
265//////////////////////////////////////////////////////////////////////////////
266int G4Lab::Trajectory::GetPointEntries(
267) const
268//////////////////////////////////////////////////////////////////////////////
269//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
270{
271 return fPoints.size();
272}
273//////////////////////////////////////////////////////////////////////////////
274G4VTrajectoryPoint* G4Lab::Trajectory::GetPoint(
275 G4int aIndex
276) const
277//////////////////////////////////////////////////////////////////////////////
278//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
279{
280 return fPoints[aIndex]->point();
281}
282//////////////////////////////////////////////////////////////////////////////
283void G4Lab::Trajectory::MergeTrajectory(
284 G4VTrajectory* aTrajectory
285)
286//////////////////////////////////////////////////////////////////////////////
287// Transfer points from aTrajectory to this.
288//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
289{
290 if(!aTrajectory) return;
291 Trajectory* tj = (Trajectory*)aTrajectory;
292 size_t number = tj->fPoints.size();
293 // initial point of the second trajectory should not be merged
294 for(size_t index=1;index<number;index++) {
295 fPoints.push_back(tj->fPoints[index]);
296 }
297 delete tj->fPoints[0];
298 tj->fPoints.clear();
299}
300//////////////////////////////////////////////////////////////////////////////
301const std::map<G4String,G4AttDef>* G4Lab::Trajectory::GetAttDefs() const
302//////////////////////////////////////////////////////////////////////////////
303//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
304{
305 //return G4Trajectory::GetAttDefs();
306 return 0;
307}
308//////////////////////////////////////////////////////////////////////////////
309std::vector<G4AttValue>* G4Lab::Trajectory::CreateAttValues() const
310//////////////////////////////////////////////////////////////////////////////
311//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
312{
313 //return G4Trajectory::CreateAttValues();
314 return 0;
315}
316
Note: See TracBrowser for help on using the repository browser.