File indexing completed on 2024-04-06 12:12:11
0001 #include "FWCore/Framework/interface/LuminosityBlock.h"
0002
0003 #include "FWCore/Framework/interface/LuminosityBlockPrincipal.h"
0004 #include "FWCore/Framework/interface/Run.h"
0005 #include "FWCore/Framework/interface/TransitionInfoTypes.h"
0006 #include "FWCore/Framework/interface/ProductPutterBase.h"
0007 #include "FWCore/Utilities/interface/Algorithms.h"
0008 #include "FWCore/Utilities/interface/get_underlying_safe.h"
0009
0010 namespace edm {
0011
0012 std::string const LuminosityBlock::emptyString_;
0013
0014 LuminosityBlock::LuminosityBlock(LumiTransitionInfo const& info,
0015 ModuleDescription const& md,
0016 ModuleCallingContext const* mcc,
0017 bool isAtEnd)
0018 : LuminosityBlock(info.principal(), md, mcc, isAtEnd) {}
0019
0020 LuminosityBlock::LuminosityBlock(LuminosityBlockPrincipal const& lbp,
0021 ModuleDescription const& md,
0022 ModuleCallingContext const* moduleCallingContext,
0023 bool isAtEnd)
0024 : provRecorder_(lbp, md, isAtEnd), aux_(lbp.aux()), run_(), moduleCallingContext_(moduleCallingContext) {}
0025
0026 LuminosityBlock::~LuminosityBlock() {}
0027
0028 LuminosityBlockAuxiliary const& LuminosityBlock::luminosityBlockAuxiliary() const { return aux_; }
0029
0030 LuminosityBlockIndex LuminosityBlock::index() const { return luminosityBlockPrincipal().index(); }
0031
0032 LuminosityBlock::CacheIdentifier_t LuminosityBlock::cacheIdentifier() const {
0033 return luminosityBlockPrincipal().cacheIdentifier();
0034 }
0035
0036 void LuminosityBlock::setConsumer(EDConsumerBase const* iConsumer) {
0037 provRecorder_.setConsumer(iConsumer);
0038 if (run_) {
0039 run_->setConsumer(iConsumer);
0040 }
0041 }
0042
0043 void LuminosityBlock::setSharedResourcesAcquirer(SharedResourcesAcquirer* iResourceAcquirer) {
0044 provRecorder_.setSharedResourcesAcquirer(iResourceAcquirer);
0045 if (run_) {
0046 run_->setSharedResourcesAcquirer(iResourceAcquirer);
0047 }
0048 }
0049
0050 void LuminosityBlock::fillRun() const {
0051 run_.emplace(
0052 luminosityBlockPrincipal().runPrincipal(), provRecorder_.moduleDescription(), moduleCallingContext_, false);
0053 run_->setSharedResourcesAcquirer(provRecorder_.getSharedResourcesAcquirer());
0054 run_->setConsumer(provRecorder_.getConsumer());
0055 }
0056
0057 void LuminosityBlock::setProducer(ProducerBase const* iProducer) {
0058 provRecorder_.setProducer(iProducer);
0059
0060 putProducts_.resize(provRecorder_.putTokenIndexToProductResolverIndex().size());
0061 }
0062
0063 LuminosityBlockPrincipal const& LuminosityBlock::luminosityBlockPrincipal() const {
0064 return dynamic_cast<LuminosityBlockPrincipal const&>(provRecorder_.principal());
0065 }
0066
0067 Provenance const& LuminosityBlock::getProvenance(BranchID const& bid) const {
0068 return luminosityBlockPrincipal().getProvenance(bid);
0069 }
0070
0071 StableProvenance const& LuminosityBlock::getStableProvenance(BranchID const& bid) const {
0072 return luminosityBlockPrincipal().getStableProvenance(bid);
0073 }
0074
0075 void LuminosityBlock::getAllStableProvenance(std::vector<StableProvenance const*>& provenances) const {
0076 luminosityBlockPrincipal().getAllStableProvenance(provenances);
0077 }
0078
0079 void LuminosityBlock::commit_(std::vector<edm::ProductResolverIndex> const& iShouldPut) {
0080 LuminosityBlockPrincipal const& lbp = luminosityBlockPrincipal();
0081 size_t nPut = 0;
0082 for (size_t i = 0; i < putProducts().size(); ++i) {
0083 auto& p = get_underlying_safe(putProducts()[i]);
0084 if (p) {
0085 lbp.put(provRecorder_.putTokenIndexToProductResolverIndex()[i], std::move(p));
0086 ++nPut;
0087 }
0088 }
0089
0090 auto sz = iShouldPut.size();
0091 if (sz != 0 and sz != nPut) {
0092
0093 auto& p = provRecorder_.principal();
0094 for (auto index : iShouldPut) {
0095 auto resolver = p.getProductResolverByIndex(index);
0096 if (not resolver->productResolved() and isEndTransition(provRecorder_.transition()) ==
0097 resolver->branchDescription().availableOnlyAtEndTransition()) {
0098 dynamic_cast<ProductPutterBase const*>(resolver)->putProduct(std::unique_ptr<WrapperBase>());
0099 }
0100 }
0101 }
0102
0103
0104 putProducts().clear();
0105 }
0106
0107 ProcessHistoryID const& LuminosityBlock::processHistoryID() const {
0108 return luminosityBlockPrincipal().processHistoryID();
0109 }
0110
0111 ProcessHistory const& LuminosityBlock::processHistory() const { return provRecorder_.processHistory(); }
0112
0113 BasicHandle LuminosityBlock::getByLabelImpl(std::type_info const&,
0114 std::type_info const& iProductType,
0115 const InputTag& iTag) const {
0116 BasicHandle h = provRecorder_.getByLabel_(TypeID(iProductType), iTag, moduleCallingContext_);
0117 return h;
0118 }
0119 }