Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // lAger: General Purpose l/A-event Generator
0002 // Copyright (C) 2016-2021 Sylvester Joosten <sjoosten@anl.gov>
0003 //
0004 // This file is part of lAger.
0005 //
0006 // lAger is free software: you can redistribute it and/or modify
0007 // it under the terms of the GNU General Public License as published by
0008 // the Free Shoftware Foundation, either version 3 of the License, or
0009 // (at your option) any later version.
0010 //
0011 // lAger is distributed in the hope that it will be useful,
0012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
0013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014 // GNU General Public License for more details.
0015 //
0016 // You should have received a copy of the GNU General Public License
0017 // along with lAger.  If not, see <https://www.gnu.org/licenses/>.
0018 //
0019 
0020 #ifndef LAGER_GEN_LA_JPACPHOTO_POMERON_LOADED
0021 #define LAGER_GEN_LA_JPACPHOTO_POMERON_LOADED
0022 
0023 #include <lager/core/generator.hh>
0024 #include <lager/core/particle.hh>
0025 #include <lager/gen/lA/generator.hh>
0026 #include <lager/gen/lA_event.hh>
0027 
0028 #include <jpacPhoto/amplitudes/pomeron_exchange.hpp>
0029 #include <jpacPhoto/reaction_kinematics.hpp>
0030 
0031 namespace lager {
0032 namespace lA {
0033 
0034 // =============================================================================
0035 // lA::jpacPhoto_pomeron
0036 //
0037 // gamma + p -> VM + p process
0038 // (using pomeron exchange)
0039 //
0040 // (uses additional dipole formfactor to model Q2 dependence)
0041 //
0042 // =============================================================================
0043 class jpacPhoto_pomeron : public lA::generator {
0044 public:
0045   using base_type = lA::generator;
0046 
0047   jpacPhoto_pomeron(const configuration& cf, const string_path& path,
0048                     std::shared_ptr<TRandom> r);
0049   virtual lA_event generate(const lA_data&);
0050   virtual double max_cross_section() const { return max_; }
0051   virtual double phase_space() const { return max_t_range_.width(); }
0052 
0053 private:
0054   double calc_max_xsec(const configuration& cf) /*const*/;
0055   interval<double> calc_max_t_range(const configuration& cf) const;
0056 
0057   // kinematics range
0058   interval<double> t_range(const double W2, const double Q2,
0059                            const double Mt) const;
0060 
0061   // cross section component evaluation
0062   // note:: non-const as we call a jpacPhoto function that's non-const
0063   double dsigma_dt(const double s, const double t) /*const*/
0064       ;
0065   double dipole(const double Q2) const;
0066 
0067   // threshold squared for these particular particles (correctly handels the
0068   // case of particles with non-zero width)
0069   double threshold2(const particle& vm, const particle& recoil) const;
0070 
0071   // utility function
0072   lA_event make_event(const lA_data& initial, const double t, particle vm1,
0073                       particle X1, const double xs);
0074 
0075   // initialize the reaction kinematics
0076   std::unique_ptr<jpacPhoto::reaction_kinematics> init_reaction() const;
0077   jpacPhoto::pomeron_exchange init_ampl();
0078 
0079   // recoil and vm particle info
0080   const particle recoil_;
0081   const particle vm_;
0082   const particle decay_lplus_;
0083   const particle decay_lminus_;
0084 
0085   // cross section settings
0086   const double regge_inter_; // Simple Regge trajectory intercept
0087   const double regge_slope_; // Simple Regge trajectory slope
0088   const double photo_norm_;  // t-channel normalization
0089   const double photo_slope_; // t-channel slope
0090   const double
0091       dipole_n_; // n-parameter for dipole factor for slightly improved EPA
0092 
0093   // cross section utility variables
0094   std::unique_ptr<jpacPhoto::reaction_kinematics>
0095       reaction_;                     // Reaction kinematics
0096   linear_trajectory regge_;          // Regge trajectory
0097   jpacPhoto::pomeron_exchange ampl_; // Amplitude
0098 
0099   // t-range and cross section maxima
0100   const interval<double> max_t_range_;
0101   const double max_;
0102 };
0103 
0104 } // namespace lA
0105 } // namespace lager
0106 
0107 #endif