Public Member Functions | Protected Member Functions | List of all members
genie::LabFrameHadronTensorI Class Referenceabstract

Abstract interface for an object that computes the elements ( $W^{xx}$, $W^{0z}$, etc.) and structure functions ( $W_1$, $W_2$, etc.) of the hadron tensor $W^{\mu\nu}$ defined according to the conventions of the Valencia model. More...

#include <LabFrameHadronTensorI.h>

Inheritance diagram for genie::LabFrameHadronTensorI:
genie::HadronTensorI genie::TabulatedLabFrameHadronTensor

Public Member Functions

virtual ~LabFrameHadronTensorI ()
 
virtual double contraction (const Interaction *interaction, double Q_value) const
 
virtual double contraction (int probe_pdg, double E_probe, double m_probe, double Tl, double cos_l, double ml, double Q_value) const
 
virtual double dSigma_dT_dCosTheta (const Interaction *interaction, double Q_value) const =0
 
virtual double dSigma_dT_dCosTheta (int probe_pdg, double E_probe, double m_probe, double Tl, double cos_l, double ml, double Q_value) const =0
 
virtual double dSigma_dT_dCosTheta_rosenbluth (const Interaction *interaction, double Q_value) const =0
 
virtual double dSigma_dT_dCosTheta_rosenbluth (int probe_pdg, double E_probe, double m_probe, double Tl, double cos_l, double ml, double Q_value) const =0
 
Tensor elements

Functions that return the elements of the tensor. Since it is Hermitian, only ten elements are independent. Although a return type of std::complex<double> is used for all elements, note that hermiticity implies that the diagonal elements must be real.

Parameters
[in]q0The energy transfer $q^0$ in the lab frame (GeV)
[in]q_magThe magnitude of the 3-momentum transfer $\left|\overrightarrow{q}\right|$ in the lab frame (GeV)
Return values
std::complex<double>The value of the hadronic tensor element
virtual std::complex< double > tx (double, double) const
 The tensor element $W^{0x}$. More...
 
virtual std::complex< double > ty (double, double) const
 The tensor element $W^{0y}$. More...
 
virtual std::complex< double > xt (double q0, double q_mag) const
 The tensor element $W^{x0} = (W^{0x})^*$. More...
 
virtual std::complex< double > xz (double, double) const
 The tensor element $W^{xz}$. More...
 
virtual std::complex< double > yt (double q0, double q_mag) const
 The tensor element $W^{y0} = (W^{0y})^*$. More...
 
virtual std::complex< double > yx (double q0, double q_mag) const
 The tensor element $W^{yx} = (W^{xy})^*$. More...
 
virtual std::complex< double > yy (double q0, double q_mag) const
 The tensor element $W^{yy}$. More...
 
virtual std::complex< double > yz (double, double) const
 The tensor element $W^{yz}$. More...
 
virtual std::complex< double > zt (double q0, double q_mag) const
 The tensor element $W^{z0} = (W^{0z})^*$. More...
 
virtual std::complex< double > zx (double q0, double q_mag) const
 The tensor element $W^{zx} = (W^{xz})^*$. More...
 
virtual std::complex< double > zy (double q0, double q_mag) const
 The tensor element $W^{zy} = (W^{yz})^*$. More...
 
Structure functions
Parameters
[in]q0The energy transfer $q^0$ in the lab frame (GeV)
[in]q_magThe magnitude of the 3-momentum transfer $\left|\overrightarrow{q}\right|$ in the lab frame (GeV)
[in]MiThe mass of the target nucleus $M_i$ (GeV)
virtual double W1 (double q0, double q_mag, double Mi) const =0
 The structure function $W_1 = \frac{ W^{xx} }{ 2M_i }$. More...
 
virtual double W2 (double q0, double q_mag, double Mi) const =0
 
virtual double W3 (double q0, double q_mag, double Mi) const =0
 
virtual double W4 (double q0, double q_mag, double Mi) const =0
 
virtual double W5 (double q0, double q_mag, double Mi) const =0
 
virtual double W6 (double q0, double q_mag, double Mi) const =0
 
- Public Member Functions inherited from genie::HadronTensorI
virtual ~HadronTensorI ()
 
int pdg () const
 PDG code of the target nucleus. More...
 
int Z () const
 Atomic number of the target nucleus. More...
 
int A () const
 Mass number of the target nucleus. More...
 
void set_pdg (int pdg)
 Set the target nucleus PDG code. More...
 
virtual double q0Min () const =0
 
virtual double q0Max () const =0
 
virtual double qMagMin () const =0
 
