Warning, file /include/Geant4/G4DNAIonElasticModel.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 #ifndef G4DNAIonElasticModel_h
0034 #define G4DNAIonElasticModel_h 1
0035
0036 #include <map>
0037 #include "G4DNACrossSectionDataSet.hh"
0038 #include "G4VEmModel.hh"
0039 #include "G4Proton.hh"
0040 #include "G4DNAGenericIonsManager.hh"
0041 #include "G4ParticleChangeForGamma.hh"
0042 #include "G4LogLogInterpolation.hh"
0043 #include "G4ProductionCutsTable.hh"
0044 #include "G4NistManager.hh"
0045
0046 class G4DNAIonElasticModel : public G4VEmModel
0047 {
0048
0049 public:
0050
0051 G4DNAIonElasticModel (const G4ParticleDefinition* p = nullptr,
0052 const G4String& nam ="DNAIonElasticModel");
0053
0054
0055 ~G4DNAIonElasticModel () override;
0056
0057 G4DNAIonElasticModel &
0058 operator= (const G4DNAIonElasticModel &right) = delete;
0059 G4DNAIonElasticModel (const G4DNAIonElasticModel&) = delete;
0060
0061 void
0062 Initialise (const G4ParticleDefinition* particuleDefinition,
0063 const G4DataVector&) override;
0064
0065 G4double
0066 CrossSectionPerVolume (const G4Material* material,
0067 const G4ParticleDefinition* p, G4double ekin,
0068 G4double emin, G4double emax) override;
0069
0070 void
0071 SampleSecondaries (std::vector<G4DynamicParticle*>*,
0072 const G4MaterialCutsCouple*, const G4DynamicParticle*,
0073 G4double tmin, G4double maxEnergy) override;
0074
0075 void
0076 SetKillBelowThreshold (G4double threshold);
0077
0078 G4double
0079 GetKillBelowThreshold ()
0080 {
0081 return killBelowEnergy;
0082 }
0083
0084 inline void SelectStationary(G4bool input);
0085
0086 protected:
0087
0088 G4ParticleChangeForGamma* fParticleChangeForGamma;
0089
0090 private:
0091
0092 G4bool statCode;
0093
0094
0095 const std::vector<G4double>* fpMolWaterDensity;
0096
0097 G4double killBelowEnergy;
0098 G4double lowEnergyLimit;
0099 G4double highEnergyLimit;
0100 G4bool isInitialised{false};
0101 G4int verboseLevel;
0102
0103 G4double fParticle_Mass;
0104
0105
0106 G4DNACrossSectionDataSet* fpTableData;
0107
0108
0109
0110 G4double
0111 Theta (G4ParticleDefinition * aParticleDefinition, G4double k,
0112 G4double integrDiff);
0113
0114 G4double
0115 LinLogInterpolate (G4double e1, G4double e2, G4double e, G4double xs1,
0116 G4double xs2);
0117
0118 G4double
0119 LogLogInterpolate (G4double e1, G4double e2, G4double e, G4double xs1,
0120 G4double xs2);
0121
0122 G4double
0123 QuadInterpolator (G4double e11, G4double e12, G4double e21, G4double e22,
0124 G4double x11, G4double x12, G4double x21, G4double x22,
0125 G4double t1, G4double t2, G4double t, G4double e);
0126
0127 G4double
0128 LinLinInterpolate (G4double e1, G4double e2, G4double e, G4double xs1,
0129 G4double xs2);
0130
0131 using TriDimensionMap = std::map<G4double, std::map<G4double, G4double>>;
0132 TriDimensionMap fDiffCrossSectionData;
0133
0134 std::vector<G4double> eTdummyVec;
0135
0136 using VecMap = std::map<G4double, std::vector<G4double>>;
0137 VecMap eVecm;
0138
0139 G4double
0140 RandomizeThetaCM (G4double k, G4ParticleDefinition * aParticleDefinition);
0141
0142 };
0143
0144
0145
0146 inline void G4DNAIonElasticModel::SelectStationary (G4bool input)
0147 {
0148 statCode = input;
0149 }
0150
0151 #endif
0152