File indexing completed on 2025-04-19 09:10:11
0001 #ifndef PHASIC_Process_Subprocess_Info_H
0002 #define PHASIC_Process_Subprocess_Info_H
0003
0004 #include "ATOOLS/Phys/Decay_Info.H"
0005 #include "ATOOLS/Phys/NLO_Types.H"
0006
0007 namespace PHASIC {
0008
0009 struct Subprocess_Info {
0010 public:
0011
0012 ATOOLS::Flavour m_fl;
0013 std::string m_id, m_pol, m_sv, m_mpl;
0014
0015 std::vector<Subprocess_Info> m_ps;
0016 ATOOLS::DecayInfo_Vector m_decins;
0017
0018 size_t m_nmax, m_nmin;
0019 int m_tag, m_osf;
0020
0021 ATOOLS::nlo_type::code m_nlotype;
0022 std::vector<double> m_nlocpl;
0023 ATOOLS::asscontrib::type m_asscontribs;
0024
0025 void GetExternal(std::vector<ATOOLS::Flavour> &fl) const;
0026 void SetExternal(const std::vector<ATOOLS::Flavour> &fl,size_t &n);
0027
0028 bool GetExternal(ATOOLS::Flavour &fl,const size_t &i,size_t &n) const;
0029 bool SetExternal(const ATOOLS::Flavour &fl,const size_t &i,size_t &n);
0030
0031 size_t GetDecayInfos(ATOOLS::DecayInfo_Vector &ids,size_t &n,bool init);
0032 void DeleteDecayInfos();
0033
0034 void SetTags(const std::vector<int>& tags,int &n);
0035
0036 public:
0037
0038 Subprocess_Info(const ATOOLS::Flavour &fl=ATOOLS::Flavour(kf_none),
0039 const std::string &id="",const std::string &pol="",
0040 const std::string &mpl="");
0041 ~Subprocess_Info();
0042
0043 std::string MultiplicityTag() const;
0044
0045 double Factorial(const double &n) const;
0046
0047 double ISSymmetryFactor() const;
0048 double FSSymmetryFactor() const;
0049
0050 size_t NExternal() const;
0051 size_t NTotalExternal() const;
0052 size_t NMinExternal() const;
0053 size_t NMaxExternal() const;
0054 bool IsGroup() const;
0055
0056 void SetExternal(const std::vector<ATOOLS::Flavour> &fl);
0057 void SetExternal(const ATOOLS::Flavour &fl,const size_t &i);
0058
0059 std::vector<ATOOLS::Flavour> GetExternal() const;
0060 ATOOLS::Flavour GetExternal(const size_t &i) const;
0061
0062 void Add(const Subprocess_Info &info);
0063 bool AddDecay(const Subprocess_Info &ii,const Subprocess_Info &fi,int osf=0);
0064
0065 inline ATOOLS::DecayInfo_Vector GetDecayInfos() const { return m_decins; }
0066 void BuildDecayInfos(size_t nin=2);
0067
0068 void Print(std::ostream &ostr,const size_t &ni=0) const;
0069 void PrintFlavours(std::ostream &ostr) const;
0070
0071 void SetNMax(const Subprocess_Info &ref);
0072 void GetNMax(const Subprocess_Info &ref);
0073
0074 inline ATOOLS::nlo_type::code NLOType() const { return m_nlotype; }
0075 inline void SetNLOType(ATOOLS::nlo_type::code nt) { m_nlotype=nt; }
0076
0077 void SetTags(int& start);
0078 void SetTags(const std::vector<int>& tags);
0079 void GetTags(std::vector<int>& tags) const;
0080
0081 int Combine(const size_t &i,const size_t &j,
0082 const ATOOLS::Flavour &flij,int &cnt);
0083
0084 void ExtractMPL(std::vector<ATOOLS::Flavour_Vector> &fl) const;
0085
0086 bool operator<(const Subprocess_Info &pi) const;
0087 bool operator==(const Subprocess_Info &pi) const;
0088
0089 };
0090
0091 std::ostream &operator<<(std::ostream &ostr,const Subprocess_Info &info);
0092
0093 }
0094
0095 #endif
0096