Return dE/dx mean value for given DOCA and entrance angle.
119 {
120 if (layer > 56) {
121 B2ERROR("Asking for a CDC layer beyond 56!");
122 return 0;
123 }
124
125 unsigned int mylayer = 0;
126 if (layer >= 8 &&
m_twodgains.size() == 2) mylayer = 1;
127 else if (
m_twodgains.size() == 56) mylayer = layer;
128
130 B2ERROR("CDCDedx2DCell: wrong layer number, returning 1");
131 return 1.0;
132 }
133
134
135 if (enta < -3.1416 / 2.0) enta += 3.1416 / 2.0;
136 if (enta > 3.1416 / 2.0) enta -= 3.1416 / 2.0;
137
138
139 double dbinsize =
m_twodgains[mylayer].GetXaxis()->GetBinCenter(2) -
m_twodgains[mylayer].GetXaxis()->GetBinCenter(1);
140 int dbin = std::floor((doca -
m_twodgains[mylayer].GetXaxis()->GetBinLowEdge(1)) / dbinsize) + 1;
141
142 double ebinsize =
m_twodgains[mylayer].GetYaxis()->GetBinCenter(2) -
m_twodgains[mylayer].GetYaxis()->GetBinCenter(1);
143
144 int ebin = std::floor((enta -
m_twodgains[mylayer].GetYaxis()->GetBinLowEdge(1)) / ebinsize) + 1;
145
146 double mean = 1.0;
147 if (dbin > 0 && dbin <=
m_twodgains[mylayer].GetNbinsX() && ebin > 0 && ebin <=
m_twodgains[mylayer].GetNbinsY())
148 mean =
m_twodgains[mylayer].GetBinContent(dbin, ebin);
151 else
152
153 B2WARNING("Problem with 2D CDC dE/dx calibration! " << doca << "\t" << dbin << "\t" << enta << "\t" << ebin);
154
155 return mean;
156 };