Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/include/G4EmParameters.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 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 // -------------------------------------------------------------------
 27 //
 28 // GEANT4 Class header file
 29 //
 30 // File name:     G4EmParameters
 31 //
 32 // Author:        Vladimir Ivanchenko for migration to MT
 33 //                  
 34 //
 35 // Creation date: 17.05.2013
 36 //
 37 // Modifications:
 38 //
 39 //
 40 // Class Description:
 41 //
 42 // A utility static class, responsable for keeping parameters
 43 // for all EM physics processes and models.
 44 //
 45 // It is initialized by the master thread but can be updated 
 46 // at any moment. Parameters may be used in run time or at 
 47 // initialisation
 48 //
 49 // -------------------------------------------------------------------
 50 //
 51 
 52 #ifndef G4EmParameters_h
 53 #define G4EmParameters_h 1
 54 
 55 #include "globals.hh"
 56 #include "G4ios.hh"
 57 #include "G4MscStepLimitType.hh"
 58 #include "G4NuclearFormfactorType.hh"
 59 #include "G4DNAModelSubType.hh"
 60 #include "G4EmFluoDirectory.hh"
 61 #include "G4EmSaturation.hh"
 62 #include "G4ThreeVector.hh"
 63 #include "G4ChemTimeStepModel.hh"
 64 #include <vector>
 65 #include <map>
 66 enum G4eSingleScatteringType
 67 {
 68   fWVI = 0,
 69   fMott,
 70   fDPWA
 71 };
 72 
 73 enum class G4TransportationWithMscType
 74 {
 75   fDisabled = 0,
 76   fEnabled,
 77   fMultipleSteps,
 78 };
 79 
 80 enum G4EmFluctuationType 
 81 {
 82   fDummyFluctuation = 0,
 83   fUniversalFluctuation,
 84   fUrbanFluctuation
 85 };
 86 
 87 enum G4PositronAtRestModelType 
 88 {
 89   fSimplePositronium = 0,
 90   fAllisonPositronium,
 91   fOrePowell,
 92   fOrePowellPolar
 93 };
 94 
 95 class G4EmParametersMessenger;
 96 class G4EmExtraParameters;
 97 class G4EmLowEParameters;
 98 class G4VAtomDeexcitation;
 99 class G4VEnergyLossProcess;
