CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_2_9_HLT1_bphpatch4/src/FWCore/Sources/src/RawInputSource.cc

Go to the documentation of this file.
00001 /*----------------------------------------------------------------------
00002 $Id: RawInputSource.cc,v 1.28 2010/09/01 16:29:04 chrjones Exp $
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   // Not yet implemented
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 }