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..d7010e7e4be90 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_components_ = cms.vstring()): self.__dict__['_external_process_verbose_']=_external_process_verbose_ self.__dict__['_external_process_waitTime_']=_external_process_waitTime_ + self.__dict__['_external_process_components_'] = _external_process_components_ 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_components_", self._external_process_components_.value()) + + extraConfig ='' + for x in self._external_process_components_.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_components_ =" + self._external_process_components_.dumpPython(options) + ',' options.unindent() result += "\n)\n" return result