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::one::EDProducer< edm::one::SharedResources, edm::one::WatchRuns, edm::one::WatchLuminosityBlocks > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 L1TRawToDigi (const edm::ParameterSet &)
 
 ~L1TRawToDigi ()
 
- Public Member Functions inherited from edm::one::EDProducer< edm::one::SharedResources, edm::one::WatchRuns, edm::one::WatchLuminosityBlocks >
 EDProducer ()=default
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
 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
 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 (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) 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::one::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_
 
edm::EDGetTokenT
< FEDRawDataCollection
fedData_
 
int fedId_
 
int fwId_
 
std::auto_ptr< PackingSetupprov_
 
int slinkHeaderSize_
 
int slinkTrailerSize_
 

Additional Inherited Members

- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- 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 80 of file L1TRawToDigi.cc.

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

80  :
81  fedId_(config.getParameter<int>("FedId")),
82  fwId_(config.getUntrackedParameter<int>("FWId", -1))
83  {
84  fedData_ = consumes<FEDRawDataCollection>(config.getParameter<edm::InputTag>("InputLabel"));
85 
87  prov_->registerProducts(*this);
88 
89  slinkHeaderSize_ = config.getUntrackedParameter<int>("lenSlinkHeader", 16);
90  slinkTrailerSize_ = config.getUntrackedParameter<int>("lenSlinkTrailer", 16);
91  amcHeaderSize_ = config.getUntrackedParameter<int>("lenAMCHeader", 8);
92  amcTrailerSize_ = config.getUntrackedParameter<int>("lenAMCTrailer", 0);
93  amc13HeaderSize_ = config.getUntrackedParameter<int>("lenAMC13Header", 8);
94  amc13TrailerSize_ = config.getUntrackedParameter<int>("lenAMC13Trailer", 8);
95  }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::auto_ptr< PackingSetup > prov_
Definition: L1TRawToDigi.cc:62
std::auto_ptr< PackingSetup > make(const std::string &) const
Definition: PackingSetup.cc:12
static const PackingSetupFactory * get()
Definition: PackingSetup.h:46
edm::EDGetTokenT< FEDRawDataCollection > fedData_
Definition: L1TRawToDigi.cc:55
L1TRawToDigi::~L1TRawToDigi ( )

Definition at line 98 of file L1TRawToDigi.cc.

99  {
100  }

Member Function Documentation

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

Definition at line 54 of file L1TRawToDigi.cc.

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

Definition at line 52 of file L1TRawToDigi.cc.

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

Definition at line 55 of file L1TRawToDigi.cc.

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

Definition at line 53 of file L1TRawToDigi.cc.

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

Definition at line 221 of file L1TRawToDigi.cc.

References edm::ConfigurationDescriptions::addDefault(), and edm::ParameterSetDescription::setUnknown().

221  {
222  //The following says we do not know what parameters are allowed so do no validation
223  // Please change this to state exactly what you do use, even if it is no parameters
225  desc.setUnknown();
226  descriptions.addDefault(desc);
227  }
void addDefault(ParameterSetDescription const &psetDescription)
void L1TRawToDigi::produce ( edm::Event event,
const edm::EventSetup setup 
)
overrideprivatevirtual

Implements edm::one::EDProducerBase.

Definition at line 109 of file L1TRawToDigi.cc.

References amc, amc13HeaderSize_, amc13TrailerSize_, amcHeaderSize_, amcTrailerSize_, createPayload::block, FEDHeader::bxID(), FEDTrailer::check(), FEDHeader::check(), coll, FEDTrailer::crc(), data, end, FEDTrailer::evtStatus(), fedData_, fedId_, fwId_, l1t::BlockHeader::getID(), l1t::BlockHeader::getSize(), FEDTrailer::lenght(), LogDebug, FEDHeader::lvl1ID(), prov_, slinkHeaderSize_, slinkTrailerSize_, FEDHeader::sourceID(), FEDHeader::triggerType(), FEDTrailer::ttsBits(), dt_dqm_sourceclient_common_cff::unpackers, and FEDHeader::version().

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