100 class G4VEmProcess;
101 class G4StateManager;
102 
103 class G4EmParameters
104 {
105 public:
106 
107   static G4EmParameters* Instance();
108 
109   ~G4EmParameters();
110 
111   void SetDefaults();
112 
113   // printing
114   void StreamInfo(std::ostream& os) const;
115   void Dump();
116   friend std::ostream& operator<< (std::ostream& os, const G4EmParameters&);
117 
118   // boolean flags
119   void SetLossFluctuations(G4bool val);
120   G4bool LossFluctuation() const;
121 
122   void SetBuildCSDARange(G4bool val);
123   G4bool BuildCSDARange() const;
124 
125   void SetLPM(G4bool val);
126   G4bool LPM() const;
127 
128   void SetUseCutAsFinalRange(G4bool val);
129   G4bool UseCutAsFinalRange() const;
130 
131   void SetApplyCuts(G4bool val);
132   G4bool ApplyCuts() const;
133 
134   void SetFluo(G4bool val);
135   G4bool Fluo() const;
136 
137   G4EmFluoDirectory FluoDirectory() const;
138 
139   void SetFluoDirectory(G4EmFluoDirectory);
140   void SetBeardenFluoDir(G4bool val);
141   void SetANSTOFluoDir(G4bool val);
142   void SetXDB_EADLFluoDir(G4bool val);
143 
144   G4bool BeardenFluoDir();
145   G4bool ANSTOFluoDir();
146 
147   void SetAuger(G4bool val);
148   void SetAugerCascade(G4bool val) { SetAuger(val); };
149   G4bool Auger() const;
150   G4bool AugerCascade() const { return Auger(); }
151 
152   void SetPixe(G4bool val);
153   G4bool Pixe() const;
154 
155   void SetDeexcitationIgnoreCut(G4bool val);
156   G4bool DeexcitationIgnoreCut() const;
157 
158   void SetLateralDisplacement(G4bool val);
159   G4bool LateralDisplacement() const;
160 
161   void SetLateralDisplacementAlg96(G4bool val);
162   G4bool LateralDisplacementAlg96() const;
163 
164   void SetMuHadLateralDisplacement(G4bool val);
165   G4bool MuHadLateralDisplacement() const;
166 
167   void ActivateAngularGeneratorForIonisation(G4bool val);
168   G4bool UseAngularGeneratorForIonisation() const;
169 
170   void SetUseMottCorrection(G4bool val);
171   G4bool UseMottCorrection() const;
172 
173   void SetIntegral(G4bool val);
174   G4bool Integral() const;
175 
176   void SetBirksActive(G4bool val);
177   G4bool BirksActive() const;
178 
179   void SetUseICRU90Data(G4bool val);
180   G4bool UseICRU90Data() const;
181 
182   void SetFluctuationType(G4EmFluctuationType val);
183   G4EmFluctuationType FluctuationType() const;
184 
185   void SetPositronAtRestModelType(G4PositronAtRestModelType val);
186   G4PositronAtRestModelType PositronAtRestModelType() const;
187 
188   void SetDNAFast(G4bool val);
189   G4bool DNAFast() const;
190 
191   void SetDNAStationary(G4bool val);
192   G4bool DNAStationary() const;
193 
194   void SetDNAElectronMsc(G4bool val);
195   G4bool DNAElectronMsc() const;
196 
197   // if general interaction is enabled then 
198   // force interaction options should be disabled
199   void SetGeneralProcessActive(G4bool val);
200   G4bool GeneralProcessActive() const;
201 
202   void SetEnableSamplingTable(G4bool val);
203   G4bool EnableSamplingTable() const;
204 
205   void SetEnablePolarisation(G4bool val);
206   G4bool EnablePolarisation() const;
207 
208   G4bool GetDirectionalSplitting() const;
209   void SetDirectionalSplitting(G4bool v);
210 
211   G4bool QuantumEntanglement() const;
212   void SetQuantumEntanglement(G4bool v);
213 
214   G4bool RetrieveMuDataFromFile() const;
215   void SetRetrieveMuDataFromFile(G4bool v);
216 
217   G4bool PhotoeffectBelowKShell() const;
218   void SetPhotoeffectBelowKShell(G4bool v);
219 
220   G4bool MscPositronCorrection() const;
221   void SetMscPositronCorrection(G4bool v);
222 
223   G4bool UseEPICS2017XS() const;
224   void SetUseEPICS2017XS(G4bool v);
225 
226   G4bool Use3GammaAnnihilationOnFly() const;
227   void Set3GammaAnnihilationOnFly(G4bool v);
228 
229   G4bool UseRiGePairProductionModel() const;
230   void SetUseRiGePairProductionModel(G4bool v);
231 
232   // 5d
233   void SetOnIsolated(G4bool val);
234   G4bool OnIsolated() const;
235 
236   void ActivateDNA();
237   void SetIsPrintedFlag(G4bool val);
238   G4bool IsPrintLocked() const;
239 
240   // double parameters with values
241   void SetMinEnergy(G4double val);
242   G4double MinKinEnergy() const;
243 
244   void SetMaxEnergy(G4double val);
245   G4double MaxKinEnergy() const;
246 
247   void SetMaxEnergyForCSDARange(G4double val);
248   G4double MaxEnergyForCSDARange() const;
249 
250   void SetLowestElectronEnergy(G4double val);
251   G4double LowestElectronEnergy() const;
252 
253   void SetLowestMuHadEnergy(G4double val);
254   G4double LowestMuHadEnergy() const;
255 
256   void SetLowestTripletEnergy(G4double val);
257   G4double LowestTripletEnergy() const;
258 
259   void SetLinearLossLimit(G4double val);
260   G4double LinearLossLimit() const;
261 
262   void SetBremsstrahlungTh(G4double val);
263   G4double BremsstrahlungTh() const;
264   void SetMuHadBremsstrahlungTh(G4double val);
265   G4double MuHadBremsstrahlungTh() const;
266 
267   void SetLambdaFactor(G4double val);
268   G4double LambdaFactor() const;
269 
270   void SetFactorForAngleLimit(G4double val);
271   G4double FactorForAngleLimit() const;
272 
273   void SetMscThetaLimit(G4double val);
274   G4double MscThetaLimit() const;
275 
276   void SetMscEnergyLimit(G4double val);
277   G4double MscEnergyLimit() const;
278 
279   void SetMscRangeFactor(G4double val);
280   G4double MscRangeFactor() const;
281 
282   void SetMscMuHadRangeFactor(G4double val);
283   G4double MscMuHadRangeFactor() const;
284 
285   void SetMscGeomFactor(G4double val);
286   G4double MscGeomFactor() const;
287 
288   void SetMscSafetyFactor(G4double val);
289   G4double MscSafetyFactor() const;
290 
291   void SetMscLambdaLimit(G4double val);
292   G4double MscLambdaLimit() const;
293 
294   void SetMscSkin(G4double val);
295   G4double MscSkin() const;
296 
297   void SetScreeningFactor(G4double val);
298   G4double ScreeningFactor() const;
299 
300   void SetMaxNIELEnergy(G4double val);
301   G4double MaxNIELEnergy() const;
302 
303   void SetMaxEnergyFor5DMuPair(G4double val);
304   G4double MaxEnergyFor5DMuPair() const;
305 
306   void SetStepFunction(G4double v1, G4double v2);
307   void SetStepFunctionMuHad(G4double v1, G4double v2);
308   void SetStepFunctionLightIons(G4double v1, G4double v2);
309   void SetStepFunctionIons(G4double v1, G4double v2);
310   void FillStepFunction(const G4ParticleDefinition*, G4VEnergyLossProcess*) const;
311 
312   void SetDirectionalSplittingRadius(G4double r);
313   G4double GetDirectionalSplittingRadius();
314 
315   void SetDirectionalSplittingTarget(const G4ThreeVector& v);
316   G4ThreeVector GetDirectionalSplittingTarget() const;
317 
318   // integer parameters 
319   
320   void SetNumberOfBinsPerDecade(G4int val);
321   G4int NumberOfBinsPerDecade() const;
322   G4int NumberOfBins() const;
323 
324   void SetVerbose(G4int val);
325   G4int Verbose() const;
326 
327   void SetWorkerVerbose(G4int val);
328   G4int WorkerVerbose() const;
329 
330   void SetNumberForFreeVector(G4int val);
331   G4int NumberForFreeVector() const;
332 
333   void SetTransportationWithMsc(G4TransportationWithMscType val);
334   G4TransportationWithMscType TransportationWithMsc() const;
335 
336   void SetMscStepLimitType(G4MscStepLimitType val);
337   G4MscStepLimitType MscStepLimitType() const;
338 
339   void SetMscMuHadStepLimitType(G4MscStepLimitType val);
340   G4MscStepLimitType MscMuHadStepLimitType() const;
341 
342   void SetSingleScatteringType(G4eSingleScatteringType val); 
343   G4eSingleScatteringType SingleScatteringType() const;
344 
345   void SetNuclearFormfactorType(G4NuclearFormfactorType val);
346   G4NuclearFormfactorType NuclearFormfactorType() const;
347 
348   void SetDNAeSolvationSubType(G4DNAModelSubType val);
349   G4DNAModelSubType DNAeSolvationSubType() const;
350 
351   //DNA chemistry model
352   void SetTimeStepModel(const G4ChemTimeStepModel& model);
353   G4ChemTimeStepModel GetTimeStepModel() const;
354   //5d
355   void  SetConversionType(G4int val);
356   G4int GetConversionType() const;
357 
358   // string parameters 
359   void SetPIXECrossSectionModel(const G4String&);
360   const G4String& PIXECrossSectionModel();
361 
362   void SetPIXEElectronCrossSectionModel(const G4String&);
363   const G4String& PIXEElectronCrossSectionModel();
364 
365   void SetLivermoreDataDir(const G4String&);
366   const G4String& LivermoreDataDir();
367 
368   // parameters per region or per process 
369   void AddPAIModel(const G4String& particle,
370                    const G4String& region,
371                    const G4String& type);
372   const std::vector<G4String>& ParticlesPAI() const;
373   const std::vector<G4String>& RegionsPAI() const;
374   const std::vector<G4String>& TypesPAI() const;
375 
376   void AddMicroElec(const G4String& region);
377   const std::vector<G4String>& RegionsMicroElec() const;
378 
379   void AddDNA(const G4String& region, const G4String& type);
380   const std::vector<G4String>& RegionsDNA() const;
381   const std::vector<G4String>& TypesDNA() const;
382 
383   void AddPhysics(const G4String& region, const G4String& type);
384   const std::vector<G4String>& RegionsPhysics() const;
385   const std::vector<G4String>& TypesPhysics() const;
386 
387   void SetSubCutRegion(const G4String& region = "");
388 
389   void SetDeexActiveRegion(const G4String& region, G4bool fdeex,
390          G4bool fauger, G4bool fpixe);
391 
392   void SetProcessBiasingFactor(const G4String& procname, 
393                                G4double val, G4bool wflag);
394 
395   void ActivateForcedInteraction(const G4String& procname, 
396                                  const G4String& region,
397                                  G4double length, 
398                                  G4bool wflag);
399 
400   void ActivateSecondaryBiasing(const G4String& name,
401         const G4String& region, 
402         G4double factor,
403         G4double energyLimit);
404 
405   // define external saturation class
406   void SetEmSaturation(G4EmSaturation*);
407   // create and access saturation class
408   G4EmSaturation* GetEmSaturation();
409 
410   // initialisation methods
411   void DefineRegParamForLoss(G4VEnergyLossProcess*) const;
412   void DefineRegParamForEM(G4VEmProcess*) const;
413   void DefineRegParamForDeex(G4VAtomDeexcitation*) const;
414 
415   const G4String& GetDirLEDATA() const;
416 
417   G4EmParameters(G4EmParameters &) = delete;
418   G4EmParameters & operator=(const G4EmParameters &right) = delete;  
419 
420 private:
421 
422   G4EmParameters();
423 
424   void Initialise();
425 
426   G4bool IsLocked() const;
427 
428   void PrintWarning(G4ExceptionDescription& ed) const; 
429 
430   static G4EmParameters* theInstance;
431 
432   G4EmParametersMessenger* theMessenger;
433   G4EmExtraParameters* fBParameters;
434   G4EmLowEParameters* fCParameters;
435   G4StateManager*  fStateManager;
436   G4EmSaturation*  emSaturation;
437 
438   G4bool lossFluctuation;
439   G4bool buildCSDARange;
440   G4bool flagLPM;
441   G4bool cutAsFinalRange;
442   G4bool applyCuts;
443   G4bool lateralDisplacement;
444   G4bool lateralDisplacementAlg96;
445   G4bool muhadLateralDisplacement;
446   G4bool useAngGeneratorForIonisation;
447   G4bool useMottCorrection;
448   G4bool integral;
449   G4bool birks;
450   G4bool fICRU90;
451   G4bool gener;
452   G4bool fSamplingTable;
453   G4bool fPolarisation;
454   G4bool fMuDataFromFile;
455   G4bool fPEKShell;
456   G4bool fMscPosiCorr;
457   G4bool fUseEPICS2017XS;
458   G4bool f3GammaAnnihilationOnFly;
459   G4bool fUseRiGePairProductionModel;
460   G4bool onIsolated; // 5d model conversion on free ions
461   G4bool fDNA;
462   G4bool fIsPrinted;
463   
464   G4double minKinEnergy;
465   G4double maxKinEnergy;
466   G4double maxKinEnergyCSDA;
467   G4double max5DEnergyForMuPair;
468   G4double lowestElectronEnergy;
469   G4double lowestMuHadEnergy;
470   G4double lowestTripletEnergy;
471   G4double linLossLimit;
472   G4double bremsTh;
473   G4double bremsMuHadTh;
474   G4double lambdaFactor;
475   G4double factorForAngleLimit;
476   G4double thetaLimit;
477   G4double energyLimit;
478   G4double maxNIELEnergy;
479   G4double rangeFactor;
480   G4double rangeFactorMuHad;
481   G4double geomFactor;
482   G4double safetyFactor;
483   G4double lambdaLimit;
484   G4double skin;
485   G4double factorScreen;
486 
487   G4int nbinsPerDecade;
488   G4int verbose;
489   G4int workerVerbose;
490   G4int nForFreeVector;
491   G4int tripletConv;  // 5d model triplet generation type
492 
493   G4TransportationWithMscType fTransportationWithMsc;
494   G4MscStepLimitType mscStepLimit;
495   G4MscStepLimitType mscStepLimitMuHad;
496   G4NuclearFormfactorType nucFormfactor;
497   G4eSingleScatteringType fSStype;
498   G4EmFluctuationType fFluct;
499   G4PositronAtRestModelType fPositronium;
500 
501   G4String fDirLEDATA;
502 };
503 
504 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
505 
506 #endif
507 
508