Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-13 10:29:18

0001 #ifndef PHOTONS_PhaseSpace_Generate_Dipole_Photon_Angle_H
0002 #define PHOTONS_PhaseSpace_Generate_Dipole_Photon_Angle_H
0003 
0004 #include "ATOOLS/Math/Vector.H"
0005 
0006 namespace PHOTONS {
0007   class Generate_Dipole_Photon_Angle {
0008     private:
0009       double              m_b1;
0010       double              m_b2;
0011       double              m_c;
0012       double              m_theta;
0013       double              m_phi;
0014       ATOOLS::Vec4D       m_dir;
0015 
0016       double  CalculateBeta(const ATOOLS::Vec4D&);
0017       void    GenerateDipoleAngle();
0018       void    GenerateNullVector();
0019 
0020     public:
0021       Generate_Dipole_Photon_Angle(ATOOLS::Vec4D, ATOOLS::Vec4D);
0022       Generate_Dipole_Photon_Angle(const double&, const double&);
0023       ~Generate_Dipole_Photon_Angle();
0024 
0025       inline double               GetCosTheta()   { return m_c; }
0026       inline double               GetTheta()      { return m_theta; }
0027       inline double               GetPhi()        { return m_phi; }
0028       inline const ATOOLS::Vec4D& GetVector()     { return m_dir; }
0029   };
0030 
0031 
0032   
0033 
0034   /*!
0035     \file Generate_Dipole_Photon_Angle.H
0036     \brief contains the class Generate_Dipole_Photon_Angle
0037   */
0038 
0039   /*!
0040     \class Generate_Dipole_Photon_Angle
0041     \brief generates the photon angular distribution in dipoles
0042   */
0043   ////////////////////////////////////////////////////////////////////////////////////////////////////
0044   // Description of the member variables for Generate_Dipole_Photon_Angle
0045   ////////////////////////////////////////////////////////////////////////////////////////////////////
0046   /*!
0047     \var double Generate_Dipole_Photon_Angle::m_b1
0048     \brief \f$ \beta_1 \f$
0049   */
0050 
0051   /*!
0052     \var double Generate_Dipole_Photon_Angle::m_b2
0053     \brief \f$ \beta_2 \f$
0054   */
0055 
0056   /*!
0057     \var double Generate_Dipole_Photon_Angle::m_c
0058     \brief \f$ c = \cos\theta \f$
0059   */
0060 
0061   /*!
0062     \var double Generate_Dipole_Photon_Angle::m_theta
0063     \brief \f$ \theta \f$
0064   */
0065 
0066   /*!
0067     \var double Generate_Dipole_Photon_Angle::m_phi
0068     \brief \f$ \varphi \f$
0069   */
0070 
0071   /*!
0072     \var Vec4D Generate_Dipole_Photon_Angle::m_dir
0073     \brief null vector of unit spatial length in direction \f$ (\theta,\varphi) \f$
0074   */
0075   ////////////////////////////////////////////////////////////////////////////////////////////////////
0076   // Description of member methods for Generate_Dipole_Photon_Angle
0077   ////////////////////////////////////////////////////////////////////////////////////////////////////
0078   /*!
0079     \fn Generate_Dipole_Photon_Angle::Generate_Dipole_Photon_Angle(ATOOLS::Vec4D, ATOOLS::Vec4D)
0080     \brief generates dipole angles for two arbitrary timelike 4-vectors \f$ p_1 \f$ and \f$ p_2 \f$
0081 
0082     \f$ p_1 \f$ and \f$ p_2 \f$ are boosted in their CMS, there the photon angles are calculated and m_dir is generated. Finally, m_dir is boosted to the original system of \f$ p_1 \f$ and \f$ p_2 \f$ and \f$ \theta \f$ and \f$ \varphi \f$ are recalculated.
0083 
0084     This constructor is used by the Generate_Multipole_Photon_Angle class.
0085   */
0086 
0087   /*!
0088     \fn Generate_Dipole_Photon_Angle::Generate_Dipole_Photon_Angle(const double&, const double&)
0089     \brief generates dipole angles for two 4-vectors with \f$ \beta_1 \f$ and \f$ \beta_2 \f$ assumed to be in their CMS and aligned along the z-axis
0090 
0091     Both angles are calculated via <tt>GenerateDipoleAngle()</tt>. No null vector will be produced.
0092 
0093     This constructor is used by the Generate_One_Photon class.
0094   */
0095 
0096   /*!
0097     \fn double Generate_Dipole_Photon_Angle::CalculateBeta(Vec4D)
0098     \brief calculates \f$ \beta \f$ for a given 4-vector
0099   */
0100 
0101   /*!
0102     \fn void Generate_Dipole_Photon_Angle::GenerateDipoleAngle()
0103     \brief generates both photon angles
0104 
0105     Works in the dipole's CMS. \f$ \varphi \f$ is distributed uniformly, \f$ \theta \f$ according to the eikonal factor \f$ \tilde{S}_{ij} \f$ .
0106   */
0107 
0108   /*!
0109     \fn void Generate_Dipole_Photon_Angle::GenerateNullVector()
0110     \brief m_dir is generated
0111 
0112     This null vector can be Poincare transformed to any frame to have the photon angular configuration there. To get the full photon its energy/3-momentum simply has to be multiplied by the generated energy.
0113   */
0114 
0115   /*!
0116     \fn double Generate_Dipole_Photon_Angle::GetCosTheta()
0117     \brief returns m_c ( \f$ c = \cos\theta \f$ )
0118   */
0119 
0120   /*!
0121     \fn double Generate_Dipole_Photon_Angle::GetTheta()
0122     \brief returns m_theta ( \f$ \theta \f$ )
0123   */
0124 
0125   /*!
0126     \fn double Generate_Dipole_Photon_Angle::GetPhi()
0127     \brief returns m_phi ( \f$ \varphi \f$ )
0128   */
0129 
0130   /*!
0131     \fn Vec4D Generate_Dipole_Photon_Angle::GetVector()
0132     \brief returns m_dir
0133   */
0134 
0135 
0136 }
0137 
0138 
0139 // this class will take two four vectors and generate a null vector of unit 3D length which is distributed according to eikonal factor
0140 // if two doubles (b1,b2) are given it assumed they are in their respective rest frame and then this vector is generated in that frame
0141 #endif