Belle II Software  release-05-01-25
G4mplIonisation.cc
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 #include <simulation/monopoles/G4mplIonisation.h>
14 #include <simulation/monopoles/G4mplIonisationWithDeltaModel.h>
15 
16 
17 #include <CLHEP/Units/PhysicalConstants.h>
18 #include <CLHEP/Units/SystemOfUnits.h>
19 #include <G4Electron.hh>
20 #include <G4EmParameters.hh>
21 
22 using namespace std;
23 using namespace Belle2;
24 using namespace Belle2::Monopoles;
25 using namespace CLHEP;
26 
27 G4mplIonisation::G4mplIonisation(G4double mCharge, const G4String& name)
28  : G4VEnergyLossProcess(name),
29  magneticCharge(mCharge),
30  isInitialised(false)
31 {
32  // By default 1e magnetic charge is used
33  if (magneticCharge == 0.0) { magneticCharge = 1.0 * eplus; }
34 
35  SetVerboseLevel(0);
36  SetProcessSubType(fIonisation);
37  SetStepFunction(0.2, 1 * mm);
38  SetSecondaryParticle(G4Electron::Electron());
39 }
40 
42 {}
43 
44 G4bool G4mplIonisation::IsApplicable(const G4ParticleDefinition&)
45 {
46  return true;
47 }
48 
49 G4double G4mplIonisation::MinPrimaryEnergy(const G4ParticleDefinition* mpl,
50  const G4Material*,
51  G4double cut)
52 {
53  G4double x = 0.5 * cut / electron_mass_c2;
54  G4double mass = mpl->GetPDGMass();
55  G4double ratio = electron_mass_c2 / mass;
56  G4double gam = x * ratio + std::sqrt((1. + x) * (1. + x * ratio * ratio));
57  return mass * (gam - 1.0);
58 }
59 
60 void G4mplIonisation::InitialiseEnergyLossProcess(const G4ParticleDefinition* p,
61  const G4ParticleDefinition*)
62 {
63  if (isInitialised) { return; }
64 
65  SetBaseParticle(0);
66 
67  // monopole model is responsible both for energy loss and fluctuations
68 
71 
72  ion->SetParticle(p);
73 
74  // define size of dedx and range tables
75  G4EmParameters* param = G4EmParameters::Instance();
76  G4double emin = std::min(param->MinKinEnergy(), ion->LowEnergyLimit());
77  G4double emax = std::max(param->MaxKinEnergy(), ion->HighEnergyLimit());
78  G4int bin = G4lrint(param->NumberOfBinsPerDecade() * std::log10(emax / emin));
79  ion->SetLowEnergyLimit(emin);
80  ion->SetHighEnergyLimit(emax);
81  SetMinKinEnergy(emin);
82  SetMaxKinEnergy(emax);
83  SetDEDXBinning(bin);
84 
85  SetEmModel(ion);
86  AddEmModel(1, ion, ion);
87 
88  isInitialised = true;
89 }
90 
92 {}
Belle2::Monopoles::G4mplIonisation::InitialiseEnergyLossProcess
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition *p, const G4ParticleDefinition *) override
G4VEnergyLossProcess::InitialiseEnergyLossProcess() implementation.
Definition: G4mplIonisation.cc:60
Belle2::Monopoles::G4mplIonisationWithDeltaModel
Concrete monopole ionisation model.
Definition: G4mplIonisationWithDeltaModel.h:36
Belle2::Monopoles::G4mplIonisation::magneticCharge
G4double magneticCharge
Monopole charge, in e+ units.
Definition: G4mplIonisation.h:93
Belle2::Monopoles::G4mplIonisation::PrintInfo
virtual void PrintInfo() override
Print out of the class parameters.
Definition: G4mplIonisation.cc:91
Belle2::Monopoles::G4mplIonisationWithDeltaModel::SetParticle
void SetParticle(const G4ParticleDefinition *p)
Read definition of the monopole.
Definition: G4mplIonisationWithDeltaModel.cc:73
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Monopoles::G4mplIonisation::isInitialised
G4bool isInitialised
Is the process initialised.
Definition: G4mplIonisation.h:94
Belle2::Monopoles::G4mplIonisation::~G4mplIonisation
virtual ~G4mplIonisation()
Destructor.
Definition: G4mplIonisation.cc:41
Belle2::Monopoles::G4mplIonisation::MinPrimaryEnergy
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition *p, const G4Material *, G4double cut) final
Threshold for zero value.
Definition: G4mplIonisation.cc:49
Belle2::Monopoles::G4mplIonisation::IsApplicable
virtual G4bool IsApplicable(const G4ParticleDefinition &p) override
Dummy to check if the proccess is is applicable to a certain particle.
Definition: G4mplIonisation.cc:44