ATLAS Offline Software
Loading...
Searching...
No Matches
CTP_Decoder Class Reference

#include <CTP_Decoder.h>

Inheritance diagram for CTP_Decoder:
Collaboration diagram for CTP_Decoder:

Public Member Functions

 CTP_Decoder ()
 Helper class to decode the CTP data fragment.
void setRDO (const CTP_RDO *rdo)
 Set RDO and fill internal variables from the data object.
const CTP_RDOgetRDO () const
 Accessor function to retrieve pointer to RDO object.
const std::vector< CTP_BC > & getBunchCrossings ()
 Get vector reference of bunch-crossing data of the current event.
const CTP_BCgetBunchCrossing (unsigned int pos)
 Get data of a single bunch-crossing.
bool checkTrigger (unsigned int itemNo, unsigned int bcPos)
 Test the LVL1 trigger result for a certain trigger item.
bool checkTriggerAfterPrescale (unsigned int itemNo, unsigned int bcPos)
 Test the LVL1 trigger result after pre-scale factors are applied, before the final trigger decision, which includes the trigger masks, is taken.
std::vector< unsigned int > getAllTriggers (unsigned int bcPos)
 Function to obtain a vector with the numbers of the trigger items that fired for the current event.
void dumpData () const
 Helper to dump data for debugging.
bool msgLvl (const MSG::Level lvl) const
 Test the output level.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.
void setLevel (MSG::Level lvl)
 Change the current logging level.

Private Member Functions

void initMessaging () const
 Initialize our message level and MessageSvc.

Private Attributes

const CTP_RDOm_rdo {nullptr}
 The RDO member.
std::vector< CTP_BCm_BCs
 Vector of BCs for the current event.
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels)
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging)

Detailed Description

Definition at line 141 of file CTP_Decoder.h.

Constructor & Destructor Documentation

◆ CTP_Decoder()

CTP_Decoder::CTP_Decoder ( )

Helper class to decode the CTP data fragment.

Date
2007-07-10 14:58:38
   The CTP ROD data fragment contains the LVL1 trigger
   inputs (160 PITs), and the final trigger result in three
   stages, before pre-scale factors, after pre-scale
   factors, and after veto (dead-time, busy). All of these
   trigger bits can be stored for a number of
   bunch-crossings (BCs), up to 63, where the L1A can be
   almost anywhere within this window. 

   In addition, the GPS time-stamp of the LVL1 trigger
   decision is stored as part of the data fragment.
See also
CTP_RDO
Author
David Berge berge.nosp@m.@cer.nosp@m.n.ch
Eleanor Dobson elean.nosp@m.or.d.nosp@m.obson.nosp@m.@cer.nosp@m.n.ch
Version
$ $ Default constructor

Definition at line 15 of file CTP_Decoder.cxx.

15 :
16 AthMessaging(Athena::getMessageSvc(), "CTP_Decoder")
17{
18}
AthMessaging()
Default constructor:
IMessageSvc * getMessageSvc(bool quiet=false)

Member Function Documentation

◆ checkTrigger()

bool CTP_Decoder::checkTrigger ( unsigned int itemNo,
unsigned int bcPos )

Test the LVL1 trigger result for a certain trigger item.

Parameters
itemNoThe trigger item that shall be tested
bcPosThe bunch-crossing in the readout window that is to be checked
Returns
A boolean value is returned indicating whether or not the trigger item has fired for a given event

Definition at line 143 of file CTP_Decoder.cxx.

144{
145 if(pos >= m_BCs.size()) {
146 ATH_MSG_WARNING("Trying to access bunch crossing no "
147 << pos << ", but in the event are only " << m_BCs.size());
148 return false;
149 }
150 if(itemNo >= getBunchCrossing(pos).getTAV().size()) {
151 ATH_MSG_WARNING("Checking item no " << itemNo
152 << ", which is more than the maximum : "
153 << getBunchCrossing(pos).getTAV().size());
154 }
155 return getBunchCrossing(pos).getTAV().test(itemNo);
156}
#define ATH_MSG_WARNING(x)
const std::bitset< 512 > & getTAV() const
get bitset of TAV words
std::vector< CTP_BC > m_BCs
Vector of BCs for the current event.
const CTP_BC & getBunchCrossing(unsigned int pos)
Get data of a single bunch-crossing.

