258{
259 auto payload = std::make_unique<EMECHVData::Payload>();
260
262 payload->m_payloadArray.reserve(2*7*8*4*24);
263 for (
unsigned int i=0;
i<10752;
i++) {
266 }
267 }
269 payload->m_payloadArray.reserve(2*2*8*8*4);
270 for (
unsigned int i=0;
i<1024;
i++) {
273 }
274 }
275
276 for (const CondAttrListCollection* atrlistcol : attrLists) {
277
279
280
281 unsigned int chanID = (*citr).first;
282 int cannode = chanID/1000;
283 int line = chanID%1000;
284
285
286 HWIdentifier
id =
m_c->hvId->HVLineId(1,1,cannode,line);
287
288
289 const std::vector<HWIdentifier>& electrodeIdVec = idfunc(id);
290
291 for(
size_t i=0;
i<electrodeIdVec.size();
i++) {
292 HWIdentifier elecHWID = electrodeIdVec[
i];
293
295
296 if (detector==2) {
297
298
299 unsigned int etaIndex=
m_c->elecId->hv_eta(elecHWID);
300
302
303 unsigned int sideIndex=1-
m_c->elecId->zside(elecHWID);
304 unsigned int phiIndex=
m_c->elecId->module(elecHWID);
305
306 if (sideIndex==0) {
309 }
310 unsigned int sectorIndex=
m_c->elecId->hv_phi(elecHWID)-1;
311
312 if (sideIndex==0) {
314 else sectorIndex=7-sectorIndex;
315 }
317 m_c->elecId->electrode(elecHWID)%24:
318 m_c->elecId->electrode(elecHWID)%4;
319
320 if (sideIndex==0) {
322 else electrodeIndex=3-electrodeIndex;
323 }
324
326 5376*sideIndex+768*etaIndex+96*
phiIndex+24*sectorIndex+electrodeIndex:
327 512*sideIndex+256*(etaIndex-7)+32*phiIndex+4*sectorIndex+electrodeIndex;
328
331 msg << MSG::ERROR <<
"invalid index outer " <<
index <<
" side,eta,phi,sector,electrode " << sideIndex <<
" " << etaIndex <<
" " <<
phiIndex <<
332 " " << sectorIndex <<
" " << electrodeIndex <<
endmsg;
333 continue;
334 }
337 msg << MSG::ERROR <<
"invalid index inner " <<
index <<
" side,eta,phi,sector,electrode " << sideIndex <<
" " << etaIndex <<
" " <<
phiIndex <<
338 " " << sectorIndex <<
" " << electrodeIndex <<
endmsg;
339 continue;
340 }
341
342 unsigned int gapIndex=
m_c->elecId->gap(elecHWID);
343 if (gapIndex>1) {
345 msg << MSG::ERROR <<
"invalid gapIndex " << gapIndex <<
endmsg;
346 continue;
347 }
348 if (sideIndex==0) gapIndex=1-gapIndex;
349
351 if (!((*citr).second)[
"R_VMEAS"].isNull()) voltage = ((*citr).second)[
"R_VMEAS"].
data<float>();
353 if (!((*citr).second)[
"R_IMEAS"].isNull())
current = ((*citr).second)[
"R_IMEAS"].
data<float>();
354
355
356 payload->m_payloadArray[
index].voltage[gapIndex]=voltage;
358 payload->m_payloadArray[
index].hvLineNo[gapIndex]=chanID;
359 }
360 }
361 }
362 }
363 }
364
365 return {std::move (payload)};
366}
char data[hepevt_bytes_allocation_ATLAS]
ChanAttrListMap::const_iterator const_iterator
static constexpr double INVALID
IMessageSvc * getMessageSvc(bool quiet=false)
unsigned int phiIndex(float phi, float binsize)
calculate phi index for a given phi