57{
58
60
64
66 const LArCalibLineMapping *clcabling {*clHdl};
67 if(!clcabling) {
69 return StatusCode::FAILURE;
70 }
71
72
73 const LArCalibDigitContainer* calibDigitContainer=nullptr;
74
75
76 const LArCalibParams* calibParams;
77 sc=
detStore()->retrieve(calibParams,
"LArCalibParams");
79 {
ATH_MSG_ERROR(
"Cannot load LArCalibParams from DetStore." );
80 return StatusCode::FAILURE;
81 }
82
84
85
86
87
88 for (
const std::string& key :
m_keylist) {
89
90 sc=
evtStore()->retrieve(calibDigitContainer,key);
92 ATH_MSG_ERROR(
"Can't retrieve LArCalibDigitContainer with key " << key <<
"from StoreGate." );
93 return StatusCode::SUCCESS;
94 }else{
95 ATH_MSG_DEBUG(
"Retrieved LArCalibDigitContainer with key " << key <<
" from StoreGate." );
96 }
97
98
99
100 if(calibDigitContainer->
empty()) {
101 ATH_MSG_DEBUG(
"LArCalibDigitContainer with key=" << key <<
" is empty " );
102 }else{
103 ATH_MSG_DEBUG(
"LArCalibDigitContainer with key=" << key <<
" has size = " << calibDigitContainer->
size() );
104 }
105
106
107 std::vector<unsigned int> ntrigger, nTriggerPerStep, nStepTrigger, iStepTrigger;
108
109 ntrigger.resize(calibDigitContainer->
size(),0);
110
114
115
116 LArAccumulatedCalibDigitContainer* larAccuCalibDigitContainerHG = new LArAccumulatedCalibDigitContainer();
117
118 LArAccumulatedCalibDigitContainer* larAccuCalibDigitContainerMG = new LArAccumulatedCalibDigitContainer();
119
120 LArAccumulatedCalibDigitContainer* larAccuCalibDigitContainerLG = new LArAccumulatedCalibDigitContainer();
121
122
123 for (const LArCalibDigit* digit : *calibDigitContainer) {
124
126
127
128 HWIdentifier chid=
digit->hardwareID();
132
133
134
135
136 const std::vector<HWIdentifier>& calibLineID=clcabling->
calibSlotLine(chid);
137 HWIdentifier calibModuleID;
138 if(!calibLineID.empty()){
140 nTriggerPerStep[febhash] = calibParams->
NTrigger(calibModuleID);
141 ATH_MSG_DEBUG(
"Ntrigger per step = " << nTriggerPerStep[febhash] );
142 if(nTriggerPerStep[febhash] > 1000) nTriggerPerStep[febhash]=100;
143 } else {
144 nTriggerPerStep[febhash] = 100;
145 }
146
147
149
150
153 } else {
154
156 ATH_MSG_DEBUG(
"Delay is changing to " <<
digit->delay() <<
" from " <<
m_delay <<
": book a new LArAccumulatedCalibDigitContainer" );
158 }
159 }
160
163 ATH_MSG_ERROR(
"Found not-matching gain number ("<< (
int)gain <<
")" );
164 delete larAccuCalibDigitContainerHG;
165 delete larAccuCalibDigitContainerMG;
166 delete larAccuCalibDigitContainerLG;
167 return StatusCode::FAILURE;
168 }
169
170
171
174
175 cellAccumulatedHG.m_ntrigger++;
176 ATH_MSG_DEBUG(
"HG chid = " << chid <<
", trigger = " << cellAccumulatedHG.m_ntrigger <<
", DAC = " <<
digit->DAC() );
177
178 unsigned int sizeSamples =
digit->samples().size();
179 ATH_MSG_DEBUG(
"sizeSteps = " << sizeSteps <<
", # of samples = " << sizeSamples );
180 if(cellAccumulatedHG.m_ntrigger==1){
181 cellAccumulatedHG.m_sum.clear();
182 cellAccumulatedHG.m_sum2.clear();
183 cellAccumulatedHG.m_sum.resize(sizeSamples,0);
184 cellAccumulatedHG.m_sum2.resize(sizeSamples,0);
185 }
186 for(unsigned int j=0;j<sizeSamples;j++) {
187 cellAccumulatedHG.m_sum[j] +=
digit->samples()[j];
188 cellAccumulatedHG.m_sum2[j] +=
digit->samples()[j]*
digit->samples()[j];
189 }
192 }
193
194
195
198
199 cellAccumulatedMG.m_ntrigger++;
200 ATH_MSG_DEBUG(
"MG chid = " << chid <<
", trigger = " << cellAccumulatedMG.m_ntrigger <<
", DAC = " <<
digit->DAC() );
201
202 unsigned int sizeSamples =
digit->samples().size();
203 ATH_MSG_DEBUG(
"sizeSteps = " << sizeSteps <<
", # of samples = " << sizeSamples );
204 if(cellAccumulatedMG.m_ntrigger==1){
205 cellAccumulatedMG.m_sum.clear();
206 cellAccumulatedMG.m_sum2.clear();
207 cellAccumulatedMG.m_sum.resize(sizeSamples,0);
208 cellAccumulatedMG.m_sum2.resize(sizeSamples,0);
209 }
210 for(unsigned int j=0;j<sizeSamples;j++){
211 cellAccumulatedMG.m_sum[j] +=
digit->samples()[j];
212 cellAccumulatedMG.m_sum2[j] +=
digit->samples()[j]*
digit->samples()[j];
213 }
216 }
217
218
219
222 if (chid==959628800) std::cout <<
"---> in loop LG - DAC = " <<
digit->DAC() << std::endl;
223 cellAccumulatedLG.m_ntrigger++;
224 unsigned int sizeSamples =
digit->samples().size();
225 if(cellAccumulatedLG.m_ntrigger==1){
226 cellAccumulatedLG.m_sum.clear();
227 cellAccumulatedLG.m_sum2.clear();
228 cellAccumulatedLG.m_sum.resize(sizeSamples,0);
229 cellAccumulatedLG.m_sum2.resize(sizeSamples,0);
230 }
231 for(unsigned int j=0;j<sizeSamples;j++){
232 cellAccumulatedLG.m_sum[j] +=
digit->samples()[j];
233 cellAccumulatedLG.m_sum2[j] +=
digit->samples()[j]*
digit->samples()[j];
234 }
237 }
238
239
240
241 if( (cellAccumulatedHG.m_ntrigger+cellAccumulatedMG.m_ntrigger+cellAccumulatedLG.m_ntrigger)==nTriggerPerStep[febhash]){
243 ATH_MSG_DEBUG(
"chid = " << chid <<
", gain = " << gain <<
", DAC = " <<
digit->DAC() <<
", isPulsed = " <<
m_isPulsed <<
", delay = " <<
m_delay <<
", trigPerStep = " << nTriggerPerStep[febhash] <<
", istep = " << iStepTrigger[febhash] );
244 iStepTrigger[febhash]++;
245 unsigned int sizeSamples =
digit->samples().size();
246
247 if (cellAccumulatedHG.m_ntrigger>0) {
248 LArAccumulatedCalibDigit* accuCalibDigitHG;
249 std::vector < uint64_t > sampleSumHG;
250 std::vector < uint64_t > sample2SumHG;
251 sampleSumHG.resize(sizeSamples,0);
252 sample2SumHG.resize(sizeSamples,0);
253 accuCalibDigitHG =
new LArAccumulatedCalibDigit(chid, gain, sampleSumHG, sample2SumHG, 0, (uint16_t)
digit->DAC(), (uint16_t)
m_delay,
m_isPulsed, 0, 0);
254 accuCalibDigitHG->
setAddSubStep(cellAccumulatedHG.m_sum,cellAccumulatedHG.m_sum2,cellAccumulatedHG.m_ntrigger);
255 larAccuCalibDigitContainerHG->
push_back(accuCalibDigitHG);
256 }
257
258 if (cellAccumulatedMG.m_ntrigger>0) {
259 LArAccumulatedCalibDigit* accuCalibDigitMG;
260 std::vector < uint64_t > sampleSumMG;
261 std::vector < uint64_t > sample2SumMG;
262 sampleSumMG.resize(sizeSamples,0);
263 sample2SumMG.resize(sizeSamples,0);
264 accuCalibDigitMG =
new LArAccumulatedCalibDigit(chid, gain, sampleSumMG, sample2SumMG, 0, (uint16_t)
digit->DAC(), (uint16_t)
m_delay,
m_isPulsed, 0, 0);
265 accuCalibDigitMG->
setAddSubStep(cellAccumulatedMG.m_sum,cellAccumulatedMG.m_sum2,cellAccumulatedMG.m_ntrigger);
266 larAccuCalibDigitContainerMG->
push_back(accuCalibDigitMG);
267 }
268
269 if (cellAccumulatedLG.m_ntrigger>0) {
270 LArAccumulatedCalibDigit* accuCalibDigitLG;
271 std::vector < uint64_t > sampleSumLG;
272 std::vector < uint64_t > sample2SumLG;
273 sampleSumLG.resize(sizeSamples,0);
274 sample2SumLG.resize(sizeSamples,0);
275 accuCalibDigitLG =
new LArAccumulatedCalibDigit(chid, gain, sampleSumLG, sample2SumLG, 0, (uint16_t)
digit->DAC(), (uint16_t)
m_delay,
m_isPulsed, 0, 0);
276 accuCalibDigitLG->
setAddSubStep(cellAccumulatedLG.m_sum,cellAccumulatedLG.m_sum2,cellAccumulatedLG.m_ntrigger);
277 larAccuCalibDigitContainerLG->
push_back(accuCalibDigitLG);
278 }
279
280 cellAccumulatedHG.m_ntrigger = 0;
281 cellAccumulatedMG.m_ntrigger = 0;
282 cellAccumulatedLG.m_ntrigger = 0;
283 }
284
285
286
287 }
288
289
293
294 sc =
evtStore()->record(larAccuCalibDigitContainerHG,
"HIGH");
295 if (
sc!=StatusCode::SUCCESS)
296 ATH_MSG_WARNING(
"Unable to record LArAccumulatedCalibDigitContainer with key HIGH from DetectorStore. " );
297 else
298 ATH_MSG_DEBUG(
"Recorded succesfully LArAccumulatedCalibDigitContainer with key HIGH" );
299 sc =
evtStore()->setConst(larAccuCalibDigitContainerHG);
300 if (
sc.isFailure()) {
301 ATH_MSG_ERROR(
" Cannot lock LArAccumulatedCalibDigitContainerHG " );
302 delete larAccuCalibDigitContainerMG;
303 delete larAccuCalibDigitContainerLG;
304 return(StatusCode::FAILURE);
305 }
306
307 sc =
evtStore()->record(larAccuCalibDigitContainerMG,
"MEDIUM");
308 if (
sc!=StatusCode::SUCCESS)
309 ATH_MSG_WARNING(
"Unable to record LArAccumulatedCalibDigitContainer with key MEDIUM from DetectorStore. " );
310 else
311 ATH_MSG_DEBUG(
"Recorded succesfully LArAccumulatedCalibDigitContainer with key MEDIUM" );
312 sc =
evtStore()->setConst(larAccuCalibDigitContainerMG);
313 if (
sc.isFailure()) {
314 ATH_MSG_ERROR(
" Cannot lock LArAccumulatedCalibDigitContainerMG " );
315 delete larAccuCalibDigitContainerLG;
316 return(StatusCode::FAILURE);
317 }
318
319 sc =
evtStore()->record(larAccuCalibDigitContainerLG,
"LOW");
320 if (
sc!=StatusCode::SUCCESS)
321 ATH_MSG_WARNING(
"Unable to record LArAccumulatedCalibDigitContainer with key LOW from DetectorStore. " );
322 else
323 ATH_MSG_DEBUG(
"Recorded succesfully LArAccumulatedCalibDigitContainer with key LOW" );
324 sc =
evtStore()->setConst(larAccuCalibDigitContainerLG);
325 if (
sc.isFailure()) {
326 ATH_MSG_ERROR(
" Cannot lock LArAccumulatedCalibDigitContainerLG " );
327 return(StatusCode::FAILURE);
328 }
329 }
330 return StatusCode::SUCCESS;
331}
#define ATH_MSG_WARNING(x)
ServiceHandle< StoreGateSvc > & evtStore()
const ServiceHandle< StoreGateSvc > & detStore() const
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
void setDelayScale(const double scale)
set the delay Scale
bool setAddSubStep(const std::vector< uint64_t > &sampleSum, const std::vector< uint64_t > &sample2Sum, const uint32_t nTriggerPerStep)
Sum up with another substep.
Class of intermediate accumulations.
std::vector< LArAccumulated > m_AccumulatedHG
Stores number of triggers per intermediate step.
std::vector< LArAccumulated > m_AccumulatedMG
std::vector< LArAccumulated > m_AccumulatedLG
SG::ReadCondHandleKey< LArCalibLineMapping > m_calibMapKey
const std::vector< HWIdentifier > & calibSlotLine(const HWIdentifier id) const
unsigned NTrigger(const HWIdentifier calibModuleID) const
::StatusCode StatusCode
StatusCode definition for legacy code.