virtual double qMagMax () const =0
 
virtual std::complex< double > tt (double q0, double q_mag) const =0
 The tensor element $W^{00}$. More...
 
virtual std::complex< double > tz (double q0, double q_mag) const =0
 The tensor element $W^{0z}$. More...
 
virtual std::complex< double > xx (double q0, double q_mag) const =0
 The tensor element $W^{xx}$. More...
 
virtual std::complex< double > xy (double q0, double q_mag) const =0
 The tensor element $W^{xy}$. More...
 
virtual std::complex< double > zz (double q0, double q_mag) const =0
 The tensor element $W^{zz}$. More...
 

Protected Member Functions

 LabFrameHadronTensorI (int pdg=0)
 
 LabFrameHadronTensorI (int Z, int A)
 
- Protected Member Functions inherited from genie::HadronTensorI
 HadronTensorI (int pdg=0)
 
 HadronTensorI (int Z, int A)
 PDG code for the target nucleus represented by the tensor. More...
 

Additional Inherited Members

- Protected Attributes inherited from genie::HadronTensorI
int fTargetPDG
 

Detailed Description

Abstract interface for an object that computes the elements ( $W^{xx}$, $W^{0z}$, etc.) and structure functions ( $W_1$, $W_2$, etc.) of the hadron tensor $W^{\mu\nu}$ defined according to the conventions of the Valencia model.

For (anti)neutrino projectiles, the hadron tensor $W^{\mu\nu}$ is defined as in equations (8) and (9) of

J. Nieves, J. E. Amaro, and M. Valverde, "Inclusive Quasi-Elastic Charged-Current Neutrino-Nucleus Reactions," Phys. Rev. C 70, 055503 (2004) https://doi.org/10.1103/PhysRevC.70.055503 https://arxiv.org/abs/nucl-th/0408005v3

Note that the associated erratum includes an important correction in the formula for the differential cross section:

J. Nieves, J. E. Amaro, and M. Valverde, "Erratum: Inclusive quasielastic charged-current neutrino-nucleus reactions [Phys. Rev. C 70, 055503 (2004)]," Phys. Rev. C. 72, 019902 (2005) http://doi.org/10.1103/PhysRevC.72.019902

The calculation is carried out in the lab frame (i.e., the frame where the target nucleus has initial 4-momentum $P^\mu = (M_i, \overrightarrow{0})$) with the 3-momentum transfer $\overrightarrow{q}$ chosen to lie along the z axis, i.e., $q = (q^0, |\overrightarrow{q}| \overrightarrow{u}_z)$. With this choice of frame, the only nonzero elements are $W^{00}$, $W^{0z} = (W^{z0})^*$, $W^{xx} = W^{yy}$, $W^{xy} = (W^{yx})^*$, and $W^{zz}$.

     For an electron projectile, the hadron tensor is defined as in
     equation (83) of

     A. Gil, J. Nieves, and E. Oset,
     "Many-body approach to the inclusive \form#176 reaction
     from the quasielastic to the \form#177 excitation region,"
     Nuclear Physics A 627, 543-598 (1997)
     http://doi.org/10.1016/S0375-9474(97)00513-7

     It is evaluated in the same reference frame as the neutrino case.
Author
Steven Gardiner <gardiner fnal.gov> Fermi National Accelerator Laboratory

August 23, 2018

Copyright (c) 2003-2018, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org or see $GENIE/LICENSE

Definition at line 74 of file LabFrameHadronTensorI.h.

Constructor & Destructor Documentation

virtual genie::LabFrameHadronTensorI::~LabFrameHadronTensorI ( )
inlinevirtual

Definition at line 78 of file LabFrameHadronTensorI.h.

78 {}
genie::LabFrameHadronTensorI::LabFrameHadronTensorI ( int  pdg = 0)
inlineprotected

Definition at line 226 of file LabFrameHadronTensorI.h.

226 : HadronTensorI(pdg) {}
int pdg() const
PDG code of the target nucleus.
HadronTensorI(int pdg=0)
genie::LabFrameHadronTensorI::LabFrameHadronTensorI ( int  Z,
int  A 
)
inlineprotected

Definition at line 228 of file LabFrameHadronTensorI.h.

228 : HadronTensorI(Z, A) {}
int Z() const
Atomic number of the target nucleus.
HadronTensorI(int pdg=0)

Member Function Documentation

double genie::LabFrameHadronTensorI::contraction ( const Interaction interaction,
double  Q_value 
) const
virtual

