File indexing completed on 2025-04-19 09:09:46
0001 #ifndef AMEGIC_DipoleSubtraction_Single_LOProcess_H
0002 #define AMEGIC_DipoleSubtraction_Single_LOProcess_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
0011
0012 namespace AMEGIC {
0013 class Helicity;
0014
0015 typedef std::set<std::pair<size_t,size_t> > Combination_Set;
0016 typedef std::map<size_t,ATOOLS::Flavour_Vector> CFlavVector_Map;
0017
0018 class Single_LOProcess : public Process_Base {
0019 protected:
0020 int m_gen_str;
0021 std::string m_ptypename,m_libname,m_pslibname;
0022 ATOOLS::sbt::subtype m_stype;
0023 Polarisation m_pol;
0024 bool m_newlib;
0025 double m_iresult;
0026 int m_emit,m_spect,m_type;
0027
0028 Helicity * p_hel;
0029 Basic_Sfuncs * p_BS;
0030 Amplitude_Handler * p_ampl;
0031 String_Handler * p_shand;
0032
0033 Single_LOProcess * p_partner;
0034 std::vector<size_t> m_partonlistqcd, m_partonlistqed;
0035 std::vector<int> m_rsmap,m_srmap;
0036
0037 size_t m_pspissplscheme, m_pspfssplscheme;
0038
0039 std::vector<double> m_maxcpliqcd, m_mincpliqcd,
0040 m_maxcpliew, m_mincpliew;
0041
0042 std::map<int, size_t> m_flavrestrictions;
0043
0044 std::vector<ATOOLS::Vec4D> m_epol;
0045
0046 ATOOLS::NLO_subevt *p_sub;
0047
0048 Combination_Set m_ccombs;
0049 CFlavVector_Map m_cflavs;
0050
0051 void FillCombinations(Point *const p,size_t &id);
0052 void FillCombinations();
0053 void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0054 std::vector<std::vector<Complex> >& cols,
0055 double sfactor);
0056
0057
0058
0059
0060
0061
0062 public:
0063
0064 Single_LOProcess(const PHASIC::Process_Info &pi,
0065 BEAM::Beam_Spectra_Handler *const beam,
0066 PDF::ISR_Handler *const isr,
0067 YFS::YFS_Handler *const yfs,
0068 const ATOOLS::sbt::subtype& st);
0069 ~Single_LOProcess();
0070
0071 bool Combinable(const size_t &idi,const size_t &idj);
0072 const ATOOLS::Flavour_Vector &CombinedFlavour(const size_t &idij);
0073
0074 const MODEL::Coupling_Map *CouplingMap() const { return &m_cpls; }
0075 void SetProcMap(PHASIC::NLOTypeStringProcessMap_Map *apmap) { p_apmap=apmap; }
0076
0077
0078
0079
0080
0081 private :
0082 int Tests(std::vector<double>* =NULL);
0083 int TestLib(std::vector<double>* =NULL);
0084 int CheckLibraries(std::vector<double>* =NULL);
0085 int CheckStrings(Single_LOProcess*,std::vector<double>* =NULL);
0086 void WriteLibrary();
0087 bool FoundLib(std::string& pID);
0088 protected:
0089 void CreateMappingFile(Single_LOProcess*);
0090 void UpdateMappingFile(std::string,std::map<std::string,Complex> &);
0091 void WriteAlternativeName(std::string aname);
0092 bool CheckAlternatives(std::vector<Process_Base *> & links,
0093 std::string procname);
0094 bool CompareTestMoms(const ATOOLS::Vec4D*);
0095 public:
0096 std::string CreateLibName();
0097 void AddChannels(std::list<std::string>*);
0098 bool NewLibs() {return m_newlib;}
0099 bool FoundMappingFile(std::string &,std::string &);
0100 int InitAmplitude(Amegic_Model *,Topology *,
0101 std::vector<Process_Base *> &,
0102 std::vector<Process_Base *> &);
0103 virtual int InitAmplitude(Amegic_Model *,Topology *,
0104 std::vector<Process_Base *> &,
0105 std::vector<Process_Base *> &,int);
0106 virtual int InitAmplitude(Amegic_Model *,Topology *,
0107 std::vector<Process_Base *> &,
0108 std::vector<Process_Base *> &,
0109 std::vector<ATOOLS::Vec4D>*,std::vector<double>*);
0110 bool SetUpIntegrator();
0111 String_Handler * GetStringHandler();
0112 Amplitude_Handler * GetAmplitudeHandler();
0113 Helicity * GetHelicity();
0114 double Result() { return m_iresult; }
0115
0116 int NumberOfDiagrams();
0117 AMEGIC::Point * Diagram(int i);
0118 bool IsFreeOfFourVertex(Point * _p) { return 1-p_ampl->ExistFourVertex(_p); }
0119
0120 Basic_Sfuncs * GetBS() {return p_BS;}
0121 double Norm() {return m_Norm;}
0122
0123 inline size_t GetEmit() { return m_emit; }
0124 inline size_t GetSpect() { return m_spect; }
0125 inline void SetSubEvt(ATOOLS::NLO_subevt *sub) { p_sub=sub; }
0126 inline void SetPhotonSplittingModes(const size_t &im,
0127 const size_t &fm)
0128 { m_pspissplscheme=im; m_pspfssplscheme=fm; }
0129 inline void SetMaxOrdersIQCD(const std::vector<double> &o)
0130 { m_maxcpliqcd=o; }
0131 inline void SetMinOrdersIQCD(const std::vector<double> &o)
0132 { m_mincpliqcd=o; }
0133 inline void SetMaxOrdersIEW(const std::vector<double> &o)
0134 { m_maxcpliew=o; }
0135 inline void SetMinOrdersIEW(const std::vector<double> &o)
0136 { m_mincpliew=o; }
0137
0138
0139
0140
0141
0142 public:
0143 std::string LibName() { return m_libname; }
0144 std::string PSLibName() { return m_pslibname; }
0145 Process_Base * Partner() const { return p_partner; }
0146 void Minimize();
0147 inline int Type() { return m_type; }
0148 inline const ATOOLS::sbt::subtype& GetSubType() const { return m_stype; }
0149 inline const std::vector<size_t>& PartonListQCD() const { return m_partonlistqcd; }
0150 inline const std::vector<size_t>& PartonListQED() const { return m_partonlistqed; }
0151 inline const bool HasInitialStateQCDEmitter() const
0152 { return m_partonlistqcd.size()?m_partonlistqcd[0]<m_nin:false; }
0153 inline const bool HasInitialStateQEDEmitter() const
0154 { return m_partonlistqed.size()?m_partonlistqed[0]<m_nin:false; }
0155 inline const bool HasInitialStateEmitter() const
0156 { return HasInitialStateQCDEmitter() || HasInitialStateQEDEmitter(); }
0157 inline Polarisation *GetPolarisation() { return &m_pol; }
0158 bool CheckIQCDMappability() const;
0159 bool CheckIQEDMappability() const;
0160 bool IsValid();
0161
0162
0163
0164
0165
0166
0167 private:
0168 double Calc_M2ik(const int& ci, const int& ck,
0169 const std::vector<double>&,
0170 const std::vector<double>&);
0171 public:
0172 double Partonic(const ATOOLS::Vec4D_Vector&,
0173 ATOOLS::Variations_Mode,
0174 int mode);
0175 virtual double operator()(const ATOOLS::Vec4D_Vector &,const ATOOLS::Vec4D *,
0176 std::vector<double>*,std::vector<ATOOLS::Vec4D>*,const int);
0177 void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0178 std::vector<std::vector<Complex> >& cols);
0179 virtual void Calc_AllXS(const ATOOLS::Vec4D_Vector &,
0180 const ATOOLS::Vec4D *,
0181 std::vector<std::vector<double> > &,
0182 std::vector<std::vector<double> > &,
0183 const int);
0184 inline const std::vector<int> &RSMap() const { return m_rsmap; }
0185 inline const std::vector<int> &SRMap() const { return m_srmap; }
0186 };
0187 }
0188
0189
0190
0191 #endif
0192