1 #include <gtest/gtest.h>
2 #include "utilities/TestParticleFactory.h"
3 #include <analysis/dataobjects/Particle.h>
4 #include <analysis/VariableManager/Manager.h>
5 #include <analysis/dataobjects/RestOfEvent.h>
7 #include <analysis/VariableManager/Utility.h>
8 #include <analysis/utility/PCmsLabTransform.h>
9 #include <analysis/utility/ReferenceFrame.h>
11 #include <framework/datastore/StoreArray.h>
12 #include <framework/logging/Logger.h>
13 #include <mdst/dataobjects/Track.h>
14 #include <mdst/dataobjects/ECLCluster.h>
15 #include <mdst/dataobjects/KLMCluster.h>
16 #include <framework/gearbox/Gearbox.h>
17 #include <TLorentzVector.h>
21 using namespace Belle2::Variable;
23 class ROETest :
public ::testing::Test {
29 DataStore::Instance().setInitializeActive(
true);
37 myECLClusters.registerInDataStore();
38 myKLMClusters.registerInDataStore();
39 myTFRs.registerInDataStore();
40 myTracks.registerInDataStore();
41 myParticles.registerInDataStore();
42 myROEs.registerInDataStore();
43 myPIDLikelihoods.registerInDataStore();
46 DataStore::Instance().setInitializeActive(
false);
49 TVector3 ipposition(0, 0, 0);
50 TLorentzVector ksmomentum(1, 0, 0, 3);
51 TVector3 ksposition(1.0, 0, 0);
55 auto* ksParticle = factory.
produceParticle(
string(
"^K_S0 -> ^pi+ ^pi-"), ksmomentum, ksposition);
56 TLorentzVector d0momentum(-2, 0, 0, 4);
57 auto* d0Particle = factory.
produceParticle(
string(
"^D0 -> ^K+ ^pi-"), d0momentum, ipposition);
58 TLorentzVector pi0momentum(-0.2, 0, 0, 1);
59 auto* pi0Particle = factory.
produceParticle(
string(
"^pi0 -> ^gamma ^gamma"), pi0momentum, ipposition);
60 TLorentzVector b0momentum(3, 0, 0, 5);
61 factory.
produceParticle(
string(
"^B0 -> [^K_S0 -> ^pi+ ^pi-] [^pi0 -> ^gamma ^gamma] ^gamma"), b0momentum, ipposition);
64 vector<const Particle*> roeParticles;
65 roeParticles.push_back(ksParticle->getDaughter(0));
66 roeParticles.push_back(ksParticle->getDaughter(1));
67 roeParticles.push_back(d0Particle->getDaughter(0));
68 roeParticles.push_back(d0Particle->getDaughter(1));
69 roeParticles.push_back(pi0Particle->getDaughter(0));
70 roeParticles.push_back(pi0Particle->getDaughter(1));
74 std::shared_ptr<Variable::Cut> trackSelection = std::shared_ptr<Variable::Cut>(Variable::Cut::compile(
"p > 1.5"));
76 std::shared_ptr<Variable::Cut> eclSelection = std::shared_ptr<Variable::Cut>(Variable::Cut::compile(
"p > 1"));
79 vector<const Particle*> excludeParticles = {ksParticle->getDaughter(1), d0Particle->getDaughter(0)};
92 void TearDown()
override
94 DataStore::Instance().reset();
98 TEST_F(ROETest, hasParticle)
100 Gearbox& gearbox = Gearbox::getInstance();
101 gearbox.setBackends({std::string(
"file:")});
103 gearbox.open(
"geometry/Belle2.xml",
false);
121 TEST_F(ROETest, useROERecoilFrame)
123 Gearbox& gearbox = Gearbox::getInstance();
124 gearbox.setBackends({std::string(
"file:")});
126 gearbox.open(
"geometry/Belle2.xml",
false);
131 DataStore::Instance().setInitializeActive(
true);
132 myROEObject.registerInDataStore(DataStore::c_DontWriteOut);
133 DataStore::Instance().setInitializeActive(
false);
134 myParticles[14]->addRelationTo(myROEs[0]);
135 myROEObject.assign(myROEs[0]);
144 const Manager::Var* var = Manager::Instance().getVariable(
"useROERecoilFrame(p)");
145 ASSERT_NE(var,
nullptr);
146 EXPECT_FLOAT_EQ(var->function(myParticles[5]), frame.getMomentum(myParticles[5]->get4Vector()).P());
147 EXPECT_FLOAT_EQ(var->function(myParticles[14]), frame.getMomentum(myParticles[14]->get4Vector()).P());
148 var = Manager::Instance().getVariable(
"useROERecoilFrame(E)");
149 ASSERT_NE(var,
nullptr);
150 EXPECT_FLOAT_EQ(var->function(myParticles[5]), frame.getMomentum(myParticles[5]->get4Vector()).E());
151 EXPECT_FLOAT_EQ(var->function(myParticles[14]), frame.getMomentum(myParticles[14]->get4Vector()).E());
153 DataStore::Instance().setInitializeActive(
true);
154 DataStore::Instance().getEntry(myROEObject)->object =
nullptr;
155 DataStore::Instance().setInitializeActive(
false);
158 TEST_F(ROETest, getParticles)
172 TEST_F(ROETest, updateMaskWithCuts)
178 EXPECT_FALSE(roe->
hasParticle(myParticles[0],
"cutMask"));
179 EXPECT_FALSE(roe->
hasParticle(myParticles[1],
"cutMask"));
180 EXPECT_TRUE(roe->
hasParticle(myParticles[3],
"cutMask"));
181 EXPECT_TRUE(roe->
hasParticle(myParticles[4],
"cutMask"));
182 EXPECT_FALSE(roe->
hasParticle(myParticles[6],
"cutMask"));
183 EXPECT_FALSE(roe->
hasParticle(myParticles[7],
"cutMask"));
185 TEST_F(ROETest, excludeParticlesFromMask)
191 EXPECT_TRUE(roe->
hasParticle(myParticles[0],
"excludeMask"));
192 EXPECT_FALSE(roe->
hasParticle(myParticles[1],
"excludeMask"));
193 EXPECT_FALSE(roe->
hasParticle(myParticles[3],
"excludeMask"));
194 EXPECT_TRUE(roe->
hasParticle(myParticles[4],
"excludeMask"));
195 EXPECT_TRUE(roe->
hasParticle(myParticles[6],
"excludeMask"));
196 EXPECT_TRUE(roe->
hasParticle(myParticles[7],
"excludeMask"));
198 EXPECT_TRUE(!roe->
hasParticle(myParticles[0],
"keepMask"));
199 EXPECT_FALSE(!roe->
hasParticle(myParticles[1],
"keepMask"));
200 EXPECT_FALSE(!roe->
hasParticle(myParticles[3],
"keepMask"));
201 EXPECT_TRUE(!roe->
hasParticle(myParticles[4],
"keepMask"));
203 EXPECT_TRUE(roe->
hasParticle(myParticles[6],
"keepMask"));
204 EXPECT_TRUE(roe->
hasParticle(myParticles[7],
"keepMask"));
206 TEST_F(ROETest, updateMaskWithV0)
212 EXPECT_TRUE(roe->
hasParticle(myParticles[0],
"V0Mask"));
213 EXPECT_TRUE(roe->
hasParticle(myParticles[1],
"V0Mask"));
214 EXPECT_TRUE(roe->
hasParticle(myParticles[3],
"V0Mask"));
215 EXPECT_TRUE(roe->
hasParticle(myParticles[4],
"V0Mask"));
216 EXPECT_TRUE(roe->
hasParticle(myParticles[6],
"V0Mask"));
217 EXPECT_TRUE(roe->
hasParticle(myParticles[7],
"V0Mask"));
219 auto v0maskParticles = roe->
getParticles(
"V0Mask",
false);
221 auto v0maskParticlesUnpacked = roe->
getParticles(
"V0Mask",
true);
222 B2INFO(
"packed size is " << v0maskParticles.size());
223 for (
auto* particle : v0maskParticles) {
224 B2INFO(
"My pdg: " << particle->getPDGCode());
226 B2INFO(
"unpacked size is " << v0maskParticlesUnpacked.size());
227 for (
auto* particle : v0maskParticlesUnpacked) {
228 B2INFO(
"My pdg: " << particle->getPDGCode());
230 EXPECT_FLOAT_EQ(v0maskParticles.size() , 5);
231 EXPECT_FLOAT_EQ(v0maskParticlesUnpacked.size() , 6);