Skip to content

Commit e7bce0a

Browse files
authored
[EMCAL-526] Add histograms monitoring data statistics (#312)
Adding histograms for - Total data volume - Total number of messages - Total number of superpages - Total number of DMA pages - Number of pages per message - Number of superpages per message These histograms are essential in the commissioning phase. At a later stage some of the histograms will be dropped.
1 parent f14b627 commit e7bce0a

2 files changed

Lines changed: 83 additions & 8 deletions

File tree

Modules/EMCAL/include/EMCAL/RawTask.h

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,23 @@ class RawTask /*final*/ : public TaskInterface // todo add back the "final" when
5454

5555
private:
5656
TH1F* mHistogram = nullptr;
57-
std::array<TH1*, 20> mRawAmplitudeEMCAL; /// Raw amplitude in EMCAL
58-
std::unique_ptr<o2::emcal::MappingHandler> mMappings; //
59-
std::array<TProfile2D*, 20> mRMSperSM; //ADC rms per SM
60-
std::array<TProfile2D*, 20> mMEANperSM; //ADC mean per SM
61-
std::array<TProfile2D*, 20> mMAXperSM; //ADC max per SM
62-
std::array<TProfile2D*, 20> mMINperSM; //ADC min per SM
63-
TH2F* mErrorTypeAltro = nullptr; //Error from AltroDecoder
64-
TH2F* mPayloadSizePerDDL = nullptr; //Payload size per ddl
57+
TH1* mMessageCounter = nullptr;
58+
TH1* mNumberOfSuperpagesPerMessage;
59+
TH1* mNumberOfPagesPerMessage;
60+
TH1* mSuperpageCounter = nullptr; ///< Counter for number of superpages
61+
TH1* mPageCounter = nullptr; ///< Counter for number of pages (headers)
62+
TH1* mTotalDataVolume = nullptr; ///< Total data volume
63+
std::array<TH1*, 20> mRawAmplitudeEMCAL; ///< Raw amplitude in EMCAL
64+
std::unique_ptr<o2::emcal::MappingHandler> mMappings; ///< Mappings Hardware address -> Channel
65+
std::array<TProfile2D*, 20> mRMSperSM; ///< ADC rms per SM
66+
std::array<TProfile2D*, 20> mMEANperSM; ///< ADC mean per SM
67+
std::array<TProfile2D*, 20> mMAXperSM; ///< ADC max per SM
68+
std::array<TProfile2D*, 20> mMINperSM; ///< ADC min per SM
69+
TH2F* mErrorTypeAltro = nullptr; ///< Error from AltroDecoder
70+
TH2F* mPayloadSizePerDDL = nullptr; ///< Payload size per ddl
71+
Int_t mNumberOfSuperpages = 0; ///< Simple total superpage counter
72+
Int_t mNumberOfPages = 0; ///< Simple total number of superpages counter
73+
Int_t mNumberOfMessages = 0;
6574
};
6675

6776
} // namespace o2::quality_control_modules::emcal

Modules/EMCAL/src/RawTask.cxx

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,21 @@ RawTask::~RawTask()
4040
if (mPayloadSizePerDDL) {
4141
delete mPayloadSizePerDDL;
4242
}
43+
if (mMessageCounter) {
44+
delete mMessageCounter;
45+
}
46+
if (mPageCounter) {
47+
delete mPageCounter;
48+
}
49+
if (mSuperpageCounter) {
50+
delete mSuperpageCounter;
51+
}
52+
if (mNumberOfPagesPerMessage) {
53+
delete mNumberOfPagesPerMessage;
54+
}
55+
if (mNumberOfSuperpagesPerMessage) {
56+
delete mNumberOfSuperpagesPerMessage;
57+
}
4358
if (mErrorTypeAltro) {
4459
delete mErrorTypeAltro;
4560
}
@@ -81,6 +96,38 @@ void RawTask::initialize(o2::framework::InitContext& /*ctx*/)
8196

8297
mMappings = std::unique_ptr<o2::emcal::MappingHandler>(new o2::emcal::MappingHandler); //initialize the unique pointer to Mapper
8398

