GENIEGenerator
Loading...
Searching...
No Matches
HadronTensorI.h
Go to the documentation of this file.
1//____________________________________________________________________________
2/*!
3
4\class genie::HadronTensorI
5
6\brief Abstract interface for an object that computes the elements
7 a hadron tensor \f$W^{\mu\nu}\f$. Also computes the contraction
8 of the hadron tensor with the lepton tensor
9 \f$L_{\mu\nu}W^{\mu\nu}\f$ for one or more kinds of projectile
10 (e.g., neutrinos, electrons)
11
12\author Steven Gardiner <gardiner \at fnal.gov>
13 Liang Liu <liangliu \at fnal.gov>
14 Fermi National Accelerator Laboratory
15
16\created August 23, 2018
17
18\cpright Copyright (c) 2003-2025, The GENIE Collaboration
19 For the full text of the license visit http://copyright.genie-mc.org
20 or see $GENIE/LICENSE
21
22*/
23//____________________________________________________________________________
24
25#ifndef HADRON_TENSORI_H
26#define HADRON_TENSORI_H
27
28// standard library includes
29#include <complex>
30
31// GENIE includes
34
35namespace genie {
36
37/// Enumerated type that describes the physics represented by a particular
38/// hadron tensor
39/// \todo Document enum values
94
96
97public:
98
99 inline virtual ~HadronTensorI() {}
100
101 /// \name Tensor elements
102 /// \brief Functions that return the elements of the tensor.
103 /// \param[in] q0 The energy transfer \f$q^0\f$ in the lab frame (GeV)
104 /// \param[in] q_mag The magnitude of the 3-momentum transfer
105 /// \f$\left|\overrightarrow{q}\right|\f$ in the lab frame (GeV)
106 /// \retval std::complex<double> The value of the hadronic tensor element
107 /// @{
108
109 /// The tensor element \f$W^{00}\f$
110 virtual std::complex<double> tt(double q0, double q_mag) const = 0;
111
112 /// The tensor element \f$W^{0x}\f$
113 virtual std::complex<double> tx(double q0, double q_mag) const = 0;
114
115 /// The tensor element \f$W^{0y}\f$
116 virtual std::complex<double> ty(double q0, double q_mag) const = 0;
117
118 /// The tensor element \f$W^{0z}\f$
119 virtual std::complex<double> tz(double q0, double q_mag) const = 0;
120
121 /// The tensor element \f$W^{x0} = (W^{0x})^*\f$
122 virtual std::complex<double> xt(double q0, double q_mag) const = 0;
123
124 /// The tensor element \f$W^{xx}\f$
125 virtual std::complex<double> xx(double q0, double q_mag) const = 0;
126
127 /// The tensor element \f$W^{xy}\f$
128 virtual std::complex<double> xy(double q0, double q_mag) const = 0;
129
130 /// The tensor element \f$W^{xz}\f$
131 virtual std::complex<double> xz(double q0, double q_mag) const = 0;
132
133 /// The tensor element \f$W^{y0} = (W^{0y})^*\f$
134 virtual std::complex<double> yt(double q0, double q_mag) const = 0;
135
136 /// The tensor element \f$W^{yx} = (W^{xy})^*\f$
137 virtual std::complex<double> yx(double q0, double q_mag) const = 0;
138
139 /// The tensor element \f$W^{yy}\f$
140 virtual std::complex<double> yy(double q0, double q_mag) const = 0;
141
142 /// The tensor element \f$W^{yz}\f$
143 virtual std::complex<double> yz(double q0, double q_mag) const = 0;
144
145 /// The tensor element \f$W^{z0} = (W^{0z})^*\f$
146 virtual std::complex<double> zt(double q0, double q_mag) const = 0;
147
148 /// The tensor element \f$W^{zx} = (W^{xz})^*\f$
149 virtual std::complex<double> zx(double q0, double q_mag) const = 0;
150
151 /// The tensor element \f$W^{zy} = (W^{yz})^*\f$
152 virtual std::complex<double> zy(double q0, double q_mag) const = 0;
153
154 /// The tensor element \f$W^{zz}\f$
155 virtual std::complex<double> zz(double q0, double q_mag) const = 0;
156 /// @}
157
158 /// Computes the contraction \f$L_{\mu\nu}W^{\mu\nu}\f$ of the hadron tensor
159 /// with the appropriate lepton tensor for a given type of projectile
160 /// (e.g., neutrino, electron)
161 /// \param[in] interaction An Interaction object storing information about the
162 /// initial and final states
163 /// \param[in] Q_value The Q-value that should be used to correct
164 /// the energy transfer \f$q_0\f$ (GeV)
165 /// \returns The tensor contraction \f$L_{\mu\nu}W^{\mu\nu}\f$ (GeV)
166 virtual double contraction(const Interaction* interaction,
167 double Q_value) const = 0;
168
169 /// PDG code of the target nucleus
170 inline int pdg() const { return fTargetPDG; }
171
172 /// Atomic number of the target nucleus
173 inline int Z() const { return genie::pdg::IonPdgCodeToZ(fTargetPDG); }
174
175 /// Mass number of the target nucleus
176 inline int A() const { return genie::pdg::IonPdgCodeToA(fTargetPDG); }
177
178 /// Set the target nucleus PDG code
179 inline void set_pdg(int pdg) { fTargetPDG = pdg; }
180
181 /// The minimum value of the energy transfer \f$q^0\f$ for which this
182 /// hadron tensor may be used to compute cross sections
183 virtual double q0Min() const = 0;
184
185 /// The maximum value of the energy transfer \f$q^0\f$ for which this
186 /// hadron tensor may be used to compute cross sections
187 virtual double q0Max() const = 0;
188
189 /// The minimum value of the magnitude of the 3-momentum transfer
190 /// \f$\left|\overrightarrow{q}\right|\f$ for which this
191 /// hadron tensor may be used to compute cross sections
192 virtual double qMagMin() const = 0;
193
194 /// The maximum value of the magnitude of the 3-momentum transfer
195 /// \f$\left|\overrightarrow{q}\right|\f$ for which this
196 /// hadron tensor may be used to compute cross sections
197 virtual double qMagMax() const = 0;
198
199protected:
200
201 inline HadronTensorI(int pdg = 0) : fTargetPDG(pdg) {}
202
203 inline HadronTensorI(int Z, int A)
204 : fTargetPDG( genie::pdg::IonPdgCode(A, Z) ) {}
205
206 ///< PDG code for the target nucleus represented by the tensor
208
209}; // class HadronTensorI
210
211} // genie namespace
212#endif
virtual std::complex< double > yx(double q0, double q_mag) const =0
The tensor element .
void set_pdg(int pdg)
Set the target nucleus PDG code.
virtual std::complex< double > xt(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > zx(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > yy(double q0, double q_mag) const =0
The tensor element .
int Z() const
Atomic number of the target nucleus.
virtual std::complex< double > yt(double q0, double q_mag) const =0
The tensor element .
int A() const
Mass number of the target nucleus.
virtual std::complex< double > tt(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > ty(double q0, double q_mag) const =0
The tensor element .
virtual double q0Min() const =0
virtual std::complex< double > zt(double q0, double q_mag) const =0
The tensor element .
HadronTensorI(int Z, int A)
PDG code for the target nucleus represented by the tensor.
int pdg() const
PDG code of the target nucleus.
virtual std::complex< double > zy(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > yz(double q0, double q_mag) const =0
The tensor element .
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 double qMagMax() const =0
virtual double q0Max() const =0
virtual std::complex< double > xx(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > zz(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > tx(double q0, double q_mag) const =0
The tensor element .
virtual double qMagMin() const =0
virtual std::complex< double > xz(double q0, double q_mag) const =0
The tensor element .
virtual double contraction(const Interaction *interaction, double Q_value) const =0
Summary information for an interaction.
Definition Interaction.h:56
int IonPdgCodeToZ(int pdgc)
Definition PDGUtils.cxx:55
int IonPdgCodeToA(int pdgc)
Definition PDGUtils.cxx:63
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25
@ kHT_QE_CRPA_anu_Low
@ kHT_MEC_Deltapn
@ kHT_QE_HF_High
@ kHT_QE_CRPA_anu_Medium
@ kHT_QE_CRPAPW_Low
@ kHT_MEC_EM_pn
@ kHT_QE_Full
@ kHT_QE_HFPW_High
@ kHT_QE_SuSABlend_anu
@ kHT_QE_CRPA_Medium
@ kHT_MEC_FullAll
@ kHT_QE_HFPW_Medium
@ kHT_MEC_FullAll_wImag
@ kHT_MEC_DeltaAll
@ kHT_QE_HF_anu_Medium
@ kHT_QE_CRPAPW_anu_Medium
@ kHT_QE_HFPW_anu_Low
@ kHT_QE_HF_anu_High
@ kHT_QE_HFPW_Low
@ kHT_QE_CRPAPW_anu_High
@ kHT_QE_CRPAPW_anu_Low
@ kHT_QE_EM_neutron
@ kHT_QE_HF_Low
@ kHT_MEC_EM_pp
@ kHT_QE_EM_proton
@ kHT_QE_SuSABlend
@ kHT_QE_HFPW_anu_High
@ kHT_QE_HF_anu_Low
@ kHT_MEC_Fullpn
@ kHT_QE_CRPA_Low
@ kHT_QE_CRPAPW_High
@ kHT_MEC_EM_wImag
@ kHT_QE_HF_Medium
@ kHT_QE_CRPAPW_Medium
@ kHT_QE_HFPW_anu_Medium
@ kHT_QE_CRPA_anu_High
@ kHT_Undefined
@ kHT_QE_CRPA_High
@ kHT_MEC_FullAll_Param
enum genie::HadronTensorType HadronTensorType_t