Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4QTauNuclearCrossSection.hh
Go to the documentation of this file.
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// $Id$
28//
29//
30// GEANT4 physics class: G4QTauNuclearCrossSection -- header file
31// M.V. Kossov, CERN-ITEP(Moscow), 4-FEB-2004
32// The last update: M.V. Kossov, CERN/ITEP (Moscow) 4-Feb-04
33//
34// Short description: this G4 singletone class calculates tau-lepton-nuclear cross section
35// for the particular isotope (GetCrossSection member function)
36// ****************************************************************************************
37// ********* This HEADER is temporary moved from the photolepton_hadron directory *********
38// ******* DO NOT MAKE ANY CHANGE! With time it'll move back to photolepton...(M.K.) ******
39// ****************************************************************************************
40// Short description: reaction cross-sections for tau-nuclear reactions, which
41// are integrals over virtual equivalent photons photons. The tau-nuclear
42// reactions do not exist in GHAD, so by the present physics lists it is not
43// simulated at all.
44// --------------------------------------------------------------------------------
45
46#ifndef G4QTauNuclearCrossSection_h
47#define G4QTauNuclearCrossSection_h 1
48
49#include "G4ParticleTable.hh"
50#include "G4NucleiProperties.hh"
51#include <vector>
52#include "Randomize.hh"
53#include "G4MuonPlus.hh"
54#include "G4MuonMinus.hh"
55#include "G4VQCrossSection.hh"
56
58{
59protected:
60
62
63public:
64
66
67 static G4VQCrossSection* GetPointer(); // Gives a pointer to this singletone
68
70
71 // At present momentum (pMom) must be in GeV (@@ Units)
72 virtual G4double GetCrossSection(G4bool fCS, G4double pMom, G4int tgZ, G4int tgN,
73 G4int pPDG=0);
74
76 G4double Momentum);
77
79
81
83
85
86private:
87 G4int GetFunctions(G4double a, G4double* x, G4double* y, G4double* z);
88 G4double HighEnergyJ1(G4double lE);
89 G4double HighEnergyJ2(G4double lE);
90 G4double HighEnergyJ3(G4double lE);
91 G4double SolveTheEquation(G4double f);
92 G4double Fun(G4double x);
93 G4double DFun(G4double x);
94
95// Body
96private:
97 static G4bool onlyCS; // flag to calculate only CS
98 static G4double lastSig; // Last calculated cross section
99 static G4int lastL; // Last used in the cross section TheLastBin
100 static G4double lastE; // Last used in the cross section Energy
101 static G4int lastF; // Last used in the cross section TheFirstBin
102 static G4double lastG; // Last value of gamma=lnE-ln(m)
103 static G4double lastH; // Last value of the High energy A-dependence
104 static G4double* lastJ1; // Pointer to the last array of the J1 function
105 static G4double* lastJ2; // Pointer to the last array of the J2 function
106 static G4double* lastJ3; // Pointer to the last array of the J3 function
107 static G4int lastPDG; // The last projectile PDG
108 static G4int lastN; // The last N of calculated nucleus
109 static G4int lastZ; // The last Z of calculated nucleus
110 static G4double lastP; // Last used in the cross section Momentum
111 static G4double lastTH; // Last value of the Momentum Threshold
112 static G4double lastCS; // Last value of the Cross Section
113 static G4int lastI; // The last position in the DAMDB
114 static std::vector <G4double*>* J1; // Vector of pointers to the J1 tabulated functions
115 static std::vector <G4double*>* J2; // Vector of pointers to the J2 tabulated functions
116 static std::vector <G4double*>* J3; // Vector of pointers to the J3 tabulated functions
117};
118
119inline G4double G4QTauNuclearCrossSection::DFun(G4double x)// Parametrization of PhotNucCS
120{
121 static const G4double shd=1.0734; // HE PomShadowing(D)
122 static const G4double poc=0.0375; // HE Pomeron coefficient
123 static const G4double pos=16.5; // HE Pomeron shift
124 static const G4double reg=.11; // HE Reggeon slope
125 static const G4double mtu=1777.; // Mass of a muon in MeV
126 static const G4double lmtu=std::log(mtu); // Log of a muon mass
127 G4double y=std::exp(x-lastG-lmtu); // y for the x
128 G4double flux=lastG*(2.-y*(2.-y))-1.; // flux factor
129 return (poc*(x-pos)+shd*std::exp(-reg*x))*flux;
130}
131
132inline G4double G4QTauNuclearCrossSection::Fun(G4double x) // Integrated PhoNucCS
133{
134 G4double dlg1=lastG+lastG-1.;
135 G4double lgoe=lastG/lastE;
136 G4double HE2=HighEnergyJ2(x);
137 return dlg1*HighEnergyJ1(x)-lgoe*(HE2+HE2-HighEnergyJ3(x)/lastE);
138}
139
140inline G4double G4QTauNuclearCrossSection::HighEnergyJ1(G4double lEn)
141{
142 static const G4double le=std::log(50000.); // log(E0)
143 static const G4double le2=le*le; // log(E0)^2
144 static const G4double a=.0375; // a
145 static const G4double ha=a*.5; // a/2
146 static const G4double ab=a*16.5; // a*b
147 static const G4double d=0.11; // d
148 static const G4double cd=1.0734/d; // c/d
149 static const G4double ele=std::exp(-d*le); // E0^(-d)
150 return ha*(lEn*lEn-le2)-ab*(lEn-le)-cd*(std::exp(-d*lEn)-ele);
151}
152
153inline G4double G4QTauNuclearCrossSection::HighEnergyJ2(G4double lEn)
154{
155 static const G4double e=50000.; // E0
156 static const G4double le=std::log(e); // log(E0)
157 static const G4double le1=(le-1.)*e; // (log(E0)-1)*E0
158 static const G4double a=.0375; // a
159 static const G4double ab=a*16.5; // a*b
160 static const G4double d=1.-0.11; // 1-d
161 static const G4double cd=1.0734/d; // c/(1-d)
162 static const G4double ele=std::exp(d*le); // E0^(1-d)
163 G4double En=std::exp(lEn);
164 return a*((lEn-1.)*En-le1)-ab*(En-e)+cd*(std::exp(d*lEn)-ele);
165}
166
167inline G4double G4QTauNuclearCrossSection::HighEnergyJ3(G4double lEn)
168{
169 static const G4double e=50000.; // E0
170 static const G4double le=std::log(e); // log(E0)
171 static const G4double e2=e*e; // E0^2
172 static const G4double leh=(le-.5)*e2; // (log(E0)-.5)*E0^2
173 static const G4double ha=.0375*.5; // a/2
174 static const G4double hab=ha*16.5; // a*b/2
175 static const G4double d=2.-.11; // 2-d
176 static const G4double cd=1.0734/d; // c/(2-d)
177 static const G4double ele=std::exp(d*le); // E0^(2-d)
178 G4double lastE2=std::exp(lEn+lEn);
179 return ha*((lEn-.5)*lastE2-leh)-hab*(lastE2-e2)+cd*(std::exp(d*lEn)-ele);
180}
181
182#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4double CalculateCrossSection(G4bool CS, G4int F, G4int I, G4int PDG, G4int Z, G4int N, G4double Momentum)
static G4VQCrossSection * GetPointer()
G4double GetVirtualFactor(G4double nu, G4double Q2)
virtual G4double GetCrossSection(G4bool fCS, G4double pMom, G4int tgZ, G4int tgN, G4int pPDG=0)
G4double ThresholdEnergy(G4int Z, G4int N, G4int PDG=15)