CbmRoot
Loading...
Searching...
No Matches
CbmLitToolFactory.cxx
Go to the documentation of this file.
1/* Copyright (C) 2008-2019 GSI/JINR-LIT, Darmstadt/Dubna
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Andrey Lebedev [committer] */
4
12
13#include "base/CbmLitMapField.h"
14#include "base/CbmLitPtrTypes.h"
33
34#include "FairRunAna.h"
35
36#include <boost/assign/list_of.hpp>
37
38#include <cassert>
39
40using boost::assign::list_of;
41
43
45
47{
48 assert(name == "line" || name == "rk4" || name == "lit");
49 if (name == "line") { return TrackExtrapolatorPtr(new CbmLitLineTrackExtrapolator()); }
50 else if (name == "rk4") {
51 std::shared_ptr<CbmLitField> field(new CbmLitMapField(FairRunAna::Instance()->GetField()));
52 //CbmLitField* field = new CbmLitMapField(FairRunAna::Instance()->GetField());
54 }
55 else if (name == "lit") {
57 }
58 return TrackExtrapolatorPtr();
59}
60
62{
63 assert(name == "lit" || name == "rk4" || name == "line");
64 if (name == "lit") { return TrackPropagatorPtr(new CbmLitTGeoTrackPropagator(CreateTrackExtrapolator("lit"))); }
65 else if (name == "rk4") {
67 }
68 else if (name == "line") {
70 }
71 return TrackPropagatorPtr();
72}
73
75{
76 assert(name == "kalman");
77 if (name == "kalman") { return TrackUpdatePtr(new CbmLitKalmanFilter()); }
78 return TrackUpdatePtr();
79}
80
82{
83 assert(name == "lit_kalman" || name == "kalman_smoother");
84 if (name == "lit_kalman") {
86 }
87 else if (name == "kalman_smoother") {
89 }
90 return TrackFitterPtr();
91}
92
94{
95 assert(name == "empty" || name == "momentum" || name == "momentum_seed" || name == "chi_square"
96 || name == "much_final" || name == "trd_final");
97 if (name == "empty") { return TrackSelectionPtr(new CbmLitTrackSelectionEmpty()); }
98 else if (name == "momentum") {
100 momSelection->SetMinMomentum(0.1);
101 return TrackSelectionPtr(momSelection);
102 }
103 else if (name == "momentum_seed") {
105 momSelection->SetMinMomentum(0.1);
106 return TrackSelectionPtr(momSelection);
107 }
108 else if (name == "chi_square") {
110 chiSqSelection->SetMaxChiSq(30.);
111 return TrackSelectionPtr(chiSqSelection);
112 }
113 else if (name == "much_final") {
115 muchSelection->SetNofSharedHits(3);
116 return TrackSelectionPtr(muchSelection);
117 }
118 else if (name == "trd_final") {
120 trdSelection->SetNofSharedHits(3);
121 return TrackSelectionPtr(trdSelection);
122 }
123 return TrackSelectionPtr();
124}
125
127{
128 assert(name == "e_nn" || name == "e_branch" || name == "mu_nn" || name == "mu_branch" || name == "mvd_nn");
129 if (name == "e_nn") {
130 CbmLitTrackFinderNN* trdFinderNN = new CbmLitTrackFinderNN();
131 trdFinderNN->SetSeedSelection(CreateTrackSelection("momentum"));
132 trdFinderNN->SetFinalSelection(CreateTrackSelection("trd_final"));
133 trdFinderNN->SetPropagator(CreateTrackPropagator("lit"));
134 trdFinderNN->SetFilter(CreateTrackUpdate("kalman"));
135 trdFinderNN->SetNofStations(CbmLitTrackingGeometryConstructor::Instance()->GetNofMuchTrdStations());
136 trdFinderNN->SetNofIterations(1);
137 trdFinderNN->SetMaxNofMissingHits(list_of(4));
138 trdFinderNN->SetPDG(list_of(211));
139 trdFinderNN->SetChiSqStripHitCut(list_of(9.));
140 trdFinderNN->SetChiSqPixelHitCut(list_of(25.));
141 trdFinderNN->SetSigmaCoef(list_of(5.));
142 return TrackFinderPtr(trdFinderNN);
143 }
144 else if (name == "e_branch") {
145 CbmLitTrackFinderBranch* trdFinderBranch = new CbmLitTrackFinderBranch();
146 trdFinderBranch->SetSeedSelection(CreateTrackSelection("momentum"));
147 trdFinderBranch->SetFinalSelection(CreateTrackSelection("trd_final"));
148 trdFinderBranch->SetPropagator(CreateTrackPropagator("lit"));
149 trdFinderBranch->SetFilter(CreateTrackUpdate("kalman"));
150 trdFinderBranch->SetNofStations(CbmLitTrackingGeometryConstructor::Instance()->GetNofMuchTrdStations());
151 trdFinderBranch->SetNofIterations(1);
152 trdFinderBranch->SetMaxNofMissingHits(list_of(4));
153 trdFinderBranch->SetPDG(list_of(211));
154 trdFinderBranch->SetChiSqStripHitCut(list_of(9.));
155 trdFinderBranch->SetChiSqPixelHitCut(list_of(25.));
156 trdFinderBranch->SetSigmaCoef(list_of(5.));
157 return TrackFinderPtr(trdFinderBranch);
158 }
159 else if (name == "mu_nn") {
160 CbmLitTrackFinderNN* muchFinderNN = new CbmLitTrackFinderNN();
161 muchFinderNN->SetSeedSelection(CreateTrackSelection("momentum_seed"));
162 muchFinderNN->SetFinalSelection(CreateTrackSelection("much_final"));
163 muchFinderNN->SetPropagator(CreateTrackPropagator("lit"));
164 muchFinderNN->SetFilter(CreateTrackUpdate("kalman"));
165 muchFinderNN->SetNofStations(CbmLitTrackingGeometryConstructor::Instance()->GetNofMuchTrdStations());
166 muchFinderNN->SetNofIterations(1);
167 muchFinderNN->SetMaxNofMissingHits(list_of(4));
168 muchFinderNN->SetPDG(list_of(13));
169 muchFinderNN->SetChiSqStripHitCut(list_of(9.));
170 muchFinderNN->SetChiSqPixelHitCut(list_of(25.));
171 muchFinderNN->SetSigmaCoef(list_of(5.));
172 return TrackFinderPtr(muchFinderNN);
173 }
174 else if (name == "mu_branch") {
175 CbmLitTrackFinderBranch* muchFinderBranch = new CbmLitTrackFinderBranch();
176 muchFinderBranch->SetSeedSelection(CreateTrackSelection("momentum_seed"));
177 muchFinderBranch->SetFinalSelection(CreateTrackSelection("much_final"));
178 muchFinderBranch->SetPropagator(CreateTrackPropagator("lit"));
179 muchFinderBranch->SetFilter(CreateTrackUpdate("kalman"));
180 muchFinderBranch->SetNofStations(CbmLitTrackingGeometryConstructor::Instance()->GetNofMuchTrdStations());
181 muchFinderBranch->SetNofIterations(1);
182 muchFinderBranch->SetMaxNofMissingHits(list_of(4));
183 muchFinderBranch->SetPDG(list_of(13));
184 muchFinderBranch->SetChiSqStripHitCut(list_of(9.));
185 muchFinderBranch->SetChiSqPixelHitCut(list_of(25.));
186 muchFinderBranch->SetSigmaCoef(list_of(5.));
187 return TrackFinderPtr(muchFinderBranch);
188 }
189 else if (name == "mvd_nn") {
190 CbmLitTrackFinderNN* mvdFinderNN = new CbmLitTrackFinderNN();
191 mvdFinderNN->SetSeedSelection(CreateTrackSelection("empty"));
192 mvdFinderNN->SetFinalSelection(CreateTrackSelection("empty"));
193 mvdFinderNN->SetPropagator(CreateTrackPropagator("rk4"));
194 mvdFinderNN->SetFilter(CreateTrackUpdate("kalman"));
195 mvdFinderNN->SetNofStations(CbmLitTrackingGeometryConstructor::Instance()->GetNofMvdStations());
196 mvdFinderNN->SetNofIterations(1);
197 mvdFinderNN->SetMaxNofMissingHits(list_of(1));
198 mvdFinderNN->SetPDG(list_of(211));
199 mvdFinderNN->SetChiSqStripHitCut(list_of(9.));
200 mvdFinderNN->SetChiSqPixelHitCut(list_of(15.));
201 mvdFinderNN->SetSigmaCoef(list_of(5.));
202 return TrackFinderPtr(mvdFinderNN);
203 }
204 return TrackFinderPtr();
205}
206
208{
209 assert(name == "tof_nearest_hit" || name == "tof_all_hits");
210 if (name == "tof_nearest_hit") {
213 nhMerger->SetLinePropagator(CreateTrackPropagator("line"));
214 nhMerger->SetFilter(CreateTrackUpdate("kalman"));
215 nhMerger->SetPDG(211);
216 nhMerger->SetChiSqCut(-1.); //50.); //13.86);
217 return HitToTrackMergerPtr(nhMerger);
218 }
219 else if (name == "tof_all_hits") {
222 nhMerger->SetLinePropagator(CreateTrackPropagator("line"));
223 nhMerger->SetFilter(CreateTrackUpdate("kalman"));
224 nhMerger->SetPDG(211);
225 nhMerger->SetChiSqCut(50.); //13.86);
226 return HitToTrackMergerPtr(nhMerger);
227 }
228 return HitToTrackMergerPtr();
229}
Hit-to-track merging in TOF detector attaching all hits in the validation region.
"Clever" track extrapolation.
Interface for accessing the magnetic field.
Implementation of Kalman smoother algorithm.
Hit-to-track merging in TOF detector using nearest hit approach.
Typedefs for algorithm interfaces.
Tool factory for creation of littrack algorithms.
Track reconstruction using branching method.
Implementation of nearest neighbor tracking algorithm.
Implementation of Kalman Filter track fit.
Track selection for MUCH.
Track selection for TRD.
Tracking geometry constructor.
boost::shared_ptr< CbmLitTrackFitter > TrackFitterPtr
boost::shared_ptr< CbmLitTrackFinder > TrackFinderPtr
boost::shared_ptr< CbmLitTrackPropagator > TrackPropagatorPtr
boost::shared_ptr< CbmLitTrackUpdate > TrackUpdatePtr
boost::shared_ptr< CbmLitTrackSelection > TrackSelectionPtr
boost::shared_ptr< CbmLitHitToTrackMerger > HitToTrackMergerPtr
boost::shared_ptr< CbmLitTrackExtrapolator > TrackExtrapolatorPtr
void SetFilter(TrackUpdatePtr filter)
void SetLinePropagator(TrackPropagatorPtr propagator)
void SetChiSqCut(litfloat chiSqCut)
void SetFieldPropagator(TrackPropagatorPtr propagator)
Implementation of Kalman smoother algorithm.
void SetLinePropagator(TrackPropagatorPtr propagator)
void SetFieldPropagator(TrackPropagatorPtr propagator)
void SetChiSqCut(litfloat chiSqCut)
void SetFilter(TrackUpdatePtr filter)
static TrackFinderPtr CreateTrackFinder(const string &name)
Create track selection tool by name.
static HitToTrackMergerPtr CreateHitToTrackMerger(const string &name)
Create hot to track merge tool by name.
static TrackPropagatorPtr CreateTrackPropagator(const string &name)
Create track propagation tool by name.
static TrackUpdatePtr CreateTrackUpdate(const string &name)
Create track update tool by name.
static TrackSelectionPtr CreateTrackSelection(const string &name)
Create track selection tool by name.
CbmLitToolFactory()
Constructor. Constructor is protected since singleton pattern is used. Pointer to the object is retur...
static TrackExtrapolatorPtr CreateTrackExtrapolator(const string &name)
Create track extrapolation tool by name.
static TrackFitterPtr CreateTrackFitter(const string &name)
Create track fit tool by name.
virtual ~CbmLitToolFactory()
Destructor.
void SetPDG(const vector< Int_t > &pdg)
void SetNofIterations(Int_t nofIterations)
void SetMaxNofMissingHits(const vector< Int_t > &maxNofMissingHits)
void SetSeedSelection(TrackSelectionPtr seedSelection)
void SetChiSqStripHitCut(const vector< litfloat > &chiSqStripHitCut)
void SetChiSqPixelHitCut(const vector< litfloat > &chiSqPixelHitCut)
void SetNofStations(Int_t nofStations)
void SetSigmaCoef(const vector< litfloat > &sigmaCoef)
void SetPropagator(TrackPropagatorPtr propagator)
void SetFinalSelection(TrackSelectionPtr finalSelection)
void SetFilter(TrackUpdatePtr filter)
void SetPropagator(TrackPropagatorPtr propagator)
void SetPDG(const vector< Int_t > &pdg)
void SetMaxNofMissingHits(const vector< Int_t > &maxNofMissingHits)
void SetNofStations(Int_t nofStations)
void SetChiSqPixelHitCut(const vector< litfloat > &chiSqPixelHitCut)
void SetChiSqStripHitCut(const vector< litfloat > &chiSqStripHitCut)
void SetFilter(TrackUpdatePtr filter)
void SetNofIterations(Int_t nofIterations)
void SetSeedSelection(TrackSelectionPtr seedSelection)
void SetFinalSelection(TrackSelectionPtr finalSelection)
void SetSigmaCoef(const vector< litfloat > &sigmaCoef)
Implementation of Kalman Filter track fit.
void SetMaxChiSq(litfloat maxChiSq)
void SetMinMomentum(litfloat minMomentum)
void SetNofSharedHits(Int_t nofHits)
static CbmLitTrackingGeometryConstructor * Instance()
Return pointer to singleton object.