Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/include/G4VEmProcess.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/G4VEmProcess.hh (Version 11.3.0) and /processes/electromagnetic/utils/include/G4VEmProcess.hh (Version 2.0)


  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:     G4VEmProcess                    
 32 //                                                
 33 // Author:        Vladimir Ivanchenko             
 34 //                                                
 35 // Creation date: 01.10.2003                      
 36 //                                                
 37 // Modifications: Vladimir Ivanchenko             
 38 //                                                
 39 // Class Description:                             
 40 //                                                
 41 // It is the base class - EM discrete and rest    
 42                                                   
 43 // -------------------------------------------    
 44 //                                                
 45                                                   
 46 #ifndef G4VEmProcess_h                            
 47 #define G4VEmProcess_h 1                          
 48                                                   
 49 #include <CLHEP/Units/SystemOfUnits.h>            
 50                                                   
 51 #include "G4VDiscreteProcess.hh"                  
 52 #include "globals.hh"                             
 53 #include "G4Material.hh"                          
 54 #include "G4MaterialCutsCouple.hh"                
 55 #include "G4Track.hh"                             
 56 #include "G4UnitsTable.hh"                        
 57 #include "G4ParticleDefinition.hh"                
 58 #include "G4ParticleChangeForGamma.hh"            
 59 #include "G4EmParameters.hh"                      
 60 #include "G4EmDataHandler.hh"                     
 61 #include "G4EmTableType.hh"                       
 62 #include "G4EmModelManager.hh"                    
 63 #include "G4EmSecondaryParticleType.hh"           
 64                                                   
 65 class G4Step;                                     
 66 class G4VEmModel;                                 
 67 class G4DataVector;                               
 68 class G4VParticleChange;                          
 69 class G4PhysicsTable;                             
 70 class G4PhysicsVector;                            
 71 class G4EmBiasingManager;                         
 72 class G4LossTableManager;                         
 73                                                   
 74 //....oooOO0OOooo........oooOO0OOooo........oo    
 75                                                   
 76 class G4VEmProcess : public G4VDiscreteProcess    
 77 {                                                 
 78 public:                                           
 79                                                   
 80   G4VEmProcess(const G4String& name, G4Process    
 81                                                   
 82   ~G4VEmProcess() override;                       
 83                                                   
 84   //------------------------------------------    
 85   // Virtual methods to be implemented in conc    
 86   //------------------------------------------    
 87                                                   
 88   void ProcessDescription(std::ostream& outFil    
 89                                                   
 90 protected:                                        
 91                                                   
 92   virtual void StreamProcessInfo(std::ostream&    
 93                                                   
 94   virtual void InitialiseProcess(const G4Parti    
 95                                                   
 96   //------------------------------------------    
 97   // Implementation of virtual methods common     
 98   //------------------------------------------    
 99                                                   
100 public:                                           
101                                                   
102   // Initialise for build of tables               
103   void PreparePhysicsTable(const G4ParticleDef    
104                                                   
105   // Build physics table during initialisation    
106   void BuildPhysicsTable(const G4ParticleDefin    
107                                                   
108   // Called before tracking of each new G4Trac    
109   void StartTracking(G4Track*) override;          
110                                                   
111   // implementation of virtual method, specifi    
112   G4double PostStepGetPhysicalInteractionLengt    
113                              const G4Track& tr    
114                              G4double   previo    
115                              G4ForceCondition*    
116                                                   
117   // implementation of virtual method, specifi    
118   G4VParticleChange* PostStepDoIt(const G4Trac    
119                                                   
120   // Store PhysicsTable in a file.                
121   // Return false in case of failure at I/O       
122   G4bool StorePhysicsTable(const G4ParticleDef    
123                            const G4String& dir    
124                            G4bool ascii = fals    
125                                                   
126   // Retrieve Physics from a file.                
127   // (return true if the Physics Table can be     
128   // (return false if the process has no funct    
129   // File name should is constructed as proces    
130   // should be placed under the directory spec    
131   G4bool RetrievePhysicsTable(const G4Particle    
132                               const G4String&     
133                               G4bool ascii) ov    
134                                                   
135   // allowing check process name                  
136   virtual G4VEmProcess* GetEmProcess(const G4S    
137                                                   
138   //------------------------------------------    
139   // Specific methods for Discrete EM post ste    
140   //------------------------------------------    
141                                                   
142   // The main method to access cross section p    
143   inline G4double GetLambda(G4double kinEnergy    
144                             const G4MaterialCu    
145                             G4double logKinEne    
146                                                   
147   // It returns the cross section per volume f    
148   G4double GetCrossSection(const G4double kinE    
149                            const G4MaterialCut    
150                                                   
151   // It returns the cross section of the proce    
152   G4double ComputeCrossSectionPerAtom(G4double    
153                                       G4double    
154                                       G4double    
155                                                   
156   inline G4double MeanFreePath(const G4Track&     
157                                                   
158   //------------------------------------------    
159   // Specific methods to build and access Phys    
160   //------------------------------------------    
161                                                   
162   // Binning for lambda table                     
163   void SetLambdaBinning(G4int nbins);             
164                                                   
165   // Min kinetic energy for tables                
166   void SetMinKinEnergy(G4double e);               
167                                                   
168   // Min kinetic energy for high energy table     
169   void SetMinKinEnergyPrim(G4double e);           
170                                                   
171   // Max kinetic energy for tables                
172   void SetMaxKinEnergy(G4double e);               
173                                                   
174   // Cross section table pointers                 
175   inline G4PhysicsTable* LambdaTable() const;     
176   inline G4PhysicsTable* LambdaTablePrim() con    
177   inline void SetLambdaTable(G4PhysicsTable*);    
178   inline void SetLambdaTablePrim(G4PhysicsTabl    
179                                                   
180   // Integral method type and peak positions      
181   inline std::vector<G4double>* EnergyOfCrossS    
182   inline void SetEnergyOfCrossSectionMax(std::    
183   inline G4CrossSectionType CrossSectionType()    
184   inline void SetCrossSectionType(G4CrossSecti    
185                                                   
186   //------------------------------------------    
187   // Define and access particle type              
188   //------------------------------------------    
189                                                   
190   inline const G4ParticleDefinition* Particle(    
191   inline const G4ParticleDefinition* Secondary    
192                                                   
193 protected:                                        
194                                                   
195   //------------------------------------------    
196   // Specific methods to set, access, modify m    
197   //------------------------------------------    
198                                                   
199   // Select model in run time                     
200   inline G4VEmModel* SelectModel(G4double kinE    
201                                                   
202 public:                                           
203                                                   
204   // Select model by energy and couple index      
205   inline G4VEmModel* SelectModelForMaterial(G4    
206                                             st    
207                                                   
208   // Add model for region, smaller value of or    
209   // model will be selected for a given energy    
210   void AddEmModel(G4int, G4VEmModel*, const G4    
211                                                   
212   // Assign a model to a process local list, t    
213   // the derived process should execute AddEmM    
214   void SetEmModel(G4VEmModel*, G4int index = 0    
215                                                   
216   inline G4int NumberOfModels() const;            
217                                                   
218   // return a model from the local list           
219   inline G4VEmModel* EmModel(std::size_t index    
220                                                   
221   // Access to active model                       
222   inline const G4VEmModel* GetCurrentModel() c    
223                                                   
224   // Access to models                             
225   inline G4VEmModel* GetModelByIndex(G4int idx    
226                                                   
227   // Access to the current G4Element              
228   const G4Element* GetCurrentElement() const;     
229                                                   
230   // Biasing parameters                           
231   void SetCrossSectionBiasingFactor(G4double f    
232   inline G4double CrossSectionBiasingFactor()     
233                                                   
234   // Activate forced interaction                  
235   void ActivateForcedInteraction(G4double leng    
236                                  const G4Strin    
237                                  G4bool flag =    
238                                                   
239   void ActivateSecondaryBiasing(const G4String    
240                                 G4double energ    
241                                                   
242   inline void SetEmMasterProcess(const G4VEmPr    
243                                                   
244   inline void SetBuildTableFlag(G4bool val);      
245                                                   
246   inline void CurrentSetup(const G4MaterialCut    
247                                                   
248   inline G4bool UseBaseMaterial() const;          
249                                                   
250   void BuildLambdaTable();                        
251                                                   
252   void StreamInfo(std::ostream& outFile, const    
253                   G4bool rst=false) const;        
254                                                   
255   // hide copy constructor and assignment oper    
256   G4VEmProcess(G4VEmProcess &) = delete;          
257   G4VEmProcess & operator=(const G4VEmProcess     
258                                                   
259   //------------------------------------------    
260   // Other generic methods                        
261   //------------------------------------------    
262                                                   
263 protected:                                        
264                                                   
265   G4double GetMeanFreePath(const G4Track& trac    
266                            G4double previousSt    
267                            G4ForceCondition* c    
268                                                   
269   G4PhysicsVector* LambdaPhysicsVector(const G    
270                                                   
271   inline void DefineMaterial(const G4MaterialC    
272                                                   
273   inline G4int LambdaBinning() const;             
274                                                   
275   inline G4double MinKinEnergy() const;           
276                                                   
277   inline G4double MaxKinEnergy() const;           
278                                                   
279   // Single scattering parameters                 
280   inline G4double PolarAngleLimit() const;        
281                                                   
282   inline G4ParticleChangeForGamma* GetParticle    
283                                                   
284   inline void SetParticle(const G4ParticleDefi    
285                                                   
286   inline void SetSecondaryParticle(const G4Par    
287                                                   
288   inline std::size_t CurrentMaterialCutsCouple    
289                                                   
290   inline const G4MaterialCutsCouple* MaterialC    
291                                                   
292   inline G4bool ApplyCuts() const;                
293                                                   
294   inline G4double GetGammaEnergyCut();            
295                                                   
296   inline G4double GetElectronEnergyCut();         
297                                                   
298   inline void SetStartFromNullFlag(G4bool val)    
299                                                   
300   inline void SetSplineFlag(G4bool val);          
301                                                   
302   const G4Element* GetTargetElement() const;      
303                                                   
304   const G4Isotope* GetTargetIsotope() const;      
305                                                   
306   // these two methods assume that vectors are    
307   // and idx is within vector length              
308   inline G4int DensityIndex(G4int idx) const;     
309   inline G4double DensityFactor(G4int idx) con    
310                                                   
311 private:                                          
312                                                   
313   void PrintWarning(G4String tit, G4double val    
314                                                   
315   void ComputeIntegralLambda(G4double kinEnerg    
316                                                   
317   inline G4double LogEkin(const G4Track&);        
318                                                   
319   inline G4double GetLambdaFromTable(G4double     
320                                                   
321   inline G4double GetLambdaFromTable(G4double     
322                                                   
323   inline G4double GetLambdaFromTablePrim(G4dou    
324                                                   
325   inline G4double GetLambdaFromTablePrim(G4dou    
326                                                   
327   inline G4double GetCurrentLambda(G4double ki    
328                                                   
329   inline G4double GetCurrentLambda(G4double ki    
330                                                   
331   inline G4double ComputeCurrentLambda(G4doubl    
332                                                   
333   // ======== pointers =========                  
334                                                   
335   G4EmModelManager*            modelManager =     
336   const G4ParticleDefinition*  particle = null    
337   const G4ParticleDefinition*  currentParticle    
338   const G4ParticleDefinition*  theGamma = null    
339   const G4ParticleDefinition*  theElectron = n    
340   const G4ParticleDefinition*  thePositron = n    
341   const G4ParticleDefinition*  secondaryPartic    
342   const G4VEmProcess*          masterProc = nu    
343   G4EmDataHandler*             theData = nullp    
344   G4VEmModel*                  currentModel =     
345   G4LossTableManager*          lManager = null    
346   G4EmParameters*              theParameters =    
347   const G4Material*            baseMaterial =     
348                                                   
349   // ======== tables and vectors ========         
350   G4PhysicsTable*              theLambdaTable     
351   G4PhysicsTable*              theLambdaTableP    
352                                                   
353   const std::vector<G4double>* theCuts = nullp    
354   const std::vector<G4double>* theCutsGamma =     
355   const std::vector<G4double>* theCutsElectron    
356   const std::vector<G4double>* theCutsPositron    
357                                                   
358 protected:                                        
359                                                   
360   // ======== pointers =========                  
361                                                   
362   const G4MaterialCutsCouple*  currentCouple =    
363   const G4Material*            currentMaterial    
364   G4EmBiasingManager*          biasManager = n    
365   std::vector<G4double>*       theEnergyOfCros    
366                                                   
367 private:                                          
368                                                   
369   const std::vector<G4double>* theDensityFacto    
370   const std::vector<G4int>* theDensityIdx = nu    
371                                                   
372   // ======== parameters =========                
373   G4double minKinEnergy;                          
374   G4double maxKinEnergy;                          
375   G4double minKinEnergyPrim = DBL_MAX;            
376   G4double lambdaFactor = 0.8;                    
377   G4double invLambdaFactor;                       
378   G4double biasFactor = 1.0;                      
379   G4double massRatio = 1.0;                       
380   G4double fFactor = 1.0;                         
381   G4double fLambda = 0.0;                         
382   G4double fLambdaEnergy = 0.0;                   
383                                                   
384 protected:                                        
385                                                   
386   G4double mfpKinEnergy = DBL_MAX;                
387   G4double preStepKinEnergy = 0.0;                
388   G4double preStepLambda = 0.0;                   
389                                                   
390 private:                                          
391                                                   
392   G4CrossSectionType fXSType = fEmNoIntegral;     
393                                                   
394   G4int numberOfModels = 0;                       
395   G4int nLambdaBins = 84;                         
396                                                   
397 protected:                                        
398                                                   
399   G4int mainSecondaries = 1;                      
400   G4int secID = _EM;                              
401   G4int fluoID = _Fluorescence;                   
402   G4int augerID = _AugerElectron;                 
403   G4int biasID = _EM;                             
404   G4int tripletID = _TripletElectron;             
405   std::size_t currentCoupleIndex = 0;             
406   std::size_t basedCoupleIndex = 0;               
407   std::size_t coupleIdxLambda = 0;                
408   std::size_t idxLambda = 0;                      
409                                                   
410   G4bool isTheMaster = false;                     
411   G4bool baseMat = false;                         
412                                                   
413 private:                                          
414                                                   
415   G4bool buildLambdaTable = true;                 
416   G4bool applyCuts = false;                       
417   G4bool startFromNull = false;                   
418   G4bool splineFlag = true;                       
419   G4bool actMinKinEnergy = false;                 
420   G4bool actMaxKinEnergy = false;                 
421   G4bool actBinning = false;                      
422   G4bool isIon = false;                           
423   G4bool biasFlag = false;                        
424   G4bool weightFlag = false;                      
425                                                   
426 protected:                                        
427                                                   
428   // ======== particle change =========           
429   std::vector<G4DynamicParticle*> secParticles    
430   G4ParticleChangeForGamma fParticleChange;       
431                                                   
432 private:                                          
433                                                   
434   // ======== local vectors =========             
435   std::vector<G4VEmModel*> emModels;              
436                                                   
437 };                                                
438                                                   
439 // ======== Run time inline methods ==========    
440                                                   
441 //....oooOO0OOooo........oooOO0OOooo........oo    
442                                                   
443 inline std::size_t G4VEmProcess::CurrentMateri    
444 {                                                 
445   return currentCoupleIndex;                      
446 }                                                 
447                                                   
448 //....oooOO0OOooo........oooOO0OOooo........oo    
449                                                   
450 inline const G4MaterialCutsCouple* G4VEmProces    
451 {                                                 
452   return currentCouple;                           
453 }                                                 
454                                                   
455 //....oooOO0OOooo........oooOO0OOooo........oo    
456                                                   
457 inline G4double G4VEmProcess::GetGammaEnergyCu    
458 {                                                 
459   return (*theCutsGamma)[currentCoupleIndex];     
460 }                                                 
461                                                   
462 //....oooOO0OOooo........oooOO0OOooo........oo    
463                                                   
464 inline G4double G4VEmProcess::GetElectronEnerg    
465 {                                                 
466   return (*theCutsElectron)[currentCoupleIndex    
467 }                                                 
468                                                   
469 //....oooOO0OOooo........oooOO0OOooo........oo    
470                                                   
471 inline void G4VEmProcess::DefineMaterial(const    
472 {                                                 
473   if (couple != currentCouple) {                  
474     currentCouple = couple;                       
475     baseMaterial = currentMaterial = couple->G    
476     basedCoupleIndex = currentCoupleIndex = co    
477     fFactor = biasFactor;                         
478     mfpKinEnergy = DBL_MAX;                       
479     if (baseMat) {                                
480       basedCoupleIndex = (*theDensityIdx)[curr    
481       if (nullptr != currentMaterial->GetBaseM    
482         baseMaterial = currentMaterial->GetBas    
483       fFactor *= (*theDensityFactor)[currentCo    
484     }                                             
485   }                                               
486 }                                                 
487                                                   
488 //....oooOO0OOooo........oooOO0OOooo........oo    
489                                                   
490 inline                                            
491 G4VEmModel* G4VEmProcess::SelectModel(G4double    
492 {                                                 
493   if(1 < numberOfModels) {                        
494     currentModel = modelManager->SelectModel(k    
495   }                                               
496   currentModel->SetCurrentCouple(currentCouple    
497   return currentModel;                            
498 }                                                 
499                                                   
500 //....oooOO0OOooo........oooOO0OOooo........oo    
501                                                   
502 inline                                            
503 G4VEmModel* G4VEmProcess::SelectModelForMateri    
504                                                   
505 {                                                 
506   return modelManager->SelectModel(kinEnergy,     
507 }                                                 
508                                                   
509 //....oooOO0OOooo........oooOO0OOooo........oo    
510                                                   
511 inline G4double G4VEmProcess::GetLambdaFromTab    
512 {                                                 
513   return ((*theLambdaTable)[basedCoupleIndex])    
514 }                                                 
515                                                   
516 //....oooOO0OOooo........oooOO0OOooo........oo    
517                                                   
518 inline G4double G4VEmProcess::LogEkin(const G4    
519 {                                                 
520   return track.GetDynamicParticle()->GetLogKin    
521 }                                                 
522                                                   
523 //....oooOO0OOooo........oooOO0OOooo........oo    
524                                                   
525 inline G4double G4VEmProcess::GetLambdaFromTab    
526 {                                                 
527   return ((*theLambdaTable)[basedCoupleIndex])    
528 }                                                 
529                                                   
530 //....oooOO0OOooo........oooOO0OOooo........oo    
531                                                   
532 inline G4double G4VEmProcess::GetLambdaFromTab    
533 {                                                 
534   return ((*theLambdaTablePrim)[basedCoupleInd    
535 }                                                 
536                                                   
537 //....oooOO0OOooo........oooOO0OOooo........oo    
538                                                   
539 inline G4double G4VEmProcess::GetLambdaFromTab    
540 {                                                 
541   return ((*theLambdaTablePrim)[basedCoupleInd    
542 }                                                 
543                                                   
544 //....oooOO0OOooo........oooOO0OOooo........oo    
545                                                   
546 inline G4double G4VEmProcess::ComputeCurrentLa    
547 {                                                 
548   return currentModel->CrossSectionPerVolume(b    
549 }                                                 
550                                                   
551 //....oooOO0OOooo........oooOO0OOooo........oo    
552                                                   
553 inline G4double G4VEmProcess::GetCurrentLambda    
554 {                                                 
555   if(currentCoupleIndex != coupleIdxLambda ||     
556     coupleIdxLambda = currentCoupleIndex;         
557     fLambdaEnergy = e;                            
558     if(e >= minKinEnergyPrim) { fLambda = GetL    
559     else if(nullptr != theLambdaTable) { fLamb    
560     else { fLambda = ComputeCurrentLambda(e);     
561     fLambda *= fFactor;                           
562   }                                               
563   return fLambda;                                 
564 }                                                 
565                                                   
566 //....oooOO0OOooo........oooOO0OOooo........oo    
567                                                   
568 inline G4double G4VEmProcess::GetCurrentLambda    
569 {                                                 
570   if(currentCoupleIndex != coupleIdxLambda ||     
571     coupleIdxLambda = currentCoupleIndex;         
572     fLambdaEnergy = e;                            
573     if(e >= minKinEnergyPrim) { fLambda = GetL    
574     else if(nullptr != theLambdaTable) { fLamb    
575     else { fLambda = ComputeCurrentLambda(e);     
576     fLambda *= fFactor;                           
577   }                                               
578   return fLambda;                                 
579 }                                                 
580                                                   
581 //....oooOO0OOooo........oooOO0OOooo........oo    
582                                                   
583 inline void                                       
584 G4VEmProcess::CurrentSetup(const G4MaterialCut    
585 {                                                 
586   DefineMaterial(couple);                         
587   SelectModel(energy*massRatio, currentCoupleI    
588 }                                                 
589                                                   
590 //....oooOO0OOooo........oooOO0OOooo........oo    
591                                                   
592 inline G4double                                   
593 G4VEmProcess::GetLambda(G4double kinEnergy, co    
594                         G4double logKinEnergy)    
595 {                                                 
596   CurrentSetup(couple, kinEnergy);                
597   return GetCurrentLambda(kinEnergy, logKinEne    
598 }                                                 
599                                                   
600 //....oooOO0OOooo........oooOO0OOooo........oo    
601                                                   
602 G4double G4VEmProcess::MeanFreePath(const G4Tr    
603 {                                                 
604   const G4double kinEnergy = track.GetKineticE    
605   CurrentSetup(track.GetMaterialCutsCouple(),     
606   const G4double xs = GetCurrentLambda(kinEner    
607                              track.GetDynamicP    
608   return (0.0 < xs) ? 1.0/xs : DBL_MAX;           
609 }                                                 
610                                                   
611 // ======== Get/Set inline methods used at ini    
612                                                   
613 inline G4bool G4VEmProcess::ApplyCuts() const     
614 {                                                 
615   return applyCuts;                               
616 }                                                 
617                                                   
618 //....oooOO0OOooo........oooOO0OOooo........oo    
619                                                   
620 inline G4int G4VEmProcess::LambdaBinning() con    
621 {                                                 
622   return nLambdaBins;                             
623 }                                                 
624                                                   
625 //....oooOO0OOooo........oooOO0OOooo........oo    
626                                                   
627 inline G4double G4VEmProcess::MinKinEnergy() c    
628 {                                                 
629   return minKinEnergy;                            
630 }                                                 
631                                                   
632 //....oooOO0OOooo........oooOO0OOooo........oo    
633                                                   
634 inline G4double G4VEmProcess::MaxKinEnergy() c    
635 {                                                 
636   return maxKinEnergy;                            
637 }                                                 
638                                                   
639 //....oooOO0OOooo........oooOO0OOooo........oo    
640                                                   
641 inline G4double G4VEmProcess::CrossSectionBias    
642 {                                                 
643   return biasFactor;                              
644 }                                                 
645                                                   
646 //....oooOO0OOooo........oooOO0OOooo........oo    
647                                                   
648 inline G4PhysicsTable* G4VEmProcess::LambdaTab    
649 {                                                 
650   return theLambdaTable;                          
651 }                                                 
652                                                   
653 //....oooOO0OOooo........oooOO0OOooo........oo    
654                                                   
655 inline G4PhysicsTable* G4VEmProcess::LambdaTab    
656 {                                                 
657   return theLambdaTablePrim;                      
658 }                                                 
659                                                   
660 //....oooOO0OOooo........oooOO0OOooo........oo    
661                                                   
662 inline void G4VEmProcess::SetLambdaTable(G4Phy    
663 {                                                 
664   theLambdaTable = ptr;                           
665 }                                                 
666                                                   
667 //....oooOO0OOooo........oooOO0OOooo........oo    
668                                                   
669 inline void G4VEmProcess::SetLambdaTablePrim(G    
670 {                                                 
671   theLambdaTablePrim = ptr;                       
672 }                                                 
673                                                   
674 //....oooOO0OOooo........oooOO0OOooo........oo    
675                                                   
676 inline std::vector<G4double>* G4VEmProcess::En    
677 {                                                 
678   return theEnergyOfCrossSectionMax;              
679 }                                                 
680                                                   
681 //....oooOO0OOooo........oooOO0OOooo........oo    
682                                                   
683 inline void                                       
684 G4VEmProcess::SetEnergyOfCrossSectionMax(std::    
685 {                                                 
686   theEnergyOfCrossSectionMax = ptr;               
687 }                                                 
688                                                   
689 //....oooOO0OOooo........oooOO0OOooo........oo    
690                                                   
691 inline const G4ParticleDefinition* G4VEmProces    
692 {                                                 
693   return particle;                                
694 }                                                 
695                                                   
696 //....oooOO0OOooo........oooOO0OOooo........oo    
697                                                   
698 inline const G4ParticleDefinition* G4VEmProces    
699 {                                                 
700   return secondaryParticle;                       
701 }                                                 
702                                                   
703 //....oooOO0OOooo........oooOO0OOooo........oo    
704                                                   
705 inline void G4VEmProcess::SetCrossSectionType(    
706 {                                                 
707   fXSType = val;                                  
708 }                                                 
709                                                   
710 //....oooOO0OOooo........oooOO0OOooo........oo    
711                                                   
712 inline G4CrossSectionType G4VEmProcess::CrossS    
713 {                                                 
714   return fXSType;                                 
715 }                                                 
716                                                   
717 //....oooOO0OOooo........oooOO0OOooo........oo    
718                                                   
719 inline void G4VEmProcess::SetBuildTableFlag(G4    
720 {                                                 
721   buildLambdaTable = val;                         
722 }                                                 
723                                                   
724 //....oooOO0OOooo........oooOO0OOooo........oo    
725                                                   
726 inline G4ParticleChangeForGamma* G4VEmProcess:    
727 {                                                 
728   return &fParticleChange;                        
729 }                                                 
730                                                   
731 //....oooOO0OOooo........oooOO0OOooo........oo    
732                                                   
733 inline void G4VEmProcess::SetParticle(const G4    
734 {                                                 
735   particle = p;                                   
736   currentParticle = p;                            
737 }                                                 
738                                                   
739 //....oooOO0OOooo........oooOO0OOooo........oo    
740                                                   
741 inline void G4VEmProcess::SetSecondaryParticle    
742 {                                                 
743   secondaryParticle = p;                          
744 }                                                 
745                                                   
746 //....oooOO0OOooo........oooOO0OOooo........oo    
747                                                   
748 inline void G4VEmProcess::SetStartFromNullFlag    
749 {                                                 
750   startFromNull = val;                            
751 }                                                 
752                                                   
753 //....oooOO0OOooo........oooOO0OOooo........oo    
754                                                   
755 inline void G4VEmProcess::SetSplineFlag(G4bool    
756 {                                                 
757   splineFlag = val;                               
758 }                                                 
759                                                   
760 //....oooOO0OOooo........oooOO0OOooo........oo    
761                                                   
762 inline G4int G4VEmProcess::DensityIndex(G4int     
763 {                                                 
764   return (*theDensityIdx)[idx];                   
765 }                                                 
766                                                   
767 //....oooOO0OOooo........oooOO0OOooo........oo    
768                                                   
769 inline G4double G4VEmProcess::DensityFactor(G4    
770 {                                                 
771   return (*theDensityFactor)[idx];                
772 }                                                 
773                                                   
774 //....oooOO0OOooo........oooOO0OOooo........oo    
775                                                   
776 inline G4bool G4VEmProcess::UseBaseMaterial()     
777 {                                                 
778   return baseMat;                                 
779 }                                                 
780                                                   
781 //....oooOO0OOooo........oooOO0OOooo........oo    
782                                                   
783 inline const G4VEmModel* G4VEmProcess::GetCurr    
784 {                                                 
785   return currentModel;                            
786 }                                                 
787                                                   
788 //....oooOO0OOooo........oooOO0OOooo........oo    
789                                                   
790 inline void G4VEmProcess::SetEmMasterProcess(c    
791 {                                                 
792   masterProc = ptr;                               
793 }                                                 
794                                                   
795 //....oooOO0OOooo........oooOO0OOooo........oo    
796                                                   
797 inline G4int G4VEmProcess::NumberOfModels() co    
798 {                                                 
799   return numberOfModels;                          
800 }                                                 
801                                                   
802 //....oooOO0OOooo........oooOO0OOooo........oo    
803                                                   
804 inline G4VEmModel* G4VEmProcess::EmModel(std::    
805 {                                                 
806   return (index < emModels.size()) ? emModels[    
807 }                                                 
808                                                   
809 //....oooOO0OOooo........oooOO0OOooo........oo    
810                                                   
811 inline G4VEmModel* G4VEmProcess::GetModelByInd    
812 {                                                 
813   return modelManager->GetModel(idx, ver);        
814 }                                                 
815                                                   
816 //....oooOO0OOooo........oooOO0OOooo........oo    
817                                                   
818 #endif                                            
819