Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-31 02:19:21

0001 #ifndef FWCore_Framework_LuminosityBlockPrincipal_h
0002 #define FWCore_Framework_LuminosityBlockPrincipal_h
0003 
0004 /*----------------------------------------------------------------------
0005 
0006 LuminosityBlockPrincipal: This is the class responsible for management of
0007 per luminosity block EDProducts. It is not seen by reconstruction code;
0008 such code sees the LuminosityBlock class, which is a proxy for LuminosityBlockPrincipal.
0009 
0010 The major internal component of the LuminosityBlockPrincipal
0011 is the DataBlock.
0012 
0013 ----------------------------------------------------------------------*/
0014 
0015 #include "DataFormats/Provenance/interface/LuminosityBlockAuxiliary.h"
0016 #include "DataFormats/Provenance/interface/RunID.h"
0017 #include "FWCore/Utilities/interface/LuminosityBlockIndex.h"
0018 #include "FWCore/Framework/interface/Principal.h"
0019 #include "FWCore/Framework/interface/ProductResolversFactory.h"
0020 #include "FWCore/Utilities/interface/propagate_const.h"
0021 
0022 #include <memory>
0023 
0024 #include <vector>
0025 
0026 namespace edm {
0027 
0028   class HistoryAppender;
0029   class ModuleCallingContext;
0030   class RunPrincipal;
0031 
0032   class LuminosityBlockPrincipal : public Principal {
0033   public:
0034     typedef LuminosityBlockAuxiliary Auxiliary;
0035     typedef Principal Base;
0036 
0037     template <ProductResolversFactory FACTORY>
0038     LuminosityBlockPrincipal(std::shared_ptr<ProductRegistry const> reg,
0039                              FACTORY&& iFactory,
0040                              ProcessConfiguration const& pc,
0041                              HistoryAppender* historyAppender,
0042                              unsigned int index)
0043         : LuminosityBlockPrincipal(reg, iFactory(InLumi, pc.processName(), *reg), pc, historyAppender, index) {}
0044 
0045     ~LuminosityBlockPrincipal() override {}
0046 
0047     void fillLuminosityBlockPrincipal(ProcessHistory const* processHistory, DelayedReader* reader = nullptr);
0048 
0049     RunPrincipal const& runPrincipal() const { return *runPrincipal_; }
0050 
0051     RunPrincipal& runPrincipal() { return *runPrincipal_; }
0052 
0053     void setRunPrincipal(std::shared_ptr<RunPrincipal> rp) { runPrincipal_ = rp; }
0054 
0055     LuminosityBlockIndex index() const { return index_; }
0056 
0057     LuminosityBlockID id() const { return aux().id(); }
0058 
0059     Timestamp const& beginTime() const { return aux().beginTime(); }
0060 
0061     Timestamp const& endTime() const { return aux().endTime(); }
0062 
0063     void setEndTime(Timestamp const& time) { aux_.setEndTime(time); }
0064 
0065     LuminosityBlockNumber_t luminosityBlock() const { return aux().luminosityBlock(); }
0066 
0067     void setAux(LuminosityBlockAuxiliary iAux) { aux_ = std::move(iAux); }
0068     LuminosityBlockAuxiliary const& aux() const { return aux_; }
0069 
0070     RunNumber_t run() const { return aux().run(); }
0071 
0072     void mergeAuxiliary(LuminosityBlockAuxiliary const& aux) { return aux_.mergeAuxiliary(aux); }
0073 
0074     void put(ProductDescription const& bd, std::unique_ptr<WrapperBase> edp) const;
0075 
0076     void put(ProductResolverIndex index, std::unique_ptr<WrapperBase> edp) const;
0077 
0078     enum ShouldWriteLumi { kUninitialized, kNo, kYes };
0079     ShouldWriteLumi shouldWriteLumi() const { return shouldWriteLumi_; }
0080     void setShouldWriteLumi(ShouldWriteLumi value) { shouldWriteLumi_ = value; }
0081 
0082   private:
0083     LuminosityBlockPrincipal(std::shared_ptr<ProductRegistry const> reg,
0084                              std::vector<std::shared_ptr<ProductResolverBase>>&& resolvers,
0085                              ProcessConfiguration const& pc,
0086                              HistoryAppender* historyAppender,
0087                              unsigned int index);
0088     unsigned int transitionIndex_() const override;
0089 
0090     edm::propagate_const<std::shared_ptr<RunPrincipal>> runPrincipal_;
0091 
0092     LuminosityBlockAuxiliary aux_;
0093 
0094     LuminosityBlockIndex index_;
0095 
0096     ShouldWriteLumi shouldWriteLumi_ = kUninitialized;
0097   };
0098 }  // namespace edm
0099 #endif