#ifndef PHOTONS_Tools_Generate_One_Photon_H
#define PHOTONS_Tools_Generate_One_Photon_H
#include "PHOTONS++/Main/Dipole_Type.H"
namespace ATOOLS {
class Histogram_2D;
}
namespace PHOTONS {
class Generate_One_Photon {
private:
double m_beta1;
double m_beta2;
double m_theta;
double m_phi;
double m_w;
double m_delta;
Dipole_Type::code m_dtype;
ATOOLS::Particle *p_photon;
void GeneratePhotonAngleMassless();
void GeneratePhoton();
public:
Generate_One_Photon(const double&, const double&,
const double&, Dipole_Type::code);
Generate_One_Photon(const ATOOLS::Particle_Vector&,
const IdPairNbarVector&,double,
Dipole_Type::code);
~Generate_One_Photon();
inline ATOOLS::Particle * GetPhoton() { return p_photon; }
void SetMinimalPhotonAngle(const double&);
static ATOOLS::Histogram_2D *s_histo;
};
/*!
\file Generate_One_Photon.H
\brief contains the class Generate_One_Photon
*/
/*!
\class Generate_One_Photon
\brief generates one photon according to the angular distribution of the multipole
*/
////////////////////////////////////////////////////////////////////////////////////////////////////
// Description of member variables for Generate_One_Photon
////////////////////////////////////////////////////////////////////////////////////////////////////
/*!
\var double Generate_One_Photon::m_beta1
\brief \f$ \beta \f$ of particle 1 in a different mass dipole
*/
/*!
\var double Generate_One_Photon::m_beta2
\brief \f$ \beta \f$ of particle 2 in a different mass dipole
*/
/*!
\var double Generate_One_Photon::m_theta
\brief generated inclinational angle of the photon in a dipole
*/
/*!
\var double Generate_One_Photon::m_phi
\brief generated azimutal angle of the photon in a dipole
*/
/*!
\var double Generate_One_Photon::m_w
\brief energy for the photon
*/
/*!
\var double Generate_One_Photon::m_delta
\brief collinear cut-off angle (needed for angular generation of massless particles)
*/
/*!
\var Dipole_Type::code Generate_One_Photon::m_dtype
\brief specifies the Dipole_Type
*/
/*!
\var Particle * Generate_One_Photon::p_photon
\brief the complete photon generated
*/
////////////////////////////////////////////////////////////////////////////////////////////////////
// Description of member methods fo Generate_One_Photon
////////////////////////////////////////////////////////////////////////////////////////////////////
/*!
\fn Generate_One_Photon::Generate_One_Photon(const double&, const double&, const double&, Dipole_Type::code)
\brief constructor for photon generation in dipoles
The values passed are \f$ \beta_1,\beta_2 \f$, the energy of the photon and the Dipole_Type. For the dipole it is assumed that particle one is aligned along the \f$ +z \f$-axis for final-final dipoles and along the \f$ -z \f$-axis for initial-final dipoles, because in the this case, Dipole_FF fills the charged initial state into position 1. The constructor also executes the photon generation process.
*/
/*!
\fn Generate_One_Photon::Generate_One_Photon(const ATOOLS::Particle_Vector &, const IdPairNbarVector&, double, Dipole_Type::code)
\brief constructor for photon generation in multipoles
The values passed are the multipole, all individual dipoles' \f$ \bar{n}_i \f$, the energy of the photon and the Dipole_Type. The constructor also executes the photon generation process wherein for the angular generation Generate_Multipole_Photon_Angle is called. It is also able to handle dipoles, but somewhat slower than the built-in generation.
*/
/*!
\fn void Generate_One_Photon::GeneratePhotonAngleMassless()
\brief generates \f$ \theta \f$ in massless dipoles according to \f$ \tilde{S}_{ij} \f$
*/
/*!
\fn void Generate_One_Photon::GeneratePhoton()
\brief builds a particle out of the generated angles and the energy
*/
/*!
\fn Particle * Generate_One_Photon::GetPhoton()
\brief returns p_photon, the generated photon
*/
/*!
\fn void Generate_One_Photon::SetMinimalPhotonAngle(double)
\brief changes the preset value of the collinear cut-off angle needed in the massless generation and regenerates the event
*/
}
#endif