12 #include <klm/dataobjects/bklm/BKLMElementNumbers.h>
13 #include <klm/dataobjects/eklm/EKLMElementNumbers.h>
14 #include <klm/dataobjects/KLMMuidLikelihood.h>
15 #include <klm/muid/MuidBuilder.h>
16 #include <klm/muid/MuidElementNumbers.h>
19 #include <framework/database/Database.h>
20 #include <framework/database/DBStore.h>
21 #include <framework/dataobjects/EventMetaData.h>
22 #include <framework/datastore/StoreArray.h>
23 #include <framework/datastore/StoreObjPtr.h>
30 #include <gtest/gtest.h>
49 DataStore::Instance().setInitializeActive(
true);
51 muids.registerInDataStore();
53 eventMetaData.registerInDataStore();
54 DataStore::Instance().setInitializeActive(
false);
57 DBStore& dbStore = DBStore::Instance();
65 DataStore::Instance().reset();
76 std::vector<int> m_pdgVectorMinus = MuidElementNumbers::getPDGVector(-1);
79 std::vector<int> m_pdgVectorPlus = MuidElementNumbers::getPDGVector(1);
87 std::bitset<30> bitExtPattern(std::string(
"11111111111111"));
88 unsigned int extPattern =
static_cast<unsigned int>(bitExtPattern.to_ulong());
89 unsigned int hitPattern =
static_cast<unsigned int>(bitExtPattern.to_ulong());
90 bool isForward =
true;
92 int lastBarrelLayer = 13;
93 int lastEndcapLayer = -1;
94 unsigned int outcome = MuidElementNumbers::calculateExtrapolationOutcome(isForward, escaped, lastBarrelLayer, lastEndcapLayer);
95 double chiSquared = 29.5;
96 int degreesOfFreedom = 28;
98 m_muid->setPDGCode(pdg);
99 m_muid->setExtLayerPattern(extPattern);
100 m_muid->setHitLayerPattern(hitPattern);
101 m_muid->setIsForward(isForward);
102 m_muid->setBarrelExtLayer(lastBarrelLayer);
103 m_muid->setEndcapExtLayer(lastBarrelLayer);
104 m_muid->setOutcome(outcome);
105 m_muid->setChiSquared(chiSquared);
106 m_muid->setDegreesOfFreedom(degreesOfFreedom);
107 std::vector<float> logLVector = { -169.215, -0.288937, -46.5124, -49.7292, -72.7715, -96.2517};
108 for (
size_t i = 0; i < m_pdgVectorMinus.size(); ++i) {
109 m_muidBuilder =
new MuidBuilder(m_pdgVectorMinus.at(i));
110 float logL = std::log(m_muidBuilder->getPDF(m_muid));
111 EXPECT_LT(std::abs(logL - logLVector.at(i)), 10E-4);
112 delete m_muidBuilder;
116 m_pdgVectorPlus = MuidElementNumbers::getPDGVector(1);
117 logLVector = { -169.215, -0.284881, -45.7914, -42.7717, -95.9839, -118.769};
118 for (
size_t i = 0; i < m_pdgVectorPlus.size(); ++i) {
119 m_muidBuilder =
new MuidBuilder(m_pdgVectorPlus.at(i));
120 float logL = std::log(m_muidBuilder->getPDF(m_muid));
121 EXPECT_LT(std::abs(logL - logLVector.at(i)), 10E-4);
122 delete m_muidBuilder;
131 std::bitset<30> bitExtPattern(std::string(
"11111111111111"));
132 unsigned int extPattern =
static_cast<unsigned int>(bitExtPattern.to_ulong());
133 std::bitset<30> bitHitPattern(std::string(
"11011111111101"));
134 unsigned int hitPattern =
static_cast<unsigned int>(bitHitPattern.to_ulong());
135 bool isForward =
true;
136 bool escaped =
false;
137 int lastBarrelLayer = 13;
138 int lastEndcapLayer = -1;
139 unsigned int outcome = MuidElementNumbers::calculateExtrapolationOutcome(isForward, escaped, lastBarrelLayer, lastEndcapLayer);
140 double chiSquared = 23.5;
141 int degreesOfFreedom = 24;
143 m_muid->setPDGCode(pdg);
144 m_muid->setExtLayerPattern(extPattern);
145 m_muid->setHitLayerPattern(hitPattern);
146 m_muid->setIsForward(isForward);
147 m_muid->setBarrelExtLayer(lastBarrelLayer);
148 m_muid->setEndcapExtLayer(lastBarrelLayer);
149 m_muid->setOutcome(outcome);
150 m_muid->setChiSquared(chiSquared);
151 m_muid->setDegreesOfFreedom(degreesOfFreedom);
152 std::vector<float> logLVector = { -147.07, -6.37567, -40.9424, -43.8204, -63.8973, -84.6684};
153 for (
size_t i = 0; i < m_pdgVectorMinus.size(); ++i) {
154 m_muidBuilder =
new MuidBuilder(m_pdgVectorMinus.at(i));
155 float logL = std::log(m_muidBuilder->getPDF(m_muid));
156 EXPECT_LT(std::abs(logL - logLVector.at(i)), 10E-4);
157 delete m_muidBuilder;
166 std::bitset<30> bitExtPattern(std::string(
"11111111111111"));
167 unsigned int extPattern =
static_cast<unsigned int>(bitExtPattern.to_ulong());
168 std::bitset<30> bitHitPattern(std::string(
"11"));
169 unsigned int hitPattern =
static_cast<unsigned int>(bitHitPattern.to_ulong());
170 bool isForward =
true;
171 bool escaped =
false;
172 int lastBarrelLayer = 1;
173 int lastEndcapLayer = -1;
174 unsigned int outcome = MuidElementNumbers::calculateExtrapolationOutcome(isForward, escaped, lastBarrelLayer, lastEndcapLayer);
175 double chiSquared = 7.5;
176 int degreesOfFreedom = 4;
178 m_muid->setPDGCode(pdg);
179 m_muid->setExtLayerPattern(extPattern);
180 m_muid->setHitLayerPattern(hitPattern);
181 m_muid->setIsForward(isForward);
182 m_muid->setBarrelExtLayer(lastBarrelLayer);
183 m_muid->setEndcapExtLayer(lastBarrelLayer);
184 m_muid->setOutcome(outcome);
185 m_muid->setChiSquared(chiSquared);
186 m_muid->setDegreesOfFreedom(degreesOfFreedom);
187 std::vector<float> logLVector = { -13.0068, -1.82853, -4.78739, -6.44048, -6.67272, -6.8342};
188 for (
size_t i = 0; i < m_pdgVectorMinus.size(); ++i) {
189 m_muidBuilder =
new MuidBuilder(m_pdgVectorMinus.at(i));
190 float logL = std::log(m_muidBuilder->getPDF(m_muid));
191 EXPECT_LT(std::abs(logL - logLVector.at(i)), 10E-4);
192 delete m_muidBuilder;
201 std::bitset<30> bitExtPattern(std::string(
"1111111000000000000111"));
202 unsigned int extPattern =
static_cast<unsigned int>(bitExtPattern.to_ulong());
203 unsigned int hitPattern =
static_cast<unsigned int>(bitExtPattern.to_ulong());
205 bool isForward =
true;
206 bool escaped =
false;
207 int lastBarrelLayer = 2;
208 int lastEndcapLayer = 6;
209 unsigned int outcome = MuidElementNumbers::calculateExtrapolationOutcome(isForward, escaped, lastBarrelLayer, lastEndcapLayer);
210 double chiSquared = 19.5;
211 int degreesOfFreedom = 20;
213 m_muid->setPDGCode(pdg);
214 m_muid->setExtLayerPattern(extPattern);
215 m_muid->setHitLayerPattern(hitPattern);
216 m_muid->setIsForward(isForward);
217 m_muid->setBarrelExtLayer(lastBarrelLayer);
218 m_muid->setEndcapExtLayer(lastBarrelLayer);
219 m_muid->setOutcome(outcome);
220 m_muid->setChiSquared(chiSquared);
221 m_muid->setDegreesOfFreedom(degreesOfFreedom);
222 std::vector<float> logLVector = { -44.4325, -0.746618, -17.3903, -18.7434, -25.4178, -34.7886};
223 for (
size_t i = 0; i < m_pdgVectorMinus.size(); ++i) {
224 m_muidBuilder =
new MuidBuilder(m_pdgVectorMinus.at(i));
225 float logL = std::log(m_muidBuilder->getPDF(m_muid));
226 EXPECT_LT(std::abs(logL - logLVector.at(i)), 10E-4);
227 delete m_muidBuilder;
232 outcome = MuidElementNumbers::calculateExtrapolationOutcome(isForward, escaped, lastBarrelLayer, lastEndcapLayer);
233 m_muid->setIsForward(isForward);
234 m_muid->setOutcome(outcome);
235 logLVector = { -50.7005, -1.11268, -18.3302, -20.7392, -26.5815, -33.6206};
236 for (
size_t i = 0; i < m_pdgVectorMinus.size(); ++i) {
237 m_muidBuilder =
new MuidBuilder(m_pdgVectorMinus.at(i));
238 float logL = std::log(m_muidBuilder->getPDF(m_muid));
239 EXPECT_LT(std::abs(logL - logLVector.at(i)), 10E-4);
240 delete m_muidBuilder;
249 std::bitset<30> bitExtPattern(std::string(
"1111111000000000000111"));
250 unsigned int extPattern =
static_cast<unsigned int>(bitExtPattern.to_ulong());
251 std::bitset<30> bitHitPattern(std::string(
"1100111000000000000101"));
252 unsigned int hitPattern =
static_cast<unsigned int>(bitHitPattern.to_ulong());
254 bool isForward =
true;
255 bool escaped =
false;
256 int lastBarrelLayer = 2;
257 int lastEndcapLayer = 6;
258 unsigned int outcome = MuidElementNumbers::calculateExtrapolationOutcome(isForward, escaped, lastBarrelLayer, lastEndcapLayer);
259 double chiSquared = 15.5;
260 int degreesOfFreedom = 14;
261 float efficiency = 0.8437;
263 m_muid->setPDGCode(pdg);
264 m_muid->setExtLayerPattern(extPattern);
265 m_muid->setHitLayerPattern(hitPattern);
266 m_muid->setIsForward(isForward);
267 m_muid->setBarrelExtLayer(lastBarrelLayer);
268 m_muid->setEndcapExtLayer(lastBarrelLayer);
269 m_muid->setOutcome(outcome);
270 m_muid->setChiSquared(chiSquared);
271 m_muid->setDegreesOfFreedom(degreesOfFreedom);
272 for (
int layer = 0; layer < BKLMElementNumbers::getMaximalLayerNumber(); ++layer)
273 m_muid->setExtBKLMEfficiencyValue(layer, efficiency);
274 for (
int layer = 0; layer < EKLMElementNumbers::getMaximalLayerNumber(); ++layer)
275 m_muid->setExtEKLMEfficiencyValue(layer, efficiency);
276 std::vector<float> logLVector = { -38.1205, -2.43391, -16.0512, -17.094, -23.4617, -31.9516};
277 for (
size_t i = 0; i < m_pdgVectorMinus.size(); ++i) {
278 m_muidBuilder =
new MuidBuilder(m_pdgVectorMinus.at(i));
279 float logL = std::log(m_muidBuilder->getPDF(m_muid));
280 EXPECT_LT(std::abs(logL - logLVector.at(i)), 10E-4);
281 delete m_muidBuilder;
286 outcome = MuidElementNumbers::calculateExtrapolationOutcome(isForward, escaped, lastBarrelLayer, lastEndcapLayer);
287 m_muid->setIsForward(isForward);
288 m_muid->setOutcome(outcome);
289 logLVector = { -43.7474, -2.51744, -16.6359, -18.5523, -23.8643, -29.9728};
290 for (
size_t i = 0; i < m_pdgVectorMinus.size(); ++i) {
291 m_muidBuilder =
new MuidBuilder(m_pdgVectorMinus.at(i));
292 float logL = std::log(m_muidBuilder->getPDF(m_muid));
293 EXPECT_LT(std::abs(logL - logLVector.at(i)), 10E-4);
294 delete m_muidBuilder;