1 #include <framework/gearbox/Const.h>
2 #include <framework/gearbox/Unit.h>
3 #include <framework/datastore/StoreArray.h>
5 #include <ecl/dataobjects/ECLPidLikelihood.h>
6 #include <ecl/dbobjects/ECLChargedPidPDFs.h>
9 #include <gtest/gtest.h>
29 ecl_likelihoods.registerInDataStore();
32 ecl_likelihoods_plus.registerInDataStore();
35 ecl_likelihoods_minus.registerInDataStore();
63 EXPECT_FLOAT_EQ(lk->getLogLikelihood(
Const::muon), 0.58);
64 EXPECT_FLOAT_EQ(lk->getLogLikelihood(
Const::pion), 0.28);
65 EXPECT_FLOAT_EQ(lk->getLogLikelihood(
Const::kaon), 0.38);
76 float pmin_vals[] = {0.2, 0.6, 1.0, 100.0};
77 float thetamin_vals[] = {0.21, 0.56, 2.24, 2.70};
79 TH2F histgrid(
"binsgrid",
81 sizeof(thetamin_vals) /
sizeof(
float) - 1,
83 sizeof(pmin_vals) /
sizeof(
float) - 1,
94 typedef std::pair<int, TF1> pdfSet;
96 pdfSet pdf_el = std::make_pair(-1, TF1(
"pdf_el",
"TMath::Gaus(x, 1.0, 0.2, true)", 0.0, 1.3));
97 pdfSet pdf_elanti = std::make_pair(1, TF1(
"pdf_elanti",
"TMath::Gaus(x, 0.9, 0.2, true)", 0.0, 1.2));
99 pdfSet pdf_mu = std::make_pair(-1, TF1(
"pdf_mu",
"TMath::Gaus(x, 0.3, 0.2, true)", 0.0, 1.0));
100 pdfSet pdf_muanti = std::make_pair(1, TF1(
"pdf_muanti",
"TMath::Gaus(x, 0.35, 0.22, true)", 0.0, 1.0));
102 pdfSet pdf_pi = std::make_pair(1, TF1(
"pdf_pi",
"TMath::Gaus(x, 0.4, 0.1, true)", 0.0, 1.0));
103 pdfSet pdf_pianti = std::make_pair(-1, TF1(
"pdf_pianti",
"TMath::Gaus(x, 0.38, 0.15, true)", 0.0, 1.0));
105 pdfSet pdf_k = std::make_pair(1, TF1(
"pdf_k",
"TMath::Gaus(x, 0.38, 0.2, true)", 0.0, 1.0));
106 pdfSet pdf_kanti = std::make_pair(-1, TF1(
"pdf_kanti",
"TMath::Gaus(x, 0.5, 0.22, true)", 0.0, 1.0));
108 pdfSet pdf_p = std::make_pair(1, TF1(
"pdf_p",
"TMath::Gaus(x, 1.0, 0.4, true)", 0.0, 1.6));
109 pdfSet pdf_panti = std::make_pair(-1, TF1(
"pdf_panti",
"TMath::Gaus(x, 1.3, 0.5, true)", 0.0, 2.0));
111 pdfSet pdf_d = std::make_pair(1, TF1(
"pdf_d",
"TMath::Gaus(x, 1.1, 0.45, true)", 0.0, 1.6));
112 pdfSet pdf_danti = std::make_pair(-1, TF1(
"pdf_danti",
"TMath::Gaus(x, 1.2, 0.6, true)", 0.0, 2.0));
114 std::map<unsigned int, std::vector<pdfSet>> pdfs = {
128 for (
auto& [pdg, pdf_setlist] : pdfs) {
129 for (
auto& pdf_set : pdf_setlist) {
130 for (
int ip(1); ip <= histgrid.GetNbinsY(); ++ip) {
131 for (
int jth(1); jth <= histgrid.GetNbinsX(); ++jth) {
132 for (
const auto& varid : varids) {
133 eclPdfs.
add(pdg, pdf_set.first, ip, jth, varid, &pdf_set.second);
145 double clusterTheta = 1.047;
150 for (
const auto& [pdg, pdf_setlist] : pdfs) {
151 for (
const auto& pdf_set : pdf_setlist) {
152 float pdfval = eclPdfs.
getPdf(pdg, pdf_set.first, p, clusterTheta, varids.at(0))->Eval(eop);
153 EXPECT_NEAR(pdf_set.second.Eval(eop), pdfval, 0.001);
154 if (pdf_set.first < 0) {
164 const auto* lk_minus = ecl_likelihoods_minus.
appendNew(likelihoods_minus);
166 const auto* lk_plus = ecl_likelihoods_plus.
appendNew(likelihoods_plus);
168 for (
const auto& [pdg, pdf_setlist] : pdfs) {
169 for (
const auto& pdf_set : pdf_setlist) {
171 float logl_expect = log(pdf_set.second.Eval(eop));
172 if (pdf_set.first < 0) {
177 EXPECT_NEAR(logl_expect, logl, 0.01);