00001
00002
00003
00004
00005 #include "FWCore/Sources/interface/RawInputSource.h"
00006 #include "DataFormats/Provenance/interface/Timestamp.h"
00007 #include "FWCore/Framework/interface/EventPrincipal.h"
00008 #include "DataFormats/Provenance/interface/EventAuxiliary.h"
00009 #include "DataFormats/Provenance/interface/LuminosityBlockAuxiliary.h"
00010 #include "DataFormats/Provenance/interface/RunAuxiliary.h"
00011 #include "FWCore/Framework/interface/LuminosityBlockPrincipal.h"
00012 #include "FWCore/Framework/interface/RunPrincipal.h"
00013 #include "FWCore/Framework/interface/Event.h"
00014
00015 namespace edm {
00016 RawInputSource::RawInputSource(ParameterSet const& pset,
00017 InputSourceDescription const& desc) :
00018 InputSource(pset, desc),
00019 runNumber_(RunNumber_t()),
00020 newRun_(false),
00021 newLumi_(false),
00022 ep_(0) {
00023 setTimestamp(Timestamp::beginOfTime());
00024 }
00025
00026 RawInputSource::~RawInputSource() {
00027 }
00028
00029 boost::shared_ptr<RunPrincipal>
00030 RawInputSource::readRun_() {
00031 newRun_ = false;
00032 RunAuxiliary runAux(runNumber_, timestamp(), Timestamp::invalidTimestamp());
00033 return boost::shared_ptr<RunPrincipal>(
00034 new RunPrincipal(runAux,
00035 productRegistry(),
00036 processConfiguration()));
00037 }
00038
00039 boost::shared_ptr<LuminosityBlockPrincipal>
00040 RawInputSource::readLuminosityBlock_() {
00041 newLumi_ = false;
00042 LuminosityBlockAuxiliary lumiAux(runNumber_,
00043 luminosityBlockNumber_, timestamp(), Timestamp::invalidTimestamp());
00044 return boost::shared_ptr<LuminosityBlockPrincipal>(
00045 new LuminosityBlockPrincipal(lumiAux,
00046 productRegistry(),
00047 processConfiguration()));
00048 }
00049
00050 std::auto_ptr<EventPrincipal>
00051 RawInputSource::readEvent_() {
00052 assert(ep_.get() != 0);
00053 return ep_;
00054 }
00055
00056 std::auto_ptr<Event>
00057 RawInputSource::makeEvent(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, Timestamp const& tstamp) {
00058 EventSourceSentry sentry(*this);
00059 EventAuxiliary eventAux(EventID(run, event),
00060 processGUID(), tstamp, lumi, true, EventAuxiliary::Data);
00061 ep_ = std::auto_ptr<EventPrincipal>(
00062 new EventPrincipal(eventAux, productRegistry(), processConfiguration()));
00063 std::auto_ptr<Event> e(new Event(*ep_, moduleDescription()));
00064 return e;
00065 }
00066
00067
00068 InputSource::ItemType
00069 RawInputSource::getNextItemType() {
00070 if (state() == IsInvalid) {
00071 return IsFile;
00072 }
00073 if (newRun_) {
00074 return IsRun;
00075 }
00076 if (newLumi_) {
00077 return IsLumi;
00078 }
00079 if(ep_.get() != 0) {
00080 return IsEvent;
00081 }
00082 std::auto_ptr<Event> e(readOneEvent());
00083 if (e.get() == 0) {
00084 return IsStop;
00085 } else {
00086 e->commit_();
00087 }
00088 if (e->run() != runNumber_) {
00089 newRun_ = newLumi_ = true;
00090 resetLuminosityBlockPrincipal();
00091 resetRunPrincipal();
00092 runNumber_ = e->run();
00093 luminosityBlockNumber_ = e->luminosityBlock();
00094 return IsRun;
00095 } else if (e->luminosityBlock() != luminosityBlockNumber_) {
00096 luminosityBlockNumber_ = e->luminosityBlock();
00097 newLumi_ = true;
00098 resetLuminosityBlockPrincipal();
00099 return IsLumi;
00100 }
00101 return IsEvent;
00102 }
00103
00104 std::auto_ptr<EventPrincipal>
00105 RawInputSource::readIt(EventID const&) {
00106 throw edm::Exception(errors::LogicError,"RawInputSource::readEvent_(EventID const& eventID)")
00107 << "Random access read cannot be used for RawInputSource.\n"
00108 << "Contact a Framework developer.\n";
00109 }
00110
00111
00112 void
00113 RawInputSource::skip(int) {
00114 throw edm::Exception(errors::LogicError,"RawInputSource::skip(int offset)")
00115 << "Random access skip cannot be used for RawInputSource\n"
00116 << "Contact a Framework developer.\n";
00117 }
00118
00119 }