Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-13 10:29:10

0001 #ifndef EXTRA_XS_Main_ME2_Base_H
0002 #define EXTRA_XS_Main_ME2_Base_H
0003 
0004 #include "PHASIC++/Process/Tree_ME2_Base.H"
0005 #include "ATOOLS/Org/Getter_Function.H"
0006 #include "MODEL/Main/Coupling_Data.H"
0007 
0008 namespace EXTRAXS {
0009 
0010   class ME2_Base: public PHASIC::Tree_ME2_Base {
0011   protected:
0012     std::vector<std::vector<int> > m_colours;
0013     size_t m_oew, m_oqcd, m_sintt;
0014     double m_symfac, m_sprimemin, m_sprimemax;
0015     bool   m_hasinternalscale;
0016 
0017     double m_internalscale;
0018     std::map<size_t,ATOOLS::Flavour_Vector> m_cfls;
0019 
0020     std::vector<ATOOLS::Flavour> m_flavours;
0021     std::vector<ATOOLS::Vec4D>   m_momenta;
0022   public:
0023     ME2_Base(const PHASIC::External_ME_Args&);
0024     virtual ~ME2_Base();
0025 
0026     double CouplingFactor(const int oqcd,const int oew) const;
0027 
0028     double Calc(const ATOOLS::Vec4D_Vector &p);
0029 
0030     virtual double operator()(const ATOOLS::Vec4D_Vector& momenta) = 0;
0031     virtual bool SetColours(const ATOOLS::Vec4D_Vector& momenta);
0032     virtual bool FillFinalState(const ATOOLS::Vec4D_Vector &p) { return true; }
0033 
0034     inline size_t NOut() const { return m_flavours.size()-2; }
0035     inline const ATOOLS::Flavour_Vector & Flavours()    const { return m_flavours; }
0036     inline const ATOOLS::Vec4D_Vector   & Momenta()     const { return m_momenta; }
0037     inline const ATOOLS::Flavour_Vector * GetFlavours() const { return &m_flavours; }
0038     inline const ATOOLS::Vec4D_Vector   * GetMomenta()  const { return &m_momenta; }
0039 
0040     int OrderQCD(const int &id=-1) const;
0041     int OrderEW(const int &id=-1) const;
0042 
0043     // Override in subclasses if the matrix element has a non-trivial dependence
0044     // on the renormalization scale (e.g. because the strong coupling is not a
0045     // simple prefactor), and you still want to do on-the-fly renormalization
0046     // scale variations. Make sure to return
0047     // ATOOLS::NonfactorizingCoupling::WithCustomVariationWeight
0048     // from the OrderQCD() member function, in order to opt in to this custom
0049     // reweighting.
0050     virtual double CustomRelativeVariationWeightForRenormalizationScaleFactor(double) const {
0051       return 1.0;
0052     }
0053 
0054     inline std::vector<std::vector<int> > & Colours() { return m_colours; }
0055     inline size_t SIntType() const { return m_sintt; }
0056     ATOOLS::Flavour_Vector& CombinedFlavour(const size_t &idij) { return m_cfls[idij]; }
0057 
0058     inline const bool HasInternalScale() const { return m_hasinternalscale; }
0059     inline const double InternalScale()  const { return m_internalscale; }
0060     inline const double SPrimeMin() const { return m_sprimemin; }
0061     inline const double SPrimeMax() const { return m_sprimemax; }
0062   };
0063 }
0064 
0065 #endif