CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Attributes
ExternalGeneratorFilter Class Reference
Inheritance diagram for ExternalGeneratorFilter:
edm::global::EDFilter< edm::StreamCache< externalgen::StreamCache >, edm::RunCache< externalgen::RunCache >, edm::EndRunProducer, edm::LuminosityBlockCache< externalgen::LumiCache >, edm::LuminosityBlockSummaryCache< GenLumiInfoProduct >, edm::BeginLuminosityBlockProducer, edm::EndLuminosityBlockProducer > edm::global::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

class  ExternalGeneratorFilter
 

Public Member Functions

std::unique_ptr< externalgen::StreamCachebeginStream (edm::StreamID) const final
 
 ExternalGeneratorFilter (edm::ParameterSet const &)
 
bool filter (edm::StreamID, edm::Event &, edm::EventSetup const &) const final
 
std::shared_ptr< externalgen::LumiCacheglobalBeginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) const final
 
void globalBeginLuminosityBlockProduce (edm::LuminosityBlock &, edm::EventSetup const &) const final
 
std::shared_ptr< GenLumiInfoProductglobalBeginLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &) const final
 
std::shared_ptr< externalgen::RunCacheglobalBeginRun (edm::Run const &, edm::EventSetup const &) const final
 
void globalEndLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) const final
 
void globalEndLuminosityBlockProduce (edm::LuminosityBlock &, edm::EventSetup const &, GenLumiInfoProduct const *) const final
 
void globalEndLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, GenLumiInfoProduct *) const final
 
void globalEndRun (edm::Run const &, edm::EventSetup const &) const final
 
void globalEndRunProduce (edm::Run &, edm::EventSetup const &) const final
 
void streamBeginLuminosityBlock (edm::StreamID, edm::LuminosityBlock const &, edm::EventSetup const &) const final
 
void streamBeginRun (edm::StreamID, edm::Run const &, edm::EventSetup const &) const final
 
void streamEndLuminosityBlock (edm::StreamID, edm::LuminosityBlock const &, edm::EventSetup const &) const final
 
void streamEndLuminosityBlockSummary (edm::StreamID, edm::LuminosityBlock const &, edm::EventSetup const &, GenLumiInfoProduct *) const final
 
void streamEndRun (edm::StreamID, edm::Run const &, edm::EventSetup const &) const final
 
- Public Member Functions inherited from edm::global::EDFilter< edm::StreamCache< externalgen::StreamCache >, edm::RunCache< externalgen::RunCache >, edm::EndRunProducer, edm::LuminosityBlockCache< externalgen::LumiCache >, edm::LuminosityBlockSummaryCache< GenLumiInfoProduct >, edm::BeginLuminosityBlockProducer, edm::EndLuminosityBlockProducer >
 EDFilter ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Attributes

std::atomic< externalgen::StreamCache * > availableForBeginLumi_
 
std::string const config_
 
std::string const extraConfig_
 
edm::EDPutTokenT< GenEventInfoProduct > const genEventToken_
 
edm::EDPutTokenT< edm::HepMCProduct > const hepMCToken_
 
std::atomic< unsigned int > lastLumiIndex_ = 0
 
edm::EDPutTokenT< GenLumiInfoHeader > const lumiHeaderToken_
 
edm::EDPutTokenT< GenLumiInfoProduct > const lumiInfoToken_
 
edm::EDPutTokenT< GenRunInfoProduct > const runInfoToken_
 
externalgen::StreamCachestream0Cache_ = 0
 
bool const verbose_
 
unsigned int waitTime_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::global::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 168 of file ExternalGeneratorFilter.cc.

Constructor & Destructor Documentation

Definition at line 229 of file ExternalGeneratorFilter.cc.

References config_, extraConfig_, genEventToken_, lumiHeaderToken_, lumiInfoToken_, runInfoToken_, AlCaHLTBitMon_QueryRunRegistry::string, verbose_, and waitTime_.

230  : hepMCToken_{produces<edm::HepMCProduct>("unsmeared")},
231  genEventToken_{produces<GenEventInfoProduct>()},
232  runInfoToken_{produces<GenRunInfoProduct, edm::Transition::EndRun>()},
233  lumiHeaderToken_{produces<GenLumiInfoHeader, edm::Transition::BeginLuminosityBlock>()},
234  lumiInfoToken_{produces<GenLumiInfoProduct, edm::Transition::EndLuminosityBlock>()},
235  config_{iPSet.getUntrackedParameter<std::string>("@python_config")},
236  verbose_{iPSet.getUntrackedParameter<bool>("_external_process_verbose_")},
237  waitTime_{iPSet.getUntrackedParameter<unsigned int>("_external_process_waitTime_")},
238  extraConfig_{iPSet.getUntrackedParameter<std::string>("_external_process_extraConfig_")} {}
edm::EDPutTokenT< GenLumiInfoProduct > const lumiInfoToken_
edm::EDPutTokenT< GenEventInfoProduct > const genEventToken_
edm::EDPutTokenT< edm::HepMCProduct > const hepMCToken_
edm::EDPutTokenT< GenRunInfoProduct > const runInfoToken_
edm::EDPutTokenT< GenLumiInfoHeader > const lumiHeaderToken_

