Back to home page

EIC code displayed by LXR

 
 

    


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   };// end of struct Subprocess_Info
0090 
0091   std::ostream &operator<<(std::ostream &ostr,const Subprocess_Info &info);
0092 
0093 }// end of namespace PHASIC
0094 
0095 #endif
0096