File indexing completed on 2025-01-18 09:58:42
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 #ifndef G4mplIonisationWithDeltaModel_h
0049 #define G4mplIonisationWithDeltaModel_h 1
0050
0051 #include "G4VEmModel.hh"
0052 #include "G4VEmFluctuationModel.hh"
0053 #include <vector>
0054
0055 class G4ParticleChangeForLoss;
0056
0057 class G4mplIonisationWithDeltaModel : public G4VEmModel, public G4VEmFluctuationModel
0058 {
0059
0060 public:
0061
0062 explicit G4mplIonisationWithDeltaModel(G4double mCharge,
0063 const G4String& nam = "mplIonisationWithDelta");
0064
0065 virtual ~G4mplIonisationWithDeltaModel();
0066
0067 virtual void Initialise(const G4ParticleDefinition*,
0068 const G4DataVector&) override;
0069
0070 virtual G4double ComputeDEDXPerVolume(const G4Material*,
0071 const G4ParticleDefinition*,
0072 G4double kineticEnergy,
0073 G4double cutEnergy) override;
0074
0075 virtual G4double ComputeCrossSectionPerElectron(
0076 const G4ParticleDefinition*,
0077 G4double kineticEnergy,
0078 G4double cutEnergy,
0079 G4double maxEnergy);
0080
0081 virtual G4double ComputeCrossSectionPerAtom(
0082 const G4ParticleDefinition*,
0083 G4double kineticEnergy,
0084 G4double Z, G4double A,
0085 G4double cutEnergy,
0086 G4double maxEnergy) override;
0087
0088 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
0089 const G4MaterialCutsCouple*,
0090 const G4DynamicParticle*,
0091 G4double tmin,
0092 G4double maxEnergy) override;
0093
0094
0095 virtual G4double SampleFluctuations(const G4MaterialCutsCouple*,
0096 const G4DynamicParticle*,
0097 const G4double tcut,
0098 const G4double tmax,
0099 const G4double length,
0100 const G4double meanLoss) override;
0101
0102 virtual G4double Dispersion(const G4Material*,
0103 const G4DynamicParticle*,
0104 const G4double tcut,
0105 const G4double tmax,
0106 const G4double length) override;
0107
0108 virtual G4double MinEnergyCut(const G4ParticleDefinition*,
0109 const G4MaterialCutsCouple* couple) override;
0110
0111 void SetParticle(const G4ParticleDefinition* p);
0112
0113 protected:
0114
0115 virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
0116 G4double kinEnergy) override;
0117
0118 private:
0119
0120 G4double ComputeDEDXAhlen(const G4Material* material, G4double bg2,
0121 G4double cut);
0122
0123
0124 G4mplIonisationWithDeltaModel &
0125 operator=(const G4mplIonisationWithDeltaModel &right) = delete;
0126 G4mplIonisationWithDeltaModel(const G4mplIonisationWithDeltaModel&) = delete;
0127
0128 const G4ParticleDefinition* monopole;
0129 G4ParticleDefinition* theElectron;
0130 G4ParticleChangeForLoss* fParticleChange;
0131
0132 G4double mass;
0133 G4double magCharge;
0134 G4double twoln10;
0135 G4double betalow;
0136 G4double betalim;
0137 G4double beta2lim;
0138 G4double bg2lim;
0139 G4double chargeSquare;
0140 G4double dedxlim;
0141 G4int nmpl;
0142 G4double pi_hbarc2_over_mc2;
0143
0144 static std::vector<G4double>* dedx0;
0145 };
0146
0147 #endif
0148
0149