Computes the contraction $L_{\mu\nu}W^{\mu\nu}$ of the hadron tensor with the appropriate lepton tensor for a given type of projectile (e.g., neutrino, electron)

Parameters
[in]interactionAn Interaction object storing information about the initial and final states
[in]Q_valueThe Q-value that should be used to correct the energy transfer $q_0$ (GeV)
Returns
The tensor contraction $L_{\mu\nu}W^{\mu\nu}$ (GeV)

Implements genie::HadronTensorI.

Definition at line 11 of file LabFrameHadronTensorI.cxx.

13 {
14  // Don't do anything if you've been handed a nullptr
15  if ( !interaction ) return 0.;
16 
17  int probe_pdg = interaction->InitState().ProbePdg();
18  double E_probe = interaction->InitState().ProbeE(kRfLab);
19  double m_probe = interaction->InitState().Probe()->Mass();
20  double Tl = interaction->Kine().GetKV(kKVTl);
21  double cos_l = interaction->Kine().GetKV(kKVctl);
22  double ml = interaction->FSPrimLepton()->Mass();
23 
24  return contraction(probe_pdg, E_probe, m_probe, Tl, cos_l, ml, Q_value);
25 }
virtual double contraction(const Interaction *interaction, double Q_value) const
double genie::LabFrameHadronTensorI::contraction ( int  probe_pdg,
double  E_probe,
double  m_probe,
double  Tl,
double  cos_l,
double  ml,
double  Q_value 
) const
virtual

Parameters
[in]probe_pdgThe PDG code for the incident projectile
[in]E_probeThe lab frame energy of the incident projectile (GeV)
[in]m_probeThe mass of the incident projectile (GeV)
[in]TlThe lab frame kinetic energy of the final state lepton (GeV)
[in]cos_lThe angle between the direction of the incident neutrino and the final state lepton (radians)
[in]mlThe mass of the final state lepton (GeV)
[in]Q_valueThe Q-value that should be used to correct the energy transfer $q_0$ (GeV)
Returns
The tensor contraction $L_{\mu\nu}W^{\mu\nu}$ (GeV)

See equation (3) of Nieves, Amaro, and Valverde, Phys. Rev. C 70, 055503 (2004)

See equation (82) of Gil, Nieves, and Oset, Nucl. Phys. A 627, 543 (1997)

Definition at line 27 of file LabFrameHadronTensorI.cxx.

29 {
30  // Final state lepton total energy
31  double El = Tl + ml;
32 
33  // Energy transfer (uncorrected)
34  double q0 = E_probe - El;
35 
36  // The corrected energy transfer takes into account the binding
37  // energy of the struck nucleon(s)
38  double q0_corrected = q0 - Q_value;
39 
40  // Magnitude of the initial state lepton 3-momentum
41  double k_initial = std::sqrt( std::max(0., std::pow(E_probe, 2)
42  - std::pow(m_probe, 2) ));
43 
44  // Magnitude of the final state lepton 3-momentum
45  double k_final = std::sqrt( std::max(0., std::pow(Tl, 2) + 2*ml*Tl) );
46 
47  // Square of the magnitude of the 3-momentum transfer
48  double q_mag2 = std::pow(k_initial, 2) + std::pow(k_final, 2)
49  - 2.*k_initial*k_final*cos_l;
50 
51  // Square of the magnitude of the 4-momentum transfer
52  double q2 = q0_corrected*q0_corrected - q_mag2;
53 
54  // Differential cross section
55  double xs = dSigma_dT_dCosTheta(probe_pdg, E_probe, m_probe, Tl, cos_l, ml,
56  Q_value);
57 
58  if ( pdg::IsNeutrino(probe_pdg) || pdg::IsAntiNeutrino(probe_pdg) ) {
59  /// See equation (3) of Nieves, Amaro, and Valverde, Phys. Rev. C 70,
60  /// 055503 (2004)
61  xs *= 2. * genie::constants::kPi * k_initial
62  / (k_final * genie::constants::kGF2);
63  }
64  else if ( probe_pdg == kPdgElectron ) {
65  /// See equation (82) of Gil, Nieves, and Oset, Nucl. Phys. A 627, 543
66  /// (1997)
67  xs *= std::pow(q2 / genie::constants::kAem, 2) * k_initial / k_final
68  / (2. * genie::constants::kPi);
69  }
70  else {
71  LOG("TabulatedHadronTensor", pERROR)
72  << "Unknown probe PDG code " << probe_pdg
73  << "encountered.";
74  return 0.;
75  }
76 
77  return xs;
78 }
bool IsNeutrino(int pdgc)
Definition: PDGUtils.cxx:107
#define pERROR
Definition: Messenger.h:59
constexpr T pow(T x)
Definition: pow.h:72
virtual double dSigma_dT_dCosTheta(const Interaction *interaction, double Q_value) const =0
const int kPdgElectron
Definition: PDGCodes.h:35
static const double kAem
Definition: Constants.h:56
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
bool IsAntiNeutrino(int pdgc)
Definition: PDGUtils.cxx:115
static int max(int a, int b)
static const double kGF2
Definition: Constants.h:59
static const double kPi
Definition: Constants.h:37
virtual double genie::LabFrameHadronTensorI::dSigma_dT_dCosTheta ( const Interaction interaction,
double  Q_value 
) const
pure virtual

