10 #include <analysis/ParticleCombiner/ParticleCombiner.h>
12 #include <mdst/dataobjects/ECLCluster.h>
14 #include <analysis/dataobjects/Particle.h>
15 #include <analysis/dataobjects/ParticleList.h>
17 #include <analysis/DecayDescriptor/DecayDescriptor.h>
18 #include <analysis/utility/EvtPDLUtil.h>
20 #include <framework/datastore/StoreArray.h>
21 #include <framework/datastore/StoreObjPtr.h>
26 #include <gtest/gtest.h>
34 class ParticleCombinerTest :
public ::testing::Test {
41 particles.registerInDataStore();
43 eclClusters.registerInDataStore();
48 void TearDown()
override
54 TEST_F(ParticleCombinerTest, ListIndexGeneratorTest)
58 listIndexGenerator.
init(0);
59 EXPECT_FALSE(listIndexGenerator.
loadNext());
64 listIndexGenerator.
init(1);
65 EXPECT_TRUE(listIndexGenerator.
loadNext());
66 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_FlavorSpecificParticle}),
68 EXPECT_FALSE(listIndexGenerator.
loadNext());
73 listIndexGenerator.
init(2);
74 EXPECT_TRUE(listIndexGenerator.
loadNext());
75 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_FlavorSpecificParticle, ParticleList::c_FlavorSpecificParticle }),
77 EXPECT_TRUE(listIndexGenerator.
loadNext());
78 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_SelfConjugatedParticle, ParticleList::c_FlavorSpecificParticle }),
80 EXPECT_TRUE(listIndexGenerator.
loadNext());
81 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_FlavorSpecificParticle, ParticleList::c_SelfConjugatedParticle }),
83 EXPECT_FALSE(listIndexGenerator.
loadNext());
88 listIndexGenerator.
init(3);
89 EXPECT_TRUE(listIndexGenerator.
loadNext());
90 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_FlavorSpecificParticle, ParticleList::c_FlavorSpecificParticle, ParticleList::c_FlavorSpecificParticle }),
92 EXPECT_TRUE(listIndexGenerator.
loadNext());
93 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_SelfConjugatedParticle, ParticleList::c_FlavorSpecificParticle, ParticleList::c_FlavorSpecificParticle }),
95 EXPECT_TRUE(listIndexGenerator.
loadNext());
96 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_FlavorSpecificParticle, ParticleList::c_SelfConjugatedParticle, ParticleList::c_FlavorSpecificParticle }),
98 EXPECT_TRUE(listIndexGenerator.
loadNext());
99 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_SelfConjugatedParticle, ParticleList::c_SelfConjugatedParticle, ParticleList::c_FlavorSpecificParticle }),
101 EXPECT_TRUE(listIndexGenerator.
loadNext());
102 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_FlavorSpecificParticle, ParticleList::c_FlavorSpecificParticle, ParticleList::c_SelfConjugatedParticle }),
104 EXPECT_TRUE(listIndexGenerator.
loadNext());
105 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_SelfConjugatedParticle, ParticleList::c_FlavorSpecificParticle, ParticleList::c_SelfConjugatedParticle }),
107 EXPECT_TRUE(listIndexGenerator.
loadNext());
108 EXPECT_EQ(std::vector<ParticleList::EParticleType>({ ParticleList::c_FlavorSpecificParticle, ParticleList::c_SelfConjugatedParticle, ParticleList::c_SelfConjugatedParticle}),
110 EXPECT_FALSE(listIndexGenerator.
loadNext());
115 TEST_F(ParticleCombinerTest, particleIndexGeneratorTest)
119 particleIndexGenerator.
init(std::vector<unsigned int>({}));
120 EXPECT_FALSE(particleIndexGenerator.
loadNext());
125 particleIndexGenerator.
init(std::vector<unsigned int>({0}));
126 EXPECT_FALSE(particleIndexGenerator.
loadNext());
127 particleIndexGenerator.
init(std::vector<unsigned int>({3}));
128 EXPECT_TRUE(particleIndexGenerator.
loadNext());
129 EXPECT_EQ(std::vector<unsigned int>({0}), particleIndexGenerator.
getCurrentIndices());
130 EXPECT_TRUE(particleIndexGenerator.
loadNext());
131 EXPECT_EQ(std::vector<unsigned int>({1}), particleIndexGenerator.
getCurrentIndices());
132 EXPECT_TRUE(particleIndexGenerator.
loadNext());
133 EXPECT_EQ(std::vector<unsigned int>({2}), particleIndexGenerator.
getCurrentIndices());
134 EXPECT_FALSE(particleIndexGenerator.
loadNext());
139 particleIndexGenerator.
init(std::vector<unsigned int>({2, 0}));
140 EXPECT_FALSE(particleIndexGenerator.
loadNext());
142 particleIndexGenerator.
init(std::vector<unsigned int>({1, 3}));
143 EXPECT_TRUE(particleIndexGenerator.
loadNext());
144 EXPECT_EQ(std::vector<unsigned int>({0, 0}), particleIndexGenerator.
getCurrentIndices());
145 EXPECT_TRUE(particleIndexGenerator.
loadNext());
146 EXPECT_EQ(std::vector<unsigned int>({0, 1}), particleIndexGenerator.
getCurrentIndices());
147 EXPECT_TRUE(particleIndexGenerator.
loadNext());
148 EXPECT_EQ(std::vector<unsigned int>({0, 2}), particleIndexGenerator.
getCurrentIndices());
149 EXPECT_FALSE(particleIndexGenerator.
loadNext());
151 particleIndexGenerator.
init(std::vector<unsigned int>({2, 3}));
152 EXPECT_TRUE(particleIndexGenerator.
loadNext());
153 EXPECT_EQ(std::vector<unsigned int>({0, 0}), particleIndexGenerator.
getCurrentIndices());
154 EXPECT_TRUE(particleIndexGenerator.
loadNext());
155 EXPECT_EQ(std::vector<unsigned int>({1, 0}), particleIndexGenerator.
getCurrentIndices());
156 EXPECT_TRUE(particleIndexGenerator.
loadNext());
157 EXPECT_EQ(std::vector<unsigned int>({0, 1}), particleIndexGenerator.
getCurrentIndices());
158 EXPECT_TRUE(particleIndexGenerator.
loadNext());
159 EXPECT_EQ(std::vector<unsigned int>({1, 1}), particleIndexGenerator.
getCurrentIndices());
160 EXPECT_TRUE(particleIndexGenerator.
loadNext());
161 EXPECT_EQ(std::vector<unsigned int>({0, 2}), particleIndexGenerator.
getCurrentIndices());
162 EXPECT_TRUE(particleIndexGenerator.
loadNext());
163 EXPECT_EQ(std::vector<unsigned int>({1, 2}), particleIndexGenerator.
getCurrentIndices());
164 EXPECT_FALSE(particleIndexGenerator.
loadNext());
169 particleIndexGenerator.
init(std::vector<unsigned int>({2, 4, 3}));
170 EXPECT_TRUE(particleIndexGenerator.
loadNext());
171 EXPECT_EQ(std::vector<unsigned int>({0, 0, 0}), particleIndexGenerator.
getCurrentIndices());
172 EXPECT_TRUE(particleIndexGenerator.
loadNext());
173 EXPECT_EQ(std::vector<unsigned int>({1, 0, 0}), particleIndexGenerator.
getCurrentIndices());
174 EXPECT_TRUE(particleIndexGenerator.
loadNext());
175 EXPECT_EQ(std::vector<unsigned int>({0, 1, 0}), particleIndexGenerator.
getCurrentIndices());
176 EXPECT_TRUE(particleIndexGenerator.
loadNext());
177 EXPECT_EQ(std::vector<unsigned int>({1, 1, 0}), particleIndexGenerator.
getCurrentIndices());
178 EXPECT_TRUE(particleIndexGenerator.
loadNext());
179 EXPECT_EQ(std::vector<unsigned int>({0, 2, 0}), particleIndexGenerator.
getCurrentIndices());
180 EXPECT_TRUE(particleIndexGenerator.
loadNext());
181 EXPECT_EQ(std::vector<unsigned int>({1, 2, 0}), particleIndexGenerator.
getCurrentIndices());
182 EXPECT_TRUE(particleIndexGenerator.
loadNext());
183 EXPECT_EQ(std::vector<unsigned int>({0, 3, 0}), particleIndexGenerator.
getCurrentIndices());
184 EXPECT_TRUE(particleIndexGenerator.
loadNext());
185 EXPECT_EQ(std::vector<unsigned int>({1, 3, 0}), particleIndexGenerator.
getCurrentIndices());
186 EXPECT_TRUE(particleIndexGenerator.
loadNext());
187 EXPECT_EQ(std::vector<unsigned int>({0, 0, 1}), particleIndexGenerator.
getCurrentIndices());
188 EXPECT_TRUE(particleIndexGenerator.
loadNext());
189 EXPECT_EQ(std::vector<unsigned int>({1, 0, 1}), particleIndexGenerator.
getCurrentIndices());
190 EXPECT_TRUE(particleIndexGenerator.
loadNext());
191 EXPECT_EQ(std::vector<unsigned int>({0, 1, 1}), particleIndexGenerator.
getCurrentIndices());
192 EXPECT_TRUE(particleIndexGenerator.
loadNext());
193 EXPECT_EQ(std::vector<unsigned int>({1, 1, 1}), particleIndexGenerator.
getCurrentIndices());
194 EXPECT_TRUE(particleIndexGenerator.
loadNext());
195 EXPECT_EQ(std::vector<unsigned int>({0, 2, 1}), particleIndexGenerator.
getCurrentIndices());
196 EXPECT_TRUE(particleIndexGenerator.
loadNext());
197 EXPECT_EQ(std::vector<unsigned int>({1, 2, 1}), particleIndexGenerator.
getCurrentIndices());
198 EXPECT_TRUE(particleIndexGenerator.
loadNext());
199 EXPECT_EQ(std::vector<unsigned int>({0, 3, 1}), particleIndexGenerator.
getCurrentIndices());
200 EXPECT_TRUE(particleIndexGenerator.
loadNext());
201 EXPECT_EQ(std::vector<unsigned int>({1, 3, 1}), particleIndexGenerator.
getCurrentIndices());
202 EXPECT_TRUE(particleIndexGenerator.
loadNext());
203 EXPECT_EQ(std::vector<unsigned int>({0, 0, 2}), particleIndexGenerator.
getCurrentIndices());
204 EXPECT_TRUE(particleIndexGenerator.
loadNext());
205 EXPECT_EQ(std::vector<unsigned int>({1, 0, 2}), particleIndexGenerator.
getCurrentIndices());
206 EXPECT_TRUE(particleIndexGenerator.
loadNext());
207 EXPECT_EQ(std::vector<unsigned int>({0, 1, 2}), particleIndexGenerator.
getCurrentIndices());
208 EXPECT_TRUE(particleIndexGenerator.
loadNext());
209 EXPECT_EQ(std::vector<unsigned int>({1, 1, 2}), particleIndexGenerator.
getCurrentIndices());
210 EXPECT_TRUE(particleIndexGenerator.
loadNext());
211 EXPECT_EQ(std::vector<unsigned int>({0, 2, 2}), particleIndexGenerator.
getCurrentIndices());
212 EXPECT_TRUE(particleIndexGenerator.
loadNext());
213 EXPECT_EQ(std::vector<unsigned int>({1, 2, 2}), particleIndexGenerator.
getCurrentIndices());
214 EXPECT_TRUE(particleIndexGenerator.
loadNext());
215 EXPECT_EQ(std::vector<unsigned int>({0, 3, 2}), particleIndexGenerator.
getCurrentIndices());
216 EXPECT_TRUE(particleIndexGenerator.
loadNext());
217 EXPECT_EQ(std::vector<unsigned int>({1, 3, 2}), particleIndexGenerator.
getCurrentIndices());
218 EXPECT_FALSE(particleIndexGenerator.
loadNext());
225 class TestParticleList {
227 typedef std::tuple<Particle::EFlavorType, int, std::set<int>> MockParticle;
230 static std::string printable(
const MockParticle& m)
232 std::string s =
"MockParticle with PDG " + std::to_string(std::get<1>(m));
233 s +=
", type " + std::to_string(std::get<0>(m)) +
", daughter indices: ";
234 for (
int idx : std::get<2>(m))
235 s += std::to_string(idx) +
" ";
239 explicit TestParticleList(
const std::string& _decayString) : decayString(_decayString)
243 decaydescriptor.
init(decayString);
246 pdgCode = mother->getPDGCode();
247 listName = mother->getFullName();
253 list.registerInDataStore();
256 if (not list.isValid())
258 list->initialize(pdgCode, listName);
260 if (not isSelfConjugatedParticle) {
264 antiList.registerInDataStore();
266 if (not antiList.isValid())
268 antiList->initialize(-pdgCode, antiListName);
269 list->bindAntiParticleList(*(antiList));
273 void addParticle(
unsigned int mdstSource)
277 Particle* part = particles.appendNew(TLorentzVector(), pdgCode,
279 list->addParticle(part);
282 void addAntiParticle(
unsigned int mdstSource)
286 Particle* part = particles.appendNew(TLorentzVector(), -pdgCode,
288 list->addParticle(part);
291 void addExpectedParticle(
Particle::EFlavorType flavourType,
int pdg_code, std::vector<int> daughter_indices)
293 expected_particles.emplace_back(flavourType, pdg_code, std::set<int>(daughter_indices.begin(),
294 daughter_indices.end()));
297 void addAndCheckParticlesFromGenerator()
306 std::vector<MockParticle> received_particles;
307 std::vector<Particle*> added_particles;
308 for (
unsigned int i = 0; i < expected_particles.size(); ++i) {
309 bool next = generator.loadNext();
312 const Particle& particle = generator.getCurrentParticle();
313 Particle* part = particles.appendNew(particle);
314 added_particles.push_back(part);
315 auto daughter_indices = part->getDaughterIndices();
316 received_particles.emplace_back(part->getFlavorType(), part->getPDGCode(), std::set<int>(daughter_indices.begin(),
317 daughter_indices.end()));
320 EXPECT_FALSE(generator.loadNext());
322 for (
const auto& p : received_particles) {
323 EXPECT_EQ(std::count(expected_particles.begin(), expected_particles.end(), p), 1) <<
"check failed for " << printable(p);
326 for (
const auto& p : expected_particles) {
327 EXPECT_EQ(std::count(received_particles.begin(), received_particles.end(), p), 1) <<
"check failed for " << printable(p);
328 auto it = std::find(received_particles.begin(), received_particles.end(), p);
329 if (it != received_particles.end()) {
330 auto index = std::distance(received_particles.begin(), it);
331 list->addParticle(added_particles[index]);
342 EXPECT_LT(index, list->getListSize());
343 return list->getList(ParticleList::c_SelfConjugatedParticle)[index];
351 EXPECT_LT(index, list->getListSize());
352 return list->getList(ParticleList::c_FlavorSpecificParticle)[index];
360 EXPECT_LT(index, list->getListSize());
361 return list->getList(ParticleList::c_FlavorSpecificParticle)[index];
366 std::string decayString;
367 std::string listName;
368 std::string antiListName;
369 bool isSelfConjugatedParticle;
370 std::vector<MockParticle> expected_particles;
374 TEST_F(ParticleCombinerTest, DStar)
376 TestParticleList K(
"K+");
378 K.addAntiParticle(2);
379 K.addAntiParticle(3);
381 TestParticleList pi(
"pi+");
384 pi.addAntiParticle(6);
387 TestParticleList D0(
"D0 -> K- pi+");
393 D0.addAndCheckParticlesFromGenerator();
397 TestParticleList D0(
"D0 -> K- K+");
400 D0.addAndCheckParticlesFromGenerator();
403 TestParticleList D0(
"D0");
405 TestParticleList DS(
"D*+ -> D0 pi+");
418 DS.addAndCheckParticlesFromGenerator();
422 TEST_F(ParticleCombinerTest, RareBDecay)
424 TestParticleList
e(
"e+");
426 e.addAntiParticle(2);
428 e.addAntiParticle(4);
430 TestParticleList gamma(
"gamma");
431 gamma.addParticle(5);
432 gamma.addParticle(6);
433 gamma.addParticle(7);
435 TestParticleList mu(
"mu+");
436 for (
int i = 0; i < 100; ++i) {
437 mu.addParticle(7 + 2 * i + 1);
438 mu.addAntiParticle(7 + 2 * i + 2);
442 TestParticleList BP(
"B+ -> e+");
447 BP.addAndCheckParticlesFromGenerator();
449 TestParticleList BP2(
"B+:eg -> e+ gamma");
450 for (
int j = 0; j < 3; ++j) {
456 BP2.addAndCheckParticlesFromGenerator();
459 TestParticleList Y(
"Upsilon(4S) -> B+ B-");
464 Y.addAndCheckParticlesFromGenerator();
467 TestParticleList Y2(
"Upsilon(4S):eg -> B+:eg B-");
468 for (
int j = 0; j < 3; ++j) {
479 Y2.addAndCheckParticlesFromGenerator();
484 TestParticleList BP(
"B+:mu -> mu+");
485 for (
int i = 0; i < 100; ++i) {
489 BP.addAndCheckParticlesFromGenerator();
492 TestParticleList BP(
"B+:mg -> mu+ gamma");
493 for (
int j = 0; j < 3; ++j) {
494 for (
int i = 0; i < 100; ++i) {
499 BP.addAndCheckParticlesFromGenerator();
504 TEST_F(ParticleCombinerTest, PsiTo2D0_to2MuPlus2MuMinus)
506 TestParticleList mu(
"mu+");
509 mu.addAntiParticle(3);
510 mu.addAntiParticle(4);
512 TestParticleList D0(
"D0 -> mu+ mu-");
517 D0.addAndCheckParticlesFromGenerator();
519 TestParticleList Psi(
"psi(3770) -> D0 anti-D0");
522 Psi.addAndCheckParticlesFromGenerator();
524 TestParticleList PsiMixed(
"psi(3770):mixeed -> D0 D0");
527 PsiMixed.addAndCheckParticlesFromGenerator();
531 TEST_F(ParticleCombinerTest, PsiToD0D0sig)
533 TestParticleList mu(
"mu+");
536 mu.addAntiParticle(3);
537 mu.addAntiParticle(4);
539 TestParticleList K(
"K+");
541 K.addAntiParticle(6);
542 TestParticleList pi(
"pi+");
544 pi.addAntiParticle(8);
546 TestParticleList D0(
"D0 -> mu+ mu-");
551 D0.addAndCheckParticlesFromGenerator();
553 TestParticleList D0sig(
"D0:sig -> K+ pi-");
556 D0sig.addAndCheckParticlesFromGenerator();
558 TestParticleList Psi(
"psi(3770) -> D0:sig anti-D0");
568 Psi.addAndCheckParticlesFromGenerator();
571 TEST_F(ParticleCombinerTest, InputListCollisions)
578 pipAll.registerInDataStore();
579 pimAll.registerInDataStore();
584 pipAll->initialize(211,
"pi+:all");
585 pimAll->initialize(-211,
"pi-:all");
586 pipAll->bindAntiParticleList(*(pimAll));
593 pipGood.registerInDataStore();
594 pimGood.registerInDataStore();
599 pipGood->initialize(211,
"pi+:good");
600 pimGood->initialize(-211,
"pi-:good");
601 pipGood->bindAntiParticleList(*(pimGood));
607 kpAll.registerInDataStore();
608 kmAll.registerInDataStore();
613 kpAll->initialize(321,
"K+:all");
614 kmAll->initialize(-321,
"K-:all");
615 kpAll->bindAntiParticleList(*(kmAll));
622 kpGood.registerInDataStore();
623 kmGood.registerInDataStore();
628 kpGood->initialize(321,
"K+:good");
629 kmGood->initialize(-321,
"K-:good");
630 kpGood->bindAntiParticleList(*(kmGood));
636 kpGood2.registerInDataStore();
637 kmGood2.registerInDataStore();
642 kpGood2->initialize(321,
"K+:good2");
643 kmGood2->initialize(-321,
"K-:good2");
644 kpGood2->bindAntiParticleList(*(kmGood2));
651 gamma_1.registerInDataStore();
652 gamma_2.registerInDataStore();
657 gamma_1->initialize(22,
"gamma:1");
658 gamma_2->initialize(22,
"gamma:2");
662 EXPECT_FALSE(comb1.inputListsCollide());
663 EXPECT_FALSE(comb1.inputListsCollide(std::make_pair(0, 1)));
666 EXPECT_TRUE(comb2.inputListsCollide());
667 EXPECT_TRUE(comb2.inputListsCollide(std::make_pair(0, 1)));
670 EXPECT_FALSE(comb3.inputListsCollide());
671 EXPECT_FALSE(comb3.inputListsCollide(std::make_pair(0, 1)));
672 EXPECT_FALSE(comb3.inputListsCollide(std::make_pair(0, 2)));
673 EXPECT_FALSE(comb3.inputListsCollide(std::make_pair(0, 3)));
674 EXPECT_FALSE(comb3.inputListsCollide(std::make_pair(1, 2)));
675 EXPECT_FALSE(comb3.inputListsCollide(std::make_pair(1, 3)));
676 EXPECT_FALSE(comb3.inputListsCollide(std::make_pair(2, 3)));
679 EXPECT_TRUE(comb4.inputListsCollide());
680 EXPECT_TRUE(comb4.inputListsCollide(std::make_pair(0, 1)));
681 EXPECT_FALSE(comb4.inputListsCollide(std::make_pair(0, 2)));
682 EXPECT_FALSE(comb4.inputListsCollide(std::make_pair(0, 3)));
683 EXPECT_FALSE(comb4.inputListsCollide(std::make_pair(1, 2)));
684 EXPECT_FALSE(comb4.inputListsCollide(std::make_pair(1, 3)));
685 EXPECT_TRUE(comb4.inputListsCollide(std::make_pair(2, 3)));
688 EXPECT_FALSE(comb5.inputListsCollide());
689 EXPECT_FALSE(comb5.inputListsCollide(std::make_pair(0, 1)));
690 EXPECT_FALSE(comb5.inputListsCollide(std::make_pair(0, 2)));
691 EXPECT_FALSE(comb5.inputListsCollide(std::make_pair(1, 2)));
694 EXPECT_TRUE(comb6.inputListsCollide());
695 EXPECT_FALSE(comb6.inputListsCollide(std::make_pair(0, 1)));
696 EXPECT_FALSE(comb6.inputListsCollide(std::make_pair(0, 2)));
697 EXPECT_TRUE(comb6.inputListsCollide(std::make_pair(1, 2)));
700 EXPECT_TRUE(comb7.inputListsCollide());
701 EXPECT_TRUE(comb7.inputListsCollide(std::make_pair(0, 1)));
702 EXPECT_TRUE(comb7.inputListsCollide(std::make_pair(0, 2)));
703 EXPECT_FALSE(comb7.inputListsCollide(std::make_pair(0, 3)));
704 EXPECT_FALSE(comb7.inputListsCollide(std::make_pair(0, 4)));
705 EXPECT_TRUE(comb7.inputListsCollide(std::make_pair(1, 2)));
706 EXPECT_FALSE(comb7.inputListsCollide(std::make_pair(1, 3)));
707 EXPECT_FALSE(comb7.inputListsCollide(std::make_pair(1, 4)));
708 EXPECT_FALSE(comb7.inputListsCollide(std::make_pair(2, 3)));
709 EXPECT_FALSE(comb7.inputListsCollide(std::make_pair(2, 4)));
710 EXPECT_TRUE(comb7.inputListsCollide(std::make_pair(3, 4)));
713 TEST_F(ParticleCombinerTest, ECLCombinationsTest)
768 gamma.registerInDataStore();
769 klong.registerInDataStore();
770 vpho.registerInDataStore();
775 gamma->initialize(22,
"gamma:test");
777 klong->initialize(130,
"K_L0:test");
779 vpho->initialize(10022,
"vpho:test");
781 gamma->addParticle(g_1);
782 gamma->addParticle(g_2);
783 gamma->addParticle(g_3);
784 gamma->addParticle(g_4);
786 klong->addParticle(KL);
790 auto isForbidden = [](std::vector<int> v) ->
bool {
791 if (std::find(v.begin(), v.end(), 3) != v.end())
792 if (std::find(v.begin(), v.end(), 4) != v.end())
798 EXPECT_EQ(4, gamma->getListSize());
799 EXPECT_EQ(1, klong->getListSize());
800 EXPECT_EQ(0, vpho->getListSize());
805 while (combiner3.loadNext()) {
806 const Particle& particle = combiner3.getCurrentParticle();
808 const std::vector<int>& indices = particle.getDaughterIndices();
809 EXPECT_FALSE(isForbidden(indices));
811 particles.appendNew(particle);
812 int iparticle = particles.getEntries() - 1;
814 vpho->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
817 EXPECT_EQ(3, vpho->getListSize());
822 while (combiner2.loadNext()) {
823 const Particle& particle = combiner2.getCurrentParticle();
825 const std::vector<int>& indices = particle.getDaughterIndices();
826 EXPECT_FALSE(isForbidden(indices));
828 particles.appendNew(particle);
829 int iparticle = particles.getEntries() - 1;
831 vpho->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
834 EXPECT_EQ(6, vpho->getListSize());
837 TEST_F(ParticleCombinerTest, FSPCopies)
906 pipAll.registerInDataStore();
907 pimAll.registerInDataStore();
912 pipAll->initialize(211,
"pi+:all");
913 pimAll->initialize(-211,
"pi-:all");
914 pipAll->bindAntiParticleList(*(pimAll));
921 pipGood.registerInDataStore();
922 pimGood.registerInDataStore();
927 pipGood->initialize(211,
"pi+:good");
928 pimGood->initialize(-211,
"pi-:good");
929 pipGood->bindAntiParticleList(*(pimGood));
935 kpAll.registerInDataStore();
936 kmAll.registerInDataStore();
941 kpAll->initialize(321,
"K+:all");
942 kmAll->initialize(-321,
"K-:all");
943 kpAll->bindAntiParticleList(*(kmAll));
950 kpGood.registerInDataStore();
951 kmGood.registerInDataStore();
956 kpGood->initialize(321,
"K+:good");
957 kmGood->initialize(-321,
"K-:good");
958 kpGood->bindAntiParticleList(*(kmGood));
964 kpGood2.registerInDataStore();
965 kmGood2.registerInDataStore();
970 kpGood2->initialize(321,
"K+:good2");
971 kmGood2->initialize(-321,
"K-:good2");
972 kpGood2->bindAntiParticleList(*(kmGood2));
979 gamma_1.registerInDataStore();
980 gamma_2.registerInDataStore();
985 gamma_1->initialize(22,
"gamma:1");
986 gamma_2->initialize(22,
"gamma:2");
991 klong_1.registerInDataStore();
995 klong_1->initialize(130,
"K_L0:1");
998 pipAll->addParticle(pip_1);
999 pipAll->addParticle(pip_2);
1000 pipAll->addParticle(pip_3);
1002 pipAll->addParticle(pim_1);
1003 pipAll->addParticle(pim_2);
1004 pipAll->addParticle(pim_3);
1006 kpAll->addParticle(kp_1);
1007 kpAll->addParticle(kp_2);
1008 kpAll->addParticle(kp_3);
1010 kpAll->addParticle(km_1);
1011 kpAll->addParticle(km_2);
1012 kpAll->addParticle(km_3);
1014 pipGood->addParticle(pip_1_copy);
1015 pipGood->addParticle(pim_1_copy);
1017 kpGood->addParticle(kp_1_copy);
1018 kpGood->addParticle(km_1_copy);
1020 kpGood2->addParticle(kp_1);
1021 kpGood2->addParticle(km_1);
1022 kpGood2->addParticle(kp_2);
1023 kpGood2->addParticle(km_2);
1024 kpGood2->addParticle(kp_3);
1025 kpGood2->addParticle(km_3);
1027 gamma_1->addParticle(g_1);
1028 gamma_1->addParticle(g_2);
1029 gamma_1->addParticle(g_3);
1031 gamma_2->addParticle(g_1_copy);
1032 gamma_2->addParticle(g_2_copy);
1033 gamma_2->addParticle(g_3_copy);
1034 gamma_2->addParticle(g_4);
1036 klong_1->addParticle(KL);
1039 EXPECT_EQ(6, pipAll->getListSize());
1040 EXPECT_EQ(6, pimAll->getListSize());
1041 EXPECT_EQ(6, kpAll->getListSize());
1042 EXPECT_EQ(6, kmAll->getListSize());
1043 EXPECT_EQ(2, pipGood->getListSize());
1044 EXPECT_EQ(2, kpGood->getListSize());
1045 EXPECT_EQ(3, gamma_1->getListSize());
1046 EXPECT_EQ(4, gamma_2->getListSize());
1047 EXPECT_EQ(1, klong_1->getListSize());
1050 ParticleGenerator comb7(
"D+:3 -> K-:all K+:good K-:good2 pi+:good pi+:all gamma:1 gamma:2");
1052 std::vector<StoreObjPtr<ParticleList>> comb7PLists;
1053 comb7PLists.push_back(kmAll);
1054 comb7PLists.push_back(kpGood);
1055 comb7PLists.push_back(kmGood2);
1056 comb7PLists.push_back(pipGood);
1057 comb7PLists.push_back(pipAll);
1058 comb7PLists.push_back(gamma_1);
1059 comb7PLists.push_back(gamma_2);
1062 for (
unsigned i = 0; i < comb7PLists.size(); i++) {
1064 std::vector<int> iAll;
1065 iAll.insert(iAll.begin(), (list_i->getList(ParticleList::c_FlavorSpecificParticle,
false)).begin(),
1066 (list_i->getList(ParticleList::c_FlavorSpecificParticle,
false)).end());
1067 iAll.insert(iAll.begin(), (list_i->getList(ParticleList::c_FlavorSpecificParticle,
true)).begin(),
1068 (list_i->getList(ParticleList::c_FlavorSpecificParticle,
true)).end());
1069 iAll.insert(iAll.begin(), (list_i->getList(ParticleList::c_SelfConjugatedParticle)).begin(),
1070 (list_i->getList(ParticleList::c_SelfConjugatedParticle)).end());
1072 for (
unsigned int j = i + 1; j < comb7PLists.size(); j++) {
1076 std::vector<int> jAll;
1077 jAll.insert(jAll.begin(), (list_j->getList(ParticleList::c_FlavorSpecificParticle,
false)).begin(),
1078 (list_j->getList(ParticleList::c_FlavorSpecificParticle,
false)).end());
1079 jAll.insert(jAll.begin(), (list_j->getList(ParticleList::c_FlavorSpecificParticle,
true)).begin(),
1080 (list_j->getList(ParticleList::c_FlavorSpecificParticle,
true)).end());
1081 jAll.insert(jAll.begin(), (list_j->getList(ParticleList::c_SelfConjugatedParticle)).begin(),
1082 (list_j->getList(ParticleList::c_SelfConjugatedParticle)).end());
1087 for (
int k : iAll) {
1088 for (
int m : jAll) {
1094 int iID = comb7.getUniqueID(k);
1095 int jID = comb7.getUniqueID(m);
1097 EXPECT_TRUE(iID > 0);
1098 EXPECT_TRUE(jID > 0);
1103 EXPECT_TRUE(iID == jID);
1105 EXPECT_FALSE(iID == jID);
1127 D02Kpi_1.registerInDataStore();
1128 anti_D02Kpi_1.registerInDataStore();
1129 D02Kpi_2.registerInDataStore();
1130 anti_D02Kpi_2.registerInDataStore();
1131 D02KK_1.registerInDataStore();
1132 anti_D02KK_1.registerInDataStore();
1133 D02KK_2.registerInDataStore();
1134 anti_D02KK_2.registerInDataStore();
1135 D02KK_3.registerInDataStore();
1136 anti_D02KK_3.registerInDataStore();
1137 D0KLg_1.registerInDataStore();
1138 D0KLg_2.registerInDataStore();
1139 anti_D0KLg_1.registerInDataStore();
1140 anti_D0KLg_2.registerInDataStore();
1144 anti_D02Kpi_1.create();
1145 D02Kpi_1->initialize(421,
"D0:kpi1");
1146 anti_D02Kpi_1->initialize(-421,
"anti-D0:kpi1");
1147 D02Kpi_1->bindAntiParticleList(*(anti_D02Kpi_1));
1150 anti_D02Kpi_2.create();
1151 D02Kpi_2->initialize(421,
"D0:kpi2");
1152 anti_D02Kpi_2->initialize(-421,
"anti-D0:kpi2");
1153 D02Kpi_2->bindAntiParticleList(*(anti_D02Kpi_2));
1156 anti_D02KK_1.create();
1157 D02KK_1->initialize(421,
"D0:kk1");
1158 anti_D02KK_1->initialize(-421,
"anti-D0:kk1");
1159 D02KK_1->bindAntiParticleList(*(anti_D02KK_1));
1162 anti_D02KK_2.create();
1163 D02KK_2->initialize(421,
"D0:kk2");
1164 anti_D02KK_2->initialize(-421,
"anti-D0:kk2");
1165 D02KK_2->bindAntiParticleList(*(anti_D02KK_2));
1168 anti_D02KK_3.create();
1169 D02KK_3->initialize(421,
"D0:kk3");
1170 anti_D02KK_3->initialize(-421,
"anti-D0:kk3");
1171 D02KK_3->bindAntiParticleList(*(anti_D02KK_3));
1175 anti_D0KLg_1.create();
1176 anti_D0KLg_2.create();
1177 D0KLg_1->initialize(421,
"D0:klg1");
1178 D0KLg_2->initialize(421,
"D0:klg2");
1179 anti_D0KLg_1->initialize(-421,
"anti-D0:klg1");
1180 anti_D0KLg_2->initialize(-421,
"anti-D0:klg2");
1181 D0KLg_1->bindAntiParticleList(*(anti_D0KLg_1));
1182 D0KLg_2->bindAntiParticleList(*(anti_D0KLg_2));
1185 combiner_D02Kpi_1.init();
1186 while (combiner_D02Kpi_1.loadNext()) {
1187 const Particle& particle = combiner_D02Kpi_1.getCurrentParticle();
1189 particles.appendNew(particle);
1190 int iparticle = particles.getEntries() - 1;
1192 D02Kpi_1->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1194 EXPECT_EQ(18, D02Kpi_1->getListSize());
1195 EXPECT_EQ(9 , D02Kpi_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1196 EXPECT_EQ(9 , D02Kpi_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1197 EXPECT_EQ(0 , D02Kpi_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1200 combiner_D02Kpi_2.init();
1201 while (combiner_D02Kpi_2.loadNext()) {
1202 const Particle& particle = combiner_D02Kpi_2.getCurrentParticle();
1204 particles.appendNew(particle);
1205 int iparticle = particles.getEntries() - 1;
1207 D02Kpi_2->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1209 EXPECT_EQ(6, D02Kpi_2->getListSize());
1210 EXPECT_EQ(3 , D02Kpi_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1211 EXPECT_EQ(3 , D02Kpi_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1212 EXPECT_EQ(0 , D02Kpi_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1215 combiner_D02KK_1.init();
1216 while (combiner_D02KK_1.loadNext()) {
1217 const Particle& particle = combiner_D02KK_1.getCurrentParticle();
1219 particles.appendNew(particle);
1220 int iparticle = particles.getEntries() - 1;
1222 D02KK_1->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1224 EXPECT_EQ(9, D02KK_1->getListSize());
1225 EXPECT_EQ(0 , D02KK_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1226 EXPECT_EQ(0 , D02KK_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1227 EXPECT_EQ(9 , D02KK_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1228 EXPECT_EQ(9 , D02KK_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle,
true));
1231 combiner_D02KK_2.init();
1232 while (combiner_D02KK_2.loadNext()) {
1233 const Particle& particle = combiner_D02KK_2.getCurrentParticle();
1235 particles.appendNew(particle);
1236 int iparticle = particles.getEntries() - 1;
1238 D02KK_2->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1240 EXPECT_EQ(5, D02KK_2->getListSize());
1241 EXPECT_EQ(0 , D02KK_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1242 EXPECT_EQ(0 , D02KK_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1243 EXPECT_EQ(5 , D02KK_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1244 EXPECT_EQ(5 , D02KK_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle,
true));
1247 combiner_D02KK_3.init();
1248 while (combiner_D02KK_3.loadNext()) {
1249 const Particle& particle = combiner_D02KK_3.getCurrentParticle();
1251 particles.appendNew(particle);
1252 int iparticle = particles.getEntries() - 1;
1254 D02KK_3->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1256 EXPECT_EQ(9, D02KK_3->getListSize());
1257 EXPECT_EQ(0 , D02KK_3->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1258 EXPECT_EQ(0 , D02KK_3->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1259 EXPECT_EQ(9 , D02KK_3->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1260 EXPECT_EQ(9 , D02KK_3->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle,
true));
1265 combiner_D02KLg1.init();
1266 while (combiner_D02KLg1.loadNext()) {
1267 const Particle& particle = combiner_D02KLg1.getCurrentParticle();
1269 particles.appendNew(particle);
1270 int iparticle = particles.getEntries() - 1;
1272 D0KLg_1->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1274 EXPECT_EQ(3, D0KLg_1->getListSize());
1275 EXPECT_EQ(0 , D0KLg_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1276 EXPECT_EQ(0 , D0KLg_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1277 EXPECT_EQ(3 , D0KLg_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1279 combiner_D02KLg2.init();
1280 while (combiner_D02KLg2.loadNext()) {
1281 const Particle& particle = combiner_D02KLg2.getCurrentParticle();
1283 particles.appendNew(particle);
1284 int iparticle = particles.getEntries() - 1;
1286 D0KLg_2->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1288 EXPECT_EQ(3, D0KLg_2->getListSize());
1289 EXPECT_EQ(0 , D0KLg_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1290 EXPECT_EQ(0 , D0KLg_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1291 EXPECT_EQ(3 , D0KLg_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1300 DpKpipi_1.registerInDataStore();
1301 DmKpipi_1.registerInDataStore();
1302 DpKpipi_2.registerInDataStore();
1303 DmKpipi_2.registerInDataStore();
1311 DpKpipi_1->initialize(411,
"D+:kpipi1");
1312 DmKpipi_1->initialize(-411,
"D-:kpipi1");
1313 DpKpipi_1->bindAntiParticleList(*(DmKpipi_1));
1315 DpKpipi_2->initialize(411,
"D+:kpipi2");
1316 DmKpipi_2->initialize(-411,
"D-:kpipi2");
1317 DpKpipi_2->bindAntiParticleList(*(DmKpipi_2));
1321 combiner_DpKpipi_1.init();
1322 while (combiner_DpKpipi_1.loadNext()) {
1323 const Particle& particle = combiner_DpKpipi_1.getCurrentParticle();
1325 particles.appendNew(particle);
1326 int iparticle = particles.getEntries() - 1;
1328 DpKpipi_1->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1330 EXPECT_EQ(18, DpKpipi_1->getListSize());
1331 EXPECT_EQ(9 , DpKpipi_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1332 EXPECT_EQ(9 , DpKpipi_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1333 EXPECT_EQ(0 , DpKpipi_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1336 combiner_DpKpipi_2.init();
1337 while (combiner_DpKpipi_2.loadNext()) {
1338 const Particle& particle = combiner_DpKpipi_2.getCurrentParticle();
1340 particles.appendNew(particle);
1341 int iparticle = particles.getEntries() - 1;
1343 DpKpipi_2->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1345 EXPECT_EQ(12, DpKpipi_2->getListSize());
1346 EXPECT_EQ(6 , DpKpipi_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1347 EXPECT_EQ(6 , DpKpipi_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1348 EXPECT_EQ(0 , DpKpipi_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1356 DSTp_1.registerInDataStore();
1357 DSTm_1.registerInDataStore();
1358 DSTp_2.registerInDataStore();
1359 DSTm_2.registerInDataStore();
1367 DSTp_1->initialize(413,
"D*+:D0kpi1pi");
1368 DSTm_1->initialize(-413,
"D*-:D0kpi1pi");
1369 DSTp_1->bindAntiParticleList(*(DSTm_1));
1371 DSTp_2->initialize(413,
"D*+:D0kk2pi");
1372 DSTm_2->initialize(-413,
"D*-:D0kk2pi");
1373 DSTp_2->bindAntiParticleList(*(DSTm_2));
1377 combiner_DSTp_1.init();
1378 while (combiner_DSTp_1.loadNext()) {
1379 const Particle& particle = combiner_DSTp_1.getCurrentParticle();
1381 particles.appendNew(particle);
1382 int iparticle = particles.getEntries() - 1;
1384 DSTp_1->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1386 EXPECT_EQ(12, DSTp_1->getListSize());
1387 EXPECT_EQ(6 , DSTp_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1388 EXPECT_EQ(6 , DSTp_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1389 EXPECT_EQ(0 , DSTp_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1392 combiner_DSTp_2.init();
1393 while (combiner_DSTp_2.loadNext()) {
1394 const Particle& particle = combiner_DSTp_2.getCurrentParticle();
1396 particles.appendNew(particle);
1397 int iparticle = particles.getEntries() - 1;
1399 DSTp_2->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1401 EXPECT_EQ(4, DSTp_2->getListSize());
1402 EXPECT_EQ(2 , DSTp_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1403 EXPECT_EQ(2 , DSTp_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1404 EXPECT_EQ(0 , DSTp_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1409 pi0_1.registerInDataStore();
1414 pi0_1->initialize(111,
"pi0:1");
1418 combiner_pi0_1.init();
1419 while (combiner_pi0_1.loadNext()) {
1420 const Particle& particle = combiner_pi0_1.getCurrentParticle();
1422 particles.appendNew(particle);
1423 int iparticle = particles.getEntries() - 1;
1425 pi0_1->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1427 EXPECT_EQ(3, pi0_1->getListSize());
1428 EXPECT_EQ(0 , pi0_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1429 EXPECT_EQ(0 , pi0_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1430 EXPECT_EQ(3 , pi0_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1435 pi0_1copy.registerInDataStore();
1440 pi0_1copy->initialize(111,
"pi0:1");
1444 combiner_pi0_1copy.init();
1445 while (combiner_pi0_1copy.loadNext()) {
1446 const Particle& particle = combiner_pi0_1copy.getCurrentParticle();
1448 particles.appendNew(particle);
1449 int iparticle = particles.getEntries() - 1;
1451 pi0_1copy->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1457 pi0_2.registerInDataStore();
1462 pi0_2->initialize(111,
"pi0:2");
1466 combiner_pi0_2.init();
1467 while (combiner_pi0_2.loadNext()) {
1468 const Particle& particle = combiner_pi0_2.getCurrentParticle();
1470 particles.appendNew(particle);
1471 int iparticle = particles.getEntries() - 1;
1473 pi0_2->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1475 EXPECT_EQ(6, pi0_2->getListSize());
1476 EXPECT_EQ(0 , pi0_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1477 EXPECT_EQ(0 , pi0_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1478 EXPECT_EQ(6 , pi0_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1483 eta_1.registerInDataStore();
1488 eta_1->initialize(221,
"eta:1");
1492 combiner_eta_1.init();
1493 while (combiner_eta_1.loadNext()) {
1494 const Particle& particle = combiner_eta_1.getCurrentParticle();
1496 particles.appendNew(particle);
1497 int iparticle = particles.getEntries() - 1;
1499 eta_1->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1501 EXPECT_EQ(6, eta_1->getListSize());
1502 EXPECT_EQ(0 , eta_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1503 EXPECT_EQ(0 , eta_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1504 EXPECT_EQ(6 , eta_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1509 eta_1copy.registerInDataStore();
1514 eta_1copy->initialize(221,
"eta:1copy");
1518 combiner_eta_1copy.init();
1519 while (combiner_eta_1copy.loadNext()) {
1520 const Particle& particle = combiner_eta_1copy.getCurrentParticle();
1522 particles.appendNew(particle);
1523 int iparticle = particles.getEntries() - 1;
1525 eta_1copy->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1532 B0_1.registerInDataStore();
1533 aB0_1.registerInDataStore();
1539 B0_1->initialize(511,
"B0:1");
1540 aB0_1->initialize(-511,
"anti-B0:1");
1541 B0_1->bindAntiParticleList(*(aB0_1));
1544 combiner_B0_1.init();
1545 while (combiner_B0_1.loadNext()) {
1546 const Particle& particle = combiner_B0_1.getCurrentParticle();
1548 particles.appendNew(particle);
1549 int iparticle = particles.getEntries() - 1;
1551 B0_1->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1553 EXPECT_EQ(3, B0_1->getListSize());
1554 EXPECT_EQ(0 , B0_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1555 EXPECT_EQ(0 , B0_1->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1556 EXPECT_EQ(3 , B0_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1557 EXPECT_EQ(3 , aB0_1->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1563 B0_2.registerInDataStore();
1564 aB0_2.registerInDataStore();
1570 B0_2->initialize(511,
"B0:2");
1571 aB0_2->initialize(-511,
"anti-B0:2");
1572 B0_2->bindAntiParticleList(*(aB0_2));
1575 combiner_B0_2.init();
1576 while (combiner_B0_2.loadNext()) {
1577 const Particle& particle = combiner_B0_2.getCurrentParticle();
1579 particles.appendNew(particle);
1580 int iparticle = particles.getEntries() - 1;
1582 B0_2->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1584 EXPECT_EQ(0, B0_2->getListSize());
1585 EXPECT_EQ(0 , B0_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1586 EXPECT_EQ(0 , B0_2->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1587 EXPECT_EQ(0 , B0_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1588 EXPECT_EQ(0 , aB0_2->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1594 B0_3.registerInDataStore();
1595 aB0_3.registerInDataStore();
1601 B0_3->initialize(511,
"B0:3");
1602 aB0_3->initialize(-511,
"anti-B0:3");
1603 B0_3->bindAntiParticleList(*(aB0_3));
1606 combiner_B0_3.init();
1607 while (combiner_B0_3.loadNext()) {
1608 const Particle& particle = combiner_B0_3.getCurrentParticle();
1610 particles.appendNew(particle);
1611 int iparticle = particles.getEntries() - 1;
1613 B0_3->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1615 EXPECT_EQ(3, B0_3->getListSize());
1616 EXPECT_EQ(0 , B0_3->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1617 EXPECT_EQ(0 , B0_3->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1618 EXPECT_EQ(3 , B0_3->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1619 EXPECT_EQ(3 , aB0_3->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1625 B0_4.registerInDataStore();
1626 aB0_4.registerInDataStore();
1632 B0_4->initialize(511,
"B0:4");
1633 aB0_4->initialize(-511,
"anti-B0:4");
1634 B0_4->bindAntiParticleList(*(aB0_4));
1637 combiner_B0_4.init();
1638 while (combiner_B0_4.loadNext()) {
1639 const Particle& particle = combiner_B0_4.getCurrentParticle();
1641 particles.appendNew(particle);
1642 int iparticle = particles.getEntries() - 1;
1644 B0_4->addParticle(iparticle, particle.getPDGCode(), particle.getFlavorType());
1646 EXPECT_EQ(6, B0_4->getListSize());
1647 EXPECT_EQ(0 , B0_4->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle));
1648 EXPECT_EQ(0 , B0_4->getNParticlesOfType(ParticleList::c_FlavorSpecificParticle,
true));
1649 EXPECT_EQ(6 , B0_4->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));
1650 EXPECT_EQ(6 , aB0_4->getNParticlesOfType(ParticleList::c_SelfConjugatedParticle));