Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "FWCore/Framework/interface/EDLooperBase.h"
00011 #include "FWCore/Framework/interface/Event.h"
00012 #include "FWCore/Framework/interface/Run.h"
00013 #include "FWCore/Framework/interface/LuminosityBlock.h"
00014 #include "DataFormats/Provenance/interface/ModuleDescription.h"
00015 #include "FWCore/Framework/interface/EventSetupProvider.h"
00016 #include "FWCore/Utilities/interface/Algorithms.h"
00017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00018 #include "FWCore/Framework/interface/Actions.h"
00019 #include "FWCore/Utilities/interface/Exception.h"
00020 #include "FWCore/Framework/interface/ScheduleInfo.h"
00021
00022 #include "boost/bind.hpp"
00023
00024
00025 namespace edm {
00026
00027 EDLooperBase::EDLooperBase() : iCounter_(0), act_table_(0), moduleChanger_(0) { }
00028 EDLooperBase::~EDLooperBase() { }
00029
00030 void
00031 EDLooperBase::doStartingNewLoop() {
00032 startingNewLoop(iCounter_);
00033 }
00034
00035 EDLooperBase::Status
00036 EDLooperBase::doDuringLoop(edm::EventPrincipal& eventPrincipal, const edm::EventSetup& es, edm::ProcessingController& ioController) {
00037 edm::ModuleDescription modDesc("EDLooperBase", "");
00038 Event event(eventPrincipal, modDesc);
00039
00040 Status status = kContinue;
00041 try {
00042 status = duringLoop(event, es, ioController);
00043 }
00044 catch(cms::Exception& e) {
00045 actions::ActionCodes action = (act_table_->find(e.rootCause()));
00046 if (action != actions::Rethrow) {
00047 LogWarning(e.category())
00048 << "An exception occurred in the looper, continuing with the next event\n"
00049 << e.what();
00050 }
00051 else {
00052 throw;
00053 }
00054 }
00055 return status;
00056 }
00057
00058 EDLooperBase::Status
00059 EDLooperBase::doEndOfLoop(const edm::EventSetup& es) {
00060 return endOfLoop(es, iCounter_);
00061 }
00062
00063 void
00064 EDLooperBase::prepareForNextLoop(eventsetup::EventSetupProvider* esp) {
00065 ++iCounter_;
00066
00067 const std::set<edm::eventsetup::EventSetupRecordKey>& keys = modifyingRecords();
00068 for_all(keys,
00069 boost::bind(&eventsetup::EventSetupProvider::resetRecordPlusDependentRecords,
00070 esp, _1));
00071 }
00072
00073 void EDLooperBase::beginOfJob(const edm::EventSetup&) { beginOfJob();}
00074 void EDLooperBase::beginOfJob() { }
00075
00076 void EDLooperBase::endOfJob() { }
00077
00078 void EDLooperBase::doBeginRun(RunPrincipal& iRP, EventSetup const& iES){
00079 edm::ModuleDescription modDesc("EDLooperBase", "");
00080 Run run(iRP, modDesc);
00081 beginRun(run,iES);
00082 }
00083
00084 void EDLooperBase::doEndRun(RunPrincipal& iRP, EventSetup const& iES){
00085 edm::ModuleDescription modDesc("EDLooperBase", "");
00086 Run run(iRP, modDesc);
00087 endRun(run,iES);
00088 }
00089 void EDLooperBase::doBeginLuminosityBlock(LuminosityBlockPrincipal& iLB, EventSetup const& iES){
00090 edm::ModuleDescription modDesc("EDLooperBase", "");
00091 LuminosityBlock luminosityBlock(iLB, modDesc);
00092 beginLuminosityBlock(luminosityBlock,iES);
00093 }
00094 void EDLooperBase::doEndLuminosityBlock(LuminosityBlockPrincipal& iLB, EventSetup const& iES){
00095 edm::ModuleDescription modDesc("EDLooperBase", "");
00096 LuminosityBlock luminosityBlock(iLB, modDesc);
00097 endLuminosityBlock(luminosityBlock,iES);
00098 }
00099
00100 void EDLooperBase::beginRun(Run const&, EventSetup const&){}
00101 void EDLooperBase::endRun(Run const&, EventSetup const&){}
00102 void EDLooperBase::beginLuminosityBlock(LuminosityBlock const&, EventSetup const&){}
00103 void EDLooperBase::endLuminosityBlock(LuminosityBlock const&, EventSetup const&){}
00104
00105 void EDLooperBase::attachTo(ActivityRegistry&){}
00106
00107
00108 std::set<eventsetup::EventSetupRecordKey>
00109 EDLooperBase::modifyingRecords() const
00110 {
00111 return std::set<eventsetup::EventSetupRecordKey> ();
00112 }
00113
00114 void
00115 EDLooperBase::copyInfo(const ScheduleInfo& iInfo){
00116 scheduleInfo_ = std::auto_ptr<ScheduleInfo>(new ScheduleInfo(iInfo));
00117 }
00118 void
00119 EDLooperBase::setModuleChanger(const ModuleChanger* iChanger) {
00120 moduleChanger_ = iChanger;
00121 }
00122
00123 const ModuleChanger* EDLooperBase::moduleChanger() const {
00124 return moduleChanger_;
00125 }
00126 const ScheduleInfo* EDLooperBase::scheduleInfo() const {
00127 return scheduleInfo_.get();
00128 }
00129
00130 }