12 ATH_MSG_DEBUG(
"calling the constructor of ZdcMonitorAlgorithm");
77 ATH_MSG_DEBUG(
"calling the fillPhysicsDataHistograms function");
79 auto zdcTool =
getGroup(
"genZdcMonTool");
93 passTrigSideA = trigDecTool->isPassed(
m_triggerSideA, TrigDefs::Physics);
94 passTrigSideC = trigDecTool->isPassed(
m_triggerSideC, TrigDefs::Physics);
128 std::array<bool, 2> centroidSideValid;
129 std::array<bool, 2> rpdSideValid = {
false,
false};
130 std::array<std::vector<float>,2> rpdSubAmpVecs;
142 std::array<float, 2> zdcEMModuleEnergy = {-100,-100};
143 std::array<float, 2> zdcEnergySum = {0,0};
144 std::array<float, 2> rpdAmplitudeCalibSum = {0,0};
145 std::array<float, 2> rpdMaxADCSum = {0,0};
147 std::array<float, m_nRpdCentroidStatusBits> centroidStatusBitsCountCurSide;
151 return StatusCode::SUCCESS;
154 for (
const auto& zdcSum : *zdcSums) {
156 if (zdcSum->zdcSide() == 0){
157 rpdCosDeltaReactionPlaneAngle = RPDcosDeltaReactionPlaneAngleHandle(*zdcSum);
159 int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
161 zdcAvgTimeCurSide = ZdcSumAverageTimeHandle(*zdcSum);
162 zdcModuleMaskCurSide = (ZdcSumModuleMaskHandle(*zdcSum) > 0);
163 zdcEnergySum[iside] = ZdcSumCalibEnergyHandle(*zdcSum);
165 rpdSubAmpVecs[iside] = RPDsubAmpHandle(*zdcSum);
166 rpdSubAmpSumCurSide = RPDsubAmpSumHandle(*zdcSum);
167 rpdXCentroidCurSide = RPDxCentroidHandle(*zdcSum);
168 rpdYCentroidCurSide = RPDyCentroidHandle(*zdcSum);
169 rpdReactionPlaneAngleCurSide = RPDreactionPlaneAngleHandle(*zdcSum);
171 unsigned int rpdCentroidStatusCurSide = RPDcentroidStatusHandle(*zdcSum);
172 unsigned int rpdStatusCurSide = RPDsideStatusHandle(*zdcSum);
179 bothReactionPlaneAngleValid &= centroidValid;
180 bothHasCentroid &= curSideHasCentroid;
185 if (rpdCentroidStatusCurSide & 1 << bit){
186 centroidStatusBitsCountCurSide[bit] += 1;
189 auto centroidStatusBits =
Monitored::Collection(
"centroidStatusBits", centroidStatusBitsCountCurSide);
191 if (curSideHasCentroid){
192 fill(
m_tools[
m_ZDCSideToolIndices[iside]], zdcAvgTimeCurSide, zdcModuleMaskCurSide, rpdSubAmpSumCurSide, centroidValid, rpdXCentroidCurSide, rpdYCentroidCurSide, rpdReactionPlaneAngleCurSide, centroidStatusBits,
lumiBlock,
bcid);
198 ATH_MSG_DEBUG(
"The current side is " << iside <<
", the module mask is " << zdcModuleMaskCurSide);
200 if (zdcSum->zdcSide() == 1){
201 zdcEnergySumA = ZdcSumCalibEnergyHandle(*zdcSum);
202 zdcUncalibSumA = ZdcSumUncalibSumHandle(*zdcSum);
205 zdcEnergySumC = ZdcSumCalibEnergyHandle(*zdcSum);
206 zdcUncalibSumC = ZdcSumUncalibSumHandle(*zdcSum);
266 auto rpdValidZdcEMModuleEnergySameSideBelow0 =
Monitored::Scalar<bool>(
"rpdValidZdcEMModuleEnergySameSideBelow0",
false);
267 auto rpdValidZdcEMModuleEnergySameSideBelow70 =
Monitored::Scalar<bool>(
"rpdValidZdcEMModuleEnergySameSideBelow70",
false);
269 std::array<float, m_nZdcStatusBits> zdcStatusBitsCount;
270 std::array<float, m_nRpdStatusBits> rpdStatusBitsCount;
274 return StatusCode::SUCCESS;
278 for (
const auto zdcMod : *zdcModules){
279 int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
281 if (zdcMod->zdcType() == 0){
282 int imod = zdcMod->zdcModule();
283 int status = zdcModuleStatusHandle(*zdcMod);
285 for (
int bit = 0; bit <
m_nZdcStatusBits; bit++) zdcStatusBitsCount[bit] = 0;
288 zdcStatusBitsCount[bit] += 1;
296 zdcModuleAmp = zdcModuleAmplitudeHandle(*zdcMod);
297 zdcModuleTime = zdcModuleTimeHandle(*zdcMod);
298 zdcModuleChisq = zdcModuleChisqHandle(*zdcMod);
299 zdcModuleCalibAmp = zdcModuleCalibEnergyHandle(*zdcMod);
300 zdcModuleCalibTime = zdcModuleCalibTimeHandle(*zdcMod);
301 zdcUncalibSumCurrentSide = (zdcMod->zdcSide() > 0)? 1. * zdcUncalibSumA : 1. * zdcUncalibSumC;
302 zdcAbove20NCurrentSide = (zdcUncalibSumCurrentSide > 20 *
m_expected1N);
303 zdcModuleFract = (zdcUncalibSumCurrentSide == 0)? -1000. : zdcModuleAmp / zdcUncalibSumCurrentSide;
304 zdcModuleChisqOverAmp = (zdcModuleAmp == 0)? -1000. : zdcModuleChisq / zdcModuleAmp;
306 zdcModuleHG = !(zdcModuleLG);
308 if (imod == 0) zdcEMModuleEnergy[iside] = zdcModuleCalibAmp;
310 fill(
m_tools[
m_ZDCModuleToolIndices[iside][imod]], zdcModuleAmp, zdcModuleFract, zdcUncalibSumCurrentSide, zdcAbove20NCurrentSide, zdcModuleTime, zdcModuleChisq, zdcModuleChisqOverAmp, zdcModuleCalibAmp, zdcModuleCalibTime, zdcModuleLG, zdcModuleHG,
lumiBlock,
bcid);
315 ATH_MSG_DEBUG(
"After one loop over all zdc modules, the current values in zdcEMModuleEnergy is : " << zdcEMModuleEnergy[0] <<
", " << zdcEMModuleEnergy[1]);
317 for (
const auto zdcMod : *zdcModules){
318 int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
319 if (zdcMod->zdcType() == 1) {
322 int ichannel = zdcMod->zdcChannel();
323 int status = RPDChannelStatusHandle(*zdcMod);
325 for (
int bit = 0; bit <
m_nRpdStatusBits; bit++) rpdStatusBitsCount[bit] = 0;
328 rpdStatusBitsCount[bit] += 1;
334 rpdChannelSubAmp = rpdSubAmpVecs[iside][ichannel];
335 rpdChannelAmplitude = RPDChannelAmplitudeHandle(*zdcMod);
336 rpdChannelMaxADC = RPDChannelMaxADCHandle(*zdcMod);
337 rpdChannelAmplitudeCalib = RPDChannelAmplitudeCalibHandle(*zdcMod);
338 std::vector<float> rpdChannelPileupFitParams = RPDChannelPileupExpFitParamsHandle(*zdcMod);
339 rpdChannelPileupFitSlope = rpdChannelPileupFitParams[1];
340 rpdChannelPileupFrac = RPDChannelPileupFracHandle(*zdcMod);
342 absRpdChannelAmplitude = abs(rpdChannelAmplitude);
343 zdcEMModuleEnergySameSide = zdcEMModuleEnergy[iside];
344 zdcEMModuleSameSideHasPulse = (zdcEMModuleEnergySameSide >= 0);
346 rpdValidZdcEMModuleEnergySameSideBelow0 = (zdcEMModuleEnergySameSide == 0) && curRpdChannelValid;
347 rpdValidZdcEMModuleEnergySameSideBelow70 = (zdcEMModuleEnergySameSide < 70) && curRpdChannelValid;
348 rpdChannelValid = curRpdChannelValid;
349 rpdChannelCentroidValid = centroidSideValid.at(iside);
350 rpdChannelNegativeAmp = (rpdChannelAmplitude < 0);
351 rpdChannelNegativePileup = (rpdChannelPileupFrac == -1);
352 rpdChannelNoPileup = (rpdChannelPileupFrac == 0);
354 rpdAmplitudeCalibSum[iside] += rpdChannelAmplitudeCalib;
355 rpdMaxADCSum[iside] += rpdChannelMaxADC;
357 fill(
m_tools[
m_RPDChannelToolIndices[iside][ichannel]], rpdChannelSubAmp, rpdChannelAmplitude, rpdChannelAmplitudeCalib, rpdChannelMaxADC, rpdStatusBits, rpdChannelPileupFitSlope, absRpdChannelAmplitude, rpdChannelPileupFrac, zdcEMModuleEnergySameSide, zdcEMModuleSameSideHasPulse, rpdValidZdcEMModuleEnergySameSideBelow0, rpdValidZdcEMModuleEnergySameSideBelow70, rpdChannelValid, rpdChannelCentroidValid, rpdChannelNegativeAmp, rpdChannelNegativePileup, rpdChannelNoPileup,
lumiBlock,
bcid);
378 for (
const auto eventShape : *eventShapes){
379 int layer = eventShape->layer();
380 float eta = eventShape->etaMin();
381 float et = eventShape->et();
383 if (
eta > 0) fcalEtA +=
et;
384 if (
eta < 0) fcalEtC +=
et;
394 fill(zdcTool,
lumiBlock,
bcid, passTrigSideA, passTrigSideC, zdcEnergySumA, zdcEnergySumC, zdcUncalibSumA, zdcUncalibSumC, rpdCosDeltaReactionPlaneAngle, bothReactionPlaneAngleValid, bothHasCentroid, fcalEtA, fcalEtC);
396 fill(zdcTool,
lumiBlock,
bcid, passTrigSideA, passTrigSideC, zdcEnergySumA, zdcEnergySumC, zdcUncalibSumA, zdcUncalibSumC, rpdCosDeltaReactionPlaneAngle, bothReactionPlaneAngleValid, bothHasCentroid);
400 for (
int iside = 0; iside <
m_nSides; iside++){
408 return StatusCode::SUCCESS;
419 return StatusCode::SUCCESS;
432 return StatusCode::SUCCESS;
434 for (
const auto& zdcSum : *zdcSums) {
435 if (zdcSum->zdcSide() == 0){
437 ATH_MSG_WARNING(
"The global sum entry in zdc sum container can be retrieved; but it does NOT have the variable eventType written as a decoration!");
438 return StatusCode::SUCCESS;
442 ATH_MSG_WARNING(
"The global sum entry in zdc sum container can be retrieved; but it does NOT have the variable DAQMode written as a decoration!");
443 return StatusCode::SUCCESS;
446 eventType = eventTypeHandle(*zdcSum);
447 DAQMode = DAQModeHandle(*zdcSum);
454 ATH_MSG_WARNING(
"The zdc sum container can be retrieved from the evtStore() but");
455 ATH_MSG_WARNING(
"Either the event type or the DAQ mode is the default unknown value");
456 ATH_MSG_WARNING(
"Most likely, there is no global sum (side == 0) entry in the zdc sum container");
457 return StatusCode::SUCCESS;
464 ATH_MSG_WARNING(
"Event type should be PhysicsData/Simulation but it is NOT");
465 return StatusCode::SUCCESS;