99+
// Statistics histograms
100+
mMessageCounter = new TH1F("NumberOfMessages", "Number of messages in time interval", 1, 0.5, 1.5);
101+
mMessageCounter->GetXaxis()->SetTitle("MonitorData");
102+
mMessageCounter->GetYaxis()->SetTitle("Number of messages");
103+
getObjectsManager()->startPublishing(mMessageCounter);
104+
105+
mSuperpageCounter = new TH1F("NumberOfSuperpages", "Number of superpages in time interval", 1, 0.5, 1.5);
106+
mSuperpageCounter->GetXaxis()->SetTitle("MonitorData");
107+
mSuperpageCounter->GetYaxis()->SetTitle("Number of superpages");
108+
getObjectsManager()->startPublishing(mSuperpageCounter);
109+
110+
mPageCounter = new TH1F("NumberOfPages", "Number of pages in time interval", 1, 0.5, 1.5);
111+
mPageCounter->GetXaxis()->SetTitle("MonitorData");
112+
mPageCounter->GetYaxis()->SetTitle("Number of pages");
113+
getObjectsManager()->startPublishing(mPageCounter);
114+
115+
mNumberOfSuperpagesPerMessage = new TH1F("NumberOfSuperpagesPerMessage", "Number of superpages per message", 40., 0., 40.);
116+
mNumberOfSuperpagesPerMessage->GetXaxis()->SetTitle("Number of superpages");
117+
mNumberOfSuperpagesPerMessage->GetYaxis()->SetTitle("Number of messages");
118+
getObjectsManager()->startPublishing(mNumberOfSuperpagesPerMessage);
119+
120+
mNumberOfPagesPerMessage = new TH1F("NumberOfPagesPerMessage", "Number of pages per message", 400, 0., 400.);
121+
mNumberOfPagesPerMessage->GetXaxis()->SetTitle("Number of pages");
122+
mNumberOfPagesPerMessage->GetYaxis()->SetTitle("Number of messages");
123+
getObjectsManager()->startPublishing(mNumberOfPagesPerMessage);
124+
125+
mTotalDataVolume = new TH1D("TotalDataVolume", "Total data volume", 1, 0.5, 1.5);
126+
mTotalDataVolume->GetXaxis()->SetTitle("MonitorData");
127+
mTotalDataVolume->GetYaxis()->SetTitle("Total data volume (Byte)");
128+
getObjectsManager()->startPublishing(mTotalDataVolume);
129+
130+
// EMCAL related histograms
84131
mPayloadSizePerDDL = new TH2F("PayloadSizePerDDL", "PayloadSizePerDDL", 40, 0, 40, 100, 0, 1);
85132
mPayloadSizePerDDL->GetXaxis()->SetTitle("ddl");
86133
mPayloadSizePerDDL->GetYaxis()->SetTitle("PayloadSize");
@@ -156,6 +203,12 @@ void RawTask::monitorData(o2::framework::ProcessingContext& ctx)
156203
// https://github.com/AliceO2Group/AliceO2/blob/dev/Framework/Core/README.md#using-inputs---the-inputrecord-api
157204

158205
using CHTYP = o2::emcal::ChannelType_t;
206+
207+
Int_t nPagesMessage = 0, nSuperpagesMessage = 0;
208+
QcInfoLogger::GetInstance() << QcInfoLogger::Debug << " Processing message " << mNumberOfMessages << AliceO2::InfoLogger::InfoLogger::endm;
209+
mNumberOfMessages++;
210+
mMessageCounter->Fill(1);
211+
159212
// Some examples:
160213
// 1. In a loop
161214
for (auto&& input : ctx.inputs()) {
@@ -164,10 +217,15 @@ void RawTask::monitorData(o2::framework::ProcessingContext& ctx)
164217
const auto* header = header::get<header::DataHeader*>(input.header);
165218
// get payload of a specific input, which is a char array.
166219
// const char* payload = input.payload;
220+
QcInfoLogger::GetInstance() << QcInfoLogger::Debug << "Processing superpage " << mNumberOfSuperpages << AliceO2::InfoLogger::InfoLogger::endm;
221+
mNumberOfSuperpages++;
222+
nSuperpagesMessage++;
223+
mSuperpageCounter->Fill(1);
167224
QcInfoLogger::GetInstance() << QcInfoLogger::Debug << " EMCAL Reading Payload size: " << header->payloadSize << " for " << header->dataOrigin << AliceO2::InfoLogger::InfoLogger::endm;
168225

169226
//fill the histogram with payload sizes
170227
mHistogram->Fill(header->payloadSize);
228+
mTotalDataVolume->Fill(1., header->payloadSize);
171229

172230
// try decoding payload
173231
o2::emcal::RawReaderMemory<o2::header::RAWDataHeaderV4> rawreader(gsl::span(input.payload, header->payloadSize));
@@ -176,6 +234,10 @@ void RawTask::monitorData(o2::framework::ProcessingContext& ctx)
176234
short int maxADCSM[20];
177235
short int minADCSM[20];
178236
while (rawreader.hasNext()) {
237+
QcInfoLogger::GetInstance() << QcInfoLogger::Debug << " Processing page " << mNumberOfPages << AliceO2::InfoLogger::InfoLogger::endm;
238+
mNumberOfPages++;
239+
nPagesMessage++;
240+
mPageCounter->Fill(1);
179241
rawreader.next();
180242
auto payLoadSize = rawreader.getPayloadSize(); //payloadsize in byte;
181243

@@ -295,6 +357,8 @@ void RawTask::monitorData(o2::framework::ProcessingContext& ctx)
295357
} //new page
296358
} //header
297359
} //inputs
360+
mNumberOfPagesPerMessage->Fill(nPagesMessage);
361+
mNumberOfSuperpagesPerMessage->Fill(nSuperpagesMessage);
298362
} //function monitor data
299363

300364
void RawTask::endOfCycle()
@@ -305,6 +369,8 @@ void RawTask::endOfCycle()
305369
void RawTask::endOfActivity(Activity& /*activity*/)
306370
{
307371
QcInfoLogger::GetInstance() << "endOfActivity" << AliceO2::InfoLogger::InfoLogger::endm;
372+
QcInfoLogger::GetInstance() << "Total amount of messages: " << mNumberOfMessages << AliceO2::InfoLogger::InfoLogger::endm;
373+
QcInfoLogger::GetInstance() << "Total amount of superpages: " << mNumberOfSuperpages << ", pages: " << mNumberOfPages << AliceO2::InfoLogger::InfoLogger::endm;
308374
}
309375

310376
void RawTask::reset()

0 commit comments

Comments
 (0)