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;
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.
CDCTrajectory2D fit(const CDCObservations2D &observations2D) const
Fits a collection of observation drift circles.
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
Receive and dispatch signal before the start of the event processing.
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.
ERightLeft
Enumeration to represent the distinct possibilities of the right left passage.
Abstract base class for different kinds of events.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix)
Add the parameters of the estimator to the module.
double updateDriftLength(CDCRecoHit2D &recoHit2D)
Update the drift length of the reconstructed hit in place.