CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
l1t::L1TRawToDigi Class Reference
Inheritance diagram for l1t::L1TRawToDigi:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 L1TRawToDigi (const edm::ParameterSet &)
 
 ~L1TRawToDigi ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (std::string const &iProcessName, std::string const &iModuleLabel, bool iPrint, std::vector< char const * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

virtual void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
virtual void beginRun (edm::Run const &, edm::EventSetup const &) override
 
virtual void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
virtual void endRun (edm::Run const &, edm::EventSetup const &) override
 
virtual void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

int amc13HeaderSize_
 
int amc13TrailerSize_
 
int amcHeaderSize_
 
int amcTrailerSize_
 
bool ctp7_mode_
 
bool debug_
 
edm::EDGetTokenT
< FEDRawDataCollection
fedData_
 
std::vector< int > fedIds_
 
unsigned int fwId_
 
bool fwOverride_
 
unsigned int minFeds_
 
bool mtf7_mode_
 
std::auto_ptr< PackingSetupprov_
 
int slinkHeaderSize_
 
int slinkTrailerSize_
 
int warnsa_
 
int warnsb_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 42 of file L1TRawToDigi.cc.

Constructor & Destructor Documentation

L1TRawToDigi::L1TRawToDigi ( const edm::ParameterSet config)
explicit

Definition at line 88 of file L1TRawToDigi.cc.

References amc13HeaderSize_, amc13TrailerSize_, amcHeaderSize_, amcTrailerSize_, ctp7_mode_, debug_, Exception, fedData_, l1t::PackingSetupFactory::get(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), l1t::PackingSetupFactory::make(), mtf7_mode_, prov_, slinkHeaderSize_, slinkTrailerSize_, AlCaHLTBitMon_QueryRunRegistry::string, warnsa_, and warnsb_.

88  :
89  fedIds_(config.getParameter<std::vector<int>>("FedIds")),
90  minFeds_(config.getParameter<unsigned int>("MinFeds")),
91  fwId_(config.getParameter<unsigned int>("FWId")),
92  fwOverride_(config.getParameter<bool>("FWOverride")),
93  ctp7_mode_(config.getUntrackedParameter<bool>("CTP7")),
94  mtf7_mode_(config.getUntrackedParameter<bool>("MTF7"))
95  {
96  fedData_ = consumes<FEDRawDataCollection>(config.getParameter<edm::InputTag>("InputLabel"));
97 
98  if (ctp7_mode_ and mtf7_mode_) {
99  throw cms::Exception("L1TRawToDigi") << "Can only use one unpacking mode concurrently!";
100  }
101 
103  prov_->registerProducts(*this);
104 
105  slinkHeaderSize_ = config.getUntrackedParameter<int>("lenSlinkHeader");
106  slinkTrailerSize_ = config.getUntrackedParameter<int>("lenSlinkTrailer");
107  amcHeaderSize_ = config.getUntrackedParameter<int>("lenAMCHeader");
108  amcTrailerSize_ = config.getUntrackedParameter<int>("lenAMCTrailer");
109  amc13HeaderSize_ = config.getUntrackedParameter<int>("lenAMC13Header");
110  amc13TrailerSize_ = config.getUntrackedParameter<int>("lenAMC13Trailer");
111 
112  debug_ = config.getUntrackedParameter<bool>("debug");
113  warnsa_ = 0;
114  warnsb_ = 0;
115  }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::auto_ptr< PackingSetup > prov_
Definition: L1TRawToDigi.cc:64
std::auto_ptr< PackingSetup > make(const std::string &) const
Definition: PackingSetup.cc:12
std::vector< int > fedIds_
Definition: L1TRawToDigi.cc:59
unsigned int fwId_
Definition: L1TRawToDigi.cc:61
static const PackingSetupFactory * get()
Definition: PackingSetup.h:52
unsigned int minFeds_
Definition: L1TRawToDigi.cc:60
edm::EDGetTokenT< FEDRawDataCollection > fedData_
Definition: L1TRawToDigi.cc:55
L1TRawToDigi::~L1TRawToDigi ( )

Definition at line 118 of file L1TRawToDigi.cc.

119  {
120  }

Member Function Documentation

virtual void l1t::L1TRawToDigi::beginLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
inlineoverrideprivatevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 54 of file L1TRawToDigi.cc.

54 {};
virtual void l1t::L1TRawToDigi::beginRun ( edm::Run const &  ,
edm::EventSetup const &   
)
inlineoverrideprivatevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 52 of file L1TRawToDigi.cc.

52 {};
virtual void l1t::L1TRawToDigi::endLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
inlineoverrideprivatevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 55 of file L1TRawToDigi.cc.

55 {};
virtual void l1t::L1TRawToDigi::endRun ( edm::Run const &  ,
edm::EventSetup const &   
)
inlineoverrideprivatevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 53 of file L1TRawToDigi.cc.

53 {};
void L1TRawToDigi::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 285 of file L1TRawToDigi.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addUntracked(), HLT_25ns10e33_v2_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

285  {
287  // These parameters are part of the L1T/HLT interface, avoid changing if possible:
288  desc.add<std::vector<int>>("FedIds", {})->setComment("required parameter: default value is invalid");
289  desc.add<std::string>("Setup", "")->setComment("required parameter: default value is invalid");
290  // These parameters have well defined default values and are not currently
291  // part of the L1T/HLT interface. They can be cleaned up or updated at will:
292  desc.add<unsigned int>("FWId",0)->setComment("Ignored unless FWOverride is true. Calo Stage1: 32 bits: if the first eight bits are 0xff, will read the 74x MC format.\n");
293  desc.add<bool>("FWOverride", false)->setComment("Firmware version should be taken as FWId parameters");
294  desc.addUntracked<bool>("CTP7", false);
295  desc.addUntracked<bool>("MTF7", false);
296  desc.add<edm::InputTag>("InputLabel",edm::InputTag("rawDataCollector"));
297  desc.addUntracked<int>("lenSlinkHeader", 8);
298  desc.addUntracked<int>("lenSlinkTrailer", 8);
299  desc.addUntracked<int>("lenAMCHeader", 8);
300  desc.addUntracked<int>("lenAMCTrailer", 0);
301  desc.addUntracked<int>("lenAMC13Header", 8);
302  desc.addUntracked<int>("lenAMC13Trailer", 8);
303  desc.addUntracked<bool>("debug", false)->setComment("turn on verbose output");
304  desc.add<unsigned int>("MinFeds", 0)->setComment("optional parameter: warn if less than MinFeds non-empty FED ids unpacked.");
305  descriptions.add("l1tRawToDigi", desc);
306  }
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void L1TRawToDigi::produce ( edm::Event event,
const edm::EventSetup setup 
)
overrideprivatevirtual

Implements edm::stream::EDProducerBase.

Definition at line 129 of file L1TRawToDigi.cc.

References amc, amc13HeaderSize_, amc13TrailerSize_, amcHeaderSize_, amcTrailerSize_, createPayload::block, FEDHeader::bxID(), FEDTrailer::check(), FEDHeader::check(), coll, gather_cfg::cout, FEDTrailer::crc(), ctp7_mode_, FEDRawData::data(), data, debug_, TauDecayModes::dec, end, FEDTrailer::evtStatus(), fedData_, stage2BMTFBufferRaw_cfi::fedId, fedIds_, HcalMonitorModule_cfi::feds, fwId_, fwOverride_, FEDTrailer::lenght(), LogDebug, FEDHeader::lvl1ID(), minFeds_, mtf7_mode_, amc13::Packet::parse(), amc13::Packet::payload(), prov_, FEDRawData::size(), slinkHeaderSize_, slinkTrailerSize_, FEDHeader::sourceID(), dqm_diff::start, FEDHeader::triggerType(), FEDTrailer::ttsBits(), dt_dqm_sourceclient_common_cff::unpackers, FEDHeader::version(), warnsa_, and warnsb_.

Referenced by JSONExport.JsonExport::export(), HTMLExport.HTMLExport::export(), and HTMLExport.HTMLExportStatic::export().

130  {
131  using namespace edm;
132 
133  std::unique_ptr<UnpackerCollections> coll = prov_->getCollections(event);
134 
136  event.getByToken(fedData_, feds);
137 
138  if (!feds.isValid()) {
139  LogError("L1T") << "Cannot unpack: no FEDRawDataCollection found";
140  return;
141  }
142 
143  unsigned valid_count = 0;
144  for (const auto& fedId: fedIds_) {
145  const FEDRawData& l1tRcd = feds->FEDData(fedId);
146 
147  LogDebug("L1T") << "Found FEDRawDataCollection with ID " << fedId << " and size " << l1tRcd.size();
148 
150  if (l1tRcd.size() > 0) {
151  LogError("L1T") << "Cannot unpack: invalid L1T raw data (size = "
152  << l1tRcd.size() << ") for ID " << fedId << ". Returning empty collections!";
153  } else if (warnsa_ < 5){
154  warnsa_++;
155  LogInfo("L1T") << "During unpacking, encountered empty L1T raw data (size = "
156  << l1tRcd.size() << ") for FED ID " << fedId << ".";
157  }
158  continue;
159  } else {
160  valid_count++;
161  }
162 
163  const unsigned char *data = l1tRcd.data();
164  FEDHeader header(data);
165 
166  if (header.check()) {
167  LogDebug("L1T") << "Found SLink header:"
168  << " Trigger type " << header.triggerType()
169  << " L1 event ID " << header.lvl1ID()
170  << " BX Number " << header.bxID()
171  << " FED source " << header.sourceID()
172  << " FED version " << header.version();
173  } else {
174  LogWarning("L1T") << "Did not find a SLink header!";
175  }
176 
177  FEDTrailer trailer(data + (l1tRcd.size() - slinkTrailerSize_));
178 
179  if (trailer.check()) {
180  LogDebug("L1T") << "Found SLink trailer:"
181  << " Length " << trailer.lenght()
182  << " CRC " << trailer.crc()
183  << " Status " << trailer.evtStatus()
184  << " Throttling bits " << trailer.ttsBits();
185  } else {
186  LogWarning("L1T") << "Did not find a SLink trailer!";
187  }
188 
189  // FIXME Hard-coded firmware version for first 74x MC campaigns.
190  // Will account for differences in the AMC payload, MP7 payload,
191  // and unpacker setup.
192  bool legacy_mc = fwOverride_ && ((fwId_ >> 24) == 0xff);
193 
194  amc13::Packet packet;
195  if (!packet.parse(
196  (const uint64_t*) data,
197  (const uint64_t*) (data + slinkHeaderSize_),
198  (l1tRcd.size() - slinkHeaderSize_ - slinkTrailerSize_) / 8,
199  header.lvl1ID(),
200  header.bxID(),
201  legacy_mc,
202  mtf7_mode_)) {
203  LogError("L1T")
204  << "Could not extract AMC13 Packet.";
205  return;
206  }
207 
208  for (auto& amc: packet.payload()) {
209  if (amc.size() == 0)
210  continue;
211 
212  auto payload64 = amc.data();
213  const uint32_t * start = (const uint32_t*) payload64.get();
214  // Want to have payload size in 32 bit words, but AMC measures
215  // it in 64 bit words → factor 2.
216  const uint32_t * end = start + (amc.size() * 2);
217 
218  std::auto_ptr<Payload> payload;
219  if (ctp7_mode_) {
220  LogDebug("L1T") << "Using CTP7 mode";
221  payload.reset(new CTP7Payload(start, end));
222  } else if (mtf7_mode_) {
223  LogDebug("L1T") << "Using MTF7 mode";
224  payload.reset(new MTF7Payload(start, end));
225  } else {
226  LogDebug("L1T") << "Using MP7 mode";
227  payload.reset(new MP7Payload(start, end, legacy_mc));
228  }
229  unsigned fw = payload->getAlgorithmFWVersion();
230 
231  // Let parameterset value override FW version
232  if (fwOverride_)
233  fw = fwId_;
234 
235  unsigned board = amc.blockHeader().getBoardID();
236  unsigned amc_no = amc.blockHeader().getAMCNumber();
237 
238  auto unpackers = prov_->getUnpackers(fedId, board, amc_no, fw);
239 
240  // getBlock() returns a non-null auto_ptr on success
241  std::auto_ptr<Block> block;
242  while ((block = payload->getBlock()).get()) {
243  if (debug_) {
244  std::cout << ">>> block to unpack <<<" << std::endl
245  << "hdr: " << std::hex << std::setw(8) << std::setfill('0') << block->header().raw() << std::dec
246  << " (ID " << block->header().getID() << ", size " << block->header().getSize()
247  << ", CapID 0x" << std::hex << std::setw(2) << std::setfill('0') << block->header().getCapID()
248  << ")" << std::dec << std::endl;
249  for (const auto& word: block->payload()) {
250  if (debug_)
251  std::cout << "data: " << std::hex << std::setw(8) << std::setfill('0') << word << std::dec << std::endl;
252  }
253  }
254 
255  auto unpacker = unpackers.find(block->header().getID());
256 
257  block->amc(amc.header());
258 
259  if (unpacker == unpackers.end()) {
260  LogDebug("L1T") << "Cannot find an unpacker for"
261  << "\n\tblock: ID " << block->header().getID() << ", size " << block->header().getSize()
262  << "\n\tAMC: # " << amc_no << ", board ID 0x" << std::hex << board << std::dec
263  << "\n\tFED ID " << fedId << ", and FW ID " << fw;
264  // TODO Handle error
265  } else if (!unpacker->second->unpack(*block, coll.get())) {
266  LogDebug("L1T") << "Error unpacking data for block ID "
267  << block->header().getID() << ", AMC # " << amc_no
268  << ", board ID " << board << ", FED ID " << fedId
269  << ", and FW ID " << fw << "!";
270  // TODO Handle error
271  }
272  }
273  }
274  }
275  if (valid_count < minFeds_){
276  if (warnsb_ < 5){
277  warnsb_++;
278  LogWarning("L1T") << "Unpacked " << valid_count << " non-empty FED IDs but minimum is set to " << minFeds_ << "\n";
279  }
280  }
281  }
#define LogDebug(id)
std::vector< amc::Packet > payload() const
Definition: AMC13Spec.h:80
tuple start
Check for commandline option errors.
Definition: dqm_diff.py:58
std::auto_ptr< PackingSetup > prov_
Definition: L1TRawToDigi.cc:64
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
double amc
Definition: hdecay.h:20
std::vector< int > fedIds_
Definition: L1TRawToDigi.cc:59
#define end
Definition: vmac.h:37
JetCorrectorParametersCollection coll
Definition: classes.h:10
unsigned long long uint64_t
Definition: Time.h:15
bool parse(const uint64_t *start, const uint64_t *data, unsigned int size, unsigned int lv1, unsigned int bx, bool legacy_mc=false, bool mtf7_mode=false)
Definition: AMC13Spec.cc:70
unsigned int fwId_
Definition: L1TRawToDigi.cc:61
unsigned int minFeds_
Definition: L1TRawToDigi.cc:60
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
edm::EDGetTokenT< FEDRawDataCollection > fedData_
Definition: L1TRawToDigi.cc:55
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
tuple cout
Definition: gather_cfg.py:145

