Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/include/G4VMultipleScattering.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/G4VMultipleScattering.hh (Version 11.3.0) and /processes/electromagnetic/utils/include/G4VMultipleScattering.hh (Version 4.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 //                                                
 29 // GEANT4 Class header file                       
 30 //                                                
 31 //                                                
 32 // File name:     G4VMultipleScattering           
 33 //                                                
 34 // Author:        Vladimir Ivanchenko on base     
 35 //                                                
 36 // Creation date: 12.03.2002                      
 37 //                                                
 38 // Modifications:                                 
 39 //                                                
 40 // 16-07-03 Update GetRange interface (V.Ivanc    
 41 // 26-11-03 bugfix in AlongStepDoIt (L.Urban)     
 42 // 25-05-04 add protection against case when r    
 43 // 27-08-04 Add InitialiseForRun method (V.Iva    
 44 // 08-11-04 Migration to new interface of Stor    
 45 // 15-04-05 remove boundary flag (V.Ivanchenko    
 46 // 07-10-05 error in a protection in GetContin    
 47 // 27-10-05 introduce virtual function MscStep    
 48 // 26-01-06 Rename GetRange -> GetRangeFromRes    
 49 // 17-02-06 Save table of transport cross sect    
 50 // 07-03-06 Move step limit calculation to mod    
 51 // 13-05-06 Add method to access model by inde    
 52 // 12-02-07 Add get/set skin (V.Ivanchenko)       
 53 // 27-10-07 Virtual functions moved to source     
 54 // 15-07-08 Reorder class members for further     
 55 // 07-04-09 Moved msc methods from G4VEmModel     
 56 //                                                
 57 // Class Description:                             
 58 //                                                
 59 // It is the generic process of multiple scatt    
 60 // part of calculations for all charged partic    
 61                                                   
 62 // -------------------------------------------    
 63 //                                                
 64                                                   
 65 #ifndef G4VMultipleScattering_h                   
 66 #define G4VMultipleScattering_h 1                 
 67                                                   
 68 #include "G4VContinuousDiscreteProcess.hh"        
 69 #include "globals.hh"                             
 70 #include "G4Material.hh"                          
 71 #include "G4ParticleChangeForMSC.hh"              
 72 #include "G4Track.hh"                             
 73 #include "G4Step.hh"                              
 74 #include "G4EmModelManager.hh"                    
 75 #include "G4VMscModel.hh"                         
 76 #include "G4EmParameters.hh"                      
 77 #include "G4MscStepLimitType.hh"                  
 78                                                   
 79 class G4ParticleDefinition;                       
 80 class G4VEnergyLossProcess;                       
 81 class G4LossTableManager;                         
 82 class G4SafetyHelper;                             
 83                                                   
 84 //....oooOO0OOooo........oooOO0OOooo........oo    
 85                                                   
 86 class G4VMultipleScattering : public G4VContin    
 87 {                                                 
 88 public:                                           
 89                                                   
 90   explicit G4VMultipleScattering(const G4Strin    
 91                                  G4ProcessType    
 92                                                   
 93   ~G4VMultipleScattering() override;              
 94                                                   
 95   //------------------------------------------    
 96   // Virtual methods to be implemented for the    
 97   //------------------------------------------    
 98                                                   
 99   void ProcessDescription(std::ostream& outFil    
100                                                   
101   virtual void InitialiseProcess(const G4Parti    
102                                                   
103   // Print out of generic class parameters        
104   void StreamInfo(std::ostream& outFile, const    
105                   G4bool rst = false) const;      
106                                                   
107 protected:                                        
108                                                   
109   virtual void StreamProcessInfo(std::ostream&    
110                                                   
111 public:                                           
112                                                   
113   //------------------------------------------    
114   // Generic methods common to all ContinuousD    
115   //------------------------------------------    
116                                                   
117   // Initialise for build of tables               
118   void PreparePhysicsTable(const G4ParticleDef    
119                                                   
120   // Build physics table during initialisation    
121   void BuildPhysicsTable(const G4ParticleDefin    
122                                                   
123   // Store PhysicsTable in a file.                
124   // Return false in case of failure at I/O       
125   G4bool StorePhysicsTable(const G4ParticleDef    
126                            const G4String& dir    
127                            G4bool ascii = fals    
128                                                   
129   // Retrieve Physics from a file.                
130   // (return true if the Physics Table can be     
131   // (return false if the process has no funct    
132   // File name should is constructed as proces    
133   // should be placed under the directory spec    
134   G4bool RetrievePhysicsTable(const G4Particle    
135                               const G4String&     
136                               G4bool ascii) ov    
137                                                   
138   // This is called in the beginning of tracki    
139   void StartTracking(G4Track*) override;          
140                                                   
141   // The function overloads the corresponding     
142   // class.It limits the step near to boundari    
143   // and invokes the method GetMscContinuousSt    
144   G4double AlongStepGetPhysicalInteractionLeng    
145                                         const     
146                                         G4doub    
147                                         G4doub    
148                                         G4doub    
149                                         G4GPIL    
150                                                   
151   // The function overloads the corresponding     
152   // class.                                       
153   G4double PostStepGetPhysicalInteractionLengt    
154                                       const G4    
155                                       G4double    
156                                       G4ForceC    
157                                                   
158   // Along step actions                           
159   G4VParticleChange* AlongStepDoIt(const G4Tra    
160                                                   
161   // This method does not used for tracking, i    
162   G4double ContinuousStepLimit(const G4Track&     
163                                G4double previo    
164                                G4double curren    
165                                G4double& curre    
166                                                   
167   // hide assignment operator                     
168   G4VMultipleScattering(G4VMultipleScattering     
169   G4VMultipleScattering & operator=(const G4VM    
170                                                   
171   //------------------------------------------    
172   // Specific methods to set, access, modify m    
173   //------------------------------------------    
174                                                   
175   // Select model in run time                     
176   inline G4VEmModel* SelectModel(G4double kinE    
177                                                   
178 public:                                           
179                                                   
180   // Add model for region, smaller value of or    
181   // model will be selected for a given energy    
182   void AddEmModel(G4int order, G4VMscModel*, c    
183                                                   
184   // Assign a model to a process local list, t    
185   // the derived process should execute AddEmM    
186   void SetEmModel(G4VMscModel*, G4int idx = 0)    
187                                                   
188   // return a model from the local list           
189   inline G4VMscModel* EmModel(size_t index = 0    
190                                                   
191   // Access to run time models                    
192   inline G4int NumberOfModels() const;            
193                                                   
194   inline G4VMscModel* GetModelByIndex(G4int id    
195                                                   
196   //------------------------------------------    
197   // Get/Set parameters for simulation of mult    
198   //------------------------------------------    
199                                                   
200   inline G4bool LateralDisplasmentFlag() const    
201                                                   
202   inline G4double Skin() const;                   
203                                                   
204   inline G4double RangeFactor() const;            
205                                                   
206   inline G4double GeomFactor() const;             
207                                                   
208   inline G4double PolarAngleLimit() const;        
209                                                   
210   inline G4bool UseBaseMaterial() const;          
211                                                   
212   inline G4MscStepLimitType StepLimitType() co    
213   inline void SetStepLimitType(G4MscStepLimitT    
214                                                   
215   inline G4double LowestKinEnergy() const;        
216   inline void SetLowestKinEnergy(G4double val)    
217                                                   
218   inline const G4ParticleDefinition* FirstPart    
219                                                   
220   //------------------------------------------    
221   // Run time methods                             
222   //------------------------------------------    
223                                                   
224 protected:                                        
225                                                   
226   // This method is not used for tracking, it     
227   G4double GetMeanFreePath(const G4Track& trac    
228                            G4double,              
229                            G4ForceCondition* c    
230                                                   
231   // This method is not used for tracking, it     
232   G4double GetContinuousStepLimit(const G4Trac    
233                                   G4double pre    
234                                   G4double cur    
235                                   G4double& cu    
236                                                   
237 private:                                          
238                                                   
239   // ======== Parameters of the class fixed at    
240                                                   
241   G4EmModelManager*           modelManager;       
242   G4LossTableManager*         emManager;          
243   G4EmParameters*             theParameters;      
244                                                   
245   // ======== Parameters of the class fixed at    
246                                                   
247   G4SafetyHelper*             safetyHelper = n    
248   const G4ParticleDefinition* firstParticle =     
249   const G4ParticleDefinition* currParticle = n    
250                                                   
251   std::vector<G4VMscModel*>   mscModels;          
252                                                   
253   G4double                    facrange = 0.04;    
254   G4double                    lowestKinEnergy;    
255                                                   
256   // ======== Cached values - may be state dep    
257                                                   
258 protected:                                        
259                                                   
260   G4ParticleChangeForMSC      fParticleChange;    
261                                                   
262 private:                                          
263                                                   
264   G4ThreeVector               fNewPosition;       
265   G4ThreeVector               fNewDirection;      
266                                                   
267   G4VMscModel*                currentModel = n    
268   G4VEnergyLossProcess*       fIonisation = nu    
269                                                   
270   G4double                    geomMin;            
271   G4double                    minDisplacement2    
272   G4double                    physStepLimit =     
273   G4double                    tPathLength = 0.    
274   G4double                    gPathLength = 0.    
275                                                   
276   G4MscStepLimitType          stepLimit = fUse    
277   G4int                       numberOfModels =    
278                                                   
279   G4bool                      latDisplacement     
280   G4bool                      isIon = false;      
281   G4bool                      fPositionChanged    
282   G4bool                      isActive = false    
283   G4bool                      baseMat = false;    
284 };                                                
285                                                   
286 // ======== Run time inline methods ==========    
287                                                   
288 //....oooOO0OOooo........oooOO0OOooo........oo    
289                                                   
290 inline G4VEmModel*                                
291 G4VMultipleScattering::SelectModel(G4double ki    
292 {                                                 
293   return modelManager->SelectModel(kinEnergy,     
294 }                                                 
295                                                   
296 //....oooOO0OOooo........oooOO0OOooo........oo    
297                                                   
298 inline  G4bool G4VMultipleScattering::LateralD    
299 {                                                 
300   return latDisplacement;                         
301 }                                                 
302                                                   
303 //....oooOO0OOooo........oooOO0OOooo........oo    
304                                                   
305 inline  G4double G4VMultipleScattering::Skin()    
306 {                                                 
307   return theParameters->MscSkin();                
308 }                                                 
309                                                   
310 //....oooOO0OOooo........oooOO0OOooo........oo    
311                                                   
312 inline  G4double G4VMultipleScattering::RangeF    
313 {                                                 
314   return facrange;                                
315 }                                                 
316                                                   
317 //....oooOO0OOooo........oooOO0OOooo........oo    
318                                                   
319 inline  G4double G4VMultipleScattering::GeomFa    
320 {                                                 
321   return theParameters->MscGeomFactor();          
322 }                                                 
323                                                   
324 //....oooOO0OOooo........oooOO0OOooo........oo    
325                                                   
326 inline  G4double G4VMultipleScattering::PolarA    
327 {                                                 
328   return theParameters->MscThetaLimit();          
329 }                                                 
330                                                   
331 //....oooOO0OOooo........oooOO0OOooo........oo    
332                                                   
333 inline G4MscStepLimitType G4VMultipleScatterin    
334 {                                                 
335   return stepLimit;                               
336 }                                                 
337                                                   
338 //....oooOO0OOooo........oooOO0OOooo........oo    
339                                                   
340 inline void G4VMultipleScattering::SetStepLimi    
341 {                                                 
342   theParameters->SetMscStepLimitType(val);        
343 }                                                 
344                                                   
345 //....oooOO0OOooo........oooOO0OOooo........oo    
346                                                   
347 inline G4double G4VMultipleScattering::LowestK    
348 {                                                 
349   return lowestKinEnergy;                         
350 }                                                 
351                                                   
352 //....oooOO0OOooo........oooOO0OOooo........oo    
353                                                   
354 inline void G4VMultipleScattering::SetLowestKi    
355 {                                                 
356   lowestKinEnergy = val;                          
357 }                                                 
358                                                   
359 //....oooOO0OOooo........oooOO0OOooo........oo    
360                                                   
361 inline const G4ParticleDefinition* G4VMultiple    
362 {                                                 
363   return firstParticle;                           
364 }                                                 
365                                                   
366 //....oooOO0OOooo........oooOO0OOooo........oo    
367                                                   
368 inline G4VMscModel* G4VMultipleScattering::EmM    
369 {                                                 
370   return (index < mscModels.size()) ? mscModel    
371 }                                                 
372                                                   
373 //....oooOO0OOooo........oooOO0OOooo........oo    
374                                                   
375 inline G4int G4VMultipleScattering::NumberOfMo    
376 {                                                 
377   return numberOfModels;                          
378 }                                                 
379                                                   
380 //....oooOO0OOooo........oooOO0OOooo........oo    
381                                                   
382 inline G4VMscModel*                               
383 G4VMultipleScattering::GetModelByIndex(G4int i    
384 {                                                 
385   // static cast is possible inside this class    
386   return static_cast<G4VMscModel*>(modelManage    
387 }                                                 
388                                                   
389 //....oooOO0OOooo........oooOO0OOooo........oo    
390                                                   
391 inline G4bool G4VMultipleScattering::UseBaseMa    
392 {                                                 
393   return baseMat;                                 
394 }                                                 
395                                                   
396 //....oooOO0OOooo........oooOO0OOooo........oo    
397                                                   
398 #endif                                            
399