CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/FWCore/Framework/interface/LuminosityBlockPrincipal.h

Go to the documentation of this file.
00001 #ifndef FWCore_Framework_LuminosityBlockPrincipal_h
00002 #define FWCore_Framework_LuminosityBlockPrincipal_h
00003 
00004 /*----------------------------------------------------------------------
00005 
00006 LuminosityBlockPrincipal: This is the class responsible for management of
00007 per luminosity block EDProducts. It is not seen by reconstruction code;
00008 such code sees the LuminosityBlock class, which is a proxy for LuminosityBlockPrincipal.
00009 
00010 The major internal component of the LuminosityBlockPrincipal
00011 is the DataBlock.
00012 
00013 ----------------------------------------------------------------------*/
00014 
00015 
00016 #include "DataFormats/Provenance/interface/LuminosityBlockAuxiliary.h"
00017 #include "DataFormats/Provenance/interface/RunID.h"
00018 #include "FWCore/Framework/interface/Principal.h"
00019 
00020 #include "boost/shared_ptr.hpp"
00021 
00022 #include <vector>
00023 
00024 namespace edm {
00025 
00026   class HistoryAppender;
00027   class RunPrincipal;
00028   class UnscheduledHandler;
00029 
00030   class LuminosityBlockPrincipal : public Principal {
00031   public:
00032     typedef LuminosityBlockAuxiliary Auxiliary;
00033     typedef Principal Base;
00034     LuminosityBlockPrincipal(
00035         boost::shared_ptr<LuminosityBlockAuxiliary> aux,
00036         boost::shared_ptr<ProductRegistry const> reg,
00037         ProcessConfiguration const& pc,
00038         HistoryAppender* historyAppender);
00039 
00040     ~LuminosityBlockPrincipal() {}
00041 
00042     void fillLuminosityBlockPrincipal(DelayedReader* reader = 0);
00043 
00044     RunPrincipal const& runPrincipal() const {
00045       return *runPrincipal_;
00046     }
00047 
00048     RunPrincipal& runPrincipal() {
00049       return *runPrincipal_;
00050     }
00051 
00052     void setRunPrincipal(boost::shared_ptr<RunPrincipal> rp) {
00053       runPrincipal_ = rp;
00054     }
00055 
00056     LuminosityBlockID id() const {
00057       return aux().id();
00058     }
00059 
00060     Timestamp const& beginTime() const {
00061       return aux().beginTime();
00062     }
00063 
00064     Timestamp const& endTime() const {
00065       return aux().endTime();
00066     }
00067 
00068     void setEndTime(Timestamp const& time) {
00069       aux_->setEndTime(time);
00070     }
00071 
00072     LuminosityBlockNumber_t luminosityBlock() const {
00073       return aux().luminosityBlock();
00074     }
00075 
00076     LuminosityBlockAuxiliary const& aux() const {
00077       return *aux_;
00078     }
00079 
00080     RunNumber_t run() const {
00081       return aux().run();
00082     }
00083 
00084     void mergeAuxiliary(LuminosityBlockAuxiliary const& aux) {
00085       return aux_->mergeAuxiliary(aux);
00086     }
00087 
00088     void setUnscheduledHandler(boost::shared_ptr<UnscheduledHandler>) {}
00089 
00090     void put(
00091         ConstBranchDescription const& bd,
00092         WrapperOwningHolder const& edp);
00093 
00094     void readImmediate() const;
00095 
00096     void setComplete() {
00097       complete_ = true;
00098     }
00099 
00100   private:
00101 
00102     virtual bool isComplete_() const override {return complete_;}
00103 
00104     virtual bool unscheduledFill(std::string const&) const override {return false;}
00105 
00106     void resolveProductImmediate(ProductHolderBase const& phb) const;
00107 
00108     boost::shared_ptr<RunPrincipal> runPrincipal_;
00109 
00110     boost::shared_ptr<LuminosityBlockAuxiliary> aux_;
00111 
00112     bool complete_;
00113   };
00114 }
00115 #endif
00116