#ifndef PHOTONS_Tools_Weight_Higher_Order_Corrections_H
#define PHOTONS_Tools_Weight_Higher_Order_Corrections_H
#include "PHOTONS++/Tools/Weight_Base.H"
#include "PHOTONS++/Main/Dipole_Type.H"
namespace PHOTONS {
class PHOTONS_ME_Base;
class Weight_Higher_Order_Corrections: public Weight_Base {
private:
ATOOLS::Particle_Vector m_olddipole;
ATOOLS::Particle_Vector m_newdipole;
ATOOLS::Particle_Vector m_softphotons;
double m_M;
unsigned int m_n;
PHOTONS_ME_Base * p_pme;
double RealCorrectionsOrder(int);
double VirtualCorrectionsOrder(int);
double Dmod(unsigned int, unsigned int, unsigned int);
double Smod(unsigned int);
double Kallen(double, double, double);
virtual void CalculateWeight();
virtual void CalculateMax();
void CalculateWeightAndMaxWithME();
public:
Weight_Higher_Order_Corrections(const Particle_Vector_Vector&,
const Particle_Vector_Vector&,
Dipole_Type::code);
virtual ~Weight_Higher_Order_Corrections();
};
/*!
\file Weight_Higher_Order_Corrections.H
\brief contains the class Weight_Higher_Order_Corrections
*/
/*!
\class Weight_Higher_Order_Corrections
\brief calculates \f$ W_{\mathcal{C}} \f$ of the event given
*/
////////////////////////////////////////////////////////////////////////////////////////////////////
// Description of the member variables for Weight_Higher_Order_Corrections
////////////////////////////////////////////////////////////////////////////////////////////////////
/*!
\var Particle_Vector Weight_Higher_Order_Corrections::m_olddipole
\brief contains the multipole before treatment
*/
/*!
\var Particle_Vector Weight_Higher_Order_Corrections::m_newdipole
\brief contains the multipole after treatment
*/
/*!
\var Particle_Vector Weight_Higher_Order_Corrections::m_softphotons
\brief contains all photons generated
*/
/*!
\var double Weight_Higher_Order_Corrections::m_M
\brief contains the mass of the decaying particle
*/
////////////////////////////////////////////////////////////////////////////////////////////////////
// Description of the member methods for Weight_Higher_Order_Corrections
////////////////////////////////////////////////////////////////////////////////////////////////////
/*!
\fn Weight_Higher_Order_Corrections::Weight_Higher_Order_Corrections(Particle_Vector, Particle_Vector, Particle_Vector, double, Dipole_Type::code)
\brief initialises all variables, looks for MEs and calculates the weight
The arguments to be passed are the multipole after treatment, the
multipole before treatment, the generated photons, the mass of the
decaying particle and the Dipole_Type.
Calls Weight_Higher_Order_Corrections::ME_Selector to find
out whether there is a generic or specific ME for the process. Only
enabled if the USE_ME switch in Fragmentation.dat is set to 1. If
there are no MEs available, the internal dipole approximation will
be called.
Calls Weight_Higher_Order_Corrections::CalculateWeightAndMax()
in case the ME-correction is envoked, Weight_Higher_Order_Corrections::CalculateWeight()
and Weight_Higher_Order_Corrections::CalculateMax() in
otherwise to calculate the weight and its maximum. The latter
value is the contribution to the maximum total weight but not
the maximum of \f$ W_{\mathcal{C}} \f$ by itself.
*/
/*!
\fn double Weight_Higher_Order_Corrections::RealCorrectionsOrder(int)
\brief calculates the real corrections of \f$ \mathcal{O}(\alpha^n) \f$ in the collinear approximation
The argument to be passed is the order of \f$ \alpha \f$ at which
the corrections should be calculated. Lower orders than the one
specified will not be included. The value returned for
\f$ \mathcal{O}(\alpha) \f$ is
\f[
\frac{1}{\tilde{\beta}_0^0}\sum_{i=1}^{n_\gamma}
\frac{\tilde{\beta}_1^1(k_i)}{\tilde{S}(k_i)}
\f]
with
\f[
\tilde{\beta}_1^1(k)
= -\frac{\alpha}{4\pi^2}\tilde{\beta}_0^0
\sum_{iParticle_Vector_Vectors of the dressed and undressed
blobs to pass on to Weight_Higher_Order_Corrections::ME_Selector
and calculates the weight and its contribution to the maximum.
*/
}
#endif