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  Fermi National Accelerator Laboratory
14 
15 \created August 23, 2018
16 
17 \cpright Copyright (c) 2003-2018, The GENIE Collaboration
18  For the full text of the license visit http://copyright.genie-mc.org
19  or see $GENIE/LICENSE
20 */
21 //____________________________________________________________________________
22 
23 #ifndef HADRON_TENSORI_H
24 #define HADRON_TENSORI_H
25 
26 // standard library includes
27 #include <complex>
28 
29 // GENIE includes
32 
33 namespace genie {
34 
35 /// Enumerated type that describes the physics represented by a particular
36 /// hadron tensor
37 /// \todo Document enum values
38 typedef enum HadronTensorType {
50 }
52 
54 
55 public:
56 
57  inline virtual ~HadronTensorI() {}
58 
59  /// \name Tensor elements
60  /// \brief Functions that return the elements of the tensor.
61  /// \param[in] q0 The energy transfer \f$q^0\f$ in the lab frame (GeV)
62  /// \param[in] q_mag The magnitude of the 3-momentum transfer
63  /// \f$\left|\overrightarrow{q}\right|\f$ in the lab frame (GeV)
64  /// \retval std::complex<double> The value of the hadronic tensor element
65  /// @{
66 
67  /// The tensor element \f$W^{00}\f$
68  virtual std::complex<double> tt(double q0, double q_mag) const = 0;
69 
70  /// The tensor element \f$W^{0x}\f$
71  virtual std::complex<double> tx(double q0, double q_mag) const = 0;
72 
73  /// The tensor element \f$W^{0y}\f$
74  virtual std::complex<double> ty(double q0, double q_mag) const = 0;
75 
76  /// The tensor element \f$W^{0z}\f$
77  virtual std::complex<double> tz(double q0, double q_mag) const = 0;
78 
79  /// The tensor element \f$W^{x0} = (W^{0x})^*\f$
80  virtual std::complex<double> xt(double q0, double q_mag) const = 0;
81 
82  /// The tensor element \f$W^{xx}\f$
83  virtual std::complex<double> xx(double q0, double q_mag) const = 0;
84 
85  /// The tensor element \f$W^{xy}\f$
86  virtual std::complex<double> xy(double q0, double q_mag) const = 0;
87 
88  /// The tensor element \f$W^{xz}\f$
89  virtual std::complex<double> xz(double q0, double q_mag) const = 0;
90 
91  /// The tensor element \f$W^{y0} = (W^{0y})^*\f$
92  virtual std::complex<double> yt(double q0, double q_mag) const = 0;
93 
94  /// The tensor element \f$W^{yx} = (W^{xy})^*\f$
95  virtual std::complex<double> yx(double q0, double q_mag) const = 0;
96 
97  /// The tensor element \f$W^{yy}\f$
98  virtual std::complex<double> yy(double q0, double q_mag) const = 0;
99 
100  /// The tensor element \f$W^{yz}\f$
101  virtual std::complex<double> yz(double q0, double q_mag) const = 0;
102 
103  /// The tensor element \f$W^{z0} = (W^{0z})^*\f$
104  virtual std::complex<double> zt(double q0, double q_mag) const = 0;
105 
106  /// The tensor element \f$W^{zx} = (W^{xz})^*\f$
107  virtual std::complex<double> zx(double q0, double q_mag) const = 0;
108 
109  /// The tensor element \f$W^{zy} = (W^{yz})^*\f$
110  virtual std::complex<double> zy(double q0, double q_mag) const = 0;
111 
112  /// The tensor element \f$W^{zz}\f$
113  virtual std::complex<double> zz(double q0, double q_mag) const = 0;
114  /// @}
115 
116  /// Computes the contraction \f$L_{\mu\nu}W^{\mu\nu}\f$ of the hadron tensor
117  /// with the appropriate lepton tensor for a given type of projectile
118  /// (e.g., neutrino, electron)
119  /// \param[in] interaction An Interaction object storing information about the
120  /// initial and final states
121  /// \param[in] Q_value The Q-value that should be used to correct
122  /// the energy transfer \f$q_0\f$ (GeV)
123  /// \returns The tensor contraction \f$L_{\mu\nu}W^{\mu\nu}\f$ (GeV)
124  virtual double contraction(const Interaction* interaction,
125  double Q_value) const = 0;
126 
127  /// PDG code of the target nucleus
128  inline int pdg() const { return fTargetPDG; }
129 
130  /// Atomic number of the target nucleus
131  inline int Z() const { return genie::pdg::IonPdgCodeToZ(fTargetPDG); }
132 
133  /// Mass number of the target nucleus
134  inline int A() const { return genie::pdg::IonPdgCodeToA(fTargetPDG); }
135 
136  /// Set the target nucleus PDG code
137  inline void set_pdg(int pdg) { fTargetPDG = pdg; }
138 
139  /// The minimum value of the energy transfer \f$q^0\f$ for which this
140  /// hadron tensor may be used to compute cross sections
141  virtual double q0Min() const = 0;
142 
143  /// The maximum value of the energy transfer \f$q^0\f$ for which this
144  /// hadron tensor may be used to compute cross sections
145  virtual double q0Max() const = 0;
146 
147  /// The minimum value of the magnitude of the 3-momentum transfer
148  /// \f$\left|\overrightarrow{q}\right|\f$ for which this
149  /// hadron tensor may be used to compute cross sections
150  virtual double qMagMin() const = 0;
151 
152  /// The maximum value of the magnitude of the 3-momentum transfer
153  /// \f$\left|\overrightarrow{q}\right|\f$ for which this
154  /// hadron tensor may be used to compute cross sections
155  virtual double qMagMax() const = 0;
156 
157 protected:
158 
159  inline HadronTensorI(int pdg = 0) : fTargetPDG(pdg) {}
160 
161  inline HadronTensorI(int Z, int A)
162  : fTargetPDG( genie::pdg::IonPdgCode(A, Z) ) {}
163 
164  ///< PDG code for the target nucleus represented by the tensor
166 
167 }; // class HadronTensorI
168 
169 } // genie namespace
170 #endif
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 .
THE MAIN GENIE PROJECT NAMESPACE
Definition: AlgCmp.h:25
HadronTensorType
Definition: HadronTensorI.h:38
virtual std::complex< double > xx(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > zy(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > yt(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > yx(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 IonPdgCodeToA(int pdgc)
Definition: PDGUtils.cxx:60
virtual double qMagMin() const =0
enum genie::HadronTensorType HadronTensorType_t
virtual ~HadronTensorI()
Definition: HadronTensorI.h:57
Summary information for an interaction.
Definition: Interaction.h:56
virtual double q0Min() const =0
int A() const
Mass number of the target nucleus.
virtual std::complex< double > yy(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 std::complex< double > xy(double q0, double q_mag) const =0
The tensor element .
Abstract interface for an object that computes the elements a hadron tensor . Also computes the contr...
Definition: HadronTensorI.h:53
virtual double contraction(const Interaction *interaction, double Q_value) const =0
void set_pdg(int pdg)
Set the target nucleus PDG code.
virtual std::complex< double > yz(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > tt(double q0, double q_mag) const =0
The tensor element .
virtual std::complex< double > zt(double q0, double q_mag) const =0
The tensor element .
int pdg() const
PDG code of the target nucleus.
virtual std::complex< double > ty(double q0, double q_mag) const =0
The tensor element .
int IonPdgCode(int A, int Z)
Definition: PDGUtils.cxx:68
int Z() const
Atomic number of the target nucleus.
virtual double qMagMax() const =0
int IonPdgCodeToZ(int pdgc)
Definition: PDGUtils.cxx:52
HadronTensorI(int pdg=0)
virtual std::complex< double > xz(double q0, double q_mag) const =0
The tensor element .
virtual double q0Max() const =0
virtual std::complex< double > tz(double q0, double q_mag) const =0
The tensor element .