File indexing completed on 2023-03-17 11:00:12
0001 #include <iomanip>
0002 #include <ostream>
0003 #include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDDAQHeader.h"
0004
0005 namespace Phase2Tracker {
0006
0007 std::ostream& operator<<(std::ostream& os, const FEDDAQEventType& value) {
0008 switch (value) {
0009 case DAQ_EVENT_TYPE_PHYSICS:
0010 os << "Physics trigger";
0011 break;
0012 case DAQ_EVENT_TYPE_CALIBRATION:
0013 os << "Calibration trigger";
0014 break;
0015 case DAQ_EVENT_TYPE_TEST:
0016 os << "Test trigger";
0017 break;
0018 case DAQ_EVENT_TYPE_TECHNICAL:
0019 os << "Technical trigger";
0020 break;
0021 case DAQ_EVENT_TYPE_SIMULATED:
0022 os << "Simulated event";
0023 break;
0024 case DAQ_EVENT_TYPE_TRACED:
0025 os << "Traced event";
0026 break;
0027 case DAQ_EVENT_TYPE_ERROR:
0028 os << "Error";
0029 break;
0030 case DAQ_EVENT_TYPE_INVALID:
0031 os << "Unknown";
0032 break;
0033 default:
0034 os << "Unrecognized";
0035 os << " (";
0036 printHexValue(value, os);
0037 os << ")";
0038 break;
0039 }
0040 return os;
0041 }
0042
0043 FEDDAQEventType FEDDAQHeader::eventType() const {
0044 switch (eventTypeNibble()) {
0045 case DAQ_EVENT_TYPE_PHYSICS:
0046 case DAQ_EVENT_TYPE_CALIBRATION:
0047 case DAQ_EVENT_TYPE_TEST:
0048 case DAQ_EVENT_TYPE_TECHNICAL:
0049 case DAQ_EVENT_TYPE_SIMULATED:
0050 case DAQ_EVENT_TYPE_TRACED:
0051 case DAQ_EVENT_TYPE_ERROR:
0052 return FEDDAQEventType(eventTypeNibble());
0053 default:
0054 return DAQ_EVENT_TYPE_INVALID;
0055 }
0056 }
0057
0058 void FEDDAQHeader::setEventType(const FEDDAQEventType evtType) { header_[7] = ((header_[7] & 0xF0) | evtType); }
0059
0060 void FEDDAQHeader::setL1ID(const uint32_t l1ID) {
0061 header_[4] = (l1ID & 0x000000FF);
0062 header_[5] = ((l1ID & 0x0000FF00) >> 8);
0063 header_[6] = ((l1ID & 0x00FF0000) >> 16);
0064 }
0065
0066 void FEDDAQHeader::setBXID(const uint16_t bxID) {
0067 header_[3] = ((bxID & 0x0FF0) >> 4);
0068 header_[2] = ((header_[2] & 0x0F) | ((bxID & 0x000F) << 4));
0069 }
0070
0071 void FEDDAQHeader::setSourceID(const uint16_t sourceID) {
0072 header_[2] = ((header_[2] & 0xF0) | ((sourceID & 0x0F00) >> 8));
0073 header_[1] = (sourceID & 0x00FF);
0074 }
0075
0076 FEDDAQHeader::FEDDAQHeader(const uint32_t l1ID,
0077 const uint16_t bxID,
0078 const uint16_t sourceID,
0079 const FEDDAQEventType evtType) {
0080
0081 memset(header_, 0x0, 8);
0082
0083 header_[7] = 0x50;
0084
0085 setEventType(evtType);
0086 setL1ID(l1ID);
0087 setBXID(bxID);
0088 setSourceID(sourceID);
0089 }
0090
0091 }