From ca6cb851ed561281d0568d1ece5d2f9ca0ff2060 Mon Sep 17 00:00:00 2001 From: Christopher Jones Date: Tue, 15 Jun 2021 13:49:38 -0500 Subject: [PATCH 1/2] Allow specification of ES modules in ExternalGeneratorFilter The parameter _external_process_esModules_ allows one to specify the names of ES modules which should be copied from the main process and started in the external process. --- .../Core/plugins/ExternalGeneratorFilter.cc | 8 +++++++- .../Core/python/ExternalGeneratorFilter.py | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/GeneratorInterface/Core/plugins/ExternalGeneratorFilter.cc b/GeneratorInterface/Core/plugins/ExternalGeneratorFilter.cc index 5202d043085cc..42b54dc32861a 100644 --- a/GeneratorInterface/Core/plugins/ExternalGeneratorFilter.cc +++ b/GeneratorInterface/Core/plugins/ExternalGeneratorFilter.cc @@ -206,6 +206,7 @@ class ExternalGeneratorFilter : public edm::global::EDFilter()}, config_{iPSet.getUntrackedParameter("@python_config")}, verbose_{iPSet.getUntrackedParameter("_external_process_verbose_")}, - waitTime_{iPSet.getUntrackedParameter("_external_process_waitTime_")} {} + waitTime_{iPSet.getUntrackedParameter("_external_process_waitTime_")}, + extraConfig_{iPSet.getUntrackedParameter("_external_process_extraConfig_")} {} std::unique_ptr ExternalGeneratorFilter::beginStream(edm::StreamID iID) const { auto const label = moduleDescription().moduleLabel(); @@ -241,6 +243,10 @@ process = TestProcess() config += R"_( process.add_(cms.Service("InitRootHandlers", UnloadRootSigHandler=cms.untracked.bool(True))) )_"; + if (not extraConfig_.empty()) { + config += "\n"; + config += extraConfig_; + } auto cache = std::make_unique(config, iID.value(), verbose_, waitTime_); if (iID.value() == 0) { diff --git a/GeneratorInterface/Core/python/ExternalGeneratorFilter.py b/GeneratorInterface/Core/python/ExternalGeneratorFilter.py index a8d14acf72ee7..ffda6ffca39e9 100644 --- a/GeneratorInterface/Core/python/ExternalGeneratorFilter.py +++ b/GeneratorInterface/Core/python/ExternalGeneratorFilter.py @@ -1,9 +1,11 @@ import FWCore.ParameterSet.Config as cms class ExternalGeneratorFilter(cms.EDFilter): - def __init__(self, prod, _external_process_waitTime_ = cms.untracked.uint32(60), _external_process_verbose_ = cms.untracked.bool(False)): + def __init__(self, prod, _external_process_waitTime_ = cms.untracked.uint32(60), _external_process_verbose_ = cms.untracked.bool(False), + _external_process_esModules_ = cms.vstring()): self.__dict__['_external_process_verbose_']=_external_process_verbose_ self.__dict__['_external_process_waitTime_']=_external_process_waitTime_ + self.__dict__['_external_process_esModules_'] = _external_process_esModules_ self.__dict__['_prod'] = prod super(cms.EDFilter,self).__init__('ExternalGeneratorFilter') def __setattr__(self, name, value): @@ -31,6 +33,13 @@ def insertInto(self, parameterSet, myname): newpset.addString(False,"@python_config", self._prod.dumpPython()) newpset.addBool(False,"_external_process_verbose_", self._external_process_verbose_.value()) newpset.addUInt32(False,"_external_process_waitTime_", self._external_process_waitTime_.value()) + newpset.addVString(True, "_external_process_esModules_", self._external_process_esModules_.value()) + + extraConfig ='' + for x in self._external_process_esModules_.value(): + extraConfig += "process."+x+"="+parameterSet.getTopPSet_(x).dumpPython() + extraConfig += '\n' + newpset.addString(False, "_external_process_extraConfig_", extraConfig) self._prod.insertContentsInto(newpset) parameterSet.addPSet(True, self.nameInProcessDesc_(myname), newpset) def dumpPython(self, options=cms.PrintOptions()): @@ -40,7 +49,8 @@ def dumpPython(self, options=cms.PrintOptions()): result += "\n"+options.indentation() + self._prod.dumpPython(options) result +=options.indentation()+",\n" result += options.indentation() + "_external_process_waitTime_ = " + self._external_process_waitTime_.dumpPython(options) + ',\n' - result += options.indentation() + "_external_process_verbose_ = " + self._external_process_verbose_.dumpPython(options) + ',' + result += options.indentation() + "_external_process_verbose_ = " + self._external_process_verbose_.dumpPython(options) + ',\n' + result += options.indentation() + "_external_process_esModules_ =" + self._external_process_esModules_.dumpPython(options) + ',' options.unindent() result += "\n)\n" return result From 79c69b39d550f5661ae7fcbe2f44f7318b45564e Mon Sep 17 00:00:00 2001 From: Christopher Jones Date: Thu, 17 Jun 2021 08:33:37 -0500 Subject: [PATCH 2/2] changed new argument from *_esModules_ to *_components_ --- .../Core/python/ExternalGeneratorFilter.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/GeneratorInterface/Core/python/ExternalGeneratorFilter.py b/GeneratorInterface/Core/python/ExternalGeneratorFilter.py index ffda6ffca39e9..d7010e7e4be90 100644 --- a/GeneratorInterface/Core/python/ExternalGeneratorFilter.py +++ b/GeneratorInterface/Core/python/ExternalGeneratorFilter.py @@ -2,10 +2,10 @@ class ExternalGeneratorFilter(cms.EDFilter): def __init__(self, prod, _external_process_waitTime_ = cms.untracked.uint32(60), _external_process_verbose_ = cms.untracked.bool(False), - _external_process_esModules_ = cms.vstring()): + _external_process_components_ = cms.vstring()): self.__dict__['_external_process_verbose_']=_external_process_verbose_ self.__dict__['_external_process_waitTime_']=_external_process_waitTime_ - self.__dict__['_external_process_esModules_'] = _external_process_esModules_ + self.__dict__['_external_process_components_'] = _external_process_components_ self.__dict__['_prod'] = prod super(cms.EDFilter,self).__init__('ExternalGeneratorFilter') def __setattr__(self, name, value): @@ -33,10 +33,10 @@ def insertInto(self, parameterSet, myname): newpset.addString(False,"@python_config", self._prod.dumpPython()) newpset.addBool(False,"_external_process_verbose_", self._external_process_verbose_.value()) newpset.addUInt32(False,"_external_process_waitTime_", self._external_process_waitTime_.value()) - newpset.addVString(True, "_external_process_esModules_", self._external_process_esModules_.value()) + newpset.addVString(True, "_external_process_components_", self._external_process_components_.value()) extraConfig ='' - for x in self._external_process_esModules_.value(): + for x in self._external_process_components_.value(): extraConfig += "process."+x+"="+parameterSet.getTopPSet_(x).dumpPython() extraConfig += '\n' newpset.addString(False, "_external_process_extraConfig_", extraConfig) @@ -50,7 +50,7 @@ def dumpPython(self, options=cms.PrintOptions()): result +=options.indentation()+",\n" result += options.indentation() + "_external_process_waitTime_ = " + self._external_process_waitTime_.dumpPython(options) + ',\n' result += options.indentation() + "_external_process_verbose_ = " + self._external_process_verbose_.dumpPython(options) + ',\n' - result += options.indentation() + "_external_process_esModules_ =" + self._external_process_esModules_.dumpPython(options) + ',' + result += options.indentation() + "_external_process_components_ =" + self._external_process_components_.dumpPython(options) + ',' options.unindent() result += "\n)\n" return result