// This -*- C++ -*- file has been generated by the Python package
// ninjanumgen, which is distributed with the Ninja library.

#ifndef SIXPHOTONS_HH
#define SIXPHOTONS_HH

#include <ninja/ninja.hh>

#define NINJA_NUM SixPhotons
#define NINJA_NUM_NAMESPACE 0

#if NINJA_NUM_NAMESPACE
namespace NINJA_NUM_NAMESPACE {
#endif


  class NINJA_NUM : public ninja::Numerator {

  public:

    virtual ninja::Complex evaluate(const ninja::ComplexMomentum & q,
                                    const ninja::Complex & muq,
                                    int cut,
                                    const ninja::PartitionInt part[]);

    virtual void muExpansion(const ninja::ComplexMomentum v_perp[],
                             const ninja::PartitionInt part[],
                             ninja::Complex c[]);

    virtual void t3Expansion(const ninja::ComplexMomentum & a,
                             const ninja::ComplexMomentum & e3,
                             const ninja::ComplexMomentum & e4,
                             const ninja::Complex & param,
                             int mindeg,
                             int cut, const ninja::PartitionInt part[],
                             ninja::Complex c[]);

    virtual void t2Expansion(const ninja::ComplexMomentum & a0,
                             const ninja::ComplexMomentum & a1,
                             const ninja::ComplexMomentum & e3,
                             const ninja::ComplexMomentum & e4,
                             const ninja::Complex param[],
                             int mindeg,
                             int cut, const ninja::PartitionInt part[],
                             ninja::Complex c[]);
  
  public:

    // initialization
    void init(const ninja::RealMomentum k[],
              const char * helicities);

    // get pointer to internal momenta of the loop
    ninja::RealMomentum * getInternalMomenta()
    {
      return pi_;
    }

    // get SMatrix
    ninja::SMatrix & getSMatrix()
    {
      return s_mat_;
    }

  private:
    ninja::RealMomentum k1,k6,p2,p3,p4;
    ninja::RealMomentum pi_[6];
    ninja::SMatrix s_mat_;

    ninja::ComplexMomentum eps12, eps21;
    ninja::ComplexMomentum eps23, eps32;
    ninja::ComplexMomentum eps34, eps43;
    ninja::ComplexMomentum eps45, eps54;
    ninja::ComplexMomentum eps56, eps65;
    ninja::ComplexMomentum eps61, eps16;

  };


#if NINJA_NUM_NAMESPACE
} // namespace NINJA_NUM_NAMESPACE
#endif

#undef NINJA_NUM
#undef NINJA_NUM_NAMESPACE

#endif // SIXPHOTONS_HH