Member Data Documentation

int l1t::L1TRawToDigi::amc13HeaderSize_
private

Definition at line 71 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::amc13TrailerSize_
private

Definition at line 72 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::amcHeaderSize_
private

Definition at line 69 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::amcTrailerSize_
private

Definition at line 70 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

bool l1t::L1TRawToDigi::ctp7_mode_
private

Definition at line 74 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

bool l1t::L1TRawToDigi::debug_
private

Definition at line 76 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

edm::EDGetTokenT<FEDRawDataCollection> l1t::L1TRawToDigi::fedData_
private

Definition at line 55 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

std::vector<int> l1t::L1TRawToDigi::fedIds_
private

Definition at line 59 of file L1TRawToDigi.cc.

Referenced by produce().

unsigned int l1t::L1TRawToDigi::fwId_
private

Definition at line 61 of file L1TRawToDigi.cc.

Referenced by produce().

bool l1t::L1TRawToDigi::fwOverride_
private

Definition at line 62 of file L1TRawToDigi.cc.

Referenced by produce().

unsigned int l1t::L1TRawToDigi::minFeds_
private

Definition at line 60 of file L1TRawToDigi.cc.

Referenced by produce().

bool l1t::L1TRawToDigi::mtf7_mode_
private

Definition at line 75 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

std::auto_ptr<PackingSetup> l1t::L1TRawToDigi::prov_
private

Definition at line 64 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::slinkHeaderSize_
private

Definition at line 67 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::slinkTrailerSize_
private

Definition at line 68 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::warnsa_
private

Definition at line 77 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::warnsb_
private

Definition at line 78 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().