Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef TCSACUTHETAINTEGRATED_H
0002 #define TCSACUTHETAINTEGRATED_H
0003 
0004 /**
0005  * @file TCSAcuThetaIntegrated.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 TCSAcuThetaIntegrated
0026  * @brief Acu 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 TCSAcuThetaIntegrated: public TCSObservable, public MathIntegratorModule {
0031 
0032 public:
0033 
0034     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.
0035 
0036     /**
0037      * Unique ID to automatically register the class in the registry.
0038      */
0039     static const unsigned int classId;
0040 
0041     /**
0042      * Constructor.
0043      * @param className Name of class.
0044      */
0045     TCSAcuThetaIntegrated(const std::string &className);
0046 
0047     /**
0048      * Destructor.
0049      */
0050     virtual ~TCSAcuThetaIntegrated();
0051 
0052     virtual TCSAcuThetaIntegrated* clone() const;
0053     virtual void configure(const ElemUtils::Parameters &parameters);
0054 
0055     /**
0056      * Get range of theta angle used in the integration.
0057      */
0058     const std::pair<double, double>& getThetaRange() const;
0059 
0060     /**
0061      * Set range of theta angle used in the integration.
0062      */
0063     void setThetaRange(const std::pair<double, double>& thetaRange);
0064 
0065 protected:
0066 
0067     /**
0068      * Copy constructor.
0069      * @param other Object to be copied.
0070      */
0071     TCSAcuThetaIntegrated(const TCSAcuThetaIntegrated &other);
0072 
0073     virtual PhysicalType<double> computeObservable(
0074             const TCSObservableKinematic& kinematic,
0075             const List<GPDType>& gpdType);
0076 
0077     /**
0078      * Functor to perform the integration (polarization +).
0079      */
0080     NumA::FunctionType1D* m_pFunctionToIntegrateObservableTheta1;
0081 
0082     /**
0083      * Functor to perform the integration (polarization -).
0084      */
0085     NumA::FunctionType1D* m_pFunctionToIntegrateObservableTheta2;
0086 
0087     /**
0088      * Function to be integrated (polarization +).
0089      */
0090     virtual double functionToIntegrateObservableTheta1(double x,
0091             std::vector<double> params);
0092 
0093     /**
0094      * Function to be integrated (polarization -).
0095      */
0096     virtual double functionToIntegrateObservableTheta2(double x,
0097             std::vector<double> params);
0098 
0099     /**
0100      * Initialize functors.
0101      */
0102     virtual void initFunctorsForIntegrations();
0103 
0104     std::pair<double, double> m_thetaRange; ///< Range of theta angle used in the integration.
0105 };
0106 
0107 } /* namespace PARTONS */
0108 
0109 #endif /* TCSACUTHETAINTEGRATED_H */