13 #include <framework/logging/Logger.h>
28 class CDCDedxCosineCor:
public TObject {
53 B2WARNING(
"Cosine gain parameters do not match, cannot merge!");
56 std::vector<double> rhsgains = rhs.getCosCor();
57 int scale = std::floor(
m_cosgains.size() / rhs.getSize() + 0.001);
58 for (
unsigned int bin = 0; bin <
m_cosgains.size(); ++bin) {
59 m_cosgains[bin] *= rhsgains[std::floor(bin / scale + 0.001)];
91 double getMean(
double costh)
const
93 if (std::abs(costh) > 1)
return 0;
98 int bin = std::floor((costh - 0.5 * binsize + 1.0) / binsize);
103 int thisbin = bin, nextbin = bin + 1;
104 if ((costh + 1) < (binsize / 2) || (costh > 0 && std::fabs(costh) < (binsize / 2))) {
105 thisbin = bin + 1; nextbin = bin + 2;
107 if ((costh - 1) > -1.0 * (binsize / 2) || (costh < 0 && std::fabs(costh) < (binsize / 2))) {
108 thisbin = bin - 1; nextbin = bin;
111 double frac = ((costh - 0.5 * binsize + 1.0) / binsize) - thisbin;
113 if (thisbin < 0 || (
unsigned)nextbin >=
m_cosgains.size()) {
114 B2WARNING(
"Problem with extrapolation of CDC dE/dx cosine correction");