CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Protected Attributes
RPCTwinMuxDigiToRaw Class Reference

#include <RPCTwinMuxDigiToRaw.h>

Inheritance diagram for RPCTwinMuxDigiToRaw:
edm::stream::EDProducer<>

Public Member Functions

void beginRun (edm::Run const &run, edm::EventSetup const &setup) override
 
void produce (edm::Event &event, edm::EventSetup const &setup) override
 
 RPCTwinMuxDigiToRaw (edm::ParameterSet const &config)
 
 ~RPCTwinMuxDigiToRaw () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descs)
 

Protected Attributes

int bx_max_
 
int bx_min_
 
edm::EDGetTokenT< RPCDigiCollectiondigi_token_
 
edm::ESGetToken< RPCInverseLBLinkMap, RPCInverseLBLinkMapRcdes_lb_link_map_token_
 
edm::ESGetToken< RPCAMCLinkMap, RPCTwinMuxLinkMapRcdes_tm_link_map_br_token_
 
edm::ESGetToken< RPCInverseAMCLinkMap, RPCInverseTwinMuxLinkMapRcdes_tm_link_map_token_
 
edm::ESWatcher< RPCTwinMuxLinkMapRcdes_tm_link_map_watcher_
 
int event_type_
 
std::map< int, std::vector< RPCAMCLink > > fed_amcs_
 
bool ignore_eod_
 
unsigned int ufov_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 29 of file RPCTwinMuxDigiToRaw.h.

Constructor & Destructor Documentation

◆ RPCTwinMuxDigiToRaw()

RPCTwinMuxDigiToRaw::RPCTwinMuxDigiToRaw ( edm::ParameterSet const &  config)

Definition at line 26 of file RPCTwinMuxDigiToRaw.cc.

27  : es_tm_link_map_br_token_(esConsumes<RPCAMCLinkMap, RPCTwinMuxLinkMapRcd, edm::Transition::BeginRun>()),
28  es_tm_link_map_token_(esConsumes<RPCInverseAMCLinkMap, RPCInverseTwinMuxLinkMapRcd>()),
29  es_lb_link_map_token_(esConsumes<RPCInverseLBLinkMap, RPCInverseLBLinkMapRcd>()),
30  bx_min_(config.getParameter<int>("bxMin")),
31  bx_max_(config.getParameter<int>("bxMax")),
32  ignore_eod_(config.getParameter<bool>("ignoreEOD")),
33  event_type_(config.getParameter<int>("eventType")),
34  ufov_(config.getParameter<unsigned int>("uFOV")) {
35  produces<FEDRawDataCollection>();
36  digi_token_ = consumes<RPCDigiCollection>(config.getParameter<edm::InputTag>("inputTag"));
37 }

References digi_token_.

◆ ~RPCTwinMuxDigiToRaw()

RPCTwinMuxDigiToRaw::~RPCTwinMuxDigiToRaw ( )
override

Definition at line 39 of file RPCTwinMuxDigiToRaw.cc.

39 {}

Member Function Documentation

◆ beginRun()

void RPCTwinMuxDigiToRaw::beginRun ( edm::Run const &  run,
edm::EventSetup const &  setup 
)
override

Definition at line 52 of file RPCTwinMuxDigiToRaw.cc.

52  {
55  fed_amcs_.clear();
56  for (auto const& tm_link : es_tm_link_map->getMap()) {
57  RPCAMCLink amc(tm_link.first);
58  amc.setAMCInput();
59  fed_amcs_[amc.getFED()].push_back(amc);
60  }
61  for (auto& fed_amcs : fed_amcs_) {
62  std::sort(fed_amcs.second.begin(), fed_amcs.second.end());
63  fed_amcs.second.erase(std::unique(fed_amcs.second.begin(), fed_amcs.second.end()), fed_amcs.second.end());
64  }
65  }
66 }

References amc, edm::ESWatcher< T >::check(), es_tm_link_map_br_token_, es_tm_link_map_watcher_, fed_amcs_, RPCAMCLinkMap::getMap(), singleTopDQM_cfi::setup, jetUpdater_cfi::sort, and tier0::unique().

◆ fillDescriptions()

void RPCTwinMuxDigiToRaw::fillDescriptions ( edm::ConfigurationDescriptions descs)
static

Definition at line 41 of file RPCTwinMuxDigiToRaw.cc.

