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