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

#include <G4MuNeutrinoNucleusTotXsc.hh>

+ Inheritance diagram for G4MuNeutrinoNucleusTotXsc:

Public Member Functions

 G4MuNeutrinoNucleusTotXsc ()
 
 ~G4MuNeutrinoNucleusTotXsc ()
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *, const G4Material *)
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *, G4int, const G4Material *)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *dynPart, G4int Z, const G4Material *mat)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *aPart, G4int Z, G4int A, const G4Isotope *, const G4Element *, const G4Material *)
 
G4int GetEnergyIndex (G4double energy)
 
G4double GetNuMuTotCsXsc (G4int index, G4double energy)
 
G4double GetANuMuTotCsXsc (G4int index, G4double energy)
 
G4double GetNuMuTotCsArray (G4int index)
 
G4double GetANuMuTotCsArray (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 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 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 G4int GetVerboseLevel () 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
 

Protected Attributes

G4double fCofXsc
 
G4double fSin2tW
 
G4double fCofS
 
G4double fCofL
 
G4double fCutEnergy
 
G4double fBiasingFactor
 
G4double fTotXsc
 
G4double fCcTotRatio
 
G4double fCcFactor
 
G4double fNcFactor
 
G4int fIndex
 
G4ParticleDefinitiontheMuonMinus
 
G4ParticleDefinitiontheMuonPlus
 
- Protected Attributes inherited from G4VCrossSectionDataSet
G4int verboseLevel
 

Static Protected Attributes

static const G4double fNuMuEnergy [50]
 
static const G4double fNuMuTotXsc [50]
 
static const G4double fANuMuTotXsc [50]
 

Additional Inherited Members

- Protected Member Functions inherited from G4VCrossSectionDataSet
void SetName (const G4String &)
 

Detailed Description

Definition at line 42 of file G4MuNeutrinoNucleusTotXsc.hh.

Constructor & Destructor Documentation

◆ G4MuNeutrinoNucleusTotXsc()

G4MuNeutrinoNucleusTotXsc::G4MuNeutrinoNucleusTotXsc ( )

Definition at line 47 of file G4MuNeutrinoNucleusTotXsc.cc.

48 : G4VCrossSectionDataSet("NuMuNuclTotXsc")
49{
50 fCofXsc = 1.e-38*cm2/GeV;
51
52 // G4cout<<"fCofXsc = "<<fCofXsc*GeV/cm2<<" cm2/GeV"<<G4endl;
53
54 // PDG2016: sin^2 theta Weinberg
55
56 fSin2tW = 0.23129; // 0.2312;
57
58 // 9 <-> 6, 5/9 or 5/6 ?
59
60 fCofS = 5.*fSin2tW*fSin2tW/9.;
61 fCofL = 1. - fSin2tW + fCofS;
62
63 // G4cout<<"fCosL = "<<fCofL<<", fCofS = "<<fCofS<<G4endl;
64
65 fCutEnergy = 0.; // default value
66
67 fBiasingFactor = 1.; // default as physics
68
69 fIndex = 50;
70
71 fTotXsc = 0.;
72 fCcTotRatio = 0.75; // from nc/cc~0.33 ratio
73 fCcFactor = fNcFactor = 1.;
74
77}
G4ParticleDefinition * theMuonPlus
G4ParticleDefinition * theMuonMinus
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:99
static G4MuonPlus * MuonPlus()
Definition: G4MuonPlus.cc:98

◆ ~G4MuNeutrinoNucleusTotXsc()

G4MuNeutrinoNucleusTotXsc::~G4MuNeutrinoNucleusTotXsc ( )

Definition at line 79 of file G4MuNeutrinoNucleusTotXsc.cc.

80{}

Member Function Documentation

◆ GetANuMuTotCsArray()

G4double G4MuNeutrinoNucleusTotXsc::GetANuMuTotCsArray ( G4int  index)

Definition at line 288 of file G4MuNeutrinoNucleusTotXsc.cc.

289{
290 if( index >= 0 && index < fIndex) return fANuMuTotXsc[index];
291 else
292 {
293 G4cout<<"Improper index of fANuMuTotXsc array"<<G4endl;
294 return 0.;
295 }
296}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static const G4double fANuMuTotXsc[50]

◆ GetANuMuTotCsXsc()

G4double G4MuNeutrinoNucleusTotXsc::GetANuMuTotCsXsc ( G4int  index,
G4double  energy 
)

Definition at line 247 of file G4MuNeutrinoNucleusTotXsc.cc.

248{
249 G4double xsc(0.);
250
251 if( index <= 0 || energy < theMuonPlus->GetPDGMass() ) xsc = fANuMuTotXsc[0];
252 else if (index >= fIndex) xsc = fANuMuTotXsc[fIndex-1];
253 else
254 {
255 G4double x1 = fNuMuEnergy[index-1]*GeV;
256 G4double x2 = fNuMuEnergy[index]*GeV;
257 G4double y1 = fANuMuTotXsc[index-1];
258 G4double y2 = fANuMuTotXsc[index];
259
260 if( x1 >= x2 ) return fANuMuTotXsc[index];
261 else
262 {
263 G4double angle = (y2-y1)/(x2-x1);
264 xsc = y1 + (energy-x1)*angle;
265 }
266 }
267 return xsc;
268}
double G4double
Definition: G4Types.hh:83
static const G4double fNuMuEnergy[50]
G4double energy(const ThreeVector &p, const G4double m)

Referenced by GetIsoCrossSection().

◆ GetBiasingFactor()

G4double G4MuNeutrinoNucleusTotXsc::GetBiasingFactor ( )
inline

Definition at line 77 of file G4MuNeutrinoNucleusTotXsc.hh.

77{return fBiasingFactor;};

◆ GetCcTotRatio()

G4double G4MuNeutrinoNucleusTotXsc::GetCcTotRatio ( )
inline

Definition at line 80 of file G4MuNeutrinoNucleusTotXsc.hh.

80{return fCcTotRatio;};

Referenced by G4MuNeutrinoNucleusProcess::PostStepDoIt().

◆ GetCutEnergy()

G4double G4MuNeutrinoNucleusTotXsc::GetCutEnergy ( )
inline

Definition at line 74 of file G4MuNeutrinoNucleusTotXsc.hh.

74{return fCutEnergy;};

◆ GetElementCrossSection()

G4double G4MuNeutrinoNucleusTotXsc::GetElementCrossSection ( const G4DynamicParticle dynPart,
G4int  Z,
const G4Material mat 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 99 of file G4MuNeutrinoNucleusTotXsc.cc.

101{
102 G4int Zi(0);
103 size_t i(0), j(0);
104 const G4ElementVector* theElementVector = mat->GetElementVector();
105
106 for ( i = 0; i < theElementVector->size(); ++i )
107 {
108 Zi = (*theElementVector)[i]->GetZasInt();
109 if( Zi == Z ) break;
110 }
111 const G4Element* elm = (*theElementVector)[i];
112 size_t nIso = elm->GetNumberOfIsotopes();
113 G4double fact = 0.0;
114 G4double xsec = 0.0;
115 const G4Isotope* iso = nullptr;
116 const G4IsotopeVector* isoVector = elm->GetIsotopeVector();
117 const G4double* abundVector = elm->GetRelativeAbundanceVector();
118
119 for (j = 0; j<nIso; ++j)
120 {
121 iso = (*isoVector)[j];
122 G4int A = iso->GetN();
123
124 if( abundVector[j] > 0.0 && IsIsoApplicable(part, Z, A, elm, mat) )
125 {
126 fact += abundVector[j];
127 xsec += abundVector[j]*GetIsoCrossSection( part, Z, A, iso, elm, mat);
128 }
129 }
130 if( fact > 0.0) { xsec /= fact; }
131 return xsec;
132}
double A(double temperature)
std::vector< G4Element * > G4ElementVector
std::vector< G4Isotope * > G4IsotopeVector
int G4int
Definition: G4Types.hh:85
G4double * GetRelativeAbundanceVector() const
Definition: G4Element.hh:166
size_t GetNumberOfIsotopes() const
Definition: G4Element.hh:158
G4IsotopeVector * GetIsotopeVector() const
Definition: G4Element.hh:162
G4int GetN() const
Definition: G4Isotope.hh:93
const G4ElementVector * GetElementVector() const
Definition: G4Material.hh:188
virtual G4double GetIsoCrossSection(const G4DynamicParticle *aPart, G4int Z, G4int A, const G4Isotope *, const G4Element *, const G4Material *)
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *, const G4Material *)

Referenced by G4MuNeutrinoNucleusProcess::PostStepDoIt().

◆ GetEnergyIndex()

G4int G4MuNeutrinoNucleusTotXsc::GetEnergyIndex ( G4double  energy)

Definition at line 199 of file G4MuNeutrinoNucleusTotXsc.cc.

200{
201 G4int i, eIndex = 0;
202
203 for( i = 0; i < fIndex; i++)
204 {
205 if( energy <= fNuMuEnergy[i]*GeV )
206 {
207 eIndex = i;
208 break;
209 }
210 }
211 if( i >= fIndex ) eIndex = i;
212 // G4cout<<"eIndex = "<<eIndex<<G4endl;
213 return eIndex;
214}

Referenced by GetIsoCrossSection().

◆ GetIsoCrossSection()

G4double G4MuNeutrinoNucleusTotXsc::GetIsoCrossSection ( const G4DynamicParticle aPart,
G4int  Z,
G4int  A,
const G4Isotope ,
const G4Element ,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 138 of file G4MuNeutrinoNucleusTotXsc.cc.

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

Referenced by GetElementCrossSection().

◆ GetNuMuTotCsArray()

G4double G4MuNeutrinoNucleusTotXsc::GetNuMuTotCsArray ( G4int  index)

Definition at line 274 of file G4MuNeutrinoNucleusTotXsc.cc.

275{
276 if( index >= 0 && index < fIndex) return fNuMuTotXsc[index];
277 else
278 {
279 G4cout<<"Improper index of fNuMuTotXsc array"<<G4endl;
280 return 0.;
281 }
282}
static const G4double fNuMuTotXsc[50]

◆ GetNuMuTotCsXsc()

G4double G4MuNeutrinoNucleusTotXsc::GetNuMuTotCsXsc ( G4int  index,
G4double  energy 
)

Definition at line 220 of file G4MuNeutrinoNucleusTotXsc.cc.

221{
222 G4double xsc(0.);
223
224 if( index <= 0 || energy < theMuonMinus->GetPDGMass() ) xsc = fNuMuTotXsc[0];
225 else if (index >= fIndex) xsc = fNuMuTotXsc[fIndex-1];
226 else
227 {
228 G4double x1 = fNuMuEnergy[index-1]*GeV;
229 G4double x2 = fNuMuEnergy[index]*GeV;
230 G4double y1 = fNuMuTotXsc[index-1];
231 G4double y2 = fNuMuTotXsc[index];
232
233 if(x1 >= x2) return fNuMuTotXsc[index];
234 else
235 {
236 G4double angle = (y2-y1)/(x2-x1);
237 xsc = y1 + (energy-x1)*angle;
238 }
239 }
240 return xsc;
241}

Referenced by GetIsoCrossSection().

◆ GetTotXsc()

G4double G4MuNeutrinoNucleusTotXsc::GetTotXsc ( )
inline

Definition at line 79 of file G4MuNeutrinoNucleusTotXsc.hh.

79{return fTotXsc;};

◆ IsElementApplicable()

virtual G4bool G4MuNeutrinoNucleusTotXsc::IsElementApplicable ( const G4DynamicParticle ,
G4int  ,
const G4Material  
)
inlinevirtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 53 of file G4MuNeutrinoNucleusTotXsc.hh.

53{ return true; };

◆ IsIsoApplicable()

G4bool G4MuNeutrinoNucleusTotXsc::IsIsoApplicable ( const G4DynamicParticle aPart,
G4int  Z,
G4int  A,
const G4Element ,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 85 of file G4MuNeutrinoNucleusTotXsc.cc.

86{
87 G4bool result = false;
88 G4String pName = aPart->GetDefinition()->GetParticleName();
89
90 if( pName == "nu_mu" || pName == "anti_nu_mu" )
91 {
92 result = true;
93 }
94 return result;
95}
bool G4bool
Definition: G4Types.hh:86

Referenced by GetElementCrossSection().

◆ SetBiasingFactor()

void G4MuNeutrinoNucleusTotXsc::SetBiasingFactor ( G4double  bf)
inline

◆ SetCutEnergy()

void G4MuNeutrinoNucleusTotXsc::SetCutEnergy ( G4double  ec)
inline

Definition at line 73 of file G4MuNeutrinoNucleusTotXsc.hh.

73{fCutEnergy=ec;};

Member Data Documentation

◆ fANuMuTotXsc

const G4double G4MuNeutrinoNucleusTotXsc::fANuMuTotXsc
staticprotected
Initial value:
=
{
0.0291812, 0.0979725, 0.136884, 0.16794, 0.194698,
0.218468, 0.23992, 0.259241, 0.27665, 0.292251,
0.30612, 0.318314, 0.328886, 0.337885, 0.345464,
0.351495, 0.356131, 0.359448, 0.361531, 0.362474,
0.362382, 0.361365, 0.359538, 0.357024, 0.353943,
0.350422, 0.346685, 0.342662, 0.338567, 0.334514,
0.330612, 0.326966, 0.323668, 0.320805, 0.318451,
0.316671, 0.315514, 0.315013, 0.315187, 0.316036,
0.317541, 0.319667, 0.322362, 0.325556, 0.329159,
0.332577, 0.337133, 0.341214, 0.345128, 0.347657 }

Definition at line 95 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by GetANuMuTotCsArray(), and GetANuMuTotCsXsc().

◆ fBiasingFactor

G4double G4MuNeutrinoNucleusTotXsc::fBiasingFactor
protected

◆ fCcFactor

G4double G4MuNeutrinoNucleusTotXsc::fCcFactor
protected

Definition at line 89 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by G4MuNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fCcTotRatio

G4double G4MuNeutrinoNucleusTotXsc::fCcTotRatio
protected

◆ fCofL

G4double G4MuNeutrinoNucleusTotXsc::fCofL
protected

Definition at line 86 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by G4MuNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fCofS

G4double G4MuNeutrinoNucleusTotXsc::fCofS
protected

Definition at line 86 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by G4MuNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fCofXsc

G4double G4MuNeutrinoNucleusTotXsc::fCofXsc
protected

Definition at line 84 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by G4MuNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fCutEnergy

G4double G4MuNeutrinoNucleusTotXsc::fCutEnergy
protected

◆ fIndex

◆ fNcFactor

G4double G4MuNeutrinoNucleusTotXsc::fNcFactor
protected

Definition at line 89 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by G4MuNeutrinoNucleusTotXsc(), and GetIsoCrossSection().

◆ fNuMuEnergy

const G4double G4MuNeutrinoNucleusTotXsc::fNuMuEnergy
staticprotected
Initial value:
=
{
0.112103, 0.117359, 0.123119, 0.129443, 0.136404,
0.144084, 0.152576, 0.161991, 0.172458, 0.184126,
0.197171, 0.211801, 0.228261, 0.24684, 0.267887,
0.291816, 0.319125, 0.350417, 0.386422, 0.428032,
0.47634, 0.532692, 0.598756, 0.676612, 0.768868,
0.878812, 1.01062, 1.16963, 1.36271, 1.59876,
1.88943, 2.25002, 2.70086, 3.26916, 3.99166,
4.91843, 6.11836, 7.6872, 9.75942, 12.5259,
16.2605, 21.3615, 28.4141, 38.2903, 52.3062,
72.4763, 101.93, 145.6, 211.39, 312.172}

Definition at line 93 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by GetANuMuTotCsXsc(), GetEnergyIndex(), and GetNuMuTotCsXsc().

◆ fNuMuTotXsc

const G4double G4MuNeutrinoNucleusTotXsc::fNuMuTotXsc
staticprotected
Initial value:
=
{
0.0716001, 0.241013, 0.337793, 0.416033, 0.484616,
0.546945, 0.604661, 0.658623, 0.709277, 0.756815,
0.801263, 0.842519, 0.880396, 0.914642, 0.944968,
0.971069, 0.992655, 1.00947, 1.02133, 1.02812,
1.02987, 1.02671, 1.01892, 1.00689, 0.991167,
0.972618, 0.951518, 0.928806, 0.90521, 0.881404,
0.857978, 0.835424, 0.814112, 0.794314, 0.776204,
0.759884, 0.745394, 0.732719, 0.721809, 0.712164,
0.704299, 0.697804, 0.692491, 0.688137, 0.68448,
0.681232, 0.676128, 0.674154, 0.670553, 0.666034 }

Definition at line 94 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by GetNuMuTotCsArray(), and GetNuMuTotCsXsc().

◆ fSin2tW

G4double G4MuNeutrinoNucleusTotXsc::fSin2tW
protected

Definition at line 85 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by G4MuNeutrinoNucleusTotXsc().

◆ fTotXsc

G4double G4MuNeutrinoNucleusTotXsc::fTotXsc
protected

◆ theMuonMinus

G4ParticleDefinition* G4MuNeutrinoNucleusTotXsc::theMuonMinus
protected

Definition at line 97 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by G4MuNeutrinoNucleusTotXsc().

◆ theMuonPlus

G4ParticleDefinition* G4MuNeutrinoNucleusTotXsc::theMuonPlus
protected

Definition at line 98 of file G4MuNeutrinoNucleusTotXsc.hh.

Referenced by G4MuNeutrinoNucleusTotXsc().


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