11 #include <beast/analysis/modules/ReprocessorModule.h>
13 #include <mdst/dataobjects/MCParticle.h>
14 #include <framework/logging/Logger.h>
17 #include <boost/foreach.hpp>
37 setDescription(
"Reprocessor module");
39 addParam(
"input_TPC_PDG", m_input_TPC_PDG,
"Set the PDG particle to re-launch");
40 addParam(
"input_TPC_Ntimes", m_input_TPC_Ntimes,
"Re-launch the PDG particle N times");
41 addParam(
"input_HE3_PDG", m_input_HE3_PDG,
"Set the PDG particle to re-launch");
42 addParam(
"input_HE3_Ntimes", m_input_HE3_Ntimes,
"Re-launch the PDG particle N times");
45 ReprocessorModule::~ReprocessorModule()
49 void ReprocessorModule::initialize()
51 B2INFO(
"Reprocessor: Initializing");
53 m_mcParticle.registerInDataStore();
55 m_evtMetaData.registerInDataStore();
57 MetaHits.isRequired();
58 mc_he3_parts.isOptional();
59 mc_tpc_parts.isOptional();
62 void ReprocessorModule::beginRun()
66 void ReprocessorModule::event()
69 if (mc_he3_parts.getEntries() == 0 && mc_tpc_parts.getEntries() == 0 && m_input_TPC_Ntimes != 0 && m_input_HE3_Ntimes != 0) {
72 if (mc_he3_parts.getEntries() == 0 && m_input_HE3_Ntimes != 0) {
75 if (mc_tpc_parts.getEntries() == 0 && m_input_TPC_Ntimes != 0) {
81 for (
const auto& MetaHit : MetaHits) {
82 rate = MetaHit.getrate();
85 if (m_input_HE3_Ntimes != 0 && m_input_TPC_Ntimes == 0) rate /= (double)m_input_HE3_Ntimes;
86 if (m_input_TPC_Ntimes != 0 && m_input_HE3_Ntimes == 0) rate /= (double)m_input_TPC_Ntimes;
94 if (!evtMetaData.
isValid()) evtMetaData.create();
96 if (m_input_TPC_Ntimes != 0) {
97 for (
const auto& mcpart : mc_tpc_parts) {
98 const int PDG = mcpart.getPDG();
99 const double energy = mcpart.getEnergy();
100 TVector3 Momentum = mcpart.getMomentum();
101 TVector3 ProductionVertex = mcpart.getProductionVertex();
102 if (m_input_TPC_PDG == PDG) {
103 for (
int i = 0; i < m_input_TPC_Ntimes; i ++) {
106 particle->setStatus(MCParticle::c_PrimaryParticle);
107 particle->setPDG(PDG);
108 particle->setMassFromPDG();
109 particle->setMomentum(Momentum);
110 particle->setProductionVertex(ProductionVertex);
111 particle->setProductionTime(0.0);
112 particle->setEnergy(energy);
113 particle->setValidVertex(
true);
119 if (m_input_HE3_Ntimes != 0) {
120 for (
const auto& mcpart : mc_he3_parts) {
121 const int PDG = mcpart.getPDG();
122 const double energy = mcpart.getEnergy();
123 TVector3 Momentum = mcpart.getMomentum();
124 TVector3 ProductionVertex = mcpart.getProductionVertex();
125 if (m_input_HE3_PDG == PDG) {
126 for (
int i = 0; i < m_input_HE3_Ntimes; i ++) {
129 particle->setStatus(MCParticle::c_PrimaryParticle);
130 particle->setPDG(PDG);
131 particle->setMassFromPDG();
132 particle->setMomentum(Momentum);
133 particle->setProductionVertex(ProductionVertex);
134 particle->setProductionTime(0.0);
135 particle->setEnergy(energy);
136 particle->setValidVertex(
true);
142 evtMetaData->setGeneratedWeight(rate);
147 void ReprocessorModule::endRun()
151 void ReprocessorModule::terminate()