12#include "CTPfragment/CTPdataformatVersion.h"
15#include "GaudiKernel/Bootstrap.h"
16#include "GaudiKernel/ISvcLocator.h"
17#include "GaudiKernel/IMessageSvc.h"
18#include "GaudiKernel/MsgStream.h"
26 CTPdataformatVersion ctpDataFormat(ctpVersionNumber);
43 uint32_t numberOfWords =
static_cast<uint32_t
>(
data.size()) - ctpDataFormat.getNumberTimeWords() - nExtraWords;
60 for(
unsigned int tipIdx = 0; tipIdx < ctpDataFormat.getTIPwords(); ++tipIdx) {
61 unsigned int index = ctpDataFormat.getTIPpos() + tipIdx + (bunch * ctpDataFormat.getDAQwordsPerBunch());
68 for(
unsigned int tbpIdx = 0; tbpIdx < ctpDataFormat.getTBPwords(); ++tbpIdx) {
69 unsigned int index = ctpDataFormat.getTBPpos() + tbpIdx + (bunch * ctpDataFormat.getDAQwordsPerBunch());
76 for(
unsigned int tapIdx = 0; tapIdx < ctpDataFormat.getTAPwords(); ++tapIdx) {
77 unsigned int index = ctpDataFormat.getTAPpos() + tapIdx + (bunch * ctpDataFormat.getDAQwordsPerBunch());
84 for(
unsigned int tavIdx = 0; tavIdx < ctpDataFormat.getTAVwords(); ++tavIdx) {
85 unsigned int index = ctpDataFormat.getTAVpos() + tavIdx + (bunch * ctpDataFormat.getDAQwordsPerBunch());
97 std::vector<uint32_t>
vec;
105 std::ostringstream s;
107 s <<
"\n*BEGIN* xAOD::CTPResult" << std::endl;
111 s <<
"xAOD::CTPResult empty" << std::endl;
112 s <<
"*END* xAOD::CTPResult" << std::endl;
117 std::vector<std::string> ctpResultIssues = ctpRes.
checkForIssues();
118 if (ctpResultIssues.empty()) {
119 s <<
"xAOD::CTPResult status: Good! " << std::endl;
121 s <<
"xAOD::CTPResult status: Bad! " << std::endl;
122 for (
const auto& issue : ctpResultIssues) {
123 s <<
"xAOD::CTPResult status: " << issue << std::endl;
132 s <<
"Header information: " << std::endl;
133 s <<
" Header marker : " << std::hex << ctpRes.
headerMarker() << std::dec << std::endl;
134 s <<
" Header size : " << ctpRes.
headerSize() << std::endl;
136 s <<
" Source ID : 0x" << std::hex << ctpRes.
sourceID() << std::dec << std::endl;
137 s <<
" Run number : " << ctpRes.
runNumber() << std::endl;
138 s <<
" Ext. LVL1 ID : " << ctpRes.
L1ID() << std::endl;
139 s <<
" BCID : " << ctpRes.
BCID() << std::endl;
140 s <<
" Trigger type : " << ctpRes.
triggerType() << std::endl;
141 s <<
" Det. event type : " << ctpRes.
eventType() << std::endl;
144 s <<
"Payload information: " << std::endl;
145 s <<
" Time " << ctpRes.
timeSec() <<
"s "
146 << std::setw(10) << std::setiosflags(std::ios_base::right) << std::setfill(
' ')
147 << ctpRes.
timeNanoSec() << std::resetiosflags(std::ios_base::right)
148 <<
"ns" << std::endl;
153 auto bunch = ctpRes.
getBC(i);
154 s <<
" BC dump for bunch " << i << std::endl;
157 for(
unsigned int j = 0; j<ctpRes.
tipWords()[i].
size(); ++j) {
158 s <<
" TIP word number " << j <<
": 0x" << std::hex << std::setw( 8 ) << std::setfill(
'0' ) << ctpRes.
tipWords()[i][j] << std::dec << std::endl;
160 if (ctpRes.
tipWords()[i].size() == 0) {
161 s <<
" No TIP words!" << std::endl;
165 for(
unsigned int j = 0; j<ctpRes.
tbpWords()[i].
size(); ++j) {
166 s <<
" TBP word number " << j <<
": 0x" << std::hex << std::setw( 8 ) << std::setfill(
'0' ) << ctpRes.
tbpWords()[i][j] << std::dec << std::endl;
168 if (ctpRes.
tbpWords()[i].size() == 0) {
169 s <<
" No TBP words!" << std::endl;
173 for(
unsigned int j = 0; j<ctpRes.
tapWords()[i].
size(); ++j) {
174 s <<
" TAP word number " << j <<
": 0x" << std::hex << std::setw( 8 ) << std::setfill(
'0' ) << ctpRes.
tapWords()[i][j] << std::dec << std::endl;
176 if (ctpRes.
tapWords()[i].size() == 0) {
177 s <<
" No TAP words!" << std::endl;
181 for(
unsigned int j = 0; j<ctpRes.
tavWords()[i].
size(); ++j) {
182 s <<
" TAV word number " << j <<
": 0x" << std::hex << std::setw( 8 ) << std::setfill(
'0' ) << ctpRes.
tavWords()[i][j] << std::dec << std::endl;
184 if (ctpRes.
tavWords()[i].size() == 0) {
185 s <<
" No TAV words!" << std::endl;
191 s <<
" Additional word number " << i <<
": 0x" << std::hex << std::setw( 8 ) << std::setfill(
'0' ) << ctpRes.
additionalWords()[i] << std::dec << std::endl;
194 s <<
" No additional words!" << std::endl;
198 s <<
"Trailer information: " << std::endl;
199 s <<
" Error status : " << ctpRes.
errorStatus() << std::endl;
200 s <<
" Status info : " << ctpRes.
infoStatus() << std::endl;
201 s <<
" Number of status words : " << ctpRes.
numStatusWords() << std::endl;
202 s <<
" Number of data words : " << ctpRes.
numDataWords() << std::endl;
203 s <<
" Status information position : " << ctpRes.
statusPosition() << std::endl;
204 s <<
"*END* xAOD::CTPResult" << std::endl;
Base class for elements of a container that can have aux data.
std::vector< size_t > vec
char data[hepevt_bytes_allocation_ATLAS]
size_t size() const
Number of registered mappings.
void setTimeSec(const uint32_t sec)
Set the time in seconds.
uint32_t numDataWords() const
Retrieve the number of data words.
void setTAVWords(const std::vector< std::vector< uint32_t > > &words)
Set the TAV words for all bunch crossings.
uint32_t L1ID() const
Retrieve the extended LVL1 ID.
const std::vector< std::vector< uint32_t > > & tbpWords() const
Get the TBP words for all bunch crossings.
uint32_t numStatusWords() const
Retrieve the number of status words in the trailer.
const std::vector< std::vector< uint32_t > > & tapWords() const
Get the TAP words for all bunch crossings.
void setNumberOfBunches(const uint32_t nBCs)
Set the number of bunch crossings.
uint32_t infoStatus() const
Retrieve the info status word.
uint32_t headerSize() const
Retrieve the number of words in the header.
void setTAPWords(const std::vector< std::vector< uint32_t > > &words)
Set the TAP words for all bunch crossings.
uint32_t triggerType() const
Retrieve the LVL1 trigger type.
uint32_t runNumber() const
Retrieve the run number.
uint32_t statusPosition() const
Retrieve the position of status information in the ROD.
uint32_t BCID() const
Retrieve the bunch crossing ID.
void setTBPWords(const std::vector< std::vector< uint32_t > > &words)
Set the TBP words for all bunch crossings.
void setAdditionalWords(const std::vector< uint32_t > &words)
Set the additional data words.
const std::vector< uint32_t > & additionalWords() const
Get the additional data words.
uint32_t headerFormatVersion() const
Retrieve the format version of the header.
uint32_t errorStatus() const
Retrieve the error status word.
uint32_t timeSec() const
Get the time in seconds.
const std::vector< std::vector< uint32_t > > & tipWords() const
Get the TIP words for all bunch crossings.
const std::vector< std::vector< uint32_t > > & tavWords() const
Get the TAV words for all bunch crossings.
void setCtpVersionNumber(const uint32_t ctpNumber)
Set the CTP version number.
uint32_t eventType() const
Retrieve the LVL1 event type.
uint32_t headerMarker() const
Retrieve the header marker word.
const CTPResult_v1::CTPBunchCrossing getBC(const int bunch=-1) const
Get the CTPBunchCrossing object for a specific bunch in the readout window.
std::vector< std::string > checkForIssues() const
Get whether the CTPResult object is in a good state (i.e.
uint32_t ctpVersionNumber() const
Get the CTP version number.
uint32_t timeNanoSec() const
Get the time in nanoseconds.
uint32_t numberOfBunches() const
Get the number of bunch crossings.
void setTimeNanoSec(const uint32_t nano)
Set the time in nanoseconds.
uint32_t sourceID() const
Retrieve the sub-detector source ID.
void setTIPWords(const std::vector< std::vector< uint32_t > > &words)
Set the TIP words for all bunch crossings.
uint32_t l1AcceptBunchPosition() const
Get the L1 accept bunch position.
Utility functions for xAOD::CTPResult objects that rely on tdaq-common.
const std::string print(const xAOD::CTPResult &ctpRes)
Print object content in human readable format in a string.
CTPResult_v1 CTPResult
Define the latest version of the CTPResult class.