File indexing completed on 2025-04-19 09:09:46
0001 #ifndef AMEGIC_DipoleSubtraction_Single_OSTerm_H
0002 #define AMEGIC_DipoleSubtraction_Single_OSTerm_H
0003
0004 #include "AMEGIC++/DipoleSubtraction/Single_LOProcess.H"
0005 #include "AMEGIC++/Main/Single_Process.H"
0006
0007 #include "AMEGIC++/DipoleSubtraction/DipoleSplitting_Base.H"
0008 #include "PHASIC++/Process/Single_Process.H"
0009 #include "PHASIC++/Process/Process_Info.H"
0010 #include <vector>
0011
0012 namespace AMEGIC {
0013 class Helicity;
0014 class Amplitude_Handler;
0015 class DipoleSplitting_Base;
0016 class Single_OSTerm : public Process_Base {
0017 private:
0018 bool m_valid;
0019 Single_OSTerm * p_partner;
0020 ATOOLS::Vec4D * p_OS_mom;
0021 ATOOLS::Vec4D_Vector p_OS_labmom;
0022
0023 Process_Base * p_os_process;
0024 PHASIC::Process_Info m_osinfo;
0025
0026 size_t m_pi,m_pj,m_pk;
0027 size_t m_switch;
0028
0029 ATOOLS::Flavour m_fli,m_flj,m_flij,m_flk;
0030 double m_wwindow;
0031 ATOOLS::NLO_subevt m_subevt;
0032
0033 PHASIC::Process_Integrator* p_realint;
0034
0035 std::vector<size_t> m_sids;
0036
0037
0038
0039
0040
0041 public:
0042
0043 Single_OSTerm(const PHASIC::Process_Info &,
0044 size_t,size_t,size_t,
0045 PHASIC::Process_Integrator*);
0046 ~Single_OSTerm();
0047
0048 void SetScale(const PHASIC::Scale_Setter_Arguments &args);
0049
0050
0051
0052
0053
0054
0055
0056 private:
0057 void BuildDecay(PHASIC::Subprocess_Info&);
0058 bool DetermineType();
0059 std::vector<PHASIC::Subprocess_Info>::iterator
0060 FindInInfo(PHASIC::Subprocess_Info& fi, int idx) const;
0061 void SetLOMomenta(const ATOOLS::Vec4D*,const ATOOLS::Poincare &);
0062 double lambda(double x, double y, double z);
0063
0064
0065
0066
0067
0068
0069
0070 public:
0071 void AddChannels(std::list<std::string>*);
0072 bool NewLibs() {return p_os_process->NewLibs();}
0073 int InitAmplitude(Amegic_Model *,Topology *,
0074 std::vector<Process_Base *> &,
0075 std::vector<Process_Base *> &);
0076 bool SetUpIntegrator();
0077 String_Handler * GetStringHandler() { return NULL; }
0078 Amplitude_Handler * GetAmplitudeHandler() { return p_partner->GetOSProcess()->GetAmplitudeHandler();}
0079 Helicity * GetHelicity() { return p_partner->GetOSProcess()->GetHelicity(); }
0080 bool IsValid() { return m_valid; }
0081 Process_Base* GetOSProcess() { return p_os_process; }
0082 ATOOLS::NLO_subevt* GetSubevt() { return &m_subevt; }
0083 ATOOLS::Vec4D* GetLOmom() { return p_OS_mom; }
0084 void PrintProcessSummary(int it);
0085
0086 int NumberOfDiagrams();
0087 AMEGIC::Point * Diagram(int i);
0088
0089 inline size_t Li() { return m_pi; }
0090 inline size_t Lj() { return m_pj; }
0091 inline size_t Lk() { return m_pk; }
0092
0093
0094
0095
0096
0097 public:
0098 void SetLookUp(const bool lookup);
0099 std::string PSLibName() { return p_partner->GetOSProcess()->PSLibName(); }
0100 Process_Base * Partner() const { return p_partner; }
0101 void Minimize();
0102
0103 void SetSelector(const PHASIC::Selector_Key &key);
0104
0105
0106
0107
0108
0109
0110 public:
0111 double Partonic(const ATOOLS::Vec4D_Vector&,
0112 ATOOLS::Variations_Mode varmode,
0113 int mode);
0114 double operator()(const ATOOLS::Vec4D *,const ATOOLS::Poincare &cms,const int);
0115
0116 int Type() { return 15; }
0117 void PrintLOmom();
0118 };
0119 }
0120
0121
0122
0123 #endif
0124