Project
Loading...
Searching...
No Matches
EventRecord.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef ALICEO2_TRD_EVENTRECORD_H
13#define ALICEO2_TRD_EVENTRECORD_H
14
17#include <fairlogger/Logger.h>
21
22namespace o2::framework
23{
24class ProcessingContext;
25}
26
27namespace o2::trd
28{
29class TriggerRecord;
30
34{
36
37 public:
38 EventRecord() = default;
40 ~EventRecord() = default;
41
42 const BCData& getBCData() const { return mBCData; }
43
44 void addDigit(Digit digit) { mDigits.push_back(digit); }
45 void addTracklet(Tracklet64 tracklet) { mTracklets.push_back(tracklet); }
46
47 const std::vector<Digit>& getDigits() const { return mDigits; }
48 const std::vector<Tracklet64>& getTracklets() const { return mTracklets; }
49 bool getIsCalibTrigger() const { return mIsCalibTrigger; }
50 float getTotalTime() const { return mTimeTaken; }
51 float getDigitTime() const { return mTimeTakenForDigits; }
52 float getTrackletTime() const { return mTimeTakenForTracklets; }
53 DataCountersPerTrigger getCounters() const { return mCounters; }
54 DataCountersPerTrigger& getCounters() { return mCounters; }
55
56 // needed, in order to check if a trigger already exist for this bunch crossing
57 bool operator==(const EventRecord& o) const { return mBCData == o.mBCData; }
58
59 // sort the tracklets (and optionally digits) by detector, pad row, pad column
60 void sortData(bool sortDigits);
61
62 void incTrackletTime(float timeadd) { mTimeTakenForTracklets += timeadd; }
63 void incDigitTime(float timeadd) { mTimeTakenForDigits += timeadd; }
64 void incTime(float duration) { mTimeTaken += duration; }
65 void setIsCalibTrigger() { mIsCalibTrigger = true; }
66
67 private:
68 BCData mBCData;
69 std::vector<Digit> mDigits{};
70 std::vector<Tracklet64> mTracklets{};
71 float mTimeTaken = 0.; // total parsing time [us] (including digit and tracklet parsing time)
72 float mTimeTakenForDigits = 0.; // time take to process tracklet data blocks [us].
73 float mTimeTakenForTracklets = 0.; // time take to process digit data blocks [us].
74 bool mIsCalibTrigger = false; // flag calibration trigger
75 DataCountersPerTrigger mCounters; // optionally collect statistics per trigger
76};
77
81{
82
83 public:
86
87 void sendData(o2::framework::ProcessingContext& pc, bool generatestats, bool sortDigits, bool sendLinkStats);
88
90 EventRecord& getCurrentEventRecord() { return mEventRecords.at(mCurrEventRecord); }
91
92 // statistics to keep
93 void incLinkErrorFlags(int hcid, unsigned int flag) { mTFStats.mLinkErrorFlag[hcid] |= flag; }
94 void incLinkNoData(int hcid) { mTFStats.mLinkNoData[hcid]++; }
95 void incLinkWords(int hcid, int count) { mTFStats.mLinkWords[hcid] += count; }
96 void incLinkWordsRead(int hcid, int count) { mTFStats.mLinkWordsRead[hcid] += count; }
97 void incLinkWordsRejected(int hcid, int count) { mTFStats.mLinkWordsRejected[hcid] += count; }
99
100 void incParsingError(int error, int hcid)
101 {
102 mTFStats.mParsingErrors[error]++;
103 if (hcid >= 0) { // hcid==-1 is reserved for those errors where we don't have the corresponding link ID
104 if (error == NoError) {
105 mTFStats.mParsingOK[hcid]++;
106 } else {
107 mTFStats.mParsingErrorsByLink.push_back(hcid * TRDLastParsingError + error);
108 }
109 }
110 }
111 void reset();
112 void accumulateStats();
113
114 private:
115 int mCurrEventRecord = 0;
116 std::vector<EventRecord> mEventRecords;
118};
119
120} // namespace o2::trd
121
122#endif
bool o
Class to refer to the 1st entry and N elements of some group in the continuous container.
uint32_t version
Definition RawData.h:8
uint32_t bunchcrossing
Definition RawData.h:3
Stores the TRD data for one TF i.e. a vector of EventRecords and some statistics.
Definition EventRecord.h:81
void incLinkErrorFlags(int hcid, unsigned int flag)
Definition EventRecord.h:93
void incLinkWordsRead(int hcid, int count)
Definition EventRecord.h:96
void incLinkWordsRejected(int hcid, int count)
Definition EventRecord.h:97
void incMajorVersion(int version)
Definition EventRecord.h:98
void incParsingError(int error, int hcid)
void incLinkWords(int hcid, int count)
Definition EventRecord.h:95
void sendData(o2::framework::ProcessingContext &pc, bool generatestats, bool sortDigits, bool sendLinkStats)
EventRecord & getCurrentEventRecord()
Definition EventRecord.h:90
void setCurrentEventRecord(const InteractionRecord &ir)
Stores a TRD event.
Definition EventRecord.h:34
float getDigitTime() const
Definition EventRecord.h:51
float getTrackletTime() const
Definition EventRecord.h:52
void incDigitTime(float timeadd)
Definition EventRecord.h:63
DataCountersPerTrigger getCounters() const
Definition EventRecord.h:53
void incTrackletTime(float timeadd)
Definition EventRecord.h:62
const std::vector< Digit > & getDigits() const
Definition EventRecord.h:47
bool operator==(const EventRecord &o) const
Definition EventRecord.h:57
const std::vector< Tracklet64 > & getTracklets() const
Definition EventRecord.h:48
void sortData(bool sortDigits)
const BCData & getBCData() const
Definition EventRecord.h:42
void addTracklet(Tracklet64 tracklet)
Definition EventRecord.h:45
EventRecord(BCData bunchcrossing)
Definition EventRecord.h:39
float getTotalTime() const
Definition EventRecord.h:50
DataCountersPerTrigger & getCounters()
Definition EventRecord.h:54
bool getIsCalibTrigger() const
Definition EventRecord.h:49
void addDigit(Digit digit)
Definition EventRecord.h:44
void incTime(float duration)
Definition EventRecord.h:64
std::array< uint16_t, constants::MAXHALFCHAMBER > mParsingOK
std::array< int, 256 > mDataFormatRead
std::array< uint16_t, constants::MAXHALFCHAMBER > mLinkWordsRead
std::array< uint16_t, TRDLastParsingError > mParsingErrors
std::array< uint16_t, constants::MAXHALFCHAMBER > mLinkWords
std::array< uint16_t, constants::MAXHALFCHAMBER > mLinkNoData
std::array< uint8_t, constants::MAXHALFCHAMBER > mLinkErrorFlag
std::vector< uint32_t > mParsingErrorsByLink
std::array< uint16_t, constants::MAXHALFCHAMBER > mLinkWordsRejected
GLint GLsizei count
Definition glcorearb.h:399
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
@ TRDLastParsingError
o2::InteractionRecord ir(0, 0)