Something went wrong on our end
-
Julian Pychy authored3e8a87cd
HepMCEventList.cc 3.43 KiB
//************************************************************************//
// //
// Copyright 2013 Bertram Kopf (bertram@ep1.rub.de) //
// Julian Pychy (julian@ep1.rub.de) //
// - Ruhr-Universität Bochum //
// //
// This file is part of Pawian. //
// //
// Pawian is free software: you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation, either version 3 of the License, or //
// (at your option) any later version. //
// //
// Pawian is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with Pawian. If not, see <http://www.gnu.org/licenses/>. //
// //
//************************************************************************//
#include <iostream>
#include "Event/HepMCEventList.hh"
#include "ErrLogger/ErrLogger.hh"
#include "HepMC/GenEvent.h"
#include "HepMC/IO_GenEvent.h"
HepMCEventList::HepMCEventList()
{
}
HepMCEventList::HepMCEventList(const std::vector<std::string>& files)
{
fillFromFiles(files);
}
HepMCEventList::HepMCEventList(const std::string& file){
fillFromFile(file);
}
HepMCEventList::~HepMCEventList()
{
for (currentEvent = eventList.begin();
currentEvent != eventList.end();
++currentEvent)
delete *currentEvent;
}
void HepMCEventList::add(HepMC::GenEvent* newEvent)
{
if (0 != newEvent)
eventList.push_back(newEvent);
else {
Alert << "can not add 0 pointer to event list" << endmsg;
exit(1);
}
return;
}
void HepMCEventList::removeEvents(unsigned int nBegin, unsigned int nEnd)
{
if ( nBegin < nEnd || eventList.size()>nEnd) {
Alert << "can not remove event no " << nBegin << " - " << nEnd
<< " from list" << endmsg;
exit(1);
}
eventList.erase(eventList.begin()+nBegin, eventList.begin()+nEnd);
}
bool HepMCEventList::fillFromFile(const std::string& file){
bool result=true;
std::ifstream* currentStream= new std::ifstream(file.c_str(), std::ios::in);
if (!currentStream) {
Alert << "can not open " << file << endmsg;
result=false;
exit(1);
}
HepMC::IO_GenEvent* hepIOin=new HepMC::IO_GenEvent(*currentStream);
hepIOin->use_input_units( HepMC::Units::GEV, HepMC::Units::MM );
HepMC::GenEvent* evt = hepIOin->read_next_event();
while ( evt ){
// if( evt->is_valid() ) {
// evt->print(std::cout);
// }
add(evt);
(*hepIOin) >> evt;
}
delete hepIOin;
delete currentStream;
return result;
}
bool HepMCEventList::fillFromFiles(const std::vector<std::string>& files){
bool result=true;
std::vector<std::string>::const_iterator iter = files.begin();
for (; iter != files.end(); ++iter){
if (fillFromFile(*iter)==false) result=false;
}
return result;
}
HepMC::GenEvent* HepMCEventList::nextEvent()
{
if (currentEvent != eventList.end()) {
HepMC::GenEvent* result = *currentEvent;
++currentEvent;
return result;
} else
return 0;
}
void HepMCEventList::rewind()
{
currentEvent = eventList.begin();
return;
}
int HepMCEventList::size()
{
return eventList.size();
}