Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/tracking/src/G4RichTrajectory.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /tracking/src/G4RichTrajectory.cc (Version 11.3.0) and /tracking/src/G4RichTrajectory.cc (Version 7.1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 // G4RichTrajectory class implementation          
 27 //                                                
 28 // Contact:                                       
 29 //   Questions and comments on G4Trajectory, o    
 30 //   should be sent to                            
 31 //     Katsuya Amako  (e-mail: Katsuya.Amako@k    
 32 //     Makoto  Asai   (e-mail: asai@slac.stanf    
 33 //     Takashi Sasaki (e-mail: Takashi.Sasaki@    
 34 //   and on the extended code to:                 
 35 //     John Allison   (e-mail: John.Allison@ma    
 36 //     Joseph Perl    (e-mail: perl@slac.stanf    
 37 // -------------------------------------------    
 38                                                   
 39 #include "G4RichTrajectory.hh"                    
 40 #include "G4ClonedRichTrajectory.hh"              
 41                                                   
 42 #include "G4ParticleTable.hh"                     
 43 #include "G4AttDef.hh"                            
 44 #include "G4AttDefStore.hh"                       
 45 #include "G4AttValue.hh"                          
 46 #include "G4PhysicsModelCatalog.hh"               
 47 #include "G4RichTrajectoryPoint.hh"               
 48 #include "G4UIcommand.hh"                         
 49 #include "G4UnitsTable.hh"                        
 50 #include "G4VProcess.hh"                          
 51                                                   
 52 namespace {                                       
 53  G4Mutex CloneRichTrajectoryMutex = G4MUTEX_IN    
 54 }                                                 
 55                                                   
 56 // #define G4ATTDEBUG                             
 57 #ifdef G4ATTDEBUG                                 
 58 #  include "G4AttCheck.hh"                        
 59 #endif                                            
 60                                                   
 61 #include <sstream>                                
 62                                                   
 63 G4Allocator<G4RichTrajectory>*& aRichTrajector    
 64 {                                                 
 65   G4ThreadLocalStatic G4Allocator<G4RichTrajec    
 66   return _instance;                               
 67 }                                                 
 68                                                   
 69 G4RichTrajectory::G4RichTrajectory(const G4Tra    
 70 {                                                 
 71   G4ParticleDefinition* fpParticleDefinition =    
 72   ParticleName = fpParticleDefinition->GetPart    
 73   PDGCharge = fpParticleDefinition->GetPDGChar    
 74   PDGEncoding = fpParticleDefinition->GetPDGEn    
 75   fTrackID = aTrack->GetTrackID();                
 76   fParentID = aTrack->GetParentID();              
 77   initialKineticEnergy = aTrack->GetKineticEne    
 78   initialMomentum = aTrack->GetMomentum();        
 79   positionRecord = new G4TrajectoryPointContai    
 80                                                   
 81   // Following is for the first trajectory poi    
 82   positionRecord->push_back(new G4RichTrajecto    
 83                                                   
 84   fpInitialVolume = aTrack->GetTouchableHandle    
 85   fpInitialNextVolume = aTrack->GetNextTouchab    
 86   fpCreatorProcess = aTrack->GetCreatorProcess    
 87   fCreatorModelID = aTrack->GetCreatorModelID(    
 88                                                   
 89   // On construction, set final values to init    
 90   // Final values are updated at the addition     
 91   //                                              
 92   fpFinalVolume = aTrack->GetTouchableHandle()    
 93   fpFinalNextVolume = aTrack->GetNextTouchable    
 94   fpEndingProcess = aTrack->GetCreatorProcess(    
 95   fFinalKineticEnergy = aTrack->GetKineticEner    
 96                                                   
 97   // Insert the first rich trajectory point (s    
 98   //                                              
 99   fpRichPointContainer = new G4TrajectoryPoint    
100   fpRichPointContainer->push_back(new G4RichTr    
101 }                                                 
102                                                   
103 G4RichTrajectory::G4RichTrajectory(G4RichTraje    
104 {                                                 
105   ParticleName = right.ParticleName;              
106   PDGCharge = right.PDGCharge;                    
107   PDGEncoding = right.PDGEncoding;                
108   fTrackID = right.fTrackID;                      
109   fParentID = right.fParentID;                    
110   initialKineticEnergy = right.initialKineticE    
111   initialMomentum = right.initialMomentum;        
112   positionRecord = new G4TrajectoryPointContai    
113                                                   
114   for (auto& i : *right.positionRecord) {         
115     auto rightPoint = (G4RichTrajectoryPoint*)    
116     positionRecord->push_back(new G4RichTrajec    
117   }                                               
118                                                   
119   fpInitialVolume = right.fpInitialVolume;        
120   fpInitialNextVolume = right.fpInitialNextVol    
121   fpCreatorProcess = right.fpCreatorProcess;      
122   fCreatorModelID = right.fCreatorModelID;        
123   fpFinalVolume = right.fpFinalVolume;            
124   fpFinalNextVolume = right.fpFinalNextVolume;    
125   fpEndingProcess = right.fpEndingProcess;        
126   fFinalKineticEnergy = right.fFinalKineticEne    
127   fpRichPointContainer = new G4TrajectoryPoint    
128   for (auto& i : *right.fpRichPointContainer)     
129     auto rightPoint = (G4RichTrajectoryPoint*)    
130     fpRichPointContainer->push_back(new G4Rich    
131   }                                               
132 }                                                 
133                                                   
134 G4RichTrajectory::~G4RichTrajectory()             
135 {                                                 
136   if (fpRichPointContainer != nullptr) {          
137     for (auto& i : *fpRichPointContainer) {       
138       delete i;                                   
139     }                                             
140     fpRichPointContainer->clear();                
141     delete fpRichPointContainer;                  
142   }                                               
143 }                                                 
144                                                   
145 void G4RichTrajectory::AppendStep(const G4Step    
146 {                                                 
147   fpRichPointContainer->push_back(new G4RichTr    
148                                                   
149   // Except for first step, which is a sort of    
150   // the track, compute the final values...       
151   //                                              
152   const G4Track* track = aStep->GetTrack();       
153   const G4StepPoint* postStepPoint = aStep->Ge    
154   if (track->GetCurrentStepNumber() > 0) {        
155     fpFinalVolume = track->GetTouchableHandle(    
156     fpFinalNextVolume = track->GetNextTouchabl    
157     fpEndingProcess = postStepPoint->GetProces    
158     fFinalKineticEnergy =                         
159       aStep->GetPreStepPoint()->GetKineticEner    
160   }                                               
161 }                                                 
162                                                   
163 void G4RichTrajectory::MergeTrajectory(G4VTraj    
164 {                                                 
165   if (secondTrajectory == nullptr) return;        
166                                                   
167   auto seco = (G4RichTrajectory*)secondTraject    
168   G4int ent = seco->GetPointEntries();            
169   for (G4int i = 1; i < ent; ++i) {               
170     // initial point of the second trajectory     
171     //                                            
172     fpRichPointContainer->push_back((*(seco->f    
173   }                                               
174   delete (*seco->fpRichPointContainer)[0];        
175   seco->fpRichPointContainer->clear();            
176 }                                                 
177                                                   
178 void G4RichTrajectory::ShowTrajectory(std::ost    
179 {                                                 
180   // Invoke the default implementation in G4VT    
181   //                                              
182   G4VTrajectory::ShowTrajectory(os);              
183                                                   
184   // ... or override with your own code here.     
185 }                                                 
186                                                   
187 void G4RichTrajectory::DrawTrajectory() const     
188 {                                                 
189   // Invoke the default implementation in G4VT    
190   //                                              
191   G4VTrajectory::DrawTrajectory();                
192                                                   
193   // ... or override with your own code here.     
194 }                                                 
195                                                   
196 const std::map<G4String, G4AttDef>* G4RichTraj    
197 {                                                 
198   G4bool isNew;                                   
199   std::map<G4String, G4AttDef>* store = G4AttD    
200   if (isNew) {                                    
201     G4String ID;                                  
202                                                   
203     ID = "ID";                                    
204     (*store)[ID] = G4AttDef(ID, "Track ID", "P    
205                                                   
206     ID = "PID";                                   
207     (*store)[ID] = G4AttDef(ID, "Parent ID", "    
208                                                   
209     ID = "PN";                                    
210     (*store)[ID] = G4AttDef(ID, "Particle Name    
211                                                   
212     ID = "Ch";                                    
213     (*store)[ID] = G4AttDef(ID, "Charge", "Phy    
214                                                   
215     ID = "PDG";                                   
216     (*store)[ID] = G4AttDef(ID, "PDG Encoding"    
217                                                   
218     ID = "IKE";                                   
219     (*store)[ID] = G4AttDef(ID, "Initial kinet    
220                                                   
221     ID = "IMom";                                  
222     (*store)[ID] = G4AttDef(ID, "Initial momen    
223                                                   
224     ID = "IMag";                                  
225     (*store)[ID] = G4AttDef(ID, "Initial momen    
226                                                   
227     ID = "NTP";                                   
228     (*store)[ID] = G4AttDef(ID, "No. of points    
229                                                   
230     ID = "IVPath";                                
231     (*store)[ID] = G4AttDef(ID, "Initial Volum    
232                                                   
233     ID = "INVPath";                               
234     (*store)[ID] = G4AttDef(ID, "Initial Next     
235                                                   
236     ID = "CPN";                                   
237     (*store)[ID] = G4AttDef(ID, "Creator Proce    
238                                                   
239     ID = "CPTN";                                  
240     (*store)[ID] = G4AttDef(ID, "Creator Proce    
241                                                   
242     ID = "CMID";                                  
243     (*store)[ID] = G4AttDef(ID, "Creator Model    
244                                                   
245     ID = "CMN";                                   
246     (*store)[ID] = G4AttDef(ID, "Creator Model    
247                                                   
248     ID = "FVPath";                                
249     (*store)[ID] = G4AttDef(ID, "Final Volume     
250                                                   
251     ID = "FNVPath";                               
252     (*store)[ID] = G4AttDef(ID, "Final Next Vo    
253                                                   
254     ID = "EPN";                                   
255     (*store)[ID] = G4AttDef(ID, "Ending Proces    
256                                                   
257     ID = "EPTN";                                  
258     (*store)[ID] = G4AttDef(ID, "Ending Proces    
259                                                   
260     ID = "FKE";                                   
261     (*store)[ID] = G4AttDef(ID, "Final kinetic    
262   }                                               
263                                                   
264   return store;                                   
265 }                                                 
266                                                   
267 static G4String Path(const G4TouchableHandle&     
268 {                                                 
269   std::ostringstream oss;                         
270   G4int depth = th->GetHistoryDepth();            
271   for (G4int i = depth; i >= 0; --i) {            
272     oss << th->GetVolume(i)->GetName() << ':'     
273     if (i != 0) oss << '/';                       
274   }                                               
275   return oss.str();                               
276 }                                                 
277                                                   
278 std::vector<G4AttValue>* G4RichTrajectory::Cre    
279 {                                                 
280   // Create base class att values...              
281   //std::vector<G4AttValue>* values = G4VTraje    
282   auto values = new std::vector<G4AttValue>;      
283   values->push_back(G4AttValue("ID", G4UIcomma    
284   values->push_back(G4AttValue("PID", G4UIcomm    
285   values->push_back(G4AttValue("PN", ParticleN    
286   values->push_back(G4AttValue("Ch", G4UIcomma    
287   values->push_back(G4AttValue("PDG", G4UIcomm    
288   values->push_back(G4AttValue("IKE", G4BestUn    
289   values->push_back(G4AttValue("IMom", G4BestU    
290   values->push_back(G4AttValue("IMag", G4BestU    
291   values->push_back(G4AttValue("NTP", G4UIcomm    
292                                                   
293   if (fpInitialVolume && (fpInitialVolume->Get    
294     values->push_back(G4AttValue("IVPath", Pat    
295   }                                               
296   else {                                          
297     values->push_back(G4AttValue("IVPath", "No    
298   }                                               
299                                                   
300   if (fpInitialNextVolume && (fpInitialNextVol    
301     values->push_back(G4AttValue("INVPath", Pa    
302   }                                               
303   else {                                          
304     values->push_back(G4AttValue("INVPath", "N    
305   }                                               
306                                                   
307   if (fpCreatorProcess != nullptr) {              
308     values->push_back(G4AttValue("CPN", fpCrea    
309     G4ProcessType type = fpCreatorProcess->Get    
310     values->push_back(G4AttValue("CPTN", G4VPr    
311     values->push_back(G4AttValue("CMID", G4UIc    
312     const G4String& creatorModelName = G4Physi    
313     values->push_back(G4AttValue("CMN", creato    
314   }                                               
315   else {                                          
316     values->push_back(G4AttValue("CPN", "None"    
317     values->push_back(G4AttValue("CPTN", "None    
318     values->push_back(G4AttValue("CMID", "None    
319     values->push_back(G4AttValue("CMN", "None"    
320   }                                               
321                                                   
322   if (fpFinalVolume && (fpFinalVolume->GetVolu    
323     values->push_back(G4AttValue("FVPath", Pat    
324   }                                               
325   else {                                          
326     values->push_back(G4AttValue("FVPath", "No    
327   }                                               
328                                                   
329   if (fpFinalNextVolume && (fpFinalNextVolume-    
330     values->push_back(G4AttValue("FNVPath", Pa    
331   }                                               
332   else {                                          
333     values->push_back(G4AttValue("FNVPath", "N    
334   }                                               
335                                                   
336   if (fpEndingProcess != nullptr) {               
337     values->push_back(G4AttValue("EPN", fpEndi    
338     G4ProcessType type = fpEndingProcess->GetP    
339     values->push_back(G4AttValue("EPTN", G4VPr    
340   }                                               
341   else {                                          
342     values->push_back(G4AttValue("EPN", "None"    
343     values->push_back(G4AttValue("EPTN", "None    
344   }                                               
345                                                   
346   values->push_back(G4AttValue("FKE", G4BestUn    
347                                                   
348 #ifdef G4ATTDEBUG                                 
349   G4cout << G4AttCheck(values, GetAttDefs());     
350 #endif                                            
351                                                   
352   return values;                                  
353 }                                                 
354                                                   
355 G4ParticleDefinition* G4RichTrajectory::GetPar    
356 {                                                 
357   return (G4ParticleTable::GetParticleTable()-    
358 }                                                 
359                                                   
360 G4VTrajectory* G4RichTrajectory::CloneForMaste    
361 {                                                 
362   G4AutoLock lock(&CloneRichTrajectoryMutex);     
363   auto* cloned = new G4ClonedRichTrajectory(*t    
364   return cloned;                                  
365 }                                                 
366                                                   
367