Member Function Documentation

std::unique_ptr< externalgen::StreamCache > ExternalGeneratorFilter::beginStream ( edm::StreamID  iID) const
final

Definition at line 240 of file ExternalGeneratorFilter.cc.

References availableForBeginLumi_, utilities::cache(), looper::config, config_, extraConfig_, label, edm::global::EDFilterBase::moduleDescription(), edm::ModuleDescription::moduleLabel(), alignCSCRings::s, stream0Cache_, AlCaHLTBitMon_QueryRunRegistry::string, edm::StreamID::value(), verbose_, and waitTime_.

240  {
241  auto const label = moduleDescription().moduleLabel();
242 
243  using namespace std::string_literals;
244 
245  std::string config = R"_(from FWCore.TestProcessor.TestProcess import *
246 process = TestProcess()
247 )_";
248  config += "process."s + label + "=" + config_ + "\n";
249  config += "process.moduleToTest(process."s + label + ")\n";
250  config += R"_(
251 process.add_(cms.Service("InitRootHandlers", AbortOnSignal=cms.untracked.bool(False)))
252  )_";
253  if (not extraConfig_.empty()) {
254  config += "\n";
255  config += extraConfig_;
256  }
257 
258  auto cache = std::make_unique<externalgen::StreamCache>(config, iID.value(), verbose_, waitTime_);
259  if (iID.value() == 0) {
260  stream0Cache_ = cache.get();
261 
263  }
264 
265  return cache;
266 }
std::atomic< externalgen::StreamCache * > availableForBeginLumi_
Definition: config.py:1
std::string const & moduleLabel() const
config
Definition: looper.py:291
char const * label
ModuleDescription const & moduleDescription() const
Definition: EDFilterBase.h:66
externalgen::StreamCache * stream0Cache_
unsigned int value() const
Definition: StreamID.h:42
def cache(function)
Definition: utilities.py:3
bool ExternalGeneratorFilter::filter ( edm::StreamID  iID,
edm::Event iEvent,
edm::EventSetup const &   
) const
finalvirtual

Implements edm::global::EDFilterBase.

Definition at line 268 of file ExternalGeneratorFilter.cc.

References edm::Event::emplace(), edm::EventID::event(), relval_steps::gen(), genEventToken_, edm::RandomNumberGenerator::getEngine(), hepMCToken_, edm::EventBase::id(), and eostools::move().

268  {
269  auto value = streamCache(iID)->produce(iID, iEvent.id().event());
270 
272  auto& engine = gen->getEngine(iID);
273  //if (value.randomState_.state_[0] != CLHEP::engineIDulong<CLHEP::RanecuEngine>()) {
274  // engine.setSeed(value.randomState_.seed_, 0);
275  //}
276  engine.get(value.randomState_.state_);
277 
278  iEvent.emplace(hepMCToken_, std::move(value.hepmc_));
279  iEvent.emplace(genEventToken_, std::move(value.eventInfo_));
280  return value.keepEvent_;
281 }
EventNumber_t event() const
Definition: EventID.h:41
edm::EDPutTokenT< GenEventInfoProduct > const genEventToken_
edm::EDPutTokenT< edm::HepMCProduct > const hepMCToken_
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
Definition: value.py:1
def gen(fragment, howMuch)
Production test section ####.
OrphanHandle< PROD > emplace(EDPutTokenT< PROD > token, Args &&...args)
puts a new product
Definition: Event.h:413
edm::EventID id() const
Definition: EventBase.h:59
def move(src, dest)
Definition: eostools.py:511
std::shared_ptr< externalgen::LumiCache > ExternalGeneratorFilter::globalBeginLuminosityBlock ( edm::LuminosityBlock const &  iLumi,
edm::EventSetup const &   
) const
final

Definition at line 317 of file ExternalGeneratorFilter.cc.

References relval_steps::gen(), edm::RandomNumberGenerator::getEngine(), edm::LuminosityBlock::index(), and alignCSCRings::s.

318  {
320  auto& engine = gen->getEngine(iLumi.index());
321  auto s = engine.put();
322  return std::make_shared<externalgen::LumiCache>(s, engine.getSeed());
323 }
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
def gen(fragment, howMuch)
Production test section ####.
void ExternalGeneratorFilter::globalBeginLuminosityBlockProduce ( edm::LuminosityBlock iLuminosityBlock,
edm::EventSetup const &   
) const
final