Computes the differential cross section $\frac{ d^2\sigma } { dT_\ell d\cos(\theta^\prime) }$ for the reaction represented by this hadron tensor

Parameters
[in]interactionAn Interaction object storing information about the initial and final states
[in]Q_valueThe Q-value that should be used to correct the energy transfer $q_0$ (GeV)
Returns
The differential cross section (GeV-3)

Implemented in genie::TabulatedLabFrameHadronTensor.

virtual double genie::LabFrameHadronTensorI::dSigma_dT_dCosTheta ( int  probe_pdg,
double  E_probe,
double  m_probe,
double  Tl,
double  cos_l,
double  ml,
double  Q_value 
) const
pure virtual

Parameters
[in]probe_pdgThe PDG code for the incident projectile
[in]E_probeThe lab frame energy of the incident projectile (GeV)
[in]m_probeThe mass of the incident projectile (GeV)
[in]TlThe lab frame kinetic energy of the final state lepton (GeV)
[in]cos_lThe angle between the direction of the incident neutrino and the final state lepton (radians)
[in]mlThe mass of the final state lepton (GeV)
[in]Q_valueThe Q-value that should be used to correct the energy transfer $q_0$ (GeV)
Returns
The differential cross section (GeV-3)

Implemented in genie::TabulatedLabFrameHadronTensor.

virtual double genie::LabFrameHadronTensorI::dSigma_dT_dCosTheta_rosenbluth ( const Interaction interaction,
double  Q_value 
) const
pure virtual
virtual double genie::LabFrameHadronTensorI::dSigma_dT_dCosTheta_rosenbluth ( int  probe_pdg,
double  E_probe,
double  m_probe,
double  Tl,
double  cos_l,
double  ml,
double  Q_value 
) const
pure virtual
virtual std::complex<double> genie::LabFrameHadronTensorI::tx ( double  ,
double   
) const
inlinevirtual

The tensor element $W^{0x}$.

Implements genie::HadronTensorI.

Definition at line 92 of file LabFrameHadronTensorI.h.

93  { return std::complex<double>(0., 0.); }
virtual std::complex<double> genie::LabFrameHadronTensorI::ty ( double  ,
double   
) const
inlinevirtual

The tensor element $W^{0y}$.

Implements genie::HadronTensorI.

Definition at line 96 of file LabFrameHadronTensorI.h.

97  { return std::complex<double>(0., 0.); }
virtual double genie::LabFrameHadronTensorI::W1 ( double  q0,
double  q_mag,
double  Mi 
) const
pure virtual

The structure function $W_1 = \frac{ W^{xx} }{ 2M_i }$.

Implemented in genie::TabulatedLabFrameHadronTensor.

virtual double genie::LabFrameHadronTensorI::W2 ( double  q0,
double  q_mag,
double  Mi 
) const
pure virtual

The structure function $W_2 = \frac{ 1 }{ 2M_i } \left( W^{00} + W^{xx} + \frac{ (q^0)^2 } { \left|\overrightarrow{q}\right|^2 } ( W^{zz} - W^{xx} ) - 2\frac{ q^0 }{ \left|\overrightarrow{q}\right| }\Re W^{0z} \right) $

Implemented in genie::TabulatedLabFrameHadronTensor.

virtual double genie::LabFrameHadronTensorI::W3 ( double  q0,
double  q_mag,
double  Mi 
) const
pure virtual

The structure function $ W_3 = -i \frac{ W^{xy} } { \left|\overrightarrow{q}\right| } $

Implemented in genie::TabulatedLabFrameHadronTensor.

virtual double genie::LabFrameHadronTensorI::W4 ( double  q0,
double  q_mag,
double  Mi 
) const
pure virtual

The structure function $ W_4 = \frac{ M_i } { 2 \left|\overrightarrow{q}\right|^2 } ( W^{zz} - W^{xx} ) $

