GENIEGenerator
Loading...
Searching...
No Matches
INukeNucleonCorr.h
Go to the documentation of this file.
1/**
2 * @brief Correction to free NN xsec in nuclear matter
3 *
4 * @author Kyle Bachinski, Tomasz Golan
5 * @date 2015
6 * @remarks V.R. Pandharipande and S. C. Pieper, Phys. Rev. C45 (1992) 791
7 *
8*/
9
10#ifndef INUKE_NUCLEON_CORR_H
11#define INUKE_NUCLEON_CORR_H
12
13#include <iostream>
14
15#include <TGenPhaseSpace.h>
17
19{
20 public:
21
22 //! get single instance of INukeNucleonCorr; create if necessary
24
25 //! get the correction for given four-momentum and density
26 // double getAvgCorrection (const double rho, const int A, const int Z, const int pdg, const double Ek);
27 double getAvgCorrection (const double rho, const double A, const double Ek);
28 void OutputFiles(int A, int Z);
29 double AvgCorrection (const double rho, const int A, const int Z, const int pdg, const double Ek);
30
31 private:
32
33 static INukeNucleonCorr *fInstance; //!< single instance of INukeNucleonCorr
34
35 // ----- MODEL PARAMETERS ----- //
36
37 static const unsigned int fRepeat; //!< number of repetition to get average correction
38
39 // ----- POTENTIAL PARAMETERS (from paper) ----- //
40
41 static const double fRho0; //!< equilibrium density
42
43 static const double fAlpha1; //!< alpha coefficient as defined by Eq. 2.17
44 static const double fAlpha2; //!< alpha coefficient as defined by Eq. 2.17
45 static const double fBeta1; //!< beta coefficient as defined by Eq. 2.18
46 static const double fLambda0; //!< lambda coefficient as defined by Eq. 2.19
47 static const double fLambda1; //!< lambda coefficient as defined by Eq. 2.19
48
49 static const int fNDensityBins; //!< cache binning for density
50 //static const int fNEnergyBins; //!< cache binning for energy
51
52 //static const double fMaxEnergy; //!< above this energy correction is assumed to be constant
53 static const double fDensityStep; //!< within this density step correction is assumed to be constant
54 //static const double fEnergyStep; //!< within this energy step correction is assumed to be constant
55
56
57
58 //Test Code
59 static const int fNEnergyBins1; //!< cache binning for energy
60 static const double fMaxEnergy1; //!< above this energy correction is assumed to be constant
61 static const double fEnergyStep1; //!< within this energy step correction is assumed to be constant
62 static const int fNEnergyBins2; //!< cache binning for energy
63 static const double fMaxEnergy2; //!< above this energy correction is assumed to be constant
64 static const double fEnergyStep2; //!< within this energy step correction is assumed to be constant
65 static const int fNEnergyBins3; //!< cache binning for energy
66 static const double fMaxEnergy3; //!< above this energy correction is assumed to be constant
67 static const double fEnergyStep3; //!< within this energy step correction is assumed to be constant
68
69
70 //End Test Code
71 // ----- CALC VARIABLES ----- //
72
73 double fFermiMomProton; // local Fermi momentum for protons
74 double fFermiMomNeutron; // local Fermi momentum for neutrons
75
76 // ----- SINGLETON "BLOCKADES"----- //
77
78 INukeNucleonCorr () {} //!< private constructor (called only by getInstance())
79 INukeNucleonCorr (const INukeNucleonCorr&); //!< block copy constructor
80 INukeNucleonCorr& operator= (const INukeNucleonCorr&); //!< block assignment operator
81
82 // ----- CALCULATIONS ----- //
83
84 inline double beta (const double rho) {return fBeta1 * rho;} //!< potential component (Eq. 2.18)
85 inline double lambda (const double rho) {return (fLambda0 + fLambda1 * rho);} //!< potential component (Eq. 2.19)
86
87 inline void setFermiLevel (const double rho, const int A, const int Z) //!< set up Fermi momenta
88 {
89 fFermiMomProton = localFermiMom (rho, A, Z, genie::kPdgProton); // local Fermi momentum for protons
90 fFermiMomNeutron = localFermiMom (rho, A, Z, genie::kPdgNeutron); // local Fermi momentum for neutrons
91 }
92
93 //! return proper Fermi momentum based on nucleon PDG
94 inline double fermiMomentum (const int pdg) {return pdg == genie::kPdgProton ? fFermiMomProton : fFermiMomNeutron;}
95
96 double mstar (const double rho, const double k2); //!< m* calculated based on Eqs. 2.6 and 2.16
97
98 double localFermiMom (const double rho, const int A, const int Z, const int pdg); //!< calculate local Fermi momentum
99
100 TLorentzVector generateTargetNucleon (const double mass, const double fermiMomentum); //!< generate target nucleon
101
102 double getCorrection (const double mass, const double rho,
103 const TVector3 &k1, const TVector3 &k2,
104 const TVector3 &k3, const TVector3 &k4); //!< calculate xsec correction
105};
106
107#endif // INUKE_NUCLEON_CORR_H
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
INukeNucleonCorr()
private constructor (called only by getInstance())
double fermiMomentum(const int pdg)
return proper Fermi momentum based on nucleon PDG
static const double fEnergyStep2
within this energy step correction is assumed to be constant
double localFermiMom(const double rho, const int A, const int Z, const int pdg)
calculate local Fermi momentum
double beta(const double rho)
potential component (Eq. 2.18)
static const int fNEnergyBins1
cache binning for energy
static const double fEnergyStep3
within this energy step correction is assumed to be constant
INukeNucleonCorr & operator=(const INukeNucleonCorr &)
block assignment operator
double mstar(const double rho, const double k2)
m* calculated based on Eqs. 2.6 and 2.16
static const int fNEnergyBins2
cache binning for energy
INukeNucleonCorr(const INukeNucleonCorr &)
block copy constructor
static const double fMaxEnergy1
above this energy correction is assumed to be constant
double lambda(const double rho)
potential component (Eq. 2.19)
static const int fNEnergyBins3
cache binning for energy
static INukeNucleonCorr * getInstance()
get single instance of INukeNucleonCorr; create if necessary
TLorentzVector generateTargetNucleon(const double mass, const double fermiMomentum)
generate target nucleon
void OutputFiles(int A, int Z)
static INukeNucleonCorr * fInstance
single instance of INukeNucleonCorr
static const double fLambda1
lambda coefficient as defined by Eq. 2.19
static const double fLambda0
lambda coefficient as defined by Eq. 2.19
double getAvgCorrection(const double rho, const double A, const double Ek)
get the correction for given four-momentum and density
static const double fEnergyStep1
within this energy step correction is assumed to be constant
static const double fMaxEnergy2
above this energy correction is assumed to be constant
static const double fRho0
equilibrium density
static const double fBeta1
beta coefficient as defined by Eq. 2.18
void setFermiLevel(const double rho, const int A, const int Z)
double AvgCorrection(const double rho, const int A, const int Z, const int pdg, const double Ek)
generate kinematics fRepeat times to calculate average correction
static const double fMaxEnergy3
above this energy correction is assumed to be constant
static const unsigned int fRepeat
number of repetition to get average correction
static const double fAlpha1
alpha coefficient as defined by Eq. 2.17
static const int fNDensityBins
cache binning for density
static const double fAlpha2
alpha coefficient as defined by Eq. 2.17
static const double fDensityStep
within this density step correction is assumed to be constant
double getCorrection(const double mass, const double rho, const TVector3 &k1, const TVector3 &k2, const TVector3 &k3, const TVector3 &k4)
calculate xsec correction
const int kPdgProton
Definition PDGCodes.h:81
const int kPdgNeutron
Definition PDGCodes.h:83