File indexing completed on 2025-04-19 09:09:47
0001 #ifndef AMEGIC_Main_Single_Process_MHV_H
0002 #define AMEGIC_Main_Single_Process_MHV_H
0003
0004 #include "AMEGIC++/Main/Process_Base.H"
0005
0006 #include "AMEGIC++/Main/Polarisation.H"
0007 #include "AMEGIC++/Amplitude/Amplitude_Handler.H"
0008
0009 #include <vector>
0010 #include "AMEGIC++/Amplitude/Zfunctions/Mom.H"
0011 #include "AMEGIC++/Amplitude/FullAmplitude_MHV_Base.H"
0012
0013 namespace AMEGIC {
0014 class Helicity;
0015 class Phase_Space_Generator;
0016
0017 typedef std::set<std::pair<size_t,size_t> > Combination_Set;
0018 typedef std::map<size_t,ATOOLS::Flavour_Vector> CFlavVector_Map;
0019
0020 class Single_Process_MHV: public Process_Base {
0021 private:
0022 int m_gen_str;
0023 std::string m_ptypename,m_libname,m_pslibname;
0024 Polarisation m_pol;
0025 bool m_newlib;
0026 double m_iresult;
0027 int m_libnumb;
0028 bool m_ownamps;
0029
0030 Helicity * p_hel;
0031 Basic_Sfuncs * p_BS;
0032 Amplitude_Handler * p_ampl;
0033 String_Handler * p_shand;
0034 Phase_Space_Generator * p_psgen;
0035
0036 FullAmplitude_MHV_Base * p_MHVamp;
0037 MomentumList * p_momlist;
0038 Single_Process_MHV * p_partner;
0039
0040 Combination_Set m_ccombs;
0041 CFlavVector_Map m_cflavs;
0042
0043 void FillCombinations(Point *const p,size_t &id);
0044 void FillCombinations();
0045
0046
0047
0048
0049
0050 public:
0051
0052 Single_Process_MHV();
0053 ~Single_Process_MHV();
0054
0055 bool FillIntegrator(PHASIC::Phase_Space_Handler *const psh);
0056
0057 bool Combinable(const size_t &idi,const size_t &idj);
0058
0059 const ATOOLS::Flavour_Vector &CombinedFlavour(const size_t &idij);
0060
0061 void PolarizationNorm();
0062 private:
0063
0064
0065
0066
0067
0068
0069 protected :
0070 int Tests();
0071 bool CreateChannelLibrary();
0072 public:
0073 void AddChannels(std::list<std::string>*);
0074 bool NewLibs() {return m_newlib;}
0075 bool FoundMappingFile(std::string &,std::string &);
0076 int InitAmplitude(Amegic_Model *,Topology *,
0077 std::vector<Process_Base *> &,
0078 std::vector<Process_Base *> &);
0079 bool SetUpIntegrator();
0080 String_Handler * GetStringHandler() { return p_shand;}
0081 Amplitude_Handler * GetAmplitudeHandler() { return p_ampl;}
0082 Helicity * GetHelicity() { return p_hel; }
0083 double Result() { return m_iresult; }
0084
0085 int NumberOfDiagrams();
0086 AMEGIC::Point * Diagram(int i);
0087
0088
0089
0090
0091
0092
0093 public:
0094 std::string LibName() { return m_libname; }
0095 std::string PSLibName() { return m_pslibname; }
0096 AMEGIC::Process_Base * Partner() const { return p_partner; }
0097 void Minimize();
0098
0099
0100
0101
0102
0103
0104 public:
0105 double Partonic(const ATOOLS::Vec4D_Vector&,
0106 ATOOLS::Variations_Mode varmode,
0107 int mode);
0108 double DSigma(const ATOOLS::Vec4D_Vector &,bool);
0109 double operator()(const ATOOLS::Vec4D *);
0110 void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0111 std::vector<std::vector<Complex> >& cols);
0112 void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0113 std::vector<std::vector<Complex> >& cols,
0114 double sfactor);
0115
0116 int Type() { return 1; }
0117 };
0118 }
0119
0120
0121
0122 #endif