Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-02 08:51:47

0001 #ifndef TCSAUTCOSPHIMPHISTHETAINTEGRATED_H
0002 #define TCSAUTCOSPHIMPHISTHETAINTEGRATED_H
0003 
0004 /**
0005  * @file TCSAutCosPhiMPhisThetaIntegrated.h
0006  * @author Pawel Sznajder (IPNO)
0007  * @date November 25, 2016
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <string>
0013 #include <utility>
0014 #include <vector>
0015 
0016 #include "../../../../beans/gpd/GPDType.h"
0017 #include "../../../../beans/List.h"
0018 #include "../../../../utils/type/PhysicalType.h"
0019 #include "../../../MathIntegratorModule.h"
0020 #include "../TCSObservable.h"
0021 
0022 namespace PARTONS {
0023 
0024 /**
0025  * @class TCSAutCosPhiMPhisThetaIntegrated
0026  * @brief AutCosPhiMPhis asymmetry with cross-sections integrated over \f$\theta\f$ in a given range (default: \f$|\theta - \pi/2| < \pi/4\f$).
0027  *
0028  * Unit: none.
0029  */
0030 class TCSAutCosPhiMPhisThetaIntegrated: public TCSObservable,
0031         public MathIntegratorModule {
0032 
0033 public:
0034 
0035     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.
0036 
0037     /**
0038      * Unique ID to automatically register the class in the registry.
0039      */
0040     static const unsigned int classId;
0041 
0042     /**
0043      * Constructor.
0044      * @param className Name of class.
0045      */
0046     TCSAutCosPhiMPhisThetaIntegrated(const std::string &className);
0047 
0048     /**
0049      * Destructor.
0050      */
0051     virtual ~TCSAutCosPhiMPhisThetaIntegrated();
0052 
0053     virtual TCSAutCosPhiMPhisThetaIntegrated* clone() const;
0054     virtual void configure(const ElemUtils::Parameters &parameters);
0055 
0056     /**
0057      * Get range of theta angle used in the integration.
0058      */
0059     const std::pair<double, double>& getThetaRange() const;
0060 
0061     /**
0062      * Set range of theta angle used in the integration.
0063      */
0064     void setThetaRange(const std::pair<double, double>& thetaRange);
0065 
0066 protected:
0067 
0068     /**
0069      * Copy constructor.
0070      * @param other Object to be copied.
0071      */
0072     TCSAutCosPhiMPhisThetaIntegrated(
0073             const TCSAutCosPhiMPhisThetaIntegrated &other);
0074 
0075     virtual PhysicalType<double> computeObservable(
0076             const TCSObservableKinematic& kinematic,
0077             const List<GPDType>& gpdType);
0078 
0079     /**
0080      * Functor to perform the integration (polarization + target +).
0081      */
0082     NumA::FunctionType1D* m_pFunctionToIntegrateObservableTheta1;
0083 
0084     /**
0085      * Functor to perform the integration (polarization - target +).
0086      */
0087     NumA::FunctionType1D* m_pFunctionToIntegrateObservableTheta2;
0088 
0089     /**
0090      * Functor to perform the integration (polarization + target -).
0091      */
0092     NumA::FunctionType1D* m_pFunctionToIntegrateObservableTheta3;
0093 
0094     /**
0095      * Functor to perform the integration (polarization - target -).
0096      */
0097     NumA::FunctionType1D* m_pFunctionToIntegrateObservableTheta4;
0098 
0099     /**
0100      * Function to be integrated (polarization + target +).
0101      */
0102     virtual double functionToIntegrateObservableTheta1(double x,
0103             std::vector<double> params);
0104 
0105     /**
0106      * Function to be integrated (polarization - target +).
0107      */
0108     virtual double functionToIntegrateObservableTheta2(double x,
0109             std::vector<double> params);
0110 
0111     /**
0112      * Function to be integrated (polarization + target -).
0113      */
0114     virtual double functionToIntegrateObservableTheta3(double x,
0115             std::vector<double> params);
0116 
0117     /**
0118      * Function to be integrated (polarization - target -).
0119      */
0120     virtual double functionToIntegrateObservableTheta4(double x,
0121             std::vector<double> params);
0122 
0123     /**
0124      * Initialize functors.
0125      */
0126     virtual void initFunctorsForIntegrations();
0127 
0128     std::pair<double, double> m_thetaRange; ///< Range of theta angle used in the integration.
0129 };
0130 
0131 } /* namespace PARTONS */
0132 
0133 #endif /* TCSAUTCOSPHIMPHISTHETAINTEGRATED_H */