Newer
Older
Markus Frank
committed
//==========================================================================
Markus Frank
committed
//--------------------------------------------------------------------------
// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
Markus Frank
committed
// All rights reserved.
Markus Frank
committed
// For the licensing terms see $DD4hepINSTALL/LICENSE.
// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
//
// Author : M.Frank
//
//==========================================================================
/** \addtogroup Geant4EventReader
*
@{
\package LCIOFileReader
* \brief Plugin to read lcio files
*
And here we can put a longer description, parameters, examples...
*
@}
*/
#ifndef DD4HEP_DDG4_LCIOFILEREADER_H
#define DD4HEP_DDG4_LCIOFILEREADER_H
#include "LCIOEventReader.h"
#include "lcio.h"
using namespace lcio ;
// Forward declarations
namespace IO { class LCReader; }
/// Namespace for the AIDA detector description toolkit
/// Namespace for the Geant4 based simulation part of the AIDA detector description toolkit
/// Base class to read lcio event files
/**
* \author P.Kostka (main author)
* \author M.Frank (code reshuffeling into new DDG4 scheme)
* \version 1.0
* \ingroup DD4HEP_SIMULATION
class LCIOFileReader : public LCIOEventReader {
protected:
/// Reference to reader object
IO::LCReader* m_reader;
std::string m_collectionName;
LCIOFileReader(const std::string& nam);
virtual ~LCIOFileReader();
/// Read an event and fill a vector of MCParticles.
Markus Frank
committed
virtual EventReaderStatus readParticleCollection(int event_number, EVENT::LCCollection** particles);
virtual EventReaderStatus moveToEvent(int event_number);
virtual EventReaderStatus skipEvent() { return EVENT_READER_OK; }
virtual EventReaderStatus setParameters(std::map< std::string, std::string >& parameters);
#endif // DD4HEP_DDG4_LCIOFILEREADER_H
#include "DDG4/Factories.h"
#include "UTIL/ILDConf.h"
DECLARE_GEANT4_EVENT_READER_NS(dd4hep::sim,LCIOFileReader)
dd4hep::sim::LCIOFileReader::LCIOFileReader(const std::string& nam)
, m_collectionName(LCIO::MCPARTICLE)
m_reader = ::lcio::LCFactory::getInstance()->createLCReader(LCReader::directAccess);
printout(INFO,"LCIOFileReader","Created file reader. Try to open input %s",nam.c_str());
m_directAccess = false;
dd4hep::sim::LCIOFileReader::~LCIOFileReader() {
dd4hep::detail::deletePtr(m_reader);
/// moveToSpecifiedEvent, a.k.a. skipNEvents
Geant4EventReader::EventReaderStatus
dd4hep::sim::LCIOFileReader::moveToEvent(int event_number) {
// ::lcio::LCEvent* evt = m_reader->readEvent(/*runNumber*/ 0, event_number);
// fg: direct access does not work if run number is different from 0 and/or event numbers are not stored consecutively
if( m_currEvent == 0 && event_number != 0 ) {
m_reader->skipNEvents( event_number ) ;
Andre Sailer
committed
printout(INFO,"LCIOFileReader::moveToEvent","Skipping the first %d events ", event_number );
printout(INFO,"LCIOFileReader::moveToEvent","Event number before skipping: %d", m_currEvent );
Andre Sailer
committed
printout(INFO,"LCIOFileReader::moveToEvent","Event number after skipping: %d", m_currEvent );
return EVENT_READER_OK;
}
/// Read an event and fill a vector of MCParticles.
Geant4EventReader::EventReaderStatus
dd4hep::sim::LCIOFileReader::readParticleCollection(int /*event_number*/, EVENT::LCCollection** particles) {
::lcio::LCEvent* evt = m_reader->readNextEvent(); // simply read the events sequentially
*particles = evt->getCollection(m_collectionName);
if ( *particles ) {
printout(INFO,"LCIOFileReader","read collection %s from event %d in run %d ",
m_collectionName, evt->getEventNumber(), evt->getRunNumber());
return EVENT_READER_OK;
}
return EVENT_READER_ERROR;
/// Set the parameters for the class, in particular the name of the MCParticle
/// list
Geant4EventReader::EventReaderStatus
dd4hep::sim::LCIOFileReader::setParameters( std::map< std::string, std::string > & parameters ) {
_getParameterValue( parameters, "MCParticleCollectionName", m_collectionName, std::string(LCIO::MCPARTICLE));
return EVENT_READER_OK;
}