5 #include "Identifier/Identifier.h"
6 #include "eformat/Issue.h"
7 #include "eformat/SourceIdentifier.h"
16 using namespace nsw::STGTPSegments;
21 using namespace nsw::STGTPMMData;
22 using namespace nsw::STGTPStrips;
27 declareInterface<INSWTP_ROD_Decoder>(
this);
32 return StatusCode::SUCCESS;
42 return StatusCode::FAILURE;
49 return StatusCode::SUCCESS;
52 if (nsw_trigger_decoder.
get_elinks().size()==1) {
54 ATH_MSG_DEBUG(
"NSW sTGC TP Common Decoder found only one elink in output but inconsistent L1A version: something off with this fragment. Skipping.");
55 return StatusCode::SUCCESS;
57 }
else if (nsw_trigger_decoder.
get_elinks().size()!=3 && nsw_trigger_decoder.
get_elinks().size()!=5) {
59 ATH_MSG_DEBUG(
"NSW sTGC TP Common Decoder didn't give 3 or 5 elinks in output for: something off with this fragment. Skipping.");
60 return StatusCode::SUCCESS;
63 bool consistent =
true;
65 for(
const auto& baseLink: nsw_trigger_decoder.
get_elinks()) {
67 if (
l0->head_sectID() !=
l->head_sectID()) {consistent =
false;
break;}
68 if (
l0->L1ID() !=
l->L1ID()) {consistent =
false;
break;}
69 if (
l0->l1a_versionID() !=
l->l1a_versionID()) {consistent =
false;
break;}
70 if (
l0->l1a_req_BCID() !=
l->l1a_req_BCID()) {consistent =
false;
break;}
73 ATH_MSG_WARNING(
"NSW sTGC TP Common Decoder found inconsistent header parameters in the elinks: something off with this fragment. Skipping.");
74 return StatusCode::SUCCESS;
80 for(
const auto& baseLink: nsw_trigger_decoder.
get_elinks()){
83 const std::shared_ptr<Muon::nsw::NSWResourceId>& elinkID = link->
elinkId ();
90 rdo->set_moduleID(moduleID);
93 rdo->set_ROD_L1ID(fragment.rod_lvl1_id ());
94 rdo->set_sectID(link->head_sectID());
95 rdo->set_EC(link->head_EC());
96 rdo->set_BCID(link->head_BCID());
97 rdo->set_L1ID(link->L1ID());
98 rdo->set_window_open_bcid(link->l1a_open_BCID());
99 rdo->set_l1a_request_bcid(link->l1a_req_BCID());
100 rdo->set_window_close_bcid(link->l1a_close_BCID());
101 rdo->set_config_window_open_bcid_offset(link->l1a_open_BCID_offset());
102 rdo->set_config_l1a_request_bcid_offset(link->l1a_req_BCID_offset());
103 rdo->set_config_window_close_bcid_offset(link->l1a_close_BCID_offset());
106 const std::vector<STGTPPadPacket>& pad_packets = link->pad_packets();
107 for(
uint i_packetIndex = 0; i_packetIndex<pad_packets.size(); i_packetIndex++){
109 for(
uint i_candidateIndex=0; i_candidateIndex < 4; i_candidateIndex++){
111 uint8_t candidateNumber = (i_packetIndex<<4) | i_candidateIndex;
112 rdo->pad_candidateNumber().push_back(candidateNumber);
113 rdo->pad_phiID().push_back(pad_packet.
PhiID(i_candidateIndex));
114 rdo->pad_bandID().push_back(pad_packet.
BandID(i_candidateIndex));
116 rdo->pad_BCID().push_back(pad_packet.
BCID());
117 rdo->pad_idleFlag().push_back(pad_packet.
PadIdleFlag());
123 const std::vector<STGTPSegmentPacket>& segment_packets = link->segment_packet();
124 for(
uint i_packetIndex = 0; i_packetIndex<segment_packets.size(); i_packetIndex++){
141 uint8_t candidateNumber = (i_packetIndex<<4) | i_candidateIndex;
144 rdo->merge_segments().push_back(word);
145 rdo->merge_candidateNumber().push_back(candidateNumber);
149 rdo->merge_BCID_sectorID().push_back(merge_BCID_sectorID);
155 if (link->l1a_versionID() < 3){
156 return StatusCode::SUCCESS;
159 const std::vector<STGTPMMPacket>& mm_packets = link->mm_packet();
160 for(
uint i_packetIndex = 0; i_packetIndex<mm_packets.size(); i_packetIndex++){
161 const STGTPMMPacket& mm_packet = mm_packets.at(i_packetIndex);
177 uint8_t candidateNumber = (i_packetIndex<<4) | i_candidateIndex;
188 const std::vector<STGTPStripPacket>& strip_packets = link->strip_packet();
189 for(
uint i_packetIndex = 0; i_packetIndex < strip_packets.size(); i_packetIndex++){
193 for(std::size_t i_strip = 0; i_strip <
num_strips; ++i_strip) {
205 for(std::size_t i_offset = 0; i_offset <
num_offsets; ++i_offset) {
219 return StatusCode::SUCCESS;