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

#include <G4NeutrinoElectronNcModel.hh>

+ Inheritance diagram for G4NeutrinoElectronNcModel:

Public Member Functions

 G4NeutrinoElectronNcModel (const G4String &name="nu-e-elastic")
 
virtual ~G4NeutrinoElectronNcModel ()
 
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
virtual G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
G4double SampleElectronTkin (const G4HadProjectile *aParticle)
 
void SetCutEnergy (G4double ec)
 
G4double GetCutEnergy ()
 
virtual void ModelDescription (std::ostream &) const
 
- Public Member Functions inherited from G4HadronElastic
 G4HadronElastic (const G4String &name="hElasticLHEP")
 
 ~G4HadronElastic () override
 
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus) override
 
G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A) override
 
G4double GetSlopeCof (const G4int pdg)
 
void SetLowestEnergyLimit (G4double value)
 
G4double LowestEnergyLimit () const
 
G4double ComputeMomentumCMS (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
void ModelDescription (std::ostream &) const override
 
- Public Member Functions inherited from G4HadronicInteraction
 G4HadronicInteraction (const G4String &modelName="HadronicModel")
 
virtual ~G4HadronicInteraction ()
 
virtual G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
G4double GetMinEnergy () const
 
G4double GetMinEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
void SetMinEnergy (G4double anEnergy)
 
void SetMinEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMinEnergy (G4double anEnergy, const G4Material *aMaterial)
 
G4double GetMaxEnergy () const
 
G4double GetMaxEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
void SetMaxEnergy (const G4double anEnergy)
 
void SetMaxEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMaxEnergy (G4double anEnergy, const G4Material *aMaterial)
 
G4int GetVerboseLevel () const
 
void SetVerboseLevel (G4int value)
 
const G4StringGetModelName () const
 
void DeActivateFor (const G4Material *aMaterial)
 
void ActivateFor (const G4Material *aMaterial)
 
void DeActivateFor (const G4Element *anElement)
 
void ActivateFor (const G4Element *anElement)
 
G4bool IsBlocked (const G4Material *aMaterial) const
 
G4bool IsBlocked (const G4Element *anElement) const
 
void SetRecoilEnergyThreshold (G4double val)
 
G4double GetRecoilEnergyThreshold () const
 
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
 
virtual std::pair< G4double, G4doubleGetEnergyMomentumCheckLevels () const
 
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
 
virtual void ModelDescription (std::ostream &outFile) const
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void InitialiseModel ()
 
 G4HadronicInteraction (const G4HadronicInteraction &right)=delete
 
const G4HadronicInteractionoperator= (const G4HadronicInteraction &right)=delete
 
G4bool operator== (const G4HadronicInteraction &right) const =delete
 
G4bool operator!= (const G4HadronicInteraction &right) const =delete
 

Additional Inherited Members

- Protected Member Functions inherited from G4HadronicInteraction
void SetModelName (const G4String &nam)
 
G4bool IsBlocked () const
 
void Block ()
 
- Protected Attributes inherited from G4HadronElastic
G4double pLocalTmax
 
- Protected Attributes inherited from G4HadronicInteraction
G4HadFinalState theParticleChange
 
G4int verboseLevel
 
G4double theMinEnergy
 
G4double theMaxEnergy
 
G4bool isBlocked
 

Detailed Description

Definition at line 49 of file G4NeutrinoElectronNcModel.hh.

Constructor & Destructor Documentation

◆ G4NeutrinoElectronNcModel()

G4NeutrinoElectronNcModel::G4NeutrinoElectronNcModel ( const G4String name = "nu-e-elastic")

Definition at line 44 of file G4NeutrinoElectronNcModel.cc.

45 : G4HadronElastic(name)
46{
47 SetMinEnergy( 0.0*GeV );
49 SetLowestEnergyLimit(1.e-6*eV);
50
51 theElectron = G4Electron::Electron();
52 // PDG2016: sin^2 theta Weinberg
53
54 fSin2tW = 0.23129; // 0.2312;
55
56 fCutEnergy = 0.; // default value
57
58}
static G4Electron * Electron()
Definition: G4Electron.cc:93
void SetLowestEnergyLimit(G4double value)
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
static G4HadronicParameters * Instance()

◆ ~G4NeutrinoElectronNcModel()

G4NeutrinoElectronNcModel::~G4NeutrinoElectronNcModel ( )
virtual

Definition at line 61 of file G4NeutrinoElectronNcModel.cc.

62{}

Member Function Documentation

◆ ApplyYourself()

G4HadFinalState * G4NeutrinoElectronNcModel::ApplyYourself ( const G4HadProjectile aTrack,
G4Nucleus targetNucleus 
)
virtual

Reimplemented from G4HadronElastic.

Definition at line 104 of file G4NeutrinoElectronNcModel.cc.

106{
108
109 const G4HadProjectile* aParticle = &aTrack;
110 G4double nuTkin = aParticle->GetKineticEnergy();
111
112 if( nuTkin <= LowestEnergyLimit() )
113 {
116 return &theParticleChange;
117 }
118 // sample and make final state in lab frame
119
120 G4double eTkin = SampleElectronTkin( aParticle );
121
122 if( eTkin > fCutEnergy )
123 {
124 G4double ePlab = sqrt( eTkin*(eTkin + 2.*electron_mass_c2) );
125
126 G4double cost2 = eTkin*(nuTkin + electron_mass_c2)*(nuTkin + electron_mass_c2);
127 cost2 /= nuTkin*nuTkin*(eTkin + 2.*electron_mass_c2);
128
129 if( cost2 > 1. ) cost2 = 1.;
130 if( cost2 < 0. ) cost2 = 0.;
131
132 G4double cost = sqrt(cost2);
133 G4double sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
134 G4double phi = G4UniformRand()*CLHEP::twopi;
135
136 G4ThreeVector eP( sint*std::cos(phi), sint*std::sin(phi), cost );
137 eP *= ePlab;
138 G4LorentzVector lvt2( eP, eTkin + electron_mass_c2 );
139 G4DynamicParticle * aSec = new G4DynamicParticle( theElectron, lvt2 );
141
142 G4LorentzVector lvp1 = aParticle->Get4Momentum();
143 G4LorentzVector lvt1(0.,0.,0.,electron_mass_c2);
144 G4LorentzVector lvsum = lvp1+lvt1;
145
146 G4LorentzVector lvp2 = lvsum-lvt2;
147 G4double nuTkin2 = lvp2.e()-aParticle->GetDefinition()->GetPDGMass();
150 }
151 else if( eTkin > 0.0 )
152 {
154 nuTkin -= eTkin;
155
156 if( nuTkin > 0. )
157 {
160 }
161 }
162 else
163 {
166 }
167 G4int Z = targetNucleus.GetZ_asInt();
168 Z *= 1;
169
170 return &theParticleChange;
171}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4UniformRand()
Definition: Randomize.hh:52
Hep3Vector unit() const
Hep3Vector vect() const
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
void SetEnergyChange(G4double anEnergy)
void SetMomentumChange(const G4ThreeVector &aV)
void SetLocalEnergyDeposit(G4double aE)
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
G4double LowestEnergyLimit() const
G4double SampleElectronTkin(const G4HadProjectile *aParticle)
G4int GetZ_asInt() const
Definition: G4Nucleus.hh:115

◆ GetCutEnergy()

G4double G4NeutrinoElectronNcModel::GetCutEnergy ( )
inline

Definition at line 68 of file G4NeutrinoElectronNcModel.hh.

68{return fCutEnergy;};

◆ IsApplicable()

G4bool G4NeutrinoElectronNcModel::IsApplicable ( const G4HadProjectile aTrack,
G4Nucleus targetNucleus 
)
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 76 of file G4NeutrinoElectronNcModel.cc.

78{
79 G4bool result = false;
80 G4String pName = aTrack.GetDefinition()->GetParticleName();
81 G4double minEnergy = 0., energy = aTrack.GetTotalEnergy();
82
83 if( fCutEnergy > 0. ) // min detected recoil electron energy
84 {
85 minEnergy = 0.5*(fCutEnergy+sqrt(fCutEnergy*(fCutEnergy+2.*electron_mass_c2)));
86 }
87 if( ( pName == "nu_e" || pName == "anti_nu_e" ||
88 pName == "nu_mu" || pName == "anti_nu_nu" ||
89 pName == "nu_tau" || pName == "anti_nu_tau" ) &&
90 energy > minEnergy )
91 {
92 result = true;
93 }
94 G4int Z = targetNucleus.GetZ_asInt();
95 Z *= 1;
96
97 return result;
98}
bool G4bool
Definition: G4Types.hh:86
G4double GetTotalEnergy() const
const G4String & GetParticleName() const
G4double energy(const ThreeVector &p, const G4double m)

◆ ModelDescription()

void G4NeutrinoElectronNcModel::ModelDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4HadronElastic.

Definition at line 65 of file G4NeutrinoElectronNcModel.cc.

66{
67
68 outFile << "G4NeutrinoElectronNcModel is a neutrino-electron (neutral current) elastic scattering\n"
69 << "model which uses the standard model \n"
70 << "transfer parameterization. The model is fully relativistic\n";
71
72}

◆ SampleElectronTkin()

G4double G4NeutrinoElectronNcModel::SampleElectronTkin ( const G4HadProjectile aParticle)

Definition at line 177 of file G4NeutrinoElectronNcModel.cc.

178{
179 G4double result = 0., xi, cofL, cofR, cofL2, cofR2, cofLR;
180
181 G4double energy = aParticle->GetTotalEnergy();
182 if( energy == 0.) return result; // vmg: < th?? as in xsc
183
184 G4String pName = aParticle->GetDefinition()->GetParticleName();
185
186 if( pName == "nu_e")
187 {
188 cofL = 0.5 + fSin2tW;
189 cofR = fSin2tW;
190 }
191 else if( pName == "anti_nu_e")
192 {
193 cofL = fSin2tW;
194 cofR = 0.5 + fSin2tW;
195 }
196 else if( pName == "nu_mu")
197 {
198 cofL = -0.5 + fSin2tW;
199 cofR = fSin2tW;
200 }
201 else if( pName == "anti_nu_mu")
202 {
203 cofL = fSin2tW;
204 cofR = -0.5 + fSin2tW;
205 }
206 else if( pName == "nu_tau") // vmg: nu_tau as nu_mu ???
207 {
208 cofL = -0.5 + fSin2tW;
209 cofR = fSin2tW;
210 }
211 else if( pName == "anti_nu_tau")
212 {
213 cofL = fSin2tW;
214 cofR = -0.5 + fSin2tW;
215 }
216 else
217 {
218 return result;
219 }
220 xi = 0.5*electron_mass_c2/energy;
221
222 cofL2 = cofL*cofL;
223 cofR2 = cofR*cofR;
224 cofLR = cofL*cofR;
225
226 // cofs of Tkin/Enu 3rd equation
227
228 G4double a = cofR2/3.;
229 G4double b = -(cofR2+cofLR*xi);
230 G4double c = cofL2+cofR2;
231
232 G4double xMax = 1./(1. + xi);
233 G4double xMax2 = xMax*xMax;
234 G4double xMax3 = xMax*xMax2;
235
236 G4double d = -( a*xMax3 + b*xMax2 + c*xMax );
237 d *= G4UniformRand();
238
239 // G4cout<<a<<" "<<b<<" "<<c<<" "<<d<<G4endl<<G4endl;
240
241 // cofs of the incomplete 3rd equation
242
243 G4double p = c/a;
244 p -= b*b/a/a/3.;
245 G4double q = d/a;
246 q -= b*c/a/a/3.;
247 q += 2*b*b*b/a/a/a/27.;
248
249
250 // cofs for the incomplete colutions
251
252 G4double D = p*p*p/3./3./3.;
253 D += q*q/2./2.;
254
255 // G4cout<<"D = "<<D<<G4endl;
256 // D = -D;
257 // G4complex A1 = G4complex(- q/2., std::sqrt(-D) );
258 // G4complex A = std::pow(A1,1./3.);
259
260 // G4complex B1 = G4complex(- q/2., -std::sqrt(-D) );
261 // G4complex B = std::pow(B1,1./3.);
262
263 G4double A1 = - q/2. + std::sqrt(D);
264 G4double A = std::pow(A1,1./3.);
265
266 G4double B1 = - q/2. - std::sqrt(D);
267 G4double B = std::pow(-B1,1./3.);
268 B = -B;
269
270 // roots of the incomplete 3rd equation
271
272 G4complex y1 = A + B;
273 // G4complex y2 = -0.5*(A + B) + 0.5*std::sqrt(3.)*(A - B)*G4complex(0.,1.);
274 // G4complex y3 = -0.5*(A + B) - 0.5*std::sqrt(3.)*(A - B)*G4complex(0.,1.);
275
276 G4complex x1 = y1 - b/a/3.;
277 // G4complex x2 = y2 - b/a/3.;
278 // G4complex x3 = y3 - b/a/3.;
279
280 // G4cout<<"re_x1 = "<<real(x1)<<"; re_x2 = "<<real(x2)<<"; re_x3 = "<<real(x3)<<G4endl;
281 // G4cout<<"im_x1 = "<<imag(x1)<<"; im_x2 = "<<imag(x2)<<"; im_x3 = "<<imag(x3)<<G4endl<<G4endl;
282
283 result = real(x1)*energy;
284
285 return result;
286}
double B(double temperature)
double A(double temperature)
double D(double temp)
std::complex< G4double > G4complex
Definition: G4Types.hh:88

Referenced by ApplyYourself().

◆ SetCutEnergy()

void G4NeutrinoElectronNcModel::SetCutEnergy ( G4double  ec)
inline

Definition at line 67 of file G4NeutrinoElectronNcModel.hh.

67{fCutEnergy=ec;};

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