Commit dd24236b authored by Pawel Sznajder's avatar Pawel Sznajder
Browse files

few more observables and removing of int. variables

parent 2f996d8b
......@@ -11,6 +11,7 @@
#include <ElementaryUtils/parameters/Parameters.h>
#include <map>
#include <string>
#include <vector>
#include "../../../beans/automation/BaseObjectData.h"
#include "../../../beans/gpd/GPDType.h"
......@@ -86,11 +87,18 @@ protected:
const TCSObservableKinematic& kinematic,
const List<GPDType>& gpdType) = 0;
double m_t; ///< Mandelstam variable (square of the 4-momentum transferm in GeV2).
double m_Q2Prim; ///< Virtuality of the incoming photon (in GeV2).
double m_E; ///< Beam energy in target rest frame (in GeV).
double m_phi; ///< Angle between leptonic and hadronic plane (in radians, Trento convention).
double m_theta; /// < Angle between positively charged lepton and scattered proton in lepton CMS (in degrees).
/**
* Serialize kinematics and list of GPD types to std::vector<double>.
*/
std::vector<double> serializeKinematicsAndGPDTypesToVector(
const TCSObservableKinematic& kin, const List<GPDType>& list) const;
/**
* Unserialize kinematics and list of GPD types from std::vector<double>.
*/
void unserializeKinematicsAndGPDTypesFromVector(
const std::vector<double>& vec, TCSObservableKinematic& kin,
List<GPDType>& list) const;
TCSProcessModule* m_pProcessModule; ///< Pointer to the underlying process module.
};
......
#ifndef TCSACU_H
#define TCSACU_H
/**
* @file TCSAcu.h
* @author Pawel Sznajder (IPNO)
* @date November 25, 2016
* @version 1.0
*/
#include <string>
#include "../../../../beans/gpd/GPDType.h"
#include "../../../../beans/List.h"
#include "../../../../utils/type/PhysicalType.h"
#include "../TCSObservable.h"
namespace PARTONS {
/**
* @class TCSAcu
* @brief Asymmetry probing circular beam polarization.
*
* Definition:<br>
*
* \f$ \displaystyle
* A_{CU}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right) =
* \frac{1}{2}
* \left(
* \frac{\mathrm{d}^4\sigma^{+}_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right) -
* \frac{\mathrm{d}^4\sigma^{-}_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right)
* \right) /
* \left(
* \frac{\mathrm{d}^4\sigma^{+}_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right) +
* \frac{\mathrm{d}^4\sigma^{-}_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right)
* \right)\, .
* \f$
*
* Unit: none.
*/
class TCSAcu: public TCSObservable {
public:
/**
* Unique ID to automatically register the class in the registry.
*/
static const unsigned int classId;
/**
* Constructor.
* @param className Name of class.
*/
TCSAcu(const std::string &className);
/**
* Destructor.
*/
virtual ~TCSAcu();
virtual TCSAcu* clone() const;
protected:
/**
* Copy constructor.
* @param other Object to be copied.
*/
TCSAcu(const TCSAcu &other);
virtual PhysicalType<double> computeObservable(
const TCSObservableKinematic& kinematic,
const List<GPDType>& gpdType);
};
} /* namespace PARTONS */
#endif /* TCSACU_H */
#ifndef TCSACUTHETAINTEGRATED_H
#define TCSACUTHETAINTEGRATED_H
/**
* @file TCSAcuThetaIntegrated.h
* @author Pawel Sznajder (IPNO)
* @date November 25, 2016
* @version 1.0
*/
#include <ElementaryUtils/parameters/Parameters.h>
#include <string>
#include <utility>
#include <vector>
#include "../../../../beans/gpd/GPDType.h"
#include "../../../../beans/List.h"
#include "../../../../utils/type/PhysicalType.h"
#include "../../../MathIntegratorModule.h"
#include "TCSAcu.h"
namespace PARTONS {
/**
* @class TCSAcuThetaIntegrated
* @brief ACU asymmetry integrated over \f$\theta\f$ in a given range (default: \f$|\theta - \pi/2| < \pi/4\f$).
*
* Definition:<br>
*
* \f$ \displaystyle
* \int_{\theta_{\mathrm{min}}}^{\theta_{\mathrm{max}}} A_{CU}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right)\, .
* \f$
*
* Unit: none.
*/
class TCSAcuThetaIntegrated: public TCSAcu,
public MathIntegratorModule {
public:
static const std::string PARAMETER_NAME_THETA_LIMIT; ///< Name of parameter to set \f$\theta_{\mathrm{limit}}\f$, which is the limit on \f$\theta\f$ angle integration, defined as \f$|\theta - \pi/2| < \theta_{\mathrm{limit}}\f$. In degrees.
/**
* Unique ID to automatically register the class in the registry.
*/
static const unsigned int classId;
/**
* Constructor.
* @param className Name of class.
*/
TCSAcuThetaIntegrated(const std::string &className);
/**
* Destructor.
*/
virtual ~TCSAcuThetaIntegrated();
virtual TCSAcuThetaIntegrated* clone() const;
virtual void configure(const ElemUtils::Parameters &parameters);
/**
* Get range of theta angle used in the integration.
*/
const std::pair<double, double>& getThetaRange() const;
/**
* Set range of theta angle used in the integration.
*/
void setThetaRange(const std::pair<double, double>& thetaRange);
protected:
/**
* Copy constructor.
* @param other Object to be copied.
*/
TCSAcuThetaIntegrated(
const TCSAcuThetaIntegrated &other);
virtual PhysicalType<double> computeObservable(
const TCSObservableKinematic& kinematic,
const List<GPDType>& gpdType);
/**
* Functor to perform the integration.
*/
NumA::FunctionType1D* m_pFunctionToIntegrateObservableTheta;
/**
* Function to be integrated.
*/
virtual double functionToIntegrateObservableTheta(double x,
std::vector<double> params);
/**
* Initialize functors.
*/
virtual void initFunctorsForIntegrations();
std::pair<double, double> m_thetaRange; ///< Range of theta angle used in the integration.
};
} /* namespace PARTONS */
#endif /* TCSACUTHETAINTEGRATED_H */
#ifndef TCSR_H
#define TCSR_H
/**
* @file TCSR.h
* @author Pawel Sznajder (IPNO)
* @date November 25, 2016
* @version 1.0
*/
#include <string>
#include <vector>
#include "../../../../beans/gpd/GPDType.h"
#include "../../../../beans/List.h"
#include "../../../../utils/type/PhysicalType.h"
#include "../cross_section/TCSCrossSectionUUWeightedThetaIntegrated.h"
namespace PARTONS {
/**
* @class TCSR
* @brief Asymmetry R.
*
* Definition:<br>
*
* see Eq. (31) of Eur. Phys. J. C23 (2002) 675
*
* Unit: none.
*/
class TCSR: public TCSCrossSectionUUWeightedThetaIntegrated {
public:
/**
* Unique ID to automatically register the class in the registry.
*/
static const unsigned int classId;
/**
* Constructor.
* @param className Name of class.
*/
TCSR(const std::string &className);
/**
* Destructor.
*/
virtual ~TCSR();
virtual TCSR* clone() const;
protected:
/**
* Copy constructor.
* @param other Object to be copied.
*/
TCSR(const TCSR &other);
virtual PhysicalType<double> computeObservable(
const TCSObservableKinematic& kinematic,
const List<GPDType>& gpdType);
/**
* Functor to perform the integration (numerator).
*/
NumA::FunctionType1D* m_pFunctionToIntegrateObservablePhi1;
/**
* Functor to perform the integration (denominator).
*/
NumA::FunctionType1D* m_pFunctionToIntegrateObservablePhi2;
/**
* Function to be integrated (numerator).
*/
virtual double functionToIntegrateObservablePhi1(double x,
std::vector<double> params);
/**
* Function to be integrated (denominator).
*/
virtual double functionToIntegrateObservablePhi2(double x,
std::vector<double> params);
/**
* Initialize functors.
*/
virtual void initFunctorsForIntegrations();
};
} /* namespace PARTONS */
#endif /* TCSR_H */
#ifndef TCSCROSSSECTIONDIFFERENCECU_H
#define TCSCROSSSECTIONDIFFERENCECU_H
/**
* @file TCSCrossSectionDifferenceCU.h
* @author Pawel Sznajder (IPNO)
* @date November 25, 2016
* @version 1.0
*/
#include <string>
#include "../../../../beans/gpd/GPDType.h"
#include "../../../../beans/List.h"
#include "../../../../utils/type/PhysicalType.h"
#include "../TCSObservable.h"
namespace PARTONS {
/**
* @class TCSCrossSectionDifferenceCU
* @brief Difference of cross-sections obtained with two states of incoming photon circular polarization.
*
* Definition:<br>
*
* \f$ \displaystyle
* \Delta\frac{\mathrm{d}^4\sigma_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right) =
* \frac{1}{2}\left(
* \frac{\mathrm{d}^4\sigma^{+}_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right) -
* \frac{\mathrm{d}^4\sigma^{-}_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right)\, .
* \right)
* \f$
*
* Unit: \f$\mathrm{nbarn}/\mathrm{GeV}^4\f$.
*/
class TCSCrossSectionDifferenceCU: public TCSObservable {
public:
/**
* Unique ID to automatically register the class in the registry.
*/
static const unsigned int classId;
/**
* Constructor.
* @param className Name of class.
*/
TCSCrossSectionDifferenceCU(const std::string &className);
/**
* Destructor.
*/
virtual ~TCSCrossSectionDifferenceCU();
virtual TCSCrossSectionDifferenceCU* clone() const;
protected:
/**
* Copy constructor.
* @param other Object to be copied.
*/
TCSCrossSectionDifferenceCU(const TCSCrossSectionDifferenceCU &other);
virtual PhysicalType<double> computeObservable(
const TCSObservableKinematic& kinematic,
const List<GPDType>& gpdType);
};
} /* namespace PARTONS */
#endif /* TCSCROSSSECTIONDIFFERENCECU_H */
#ifndef TCSCROSSSECTIONDIFFERENCECUTHETAINTEGRATED_H
#define TCSCROSSSECTIONDIFFERENCECUTHETAINTEGRATED_H
/**
* @file TCSCrossSectionDifferenceCUThetaIntegrated.h
* @author Pawel Sznajder (IPNO)
* @date November 25, 2016
* @version 1.0
*/
#include <ElementaryUtils/parameters/Parameters.h>
#include <string>
#include <utility>
#include <vector>
#include "../../../../beans/gpd/GPDType.h"
#include "../../../../beans/List.h"
#include "../../../../utils/type/PhysicalType.h"
#include "../../../MathIntegratorModule.h"
#include "TCSCrossSectionDifferenceCU.h"
namespace PARTONS {
/**
* @class TCSCrossSectionDifferenceCUThetaIntegrated
* @brief Difference of cross-sections obtained with two states of incoming photon circular polarization integrated over \f$\theta\f$ in a given range (default: \f$|\theta - \pi/2| < \pi/4\f$).
*
* Definition:<br>
*
* \f$ \displaystyle
* \int_{\theta_{\mathrm{min}}}^{\theta_{\mathrm{max}}} \Delta\frac{\mathrm{d}^4\sigma_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right)\, .
* \f$
*
* Unit: \f$\mathrm{nbarn}/\mathrm{GeV}^4\f$.
*/
class TCSCrossSectionDifferenceCUThetaIntegrated: public TCSCrossSectionDifferenceCU,
public MathIntegratorModule {
public:
static const std::string PARAMETER_NAME_THETA_LIMIT; ///< Name of parameter to set \f$\theta_{\mathrm{limit}}\f$, which is the limit on \f$\theta\f$ angle integration, defined as \f$|\theta - \pi/2| < \theta_{\mathrm{limit}}\f$. In degrees.
/**
* Unique ID to automatically register the class in the registry.
*/
static const unsigned int classId;
/**
* Constructor.
* @param className Name of class.
*/
TCSCrossSectionDifferenceCUThetaIntegrated(const std::string &className);
/**
* Destructor.
*/
virtual ~TCSCrossSectionDifferenceCUThetaIntegrated();
virtual TCSCrossSectionDifferenceCUThetaIntegrated* clone() const;
virtual void configure(const ElemUtils::Parameters &parameters);
/**
* Get range of theta angle used in the integration.
*/
const std::pair<double, double>& getThetaRange() const;
/**
* Set range of theta angle used in the integration.
*/
void setThetaRange(const std::pair<double, double>& thetaRange);
protected:
/**
* Copy constructor.
* @param other Object to be copied.
*/
TCSCrossSectionDifferenceCUThetaIntegrated(
const TCSCrossSectionDifferenceCUThetaIntegrated &other);
virtual PhysicalType<double> computeObservable(
const TCSObservableKinematic& kinematic,
const List<GPDType>& gpdType);
/**
* Functor to perform the integration.
*/
NumA::FunctionType1D* m_pFunctionToIntegrateObservableTheta;
/**
* Function to be integrated.
*/
virtual double functionToIntegrateObservableTheta(double x,
std::vector<double> params);
/**
* Initialize functors.
*/
virtual void initFunctorsForIntegrations();
std::pair<double, double> m_thetaRange; ///< Range of theta angle used in the integration.
};
} /* namespace PARTONS */
#endif /* TCSCROSSSECTIONDIFFERENCECUTHETAINTEGRATED_H */
#ifndef TCSCROSSSECTIONUUWEIGHTED_H
#define TCSCROSSSECTIONUUWEIGHTED_H
/**
* @file TCSCrossSectionUUWeighted.h
* @author Pawel Sznajder (IPNO)
* @date November 25, 2016
* @version 1.0
*/
#include <string>
#include "../../../../beans/gpd/GPDType.h"
#include "../../../../beans/List.h"
#include "../../../../utils/type/PhysicalType.h"
#include "../TCSObservable.h"
namespace PARTONS {
/**
* @class TCSCrossSectionUUWeighted
* @brief Weighted unpolarized cross-section.
*
* Definition:<br>
*
* see Eq. (43) of Eur. Phys. J. C23 (2002) 675
*
* Unit: \f$\mathrm{nbarn}/\mathrm{GeV}^4\f$.
*/
class TCSCrossSectionUUWeighted: public TCSObservable {
public:
/**
* Unique ID to automatically register the class in the registry.
*/
static const unsigned int classId;
/**
* Constructor.
* @param className Name of class.
*/
TCSCrossSectionUUWeighted(const std::string &className);
/**
* Destructor.
*/
virtual ~TCSCrossSectionUUWeighted();
virtual TCSCrossSectionUUWeighted* clone() const;
protected:
/**
* Copy constructor.
* @param other Object to be copied.
*/
TCSCrossSectionUUWeighted(const TCSCrossSectionUUWeighted &other);
virtual PhysicalType<double> computeObservable(
const TCSObservableKinematic& kinematic,
const List<GPDType>& gpdType);
};
} /* namespace PARTONS */
#endif /* TCSCROSSSECTIONUUWEIGHTED_H */
#ifndef TCSCROSSSECTIONWEIGHTEDTHETAINTEGRATEDUU_H
#define TCSCROSSSECTIONWEIGHTEDTHETAINTEGRATEDUU_H
/**
* @file TCSCrossSectionUUWeightedThetaIntegrated.h
* @author Pawel Sznajder (IPNO)
* @date November 25, 2016
* @version 1.0
*/
#include <ElementaryUtils/parameters/Parameters.h>
#include <string>
#include <utility>
#include <vector>
#include "../../../../beans/gpd/GPDType.h"
#include "../../../../beans/List.h"
#include "../../../../utils/type/PhysicalType.h"
#include "../../../MathIntegratorModule.h"
#include "TCSCrossSectionUUWeighted.h"
namespace PARTONS {
/**
* @class TCSCrossSectionUUWeightedThetaIntegrated
* @brief Weighted unpolarized cross-section integrated over \f$\theta\f$ in a given range (default: \f$|\theta - \pi/2| < \pi/4\f$).
*
* Definition:<br>
*
* \f$ \displaystyle
* \int_{\theta_{\mathrm{min}}}^{\theta_{\mathrm{max}}}\mathrm{d}\theta} \frac{\mathrm{d}^4\sigma^{\mathrm{weighted}}_{UU}}{\mathrm{d}|t| \mathrm{d}Q^2 \mathrm{d}\phi \mathrm{d}\theta}\left(t, Q^2, \phi, \theta\right) \, .
* \f$