13 #include <framework/logging/Logger.h>
28 class CDCDedx2DCell:
public TObject {
53 B2WARNING(
"2D cell gain parameters do not match, cannot merge!");
56 for (
unsigned int layer = 0; layer <
getSize(); ++layer) {
57 const TH2F* newhist = rhs.getHist(layer);
58 if (newhist->GetEntries() > 0)
m_twodgains[layer].Multiply(newhist);
59 else B2ERROR(
"ERROR! constant histograms is empty");
85 B2ERROR(
"ERROR! const histograms NOT found");
91 B2ERROR(
"ERROR! Something is wrong # of const histograms");
102 double getMean(
unsigned int layer,
int dbin,
int ebin)
const
105 if (layer >= 8 &&
m_twodgains.size() == 2) mylayer = 1;
106 else if (
m_twodgains.size() == 56) mylayer = layer;
108 return m_twodgains[mylayer].GetBinContent(dbin, ebin);
116 double getMean(
unsigned int layer,
double doca,
double enta)
const
119 B2ERROR(
"Asking for a CDC layer beyond 56!");
125 else if (
m_twodgains.size() == 56) mylayer = layer;
128 if (enta < -3.1416 / 2.0) enta += 3.1416 / 2.0;
129 if (enta > 3.1416 / 2.0) enta -= 3.1416 / 2.0;
132 double dbinsize =
m_twodgains[mylayer].GetXaxis()->GetBinCenter(2) -
m_twodgains[mylayer].GetXaxis()->GetBinCenter(1);
133 int dbin = std::floor((doca -
m_twodgains[mylayer].GetXaxis()->GetBinLowEdge(1)) / dbinsize) + 1;
135 double ebinsize =
m_twodgains[mylayer].GetYaxis()->GetBinCenter(2) -
m_twodgains[mylayer].GetYaxis()->GetBinCenter(1);
137 int ebin = std::floor((enta -
m_twodgains[mylayer].GetYaxis()->GetBinLowEdge(1)) / ebinsize) + 1;
140 if (dbin > 0 && dbin <=
m_twodgains[mylayer].GetNbinsX() && ebin > 0 && ebin <=
m_twodgains[mylayer].GetNbinsY())
141 mean =
m_twodgains[mylayer].GetBinContent(dbin, ebin);
146 B2WARNING(
"Problem with 2D CDC dE/dx calibration! " << doca <<
"\t" << dbin <<
"\t" << enta <<
"\t" << ebin);