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