8#include <tracking/trackFindingCDC/findlets/minimal/SegmentFitter.h>
10#include <tracking/trackFindingCDC/fitting/CDCObservations2D.h>
12#include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
14#include <tracking/trackFindingCDC/utilities/StringManipulation.h>
16#include <framework/core/ModuleParamList.templateDetails.h>
17#include <framework/logging/Logger.h>
20using namespace TrackFindingCDC;
24 return "Fits each segment with a selectable method";
29 moduleParamList->
addParameter(prefixed(prefix,
"karimakiFit"),
31 "Switch to select Karimaki method for fitting instead of Riemann fit",
34 moduleParamList->
addParameter(prefixed(prefix,
"fitPos"),
36 "Positional information of the hits to be used in the fit. "
37 "Options are 'recoPos', 'rlDriftCircle', 'wirePos'.",
40 moduleParamList->
addParameter(prefixed(prefix,
"fitVariance"),
42 "Positional information of the hits to be used in the fit. "
43 "Options are 'unit', 'driftLength', 'pseudo', 'proper'.",
46 moduleParamList->
addParameter(prefixed(prefix,
"updateDriftLength"),
48 "Switch to reestimate the drift length",
51 moduleParamList->
addParameter(prefixed(prefix,
"updateRecoPos"),
53 "Switch to reestimate the position and right left passage information",
66 }
catch (std::invalid_argument& e) {
74 }
catch (std::invalid_argument& e) {
80 if (
m_fitPos != EFitPos::c_RecoPos) {
81 B2WARNING(
"Karimaki fitter only works with the reconstructed position as input.");
102 if (
m_fitPos != EFitPos::c_RecoPos) {
103 observations2D.
clear();
104 observations2D.
setFitPos(EFitPos::c_RecoPos);
108 segment.setTrajectory2D(trajectory2D);
112 segment.setTrajectory2D(trajectory2D);
119 if (not trajectory2D.
isFitted())
continue;
122 ERightLeft rlInfo = trajectory2D.
isRightOrLeft(recoHit2D.getRefPos2D());
123 if (rlInfo != recoHit2D.getRLInfo()) ++nRLChanges;
124 recoHit2D.setRLInfo(rlInfo);
125 const CDCRLWireHit& rlWireHit = recoHit2D.getRLWireHit();
127 recoHit2D.setRecoPos2D(recoPos2D);
129 if (nRLChanges > 0) B2DEBUG(25,
"RL changes " << nRLChanges);
The Module parameter list class.
Class serving as a storage of observed drift circles to present to the Riemann fitter.
std::size_t appendRange(const CDCSegment2D &segment2D)
Appends all reconstructed hits from the two dimensional segment.
void clear()
Removes all observations stored.
std::size_t size() const
Returns the number of observations stored.
void setFitPos(EFitPos fitPos)
Setter for the indicator that the reconstructed position should be favoured.
Class representing an oriented hit wire including a hypotheses whether the causing track passes left ...
Vector2D reconstruct2D(const CDCTrajectory2D &trajectory2D) const
Reconstructs a position of primary ionisation on the drift circle.
Class representing a two dimensional reconstructed hit in the central drift chamber.
A reconstructed sequence of two dimensional hits in one super layer.
Particle trajectory as it is seen in xy projection represented as a circle.
bool isFitted() const
Checks if the circle is already set to a valid value.
ERightLeft isRightOrLeft(const Vector2D &point) const
Checks if the given point is to the right or to the left of the trajectory.
void initialize() override
EFitPos m_fitPos
Option which positional information from the hits should be used.
DriftLengthEstimator m_driftLengthEstimator
Instance of the drift length estimator to be used.
void initialize() override
Signals the beginning of the event processing.
bool m_param_karimakiFit
Parameter : Switch to use Karimaki fit.
std::string getDescription() override
Short description of the findlet.
CDCKarimakiFitter m_karimakiFitter
Instance of the karimaki fitter to be used.
bool m_param_updateDriftLength
Parameter : Switch to reestimate the drift length before the fit.
CDCRiemannFitter m_riemannFitter
Instance of the riemann fitter to be used.
void apply(std::vector< CDCSegment2D > &outputSegments) override
Main algorithm applying the fit to each segment.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
Expose the parameters to a module.
EFitVariance m_fitVariance
Option which variance information from the hits should be used.
std::string m_param_fitVarianceString
Parameter : Option string which variance information from the hits should be used.
bool m_param_updateRecoPos
Parameter : Switch to reevaluate the position and right left passage information based in the fit.
std::string m_param_fitPosString
Parameter : Option string which positional information from the hits should be used.
A two dimensional vector which is equipped with functions for correct handling of orientation relate...
void addParameter(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Abstract base class for different kinds of events.