60 std::array<std::string, 2> gainName{
"_LG",
"_HG"};
66 const TileFragHash& hashFunc = digitsContainerFlx->hashFunc();
70 memset(found,0,
sizeof(found));
73 unsigned int drawer = (fragID & 0x3F);
74 unsigned int ros = fragID >> 8;
76 std::array<std::string, 2> moduleName{
module+gainName[0], module+gainName[1]};
80 for (
const TileDigits* tile_digits : *digitsCollectionLegacy) {
84 unsigned int nSamples = tile_digits->nsamples();
91 std::string sampleName =
module + "_ch_" + std::to_string(channel) + gainName[gain] + "_samples";
94 std::vector<float> digits_monitored;
96 auto end = tile_digits->samples().end();
97 for(
auto i =
m_nSamples; it != end && i-->0; ++it) {
99 channelSample = sample;
100 fill(
"TileLegacyMonSamples", channelSample);
101 digits_monitored.push_back(sample);
104 nSamples = digits_monitored.size();
109 fill(
"TileLegacyMonPed", monitoredChannel, pedestal);
113 double sampleSum = std::accumulate( digits_monitored.begin(), digits_monitored.end(), 0.0);
115 double sampleRMS = std::accumulate( digits_monitored.begin(), digits_monitored.end(), 0.0, [] (
double acc,
float sample) {
116 return acc + sample * sample;
118 sampleRMS -= sampleSum * sampleSum / nSamples;
119 sampleRMS = (sampleRMS > 0.0) ? std::sqrt(sampleRMS / (nSamples - 1)) : 0.0;
122 fill(
"TileLegacyMonHFN", monitoredChannel, hfn);
125 found[channel][gain] |= 1;
126 digitsLegacy[channel][gain].swap(digits_monitored);
133 for (
const TileDigits* tile_digits : *digitsCollectionFlx) {
137 unsigned int nSamples = tile_digits->nsamples();
144 std::string sampleName =
module + "_ch_" + std::to_string(channel) + gainName[gain] + "_samples";
147 std::vector<float> digits_monitored;
148 auto it = tile_digits->samples().begin() +
m_firstFelix;
149 auto end = tile_digits->samples().end();
151 for(
auto i =
m_nSamples; it != end && i-->0; ++it) {
152 float sample = (*it);
153 channelSample = sample;
154 fill(
"TileFlxMonSamples", channelSample);
155 digits_monitored.push_back(sample);
158 nSamples = digits_monitored.size();
163 fill(
"TileFlxMonPed", monitoredChannel, pedestal);
167 double sampleSum = std::accumulate( digits_monitored.begin(), digits_monitored.end(), 0.0);
169 double sampleRMS = std::accumulate( digits_monitored.begin(), digits_monitored.end(), 0.0, [] (
double acc,
float sample) {
170 return acc + sample * sample;
172 sampleRMS -= sampleSum * sampleSum / nSamples;
173 sampleRMS = (sampleRMS > 0.0) ? std::sqrt(sampleRMS / (nSamples - 1)) : 0.0;
176 fill(
"TileFlxMonHFN", monitoredChannel, hfn);
179 found[channel][gain] |= 2;
180 digitsFlx[channel][gain].swap(digits_monitored);
192 if (found[channel][gain] == 3) {
194 monitoredChannel = channel;
196 std::string sampleName =
module + "_ch_" + std::to_string(channel) + gainName[gain] + "_samples_diff";
199 for (
auto it1=digitsLegacy[channel][gain].begin(), it2=digitsFlx[channel][gain].begin();
200 it1!=digitsLegacy[channel][gain].end() && it2!=digitsFlx[channel][gain].end(); ++it1, ++it2) {
203 channelSampleDiff =
diff;
204 moduleSampleDiff =
diff;
206 fill(
"TileChannelAllSamplesDiff", channelSampleDiff);
207 fill(
"TileModuleAllSamplesDiff", moduleSampleDiff);
208 fill(
"TileModuleSamplesDiff", monitoredChannel, moduleSampleDiff);
215 fill(
"TileDigitsFlxMonExecuteTime", timer);
217 return StatusCode::SUCCESS;