From 4e4c8014f4935c7b52a230a50ddc5705646ee5d1 Mon Sep 17 00:00:00 2001 From: Marco Giacalone Date: Tue, 14 Oct 2025 17:25:41 +0200 Subject: [PATCH 1/2] Make Generators list static --- Generators/include/Generators/GeneratorHybrid.h | 3 ++- Generators/src/GeneratorHybrid.cxx | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Generators/include/Generators/GeneratorHybrid.h b/Generators/include/Generators/GeneratorHybrid.h index b92437b02d874..06018e4adafdc 100644 --- a/Generators/include/Generators/GeneratorHybrid.h +++ b/Generators/include/Generators/GeneratorHybrid.h @@ -66,10 +66,11 @@ class GeneratorHybrid : public Generator Bool_t confSetter(const auto& gen); template std::string jsonValueToString(const T& value); + static std::vector> const& getGenerators() { return gens; } private: o2::eventgen::Generator* currentgen = nullptr; - std::vector> gens; + static std::vector> gens; const std::vector generatorNames = {"extkinO2", "evtpool", "boxgen", "external", "hepmc", "pythia8", "pythia8pp", "pythia8hi", "pythia8hf", "pythia8powheg"}; std::vector mInputGens; std::vector mGens; diff --git a/Generators/src/GeneratorHybrid.cxx b/Generators/src/GeneratorHybrid.cxx index 83a694703c259..cfd1d7ba4e166 100644 --- a/Generators/src/GeneratorHybrid.cxx +++ b/Generators/src/GeneratorHybrid.cxx @@ -23,6 +23,8 @@ namespace o2 namespace eventgen { +std::vector> GeneratorHybrid::gens; + GeneratorHybrid::GeneratorHybrid(const std::string& inputgens) { // This generator has trivial unit conversions From 1002ed826c751da43fd003fb2bc7b09817abf704 Mon Sep 17 00:00:00 2001 From: Marco Giacalone Date: Fri, 24 Oct 2025 22:52:28 +0200 Subject: [PATCH 2/2] Made GeneratorHybrid a singleton --- Generators/include/Generators/GeneratorHybrid.h | 13 +++++++++---- Generators/src/GeneratorFactory.cxx | 4 ++-- Generators/src/GeneratorHybrid.cxx | 6 +++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Generators/include/Generators/GeneratorHybrid.h b/Generators/include/Generators/GeneratorHybrid.h index 06018e4adafdc..97422df1c8e2d 100644 --- a/Generators/include/Generators/GeneratorHybrid.h +++ b/Generators/include/Generators/GeneratorHybrid.h @@ -54,8 +54,11 @@ class GeneratorHybrid : public Generator { public: - GeneratorHybrid(const std::string& inputgens); - ~GeneratorHybrid(); + GeneratorHybrid& operator=(const GeneratorHybrid&) = delete; + GeneratorHybrid(const GeneratorHybrid&) = delete; + + // Singleton access method + static GeneratorHybrid& Instance(const std::string& inputgens = ""); Bool_t Init() override; Bool_t generateEvent() override; @@ -66,11 +69,13 @@ class GeneratorHybrid : public Generator Bool_t confSetter(const auto& gen); template std::string jsonValueToString(const T& value); - static std::vector> const& getGenerators() { return gens; } + std::vector> const& getGenerators() { return gens; } private: + GeneratorHybrid(const std::string& inputgens); + ~GeneratorHybrid(); o2::eventgen::Generator* currentgen = nullptr; - static std::vector> gens; + std::vector> gens; const std::vector generatorNames = {"extkinO2", "evtpool", "boxgen", "external", "hepmc", "pythia8", "pythia8pp", "pythia8hi", "pythia8hf", "pythia8powheg"}; std::vector mInputGens; std::vector mGens; diff --git a/Generators/src/GeneratorFactory.cxx b/Generators/src/GeneratorFactory.cxx index 8a6001b2cd5e6..4102bd8ffd9b2 100644 --- a/Generators/src/GeneratorFactory.cxx +++ b/Generators/src/GeneratorFactory.cxx @@ -284,8 +284,8 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair LOG(fatal) << "Configuration file for hybrid generator does not exist"; return; } - auto hybrid = new o2::eventgen::GeneratorHybrid(config); - primGen->AddGenerator(hybrid); + auto& hybrid = o2::eventgen::GeneratorHybrid::Instance(config); + primGen->AddGenerator(&hybrid); #endif } else { LOG(fatal) << "Invalid generator"; diff --git a/Generators/src/GeneratorHybrid.cxx b/Generators/src/GeneratorHybrid.cxx index cfd1d7ba4e166..370671a977a5c 100644 --- a/Generators/src/GeneratorHybrid.cxx +++ b/Generators/src/GeneratorHybrid.cxx @@ -23,7 +23,11 @@ namespace o2 namespace eventgen { -std::vector> GeneratorHybrid::gens; +GeneratorHybrid& GeneratorHybrid::Instance(const std::string& inputgens) +{ + static GeneratorHybrid instance(inputgens); + return instance; +} GeneratorHybrid::GeneratorHybrid(const std::string& inputgens) {