diff --git a/Generators/include/Generators/GeneratorHybrid.h b/Generators/include/Generators/GeneratorHybrid.h index b92437b02d874..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,8 +69,11 @@ class GeneratorHybrid : public Generator Bool_t confSetter(const auto& gen); template std::string jsonValueToString(const T& value); + std::vector> const& getGenerators() { return gens; } private: + GeneratorHybrid(const std::string& inputgens); + ~GeneratorHybrid(); o2::eventgen::Generator* currentgen = nullptr; std::vector> gens; const std::vector generatorNames = {"extkinO2", "evtpool", "boxgen", "external", "hepmc", "pythia8", "pythia8pp", "pythia8hi", "pythia8hf", "pythia8powheg"}; 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 83a694703c259..370671a977a5c 100644 --- a/Generators/src/GeneratorHybrid.cxx +++ b/Generators/src/GeneratorHybrid.cxx @@ -23,6 +23,12 @@ namespace o2 namespace eventgen { +GeneratorHybrid& GeneratorHybrid::Instance(const std::string& inputgens) +{ + static GeneratorHybrid instance(inputgens); + return instance; +} + GeneratorHybrid::GeneratorHybrid(const std::string& inputgens) { // This generator has trivial unit conversions