ATLAS Offline Software
Loading...
Searching...
No Matches
CTPResult.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5
6// this header file
8
9// gaudi includes
10#include "GaudiKernel/Bootstrap.h"
11#include "GaudiKernel/ISvcLocator.h"
12#include "GaudiKernel/IMessageSvc.h"
13#include "GaudiKernel/MsgStream.h"
14
15// STL includes
16#include <sstream>
17#include <iomanip>
18
19// Local include(s):
21
22
23namespace ROIB {
24
25
26
27 CTPResult::CTPResult(unsigned int ctpVersion, Header&& head, Trailer &&trail, std::vector<CTPRoI>&& rois) :
28 m_CTPResultHeader( std::move(head) ),
29 m_CTPResultTrailer( std::move(trail) ),
30 m_CTPResultRoIVec( std::move(rois) ),
31 //m_ctpVersionNumber( ctpVersion ),
32 m_ctpDataformat( ctpVersion ),
33 m_useRoIB(false),
34 m_l1aBunch(0)
35 {
36 m_useRoIB = (m_CTPResultHeader.sourceID() == 0x770001);
37 if (!m_useRoIB) m_l1aBunch = (m_CTPResultHeader.formatVersion() >> m_ctpDataformat.getL1APositionShift()) & m_ctpDataformat.getL1APositionMask();
38 }
39
40
41 CTPResult::CTPResult(unsigned int ctpVersion, Header&& head, Trailer&& trail, const std::vector<uint32_t>& v ) :
42 m_CTPResultHeader( std::move(head) ),
43 m_CTPResultTrailer( std::move(trail) ),
44 //m_ctpVersionNumber( ctpVersion ),
45 m_ctpDataformat( ctpVersion ),
46 m_useRoIB(false),
47 m_l1aBunch(0)
48 {
49 m_useRoIB = (m_CTPResultHeader.sourceID() == 0x770001);
50
51 std::copy(v.begin(), v.end(), back_inserter(m_CTPResultRoIVec));
52 if (!m_useRoIB) m_l1aBunch = (m_CTPResultHeader.formatVersion() >> m_ctpDataformat.getL1APositionShift()) & m_ctpDataformat.getL1APositionMask();
53 }
54
55
56 const std::string CTPResult::dump() const
57 {
58 std::ostringstream s;
59
60 s << " [" << this->header().dump() << "] ";
61 s << " [";
62 for (std::vector<CTPRoI>::size_type i(0); i < roIVec().size(); ++i) {
63 s << LVL1CTP::convertToHex(roIVec()[i].roIWord());
64 }
65 s << "] ";
66 s << " [" << this->trailer().dump() << "] ";
67
68 return s.str();
69 }
70
71 const std::string CTPResult::print(const bool longFormat) const
72 {
73 std::ostringstream s;
74
75 s << "header [" << this->header().print(longFormat) << "] ";
76 if (longFormat) s << std::endl;
77 s << "data [" << convert(this->roIVec(), longFormat) << "] ";
78 if (longFormat) s << std::endl;
79 s << "trailer [" << this->trailer().print(longFormat) << "] ";
80
81 return s.str();
82 }
83
84 const std::string CTPResult::convert(const std::vector<CTPRoI>& data, const bool longFormat) const
85 {
86 std::ostringstream s;
87
88 // time
89 for (size_t i(0); (i < m_ctpDataformat.getNumberTimeWords()) && (i < data.size()); ++i) {
90 if (longFormat) s << "\n";
91 if (i == 0 || longFormat) s << " Time";
92 if (longFormat) s << std::setw(1) << i;
93 s << " " << std::setw(8) << data[i].roIWord();
94 if (longFormat) s << std::endl;
95 }
96
97 // TIP
98 for (size_t i(0), p((m_useRoIB) ? m_ctpDataformat.getTIPpos():m_l1aBunch*m_ctpDataformat.getDAQwordsPerBunch()+m_ctpDataformat.getTIPpos());
99 (i < ((m_useRoIB) ? m_ctpDataformat.getRoIBTIPwords():m_ctpDataformat.getTIPwords())) && (p < data.size());
100 ++i, ++p) {
101 if (longFormat) s << "\n";
102 if (i == 0 || longFormat) s << " TIP";
103 if (longFormat) s << std::setw(1) << i;
104 s << LVL1CTP::convertToHex(data[p].roIWord());
105 if (longFormat) s << std::endl;
106 }
107
108 // FPI
109 // for (size_t i(0), p(m_ctpDataformat.getFPIpos());
110 // (i < m_ctpDataformat.getFPIwords()) && (p < data.size());
111 // ++i, ++p) {
112 // if (longFormat) s << "\n";
113 // if (i == 0 || longFormat) s << " FPI";
114 // if (longFormat) s << std::setw(1) << i;
115 // s << LVL1CTP::convertToHex(data[p].roIWord());
116 // if (longFormat) s << std::endl;
117 // }
118
119 // TBP
120 for (size_t i(0), p(((m_useRoIB) ? m_ctpDataformat.getRoIBTBPpos():m_l1aBunch*m_ctpDataformat.getDAQwordsPerBunch()+m_ctpDataformat.getTBPpos()));
121 (i < m_ctpDataformat.getTBPwords()) && (p < data.size());
122 ++i, ++p) {
123 if (longFormat) s << "\n";
124 if (i == 0 || longFormat) s << " TBP";
125 if (longFormat) s << std::setw(1) << i;
126 s << LVL1CTP::convertToHex(data[p].roIWord());
127 if (longFormat) s << std::endl;
128 }
129
130 // TAP
131 for (size_t i(0), p((m_useRoIB) ? m_ctpDataformat.getTAPpos():m_l1aBunch*m_ctpDataformat.getDAQwordsPerBunch()+m_ctpDataformat.getTAPpos());
132 (i < ((m_useRoIB) ? m_ctpDataformat.getRoIBTAPwords():m_ctpDataformat.getTAPwords())) && (p < data.size());
133 ++i, ++p) {
134 if (longFormat) s << "\n";
135 if (i == 0 || longFormat) s << " TAP";
136 if (longFormat) s << std::setw(1) << i;
137 s << LVL1CTP::convertToHex(data[p].roIWord());
138 if (longFormat) s << std::endl;
139 }
140
141 // TAV
142 for (size_t i(0), p(((m_useRoIB) ? m_ctpDataformat.getRoIBTAVpos():m_l1aBunch*m_ctpDataformat.getDAQwordsPerBunch()+m_ctpDataformat.getTAVpos()));
143 (i < m_ctpDataformat.getTAVwords()) && (p < data.size());
144 ++i, ++p) {
145 if (longFormat) s << "\n";
146 if (i == 0 || longFormat) s << " TAV";
147 if (longFormat) s << std::setw(1) << i;
148 s << LVL1CTP::convertToHex(data[p].roIWord());
149 if (longFormat) s << std::endl;
150 }
151
152 return s.str();
153 }
154
155
157 {
158 SmartIF<IMessageSvc> msgSvc{Gaudi::svcLocator()->service("MessageSvc")};
159 if ( !msgSvc ) {
160 return;
161 }
162 MsgStream log(msgSvc, "CTPResult");
163 dumpData(log);
164 }
165
166 void CTPResult::dumpData(MsgStream& log) const
167 {
168 log << MSG::DEBUG << "*BEGIN* CTPResult" << endmsg;
169 m_CTPResultHeader.dumpData(log);
170 int counter = 0;
171 std::vector< CTPRoI >::const_iterator it = m_CTPResultRoIVec.begin();
172 for(; it != m_CTPResultRoIVec.end(); ++it,++counter) {
173 log << MSG::DEBUG << "RoI word[" << counter << "] : 0x"
174 << MSG::hex << it->roIWord() << MSG::dec << endmsg;
175 }
176 m_CTPResultTrailer.dumpData(log);
177 log << MSG::DEBUG << "*END* CTPResult" << endmsg;
178 }
179
180 // convert vector of ints into bitset
181 std::bitset<512> convertToBitset(const std::vector<uint32_t>& words)
182 {
183 std::bitset<512> bitset;
184
185 for (size_t i(0); i < words.size(); ++i) {
186 std::bitset<512> bs = words[i];
187 bs <<= (i * 32);
188 bitset |= bs;
189 }
190
191 return bitset;
192 }
193
194 // convert vector of CTPRoIs into bitset
195 std::bitset<512> convertToBitset(const std::vector<CTPRoI>& words)
196 {
197 std::bitset<512> bitset;
198
199 for (size_t i(0); i < words.size(); ++i) {
200 std::bitset<512> bs = words[i].roIWord();
201 bs <<= (i * 32);
202 bitset |= bs;
203 }
204
205 return bitset;
206 }
207
208} // namespace ROIB
#define endmsg
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
const std::string convert(const std::vector< CTPRoI > &data, const bool longFormat=false) const
convert data content into string (used by dump and print)
Definition CTPResult.cxx:84
const Header & header() const
return header
void dumpData() const
print object content to default message stream
Trailer m_CTPResultTrailer
trailer fragment in LVL1 eformat
std::vector< CTPRoI > m_CTPResultRoIVec
raw data content (RoIs)
const std::string print(const bool longFormat=false) const
print object content in a human readable format to string
Definition CTPResult.cxx:71
Header m_CTPResultHeader
header fragment in LVL1 eformat
const std::vector< CTPRoI > & roIVec() const
return the RoI vector *‍/
const std::string dump() const
dump raw object content to string
Definition CTPResult.cxx:56
const Trailer & trailer() const
return trailer
CTPResult()
default constructor: empty object
Header models the LVL1 ROD Header.
const std::string print(const bool longFormat=false) const
print object content in a human readable format to string
const std::string dump() const
dump raw object content to string
ROIB::Trailer models the LVL1 ROD Trailer.
Definition Trailer.h:37
const std::string dump() const
dump raw object content to string
Definition Trailer.cxx:45
const std::string print(const bool longFormat=false) const
print object content in a human readable format to string
Definition Trailer.cxx:56
std::string head(std::string s, const std::string &pattern)
head of a string
const std::string convertToHex(const uint32_t word)
helper function to dump a number in hex format
Namespace of the LVL1 RoIB simulation.
std::bitset< 512 > convertToBitset(const std::vector< uint32_t > &words)
convert vector of unsigned int into bitset
STL namespace.