Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/src/G4VMscModel.cc

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

Diff markup

Differences between /processes/electromagnetic/utils/src/G4VMscModel.cc (Version 11.3.0) and /processes/electromagnetic/utils/src/G4VMscModel.cc (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 file                              
 30 //                                                
 31 //                                                
 32 // File name:     G4VMscModel                     
 33 //                                                
 34 // Author:        Vladimir Ivanchenko             
 35 //                                                
 36 // Creation date: 07.03.2008                      
 37 //                                                
 38 // Modifications:                                 
 39 //                                                
 40 //                                                
 41 // Class Description:                             
 42 //                                                
 43 // General interface to msc models                
 44                                                   
 45 // -------------------------------------------    
 46 //                                                
 47                                                   
 48 #include "G4VMscModel.hh"                         
 49 #include "G4SystemOfUnits.hh"                     
 50 #include "G4ParticleChangeForMSC.hh"              
 51 #include "G4TransportationManager.hh"             
 52 #include "G4LossTableManager.hh"                  
 53 #include "G4LossTableBuilder.hh"                  
 54 #include "G4EmParameters.hh"                      
 55                                                   
 56 //....oooOO0OOooo........oooOO0OOooo........oo    
 57 //....oooOO0OOooo........oooOO0OOooo........oo    
 58                                                   
 59 G4VMscModel::G4VMscModel(const G4String& nam):    
 60   G4VEmModel(nam),                                
 61   lambdalimit(1.*CLHEP::mm),                      
 62   geomMin(1.e-6*CLHEP::mm),                       
 63   geomMax(1.e50*CLHEP::mm),                       
 64   fDisplacement(0.,0.,0.),                        
 65   steppingAlgorithm(fUseSafety)                   
 66 {                                                 
 67   dedx = 2.0*CLHEP::MeV*CLHEP::cm2/CLHEP::g;      
 68 }                                                 
 69                                                   
 70 //....oooOO0OOooo........oooOO0OOooo........oo    
 71                                                   
 72 G4VMscModel::~G4VMscModel() = default;            
 73                                                   
 74 //....oooOO0OOooo........oooOO0OOooo........oo    
 75                                                   
 76 G4ParticleChangeForMSC*                           
 77 G4VMscModel::GetParticleChangeForMSC(const G4P    
 78 {                                                 
 79   // recomputed for each new run                  
 80   if(nullptr == safetyHelper) {                   
 81     safetyHelper = G4TransportationManager::Ge    
 82       ->GetSafetyHelper();                        
 83     safetyHelper->InitialiseHelper();             
 84   }                                               
 85   G4ParticleChangeForMSC* change = nullptr;       
 86   if (nullptr != pParticleChange) {               
 87     change = static_cast<G4ParticleChangeForMS    
 88   } else {                                        
 89     change = new G4ParticleChangeForMSC();        
 90   }                                               
 91   return change;                                  
 92 }                                                 
 93                                                   
 94 //....oooOO0OOooo........oooOO0OOooo........oo    
 95                                                   
 96 void G4VMscModel::InitialiseParameters(const G    
 97 {                                                 
 98   if(IsLocked()) { return; }                      
 99   G4EmParameters* param = G4EmParameters::Inst    
100   if(std::abs(part->GetPDGEncoding()) == 11) {    
101     steppingAlgorithm = param->MscStepLimitTyp    
102     facrange = param->MscRangeFactor();           
103     latDisplasment = param->LateralDisplacemen    
104   } else {                                        
105     steppingAlgorithm = param->MscMuHadStepLim    
106     facrange = param->MscMuHadRangeFactor();      
107     latDisplasment = param->MuHadLateralDispla    
108   }                                               
109   skin = param->MscSkin();                        
110   facgeom = param->MscGeomFactor();               
111   facsafety = param->MscSafetyFactor();           
112   lambdalimit = param->MscLambdaLimit();          
113 }                                                 
114                                                   
115 //....oooOO0OOooo........oooOO0OOooo........oo    
116                                                   
117 void G4VMscModel::DumpParameters(std::ostream&    
118 {                                                 
119   G4String alg = "UseSafety";                     
120   if (steppingAlgorithm == fUseDistanceToBound    
121   else if (steppingAlgorithm == fMinimal) alg     
122   else if (steppingAlgorithm == fUseSafetyPlus    
123                                                   
124   out << std::setw(18) << "StepLim=" << alg <<    
125       << " Gfact=" << facgeom << " Sfact=" <<     
126       << " Skin=" << skin << " Llim=" << lambd    
127 }                                                 
128                                                   
129 //....oooOO0OOooo........oooOO0OOooo........oo    
130                                                   
131 void G4VMscModel::SampleSecondaries(std::vecto    
132                                     const G4Ma    
133                                     const G4Dy    
134                                     G4double,     
135 {}                                                
136                                                   
137 //....oooOO0OOooo........oooOO0OOooo........oo    
138                                                   
139 G4double G4VMscModel::GetDEDX(const G4Particle    
140                               const G4Material    
141 {                                                 
142   G4double x;                                     
143   if (nullptr != ionisation) {                    
144     x = ionisation->GetDEDX(kinEnergy, couple)    
145   } else {                                        
146     const G4double q = part->GetPDGCharge()*in    
147     x = dedx*q*q;                                 
148   }                                               
149   return x;                                       
150 }                                                 
151                                                   
152 //....oooOO0OOooo........oooOO0OOooo........oo    
153                                                   
154 G4double G4VMscModel::GetDEDX(const G4Particle    
155                               const G4Material    
156 {                                                 
157   G4double x;                                     
158   if (nullptr != ionisation) {                    
159     x = ionisation->GetDEDX(kinEnergy, couple,    
160   } else {                                        
161     const G4double q = part->GetPDGCharge()*in    
162     x = dedx*q*q;                                 
163   }                                               
164   return x;                                       
165 }                                                 
166                                                   
167 //....oooOO0OOooo........oooOO0OOooo........oo    
168                                                   
169 G4double G4VMscModel::GetRange(const G4Particl    
170                                const G4Materia    
171 {                                                 
172   //  << ionisation << "  " << part->GetPartic    
173   localtkin = kinEnergy;                          
174   if (nullptr != ionisation) {                    
175     localrange = ionisation->GetRange(kinEnerg    
176   } else {                                        
177     const G4double q = part->GetPDGCharge()*in    
178     localrange = kinEnergy/(dedx*q*q*couple->G    
179   }                                               
180   //G4cout << "R(mm)= " << localrange << "  "     
181   return localrange;                              
182 }                                                 
183                                                   
184 //....oooOO0OOooo........oooOO0OOooo........oo    
185                                                   
186 G4double G4VMscModel::GetRange(const G4Particl    
187                                const G4Materia    
188 {                                                 
189   //G4cout << "G4VMscModel::GetRange E(MeV)= "    
190   //  << ionisation << "  " << part->GetPartic    
191   localtkin = kinEnergy;                          
192   if (nullptr != ionisation) {                    
193     localrange = ionisation->GetRange(kinEnerg    
194   } else {                                        
195     const G4double q = part->GetPDGCharge()*in    
196     localrange = kinEnergy/(dedx*q*q*couple->G    
197   }                                               
198   //G4cout << "R(mm)= " << localrange << "  "     
199   return localrange;                              
200 }                                                 
201                                                   
202 //....oooOO0OOooo........oooOO0OOooo........oo    
203                                                   
204 G4double G4VMscModel::GetEnergy(const G4Partic    
205                                 G4double range    
206 {                                                 
207   G4double e;                                     
208   //G4cout << "G4VMscModel::GetEnergy R(mm)= "    
209   //     << "  Rlocal(mm)= " << localrange <<     
210   if(nullptr != ionisation) { e = ionisation->    
211   else {                                          
212     e = localtkin;                                
213     if(localrange > range) {                      
214       G4double q = part->GetPDGCharge()*invepl    
215       e -= (localrange - range)*dedx*q*q*coupl    
216     }                                             
217   }                                               
218   return e;                                       
219 }                                                 
220                                                   
221 //....oooOO0OOooo........oooOO0OOooo........oo    
222