◆ checkTriggerAfterPrescale()

bool CTP_Decoder::checkTriggerAfterPrescale ( unsigned int itemNo,
unsigned int bcPos )

Test the LVL1 trigger result after pre-scale factors are applied, before the final trigger decision, which includes the trigger masks, is taken.

Here one sees all triggers of an event, irrespective of the trigger mask.

Parameters
itemNoThe trigger item that shall be tested
bcPosThe bunch-crossing in the readout window that is to be checked
Returns
A boolean value is returned indicating whether or not the trigger item is on before the veto step for a given event

Definition at line 158 of file CTP_Decoder.cxx.

158 {
159 if(pos >= m_BCs.size()) {
160 ATH_MSG_WARNING("Trying to access bunch crossing no "
161 << pos << ", but in the event are only " << m_BCs.size());
162 return false;
163 }
164 if(itemNo >= getBunchCrossing(pos).getTAP().size()) {
165 ATH_MSG_WARNING("Checking item no " << itemNo
166 << ", which is more than the maximum : "
167 << getBunchCrossing(pos).getTAP().size());
168 }
169 return getBunchCrossing(pos).getTAP().test(itemNo);
170}
const std::bitset< 512 > & getTAP() const
get bitset of TAP words

◆ dumpData()

void CTP_Decoder::dumpData ( ) const

Helper to dump data for debugging.

Definition at line 107 of file CTP_Decoder.cxx.

108{
109 unsigned int nBunches = m_rdo->getNumberOfBunches();
110 unsigned int vecSize = m_BCs.size();
111
112 if(nBunches == 0) {
113 ATH_MSG_DEBUG("CTP_RDO empty");
114 return;
115 }
116
117 if(nBunches != vecSize) {
118 ATH_MSG_ERROR("mismatch: " << nBunches << " bunches, but vector size is " << vecSize);
119 }
120
121 if( msgLvl(MSG::DEBUG) ){
122 msg() << MSG::DEBUG << "=================================================" << endmsg;
123 msg() << MSG::DEBUG << "Event dump" << endmsg;
124 msg() << MSG::DEBUG << "Time " << m_rdo->getTimeSec() << "s "
125 << std::setw(10) << std::setiosflags(std::ios_base::right) << std::setfill(' ')
126 << m_rdo->getTimeNanoSec() << std::resetiosflags(std::ios_base::right)
127 << "ns" << endmsg;
128 msg() << MSG::DEBUG << "Number of bunches: " << nBunches
129 << " (BC vector size " << vecSize << ")" << endmsg;
130 msg() << MSG::DEBUG << "L1A position: " << m_rdo->getL1AcceptBunchPosition() << endmsg;
131 }
132
133 for(unsigned int i = 0; i<vecSize; ++i) {
134 ATH_MSG_DEBUG("Now dumping BC " << i);
135 m_BCs[i].dumpData(msg());
136 }
137
138 ATH_MSG_DEBUG("=================================================");
139}
#define endmsg
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
MsgStream & msg() const
The standard message stream.
bool msgLvl(const MSG::Level lvl) const
Test the output level.
const CTP_RDO * m_rdo
The RDO member.

◆ getAllTriggers()

std::vector< unsigned int > CTP_Decoder::getAllTriggers ( unsigned int bcPos)

Function to obtain a vector with the numbers of the trigger items that fired for the current event.

Parameters
bcPosThe bunch-crossing in the readout window that is to be used
Returns
A vector<unsigned int> with the list of trigger items that fired in the event (trigger-item numbers run from 1 to 256 for run-I and from 1 to 512 for run-II).

