119 if (ctx.evt() % 1000 == 0) {
131 const uint32_t* cispar = dqStatus->
cispar();
133 if (cispar[8] != 0)
return StatusCode::SUCCESS;
135 int cap = (cispar[7] > 10) ? 0 : 1;
136 double injectionTime = cispar[5] * 0.104;
137 double chargeForNormalModule = (cispar[6] < 1024) ? cispar[6] *
m_dac2Charge[cap] : 0.;
139 double chargeForDemonstrator = cap ? chargeForNormalModule * 0.5 : chargeForNormalModule;
140 double invChargeForNormalModule = (chargeForNormalModule != 0) ? 1.0 / chargeForNormalModule : 0.;
141 double invChargeForDemonstrator = (chargeForDemonstrator != 0) ? 1.0 / chargeForDemonstrator : 0.;
145 std::array<double, 2> minChargeForNormalModule = {(cap ? 10. : 15.), 1.};
146 std::array<double, 2> minChargeForDemonstrator = {(cap ? 10. : 15.), 2.};
150 std::array<double, 2> maxChargeForNormalModule = {750., 11.5};
151 std::array<double, 2> maxChargeForDemonstrator = {750., 23.0};
154 minChargeForDemonstrator[1] = minChargeForNormalModule[1];
155 maxChargeForDemonstrator[1] = maxChargeForNormalModule[1];
163 bool corruptedData[Tile::MAX_ROS - 1][Tile::MAX_DRAWER][Tile::MAX_GAIN][
MAX_DMU]={{{{
false}}}};
169 if (digitsCollection->empty() )
continue;
171 HWIdentifier adc_id = digitsCollection->front()->adc_HWID();
174 int partition = ros - 1;
176 std::vector<uint32_t> headers = digitsCollection->getFragChipHeaderWords();
177 int nDMU = headers.size();
180 int fragId = digitsCollection->identify();
182 for (
int dmu = 0; dmu < nDMU; ++dmu) {
184 corruptedData[partition][drawer][0][dmu] = isDataCorrupted;
185 corruptedData[partition][drawer][1][dmu] = isDataCorrupted;
190 int nChannels[Tile::MAX_ROS-1] = {0};
191 float partitionTimeSum[Tile::MAX_ROS-1] = {0};
194 float offlineTime[Tile::MAX_ROS-1][Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN] = {{{{0}}}};
196 float offlineAmplitude[Tile::MAX_ROS-1][Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN] = {{{{0}}}};
200 ATH_CHECK( rawChannelContainer.isValid() );
205 if (rawChannelCollection->empty())
continue;
207 HWIdentifier adc_id = rawChannelCollection->front()->adc_HWID();
211 int partition = ros - 1;
213 int fragId = rawChannelCollection->identify();
216 std::array<double, 2>& minCharge = demonstrator ? minChargeForDemonstrator : minChargeForNormalModule;
217 std::array<double, 2>& maxCharge = demonstrator ? maxChargeForDemonstrator : maxChargeForNormalModule;
218 double charge = demonstrator ? chargeForDemonstrator : chargeForNormalModule;
219 double invCharge = demonstrator ? invChargeForDemonstrator : invChargeForNormalModule;
222 adc_id = rawChannel->adc_HWID();
226 if (corruptedData[partition][drawer][adc][channel / 3])
continue;
228 std::string channelGainSuffix =
"_" + std::to_string(channel) +
"_" + std::to_string(adc);
230 float amplitude = rawChannel->amplitude();
238 rawChannel->cell_ID_index(
index, pmt);
243 amplitude = emScale->calibrateChannel(drawerIdx, channel, adc, amplitude, rawChannelUnit,
m_finalRawChannelUnit);
246 offlineAmplitude[partition][drawer][channel][adc] = amplitude;
248 float time = rawChannel->time();
249 offlineTime[partition][drawer][channel][adc] = time;
262 if (
m_cabling->isDisconnected(ros, drawer, channel)
265 || ((ros > 2) && (channel < 6 || channel == 12 || channel == 13 || channel == 18 || channel == 19))) {
268 partitionTimeSum[partition] += time;
269 nChannels[partition] += 1;
277 fill(
m_tools[ampVsQCapGroups[partition][drawer]], monCharge, monAmplitude);
280 if ((minCharge[adc] <
charge) && (
charge < maxCharge[adc])) {
281 double ratio = amplitude * invCharge;
283 fill(
m_tools[ampOverQCapGroups[partition][drawer]], monRatio);
286 fill(
m_tools[timeCapGroups[partition][drawer]], monTime);
290 fill(
m_tools[timeVsTimeCapGroups[partition][drawer]], monInjTime, monTime);
298 for (
unsigned int partition = 0; partition < Tile::MAX_ROS - 1; ++partition) {
299 if (nChannels[partition] > 0) {
300 float averagePartitionTime = partitionTimeSum[partition] / nChannels[partition];
301 for (
unsigned int drawer = 0; drawer < Tile::MAX_DRAWER; ++drawer) {
302 for (
unsigned int channel = 0; channel < Tile::MAX_CHAN; ++channel) {
303 for (
unsigned int gain = 0; gain < Tile::MAX_GAIN; ++gain) {
304 float time = offlineTime[partition][drawer][channel][gain];
306 std::string channelGainSuffix =
"_" + std::to_string(channel) +
"_" + std::to_string(gain);
307 float timeCorrected = time - averagePartitionTime;
327 if (rawChannelCollection->empty() )
continue;
329 HWIdentifier adc_id = rawChannelCollection->front()->adc_HWID();
333 int partition = ros - 1;
336 adc_id = rawChannel->adc_HWID();
340 if (corruptedData[partition][drawer][adc][channel / 3])
continue;
342 std::string channelGainSuffix =
"_" + std::to_string(channel) +
"_" + std::to_string(adc);
344 float amplitude = rawChannel->amplitude();
352 rawChannel->cell_ID_index(
index, pmt);
357 amplitude = emScale->calibrateChannel(drawerIdx, channel, adc, amplitude, dspRawChannelUnit,
m_finalRawChannelUnit);
363 float offline_amplitude = offlineAmplitude[partition][drawer][channel][adc];
365 float amplitudeDiff = (amplitude - offline_amplitude) / offline_amplitude;
370 float time = rawChannel->time();
374 float offline_time = offlineTime[partition][drawer][channel][adc];
375 if (offline_time != 0.) {
376 float timeDiff = time - offline_time;
381 float chi2 = rawChannel->quality();
390 fill(
"TileRawChannelMonExecuteTime", timer);
392 return StatusCode::SUCCESS;