Belle II Software  release-06-00-14
KLMMuidLikelihoodTest.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 
9 /* KLM headers. */
10 #include <klm/dataobjects/KLMMuidLikelihood.h>
11 
12 /* Belle2 headers. */
13 #include <framework/datastore/StoreArray.h>
14 #include <framework/gearbox/Const.h>
15 
16 /* C++ headers. */
17 #include <bitset>
18 #include <string>
19 
20 /* Google Test headers. */
21 #include <gtest/gtest.h>
22 
23 using namespace std;
24 
25 namespace Belle2 {
32  class KLMMuidLikelihoodTest : public ::testing::Test {
33 
34  protected:
36  void SetUp() override
37  {
38  DataStore::Instance().setInitializeActive(true);
40  muids.registerInDataStore();
41  DataStore::Instance().setInitializeActive(false);
42  }
43 
45  void TearDown() override
46  {
47  DataStore::Instance().reset();
48  }
49 
51  KLMMuidLikelihood* m_muid = nullptr;
52  };
53 
56  {
58 
59  // Test the non-default constructor
60  int pdg = Const::muon.getPDGCode();
61  m_muid = muids.appendNew();
62  m_muid->setPDGCode(pdg);
63  EXPECT_EQ(m_muid->getPDGCode(), pdg);
64  EXPECT_EQ(m_muid->getOutcome(), 0);
65  EXPECT_EQ(m_muid->getHitLayer(), -1);
66  EXPECT_FLOAT_EQ(m_muid->getLogL_mu(), -1.0E20);
67 
68  // Test the efficiency methods
69  int layer = 4;
70  float efficiency = 0.2;
71  m_muid->setExtBKLMEfficiencyValue(layer, efficiency);
72  EXPECT_FLOAT_EQ(m_muid->getExtBKLMEfficiencyValue(layer), efficiency);
73  m_muid->setExtEKLMEfficiencyValue(layer, efficiency);
74  EXPECT_FLOAT_EQ(m_muid->getExtEKLMEfficiencyValue(layer), efficiency);
75 
76  // Test the methods to count the hits and to check the crossed layer
77  // 111111
78  // it means 6 hits in BKLM and 0 in EKLM
79  std::bitset<30> bitPattern(std::string("111111"));
80  unsigned int pattern = static_cast<unsigned int>(bitPattern.to_ulong());
81  m_muid->setHitLayerPattern(pattern);
82  EXPECT_EQ(m_muid->getHitLayerPattern(), pattern);
83  EXPECT_EQ(m_muid->getTotalBarrelHits(), 6);
84  EXPECT_EQ(m_muid->getTotalEndcapHits(), 0);
85  m_muid->setExtLayerPattern(pattern);
86  EXPECT_TRUE(m_muid->isExtrapolatedBarrelLayerCrossed(5));
87  EXPECT_FALSE(m_muid->isExtrapolatedBarrelLayerCrossed(6));
88  EXPECT_FALSE(m_muid->isExtrapolatedEndcapLayerCrossed(0));
89  // 1000000000000000
90  // it means 0 hits in BKLM and 1 in EKLM
91  bitPattern = std::bitset<30>(std::string("1000000000000000"));
92  pattern = static_cast<unsigned int>(bitPattern.to_ulong());
93  m_muid->setHitLayerPattern(pattern);
94  EXPECT_EQ(m_muid->getHitLayerPattern(), pattern);
95  EXPECT_EQ(m_muid->getTotalBarrelHits(), 0);
96  EXPECT_EQ(m_muid->getTotalEndcapHits(), 1);
97  m_muid->setExtLayerPattern(pattern);
98  EXPECT_FALSE(m_muid->isExtrapolatedBarrelLayerCrossed(0));
99  EXPECT_TRUE(m_muid->isExtrapolatedEndcapLayerCrossed(0));
100  EXPECT_FALSE(m_muid->isExtrapolatedEndcapLayerCrossed(1));
101  // 10101000000000111000
102  // it means 3 hits in BKLM and 3 in EKLM
103  bitPattern = std::bitset<30>(std::string("10101000000000111000"));
104  pattern = static_cast<unsigned int>(bitPattern.to_ulong());
105  m_muid->setHitLayerPattern(pattern);
106  EXPECT_EQ(m_muid->getHitLayerPattern(), pattern);
107  EXPECT_EQ(m_muid->getTotalBarrelHits(), 3);
108  EXPECT_EQ(m_muid->getTotalEndcapHits(), 3);
109  m_muid->setExtLayerPattern(pattern);
110  EXPECT_TRUE(m_muid->isExtrapolatedBarrelLayerCrossed(4));
111  EXPECT_TRUE(m_muid->isExtrapolatedEndcapLayerCrossed(0));
112  EXPECT_FALSE(m_muid->isExtrapolatedEndcapLayerCrossed(10));
113  // 11111111111111111111111111111
114  // it means 15 hits in BKLM, 14 in EKLM and 1 "fake" hit
115  bitPattern = std::bitset<30>(std::string("11111111111111111111111111111"));
116  pattern = static_cast<unsigned int>(bitPattern.to_ulong());
117  m_muid->setHitLayerPattern(pattern);
118  EXPECT_EQ(m_muid->getHitLayerPattern(), pattern);
119  EXPECT_EQ(m_muid->getTotalBarrelHits(), 15);
120  EXPECT_EQ(m_muid->getTotalEndcapHits(), 14);
121  m_muid->setExtLayerPattern(pattern);
122  EXPECT_TRUE(m_muid->isExtrapolatedBarrelLayerCrossed(14));
123  EXPECT_FALSE(m_muid->isExtrapolatedBarrelLayerCrossed(15));
124  EXPECT_TRUE(m_muid->isExtrapolatedEndcapLayerCrossed(13));
125  }
126 
128 }
Test class for the KLMMuidLikelihood object.
void SetUp() override
Register KLMMuidLikelihood in the DataStore.
void TearDown() override
Clear the DataStore.
Class to store the likelihoods from KLM with additional informations related to the extrapolation.
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
T * appendNew()
Construct a new T object at the end of the array.
Definition: StoreArray.h:246
TEST_F(KLMMuidLikelihoodTest, KLMMuidLikelihood)
Test some setters and getters.
Abstract base class for different kinds of events.