Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef DVCS_PROCESS_MODULE_H
0002 #define DVCS_PROCESS_MODULE_H
0003 
0004 /**
0005  * @file DVCSProcessModule.h
0006  * @author Bryan BERTHOU (SPhN / CEA Saclay)
0007  * @date November 19, 2014
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <NumA/linear_algebra/vector/Vector3D.h>
0013 #include <complex>
0014 #include <map>
0015 #include <string>
0016 
0017 #include "../../../beans/automation/BaseObjectData.h"
0018 #include "../../../beans/convol_coeff_function/DVCS/DVCSConvolCoeffFunctionKinematic.h"
0019 #include "../../../beans/convol_coeff_function/DVCS/DVCSConvolCoeffFunctionResult.h"
0020 #include "../../../beans/gpd/GPDType.h"
0021 #include "../../../beans/List.h"
0022 #include "../../../beans/observable/DVCS/DVCSObservableKinematic.h"
0023 #include "../../../beans/observable/DVCS/DVCSObservableResult.h"
0024 #include "../../../beans/process/VCSSubProcessType.h"
0025 #include "../../../utils/type/PhysicalType.h"
0026 #include "../ProcessModule.h"
0027 
0028 namespace PARTONS {
0029 class DVCSConvolCoeffFunctionModule;
0030 class DVCSScalesModule;
0031 class DVCSXiConverterModule;
0032 } /* namespace PARTONS */
0033 
0034 namespace PARTONS {
0035 
0036 /**
0037  * @class DVCSProcessModule
0038  *
0039  * @brief Abstract class for computing the *differential* cross section of
0040  * the photon electroproduction process (also called DVCS; Deeply Virtual Compton Scattering).
0041  *
0042  * The cross-section is five-fold differential with respect to the variables: @f$ x_B @f$, @f$ Q^2 @f$, @f$ t @f$ and the two angles.
0043  */
0044 class DVCSProcessModule: public ProcessModule<DVCSObservableKinematic,
0045         DVCSObservableResult> {
0046 
0047 public:
0048 
0049     static const std::string DVCS_PROCESS_MODULE_CLASS_NAME; ///< Type of the module in XML automation.
0050 
0051     /**
0052      * Destructor.
0053      */
0054     virtual ~DVCSProcessModule();
0055 
0056     virtual DVCSProcessModule* clone() const = 0;
0057     virtual std::string toString() const;
0058     virtual void resolveObjectDependencies();
0059     virtual void run();
0060     virtual void configure(const ElemUtils::Parameters &parameters);
0061     virtual void prepareSubModules(
0062             const std::map<std::string, BaseObjectData>& subModulesData);
0063     virtual DVCSObservableResult compute(double beamHelicity, double beamCharge,
0064             NumA::Vector3D targetPolarization,
0065             const DVCSObservableKinematic& kinematic,
0066             const List<GPDType>& gpdType = List<GPDType>());
0067     virtual List<GPDType> getListOfAvailableGPDTypeForComputation() const;
0068     virtual std::vector<double> test();
0069 
0070     /**
0071      * Computes the differential cross-section. Must be implemented in the child class.
0072      * @param beamHelicity Helicity of the beam (in units of hbar/2).
0073      * @param beamCharge Charge of the beam (in units of positron charge).
0074      * @param targetPolarization Polarization of the target. In GV conventions.
0075      * @param kinematic Kinematics.
0076      * @param processType Subprocess type.
0077      * @return Result.
0078      */
0079     DVCSObservableResult compute(double beamHelicity, double beamCharge,
0080             NumA::Vector3D targetPolarization,
0081             const DVCSObservableKinematic& kinematic,
0082             const List<GPDType>& gpdType, VCSSubProcessType::Type processType);
0083 
0084     /**
0085      * Reset previous kinematics.
0086      */
0087     virtual void resetPreviousKinematic();
0088 
0089     /**
0090      * Check if this kinematics is different than the previous one.
0091      */
0092     bool isPreviousCCFKinematicDifferent(
0093             const DVCSConvolCoeffFunctionKinematic& kinematic) const;
0094 
0095     // ##### GETTERS & SETTERS #####
0096 
0097     /**
0098      * Get scale module.
0099      */
0100     DVCSScalesModule* getScaleModule() const;
0101 
0102     /**
0103      * Set scale module.
0104      */
0105     void setScaleModule(DVCSScalesModule* pScaleModule);
0106 
0107     /**
0108      * Get xi converter module.
0109      */
0110     DVCSXiConverterModule* getXiConverterModule() const;
0111 
0112     /**
0113      * Set xi converted module.
0114      */
0115     void setXiConverterModule(DVCSXiConverterModule* pXiConverterModule);
0116 
0117     /**
0118      * Get CCF module;
0119      */
0120     DVCSConvolCoeffFunctionModule* getConvolCoeffFunctionModule() const;
0121 
0122     /**
0123      * Set CCF module
0124      */
0125     void setConvolCoeffFunctionModule(
0126             DVCSConvolCoeffFunctionModule* pConvolCoeffFunctionModule);
0127 
0128     // ##### IMPLEMENTATION MEMBERS #####
0129 
0130     /**
0131      * Bethe-Heitler differential cross section.
0132      */
0133     virtual PhysicalType<double> CrossSectionBH();
0134 
0135     /**
0136      * Virtual Compton Scattering differential cross section.
0137      */
0138     virtual PhysicalType<double> CrossSectionVCS();
0139 
0140     /**
0141      * Interference differential cross section.
0142      */
0143     virtual PhysicalType<double> CrossSectionInterf();
0144 
0145     /**
0146      * Set manually CFFs.
0147      */
0148     void setConvolCoeffFunction(const DVCSConvolCoeffFunctionKinematic& kin,
0149             const DVCSConvolCoeffFunctionResult& result);
0150 
0151 protected:
0152 
0153     /**
0154      * Default constructor.
0155      */
0156     DVCSProcessModule(const std::string &className);
0157 
0158     /**
0159      * Copy constructor.
0160      * @param other Object to be copied.
0161      */
0162     DVCSProcessModule(const DVCSProcessModule& other);
0163 
0164     virtual void setKinematics(const DVCSObservableKinematic& kinematic);
0165     virtual void setExperimentalConditions(double beamHelicity,
0166             double beamCharge, NumA::Vector3D targetPolarization);
0167     virtual void initModule();
0168     virtual void isModuleWellConfigured();
0169 
0170     double m_xB; ///< Bjorken variable.
0171     double m_t; ///< Mandelstam variable (square of the 4-momentum transferm in GeV2).
0172     double m_Q2; ///< Virtuality of the incoming photon (in GeV2).
0173     double m_E; ///< Beam energy in target rest frame (in GeV).
0174     double m_phi; ///<  Angle between leptonic and hadronic plane (in radians, Trento convention).
0175 
0176     double m_beamHelicity; ///< Beam helicity.
0177     double m_beamCharge; ///< Beam charge.
0178     NumA::Vector3D m_targetPolarization; ///< Target polarization.
0179 
0180     double m_tmin; ///< Minimal value of t.
0181     double m_tmax; ///< Maximal value of t.
0182     double m_xBmin; ///< Minimal value of xB.
0183     double m_y; ///< Lepton energy fraction.
0184     double m_epsilon; ///< @f$ \epsilon = \frac{2 x_B M}{Q} @f$.
0185 
0186     DVCSScalesModule* m_pScaleModule; ///< Pointer to the underlying scale module.
0187     DVCSXiConverterModule* m_pXiConverterModule; ///< Pointer to the underlying xi converter module.
0188     DVCSConvolCoeffFunctionModule* m_pConvolCoeffFunctionModule; ///< Pointer to the underlying CCF module.
0189 
0190     DVCSConvolCoeffFunctionResult m_dvcsConvolCoeffFunctionResult; ///< Stored Compton Form Factor result.
0191     DVCSConvolCoeffFunctionKinematic m_lastCCFKinematics; ///< Last Compton Form Factor kinematics.
0192 
0193     /**
0194      * Compute CCF for a given kinematics.
0195      * @param kinematic Kinematics to be computed.
0196      * @param gpdType List of GPD types to be computed.
0197      */
0198     void computeConvolCoeffFunction(const DVCSObservableKinematic& kinematic,
0199             const List<GPDType> & gpdType = List<GPDType>());
0200 
0201     /**
0202      * Gives back a previously computed Compton Form Factor.
0203      * @param gpdType CFF type (e.g. H or E).
0204      * @return CFF value for the given type.
0205      */
0206     std::complex<double> getConvolCoeffFunctionValue(GPDType::Type gpdType);
0207 };
0208 
0209 } /* namespace PARTONS */
0210 
0211 #endif /* DVCS_PROCESS_MODULE_H */