Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef CONVOL_COEFF_FUNCTION_KINEMATIC_H
0002 #define CONVOL_COEFF_FUNCTION_KINEMATIC_H
0003 
0004 /**
0005  * @file ConvolCoeffFunctionKinematic.h
0006  * @author Bryan BERTHOU (SPhN / CEA Saclay)
0007  * @date July 22, 2015
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/GenericType.h>
0012 #include <ElementaryUtils/parameters/Parameters.h>
0013 #include <string>
0014 #include <vector>
0015 
0016 #include "../../utils/type/PhysicalType.h"
0017 #include "../../utils/type/PhysicalUnit.h"
0018 #include "../channel/ChannelType.h"
0019 #include "../Kinematic.h"
0020 
0021 namespace ElemUtils {
0022 class Packet;
0023 } /* namespace ElemUtils */
0024 
0025 namespace PARTONS {
0026 
0027 /**
0028  * @class ConvolCoeffFunctionKinematic
0029  *
0030  * @brief Abstract class representing single CCF kinematics.
0031  *
0032  * This is an abstract class representing a single CCF kinematics (xi, t, \f$\mu_{F}^{2}\f$, \f$\mu_{F}^{2}\f$).
0033  */
0034 class ConvolCoeffFunctionKinematic: public Kinematic {
0035 
0036 public:
0037 
0038     /**
0039      * Destructor.
0040      */
0041     virtual ~ConvolCoeffFunctionKinematic();
0042 
0043     virtual void configure(const ElemUtils::Parameters &parameters);
0044     virtual std::string toString() const;
0045 
0046     /**
0047      * Serialize into given Packet.
0048      * @param packet Target Packet.
0049      */
0050     void serialize(ElemUtils::Packet &packet) const;
0051 
0052     /**
0053      * Retrieve data from given Packet.
0054      * @param packet Input Packet.
0055      */
0056     void unserialize(ElemUtils::Packet &packet);
0057 
0058     /**
0059      * Serialize to std::vector<double>.
0060      */
0061     void serializeIntoStdVector(std::vector<double>& vec) const;
0062 
0063     /**
0064      * Unserialize from std::vector<double>.
0065      */
0066     void unserializeFromStdVector(std::vector<double>::const_iterator& it,
0067             const std::vector<double>::const_iterator& end);
0068 
0069     //********************************************************
0070     //*** GETTERS AND SETTERS ********************************
0071     //********************************************************
0072 
0073     /**
0074      * Get skewness variable.
0075      */
0076     const PhysicalType<double>& getXi() const;
0077 
0078     /**
0079      * Get four-momentum transfer squared of hadron target.
0080      */
0081     const PhysicalType<double>& getT() const;
0082 
0083     /**
0084      * Get factorization scale squared.
0085      */
0086     const PhysicalType<double>& getMuF2() const;
0087 
0088     /**
0089      * Get renormalization scale squared.
0090      */
0091     const PhysicalType<double>& getMuR2() const;
0092 
0093     /**
0094      * Set skewness variable.
0095      */
0096     void setXi(const PhysicalType<double>& xi);
0097 
0098     /**
0099      * Set skewness variable.
0100      */
0101     void setXi(double xi, PhysicalUnit::Type unit = PhysicalUnit::NONE);
0102 
0103     /**
0104      * Set four-momentum transfer squared of hadron target.
0105      */
0106     void setT(const PhysicalType<double>& t);
0107 
0108     /**
0109      * Set four-momentum transfer squared of hadron target.
0110      */
0111     void setT(double t, PhysicalUnit::Type unit = PhysicalUnit::GEV2);
0112 
0113     /**
0114      * Set factorization scale squared.
0115      */
0116     void setMuF2(const PhysicalType<double>& muF2);
0117 
0118     /**
0119      * Set factorization scale squared.
0120      */
0121     void setMuF2(double muF2, PhysicalUnit::Type unit = PhysicalUnit::GEV2);
0122 
0123     /**
0124      * Set renormalization scale squared.
0125      */
0126     void setMuR2(const PhysicalType<double>& muR2);
0127 
0128     /**
0129      * Set renormalization scale squared.
0130      */
0131     void setMuR2(double muR2, PhysicalUnit::Type unit = PhysicalUnit::GEV2);
0132 
0133 protected:
0134 
0135     /**
0136      * Default constructor.
0137      */
0138     ConvolCoeffFunctionKinematic(const std::string &className,
0139             ChannelType::Type channelType);
0140 
0141     /**
0142      * Assignment constructor.
0143      * @param xi Skewness variable.
0144      * @param t Four-momentum transfer squared of hadron target (in \f$GeV^{2}\f$).
0145      * @param MuF2 Factorization scale squared (in \f$GeV^{2}\f$).
0146      * @param MuR2 Renormalization scale squared (in \f$GeV^{2}\f$).
0147      */
0148     ConvolCoeffFunctionKinematic(const std::string &className,
0149             ChannelType::Type channelType, double xi, double t, double MuF2,
0150             double MuR2);
0151 
0152     /**
0153      * Assignment constructor.
0154      * @param xi Skewness variable.
0155      * @param t Four-momentum transfer squared of hadron target (in \f$GeV^{2}\f$).
0156      * @param MuF2 Factorization scale squared (in \f$GeV^{2}\f$).
0157      * @param MuR2 Renormalization scale squared (in \f$GeV^{2}\f$).
0158      */
0159     ConvolCoeffFunctionKinematic(const std::string &className,
0160             ChannelType::Type channelType, const PhysicalType<double> &xi,
0161             const PhysicalType<double> &t, const PhysicalType<double> &MuF2,
0162             const PhysicalType<double> &MuR2);
0163 
0164     /**
0165      * Assignment constructor.
0166      * @param xi Skewness variable.
0167      * @param t Four-momentum transfer squared of hadron target (in \f$GeV^{2}\f$).
0168      * @param MuF2 Factorization scale squared (in \f$GeV^{2}\f$).
0169      * @param MuR2 Renormalization scale squared (in \f$GeV^{2}\f$).
0170      */
0171     ConvolCoeffFunctionKinematic(const std::string &className,
0172             ChannelType::Type channelType, const ElemUtils::GenericType &xi,
0173             const ElemUtils::GenericType &t, const ElemUtils::GenericType &MuF2,
0174             const ElemUtils::GenericType &MuR2);
0175 
0176     /**
0177      * Copy constructor.
0178      * @param other Object to be copied.
0179      */
0180     ConvolCoeffFunctionKinematic(const ConvolCoeffFunctionKinematic &other);
0181 
0182     virtual void updateHashSum() const = 0;
0183 
0184     /**
0185      * Skewness variable.
0186      */
0187     PhysicalType<double> m_xi;
0188 
0189     /**
0190      * Four-momentum transfer squared of hadron target (in \f$GeV^{2}\f$).
0191      */
0192     PhysicalType<double> m_t;
0193 
0194     /**
0195      * Factorization scale squared (in \f$GeV^{2}\f$).
0196      */
0197     PhysicalType<double> m_MuF2;
0198 
0199     /**
0200      * Renormalization scale squared (in \f$GeV^{2}\f$).
0201      */
0202     PhysicalType<double> m_MuR2;
0203 };
0204 
0205 /**
0206  * Stream operator to serialize class into Packet. See also GPDType::serialize().
0207  */
0208 ElemUtils::Packet& operator <<(ElemUtils::Packet& packet,
0209         ConvolCoeffFunctionKinematic& kinematic);
0210 
0211 /**
0212  * Stream operator to retrieve class from Packet. See also GPDType::unserialize().
0213  */
0214 ElemUtils::Packet& operator >>(ElemUtils::Packet& packet,
0215         ConvolCoeffFunctionKinematic& kinematic);
0216 
0217 } /* namespace PARTONS */
0218 
0219 #endif /* CONVOL_COEFF_FUNCTION_KINEMATIC_H */