118 if (ctx.evt() % 1000 == 0) {
130 const uint32_t* cispar = dqStatus->
cispar();
132 if (cispar[8] != 0)
return StatusCode::SUCCESS;
134 int cap = (cispar[7] > 10) ? 0 : 1;
135 double injectionTime = cispar[5] * 0.104;
136 double chargeForNormalModule = (cispar[6] < 1024) ? cispar[6] *
m_dac2Charge[cap] : 0.;
138 double chargeForDemonstrator = cap ? chargeForNormalModule * 0.5 : chargeForNormalModule;
139 double invChargeForNormalModule = (chargeForNormalModule != 0) ? 1.0 / chargeForNormalModule : 0.;
140 double invChargeForDemonstrator = (chargeForDemonstrator != 0) ? 1.0 / chargeForDemonstrator : 0.;
144 std::array<double, 2> minChargeForNormalModule = {(cap ? 10. : 15.), 1.};
145 std::array<double, 2> minChargeForDemonstrator = {(cap ? 10. : 15.), 2.};
149 std::array<double, 2> maxChargeForNormalModule = {750., 11.5};
150 std::array<double, 2> maxChargeForDemonstrator = {750., 23.0};
157 bool corruptedData[Tile::MAX_ROS - 1][Tile::MAX_DRAWER][Tile::MAX_GAIN][
MAX_DMU]={{{{
false}}}};
163 if (digitsCollection->empty() )
continue;
165 HWIdentifier adc_id = digitsCollection->front()->adc_HWID();
168 int partition = ros - 1;
170 std::vector<uint32_t> headers = digitsCollection->getFragChipHeaderWords();
171 int nDMU = headers.size();
174 int fragId = digitsCollection->identify();
176 for (
int dmu = 0; dmu < nDMU; ++dmu) {
178 corruptedData[partition][drawer][0][dmu] = isDataCorrupted;
179 corruptedData[partition][drawer][1][dmu] = isDataCorrupted;
184 int nChannels[Tile::MAX_ROS-1] = {0};
185 float partitionTimeSum[Tile::MAX_ROS-1] = {0};
188 float offlineTime[Tile::MAX_ROS-1][Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN] = {{{{0}}}};
190 float offlineAmplitude[Tile::MAX_ROS-1][Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN] = {{{{0}}}};
194 ATH_CHECK( rawChannelContainer.isValid() );
199 if (rawChannelCollection->empty())
continue;
201 HWIdentifier adc_id = rawChannelCollection->front()->adc_HWID();
205 int partition = ros - 1;
207 int fragId = rawChannelCollection->identify();
210 std::array<double, 2>& minCharge = demonstrator ? minChargeForDemonstrator : minChargeForNormalModule;
211 std::array<double, 2>& maxCharge = demonstrator ? maxChargeForDemonstrator : maxChargeForNormalModule;
212 double charge = demonstrator ? chargeForDemonstrator : chargeForNormalModule;
213 double invCharge = demonstrator ? invChargeForDemonstrator : invChargeForNormalModule;
216 adc_id = rawChannel->adc_HWID();
220 if (corruptedData[partition][drawer][adc][channel / 3])
continue;
222 std::string channelGainSuffix =
"_" + std::to_string(channel) +
"_" + std::to_string(adc);
224 float amplitude = rawChannel->amplitude();
232 rawChannel->cell_ID_index(
index, pmt);
237 amplitude = emScale->calibrateChannel(drawerIdx, channel, adc, amplitude, rawChannelUnit,
m_finalRawChannelUnit);
240 offlineAmplitude[partition][drawer][channel][adc] = amplitude;
242 float time = rawChannel->time();
243 offlineTime[partition][drawer][channel][adc] = time;
256 if (
m_cabling->isDisconnected(ros, drawer, channel)
259 || ((ros > 2) && (channel < 6 || channel == 12 || channel == 13 || channel == 18 || channel == 19))) {
262 partitionTimeSum[partition] += time;
263 nChannels[partition] += 1;
271 fill(
m_tools[ampVsQCapGroups[partition][drawer]], monCharge, monAmplitude);
274 if ((minCharge[adc] <
charge) && (
charge < maxCharge[adc])) {
275 double ratio = amplitude * invCharge;
277 fill(
m_tools[ampOverQCapGroups[partition][drawer]], monRatio);
280 fill(
m_tools[timeCapGroups[partition][drawer]], monTime);
284 fill(
m_tools[timeVsTimeCapGroups[partition][drawer]], monInjTime, monTime);
292 for (
unsigned int partition = 0; partition < Tile::MAX_ROS - 1; ++partition) {
293 if (nChannels[partition] > 0) {
294 float averagePartitionTime = partitionTimeSum[partition] / nChannels[partition];
295 for (
unsigned int drawer = 0; drawer < Tile::MAX_DRAWER; ++drawer) {
296 for (
unsigned int channel = 0; channel < Tile::MAX_CHAN; ++channel) {
297 for (
unsigned int gain = 0; gain < Tile::MAX_GAIN; ++gain) {
298 float time = offlineTime[partition][drawer][channel][gain];
300 std::string channelGainSuffix =
"_" + std::to_string(channel) +
"_" + std::to_string(gain);
301 float timeCorrected = time - averagePartitionTime;
321 if (rawChannelCollection->empty() )
continue;
323 HWIdentifier adc_id = rawChannelCollection->front()->adc_HWID();
327 int partition = ros - 1;
330 adc_id = rawChannel->adc_HWID();
334 if (corruptedData[partition][drawer][adc][channel / 3])
continue;
336 std::string channelGainSuffix =
"_" + std::to_string(channel) +
"_" + std::to_string(adc);
338 float amplitude = rawChannel->amplitude();
346 rawChannel->cell_ID_index(
index, pmt);
351 amplitude = emScale->calibrateChannel(drawerIdx, channel, adc, amplitude, dspRawChannelUnit,
m_finalRawChannelUnit);
357 float offline_amplitude = offlineAmplitude[partition][drawer][channel][adc];
359 float amplitudeDiff = (amplitude - offline_amplitude) / offline_amplitude;
364 float time = rawChannel->time();
368 float offline_time = offlineTime[partition][drawer][channel][adc];
369 if (offline_time != 0.) {
370 float timeDiff = time - offline_time;
375 float chi2 = rawChannel->quality();
384 fill(
"TileRawChannelMonExecuteTime", timer);
386 return StatusCode::SUCCESS;