47 using namespace CLHEP;
102 outFile <<
"G4NeutronElectronElModel is a neutrino-electron (neutral current) elastic scattering\n"
103 <<
"model which uses the standard model \n"
104 <<
"transfer parameterization. The model is fully relativistic\n";
122 if( pName ==
"neutron" &&
138 G4int iTkin, jTransfer;
153 for( jTransfer = 0; jTransfer <
fAngleBin; jTransfer++)
177 G4int iTkin, iTransfer;
181 if( Tkin < fEnergyVector->GetLowEdgeEnergy(iTkin) )
break;
183 if ( iTkin >= fEnergyBin ) iTkin = fEnergyBin-1;
184 if ( iTkin < 0 ) iTkin = 0;
190 for( iTransfer = 0; iTransfer <
fAngleBin; iTransfer++)
194 if (iTransfer >= fAngleBin-1) iTransfer = fAngleBin-1;
213 if( iTransfer == 0 || iTransfer ==
fAngleBin-1 )
215 randTransfer = (*fAngleTable)(iTkin)->GetLowEdgeEnergy(iTransfer);
222 iTransfer = (*fAngleTable)(iTkin)->GetVectorLength() - 1;
224 y1 = (*(*fAngleTable)(iTkin))(iTransfer-1);
225 y2 = (*(*fAngleTable)(iTkin))(iTransfer);
227 x1 = (*fAngleTable)(iTkin)->GetLowEdgeEnergy(iTransfer-1);
228 x2 = (*fAngleTable)(iTkin)->GetLowEdgeEnergy(iTransfer);
233 if ( x1 == x2 ) randTransfer =
x2;
238 if ( delta < epsilon*mean )
244 randTransfer = x1 + ( position -
y1 )*( x2 - x1 )/delta;
261 znq2 = 1. + 2.*
fee*x/
fM;
269 result /= ( x +
fAm )*znq2*znq2*znf4;
271 result *= ( 1 -
x )/( 1 + q2/4./
fM2 ) + 2.*
x;
304 eTkin /= 1.+2.*
fee*sin2ht/
fM;
318 if( cost > 1. ) cost = 1.;
319 if( cost < -1. ) cost = -1.;
321 G4double sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
324 G4ThreeVector eP( sint*std::cos(phi), sint*std::sin(phi), cost );
348 else if( eTkin > 0.0 )
G4double XscIntegrand(G4double x)
virtual ~G4NeutronElectronElModel()
void SetMinEnergy(G4double anEnergy)
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
void SetMaxEnergy(const G4double anEnergy)
static constexpr double MeV
G4double GetLowEdgeEnergy(size_t binNumber) const
Float_t y1[n_points_granero]
virtual G4bool IsApplicable(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
G4ParticleDefinition * theElectron
void SetMomentumChange(const G4ThreeVector &aV)
G4double LowestEnergyLimit() const
Float_t x1[n_points_granero]
G4double Legendre96(T &typeT, F f, G4double a, G4double b)
const G4String & GetParticleName() const
G4PhysicsLogVector * fEnergyVector
G4double GetTransfer(G4int iTkin, G4int iTransfer, G4double position)
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
void insertAt(size_t, G4PhysicsVector *)
G4double GetTotalEnergy() const
G4double GetPDGMass() const
G4PhysicsTable * fAngleTable
Float_t y2[n_points_geant4]
static constexpr double neutron_mass_c2
void SetEnergyChange(G4double anEnergy)
static constexpr double TeV
G4double CalculateAm(G4double momentum)
static constexpr double electron_mass_c2
static constexpr double eV
static G4Electron * Electron()
virtual void ModelDescription(std::ostream &) const
const G4LorentzVector & Get4Momentum() const
G4double G4ParticleHPJENDLHEData::G4double result
G4double GetKineticEnergy() const
double epsilon(double density, double temperature)
static constexpr double twopi
const G4ParticleDefinition * GetDefinition() const
G4NeutronElectronElModel(const G4String &name="nu-e-elastic")
G4double SampleSin2HalfTheta(G4double Tkin)
void SetLowestEnergyLimit(G4double value)
Hep3Vector boostVector() const
void PutValue(size_t index, G4double energy, G4double dataValue)
void SetLocalEnergyDeposit(G4double aE)
Float_t x2[n_points_geant4]
static constexpr double GeV
G4HadFinalState theParticleChange
HepLorentzVector & boost(double, double, double)