Definition at line 300 of file ExternalGeneratorFilter.cc.

References availableForBeginLumi_, edm::LuminosityBlock::emplace(), relval_steps::gen(), edm::RandomNumberGenerator::getEngine(), edm::LuminosityBlock::index(), lastLumiIndex_, lumiHeaderToken_, edm::LuminosityBlockBase::luminosityBlock(), eostools::move(), and findQualityFiles::v.

301  {
302  while (not availableForBeginLumi_.load()) {
303  }
304 
305  auto v = availableForBeginLumi_.load()->beginLumiProduce(
306  iLuminosityBlock.luminosityBlock(), luminosityBlockCache(iLuminosityBlock.index())->randomState_);
307 
309  auto& engine = gen->getEngine(iLuminosityBlock.index());
310  engine.get(v.randomState_.state_);
311 
312  iLuminosityBlock.emplace(lumiHeaderToken_, std::move(v.header_));
313 
314  lastLumiIndex_.store(iLuminosityBlock.index());
315 }
std::atomic< externalgen::StreamCache * > availableForBeginLumi_
LuminosityBlockIndex index() const
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
void emplace(EDPutTokenT< PROD > token, Args &&...args)
puts a new product
LuminosityBlockNumber_t luminosityBlock() const
def gen(fragment, howMuch)
Production test section ####.
std::atomic< unsigned int > lastLumiIndex_
def move(src, dest)
Definition: eostools.py:511
edm::EDPutTokenT< GenLumiInfoHeader > const lumiHeaderToken_
std::shared_ptr< GenLumiInfoProduct > ExternalGeneratorFilter::globalBeginLuminosityBlockSummary ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
) const
final

Definition at line 325 of file ExternalGeneratorFilter.cc.

326  {
327  return std::make_shared<GenLumiInfoProduct>();
328 }
std::shared_ptr< externalgen::RunCache > ExternalGeneratorFilter::globalBeginRun ( edm::Run const &  ,
edm::EventSetup const &   
) const
final

Definition at line 283 of file ExternalGeneratorFilter.cc.

284  {
285  return std::make_shared<externalgen::RunCache>();
286 }
void ExternalGeneratorFilter::globalEndLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
) const
inlinefinal

Definition at line 198 of file ExternalGeneratorFilter.cc.

198 {}
void ExternalGeneratorFilter::globalEndLuminosityBlockProduce ( edm::LuminosityBlock iLuminosityBlock,
edm::EventSetup const &  ,
GenLumiInfoProduct const *  iProduct 
) const
final

Definition at line 358 of file ExternalGeneratorFilter.cc.

References DEFINE_FWK_MODULE, edm::LuminosityBlock::emplace(), lumiInfoToken_, and eostools::move().

360  {
361  iLuminosityBlock.emplace(lumiInfoToken_, std::move(*iProduct));
362 }
edm::EDPutTokenT< GenLumiInfoProduct > const lumiInfoToken_
void emplace(EDPutTokenT< PROD > token, Args &&...args)
puts a new product
def move(src, dest)
Definition: eostools.py:511
void ExternalGeneratorFilter::globalEndLuminosityBlockSummary ( edm::LuminosityBlock const &  ,
edm::EventSetup const &  ,
GenLumiInfoProduct  
) const
inlinefinal

Definition at line 199 of file ExternalGeneratorFilter.cc.

201  {}
void ExternalGeneratorFilter::globalEndRun ( edm::Run const &  ,
edm::EventSetup const &   
) const
inlinefinal

Definition at line 184 of file ExternalGeneratorFilter.cc.

184 {}
void ExternalGeneratorFilter::globalEndRunProduce ( edm::Run iRun,
edm::EventSetup const &   
) const
final

Definition at line 296 of file ExternalGeneratorFilter.cc.

References edm::Run::emplace(), edm::Run::index(), eostools::move(), and runInfoToken_.

296  {
297  iRun.emplace(runInfoToken_, std::move(runCache(iRun.index())->runInfo_));
298 }
void emplace(EDPutTokenT< PROD > token, Args &&...args)
puts a new product
Definition: Run.h:245
edm::EDPutTokenT< GenRunInfoProduct > const runInfoToken_
RunIndex index() const
Definition: Run.cc:21
def move(src, dest)
Definition: eostools.py:511
void ExternalGeneratorFilter::streamBeginLuminosityBlock ( edm::StreamID  iID,
edm::LuminosityBlock const &  iLuminosityBlock,
edm::EventSetup const &   
) const
final

Definition at line 330 of file ExternalGeneratorFilter.cc.

References availableForBeginLumi_, utilities::cache(), edm::LuminosityBlock::index(), and edm::LuminosityBlockBase::run().

