21 fill_counters_(config.getParameter<bool>(
"fillAMCCounters")),
22 bx_min_(config.getParameter<int>(
"bxMin")),
23 bx_max_(config.getParameter<int>(
"bxMax")),
24 es_cppf_link_map_br_token_(
39 for (
auto const& cppf_link : link_map->getMap()) {
40 feds.insert(cppf_link.first.getFED());
42 feds_.assign(feds.begin(), feds.end());
48 std::map<RPCAMCLink, rpcamc13::AMCPayload>
const& amc_payload) {
53 std::set<std::pair<RPCDetId, RPCDigi> > rpc_digis;
57 for (std::pair<RPCAMCLink const, rpcamc13::AMCPayload>
const&
payload : amc_payload) {
62 std::sort(rpc_cppf_digis->begin(), rpc_cppf_digis->end());
65 event.put(
std::move(counters),
"RPCAMCUnpacker");
72 std::set<std::pair<RPCDetId, RPCDigi> >& rpc_digis,
74 LogDebug(
"RPCCPPFRawToDigi") <<
"RPCCPPF " << link <<
", size " << payload.
getData().size();
80 std::vector<std::uint64_t>::const_iterator
word(payload.
getData().begin());
86 std::vector<std::uint64_t>::const_iterator word_end(payload.
getData().end());
88 unsigned int bx_counter(header.getBXCounter());
89 unsigned int bx_counter_mod(bx_counter % 27);
94 unsigned int pos(0), length(0);
95 unsigned int caption_id(0);
96 bool zs_per_bx(
false), have_bx_header(
false);
97 unsigned int bx_words(0);
98 unsigned int block_id(0);
99 std::uint32_t records[2];
101 records[0] = *
word & 0xffffffff;
102 records[1] = (*
word >> 32) & 0xffffffff;
107 <<
" caption id " << block_header.
getCaptionId() <<
" zs per bx "
115 have_bx_header =
false;
117 block_id = block_header.
getId();
118 }
else if (zs_per_bx && !have_bx_header) {
120 have_bx_header =
true;
122 if (caption_id == 0x01) {
124 }
else if (caption_id == 0x02) {
137 unsigned int bx_counter_mod,
140 std::set<std::pair<RPCDetId, RPCDigi> >& rpc_digis,
144 unsigned int fed(link.
getFED());
148 int bx_offset = (int)(record.
getBXCounterMod() + 31 - bx_counter_mod) % 27 - 4;
154 LogDebug(
"RPCCPPFRawToDigi") <<
"Link in error for " <<
link;
160 LogDebug(
"RPCCPPFRawToDigi") <<
"Link without acknowledge for " <<
link;
170 LogDebug(
"RPCCPPFRawToDigi") <<
"RPC BX " << bx <<
" for offset " << bx_offset;
176 RPCAMCLinkMap::map_type::const_iterator link_it =
es_cppf_link_map_->getMap().find(link);
181 LogDebug(
"RPCCPPFRawToDigi") <<
"Skipping unknown RPCCPPFLink " <<
link;
191 LogDebug(
"RPCCPPFRawToDigi") <<
"Skipping invalid LinkBoard " << record.
getLinkBoard() <<
" for record " << link
201 LogDebug(
"RPCCPPFRawToDigi") <<
"Skipping invalid Connector " << record.
getConnector() <<
" for record " << link
203 <<
") from " <<
link;
210 RPCLBLinkMap::map_type::const_iterator lb_link_it =
es_lb_link_map_->getMap().find(lb_link);
215 LogDebug(
"RPCCPPFRawToDigi") <<
"Could not find " << lb_link <<
" for record " << link <<
" (" << std::hex
220 if (bx < bx_min || bx > bx_max) {
230 unsigned int channel_offset(record.
getPartition() ? 9 : 1);
232 for (
unsigned int channel = 0; channel < 8; ++channel) {
233 if (
data & (0x1 << channel)) {
234 unsigned int strip(feb_connector.
getStrip(channel + channel_offset));
236 rpc_digis.insert(std::pair<RPCDetId, RPCDigi>(det_id,
RPCDigi(
strip, bx)));
237 LogDebug(
"RPCCPPFRawToDigi") <<
"RPCDigi " << det_id.rawId() <<
", " <<
strip <<
", " <<
bx;
256 static int const ring[6] = {2, 2, 2, 3, 2, 3};
257 static int const station[6] = {1, 2, 3, 3, 4, 4};
259 unsigned int endcap_sector((35 + (link.
getAMCNumber() - (
region > 0 ? 3 : 7)) * 9 + (block >> 1)) % 36 + 1);
265 (endcap_sector / 6) + 1
269 (endcap_sector - 1) % 6 + 1
284 std::vector<RPCDigi> local_rpc_digis;
285 for (std::pair<RPCDetId, RPCDigi>
const& rpc_digi : rpc_digis) {
286 LogDebug(
"RPCCPPFRawToDigi") <<
"RPCDigi " << rpc_digi.first.rawId() <<
", " << rpc_digi.second.strip() <<
", "
287 << rpc_digi.second.bx();
288 if (rpc_digi.first != rpc_det_id) {
289 if (!local_rpc_digis.empty()) {
291 local_rpc_digis.clear();
293 rpc_det_id = rpc_digi.first;
295 local_rpc_digis.push_back(rpc_digi.second);
297 if (!local_rpc_digis.empty()) {
301 event.put(
std::move(rpc_digi_collection));
void produce(edm::Event &event, edm::EventSetup const &setup, std::map< RPCAMCLink, rpcamc13::AMCPayload > const &amc_payload) override
unsigned int getDelay() const
unsigned int getStrip(unsigned int channel) const
edm::ESHandle< RPCLBLinkMap > es_lb_link_map_
std::uint8_t getPartitionData() const
static unsigned int const input_connector_not_used_
bool isValid(unsigned int index) const
edm::ESHandle< RPCAMCLinkMap > es_cppf_link_map_
ProductRegistryHelper::BranchAliasSetterT< ProductType > produces()
unsigned int getBXCounterMod() const
bool processCPPF(RPCAMCLink const &link, rpcamc13::AMCPayload const &payload, RPCAMCLinkCounters &counters, std::set< std::pair< RPCDetId, RPCDigi > > &rpc_digis, l1t::CPPFDigiCollection &rpc_cppf_digis) const
static int const max_connector_
static unsigned int const input_link_error_
std::uint32_t const & getRecord() const
RPCAMCLink & setAMCInput(int amcinput=wildcard_)
static unsigned int const input_lb_invalid_
unsigned int getPartition() const
RPCLBLink & setConnector(int connector=wildcard_)
edm::ESGetToken< RPCAMCLinkMap, RPCCPPFLinkMapRcd > es_cppf_link_map_br_token_
std::vector< std::uint64_t > const & getData() const
void beginRun(edm::Run const &run, edm::EventSetup const &setup) override
static unsigned int const amc_link_invalid_
void processRXRecord(RPCAMCLink link, unsigned int bx_counter_mod, rpccppf::RXRecord const &record, RPCAMCLinkCounters &counters, std::set< std::pair< RPCDetId, RPCDigi > > &rpc_digis, int bx_min, int bx_max) const
unsigned int getConnector() const
caConstants::TupleMultiplicity const CAHitNtupletGeneratorKernelsGPU::HitToTuple const cms::cuda::AtomicPairCounter GPUCACell const *__restrict__ uint32_t const *__restrict__ gpuPixelDoublets::CellNeighborsVector const gpuPixelDoublets::CellTracksVector const GPUCACell::OuterHitOfCell const int32_t uint32_t CAHitNtupletGeneratorKernelsGPU::Counters * counters
MuonDigiCollection< RPCDetId, RPCDigi > RPCDigiCollection
unsigned int getPhi(unsigned int index) const
unsigned int getTheta(unsigned int index) const
edm::ESWatcher< RPCCPPFLinkMapRcd > es_cppf_link_map_watcher_
edm::ESGetToken< RPCLBLinkMap, RPCLBLinkMapRcd > es_lb_link_map_token_
static unsigned int const input_event_
void add(unsigned int event, RPCAMCLink const &link, unsigned int count=1)
static unsigned int const input_link_ack_fail_
void putRPCDigis(edm::Event &event, std::set< std::pair< RPCDetId, RPCDigi > > const &digis) const
std::pair< const_iterator, const_iterator > Range
RPCCPPFUnpacker(edm::ParameterSet const &, edm::ConsumesCollector, edm::ProducesCollector)
bool check(const edm::EventSetup &iSetup)
tuple config
parse the configuration file
char data[epos_bytes_allocation]
edm::ESGetToken< RPCAMCLinkMap, RPCCPPFLinkMapRcd > es_cppf_link_map_token_
unsigned int getLink() const
#define DEFINE_EDM_PLUGIN(factory, type, name)
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
RPCLBLink & setLinkBoard(int linkboard=wildcard_)
unsigned int getLinkBoard() const
bool isAcknowledge() const
std::vector< CPPFDigi > CPPFDigiCollection
void processTXRecord(RPCAMCLink link, unsigned int block, unsigned int word, rpccppf::TXRecord const &record, l1t::CPPFDigiCollection &rpc_cppf_digis) const
RPCDetId getRPCDetId() const
static int const max_linkboard_
static unsigned int const input_eod_
static unsigned int const input_connector_invalid_