Belle II Software  release-05-01-25
decayhashmap.cc
1 #include <analysis/utility/DecayNode.h>
2 #include <analysis/utility/DecayTree.h>
3 #include <analysis/utility/DecayForest.h>
4 
5 #include <gtest/gtest.h>
6 
7 using namespace std;
8 using namespace Belle2;
9 
10 
11 namespace {
12 
13  TEST(DecayNodeTest, Constructor)
14  {
15  DecayNode photon_1(22);
16  DecayNode photon_2(22);
17  // cppcheck-suppress unreadVariable ; cppcheck complains that 'pi0' is assigned a value that is never used?
18  DecayNode pi0(111, {photon_1, photon_2});
19 
20  EXPECT_EQ(photon_1.pdg, 22);
21  EXPECT_EQ(photon_1.daughters.size(), 0);
22 
23  EXPECT_EQ(pi0.pdg, 111);
24  EXPECT_EQ(pi0.daughters.size(), 2);
25 
26  }
27 
28  TEST(DecayNodeTest, FindDecay)
29  {
30  DecayNode photon_1(22);
31  DecayNode photon_2(22);
32  DecayNode photon_3(22);
33  DecayNode pi0_1(111, {photon_1, photon_2});
34  DecayNode pi0_2(111);
35 
36  DecayNode e_1(11);
37  DecayNode e_2(-11);
38  DecayNode pi0_3(111, {e_1, e_2});
39 
40  DecayNode pi(211);
41 
42  DecayNode D_1(321, {pi, pi0_1});
43  DecayNode D_2(321, {pi, pi0_2});
44  DecayNode D_3(321, {pi, pi0_3});
45 
46  EXPECT_TRUE(D_1.find_decay(D_1));
47  EXPECT_TRUE(D_1.find_decay(D_2));
48  EXPECT_FALSE(D_1.find_decay(D_3));
49  EXPECT_TRUE(D_1.find_decay(pi0_1));
50  EXPECT_TRUE(D_1.find_decay(pi0_2));
51  EXPECT_FALSE(D_1.find_decay(pi0_3));
52 
53  EXPECT_TRUE(D_2.find_decay(D_1));
54  EXPECT_TRUE(D_2.find_decay(D_2));
55  EXPECT_TRUE(D_2.find_decay(D_3));
56  EXPECT_TRUE(D_2.find_decay(pi0_1));
57  EXPECT_TRUE(D_2.find_decay(pi0_2));
58  EXPECT_TRUE(D_2.find_decay(pi0_3));
59 
60  EXPECT_FALSE(D_3.find_decay(D_1));
61  EXPECT_TRUE(D_3.find_decay(D_2));
62  EXPECT_TRUE(D_3.find_decay(D_3));
63  EXPECT_FALSE(D_3.find_decay(pi0_1));
64  EXPECT_TRUE(D_3.find_decay(pi0_2));
65  EXPECT_TRUE(D_3.find_decay(pi0_3));
66 
67  EXPECT_TRUE(pi0_1.find_decay(photon_1));
68  EXPECT_TRUE(pi0_1.find_decay(photon_2));
69  EXPECT_TRUE(pi0_1.find_decay(photon_3));
70  EXPECT_FALSE(pi0_1.find_decay(e_1));
71  }
72 
73  TEST(DecayTreeTest, FindDecay)
74  {
75  DecayTree photon_1("22");
76  DecayTree pi0_1("111 (--> 22 22)");
77  DecayTree pi0_2("111 ");
78 
79  DecayTree e_1("11");
80  DecayTree e_2("-11");
81  DecayTree pi0_3("111 (--> 11 -11)");
82 
83  DecayTree D_1("321 (--> 11 111 (--> 22 22))");
84  DecayTree D_2("321 (--> 11 111)");
85  DecayTree D_3("321 (--> 11 111 (--> 11 -11))");
86 
87  EXPECT_TRUE(D_1.find_decay(D_1));
88  EXPECT_TRUE(D_1.find_decay(D_2));
89  EXPECT_FALSE(D_1.find_decay(D_3));
90  EXPECT_TRUE(D_1.find_decay(pi0_1));
91  EXPECT_TRUE(D_1.find_decay(pi0_2));
92  EXPECT_FALSE(D_1.find_decay(pi0_3));
93 
94  EXPECT_TRUE(D_2.find_decay(D_1));
95  EXPECT_TRUE(D_2.find_decay(D_2));
96  EXPECT_TRUE(D_2.find_decay(D_3));
97  EXPECT_TRUE(D_2.find_decay(pi0_1));
98  EXPECT_TRUE(D_2.find_decay(pi0_2));
99  EXPECT_TRUE(D_2.find_decay(pi0_3));
100 
101  EXPECT_FALSE(D_3.find_decay(D_1));
102  EXPECT_TRUE(D_3.find_decay(D_2));
103  EXPECT_TRUE(D_3.find_decay(D_3));
104  EXPECT_FALSE(D_3.find_decay(pi0_1));
105  EXPECT_TRUE(D_3.find_decay(pi0_2));
106  EXPECT_TRUE(D_3.find_decay(pi0_3));
107 
108  EXPECT_TRUE(pi0_1.find_decay(photon_1));
109  EXPECT_FALSE(pi0_1.find_decay(e_1));
110  EXPECT_TRUE(pi0_3.find_decay(e_2));
111 
112  }
113 
114  TEST(DecayTreeTest, IsValid)
115  {
116  DecayTree photon_1("22");
117  DecayTree pi0_1("111 (--> 22 22)");
118 
119  EXPECT_TRUE(photon_1.isValid());
120  EXPECT_TRUE(pi0_1.isValid());
121 
122  DecayTree no_match(" No match ");
123  EXPECT_FALSE(no_match.isValid());
124 
125  }
126 
127  TEST(DecayTreeTest, MatchSymbolPosition)
128  {
129 
130  DecayTree D_0("321 (--> 11 111 (--> 11 -11))");
131  DecayTree D_1("321 (--> 11 111 (--> ^11 -11))");
132  DecayTree D_2("321 (--> ^11 111 (--> 11 -11))");
133  DecayTree D_3("^321 (--> 11 111 (--> 11 -11))");
134 
135  EXPECT_EQ(D_0.getMatchSymbolPosition(), -1);
136  EXPECT_EQ(D_0.getNumberOfDecayNodes(), 5);
137 
138  EXPECT_EQ(D_1.getMatchSymbolPosition(), 3);
139  EXPECT_EQ(D_1.getNumberOfDecayNodes(), 5);
140  EXPECT_EQ(D_1.getDecayNode(3).pdg, 11);
141  EXPECT_EQ(D_1.getDecayNode(3).daughters.size(), 0);
142 
143  EXPECT_EQ(D_2.getMatchSymbolPosition(), 1);
144  EXPECT_EQ(D_2.getNumberOfDecayNodes(), 5);
145  EXPECT_EQ(D_2.getDecayNode(1).pdg, 11);
146  EXPECT_EQ(D_2.getDecayNode(1).daughters.size(), 0);
147 
148  EXPECT_EQ(D_3.getMatchSymbolPosition(), 0);
149  EXPECT_EQ(D_3.getNumberOfDecayNodes(), 5);
150  EXPECT_EQ(D_3.getDecayNode(0).pdg, 321);
151  EXPECT_EQ(D_3.getDecayNode(0).daughters.size(), 2);
152 
153  }
154 
155  TEST(DecayTreeTest, Constructor)
156  {
157 
158  DecayTree photon("22");
159  EXPECT_EQ(photon.getNumberOfDecayNodes(), 1);
160  EXPECT_EQ(photon.getDecayNode(0).pdg, 22);
161  EXPECT_EQ(photon.getDecayNode(0).daughters.size(), 0);
162 
163  DecayTree pi0("111 (--> 22 22)");
164  EXPECT_EQ(pi0.getNumberOfDecayNodes(), 3);
165  EXPECT_EQ(pi0.getDecayNode(0).pdg, 111);
166  EXPECT_EQ(pi0.getDecayNode(0).daughters.size(), 2);
167  EXPECT_EQ(pi0.getDecayNode(1).pdg, 22);
168  EXPECT_EQ(pi0.getDecayNode(1).daughters.size(), 0);
169  EXPECT_EQ(pi0.getDecayNode(2).pdg, 22);
170  EXPECT_EQ(pi0.getDecayNode(2).daughters.size(), 0);
171 
172  DecayTree D("321 (--> 11 111 (--> 11 -11))");
173  EXPECT_EQ(D.getNumberOfDecayNodes(), 5);
174  EXPECT_EQ(D.getDecayNode(0).pdg, 321);
175  EXPECT_EQ(D.getDecayNode(0).daughters.size(), 2);
176  EXPECT_EQ(D.getDecayNode(1).pdg, 11);
177  EXPECT_EQ(D.getDecayNode(1).daughters.size(), 0);
178  EXPECT_EQ(D.getDecayNode(2).pdg, 111);
179  EXPECT_EQ(D.getDecayNode(2).daughters.size(), 2);
180  EXPECT_EQ(D.getDecayNode(3).pdg, 11);
181  EXPECT_EQ(D.getDecayNode(3).daughters.size(), 0);
182  EXPECT_EQ(D.getDecayNode(4).pdg, -11);
183  EXPECT_EQ(D.getDecayNode(4).daughters.size(), 0);
184 
185  }
186 
187  TEST(DecayForestTest, Constructor)
188  {
189  DecayForest D("321 (--> 11 111 (--> 11 -11)) | No match | 111 (--> 11 -11) | 512 (--> 321 (--> 11 111 (--> 11 -11)) ) ", false);
190 
191  EXPECT_EQ(D.getNumberOfTrees(), 4);
192  EXPECT_EQ(D.getOriginalTreeNumber(), 2);
193 
194  auto& reconstructed_decay_tree = D.getReconstructedTree();
195  EXPECT_EQ(reconstructed_decay_tree.getNumberOfDecayNodes(), 5);
196  EXPECT_EQ(reconstructed_decay_tree.getDecayNode(0).pdg, 321);
197 
198  auto& no_match_decay_tree = D.getTree(1);
199  EXPECT_FALSE(no_match_decay_tree.isValid());
200 
201  auto& original_decay_tree = D.getOriginalTree();
202  EXPECT_TRUE(original_decay_tree.isValid());
203  EXPECT_EQ(original_decay_tree.getDecayNode(0).pdg, 111);
204 
205  }
206 
207  TEST(DecayForestTest, SaveMemory)
208  {
209  DecayForest D("321 (--> 11 111 (--> 11 -11)) | No match | 111 (--> 11 -11) | 512 (--> 321 (--> 11 111 (--> 11 -11)) ) ", true);
210 
211  EXPECT_EQ(D.getNumberOfTrees(), 3);
212  EXPECT_EQ(D.getOriginalTreeNumber(), 2);
213 
214  auto& reconstructed_decay_tree = D.getReconstructedTree();
215  EXPECT_EQ(reconstructed_decay_tree.getNumberOfDecayNodes(), 5);
216  EXPECT_EQ(reconstructed_decay_tree.getDecayNode(0).pdg, 321);
217 
218  auto& no_match_decay_tree = D.getTree(1);
219  EXPECT_FALSE(no_match_decay_tree.isValid());
220 
221  auto& original_decay_tree = D.getOriginalTree();
222  EXPECT_TRUE(original_decay_tree.isValid());
223  EXPECT_EQ(original_decay_tree.getDecayNode(0).pdg, 111);
224 
225  }
226 
227  TEST(DecayForestTest, FindB2TauNuDecay)
228  {
230  Y(" 300553 (--> -521 (--> 15 (--> -211)) 521 (--> -423 (--> -421 (--> 321 11) 22) 211 211 -211 111 (--> 22 22))) | ^300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) ^-521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> ^15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 ^-211 111 (--> 22 22)) -16)) | 300553 (--> ^521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> ^-423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> ^-421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> ^321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 ^11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) ^22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> ^211 111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) -211) ^211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 22)) ^-211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 ^111 (--> 22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> ^22 22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16)) | 300553 (--> 521 (--> -423 (--> -421 (--> 321 11 -12) 22) 10223 (--> 213 (--> 211 111 (--> 22 ^22)) -211) 211) -521 (--> 15 (--> 16 -211 111 (--> 22 22)) -16))");
231 
232  DecayTree b2taunu_cc("521 (--> -15 16)");
233  DecayTree b2taunu("-521 (--> 15 -16)");
234  DecayTree b2taunu2e("-521 (--> 15 (11 -12 16) -16)");
235  DecayTree b2taunu2rho("-521 (--> 15 (16 -211 111 (--> 22 22)) -16)");
236 
237  EXPECT_FALSE(Y.getOriginalTree().find_decay(b2taunu_cc));
238  EXPECT_TRUE(Y.getOriginalTree().find_decay(b2taunu));
239  EXPECT_FALSE(Y.getOriginalTree().find_decay(b2taunu2e));
240  EXPECT_TRUE(Y.getOriginalTree().find_decay(b2taunu2rho));
241 
242  }
243 
244  TEST(DecayForestTest, RemoveRadiativePhotons)
245  {
246  DecayForest B("521 (--> -421 (--> 325 (--> 321 111 (--> 22 22)) -211) -13 14 22)", false, true);
247  DecayForest B2("521 (--> -11 12 22)", false, true);
248  DecayForest B3("521 (--> -11 12 22)", false, false);
249 
250  DecayTree case1(" 521 (--> -421 (--> 325 (--> 321 111 (--> 22 22)) -211) -13 14)", true);
251  DecayTree case2(" 521 (--> -11 12 22)", true);
252  DecayTree case3(" 521 (--> -11 12 22)", false);
253  DecayTree case4(" 521 (--> -11 12)", false);
254 
255 
256  DecayTree case5(" 521 (--> -11 12 22)", false);
257  DecayTree case6(" 521 (--> -11 12 22)", true);
258  DecayTree case7(" 521 (--> -11 12)", false);
259 
260  EXPECT_TRUE(B.getOriginalTree().find_decay(case1));
261 
262  EXPECT_TRUE(B2.getOriginalTree().find_decay(case2));
263  EXPECT_FALSE(B2.getOriginalTree().find_decay(case3));
264  EXPECT_TRUE(B2.getOriginalTree().find_decay(case4));
265 
266  EXPECT_TRUE(B3.getOriginalTree().find_decay(case5));
267  EXPECT_FALSE(B3.getOriginalTree().find_decay(case6));
268  EXPECT_FALSE(B3.getOriginalTree().find_decay(case7));
269  }
270 
271 } // namespace
Belle2::DecayTree
This is a helper class for the MCDecayFinderModule.
Definition: DecayTree.h:30
Belle2::DecayForest
Contains several DecayTree objects, which belong all to the same candidate.
Definition: DecayForest.h:36
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::DecayNode
DecayNode describes the decay of a particle identified by its pdg code, into list of daughters.
Definition: DecayNode.h:35
Belle2::TEST
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Definition: utilityFunctions.cc:18