10#include <klm/calibration/KLMLikelihoodParametersImporter.h>
13#include <klm/dbobjects/KLMLikelihoodParameters.h>
14#include <klm/muid/MuidElementNumbers.h>
17#include <framework/database/DBImportObjPtr.h>
18#include <framework/database/DBObjPtr.h>
19#include <framework/gearbox/GearDir.h>
20#include <framework/database/IntervalOfValidity.h>
21#include <framework/logging/Logger.h>
32 B2WARNING(
"The method KLMLikelihoodParametersImporter::writeMuidParameters() is temporary unavailable, sorry! :(");
37 std::vector<std::string>
const hypotheses = {
"Positron",
"Electron",
"Deuteron",
"Antideuteron",
"Proton",
"Antiproton",
"PionPlus",
"PionMinus",
"KaonPlus",
"KaonMinus",
"MuonPlus",
"MuonMinus" };
38 for (
unsigned int hypothesis = 0; hypothesis < hypotheses.size(); hypothesis++) {
39 GearDir content(
"/Detector/Muid/MuidParameters//Experiment[@exp=\"0\"]/");
40 content.append(hypotheses[hypothesis]);
42 GearDir outcomeContent(content);
43 outcomeContent.
append((boost::format(
"/LayerProfile/Outcome[@outcome=\"%1%\"]/") % (outcome)).str());
47 std::vector<double> layerPDF = outcomeContent.
getArray((boost::format(
"LastLayer[@layer=\"%1%\"]") % (lastLayer)).str());
48 likelihoodParameters->setLongitudinalPDF(hypothesis, outcome, lastLayer, layerPDF);
52 GearDir detectorContent(content);
54 detectorContent.
append(
"/TransversePDF/BarrelAndEndcap");
56 detectorContent.
append(
"/TransversePDF/BarrelOnly");
58 detectorContent.
append(
"/TransversePDF/EndcapOnly");
60 double reducedChiSquaredThreshold = detectorContent.
getDouble((boost::format(
"DegreesOfFreedom[@ndof=\"%1%\"]/Tail/Threshold") %
61 (2 * halfNdof)).str());
62 double reducedChiSquaredScaleY = detectorContent.
getDouble((boost::format(
"DegreesOfFreedom[@ndof=\"%1%\"]/Tail/ScaleY") %
63 (2 * halfNdof)).str());
64 double reducedChiSquaredScaleX = detectorContent.
getDouble((boost::format(
"DegreesOfFreedom[@ndof=\"%1%\"]/Tail/ScaleX") %
65 (2 * halfNdof)).str());
66 std::vector<double> reducedChiSquaredPDF = detectorContent.
getArray((boost::format(
"DegreesOfFreedom[@ndof=\"%1%\"]/Histogram") %
67 (2 * halfNdof)).str());
68 likelihoodParameters->setTransversePDF(hypothesis, detector, halfNdof * 2, reducedChiSquaredPDF);
69 likelihoodParameters->setTransverseThreshold(hypothesis, detector, halfNdof * 2, reducedChiSquaredThreshold);
70 likelihoodParameters->setTransverseScaleY(hypothesis, detector, halfNdof * 2, reducedChiSquaredScaleY);
71 likelihoodParameters->setTransverseScaleX(hypothesis, detector, halfNdof * 2, reducedChiSquaredScaleX);
76 likelihoodParameters.
import(Iov);
82 std::vector<std::string>
const hypotheses = {
"Positron",
"Electron",
"Deuteron",
"Antideuteron",
"Proton",
"Antiproton",
"PionPlus",
"PionMinus",
"KaonPlus",
"KaonMinus",
"MuonPlus",
"MuonMinus" };
83 for (
unsigned int hypothesis = 0; hypothesis < hypotheses.size(); hypothesis++) {
84 B2INFO(
" hypothesisName " << hypotheses[hypothesis]);
86 B2INFO(
" outcome " << outcome);
88 B2INFO(
" lastLayer " << lastLayer);
91 std::vector<double> layerPDF = likelihoodParameters->getLongitudinalPDF(hypothesis, outcome, lastLayer);
92 B2INFO(
" layerPDF: ");
93 for (
unsigned int layer = 0; layer < layerPDF.size(); ++layer) {
94 B2INFO(layerPDF[layer] <<
" , ");
98 const char* detectorNames[] = {
"BarrelAndEndcap",
"BarrelOnly",
"EndcapOnly"};
100 B2INFO(
" detectorName " << detectorNames[detector]);
102 B2INFO(
" Ndof " << halfNdof * 2);
103 B2INFO(
" ReducedChiSquaredThreshold " << likelihoodParameters->getTransverseThreshold(hypothesis, detector, halfNdof * 2));
104 B2INFO(
" ReducedChiSquaredScaleY " << likelihoodParameters->getTransverseScaleY(hypothesis, detector, halfNdof * 2));
105 B2INFO(
" ReducedChiSquaredScaleX " << likelihoodParameters->getTransverseScaleX(hypothesis, detector, halfNdof * 2));
106 std::vector<double> reducedChiSquaredPDF = likelihoodParameters->getTransversePDF(hypothesis, detector, halfNdof * 2);
108 B2ERROR(
"KLMLikelihoodParametersImporter::TransversePDF vector for hypothesis " << hypotheses[hypothesis] <<
" detector " <<
109 detectorNames[detector]
113 B2INFO(
" PDF " << reducedChiSquaredPDF[i]);
bool import(const IntervalOfValidity &iov)
Import the object to database.
Class for importing a single object to the database.
void construct(Args &&... params)
Construct an object of type T in this DBImportObjPtr using the provided constructor arguments.
Class for accessing objects in the database.
GearDir is the basic class used for accessing the parameter store.
void append(const std::string &path)
Append something to the current path, modifying the GearDir in place.
A class that describes the interval of experiments/runs for which an object in the database is valid.
void readLikelihoodParameters()
Read KLMLikelihoodParameters from the database.
void writeLikelihoodParameters()
Write KLMLikelihoodParameters into the database.
static constexpr int getMaximalDetector()
Get maximal value of the detector selector (for transverse scattering).
static constexpr int getMaximalHalfNdof()
Get maximal value of NDof/2 (for transverse scattering).
static constexpr int getMaximalBarrelLayer()
Get maximal barrel layer number (0-based).
static bool checkExtrapolationOutcome(unsigned int outcome, int lastLayer)
Check the track extrapolation outcome.
static constexpr int getSizeReducedChiSquared()
Get size of array with reduced chi-squared values (for transverse scattering).
static constexpr int getMaximalOutcome()
Get maximal value of the track extrapolation outcome.
std::vector< double > getArray(const std::string &path) const noexcept(false)
Get the parameter path as a list of double values converted to the standard unit.
double getDouble(const std::string &path="") const noexcept(false)
Get the parameter path as a double.
Abstract base class for different kinds of events.