YAP
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ParticleCombination.h
Go to the documentation of this file.
1 /* YAP - Yet another PWA toolkit
2  Copyright 2015, Technische Universitaet Muenchen,
3  Authors: Daniel Greenwald, Johannes Rauch
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
20 
21 #ifndef yap_ParticleCombination_h
22 #define yap_ParticleCombination_h
23 
24 #include "fwd/ParticleCombination.h"
25 
26 #include "fwd/Model.h"
27 
28 #include <algorithm>
29 #include <functional>
30 #include <memory>
31 #include <ostream>
32 #include <string>
33 #include <vector>
34 
35 namespace yap {
36 
43 class ParticleCombination : public std::enable_shared_from_this<ParticleCombination>
44 {
45 private:
46 
48  ParticleCombination() = default;
49 
51  ParticleCombination(unsigned index) : Indices_(1, index) {}
52 
55 
58 
61 
64 
65 public:
66 
69 
71  const std::vector<unsigned>& indices() const
72  { return Indices_; }
73 
75  const ParticleCombinationVector& daughters() const
76  { return Daughters_; }
77 
79  std::shared_ptr<ParticleCombination> parent() const
80  { return Parent_.lock(); }
81 
83 
85  bool consistent() const;
86 
89 
90 protected:
91 
94  void addDaughter(std::shared_ptr<ParticleCombination> daughter);
95 
96 private:
97 
99  std::weak_ptr<ParticleCombination> Parent_;
100 
102  ParticleCombinationVector Daughters_;
103 
105  std::vector<unsigned> Indices_;
106 
107 };
108 
111 
113 constexpr bool equal_always(const std::shared_ptr<const ParticleCombination>& A, const std::shared_ptr<const ParticleCombination>& B)
114 { return true; }
115 
117 inline bool equal_by_shared_pointer(const std::shared_ptr<const ParticleCombination>& A, const std::shared_ptr<const ParticleCombination>& B)
118 { return A == B; }
119 
121 bool equal_by_ordered_content(const std::shared_ptr<const ParticleCombination>& A, const std::shared_ptr<const ParticleCombination>& B);
122 
124 bool equal_by_orderless_content(const std::shared_ptr<const ParticleCombination>& A, const std::shared_ptr<const ParticleCombination>& B);
125 
127 bool equal_down(const std::shared_ptr<const ParticleCombination>& A, const std::shared_ptr<const ParticleCombination>& B);
128 
130 bool equal_up(const std::shared_ptr<const ParticleCombination>& A, const std::shared_ptr<const ParticleCombination>& B);
131 
133 bool equal_up_and_down(const std::shared_ptr<const ParticleCombination>& A, const std::shared_ptr<const ParticleCombination>& B);
134 
137 bool equal_down_by_orderless_content(const std::shared_ptr<const ParticleCombination>& A, const std::shared_ptr<const ParticleCombination>& B);
138 
140 
143 bool disjoint(const ParticleCombinationVector& pcv);
144 
147 { return pc.daughters().empty() and pc.indices().size() == 1; }
148 
151 { return pc.parent() ? origin(*pc.parent()) : pc; }
152 
154 const bool is_initial_state_particle_combination(const ParticleCombination& pc, const Model& m);
155 
159 
161 void prune_particle_combinations(ParticleCombinationSet& PCs);
162 
164 std::string indices_string(const ParticleCombination& pc, std::string before = "(", std::string after = ")");
165 
167 std::string to_string(const ParticleCombination& pc);
168 
170 std::string to_string_with_parent(const ParticleCombination& pc);
171 
173 inline std::ostream& operator<<(std::ostream& os, const ParticleCombination& PC)
174 { os << to_string(PC); return os; }
175 
176 }
177 
178 #endif
bool consistent() const
Checks consistency of object.
Definition: ParticleCombination.cxx:39
ParticleCombinationVector Daughters_
vector of daughters
Definition: ParticleCombination.h:102
std::weak_ptr< ParticleCombination > Parent_
Parent of the particle combination.
Definition: ParticleCombination.h:99
const bool is_final_state_particle_combination(const ParticleCombination &pc)
Definition: ParticleCombination.h:146
ParticleCombination & operator=(const ParticleCombination &)=delete
Copy assignment is deleted.
bool equal_up(const std::shared_ptr< const ParticleCombination > &A, const std::shared_ptr< const ParticleCombination > &B)
compare shared_ptr's to ParticleCombination by checking selves and then parents
Definition: ParticleCombination.cxx:214
bool disjoint(const ParticleCombinationVector &pcv)
Definition: ParticleCombination.cxx:87
bool equal_by_shared_pointer(const std::shared_ptr< const ParticleCombination > &A, const std::shared_ptr< const ParticleCombination > &B)
compare shared_ptr's to ParticleCombination by shared_ptr only
Definition: ParticleCombination.h:117
Stores combinations of particle indices.
Definition: ParticleCombination.h:43
void prune_particle_combinations(ParticleCombinationSet &PCs)
only keep particleCombinations with the highest number of indices in their top-most parent ...
Definition: ParticleCombination.cxx:108
bool equal_by_ordered_content(const std::shared_ptr< const ParticleCombination > &A, const std::shared_ptr< const ParticleCombination > &B)
compare shared_ptr's to ParticleCombination by indices only
Definition: ParticleCombination.cxx:168
std::string to_string_with_parent(const ParticleCombination &pc)
convert ParticleCombination with top-most parent to string
Definition: ParticleCombination.cxx:159
const ParticleCombinationVector & daughters() const
Get vector of daughters (const)
Definition: ParticleCombination.h:75
const ParticleCombination & origin(const ParticleCombination &pc)
Definition: ParticleCombination.h:150
constexpr bool equal_always(const std::shared_ptr< const ParticleCombination > &A, const std::shared_ptr< const ParticleCombination > &B)
compare shared_ptr's to ParticleCombination, returning true always
Definition: ParticleCombination.h:113
bool equal_up_and_down(const std::shared_ptr< const ParticleCombination > &A, const std::shared_ptr< const ParticleCombination > &B)
compare shared_ptr's to ParticleCombination by checking selves, daughters, and parents ...
Definition: ParticleCombination.cxx:236
std::shared_ptr< ParticleCombination > parent() const
get parent (const)
Definition: ParticleCombination.h:79
std::vector< unsigned > Indices_
vector indices of daughters
Definition: ParticleCombination.h:105
std::ostream & operator<<(std::ostream &os, const DecayChannel &dc)
<< operator
Definition: DecayChannel.h:127
void addDaughter(std::shared_ptr< ParticleCombination > daughter)
Definition: ParticleCombination.cxx:15
const bool is_from_initial_state_particle_combination(const ParticleCombination &pc, const Model &m)
Definition: ParticleCombination.h:157
const std::vector< unsigned > & indices() const
Get vector of indices (const)
Definition: ParticleCombination.h:71
ParticleCombination()=default
default constructor
ParticleCombination(unsigned index)
Final-state-particle constructor, see ParticleCombinationCache::fsp for details.
Definition: ParticleCombination.h:51
Class implementing a PWA model.
Definition: Model.h:56
bool equal_down(const std::shared_ptr< const ParticleCombination > &A, const std::shared_ptr< const ParticleCombination > &B)
compare shared_ptr's to ParticleCombination by checking selves and then all daughters ...
Definition: ParticleCombination.cxx:187
const bool is_initial_state_particle_combination(const ParticleCombination &pc, const Model &m)
Definition: ParticleCombination.cxx:98
Caches list of ParticleCombination's.
Definition: ParticleCombinationCache.h:36
bool equal_down_by_orderless_content(const std::shared_ptr< const ParticleCombination > &A, const std::shared_ptr< const ParticleCombination > &B)
Definition: ParticleCombination.cxx:274
std::string to_string(const CachedValue::Status &S)
streaming operator for CachedValue::Status
Definition: CachedValue.cxx:27
std::string indices_string(const ParticleCombination &pc, std::string before="(", std::string after=")")
Get indices listed as string.
Definition: ParticleCombination.cxx:124
bool equal_by_orderless_content(const std::shared_ptr< const ParticleCombination > &A, const std::shared_ptr< const ParticleCombination > &B)
compare shared_ptr's to ParticleCombination by indices, disregarding order
Definition: ParticleCombination.cxx:250