9 #include "GaudiKernel/MsgStream.h"
14 OfflineOnlineMap::const_iterator
it =
m_RDOmap.find(compactID);
17 if (!
index)
return false;
22 if (hashID >=
m_HashVec.size())
return false;
24 if (!
index)
return false;
30 OfflineOnlineMap::const_iterator
it =
m_RDOmap.find(compactID);
33 if (!
index)
return false;
38 if (hashID >=
m_HashVec.size())
return false;
40 if (!
index)
return false;
46 OfflineOnlineMap::const_iterator
it =
m_RDOmap.find(compactID);
49 if (!
index)
return false;
54 if (hashID >=
m_HashVec.size())
return false;
56 if (!
index)
return false;
62 OfflineOnlineMap::const_iterator
it =
m_RDOmap.find(compactID);
65 if (!
index)
return false;
70 if (hashID >=
m_HashVec.size())
return false;
72 if (!
index)
return false;
78 OfflineOnlineMap::const_iterator
it =
m_RDOmap.find(compactID);
81 if (!
index)
return false;
86 if (hashID >=
m_HashVec.size())
return false;
88 if (!
index)
return false;
94 OfflineOnlineMap::const_iterator
it =
m_RDOmap.find(compactID);
97 if (!
index)
return false;
102 if (hashID >=
m_HashVec.size())
return false;
104 if (!
index)
return false;
120 std::map<Identifier, int>::const_iterator
it =
m_lookup.find(
id);
121 if (
it !=
m_lookup.end()) {
return (*it).second; }
132 if ((subsystem_id != 0x66 && subsystem_id != 0x65) || (rod_id >= 16))
return std::vector<IdentifierHash>();
133 return m_rod2hash[(subsystem_id == 0x66) ? 0 : 1][rod_id];
137 unsigned short int side;
138 unsigned short int RODid;
142 return (sub << 16) |
rod;
149 unsigned int hash = (
unsigned int)rdoHashId;
151 if (
hash >=
m_HashVec.size()) {
return StatusCode::FAILURE; }
156 robId = (
side << 16) | rob_id;
169 robIdVec.push_back(robid);
173 std::sort(robIdVec.begin(), robIdVec.end());
174 robIdVec.erase(unique(robIdVec.begin(), robIdVec.end()), robIdVec.end());
180 const int cabling_code)
const {
187 int doubletZ,
int doubletPhi,
int gasGap,
int measuresPhi,
int strip)
const {
188 unsigned long int code = 0;
190 unsigned long int etaPhiView = 2;
193 int logicSector = (phi1_16 - 1) * 2 +
doubletPhi - 2;
194 if (logicSector < 0) logicSector = 31;
195 if (measuresPhi > 0) etaPhiView = 1;
198 unsigned long int cabStat =
doubletR;
200 cabStat = 2 + cabStat;
201 if (cabStat > 3) cabStat = 2;
207 if (
stationName.substr(0,3)==
"BIS" && logicSector>31) logicSector+=1;
209 if (logicSector < 0 || logicSector > 63) {
return 999999; }
212 if (zIndexInCablingStation > 99)
return 0;
213 int cablingStation = cabStat;
215 unsigned long int gg =
gasGap - 1;
222 int zIndexInCablingStation,
int strip) {
223 unsigned long int code = 0;
224 code = etaPhiView * 100000000 + logicSector * 1000000 + cablingStation * 100000 +
gasGap * 10000 + zIndexInCablingStation * 100 +
241 int doubletR,
int doubletZ,
int cabStat)
const {
242 unsigned int zIndexInCablingStation = 999;
243 int cablingStation = -1;
246 if (sectType < 1 || sectType >
m_MaxType + 1) {
return 99999; }
249 for (
unsigned int jStat = 1; jStat < 4; ++jStat) {
250 if (cablingStation != -1)
break;
251 for (
unsigned int jCham = 0; jCham < 20; ++jCham) {
253 if (rpcC ==
nullptr)
continue;
258 if (rpcC->
doubletZ() != doubletZ) {
continue; }
259 cablingStation = jStat;
260 zIndexInCablingStation = jCham;
264 if (cablingStation < 1 || cablingStation > 3 || (cabStat != cablingStation)) {
return 99999; }
265 if (zIndexInCablingStation > 19) {
return 99999; }
267 return zIndexInCablingStation;
271 unsigned short int PADId,
unsigned short int CMAId,
unsigned short ijk,
273 std::list<unsigned int> CodeList;
275 int logic_sector = SectorId + SubsystemId * 32;
276 unsigned short int Ixx = CMAId & 1;
277 unsigned short int ep = (CMAId >> 1) & 1;
278 unsigned short int lh = (CMAId >> 2) & 1;
280 ep = (ep == 1) ? 0 : 1;
289 CodeList =
s.give_strip_code(
PHI, logic_sector,
lh, ijk,
Channel);
292 CodeList =
s.give_strip_code(
ETA, logic_sector,
lh, ijk,
Channel);
295 std::list<RPCofflineId> offlineIdList;
296 std::list<unsigned int>::const_iterator
it = CodeList.begin();
297 while (
it != CodeList.end()) {
301 int RPC_strip =
decode.strip_number();
302 int RPC_chamber =
decode.rpc_z_index();
303 int RPC_layer =
decode.rpc_layer();
304 int RPC_station =
decode.lvl1_station();
305 int sector = (
decode.logic_sector()) % 32;
311 rpcId.
stationPhi = (sector == 31) ? 1 : (sector + 1) / 4 + 1;
315 rpcId.
gasGap = RPC_layer + 1;
317 rpcId.
strip = RPC_strip + 1;
319 offlineIdList.push_back(std::move(rpcId));
324 std::list<Identifier>
ids;
325 std::list<RPCofflineId>::const_iterator
iterator = offlineIdList.begin();
326 while (
iterator != offlineIdList.end()) {
328 rpcId->
channelID((*iterator).stationName, (*iterator).stationEta, (*iterator).stationPhi, (*iterator).doubletR,
329 (*iterator).doubletZ, (*iterator).doubletPhi, (*iterator).gasGap, (*iterator).measuresPhi, (*iterator).strip);
346 for (
IdentifierHash rdoId : (*it).second) rdoHashVec.push_back(rdoId);
352 std::vector<IdentifierHash>& rdoHashVec)
const {
356 std::set<IdentifierHash> requestedRdoHashSet;
363 requestedRdoHashSet.insert((*it).second.begin(), (*it).second.end());
367 for (
IdentifierHash rdoHashId : requestedRdoHashSet) { rdoHashVec.push_back(rdoHashId); }
376 std::set<IdentifierHash> requestedRdoHashSet;
383 requestedRdoHashSet.insert((*it).second.begin(), (*it).second.end());
387 for (
IdentifierHash rdoHashId : requestedRdoHashSet) { rdoHashVec.push_back(rdoHashId); }
401 for (
uint32_t robId : (*it).second) robIdVec.push_back(robId);
407 unsigned short int& cma_mask,
unsigned short int& feet_th0,
unsigned short int& feet_th1,
408 unsigned short int& feet_th2)
const {
422 unsigned int& padIdHash)
const {
423 unsigned short int PADId = (RoIId) / 4;
425 int key = SubsystemId * 10000 + SectorId * 100 + PADId;
429 if (
it ==
m_RDOs.end())
return false;
434 padIdHash =
index.hash();
442 unsigned int EtaLowBorder = 0;
443 unsigned int EtaHighBorder = 0;
444 unsigned int PhiLowBorder = 0;
445 unsigned int PhiHighBorder = 0;
446 bool ok =
give_RoI_borders(SubsystemId, SectorId, RoIId, EtaLowBorder, EtaHighBorder, PhiLowBorder, PhiHighBorder);
458 unsigned int& EtaLowBorder,
unsigned int& EtaHighBorder,
unsigned int& PhiLowBorder,
459 unsigned int& PhiHighBorder)
const {
460 int logic_sector = SectorId + SubsystemId * 32;
461 int PadId = (RoIId) / 4;
462 int PadRoI = (RoIId) % 4;
463 int PhiIxx = PadRoI / 2;
464 int EtaIxx = PadRoI % 2;
473 if (!
s.give_RoI_borders(
ETA,
PHI, EtaLowBorder, EtaHighBorder, PhiLowBorder, PhiHighBorder)) {
475 if (
log.level() <= MSG::WARNING)
477 <<
"give_RoI_borders() - failed to call give_RoI_borders() on SectorLogicSetup, borders not set, return false..." <<
endmsg;
481 EtaLowBorder += logic_sector * 1000000;
482 EtaHighBorder += logic_sector * 1000000;
483 PhiLowBorder += logic_sector * 1000000;
484 PhiHighBorder += logic_sector * 1000000;
493 if (rpc_strip.
strip > 48) rpc_strip.
strip = 48;
498 if (rpc_strip.
strip > 36) rpc_strip.
strip = 36;
509 if (!
decode) {
return rpcId; }
510 int RPC_logic_sector =
decode.logic_sector();
511 int RPC_strip =
decode.strip_number();
512 int RPC_chamber =
decode.rpc_z_index();
513 int RPC_layer =
decode.rpc_layer();
514 int RPC_station =
decode.lvl1_station();
515 int sector = (
decode.logic_sector()) % 32;
524 rpcId.
stationPhi = (sector == 31) ? 1 : (sector + 1) / 4 + 1;
528 rpcId.
gasGap = RPC_layer + 1;
530 rpcId.
strip = RPC_strip + 1;
536 unsigned int& EtaLowBorder,
unsigned int& EtaHighBorder,
unsigned int& PhiLowBorder,
537 unsigned int& PhiHighBorder)
const {
538 int logic_sector = SectorId + SubsystemId * 32;
539 int PadId = (RoIId) / 4;
540 int PadRoI = (RoIId) % 4;
541 int PhiIxx = PadRoI / 2;
542 int EtaIxx = PadRoI % 2;
551 if (!
s.give_LowPt_borders(
ETA,
PHI, EtaLowBorder, EtaHighBorder, PhiLowBorder, PhiHighBorder)) {
566 if (EtaLowBorder == 0 || EtaHighBorder == 0 || PhiLowBorder == 0 || PhiHighBorder == 0)
return false;
568 EtaLowBorder += logic_sector * 1000000;
569 EtaHighBorder += logic_sector * 1000000;
570 PhiLowBorder += logic_sector * 1000000;
571 PhiHighBorder += logic_sector * 1000000;
579 unsigned int EtaLowBorder = 0;
580 unsigned int EtaHighBorder = 0;
581 unsigned int PhiLowBorder = 0;
582 unsigned int PhiHighBorder = 0;
583 bool ok =
give_LowPt_borders(SubsystemId, SectorId, RoIId, EtaLowBorder, EtaHighBorder, PhiLowBorder, PhiHighBorder);
594 unsigned int& EtaLowBorder,
unsigned int& EtaHighBorder,
unsigned int& PhiLowBorder,
595 unsigned int& PhiHighBorder)
const {
596 int logic_sector = SectorId + SubsystemId * 32;
597 int PadId = (RoIId) / 4;
598 int PadRoI = (RoIId) % 4;
599 int PhiIxx = PadRoI / 2;
600 int EtaIxx = PadRoI % 2;
609 if (!
s.give_HighPt_borders(
ETA,
PHI, EtaLowBorder, EtaHighBorder, PhiLowBorder, PhiHighBorder)) {
624 if (EtaLowBorder == 0 || EtaHighBorder == 0 || PhiLowBorder == 0 || PhiHighBorder == 0)
return false;
626 EtaLowBorder += logic_sector * 1000000;
627 EtaHighBorder += logic_sector * 1000000;
628 PhiLowBorder += logic_sector * 1000000;
629 PhiHighBorder += logic_sector * 1000000;
637 unsigned int EtaLowBorder = 0;
638 unsigned int EtaHighBorder = 0;
639 unsigned int PhiLowBorder = 0;
640 unsigned int PhiHighBorder = 0;
641 bool ok =
give_HighPt_borders(SubsystemId, SectorId, RoIId, EtaLowBorder, EtaHighBorder, PhiLowBorder, PhiHighBorder);
660 if (
side >= 2)
return false;
661 if (sector >= 32)
return false;
662 if (padId >= 10)
return false;