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

#include <TrigOpMonitor.h>

Inheritance diagram for TrigOpMonitor:
Collaboration diagram for TrigOpMonitor:

Classes

struct  FolderHist
 Histograms for COOL folders. More...

Public Member Functions

 TrigOpMonitor (const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize () override
virtual StatusCode start () override
virtual StatusCode execute (const EventContext &ctx) override
virtual void handle (const Incident &incident) override
virtual unsigned int cardinality () const override

Private Member Functions

void fillMagFieldHist ()
void fillReleaseDataHist ()
void fillProcThreadHist (int workerID)
void fillSubDetHist ()
void fillIOVDbHist ()
void fillIOVDbChangeHist (const EventContext &ctx)
void fillLumiHist (const EventContext &ctx)
StatusCode bookHists ()

Private Attributes

ServiceHandle< IIncidentSvc > m_incidentSvc { this, "IncidentSvc", "IncidentSvc", "Incident service"}
ServiceHandle< ITHistSvc > m_histSvc {this, "THistSvc", "THistSvc"}
SmartIF< IIOVDbSvcm_IOVDbSvc
TH2I * m_magFieldHist {nullptr}
TH2I * m_iovChangeHist {nullptr}
TH1I * m_releaseHist {nullptr}
TH2I * m_mtConfigHist {nullptr}
TH1I * m_workersHist {nullptr}
TH2I * m_subdetHist {nullptr}
TProfile * m_lumiHist {nullptr}
TProfile * m_muHist {nullptr}
EventIDBase::number_type m_previousLB {0}
 LB of previous event.
std::unordered_map< std::string, IOVRangem_currentIOVs
 current IOVs managed by IOVDbSvc
std::unordered_map< std::string, FolderHistm_folderHist
 histograms for COOL folders
std::string m_histPath
 histogram booking path
SG::ReadCondHandleKey< LuminosityCondDatam_lumiDataKey {this, "LuminosityCondDataKey", ""}
SG::ReadCondHandleKey< AtlasFieldMapCondObjm_fieldMapKey {this, "AtlasFieldMapCondDataKey", ""}
Gaudi::Property< std::string > m_releaseData
Gaudi::Property< bool > m_detailedHists
Gaudi::Property< unsigned short int > m_maxLB

Detailed Description

Definition at line 37 of file TrigOpMonitor.h.

Constructor & Destructor Documentation

◆ TrigOpMonitor()

TrigOpMonitor::TrigOpMonitor ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 54 of file TrigOpMonitor.cxx.

54 :
55 base_class(name, pSvcLocator),
56 m_histPath("/EXPERT/HLTFramework/" + name + "/")
57{}
std::string m_histPath
histogram booking path

Member Function Documentation

◆ bookHists()

StatusCode TrigOpMonitor::bookHists ( )
private

Definition at line 114 of file TrigOpMonitor.cxx.

115{
116 m_iovChangeHist = nullptr;
117 m_currentIOVs.clear();
118 m_folderHist.clear();
119
120 m_iovChangeHist = new TH2I("CoolFolderUpdate_LB", "COOL folder updates;Lumiblock;", 1, 0, 1, 1, 0, 1);
121
122 // create histogram for magnetic field information
123 m_magFieldHist = new TH2I("MagneticFieldSettings", "Magnetic field settings", 2, 0, 2, 2, 0, 2);
124 m_magFieldHist->GetYaxis()->SetBinLabel(1, "off");
125 m_magFieldHist->GetYaxis()->SetBinLabel(2, "on");
126 m_magFieldHist->GetXaxis()->SetBinLabel(1, "Solenoid");
127 m_magFieldHist->GetXaxis()->SetBinLabel(2, "Toroid");
128
129 m_releaseHist = new TH1I("GeneralOpInfo", "General operational info;;Applications", 1, 0, 1);
130
131 m_mtConfigHist = new TH2I("MTConfig", "Multi-threading configuration", 2, 0, 2, 10, 0, 10);
132 m_mtConfigHist->SetCanExtend(TH1::kYaxis);
133 m_mtConfigHist->GetXaxis()->SetBinLabel(1, "N threads");
134 m_mtConfigHist->GetXaxis()->SetBinLabel(2, "N slots");
135
136 m_workersHist = new TH1I("MPWorkers", "Worker IDs;Worker ID;Number of workers", 10, 0, 10);
137 m_workersHist->SetCanExtend(TH1::kXaxis);
138
139 m_subdetHist = new TH2I("Subdetectors", "State of subdetectors", 1, 0, 1, 3, 0, 3);
140 m_subdetHist->SetCanExtend(TH1::kXaxis);
141 m_subdetHist->GetYaxis()->SetBinLabel(1, "# ROB");
142 m_subdetHist->GetYaxis()->SetBinLabel(2, "off");
143 m_subdetHist->GetYaxis()->SetBinLabel(3, "on");
144
145 m_lumiHist = new TProfile("Luminosity", "Luminosity;Lumiblock;Luminosity [10^{33} cm^{-2}s^{-1}]",
146 m_maxLB, 0, m_maxLB);
147
148 m_muHist = new TProfile("Pileup", "Pileup;Lumiblock;Interactions per BX", m_maxLB, 0, m_maxLB);
149
150 // Register histograms
151 TH1* hist[] = {
154 };
155 for (TH1* h : hist) {
156 if (h) ATH_CHECK(m_histSvc->regHist(m_histPath + h->GetName(), h));
157 }
158
159 return StatusCode::SUCCESS;
160}
#define ATH_CHECK
Evaluate an expression and check for errors.
TH1I * m_releaseHist
std::unordered_map< std::string, IOVRange > m_currentIOVs
current IOVs managed by IOVDbSvc
ServiceHandle< ITHistSvc > m_histSvc
TH2I * m_magFieldHist
TProfile * m_lumiHist
TProfile * m_muHist
Gaudi::Property< unsigned short int > m_maxLB
std::unordered_map< std::string, FolderHist > m_folderHist
histograms for COOL folders
TH2I * m_subdetHist
TH2I * m_iovChangeHist
TH2I * m_mtConfigHist
TH1I * m_workersHist

◆ cardinality()

virtual unsigned int TrigOpMonitor::cardinality ( ) const
inlineoverridevirtual

Definition at line 49 of file TrigOpMonitor.h.

49{ return 1; }

◆ execute()

StatusCode TrigOpMonitor::execute ( const EventContext & ctx)
overridevirtual

Definition at line 92 of file TrigOpMonitor.cxx.

93{
94 /* One-time fills */
95 [[maybe_unused]] const static bool once = [&]() {
97 return true;
98 }();
99
100 /* Per-LB fills */
101 if (m_previousLB != ctx.eventID().lumi_block()) { // New LB
102 m_previousLB = ctx.eventID().lumi_block();
103
104 // Fill IOV diff histogram
106
107 // Fill lumi histogram
108 fillLumiHist(ctx);
109 }
110
111 return StatusCode::SUCCESS;
112}
void fillIOVDbChangeHist(const EventContext &ctx)
void fillLumiHist(const EventContext &ctx)
EventIDBase::number_type m_previousLB
LB of previous event.

◆ fillIOVDbChangeHist()

void TrigOpMonitor::fillIOVDbChangeHist ( const EventContext & ctx)
private

Definition at line 253 of file TrigOpMonitor.cxx.

254{
255 std::vector<std::string> keys;
256 if (m_IOVDbSvc) keys = m_IOVDbSvc->getKeyList();
257
258 // Loop over all keys known to IOVDbSvc
259 IIOVDbSvc::KeyInfo info;
260 for (const std::string& k : keys) {
261 // cppcheck-suppress nullPointerRedundantCheck
262 if (not m_IOVDbSvc->getKeyInfo(k, info)) continue;
263 if (not info.retrieved) continue;
264
265 const auto curIOV = m_currentIOVs.find(k);
266 if (curIOV == m_currentIOVs.end()) {
267 m_currentIOVs[k] = info.range;
268 continue;
269 }
270
271 // Print IOV changes and fill histogram
272 if (info.range != curIOV->second) {
273 ATH_MSG_INFO("IOV of " << k << " changed from " << curIOV->second << " to " << info.range
274 << " on event: " << ctx.eventID());
275
276 if (m_iovChangeHist) {
277 // Perform a locked fill and remove any empty bins to allow correct gathering
278 oh_scoped_lock_histogram lock;
279 m_iovChangeHist->Fill(std::to_string(ctx.eventID().lumi_block()).c_str(), info.folderName.c_str(),
280 1);
281 m_iovChangeHist->LabelsDeflate("X");
282 m_iovChangeHist->LabelsDeflate("Y");
283 }
284
285 // Create detailed histograms per changed folder
286 if (m_detailedHists) {
287 auto fh = m_folderHist.find(info.folderName);
288 if (fh == m_folderHist.end()) {
289 std::string name(folder2HistName(info.folderName));
290
291 fh = m_folderHist.insert({info.folderName, FolderHist()}).first;
292 fh->second.h_time = new TH1F((name + "_ReadTime").c_str(),
293 ("Update time for " + info.folderName + ";Time [ms];Entries").c_str(),
294 100, 0, 200);
295
296 fh->second.h_bytes = new TH1F(
297 (name + "_BytesRead").c_str(),
298 ("Bytes read for " + info.folderName + ";Data [bytes];Entries").c_str(), 100, 0, 1000);
299
300 for (TH1* h : {fh->second.h_time, fh->second.h_bytes}) {
301 m_histSvc->regHist(m_histPath + h->GetName(), h).ignore();
302 }
303 }
304
305 // Need to plot the difference because IOVDbSvc reports total time and bytes for entire job
306 fh->second.h_time->Fill(info.readTime * 1000 - m_folderHist[info.folderName].total_time);
307 fh->second.total_time += info.readTime * 1000;
308
309 fh->second.h_bytes->Fill(info.bytesRead - m_folderHist[info.folderName].total_bytes);
310 fh->second.total_bytes += info.bytesRead;
311 }
312
313 m_currentIOVs[k] = info.range;
314 }
315 }
316}
#define ATH_MSG_INFO(x)
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
Gaudi::Property< bool > m_detailedHists
SmartIF< IIOVDbSvc > m_IOVDbSvc
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Histograms for COOL folders.

◆ fillIOVDbHist()

void TrigOpMonitor::fillIOVDbHist ( )
private

Definition at line 173 of file TrigOpMonitor.cxx.

174{
175 // create and fill histogram for IOVDb entries
176 std::vector<std::string> keyList;
177 if (m_IOVDbSvc) keyList = m_IOVDbSvc->getKeyList();
178
179 // set up histograms
180 TH2I* IOVDbRunHist = new TH2I("IOVDbRunRange", "IOVDb Run Range", 1, 0, 1, 1, 0, 1);
181 TH2I* IOVDbTimeHist = new TH2I("IOVDbTimeRange", "IOVDb Time Range", 1, 0, 1, 1, 0, 1);
182 TProfile* IOVDbBytesReadHist = new TProfile("IOVDbBytesRead", "Folder data read", 1, 0, 1);
183 IOVDbBytesReadHist->SetYTitle("Data read [bytes]");
184 TProfile* IOVDbReadTimeHist = new TProfile("IOVDbReadTime", "Folder update time", 1, 0, 1);
185 IOVDbReadTimeHist->SetYTitle("Update time [ms]");
186
187 // fill histograms
188 IIOVDbSvc::KeyInfo info;
189 for (const std::string& key : keyList) {
190 // cppcheck-suppress nullPointerRedundantCheck
191 if (m_IOVDbSvc->getKeyInfo(key, info) && info.retrieved) {
192
193 m_currentIOVs[key] = info.range;
194
195 IOVTime start(info.range.start());
196 IOVTime stop(info.range.stop());
197
198 // fill start condition (run number)
199 if (start.isRunEvent()) {
200 IOVDbRunHist->Fill(std::to_string(start.run()).c_str(), info.folderName.c_str(), 1.0);
201 }
202
203 // fill start condition (timestamp)
204 if (start.isTimestamp()) {
205 IOVDbTimeHist->Fill(std::to_string(start.timestamp()).c_str(), info.folderName.c_str(), 1.0);
206 }
207
208 // fill stop condition (run number)
209 if (stop.isRunEvent()) {
210 if (stop.run() == IOVTime::MAXRUN) {
211 IOVDbRunHist->Fill("infinity", info.folderName.c_str(), 1.0);
212 }
213 else {
214 IOVDbRunHist->Fill(std::to_string(stop.run()).c_str(), info.folderName.c_str(), 1.0);
215 }
216 }
217
218 // fill stop condition (timestamp)
219 if (stop.isTimestamp()) {
220 if (stop.timestamp() == IOVTime::MAXTIMESTAMP) {
221 IOVDbTimeHist->Fill("infinity", info.folderName.c_str(), 1.0);
222 }
223 else {
224 IOVDbTimeHist->Fill(std::to_string(stop.timestamp()).c_str(), info.folderName.c_str(), 1.0);
225 }
226 }
227
228 // fill read bytes and time read
229 IOVDbBytesReadHist->Fill(info.folderName.c_str(), info.bytesRead, 1.0);
230 IOVDbReadTimeHist->Fill(info.folderName.c_str(), info.readTime * 1000, 1.0);
231 }
232 }
233
234 // final configuration of histograms
235 IOVDbRunHist->LabelsDeflate("X");
236 IOVDbRunHist->LabelsDeflate("Y");
237 IOVDbRunHist->GetYaxis()->LabelsOption("a");
238
239 IOVDbTimeHist->LabelsDeflate("X");
240 IOVDbTimeHist->LabelsDeflate("Y");
241 IOVDbTimeHist->GetYaxis()->LabelsOption("a");
242
243 IOVDbBytesReadHist->LabelsDeflate("X");
244 IOVDbReadTimeHist->LabelsDeflate("X");
245
246 // Register histograms
247 TH1* hist[] = {IOVDbRunHist, IOVDbTimeHist, IOVDbBytesReadHist, IOVDbReadTimeHist};
248 for (TH1* h : hist) {
249 m_histSvc->regHist(m_histPath + h->GetName(), h).ignore();
250 }
251}
static constexpr uint64_t MAXTIMESTAMP
Definition IOVTime.h:58
static constexpr uint32_t MAXRUN
Definition IOVTime.h:48
virtual StatusCode start() override

◆ fillLumiHist()

void TrigOpMonitor::fillLumiHist ( const EventContext & ctx)
private

Definition at line 318 of file TrigOpMonitor.cxx.

319{
320 if (!m_lumiDataKey.empty()) {
321 SG::ReadCondHandle<LuminosityCondData> lumiData(m_lumiDataKey, ctx);
322 m_lumiHist->Fill(ctx.eventID().lumi_block(), lumiData->lbAverageLuminosity());
323 m_muHist->Fill(ctx.eventID().lumi_block(), lumiData->lbAverageInteractionsPerCrossing());
324 }
325}
SG::ReadCondHandleKey< LuminosityCondData > m_lumiDataKey

◆ fillMagFieldHist()

void TrigOpMonitor::fillMagFieldHist ( )
private

Definition at line 162 of file TrigOpMonitor.cxx.

163{
164 if (!m_fieldMapKey.empty()) {
165 SG::ReadCondHandle<AtlasFieldMapCondObj> fieldMapHandle(m_fieldMapKey);
166 const MagField::AtlasFieldMap* fieldMap = fieldMapHandle->fieldMap();
167 // if there is no field map, the field is off
168 m_magFieldHist->Fill("Solenoid", fieldMap && fieldMap->solenoidOn() ? "on" : "off", 1.0);
169 m_magFieldHist->Fill("Toroid", fieldMap && fieldMap->toroidOn() ? "on" : "off", 1.0);
170 }
171}
bool solenoidOn() const
status of the magnets
SG::ReadCondHandleKey< AtlasFieldMapCondObj > m_fieldMapKey

◆ fillProcThreadHist()

void TrigOpMonitor::fillProcThreadHist ( int workerID)
private

Definition at line 365 of file TrigOpMonitor.cxx.

366{
367 m_workersHist->Fill(workerID, 1);
368
369 auto getIntProp = [this](std::string_view name, const std::string& prop) -> std::optional<int> {
370 IProperty* svc = serviceLocator()->service(name).as<IProperty>();
371 if (svc == nullptr) return std::nullopt;
372 try {
373 return std::stoi(svc->getProperty(prop).toString());
374 }
375 catch (...) {
376 return std::nullopt;
377 }
378 };
379
380 const std::optional<int> numThreads = getIntProp("AvalancheSchedulerSvc","ThreadPoolSize");
381 if (numThreads.has_value()) {
382 m_mtConfigHist->Fill("N threads", numThreads.value(), 1.0);
383 }
384 else {
385 ATH_MSG_WARNING("Could not retrieve the number of threads to fill the monitoring histogram");
386 }
387
388 const std::optional<int> numSlots = getIntProp("EventDataSvc","NSlots");
389 if (numSlots.has_value()) {
390 m_mtConfigHist->Fill("N slots", numSlots.value(), 1.0);
391 }
392 else {
393 ATH_MSG_WARNING("Could not retrieve the number of slots to fill the monitoring histogram");
394 }
395}
#define ATH_MSG_WARNING(x)
AthROOTErrorHandlerSvc * svc

◆ fillReleaseDataHist()

void TrigOpMonitor::fillReleaseDataHist ( )
private

Definition at line 327 of file TrigOpMonitor.cxx.

328{
329 const char* ld_lib_path = getenv("LD_LIBRARY_PATH");
330 if (ld_lib_path == nullptr) {
331 ATH_MSG_WARNING("LD_LIBRARY_PATH is not defined. Will not fill release histogram.");
332 return;
333 }
334
335 // Find all release metadata files
336 std::list<DirSearchPath::path> file_list = DirSearchPath(ld_lib_path, ":").find_all(m_releaseData.value());
337
338 if (file_list.empty()) {
339 ATH_MSG_WARNING("Could not find release metadata file " << m_releaseData
340 << " in LD_LIBRARY_PATH");
341 m_releaseHist->Fill("Release ?", 1);
342 return;
343 }
344
345 for (const auto& f : file_list) {
346 // Read metadata file
347 std::map<std::string, std::string> result;
348 if (readReleaseData(f.string(), result).isFailure()) {
349 ATH_MSG_WARNING("Could not read release metadata from " << f);
350 m_releaseHist->Fill("Release ?", 1);
351 return;
352 }
353
354 // Check format
355 if (result.find("project name") == result.end() || result.find("release") == result.end()) {
356 ATH_MSG_WARNING("Invalid release metadata format in " << f);
357 m_releaseHist->Fill("Release ?", 1);
358 return;
359 }
360
361 m_releaseHist->Fill((result["project name"] + " " + result["release"]).c_str(), 1);
362 }
363}
Gaudi::Property< std::string > m_releaseData
std::string getenv(const std::string &variableName)
get an environment variable

◆ fillSubDetHist()

void TrigOpMonitor::fillSubDetHist ( )
private

Definition at line 397 of file TrigOpMonitor.cxx.

398{
399 // Retrieve the enabled ROBs/SubDets list from DataFlowConfig which is a special object
400 // used online to hold DF properties passed from TDAQ to HLT as run parameters
401 auto jobOptionsSvc = service<Gaudi::Interfaces::IOptionsSvc>("JobOptionsSvc", /*createIf=*/ false);
402 if (!jobOptionsSvc.isValid()) {
403 ATH_MSG_WARNING("Could not retrieve JobOptionsSvc, will not fill SubDetectors histogram");
404 return;
405 }
406
407 Gaudi::Property<std::vector<uint32_t>> enabledROBsProp("EnabledROBs",{});
408 std::set<uint32_t> enabledROBs;
409 if (enabledROBsProp.fromString(jobOptionsSvc->get("DataFlowConfig.DF_Enabled_ROB_IDs","[]")).isSuccess()) {
410 enabledROBs.insert(enabledROBsProp.value().begin(), enabledROBsProp.value().end());
411 ATH_MSG_DEBUG("Retrieved a list of " << enabledROBs.size()
412 << " ROBs from DataFlowConfig.DF_Enabled_ROB_IDs");
413 }
414 else {
415 ATH_MSG_ERROR("Could not parse DataFlowConfig.DF_Enabled_ROB_IDs from JobOptionsSvc");
416 }
417
418 // Retrieve detector mask from detector store
419 SmartIF<StoreGateSvc> inputMetaDataStore = service<StoreGateSvc>("InputMetaDataStore", /*createIf=*/ false);
420 if (!inputMetaDataStore.isValid()) {
421 ATH_MSG_WARNING("Could not retrieve InputMetaDataStore, will not fill SubDetectors histogram");
422 return;
423 }
424 const ByteStreamMetadataContainer* metadatacont{nullptr};
425 if (inputMetaDataStore->retrieve(metadatacont, "ByteStreamMetadata").isFailure()) {
426 ATH_MSG_WARNING("Could not retrieve ByteStreamMetadata, will not fill SubDetectors histogram");
427 return;
428 }
429
430 const ByteStreamMetadata* metadata = *(metadatacont->begin());
431 uint64_t detMaskLeast = metadata->getDetectorMask();
432 uint64_t detMaskMost = metadata->getDetectorMask2();
433
434 // Decode subdetector masks
435 std::vector<eformat::SubDetector> subDetOn;
436 std::vector<eformat::SubDetector> subDetOff;
437 std::vector<eformat::SubDetector> subDetAll;
438 eformat::helper::DetectorMask(detMaskLeast, detMaskMost).sub_detectors(subDetOn);
439 eformat::helper::DetectorMask(~detMaskLeast, ~detMaskMost).sub_detectors(subDetOff);
440 eformat::helper::DetectorMask(~std::bitset<128>()).sub_detectors(subDetAll);
441
442 // Add bins with labels for every subdetector name
443 for (const eformat::SubDetector sd : subDetAll) {
444 m_subdetHist->GetXaxis()->FindBin(eformat::helper::SubDetectorDictionary.string(sd).data());
445 }
446 m_subdetHist->LabelsDeflate("X");
447
448 // Fill histogram with enabled subdetectors
449 for (const eformat::SubDetector sd : subDetOn) {
450 m_subdetHist->Fill(eformat::helper::SubDetectorDictionary.string(sd).data(), "on", 1.0);
451 }
452
453 // Fill histogram with disabled subdetectors
454 for (const eformat::SubDetector sd : subDetOff) {
455 m_subdetHist->Fill(eformat::helper::SubDetectorDictionary.string(sd).data(), "off", 1.0);
456 }
457
458 // Fill histogram with ROB counts
459 for (const uint32_t robid : enabledROBs) {
460 const std::string sdname = eformat::helper::SourceIdentifier(robid).human_detector();
461 m_subdetHist->Fill(sdname.data(), "# ROB", 1.0);
462 }
463}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
ByteStreamMetadataContainer
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.

◆ handle()

void TrigOpMonitor::handle ( const Incident & incident)
overridevirtual

Definition at line 71 of file TrigOpMonitor.cxx.

71 {
72 // One time fills after fork
73 if (incident.type() == AthenaInterprocess::UpdateAfterFork::type()) {
74 if (!m_IOVDbSvc) m_IOVDbSvc = service("IOVDbSvc", /*createIf=*/false);
77 const AthenaInterprocess::UpdateAfterFork& updinc = dynamic_cast<const AthenaInterprocess::UpdateAfterFork&>(incident);
79 }
80}
static const std::string & type()
Incident type.
Definition Incidents.h:49
int workerID() const
assigned worker ID from processing unit
Definition Incidents.h:40
void fillProcThreadHist(int workerID)

◆ initialize()

StatusCode TrigOpMonitor::initialize ( )
overridevirtual

Definition at line 59 of file TrigOpMonitor.cxx.

60{
61 ATH_CHECK(m_histSvc.retrieve());
64
65 ATH_CHECK( m_incidentSvc.retrieve() );
67
68 return StatusCode::SUCCESS;
69}
ServiceHandle< IIncidentSvc > m_incidentSvc

◆ start()

StatusCode TrigOpMonitor::start ( )
overridevirtual

Definition at line 82 of file TrigOpMonitor.cxx.

83{
84 m_previousLB = 0;
85 if (!m_IOVDbSvc) m_IOVDbSvc = service("IOVDbSvc", /*createIf=*/false);
87
89 return StatusCode::SUCCESS;
90}
void fillReleaseDataHist()
StatusCode bookHists()

Member Data Documentation

◆ m_currentIOVs

std::unordered_map<std::string, IOVRange> TrigOpMonitor::m_currentIOVs
private

current IOVs managed by IOVDbSvc

Definition at line 85 of file TrigOpMonitor.h.

◆ m_detailedHists

Gaudi::Property<bool> TrigOpMonitor::m_detailedHists
private
Initial value:
{this, "DetailedFolderHists", true,
"Detailed histograms for COOL folder updates during run"}

Definition at line 97 of file TrigOpMonitor.h.

97 {this, "DetailedFolderHists", true,
98 "Detailed histograms for COOL folder updates during run"};

◆ m_fieldMapKey

SG::ReadCondHandleKey<AtlasFieldMapCondObj> TrigOpMonitor::m_fieldMapKey {this, "AtlasFieldMapCondDataKey", ""}
private

Definition at line 91 of file TrigOpMonitor.h.

91{this, "AtlasFieldMapCondDataKey", ""};

◆ m_folderHist

std::unordered_map<std::string, FolderHist> TrigOpMonitor::m_folderHist
private

histograms for COOL folders

Definition at line 86 of file TrigOpMonitor.h.

◆ m_histPath

std::string TrigOpMonitor::m_histPath
private

histogram booking path

Definition at line 87 of file TrigOpMonitor.h.

◆ m_histSvc

ServiceHandle<ITHistSvc> TrigOpMonitor::m_histSvc {this, "THistSvc", "THistSvc"}
private

Definition at line 71 of file TrigOpMonitor.h.

71{this, "THistSvc", "THistSvc"};

◆ m_incidentSvc

ServiceHandle<IIncidentSvc> TrigOpMonitor::m_incidentSvc { this, "IncidentSvc", "IncidentSvc", "Incident service"}
private

Definition at line 70 of file TrigOpMonitor.h.

70{ this, "IncidentSvc", "IncidentSvc", "Incident service"};

◆ m_iovChangeHist

TH2I* TrigOpMonitor::m_iovChangeHist {nullptr}
private

Definition at line 76 of file TrigOpMonitor.h.

76{nullptr};

◆ m_IOVDbSvc

SmartIF<IIOVDbSvc> TrigOpMonitor::m_IOVDbSvc
private

Definition at line 73 of file TrigOpMonitor.h.

◆ m_lumiDataKey

SG::ReadCondHandleKey<LuminosityCondData> TrigOpMonitor::m_lumiDataKey {this, "LuminosityCondDataKey", ""}
private

Definition at line 90 of file TrigOpMonitor.h.

90{this, "LuminosityCondDataKey", ""};

◆ m_lumiHist

TProfile* TrigOpMonitor::m_lumiHist {nullptr}
private

Definition at line 81 of file TrigOpMonitor.h.

81{nullptr};

◆ m_magFieldHist

TH2I* TrigOpMonitor::m_magFieldHist {nullptr}
private

Definition at line 75 of file TrigOpMonitor.h.

75{nullptr};

◆ m_maxLB

Gaudi::Property<unsigned short int> TrigOpMonitor::m_maxLB
private
Initial value:
{this, "MaxLumiblocks", 3000,
"Number of lumiblocks for histograms"}

Definition at line 100 of file TrigOpMonitor.h.

100 {this, "MaxLumiblocks", 3000,
101 "Number of lumiblocks for histograms"};

◆ m_mtConfigHist

TH2I* TrigOpMonitor::m_mtConfigHist {nullptr}
private

Definition at line 78 of file TrigOpMonitor.h.

78{nullptr};

◆ m_muHist

TProfile* TrigOpMonitor::m_muHist {nullptr}
private

Definition at line 82 of file TrigOpMonitor.h.

82{nullptr};

◆ m_previousLB

EventIDBase::number_type TrigOpMonitor::m_previousLB {0}
private

LB of previous event.

Definition at line 84 of file TrigOpMonitor.h.

84{0};

◆ m_releaseData

Gaudi::Property<std::string> TrigOpMonitor::m_releaseData
private
Initial value:
{
this, "ReleaseDataFile", "../ReleaseData",
"Path to ReleaseData file (relative to LD_LIBRARY_PATH entries"}

Definition at line 93 of file TrigOpMonitor.h.

93 {
94 this, "ReleaseDataFile", "../ReleaseData",
95 "Path to ReleaseData file (relative to LD_LIBRARY_PATH entries"};

◆ m_releaseHist

TH1I* TrigOpMonitor::m_releaseHist {nullptr}
private

Definition at line 77 of file TrigOpMonitor.h.

77{nullptr};

◆ m_subdetHist

TH2I* TrigOpMonitor::m_subdetHist {nullptr}
private

Definition at line 80 of file TrigOpMonitor.h.

80{nullptr};

◆ m_workersHist

TH1I* TrigOpMonitor::m_workersHist {nullptr}
private

Definition at line 79 of file TrigOpMonitor.h.

79{nullptr};

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