Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ElNeutrinoNucleusTotXsc Class Reference

#include <G4ElNeutrinoNucleusTotXsc.hh>

+ Inheritance diagram for G4ElNeutrinoNucleusTotXsc:

Public Member Functions

 G4ElNeutrinoNucleusTotXsc ()
 
 ~G4ElNeutrinoNucleusTotXsc ()
 
G4bool IsIsoApplicable (const G4DynamicParticle *, G4int, G4int, const G4Element *, const G4Material *) override
 
G4bool IsElementApplicable (const G4DynamicParticle *, G4int, const G4Material *) override
 
G4double GetIsoCrossSection (const G4DynamicParticle *aPart, G4int Z, G4int A, const G4Isotope *, const G4Element *, const G4Material *) override
 
G4int GetEnergyIndex (G4double energy)
 
G4double GetNuElTotCsXsc (G4int index, G4double energy)
 
G4double GetANuElTotCsXsc (G4int index, G4double energy)
 
G4double GetNuElTotCsArray (G4int index)
 
G4double GetANuElTotCsArray (G4int index)
 
void SetCutEnergy (G4double ec)
 
G4double GetCutEnergy ()
 
void SetBiasingFactor (G4double bf)
 
G4double GetBiasingFactor ()
 
G4double GetTotXsc ()
 
G4double GetCcTotRatio ()
 
- Public Member Functions inherited from G4VCrossSectionDataSet
 G4VCrossSectionDataSet (const G4String &nam="")
 
