File indexing completed on 2025-04-19 09:09:46
0001 #ifndef AMEGIC_Main_Process_Base_H
0002 #define AMEGIC_Main_Process_Base_H
0003
0004 #include "AMEGIC++/Main/Polarisation.H"
0005 #include "AMEGIC++/Main/Amegic_Base.H"
0006 #include "AMEGIC++/Amplitude/Vertex.H"
0007 #include "PHASIC++/Process/Single_Process.H"
0008
0009 namespace MODEL { class Model_Base; }
0010
0011 namespace AMEGIC {
0012
0013 class Amplitude_Handler;
0014
0015 class Process_Base : public PHASIC::Single_Process, public Amegic_Base {
0016 protected:
0017
0018 MODEL::Model_Base *p_model;
0019
0020 std::string m_resdir;
0021
0022 int *p_b, m_eoreset, m_allowmap;
0023
0024 AMEGIC::Pol_Info *p_pl;
0025
0026 std::string m_print_graphs;
0027
0028 std::list<std::string> *p_channellibnames;
0029
0030 ATOOLS::Vec4D* p_testmoms;
0031
0032 double m_Norm, m_sfactor, m_lastdxs, m_lastk;
0033
0034 std::map<ATOOLS::Flavour,ATOOLS::Flavour> m_eflmap;
0035 std::map<std::string,ATOOLS::Flavour> m_fmap;
0036
0037 ATOOLS::NLO_subevtlist* p_subevtlist;
0038
0039 static int s_gauge;
0040
0041 public:
0042
0043
0044 Process_Base();
0045
0046
0047 virtual ~Process_Base();
0048
0049
0050 void Init();
0051 virtual std::string CreateLibName();
0052 virtual int InitAmplitude(Amegic_Model *,Topology *,
0053 std::vector<Process_Base *> &,
0054 std::vector<Process_Base *> &) = 0;
0055
0056 virtual bool SetUpIntegrator() = 0;
0057 virtual void RequestVariables(PHASIC::Phase_Space_Handler *const psh);
0058 virtual void AddChannels(std::list<std::string>*) = 0;
0059 virtual Amplitude_Handler *GetAmplitudeHandler() = 0;
0060 virtual Helicity *GetHelicity() = 0;
0061 virtual Process_Base *Partner() const = 0;
0062 virtual std::string PSLibName() = 0;
0063
0064 virtual void FillAlphaHistogram(ATOOLS::Histogram*,double) {}
0065
0066 virtual double Result();
0067 virtual void SetPrintGraphs(std::string gpath="");
0068 virtual std::string LibName();
0069
0070 virtual int NumberOfDiagrams() = 0;
0071 virtual AMEGIC::Point * Diagram(int i) = 0;
0072 virtual bool IsFreeOfFourVertex(AMEGIC::Point * _p) { return 1; }
0073
0074 bool FillIntegrator(PHASIC::Phase_Space_Handler *const psh);
0075
0076
0077 inline std::list<std::string> *GetChannelLibNames() const
0078 { return p_channellibnames; }
0079
0080 void SetTestMoms(ATOOLS::Vec4D* mom) { p_testmoms=mom; }
0081 ATOOLS::Vec4D* GetTestMoms() { return p_testmoms; }
0082
0083 int OSDecays() { return p_pinfo->OSDecays(); }
0084 virtual int Type() { return 0; }
0085 double Norm() { return m_Norm; }
0086 void SetNorm(double norm) { m_Norm=norm; }
0087 double GetSFactor() { return m_sfactor; }
0088 double LastDXS() { return m_lastdxs; }
0089 virtual double operator()(const ATOOLS::Vec4D *) { return 0.; }
0090 virtual void PrintProcessSummary(int=0);
0091 ATOOLS::Flavour ReMap(const ATOOLS::Flavour&,const std::string&) const;
0092 ATOOLS::Flavour ReMap(const ATOOLS::Flavour &fl,const size_t &id) const;
0093 inline static void SetGauge(const int gauge) { s_gauge=gauge; }
0094 inline void SetSubevtList(ATOOLS::NLO_subevtlist *subs) { p_subevtlist=subs; }
0095 ATOOLS::NLO_subevtlist *GetRSSubevtList() { return p_subevtlist; }
0096
0097 virtual Process_Base *GetReal();
0098
0099 inline int EOReset() const { return m_eoreset; }
0100
0101 inline double LastK() const { return m_lastk; }
0102
0103 protected:
0104 double SymmetryFactors();
0105 double SBSymmetryFactor(ATOOLS::Flavour* flout,size_t nout);
0106
0107 bool CheckMapping(const Process_Base * proc);
0108 bool FlavCompare(PHASIC::Process_Base *const proc);
0109 void InitFlavmap(const Process_Base * proc);
0110 void AddtoFlavmap(const std::string&,const ATOOLS::Flavour&);
0111
0112 };
0113
0114 }
0115
0116 #endif
0117