Definition at line 174 of file CTP_Decoder.cxx.

174 {
175 if(pos >= m_BCs.size()) {
176 ATH_MSG_WARNING("Trying to access bunch crossing no "
177 << pos << ", but in the event are only " << m_BCs.size());
178 return std::vector<unsigned int>();
179 }
180 std::vector<unsigned int> triggers;
181 const CTP_BC& bc = getBunchCrossing(pos);
182 if(bc.getTAV().any()) {
183 for(unsigned int i = 0; i < bc.getTAV().size() ; ++i) {
184 if(bc.getTAV().test(i)) {
185 triggers.push_back(i+1);
186 }
187 }
188 }
189 return triggers;
190}

◆ getBunchCrossing()

const CTP_BC & CTP_Decoder::getBunchCrossing ( unsigned int pos)
inline

Get data of a single bunch-crossing.

Definition at line 184 of file CTP_Decoder.h.

184 {
185 return m_BCs[pos];
186 }

◆ getBunchCrossings()

const std::vector< CTP_BC > & CTP_Decoder::getBunchCrossings ( )
inline

Get vector reference of bunch-crossing data of the current event.

Definition at line 180 of file CTP_Decoder.h.

180 {
181 return m_BCs;
182 }

◆ getRDO()

const CTP_RDO * CTP_Decoder::getRDO ( ) const
inline

Accessor function to retrieve pointer to RDO object.

Definition at line 176 of file CTP_Decoder.h.

176 {
177 return m_rdo;
178 }

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 163 of file AthMessaging.h.

164{
165 MsgStream* ms = m_msg_tls.get();
166 if (!ms) {
167 if (!m_initialized.test_and_set()) initMessaging();
168 ms = new MsgStream(m_imsg,m_nm);
169 m_msg_tls.reset( ms );
170 }
171
172 ms->setLevel (m_lvl);
173 return *ms;
174}
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
void initMessaging() const
Initialize our message level and MessageSvc.

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 178 of file AthMessaging.h.

179{ return msg() << lvl; }

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152{
153 if (m_lvl <= lvl) {
154 msg() << lvl;
155 return true;
156 } else {
157 return false;
158 }
159}

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ setRDO()

void CTP_Decoder::setRDO ( const CTP_RDO * rdo)

Set RDO and fill internal variables from the data object.

Definition at line 20 of file CTP_Decoder.cxx.

