File indexing completed on 2025-01-18 09:58:54
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 #ifndef G4PENELOPEIONISATIONMODEL_HH
0046 #define G4PENELOPEIONISATIONMODEL_HH 1
0047
0048 #include "globals.hh"
0049 #include "G4VEmModel.hh"
0050 #include "G4DataVector.hh"
0051 #include "G4ParticleChangeForLoss.hh"
0052 #include "G4VAtomDeexcitation.hh"
0053
0054 class G4PhysicsFreeVector;
0055 class G4PhysicsLogVector;
0056 class G4ParticleDefinition;
0057 class G4DynamicParticle;
0058 class G4MaterialCutsCouple;
0059 class G4Material;
0060 class G4PenelopeOscillatorManager;
0061 class G4PenelopeOscillator;
0062 class G4PenelopeCrossSection;
0063 class G4PenelopeIonisationXSHandler;
0064
0065 class G4PenelopeIonisationModel : public G4VEmModel
0066 {
0067 public:
0068 explicit G4PenelopeIonisationModel(const G4ParticleDefinition* p=nullptr,
0069 const G4String& processName ="PenIoni");
0070 virtual ~G4PenelopeIonisationModel();
0071
0072 void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
0073 void InitialiseLocal(const G4ParticleDefinition*,
0074 G4VEmModel*) override;
0075
0076
0077
0078
0079 G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
0080 G4double,
0081 G4double,
0082 G4double,
0083 G4double,
0084 G4double) override;
0085
0086 G4double CrossSectionPerVolume(const G4Material* material,
0087 const G4ParticleDefinition*
0088 theParticle,
0089 G4double kineticEnergy,
0090 G4double cutEnergy,
0091 G4double maxEnergy = DBL_MAX) override;
0092
0093 void SampleSecondaries(std::vector<G4DynamicParticle*>*,
0094 const G4MaterialCutsCouple*,
0095 const G4DynamicParticle*,
0096 G4double tmin,
0097 G4double maxEnergy) override;
0098
0099 G4double ComputeDEDXPerVolume(const G4Material*,
0100 const G4ParticleDefinition*,
0101 G4double kineticEnergy,
0102 G4double cutEnergy) override;
0103
0104
0105 G4double MinEnergyCut(const G4ParticleDefinition*,
0106 const G4MaterialCutsCouple*) override;
0107
0108 void SetVerbosityLevel(G4int lev){fVerboseLevel = lev;};
0109 G4int GetVerbosityLevel(){return fVerboseLevel;};
0110
0111 G4PenelopeIonisationModel & operator=(const G4PenelopeIonisationModel &right) = delete;
0112 G4PenelopeIonisationModel(const G4PenelopeIonisationModel&) = delete;
0113
0114 protected:
0115 G4ParticleChangeForLoss* fParticleChange;
0116 const G4ParticleDefinition* fParticle;
0117
0118 private:
0119 void SetParticle(const G4ParticleDefinition*);
0120 void SampleFinalStateElectron(const G4Material*,
0121 G4double cutEnergy,
0122 G4double kineticEnergy);
0123 void SampleFinalStatePositron(const G4Material*,
0124 G4double cutEnergy,
0125 G4double kineticEnergy);
0126
0127 G4PenelopeOscillatorManager* fOscManager;
0128 G4PenelopeIonisationXSHandler* fCrossSectionHandler;
0129 G4VAtomDeexcitation* fAtomDeexcitation;
0130
0131 G4double fKineticEnergy1;
0132 G4double fCosThetaPrimary;
0133 G4double fEnergySecondary;
0134 G4double fCosThetaSecondary;
0135
0136
0137 G4double fIntrinsicLowEnergyLimit;
0138 G4double fIntrinsicHighEnergyLimit;
0139
0140 G4int fVerboseLevel;
0141 G4int fTargetOscillator;
0142 size_t fNBins;
0143 G4bool fIsInitialised;
0144 G4bool fPIXEflag;
0145
0146 G4bool fLocalTable;
0147 };
0148
0149 #endif
0150