|
|
|||
File indexing completed on 2026-06-02 08:51:48
0001 #ifndef DVCS_PROCESS_VGG99_H 0002 #define DVCS_PROCESS_VGG99_H 0003 0004 /** 0005 * @file DVCSProcessVGG99.h 0006 * @author Michel Guidal (IPNO) 0007 * @author Pawel Sznajder (IPNO) 0008 * @version 1.0 0009 */ 0010 0011 #include <NumA/linear_algebra/matrix_complex/MatrixComplex4D.h> 0012 #include <NumA/linear_algebra/vector_complex/VectorComplex3D.h> 0013 #include <NumA/linear_algebra/vector_complex/VectorComplex4D.h> 0014 #include <complex> 0015 #include <string> 0016 0017 #include "../../../utils/type/PhysicalType.h" 0018 #include "DVCSProcessModule.h" 0019 0020 namespace PARTONS { 0021 0022 /** 0023 * @class DVCSProcessVGG99 0024 * 0025 * VGG process model for DVCS. 0026 * 0027 * For the reference see: 0028 * - Prog. Part. Nucl. Phys. 47, 401 (2001) 0029 * - Phys. Rev. Lett. 80 5064 (1998). 0030 * - Phys. Rev. D 60, 094017 (1999). 0031 * - Phys. Rev. D 72, 054013 (2005). 0032 * 0033 * Module based on the original code received from M. Guidal as a private communication. 0034 */ 0035 class DVCSProcessVGG99: public DVCSProcessModule { 0036 0037 public: 0038 0039 static const unsigned int classId; ///< Unique ID to automatically register the class in the registry. 0040 0041 /** 0042 * Constructor. 0043 * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details. 0044 * 0045 * @param className name of child class. 0046 */ 0047 DVCSProcessVGG99(const std::string &className); 0048 0049 /** 0050 * Default destructor. 0051 */ 0052 virtual ~DVCSProcessVGG99(); 0053 virtual DVCSProcessVGG99* clone() const; 0054 0055 protected: 0056 0057 /** Copy constructor. 0058 @param other Object to be copied. 0059 */ 0060 DVCSProcessVGG99(const DVCSProcessVGG99& other); 0061 0062 virtual void initModule(); 0063 virtual void isModuleWellConfigured(); 0064 0065 virtual PhysicalType<double> CrossSectionBH(); 0066 virtual PhysicalType<double> CrossSectionVCS(); 0067 virtual PhysicalType<double> CrossSectionInterf(); 0068 0069 private: 0070 0071 //TYPES 0072 0073 typedef NumA::VectorComplex3D momentum3; 0074 typedef NumA::VectorComplex4D momentum4; 0075 typedef NumA::VectorComplex4D spinor; 0076 typedef NumA::MatrixComplex4D spinorMatrix; 0077 0078 /** Orientation of spinor. 0079 */ 0080 enum SpinorOrientation { 0081 UNDEFINED = 0, x = 1, y = 2, z = 3 0082 }; 0083 0084 //INTERNAL VARIABLES 0085 double m_target_polarization; ///< Target polarization. 0086 double m_target_polarizationL; ///< Longitudinal component of target polarization. 0087 double m_target_polarizationT; ///< Transverse component of target polarization. 0088 double m_target_polarizationT_x; ///< Transverse x component of target polarization. 0089 double m_target_polarizationT_y; ///< Transverse y component of target polarization. 0090 SpinorOrientation m_proton_spinor_orientation; ///< Orientation of target spinor. 0091 0092 double m_nu; ///< Kinematic variable nu. 0093 double m_y; ///< Kinematic variable y. 0094 double m_s; ///< Kinematic variable s. 0095 double m_xi; ///< Kinematic variable xi. 0096 0097 double k_in_mom; ///< Momentum of incoming lepton. 0098 double k_out_mom; ///< Momentum of outgoing lepton. 0099 double q_in_mom; ///< Momentum of incoming photon. 0100 double q_out_mom; ///< Momentum of outgoing photon. 0101 double k_in_en; ///< Energy of incoming lepton. 0102 double k_out_en; ///< Energy of outgoing lepton. 0103 double q_in_en; ///< Energy of incoming photon. 0104 double q_out_en; ///< Energy of outgoing photon. 0105 double p_in_en; ///< Energy of incoming proton. 0106 double p_out_en; ///< Energy of outgoing proton. 0107 0108 momentum3 k_in; ///< Momentum vector of incoming lepton. 0109 momentum3 k_out; ///< Momentum vector of outgoing lepton. 0110 momentum3 q_in; ///< Momentum vector of incoming photon. 0111 momentum3 q_out; ///< Momentum vector of outgoing photon. 0112 momentum3 p_in; ///< Momentum vector of incoming proton. 0113 momentum3 p_out; ///< Momentum vector of outgoing proton. 0114 0115 momentum4 k4_in; ///< Four vector of incomming lepton. 0116 momentum4 k4_out; ///< Four vector of outgoing lepton. 0117 momentum4 q4_in; ///< Four vector of incomming photon. 0118 momentum4 q4_out; ///< Four vector of outgoing photon. 0119 momentum4 p4_in; ///< Four vector of incomming proton. 0120 momentum4 p4_out; ///< Four vector of outgoing proton. 0121 0122 double an_th_q_out; ///< Polar angle of outgoing photon. 0123 double an_phi_q_out; ///< Azimuthal angle of outgoing photon. 0124 0125 /** Used to fill internal variables. 0126 */ 0127 void fillInternalVariables(NumA::Vector3D targetPolarization); 0128 0129 //ALGEBRA 0130 0131 /** Initialize four vector from energy and momentum. 0132 * @param a Input energy. 0133 * @param b Input momentum vector. 0134 */ 0135 NumA::VectorComplex4D V4ini(std::complex<double> a, 0136 NumA::VectorComplex3D b); 0137 0138 /** Positive-energy Dirac spinor. 0139 * @param p Momentum vector. 0140 * @param mass Mass. 0141 * @param sproj Spin projection. 0142 */ 0143 NumA::VectorComplex4D spinor_pos(NumA::VectorComplex3D p, double mass, 0144 double sproj); 0145 0146 /** Contravariant Dirac matrices as 4 by 4 matrices in spinor space (convention Bjorken and Drell 1964). 0147 * @param mu Dimension index. 0148 */ 0149 NumA::MatrixComplex4D dirac_gamma(int mu); 0150 0151 /** Gamma5 matrix. 0152 */ 0153 NumA::MatrixComplex4D dirac_gamma5(); 0154 0155 /** Metric signature. 0156 * @param mu, nu Dimension indices. 0157 */ 0158 double metric(int mu, int nu); 0159 0160 /** Elements of three Pauli matrices for given index element (up/left: ++, u/r:+-, d/l: -+, d/r:--). 0161 * @param row Row of matrix. 0162 * @param col Column of matrix. 0163 */ 0164 NumA::VectorComplex3D pauli(double row, double col); 0165 0166 /** Dirac adjoint. 0167 * @param a Input dirac spinor. 0168 */ 0169 NumA::VectorComplex4D spinor_adj(NumA::VectorComplex4D a); 0170 0171 /** Spinor|gamma|spinor product. 0172 * @param l Spinor left. 0173 * @param m Gamma matrix. 0174 * @param r Spinor right. 0175 */ 0176 std::complex<double> spinleft_mat_spinright(NumA::VectorComplex4D l, 0177 NumA::MatrixComplex4D m, NumA::VectorComplex4D r); 0178 0179 /** Contraction of four vector with gamma matrix. 0180 * @param a Input four vector. 0181 */ 0182 NumA::MatrixComplex4D fvec_slash(NumA::VectorComplex4D a); 0183 0184 /** Contraction of two four vectors. 0185 * @param a, b Input four vectors. 0186 */ 0187 std::complex<double> V4mul(NumA::VectorComplex4D a, 0188 NumA::VectorComplex4D b); 0189 0190 /** Complex number inverse. 0191 * @param z Complex number to be inverted. 0192 */ 0193 std::complex<double> Cinv(std::complex<double> z); 0194 0195 /** Helicity spinor for a particle with momentum, mass 0 and helicity +/-. 0196 * @param p Input momentum. 0197 * @param hel Input helicity. 0198 */ 0199 NumA::VectorComplex4D spinor_hel(momentum3 p, double hel); 0200 0201 /** Polar angle for given vector. 0202 * @param t Input vector. 0203 */ 0204 double polar_angle(NumA::VectorComplex3D t); 0205 0206 /** Azimuthal angle for given vector. 0207 * @param t Input vector. 0208 */ 0209 double azimut_angle(NumA::VectorComplex3D t); 0210 0211 /** Contravariant tensor sigma in spinor space (convention Bjorken and Drell 1964). 0212 * @param mu, nu Dimension indices. 0213 */ 0214 NumA::MatrixComplex4D dirac_sigma(int mu, int nu); 0215 0216 /** Unit spinor matrix. 0217 */ 0218 NumA::MatrixComplex4D unit_spinor_mat(); 0219 0220 /** Vector set via magnitude, polar and azimuthal angles. 0221 * @param magn Magnitude. 0222 * @param th Polar angle. 0223 * @param phi Azimuthal angle. 0224 */ 0225 NumA::VectorComplex3D Vpolar(double magn, double th, double phi); 0226 0227 /** Antisymmetric epsilon. 0228 * @param ka, la, mu, nu Indices. 0229 */ 0230 double antisymm_epsilon(int ka, int la, int mu, int nu); 0231 0232 //PHYSICS 0233 0234 /** Calculate cross section. 0235 * @param beamHelicity Beam helicity. 0236 * @param beamCharge Beam charge. 0237 * @param targetPolarization Target polarization. 0238 * @param mechanism Mechanism (0 - BH, 1 - DVCS, 2 - INT). 0239 */ 0240 double CrossSectionMechanism(double beamHelicity, double beamCharge, 0241 NumA::Vector3D targetPolarization, int mechanism); 0242 0243 /** Calculate cross section for specific helicities. 0244 * @param leptcharge Beam charge. 0245 * @param mechanism Mechanism (0 - BH, 1 - DVCS, 2 - INT). 0246 * @param el_hel Beam helicity. 0247 * @param sp_in Target helicity. 0248 */ 0249 double v_compton_doublepol_cross_inv(double leptcharge, int mechanism, 0250 double el_hel, double sp_in); 0251 0252 /** Gamma_NN electromagnetic vertex. 0253 * @param mu Dimension index. 0254 * @param q Four momentum of virtual photon. 0255 */ 0256 NumA::MatrixComplex4D gamma_NN_vertex(int mu, NumA::VectorComplex4D q); 0257 0258 /** Amplitude for BH process. 0259 * @param mu Dimension index. 0260 * @param el_hel Beam helicity. 0261 * @param sp_in Target helicity (incoming proton). 0262 * @param sp_out (outgoing proton). 0263 */ 0264 std::complex<double> AmplitudeBH(int mu, double el_hel, double sp_in, 0265 double sp_out); 0266 0267 /** Amplitude for DVCS process. 0268 * @param mu Dimension index. 0269 * @param el_hel Beam helicity. 0270 * @param sp_in Target helicity (incoming proton). 0271 * @param sp_out (outgoing proton). 0272 */ 0273 std::complex<double> AmplitudeDVCS(int mu, double el_hel, double sp_in, 0274 double sp_out); 0275 0276 /** Amplitude for the reaction. 0277 * @param mu, nu Dimension indices. 0278 * @param sp_in Target helicity (incoming proton). 0279 * @param sp_out (outgoing proton). 0280 */ 0281 std::complex<double> J_DVCS(int mu, int nu, double sp_in, double sp_out); 0282 0283 /** Matrix element for the reaction. 0284 * @param leptcharge Beam charge. 0285 * @param mechanism Mechanism (0 - BH, 1 - DVCS, 2 - INT). 0286 * @param mu Dimension index. 0287 * @param el_hel Beam helicity. 0288 * @param sp_in Target helicity (incoming proton). 0289 * @param sp_out (outgoing proton). 0290 */ 0291 std::complex<double> v_compton_t_matrix_hel(double leptcharge, 0292 int mechanism, int mu, double el_hel, double sp_in, double sp_out); 0293 0294 /** Squared amplitude for the reaction. 0295 * @param leptcharge Beam charge. 0296 * @param mechanism Mechanism (0 - BH, 1 - DVCS, 2 - INT). 0297 * @param el_hel Beam helicity. 0298 * @param sp_in Target helicity. 0299 */ 0300 double v_compton_doublepol_sqrampl(double leptcharge, int mechanism, 0301 double el_hel, double sp_in); 0302 }; 0303 0304 } /* namespace PARTONS */ 0305 0306 #endif /* DVCS_PROCESS_VGG99_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|