File indexing completed on 2025-04-19 09:09:43
0001 #ifndef MEProcess_H
0002 #define MEProcess_H
0003
0004 #include <vector>
0005 #include <string>
0006 #include <memory>
0007
0008 #include "ATOOLS/Math/Vector.H"
0009 #include "ATOOLS/Phys/Flavour.H"
0010 #include "ATOOLS/Phys/NLO_Types.H"
0011 #include "PHASIC++/Main/Color_Integrator.H"
0012
0013 namespace SHERPA{
0014 class Sherpa;
0015 }
0016 namespace ATOOLS{
0017 class Cluster_Amplitude;
0018 class ColorID;
0019 class Mass_Selector;
0020 }
0021 namespace PHASIC{
0022 class Process_Base;
0023 class Rambo;
0024 }
0025
0026 class MEProcess{
0027
0028 private:
0029
0030 ATOOLS::nlo_type::code m_nlotype;
0031 ATOOLS::Cluster_Amplitude* p_amp;
0032 SHERPA::Sherpa* p_gen;
0033 PHASIC::Process_Base * p_proc;
0034 PHASIC::Rambo* p_rambo;
0035 std::shared_ptr<PHASIC::Color_Integrator> p_colint;
0036
0037 size_t m_ncolinds;
0038 std::vector<std::vector<int> > m_colcombinations;
0039 std::vector<int> m_gluinds, m_quainds, m_quabarinds;
0040 std::vector<int> m_inpdgs, m_outpdgs;
0041 std::vector<size_t> m_mom_inds;
0042
0043
0044
0045 ATOOLS::Flavour_Vector m_flavs;
0046
0047 size_t m_npsp,m_nin,m_nout;
0048 double m_kpz[2];
0049
0050 void SetMomentumIndices(const std::vector<int> &pdgs);
0051 PHASIC::Process_Base* FindProcess(const ATOOLS::Cluster_Amplitude* amp);
0052 PHASIC::Process_Base* FindProcess();
0053 void SetColors();
0054 void SetUpColorStructure();
0055
0056 public:
0057 MEProcess(SHERPA::Sherpa* Generator);
0058 ~MEProcess();
0059 void AddInFlav(const int &id);
0060 void AddOutFlav(const int &id);
0061 void AddInFlav(const int &id, const int &col1, const int &col2);
0062 void AddOutFlav(const int &id, const int &col1, const int &col2);
0063 double GenerateColorPoint();
0064 bool HasColorIntegrator();
0065 void Initialize();
0066
0067 std::vector<double> NLOSubContributions();
0068
0069 size_t NumberOfPoints();
0070
0071 void PrintProcesses() const;
0072 void ReadProcess(size_t n);
0073
0074 void SetMomenta(const std::vector<double*> &p);
0075 void SetMomenta(const ATOOLS::Vec4D_Vector &p);
0076 void SetMomentum(const size_t &id, const double &E , const double &px,
0077 const double &py, const double &pz);
0078 void SetMomentum(const size_t &id, const ATOOLS::Vec4D &p);
0079 void SetColor (const size_t &id, const ATOOLS::ColorID &col);
0080
0081
0082 ATOOLS::Vec4D_Vector GetMomenta();
0083
0084
0085 double TestPoint(const double& sqrts);
0086
0087 double MatrixElement();
0088 double CSMatrixElement();
0089
0090
0091 double GetFlux();
0092
0093 std::string GeneratorName();
0094
0095 ATOOLS::Flavour GetFlav(size_t i);
0096 inline ATOOLS::Flavour GetInFlav(size_t i) { return GetFlav(i); }
0097 inline ATOOLS::Flavour GetOutFlav(size_t i) { return GetFlav(i+m_nin); }
0098
0099 inline ATOOLS::Cluster_Amplitude* GetAmp() { return p_amp; }
0100 inline PHASIC::Process_Base* GetProc() {return p_proc;}
0101 std::string Name() const;
0102
0103 inline void SetNLOType(ATOOLS::nlo_type::code nlotype) { m_nlotype=nlotype; }
0104 };
0105
0106 #endif