Back to home page

EIC code displayed by LXR

 
 

    


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

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