GENIEGenerator
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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
static const int fNEnergyBins2
cache binning for energy
static const int fNEnergyBins1
cache binning for energy
static const double fDensityStep
within this density step correction is assumed to be constant
double beta(const double rho)
potential component (Eq. 2.18)
static INukeNucleonCorr * getInstance()
get single instance of INukeNucleonCorr; create if necessary
void setFermiLevel(const double rho, const int A, const int Z)
double lambda(const double rho)
potential component (Eq. 2.19)
double getCorrection(const double mass, const double rho, const TVector3 &k1, const TVector3 &k2, const TVector3 &k3, const TVector3 &k4)
calculate xsec correction
static INukeNucleonCorr * fInstance
single instance of INukeNucleonCorr
double mstar(const double rho, const double k2)
m* calculated based on Eqs. 2.6 and 2.16
static const int fNDensityBins
cache binning for density
static const double fEnergyStep1
within this energy step correction is assumed to be constant
static const double fRho0
equilibrium density
static const double fMaxEnergy2
above this energy correction is assumed to be constant
INukeNucleonCorr()
private constructor (called only by getInstance())
double fermiMomentum(const int pdg)
return proper Fermi momentum based on nucleon PDG
TLorentzVector generateTargetNucleon(const double mass, const double fermiMomentum)
generate target nucleon
static const double fEnergyStep3
within this energy step correction is assumed to be constant
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 fAlpha2
alpha coefficient as defined by Eq. 2.17
static constexpr double A
Definition: Units.h:74
Correction to free NN xsec in nuclear matter.
static const double fLambda0
lambda coefficient as defined by Eq. 2.19
static const double fLambda1
lambda coefficient as defined by Eq. 2.19
static const double fAlpha1
alpha coefficient as defined by Eq. 2.17
static const int fNEnergyBins3
cache binning for energy
void OutputFiles(int A, int Z)
double getAvgCorrection(const double rho, const double A, const double Ek)
get the correction for given four-momentum and density
static const double fBeta1
beta coefficient as defined by Eq. 2.18
static const double fEnergyStep2
within this energy step correction is assumed to be constant
static const unsigned int fRepeat
number of repetition to get average correction
static const double fMaxEnergy1
above this energy correction is assumed to be constant
INukeNucleonCorr & operator=(const INukeNucleonCorr &)
block assignment operator
const int kPdgProton
Definition: PDGCodes.h:81
double localFermiMom(const double rho, const int A, const int Z, const int pdg)
calculate local Fermi momentum
const int kPdgNeutron
Definition: PDGCodes.h:83
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
static const double fMaxEnergy3
above this energy correction is assumed to be constant