![]() |
![]() |
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