22 #ifndef TABULATED_VALENCIA_HADRON_TENSOR_H
23 #define TABULATED_VALENCIA_HADRON_TENSOR_H
43 virtual std::complex<double>
tt(
double q0,
double q_mag)
const ;
45 virtual std::complex<double>
tz(
double q0,
double q_mag)
const ;
47 virtual std::complex<double>
xx(
double q0,
double q_mag)
const ;
49 virtual std::complex<double>
xy(
double q0,
double q_mag)
const ;
51 virtual std::complex<double>
zz(
double q0,
double q_mag)
const ;
53 virtual double W1(
double q0,
double q_mag,
double Mi)
const ;
54 virtual double W2(
double q0,
double q_mag,
double Mi)
const ;
55 virtual double W3(
double q0,
double q_mag,
double Mi)
const ;
56 virtual double W4(
double q0,
double q_mag,
double Mi)
const ;
57 virtual double W5(
double q0,
double q_mag,
double Mi)
const ;
58 virtual double W6(
double q0,
double q_mag,
double Mi)
const ;
63 double Q_value)
const ;
66 double m_probe,
double Tl,
double cos_l,
double ml,
double Q_value)
70 double Q_value)
const ;
73 double m_probe,
double Tl,
double cos_l,
double ml,
double Q_value)
76 inline virtual double q0Min() const {
return fGrid.x_min(); }
77 inline virtual double q0Max() const {
return fGrid.x_max(); }
91 std::vector<double>& vec_to_fill);
124 bool are_equal = this->
W00 == rhs.
W00;
125 if ( are_equal ) are_equal = this->
Wxx == rhs.
Wxx;
126 if ( are_equal ) are_equal = this->
Wzz == rhs.
Wzz;
127 if ( are_equal ) are_equal = this->
ImWxy == rhs.
ImWxy;
128 if ( are_equal ) are_equal = this->
ReW0z == rhs.
ReW0z;
139 double (*my_function)(
double,
double) )
const
144 result.
W00 = (*my_function)( this->
W00, d );
145 result.
Wxx = (*my_function)( this->
Wxx, d );
146 result.
Wzz = (*my_function)( this->
Wzz, d );
147 result.
ImWxy = (*my_function)( this->
ImWxy, d );
148 result.
ReW0z = (*my_function)( this->
ReW0z, d );
154 double (*my_function)(
double,
double) )
const
159 result.
W00 = (*my_function)( this->
W00, rhs.
W00 );
160 result.
Wxx = (*my_function)( this->
Wxx, rhs.
Wxx );
161 result.
Wzz = (*my_function)( this->
Wzz, rhs.
Wzz );
173 inline static double add(
double x,
double y) {
return x + y; }
174 inline static double subtract(
double x,
double y) {
return x - y; }
175 inline static double multiply(
double x,
double y) {
return x * y; }
176 inline static double divide(
double x,
double y) {
return x / y; }
190 virtual double W1(
double q0,
double q_mag,
const TableEntry& entry)
const;
192 virtual double W2(
double q0,
double q_mag,
const TableEntry& entry)
const;
194 virtual double W3(
double q0,
double q_mag,
const TableEntry& entry)
const;
196 virtual double W4(
double q0,
double q_mag,
const TableEntry& entry)
const;
198 virtual double W5(
double q0,
double q_mag,
const TableEntry& entry)
const;
200 virtual double W6(
double q0,
double q_mag,
const TableEntry& entry)
const;
std::vector< TableEntry > fEntries
TableEntry operator*(double d) const
virtual std::complex< double > tz(double q0, double q_mag) const
The tensor element .
BLI2DNonUnifObjectGrid< TableEntry > fGrid
virtual std::complex< double > tt(double q0, double q_mag) const
The tensor element .
virtual double qMagMax() const
Abstract interface for an object that computes the elements ( , , etc.) and structure functions ( ...
virtual double q0Min() const
virtual ~TabulatedLabFrameHadronTensor()
TableEntry operator/(double d) const
std::vector< double > fqmagPoints
TableEntry apply_to_elements(const TableEntry &rhs, double(*my_function)(double, double)) const
TableEntry operator-(const TableEntry &rhs) const
Summary information for an interaction.
virtual std::complex< double > zz(double q0, double q_mag) const
The tensor element .
static double add(double x, double y)
virtual double dSigma_dT_dCosTheta(const Interaction *interaction, double Q_value) const
virtual double W2(double q0, double q_mag, double Mi) const
virtual double W4(double q0, double q_mag, double Mi) const
static double divide(double x, double y)
virtual double W1(double q0, double q_mag, double Mi) const
The structure function .
Computes the elements and structure functions of the hadron tensor (using the conventions of the Val...
TableEntry operator/(const TableEntry &rhs) const
virtual double q0Max() const
TableEntry operator+(const TableEntry &rhs) const
void read1DGridValues(int num_points, int flag, std::ifstream &in_file, std::vector< double > &vec_to_fill)
static double multiply(double x, double y)
virtual double W6(double q0, double q_mag, double Mi) const
std::vector< double > fq0Points
TableEntry operator*(const TableEntry &rhs) const
virtual std::complex< double > xx(double q0, double q_mag) const
The tensor element .
static double subtract(double x, double y)
virtual double W5(double q0, double q_mag, double Mi) const
virtual double dSigma_dT_dCosTheta_rosenbluth(const Interaction *interaction, double Q_value) const
A class template that performs bilinear interpolation on a non-uniform grid with an implementation si...
virtual std::complex< double > xy(double q0, double q_mag) const
The tensor element .
virtual double qMagMin() const
bool operator==(const TableEntry &rhs) const
bool operator!=(const TableEntry &rhs) const
TabulatedLabFrameHadronTensor(const std::string &table_file_name)
virtual double W3(double q0, double q_mag, double Mi) const
TableEntry apply_to_elements(double d, double(*my_function)(double, double)) const