11 #include <analysis/utility/PCmsLabTransform.h>
13 #include <analysis/modules/EventKinematics/EventKinematicsModule.h>
15 #include <analysis/dataobjects/ParticleList.h>
16 #include <analysis/dataobjects/Particle.h>
17 #include <analysis/dataobjects/EventKinematics.h>
19 #include <framework/datastore/StoreObjPtr.h>
21 #include <framework/logging/Logger.h>
22 #include <framework/gearbox/Const.h>
41 setDescription(
"Module to compute global event kinematic attributes like missing momentum and energy.");
44 addParam(
"particleLists", m_particleLists,
"List of the ParticleLists", vector<string>());
48 EventKinematicsModule::~EventKinematicsModule() =
default;
50 void EventKinematicsModule::initialize()
53 evtKinematics.registerInDataStore();
57 void EventKinematicsModule::beginRun()
61 void EventKinematicsModule::event()
64 if (!eventKinematics) eventKinematics.create();
65 EventKinematicsModule::getParticleMomentumLists(m_particleLists);
67 TVector3 missingMomentum = EventKinematicsModule::getMissingMomentum();
68 eventKinematics->addMissingMomentum(missingMomentum);
70 TVector3 missingMomentumCMS = EventKinematicsModule::getMissingMomentumCMS();
71 eventKinematics->addMissingMomentumCMS(missingMomentumCMS);
73 float missingEnergyCMS = EventKinematicsModule::getMissingEnergyCMS();
74 eventKinematics->addMissingEnergyCMS(missingEnergyCMS);
76 float missingMass2 = missingEnergyCMS * missingEnergyCMS - missingMomentumCMS.Mag() * missingMomentumCMS.Mag();
77 eventKinematics->addMissingMass2(missingMass2);
79 float visibleEnergyCMS = EventKinematicsModule::getVisibleEnergyCMS();
80 eventKinematics->addVisibleEnergyCMS(visibleEnergyCMS);
82 float totalPhotonsEnergy = EventKinematicsModule::getTotalPhotonsEnergy();
83 eventKinematics->addTotalPhotonsEnergy(totalPhotonsEnergy);
86 void EventKinematicsModule::endRun()
90 void EventKinematicsModule::terminate()
94 void EventKinematicsModule::getParticleMomentumLists(vector<string> particleLists)
98 m_particleMomentumList.clear();
99 m_photonsMomentumList.clear();
100 m_particleMomentumListCMS.clear();
102 int nParticleLists = particleLists.size();
103 B2DEBUG(10,
"Number of ParticleLists to calculate Event Kinematics variables: " << nParticleLists);
105 for (
int i_pl = 0; i_pl != nParticleLists; ++i_pl) {
106 string particleListName = particleLists[i_pl];
107 B2DEBUG(10,
"ParticleList: " << particleListName);
109 int m_part = plist->getListSize();
110 for (
int i = 0; i < m_part; i++) {
111 const Particle* part = plist->getParticle(i);
113 TLorentzVector p_lab = part->get4Vector();
114 m_particleMomentumList.push_back(p_lab);
116 if ((part->getParticleSource() == Particle::EParticleSourceObject::c_ECLCluster)
117 and (part->getPDGCode() == Const::photon.getPDGCode()))
118 m_photonsMomentumList.push_back(p_lab);
121 m_particleMomentumListCMS.push_back(p_cms);
128 TVector3 EventKinematicsModule::getMissingMomentum()
132 TVector3 p = beam.Vect();
133 int nParticles = m_particleMomentumList.size();
134 for (
int i = 0; i < nParticles; ++i) {
135 p -= m_particleMomentumList.at(i).Vect();
140 TVector3 EventKinematicsModule::getMissingMomentumCMS()
142 TVector3 p(0., 0., 0.);
143 int nParticles = m_particleMomentumListCMS.size();
144 for (
int i = 0; i < nParticles; ++i) {
145 p -= m_particleMomentumListCMS.at(i).Vect();
150 float EventKinematicsModule::getMissingEnergyCMS()
154 int nParticles = m_particleMomentumListCMS.size();
155 for (
int i = 0; i < nParticles; ++i) {
156 ECMS -= m_particleMomentumListCMS.at(i).E();
161 float EventKinematicsModule::getVisibleEnergyCMS()
163 float visibleE = 0.0;
164 int nParticles = m_particleMomentumListCMS.size();
165 for (
int i = 0; i < nParticles; ++i) {
166 visibleE += m_particleMomentumListCMS.at(i).E();
171 float EventKinematicsModule::getTotalPhotonsEnergy()
173 float photonsEnergy = 0.0;
174 int nParticles = m_photonsMomentumList.size();
175 for (
int i = 0; i < nParticles; ++i) {
176 photonsEnergy += m_photonsMomentumList.at(i).E();
178 return photonsEnergy;