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_JPSI_BH_LOADED
0021 #define LAGER_GEN_LA_OLEKSII_JPSI_BH_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_jpsi_bh
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 oleksii_jpsi_bh : public lA::generator {
0045 public:
0046   using base_type = lA::generator;
0047 
0048   oleksii_jpsi_bh(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 {
0053     // last factor is the cos(theta) range
0054     // return max_t_range_.width() *
0055     return (exp(1.13 * max_t_range_.max) - exp(1.13 * max_t_range_.min)) *
0056            (Mll_range_.max * Mll_range_.max - Mll_range_.min * Mll_range_.min) *
0057            TMath::TwoPi() * 2.;
0058   }
0059 
0060 private:
0061   interval<double> calc_max_t_range(const configuration& cf) const;
0062 
0063   // threshold squared for these particular particles (correctly handels the
0064   // case of particles with non-zero width)
0065   double threshold2(const particle& vm, const particle& recoil) const;
0066 
0067   // utility function
0068   lA_event make_event(const lA_data& initial, const double t,
0069                             particle vm1, particle X1, const double xs,
0070                             const double thetaCM_el,
0071                             const double phiCM_el) const;
0072 
0073   // recoil and vm particle info
0074   const particle recoil_;
0075   const particle vm_;
0076 
0077   // t-range and cross setion maxima
0078   const interval<double> max_t_range_;
0079   const interval<double> Mll_range_;
0080   const double max_;
0081 
0082   // subtraction constant
0083   const double T_0_;
0084 
0085   // theta acceptance to cut out colinear enhancements
0086   const interval<double> p_range_;
0087   const interval<double> theta_range_;
0088 };
0089 
0090 } // namespace lA
0091 } // namespace lager
0092 
0093 #endif