8#include <gtest/gtest.h>
10#include <analysis/VariableManager/Manager.h>
11#include <analysis/dataobjects/Particle.h>
12#include <analysis/dataobjects/ParticleExtraInfoMap.h>
14#include <analysis/variables/KinkVariables.h>
16#include <mdst/dataobjects/Kink.h>
17#include <mdst/dataobjects/MCParticle.h>
18#include <mdst/dataobjects/Track.h>
19#include <mdst/dataobjects/TrackFitResult.h>
21#include <framework/datastore/StoreArray.h>
24#include <Math/Cartesian2D.h>
25#include <Math/Vector3D.h>
28using namespace Belle2::Variable;
29using namespace ROOT::Math;
32 class KinkVariablesTest :
public ::testing::Test {
55 const float pValueMotherTrack = 0.5;
56 const float pValueDaughterTrack = 0.6;
57 const float ndfMotherTrack = 15;
58 const float ndfDaughterTrack = 5;
71 Cartesian2D d(generator.Uniform(-1, 1), generator.Uniform(-1, 1));
72 Cartesian2D pt(generator.Uniform(-1, 1), generator.Uniform(-1, 1));
73 d.SetXY(d.X(), -(d.X()*pt.X()) / pt.Y());
76 XYZVector position(d.X(), d.Y(), generator.Uniform(-1, 1));
77 XYZVector momentum(pt.X(), pt.Y(), generator.Uniform(-1, 1));
79 auto CDCValue =
static_cast<unsigned long long int>(0x300000000000000);
82 CDCValue, 16777215, ndfMotherTrack);
88 bField, CDCValue, 16777215, ndfDaughterTrack);
89 Track myDaughterTrack;
93 Kink* myKink = myKinks.
appendNew(std::make_pair(muonTrack, std::make_pair(myMotherTrackFitResult, myMotherTrackFitResult)),
94 std::make_pair(electronTrack, myDaughterTrackFitResult), 1, 1, 2, 11100);
111 void TearDown()
override
120 TEST_F(KinkVariablesTest, KinkVertex)
123 auto part = myParticles[1];
125 EXPECT_FLOAT_EQ(kinkVertexX(part), 1);
126 EXPECT_FLOAT_EQ(kinkVertexY(part), 1);
127 EXPECT_FLOAT_EQ(kinkVertexZ(part), 2);
133 TEST_F(KinkVariablesTest, KinkFlag)
136 auto part = myParticles[1];
138 EXPECT_FLOAT_EQ(kinkCombinedFitResultFlag(part), 10);
139 EXPECT_FLOAT_EQ(kinkCombinedFitResultFlagBit1(part), 0);
140 EXPECT_FLOAT_EQ(kinkCombinedFitResultFlagBit2(part), 1);
141 EXPECT_FLOAT_EQ(kinkCombinedFitResultFlagBit3(part), 0);
142 EXPECT_FLOAT_EQ(kinkCombinedFitResultFlagBit4(part), 1);
148 TEST_F(KinkVariablesTest, KinkDaughterTrack)
151 auto part = myParticles[1];
154 ASSERT_NE(var,
nullptr);
155 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 3);
158 ASSERT_NE(var,
nullptr);
159 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 24);
162 ASSERT_NE(var,
nullptr);
163 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 12);
166 ASSERT_NE(var,
nullptr);
167 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 36);
170 ASSERT_NE(var,
nullptr);
171 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 3);
174 ASSERT_NE(var,
nullptr);
175 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 1);
178 ASSERT_NE(var,
nullptr);
179 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), -1);
182 ASSERT_NE(var,
nullptr);
183 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), -1);
186 ASSERT_NE(var,
nullptr);
187 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.6);
190 ASSERT_NE(var,
nullptr);
191 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 5);
194 ASSERT_NE(var,
nullptr);
195 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 3.6554995);
198 ASSERT_NE(var,
nullptr);
199 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 1.5421079);
202 ASSERT_NE(var,
nullptr);
203 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), -0.45246184);
206 ASSERT_NE(var,
nullptr);
207 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0045218822);
210 ASSERT_NE(var,
nullptr);
211 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), -0.5366869);
214 ASSERT_NE(var,
nullptr);
215 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), -0.030219816);
218 ASSERT_NE(var,
nullptr);
219 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.41392139);
222 ASSERT_NE(var,
nullptr);
223 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.18485548);
226 ASSERT_NE(var,
nullptr);
227 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.00057035277);
230 ASSERT_NE(var,
nullptr);
231 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.63257021);
234 ASSERT_NE(var,
nullptr);
235 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.09413857);
241 TEST_F(KinkVariablesTest, KinkDaughterInitTrack)
244 auto part = myParticles[1];
247 ASSERT_NE(var,
nullptr);
248 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.6);
251 ASSERT_NE(var,
nullptr);
252 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 5);
255 ASSERT_NE(var,
nullptr);
256 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 3.6554995);
262 TEST_F(KinkVariablesTest, KinkMotherInitTrack)
265 auto part = myParticles[1];
268 ASSERT_NE(var,
nullptr);
269 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.5);
272 ASSERT_NE(var,
nullptr);
273 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 15);
276 ASSERT_NE(var,
nullptr);
277 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 14.33886);
283 TEST_F(KinkVariablesTest, KinkPairDaughterMC)
286 auto part = myParticles[1];
289 ASSERT_NE(var,
nullptr);
290 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 11);
293 ASSERT_NE(var,
nullptr);
294 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
297 ASSERT_NE(var,
nullptr);
298 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
301 ASSERT_NE(var,
nullptr);
302 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
305 ASSERT_NE(var,
nullptr);
306 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
309 ASSERT_NE(var,
nullptr);
310 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
313 ASSERT_NE(var,
nullptr);
314 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
317 ASSERT_NE(var,
nullptr);
318 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
321 ASSERT_NE(var,
nullptr);
322 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
325 ASSERT_NE(var,
nullptr);
326 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
329 ASSERT_NE(var,
nullptr);
330 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
333 ASSERT_NE(var,
nullptr);
334 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
340 TEST_F(KinkVariablesTest, KinkPairMotherMC)
343 auto part = myParticles[1];
346 ASSERT_NE(var,
nullptr);
347 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
350 ASSERT_NE(var,
nullptr);
351 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
354 ASSERT_NE(var,
nullptr);
355 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
358 ASSERT_NE(var,
nullptr);
359 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
362 ASSERT_NE(var,
nullptr);
363 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
366 ASSERT_NE(var,
nullptr);
367 EXPECT_FLOAT_EQ(std::get<double>(var->function(part)), 0.0);
static ROOT::Math::XYZVector getFieldInTesla(const ROOT::Math::XYZVector &pos)
return the magnetic field at a given position in Tesla.
static const ChargedStable muon
muon particle
static const ChargedStable electron
electron particle
static DataStore & Instance()
Instance of singleton Store.
void setInitializeActive(bool active)
Setter for m_initializeActive.
void reset(EDurability durability)
Frees memory occupied by data store items and removes all objects from the map.
Object holding information for Kinks.
A Class to store the Monte Carlo particle information.
Class to store reconstructed particles.
void writeExtraInfo(const std::string &name, const double value)
Sets the user defined extraInfo.
void addRelationTo(const RelationsInterface< BASE > *object, float weight=1.0, const std::string &namedRelation="") const
Add a relation from this object to another object (with caching).
bool registerInDataStore(DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut)
Register the object/array in the DataStore.
Accessor to arrays stored in the data store.
T * appendNew()
Construct a new T object at the end of the array.
bool registerRelationTo(const StoreArray< TO > &toArray, DataStore::EDurability durability=DataStore::c_Event, DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut, const std::string &namedRelation="") const
Register a relation to the given StoreArray.
Type-safe access to single objects in the data store.
Values of the result of a track fit with a given particle hypothesis.
Class that bundles various TrackFitResults.
void setTrackFitResultIndex(const Const::ChargedStable &chargedStable, short index)
Set an index (for positive values) or unavailability-code (index = -1) for a specific mass hypothesis...
const Var * getVariable(std::string name)
Get the variable belonging to the given key.
static Manager & Instance()
get singleton instance.
double charge(int pdgCode)
Returns electric charge of a particle with given pdg code.
Abstract base class for different kinds of events.