9#include <cdc/dbobjects/CDCDedxSigmaPars.h>
10#include <framework/logging/Logger.h>
27 f = par[1] + par[2] * x;
28 }
else if (par[0] == 2) {
29 f = par[1] * x * x * x * x + par[2] * x * x * x + par[3] * x * x + par[4] * x + par[5];
30 }
else if (par[0] == 3) {
31 f = par[1] * std::exp(-0.5 * std::pow(((x - par[2]) / par[3]), 2)) +
32 par[4] * std::pow(x, 6) + par[5] * std::pow(x, 5) + par[6] * std::pow(x, 4) +
33 par[7] * x * x * x + par[8] * x * x + par[9] * x + par[10];
43 if (params.size() < 17) B2FATAL(
"CDCDedxSigmaPars: vector of parameters too short");
48 dedxpar[0] = 1; nhitpar[0] = 2; cospar[0] = 3;
49 for (
int i = 0; i < 10; ++i) {
50 if (i < 2) dedxpar[i + 1] = params[i];
51 if (i < 5) nhitpar[i + 1] = params[i + 2];
52 cospar[i + 1] = params[i + 7];
58 double nhit_min = 8, nhit_max = 37;
60 if (nhit < nhit_min) {
61 corNHit =
sigmaCurve(nhit_min, nhitpar, 0) * std::sqrt(nhit_min / nhit);
62 }
else if (nhit > nhit_max) {
63 corNHit =
sigmaCurve(nhit_max, nhitpar, 0) * std::sqrt(nhit_max / nhit);
68 double corCos =
sigmaCurve(cosTheta, cospar, 0);
70 return (corDedx * corCos * corNHit * timereso);
std::vector< double > m_sigmapars
dE/dx resolution parameters
double sigmaCurve(double x, const double *par, int version) const
parameterized resolution for predictions
double getSigma(double dedx, double nhit, double cosTheta, double timeReso) const
Returns predicted dE/dx sigma.
Abstract base class for different kinds of events.