Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:09:54

0001 #ifndef ATOOLS_Phys_Blob_List_H
0002 #define ATOOLS_Phys_Blob_List_H
0003 
0004 #include "ATOOLS/Phys/Blob.H"
0005 #include "ATOOLS/Phys/Weights.H"
0006 #include "ATOOLS/Phys/Particle_List.H"
0007 #include <deque>
0008 #include <map>
0009 #include <set>
0010 #include <iostream>
0011 
0012 namespace ATOOLS {
0013 
0014   class Blob_List: public std::deque<Blob*> {
0015   private:
0016     static std::map<btp::code, unsigned long int> s_momfails;
0017 
0018     class Destructor {
0019     private:
0020       Blob_List *p_list;
0021 
0022       void RegisterDefaults() const;
0023 
0024     public:
0025 
0026       // destructor
0027       Destructor(): p_list(NULL) {}
0028       Destructor(Blob_List *const list): p_list(list) {}
0029 
0030       // destructor
0031       inline ~Destructor() { if (p_list!=NULL) p_list->Clear(); }
0032 
0033     };// end of class Destructor
0034 
0035     double m_extweight;
0036     Destructor m_destructor;
0037 
0038     friend std::ostream &operator<<(std::ostream &str,const Blob_List &list);
0039 
0040     void FindConnected(Blob *blob,Blob_List &connected,
0041                std::set<const Blob*> &selected);
0042 
0043     void DeleteConnected(Blob *blob,std::set<Blob*> &deleted);
0044 
0045     bool TotalFourMomentum(Blob *blob,std::set<Blob*> &summed,
0046                Vec4D &inisum,Vec4D &finsum,const int mode) const;
0047 
0048   public:
0049 
0050     // constructor
0051     Blob_List();
0052     Blob_List(const bool destruct);
0053 
0054     // member functions
0055     Vec4D TotalFourMomentum() const;
0056     Vec4D IncomingFourMomentum() const;
0057     Vec4D OutgoingFourMomentum() const;
0058 
0059     bool FourMomentumConservation() const;
0060     bool ColorConservation() const;
0061 
0062     Blob *FindFirst(const btp::code code) const;
0063     Blob *FindLast(const btp::code code) const;
0064 
0065     Blob_List Find(const btp::code code) const;
0066 
0067     Blob_List FindConnected(const Blob *blob);
0068     Blob_List FindConnected(const Particle *blob);
0069 
0070     Blob *AddBlob(const btp::code &type);
0071 
0072     bool Delete(Blob *blob);
0073 
0074     size_t DeleteConnected(Blob *blob);
0075     size_t DeleteConnected(Particle *particle);
0076 
0077     Particle_List ExtractParticles(const int status,
0078                    const int mode=0) const;
0079     Particle_List ExtractLooseParticles(const int mode=0) const;
0080 
0081     bool MergeSubsequentType(btp::code,btp::code,long int &,long int &);
0082     void MergeSubsequentTypeRecursively(btp::code,btp::code,
0083                     long int &,long int &);
0084     void Clear(Blob *blob=NULL);
0085 
0086     Blob_List Copy() const;
0087 
0088     ATOOLS::Weights_Map WeightsMap() const;
0089     double Weight() const;
0090     void SetExternalWeight(const double& wt) { m_extweight = wt; }
0091     double ExternalWeight() const { return m_extweight; }
0092 
0093     static void PrintMomFailStatistics(std::ostream &str);
0094   };// end of class Blob_List
0095   
0096   std::ostream &operator<<(std::ostream &str,const Blob_List &list);
0097 
0098 }// end of namespace ATOOLS
0099 
0100 #endif