File indexing completed on 2025-04-19 09:09:46
0001 #ifndef AMEGIC_DipoleSubtraction_Single_Real_Correction_H
0002 #define AMEGIC_DipoleSubtraction_Single_Real_Correction_H
0003
0004 #include "AMEGIC++/Main/Process_Base.H"
0005
0006 #include "AMEGIC++/DipoleSubtraction/Single_DipoleTerm.H"
0007 #include "AMEGIC++/DipoleSubtraction/Single_OSTerm.H"
0008
0009 #include "AMEGIC++/Amplitude/Amplitude_Handler.H"
0010 #include <vector>
0011
0012 namespace AMEGIC {
0013 class Single_DipoleTerm;
0014 class Helicity;
0015
0016 struct DM_Info {
0017 ATOOLS::Flavour_Vector *p_fl;
0018 std::vector<size_t> *p_id;
0019 std::string m_pname;
0020 DM_Info(ATOOLS::Flavour_Vector *const fl=NULL,
0021 std::vector<size_t> *const id=NULL,
0022 const std::string &pname=""):
0023 p_fl(fl), p_id(id), m_pname(pname) {}
0024 };
0025
0026 class Single_Real_Correction : public Process_Base {
0027 private:
0028 bool m_newlib, m_no_tree, m_listdips;
0029 double m_iresult;
0030 double m_smear_threshold, m_smear_power;
0031 int m_libnumb;
0032 bool m_ossubon;
0033 ATOOLS::sbt::subtype m_user_stype;
0034 size_t m_pspisrecscheme,m_pspfsrecscheme;
0035
0036 Single_Real_Correction * p_partner;
0037
0038 Process_Base * p_tree_process;
0039 ATOOLS::Vec4D_Vector m_real_momenta;
0040 std::vector<Single_DipoleTerm*> m_subtermlist;
0041 std::vector<Single_OSTerm*> m_subostermlist;
0042 ATOOLS::NLO_subevtlist m_subevtlist;
0043 ATOOLS::NLO_subevt m_realevt;
0044
0045 std::vector<size_t> m_sids;
0046 std::map<void*,DM_Info> m_dfmap;
0047
0048 void FillProcessMap(PHASIC::NLOTypeStringProcessMap_Map *apmap);
0049 void ReMapFlavs(ATOOLS::NLO_subevt *const sub,const int mode=0);
0050 void SmearCounterEvents(ATOOLS::NLO_subevtlist& subevtlist);
0051 bool AllowAsSpecInISPFF(const size_t &k);
0052 bool AllowAsSpecInFSPFF(const size_t &k);
0053
0054
0055
0056
0057
0058
0059 public:
0060
0061 Single_Real_Correction();
0062 ~Single_Real_Correction();
0063
0064 bool FillIntegrator(PHASIC::Phase_Space_Handler *const psh);
0065 bool Combinable(const size_t &idi,const size_t &idj);
0066 const ATOOLS::Flavour_Vector &CombinedFlavour(const size_t &idij);
0067 void SetCaller(PHASIC::Process_Base *const proc);
0068
0069 void SetFixedScale(const std::vector<double> &s);
0070 void SetSelectorOn(const bool on);
0071 void SetGenerator(PHASIC::ME_Generator_Base *const gen);
0072 size_t SetMCMode(const size_t mcmode);
0073 size_t SetClusterMode(const size_t cmode);
0074
0075
0076
0077
0078
0079 public:
0080 void AddChannels(std::list<std::string>*);
0081 bool NewLibs() {return m_newlib;}
0082 int InitAmplitude(Amegic_Model *,Topology *,
0083 std::vector<Process_Base *> &,
0084 std::vector<Process_Base *> &);
0085 bool SetUpIntegrator();
0086 Amplitude_Handler * GetAmplitudeHandler() { return p_tree_process->GetAmplitudeHandler();}
0087 Helicity * GetHelicity() { return p_tree_process->GetHelicity(); }
0088 double Result() { return m_iresult; }
0089
0090
0091
0092
0093
0094
0095 public:
0096 void SetLookUp(const bool lookup);
0097 std::string LibName() { return p_tree_process->LibName(); }
0098 std::string PSLibName() { return p_tree_process->PSLibName(); }
0099 Process_Base * Partner() const { return p_partner; }
0100 void Minimize();
0101
0102 void SetSelector(const PHASIC::Selector_Key &key);
0103 void SetShower(PDF::Shower_Base *const ps);
0104 void SetNLOMC(PDF::NLOMC_Base *const mc);
0105
0106 inline ATOOLS::NLO_subevtlist* GetSubevtList()
0107 { return &m_subevtlist; }
0108 inline Single_DipoleTerm* GetSubTerm(size_t i)
0109 { return m_subtermlist[i]; }
0110 inline size_t GetSubTermNumber()
0111 { return m_subtermlist.size(); }
0112
0113 int Type() { return 100; }
0114
0115 inline void SetNoTree(const int notree) { m_no_tree=notree; }
0116
0117
0118
0119
0120
0121 public:
0122 double Partonic(const ATOOLS::Vec4D_Vector&,
0123 ATOOLS::Variations_Mode varmode,
0124 int mode);
0125 double operator()(const ATOOLS::Vec4D_Vector &,const int mode);
0126 void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0127 std::vector<std::vector<Complex> >& cols);
0128
0129 bool Trigger(const ATOOLS::Vec4D_Vector &p);
0130
0131 void SetScale(const PHASIC::Scale_Setter_Arguments &args);
0132 void SetKFactor(const PHASIC::KFactor_Setter_Arguments &args);
0133
0134 int NumberOfDiagrams();
0135 Point * Diagram(int i);
0136
0137 ATOOLS::Flavour ReMap(const ATOOLS::Flavour &fl,const size_t &id) const;
0138
0139
0140
0141
0142
0143
0144 public:
0145 void PrintProcessSummary(int=0);
0146 void PrintSubevtSummary();
0147 size_t NumberOfDipoles() {return m_subtermlist.size();}
0148 Process_Base *GetReal();
0149
0150 };
0151 }
0152
0153
0154
0155 #endif
0156