Implemented in genie::TabulatedLabFrameHadronTensor.

virtual double genie::LabFrameHadronTensorI::W5 ( double  q0,
double  q_mag,
double  Mi 
) const
pure virtual

The structure function $ W_5 = \frac{ 1 } { \left|\overrightarrow{q}\right| } \left( \Re W^{0z} - \frac{ q^0 }{ \left|\overrightarrow{q}\right| } ( W^{zz} - W^{xx} ) \right) $

Implemented in genie::TabulatedLabFrameHadronTensor.

virtual double genie::LabFrameHadronTensorI::W6 ( double  q0,
double  q_mag,
double  Mi 
) const
pure virtual

The structure function $ W_6 = \frac{ \Im W^{0z} } { \left|\overrightarrow{q}\right| } $

Implemented in genie::TabulatedLabFrameHadronTensor.

virtual std::complex<double> genie::LabFrameHadronTensorI::xt ( double  q0,
double  q_mag 
) const
inlinevirtual

The tensor element $W^{x0} = (W^{0x})^*$.

Implements genie::HadronTensorI.

Definition at line 100 of file LabFrameHadronTensorI.h.

101  { return std::conj( this->tx(q0, q_mag) ); }
virtual std::complex< double > tx(double, double) const
The tensor element .
virtual std::complex<double> genie::LabFrameHadronTensorI::xz ( double  ,
double   
) const
inlinevirtual

The tensor element $W^{xz}$.

Implements genie::HadronTensorI.

Definition at line 104 of file LabFrameHadronTensorI.h.

105  { return std::complex<double>(0., 0.); }
virtual std::complex<double> genie::LabFrameHadronTensorI::yt ( double  q0,
double  q_mag 
) const
inlinevirtual

The tensor element $W^{y0} = (W^{0y})^*$.

Implements genie::HadronTensorI.

Definition at line 108 of file LabFrameHadronTensorI.h.

109  { return std::conj( this->ty(q0, q_mag) ); }
virtual std::complex< double > ty(double, double) const
The tensor element .
virtual std::complex<double> genie::LabFrameHadronTensorI::yx ( double  q0,
double  q_mag 
) const
inlinevirtual

The tensor element $W^{yx} = (W^{xy})^*$.

Implements genie::HadronTensorI.

Definition at line 112 of file LabFrameHadronTensorI.h.

113  { return std::conj( this->xy(q0, q_mag) ); }
virtual std::complex< double > xy(double q0, double q_mag) const =0
The tensor element .
virtual std::complex<double> genie::LabFrameHadronTensorI::yy ( double  q0,
double  q_mag 
) const
inlinevirtual

The tensor element $W^{yy}$.

Implements genie::HadronTensorI.

Definition at line 116 of file LabFrameHadronTensorI.h.

117  { return this->xx(q0, q_mag); }
virtual std::complex< double > xx(double q0, double q_mag) const =0
The tensor element .
virtual std::complex<double> genie::LabFrameHadronTensorI::yz ( double  ,
double   
) const
inlinevirtual

The tensor element $W^{yz}$.

Implements genie::HadronTensorI.

Definition at line 120 of file LabFrameHadronTensorI.h.

121  { return std::complex<double>(0., 0.); }
virtual std::complex<double> genie::LabFrameHadronTensorI::zt ( double  q0,
double  q_mag 
) const
inlinevirtual

The tensor element $W^{z0} = (W^{0z})^*$.

Implements genie::HadronTensorI.

Definition at line 124 of file LabFrameHadronTensorI.h.

125  { return std::conj( this->tz(q0, q_mag) ); }
virtual std::complex< double > tz(double q0, double q_mag) const =0
The tensor element .
virtual std::complex<double> genie::LabFrameHadronTensorI::zx ( double  q0,
double  q_mag 
) const
inlinevirtual

The tensor element $W^{zx} = (W^{xz})^*$.

Implements genie::HadronTensorI.

Definition at line 128 of file LabFrameHadronTensorI.h.

129  { return std::conj( this->xz(q0, q_mag) ); }
virtual std::complex< double > xz(double, double) const
The tensor element .
virtual std::complex<double> genie::LabFrameHadronTensorI::zy ( double  q0,
double  q_mag 
) const
inlinevirtual

The tensor element $W^{zy} = (W^{yz})^*$.

Implements genie::HadronTensorI.

Definition at line 132 of file LabFrameHadronTensorI.h.

133  { return std::conj( this->yz(q0, q_mag) ); }
virtual std::complex< double > yz(double, double) const
The tensor element .

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