Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/src/G4EmExtraParameters.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/G4EmExtraParameters.cc (Version 11.3.0) and /processes/electromagnetic/utils/src/G4EmExtraParameters.cc (Version 9.2.p2)


  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 file                              
 29 //                                                
 30 //                                                
 31 // File name:     G4EmExtraParameters             
 32 //                                                
 33 // Author:        Vladimir Ivanchenko             
 34 //                                                
 35 // Creation date: 07.05.2019                      
 36 //                                                
 37 // -------------------------------------------    
 38 //                                                
 39 //....oooOO0OOooo........oooOO0OOooo........oo    
 40 //....oooOO0OOooo........oooOO0OOooo........oo    
 41                                                   
 42 #include "G4EmExtraParameters.hh"                 
 43 #include "G4ParticleDefinition.hh"                
 44 #include "G4PhysicalConstants.hh"                 
 45 #include "G4UnitsTable.hh"                        
 46 #include "G4SystemOfUnits.hh"                     
 47 #include "G4VEmProcess.hh"                        
 48 #include "G4VEnergyLossProcess.hh"                
 49 #include "G4EmExtraParametersMessenger.hh"        
 50 #include "G4RegionStore.hh"                       
 51 #include "G4Region.hh"                            
 52                                                   
 53 //....oooOO0OOooo........oooOO0OOooo........oo    
 54                                                   
 55 G4EmExtraParameters::G4EmExtraParameters()        
 56 {                                                 
 57   theMessenger = new G4EmExtraParametersMessen    
 58   Initialise();                                   
 59 }                                                 
 60                                                   
 61 //....oooOO0OOooo........oooOO0OOooo........oo    
 62                                                   
 63 G4EmExtraParameters::~G4EmExtraParameters()       
 64 {                                                 
 65   delete theMessenger;                            
 66 }                                                 
 67                                                   
 68 //....oooOO0OOooo........oooOO0OOooo........oo    
 69                                                   
 70 void G4EmExtraParameters::Initialise()            
 71 {                                                 
 72   quantumEntanglement = false;                    
 73   directionalSplitting = false;                   
 74   directionalSplittingTarget.set(0.,0.,0.);       
 75   directionalSplittingRadius = 0.;                
 76                                                   
 77   dRoverRange = 0.2;                              
 78   finalRange = CLHEP::mm;                         
 79   dRoverRangeMuHad = 0.2;                         
 80   finalRangeMuHad = 0.1*CLHEP::mm;                
 81   dRoverRangeLIons = 0.2;                         
 82   finalRangeLIons = 0.1*CLHEP::mm;                
 83   dRoverRangeIons = 0.2;                          
 84   finalRangeIons = 0.1*CLHEP::mm;                 
 85                                                   
 86   m_regnamesForced.clear();                       
 87   m_procForced.clear();                           
 88   m_lengthForced.clear();                         
 89   m_weightForced.clear();                         
 90   m_regnamesSubCut.clear();                       
 91 }                                                 
 92                                                   
 93 //....oooOO0OOooo........oooOO0OOooo........oo    
 94                                                   
 95                                                   
 96 void G4EmExtraParameters::PrintWarning(G4Excep    
 97 {                                                 
 98   G4Exception("G4EmExtraParameters", "em0044",    
 99 }                                                 
100                                                   
101 G4String G4EmExtraParameters::CheckRegion(cons    
102 {                                                 
103   G4String r = reg;                               
104   if(r == "" || r == "world" || r == "World")     
105     r = "DefaultRegionForTheWorld";               
106   }                                               
107   return r;                                       
108 }                                                 
109                                                   
110 void G4EmExtraParameters::SetStepFunction(G4do    
111 {                                                 
112   if(v1 > 0.0 && v1 <= 1.0 && v2 > 0.0) {         
113     dRoverRange = v1;                             
114     finalRange = v2;                              
115   } else {                                        
116     G4ExceptionDescription ed;                    
117     ed << "Values of step function are out of     
118        << v1 << ", " << v2/CLHEP::mm << " mm -    
119     PrintWarning(ed);                             
120   }                                               
121 }                                                 
122                                                   
123 G4double G4EmExtraParameters::GetStepFunctionP    
124 {                                                 
125   return dRoverRange;                             
126 }                                                 
127                                                   
128 G4double G4EmExtraParameters::GetStepFunctionP    
129 {                                                 
130   return finalRange;                              
131 }                                                 
132                                                   
133 void G4EmExtraParameters::SetStepFunctionMuHad    
134 {                                                 
135   if(v1 > 0.0 && v1 <= 1.0 && v2 > 0.0) {         
136     dRoverRangeMuHad = v1;                        
137     finalRangeMuHad = v2;                         
138   } else {                                        
139     G4ExceptionDescription ed;                    
140     ed << "Values of step function are out of     
141        << v1 << ", " << v2/CLHEP::mm << " mm -    
142     PrintWarning(ed);                             
143   }                                               
144 }                                                 
145                                                   
146 G4double G4EmExtraParameters::GetStepFunctionM    
147 {                                                 
148   return dRoverRangeMuHad;                        
149 }                                                 
150                                                   
151 G4double G4EmExtraParameters::GetStepFunctionM    
152 {                                                 
153   return finalRangeMuHad;                         
154 }                                                 
155                                                   
156 void G4EmExtraParameters::SetStepFunctionLight    
157 {                                                 
158   if(v1 > 0.0 && v1 <= 1.0 && v2 > 0.0) {         
159     dRoverRangeLIons = v1;                        
160     finalRangeLIons = v2;                         
161   } else {                                        
162     G4ExceptionDescription ed;                    
163     ed << "Values of step function are out of     
164        << v1 << ", " << v2/CLHEP::mm << " mm -    
165     PrintWarning(ed);                             
166   }                                               
167 }                                                 
168                                                   
169 G4double G4EmExtraParameters::GetStepFunctionL    
170 {                                                 
171   return dRoverRangeLIons;                        
172 }                                                 
173                                                   
174 G4double G4EmExtraParameters::GetStepFunctionL    
175 {                                                 
176   return finalRangeLIons;                         
177 }                                                 
178                                                   
179 void G4EmExtraParameters::SetStepFunctionIons(    
180 {                                                 
181   if(v1 > 0.0 && v1 <= 1.0 && v2 > 0.0) {         
182     dRoverRangeIons = v1;                         
183     finalRangeIons = v2;                          
184   } else {                                        
185     G4ExceptionDescription ed;                    
186     ed << "Values of step function are out of     
187        << v1 << ", " << v2/CLHEP::mm << " mm -    
188     PrintWarning(ed);                             
189   }                                               
190 }                                                 
191                                                   
192 G4double G4EmExtraParameters::GetStepFunctionI    
193 {                                                 
194   return dRoverRangeIons;                         
195 }                                                 
196                                                   
197 G4double G4EmExtraParameters::GetStepFunctionI    
198 {                                                 
199   return finalRangeIons;                          
200 }                                                 
201                                                   
202 void G4EmExtraParameters::FillStepFunction(con    
203 {                                                 
204   // electron and positron                        
205   if (11 == std::abs(part->GetPDGEncoding()))     
206     proc->SetStepFunction(dRoverRange, finalRa    
207                                                   
208     // all heavy ions                             
209   } else if ("GenericIon" == part->GetParticle    
210     proc->SetStepFunction(dRoverRangeIons, fin    
211                                                   
212     // light nucleus and anti-nucleus             
213   } else if (part->GetParticleType() == "nucle    
214     proc->SetStepFunction(dRoverRangeLIons, fi    
215                                                   
216     // other particles                            
217   } else {                                        
218     proc->SetStepFunction(dRoverRangeMuHad, fi    
219   }                                               
220 }                                                 
221                                                   
222 void G4EmExtraParameters::AddPAIModel(const G4    
223                                       const G4    
224                                       const G4    
225 {                                                 
226   G4String r = CheckRegion(region);               
227   std::size_t nreg =  m_regnamesPAI.size();       
228                                                   
229   // in previously defined region other partic    
230   // type should be overrided for the same reg    
231   for(std::size_t i=0; i<nreg; ++i) {             
232     if(m_regnamesPAI[i] == r) {                   
233       if (particle == "all") {                    
234   m_particlesPAI[i] = particle;                   
235   m_typesPAI[i] = type;                           
236         return;                                   
237       } else if(m_particlesPAI[i] == particle     
238   m_typesPAI[i] = type;                           
239         return;                                   
240       }                                           
241     }                                             
242   }                                               
243   // new regions and/or particles                 
244   m_particlesPAI.push_back(particle);             
245   m_regnamesPAI.push_back(std::move(r));          
246   m_typesPAI.push_back(type);                     
247 }                                                 
248                                                   
249 const std::vector<G4String>& G4EmExtraParamete    
250 {                                                 
251   return m_particlesPAI;                          
252 }                                                 
253                                                   
254 const std::vector<G4String>& G4EmExtraParamete    
255 {                                                 
256   return m_regnamesPAI;                           
257 }                                                 
258                                                   
259 const std::vector<G4String>& G4EmExtraParamete    
260 {                                                 
261   return m_typesPAI;                              
262 }                                                 
263                                                   
264 void G4EmExtraParameters::AddPhysics(const G4S    
265                                      const G4S    
266 {                                                 
267   G4String r = CheckRegion(region);               
268   std::size_t nreg =  m_regnamesPhys.size();      
269   for(std::size_t i=0; i<nreg; ++i) {             
270     if(r == m_regnamesPhys[i]) { return; }        
271   }                                               
272   m_regnamesPhys.push_back(std::move(r));         
273   m_typesPhys.push_back(type);                    
274 }                                                 
275                                                   
276 const std::vector<G4String>& G4EmExtraParamete    
277 {                                                 
278   return m_regnamesPhys;                          
279 }                                                 
280                                                   
281 const std::vector<G4String>& G4EmExtraParamete    
282 {                                                 
283   return m_typesPhys;                             
284 }                                                 
285                                                   
286 void G4EmExtraParameters::SetSubCutRegion(cons    
287 {                                                 
288   const G4String& r = CheckRegion(region);        
289   std::size_t nreg =  m_regnamesSubCut.size();    
290   for(std::size_t i=0; i<nreg; ++i) {             
291     if(r == m_regnamesSubCut[i]) {                
292       return;                                     
293     }                                             
294   }                                               
295   m_regnamesSubCut.push_back(r);                  
296 }                                                 
297                                                   
298 void                                              
299 G4EmExtraParameters::SetProcessBiasingFactor(c    
300                                              G    
301 {                                                 
302   if(val > 0.0) {                                 
303     std::size_t n =  m_procBiasedXS.size();       
304     for(std::size_t i=0; i<n; ++i) {              
305       if(procname == m_procBiasedXS[i]) {         
306   m_factBiasedXS[i] = val;                        
307   m_weightBiasedXS[i]= wflag;                     
308   return;                                         
309       }                                           
310     }                                             
311     m_procBiasedXS.push_back(procname);           
312     m_factBiasedXS.push_back(val);                
313     m_weightBiasedXS.push_back(wflag);            
314   } else {                                        
315     G4ExceptionDescription ed;                    
316     ed << "Process: " << procname << " XS bias    
317        << val << " is negative - ignored";        
318     PrintWarning(ed);                             
319   }                                               
320 }                                                 
321                                                   
322 void                                              
323 G4EmExtraParameters::ActivateForcedInteraction    
324                                                   
325                                                   
326                                                   
327 {                                                 
328   const G4String& r = CheckRegion(region);        
329   if(length >= 0.0) {                             
330     std::size_t n =  m_procForced.size();         
331     for(std::size_t i=0; i<n; ++i) {              
332       if(procname == m_procForced[i] && r == m    
333   m_lengthForced[i] = length;                     
334   m_weightForced[i] = wflag;                      
335   return;                                         
336       }                                           
337     }                                             
338     m_regnamesForced.push_back(r);                
339     m_procForced.push_back(procname);             
340     m_lengthForced.push_back(length);             
341     m_weightForced.push_back(wflag);              
342   } else {                                        
343     G4ExceptionDescription ed;                    
344     ed << "Process: " << procname << " in regi    
345        << " : forced interacttion length= "       
346        << length << " is negative - ignored";     
347     PrintWarning(ed);                             
348   }                                               
349 }                                                 
350                                                   
351 void                                              
352 G4EmExtraParameters::ActivateSecondaryBiasing(    
353                                                   
354                                                   
355                                                   
356 {                                                 
357   const G4String& r = CheckRegion(region);        
358   if(factor >= 0.0 && energyLim >= 0.0) {         
359     std::size_t n =  m_procBiasedSec.size();      
360     for(std::size_t i=0; i<n; ++i) {              
361       if(procname == m_procBiasedSec[i] && r =    
362   m_factBiasedSec[i] = factor;                    
363   m_elimBiasedSec[i] = energyLim;                 
364   return;                                         
365       }                                           
366     }                                             
367     m_regnamesBiasedSec.push_back(r);             
368     m_procBiasedSec.push_back(procname);          
369     m_factBiasedSec.push_back(factor);            
370     m_elimBiasedSec.push_back(energyLim);         
371   } else {                                        
372     G4ExceptionDescription ed;                    
373     ed << "Process: " << procname << " in regi    
374        << " : secondary bised factor= "           
375        << factor << ", Elim= " << energyLim <<    
376     PrintWarning(ed);                             
377   }                                               
378 }                                                 
379                                                   
380 void G4EmExtraParameters::DefineRegParamForLos    
381 {                                                 
382   const G4RegionStore* regionStore = G4RegionS    
383   std::size_t n = m_regnamesSubCut.size();        
384   for(std::size_t i=0; i<n; ++i) {                
385     const G4Region* reg = regionStore->GetRegi    
386     if(nullptr != reg) { ptr->ActivateSubCutof    
387   }                                               
388   n = m_procBiasedXS.size();                      
389   for(std::size_t i=0; i<n; ++i) {                
390     if(ptr->GetProcessName() == m_procBiasedXS    
391       ptr->SetCrossSectionBiasingFactor(m_fact    
392           m_weightBiasedXS[i]);                   
393       break;                                      
394     }                                             
395   }                                               
396   n = m_procForced.size();                        
397   for(std::size_t i=0; i<n; ++i) {                
398     if(ptr->GetProcessName() == m_procForced[i    
399       ptr->ActivateForcedInteraction(m_lengthF    
400              m_regnamesForced[i],                 
401              m_weightForced[i]);                  
402       break;                                      
403     }                                             
404   }                                               
405   n = m_procBiasedSec.size();                     
406   for(std::size_t i=0; i<n; ++i) {                
407     if(ptr->GetProcessName() == m_procBiasedSe    
408       ptr->ActivateSecondaryBiasing(m_regnames    
409             m_factBiasedSec[i],                   
410             m_elimBiasedSec[i]);                  
411       break;                                      
412     }                                             
413   }                                               
414 }                                                 
415                                                   
416 void G4EmExtraParameters::DefineRegParamForEM(    
417 {                                                 
418   std::size_t n = m_procBiasedXS.size();          
419   for(std::size_t i=0; i<n; ++i) {                
420     if(ptr->GetProcessName() == m_procBiasedXS    
421       ptr->SetCrossSectionBiasingFactor(m_fact    
422           m_weightBiasedXS[i]);                   
423       break;                                      
424     }                                             
425   }                                               
426   n = m_procForced.size();                        
427   for(std::size_t i=0; i<n; ++i) {                
428     if(ptr->GetProcessName() == m_procForced[i    
429       ptr->ActivateForcedInteraction(m_lengthF    
430              m_regnamesForced[i],                 
431              m_weightForced[i]);                  
432       break;                                      
433     }                                             
434   }                                               
435   n = m_procBiasedSec.size();                     
436   for(std::size_t i=0; i<n; ++i) {                
437     if(ptr->GetProcessName() == m_procBiasedSe    
438       ptr->ActivateSecondaryBiasing(m_regnames    
439             m_factBiasedSec[i],                   
440             m_elimBiasedSec[i]);                  
441       break;                                      
442     }                                             
443   }                                               
444 }                                                 
445                                                   
446 G4bool G4EmExtraParameters::QuantumEntanglemen    
447 {                                                 
448   return quantumEntanglement;                     
449 }                                                 
450                                                   
451 void G4EmExtraParameters::SetQuantumEntangleme    
452 {                                                 
453   quantumEntanglement = v;                        
454 }                                                 
455                                                   
456 G4bool G4EmExtraParameters::GetDirectionalSpli    
457   return directionalSplitting;                    
458 }                                                 
459                                                   
460 void G4EmExtraParameters::SetDirectionalSplitt    
461 {                                                 
462   directionalSplitting = v;                       
463 }                                                 
464                                                   
465 void                                              
466 G4EmExtraParameters::SetDirectionalSplittingTa    
467 {                                                 
468   directionalSplittingTarget = v;                 
469 }                                                 
470                                                   
471 G4ThreeVector G4EmExtraParameters::GetDirectio    
472 {                                                 
473   return directionalSplittingTarget;              
474 }                                                 
475                                                   
476 void G4EmExtraParameters::SetDirectionalSplitt    
477 {                                                 
478   directionalSplittingRadius = r;                 
479 }                                                 
480                                                   
481 G4double G4EmExtraParameters::GetDirectionalSp    
482 {                                                 
483   return directionalSplittingRadius;              
484 }                                                 
485                                                   
486 //....oooOO0OOooo........oooOO0OOooo........oo    
487