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
0027 Destructor(): p_list(NULL) {}
0028 Destructor(Blob_List *const list): p_list(list) {}
0029
0030
0031 inline ~Destructor() { if (p_list!=NULL) p_list->Clear(); }
0032
0033 };
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
0051 Blob_List();
0052 Blob_List(const bool destruct);
0053
0054
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 };
0095
0096 std::ostream &operator<<(std::ostream &str,const Blob_List &list);
0097
0098 }
0099
0100 #endif