55 fme = electron_mass_c2;
57 fMv2 = 0.7056*GeV*GeV;
68 fMaxEnergy = 10000.*GeV;
92 fAngleTable =
nullptr;
101 outFile <<
"G4NeutronElectronElModel is a neutrino-electron (neutral current) elastic scattering\n"
102 <<
"model which uses the standard model \n"
103 <<
"transfer parameterization. The model is fully relativistic\n";
117 if( fCutEnergy > 0. )
121 if( pName ==
"neutron" &&
122 energy >= fMinEnergy && energy <= fMaxEnergy )
136 G4double result = 0., sum, Tkin, dt, t1, t2;
137 G4int iTkin, jTransfer;
142 for( iTkin = 0; iTkin < fEnergyBin; iTkin++)
152 for( jTransfer = 0; jTransfer < fAngleBin; jTransfer++)
161 vectorT->
PutValue(jTransfer, t1, sum);
164 fAngleTable->insertAt(iTkin,vectorT);
176 G4int iTkin, iTransfer;
178 for( iTkin = 0; iTkin < fEnergyBin; iTkin++)
180 if( Tkin < fEnergyVector->GetLowEdgeEnergy(iTkin) )
break;
182 if ( iTkin >= fEnergyBin ) iTkin = fEnergyBin-1;
183 if ( iTkin < 0 ) iTkin = 0;
189 for( iTransfer = 0; iTransfer < fAngleBin; iTransfer++)
191 if(
position <= (*(*fAngleTable)(iTkin))(iTransfer) )
break;
193 if (iTransfer >= fAngleBin-1) iTransfer = fAngleBin-1;
212 if( iTransfer == 0 || iTransfer == fAngleBin-1 )
214 randTransfer = (*fAngleTable)(iTkin)->GetLowEdgeEnergy(iTransfer);
219 if ( iTransfer >=
G4int((*fAngleTable)(iTkin)->GetVectorLength()) )
221 iTransfer = (*fAngleTable)(iTkin)->GetVectorLength() - 1;
223 y1 = (*(*fAngleTable)(iTkin))(iTransfer-1);
224 y2 = (*(*fAngleTable)(iTkin))(iTransfer);
226 x1 = (*fAngleTable)(iTkin)->GetLowEdgeEnergy(iTransfer-1);
227 x2 = (*fAngleTable)(iTkin)->GetLowEdgeEnergy(iTransfer);
232 if ( x1 == x2 ) randTransfer = x2;
243 randTransfer = x1 + (
position - y1 )*( x2 - x1 )/delta;
258 G4double result = 1., q2, znq2, znf, znf2, znf4;
260 znq2 = 1. + 2.*fee*x/fM;
268 result /= ( x + fAm )*znq2*znq2*znf4;
270 result *= ( 1 - x )/( 1 + q2/4./fM2 ) + 2.*x;
303 eTkin /= 1.+2.*fee*sin2ht/fM;
309 if( eTkin > fCutEnergy )
311 G4double ePlab = sqrt( eTkin*(eTkin + 2.*fme) );
317 if( cost > 1. ) cost = 1.;
318 if( cost < -1. ) cost = -1.;
320 G4double sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
323 G4ThreeVector eP( sint*std::cos(phi), sint*std::sin(phi), cost );
347 else if( eTkin > 0.0 )
double epsilon(double density, double temperature)
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
static G4Electron * Electron()
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 GetTotalEnergy() const
G4double LowestEnergyLimit() const
void SetLowestEnergyLimit(G4double value)
G4HadFinalState theParticleChange
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
virtual void ModelDescription(std::ostream &) const
G4double SampleSin2HalfTheta(G4double Tkin)
G4NeutronElectronElModel(const G4String &name="nu-e-elastic")
G4double CalculateAm(G4double momentum)
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
virtual ~G4NeutronElectronElModel()
G4double XscIntegrand(G4double x)
virtual G4bool IsApplicable(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
G4double GetTransfer(G4int iTkin, G4int iTransfer, G4double position)
G4double GetPDGMass() const
const G4String & GetParticleName() const
void PutValue(std::size_t index, G4double energy, G4double dValue)
G4double GetLowEdgeEnergy(std::size_t binNumber) const