21{
22 m_rdo = rdo;
23 unsigned int ctpVersionNumber = m_rdo->getCTPVersionNumber();
24 CTPdataformatVersion ctpVersion(ctpVersionNumber);
25
26 unsigned int nBunches = rdo->getNumberOfBunches();
27 ATH_MSG_DEBUG("setRDO> #bunches: " << nBunches << ", ctp version (found in RDO): " << ctpVersionNumber);
28 ATH_MSG_VERBOSE(ctpVersion.dump());
29
30 m_BCs.clear();
31 m_BCs.resize(nBunches);
32 for (CTP_BC& bc : m_BCs) {
33 bc.setCTPVersion(ctpVersionNumber);
34 }
35
36 //std::vector<uint32_t> PITs = rdo->getPITWords();
37 //std::vector<uint32_t> FPIs = rdo->getFPIWords();
38 const std::vector<uint32_t> & TIPs = rdo->getTIPWords();
39 const std::vector<uint32_t> & TBPs = rdo->getTBPWords();
40 const std::vector<uint32_t> & TAPs = rdo->getTAPWords();
41 const std::vector<uint32_t> & TAVs = rdo->getTAVWords();
42
43 if( nBunches * ctpVersion.getTIPwords() != TIPs.size() ) {
44 ATH_MSG_FATAL("Expected " << nBunches * ctpVersion.getTIPwords() << " TIP words, but TIP vector has size " << TIPs.size());
45 } else {
46 ATH_MSG_DEBUG(TIPs.size() << " TIP words as expected");
47 }
48 if( nBunches * ctpVersion.getTBPwords() != TBPs.size() ) {
49 ATH_MSG_FATAL(nBunches * ctpVersion.getTBPwords() << " TBP words, but TBP vector has size " << TBPs.size());
50 } else {
51 ATH_MSG_DEBUG(TBPs.size() << " TBP words as expected");
52 }
53 if( nBunches * ctpVersion.getTAPwords() != TAPs.size() ) {
54 ATH_MSG_FATAL(nBunches * ctpVersion.getTAPwords() << " TAP words, but TAP vector has size " << TAPs.size());
55 } else {
56 ATH_MSG_DEBUG(TAPs.size() << " TAP words as expected");
57 }
58 if( nBunches * ctpVersion.getTAVwords() != TAVs.size() ) {
59 ATH_MSG_FATAL(nBunches * ctpVersion.getTAVwords() << " TAV words, but TAV vector has size " << TAVs.size());
60 } else {
61 ATH_MSG_DEBUG(TAVs.size() << " TAV words as expected");
62 }
63
64
65 for(unsigned int i = 0 ; i < nBunches ; ++i) {
66
67 ATH_MSG_DEBUG(i << " from CTP_RDO to internal bitsets");
68
69 for(unsigned int tip = 0; tip < ctpVersion.getTIPwords(); ++tip) {
70 unsigned int index = i*ctpVersion.getTIPwords() + tip;
71 if(index >= TIPs.size()) {
72 ATH_MSG_FATAL("Invalid TIP position " << index);
73 return;
74 }
75 m_BCs[i].setTIPWord(TIPs[index],tip); //sets m_tip
76 }
77
78 for(unsigned int tbp = 0; tbp < ctpVersion.getTBPwords(); ++tbp) {
79 unsigned int index = i * ctpVersion.getTBPwords() + tbp;
80 if(index >= TBPs.size()) {
81 ATH_MSG_FATAL("Invalid TBP position " << index);
82 return;
83 }
84 m_BCs[i].setTBPWord(TBPs[index],tbp); //sets m_tbp
85 }
86
87 for(unsigned int tap = 0; tap < ctpVersion.getTAPwords(); ++tap) {
88 unsigned int index = i * ctpVersion.getTAPwords() + tap;
89 if(index >= TAPs.size()) {
90 ATH_MSG_FATAL("Invalid TAP position " << index);
91 return;
92 }
93 m_BCs[i].setTAPWord(TAPs[index],tap); //sets m_tap
94 }
95
96 for(unsigned int tav = 0; tav < ctpVersion.getTAVwords(); ++tav) {
97 unsigned int index = i * ctpVersion.getTAVwords() + tav;
98 if(index >= TAVs.size()) {
99 ATH_MSG_FATAL("Invalid TAV position " << index);
100 return;
101 }
102 m_BCs[i].setTAVWord(TAVs[index],tav); //set m_tav
103 }
104 }
105}
#define ATH_MSG_FATAL(x)
#define ATH_MSG_VERBOSE(x)
std::vector< uint32_t > getTBPWords() const
Definition CTP_RDO.cxx:206
std::vector< uint32_t > getTAPWords() const
Definition CTP_RDO.cxx:211
uint32_t getNumberOfBunches() const
Definition CTP_RDO.cxx:89
std::vector< uint32_t > getTIPWords() const
Definition CTP_RDO.cxx:201
std::vector< uint32_t > getTAVWords() const
Definition CTP_RDO.cxx:216
str index
Definition DeMoScan.py:362
setBGCode tap

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_BCs

std::vector<CTP_BC> CTP_Decoder::m_BCs
private

Vector of BCs for the current event.

Definition at line 225 of file CTP_Decoder.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_rdo

const CTP_RDO* CTP_Decoder::m_rdo {nullptr}
private

The RDO member.

Definition at line 223 of file CTP_Decoder.h.

223{nullptr};

The documentation for this class was generated from the following files: