File indexing completed on 2025-04-19 09:09:46
0001 #ifndef AMEGIC_DipoleSubtraction_Single_DipoleTerm_H
0002 #define AMEGIC_DipoleSubtraction_Single_DipoleTerm_H
0003
0004 #include "AMEGIC++/DipoleSubtraction/Single_LOProcess.H"
0005
0006 #include "AMEGIC++/DipoleSubtraction/DipoleSplitting_Base.H"
0007 #include "PHASIC++/Process/Single_Process.H"
0008 #include <vector>
0009
0010 namespace AMEGIC {
0011 class Helicity;
0012 class Amplitude_Handler;
0013 class DipoleSplitting_Base;
0014 class Single_DipoleTerm : public Process_Base {
0015 private:
0016 double m_iresult;
0017 bool m_valid;
0018 bool m_noISclustertolepton;
0019 double m_dalpha;
0020 double m_dkt2max;
0021 double m_maxgsmass;
0022
0023 Single_DipoleTerm * p_partner;
0024
0025 Single_LOProcess * p_LO_process;
0026 ATOOLS::Vec4D * p_LO_mom;
0027 ATOOLS::Vec4D_Vector p_LO_labmom;
0028
0029 ATOOLS::sbt::subtype m_stype;
0030 ATOOLS::dpt::dipoletype m_dtype;
0031 ATOOLS::spt::splittingtype m_ftype;
0032
0033 size_t m_pi,m_pj,m_pk;
0034 size_t m_LOpij,m_LOpk;
0035 ATOOLS::Flavour m_fli,m_flj,m_flij,m_flk;
0036 ATOOLS::Flavour_Vector m_lofl;
0037 DipoleSplitting_Base* p_dipole;
0038 ATOOLS::NLO_subevt m_subevt;
0039 double m_smth;
0040 size_t m_nphotonsplits;
0041 size_t m_pspissplitscheme,m_pspfssplitscheme;
0042
0043 PHASIC::Process_Integrator* p_realint;
0044
0045 std::vector<size_t> m_sids;
0046
0047
0048
0049
0050
0051 public:
0052
0053 Single_DipoleTerm(const PHASIC::Process_Info &,size_t,size_t,size_t,
0054 ATOOLS::sbt::subtype,PHASIC::Process_Integrator*);
0055 ~Single_DipoleTerm();
0056
0057 void SetScale(const PHASIC::Scale_Setter_Arguments &args);
0058 void SetKFactor(const PHASIC::KFactor_Setter_Arguments &args);
0059 size_t SetMCMode(const size_t mcmode);
0060 size_t SetClusterMode(const size_t cmode);
0061 void FillProcessMap(PHASIC::NLOTypeStringProcessMap_Map *apmap);
0062 void SetCaller(PHASIC::Process_Base *const proc);
0063
0064
0065
0066
0067
0068
0069
0070 void SetLOMomenta(const ATOOLS::Vec4D*,const ATOOLS::Poincare &);
0071 private:
0072 bool DetermineType();
0073 bool DetermineQCDType();
0074 bool DetermineEWType();
0075 bool CompareLOmom(const ATOOLS::Vec4D*);
0076
0077
0078
0079
0080
0081
0082
0083 public:
0084
0085 ATOOLS::Flavour ReMap(const ATOOLS::Flavour &fl,const size_t &id) const;
0086 void AddChannels(std::list<std::string>*);
0087 bool NewLibs() {return p_LO_process?p_LO_process->NewLibs():false;}
0088 int InitAmplitude(Amegic_Model *,Topology *,
0089 std::vector<Process_Base *> &,
0090 std::vector<Process_Base *> &);
0091 bool SetUpIntegrator();
0092 bool Trigger(const ATOOLS::Vec4D_Vector &p);
0093 String_Handler * GetStringHandler() { return p_partner->GetLOProcess()->GetStringHandler();}
0094 Amplitude_Handler * GetAmplitudeHandler() { return p_partner->GetLOProcess()->GetAmplitudeHandler();}
0095 Helicity * GetHelicity() { return p_partner->GetLOProcess()->GetHelicity(); }
0096 double Result() { return m_iresult; }
0097 bool IsValid() { return m_valid; }
0098
0099
0100 Single_LOProcess* GetLOProcess() { return p_LO_process; }
0101 ATOOLS::sbt::subtype GetSubtractionType() { return m_stype; }
0102 ATOOLS::dpt::dipoletype GetDipoleType() { return m_dtype; }
0103 ATOOLS::spt::splittingtype GetSplittingType() { return m_ftype; }
0104 ATOOLS::NLO_subevt* GetSubevt() { return &m_subevt; }
0105 ATOOLS::Vec4D* GetLOmom() { return p_LO_mom; }
0106 void PrintProcessSummary(int it);
0107
0108 int NumberOfDiagrams();
0109 AMEGIC::Point * Diagram(int i);
0110 const DipoleSplitting_Base* Dipole() const { return p_dipole; }
0111
0112 inline size_t Lijt() { return p_LO_process->GetEmit(); }
0113 inline size_t Lkt() { return p_LO_process->GetSpect(); }
0114 inline size_t Li() { return m_pi; }
0115 inline size_t Lj() { return m_pj; }
0116 inline size_t Lk() { return m_pk; }
0117
0118 inline void SetNPhotonSplittings(const size_t &n) { m_nphotonsplits=n; }
0119
0120
0121
0122
0123
0124
0125 public:
0126 void SetLookUp(const bool lookup);
0127 std::string PSLibName() { return p_partner->GetLOProcess()->PSLibName(); }
0128 Process_Base * Partner() const { return p_partner; }
0129 void Minimize();
0130
0131 void SetChargeFactors();
0132 void SetSelector(const PHASIC::Selector_Key &key);
0133 void SetShower(PDF::Shower_Base *const ps);
0134 void SetNLOMC(PDF::NLOMC_Base *const mc);
0135
0136 void SetRealSubevt(ATOOLS::NLO_subevt *real) { m_subevt.p_real=real; }
0137
0138
0139
0140
0141
0142
0143 public:
0144 double Partonic(const ATOOLS::Vec4D_Vector &,
0145 ATOOLS::Variations_Mode varmode,
0146 int mode);
0147 double operator()(const ATOOLS::Vec4D *,const ATOOLS::Poincare &cms,const int);
0148
0149 int Type() { return 15; }
0150 void PrintLOmom();
0151 inline void SetSmearThreshold(const double &th) { m_smth=th; }
0152 };
0153 }
0154
0155
0156
0157 #endif
0158