Back to home page

EIC code displayed by LXR

 
 

    


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     // constructor
0044     Process_Base();
0045 
0046     // destructor
0047     virtual ~Process_Base();
0048 
0049     // member functions
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     // inline functions
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