Back to home page

EIC code displayed by LXR

 
 

    


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