Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/include/G4VMscModel.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/G4VMscModel.hh (Version 11.3.0) and /processes/electromagnetic/utils/include/G4VMscModel.hh (Version 7.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:     G4VMscModel                     
 32 //                                                
 33 // Author:        Vladimir Ivanchenko             
 34 //                                                
 35 // Creation date: 07.03.2008                      
 36 //                                                
 37 // Modifications:                                 
 38 // 07.04.2009 V.Ivanchenko moved msc methods f    
 39 // 26.03.2012 V.Ivanchenko added transport x-s    
 40 //                                                
 41 // Class Description:                             
 42 //                                                
 43 // General interface to msc models                
 44                                                   
 45 // -------------------------------------------    
 46 //                                                
 47 #ifndef G4VMscModel_h                             
 48 #define G4VMscModel_h 1                           
 49                                                   
 50 #include <CLHEP/Units/SystemOfUnits.h>            
 51                                                   
 52 #include "G4VEmModel.hh"                          
 53 #include "G4MscStepLimitType.hh"                  
 54 #include "globals.hh"                             
 55 #include "G4ThreeVector.hh"                       
 56 #include "G4Track.hh"                             
 57 #include "G4SafetyHelper.hh"                      
 58 #include "G4PhysicsTable.hh"                      
 59 #include "G4ThreeVector.hh"                       
 60 #include <vector>                                 
 61                                                   
 62 class G4ParticleChangeForMSC;                     
 63 class G4ParticleDefinition;                       
 64 class G4VEnergyLossProcess;                       
 65                                                   
 66 class G4VMscModel : public G4VEmModel             
 67 {                                                 
 68                                                   
 69 public:                                           
 70                                                   
 71   explicit G4VMscModel(const G4String& nam);      
 72                                                   
 73   ~G4VMscModel() override;                        
 74                                                   
 75   virtual G4double ComputeTruePathLengthLimit(    
 76                 G4double& stepLimit) = 0;         
 77                                                   
 78   virtual G4double ComputeGeomPathLength(G4dou    
 79                                                   
 80   virtual G4double ComputeTrueStepLength(G4dou    
 81                                                   
 82   virtual G4ThreeVector& SampleScattering(cons    
 83             G4double safety) = 0;                 
 84                                                   
 85   void InitialiseParameters(const G4ParticleDe    
 86                                                   
 87   void DumpParameters(std::ostream& out) const    
 88                                                   
 89   // empty method                                 
 90   void SampleSecondaries(std::vector<G4Dynamic    
 91        const G4MaterialCutsCouple*,               
 92        const G4DynamicParticle*,                  
 93        G4double tmin, G4double tmax) override;    
 94                                                   
 95   //==========================================    
 96   //  Set parameters of multiple scattering mo    
 97   //==========================================    
 98                                                   
 99   inline void SetStepLimitType(G4MscStepLimitT    
100                                                   
101   inline void SetLateralDisplasmentFlag(G4bool    
102                                                   
103   inline void SetRangeFactor(G4double);           
104                                                   
105   inline void SetGeomFactor(G4double);            
106                                                   
107   inline void SetSkin(G4double);                  
108                                                   
109   inline void SetLambdaLimit(G4double);           
110                                                   
111   inline void SetSafetyFactor(G4double);          
112                                                   
113   inline void SetSampleZ(G4bool);                 
114                                                   
115   //==========================================    
116   //  Get/Set access to Physics Tables            
117   //==========================================    
118                                                   
119   inline G4VEnergyLossProcess* GetIonisation()    
120                                                   
121   inline void SetIonisation(G4VEnergyLossProce    
122           const G4ParticleDefinition* part);      
123                                                   
124   //==========================================    
125   //  Run time methods                            
126   //==========================================    
127                                                   
128 protected:                                        
129                                                   
130   // initialisation of the ParticleChange for     
131   // initialisation of interface with geometry    
132   G4ParticleChangeForMSC*                         
133   GetParticleChangeForMSC(const G4ParticleDefi    
134                                                   
135   // convert true length to geometry length       
136   inline G4double ConvertTrueToGeom(G4double&     
137                                                   
138   // should be set before initialisation          
139   inline void SetUseSplineForMSC(G4bool val);     
140                                                   
141 public:                                           
142                                                   
143   // compute safety                               
144   inline G4double ComputeSafety(const G4ThreeV    
145         G4double limit= DBL_MAX);                 
146                                                   
147   // compute linear distance to a geometry bou    
148   inline G4double ComputeGeomLimit(const G4Tra    
149            G4double limit);                       
150                                                   
151   G4double GetDEDX(const G4ParticleDefinition*    
152                           G4double kineticEner    
153                           const G4MaterialCuts    
154                                                   
155   G4double GetDEDX(const G4ParticleDefinition*    
156                           G4double kineticEner    
157                           const G4MaterialCuts    
158                           G4double logKineticE    
159                                                   
160   G4double GetRange(const G4ParticleDefinition    
161                            G4double kineticEne    
162                            const G4MaterialCut    
163                                                   
164   G4double GetRange(const G4ParticleDefinition    
165                            G4double kineticEne    
166                            const G4MaterialCut    
167                            G4double logKinetic    
168                                                   
169   G4double GetEnergy(const G4ParticleDefinitio    
170           G4double range,                         
171           const G4MaterialCutsCouple* couple);    
172                                                   
173   // G4MaterialCutsCouple should be defined be    
174   inline                                          
175   G4double GetTransportMeanFreePath(const G4Pa    
176                                     G4double k    
177                                                   
178   inline                                          
179   G4double GetTransportMeanFreePath(const G4Pa    
180                                     G4double k    
181                                     G4double l    
182                                                   
183   //  hide assignment operator                    
184   G4VMscModel & operator=(const  G4VMscModel &    
185   G4VMscModel(const  G4VMscModel&) = delete;      
186                                                   
187 private:                                          
188                                                   
189   G4SafetyHelper* safetyHelper = nullptr;         
190   G4VEnergyLossProcess* ionisation = nullptr;     
191   const G4ParticleDefinition* currentPart = nu    
192                                                   
193   G4double dedx = 0.0;                            
194   G4double localtkin = 0.0;                       
195   G4double localrange = DBL_MAX;                  
196                                                   
197 protected:                                        
198                                                   
199   G4double facrange = 0.04;                       
200   G4double facgeom = 2.5;                         
201   G4double facsafety = 0.6;                       
202   G4double skin = 1.0;                            
203   G4double dtrl = 0.05;                           
204   G4double lambdalimit;                           
205   G4double geomMin;                               
206   G4double geomMax;                               
207                                                   
208   G4ThreeVector fDisplacement;                    
209   G4MscStepLimitType steppingAlgorithm;           
210                                                   
211   G4bool samplez = false;                         
212   G4bool latDisplasment = true;                   
213                                                   
214 private:                                          
215                                                   
216   G4bool useSpline = true;                        
217 };                                                
218                                                   
219 //....oooOO0OOooo........oooOO0OOooo........oo    
220 //....oooOO0OOooo........oooOO0OOooo........oo    
221                                                   
222 inline void G4VMscModel::SetLateralDisplasment    
223 {                                                 
224   if(!IsLocked()) { latDisplasment = val; }       
225 }                                                 
226                                                   
227 //....oooOO0OOooo........oooOO0OOooo........oo    
228                                                   
229 inline void G4VMscModel::SetSkin(G4double val)    
230 {                                                 
231   if(!IsLocked()) { skin = val; }                 
232 }                                                 
233                                                   
234 //....oooOO0OOooo........oooOO0OOooo........oo    
235                                                   
236 inline void G4VMscModel::SetRangeFactor(G4doub    
237 {                                                 
238   if(!IsLocked()) { facrange = val; }             
239 }                                                 
240                                                   
241 //....oooOO0OOooo........oooOO0OOooo........oo    
242                                                   
243 inline void G4VMscModel::SetGeomFactor(G4doubl    
244 {                                                 
245   if(!IsLocked()) { facgeom = val; }              
246 }                                                 
247                                                   
248 //....oooOO0OOooo........oooOO0OOooo........oo    
249                                                   
250 inline void G4VMscModel::SetLambdaLimit(G4doub    
251 {                                                 
252   if(!IsLocked()) { lambdalimit = val; }          
253 }                                                 
254                                                   
255 //....oooOO0OOooo........oooOO0OOooo........oo    
256                                                   
257 inline void G4VMscModel::SetSafetyFactor(G4dou    
258 {                                                 
259   if(!IsLocked()) { facsafety = val; }            
260 }                                                 
261                                                   
262 //....oooOO0OOooo........oooOO0OOooo........oo    
263                                                   
264 inline void G4VMscModel::SetStepLimitType(G4Ms    
265 {                                                 
266   if(!IsLocked()) { steppingAlgorithm = val; }    
267 }                                                 
268                                                   
269 //....oooOO0OOooo........oooOO0OOooo........oo    
270                                                   
271 inline void G4VMscModel::SetSampleZ(G4bool val    
272 {                                                 
273   if(!IsLocked()) { samplez = val; }              
274 }                                                 
275                                                   
276 //....oooOO0OOooo........oooOO0OOooo........oo    
277                                                   
278 inline G4double G4VMscModel::ComputeSafety(con    
279              G4double limit)                      
280 {                                                 
281    return safetyHelper->ComputeSafety(position    
282 }                                                 
283                                                   
284 //....oooOO0OOooo........oooOO0OOooo........oo    
285                                                   
286 inline G4double G4VMscModel::ConvertTrueToGeom    
287                  G4double& glength)               
288 {                                                 
289   glength = ComputeGeomPathLength(tlength);       
290   // should return true length                    
291   return tlength;                                 
292 }                                                 
293                                                   
294 //....oooOO0OOooo........oooOO0OOooo........oo    
295                                                   
296 inline G4double G4VMscModel::ComputeGeomLimit(    
297                 G4double& presafety,              
298                 G4double limit)                   
299 {                                                 
300   return safetyHelper->CheckNextStep(             
301           track.GetStep()->GetPreStepPoint()->    
302     track.GetMomentumDirection(),                 
303     limit, presafety);                            
304 }                                                 
305                                                   
306 //....oooOO0OOooo........oooOO0OOooo........oo    
307                                                   
308 inline G4VEnergyLossProcess* G4VMscModel::GetI    
309 {                                                 
310   return ionisation;                              
311 }                                                 
312                                                   
313 //....oooOO0OOooo........oooOO0OOooo........oo    
314                                                   
315 inline void G4VMscModel::SetIonisation(G4VEner    
316                const G4ParticleDefinition* par    
317 {                                                 
318   ionisation = p;                                 
319   currentPart = part;                             
320 }                                                 
321                                                   
322 //....oooOO0OOooo........oooOO0OOooo........oo    
323                                                   
324 inline G4double                                   
325 G4VMscModel::GetTransportMeanFreePath(const G4    
326                                       G4double    
327 {                                                 
328   G4double x;                                     
329   if (nullptr != xSectionTable) {                 
330     x = pFactor*(*xSectionTable)[basedCoupleIn    
331   } else {                                        
332     x = pFactor*CrossSectionPerVolume(pBaseMat    
333   }                                               
334   return (x > 0.0) ? 1.0/x : DBL_MAX;             
335 }                                                 
336                                                   
337 //....oooOO0OOooo........oooOO0OOooo........oo    
338                                                   
339 inline G4double                                   
340 G4VMscModel::GetTransportMeanFreePath(const G4    
341                                       G4double    
342 {                                                 
343   G4double x;                                     
344   if (nullptr != xSectionTable) {                 
345     x = pFactor*(*xSectionTable)[basedCoupleIn    
346   } else {                                        
347     x = pFactor*CrossSectionPerVolume(pBaseMat    
348   }                                               
349   return (x > 0.0) ? 1.0/x : DBL_MAX;             
350 }                                                 
351                                                   
352 //....oooOO0OOooo........oooOO0OOooo........oo    
353                                                   
354 inline void G4VMscModel::SetUseSplineForMSC(G4    
355 {                                                 
356   useSpline = val;                                
357 }                                                 
358                                                   
359 //....oooOO0OOooo........oooOO0OOooo........oo    
360                                                   
361 #endif                                            
362