GENIEGenerator
Loading...
Searching...
No Matches
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:
[legend]
Collaboration diagram for genie::LabFrameHadronTensorI:
[legend]

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}$.
virtual std::complex< double > ty (double, double) const
 The tensor element $W^{0y}$.
virtual std::complex< double > xt (double q0, double q_mag) const
 The tensor element $W^{x0} = (W^{0x})^*$.
virtual std::complex< double > xz (double, double) const
 The tensor element $W^{xz}$.
virtual std::complex< double > yt (double q0, double q_mag) const
 The tensor element $W^{y0} = (W^{0y})^*$.
virtual std::complex< double > yx (double q0, double q_mag) const
 The tensor element $W^{yx} = (W^{xy})^*$.
virtual std::complex< double > yy (double q0, double q_mag) const
 The tensor element $W^{yy}$.
virtual std::complex< double > yz (double, double) const
 The tensor element $W^{yz}$.
virtual std::complex< double > zt (double q0, double q_mag) const
 The tensor element $W^{z0} = (W^{0z})^*$.
virtual std::complex< double > zx (double q0, double q_mag) const
 The tensor element $W^{zx} = (W^{xz})^*$.
virtual std::complex< double > zy (double q0, double q_mag) const
 The tensor element $W^{zy} = (W^{yz})^*$.
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 }$.
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.
int Z () const
 Atomic number of the target nucleus.
int A () const
 Mass number of the target nucleus.
void set_pdg (int pdg)
 Set the target nucleus PDG code.
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}$.
virtual std::complex< double > tz (double q0, double q_mag) const =0
 The tensor element $W^{0z}$.
virtual std::complex< double > xx (double q0, double q_mag) const =0
 The tensor element $W^{xx}$.
virtual std::complex< double > xy (double q0, double q_mag) const =0
 The tensor element $W^{xy}$.
virtual std::complex< double > zz (double q0, double q_mag) const =0
 The tensor element $W^{zz}$.

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.

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#29 reaction from the quasielastic to the \_form#30 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 \at fnal.gov> Fermi National Accelerator Laboratory
Created:\n August 23, 2018
License:\n Copyright (c) 2003-2025, 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

◆ ~LabFrameHadronTensorI()

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

Definition at line 78 of file LabFrameHadronTensorI.h.

78{}

◆ LabFrameHadronTensorI() [1/2]

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.

References genie::HadronTensorI::HadronTensorI(), and genie::HadronTensorI::pdg().

◆ LabFrameHadronTensorI() [2/2]

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.
int A() const
Mass number of the target nucleus.

References genie::HadronTensorI::A(), genie::HadronTensorI::HadronTensorI(), and genie::HadronTensorI::Z().

Member Function Documentation

◆ contraction() [1/2]

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
@ kKVTl
Definition KineVar.h:38
@ kKVctl
Definition KineVar.h:39
@ kRfLab
Definition RefFrame.h:26

References contraction(), genie::Interaction::FSPrimLepton(), genie::Kinematics::GetKV(), genie::Interaction::InitState(), genie::Interaction::Kine(), genie::kKVctl, genie::kKVTl, genie::kRfLab, genie::InitialState::Probe(), genie::InitialState::ProbeE(), and genie::InitialState::ProbePdg().

Referenced by contraction().

◆ contraction() [2/2]

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}
#define pERROR
Definition Messenger.h:59
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
virtual double dSigma_dT_dCosTheta(const Interaction *interaction, double Q_value) const =0
bool IsNeutrino(int pdgc)
Definition PDGUtils.cxx:110
bool IsAntiNeutrino(int pdgc)
Definition PDGUtils.cxx:118
const int kPdgElectron
Definition PDGCodes.h:35

References dSigma_dT_dCosTheta(), genie::pdg::IsAntiNeutrino(), genie::pdg::IsNeutrino(), genie::constants::kAem, genie::constants::kGF2, genie::kPdgElectron, genie::constants::kPi, LOG, and pERROR.

◆ dSigma_dT_dCosTheta() [1/2]

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.

Referenced by contraction(), and genie::NievesSimoVacasMECPXSec2016::XSec().

◆ dSigma_dT_dCosTheta() [2/2]

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.

◆ dSigma_dT_dCosTheta_rosenbluth() [1/2]

virtual double genie::LabFrameHadronTensorI::dSigma_dT_dCosTheta_rosenbluth ( const Interaction * interaction,
double Q_value ) const
pure virtual

◆ dSigma_dT_dCosTheta_rosenbluth() [2/2]

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

◆ tx()

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.); }

Referenced by xt().

◆ ty()

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.); }

Referenced by yt().

◆ W1()

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.

◆ W2()

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.

◆ W3()

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.

◆ W4()

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.

◆ W5()

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.

◆ W6()

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.

◆ xt()

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 .

References tx().

◆ xz()

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.); }

Referenced by zx().

◆ yt()

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 .

References ty().

◆ yx()

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 .

References genie::HadronTensorI::xy().

◆ yy()

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 .

References genie::HadronTensorI::xx().

◆ yz()

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.); }

Referenced by zy().

◆ zt()

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 .

References genie::HadronTensorI::tz().

◆ zx()

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 .

References xz().

◆ zy()

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 .

References yz().


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