31 return StatusCode::FAILURE;
36 return StatusCode::FAILURE;
44 std::vector<std::string> partitionName = {
"LBA",
"LBC",
"EBA",
"EBC"};
45 int nChannels[] = {8, 8, 4, 4};
46 for (
unsigned int partition = 0; partition <
Tile::MAX_ROS - 1; ++partition) {
49 "TMDB_MeanPulse_" + partitionName[partition],
53 "TMDB_Energy_" + partitionName[partition],
57 "TMDB_CalibrationError_" + partitionName[partition],
61 "TMDB_ChanNoise_" + partitionName[partition],
65 "TMDB_Peak_" + partitionName[partition],
70 return StatusCode::SUCCESS;
100 ATH_CHECK( rawChannelContainer.isValid() );
103 if (rawChannelCollection->empty() )
continue;
105 int fragId = rawChannelCollection->identify();
106 int drawer = fragId & 0x3F;
107 int ros = fragId >> 8;
108 int partition = ros - 1;
114 float energy = rawChannel->amplitude();
116 std::map<int, int>::const_iterator it =
m_cellTMDB[partition].get().find(channel);
118 int channelTMDB = (*it).second;
119 if ((ros < 3) && (drawer % 2 == 0)) {
122 referenceEnergies[partition][drawer][channelTMDB] = energy;
137 if (muRcvRawChannelCollection->empty() )
continue;
139 int fragId = muRcvRawChannelCollection->identify();
140 int drawer = fragId & 0x3F;
141 int ros = fragId >> 8;
143 int partition = ros - 1;
145 for (
const TileRawChannel* muRcvRawChannel : *muRcvRawChannelCollection) {
148 float amplitude = muRcvRawChannel->amplitude();
151 energyDrawers[partition].push_back(drawer);
152 energyChannels[partition].push_back(channel);
153 energies[partition].push_back(energy);
162 <<
" TMDB channel " << channel
163 <<
": energy [MeV] = " << energy);
179 if (muRcvDigitsCollection->empty() )
continue;
181 int fragId = muRcvDigitsCollection->identify();
182 int drawer = fragId & 0x3F;
183 int ros = fragId >> 8;
184 int partition = ros - 1;
187 for (
const TileDigits* muRcvDigits : *muRcvDigitsCollection) {
191 float energy = referenceEnergies[partition][drawer][channel];
193 peakPositionDrawers[partition].push_back(drawer);
194 peakPositionChannels[partition].push_back(channel);
196 std::vector<float> samples = muRcvDigits->samples();
197 unsigned int nSamples = samples.size();
198 std::vector<int> sampleNumbers(nSamples, 0);
199 std::iota(sampleNumbers.begin(), sampleNumbers.end(), 0);
206 float peakPosition = std::distance(samples.begin(), std::max_element(samples.begin(), samples.end()));
207 peakPositions[partition].push_back(peakPosition);
213 <<
" TMDB channel " << channel
214 <<
": peak position = " << peakPosition);
221 for (
unsigned int partition = 0; partition <
Tile::MAX_ROS - 1; ++partition) {
222 if (!energies[partition].
empty()) {
229 if (!peakPositions[partition].
empty()) {
238 fill(
"TileTMDBMonExecuteTime", timer);
240 return StatusCode::SUCCESS;