Go to the documentation of this file.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/Event.h"
00012
00013 namespace edm {
00014 RawInputSource::RawInputSource(ParameterSet const& pset,
00015 InputSourceDescription const& desc) :
00016 InputSource(pset, desc),
00017 runNumber_(RunNumber_t()),
00018 luminosityBlockNumber_(),
00019 newRun_(false),
00020 newLumi_(false),
00021 eventCached_(false) {
00022 setTimestamp(Timestamp::beginOfTime());
00023 }
00024
00025 RawInputSource::~RawInputSource() {
00026 }
00027
00028 boost::shared_ptr<RunAuxiliary>
00029 RawInputSource::readRunAuxiliary_() {
00030 newRun_ = false;
00031 return boost::shared_ptr<RunAuxiliary>(new RunAuxiliary(runNumber_, timestamp(), Timestamp::invalidTimestamp()));
00032 }
00033
00034 boost::shared_ptr<LuminosityBlockAuxiliary>
00035 RawInputSource::readLuminosityBlockAuxiliary_() {
00036 newLumi_ = false;
00037 return boost::shared_ptr<LuminosityBlockAuxiliary>(new LuminosityBlockAuxiliary(
00038 runNumber_, luminosityBlockNumber_, timestamp(), Timestamp::invalidTimestamp()));
00039 }
00040
00041 EventPrincipal*
00042 RawInputSource::readEvent_() {
00043 assert(eventCached_);
00044 eventCached_ = false;
00045 return eventPrincipalCache();
00046 }
00047
00048 std::auto_ptr<Event>
00049 RawInputSource::makeEvent(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, Timestamp const& tstamp) {
00050 if(!runAuxiliary()) {
00051 newRun_ = newLumi_ = true;
00052 setRunAuxiliary(new RunAuxiliary(run, tstamp, Timestamp::invalidTimestamp()));
00053 readAndCacheRun();
00054 setRunPrematurelyRead();
00055 }
00056 if(!luminosityBlockAuxiliary()) {
00057 setLuminosityBlockAuxiliary(new LuminosityBlockAuxiliary(run, lumi, tstamp, Timestamp::invalidTimestamp()));
00058 newLumi_ = true;
00059 readAndCacheLumi();
00060 setLumiPrematurelyRead();
00061 }
00062 EventSourceSentry sentry(*this);
00063 std::auto_ptr<EventAuxiliary> aux(new EventAuxiliary(EventID(run, lumi, event),
00064 processGUID(), tstamp, true, EventAuxiliary::PhysicsTrigger));
00065 eventPrincipalCache()->fillEventPrincipal(aux, luminosityBlockPrincipal());
00066 eventCached_ = true;
00067 std::auto_ptr<Event> e(new Event(*eventPrincipalCache(), moduleDescription()));
00068 return e;
00069 }
00070
00071
00072 InputSource::ItemType
00073 RawInputSource::getNextItemType() {
00074 if (state() == IsInvalid) {
00075 return IsFile;
00076 }
00077 if (newRun_) {
00078 return IsRun;
00079 }
00080 if (newLumi_) {
00081 return IsLumi;
00082 }
00083 if(eventCached_) {
00084 return IsEvent;
00085 }
00086 std::auto_ptr<Event> e(readOneEvent());
00087 if (e.get() == 0) {
00088 return IsStop;
00089 } else {
00090 e->commit_();
00091 }
00092 if (e->run() != runNumber_) {
00093 newRun_ = newLumi_ = true;
00094 runNumber_ = e->run();
00095 luminosityBlockNumber_ = e->luminosityBlock();
00096 return IsRun;
00097 } else if (e->luminosityBlock() != luminosityBlockNumber_) {
00098 luminosityBlockNumber_ = e->luminosityBlock();
00099 newLumi_ = true;
00100 return IsLumi;
00101 }
00102 return IsEvent;
00103 }
00104
00105 EventPrincipal *
00106 RawInputSource::readIt(EventID const&) {
00107 throw edm::Exception(errors::LogicError,"RawInputSource::readEvent_(EventID const& eventID)")
00108 << "Random access read cannot be used for RawInputSource.\n"
00109 << "Contact a Framework developer.\n";
00110 }
00111
00112
00113 void
00114 RawInputSource::skip(int) {
00115 throw edm::Exception(errors::LogicError,"RawInputSource::skip(int offset)")
00116 << "Random access skip cannot be used for RawInputSource\n"
00117 << "Contact a Framework developer.\n";
00118 }
00119
00120 }