File indexing completed on 2025-04-19 09:10:13
0001 #ifndef REMNANTS_Tools_Colour_Generator_H
0002 #define REMNANTS_Tools_Colour_Generator_H
0003
0004 #include "ATOOLS/Phys/Blob_List.H"
0005 #include "ATOOLS/Phys/Particle.H"
0006 #include "ATOOLS/Org/Message.H"
0007
0008 namespace REMNANTS {
0009 class Remnant_Handler;
0010 class Remnant_Base;
0011
0012 class Colour_Generator {
0013 class MassCrit {
0014 public:
0015 inline bool operator()(const std::pair<ATOOLS::Particle *, ATOOLS::Particle *> & s1,
0016 const std::pair<ATOOLS::Particle *, ATOOLS::Particle *> & s2) {
0017 return ((s1.first->Momentum()+s1.second->Momentum()).Y() <
0018 (s2.first->Momentum()+s2.second->Momentum()).Y());
0019 }
0020 };
0021
0022 typedef std::set<std::pair<ATOOLS::Particle *, ATOOLS::Particle *>,
0023 MassCrit> Singlets;
0024 private:
0025 std::list<int> m_cols[2][2];
0026 std::set<int> m_vetoed[2][2];
0027 Remnant_Base * p_remnants[2];
0028 ATOOLS::Particle * p_inparts[2];
0029
0030
0031 bool TChannelColourFlows();
0032 bool SChannelColourFlows();
0033 bool ConstrainedColourFlows(const size_t & tbeam);
0034 bool ConstrainedGGFlows(const size_t & tbeam);
0035 bool ConstrainedGQFlows(const size_t & tbeam);
0036 bool ConstrainedQGFlows(const size_t & tbeam);
0037 bool ConstrainedQQFlows(const size_t & tbeam);
0038 void AssignColours(const size_t & beam,ATOOLS::Particle * trip,ATOOLS::Particle * anti);
0039 size_t AvailableColours(const size_t & beam);
0040 int DefineColourDonor(const size_t & beam);
0041 void ReplaceBoth(const int & beam,const size_t & index);
0042 void Replace(const int & beam,const size_t & index,ATOOLS::Particle * part);
0043 void ReplaceInFS(const int & oldcol, const int & newcol, const size_t & index,
0044 ATOOLS::Blob * blob);
0045 void ReplaceInIS(const int & oldcol, const int & newcol, const size_t & index,
0046 ATOOLS::Blob * blob);
0047 public:
0048 Colour_Generator();
0049 ~Colour_Generator();
0050
0051 void Initialize(Remnant_Handler * remnants);
0052 void ConnectColours(ATOOLS::Blob *const showerblob);
0053 void AddColour(const size_t & beam,const size_t & pos,
0054 ATOOLS::Particle * part);
0055 int NextColour(const size_t & beam,const size_t & pos);
0056
0057 inline bool HasColours(const size_t & beam) const {
0058 return ((m_cols[beam][0].size()+m_cols[beam][1].size()) > 0);
0059 }
0060
0061 inline std::list<int> & Colours(const size_t & beam,const size_t & pos) {
0062 return m_cols[beam][pos];
0063 }
0064
0065 inline void Reset() {
0066 for (size_t beam=0;beam<2;beam++) {
0067 for (size_t pos=0;pos<2;pos++) {
0068 m_cols[beam][pos].clear();
0069 m_vetoed[beam][pos].clear();
0070 }
0071 }
0072 }
0073 inline void ResetFlags() {
0074 for (size_t beam=0;beam<2;beam++) {
0075 for (size_t pos=0;pos<2;pos++) m_vetoed[beam][pos].clear();
0076 }
0077 }
0078 void Output();
0079 };
0080 }
0081
0082 #endif