Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef DVCS_PROCESS_GV08_H
0002 #define DVCS_PROCESS_GV08_H
0003 
0004 /**
0005  * @file DVCSProcessGV08.h
0006  * @author Hervé MOUTARDE (SPhN / CEA Saclay)
0007  * @version 1.0
0008  *
0009  * @date 25-09-2015 (Bryan BERTHOU) : refactoring
0010  */
0011 
0012 #include <NumA/linear_algebra/vector/Vector4D.h>
0013 #include <string>
0014 #include <vector>
0015 
0016 #include "../../../utils/type/PhysicalType.h"
0017 #include "DVCSProcessModule.h"
0018 
0019 namespace PARTONS {
0020 
0021 /**
0022  * @class DVCSProcessGV08
0023  *
0024  * Module for the DVCS process using the unpublished Guichon-Vanderhaeghen set of formulas.
0025  */
0026 class DVCSProcessGV08: public DVCSProcessModule {
0027 public:
0028     static const unsigned int classId; ///< Unique ID to automatically register the class in the registry.
0029 
0030     /**
0031      * Constructor.
0032      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0033      *
0034      * @param className name of child class.
0035      */
0036     DVCSProcessGV08(const std::string &className);
0037     /**
0038      * Default destructor.
0039      */
0040     virtual ~DVCSProcessGV08();
0041 
0042     virtual DVCSProcessGV08* clone() const;
0043 
0044 protected:
0045     /**
0046      * Copy constructor
0047      *
0048      * Use by the factory
0049      *
0050      * @param other
0051      */
0052     DVCSProcessGV08(const DVCSProcessGV08& other);
0053 
0054     virtual void initModule();
0055     virtual void isModuleWellConfigured();
0056 
0057     // Cross sections
0058     virtual PhysicalType<double> CrossSectionBH();
0059     virtual PhysicalType<double> CrossSectionVCS();
0060     virtual PhysicalType<double> CrossSectionInterf();
0061 
0062 private:
0063 
0064     double m_phaseSpace; ///< Phase-space factor.
0065 
0066     double m_phiGV; ///< Angle between hadronic and leptonic planes (opposite sign of the phi angle of Trento).
0067 
0068     // Store each power of Q
0069     // [0] = Q2
0070     // [1] = Q3
0071     // [2] = Q4
0072     // [3] = Q5
0073     std::vector<double> m_powerOfQ;
0074 
0075     // Store each power of M
0076     // [0] = M2
0077     // [1] = M4
0078     // [2] = M6
0079     // [3] = M8
0080     std::vector<double> m_powerOfProtonMass;
0081 
0082     // Variable used in the computation of Omega;
0083     double m_yGV;
0084     double m_xB2; ///< Square of @f$ x_B @f$.
0085 
0086     double m_xBMin, m_xBMax; // Should be removed. xBMin already in DVCSModule and xBMax is wrong.
0087 
0088     /*---------------------------------- Tests variables -----------------------------------*/
0089 
0090     // Printouts
0091     bool Validation;
0092     bool NoPrint;
0093 
0094     /*---------------------------------------- Kinematics ----------------------------------*/
0095 
0096     // Frame dependent scalars
0097     //double m_E; // Beam energy
0098     double m_thetag; ///< Angle between real and virtual photons.
0099     double m_qpPerp; ///< Component (here x-axis) of the real photon 3-momentum orthogonal
0100                      ///< to the virtual photon trajectory (here z-axis) in the
0101                      ///< hadronic plane (here xz-plane).
0102     double m_Ur[100]; ///< Coefficients of the expansion of the interference cross section
0103                       ///< wrt (combinations of) helicity amplitudes.
0104     double m_Omega; ///< (Function of) the linear polarization rate.
0105 
0106     // Invariant scalars
0107     double m_s; ///< Mandelstam variable (square of the total incoming 4-momentum).
0108     double m_Q;  ///< Photon virtual mass i.e.\ square root of Q2.
0109 
0110     // 4-vectors defined in the CM frame :
0111     NumA::Vector4D m_qCM; ///< Virtual photon (propagates along z-axis). 4-vector defined in the CM frame.
0112     NumA::Vector4D m_pCM; ///< Incoming proton (propagates along z-axis). 4-vector defined in the CM frame.
0113     NumA::Vector4D m_qpCM; ///< Real photon (defines hadronic plane xz). 4-vector defined in the CM frame.
0114     NumA::Vector4D m_ppCM; ///< Outgoing proton. 4-vector defined in the CM frame.
0115 
0116     /*------------------------ (Combinations of) helicity amplitudes -----------------------*/
0117 
0118     double Jem[4][3]; ///< Helicity amplitudes of the interference process assuming the
0119                       ///< real photon has helicity +1.
0120     double RMvcs[4][3]; ///<  Real part of the helicity amplitudes of the VCS process
0121                         ///< assuming the real photon has helicity +1.
0122     double IMvcs[4][3]; ///<  Imaginary part of the helicity amplitudes of the VCS process
0123                         ///< assuming the real photon has helicity +1.
0124 
0125     /*------------------ Expansion of cross sections for harmonic analysis -----------------*/
0126 
0127                         // Bethe Heitler process
0128     double SigmaBHPol0[4]; ///< Coefficients for the unpolarized cross section of the Bethe-Heitler process.
0129     double SigmaBHPolX[2]; ///< Coefficients for the x-polarized cross section of the Bethe-Heitler process.
0130     double SigmaBHPolY; ///< Coefficient for the y-polarized cross section of the Bethe-Heitler process.
0131     double SigmaBHPolZ[2]; ///< Coefficients for the z-polarized cross section of the Bethe-Heitler process.
0132 
0133     // Virtual Compton Scattering process
0134 
0135     double SigmaVCSPol0[5]; ///< Coefficients for the unpolarized cross section of the Virtual Compton Scattering process.
0136     double SigmaVCSPolX[4]; ///< Coefficients for the x-polarized cross section of the Virtual Compton Scattering process.
0137     double SigmaVCSPolY[5]; ///< Coefficients for the y-polarized cross section of the Virtual Compton Scattering process.
0138     double SigmaVCSPolZ[4]; ///< Coefficients for the z-polarized cross section of the Virtual Compton Scattering process.
0139 
0140     // Interference
0141 
0142     double SigmaIPol0[8]; ///< Coefficients for the unpolarized cross section (interference term).
0143     double SigmaIPolX[8]; ///< Coefficients for the x-polarized cross section (interference term).
0144     double SigmaIPolY[8]; ///< Coefficients for the x-polarized cross section (interference term).
0145     double SigmaIPolZ[8]; ///< Coefficients for the x-polarized cross section (interference term).
0146 
0147     /*-------------------------------------- Methods ---------------------------------------*/
0148 
0149     // Initialisations
0150     void MakeExactBHCrossSections(); ///< Fills the Jem and SigmaBHPol arrays.
0151 
0152     void MakeExactVCSAndInterfCrossSections(); ///< Fills the Ur, SigmaVCSPol and SigmaIPol arrays.
0153 
0154     double DdirectDcrossed(double phi); ///< Denominator of the Bethe Heitler cross section.
0155 
0156     double SqrAmplBH(double beamHelicity, double beamCharge,
0157             NumA::Vector3D targetPolarization); ///< Returns the squared amplitude of Bethe Heitler process.
0158 
0159     double SqrAmplVCSAndInterf(double beamHelicity, double beamCharge,
0160             NumA::Vector3D targetPolarization); ///< Sum of the squared amplitude of VCS process and interference term.
0161     double SqrAmplVCS(double beamHelicity, double beamCharge,
0162             NumA::Vector3D targetPolarization); ///< Returns the squared amplitude of VCS process.
0163     double SqrAmplInterf(double beamHelicity, double beamCharge,
0164             NumA::Vector3D targetPolarization); ///< Returns the interference term of the squared amplitude.
0165 
0166     void MakeVCSHelicityAmplitudes();
0167 
0168 };
0169 
0170 } /* namespace PARTONS */
0171 
0172 #endif /* DVCS_PROCESS_GV08_H */
0173