CMS 3D CMS Logo

RawInputSource.cc

Go to the documentation of this file.
00001 /*----------------------------------------------------------------------
00002 $Id: RawInputSource.cc,v 1.24 2008/10/16 23:12:34 wmtan 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/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   // Not yet implemented
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 }

Generated on Tue Jun 9 17:36:40 2009 for CMSSW by  doxygen 1.5.4