Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:12

0001 #ifndef PHOTONS_PhaseSpace_Generate_Multipole_Photon_Angle_H
0002 #define PHOTONS_PhaseSpace_Generate_Multipole_Photon_Angle_H
0003 
0004 #include "ATOOLS/Math/Vector.H"
0005 
0006 namespace ATOOLS {
0007   class Particle;
0008   typedef std::vector<Particle*> Particle_Vector;
0009 }
0010 
0011 namespace PHOTONS {
0012   struct IdPairNbar;
0013   typedef std::vector<IdPairNbar> IdPairNbarVector;
0014 
0015   class Generate_Multipole_Photon_Angle {
0016     private:
0017       ATOOLS::Particle_Vector m_dipole;
0018       double              m_posnbar;
0019       IdPairNbarVector    m_nbars, m_posnbars;
0020       double              m_theta;
0021       double              m_phi;
0022 
0023       double  CalculateBeta(const ATOOLS::Vec4D&);
0024       void    GenerateMultipoleAngle();
0025       double  CalculateWeightByThetaPhi(const double&, const double&);
0026       double  CalculateWeightByVector(const ATOOLS::Vec4D&);
0027       double  TiTj(const size_t&, const size_t&);
0028 
0029     public:
0030       Generate_Multipole_Photon_Angle(const ATOOLS::Particle_Vector&,
0031                                       const IdPairNbarVector&);
0032       ~Generate_Multipole_Photon_Angle();
0033 
0034       inline double  GetTheta()      { return m_theta; }
0035       inline double  GetPhi()        { return m_phi; }
0036   };
0037 
0038 
0039   
0040 
0041   /*!
0042     \file Generate_Multipole_Photon_Angle.H
0043     \brief contains the class Generate_Multipole_Photon_Angle
0044   */
0045 
0046   /*!
0047     \class Generate_Multipole_Photon_Angle
0048     \brief generates the photon angular distribution in multipoles
0049   */
0050   ////////////////////////////////////////////////////////////////////////////////////////////////////
0051   // Description of member variables for Generate_Multipole_Photon_Angle
0052   ////////////////////////////////////////////////////////////////////////////////////////////////////
0053 
0054   /*!
0055     \var Particle_Vector Generate_Multipole_Photon_Angle::m_dipole
0056     \brief contains the multipole
0057   */
0058 
0059   /*!
0060     \var std::vector<double> Generate_Multipole_Photon_Angle::m_nbars
0061     \brief avarage photon number of all constituent dipoles of the multipole
0062   */
0063 
0064   /*!
0065     \var double Generate_Multipole_Photon_Angle::m_theta
0066     \brief photon angle \f$ \theta \f$
0067   */
0068 
0069   /*!
0070     \var doubel Generate_Multipole_Photon_Angle::m_phi
0071     \brief photon azimutal angle \f$ \varphi \f$
0072   */
0073   ////////////////////////////////////////////////////////////////////////////////////////////////////
0074   // Description of member methods for Generate_Multipole_Photon_Angle
0075   ////////////////////////////////////////////////////////////////////////////////////////////////////
0076   /*!
0077     \fn Generate_Multipole_Photon_Angle::Generate_Multipole_Photon_Angle(Particle_Vector, std::vector<double>)
0078     \brief initialises and executes the calculations
0079 
0080     The constructor <tt>Generate_Multipole_Photon_Angle::Generate_Multipole_Photon_Angle(Particle_Vector dip, std::vector<double> nbars)</tt> has to receive the multipole and the \f$ \bar{n} \f$ 's of every individual dipole. The numbering convention hereby is again as in \f$ \sum\limits_{i<j} \f$ , as is listed in the switch in <tt> Generate_Multipole_Photon_Angle::IndexLookup(unsigned int)</tt>. Therefore, here m_nbar \f$ =\sum|\bar{n}_k| \f$ and not \f$ \bar{n}=\sum\bar{n}_k \f$ as everywhere else.
0081   */
0082 
0083   /*!
0084     \fn double Generate_Multipole_Photon_Angle::CalculateBeta(Vec4D)
0085     \brief calculates \f$ \beta \f$ of a 4-vector
0086   */
0087 
0088   /*!
0089     \fn void Generate_Multipole_Photon_Angle::GenerateMultipoleAngle()
0090     \brief generates \f$ \theta \f$ and \f$ \varphi \f$
0091 
0092     One dipole is generated with probability \f$ \frac{|\bar{n}_k|}{\sum|\bar{n}_k|} \f$ and then the class Generate_Dipole_Photon_Angle is invoked to generate the photon angles
0093   */
0094 
0095   /*!
0096     \fn double Generate_Multipole_Photon_Angle::GetTheta()
0097     \brief returns m_theta ( \f$ \theta \f$ )
0098   */
0099 
0100   /*!
0101     \fn double Generate_Multipole_Photon_Angle::GetPhi()
0102     \brief returns m_phi ( \f$ \varphi \f$ )
0103   */
0104 
0105 }
0106 
0107 #endif