CMS 3D CMS Logo

CMSmplIonisationWithDeltaModel.h
Go to the documentation of this file.
1 //
2 // -------------------------------------------------------------------
3 //
4 // GEANT4 Class header file
5 //
6 //
7 // File name: CMSmplIonisationWithDeltaModel
8 //
9 // Author: Vladimir Ivanchenko copied from Geant4 10.5p01
10 //
11 // Creation date: 02.03.2019
12 //
13 // Class Description:
14 //
15 // Implementation of model of energy loss of the magnetic monopole
16 
17 // -------------------------------------------------------------------
18 //
19 
20 #ifndef CMSmplIonisationWithDeltaModel_h
21 #define CMSmplIonisationWithDeltaModel_h 1
22 
23 #include "G4VEmModel.hh"
24 #include "G4VEmFluctuationModel.hh"
25 #include <vector>
26 
27 class G4ParticleChangeForLoss;
28 
29 class CMSmplIonisationWithDeltaModel : public G4VEmModel, public G4VEmFluctuationModel {
30 public:
31  explicit CMSmplIonisationWithDeltaModel(G4double mCharge, const G4String& nam = "mplIonisationWithDelta");
32 
34 
35  void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
36 
37  G4double ComputeDEDXPerVolume(const G4Material*,
38  const G4ParticleDefinition*,
39  G4double kineticEnergy,
40  G4double cutEnergy) override;
41 
42  virtual G4double ComputeCrossSectionPerElectron(const G4ParticleDefinition*,
43  G4double kineticEnergy,
44  G4double cutEnergy,
45  G4double maxEnergy);
46 
47  G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
48  G4double kineticEnergy,
49  G4double Z,
50  G4double A,
51  G4double cutEnergy,
52  G4double maxEnergy) override;
53 
54  void SampleSecondaries(std::vector<G4DynamicParticle*>*,
55  const G4MaterialCutsCouple*,
56  const G4DynamicParticle*,
57  G4double tmin,
58  G4double maxEnergy) override;
59 
60  G4double SampleFluctuations(const G4MaterialCutsCouple*,
61  const G4DynamicParticle*,
62  G4double tmax,
63  G4double length,
64  G4double meanLoss) override;
65 
66  G4double Dispersion(const G4Material*, const G4DynamicParticle*, G4double tmax, G4double length) override;
67 
68  G4double MinEnergyCut(const G4ParticleDefinition*, const G4MaterialCutsCouple* couple) override;
69 
70  void SetParticle(const G4ParticleDefinition* p);
71 
72 protected:
73  G4double MaxSecondaryEnergy(const G4ParticleDefinition*, G4double kinEnergy) override;
74 
75 private:
76  G4double ComputeDEDXAhlen(const G4Material* material, G4double bg2, G4double cut);
77 
78  const G4ParticleDefinition* monopole;
79  G4ParticleDefinition* theElectron;
80  G4ParticleChangeForLoss* fParticleChange;
81 
82  G4double mass;
83  G4double magCharge;
84  G4double twoln10;
85  G4double betalow;
86  G4double betalim;
87  G4double beta2lim;
88  G4double bg2lim;
89  G4double chargeSquare;
90  G4double dedxlim;
91  G4int nmpl;
93 
94  static std::vector<G4double>* dedx0;
95 };
96 
97 #endif
98 
99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
virtual G4double ComputeCrossSectionPerElectron(const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
G4double ComputeDEDXAhlen(const G4Material *material, G4double bg2, G4double cut)
CMSmplIonisationWithDeltaModel(G4double mCharge, const G4String &nam="mplIonisationWithDelta")
static std::vector< G4double > * dedx0
G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy) override
void SetParticle(const G4ParticleDefinition *p)
G4double SampleFluctuations(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmax, G4double length, G4double meanLoss) override
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
static const double tmax[3]
G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double kinEnergy) override
G4double Dispersion(const G4Material *, const G4DynamicParticle *, G4double tmax, G4double length) override
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy) override
G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *couple) override
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override