332  {
333  auto cache = streamCache(iID);
334  if (cache != availableForBeginLumi_.load()) {
335  (void)cache->beginLumiProduce(iLuminosityBlock.run(), luminosityBlockCache(iLuminosityBlock.index())->randomState_);
336  } else {
337  availableForBeginLumi_ = nullptr;
338  }
339 }
std::atomic< externalgen::StreamCache * > availableForBeginLumi_
def cache(function)
Definition: utilities.py:3
void ExternalGeneratorFilter::streamBeginRun ( edm::StreamID  iID,
edm::Run const &  iRun,
edm::EventSetup const &   
) const
final

Definition at line 288 of file ExternalGeneratorFilter.cc.

288 {}
void ExternalGeneratorFilter::streamEndLuminosityBlock ( edm::StreamID  iID,
edm::LuminosityBlock const &  iLuminosityBlock,
edm::EventSetup const &   
) const
final

Definition at line 341 of file ExternalGeneratorFilter.cc.

343  {}
void ExternalGeneratorFilter::streamEndLuminosityBlockSummary ( edm::StreamID  iID,
edm::LuminosityBlock const &  iLuminosityBlock,
edm::EventSetup const &  ,
GenLumiInfoProduct iProduct 
) const
final

Definition at line 345 of file ExternalGeneratorFilter.cc.

References availableForBeginLumi_, edm::LuminosityBlock::index(), lastLumiIndex_, GenLumiInfoProduct::mergeProduct(), and edm::LuminosityBlockBase::run().

348  {
349  iProduct->mergeProduct(*streamCache(iID)->endLumiProduce(iLuminosityBlock.run()));
350 
351  if (lastLumiIndex_ == iLuminosityBlock.index()) {
352  externalgen::StreamCache* expected = nullptr;
353 
354  availableForBeginLumi_.compare_exchange_strong(expected, streamCache(iID));
355  }
356 }
std::atomic< externalgen::StreamCache * > availableForBeginLumi_
virtual bool mergeProduct(const GenLumiInfoProduct &other)
std::atomic< unsigned int > lastLumiIndex_
void ExternalGeneratorFilter::streamEndRun ( edm::StreamID  iID,
edm::Run const &  iRun,
edm::EventSetup const &   
) const
final

Definition at line 289 of file ExternalGeneratorFilter.cc.

References edm::Run::index(), edm::RunBase::run(), and edm::StreamID::value().

289  {
290  if (iID.value() == 0) {
291  runCache(iRun.index())->runInfo_ = *streamCache(iID)->endRunProduce(iRun.run());
292  } else {
293  (void)streamCache(iID)->endRunProduce(iRun.run());
294  }
295 }
unsigned int value() const
Definition: StreamID.h:42

Member Data Documentation

std::atomic<externalgen::StreamCache*> ExternalGeneratorFilter::availableForBeginLumi_
mutableprivate
std::string const ExternalGeneratorFilter::config_
private

Definition at line 213 of file ExternalGeneratorFilter.cc.

Referenced by beginStream(), and ExternalGeneratorFilter().

std::string const ExternalGeneratorFilter::extraConfig_
private

Definition at line 216 of file ExternalGeneratorFilter.cc.

Referenced by beginStream(), and ExternalGeneratorFilter().

edm::EDPutTokenT<GenEventInfoProduct> const ExternalGeneratorFilter::genEventToken_
private

Definition at line 208 of file ExternalGeneratorFilter.cc.

Referenced by ExternalGeneratorFilter(), and filter().

edm::EDPutTokenT<edm::HepMCProduct> const ExternalGeneratorFilter::hepMCToken_
private

Definition at line 207 of file ExternalGeneratorFilter.cc.

Referenced by filter().

std::atomic<unsigned int> ExternalGeneratorFilter::lastLumiIndex_ = 0
mutableprivate
edm::EDPutTokenT<GenLumiInfoHeader> const ExternalGeneratorFilter::lumiHeaderToken_
private
edm::EDPutTokenT<GenLumiInfoProduct> const ExternalGeneratorFilter::lumiInfoToken_
private
edm::EDPutTokenT<GenRunInfoProduct> const ExternalGeneratorFilter::runInfoToken_
private

Definition at line 209 of file ExternalGeneratorFilter.cc.

Referenced by ExternalGeneratorFilter(), and globalEndRunProduce().

externalgen::StreamCache* ExternalGeneratorFilter::stream0Cache_ = 0
mutableprivate

Definition at line 220 of file ExternalGeneratorFilter.cc.

Referenced by beginStream().

bool const ExternalGeneratorFilter::verbose_
private

Definition at line 214 of file ExternalGeneratorFilter.cc.

Referenced by beginStream(), and ExternalGeneratorFilter().

unsigned int ExternalGeneratorFilter::waitTime_
private

Definition at line 215 of file ExternalGeneratorFilter.cc.

Referenced by beginStream(), and ExternalGeneratorFilter().