You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

88 lines
3.2 KiB

//
// QCDLoop 2016
//
// Authors: Stefano Carrazza: stefano.carrazza@cern.ch
// Keith Ellis: keith.ellis@durham.ac.uk
// Giulia Zanderighi: giulia.zanderighi@cern.ch
#pragma once
#include "topology.h"
namespace ql
{
/**
* @brief The Triangle integral.
*
* Parses automatically the topology and computes the integral
*/
template<typename TOutput = complex, typename TMass = double, typename TScale = double>
class Triangle: public Topology<TOutput,TMass,TScale>
{
public:
Triangle(); //!< The Constructor.
~Triangle(); //!< The Destructor.
//! Computes the Triangle integral
void integral(vector<TOutput> &res, TScale const& mu2, vector<TMass> const& m, vector<TScale> const& p);
//! General case triangle integral I(p1,p2,p3;m1,m2,m3)
void T0(vector<TOutput> &res, TMass const (&xpi)[6], int const& massive) const;
//! Divergent triangle integral I(0,0,p2;0,0,0)
void T1(vector<TOutput> &res, TScale const& mu2, TScale const& p) const;
//! Divergent triangle integral I(0,p1,p2;0,0,0)
void T2(vector<TOutput> &res, TScale const& mu2, TScale const& p2, TScale const& p3) const;
//! Divergent triangle integral I(0,p1,p2;0,0,m2)
void T3(vector<TOutput> &res, TScale const& mu2, TMass const& m, TScale const& p1, TScale const& p2) const;
//! Divergent triangle integral I(0,m2,p2;0,0,m2)
void T4(vector<TOutput> &res, TScale const& mu2, TMass const& m, TScale const& p2) const;
//! Divergent triangle integral I(0,m2,m2;0,0,m2)
void T5(vector<TOutput> &res, TScale const& mu2, TMass const& m) const;
//! Divergent triangle integral I(m2,s,m3;0,m2,m3)
void T6(vector<TOutput> &res, TScale const& mu2, TMass const& m2, TMass const& m3, TScale const& p2) const;
private:
//! Sort arguments of triangle, with msq in ascending order
void TriSort(TScale (&psq)[3], TMass (&msq)[3]) const;
//! Sort arguments of triangle, with msq in ascending order
void TriSort2(TMass const (&xpi)[6], TMass (&ypi)[6]) const;
//! Sort on the basis of abs value.
void SnglSort(TScale (&psq)[3]) const;
//! Calculation of triangle with p1sq=p2sq=p3sq=0
void TIN0(TOutput &res, TMass const (&xpi)[6]) const;
//! Calculation of triangle with p1sq=p2sq=0
void TIN1(TOutput &res, TMass const (&xpi)[6], TMass const (&sxpi)[6], int const& massive) const;
//! Calculation of triangle with p1sq=0
void TIN2(TOutput &res, TMass const (&xpi)[6], TMass const (&sxpi)[6], int const& massive) const;
//! Calculation of triangle with all p non-zero
void TIN3(TOutput &res, TMass const (&xpi)[6], TMass const (&sxpi)[6], int const& massive) const;
//! Calculation of triangle with all p and complex m non-zero
void TINDNS(TOutput &res, TMass const (&xpi)[6]) const;
//! Calculation of triangle with 1 massive particles
void TINDNS1(TOutput &res, TMass const (&xpi)[6]) const;
//! Calculation of triangle with 2 massive particles
void TINDNS2(TOutput &res, TMass const (&xpi)[6]) const;
//! Calculate the kallen formula
TOutput Kallen(TOutput const& p1, TOutput const& p2, TOutput const& p3) const;
//! Calculate the kallen^2 formula
TOutput Kallen2(TOutput const& p1, TOutput const& p2, TOutput const& p3) const;
};
}