From 600333fd2cffe41919b89f64c2fff95bea93e81b Mon Sep 17 00:00:00 2001 From: Radoslaw Karabowicz Date: Mon, 19 Jun 2023 15:28:25 +0200 Subject: [PATCH 1/2] Create `FairTypes.h` Created `namespace FairRoot` with `struct EntryID {size_t fId;}`. Should replace PR #1405. --- fairroot/base/CMakeLists.txt | 4 ++ fairroot/base/steer/FairTypes.h | 106 ++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 fairroot/base/steer/FairTypes.h diff --git a/fairroot/base/CMakeLists.txt b/fairroot/base/CMakeLists.txt index 8b25ecf3af..bc5e2c2b14 100644 --- a/fairroot/base/CMakeLists.txt +++ b/fairroot/base/CMakeLists.txt @@ -82,6 +82,10 @@ endif() fair_change_extensions_if_exists(.cxx .h FILES "${sources}" OUTVAR headers) +list(APPEND headers + steer/FairTypes.h +) + add_library(${target} SHARED ${sources} ${headers}) fairroot_library_settings(${target}) diff --git a/fairroot/base/steer/FairTypes.h b/fairroot/base/steer/FairTypes.h new file mode 100644 index 0000000000..601f2eb0b5 --- /dev/null +++ b/fairroot/base/steer/FairTypes.h @@ -0,0 +1,106 @@ +/******************************************************************************** + * Copyright (C) 2014-2023 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ +/* + * FairTypes.h + * + * Created on: May 16, 2023 + * Author: R.Karabowicz + */ + +#ifndef FAIR_TYPES_H_ +#define FAIR_TYPES_H_ + +#include +#include + +/** + * \brief Main namespace for FairRoot classes / types + * + * All new public classes and types of FairRoot will be in this namespace. + * Note: Nost classes are still in no namespace. + */ +namespace FairRoot { +/** + * \brief Ordinal identification number of entry in IO stream + * + * Data stored in ROOT trees are gropued into entries, + * essentially equivalent to HEP events + */ +struct EntryID +{ + using underlying_type = size_t; + + static const EntryID None; + + EntryID(underlying_type value) + : fId(value) + {} + + EntryID() = default; + + operator underlying_type() const { return fId; } + + friend auto operator<<(std::ostream& os, EntryID id) -> std::ostream& + { + if (id == None) { + return os << ""; + } + return os << static_cast(id); + } + + auto operator++() + { + if (fId != None) { + ++fId; + } + return *this; + } + auto operator++(int) + { + auto temp = *this; + if (fId != None) { + ++fId; + } + return temp; + } + + auto operator--() + { + if (fId != None) { + --fId; + } + return *this; + } + auto operator--(int) + { + auto temp = *this; + if (fId != None) { + --fId; + } + return temp; + } + auto operator+=(const EntryID& rhs) + { + fId += rhs.fId; + return *this; + } + auto operator-=(const EntryID& rhs) + { + fId -= rhs.fId; + return *this; + } + + private: + underlying_type fId{std::numeric_limits::max()}; +}; + +/// \sa https://stackoverflow.com/questions/29432283/c-static-constexpr-field-with-incomplete-type/50295183#50295183 +inline constexpr const EntryID EntryID::None{}; +} // namespace FairRoot + +#endif // FAIR_TYPES_H_ From b7402a6bdd199aa1172faf8fd595cf42cae6b306 Mon Sep 17 00:00:00 2001 From: Radoslaw Karabowicz Date: Mon, 19 Jun 2023 15:38:07 +0200 Subject: [PATCH 2/2] Use `EntryID` type in `FairRun` and derived classes Replaced `Int_t` with the new type `EntryID` in `FairRun` and derived classes. Depracated `void FairRunAna::Run(Long64_t entry)`, which internally calls introduced `void RunSingle(FairRoot::EntryID entry);`. --- fairroot/base/steer/FairRun.cxx | 30 ++++++-- fairroot/base/steer/FairRun.h | 3 +- fairroot/base/steer/FairRunAna.cxx | 93 +++++++++++++------------ fairroot/base/steer/FairRunAna.h | 27 ++++--- fairroot/base/steer/FairRunAnaProof.cxx | 13 ++-- fairroot/base/steer/FairRunAnaProof.h | 12 ++-- fairroot/base/steer/FairRunSim.cxx | 2 +- fairroot/base/steer/FairRunSim.h | 2 +- fairroot/online/steer/FairRunOnline.cxx | 10 ++- fairroot/online/steer/FairRunOnline.h | 8 +-- 10 files changed, 116 insertions(+), 84 deletions(-) diff --git a/fairroot/base/steer/FairRun.cxx b/fairroot/base/steer/FairRun.cxx index 8b78863e01..1c0d9f4b4d 100644 --- a/fairroot/base/steer/FairRun.cxx +++ b/fairroot/base/steer/FairRun.cxx @@ -32,7 +32,10 @@ TMCThreadLocal FairRun* FairRun::fRunInstance = nullptr; -FairRun* FairRun::Instance() { return fRunInstance; } +FairRun* FairRun::Instance() +{ + return fRunInstance; +} FairRun::FairRun(Bool_t isMaster) : TNamed() @@ -137,7 +140,10 @@ void FairRun::SetTask(FairTask* task) } } -void FairRun::CreateGeometryFile(const char* geofile) { fRootManager->CreateGeometryFile(geofile); } +void FairRun::CreateGeometryFile(const char* geofile) +{ + fRootManager->CreateGeometryFile(geofile); +} FairTask* FairRun::GetTask(const char* taskName) { @@ -154,7 +160,10 @@ FairEventHeader* FairRun::GetEventHeader() return fEvtHeader; } -void FairRun::SetUseFairLinks(Bool_t val) { fRootManager->SetUseFairLinks(val); } +void FairRun::SetUseFairLinks(Bool_t val) +{ + fRootManager->SetUseFairLinks(val); +} void FairRun::SetWriteRunInfoFile(Bool_t write) { @@ -221,11 +230,20 @@ TFile* FairRun::GetOutputFile() return rootFileSink->GetRootFile(); } -void FairRun::SetUserOutputFileName(const TString& name) { fUserOutputFileName = name; } +void FairRun::SetUserOutputFileName(const TString& name) +{ + fUserOutputFileName = name; +} -TString FairRun::GetUserOutputFileName() const { return fUserOutputFileName; } +TString FairRun::GetUserOutputFileName() const +{ + return fUserOutputFileName; +} -void FairRun::AlignGeometry() const { fAlignmentHandler.AlignGeometry(); } +void FairRun::AlignGeometry() const +{ + fAlignmentHandler.AlignGeometry(); +} void FairRun::AddAlignmentMatrices(const std::map& alignmentMatrices, bool invertMatrices) { diff --git a/fairroot/base/steer/FairRun.h b/fairroot/base/steer/FairRun.h index 47cd24cfcd..7fff53f707 100644 --- a/fairroot/base/steer/FairRun.h +++ b/fairroot/base/steer/FairRun.h @@ -13,6 +13,7 @@ #include "FairLinkManager.h" #include "FairSink.h" #include "FairSource.h" +#include "FairTypes.h" #include // for Int_t, Bool_t, etc #include // @@ -70,7 +71,7 @@ class FairRun : public TNamed /** * run the analysis or simulation */ - virtual void Run(Int_t NStart = 0, Int_t NStop = 0) = 0; + virtual void Run(FairRoot::EntryID NEntry = 0, int NStop = 0) = 0; /** * Set the experiment dependent run header * for each run diff --git a/fairroot/base/steer/FairRunAna.cxx b/fairroot/base/steer/FairRunAna.cxx index fa90ae74bf..72ca1913d1 100644 --- a/fairroot/base/steer/FairRunAna.cxx +++ b/fairroot/base/steer/FairRunAna.cxx @@ -59,7 +59,10 @@ void FRA_handler_ctrlc(int) //_____________________________________________________________________________ FairRunAna* FairRunAna::fgRinstance = nullptr; //_____________________________________________________________________________ -FairRunAna* FairRunAna::Instance() { return fgRinstance; } +FairRunAna* FairRunAna::Instance() +{ + return fgRinstance; +} //_____________________________________________________________________________ FairRunAna::FairRunAna() : FairRun() @@ -273,7 +276,7 @@ void FairRunAna::Init() //_____________________________________________________________________________ //_____________________________________________________________________________ -void FairRunAna::Run(Int_t Ev_start, Int_t Ev_end) +void FairRunAna::Run(FairRoot::EntryID NEntry, int NStop) { gFRAIsInterrupted = kFALSE; @@ -282,35 +285,35 @@ void FairRunAna::Run(Int_t Ev_start, Int_t Ev_end) } else { // if (fInputFile==0) { if (!fInFileIsOpen) { - DummyRun(Ev_start, Ev_end); + DummyRun(NEntry, NStop); return; } - Int_t MaxAllowed = fRootManager->CheckMaxEventNo(Ev_end); - if (MaxAllowed != -1) { - if (Ev_end == 0) { - if (Ev_start == 0) { - Ev_end = MaxAllowed; + FairRoot::EntryID MaxAllowed = fRootManager->CheckMaxEventNo(NStop); + if (MaxAllowed != FairRoot::EntryID::None) { + if (NStop == 0) { + if (NEntry == 0) { + NStop = MaxAllowed; } else { - Ev_end = Ev_start; - if (Ev_end > MaxAllowed) { - Ev_end = MaxAllowed; + NStop = NEntry; + if (NStop > MaxAllowed) { + NStop = MaxAllowed; } - Ev_start = 0; + NEntry = 0; } } else { - if (Ev_end > MaxAllowed) { + if (NStop > MaxAllowed) { cout << "-------------------Warning---------------------------" << endl; - cout << " -W FairRunAna : File has less events than requested!!" << endl; - cout << " File contains : " << MaxAllowed << " Events" << endl; - cout << " Requested number of events = " << Ev_end << " Events" << endl; - cout << " The number of events is set to " << MaxAllowed << " Events" << endl; + cout << " -W FairRunAna : File has less entries than requested!!" << endl; + cout << " File contains : " << MaxAllowed << " entries" << endl; + cout << " Requested number of entries = " << NStop << " entries" << endl; + cout << " The number of entries is set to " << MaxAllowed << " entries" << endl; cout << "-----------------------------------------------------" << endl; - Ev_end = MaxAllowed; + NStop = MaxAllowed; } } - LOG(info) << "FairRunAna::Run() After checking, the run will run from event " << Ev_start << " to " - << Ev_end << "."; + LOG(info) << "FairRunAna::Run() After checking, the run will run from entry " << NEntry << " to " << NStop + << "."; } else { LOG(info) << "FairRunAna::Run() continue running without stop"; } @@ -321,7 +324,7 @@ void FairRunAna::Run(Int_t Ev_start, Int_t Ev_end) Int_t readEventReturn = 0; - for (int i = Ev_start; i < Ev_end || MaxAllowed == -1; i++) { + for (FairRoot::EntryID i = NEntry; i < NStop || MaxAllowed == -1; i++) { gSystem->IgnoreInterrupt(); // gFRAIsInterrupted = kFALSE; @@ -377,34 +380,34 @@ void FairRunAna::Run(Int_t Ev_start, Int_t Ev_end) //_____________________________________________________________________________ //_____________________________________________________________________________ -void FairRunAna::RunEventReco(Int_t Ev_start, Int_t Ev_end) +void FairRunAna::RunEventReco(FairRoot::EntryID NEntry, Int_t NStop) { UInt_t tmpId = 0; - Int_t MaxAllowed = fRootManager->CheckMaxEventNo(Ev_end); - if (MaxAllowed != -1) { - if (Ev_end == 0) { - if (Ev_start == 0) { - Ev_end = MaxAllowed; + Int_t MaxAllowed = fRootManager->CheckMaxEventNo(NStop); + if (MaxAllowed != FairRoot::EntryID::None) { + if (NStop == 0) { + if (NEntry == 0) { + NStop = MaxAllowed; } else { - Ev_end = Ev_start; - if (Ev_end > MaxAllowed) { - Ev_end = MaxAllowed; + NStop = NEntry; + if (NStop > MaxAllowed) { + NStop = MaxAllowed; } - Ev_start = 0; + NEntry = 0; } } else { - if (Ev_end > MaxAllowed) { + if (NStop > MaxAllowed) { cout << "-------------------Warning---------------------------" << endl; - cout << " -W FairRunAna : File has less events than requested!!" << endl; - cout << " File contains : " << MaxAllowed << " Events" << endl; - cout << " Requested number of events = " << Ev_end << " Events" << endl; - cout << " The number of events is set to " << MaxAllowed << " Events" << endl; + cout << " -W FairRunAna : File has less entries than requested!!" << endl; + cout << " File contains : " << MaxAllowed << " entries" << endl; + cout << " Requested number of entries = " << NStop << " entries" << endl; + cout << " The number of entries is set to " << MaxAllowed << " entries" << endl; cout << "-----------------------------------------------------" << endl; - Ev_end = MaxAllowed; + NStop = MaxAllowed; } } - LOG(info) << "FairRunAna::Run() After checking, the run will run from event " << Ev_start << " to " << Ev_end + LOG(info) << "FairRunAna::Run() After checking, the run will run from entry " << NEntry << " to " << NStop << "."; } else { LOG(info) << "FairRunAna::Run() continue running without stop"; @@ -414,7 +417,7 @@ void FairRunAna::RunEventReco(Int_t Ev_start, Int_t Ev_end) fRunInfo.Reset(); } - for (int i = Ev_start; i < Ev_end; i++) { + for (FairRoot::EntryID i = NEntry; i < NStop; i++) { fRootManager->ReadEvent(i); /** * if we have simulation files then they have MC Event Header and the Run Id is in it, any way it @@ -475,11 +478,11 @@ void FairRunAna::Run(Double_t delta_t) //_____________________________________________________________________________ //_____________________________________________________________________________ -void FairRunAna::RunMQ(Long64_t entry) +void FairRunAna::RunMQ(FairRoot::EntryID entry) { /** This methode is only needed and used with ZeroMQ - it read a certain event and call the task exec, but no output is written + it read a certain entry and call the task exec, but no output is written */ fRootManager->ReadEvent(entry); auto const tmpId = GetEvtHeaderRunId(); @@ -497,7 +500,7 @@ void FairRunAna::RunMQ(Long64_t entry) //_____________________________________________________________________________ //_____________________________________________________________________________ -void FairRunAna::Run(Long64_t entry) +void FairRunAna::RunSingle(FairRoot::EntryID entry) { fRootManager->ReadEvent(entry); auto const tmpId = GetEvtHeaderRunId(); @@ -547,7 +550,7 @@ void FairRunAna::RunTSBuffers() //_____________________________________________________________________________ //_____________________________________________________________________________ -void FairRunAna::RunOnLmdFiles(UInt_t NStart, UInt_t NStop) +void FairRunAna::RunOnLmdFiles(FairRoot::EntryID NStart, FairRoot::EntryID NStop) { if (NStart == 0 && NStop == 0) { NStart = 0; @@ -582,10 +585,10 @@ void FairRunAna::RunOnTBData() fRootManager->Write(); } //_____________________________________________________________________________ -void FairRunAna::DummyRun(Int_t Ev_start, Int_t Ev_end) +void FairRunAna::DummyRun(FairRoot::EntryID NStart, FairRoot::EntryID NStop) { /** This methode is just for testing, if you are not sure about what you do, don't use it */ - for (int i = Ev_start; i < Ev_end; i++) { + for (FairRoot::EntryID i = NStart; i < NStop; i++) { fTask->ExecuteTask(""); FillEventHeader(); Fill(); diff --git a/fairroot/base/steer/FairRunAna.h b/fairroot/base/steer/FairRunAna.h index f700f425e0..59572a0922 100644 --- a/fairroot/base/steer/FairRunAna.h +++ b/fairroot/base/steer/FairRunAna.h @@ -35,25 +35,34 @@ class FairRunAna : public FairRun FairRunAna(); /**initialize the run manager*/ void Init() override; - /**Run from event number NStart to event number NStop */ - void Run(Int_t NStart = 0, Int_t NStop = 0) override; + /**Run analysis: + * for the whole input if NEntry == NStop == 0, + * for NEntry entries if NStop == 0, + * from NEntry until NStop entry is reached + * from NEntry to the end of input, if NStop = -1 */ + void Run(FairRoot::EntryID NEntry = 0, int NStop = 0) override; /**Run over the whole input file with timpe window delta_t as unit (entry)*/ void Run(Double_t delta_t); + /** \deprecated Deprecated in v19, will be removed in v20. */ + [[deprecated("Replaced by RunSingle(), which has an unambiguous name")]] void Run(Long64_t entry) + { + RunSingle(entry); + } /**Run for the given single entry*/ - void Run(Long64_t entry); - /**Run event reconstruction from event number NStart to event number NStop */ - void RunEventReco(Int_t NStart, Int_t NStop); + void RunSingle(FairRoot::EntryID entry); + /**Run event reconstruction from entry number NEntry to entry number NStop */ + void RunEventReco(FairRoot::EntryID NEntry, Int_t NStop); /**Run over all TSBuffers until the data is processed*/ void RunTSBuffers(); /** the dummy run does not check the evt header or the parameters!! */ - void DummyRun(Int_t NStart, Int_t NStop); + void DummyRun(FairRoot::EntryID NStart, FairRoot::EntryID NStop); /** This methode is only needed and used with ZeroMQ - * it read a certain event and call the task exec, but no output is written + * it read a certain entry and call the task exec, but no output is written * @param entry : entry number in the tree */ - void RunMQ(Long64_t entry); + void RunMQ(FairRoot::EntryID entry); /** Run on a list of lmd files*/ - void RunOnLmdFiles(UInt_t NStart = 0, UInt_t NStop = 0); + void RunOnLmdFiles(FairRoot::EntryID NStart = 0, FairRoot::EntryID NStop = 0); void RunOnTBData(); /** finish tasks, write output*/ diff --git a/fairroot/base/steer/FairRunAnaProof.cxx b/fairroot/base/steer/FairRunAnaProof.cxx index 4076f699b9..ae06f7890f 100644 --- a/fairroot/base/steer/FairRunAnaProof.cxx +++ b/fairroot/base/steer/FairRunAnaProof.cxx @@ -32,7 +32,10 @@ FairRunAnaProof* FairRunAnaProof::fRAPInstance = nullptr; -FairRunAnaProof* FairRunAnaProof::Instance() { return fRAPInstance; } +FairRunAnaProof* FairRunAnaProof::Instance() +{ + return fRAPInstance; +} FairRunAnaProof::FairRunAnaProof(const char* proofName) : FairRunAna() @@ -262,13 +265,13 @@ void FairRunAnaProof::SetSource(FairSource* tempSource) fProofFileSource = static_cast(tempSource); } -void FairRunAnaProof::Run(Int_t Ev_start, Int_t Ev_end) +void FairRunAnaProof::Run(FairRoot::EntryID NEntry, int NStop) { - RunOnProof(Ev_start, Ev_end); + RunOnProof(NEntry, NStop); return; } -void FairRunAnaProof::RunOneEvent(Long64_t entry) +void FairRunAnaProof::RunOneEvent(FairRoot::EntryID entry) { if (fTimeStamps) { RunTSBuffers(); @@ -294,7 +297,7 @@ void FairRunAnaProof::RunOneEvent(Long64_t entry) } } -void FairRunAnaProof::RunOnProof(Int_t NStart, Int_t NStop) +void FairRunAnaProof::RunOnProof(FairRoot::EntryID NStart, int NStop) { fProofOutputStatus.ToLower(); if (!fProofOutputStatus.Contains("copy") && !fProofOutputStatus.Contains("merge")) { diff --git a/fairroot/base/steer/FairRunAnaProof.h b/fairroot/base/steer/FairRunAnaProof.h index 8e0d2601bf..0e00b195d7 100644 --- a/fairroot/base/steer/FairRunAnaProof.h +++ b/fairroot/base/steer/FairRunAnaProof.h @@ -34,12 +34,12 @@ class FairRunAnaProof : public FairRunAna /** Init containers executed on PROOF, which is part of Init when running locally*/ void InitContainers(); - /**Run from event number NStart to event number NStop */ - void Run(Int_t NStart = 0, Int_t NStop = 0) override; - /**Run for one event, used on PROOF nodes*/ - void RunOneEvent(Long64_t entry); - /**Run on proof from event NStart to event NStop*/ - void RunOnProof(Int_t NStart, Int_t NStop); + /**Run from entry number NEntry to entry number NStop */ + void Run(FairRoot::EntryID NEntry = 0, int NStop = 0) override; + /**Run for one entry, used on PROOF nodes*/ + void RunOneEvent(FairRoot::EntryID entry); + /**Run on proof from entry NStart to entry NStop*/ + void RunOnProof(FairRoot::EntryID NStart, int NStop); /** set the input tree of fRootManager when running on PROOF worker*/ /* void SetInTree (TTree* tempTree) { */ diff --git a/fairroot/base/steer/FairRunSim.cxx b/fairroot/base/steer/FairRunSim.cxx index 10ae824f2a..1338f9f0e4 100644 --- a/fairroot/base/steer/FairRunSim.cxx +++ b/fairroot/base/steer/FairRunSim.cxx @@ -307,7 +307,7 @@ void FairRunSim::SetMCConfig() } } -void FairRunSim::Run(Int_t NEvents, Int_t) +void FairRunSim::Run(FairRoot::EntryID NEvents, int) { fApp->RunMC(NEvents); fWasMT = fApp->GetIsMT(); diff --git a/fairroot/base/steer/FairRunSim.h b/fairroot/base/steer/FairRunSim.h index 771fd55d93..30d7850b7b 100644 --- a/fairroot/base/steer/FairRunSim.h +++ b/fairroot/base/steer/FairRunSim.h @@ -72,7 +72,7 @@ class FairRunSim : public FairRun /** * run the simulation */ - void Run(Int_t NEvents = 0, Int_t NotUsed = 0) override; + void Run(FairRoot::EntryID NEvents = 0, int NotUsed = 0) override; /** * Set the magnetic that has to be used for simulation field */ diff --git a/fairroot/online/steer/FairRunOnline.cxx b/fairroot/online/steer/FairRunOnline.cxx index bac962b884..0f97afc2d4 100644 --- a/fairroot/online/steer/FairRunOnline.cxx +++ b/fairroot/online/steer/FairRunOnline.cxx @@ -54,7 +54,6 @@ FairRunOnline::FairRunOnline() , fIsInitialized(kFALSE) , fStatic(kFALSE) , fField(0) - , fNevents(0) , fServer(nullptr) , fServerRefreshRate(0) { @@ -69,7 +68,6 @@ FairRunOnline::FairRunOnline(FairSource* source) , fIsInitialized(kFALSE) , fStatic(kFALSE) , fField(0) - , fNevents(0) , fServer(nullptr) , fServerRefreshRate(0) { @@ -249,14 +247,14 @@ Int_t FairRunOnline::EventLoop() return 0; } -void FairRunOnline::Run(Int_t Ev_start, Int_t Ev_end) +void FairRunOnline::Run(FairRoot::EntryID Ev_start, int Ev_end) { fNevents = 0; gIsInterrupted = kFALSE; - Int_t MaxAllowed = fRootManager->CheckMaxEventNo(Ev_end); - if (MaxAllowed != -1) { + FairRoot::EntryID MaxAllowed = fRootManager->CheckMaxEventNo(Ev_end); + if (MaxAllowed != FairRoot::EntryID::None) { if (Ev_end == 0) { if (Ev_start == 0) { Ev_end = MaxAllowed; @@ -296,7 +294,7 @@ void FairRunOnline::Run(Int_t Ev_start, Int_t Ev_end) } } } else { - for (Int_t i = Ev_start; i < Ev_end; i++) { + for (FairRoot::EntryID i = Ev_start; i < Ev_end; i++) { status = fRootManager->ReadEvent(i); if (0 == status) { status = EventLoop(); diff --git a/fairroot/online/steer/FairRunOnline.h b/fairroot/online/steer/FairRunOnline.h index 1f2f3cb818..cece1385d8 100644 --- a/fairroot/online/steer/FairRunOnline.h +++ b/fairroot/online/steer/FairRunOnline.h @@ -37,7 +37,7 @@ class FairRunOnline : public FairRun /**initialize the run manager*/ void Init() override; /**Run for the given number of events*/ - void Run(Int_t Ev_start, Int_t Ev_end) override; + void Run(FairRoot::EntryID Ev_start, int Ev_end) override; void Reinit(UInt_t runId); UInt_t getRunId() { return fRunId; } @@ -96,9 +96,9 @@ class FairRunOnline : public FairRun Bool_t fStatic; //! FairField* fField; - Int_t fNevents; //! - THttpServer* fServer; //! - Int_t fServerRefreshRate; //! + FairRoot::EntryID fNevents{0}; //! + THttpServer* fServer; //! + Int_t fServerRefreshRate; //! virtual void Fill();