virtual ~G4VCrossSectionDataSet ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
virtual G4double ComputeCrossSectionPerElement (G4double kinEnergy, G4double loge, const G4ParticleDefinition *, const G4Element *, const G4Material *mat=nullptr)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
virtual G4double ComputeIsoCrossSection (G4double kinEnergy, G4double loge, const G4ParticleDefinition *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
virtual const G4IsotopeSelectIsotope (const G4Element *, G4double kinEnergy, G4double logE)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
virtual void SetVerboseLevel (G4int value)
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
bool ForAllAtomsAndEnergies () const
 
void SetForAllAtomsAndEnergies (G4bool val)
 
const G4StringGetName () const
 
void SetName (const G4String &nam)
 
G4VCrossSectionDataSetoperator= (const G4VCrossSectionDataSet &right)=delete
 
 G4VCrossSectionDataSet (const G4VCrossSectionDataSet &)=delete
 

Protected Attributes

G4double fCofXsc
 
G4double fSin2tW
 
G4double fCofS
 
G4double fCofL
 
G4double fCutEnergy
 
G4double fBiasingFactor
 
G4double fTotXsc
 
G4double fCcTotRatio
 
G4double fCcFactor
 
G4double fNcFactor
 
G4int fIndex
 
const G4ParticleDefinitiontheElectron
 
const G4ParticleDefinitionthePositron
 
- Protected Attributes inherited from G4VCrossSectionDataSet
G4int verboseLevel
 
G4String name
 

Static Protected Attributes

static const G4double fNuElEnergy [50]
 
static const G4double fNuElTotXsc [50]
 
static const G4double fANuElTotXsc [50]
 

Detailed Description

Definition at line 42 of file G4ElNeutrinoNucleusTotXsc.hh.

Constructor & Destructor Documentation

◆ G4ElNeutrinoNucleusTotXsc()

G4ElNeutrinoNucleusTotXsc::G4ElNeutrinoNucleusTotXsc ( )

Definition at line 51 of file G4ElNeutrinoNucleusTotXsc.cc.

52 : G4VCrossSectionDataSet("NuElNuclTotXsc")
53{
54 fCofXsc = 1.e-38*cm2/GeV;
55
56 // G4cout<<"fCofXsc = "<<fCofXsc*GeV/cm2<<" cm2/GeV"<<G4endl;
57
58 // PDG2016: sin^2 theta Weinberg
59
60 fSin2tW = 0.23129; // 0.2312;
61
62 // 9 <-> 6, 5/9 or 5/6 ?
63
64 fCofS = 5.*fSin2tW*fSin2tW/9.;
65 fCofL = 1. - fSin2tW + fCofS;
66
67 // G4cout<<"fCosL = "<<fCofL<<", fCofS = "<<fCofS<<G4endl;
68
69 fCutEnergy = 0.; // default value
70
71 fBiasingFactor = 1.; // default as physics
72
73 fIndex = 50;
74
75 fTotXsc = 0.;
76 fCcTotRatio = 0.75; // from nc/cc~0.33 ratio
77 fCcFactor = fNcFactor = 1.;
78
81}
const G4ParticleDefinition * thePositron
const G4ParticleDefinition * theElectron
static G4Electron * Electron()
Definition: G4Electron.cc:93
static G4Positron * Positron()
Definition: G4Positron.cc:93

◆ ~G4ElNeutrinoNucleusTotXsc()

G4ElNeutrinoNucleusTotXsc::~G4ElNeutrinoNucleusTotXsc ( )

Definition at line 83 of file G4ElNeutrinoNucleusTotXsc.cc.

84{}

Member Function Documentation

◆ GetANuElTotCsArray()

G4double G4ElNeutrinoNucleusTotXsc::GetANuElTotCsArray ( G4int  index)

Definition at line 294 of file G4ElNeutrinoNucleusTotXsc.cc.

295{
296 if( index >= 0 && index < fIndex) return fANuElTotXsc[index];
297 else
298 {
299 G4cout<<"Improper index of fANuElTotXsc array"<<G4endl;
300 return 0.;
301 }
302}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static const G4double fANuElTotXsc[50]

◆ GetANuElTotCsXsc()

G4double G4ElNeutrinoNucleusTotXsc::GetANuElTotCsXsc ( G4int  index,
G4double  energy 
)

Definition at line 253 of file G4ElNeutrinoNucleusTotXsc.cc.

254{
255 G4double xsc(0.);
256
257 if( index <= 0 || energy < thePositron->GetPDGMass() ) xsc = fANuElTotXsc[0];
258 else if (index >= fIndex) xsc = fANuElTotXsc[fIndex-1];
259 else
260 {
261 G4double x1 = fNuElEnergy[index-1]*GeV;
262 G4double x2 = fNuElEnergy[index]*GeV;
263 G4double y1 = fANuElTotXsc[index-1];
264 G4double y2 = fANuElTotXsc[index];
265
266 if( x1 >= x2 ) return fANuElTotXsc[index];
267 else
268 {
269 G4double angle = (y2-y1)/(x2-x1);
270 xsc = y1 + (energy-x1)*angle;
271 }
272 }
273 return xsc;
274}
double G4double
Definition: G4Types.hh:83
static const G4double fNuElEnergy[50]
G4double energy(const ThreeVector &p, const G4double m)

Referenced by GetIsoCrossSection().

◆ GetBiasingFactor()

G4double G4ElNeutrinoNucleusTotXsc::GetBiasingFactor ( )
inline

Definition at line 73 of file G4ElNeutrinoNucleusTotXsc.hh.

73{return fBiasingFactor;};

◆ GetCcTotRatio()

G4double G4ElNeutrinoNucleusTotXsc::GetCcTotRatio ( )
inline

Definition at line 76 of file G4ElNeutrinoNucleusTotXsc.hh.

76{return fCcTotRatio;};

Referenced by G4ElNeutrinoNucleusProcess::PostStepDoIt().

◆ GetCutEnergy()

G4double G4ElNeutrinoNucleusTotXsc::GetCutEnergy ( )
inline

Definition at line 70 of file G4ElNeutrinoNucleusTotXsc.hh.

70{return fCutEnergy;};

◆ GetEnergyIndex()

G4int G4ElNeutrinoNucleusTotXsc::GetEnergyIndex ( G4double  energy)

Definition at line 205 of file G4ElNeutrinoNucleusTotXsc.cc.

206{
207 G4int i, eIndex = 0;
208
209 for( i = 0; i < fIndex; i++)
210 {
211 if( energy <= fNuElEnergy[i]*GeV )
212 {
213 eIndex = i;
214 break;
215 }
216 }
217 if( i >= fIndex-1 ) eIndex = fIndex-1;
218 // G4cout<<"eIndex = "<<eIndex<<G4endl;
219 return eIndex;
220}
int G4int
Definition: G4Types.hh:85

Referenced by GetIsoCrossSection().

◆ GetIsoCrossSection()

G4double G4ElNeutrinoNucleusTotXsc::GetIsoCrossSection ( const G4DynamicParticle aPart,
G4int  Z,
G4int  A,
const G4Isotope ,
const G4Element ,
const G4Material  
)
overridevirtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 144 of file G4ElNeutrinoNucleusTotXsc.cc.

146{
147 fCcFactor = fNcFactor = 1.;
148 fCcTotRatio = 0.25;
149
150 G4double ccnuXsc, ccanuXsc, ncXsc, totXsc(0.);
151
152 G4double energy = aPart->GetTotalEnergy();
153 G4String pName = aPart->GetDefinition()->GetParticleName();
154
155 G4int index = GetEnergyIndex(energy);
156
157 if( index >= fIndex )
158 {
159 G4double pm = proton_mass_c2;
160 G4double s2 = 2.*energy*pm+pm*pm;
161 G4double aa = 1.;
162 G4double bb = 1.085;
163 G4double mw = 80.385*GeV;
164 fCcFactor = bb/(1.+ aa*s2/mw/mw);
165
166 G4double mz = 91.1876*GeV;
167 fNcFactor = bb/(1.+ aa*s2/mz/mz);
168 }
169 ccnuXsc = GetNuElTotCsXsc(index, energy);
170 ccnuXsc *= fCcFactor;
171 ccanuXsc = GetANuElTotCsXsc(index, energy);
172 ccanuXsc *= fCcFactor;
173
174 if( pName == "nu_e")
175 {
176 ncXsc = fCofL*ccnuXsc + fCofS*ccanuXsc;
177 ncXsc *= fNcFactor/fCcFactor;
178 totXsc = ccnuXsc + ncXsc;
179 if( totXsc > 0.) fCcTotRatio = ccnuXsc/totXsc;
180 }
181 else if( pName == "anti_nu_e")
182 {
183 ncXsc = fCofL*ccanuXsc + fCofS*ccnuXsc;
184 ncXsc *= fNcFactor/fCcFactor;
185 totXsc = ccanuXsc + ncXsc;
186 if( totXsc > 0.) fCcTotRatio = ccanuXsc/totXsc;
187 }
188 else return totXsc;
189
190 totXsc *= fCofXsc;
191 totXsc *= energy;
192 totXsc *= A; // incoherent sum over all isotope nucleons
193
194 totXsc *= fBiasingFactor; // biasing up, if set >1
195
196 fTotXsc = totXsc;
197
198 return totXsc;
199}
const G4double A[17]
G4ParticleDefinition * GetDefinition() const
G4double GetTotalEnergy() const
G4double GetNuElTotCsXsc(G4int index, G4double energy)
G4double GetANuElTotCsXsc(G4int index, G4double energy)
G4int GetEnergyIndex(G4double energy)
const G4String & GetParticleName() const

◆ GetNuElTotCsArray()

G4double G4ElNeutrinoNucleusTotXsc::GetNuElTotCsArray ( G4int  index)

Definition at line 280 of file G4ElNeutrinoNucleusTotXsc.cc.

281{
282 if( index >= 0 && index < fIndex) return fNuElTotXsc[index];
283 else
284 {
285 G4cout<<"Improper index of fNuElTotXsc array"<<G4endl;
286 return 0.;
287 }
288}
static const G4double fNuElTotXsc[50]

◆ GetNuElTotCsXsc()

G4double G4ElNeutrinoNucleusTotXsc::GetNuElTotCsXsc ( G4int  index,
G4double  energy 
)

Definition at line 226 of file G4ElNeutrinoNucleusTotXsc.cc.

227{
228 G4double xsc(0.);
229
230 if( index <= 0 || energy < theElectron->GetPDGMass() ) xsc = fNuElTotXsc[0];
231 else if (index >= fIndex) xsc = fNuElTotXsc[fIndex-1];
232 else
233 {
234 G4double x1 = fNuElEnergy[index-1]*GeV;
235 G4double x2 = fNuElEnergy[index]*GeV;
236 G4double y1 = fNuElTotXsc[index-1];
237 G4double y2 = fNuElTotXsc[index];
238
239 if(x1 >= x2) return fNuElTotXsc[index];
240 else
241 {
242 G4double angle = (y2-y1)/(x2-x1);
243 xsc = y1 + (energy-x1)*angle;
244 }
245 }
246 return xsc;
247}

Referenced by GetIsoCrossSection().

◆ GetTotXsc()

G4double G4ElNeutrinoNucleusTotXsc::GetTotXsc ( )
inline

Definition at line 75 of file G4ElNeutrinoNucleusTotXsc.hh.

75{return fTotXsc;};

◆ IsElementApplicable()

G4bool G4ElNeutrinoNucleusTotXsc::IsElementApplicable ( const G4DynamicParticle ,
G4int  ,
const G4Material  
)
inlineoverridevirtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 51 of file G4ElNeutrinoNucleusTotXsc.hh.

51{ return false; };

◆ IsIsoApplicable()

G4bool G4ElNeutrinoNucleusTotXsc::IsIsoApplicable ( const G4DynamicParticle ,
G4int  ,
G4int  ,
const G4Element ,
const G4Material  
)
inlineoverridevirtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 49 of file G4ElNeutrinoNucleusTotXsc.hh.

49{ return true; };

◆ SetBiasingFactor()

void G4ElNeutrinoNucleusTotXsc::SetBiasingFactor ( G4double  bf)
inline

◆ SetCutEnergy()

void G4ElNeutrinoNucleusTotXsc::SetCutEnergy ( G4double  ec)
inline

Definition at line 69 of file G4ElNeutrinoNucleusTotXsc.hh.

69{fCutEnergy = ec;};

Member Data Documentation

◆ fANuElTotXsc

const G4double G4ElNeutrinoNucleusTotXsc::fANuElTotXsc
staticprotected
Initial value:
=
{
0.00103385, 0.00237807, 0.00366358, 0.00515192, 0.00697434,
0.00925859, 0.0121508, 0.0158252, 0.0204908, 0.0263959,
0.0338304, 0.0431234, 0.0546346, 0.068735, 0.0857738,
0.106025, 0.129614, 0.15643, 0.186063, 0.21784,
0.251065, 0.28525, 0.319171, 0.348995, 0.369448,
0.378165, 0.377353, 0.371224, 0.363257, 0.355433,
0.348618, 0.343082, 0.338825, 0.33574, 0.333684,
0.332504, 0.332052, 0.332187, 0.332781, 0.333716,
0.33489, 0.336213, 0.337608, 0.339008, 0.340362,
0.341606, 0.342706, 0.343628, 0.344305, 0.344675
}

Definition at line 91 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by GetANuElTotCsArray(), and GetANuElTotCsXsc().

◆ fBiasingFactor

G4double G4ElNeutrinoNucleusTotXsc::fBiasingFactor
protected

◆ fCcFactor

G4double G4ElNeutrinoNucleusTotXsc::fCcFactor
protected

Definition at line 85 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by G4ElNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fCcTotRatio

G4double G4ElNeutrinoNucleusTotXsc::fCcTotRatio
protected

◆ fCofL

G4double G4ElNeutrinoNucleusTotXsc::fCofL
protected

Definition at line 82 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by G4ElNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fCofS

G4double G4ElNeutrinoNucleusTotXsc::fCofS
protected

Definition at line 82 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by G4ElNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fCofXsc

G4double G4ElNeutrinoNucleusTotXsc::fCofXsc
protected

Definition at line 80 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by G4ElNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fCutEnergy

G4double G4ElNeutrinoNucleusTotXsc::fCutEnergy
protected

◆ fIndex

◆ fNcFactor

G4double G4ElNeutrinoNucleusTotXsc::fNcFactor
protected

Definition at line 85 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by G4ElNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fNuElEnergy

const G4double G4ElNeutrinoNucleusTotXsc::fNuElEnergy
staticprotected
Initial value:
=
{
0.000561138, 0.000735091, 0.000962969, 0.00126149, 0.00165255,
0.00216484, 0.00283594, 0.00371508, 0.00486676, 0.00637546,
0.00835185, 0.0109409, 0.0143326, 0.0187757, 0.0245962,
0.032221, 0.0422095, 0.0552945, 0.0724358, 0.0948908,
0.124307, 0.162842, 0.213323, 0.279453, 0.366084,
0.47957, 0.628237, 0.82299, 1.07812, 1.41233,
1.85016, 2.42371, 3.17505, 4.15932, 5.44871,
7.13781, 9.35053, 12.2492, 16.0464, 21.0208,
27.5373, 36.0739, 47.2568, 61.9064, 81.0973,
106.238, 139.171, 182.314, 238.832, 312.869
}

Definition at line 89 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by GetANuElTotCsXsc(), GetEnergyIndex(), and GetNuElTotCsXsc().

◆ fNuElTotXsc

const G4double G4ElNeutrinoNucleusTotXsc::fNuElTotXsc
staticprotected
Initial value:
=
{
0.0026484, 0.00609503, 0.00939421, 0.0132163, 0.0178983,
0.0237692, 0.0312066, 0.0406632, 0.0526867, 0.0679357,
0.0871913, 0.111359, 0.141458, 0.178584, 0.223838,
0.27822, 0.342461, 0.416865, 0.501361, 0.596739,
0.713623, 0.905749, 1.20718, 1.52521, 1.75286,
1.82072, 1.67119, 1.50074, 1.3077, 1.14923,
1.0577, 0.977911, 0.918526, 0.792889, 0.702282,
0.678615, 0.687099, 0.725167, 0.706795, 0.678045,
0.649791, 0.651328, 0.651934, 0.658062, 0.660659,
0.662534, 0.662601, 0.660261, 0.656724, 0.65212
}

Definition at line 90 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by GetNuElTotCsArray(), and GetNuElTotCsXsc().

◆ fSin2tW

G4double G4ElNeutrinoNucleusTotXsc::fSin2tW
protected

Definition at line 81 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by G4ElNeutrinoNucleusTotXsc().

◆ fTotXsc

G4double G4ElNeutrinoNucleusTotXsc::fTotXsc
protected

◆ theElectron

const G4ParticleDefinition* G4ElNeutrinoNucleusTotXsc::theElectron
protected

Definition at line 93 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by G4ElNeutrinoNucleusTotXsc().

◆ thePositron

const G4ParticleDefinition* G4ElNeutrinoNucleusTotXsc::thePositron
protected

Definition at line 94 of file G4ElNeutrinoNucleusTotXsc.hh.

Referenced by G4ElNeutrinoNucleusTotXsc().


The documentation for this class was generated from the following files: