Back to home page

EIC code displayed by LXR

 
 

    


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   // Store flavs here separately in the same order
0044   // in which they were added (for performance reasons)
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   // Get the momenta that were previously set
0082   ATOOLS::Vec4D_Vector GetMomenta();
0083 
0084   // Generate a PS point via Rambo and return the phase space weight
0085   double TestPoint(const double& sqrts);
0086   
0087   double MatrixElement();
0088   double CSMatrixElement();
0089 
0090   // Calculate and retuen 1/F with F=4*sqrt((pa*pb)^2 - ma^2*mb^2)
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