Belle II Software  release-06-02-00
particleWeighting.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 <analysis/dbobjects/ParticleWeightingLookUpTable.h>
9 #include <framework/utilities/TestHelpers.h>
10 
11 #include <gtest/gtest.h>
12 
13 using namespace std;
14 using namespace Belle2;
15 
16 namespace {
17 
18  TEST(ParticleWeighting, BinLimits)
19  {
20  EXPECT_B2FATAL(ParticleWeightingBinLimits(42, 42));
21  auto* a = new ParticleWeightingBinLimits(0, 1);
22  EXPECT_TRUE(a->first() == 0);
23  EXPECT_TRUE(a->second() == 1);
24  auto* b = new ParticleWeightingBinLimits(1, 0);
25  EXPECT_TRUE(b->first() == 0);
26  EXPECT_TRUE(b->second() == 1);
27  }
28 
29  TEST(ParticleWeighting, Axis)
30  {
31  auto* a = new ParticleWeightingAxis();
32  EXPECT_TRUE(a->getName() == "");
33  a->setName("Test axis name");
34  EXPECT_TRUE(a->getName() == "Test axis name");
35 
36  auto* bin1 = new ParticleWeightingBinLimits(0, 1);
37  auto* bin1b = new ParticleWeightingBinLimits(1, 2);
38  auto* bin2 = new ParticleWeightingBinLimits(2, 3);
39  auto* bin3 = new ParticleWeightingBinLimits(0, 5);
40  auto* bin4 = new ParticleWeightingBinLimits(0.5, 1.5);
41  auto* bin5 = new ParticleWeightingBinLimits(2.5, 3);
42 
43  int added_bin_id_1 = a->addBin(bin1);
44  EXPECT_EQ(added_bin_id_1 , 1);
45  int added_bin_id_2 = a->addBin(bin2);
46  EXPECT_EQ(added_bin_id_2 , 2);
47  EXPECT_B2FATAL(a->addBin(bin3));
48  EXPECT_B2FATAL(a->addBin(bin4));
49  EXPECT_B2FATAL(a->addBin(bin5));
50  EXPECT_TRUE(a->findBin(0.5) == 1);
51  EXPECT_TRUE(a->findBin(1.5) == -1);
52  EXPECT_TRUE(a->findBin(bin1) == 1);
53  EXPECT_TRUE(a->addBin(bin1b) == 3);
54  }
55 
56  TEST(ParticleWeighting, KeyMap)
57  {
58  auto* bl1 = new ParticleWeightingBinLimits(0, 1);
59  auto* bl2 = new ParticleWeightingBinLimits(1, 2);
60  auto* bl3 = new ParticleWeightingBinLimits(1, 3);
61  string a1 = "Axis1";
62  string a2 = "Axis2";
63  string a3 = "Axis3";
64  NDBin bin1;
65  bin1.insert(make_pair(a1, bl1));
66  bin1.insert(make_pair(a2, bl1));
67  NDBin bin2;
68  bin2.insert(make_pair(a1, bl2));
69  bin2.insert(make_pair(a2, bl2));
70  NDBin bin3;
71  bin3.insert(make_pair(a1, bl3));
72  bin3.insert(make_pair(a2, bl3));
73  NDBin bin1a;
74  bin1a.insert(make_pair(a1, bl2));
75  bin1a.insert(make_pair(a2, bl2));
76  bin1a.insert(make_pair(a3, bl3));
77  NDBin bin1b;
78  bin1b.insert(make_pair(a1, bl1));
79  bin1b.insert(make_pair(a1, bl2));
80  NDBin bin1c;
81  bin1c.insert(make_pair(a3, bl3));
82  bin1c.insert(make_pair(a2, bl2));
83  map<string, double> entry1;
84  entry1.insert(make_pair(a1, 0.1));
85  entry1.insert(make_pair(a2, 0.2));
86  map<string, double> entry2;
87  entry2.insert(make_pair(a1, 1.1));
88  entry2.insert(make_pair(a2, 1.2));
89  map<string, double> entry3;
90  entry3.insert(make_pair(a1, 10));
91  entry3.insert(make_pair(a2, 10));
92 
93  auto* kmp = new ParticleWeightingKeyMap();
94  int added_bin_id_1 = kmp->addKey(bin1);
95  EXPECT_EQ(added_bin_id_1, 0);
96  int added_bin_id_2 = kmp->addKey(bin2);
97  EXPECT_EQ(added_bin_id_2, 1);
98  EXPECT_B2FATAL(kmp->addKey(bin1, 42));
99  EXPECT_B2FATAL(kmp->addKey(bin1a));
100  EXPECT_B2FATAL(kmp->addKey(bin1b));
101  EXPECT_B2FATAL(kmp->addKey(bin1c));
102  EXPECT_EQ(kmp->getKey(entry1), 0);
103  EXPECT_EQ(kmp->getKey(entry2), 1);
104  EXPECT_EQ(kmp->getKey(entry3), -1);
105  }
106 
107  TEST(ParticleWeighting, LookUpTable)
108  {
109  auto* bl1 = new ParticleWeightingBinLimits(0, 1);
110  auto* bl2 = new ParticleWeightingBinLimits(1, 2);
111  auto* bl3 = new ParticleWeightingBinLimits(1, 3);
112  string a1 = "Axis1";
113  string a2 = "Axis2";
114  string v1 = "Var1";
115  string v2 = "Var2";
116  NDBin bin1;
117  bin1.insert(make_pair(a1, bl1));
118  bin1.insert(make_pair(a2, bl1));
119  NDBin bin2;
120  bin2.insert(make_pair(a1, bl2));
121  bin2.insert(make_pair(a2, bl2));
122  NDBin bin3;
123  bin3.insert(make_pair(a1, bl3));
124  bin3.insert(make_pair(a2, bl3));
125  WeightInfo info1;
126  info1.insert(make_pair(v1, 41));
127  info1.insert(make_pair(v2, 42));
128  WeightInfo info2;
129  info2.insert(make_pair(v1, 31));
130  info2.insert(make_pair(v2, 32));
131  WeightInfo info3;
132  info3.insert(make_pair(v1, 21));
133  info3.insert(make_pair(v2, 22));
134  map<string, double> entry1;
135  entry1.insert(make_pair(a1, 0.1));
136  entry1.insert(make_pair(a2, 0.2));
137  map<string, double> entry1a;
138  entry1a.insert(make_pair(a1, 100));
139  entry1a.insert(make_pair(a2, 200));
140 
141  auto* ltb = new ParticleWeightingLookUpTable();
142  ltb->addEntry(info1, bin1);
143  ltb->addEntry(info2, bin2);
144  vector<string> axes = ltb->getAxesNames();
145  vector<string> known_axes;
146  known_axes.push_back(a1);
147  known_axes.push_back(a2);
148  EXPECT_TRUE(equal(axes.begin(), axes.end(), known_axes.begin()));
149  WeightInfo obtained_info = ltb->getInfo(entry1);
150  double info_at_1 = obtained_info.at(v1);
151  EXPECT_EQ(info_at_1, 41);
152  double info_at_2 = obtained_info.at(v2);
153  EXPECT_EQ(info_at_2, 42);
154 
155  EXPECT_B2FATAL(ltb->getInfo(entry1a));
156 
157  ltb->defineOutOfRangeWeight(info3);
158  obtained_info = ltb->getInfo(entry1a);
159  info_at_2 = obtained_info.at(v2);
160  EXPECT_EQ(info_at_2, 22);
161 
162  }
163 
164 } // namespace
Class for handling LookUp tables.
Just pair of numbers - min and max values of bin border.
std::map< std::string, ParticleWeightingBinLimits * > NDBin
N-dim bin: pairs of bin limits with name of the axis variable.
std::map< std::string, double > WeightInfo
Weight information: a line from the weight lookup table.
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Abstract base class for different kinds of events.
const std::vector< double > v2
MATLAB generated random vector.
const std::vector< double > v1
MATLAB generated random vector.
def equal(a, b)
Definition: bitstring.py:292