Go to the documentation of this file.00001
00002
00013 #include <iostream>
00014 #include <string>
00015
00016
00017 #include "FWCore/Framework/interface/Event.h"
00018 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00020 #include "IOMC/Input/interface/HepMCFileReader.h"
00021 #include "IOMC/Input/interface/MCFileSource.h"
00022 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
00023
00024
00025 using namespace edm;
00026 using namespace std;
00027
00028
00029
00030 MCFileSource::MCFileSource(const ParameterSet & pset, InputSourceDescription const& desc) :
00031 ExternalInputSource(pset, desc),
00032 reader_(HepMCFileReader::instance()), evt_(0)
00033 {
00034 edm::LogInfo("MCFileSource") << "Reading HepMC file:" << fileNames()[0];
00035 string fileName = fileNames()[0];
00036
00037 if (fileName.find("file:") == 0){
00038 fileName.erase(0,5);
00039 }
00040
00041 reader_->initialize(fileName);
00042 produces<HepMCProduct>();
00043 }
00044
00045
00046
00047 MCFileSource::~MCFileSource(){
00048 }
00049
00050
00051
00052 bool MCFileSource::produce(Event &e) {
00053
00054
00055 auto_ptr<HepMCProduct> bare_product(new HepMCProduct());
00056
00057 edm::LogInfo("MCFileSource") << "Start Reading";
00058 evt_ = reader_->fillCurrentEventData();
00059 if (evt_ == 0) return false;
00060
00061 bare_product->addHepMCData(evt_);
00062 e.put(bare_product);
00063
00064 return true;
00065 }