#ifndef EXTRA_XS_Main_ME2_Base_H #define EXTRA_XS_Main_ME2_Base_H #include "PHASIC++/Process/Tree_ME2_Base.H" #include "ATOOLS/Org/Getter_Function.H" #include "MODEL/Main/Coupling_Data.H" namespace EXTRAXS { class ME2_Base: public PHASIC::Tree_ME2_Base { protected: std::vector > m_colours; size_t m_oew, m_oqcd, m_sintt; double m_symfac, m_sprimemin, m_sprimemax; bool m_hasinternalscale; double m_internalscale; std::map m_cfls; std::vector m_flavours; std::vector m_momenta; public: ME2_Base(const PHASIC::External_ME_Args&); virtual ~ME2_Base(); double CouplingFactor(const int oqcd,const int oew) const; double Calc(const ATOOLS::Vec4D_Vector &p); virtual double operator()(const ATOOLS::Vec4D_Vector& momenta) = 0; virtual bool SetColours(const ATOOLS::Vec4D_Vector& momenta); virtual bool FillFinalState(const ATOOLS::Vec4D_Vector &p) { return true; } inline size_t NOut() const { return m_flavours.size()-2; } inline const ATOOLS::Flavour_Vector & Flavours() const { return m_flavours; } inline const ATOOLS::Vec4D_Vector & Momenta() const { return m_momenta; } inline const ATOOLS::Flavour_Vector * GetFlavours() const { return &m_flavours; } inline const ATOOLS::Vec4D_Vector * GetMomenta() const { return &m_momenta; } int OrderQCD(const int &id=-1) const; int OrderEW(const int &id=-1) const; // Override in subclasses if the matrix element has a non-trivial dependence // on the renormalization scale (e.g. because the strong coupling is not a // simple prefactor), and you still want to do on-the-fly renormalization // scale variations. Make sure to return // ATOOLS::NonfactorizingCoupling::WithCustomVariationWeight // from the OrderQCD() member function, in order to opt in to this custom // reweighting. virtual double CustomRelativeVariationWeightForRenormalizationScaleFactor(double) const { return 1.0; } inline std::vector > & Colours() { return m_colours; } inline size_t SIntType() const { return m_sintt; } ATOOLS::Flavour_Vector& CombinedFlavour(const size_t &idij) { return m_cfls[idij]; } inline const bool HasInternalScale() const { return m_hasinternalscale; } inline const double InternalScale() const { return m_internalscale; } inline const double SPrimeMin() const { return m_sprimemin; } inline const double SPrimeMax() const { return m_sprimemax; } }; } #endif