Belle II Software light-2509-fornax
inclusive_variables.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#include <gtest/gtest.h>
9
10#include <analysis/VariableManager/Manager.h>
11
12#include <analysis/dataobjects/Particle.h>
13
14#include <mdst/dataobjects/Track.h>
15#include <mdst/dataobjects/ECLCluster.h>
16
17#include "utilities/TestParticleFactory.h"
18using namespace std;
19using namespace Belle2;
20using namespace Belle2::Variable;
21
22namespace {
23
24
25 class InclusiveVariablesTest : public ::testing::Test {
26 protected:
28 void SetUp() override
29 {
30
32 StoreArray<ECLCluster> myECLClusters;
33 StoreArray<TrackFitResult> myTFRs;
34 StoreArray<Track> myTracks;
35 StoreArray<Particle> myParticles;
36 myECLClusters.registerInDataStore();
37 myTFRs.registerInDataStore();
38 myTracks.registerInDataStore();
39 myParticles.registerInDataStore();
41
42 TestUtilities::TestParticleFactory factory;
43 ROOT::Math::XYZVector ipposition(0, 0, 0);
44 ROOT::Math::PxPyPzEVector b0momentum(3, 0, 0, 5);
45 factory.produceParticle(string("^B0 -> [^K*0 -> [^K_S0 -> ^pi+ ^pi-] [^pi0 -> ^gamma ^gamma]] ^e+ ^e-"),
46 b0momentum, ipposition);
47 }
48
50 void TearDown() override
51 {
53 }
54 };
55 TEST_F(InclusiveVariablesTest, nCompositeDaughters)
56 {
57 StoreArray<Particle> myParticles;
58 auto* var = Manager::Instance().getVariable("nCompositeDaughters()");
59 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 1);
60 var = Manager::Instance().getVariable("nCompositeDaughters(313)");
61 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 1);
62 var = Manager::Instance().getVariable("nCompositeDaughters(111)");
63 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 0);
64 var = Manager::Instance().getVariable("nCompositeDaughters(310)");
65 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 0);
66 }
67 TEST_F(InclusiveVariablesTest, nCompositeAllGenerationDaughters)
68 {
69 StoreArray<Particle> myParticles;
70 auto* var = Manager::Instance().getVariable("nCompositeAllGenerationDaughters()");
71 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 3);
72 var = Manager::Instance().getVariable("nCompositeAllGenerationDaughters(313)");
73 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 1);
74 var = Manager::Instance().getVariable("nCompositeAllGenerationDaughters(111)");
75 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 1);
76 var = Manager::Instance().getVariable("nCompositeAllGenerationDaughters(310)");
77 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 1);
78 }
79 TEST_F(InclusiveVariablesTest, nPhotonDaughters)
80 {
81 StoreArray<Particle> myParticles;
82 auto* var = Manager::Instance().getVariable("nDaughterPhotons");
83 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 2);
84 }
85 TEST_F(InclusiveVariablesTest, nDaughterNeutralHadrons)
86 {
87 StoreArray<Particle> myParticles;
88 auto* var = Manager::Instance().getVariable("nDaughterNeutralHadrons");
89 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 0);
90 }
91 TEST_F(InclusiveVariablesTest, nChargedDaughters)
92 {
93 StoreArray<Particle> myParticles;
94 auto* var = Manager::Instance().getVariable("nDaughterCharged()");
95 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 4);
96 var = Manager::Instance().getVariable("nDaughterCharged(11)");
97 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 2);
98 var = Manager::Instance().getVariable("nDaughterCharged(211)");
99 EXPECT_EQ(std::get<int>(var->function(myParticles[9])), 2);
100
101 }
102 TEST_F(InclusiveVariablesTest, daughterAverageOf)
103 {
104 StoreArray<Particle> myParticles;
105 auto* var = Manager::Instance().getVariable("daughterAverageOf(PDG)");
106 EXPECT_FLOAT_EQ(std::get<double>(var->function(myParticles[9])), float(313 + 11 - 11) / 3);
107 }
108
109}
110
static DataStore & Instance()
Instance of singleton Store.
Definition DataStore.cc:53
void setInitializeActive(bool active)
Setter for m_initializeActive.
Definition DataStore.cc:93
void reset(EDurability durability)
Frees memory occupied by data store items and removes all objects from the map.
Definition DataStore.cc:85
bool registerInDataStore(DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut)
Register the object/array in the DataStore.
Accessor to arrays stored in the data store.
Definition StoreArray.h:113
const Var * getVariable(std::string name)
Get the variable belonging to the given key.
Definition Manager.cc:58
static Manager & Instance()
get singleton instance.
Definition Manager.cc:26
const Belle2::Particle * produceParticle(const std::string &decayString, const ROOT::Math::PxPyPzEVector &momentum, const ROOT::Math::XYZVector &vertex)
Main method to produce particles.
Abstract base class for different kinds of events.
STL namespace.