42 : dataLabel_(pset.getParameter<
edm::
InputTag>(
"InputLabel")),
43 doSynchro_(pset.getParameter<
bool>(
"doSynchro")),
47 produces<RPCDigiCollection>();
48 produces<RPCRawDataCounts>();
49 if (
doSynchro_) produces<RPCRawSynchro::ProdItem>();
62 desc.
add<
bool>(
"doSynchro",
true);
63 descriptions.
add(
"rpcUnpackingModule",desc);
70 LogTrace(
"") <<
"record has CHANGED!!, (re)initialise readout map!";
91 auto producedRPCDigis = std::make_unique<RPCDigiCollection>();
92 auto producedRawDataCounts = std::make_unique<RPCRawDataCounts>();
93 std::unique_ptr<RPCRawSynchro::ProdItem> producedRawSynchoCounts;
94 if (
doSynchro_) producedRawSynchoCounts = std::make_unique<RPCRawSynchro::ProdItem>();
103 unsigned int nWords = rawData.
size()/
sizeof(
Word64);
104 if (nWords==0)
continue;
110 bool moreHeaders =
true;
111 while (moreHeaders) {
113 FEDHeader fedHeader( reinterpret_cast<const unsigned char*>(header));
114 if (!fedHeader.
check()) {
115 producedRawDataCounts->addReadoutError(
fedId,
ReadoutError(ReadoutError::HeaderCheckFail));
116 if (debug)
LogTrace(
"") <<
" ** PROBLEM **, header.check() failed, break";
120 producedRawDataCounts->addReadoutError(
fedId,
ReadoutError(ReadoutError::InconsitentFedId));
121 if (debug)
LogTrace (
"") <<
" ** PROBLEM **, fedHeader.sourceID() != fedId" 124 triggerBX = fedHeader.
bxID();
128 str <<
" header: "<< *
reinterpret_cast<const bitset<64>*
> (
header) << endl;
129 str <<
" header triggerType: " << fedHeader.
triggerType()<<endl;
130 str <<
" header lvl1ID: " << fedHeader.
lvl1ID() << endl;
131 str <<
" header bxID: " << fedHeader.
bxID() << endl;
132 str <<
" header sourceID: " << fedHeader.
sourceID() << endl;
133 str <<
" header version: " << fedHeader.
version() << endl;
141 const Word64* trailer=
reinterpret_cast<const Word64*
>(rawData.
data())+(nWords-1); trailer++;
142 bool moreTrailers =
true;
143 while (moreTrailers) {
145 FEDTrailer fedTrailer(reinterpret_cast<const unsigned char*>(trailer));
146 if ( !fedTrailer.
check()) {
147 producedRawDataCounts->addReadoutError(
fedId,
ReadoutError(ReadoutError::TrailerCheckFail));
148 if (debug)
LogTrace(
"") <<
" ** PROBLEM **, trailer.check() failed, break";
152 producedRawDataCounts->addReadoutError(
fedId,
ReadoutError(ReadoutError::InconsistentDataSize));
153 if (debug)
LogTrace(
"")<<
" ** PROBLEM **, fedTrailer.fragmentLength()!= nWords, break";
159 str <<
" trailer: "<< *
reinterpret_cast<const bitset<64>*
> (trailer) << endl;
161 str <<
" trailer crc: "<<fedTrailer.
crc()<<endl;
162 str <<
" trailer evtStatus: "<<fedTrailer.
evtStatus()<<endl;
163 str <<
" trailer ttsBits: "<<fedTrailer.
ttsBits()<<endl;
173 for (
const Word64* word = header+1; word != trailer; word++) {
174 str<<
" data: "<<*
reinterpret_cast<const bitset<64>*
>(word) << endl;
181 for (
const Word64* word = header+1; word != trailer; word++) {
182 for(
int iRecord=1; iRecord<=4; iRecord++){
187 std::ostringstream
str;
188 str <<
"record: "<<record.
print()<<
" hex: "<<hex<<*pRecord<<
dec;
191 str<<
" --> dccId: "<<
fedId 192 <<
" rmb: " <<
event.recordSLD().rmb()
193 <<
" lnk: "<<
event.recordSLD().tbLinkInputNumber()
194 <<
" lb: "<<
event.recordCD().lbInLink()
195 <<
" part: "<<
event.recordCD().partitionNumber()
196 <<
" data: "<<
event.recordCD().partitionData()
197 <<
" eod: "<<
event.recordCD().eod();
201 producedRawDataCounts->addDccRecord(
fedId, record);
205 producedRPCDigis.get(), producedRawDataCounts.get(), producedRawSynchoCounts.get());
206 if (statusTMP != 0) status = statusTMP;
210 if (status && debug)
LogTrace(
"")<<
" RPCUnpackingModule - There was unpacking PROBLEM in this event"<<endl;
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
RPCReadOutMappingWithFastSearch theReadoutMappingSearch
bool getByToken(EDGetToken token, Handle< PROD > &result) const
static MessageDrop * instance()
uint16_t crc() const
Cyclic Redundancy Code of the event fragment including header and trailer.
bool check() const
Check that the trailer is OK.
bool moreTrailers() const
void init(const RPCReadOutMapping *arm)
takes ownership of map
S & print(S &os, JobReport::InputFile const &f)
size_t size() const
Lenght of the data buffer in bytes.
uint32_t fragmentLength() const
The length of the event fragment counted in 64-bit words including header and trailer.
RPCUnpackingModule(const edm::ParameterSet &pset)
Constructor.
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
const std::string & version() const
version as string
void produce(edm::Event &ev, const edm::EventSetup &es) override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
const RPCReadOutMapping * theCabling
~RPCUnpackingModule() override
Destructor.
uint8_t ttsBits() const
Current value of the Trigger Throttling System bits.
unsigned long long uint64_t
void beginRun(const edm::Run &run, const edm::EventSetup &es) override
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
uint8_t evtStatus() const
Event fragment status information.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool check(const edm::EventSetup &iSetup)
edm::EDGetTokenT< FEDRawDataCollection > fedToken_
std::string print() const
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
RPCReadOutMapping const * convert() const
DataRecordType type() const
unsigned long eventCounter_
edm::ESWatcher< RPCEMapRcd > theRecordWatcher