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_BRODSKY_2VMX_LOADED
0021 #define LAGER_GEN_LA_BRODSKY_2VMX_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::brodsky_2vmX
0033 //
0034 // gamma + p -> VM + X 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 //        dsigma_dexp_bt_brodsky(...)
0043 // =============================================================================
0044 class brodsky_2vmX : public lA::generator {
0045 public:
0046   using base_type = lA::generator;
0047 
0048   brodsky_2vmX(const configuration& cf, const string_path& path,
0049                std::shared_ptr<TRandom> r);
0050   virtual lA_event generate(const lA_data&);
0051   virtual double max_cross_section() const { return max_; }
0052   virtual double phase_space() const { return max_exp_bt_range_.width(); }
0053 
0054 private:
0055   double calc_max_xsec(const configuration& cf) const;
0056   interval<double> calc_max_t_range(const configuration& cf) const;
0057 
0058   // kinematics range
0059   interval<double> exp_bt_range(const double W2, const double Q2,
0060                                 const double Mt) const;
0061 
0062   // cross section component evaluation
0063   double dsigma_dexp_bt(const double W2, const double Mt) const;
0064   double R(const double Q2) const;
0065   double dipole(const double Q2) const;
0066 
0067   // jacobian for d/dexp_bt -> d/dt
0068   double jacobian(const double t) const;
0069 
0070   // threshold squared for these particular particles (correctly handels the
0071   // case of particles with non-zero width)
0072   double threshold2(const particle& vm, const particle& recoil) const;
0073 
0074   // utility function
0075   lA_event make_event(const lA_data& initial, const double t, particle vm1,
0076                       particle X1, const double xs, const double R);
0077 
0078   // recoil and vm particle info
0079   const particle recoil_;
0080   const particle vm_;
0081 
0082   // cross section settings
0083   const double photo_b_;   // target FF constant
0084   const double photo_c2g_; // 2-gluon amplitude norm
0085   const double photo_c3g_; // 3-gluon amplitude norm
0086   const double R_vm_c_;    // c-parameter for R
0087   const double R_vm_n_;    // n-parameter for R
0088   const double dipole_n_;  // n-parameter for dipole factor
0089 
0090   // t-range and cross setion maxima
0091   const interval<double> max_t_range_;
0092   const interval<double> max_exp_bt_range_;
0093   const double max_;
0094 };
0095 
0096 } // namespace lA
0097 } // namespace lager
0098 
0099 #endif