|
|
|||
File indexing completed on 2026-06-02 08:51:48
0001 #ifndef DVCS_PROCESS_BMJ12_H 0002 #define DVCS_PROCESS_BMJ12_H 0003 0004 /** 0005 * @file DVCSProcessBMJ12.h 0006 * @author Nabil CHOUIKA (SPhN / CEA Saclay) 0007 * @date 07 October 2015 0008 * @version 1.0 0009 */ 0010 0011 #include <complex> 0012 #include <string> 0013 #include <vector> 0014 0015 #include "../../../beans/gpd/GPDType.h" 0016 #include "../../../utils/type/PhysicalType.h" 0017 #include "DVCSProcessModule.h" 0018 0019 namespace PARTONS { 0020 0021 /** 0022 * @class DVCSProcessBMJ12 0023 * 0024 * Module for the DVCS process using the Belitsky-Müller set of formulas. 0025 * 0026 * Code based on the published papers: 0027 * - arxiv:hep-ph/0112108 @cite Belitsky2001ns for the BH amplitude ; 0028 * - arxiv:1212.6674 @cite Belitsky2012ch for the DVCS amplitude and interference. 0029 */ 0030 class DVCSProcessBMJ12: public DVCSProcessModule { 0031 public: 0032 static const unsigned int classId; ///< Unique ID to automatically register the class in the registry. 0033 0034 /** 0035 * Constructor. 0036 * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details. 0037 * 0038 * @param className name of child class. 0039 */ 0040 DVCSProcessBMJ12(const std::string &className); 0041 /** 0042 * Default destructor. 0043 */ 0044 virtual ~DVCSProcessBMJ12(); 0045 0046 virtual DVCSProcessBMJ12* clone() const; 0047 0048 protected: 0049 /** 0050 * Copy constructor. 0051 * 0052 * Used by the factory. 0053 * 0054 * @param other 0055 */ 0056 DVCSProcessBMJ12(const DVCSProcessBMJ12& other); 0057 0058 virtual void initModule(); 0059 virtual void isModuleWellConfigured(); 0060 0061 // Cross sections 0062 virtual PhysicalType<double> CrossSectionBH(); 0063 virtual PhysicalType<double> CrossSectionVCS(); 0064 virtual PhysicalType<double> CrossSectionInterf(); 0065 0066 private: 0067 0068 // The vectors here are actually static arrays, DO NOT PUSH BACK OR POP BACK. 0069 // Use them as arrays! Size fixed in the constructor. 0070 0071 double m_phi1BMK; ///< Angle small phi of BMK (between electron and outgoing proton). 0072 double m_phi2BMK; ///< Angle small phi of BMK (between target polarization and outgoing proton). 0073 double m_PhiBMK; ///< Angle capital Phi of BMK (between electron and target polarization). 0074 double m_theta; ///< Polarization angle of target. 0075 double m_Lambda; ///< Longitudinal polarization of target. 0076 double m_lambda; ///< Lepton helicity. 0077 double m_phaseSpace; ///< Phase-space factor. 0078 0079 double m_xB2; ///< Square of xB. 0080 std::vector<double> m_Q; ///< Square root of virtuality Q2. 0081 ///< m_Q[0] = Q, m_Q[1] = Q^2, etc... 0082 std::vector<double> m_xBtQ2; 0083 std::vector<double> m_M; ///< Proton mass. 0084 ///< m_M[0] = M, m_M[1] = M^2, etc... 0085 std::vector<double> m_yBMJ; ///< Lepton energy fraction. 0086 ///< m_y[0] = y, m_y[1] = y^2, etc... 0087 std::vector<double> m_epsilonBMJ; ///< 0088 ///< m_epsilon[0] = epsilon, m_epsilon[1] = epsilon^2, etc... 0089 std::vector<double> m_epsroot; ///< sqrt(1+epsilon^2) 0090 std::vector<double> m_K, m_Kt; ///< Kinematical factors K and K tilde. 0091 ///< m_K[0] = K, m_K[1] = K^2, etc... 0092 std::vector<double> m_Delta2; ///< Mandelstam variable t. 0093 ///< m_Delta2[0] = t, m_Delta2[1] = Delta^4 = t^2, etc... 0094 0095 //@{ 0096 double m_P1, m_P2; ///< Lepton propagators. 0097 //@} 0098 0099 void defineAngles(const NumA::Vector3D &targetPolarization); ///< Defines the BMK angles. Conversion to the BMK convention. 0100 0101 double m_F1, m_F2; ///< Dirac and Pauli form factors. 0102 void computeFormFactors(); ///< Compute F1 and F2 form factors. 0103 0104 /* Bethe Heitler coeffs (BMK2002) */ 0105 /** Fourier coeffs of the BH squared amplitude. 0106 * 1st index: [0]=unp, [1]=LP, [2]=TP. \n 0107 * 2nd index: [0]=c0, [1]=c1, [2]=c2. 0108 */ 0109 std::vector<std::vector<double> > m_cBH; 0110 0111 double m_s1BHTP; ///< BH Fourier coeff s1 TP. 0112 0113 void computeFourierCoeffsBH(); ///< Computes c_BH and s_BH. 0114 0115 /* VCS coeffs (BMJ2012) */ 0116 /** Fourier coeffs (cosinus) of the VCS squared amplitude. 0117 * 1st index: [0]=unp, [1]=LP, [2]=TP. \n 0118 * 2nd index: [0]=c0, [1]=c1, [2]=c2. 0119 */ 0120 std::vector<std::vector<double> > m_cVCS; 0121 /** Fourier coeffs (sinus) of the VCS squared amplitude. 0122 * 1st index: [0]=unp, [1]=LP, [2]=TP. \n 0123 * 2nd index: [0]=0., [1]=s1, [2]=s2. 0124 */ 0125 std::vector<std::vector<double> > m_sVCS; 0126 0127 void computeFourierCoeffsVCS(); ///< Computes c_VCS and s_VCS. 0128 0129 /* Interference coeffs (BMJ2012) */ 0130 /** Fourier coeffs (cosinus) of the Interference term. 0131 * 1st index: [0]=unp, [1]=LP, [2]=TP. \n 0132 * 2nd index: [0]=c0, [1]=c1, [2]=c2, [3]=c3. 0133 */ 0134 std::vector<std::vector<double> > m_cI; 0135 /** Fourier coeffs (sinus) of the Interference term. 0136 * 1st index: [0]=unp, [1]=LP, [2]=TP. \n 0137 * 2nd index: [0]=0., [1]=s1, [2]=s2, [3]=s3. 0138 */ 0139 std::vector<std::vector<double> > m_sI; 0140 //@{ 0141 /** Angular coeffs @f$ C_ab(n) @f$, @f$ dC_ab(n) @f$, @f$ S_ab(n) @f$, @f$ dS_ab(n) @f$ .. 0142 * 1st index: [0]=C++, [1]=C-+, [2]=C0+. \n 0143 * 2nd index: [0]=not, [1]=V, [2]=A. \n 0144 * 3rd index: n 0145 */ 0146 std::vector<std::vector<std::vector<double> > > m_C, m_S, m_dC, m_dS; 0147 //@} 0148 0149 void computeAngularCoeffsInterf(); ///< Computes C_ab(n), S_ab(n), etc. 0150 void computeFourierCoeffsInterf(); ///< Computes c_I and s_I. 0151 0152 /** Coefficients used for computing F+b and F0+. 0153 * 1st index: [0] = F++, [1] = F+-, [2] = F0+. \n 0154 * 2nd index: [0]: F coeff, [1]: FT coeff, [2]: FLT coeff. 0155 */ 0156 std::vector<std::vector<double> > m_cF; 0157 0158 /** Array that stores the CFFs F+b and F0+. 0159 * 1st index: [0] = H, [1] = E, [2] = Ht, [3] = Et. \n 0160 * 2nd index: [0] = F++, [1] = F+-, [2] = F0+. 0161 */ 0162 std::vector<std::vector<std::complex<double> > > m_CFF; 0163 0164 /** Method that gives F+b and F0+ already calculated. 0165 */ 0166 std::complex<double> CFF(GPDType::Type F, int a, int b); 0167 0168 void computeCFFs(); ///< Computes CFFS F+b and F0+. 0169 0170 //@{ 0171 /** Method that gives the VCS coefficient bilinear in the CFFs. 0172 * 0173 * @param S 0=unp, 1=LP, 2=TP+, 3=TP- 0174 */ 0175 std::complex<double> C_VCS(unsigned int S, int a1, int b1, int a2, int b2); 0176 std::complex<double> C_VCS(unsigned int S, int a1, int b1, int a2, int b2, 0177 int a3, int b3); 0178 std::complex<double> C_VCS(unsigned int S, int a1, int b1, int a2, int b2, 0179 int a3, int b3, int a4, int b4); 0180 //@} 0181 0182 /** Method that gives the Interference coefficient linear in the CFFs. 0183 * 0184 * @param S 0=unp, 1=LP, 2=TP+, 3=TP-. 0185 * @param VA can be "V" or "A" or "". 0186 */ 0187 std::complex<double> C_I(unsigned int S, int a, int b, 0188 const std::string& VA); 0189 /** Method that gives the "effective" linear combinations of CFFs. 0190 * Corresponds to Eqs. (68-69) but multiplied by the coefficient @f$ C_{ab}(n) @f$ 0191 * to avoid divisions by zero. 0192 * @param S 0=unp, 1=LP, 2=TP+, 3=TP-. 0193 * @param n 0194 * @param a 0195 * @param b 0196 * @return @f$ {\cal C}_{ab,S}(n|Fab) \times C_{ab}(n) @f$ 0197 */ 0198 std::complex<double> C_I(unsigned int S, unsigned int n, int a, int b); 0199 /** Method that gives the "effective" linear combinations of CFFs. 0200 * Corresponds to Eqs. (68-69) but multiplied by the coefficient @f$ S_{ab}(n) @f$ 0201 * to avoid divisions by zero. 0202 * @param S 0=unp, 1=LP, 2=TP+, 3=TP-. 0203 * @param n 0204 * @param a 0205 * @param b 0206 * @return @f$ {\cal S}_{ab,S}(n|Fab) \times S_{ab}(n) @f$ 0207 */ 0208 std::complex<double> S_I(unsigned int S, unsigned int n, int a, int b); 0209 0210 double SqrAmplBH(double beamHelicity, double beamCharge, 0211 NumA::Vector3D targetPolarization); ///< Returns the squared amplitude of Bethe Heitler process. 0212 double SqrAmplVCS(double beamHelicity, double beamCharge, 0213 NumA::Vector3D targetPolarization); ///< Returns the squared amplitude of VCS process. 0214 double SqrAmplInterf(double beamHelicity, double beamCharge, 0215 NumA::Vector3D targetPolarization); ///< Returns the interference term of the squared amplitude. 0216 }; 0217 0218 } /* namespace PARTONS */ 0219 0220 #endif /* DVCS_PROCESS_BMJ12_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|