File indexing completed on 2025-04-19 09:10:00
0001 #ifndef COMIX_Phasespace_PS_Generator_H
0002 #define COMIX_Phasespace_PS_Generator_H
0003
0004 #include "COMIX/Amplitude/Amplitude.H"
0005
0006 namespace PHASIC { class Cut_Data; }
0007
0008 namespace COMIX {
0009
0010 class Process_Base;
0011
0012 typedef std::vector<double> Double_Vector;
0013
0014 class PS_Generator {
0015 public:
0016
0017 typedef std::map<Current*,Current*> CB_Map;
0018 typedef std::multimap<Current*,Current*> CB_MMap;
0019 typedef std::pair<Current*,Current*> CB_Pair;
0020
0021 typedef std::map<size_t,Current_Vector> TCC_Map;
0022
0023 private:
0024
0025 Process_Base *p_xs;
0026
0027 Int_Matrix m_cl;
0028
0029 Current_Matrix m_cur;
0030 Current_Vector m_ctt;
0031
0032 size_t m_n, m_itmin, m_itmax;
0033
0034 int m_zmode, m_ecmode, m_pmsinit, m_aniso;
0035
0036 double m_thmass, m_chmass;
0037
0038 Double_Vector m_smasses, m_swidths;
0039
0040 CB_MMap m_cmap;
0041 CB_Map m_cbmap;
0042
0043 TCC_Map m_tccs;
0044
0045 void CleanUp();
0046 void CalcJL();
0047
0048 void AddSubChannel(NLO_subevtlist *const subs,const Vertex_Key &vkey);
0049
0050 bool AddCurrent(Current *const ref,const ATOOLS::Flavour &fl,
0051 const size_t &n,const int mode=0,
0052 const double &m=0.0,const double &w=0.0,
0053 Current *const scc=NULL);
0054 void AddExtraCurrent(Current *const cur,const size_t &n,
0055 const double &m,const double &w,
0056 Current *const scc=NULL);
0057
0058 int DecayType(const Current *jc,
0059 const Current *ja,const Current *jb) const;
0060
0061 void AddSTCC();
0062 void AddSC();
0063
0064 public:
0065
0066
0067 PS_Generator(Process_Base *const xs=NULL);
0068
0069
0070 ~PS_Generator();
0071
0072
0073 bool Construct(Amplitude *const ampl,
0074 ATOOLS::NLO_subevtlist *const subs);
0075 void SetPrefMasses(PHASIC::Cut_Data *const cuts);
0076
0077 bool Evaluate();
0078
0079 void SetColors(const Int_Vector &rc,
0080 const Int_Vector &ac);
0081
0082 size_t NChannels() const;
0083
0084
0085 inline const Current_Matrix &Graphs() const { return m_cur; }
0086
0087 inline void SetZMode(const int &mode) { m_zmode=mode; }
0088
0089 inline double ThresholdMass() const { return m_thmass; }
0090
0091 inline const Double_Vector &ISRMasses() const { return m_smasses; }
0092 inline const Double_Vector &ISRWidths() const { return m_swidths; }
0093
0094 };
0095
0096 }
0097
0098 #endif