00001 #ifndef FWCore_Framework_EDProducer_h
00002 #define FWCore_Framework_EDProducer_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "FWCore/Framework/interface/ProducerBase.h"
00014 #include "FWCore/Framework/interface/Frameworkfwd.h"
00015 #include "FWCore/Framework/src/WorkerT.h"
00016 #include "DataFormats/Provenance/interface/ModuleDescription.h"
00017 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
00018
00019 namespace edm {
00020 class EDProducer : public ProducerBase {
00021 public:
00022 template <typename T> friend class WorkerT;
00023 typedef EDProducer ModuleType;
00024 typedef WorkerT<EDProducer> WorkerType;
00025
00026 EDProducer ();
00027 virtual ~EDProducer();
00028
00029 static void fillDescription(edm::ParameterSetDescription&);
00030
00031 protected:
00032
00033
00034 CurrentProcessingContext const* currentContext() const;
00035
00036 private:
00037 bool doEvent(EventPrincipal& ep, EventSetup const& c,
00038 CurrentProcessingContext const* cpcp);
00039 void doBeginJob(EventSetup const&);
00040 void doEndJob();
00041 bool doBeginRun(RunPrincipal & rp, EventSetup const& c,
00042 CurrentProcessingContext const* cpc);
00043 bool doEndRun(RunPrincipal & rp, EventSetup const& c,
00044 CurrentProcessingContext const* cpc);
00045 bool doBeginLuminosityBlock(LuminosityBlockPrincipal & lbp, EventSetup const& c,
00046 CurrentProcessingContext const* cpc);
00047 bool doEndLuminosityBlock(LuminosityBlockPrincipal & lbp, EventSetup const& c,
00048 CurrentProcessingContext const* cpc);
00049 void doRespondToOpenInputFile(FileBlock const& fb);
00050 void doRespondToCloseInputFile(FileBlock const& fb);
00051 void doRespondToOpenOutputFiles(FileBlock const& fb);
00052 void doRespondToCloseOutputFiles(FileBlock const& fb);
00053 void registerAnyProducts(boost::shared_ptr<EDProducer>& module, ProductRegistry *reg) {
00054 registerProducts(module, reg, moduleDescription_);
00055 }
00056
00057 std::string workerType() const {return "WorkerT<EDProducer>";}
00058
00059 virtual void produce(Event &, EventSetup const&) = 0;
00060 virtual void beginJob(EventSetup const&){}
00061 virtual void endJob(){}
00062 virtual void beginRun(Run &, EventSetup const&){}
00063 virtual void endRun(Run &, EventSetup const&){}
00064 virtual void beginLuminosityBlock(LuminosityBlock &, EventSetup const&){}
00065 virtual void endLuminosityBlock(LuminosityBlock &, EventSetup const&){}
00066 virtual void respondToOpenInputFile(FileBlock const& fb) {}
00067 virtual void respondToCloseInputFile(FileBlock const& fb) {}
00068 virtual void respondToOpenOutputFiles(FileBlock const& fb) {}
00069 virtual void respondToCloseOutputFiles(FileBlock const& fb) {}
00070
00071 void setModuleDescription(ModuleDescription const& md) {
00072 moduleDescription_ = md;
00073 }
00074 ModuleDescription moduleDescription_;
00075 CurrentProcessingContext const* current_context_;
00076 };
00077 }
00078
00079 #endif