41  {
43  desc.add<edm::InputTag>("inputTag", edm::InputTag("simMuonRPCDigis", ""));
44  desc.add<int>("bxMin", -2);
45  desc.add<int>("bxMax", 2);
46  desc.add<bool>("ignoreEOD", true);
47  desc.add<int>("eventType", 1);
48  desc.add<unsigned int>("uFOV", 1);
49  descs.add("RPCTwinMuxDigiToRaw", desc);
50 }

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, and HLT_FULL_cff::InputTag.

◆ produce()

void RPCTwinMuxDigiToRaw::produce ( edm::Event event,
edm::EventSetup const &  setup 
)
override

Definition at line 68 of file RPCTwinMuxDigiToRaw.cc.

68  {
69  // Get EventSetup Electronics Maps
72 
73  // Get Digi Collection
74  edm::Handle<RPCDigiCollection> digi_collection;
75  event.getByToken(digi_token_, digi_collection);
76 
77  // Create output
78  std::unique_ptr<FEDRawDataCollection> data_collection(new FEDRawDataCollection());
79 
80  std::map<RPCAMCLink, std::vector<std::pair<int, rpctwinmux::RPCRecord> > > amc_bx_tmrecord;
82  *es_tm_link_map_,
83  bx_min_,
84  bx_max_,
85  event.bunchCrossing(),
86  *digi_collection,
87  amc_bx_tmrecord,
88  ignore_eod_);
89 
90  std::map<int, FEDRawData> fed_data;
91  // Loop over the FEDs
92  for (std::pair<const int, std::vector<RPCAMCLink> > const& fed_amcs : fed_amcs_) {
93  FEDRawData& data = data_collection->FEDData(fed_amcs.first);
94  unsigned int size(0);
95 
96  // FED Header + BLOCK Header (1 word + 1 word)
97  data.resize((size + 2) * 8);
98  // FED Header
99  FEDHeader::set(data.data() + size * 8, event_type_, event.id().event(), event.bunchCrossing(), fed_amcs.first);
100  ++size;
101  // BLOCK Header
102  rpctwinmux::BlockHeader block_header(ufov_, fed_amcs.second.size(), event.eventAuxiliary().orbitNumber());
103  std::memcpy(data.data() + size * 8, &block_header.getRecord(), 8);
104  ++size;
105 
106  // BLOCK AMC Content - 1 word each
107  data.resize((size + fed_amcs.second.size()) * 8);
108  unsigned int block_content_size(0);
109  for (RPCAMCLink const& amc : fed_amcs.second) {
110  std::map<RPCAMCLink, std::vector<std::pair<int, rpctwinmux::RPCRecord> > >::const_iterator bx_tmrecord(
111  amc_bx_tmrecord.find(amc));
112  unsigned int block_amc_size(3 + 2 * (bx_tmrecord == amc_bx_tmrecord.end() ? 0 : bx_tmrecord->second.size()));
113  block_content_size += block_amc_size;
114  rpctwinmux::BlockAMCContent amc_content(
115  true, true, true, true, true, true, true, block_amc_size, 0, amc.getAMCNumber(), 0);
116  std::memcpy(data.data() + size * 8, &amc_content.getRecord(), 8);
117  ++size;
118  }
119 
120  // AMC Payload - 2 words header, 1 word trailer, 2 words per RPCRecord
121  data.resize((size + block_content_size) * 8);
122  for (RPCAMCLink const& amc : fed_amcs.second) {
123  // TwinMux Header
124  std::map<RPCAMCLink, std::vector<std::pair<int, rpctwinmux::RPCRecord> > >::const_iterator bx_tmrecord(
125  amc_bx_tmrecord.find(amc));
126  unsigned int block_amc_size(3 + 2 * (bx_tmrecord == amc_bx_tmrecord.end() ? 0 : bx_tmrecord->second.size()));
127 
128  rpctwinmux::TwinMuxHeader tm_header(amc.getAMCNumber(),
129  event.id().event(),
130  event.bunchCrossing(),
131  block_amc_size,
132  event.eventAuxiliary().orbitNumber(),
133  0);
134  tm_header.setRPCBXWindow(bx_min_, bx_min_);
135  std::memcpy(data.data() + size * 8, tm_header.getRecord(), 16);
136  size += 2;
137 
138  if (bx_tmrecord != amc_bx_tmrecord.end()) {
139  for (std::vector<std::pair<int, rpctwinmux::RPCRecord> >::const_iterator tmrecord = bx_tmrecord->second.begin();
140  tmrecord != bx_tmrecord->second.end();
141  ++tmrecord) {
142  std::memcpy(data.data() + size * 8, tmrecord->second.getRecord(), 16);
143  size += 2;
144  }
145  }
146 
147  rpctwinmux::TwinMuxTrailer tm_trailer(0x0, event.id().event(), 3 + 2 * block_amc_size);
148  std::memcpy(data.data() + size * 8, &tm_trailer.getRecord(), 8);
149  ++size;
150  // CRC32 not calculated (for now)
151  }
152 
153  // BLOCK Trailer + FED Trailer (1 word + 1 word)
154  data.resize((size + 2) * 8);
155  // BLOCK Trailer
156  rpctwinmux::BlockTrailer block_trailer(0x0, 0, event.id().event(), event.bunchCrossing());
157  std::memcpy(data.data() + size * 8, &block_trailer.getRecord(), 8);
158  ++size;
159  // CRC32 not calculated (for now)
160 
161  // FED Trailer
162  ++size;
163  FEDTrailer::set(data.data() + (size - 1) * 8, size, 0x0, 0, 0);
164  std::uint16_t crc(evf::compute_crc(data.data(), size * 8));
165  FEDTrailer::set(data.data() + (size - 1) * 8, size, crc, 0, 0);
166  }
167 
168  event.put(std::move(data_collection));
169 }

