Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4NeutrinoElectronCcXsc.cc
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
30#include "G4SystemOfUnits.hh"
31#include "G4DynamicParticle.hh"
32#include "G4ParticleTable.hh"
33#include "G4IonTable.hh"
34#include "G4HadTmpUtil.hh"
35#include "G4NistManager.hh"
36
37#include "G4MuonMinus.hh"
38#include "G4TauMinus.hh"
39
40using namespace std;
41using namespace CLHEP;
42
44 : G4VCrossSectionDataSet("NuElectronCcXsc")
45{
46 // PDG2016: Gf=1.1663787(6)e-5*(hc)^3/GeV^2
47 // fCofXsc = Gf*Gf*MeC2*2/pi
48
49 fCofXsc = 1.36044e-22;
50 fCofXsc *= hbarc*hbarc*electron_mass_c2;
51 fCofXsc /= halfpi;
52
53 // G4cout<<"fCofXsc = "<<fCofXsc*GeV/cm2<<" cm2/GeV"<<G4endl;
54
55 // G4cout<<"hbarc = "<<hbarc/MeV/fermi<<" MeV*fermi"<<G4endl;
56
57 // PDG2016: sin^2 theta Weinberg
58
59 fSin2tW = 0.23129; // 0.2312;
60
61 fCutEnergy = 0.; // default value
62
63 fBiasingFactor = 1.; // default as physics
64
67}
68
70{}
71
72//////////////////////////////////////////////////////
73
74G4bool
76{
77 G4bool result = false;
78 G4String pName = aPart->GetDefinition()->GetParticleName();
79 G4double minEnergy = 0., energy = aPart->GetTotalEnergy();
80 G4double fmass, emass = electron_mass_c2;
81
82 if( pName == "anti_nu_e" || pName == "nu_mu" || pName == "anti_nu_mu" ) fmass = theMuonMinus->GetPDGMass();
83 else if( pName == "nu_tau" || pName == "anti_nu_tau" ) fmass = theTauMinus->GetPDGMass();
84 else fmass = emass;
85
86 minEnergy = (fmass-emass)*(fmass+emass)/emass;
87
88 if( ( pName == "nu_mu" || pName == "anti_nu_mu" ||
89 pName == "nu_tau" || pName == "anti_nu_tau" ) &&
90 energy > minEnergy )
91 {
92 result = true;
93 }
94 return result;
95}
96
97////////////////////////////////////////////////////
98
101 const G4Material*)
102{
103 G4double result = 0., totS, fmass, fmass2, emass=electron_mass_c2, emass2;
104
105 G4double energy = aPart->GetTotalEnergy();
106 G4String pName = aPart->GetDefinition()->GetParticleName();
107
108 emass2 = emass*emass;
109 totS = 2.*energy*emass + emass2;
110
111 if( pName == "anti_nu_e" || pName == "nu_mu")
112 {
113 fmass = theMuonMinus->GetPDGMass();
114 fmass2 = fmass*fmass;
115 result = (1. - fmass2/totS)*(1. - fmass2/totS);
116 }
117 else if( pName == "anti_nu_mu")
118 {
119 fmass = theMuonMinus->GetPDGMass();
120 fmass2 = fmass*fmass;
121
122 result = (1.+ emass2/totS)*(1.+ fmass2/totS);
123 result += (1.- emass2/totS)*(1.- fmass2/totS)/3.;
124 result *= 0.25*(1. - fmass2/totS)*(1. - fmass2/totS);
125 }
126 else if( pName == "nu_tau")
127 {
128 fmass = theTauMinus->GetPDGMass();
129 fmass2 = fmass*fmass;
130 result = (1. - fmass2/totS)*(1. - fmass2/totS);
131 }
132 else if( pName == "anti_nu_tau")
133 {
134 fmass = theTauMinus->GetPDGMass();
135 fmass2 = fmass*fmass;
136
137 result = (1.+ emass2/totS)*(1.+ fmass2/totS);
138 result += (1.- emass2/totS)*(1.- fmass2/totS)/3.;
139 result *= 0.25*(1. - fmass2/totS)*(1. - fmass2/totS);
140 }
141 else
142 {
143 return result;
144 }
145 // if( energy <= electron_mass_c2 ) return result;
146
147 G4double aa = 1.;
148 G4double bb = 1.7;
149 G4double gw = 2.141*GeV;
150 G4double dd = 5000.;
151 G4double mw = 80.385*GeV;
152
153 if( energy > 50.*GeV )
154 {
155 result *= bb;
156 result /= 1.+ aa*totS/mw/mw;
157
158 if( pName == "anti_nu_e")
159 {
160 result *= 1. + dd*gw*gw*totS/( (totS-mw*mw)*(totS-mw*mw)+gw*gw*mw*mw );
161 }
162 }
163 result *= fCofXsc; //*energy;
164 result *= energy + 0.5*emass;
165 result *= ZZ; // incoherent sum over all element electrons
166
167 result *= fBiasingFactor; // biasing up, if set >1
168
169 return result;
170}
171
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4ParticleDefinition * GetDefinition() const
G4double GetTotalEnergy() const
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:99
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *)
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *)
G4ParticleDefinition * theMuonMinus
G4ParticleDefinition * theTauMinus
const G4String & GetParticleName() const
static G4TauMinus * TauMinus()
Definition: G4TauMinus.cc:134
Definition: DoubConv.h:17