Belle II Software  release-05-01-25
G4mplIonisationWithDeltaModel.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Dmitrii Neverov *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 // modified from GEANT4 exoticphysics/monopole/*
12 
13 #pragma once
14 
15 #include <G4VEmModel.hh>
16 #include <G4VEmFluctuationModel.hh>
17 #include <vector>
18 
19 class G4ParticleChangeForLoss;
20 
21 namespace Belle2 {
27  namespace Monopoles {
28 
36  class G4mplIonisationWithDeltaModel : public G4VEmModel, public G4VEmFluctuationModel {
37 
38  public:
39 
46  explicit G4mplIonisationWithDeltaModel(G4double mCharge,
47  const G4String& nam = "mplIonisationWithDelta");
48 
53 
59  virtual void Initialise(const G4ParticleDefinition* p,
60  const G4DataVector&) override;
61 
74  virtual G4double ComputeDEDXPerVolume(const G4Material* material,
75  const G4ParticleDefinition* p,
76  G4double kineticEnergy,
77  G4double maxEnergy) override;
78 
88  virtual G4double ComputeCrossSectionPerElectron(
89  const G4ParticleDefinition* p,
90  G4double kineticEnergy,
91  G4double cutEnergy,
92  G4double maxEnergy);
93 
105  virtual G4double ComputeCrossSectionPerAtom(
106  const G4ParticleDefinition* p,
107  G4double kineticEnergy,
108  G4double Z, G4double A,
109  G4double cutEnergy,
110  G4double maxEnergy) override;
111 
121  virtual void SampleSecondaries(std::vector<G4DynamicParticle*>* vdp,
122  const G4MaterialCutsCouple* materialCutsCouple,
123  const G4DynamicParticle* dp,
124  G4double tmin,
125  G4double maxEnergy) override;
126 
127 
138  virtual G4double SampleFluctuations(const G4MaterialCutsCouple* couple,
139  const G4DynamicParticle* dp,
140  G4double tmax,
141  G4double length,
142  G4double meanLoss) override;
143 
153  virtual G4double Dispersion(const G4Material* material,
154  const G4DynamicParticle*,
155  G4double tmax,
156  G4double length) override;
157 
161  virtual G4double MinEnergyCut(const G4ParticleDefinition*,
162  const G4MaterialCutsCouple* couple) override;
163 
164  void SetParticle(const G4ParticleDefinition* p);
166  protected:
167 
175  virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition* p,
176  G4double kinEnergy) override;
177 
178  private:
179 
194  G4double ComputeDEDXAhlen(const G4Material* material, G4double bg2, G4double cut);
195 
202  operator=(const G4mplIonisationWithDeltaModel& right) = delete;
209 
210  const G4ParticleDefinition* monopole;
211  G4ParticleDefinition* theElectron;
212  G4ParticleChangeForLoss* fParticleChange;
214  G4double mass;
215  G4double magCharge;
216  //FIXME following is lazy programming
217  G4double twoln10;
218  G4double betalow;
219  G4double betalim;
220  G4double beta2lim;
221  G4double bg2lim;
222  G4double chargeSquare;
223  G4double dedxlim;
225  G4double nmpl;
227  static std::vector<G4double>* dedx0;
228  };
229 
230  } //end Monopoles namespace
231 
233 } //end Belle2 namespace
Belle2::Monopoles::G4mplIonisationWithDeltaModel::MinEnergyCut
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *couple) override
Threshold for zero value.
Definition: G4mplIonisationWithDeltaModel.cc:114
Belle2::Monopoles::G4mplIonisationWithDeltaModel
Concrete monopole ionisation model.
Definition: G4mplIonisationWithDeltaModel.h:36
Belle2::Monopoles::G4mplIonisationWithDeltaModel::betalim
G4double betalim
Beta threshold for high energy (only Ahlen formula)
Definition: G4mplIonisationWithDeltaModel.h:219
Belle2::Monopoles::G4mplIonisationWithDeltaModel::beta2lim
G4double beta2lim
Square of betalim.
Definition: G4mplIonisationWithDeltaModel.h:220
Belle2::Monopoles::G4mplIonisationWithDeltaModel::operator=
G4mplIonisationWithDeltaModel & operator=(const G4mplIonisationWithDeltaModel &right)=delete
Assignment operator should be hidden.
Belle2::Monopoles::G4mplIonisationWithDeltaModel::ComputeDEDXAhlen
G4double ComputeDEDXAhlen(const G4Material *material, G4double bg2, G4double cut)
Caculate dedx based on extrapolated Ahlen formula.
Definition: G4mplIonisationWithDeltaModel.cc:163
Belle2::Monopoles::G4mplIonisationWithDeltaModel::SetParticle
void SetParticle(const G4ParticleDefinition *p)
Read definition of the monopole.
Definition: G4mplIonisationWithDeltaModel.cc:73
Belle2::Monopoles::G4mplIonisationWithDeltaModel::ComputeDEDXPerVolume
virtual G4double ComputeDEDXPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double kineticEnergy, G4double maxEnergy) override
G4VEmModel::ComputeDEDXPerVolume implementation.
Definition: G4mplIonisationWithDeltaModel.cc:121
Belle2::Monopoles::G4mplIonisationWithDeltaModel::magCharge
G4double magCharge
Monopole magnetic charge in e+ units.
Definition: G4mplIonisationWithDeltaModel.h:215
Belle2::Monopoles::G4mplIonisationWithDeltaModel::ComputeCrossSectionPerAtom
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *p, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy) override
Compute cross section per atom for delta electrons emission.
Definition: G4mplIonisationWithDeltaModel.cc:216
Belle2::Monopoles::G4mplIonisationWithDeltaModel::SampleFluctuations
virtual G4double SampleFluctuations(const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double tmax, G4double length, G4double meanLoss) override
Create fluctuations in the energies lost to a secondary delta electron.
Definition: G4mplIonisationWithDeltaModel.cc:281
Belle2::Monopoles::G4mplIonisationWithDeltaModel::dedxlim
G4double dedxlim
dedx limit in asymptotic formula, not used
Definition: G4mplIonisationWithDeltaModel.h:223
Belle2::Monopoles::G4mplIonisationWithDeltaModel::ComputeCrossSectionPerElectron
virtual G4double ComputeCrossSectionPerElectron(const G4ParticleDefinition *p, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
Compute cross section per electron for delta electrons emission.
Definition: G4mplIonisationWithDeltaModel.cc:198
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Monopoles::G4mplIonisationWithDeltaModel::Initialise
virtual void Initialise(const G4ParticleDefinition *p, const G4DataVector &) override
G4VEmModel::Initialise implementation.
Definition: G4mplIonisationWithDeltaModel.cc:86
Belle2::Monopoles::G4mplIonisationWithDeltaModel::dedx0
static std::vector< G4double > * dedx0
Base dedx for each couple in current material.
Definition: G4mplIonisationWithDeltaModel.h:227
Belle2::Monopoles::G4mplIonisationWithDeltaModel::mass
G4double mass
Mass of the monopole.
Definition: G4mplIonisationWithDeltaModel.h:214
Belle2::Monopoles::G4mplIonisationWithDeltaModel::twoln10
G4double twoln10
log(100.0)
Definition: G4mplIonisationWithDeltaModel.h:217
Belle2::Monopoles::G4mplIonisationWithDeltaModel::SampleSecondaries
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *vdp, const G4MaterialCutsCouple *materialCutsCouple, const G4DynamicParticle *dp, G4double tmin, G4double maxEnergy) override
Create the sample of secondary delta electrons.
Definition: G4mplIonisationWithDeltaModel.cc:229
Belle2::Monopoles::G4mplIonisationWithDeltaModel::fParticleChange
G4ParticleChangeForLoss * fParticleChange
Pointer to ionising particle.
Definition: G4mplIonisationWithDeltaModel.h:212
Belle2::Monopoles::G4mplIonisationWithDeltaModel::theElectron
G4ParticleDefinition * theElectron
Electron definition.
Definition: G4mplIonisationWithDeltaModel.h:211
Belle2::Monopoles::G4mplIonisationWithDeltaModel::bg2lim
G4double bg2lim
(beta*gamma)^2 for betalim
Definition: G4mplIonisationWithDeltaModel.h:221
Belle2::Monopoles::G4mplIonisationWithDeltaModel::nmpl
G4double nmpl
Magn.
Definition: G4mplIonisationWithDeltaModel.h:225
Belle2::Monopoles::G4mplIonisationWithDeltaModel::Dispersion
virtual G4double Dispersion(const G4Material *material, const G4DynamicParticle *, G4double tmax, G4double length) override
Calculate dispersion.
Definition: G4mplIonisationWithDeltaModel.cc:310
Belle2::Monopoles::G4mplIonisationWithDeltaModel::G4mplIonisationWithDeltaModel
G4mplIonisationWithDeltaModel(G4double mCharge, const G4String &nam="mplIonisationWithDelta")
Constructor.
Definition: G4mplIonisationWithDeltaModel.cc:43
Belle2::Monopoles::G4mplIonisationWithDeltaModel::MaxSecondaryEnergy
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition *p, G4double kinEnergy) override
Calculate maximum energy available for secondary particle emission.
Definition: G4mplIonisationWithDeltaModel.cc:328
Belle2::Monopoles::G4mplIonisationWithDeltaModel::betalow
G4double betalow
Beta threshold for low asymptotic.
Definition: G4mplIonisationWithDeltaModel.h:218
Belle2::Monopoles::G4mplIonisationWithDeltaModel::~G4mplIonisationWithDeltaModel
virtual ~G4mplIonisationWithDeltaModel()
Destructor.
Definition: G4mplIonisationWithDeltaModel.cc:68
Belle2::Monopoles::G4mplIonisationWithDeltaModel::chargeSquare
G4double chargeSquare
Square of magnetic charge in units of Dirac charge.
Definition: G4mplIonisationWithDeltaModel.h:222
Belle2::Monopoles::G4mplIonisationWithDeltaModel::pi_hbarc2_over_mc2
G4double pi_hbarc2_over_mc2
Convenient constants combination with mass.
Definition: G4mplIonisationWithDeltaModel.h:224
Belle2::Monopoles::G4mplIonisationWithDeltaModel::monopole
const G4ParticleDefinition * monopole
Monopole definition.
Definition: G4mplIonisationWithDeltaModel.h:210