References bx_max_, bx_min_, evf::compute_crc(), data, digi_token_, es_lb_link_map_token_, es_tm_link_map_token_, event_type_, fed_amcs_, EcalFEDMonitor_cfi::FEDRawDataCollection, RPCTwinMuxPacker::getRPCTwinMuxRecords(), ignore_eod_, eostools::move(), FEDHeader::set(), FEDTrailer::set(), rpctwinmux::TwinMuxHeader::setRPCBXWindow(), singleTopDQM_cfi::setup, findQualityFiles::size, ufov_, and trackerHitRTTI::vector.

Member Data Documentation

◆ bx_max_

int RPCTwinMuxDigiToRaw::bx_max_
protected

Definition at line 44 of file RPCTwinMuxDigiToRaw.h.

Referenced by produce().

◆ bx_min_

int RPCTwinMuxDigiToRaw::bx_min_
protected

Definition at line 44 of file RPCTwinMuxDigiToRaw.h.

Referenced by produce().

◆ digi_token_

edm::EDGetTokenT<RPCDigiCollection> RPCTwinMuxDigiToRaw::digi_token_
protected

Definition at line 40 of file RPCTwinMuxDigiToRaw.h.

Referenced by produce(), and RPCTwinMuxDigiToRaw().

◆ es_lb_link_map_token_

edm::ESGetToken<RPCInverseLBLinkMap, RPCInverseLBLinkMapRcd> RPCTwinMuxDigiToRaw::es_lb_link_map_token_
protected

Definition at line 43 of file RPCTwinMuxDigiToRaw.h.

Referenced by produce().

◆ es_tm_link_map_br_token_

edm::ESGetToken<RPCAMCLinkMap, RPCTwinMuxLinkMapRcd> RPCTwinMuxDigiToRaw::es_tm_link_map_br_token_
protected

Definition at line 41 of file RPCTwinMuxDigiToRaw.h.

Referenced by beginRun().

◆ es_tm_link_map_token_

edm::ESGetToken<RPCInverseAMCLinkMap, RPCInverseTwinMuxLinkMapRcd> RPCTwinMuxDigiToRaw::es_tm_link_map_token_
protected

Definition at line 42 of file RPCTwinMuxDigiToRaw.h.

Referenced by produce().

◆ es_tm_link_map_watcher_

edm::ESWatcher<RPCTwinMuxLinkMapRcd> RPCTwinMuxDigiToRaw::es_tm_link_map_watcher_
protected

Definition at line 49 of file RPCTwinMuxDigiToRaw.h.

Referenced by beginRun().

◆ event_type_

int RPCTwinMuxDigiToRaw::event_type_
protected

Definition at line 46 of file RPCTwinMuxDigiToRaw.h.

Referenced by produce().

◆ fed_amcs_

std::map<int, std::vector<RPCAMCLink> > RPCTwinMuxDigiToRaw::fed_amcs_
protected

Definition at line 50 of file RPCTwinMuxDigiToRaw.h.

Referenced by beginRun(), and produce().

◆ ignore_eod_

bool RPCTwinMuxDigiToRaw::ignore_eod_
protected

Definition at line 45 of file RPCTwinMuxDigiToRaw.h.

Referenced by produce().

◆ ufov_

unsigned int RPCTwinMuxDigiToRaw::ufov_
protected

Definition at line 47 of file RPCTwinMuxDigiToRaw.h.

Referenced by produce().

