66 auto EnvsCrysSameRing =
new TH2F(
"EnvsCrysSameRing",
"Normalized energy vs crystal ID, same theta ring;crystal ID;E/Expected",
71 auto EnvsCrysDifferentRing =
new TH2F(
"EnvsCrysDifferentRing",
76 auto ExpEvsCrysSameRing =
new TH1F(
"ExpEvsCrysSameRing",
81 auto ExpEvsCrysDifferentRing =
new TH1F(
"ExpEvsCrysDifferentRing",
86 auto ElecCalibvsCrysSameRing =
new TH1F(
"ElecCalibvsCrysSameRing",
91 auto ElecCalibvsCrysDifferentRing =
new TH1F(
"ElecCalibvsCrysDifferentRing",
96 auto InitialCalibvsCrysSameRing =
new TH1F(
"InitialCalibvsCrysSameRing",
101 auto InitialCalibvsCrysDifferentRing =
new TH1F(
"InitialCalibvsCrysDifferentRing",
106 auto CalibEntriesvsCrysSameRing =
new TH1F(
"CalibEntriesvsCrysSameRing",
111 auto CalibEntriesvsCrysDifferentRing =
new TH1F(
"CalibEntriesvsCrysDifferentRing",
116 auto RawDigitAmpvsCrys =
new TH2F(
"RawDigitAmpvsCrys",
"Digit Amplitude vs crystal ID;crystal ID;Amplitude",
123 B2INFO(
"Input parameters to eclCosmicECollector:");
143 for (
int ic = 1; ic < 9000; ic += 1000) {
144 B2INFO(
"DB constants for cellID=" << ic <<
": ExpCosmicESame = " <<
ExpCosmicESame[ic - 1] <<
" ExpCosmicEDifferent = " <<
151 if (
ExpCosmicESame[ic] == 0) {B2FATAL(
"eclCosmicECollector: ExpCosmicESame = 0 for crysID = " << ic);}
152 if (
ExpCosmicEDifferent[ic] == 0) {B2FATAL(
"eclCosmicECollector: ExpCosmicEDifferent = 0 for crysID = " << ic);}
153 if (
CosmicECalib[ic] == 0) {B2FATAL(
"eclCosmicECollector: CosmicECalib = 0 for crysID = " << ic);}
160 const short m_crystalsPerRing[69] = {
161 48, 48, 64, 64, 64, 96, 96, 96, 96, 96, 96, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 96, 96, 96, 96, 96, 64, 64, 64
165 short firstCrystal[69] = {};
166 for (
int it = 1; it < 69; it++) {firstCrystal[it] = firstCrystal[it - 1] + m_crystalsPerRing[it - 1];}
172 for (
int it = 0; it < 69; it++) {
173 for (
int ic = 0; ic < m_crystalsPerRing[it]; ic++) {
174 ThetaIDCrys.at(cID) = it;
175 PhiIDCrys.at(cID) = ic;
193 double n2Overn0 = (double)m_crystalsPerRing[ThetaID + 2] / (
double)m_crystalsPerRing[ThetaID];
194 for (
int phiID = 0; phiID < m_crystalsPerRing[ThetaID]; phiID++) {
195 int crysID = firstCrystal[ThetaID] + phiID;
198 int phiIDA = phiID + 1;
199 if (phiIDA == m_crystalsPerRing[ThetaID]) {phiIDA = 0;}
200 int phiIDB = phiID - 1;
201 if (phiIDB == -1) {phiIDB = m_crystalsPerRing[ThetaID] - 1;}
204 NeighbourA.push_back(firstCrystal[ThetaID] + phiIDA);
205 NeighbourB.push_back(firstCrystal[ThetaID] + phiIDB);
208 double dphiB = n2Overn0 * phiID + 0.0001;
211 NeighbourA.push_back(firstCrystal[ThetaID + 1] + phiID);
212 NeighbourB.push_back(firstCrystal[ThetaID + 2] + phiIDB);
216 NeighbourA.push_back(firstCrystal[ThetaID + 1] + phiID);
217 NeighbourB.push_back(firstCrystal[ThetaID + 2] + phiIDB);
226 for (
int crysID = firstCrystal[1]; crysID < firstCrystal[68]; crysID++) {
227 std::vector<short int> neighbours = myNeighbours4->
getNeighbours(crysID + 1);
232 std::vector<short int> nextThetaNeighbours;
233 std::vector<short int> previousThetaNeighbours;
234 for (
auto& ID1 : neighbours) {
236 if (temp0 != crysID && ThetaIDCrys[temp0] == ThetaIDCrys[crysID] && nA == -1) {
238 }
else if (temp0 != crysID && ThetaIDCrys[temp0] == ThetaIDCrys[crysID] && nA != -1) {
243 if (ThetaIDCrys[temp0] == ThetaIDCrys[crysID] + 1) {nextThetaNeighbours.push_back(temp0);}
244 if (ThetaIDCrys[temp0] == ThetaIDCrys[crysID] - 1) {previousThetaNeighbours.push_back(temp0);}
248 if (nA >= 0 && nB >= 0) {
254 B2FATAL(
"No neighbour pair with the same thetaID for crysID = " << crysID);
258 for (
auto& IDn : nextThetaNeighbours) {
259 for (
auto& IDp : previousThetaNeighbours) {
271 for (
int phiID = 0; phiID < m_crystalsPerRing[ThetaID]; phiID++) {
272 int crysID = firstCrystal[ThetaID] + phiID;
275 int phiIDA = phiID + 1;
276 if (phiIDA == m_crystalsPerRing[ThetaID]) {phiIDA = 0;}
277 int phiIDB = phiID - 1;
278 if (phiIDB == -1) {phiIDB = m_crystalsPerRing[ThetaID] - 1;}
281 NeighbourA.push_back(firstCrystal[ThetaID] + phiIDA);
282 NeighbourB.push_back(firstCrystal[ThetaID] + phiIDB);
286 NeighbourA.push_back(firstCrystal[ThetaID - 1] + phiID);
287 NeighbourB.push_back(firstCrystal[ThetaID - 2] + phiID);