11 #include <generators/modules/HepevtInputModule.h>
13 #include <framework/logging/Logger.h>
14 #include <framework/datastore/DataStore.h>
15 #include <framework/datastore/StoreArray.h>
16 #include <framework/dataobjects/EventMetaData.h>
17 #include <framework/datastore/StoreObjPtr.h>
34 setDescription(
"HepEvt file input. This module loads an event record from HEPEVT format and store the content into the MCParticle collection. HEPEVT format is a standard event record format to contain an event record in a Monte Carlo-independent format.");
38 addParam(
"inputFileList", m_inputFileNames,
"List of names of Hepevt files");
39 addParam(
"makeMaster", m_makeMaster,
"Boolean to indicate whether the event numbers from input file should be used.",
false);
40 addParam(
"runNum", m_runNum,
"run number (should be set if makeMaster=true)", 0);
41 addParam(
"expNum", m_expNum,
"ExpNum (should be set if makeMaster=true)", 0);
42 addParam(
"skipEvents", m_skipEventNumber,
"Skip this number of events before starting.", 0);
43 addParam(
"useWeights", m_useWeights,
"Set to 'true' to if generator weights should be propagated.",
false);
44 addParam(
"nVirtualParticles", m_nVirtual,
"Number of particles at the beginning of the events that should be made virtual.", 0);
45 addParam(
"boost2Lab", m_boost2Lab,
"Boolean to indicate whether the particles should be boosted from CM frame to lab frame",
false);
46 addParam(
"wrongSignPz", m_wrongSignPz,
"Boolean to signal that directions of HER and LER were switched",
false);
50 void HepevtInputModule::initialize()
53 m_initial.initialize();
56 if (m_inputFileNames.size() == 0) {
58 B2FATAL(
"invalid list of input files. No entries found.");
61 m_inputFileName = m_inputFileNames[m_iFile];
64 B2INFO(
"Opening first file: " << m_inputFileName);
65 m_hepevt.open(m_inputFileName);
66 m_hepevt.skipEvents(m_skipEventNumber);
67 }
catch (runtime_error& e) {
70 m_hepevt.m_nVirtual = m_nVirtual;
71 m_hepevt.m_wrongSignPz = m_wrongSignPz;
77 m_hepevt.m_labboost = boost;
82 B2INFO(
"HEPEVT reader acts as master module for data processing.");
83 if (m_runNum == 0 && m_expNum == 0)
84 B2WARNING(
"HEPEVT reader acts as master module, but no run and experiment number set. Using defaults.");
88 mcparticle.registerInDataStore();
94 mcparticle.registerInDataStore();
99 void HepevtInputModule::event()
103 if (!eventMetaDataPtr) eventMetaDataPtr.create();
104 B2DEBUG(100,
"HEPEVT processes event nbr " << eventMetaDataPtr->getEvent());
109 int id = m_hepevt.getEvent(mpg, weight);
119 eventMetaDataPtr->setExperiment(m_expNum);
120 eventMetaDataPtr->setRun(m_runNum);
121 eventMetaDataPtr->setEvent(
id);
124 eventMetaDataPtr->setGeneratedWeight(weight);
125 mpg.generateList(
"", MCParticleGraph::c_setDecayInfo | MCParticleGraph::c_checkCyclic);
126 }
catch (HepevtReader::HepEvtEmptyEventError&) {
127 B2DEBUG(100,
"Reached end of HepEvt file.");
128 m_hepevt.closeCurrentInputFile();
130 if (m_iFile < m_inputFileNames.size()) {
132 m_inputFileName = m_inputFileNames[m_iFile];
133 B2INFO(
"Opening next file: " << m_inputFileName);
134 m_hepevt.open(m_inputFileName);
135 }
catch (runtime_error& e) {
139 eventMetaDataPtr->setEndOfData();
140 B2DEBUG(100,
"Reached end of all HepEvt files.");
142 }
catch (runtime_error& e) {