![]() |
![]() |
00001 #include "IOPool/Streamer/interface/MsgTools.h" 00002 #include "IOPool/Streamer/src/StreamerFileReader.h" 00003 #include "FWCore/Utilities/interface/Exception.h" 00004 #include "FWCore/Utilities/interface/EDMException.h" 00005 #include "FWCore/Catalog/interface/InputFileCatalog.h" 00006 00007 using namespace edm; 00008 00009 namespace edm 00010 { 00011 StreamerFileReader::StreamerFileReader(edm::ParameterSet const& pset): 00012 streamerNames_(pset.getUntrackedParameter<std::vector<std::string> >("fileNames")) 00013 { 00014 PoolCatalog poolcat; 00015 InputFileCatalog catalog(pset, poolcat); 00016 streamerNames_ = catalog.fileNames(); 00017 00018 if (streamerNames_.size() > 1) 00019 stream_reader_ = std::auto_ptr<StreamerInputFile> 00020 (new StreamerInputFile(streamerNames_)); 00021 else if (streamerNames_.size() == 1) 00022 stream_reader_ = std::auto_ptr<StreamerInputFile> 00023 (new StreamerInputFile(streamerNames_.at(0))); 00024 else { 00025 throw edm::Exception(errors::FileReadError, "StreamerFileReader::StreamerFileReader") 00026 << " Not provided fileNames \n"; 00027 } 00028 } 00029 00030 StreamerFileReader::~StreamerFileReader() 00031 { 00032 } 00033 00034 const bool StreamerFileReader::newHeader() { 00035 return stream_reader_->newHeader(); 00036 } 00037 00038 const InitMsgView* StreamerFileReader::getHeader() 00039 { 00040 00041 const InitMsgView* header = stream_reader_->startMessage(); 00042 00043 if(header->code() != Header::INIT) //INIT Msg 00044 throw edm::Exception(errors::FileReadError, "StreamerFileReader::readHeader") 00045 << "received wrong message type: expected INIT, got " 00046 << header->code() << "\n"; 00047 00048 return header; 00049 } 00050 00051 const EventMsgView* StreamerFileReader::getNextEvent() 00052 { 00053 if (!stream_reader_->next() ) 00054 { 00055 return 0; 00056 } 00057 return stream_reader_->currentRecord(); 00058 } 00059 00060 } //end-of-namespace 00061 00062