ATLAS Offline Software
CTPResultUtils.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Includes
7 
8 // Local include
10 
11 // TDAQ include
12 #include "CTPfragment/CTPdataformatVersion.h"
13 
14 namespace CTPResultUtils {
15 
16  // Initialize takes the number of BCs of the readout window as argument
17  void initialize(xAOD::CTPResult& ctpRes, uint32_t ctpVersionNumber, const uint32_t nBCs, uint32_t nExtraWords) {
18  CTPdataformatVersion ctpDataFormat(ctpVersionNumber);
19  ctpRes.setCtpVersionNumber(ctpVersionNumber);
20  setNumberOfBunches(ctpRes, nBCs);
21  setNumberOfAdditionalWords(ctpRes, nExtraWords);
22 
23  // create correct length, zero filled data member
24  std::vector<uint32_t> words;
25  words.resize(ctpDataFormat.getNumberTimeWords()+(nBCs*ctpDataFormat.getDAQwordsPerBunch() )+nExtraWords);
26  ctpRes.setDataWords(words);
27  }
28 
29  // Initialize taking the data words of one or several BCs as argument
30  void initialize(xAOD::CTPResult& ctpRes, uint32_t ctpVersionNumber, const std::vector<uint32_t>& data, uint32_t nExtraWords) {
31  CTPdataformatVersion ctpDataFormat(ctpVersionNumber);
32  ctpRes.setCtpVersionNumber(ctpVersionNumber);
33  ctpRes.setDataWords(data);
34  setNumberOfAdditionalWords(ctpRes, nExtraWords);
35 
36  //additional initialisation
37  if (!ctpRes.dataWords().size()) {
38  setNumberOfBunches(ctpRes, 0u);
39  } else {
40  uint32_t words = static_cast<uint32_t>(ctpRes.dataWords().size()) - ctpDataFormat.getNumberTimeWords() - nExtraWords;
41  setNumberOfBunches(ctpRes, words / ctpDataFormat.getDAQwordsPerBunch());
42  }
43  }
44 
45  // get the time in sec
47  CTPdataformatVersion ctpDataFormat(ctpRes.ctpVersionNumber());
48  if(ctpRes.dataWords().size() <= ctpDataFormat.getTimeSecondsPos()){
49  return 0;
50  }
51  return ctpRes.dataWords().at(ctpDataFormat.getTimeSecondsPos());
52  }
53 
54  // set the time in sec
55  void setTimeSec(xAOD::CTPResult& ctpRes, const uint32_t sec) {
56  CTPdataformatVersion ctpDataFormat(ctpRes.ctpVersionNumber());
57  std::vector<uint32_t> words = ctpRes.dataWords();
58  if (ctpDataFormat.getTimeSecondsPos() < words.size()) {
59  words[ctpDataFormat.getTimeSecondsPos()] = sec;
60  ctpRes.setDataWords(words);
61  }
62  }
63 
64  // get the time in nanosec
66  CTPdataformatVersion ctpDataFormat(ctpRes.ctpVersionNumber());
67  if(ctpRes.dataWords().size() <= ctpDataFormat.getTimeNanosecondsPos()) {
68  return 0;
69  }
70  return (ctpRes.dataWords().at(ctpDataFormat.getTimeNanosecondsPos() ) >> ctpDataFormat.getTimeNanosecondsOffset() ) * ctpDataFormat.getTimeNanosecondsTicks();
71  }
72 
73  // set the time in nanosec
74  void setTimeNanoSec(xAOD::CTPResult& ctpRes, const uint32_t nano) {
75  CTPdataformatVersion ctpDataFormat(ctpRes.ctpVersionNumber());
76  std::vector<uint32_t> words = ctpRes.dataWords();
77  if(ctpDataFormat.getTimeNanosecondsPos() < words.size()) {
78  words[ctpDataFormat.getTimeNanosecondsPos()] = ((nano/ctpDataFormat.getTimeNanosecondsTicks()) << ctpDataFormat.getTimeNanosecondsOffset());
79  ctpRes.setDataWords(words);
80  }
81  }
82 
83  // set the number of bunches
84  void setNumberOfBunches(xAOD::CTPResult& ctpRes, const uint32_t nBCs) {
85  if(nBCs > ctpRes.numberOfBunches()) {
86  static const SG::AuxElement::Accessor< uint32_t > acc("numberOfBunches");
87  acc(ctpRes) = nBCs;
88  CTPdataformatVersion ctpDataFormat(ctpRes.ctpVersionNumber());
89  std::vector<uint32_t> words = ctpRes.dataWords();
90  words.resize(ctpDataFormat.getNumberTimeWords()+(nBCs*ctpDataFormat.getDAQwordsPerBunch())+ctpRes.numberOfAdditionalWords());
91  ctpRes.setDataWords(words);
92  }
93  }
94 
95  // set the number of additional words
96  void setNumberOfAdditionalWords(xAOD::CTPResult& ctpRes, const uint32_t nExtraWords) {
97  if(nExtraWords > ctpRes.numberOfAdditionalWords()) {
98  CTPdataformatVersion ctpDataFormat(ctpRes.ctpVersionNumber());
99  std::vector<uint32_t> words = ctpRes.dataWords();
100  words.resize(ctpRes.dataWords().size()+nExtraWords-ctpRes.numberOfAdditionalWords());
101  ctpRes.setDataWords(words);
102  }
103  static const SG::AuxElement::Accessor< uint32_t > acc("numberOfAdditionalWords");
104  acc(ctpRes) = nExtraWords;
105  }
106 
107  // get TIP words
108  std::vector<uint32_t> getTIPWords(const xAOD::CTPResult& ctpRes) {return getWords(ctpRes, WordType::TIP);}
109 
110  // get TBP words
111  std::vector<uint32_t> getTBPWords(const xAOD::CTPResult& ctpRes) {return getWords(ctpRes, WordType::TBP);}
112 
113  // get TAP words
114  std::vector<uint32_t> getTAPWords(const xAOD::CTPResult& ctpRes) {return getWords(ctpRes, WordType::TAP);}
115 
116  // get TAV words
117  std::vector<uint32_t> getTAVWords(const xAOD::CTPResult& ctpRes) {return getWords(ctpRes, WordType::TAV);}
118 
119  // get Extra words
120  std::vector<uint32_t> getExtraWords(const xAOD::CTPResult& ctpRes) {return getWords(ctpRes, WordType::Extra);}
121 
122  // helper function to get words
123  std::vector<uint32_t> getWords(const xAOD::CTPResult& ctpRes, CTPResultUtils::WordType type) {
124  unsigned int nWords = 0;
125  unsigned int offset = 0;
126  std::vector<uint32_t> vec;
127  vec.clear();
128  CTPdataformatVersion ctpDataFormat(ctpRes.ctpVersionNumber());
129  switch (type) {
130  case WordType::TIP:
131  nWords = ctpDataFormat.getTIPwords();
132  offset = ctpDataFormat.getTIPpos();
133  break;
134  case WordType::TBP:
135  nWords = ctpDataFormat.getTBPwords();
136  offset = ctpDataFormat.getTBPpos();
137  break;
138  case WordType::TAP:
139  nWords = ctpDataFormat.getTAPwords();
140  offset = ctpDataFormat.getTAPpos();
141  break;
142  case WordType::TAV:
143  nWords = ctpDataFormat.getTAVwords();
144  offset = ctpDataFormat.getTAVpos();
145  break;
146  case WordType::Extra:
147  vec.assign(ctpRes.dataWords().begin() + (ctpRes.dataWords().size()-ctpRes.numberOfAdditionalWords()), ctpRes.dataWords().end());
148  return vec;
149  break;
150  default:
151  break;
152  }
153  for(unsigned int bunch = 0 ; bunch < ctpRes.numberOfBunches() ; ++bunch) {
154  for(unsigned int tbp = 0; tbp < nWords; ++tbp) {
155  // take offset of TBPwords into account
156  unsigned int index = offset + tbp;
157  // go to the correct bunch
158  index += (bunch * ctpDataFormat.getDAQwordsPerBunch());
159  if( index < ctpRes.dataWords().size() ) {
160  vec.push_back(ctpRes.dataWords()[index]);
161  }
162  }
163  }
164  // this is now a list of consecutive data words for all bunches
165  return vec;
166  }
167 
168 
169 } // namespace CTPResultUtils
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
CTPResultUtils::setTimeSec
void setTimeSec(xAOD::CTPResult &ctpRes, const uint32_t sec)
Set the time in seconds.
Definition: CTPResultUtils.cxx:55
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:68
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
CTPResultUtils::getExtraWords
std::vector< uint32_t > getExtraWords(const xAOD::CTPResult &ctpRes)
Get additional words.
Definition: CTPResultUtils.cxx:120
CTPResultUtils::getTIPWords
std::vector< uint32_t > getTIPWords(const xAOD::CTPResult &ctpRes)
Get the TIP (Trigger Inputs to the CTP) words (in Run3 512 items)
Definition: CTPResultUtils.cxx:108
index
Definition: index.py:1
CTPResultUtils::getTimeSec
uint32_t getTimeSec(const xAOD::CTPResult &ctpRes)
Get the time in seconds.
Definition: CTPResultUtils.cxx:46
CTPResultUtils::WordType::Extra
@ Extra
CTPResultUtils.h
xAOD::CTPResult_v1::ctpVersionNumber
uint32_t ctpVersionNumber() const
Get the CTP version number.
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
CTPResultUtils::setTimeNanoSec
void setTimeNanoSec(xAOD::CTPResult &ctpRes, const uint32_t nano)
Set the time in nanoseconds.
Definition: CTPResultUtils.cxx:74
xAOD::CTPResult_v1
This is the trigger result for each item before prescale, after prescale and after veto....
Definition: CTPResult_v1.h:23
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
CTPResultUtils::WordType::TBP
@ TBP
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
CTPResultUtils::setNumberOfAdditionalWords
void setNumberOfAdditionalWords(xAOD::CTPResult &ctpRes, const uint32_t nExtraWords)
Set the number of additional data words.
Definition: CTPResultUtils.cxx:96
CTPResultUtils::initialize
void initialize(xAOD::CTPResult &ctpRes, uint32_t ctpVersionNumber, const uint32_t nBCs, uint32_t nExtraWords)
Initialize with a number of bunch crossings of the readout window.
Definition: CTPResultUtils.cxx:17
CTPResultUtils::getTAPWords
std::vector< uint32_t > getTAPWords(const xAOD::CTPResult &ctpRes)
Get the TAP (Trigger After Prescale) words.
Definition: CTPResultUtils.cxx:114
CxxUtils::vec
typename vecDetail::vec_typedef< T, N >::type vec
Define a nice alias for the vectorized type.
Definition: vec.h:207
CTPResultUtils::WordType
WordType
Enum describing the different word types in the CTP result.
Definition: CTPResultUtils.h:27
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
xAOD::CTPResult_v1::numberOfAdditionalWords
uint32_t numberOfAdditionalWords() const
Get the number of additional data words.
CTPResultUtils::setNumberOfBunches
void setNumberOfBunches(xAOD::CTPResult &ctpRes, const uint32_t nBCs)
Set the number of bunch crossings.
Definition: CTPResultUtils.cxx:84
CTPResultUtils::WordType::TIP
@ TIP
PlotCalibFromCool.words
words
Definition: PlotCalibFromCool.py:51
CTPResultUtils::getTimeNanoSec
uint32_t getTimeNanoSec(const xAOD::CTPResult &ctpRes)
Get the time in nanoseconds.
Definition: CTPResultUtils.cxx:65
xAOD::CTPResult_v1::setDataWords
void setDataWords(const std::vector< uint32_t > &words)
Set the raw data words.
xAOD::CTPResult_v1::numberOfBunches
uint32_t numberOfBunches() const
Get the number of bunch crossings.
DeMoScan.index
string index
Definition: DeMoScan.py:362
CTPResultUtils::getTAVWords
std::vector< uint32_t > getTAVWords(const xAOD::CTPResult &ctpRes)
Get the TAV (Trigger After Veto) words.
Definition: CTPResultUtils.cxx:117
CTPResultUtils::WordType::TAP
@ TAP
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
xAOD::CTPResult_v1::dataWords
const std::vector< uint32_t > & dataWords() const
Get the raw data words.
CTPResultUtils::WordType::TAV
@ TAV
CTPResultUtils
Utility functions for xAOD::CTPResult objects that rely on tdaq-common.
Definition: CTPResultUtils.cxx:14
CTPResultUtils::getWords
std::vector< uint32_t > getWords(const xAOD::CTPResult &ctpRes, CTPResultUtils::WordType type)
Helper to retrieve specific words.
Definition: CTPResultUtils.cxx:123
xAOD::CTPResult_v1::setCtpVersionNumber
void setCtpVersionNumber(const uint32_t ctpNumber)
Set the CTP version number.
AuxElement.h
Base class for elements of a container that can have aux data.
CTPResultUtils::getTBPWords
std::vector< uint32_t > getTBPWords(const xAOD::CTPResult &ctpRes)
Get the TBP (Trigger Before Prescale) words.
Definition: CTPResultUtils.cxx:111