8#include <reconstruction/modules/KlId/KLMExpert/KLMExpertModule.h>
9#include <mdst/dataobjects/KlId.h>
10#include <framework/datastore/StoreArray.h>
11#include <framework/logging/Logger.h>
13#include <mdst/dataobjects/ECLCluster.h>
14#include <tracking/dataobjects/TrackClusterSeparation.h>
16#include <mva/interface/Interface.h>
17#include <boost/algorithm/string/predicate.hpp>
20#include "reconstruction/modules/KlId/KLMExpert/KlId.h"
32 "path to the classifier you want to use. It is recommended to use the default classifiers and not to mess around with this.",
69 std::stringstream ss((*m_weightfile_representation)->m_data);
87 m_expert = supported_interfaces[general_options.m_method]->getExpert();
90 std::vector<float> dummy;
103 KlId* klid =
nullptr;
108 const ROOT::Math::XYZVector& clusterPos = cluster.getClusterPosition();
121 ECLCluster* closestECLCluster = get<0>(closestECLAndDist);
125 if (!(closestECLCluster ==
nullptr)) {
126 m_KLMECLE = closestECLCluster -> getEnergy(eclHypothesis);
134 m_KLMECLZ40 = closestECLCluster -> getAbsZernike40();
135 m_KLMECLZ51 = closestECLCluster -> getAbsZernike51();
161 float best_dist = 1e10;
162 for (
auto trackSeperation : trackSeperations) {
164 if (dist < best_dist) {
201 B2DEBUG(175,
"KLM Expert classification: " << IDMVAOut);
203 cluster.addRelationTo(klid, IDMVAOut);
Class for accessing objects in the database.
EHypothesisBit
The hypothesis bits for this ECLCluster (Connected region (CR) is split using this hypothesis.
@ c_neutralHadron
CR is reconstructed as a neutral hadron (N2)
float m_KLMECLE
energy measured in associated ECL cluster
float m_KLMECLdeltaL
distance between track entry pofloat and cluster center, might be removed
StoreArray< KlId > m_klids
storearray
float m_KLMInitialTrackSepAngle
angular distance from track to cluster at track starting point
float m_KLMECLZMVA
output of a BDT fitted on various Z-moments for the closest ECL cluster
float m_KLMTrackRotationAngle
angle between track at poca and trackbeginning
KLMExpertModule()
Constructor.
float m_KLMECLTiming
timing of associated ECL cluster
std::unique_ptr< MVA::SingleDataset > m_dataset
Pointer to the current dataset.
StoreArray< KLMCluster > m_klmClusters
storearray
virtual void initialize() override
init
float m_KLMECLTerror
uncertanty on time in associated ECL cluster
virtual void event() override
process event
float m_KLMtime
timing of KLM Cluster
float m_KLMECLDist
distance associated ECL <-> KLM cluster, extrapolated by genfit
float m_KLMnLayer
number of layers hit in KLM cluster
float m_KLMhitDepth
hit depth in KLM, distance to IP
float m_KLMECLminTrackDist
track distance between associated ECL cluster and track extrapolated into ECL
float m_KLMenergy
Energy deposit in KLM (0.2 GeV * nHitCells)
float m_KLMTrackSepAngle
angular distance from track separation object.
std::unique_ptr< MVA::Expert > m_expert
Pointer to the current MVA Expert.
float m_KLMECLZ40
zernike moment 4,0 of closest ECL
std::unique_ptr< DBObjPtr< DatabaseRepresentationOfWeightfile > > m_weightfile_representation
Database pointer to the Database representation of the weightfile.
virtual ~KLMExpertModule()
Destructor.
float m_KLMnInnermostLayer
number of innermost layers hit
float m_KLMECLEerror
uncertanty on E in associated ECL cluster
float m_KLMECLE9oE25
E in surrounding 9 crystals divided by surrounding 25 crydtalls.
std::vector< float > m_feature_variables
vars to be classified
float m_KLMECLZ51
zernike moment 5,1 of closest ECL
float m_KLMavInterClusterDist
average distance between all KLM clusters
virtual void beginRun() override
beginn run
float m_KLMTrackSepDist
distance from track separation object
float m_KLMglobalZ
global Z position in KLM
float m_KLMnCluster
varibales to write out.
float m_KLMnextCluster
distance to next KLM cluster
float m_KLMTrackClusterSepAngle
angle between trach momentum and cluster (measured from ip)
void init_mva(MVA::Weightfile &weightfile)
Initialize mva expert, dataset and features Called everytime the weightfile in the database changes i...
std::string m_identifier
mva identifier.
Klong identifcation (KlId) datastore object to store results from KlId calculations.
static void initSupportedInterfaces()
Static function which initliazes all supported interfaces, has to be called once before getSupportedI...
static std::map< std::string, AbstractInterface * > getSupportedInterfaces()
Returns interfaces supported by the MVA Interface.
General options which are shared by all MVA trainings.
Wraps the data of a single event into a Dataset.
The Weightfile class serializes all information about a training into an xml tree.
static Weightfile loadFromStream(std::istream &stream)
Static function which deserializes a Weightfile from a stream.
void getOptions(Options &options) const
Fills an Option object from the xml tree.
static Weightfile loadFromFile(const std::string &filename)
Static function which loads a Weightfile from a file.
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Store one Track-KLMCluster separation as a ROOT object.
double getDistance() const
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Helper functions for all klid modules to improve readability of the code.
std::tuple< const Belle2::KLMCluster *, double, double > findClosestKLMCluster(const ROOT::Math::XYZVector &klmClusterPosition)
find nearest KLMCluster, tis distance and the av intercluster distance
std::pair< Belle2::ECLCluster *, double > findClosestECLCluster(const ROOT::Math::XYZVector &klmClusterPosition, const Belle2::ECLCluster::EHypothesisBit eclhypothesis=Belle2::ECLCluster::EHypothesisBit::c_neutralHadron)
Find the closest ECLCluster with a neutral hadron hypothesis, and return it with its distance.
Abstract base class for different kinds of events.