Belle II Software development
MCV0MatcherModule.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#include <tracking/modules/mcMatcher/MCV0MatcherModule.h>
9
10#include <framework/gearbox/Const.h>
11#include <framework/gearbox/Unit.h>
12#include <framework/logging/Logger.h>
13#include <mdst/dataobjects/TrackFitResult.h>
14
15using namespace Belle2;
16
17REG_MODULE(MCV0Matcher);
18
20{
21 setDescription("A module matching the V0s found by the V0Finder with MCParticles");
23
24 //input
25 addParam("TrackColName", m_TrackColName,
26 "Belle2::Track collection name (input). Note that the V0s use "
27 "pointers indices into these arrays, so all hell may break loose "
28 "if you change this.", std::string(""));
29 addParam("TFRColName", m_TFRColName,
30 "Belle2::TrackFitResult collection name (input). Note that the V0s "
31 "use pointers indices into these arrays, so all hell may break loose "
32 "if you change this.", std::string(""));
33 addParam("V0ColName", m_V0ColName, "V0 collection name (input)", std::string(""));
34 addParam("MCParticleColName", m_MCParticleColName, "MCParticle collection name (input)", std::string(""));
35}
36
37
39{
40}
41
42
44{
45 m_V0s.isRequired(m_V0ColName);
47
48 m_V0s.registerRelationTo(m_MCParticles);
49 B2WARNING("This module is supposed to be used only for the debugging\n \
50 of the V0Finder module, not as MC matching during analysis.");
51}
52
53
55{
56}
57
59{
60 B2DEBUG(20, (m_V0s.getEntries() != 0 ? "V0s has entries." : " No V0s."));
61
62 for (const auto& v0 : m_V0s) {
63 // Try to match the tracks of each V0 with the MC V0.
64 const Const::ParticleType v0hypothesis = v0.getV0Hypothesis();
65 const std::pair<Track*, Track*> trackPtrs = v0.getTracks();
66
67 const MCParticle* mcV0PartPlus = trackPtrs.first->getRelatedTo<MCParticle>(m_MCParticleColName);
68 const MCParticle* mcV0PartMinus = trackPtrs.second->getRelatedTo<MCParticle>(m_MCParticleColName);
69
70 if (mcV0PartPlus == nullptr or mcV0PartMinus == nullptr) {
71 B2DEBUG(20, "At least one track of the V0 does not have a MC related particle. It will be skipped for matching.");
72 continue;
73 }
74
75 const MCParticle* mcV0PartPlusMother = mcV0PartPlus->getMother();
76 const MCParticle* mcV0PartMinusMother = mcV0PartMinus->getMother();
77
78 if (!mcV0PartPlus->getMother() or !mcV0PartMinusMother) {
79 B2DEBUG(20, "At least one track of the V0 does not have a mother MCParticle, skipping.");
80 continue;
81 }
82
83 if (mcV0PartPlusMother != mcV0PartMinusMother) {
84 B2DEBUG(20, "The V0 is most likely built up from combinatoric background, thus no MC relation can be set.");
85 continue;
86 }
87
88 if (Const::ParticleType(mcV0PartPlusMother->getPDG()) == v0hypothesis) {
89 B2DEBUG(20, "V0 successfully matched.");
90 v0.addRelationTo(mcV0PartPlusMother);
91 } else {
92 B2DEBUG(20, "V0 did not match anything.");
93 }
94 }
95
96 B2DEBUG(20, "MC matching finished.");
97}
98
100{
101}
102
104{
105}
The ParticleType class for identifying different particle types.
Definition: Const.h:408
A Class to store the Monte Carlo particle information.
Definition: MCParticle.h:32
int getPDG() const
Return PDG code of particle.
Definition: MCParticle.h:112
std::string m_TFRColName
Belle2::TrackFitResult collection name (input).
void initialize() override
Use this to initialize resources or memory your module needs.
void event() override
Called once for each event.
void endRun() override
Called once when a run ends.
void terminate() override
Clean up anything you created in initialize().
StoreArray< V0 > m_V0s
V0s StoreArray.
std::string m_TrackColName
Belle2::Track collection name (input).
void beginRun() override
Called once before a new run begins.
MCV0MatcherModule()
Constructor, for setting module description and parameters.
std::string m_MCParticleColName
MCParticle collection name (input).
StoreArray< MCParticle > m_MCParticles
MCParticles StoreArray.
std::string m_V0ColName
V0 collection name (input).
~MCV0MatcherModule()
Destructor (empty).
Base class for Modules.
Definition: Module.h:72
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:208
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:80
TO * getRelatedTo(const std::string &name="", const std::string &namedRelation="") const
Get the object to which this object has a relation.
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition: Module.h:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
MCParticle * getMother() const
Returns a pointer to the mother particle.
Definition: MCParticle.h:600
Abstract base class for different kinds of events.