Back to home page

EIC code displayed by LXR

 
 

    


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     // constructor
0067     PS_Generator(Process_Base *const xs=NULL);
0068 
0069     // destructor
0070     ~PS_Generator();
0071 
0072     // member functions
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     // inline functions
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   };// end of class PS_Generator
0095 
0096 }// end of namespace COMIX
0097 
0098 #endif