110  {
111  using namespace edm;
112 
113  std::unique_ptr<UnpackerCollections> coll = prov_->getCollections(event);
114 
116  event.getByToken(fedData_, feds);
117 
118  if (!feds.isValid()) {
119  LogError("L1T") << "Cannot unpack: no collection found";
120  return;
121  }
122 
123  const FEDRawData& l1tRcd = feds->FEDData(fedId_);
124 
125  LogDebug("L1T") << "Found FEDRawDataCollection with ID " << fedId_ << " and size " << l1tRcd.size();
126 
128  //LogError("L1T") << "Cannot unpack: empty/invalid L1T raw data (size = "
129  // << l1tRcd.size() << ") for ID " << fedId_ << ". Returning empty collections!";
130  return;
131  }
132 
133  const unsigned char *data = l1tRcd.data();
134  FEDHeader header(data);
135 
136  if (header.check()) {
137  LogDebug("L1T") << "Found SLink header:"
138  << " Trigger type " << header.triggerType()
139  << " L1 event ID " << header.lvl1ID()
140  << " BX Number " << header.bxID()
141  << " FED source " << header.sourceID()
142  << " FED version " << header.version();
143  } else {
144  LogWarning("L1T") << "Did not find a SLink header!";
145  }
146 
147  FEDTrailer trailer(data + (l1tRcd.size() - slinkTrailerSize_));
148 
149  if (trailer.check()) {
150  LogDebug("L1T") << "Found SLink trailer:"
151  << " Length " << trailer.lenght()
152  << " CRC " << trailer.crc()
153  << " Status " << trailer.evtStatus()
154  << " Throttling bits " << trailer.ttsBits();
155  } else {
156  LogWarning("L1T") << "Did not find a SLink trailer!";
157  }
158 
159  amc13::Packet packet;
160  if (!packet.parse(
161  (const uint64_t*) (data + slinkHeaderSize_),
162  (l1tRcd.size() - slinkHeaderSize_ - slinkTrailerSize_) / 8)) {
163  LogError("L1T")
164  << "Could not extract AMC13 Packet.";
165  return;
166  }
167 
168  for (auto& amc: packet.payload()) {
169  auto payload64 = amc.data();
170  const uint32_t * payload = (const uint32_t*) payload64.get();
171  const uint32_t * end = payload + (amc.size() * 2);
172 
173  // TODO this skips the still to be added MP7 header containing the
174  // firmware version
175  unsigned fw = 0;
176  payload++;
177 
178  // Let parameterset value override FW version
179  if (fwId_ > 0)
180  fw = fwId_;
181 
182  unsigned board = amc.header().getBoardID();
183 
184  auto unpackers = prov_->getUnpackers(fedId_, board, fw);
185 
186  while (payload != end) {
187  BlockHeader block_hdr(payload++);
188 
189  /* LogDebug("L1T") << "Found " << block_hdr; */
190  //LogDebug("L1T") << "Found block " << block_hdr.getID() << " with size " << block_hdr.getSize();
191 
192  if (end - payload < block_hdr.getSize()) {
193  LogError("L1T")
194  << "Expecting a block size of " << block_hdr.getSize()
195  << " but only " << (end - payload) << " words remaining";
196  return;
197  }
198 
199  Block block(block_hdr, payload, payload + block_hdr.getSize());
200 
201  auto unpacker = unpackers.find(block_hdr.getID());
202  if (unpacker == unpackers.end()) {
203  //LogWarning("L1T") << "Cannot find an unpacker for block ID "
204  // << block_hdr.getID() << ", FED ID " << fedId_ << ", and FW ID "
205  // << fw << "!";
206  // TODO Handle error
207  } else if (!unpacker->second->unpack(block, coll.get())) {
208  LogWarning("L1T") << "Error unpacking data for block ID "
209  << block_hdr.getID() << ", FED ID " << fedId_ << ", and FW ID "
210  << fw << "!";
211  // TODO Handle error
212  }
213 
214  payload += block_hdr.getSize();
215  }
216  }
217  }
#define LogDebug(id)
std::auto_ptr< PackingSetup > prov_
Definition: L1TRawToDigi.cc:62
double amc
Definition: hdecay.h:20
#define end
Definition: vmac.h:37
JetCorrectorParametersCollection coll
Definition: classes.h:10
unsigned long long uint64_t
Definition: Time.h:15
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
edm::EDGetTokenT< FEDRawDataCollection > fedData_
Definition: L1TRawToDigi.cc:55

Member Data Documentation

int l1t::L1TRawToDigi::amc13HeaderSize_
private

Definition at line 69 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::amc13TrailerSize_
private

Definition at line 70 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::amcHeaderSize_
private

Definition at line 67 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::amcTrailerSize_
private

Definition at line 68 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().

int l1t::L1TRawToDigi::fedId_
private

Definition at line 59 of file L1TRawToDigi.cc.

Referenced by produce().

int l1t::L1TRawToDigi::fwId_
private

Definition at line 60 of file L1TRawToDigi.cc.

Referenced by produce().

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

Definition at line 62 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::slinkHeaderSize_
private

Definition at line 65 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

int l1t::L1TRawToDigi::slinkTrailerSize_
private

Definition at line 66 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().