ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4MuPairProductionModel.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4MuPairProductionModel.hh
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 // -------------------------------------------------------------------
28 //
29 // GEANT4 Class header file
30 //
31 //
32 // File name: G4MuPairProductionModel
33 //
34 // Author: Vladimir Ivanchenko on base of Laszlo Urban code
35 //
36 // Creation date: 18.05.2002
37 //
38 // Modifications:
39 //
40 // 23-12-02 Change interface in order to move to cut per region (V.Ivanchenko)
41 // 27-01-03 Make models region aware (V.Ivanchenko)
42 // 13-02-03 Add name (V.Ivanchenko)
43 // 10-02-04 Update parameterisation using R.Kokoulin model (V.Ivanchenko)
44 // 10-02-04 Add lowestKinEnergy (V.Ivanchenko)
45 // 13-02-06 Add ComputeCrossSectionPerAtom (mma)
46 // 12-05-06 Add parameter to SelectRandomAtom (A.Bogdanov)
47 // 11-10-07 Add ignoreCut flag (V.Ivanchenko)
48 // 28-02-08 Reorganized protected methods and members (V.Ivanchenko)
49 
50 //
51 // Class Description:
52 //
53 // Implementation of e+e- pair production by muons
54 //
55 
56 // -------------------------------------------------------------------
57 //
58 
59 #ifndef G4MuPairProductionModel_h
60 #define G4MuPairProductionModel_h 1
61 
62 #include "G4VEmModel.hh"
63 #include "G4NistManager.hh"
64 #include "G4ElementData.hh"
65 #include "G4Physics2DVector.hh"
66 #include <vector>
67 
68 class G4Element;
71 
73 {
74 public:
75 
76  explicit G4MuPairProductionModel(const G4ParticleDefinition* p = nullptr,
77  const G4String& nam = "muPairProd");
78 
79  virtual ~G4MuPairProductionModel();
80 
81  virtual void Initialise(const G4ParticleDefinition*,
82  const G4DataVector&) override;
83 
84  virtual void InitialiseLocal(const G4ParticleDefinition*,
85  G4VEmModel* masterModel) override;
86 
88  const G4ParticleDefinition*,
89  G4double kineticEnergy,
91  G4double cutEnergy,
92  G4double maxEnergy) override;
93 
95  const G4ParticleDefinition*,
96  G4double kineticEnergy,
97  G4double cutEnergy) override;
98 
99  virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
100  const G4MaterialCutsCouple*,
101  const G4DynamicParticle*,
102  G4double tmin,
103  G4double maxEnergy) override;
104 
105  virtual G4double MinPrimaryEnergy(const G4Material*,
106  const G4ParticleDefinition*,
107  G4double) override;
108 
109  inline void SetLowestKineticEnergy(G4double e);
110 
111  inline void SetParticle(const G4ParticleDefinition*);
112 
113  // hide assignment operator and copy constructor
114  G4MuPairProductionModel & operator=
115  (const G4MuPairProductionModel &right) = delete;
117 
118 protected:
119 
121  G4double tmax);
122 
124  G4double Z,
125  G4double cut);
126 
127  virtual G4double
129  G4double pairEnergy);
130 
131  inline G4double MaxSecondaryEnergyForElement(G4double kineticEnergy,
132  G4double Z);
133 
134 private:
135 
136  void MakeSamplingTables();
137 
138  void StoreTables() const;
139 
141 
142  void DataCorrupted(G4int Z, G4double logTkin) const;
143 
144  inline G4double FindScaledEnergy(G4int Z, G4double rand, G4double logTkin,
145  G4double yymin, G4double yymax);
146 
147 protected:
148 
151 
159 
160  static const G4double xgi[8],wgi[8];
161 
165 
168 
170 
171  // gamma energy bins
173  size_t nbiny;
174  size_t nbine;
179 
181 };
182 
183 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
184 
186 {
187  lowestKinEnergy = e;
188 }
189 
190 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
191 
192 inline
194 {
195  if(!particle) {
196  particle = p;
198  }
199 }
200 
201 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
202 
203 inline G4double
205  G4double ZZ)
206 {
207  G4int Z = G4lrint(ZZ);
208  if(Z != currentZ) {
209  currentZ = Z;
210  z13 = nist->GetZ13(Z);
211  z23 = z13*z13;
212  lnZ = nist->GetLOGZ(Z);
213  }
214  return kineticEnergy + particleMass*(1.0 - 0.75*sqrte*z13);
215 }
216 
217 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
218 
219 inline G4double
221  G4double logTkin,
222  G4double yymin, G4double yymax)
223 {
224  G4double res = yymin;
226  if(!pv) {
227  DataCorrupted(Z, logTkin);
228  } else {
229  G4double pmin = pv->Value(yymin, logTkin);
230  G4double pmax = pv->Value(yymax, logTkin);
231  G4double p0 = pv->Value(0.0, logTkin);
232  if(p0 <= 0.0) { DataCorrupted(Z, logTkin); }
233  else { res = pv->FindLinearX((pmin + rand*(pmax - pmin))/p0, logTkin); }
234  }
235  return res;
236 }
237 
238 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
239 
240 #endif