Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-27 09:14:54

0001 // Charged axial-vector meson photoproduction proceeding through a pseudoscalar (pion) exchange

0002 //

0003 // Author:       Daniel Winney (2020)

0004 // Affiliation:  Joint Physics Analysis Center (JPAC)

0005 // Email:        dwinney@iu.edu

0006 // ---------------------------------------------------------------------------

0007 // References:

0008 // [1] arXiv:1503.02125 [hep-ph]

0009 // ---------------------------------------------------------------------------

0010 
0011 #ifndef _PSCALAR_
0012 #define _PSCALAR_
0013 
0014 #include "amplitude.hpp"
0015 #include "regge_trajectory.hpp"
0016 
0017 // ---------------------------------------------------------------------------

0018 // pseudoscalar_exchange class describes the amplitude for a spin-0 exchange

0019 // in the t-channel. Derived in terms of simple feynman rules at tree level.

0020 //

0021 // Initialization required a reaction_kinematics object.

0022 // Then either: the mass (in GeV) of the exchange (for fixed-spin exchange),

0023 //          or: a pointer to a linear_trajectory object (for Reggeize exchange).

0024 // and an optional string to identify the amplitude with.

0025 //

0026 // Evaluation requires two couplings:

0027 // photon coupling, gGamma, and nucleon coupling, gNN respectively.

0028 //

0029 // Set couplings with amp.set_params({gGamma, gNN});

0030 // ---------------------------------------------------------------------------

0031 
0032 namespace jpacPhoto
0033 {
0034     class pseudoscalar_exchange : public amplitude
0035     {
0036         public:
0037         // constructor for fixed meson exchange

0038         pseudoscalar_exchange(reaction_kinematics * xkinem, double mass, std::string name = "pseudoscalar_exchange")
0039         : amplitude(xkinem, name), _mEx2(mass*mass), _reggeized(false)
0040         {
0041             set_nParams(2);
0042             check_JP(xkinem->_jp);
0043         };
0044 
0045         // constructors for regge exchange

0046         pseudoscalar_exchange(reaction_kinematics * xkinem, linear_trajectory * traj, std::string name = "pseudoscalar_exchange")
0047         : amplitude(xkinem, name), _alpha(traj), _reggeized(true)
0048         {
0049             set_nParams(2);
0050             check_JP(xkinem->_jp);
0051         };
0052 
0053         // Setting utility

0054         void set_params(std::vector<double> params)
0055         {
0056             check_nParams(params);
0057             _gGamma = params[0];
0058             _gNN = params[1];
0059         };
0060 
0061         // Whether or not to include an exponential form factor (default false)

0062         void set_formfactor(bool FF, double bb = 0.)
0063         {
0064             _useFF = FF;
0065             _b = bb;
0066         }
0067 
0068         // Assemble the helicity amplitude by contracting the spinor indices

0069         std::complex<double> helicity_amplitude(std::array<int, 4> helicities, double xs, double xt);
0070 
0071         // only axial-vector kinematics allowed

0072         inline std::vector<std::array<int,2>> allowedJP()
0073         {
0074             return {{1, 1}};
0075         };
0076 
0077         private:
0078 
0079         // Whether to use fixed-spin propagator (false) or regge (true)

0080         bool _reggeized;
0081 
0082         // Mass of the exchanged pseudo-scalar (if REGGE = false)

0083         // ignored otherwise

0084         double _mEx2;
0085 
0086         // Regge trajectory for the pion (if REGGE = true)

0087         // ignored otherwise

0088         linear_trajectory * _alpha;
0089 
0090         // Coupling constants

0091         double _gGamma = 0.; // Gamma - Axial - Pseudoscalar coupling 

0092         double _gNN = 0.;    // Pseudoscalar - Nucleon coupling

0093 
0094         bool _useFF = false; // Whether to include the exponential form factor

0095         double _b = 0.; // "t-slope" parameter in the FF

0096 
0097         // Whether to switch to using the feynman rules

0098         bool _useFourVecs = false; 
0099 
0100         // Photon - pseudoscalar - Axial vertex

0101         std::complex<double> top_vertex(double lam_gam, double lam_vec);
0102 
0103         // Pseudoscalar - Nucleon vertex

0104         std::complex<double> bottom_vertex(double lam_targ, double lam_rec);
0105 
0106         // Simple pole propagator

0107         std::complex<double> scalar_propagator();
0108     };
0109 };
0110 
0111 #endif