Warning, file /include/Geant4/G4PenelopeRayleighModelMI.hh was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 #ifndef G4PenelopeRayleighModelMI_HH
0052 #define G4PenelopeRayleighModelMI_HH 1
0053
0054 #include "globals.hh"
0055 #include "G4VEmModel.hh"
0056 #include "G4DataVector.hh"
0057 #include "G4ParticleChangeForGamma.hh"
0058
0059 #include "G4ExtendedMaterial.hh"
0060 #include "G4MIData.hh"
0061
0062
0063
0064 class G4ParticleDefinition;
0065 class G4DynamicParticle;
0066 class G4MaterialCutsCouple;
0067 class G4Material;
0068 class G4PhysicsFreeVector;
0069 class G4PenelopeSamplingData;
0070
0071 class G4PenelopeRayleighModelMI : public G4VEmModel
0072 {
0073
0074 public:
0075 explicit G4PenelopeRayleighModelMI(const G4ParticleDefinition* p = nullptr,
0076 const G4String& processName = "PenRayleighMI");
0077
0078 virtual ~G4PenelopeRayleighModelMI();
0079
0080 void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
0081 void InitialiseLocal(const G4ParticleDefinition*,
0082 G4VEmModel *masterModel) override;
0083
0084 G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
0085 G4double kinEnergy,
0086 G4double Z,
0087 G4double A = 0,
0088 G4double cut = 0,
0089 G4double emax = DBL_MAX) override;
0090
0091
0092 G4double CrossSectionPerVolume(const G4Material*,
0093 const G4ParticleDefinition*,
0094 G4double kineticEnergy,
0095 G4double cutEnergy = 0.,
0096 G4double maxEnergy = DBL_MAX) override;
0097
0098 void SampleSecondaries(std::vector<G4DynamicParticle*>*,
0099 const G4MaterialCutsCouple*,
0100 const G4DynamicParticle*,
0101 G4double tmin,
0102 G4double maxEnergy) override;
0103
0104 void SetVerbosityLevel(G4int lev) {fVerboseLevel = lev;};
0105 G4int GetVerbosityLevel() {return fVerboseLevel;};
0106
0107
0108 void DumpFormFactorTable(const G4Material*);
0109
0110
0111 void SetMIActive(G4bool val){fIsMIActive = val;};
0112 G4bool IsMIActive(){return fIsMIActive;};
0113
0114 G4PenelopeRayleighModelMI& operator=(const G4PenelopeRayleighModelMI &right) = delete;
0115 G4PenelopeRayleighModelMI(const G4PenelopeRayleighModelMI&) = delete;
0116
0117 private:
0118 void SetParticle(const G4ParticleDefinition*);
0119
0120
0121 void ReadDataFile(G4int);
0122 void ClearTables();
0123 void BuildFormFactorTable(const G4Material*);
0124 void GetPMaxTable(const G4Material*);
0125 G4double GetFSquared(const G4Material*,const G4double);
0126 void InitializeSamplingAlgorithm(const G4Material*);
0127 void ReadMolInterferenceData(const G4String&,const G4String& filename="NULL");
0128 G4MIData* GetMIData(const G4Material*);
0129 void CalculateThetaAndAngFun();
0130 G4double CalculateQSquared(G4double angle, G4double energy);
0131 G4double IntegrateFun(G4double y[], G4int n, G4double dTheta);
0132 void LoadKnownMIFFMaterials();
0133
0134
0135 G4ParticleChangeForGamma* fParticleChange;
0136 const G4ParticleDefinition* fParticle;
0137
0138 G4DataVector fLogQSquareGrid;
0139 std::map<const G4Material*,G4PhysicsFreeVector*> *fLogFormFactorTable;
0140
0141 G4DataVector fLogEnergyGridPMax;
0142 std::map<const G4Material*,G4PhysicsFreeVector*> *fPMaxTable;
0143 std::map<const G4Material*,G4PenelopeSamplingData*> *fSamplingTable;
0144
0145 std::map<G4String,G4PhysicsFreeVector*> *fMolInterferenceData;
0146 G4PhysicsFreeVector* fAngularFunction;
0147 std::map<G4String,G4String> *fKnownMaterials;
0148 static const G4int fMaxZ =99;
0149 static G4PhysicsFreeVector* fLogAtomicCrossSection[fMaxZ+1];
0150 static G4PhysicsFreeVector* fAtomicFormFactor[fMaxZ+1];
0151
0152
0153 G4double fIntrinsicLowEnergyLimit;
0154 G4double fIntrinsicHighEnergyLimit;
0155 G4double fDTheta = {0.0001};
0156
0157 static const G4int fNtheta = 31415;
0158 G4int fVerboseLevel;
0159 G4bool fIsInitialised;
0160
0161 G4bool fLocalTable;
0162 G4bool fIsMIActive;
0163 };
0164
0165
0166
0167 #endif
0168