67 std::unique_ptr<PackingSetup>
prov_;
88 o <<
"L1T Block Header " << h.
getID() <<
" with size " << h.
getSize();
95 minFeds_(config.getParameter<unsigned
int>(
"MinFeds")),
96 fwId_(config.getParameter<unsigned
int>(
"FWId")),
97 fwOverride_(config.getParameter<bool>(
"FWOverride")),
98 tmtCheck_(config.getParameter<bool>(
"TMTCheck")),
99 ctp7_mode_(config.getUntrackedParameter<bool>(
"CTP7")),
100 mtf7_mode_(config.getUntrackedParameter<bool>(
"MTF7"))
105 throw cms::Exception(
"L1TRawToDigi") <<
"Can only use one unpacking mode concurrently!";
109 prov_->registerProducts(*
this);
139 std::unique_ptr<UnpackerCollections>
coll =
prov_->getCollections(event);
145 LogError(
"L1T") <<
"Cannot unpack: no FEDRawDataCollection found";
149 unsigned valid_count = 0;
153 LogDebug(
"L1T") <<
"Found FEDRawDataCollection with ID " <<
fedId <<
" and size " << l1tRcd.
size();
156 if (l1tRcd.
size() > 0) {
157 LogError(
"L1T") <<
"Cannot unpack: invalid L1T raw data (size = " 158 << l1tRcd.
size() <<
") for ID " <<
fedId <<
". Returning empty collections!";
161 LogInfo(
"L1T") <<
"During unpacking, encountered empty L1T raw data (size = " 162 << l1tRcd.
size() <<
") for FED ID " <<
fedId <<
".";
169 const unsigned char *
data = l1tRcd.
data();
172 if (header.
check()) {
173 LogDebug(
"L1T") <<
"Found SLink header:" 175 <<
" L1 event ID " << header.
lvl1ID()
176 <<
" BX Number " << header.
bxID()
177 <<
" FED source " << header.
sourceID()
178 <<
" FED version " << header.
version();
180 LogWarning(
"L1T") <<
"Did not find a SLink header!";
185 if (trailer.
check()) {
186 LogDebug(
"L1T") <<
"Found SLink trailer:" 187 <<
" Length " << trailer.
lenght()
188 <<
" CRC " << trailer.
crc()
190 <<
" Throttling bits " << trailer.
ttsBits();
192 LogWarning(
"L1T") <<
"Did not find a SLink trailer!";
210 <<
"Could not extract AMC13 Packet.";
218 auto payload64 =
amc.data();
219 const uint32_t *
start = (
const uint32_t*) payload64.get();
222 const uint32_t *
end = start + (
amc.size() * 2);
224 std::unique_ptr<Payload>
payload;
226 LogDebug(
"L1T") <<
"Using CTP7 mode";
229 LogDebug(
"L1T") <<
"Using MTF7 mode";
232 LogDebug(
"L1T") <<
"Using MP7 mode";
233 payload.reset(
new MP7Payload(start, end, legacy_mc));
235 unsigned fw = payload->getAlgorithmFWVersion();
241 unsigned board =
amc.blockHeader().getBoardID();
242 unsigned amc_no =
amc.blockHeader().getAMCNumber();
244 auto unpackers =
prov_->getUnpackers(
fedId, board, amc_no, fw);
247 std::unique_ptr<Block>
block;
248 while ((block = payload->getBlock()).
get()) {
252 unsigned bxId = header.
bxID();
253 unsigned unpackTMT = ( !
tmtCheck_ || ( ( tmtId - 1 ) == ( ( bxId - 1 + 3 ) % 9 ) ) );
256 if( !isCaloL2TMT || unpackTMT ) {
258 std::cout <<
">>> block to unpack <<<" << std::endl
259 <<
"hdr: " << std::hex << std::setw(8) << std::setfill(
'0') << block->header().raw() <<
std::dec 260 <<
" (ID " << block->header().getID() <<
", size " << block->header().getSize()
261 <<
", CapID 0x" << std::hex << std::setw(2) << std::setfill(
'0') << block->header().getCapID()
263 for (
const auto& word: block->payload()) {
265 std::cout <<
"data: " << std::hex << std::setw(8) << std::setfill(
'0') << word <<
std::dec << std::endl;
269 auto unpacker = unpackers.find(block->header().getID());
271 block->amc(
amc.header());
273 if (unpacker == unpackers.end()) {
274 LogDebug(
"L1T") <<
"Cannot find an unpacker for" 275 <<
"\n\tblock: ID " << block->header().getID() <<
", size " << block->header().getSize()
276 <<
"\n\tAMC: # " << amc_no <<
", board ID 0x" << std::hex << board <<
std::dec 277 <<
"\n\tFED ID " <<
fedId <<
", and FW ID " << fw;
279 }
else if (!unpacker->second->unpack(*block, coll.get())) {
280 LogDebug(
"L1T") <<
"Error unpacking data for block ID " 281 << block->header().getID() <<
", AMC # " << amc_no
282 <<
", board ID " << board <<
", FED ID " <<
fedId 283 <<
", and FW ID " << fw <<
"!";
293 LogWarning(
"L1T") <<
"Unpacked " << valid_count <<
" non-empty FED IDs but minimum is set to " <<
minFeds_ <<
"\n";
303 desc.
add<std::vector<int>>(
"FedIds", {})->setComment(
"required parameter: default value is invalid");
304 desc.
add<
std::string>(
"Setup",
"")->setComment(
"required parameter: default value is invalid");
307 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");
308 desc.
add<
bool>(
"FWOverride",
false)->setComment(
"Firmware version should be taken as FWId parameters");
309 desc.
add<
bool>(
"TMTCheck",
true)->setComment(
"Flag for turning on/off Calo Layer 2 TMT node check");
319 desc.
addUntracked<
bool>(
"debug",
false)->setComment(
"turn on verbose output");
320 desc.
add<
unsigned int>(
"MinFeds", 0)->setComment(
"optional parameter: warn if less than MinFeds non-empty FED ids unpacked.");
321 descriptions.
add(
"l1tRawToDigi", desc);
virtual void produce(edm::Event &, const edm::EventSetup &) override
std::vector< amc::Packet > payload() const
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
#define DEFINE_FWK_MODULE(type)
int evtStatus()
Event fragment status information.
unsigned int offsetBoardId
def setup(process, global_tag, zero_tesla=False)
size_t size() const
Lenght of the data buffer in bytes.
L1TRawToDigi(const edm::ParameterSet &)
payload
payload postfix for testing
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
std::vector< int > fedIds_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::unique_ptr< PackingSetup > make(const std::string &) const
int ttsBits()
Current value of the Trigger Throttling System bitsAQ).
std::ostream & operator<<(std::ostream &os, const l1t::CaloParamsHelper &p)
unsigned long long uint64_t
int lenght()
The length of the event fragment counted in 64-bit words including header and trailer.
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)
virtual void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static const PackingSetupFactory * get()
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
char data[epos_bytes_allocation]
std::unique_ptr< PackingSetup > prov_
edm::EDGetTokenT< FEDRawDataCollection > fedData_
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
int crc()
Cyclic Redundancy Code of the event fragment including header and trailer.
virtual void endRun(edm::Run const &, edm::EventSetup const &) override
virtual void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
virtual void beginRun(edm::Run const &, edm::EventSetup const &) override