Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/include/G4LossTableManager.hh

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 /processes/electromagnetic/utils/include/G4LossTableManager.hh (Version 11.3.0) and /processes/electromagnetic/utils/include/G4LossTableManager.hh (Version 4.1.p1)


  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 // -------------------------------------------    
 27 //                                                
 28 // GEANT4 Class header file                       
 29 //                                                
 30 //                                                
 31 // File name:     G4LossTableManager              
 32 //                                                
 33 // Author:        Vladimir Ivanchenko on base     
 34 //                and Maria Grazia Pia ideas      
 35 //                                                
 36 // Creation date: 03.01.2002                      
 37 //                                                
 38 // Modifications by V.Ivanchenko                  
 39 //                                                
 40 // Class Description:                             
 41 //                                                
 42 // A utility static class, responsable for the    
 43 // for each particle                              
 44 //                                                
 45 // Energy loss processes have to register thei    
 46 // class. The responsibility of creating and d    
 47 // remains with the energy loss classes.          
 48                                                   
 49 // -------------------------------------------    
 50 //                                                
 51                                                   
 52 #ifndef G4LossTableManager_h                      
 53 #define G4LossTableManager_h 1                    
 54                                                   
 55 #include <map>                                    
 56 #include <vector>                                 
 57 #include "globals.hh"                             
 58 #include "G4ThreadLocalSingleton.hh"              
 59 #include "G4VEnergyLossProcess.hh"                
 60 #include "G4EmParameters.hh"                      
 61                                                   
 62 class G4PhysicsTable;                             
 63 class G4MaterialCutsCouple;                       
 64 class G4ParticleDefinition;                       
 65 class G4Region;                                   
 66 class G4EmSaturation;                             
 67 class G4EmConfigurator;                           
 68 class G4ElectronIonPair;                          
 69 class G4NIELCalculator;                           
 70 class G4VMultipleScattering;                      
 71 class G4VEmProcess;                               
 72 class G4EmCorrections;                            
 73 class G4LossTableBuilder;                         
 74 class G4VAtomDeexcitation;                        
 75 class G4VSubCutProducer;                          
 76                                                   
 77 class G4LossTableManager                          
 78 {                                                 
 79                                                   
 80 friend class G4ThreadLocalSingleton<G4LossTabl    
 81                                                   
 82 public:                                           
 83                                                   
 84   static G4LossTableManager* Instance();          
 85                                                   
 86   ~G4LossTableManager();                          
 87                                                   
 88   //------------------------------------------    
 89   // initialisation before a new run              
 90   //------------------------------------------    
 91                                                   
 92   void PreparePhysicsTable(const G4ParticleDef    
 93                            G4VEnergyLossProces    
 94                                                   
 95   void PreparePhysicsTable(const G4ParticleDef    
 96                            G4VEmProcess* p);      
 97                                                   
 98   void PreparePhysicsTable(const G4ParticleDef    
 99                            G4VMultipleScatteri    
100                                                   
101   void BuildPhysicsTable(const G4ParticleDefin    
102                                                   
103   void BuildPhysicsTable(const G4ParticleDefin    
104                          G4VEnergyLossProcess*    
105                                                   
106   void LocalPhysicsTables(const G4ParticleDefi    
107                           G4VEnergyLossProcess    
108                                                   
109   void DumpHtml();                                
110                                                   
111   //------------------------------------------    
112   // Run time access to DEDX, range, energy fo    
113   // energy, and G4MaterialCutsCouple             
114   //------------------------------------------    
115                                                   
116   inline G4double GetDEDX(                        
117     const G4ParticleDefinition *aParticle,        
118     G4double kineticEnergy,                       
119     const G4MaterialCutsCouple *couple);          
120                                                   
121   inline G4double GetRange(                       
122     const G4ParticleDefinition *aParticle,        
123     G4double kineticEnergy,                       
124     const G4MaterialCutsCouple *couple);          
125                                                   
126   inline G4double GetCSDARange(                   
127     const G4ParticleDefinition *aParticle,        
128     G4double kineticEnergy,                       
129     const G4MaterialCutsCouple *couple);          
130                                                   
131   inline G4double GetRangeFromRestricteDEDX(      
132     const G4ParticleDefinition *aParticle,        
133     G4double kineticEnergy,                       
134     const G4MaterialCutsCouple *couple);          
135                                                   
136   inline G4double GetEnergy(                      
137     const G4ParticleDefinition *aParticle,        
138     G4double range,                               
139     const G4MaterialCutsCouple *couple);          
140                                                   
141   inline G4double GetDEDXDispersion(              
142     const G4MaterialCutsCouple *couple,           
143     const G4DynamicParticle* dp,                  
144           G4double& length);                      
145                                                   
146   //------------------------------------------    
147   // Methods to be called only at initialisati    
148   // and at the end of the job                    
149   //------------------------------------------    
150                                                   
151   void Register(G4VEnergyLossProcess* p);         
152                                                   
153   void DeRegister(G4VEnergyLossProcess* p);       
154                                                   
155   void Register(G4VMultipleScattering* p);        
156                                                   
157   void DeRegister(G4VMultipleScattering* p);      
158                                                   
159   void Register(G4VEmProcess* p);                 
160                                                   
161   void DeRegister(G4VEmProcess* p);               
162                                                   
163   void Register(G4VProcess* p);                   
164                                                   
165   void DeRegister(G4VProcess* p);                 
166                                                   
167   void Register(G4VEmModel* p);                   
168                                                   
169   void DeRegister(G4VEmModel* p);                 
170                                                   
171   void Register(G4VEmFluctuationModel* p);        
172                                                   
173   void DeRegister(G4VEmFluctuationModel* p);      
174                                                   
175   void RegisterExtraParticle(const G4ParticleD    
176                              G4VEnergyLossProc    
177                                                   
178   void SetVerbose(G4int val);                     
179                                                   
180   void ResetParameters();                         
181                                                   
182   void SetAtomDeexcitation(G4VAtomDeexcitation    
183                                                   
184   void SetSubCutProducer(G4VSubCutProducer*);     
185                                                   
186   void SetNIELCalculator(G4NIELCalculator*);      
187                                                   
188   //------------------------------------------    
189   // Access methods                               
190   //------------------------------------------    
191                                                   
192   inline G4bool IsMaster() const;                 
193                                                   
194   G4VEnergyLossProcess* GetEnergyLossProcess(c    
195                                                   
196   const std::vector<G4VEnergyLossProcess*>& Ge    
197                                                   
198   const std::vector<G4VEmProcess*>& GetEmProce    
199                                                   
200   const std::vector<G4VMultipleScattering*>& G    
201                                                   
202   G4EmSaturation* EmSaturation();                 
203                                                   
204   G4EmConfigurator* EmConfigurator();             
205                                                   
206   G4ElectronIonPair* ElectronIonPair();           
207                                                   
208   G4NIELCalculator* NIELCalculator();             
209                                                   
210   inline G4EmCorrections* EmCorrections();        
211                                                   
212   inline G4VAtomDeexcitation* AtomDeexcitation    
213                                                   
214   inline G4VSubCutProducer* SubCutProducer();     
215                                                   
216   inline G4LossTableBuilder* GetTableBuilder()    
217                                                   
218   inline void SetGammaGeneralProcess(G4VEmProc    
219                                                   
220   inline G4VEmProcess* GetGammaGeneralProcess(    
221                                                   
222   inline void SetElectronGeneralProcess(G4VEmP    
223                                                   
224   inline G4VEmProcess* GetElectronGeneralProce    
225                                                   
226   inline void SetPositronGeneralProcess(G4VEmP    
227                                                   
228   inline G4VEmProcess* GetPositronGeneralProce    
229                                                   
230   G4LossTableManager(G4LossTableManager &) = d    
231   G4LossTableManager & operator=(const G4LossT    
232                                                   
233 private:                                          
234                                                   
235   //------------------------------------------    
236   // Private methods and members                  
237   //------------------------------------------    
238                                                   
239   G4LossTableManager();                           
240                                                   
241   void Clear();                                   
242                                                   
243   G4VEnergyLossProcess* BuildTables(const G4Pa    
244                                                   
245   void CopyTables(const G4ParticleDefinition*     
246                   G4VEnergyLossProcess*);         
247                                                   
248   void ParticleHaveNoLoss(const G4ParticleDefi    
249                                                   
250   void CopyDEDXTables();                          
251                                                   
252   void PrintEWarning(G4String, G4double);         
253                                                   
254   static G4ThreadLocal G4LossTableManager* ins    
255                                                   
256   typedef const G4ParticleDefinition* PD;         
257                                                   
258   // cache                                        
259   G4VEnergyLossProcess* currentLoss{nullptr};     
260   PD currentParticle{nullptr};                    
261   PD theElectron;                                 
262   PD theGenericIon{nullptr};                      
263   PD firstParticle{nullptr};                      
264                                                   
265   G4LossTableBuilder* tableBuilder;               
266   G4EmCorrections* emCorrections;                 
267   G4EmConfigurator* emConfigurator{nullptr};      
268   G4ElectronIonPair* emElectronIonPair{nullptr    
269   G4NIELCalculator* nielCalculator{nullptr};      
270   G4VAtomDeexcitation* atomDeexcitation{nullpt    
271   G4VSubCutProducer* subcutProducer{nullptr};     
272                                                   
273   G4EmParameters* theParameters;                  
274   G4VEmProcess* gGeneral{nullptr};                
275   G4VEmProcess* eGeneral{nullptr};                
276   G4VEmProcess* pGeneral{nullptr};                
277                                                   
278   G4int verbose;                                  
279   G4int n_loss{0};                                
280   G4int run{-1};                                  
281                                                   
282   G4bool all_tables_are_built{false};             
283   G4bool startInitialisation{false};              
284   G4bool resetParam{true};                        
285   G4bool isMaster{false};                         
286                                                   
287   std::vector<G4VEnergyLossProcess*> loss_vect    
288   std::vector<PD> part_vector;                    
289   std::vector<PD> base_part_vector;               
290   std::vector<G4PhysicsTable*> dedx_vector;       
291   std::vector<G4PhysicsTable*> range_vector;      
292   std::vector<G4PhysicsTable*> inv_range_vecto    
293   std::vector<G4bool> tables_are_built;           
294   std::vector<G4bool> isActive;                   
295   std::vector<G4VMultipleScattering*> msc_vect    
296   std::vector<G4VEmProcess*> emp_vector;          
297   std::vector<G4VEmModel*> mod_vector;            
298   std::vector<G4VEmFluctuationModel*> fmod_vec    
299   std::vector<G4VProcess*> p_vector;              
300                                                   
301   std::map<PD,G4VEnergyLossProcess*,std::less<    
302 };                                                
303                                                   
304 //....oooOO0OOooo........oooOO0OOooo........oo    
305 //....oooOO0OOooo........oooOO0OOooo........oo    
306                                                   
307 inline                                            
308 G4double G4LossTableManager::GetDEDX(const G4P    
309                                      G4double     
310                                      const G4M    
311 {                                                 
312   if(aParticle != currentParticle) { GetEnergy    
313   return currentLoss ? currentLoss->GetDEDX(ki    
314 }                                                 
315                                                   
316 //....oooOO0OOooo........oooOO0OOooo........oo    
317                                                   
318 inline                                            
319 G4double G4LossTableManager::GetCSDARange(cons    
320                                           G4do    
321                                           cons    
322 {                                                 
323   if(aParticle != currentParticle) { GetEnergy    
324   return currentLoss ? currentLoss->GetCSDARan    
325 }                                                 
326                                                   
327 //....oooOO0OOooo........oooOO0OOooo........oo    
328                                                   
329 inline                                            
330 G4double G4LossTableManager::GetRangeFromRestr    
331                              const G4ParticleD    
332                              G4double kineticE    
333                              const G4MaterialC    
334 {                                                 
335   if(aParticle != currentParticle) { GetEnergy    
336   return currentLoss ? currentLoss->GetRange(k    
337 }                                                 
338                                                   
339 //....oooOO0OOooo........oooOO0OOooo........oo    
340                                                   
341 inline                                            
342 G4double G4LossTableManager::GetRange(const G4    
343                                       G4double    
344                                       const G4    
345 {                                                 
346   if(aParticle != currentParticle) { GetEnergy    
347   return currentLoss ? currentLoss->GetRange(k    
348 }                                                 
349                                                   
350 //....oooOO0OOooo........oooOO0OOooo........oo    
351                                                   
352 inline                                            
353 G4double G4LossTableManager::GetEnergy(const G    
354                                        G4doubl    
355                                        const G    
356 {                                                 
357   if(aParticle != currentParticle) { GetEnergy    
358   return currentLoss ? currentLoss->GetKinetic    
359 }                                                 
360                                                   
361 //....oooOO0OOooo........oooOO0OOooo........oo    
362                                                   
363 inline                                            
364 G4double G4LossTableManager::GetDEDXDispersion    
365                              const G4MaterialC    
366                              const G4DynamicPa    
367                              G4double& length)    
368 {                                                 
369   const G4ParticleDefinition* aParticle = dp->    
370   if(aParticle != currentParticle) { GetEnergy    
371   return currentLoss ? currentLoss->GetDEDXDis    
372 }                                                 
373                                                   
374 //....oooOO0OOooo........oooOO0OOooo........oo    
375                                                   
376 inline G4bool G4LossTableManager::IsMaster() c    
377 {                                                 
378   return isMaster;                                
379 }                                                 
380                                                   
381 //....oooOO0OOooo........oooOO0OOooo........oo    
382                                                   
383 inline G4EmCorrections* G4LossTableManager::Em    
384 {                                                 
385   return emCorrections;                           
386 }                                                 
387                                                   
388 //....oooOO0OOooo........oooOO0OOooo........oo    
389                                                   
390 inline G4VAtomDeexcitation* G4LossTableManager    
391 {                                                 
392   return atomDeexcitation;                        
393 }                                                 
394                                                   
395 //....oooOO0OOooo........oooOO0OOooo........oo    
396                                                   
397 inline G4VSubCutProducer* G4LossTableManager::    
398 {                                                 
399   return subcutProducer;                          
400 }                                                 
401                                                   
402 //....oooOO0OOooo........oooOO0OOooo........oo    
403                                                   
404 inline G4LossTableBuilder* G4LossTableManager:    
405 {                                                 
406   return tableBuilder;                            
407 }                                                 
408                                                   
409 //....oooOO0OOooo........oooOO0OOooo........oo    
410                                                   
411 inline void G4LossTableManager::SetGammaGenera    
412 {                                                 
413   gGeneral = ptr;                                 
414 }                                                 
415                                                   
416 //....oooOO0OOooo........oooOO0OOooo........oo    
417                                                   
418 inline G4VEmProcess* G4LossTableManager::GetGa    
419 {                                                 
420   return gGeneral;                                
421 }                                                 
422                                                   
423 //....oooOO0OOooo........oooOO0OOooo........oo    
424                                                   
425 inline void G4LossTableManager::SetElectronGen    
426 {                                                 
427   eGeneral = ptr;                                 
428 }                                                 
429                                                   
430 //....oooOO0OOooo........oooOO0OOooo........oo    
431                                                   
432 inline G4VEmProcess* G4LossTableManager::GetEl    
433 {                                                 
434   return eGeneral;                                
435 }                                                 
436                                                   
437 //....oooOO0OOooo........oooOO0OOooo........oo    
438                                                   
439 inline void G4LossTableManager::SetPositronGen    
440 {                                                 
441   pGeneral = ptr;                                 
442 }                                                 
443                                                   
444 //....oooOO0OOooo........oooOO0OOooo........oo    
445                                                   
446 inline G4VEmProcess* G4LossTableManager::GetPo    
447 {                                                 
448   return pGeneral;                                
449 }                                                 
450 //....oooOO0OOooo........oooOO0OOooo........oo    
451                                                   
452 #endif                                            
453