9#include <cdc/dbobjects/CDCDedxHadronCor.h>
10#include <framework/logging/Logger.h>
22 if (params.size() < 5) {
23 B2WARNING(
"Vector of dE/dx hadron constants too short!");
27 double projection = std::pow(std::abs(cosTheta), params[3]) + params[2];
28 if (projection == 0) {
29 B2WARNING(
"Something wrong with dE/dx hadron constants!");
33 double chargeDensity = D / projection;
34 double numerator = 1 + params[0] * chargeDensity;
35 double denominator = 1 + params[1] * chargeDensity;
37 if (denominator == 0) {
38 B2WARNING(
"Something wrong with dE/dx hadron constants!");
42 double I = D * params[4] * numerator / denominator;
50 if (params.size() < 5) {
51 B2WARNING(
"Vector of dE/dx hadron constants too short!");
55 double projection = std::pow(std::abs(cosTheta), params[3]) + params[2];
56 if (projection == 0 or params[4] == 0) {
57 B2WARNING(
"Something wrong with dE/dx hadron constants!");
61 double a = params[0] / projection;
62 double b = 1 - params[1] / projection * (I / params[4]);
63 double c = -1.0 * I / params[4];
65 if (b == 0 and a == 0) {
66 B2WARNING(
"both a and b coefficiants for hadron correction are 0");
70 double discr = b * b - 4.0 * a * c;
72 B2WARNING(
"negative discriminant; return uncorrectecd value");
76 double D = (a != 0) ? (-b + std::sqrt(discr)) / (2.0 * a) : -c / b;
78 D = (a != 0) ? (-b - std::sqrt(discr)) / (2.0 * a) : -c / b;
80 B2WARNING(
"D is less than 0; return uncorrectecd value");
std::vector< double > m_hadronpars
dE/dx hadron correction parameters
double I2D(double cosTheta, double I) const
hadron saturation parameterization part 1
double D2I(double cosTheta, double D) const
hadron saturation parameterization part 2
Abstract base class for different kinds of events.