Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//==========================================================================
// AIDA Detector description implementation
//--------------------------------------------------------------------------
// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
// All rights reserved.
//
// For the licensing terms see $DD4hepINSTALL/LICENSE.
// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
//
//
//==========================================================================
/** \addtogroup Geant4EventReader
*
@{
\package HepMC3FileReader
* \brief Plugin to read HepMC3 Ascii files
*
And here we can put a longer description, parameters, examples...
*
@}
*/
#include "HepMC3EventReader.h"
#include <HepMC3/ReaderFactory.h>
/// Namespace for the AIDA detector description toolkit
namespace dd4hep {
/// Namespace for the Geant4 based simulation part of the AIDA detector description toolkit
namespace sim {
/// Base class to read hepmc3 event files
/**
* \version 1.0
* \ingroup DD4HEP_SIMULATION
*/
class HEPMC3FileReader : public HEPMC3EventReader {
protected:
/// Reference to reader object
std::shared_ptr<HepMC3::Reader> m_reader;
public:
/// Initializing constructor
HEPMC3FileReader(const std::string& nam);
/// Default destructor
virtual ~HEPMC3FileReader() = default;
/// Read an event and fill a vector of MCParticles.
virtual EventReaderStatus readGenEvent(int event_number, HepMC3::GenEvent& genEvent);
/// skip to event with event_number
virtual EventReaderStatus moveToEvent(int event_number);
//virtual EventReaderStatus skipEvent() { return EVENT_READER_OK; }
virtual EventReaderStatus setParameters(std::map< std::string, std::string >& parameters);
};
}
}
#include "DD4hep/Printout.h"
#include "DDG4/Factories.h"
using dd4hep::sim::HEPMC3FileReader;
using dd4hep::sim::Geant4EventReader;
// Factory entry
DECLARE_GEANT4_EVENT_READER_NS(dd4hep::sim,HEPMC3FileReader)
/// Initializing constructor
HEPMC3FileReader::HEPMC3FileReader(const std::string& nam)
: HEPMC3EventReader(nam)
{
m_reader = HepMC3::deduce_reader(nam);
printout(INFO,"HEPMC3FileReader","Created file reader. Try to open input %s", nam.c_str());
m_directAccess = false;
}
/// moveToSpecifiedEvent, a.k.a. skipNEvents
Geant4EventReader::EventReaderStatus
HEPMC3FileReader::moveToEvent(int event_number) {
printout(INFO,"HEPMC3FileReader::moveToEvent","Skipping the first %d events ", event_number);
while( m_currEvent != event_number) {
printout(INFO,"HEPMC3FileReader::moveToEvent","Event number before skipping: %d", m_currEvent );
HepMC3::GenEvent genEvent;
m_reader->skip(event_number);
m_currEvent = event_number;
printout(INFO,"HEPMC3FileReader::moveToEvent","Event number after skipping: %d", m_currEvent );
}
return EVENT_READER_OK;
}
/// Read an event and fill a vector of MCParticles.
Geant4EventReader::EventReaderStatus
HEPMC3FileReader::readGenEvent(int /*event_number*/, HepMC3::GenEvent& genEvent) {
m_reader->read_event(genEvent);
++m_currEvent;
if (genEvent.particles().size()) {
printout(INFO,"HEPMC3FileReader","Read event from file");
return EVENT_READER_OK;
}
return EVENT_READER_EOF;
}
/// Set the parameters for the class
Geant4EventReader::EventReaderStatus
HEPMC3FileReader::setParameters( std::map< std::string, std::string > & parameters ) {
_getParameterValue(parameters, "Flow1", m_flow1, std::string("flow1"));
_getParameterValue(parameters, "Flow2", m_flow2, std::string("flow2"));
return EVENT_READER_OK;
}