Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:58:13

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 // -------------------------------------------------------------------
0027 //
0028 // GEANT4 Class header file
0029 //
0030 // File name:     G4EmParameters
0031 //
0032 // Author:        Vladimir Ivanchenko for migration to MT
0033 //                  
0034 //
0035 // Creation date: 17.05.2013
0036 //
0037 // Modifications:
0038 //
0039 //
0040 // Class Description:
0041 //
0042 // A utility static class, responsable for keeping parameters
0043 // for all EM physics processes and models.
0044 //
0045 // It is initialized by the master thread but can be updated 
0046 // at any moment. Parameters may be used in run time or at 
0047 // initialisation
0048 //
0049 // -------------------------------------------------------------------
0050 //
0051 
0052 #ifndef G4EmParameters_h
0053 #define G4EmParameters_h 1
0054 
0055 #include "globals.hh"
0056 #include "G4ios.hh"
0057 #include "G4MscStepLimitType.hh"
0058 #include "G4NuclearFormfactorType.hh"
0059 #include "G4DNAModelSubType.hh"
0060 #include "G4EmFluoDirectory.hh"
0061 #include "G4EmSaturation.hh"
0062 #include "G4ThreeVector.hh"
0063 #include <vector>
0064 
0065 enum G4eSingleScatteringType
0066 {
0067   fWVI = 0,
0068   fMott,
0069   fDPWA
0070 };
0071 
0072 enum class G4TransportationWithMscType
0073 {
0074   fDisabled = 0,
0075   fEnabled,
0076   fMultipleSteps,
0077 };
0078 
0079 enum G4EmFluctuationType 
0080 {
0081   fDummyFluctuation = 0,
0082   fUniversalFluctuation,
0083   fUrbanFluctuation
0084 };
0085 
0086 class G4EmParametersMessenger;
0087 class G4EmExtraParameters;
0088 class G4EmLowEParameters;
0089 class G4VAtomDeexcitation;
0090 class G4VEnergyLossProcess;
0091 class G4VEmProcess;
0092 class G4StateManager;
0093 
0094 class G4EmParameters
0095 {
0096 public:
0097 
0098   static G4EmParameters* Instance();
0099 
0100   ~G4EmParameters();
0101 
0102   void SetDefaults();
0103 
0104   // printing
0105   void StreamInfo(std::ostream& os) const;
0106   void Dump();
0107   friend std::ostream& operator<< (std::ostream& os, const G4EmParameters&);
0108 
0109   // boolean flags
0110   void SetLossFluctuations(G4bool val);
0111   G4bool LossFluctuation() const;
0112 
0113   void SetBuildCSDARange(G4bool val);
0114   G4bool BuildCSDARange() const;
0115 
0116   void SetLPM(G4bool val);
0117   G4bool LPM() const;
0118 
0119   void SetUseCutAsFinalRange(G4bool val);
0120   G4bool UseCutAsFinalRange() const;
0121 
0122   void SetApplyCuts(G4bool val);
0123   G4bool ApplyCuts() const;
0124 
0125   void SetFluo(G4bool val);
0126   G4bool Fluo() const;
0127 
0128   G4EmFluoDirectory FluoDirectory() const;
0129 
0130   void SetFluoDirectory(G4EmFluoDirectory);
0131   void SetBeardenFluoDir(G4bool val);
0132   void SetANSTOFluoDir(G4bool val);
0133   void SetXDB_EADLFluoDir(G4bool val);
0134 
0135   G4bool BeardenFluoDir();
0136   G4bool ANSTOFluoDir();
0137 
0138   void SetAuger(G4bool val);
0139   void SetAugerCascade(G4bool val) { SetAuger(val); };
0140   G4bool Auger() const;
0141   G4bool AugerCascade() const { return Auger(); }
0142 
0143   void SetPixe(G4bool val);
0144   G4bool Pixe() const;
0145 
0146   void SetDeexcitationIgnoreCut(G4bool val);
0147   G4bool DeexcitationIgnoreCut() const;
0148 
0149   void SetLateralDisplacement(G4bool val);
0150   G4bool LateralDisplacement() const;
0151 
0152   void SetLateralDisplacementAlg96(G4bool val);
0153   G4bool LateralDisplacementAlg96() const;
0154 
0155   void SetMuHadLateralDisplacement(G4bool val);
0156   G4bool MuHadLateralDisplacement() const;
0157 
0158   void ActivateAngularGeneratorForIonisation(G4bool val);
0159   G4bool UseAngularGeneratorForIonisation() const;
0160 
0161   void SetUseMottCorrection(G4bool val);
0162   G4bool UseMottCorrection() const;
0163 
0164   void SetIntegral(G4bool val);
0165   G4bool Integral() const;
0166 
0167   void SetBirksActive(G4bool val);
0168   G4bool BirksActive() const;
0169 
0170   void SetUseICRU90Data(G4bool val);
0171   G4bool UseICRU90Data() const;
0172 
0173   void SetFluctuationType(G4EmFluctuationType val);
0174   G4EmFluctuationType FluctuationType() const;
0175 
0176   void SetDNAFast(G4bool val);
0177   G4bool DNAFast() const;
0178 
0179   void SetDNAStationary(G4bool val);
0180   G4bool DNAStationary() const;
0181 
0182   void SetDNAElectronMsc(G4bool val);
0183   G4bool DNAElectronMsc() const;
0184 
0185   // if general interaction is enabled then 
0186   // force interaction options should be disabled
0187   void SetGeneralProcessActive(G4bool val);
0188   G4bool GeneralProcessActive() const;
0189 
0190   void SetEnableSamplingTable(G4bool val);
0191   G4bool EnableSamplingTable() const;
0192 
0193   void SetEnablePolarisation(G4bool val);
0194   G4bool EnablePolarisation() const;
0195 
0196   G4bool GetDirectionalSplitting() const;
0197   void SetDirectionalSplitting(G4bool v);
0198 
0199   G4bool QuantumEntanglement() const;
0200   void SetQuantumEntanglement(G4bool v);
0201 
0202   G4bool RetrieveMuDataFromFile() const;
0203   void SetRetrieveMuDataFromFile(G4bool v);
0204 
0205   G4bool PhotoeffectBelowKShell() const;
0206   void SetPhotoeffectBelowKShell(G4bool v);
0207 
0208   G4bool MscPositronCorrection() const;
0209   void SetMscPositronCorrection(G4bool v);
0210 
0211   // 5d
0212   void SetOnIsolated(G4bool val);
0213   G4bool OnIsolated() const;
0214 
0215   void ActivateDNA();
0216   void SetIsPrintedFlag(G4bool val);
0217   G4bool IsPrintLocked() const;
0218 
0219   // double parameters with values
0220   void SetMinEnergy(G4double val);
0221   G4double MinKinEnergy() const;
0222 
0223   void SetMaxEnergy(G4double val);
0224   G4double MaxKinEnergy() const;
0225 
0226   void SetMaxEnergyForCSDARange(G4double val);
0227   G4double MaxEnergyForCSDARange() const;
0228 
0229   void SetLowestElectronEnergy(G4double val);
0230   G4double LowestElectronEnergy() const;
0231 
0232   void SetLowestMuHadEnergy(G4double val);
0233   G4double LowestMuHadEnergy() const;
0234 
0235   void SetLowestTripletEnergy(G4double val);
0236   G4double LowestTripletEnergy() const;
0237 
0238   void SetLinearLossLimit(G4double val);
0239   G4double LinearLossLimit() const;
0240 
0241   void SetBremsstrahlungTh(G4double val);
0242   G4double BremsstrahlungTh() const;
0243   void SetMuHadBremsstrahlungTh(G4double val);
0244   G4double MuHadBremsstrahlungTh() const;
0245 
0246   void SetLambdaFactor(G4double val);
0247   G4double LambdaFactor() const;
0248 
0249   void SetFactorForAngleLimit(G4double val);
0250   G4double FactorForAngleLimit() const;
0251 
0252   void SetMscThetaLimit(G4double val);
0253   G4double MscThetaLimit() const;
0254 
0255   void SetMscEnergyLimit(G4double val);
0256   G4double MscEnergyLimit() const;
0257 
0258   void SetMscRangeFactor(G4double val);
0259   G4double MscRangeFactor() const;
0260 
0261   void SetMscMuHadRangeFactor(G4double val);
0262   G4double MscMuHadRangeFactor() const;
0263 
0264   void SetMscGeomFactor(G4double val);
0265   G4double MscGeomFactor() const;
0266 
0267   void SetMscSafetyFactor(G4double val);
0268   G4double MscSafetyFactor() const;
0269 
0270   void SetMscLambdaLimit(G4double val);
0271   G4double MscLambdaLimit() const;
0272 
0273   void SetMscSkin(G4double val);
0274   G4double MscSkin() const;
0275 
0276   void SetScreeningFactor(G4double val);
0277   G4double ScreeningFactor() const;
0278 
0279   void SetMaxNIELEnergy(G4double val);
0280   G4double MaxNIELEnergy() const;
0281 
0282   void SetMaxEnergyFor5DMuPair(G4double val);
0283   G4double MaxEnergyFor5DMuPair() const;
0284 
0285   void SetStepFunction(G4double v1, G4double v2);
0286   void SetStepFunctionMuHad(G4double v1, G4double v2);
0287   void SetStepFunctionLightIons(G4double v1, G4double v2);
0288   void SetStepFunctionIons(G4double v1, G4double v2);
0289   void FillStepFunction(const G4ParticleDefinition*, G4VEnergyLossProcess*) const;
0290 
0291   void SetDirectionalSplittingRadius(G4double r);
0292   G4double GetDirectionalSplittingRadius();
0293 
0294   void SetDirectionalSplittingTarget(const G4ThreeVector& v);
0295   G4ThreeVector GetDirectionalSplittingTarget() const;
0296 
0297   // integer parameters 
0298   
0299   void SetNumberOfBinsPerDecade(G4int val);
0300   G4int NumberOfBinsPerDecade() const;
0301   G4int NumberOfBins() const;
0302 
0303   void SetVerbose(G4int val);
0304   G4int Verbose() const;
0305 
0306   void SetWorkerVerbose(G4int val);
0307   G4int WorkerVerbose() const;
0308 
0309   void SetNumberForFreeVector(G4int val);
0310   G4int NumberForFreeVector() const;
0311 
0312   void SetTransportationWithMsc(G4TransportationWithMscType val);
0313   G4TransportationWithMscType TransportationWithMsc() const;
0314 
0315   void SetMscStepLimitType(G4MscStepLimitType val);
0316   G4MscStepLimitType MscStepLimitType() const;
0317 
0318   void SetMscMuHadStepLimitType(G4MscStepLimitType val);
0319   G4MscStepLimitType MscMuHadStepLimitType() const;
0320 
0321   void SetSingleScatteringType(G4eSingleScatteringType val); 
0322   G4eSingleScatteringType SingleScatteringType() const;
0323 
0324   void SetNuclearFormfactorType(G4NuclearFormfactorType val);
0325   G4NuclearFormfactorType NuclearFormfactorType() const;
0326 
0327   void SetDNAeSolvationSubType(G4DNAModelSubType val);
0328   G4DNAModelSubType DNAeSolvationSubType() const;
0329 
0330   //5d
0331   void  SetConversionType(G4int val);
0332   G4int GetConversionType() const;
0333 
0334   // string parameters 
0335   void SetPIXECrossSectionModel(const G4String&);
0336   const G4String& PIXECrossSectionModel();
0337 
0338   void SetPIXEElectronCrossSectionModel(const G4String&);
0339   const G4String& PIXEElectronCrossSectionModel();
0340 
0341   void SetLivermoreDataDir(const G4String&);
0342   const G4String& LivermoreDataDir();
0343 
0344   // parameters per region or per process 
0345   void AddPAIModel(const G4String& particle,
0346                    const G4String& region,
0347                    const G4String& type);
0348   const std::vector<G4String>& ParticlesPAI() const;
0349   const std::vector<G4String>& RegionsPAI() const;
0350   const std::vector<G4String>& TypesPAI() const;
0351 
0352   void AddMicroElec(const G4String& region);
0353   const std::vector<G4String>& RegionsMicroElec() const;
0354 
0355   void AddDNA(const G4String& region, const G4String& type);
0356   const std::vector<G4String>& RegionsDNA() const;
0357   const std::vector<G4String>& TypesDNA() const;
0358 
0359   void AddPhysics(const G4String& region, const G4String& type);
0360   const std::vector<G4String>& RegionsPhysics() const;
0361   const std::vector<G4String>& TypesPhysics() const;
0362 
0363   void SetSubCutRegion(const G4String& region = "");
0364 
0365   void SetDeexActiveRegion(const G4String& region, G4bool fdeex,
0366                G4bool fauger, G4bool fpixe);
0367 
0368   void SetProcessBiasingFactor(const G4String& procname, 
0369                                G4double val, G4bool wflag);
0370 
0371   void ActivateForcedInteraction(const G4String& procname, 
0372                                  const G4String& region,
0373                                  G4double length, 
0374                                  G4bool wflag);
0375 
0376   void ActivateSecondaryBiasing(const G4String& name,
0377                 const G4String& region, 
0378                 G4double factor,
0379                 G4double energyLimit);
0380 
0381   // define external saturation class
0382   void SetEmSaturation(G4EmSaturation*);
0383   // create and access saturation class
0384   G4EmSaturation* GetEmSaturation();
0385 
0386   // initialisation methods
0387   void DefineRegParamForLoss(G4VEnergyLossProcess*) const;
0388   void DefineRegParamForEM(G4VEmProcess*) const;
0389   void DefineRegParamForDeex(G4VAtomDeexcitation*) const;
0390 
0391   const G4String& GetDirLEDATA() const;
0392 
0393   G4EmParameters(G4EmParameters &) = delete;
0394   G4EmParameters & operator=(const G4EmParameters &right) = delete;  
0395 
0396 private:
0397 
0398   G4EmParameters();
0399 
0400   void Initialise();
0401 
0402   G4bool IsLocked() const;
0403 
0404   void PrintWarning(G4ExceptionDescription& ed) const; 
0405 
0406   static G4EmParameters* theInstance;
0407 
0408   G4EmParametersMessenger* theMessenger;
0409   G4EmExtraParameters* fBParameters;
0410   G4EmLowEParameters* fCParameters;
0411   G4StateManager*  fStateManager;
0412   G4EmSaturation*  emSaturation;
0413 
0414   G4bool lossFluctuation;
0415   G4bool buildCSDARange;
0416   G4bool flagLPM;
0417   G4bool cutAsFinalRange;
0418   G4bool applyCuts;
0419   G4bool lateralDisplacement;
0420   G4bool lateralDisplacementAlg96;
0421   G4bool muhadLateralDisplacement;
0422   G4bool useAngGeneratorForIonisation;
0423   G4bool useMottCorrection;
0424   G4bool integral;
0425   G4bool birks;
0426   G4bool fICRU90;
0427   G4bool gener;
0428   G4bool fSamplingTable;
0429   G4bool fPolarisation;
0430   G4bool fMuDataFromFile;
0431   G4bool fPEKShell;
0432   G4bool fMscPosiCorr;
0433   G4bool onIsolated; // 5d model conversion on free ions
0434   G4bool fDNA;
0435   G4bool fIsPrinted;
0436   
0437   G4double minKinEnergy;
0438   G4double maxKinEnergy;
0439   G4double maxKinEnergyCSDA;
0440   G4double max5DEnergyForMuPair;
0441   G4double lowestElectronEnergy;
0442   G4double lowestMuHadEnergy;
0443   G4double lowestTripletEnergy;
0444   G4double linLossLimit;
0445   G4double bremsTh;
0446   G4double bremsMuHadTh;
0447   G4double lambdaFactor;
0448   G4double factorForAngleLimit;
0449   G4double thetaLimit;
0450   G4double energyLimit;
0451   G4double maxNIELEnergy;
0452   G4double rangeFactor;
0453   G4double rangeFactorMuHad;
0454   G4double geomFactor;
0455   G4double safetyFactor;
0456   G4double lambdaLimit;
0457   G4double skin;
0458   G4double factorScreen;
0459 
0460   G4int nbinsPerDecade;
0461   G4int verbose;
0462   G4int workerVerbose;
0463   G4int nForFreeVector;
0464   G4int tripletConv;  // 5d model triplet generation type
0465 
0466   G4TransportationWithMscType fTransportationWithMsc;
0467   G4MscStepLimitType mscStepLimit;
0468   G4MscStepLimitType mscStepLimitMuHad;
0469   G4NuclearFormfactorType nucFormfactor;
0470   G4eSingleScatteringType fSStype;
0471   G4EmFluctuationType fFluct;
0472 
0473   G4String fDirLEDATA;
0474 };
0475 
0476 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0477 
0478 #endif
0479