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_PENTAQUARK_LOADED
0021 #define LAGER_GEN_LA_JPACPHOTO_PENTAQUARK_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/amplitude_sum.hpp>
0029 #include <jpacPhoto/amplitudes/baryon_resonance.hpp>
0030 #include <jpacPhoto/reaction_kinematics.hpp>
0031 
0032 namespace lager {
0033 namespace lA {
0034 
0035 // =============================================================================
0036 // lA::jpacPhoto_pentaquark
0037 //
0038 // gamma + p -> VM + p process
0039 // (using pentaquark exchange)
0040 //
0041 // (uses additional dipole formfactor to model Q2 dependence)
0042 //
0043 // =============================================================================
0044 class jpacPhoto_pentaquark : public lA::generator {
0045 public:
0046   using base_type = lA::generator;
0047 
0048   jpacPhoto_pentaquark(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_t_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> t_range(const double W2, const double Q2,
0060                            const double Mt) const;
0061 
0062   // cross section component evaluation
0063   // note:: non-const as we call a jpacPhoto function that's non-const
0064   double dsigma_dt(const double s, const double t) /*const*/
0065       ;
0066   double dipole(const double Q2) const;
0067 
0068   // threshold squared for these particular particles (correctly handels the
0069   // case of particles with non-zero width)
0070   double threshold2(const particle& vm, const particle& recoil) const;
0071 
0072   // utility function
0073   lA_event make_event(const lA_data& initial, const double t, particle vm1,
0074                       particle X1, const double xs);
0075 
0076   // initialize the reaction kinematics
0077   std::unique_ptr<jpacPhoto::reaction_kinematics> init_reaction() const;
0078   std::vector<std::unique_ptr<jpacPhoto::baryon_resonance>>
0079   init_components() const;
0080   jpacPhoto::amplitude_sum init_ampl();
0081 
0082   // recoil and vm particle info
0083   const particle recoil_;
0084   const particle vm_;
0085   const particle decay_lplus_;
0086   const particle decay_lminus_;
0087 
0088   // cross section settings
0089   const std::vector<int> spin_parity_;  // resonance (spin x 2) times parity
0090   const std::vector<double> mass_;      // mass of resonance
0091   const std::vector<double> width_;     // width of resonance
0092   const std::vector<std::string> name_; // resonance names
0093   const double photo_balance_;          // balance between photocouplings
0094   const double branching_;              // branching fraction to J/psi-p
0095   const double
0096       dipole_n_; // n-parameter for dipole factor for slightly improved EPA
0097 
0098   // cross section utility variables
0099   std::unique_ptr<jpacPhoto::reaction_kinematics>
0100       reaction_; // Reaction kinematics
0101   std::vector<std::unique_ptr<jpacPhoto::baryon_resonance>> components_;
0102   jpacPhoto::amplitude_sum ampl_;
0103 
0104   // t-range and cross section maxima
0105   const interval<double> max_t_range_;
0106   const double max_;
0107 };
0108 
0109 } // namespace lA
0110 } // namespace lager
0111 
0112 #endif