Belle II Software  release-05-01-25
VXDMomentumEstimationMeasurementCreator.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Nils Braun *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #pragma once
11 
12 #include <tracking/trackFitting/measurementCreator/creators/BaseMeasurementCreatorFromCoordinateMeasurement.h>
13 #include <tracking/vxdMomentumEstimation/VXDMomentumEstimation.h>
14 #include <tracking/trackFitting/measurementCreator/measurements/PlanarVXDMomentumMeasurement.h>
15 #include <genfit/PlanarMeasurement.h>
16 
17 namespace Belle2 {
28  template <class HitType, Const::EDetector detector>
29  class VXDMomentumEstimationMeasurementCreator : public BaseMeasurementCreatorFromCoordinateMeasurement<HitType, detector> {
30  public:
33  BaseMeasurementCreatorFromCoordinateMeasurement<HitType, detector>(measurementFactory) {}
34 
37 
39  void setParameter(const std::string& parameterName, const std::string& parameterValue) override
40  {
41  if (parameterName == "minimumMomentum") {
42  m_minimumMomentum = std::stod(parameterValue);
43  } else if (parameterName == "aE") {
44  m_fitParameters.aE = std::stod(parameterValue);
45  } else if (parameterName == "bE") {
46  m_fitParameters.bE = std::stod(parameterValue);
47  } else if (parameterName == "cE") {
48  m_fitParameters.cE = std::stod(parameterValue);
49  } else if (parameterName == "dE") {
50  m_fitParameters.dE = std::stod(parameterValue);
51  } else if (parameterName == "aM") {
52  m_correctionFitParameters.aM = std::stod(parameterValue);
53  } else if (parameterName == "bM") {
54  m_correctionFitParameters.bM = std::stod(parameterValue);
55  } else if (parameterName == "cM") {
56  m_correctionFitParameters.cM = std::stod(parameterValue);
57  } else if (parameterName == "dM") {
58  m_correctionFitParameters.dM = std::stod(parameterValue);
59  } else if (parameterName == "useMCInformation") {
60  m_useMCInformation = std::stoi(parameterValue);
61  } else if (parameterName == "useThickness") {
62  m_useThickness = std::stoi(parameterValue);
63  } else if (parameterName == "sigma") {
64  m_sigma = std::stod(parameterValue);
65  } else if (parameterName == "useTrackingSeeds") {
66  m_useTrackingSeeds = std::stoi(parameterValue);
67  } else {
68  B2FATAL("A parameter with the name " << parameterName << " and the value " << parameterValue << " could not be set.");
69  }
70  }
71 
72  protected:
76  virtual std::vector<genfit::AbsMeasurement*> createMeasurementFromCoordinateMeasurement(HitType* hit,
77  const RecoTrack& recoTrack, const RecoHitInformation&,
78  genfit::AbsMeasurement* coordinateMeasurement) const override
79  {
80  genfit::PlanarMeasurement* planarMeasurement = dynamic_cast<genfit::PlanarMeasurement*>(coordinateMeasurement);
81  if (planarMeasurement == nullptr) {
82  B2FATAL("Can only add VXD hits which are based on PlanarMeasurements with momentum estimation!");
83  // Make CPP check happy
84  return {};
85  }
86 
87  const TVector3& momentum = recoTrack.getMomentumSeed();
88 
89  if (momentum.Mag() > m_minimumMomentum) {
90  return {};
91  }
92 
93  // cppcheck-suppress nullPointerRedundantCheck
94  PlanarVXDMomentumMeasurement<HitType>* momentumMeasurement = new PlanarVXDMomentumMeasurement<HitType>(*planarMeasurement, hit,
95  &recoTrack);
96  momentumMeasurement->setCorrectionFitParameters(m_correctionFitParameters);
97  momentumMeasurement->setFitParameters(m_fitParameters);
98  momentumMeasurement->setSigma(m_sigma);
99  momentumMeasurement->setUseMCInformation(m_useMCInformation);
100  momentumMeasurement->setUseThickness(m_useThickness);
101  momentumMeasurement->setUseTrackingSeeds(m_useTrackingSeeds);
102  return {momentumMeasurement};
103  }
104 
105  private:
107  typename VXDMomentumEstimation<HitType>::FitParameters m_fitParameters;
109  typename VXDMomentumEstimation<HitType>::CorrectionFitParameters m_correctionFitParameters;
111  bool m_useMCInformation = false;
113  bool m_useThickness = false;
115  double m_minimumMomentum = 0.1;
117  double m_sigma = 0.03;
119  bool m_useTrackingSeeds = false;
120  };
121 
127 }
Belle2::VXDMomentumEstimationMeasurementCreator::m_correctionFitParameters
VXDMomentumEstimation< HitType >::CorrectionFitParameters m_correctionFitParameters
Parameters for the correction function.
Definition: VXDMomentumEstimationMeasurementCreator.h:117
Belle2::VXDMomentumEstimationMeasurementCreator::m_sigma
double m_sigma
Sigma of the measurement.
Definition: VXDMomentumEstimationMeasurementCreator.h:125
Belle2::VXDMomentumEstimationMeasurementCreator::createMeasurementFromCoordinateMeasurement
virtual std::vector< genfit::AbsMeasurement * > createMeasurementFromCoordinateMeasurement(HitType *hit, const RecoTrack &recoTrack, const RecoHitInformation &, genfit::AbsMeasurement *coordinateMeasurement) const override
Create a measurement based on the momentum estimation given by the VXDMomentumEstimation class.
Definition: VXDMomentumEstimationMeasurementCreator.h:84
genfit::MeasurementFactory< genfit::AbsMeasurement >
genfit::PlanarMeasurement
Measurement class implementing a planar hit geometry (1 or 2D).
Definition: PlanarMeasurement.h:44
Belle2::VXDMomentumEstimationMeasurementCreator::m_fitParameters
VXDMomentumEstimation< HitType >::FitParameters m_fitParameters
Parameters for the main function.
Definition: VXDMomentumEstimationMeasurementCreator.h:115
Belle2::VXDMomentumEstimationMeasurementCreator::setParameter
void setParameter(const std::string &parameterName, const std::string &parameterValue) override
Set the parameters of the fit functions and whether to use the thickness or not or the tracking seeds...
Definition: VXDMomentumEstimationMeasurementCreator.h:47
genfit::AbsMeasurement
Contains the measurement and covariance in raw detector coordinates.
Definition: AbsMeasurement.h:42
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::VXDMomentumEstimationMeasurementCreator::~VXDMomentumEstimationMeasurementCreator
virtual ~VXDMomentumEstimationMeasurementCreator()
Desctructor.
Definition: VXDMomentumEstimationMeasurementCreator.h:44
Belle2::VXDMomentumEstimationMeasurementCreator::m_useMCInformation
bool m_useMCInformation
Use the seeds of the track finder or the seeds of the MC particles.
Definition: VXDMomentumEstimationMeasurementCreator.h:119
Belle2::VXDMomentumEstimationMeasurementCreator::VXDMomentumEstimationMeasurementCreator
VXDMomentumEstimationMeasurementCreator(const genfit::MeasurementFactory< genfit::AbsMeasurement > &measurementFactory)
Constructor.
Definition: VXDMomentumEstimationMeasurementCreator.h:40
Belle2::VXDMomentumEstimationMeasurementCreator
Creator for VXDMeasurements with momentum estimation based on the dEdX information.
Definition: VXDMomentumEstimationMeasurementCreator.h:37
Belle2::VXDMomentumEstimationMeasurementCreator::m_minimumMomentum
double m_minimumMomentum
Minimal value for the momentum below the estimation is used.
Definition: VXDMomentumEstimationMeasurementCreator.h:123
Belle2::VXDMomentumEstimationMeasurementCreator::m_useThickness
bool m_useThickness
Use the thickness of the clusters of the path length for estimating dX.
Definition: VXDMomentumEstimationMeasurementCreator.h:121
Belle2::BaseMeasurementCreatorFromCoordinateMeasurement::BaseMeasurementCreatorFromCoordinateMeasurement
BaseMeasurementCreatorFromCoordinateMeasurement(const genfit::MeasurementFactory< genfit::AbsMeasurement > &measurementFactory)
Needs the genfit MeasurementFactory for this.
Definition: BaseMeasurementCreatorFromCoordinateMeasurement.h:38
Belle2::VXDMomentumEstimationMeasurementCreator::m_useTrackingSeeds
bool m_useTrackingSeeds
Use the tracking seeds in the origin for calculating the path length rather than the current state.
Definition: VXDMomentumEstimationMeasurementCreator.h:127