Belle II Software development
CDCDedxMeanPred.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
9#include <cdc/utilities/CDCDedxMeanPred.h>
10
11using namespace Belle2;
12
14{
15
16 // make sure the resolution parameters are reasonable
17 if (!m_DBMeanPars || m_DBMeanPars->getSize() == 0)
18 B2FATAL("No dE/dx mean parameters!");
19
20 std::vector<double> meanpar;
21 meanpar = m_DBMeanPars->getMeanPars();
22
23 for (int i = 0; i < 15; ++i)
24 m_meanpars[i] = meanpar[i];
25}
26
27
28void CDCDedxMeanPred::setParameters(std::string infile)
29{
30
31 B2INFO("\n\tWidgetParameterization: Using parameters from file --> " << infile);
32
33 std::ifstream fin;
34 fin.open(infile.c_str());
35
36 if (!fin.good()) B2FATAL("\tWARNING: CANNOT FIND" << infile);
37
38 int par;
39
40 B2INFO("\t --> Curve parameters");
41 for (int i = 0; i < 15; ++i) {
42 fin >> par >> m_meanpars[i];
43 B2INFO("\t\t (" << i << ")" << m_meanpars[i]);
44 }
45
46 fin.close();
47}
48
49void CDCDedxMeanPred::printParameters(std::string outfile)
50{
51
52 B2INFO("\tCDCDedxMeanPred: Printing parameters to file --> " << outfile.c_str());
53
54 // write out the parameters to file
55 std::ofstream fout(outfile.c_str());
56
57 for (int i = 1; i < 16; ++i) fout << i << "\t" << m_meanpars[i - 1] << std::endl;
58 fout.close();
59}
60
61double CDCDedxMeanPred::getMean(double bg)
62{
63
64 // define the section of the mean to use
65 double A = 0, B = 0, C = 0;
66
67 if (bg < 4.5) A = 1;
68 else if (bg < 10) B = 1;
69 else C = 1;
70
71 double x[1]; x[0] = bg;
72 double parsA[8];
73 double parsB[5];
74 double parsC[5];
75
76 parsA[0] = 1; parsB[0] = 2; parsC[0] = 3;
77 for (int i = 0; i < 15; ++i) {
78 if (i < 7) parsA[i + 1] = m_meanpars[i];
79 else if (i < 11) parsB[i % 7 + 1] = m_meanpars[i];
80 else parsC[i % 11 + 1] = m_meanpars[i];
81 }
82
83 // calculate dE/dx from the Bethe-Bloch mean
85 double partA = gc.meanCurve(x, std::vector<double>(parsA, parsA + 8));
86 double partB = gc.meanCurve(x, std::vector<double>(parsB, parsB + 5));
87 double partC = gc.meanCurve(x, std::vector<double>(parsC, parsC + 5));
88
89 return (A * partA + B * partB + C * partC);
90}
91
double m_meanpars[15]
parameters for beta-gamma curve
void setParameters()
set the parameters
const DBObjPtr< CDCDedxMeanPars > m_DBMeanPars
db object for dE/dx mean parameters
void printParameters(std::string infile)
write the parameters in file
double getMean(double bg)
Return the predicted mean value as a function of beta-gamma (bg)
Class to hold the beta-gamma (bg) mean function.
double meanCurve(double *x, const std::vector< double > &par) const
calculate the predicted mean value as a function of beta-gamma (bg) this is done with a different fun...
Abstract base class for different kinds of events.