Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-06-26 07:06:20

0001 ///////////////////////////////////////////////////////////////////////////
0002 //
0003 //    Copyright 2010
0004 //
0005 //    This file is part of starlight.
0006 //
0007 //    starlight is free software: you can redistribute it and/or modify
0008 //    it under the terms of the GNU General Public License as published by
0009 //    the Free Software Foundation, either version 3 of the License, or
0010 //    (at your option) any later version.
0011 //
0012 //    starlight is distributed in the hope that it will be useful,
0013 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
0014 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0015 //    GNU General Public License for more details.
0016 //
0017 //    You should have received a copy of the GNU General Public License
0018 //    along with starlight. If not, see <http://www.gnu.org/licenses/>.
0019 //
0020 ///////////////////////////////////////////////////////////////////////////
0021 //
0022 // File and Version Information:
0023 // $Rev:: 259                         $: revision of last commit
0024 // $Author:: jseger                   $: author of last commit
0025 // $Date:: 2016-04-19 01:58:25 +0100 #$: date of last commit
0026 //
0027 // Description:
0028 //
0029 //
0030 //
0031 ///////////////////////////////////////////////////////////////////////////
0032 
0033 
0034 #ifndef PHOTONNUCLEUSCROSSSECTION_H
0035 #define PHOTONNUCLEUSCROSSSECTION_H
0036 
0037 
0038 #include "starlightconstants.h"
0039 #include "beambeamsystem.h"
0040 #include "inputParameters.h"
0041 
0042 class photonNucleusCrossSection{
0043 
0044 public:
0045 
0046     photonNucleusCrossSection(const inputParameters& input, const beamBeamSystem&  bbsystem);
0047     ~photonNucleusCrossSection();
0048   
0049     double         slopeParameter  () const { return _slopeParameter;   }  ///< returns slope of t-distribution [(GeV/c)^{-2}]
0050     double         getChannelMass  () const { return _channelMass;      }  ///< returns mass of the produced system [GeV/c^2]
0051     double         getBNORM        () const { return _BNORM;            }
0052     beamBeamSystem getbbs          () const { return _bbs;              }  ///< returns beamBeamSystem
0053     double         vmPhotonCoupling() const { return _vmPhotonCoupling; }  ///< vectormeson-photon coupling constant f_v / 4 pi (cf. Eq. 10 in KN PRC 60 (1999) 014903)
0054     double         vmQ2Power       (double Q2) const { return _vmQ2Power_c1+ _vmQ2Power_c2*(_channelMass*_channelMass + Q2);        }
0055     double         getDefaultC     () const { return _defaultC;         }
0056     double         maxPhotonEnergy () const { return _maxPhotonEnergy;  }  ///< returns max photon energy in lab frame [GeV] (for vectormesons only)
0057 
0058     void crossSectionCalculation(const double bwnormsave);
0059     double backwardsPropagationOmegaCrossSection(const double targetEgamma);
0060 
0061     // Use the wide or narrow constructor to calculate sigma
0062     // wide/narrow will inherit this.
0063     double getcsgA(const double Egamma,
0064                    const double Q2,
0065                        const int beam);
0066     double e_getcsgA(const double Egamma, double Q2,
0067                    const double W,
0068                        const int beam);
0069     // Midification to csg due to virtuality
0070     double getcsgA_Q2_dep(const double Q2);
0071     double photonFlux(const double Egamma,
0072                        const int beam);
0073     // --- Added for electron 
0074     double photonFlux(const double Egamma,
0075               const double Q2);
0076     double integrated_Q2_dep(const double Egamma, const double _min = 0 , const double _max = 0);
0077     double integrated_x_section(const double Egamma, const double _min = 0 , const double _max = 0);
0078     std::pair<double,double>* Q2arraylimits(double const Egamma);
0079     double g(double const Egamma, double const Q2);
0080     // ---
0081     double sigmagp(const double Wgp);
0082     double sigma_A(const double sig_N, 
0083                        const int beam);
0084         double sigma_N(const double Wgp);
0085     double breitWigner(const double W,
0086                        const double C);
0087     double nepoint(const double Egamma,
0088                    const double bmin);
0089 
0090     double getPhotonNucleusSigma () const {return _photonNucleusSigma;}
0091     void   setPhotonNucleusSigma (double sigma) {_photonNucleusSigma = sigma;}
0092     
0093 protected:
0094     const unsigned int _nWbins;
0095     const unsigned int _nYbins;
0096     
0097     const double _wMin;
0098     const double _wMax;
0099     const double _yMax;
0100 
0101     const double _beamLorentzGamma;
0102 
0103     double _photonNucleusSigma; 
0104 
0105     int    _printDef; 
0106         int    _impulseSelected;
0107     int    _quantumGlauber;  // from input parameter; 1 for Quantum Glauber, 0 for classical Glauber
0108     
0109 private:
0110 
0111     beamBeamSystem _bbs;
0112   
0113     // copied from inputParameters
0114     double                               _protonEnergy;
0115     double                               _electronEnergy;
0116     starlightConstants::particleTypeEnum _particleType;
0117     int                                  _beamBreakupMode;     ///< breakup mode for beam particles
0118     bool _backwardsProduction;
0119         int                                  _productionMode; 
0120     int                                  _sigmaNucleus; 
0121 
0122     // locally defined parameters
0123     double _slopeParameter;    ///< slope of t-distribution [(GeV/c)^{-2}]
0124     double _vmPhotonCoupling;  ///< vectormeson-photon coupling constant f_v / 4 pi (cf. Eq. 10 in KN PRC 60 (1999) 014903)
0125     double _vmQ2Power_c1;  ///< VM power law Q2 correction (Mv2/(Q2+Mv2))^n; with n = c1 + c2*(Q2+Mv2)
0126     double _vmQ2Power_c2;  ///< VM power law Q2 correction (Mv2/(Q2+Mv2))^
0127     double _ANORM;
0128     double _BNORM;
0129     double _defaultC;
0130     double _width;            ///< width of the produced system  [GeV/c^2]
0131     double _channelMass;      ///< mass of the produced system  [GeV/c^2]
0132     double _fixedQ2range;     ///< loads state of Q2 range
0133     double _minQ2;            ///< min Q2 range in case it is fixed
0134     double _maxQ2;            ///< max Q3 range in case it is fixed
0135     double _maxPhotonEnergy;  ///< max photon energy in lab frame [GeV] (for vectormesons only)
0136     double _cmsMinPhotonEnergy;
0137     double _targetRadii;
0138     double _maxW_GP;          ///< max W_GP energy
0139     double _minW_GP;          ///< min W_GP energy
0140     
0141 };
0142 
0143 
0144 #endif  // PHOTONNUCLEUSCROSSSECTION_H