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_OLEKSII_2VMp_LOADED
0021 #define LAGER_GEN_LA_OLEKSII_2VMp_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 namespace lager {
0029 namespace lA {
0030 
0031 // =============================================================================
0032 // lA::oleksii_2vmp
0033 //
0034 // gamma + p -> VM + p process
0035 //
0036 // Uses the following expressions (cf. lager/physics/vm.hh)
0037 //  * R (sigma_L/sigma_T):
0038 //        R_vm_martynov(...)
0039 //  * Dipole FF for sigma_gamma -> sigma_t:
0040 //        dipole_ff_vm_hermes(...)
0041 //  * t-channel cross section:
0042 //        Oleksii's implementation for J/psi and Upsilon
0043 // =============================================================================
0044 
0045 class oleksii_2vmp_amplitude;
0046 class oleksii_2vmp_slope;
0047 
0048 class oleksii_2vmp : public lA::generator {
0049 public:
0050   using base_type = lA::generator;
0051 
0052   oleksii_2vmp(const configuration& cf, const string_path& path,
0053                std::shared_ptr<TRandom> r);
0054   virtual lA_event generate(const lA_data&);
0055   virtual double max_cross_section() const { return max_; }
0056   virtual double phase_space() const { return max_exp_b0t_range_.width(); }
0057 
0058 private:
0059   double calc_min_b() const;
0060   double calc_max_b(const configuration& cf) const;
0061   interval<double> calc_max_b_range(const configuration& cf) const;
0062   double calc_max_xsec(const configuration& cf) const;
0063   interval<double> calc_max_t_range(const configuration& cf) const;
0064 
0065   // kinematics range
0066   interval<double> t_range(const double W2, const double Q2,
0067                            const double Mt) const;
0068   // kinematics range
0069   interval<double> exp_bt_range(const double W2, const double Q2,
0070                                 const double Mt) const;
0071 
0072   // cross section component evaluation
0073   double dsigma_dexp_b0t(const double W2, const double t, const double b) const;
0074   double R(const double Q2) const;
0075   double dipole(const double Q2) const;
0076 
0077   // jacobian (equal to unity)
0078   double jacobian(const double t) const;
0079 
0080   // threshold squared for these particular particles (correctly handels the
0081   // case of particles with non-zero width)
0082   double threshold2(const particle& vm, const particle& recoil) const;
0083 
0084   // utility function
0085   lA_event make_event(const lA_data& initial, const double t,
0086                             const double b, particle vm1, particle X1,
0087                             const double xs, const double R);
0088 
0089   // recoil and vm particle info
0090   const particle recoil_;
0091   const particle vm_;
0092 
0093   // scattering amplitude
0094   class oleksii_2vmp_amplitude* ampl_;
0095   class oleksii_2vmp_slope* slope_;
0096 
0097   // cross section settings
0098   const double T0_;       // subtraction constant for dispersion relation
0099   const double R_vm_c_;   // c-parameter for R
0100   const double R_vm_n_;   // n-parameter for R
0101   const double dipole_n_; // n-parameter for dipole factor
0102 
0103   // t-range and cross setion maxima
0104   const interval<double> max_b_range_; // upper limit to b parameter
0105   const interval<double> max_t_range_;
0106   const interval<double> max_exp_b0t_range_;
0107   const double max_;
0108 };
0109 
0110 } // namespace lA
0111 } // namespace lager
0112 
0113 #endif