RPCTwinMuxDigiToRaw::es_tm_link_map_br_token_
edm::ESGetToken< RPCAMCLinkMap, RPCTwinMuxLinkMapRcd > es_tm_link_map_br_token_
Definition: RPCTwinMuxDigiToRaw.h:41
RPCTwinMuxDigiToRaw::bx_min_
int bx_min_
Definition: RPCTwinMuxDigiToRaw.h:44
edm::ESWatcher::check
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
rpctwinmux::TwinMuxTrailer
Definition: RPCTwinMuxRecord.h:250
rpctwinmux::TwinMuxHeader
Definition: RPCTwinMuxRecord.h:170
RPCTwinMuxDigiToRaw::bx_max_
int bx_max_
Definition: RPCTwinMuxDigiToRaw.h:44
RPCTwinMuxDigiToRaw::fed_amcs_
std::map< int, std::vector< RPCAMCLink > > fed_amcs_
Definition: RPCTwinMuxDigiToRaw.h:50
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
RPCTwinMuxDigiToRaw::ignore_eod_
bool ignore_eod_
Definition: RPCTwinMuxDigiToRaw.h:45
edm::Handle< RPCDigiCollection >
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
RPCTwinMuxDigiToRaw::digi_token_
edm::EDGetTokenT< RPCDigiCollection > digi_token_
Definition: RPCTwinMuxDigiToRaw.h:40
FEDRawData
Definition: FEDRawData.h:19
RPCTwinMuxDigiToRaw::es_tm_link_map_watcher_
edm::ESWatcher< RPCTwinMuxLinkMapRcd > es_tm_link_map_watcher_
Definition: RPCTwinMuxDigiToRaw.h:49
RPCTwinMuxDigiToRaw::es_lb_link_map_token_
edm::ESGetToken< RPCInverseLBLinkMap, RPCInverseLBLinkMapRcd > es_lb_link_map_token_
Definition: RPCTwinMuxDigiToRaw.h:43
config
Definition: config.py:1
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
RPCTwinMuxDigiToRaw::event_type_
int event_type_
Definition: RPCTwinMuxDigiToRaw.h:46
RPCTwinMuxPacker::getRPCTwinMuxRecords
static void getRPCTwinMuxRecords(RPCInverseLBLinkMap const &lb_map, RPCInverseAMCLinkMap const &amc_map, int min_bx, int max_bx, unsigned int bcn, RPCDigiCollection const &digis, std::map< RPCAMCLink, std::vector< std::pair< int, rpctwinmux::RPCRecord > > > &amc_bx_tmrecord, bool ignore_eod=false)
Definition: RPCTwinMuxPacker.cc:6
edm::ESHandle< RPCAMCLinkMap >
EcalFEDMonitor_cfi.FEDRawDataCollection
FEDRawDataCollection
Definition: EcalFEDMonitor_cfi.py:6
evf::compute_crc
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
Definition: CRC16.h:46
rpctwinmux::TwinMuxHeader::setRPCBXWindow
void setRPCBXWindow(int bx_min=10, int bx_max=5)
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
rpctwinmux::BlockTrailer
Definition: RPCTwinMuxRecord.h:69
FEDTrailer::set
static void set(unsigned char *trailer, uint32_t lenght, uint16_t crc, uint8_t evt_stat, uint8_t tts, bool moreTrailers=false)
Set all fields in the trailer.
Definition: FEDTrailer.cc:31
RPCTwinMuxDigiToRaw::es_tm_link_map_token_
edm::ESGetToken< RPCInverseAMCLinkMap, RPCInverseTwinMuxLinkMapRcd > es_tm_link_map_token_
Definition: RPCTwinMuxDigiToRaw.h:42
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
tier0.unique
def unique(seq, keepstr=True)
Definition: tier0.py:24
FEDHeader::set
static void set(unsigned char *header, uint8_t triggerType, uint32_t lvl1ID, uint16_t bxID, uint16_t sourceID, uint8_t version=0, bool moreHeaders=false)
Set all fields in the header.
Definition: FEDHeader.cc:25
amc
Definition: AMCSpec.h:8
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
rpctwinmux::BlockAMCContent
Definition: RPCTwinMuxRecord.h:104
RPCAMCLinkMap::getMap
map_type & getMap()
Definition: RPCAMCLinkMap.h:27
amc
double amc
Definition: hdecay.h:20
event
Definition: event.py:1
RPCTwinMuxDigiToRaw::ufov_
unsigned int ufov_
Definition: RPCTwinMuxDigiToRaw.h:47
edm::InputTag
Definition: InputTag.h:15
rpctwinmux::BlockHeader
Definition: RPCTwinMuxRecord.h:38
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443