GENIEGenerator
Loading...
Searching...
No Matches
LabFrameHadronTensorI.h
Go to the documentation of this file.
1//____________________________________________________________________________
2/*!
3
4\class genie::LabFrameHadronTensorI
5
6\brief Abstract interface for an object that computes the elements
7 (\f$W^{xx}\f$, \f$W^{0z}\f$, etc.) and structure functions
8 (\f$W_1\f$, \f$W_2\f$, etc.) of
9 the hadron tensor \f$W^{\mu\nu}\f$ defined according to the
10 conventions of the Valencia model.
11
12\details For (anti)neutrino projectiles, the hadron tensor \f$W^{\mu\nu}\f$
13 is defined as in equations (8) and (9) of
14
15 J. Nieves, J. E. Amaro, and M. Valverde,
16 "Inclusive Quasi-Elastic Charged-Current Neutrino-Nucleus Reactions,"
17 Phys. Rev. C 70, 055503 (2004)
18 https://doi.org/10.1103/PhysRevC.70.055503
19 https://arxiv.org/abs/nucl-th/0408005v3
20
21 Note that the associated erratum includes an important correction
22 in the formula for the differential cross section:
23
24 J. Nieves, J. E. Amaro, and M. Valverde,
25 "Erratum: Inclusive quasielastic charged-current neutrino-nucleus
26 reactions [Phys. Rev. C 70, 055503 (2004)],"
27 Phys. Rev. C. 72, 019902 (2005)
28 http://doi.org/10.1103/PhysRevC.72.019902
29
30 The calculation is carried out in the lab frame (i.e., the frame
31 where the target nucleus has initial 4-momentum
32 \f$P^\mu = (M_i, \overrightarrow{0})\f$) with the 3-momentum
33 transfer \f$\overrightarrow{q}\f$ chosen to lie along the
34 z axis, i.e., \f$q = (q^0, |\overrightarrow{q}|
35 \overrightarrow{u}_z)\f$. With this choice of frame, the only
36 nonzero elements are \f$W^{00}\f$, \f$W^{0z} = (W^{z0})^*\f$,
37 \f$W^{xx} = W^{yy}\f$, \f$W^{xy} = (W^{yx})^*\f$, and \f$W^{zz}\f$.
38
39 For an electron projectile, the hadron tensor is defined as in
40 equation (83) of
41
42 A. Gil, J. Nieves, and E. Oset,
43 "Many-body approach to the inclusive \f$(e,e^\prime)\f$ reaction
44 from the quasielastic to the \f$\Delta\f$ excitation region,"
45 Nuclear Physics A 627, 543-598 (1997)
46 http://doi.org/10.1016/S0375-9474(97)00513-7
47
48 It is evaluated in the same reference frame as the neutrino case.
49
50\author Steven Gardiner <gardiner \at fnal.gov>
51 Fermi National Accelerator Laboratory
52
53\created August 23, 2018
54
55\cpright Copyright (c) 2003-2025, The GENIE Collaboration
56 For the full text of the license visit http://copyright.genie-mc.org
57 or see $GENIE/LICENSE
58*/
59//____________________________________________________________________________
60
61#ifndef VALENCIA_HADRON_TENSORI_H
62#define VALENCIA_HADRON_TENSORI_H
63
64// standard library includes
65#include <complex>
66
67// GENIE includes
71
72namespace genie {
73
75
76public:
77
78 inline virtual ~LabFrameHadronTensorI() {}
79
80 /// \name Tensor elements
81 /// \brief Functions that return the elements of the tensor. Since it is
82 /// Hermitian, only ten elements are independent. Although a return type of
83 /// std::complex<double> is used for all elements, note that hermiticity
84 /// implies that the diagonal elements must be real.
85 /// \param[in] q0 The energy transfer \f$q^0\f$ in the lab frame (GeV)
86 /// \param[in] q_mag The magnitude of the 3-momentum transfer
87 /// \f$\left|\overrightarrow{q}\right|\f$ in the lab frame (GeV)
88 /// \retval std::complex<double> The value of the hadronic tensor element
89 /// @{
90
91 /// The tensor element \f$W^{0x}\f$
92 inline virtual std::complex<double> tx(double /*q0*/, double /*q_mag*/) const
93 { return std::complex<double>(0., 0.); }
94
95 /// The tensor element \f$W^{0y}\f$
96 inline virtual std::complex<double> ty(double /*q0*/, double /*q_mag*/) const
97 { return std::complex<double>(0., 0.); }
98
99 /// The tensor element \f$W^{x0} = (W^{0x})^*\f$
100 inline virtual std::complex<double> xt(double q0, double q_mag) const
101 { return std::conj( this->tx(q0, q_mag) ); }
102
103 /// The tensor element \f$W^{xz}\f$
104 inline virtual std::complex<double> xz(double /*q0*/, double /*q_mag*/) const
105 { return std::complex<double>(0., 0.); }
106
107 /// The tensor element \f$W^{y0} = (W^{0y})^*\f$
108 inline virtual std::complex<double> yt(double q0, double q_mag) const
109 { return std::conj( this->ty(q0, q_mag) ); }
110
111 /// The tensor element \f$W^{yx} = (W^{xy})^*\f$
112 inline virtual std::complex<double> yx(double q0, double q_mag) const
113 { return std::conj( this->xy(q0, q_mag) ); }
114
115 /// The tensor element \f$W^{yy}\f$
116 inline virtual std::complex<double> yy(double q0, double q_mag) const
117 { return this->xx(q0, q_mag); }
118
119 /// The tensor element \f$W^{yz}\f$
120 inline virtual std::complex<double> yz(double /*q0*/, double /*q_mag*/) const
121 { return std::complex<double>(0., 0.); }
122
123 /// The tensor element \f$W^{z0} = (W^{0z})^*\f$
124 inline virtual std::complex<double> zt(double q0, double q_mag) const
125 { return std::conj( this->tz(q0, q_mag) ); }
126
127 /// The tensor element \f$W^{zx} = (W^{xz})^*\f$
128 inline virtual std::complex<double> zx(double q0, double q_mag) const
129 { return std::conj( this->xz(q0, q_mag) ); }
130
131 /// The tensor element \f$W^{zy} = (W^{yz})^*\f$
132 inline virtual std::complex<double> zy(double q0, double q_mag) const
133 { return std::conj( this->yz(q0, q_mag) ); }
134
135 /// @}
136
137 /// \name Structure functions
138 /// \param[in] q0 The energy transfer \f$q^0\f$ in the lab frame (GeV)
139 /// \param[in] q_mag The magnitude of the 3-momentum transfer
140 /// \f$\left|\overrightarrow{q}\right|\f$ in the lab frame (GeV)
141 /// \param[in] Mi The mass of the target nucleus \f$M_i\f$ (GeV)
142 /// @{
143
144 /// The structure function \f$W_1 = \frac{ W^{xx} }{ 2M_i }\f$
145 virtual double W1(double q0, double q_mag, double Mi) const = 0;
146
147 /// The structure function \f$W_2 = \frac{ 1 }{ 2M_i }
148 /// \left( W^{00} + W^{xx} + \frac{ (q^0)^2 }
149 /// { \left|\overrightarrow{q}\right|^2 } ( W^{zz} - W^{xx} )
150 /// - 2\frac{ q^0 }{ \left|\overrightarrow{q}\right| }\Re W^{0z}
151 /// \right) \f$
152 virtual double W2(double q0, double q_mag, double Mi) const = 0;
153
154 /// The structure function \f$ W_3 = -i \frac{ W^{xy} }
155 /// { \left|\overrightarrow{q}\right| } \f$
156 virtual double W3(double q0, double q_mag, double Mi) const = 0;
157
158 /// The structure function \f$ W_4 = \frac{ M_i }
159 /// { 2 \left|\overrightarrow{q}\right|^2 } ( W^{zz} - W^{xx} ) \f$
160 virtual double W4(double q0, double q_mag, double Mi) const = 0;
161
162 /// The structure function \f$ W_5 = \frac{ 1 }
163 /// { \left|\overrightarrow{q}\right| }
164 /// \left( \Re W^{0z} - \frac{ q^0 }{ \left|\overrightarrow{q}\right| }
165 /// ( W^{zz} - W^{xx} ) \right) \f$
166 virtual double W5(double q0, double q_mag, double Mi) const = 0;
167
168 /// The structure function \f$ W_6 = \frac{ \Im W^{0z} }
169 /// { \left|\overrightarrow{q}\right| } \f$
170 virtual double W6(double q0, double q_mag, double Mi) const = 0;
171 /// @}
172
173 virtual double contraction(const Interaction* interaction,
174 double Q_value) const /*override*/;
175
176 /// \copybrief contraction(const Interaction*)
177 /// \param[in] probe_pdg The PDG code for the incident projectile
178 /// \param[in] E_probe The lab frame energy of the incident projectile (GeV)
179 /// \param[in] m_probe The mass of the incident projectile (GeV)
180 /// \param[in] Tl The lab frame kinetic energy of the final state lepton (GeV)
181 /// \param[in] cos_l The angle between the direction of the incident
182 /// neutrino and the final state lepton (radians)
183 /// \param[in] ml The mass of the final state lepton (GeV)
184 /// \param[in] Q_value The Q-value that should be used to correct
185 /// the energy transfer \f$q_0\f$ (GeV)
186 /// \returns The tensor contraction \f$L_{\mu\nu}W^{\mu\nu}\f$ (GeV)
187 virtual double contraction(int probe_pdg, double E_probe, double m_probe,
188 double Tl, double cos_l, double ml, double Q_value) const;
189
190 /// Computes the differential cross section \f$\frac{ d^2\sigma } { dT_\ell
191 /// d\cos(\theta^\prime) }\f$ for the reaction represented by this hadron
192 /// tensor
193 /// \param[in] interaction An Interaction object storing information about
194 /// the initial and final states
195 /// \param[in] Q_value The Q-value that should be used to correct
196 /// the energy transfer \f$q_0\f$ (GeV)
197 /// \returns The differential cross section (GeV<sup>-3</sup>)
198 virtual double dSigma_dT_dCosTheta(const Interaction* interaction,
199 double Q_value) const = 0;
200
201 /// \copybrief dSigma_dT_dCosTheta(const Interaction*, double)
202 /// \param[in] probe_pdg The PDG code for the incident projectile
203 /// \param[in] E_probe The lab frame energy of the incident projectile (GeV)
204 /// \param[in] m_probe The mass of the incident projectile (GeV)
205 /// \param[in] Tl The lab frame kinetic energy of the final state lepton (GeV)
206 /// \param[in] cos_l The angle between the direction of the incident
207 /// neutrino and the final state lepton (radians)
208 /// \param[in] ml The mass of the final state lepton (GeV)
209 /// \param[in] Q_value The Q-value that should be used to correct
210 /// the energy transfer \f$q_0\f$ (GeV)
211 /// \returns The differential cross section (GeV<sup>-3</sup>)
212 virtual double dSigma_dT_dCosTheta(int probe_pdg, double E_probe,
213 double m_probe, double Tl, double cos_l, double ml, double Q_value)
214 const /*override*/ = 0;
215
216
217 //As above but using the rosenbluth formalism: should give the same result!
218 virtual double dSigma_dT_dCosTheta_rosenbluth(const Interaction* interaction,
219 double Q_value) const = 0;
220 virtual double dSigma_dT_dCosTheta_rosenbluth(int probe_pdg, double E_probe,
221 double m_probe, double Tl, double cos_l, double ml, double Q_value)
222 const /*override*/ = 0;
223
224protected:
225
227
228 inline LabFrameHadronTensorI(int Z, int A) : HadronTensorI(Z, A) {}
229
230}; // class LabFrameHadronTensorI
231
232} // genie namespace
233#endif
int Z() const
Atomic number of the target nucleus.
int A() const
Mass number of the target nucleus.
int pdg() const
PDG code of the target nucleus.
virtual std::complex< double > xy(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > tz(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > xx(double q0, double q_mag) const =0
The tensor element .
Summary information for an interaction.
Definition Interaction.h:56
virtual double W6(double q0, double q_mag, double Mi) const =0
virtual std::complex< double > zx(double q0, double q_mag) const
The tensor element .
virtual double W3(double q0, double q_mag, double Mi) const =0
virtual std::complex< double > yt(double q0, double q_mag) const
The tensor element .
virtual std::complex< double > zy(double q0, double q_mag) const
The tensor element .
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 std::complex< double > zt(double q0, double q_mag) const
The tensor element .
virtual std::complex< double > xt(double q0, double q_mag) const
The tensor element .
virtual double dSigma_dT_dCosTheta_rosenbluth(const Interaction *interaction, double Q_value) const =0
virtual std::complex< double > tx(double, double) const
The tensor element .
virtual std::complex< double > xz(double, double) const
The tensor element .
virtual std::complex< double > yx(double q0, double q_mag) const
The tensor element .
virtual double contraction(const Interaction *interaction, double Q_value) const
virtual double W1(double q0, double q_mag, double Mi) const =0
The structure function .
virtual std::complex< double > ty(double, double) const
The tensor element .
virtual std::complex< double > yy(double q0, double q_mag) const
The tensor element .
virtual double dSigma_dT_dCosTheta(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
virtual double W5(double q0, double q_mag, double Mi) const =0
virtual std::complex< double > yz(double, double) const
The tensor element .
virtual double W2(double q0, double q_mag, double Mi) const =0
virtual double W4(double q0, double q_mag, double Mi) const =0
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25