File indexing completed on 2025-08-06 08:22:04
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef TRACKRECO_TpcPrototypeGenFitTrkFitter_H
0009 #define TRACKRECO_TpcPrototypeGenFitTrkFitter_H
0010
0011 #include <fun4all/SubsysReco.h>
0012
0013 #include <TMatrixFfwd.h> // for TMatrixF
0014 #include <TVector3.h> // for TVector3
0015
0016 #include <cstddef> // for NULL
0017 #include <memory> // for shared_ptr
0018 #include <string>
0019 #include <vector>
0020
0021 class TClonesArray;
0022
0023 namespace PHGenFit
0024 {
0025 class Track;
0026 }
0027
0028 namespace genfit
0029 {
0030 class GFRaveVertex;
0031 class GFRaveVertexFactory;
0032 class Track;
0033 }
0034
0035 class SvtxTrack;
0036 namespace PHGenFit
0037 {
0038 class Fitter;
0039 }
0040
0041 class SvtxTrackMap;
0042 class SvtxVertexMap;
0043 class TrkrCluster;
0044 class SvtxVertex;
0045 class PHCompositeNode;
0046
0047 class TrkrClusterContainer;
0048 class TTree;
0049 class TpcPrototypeTrack;
0050
0051
0052 class TpcPrototypeGenFitTrkFitter : public SubsysReco
0053 {
0054 public:
0055
0056
0057
0058
0059
0060 enum OutPutMode
0061 {
0062 MakeNewNode,
0063 OverwriteOriginalNode,
0064 DebugMode
0065 };
0066
0067 enum DetectorType
0068 {
0069 MIE,
0070 MAPS_TPC,
0071 MAPS_IT_TPC,
0072 LADDER_MAPS_TPC,
0073 LADDER_MAPS_IT_TPC,
0074 LADDER_MAPS_LADDER_IT_TPC,
0075 MAPS_LADDER_IT_TPC
0076 };
0077
0078
0079 TpcPrototypeGenFitTrkFitter(const std::string& name = "TpcPrototypeGenFitTrkFitter");
0080
0081
0082 ~TpcPrototypeGenFitTrkFitter();
0083
0084
0085 int Init(PHCompositeNode*);
0086
0087
0088 int InitRun(PHCompositeNode*);
0089
0090
0091 int process_event(PHCompositeNode*);
0092
0093
0094 int End(PHCompositeNode*);
0095
0096
0097 enum Flag
0098 {
0099
0100 NONE = 0,
0101 };
0102
0103
0104
0105 void set_flag(const Flag& flag, const bool& value)
0106 {
0107 if (value)
0108 _flags |= flag;
0109 else
0110 _flags &= (~flag);
0111 }
0112
0113
0114
0115 void set_eval_filename(const std::string& file)
0116 {
0117 _eval_outname = file;
0118 }
0119 std::string get_eval_filename() const
0120 {
0121 return _eval_outname;
0122 }
0123
0124 void fill_eval_tree(PHCompositeNode*);
0125 void init_eval_tree();
0126 void reset_eval_variables();
0127
0128 bool is_do_eval() const
0129 {
0130 return _do_eval;
0131 }
0132
0133 void set_do_eval(bool doEval)
0134 {
0135 _do_eval = doEval;
0136 }
0137
0138 bool is_do_evt_display() const
0139 {
0140 return _do_evt_display;
0141 }
0142
0143 void set_do_evt_display(bool doEvtDisplay)
0144 {
0145 _do_evt_display = doEvtDisplay;
0146 }
0147
0148 const std::string& get_vertexing_method() const
0149 {
0150 return _vertexing_method;
0151 }
0152
0153 void set_vertexing_method(const std::string& vertexingMethod)
0154 {
0155 _vertexing_method = vertexingMethod;
0156 }
0157
0158 bool is_fit_primary_tracks() const
0159 {
0160 return _fit_primary_tracks;
0161 }
0162
0163 void set_fit_primary_tracks(bool fitPrimaryTracks)
0164 {
0165 _fit_primary_tracks = fitPrimaryTracks;
0166 }
0167
0168 OutPutMode get_output_mode() const
0169 {
0170 return _output_mode;
0171 }
0172
0173
0174
0175
0176 void set_output_mode(OutPutMode outputMode)
0177 {
0178 _output_mode = outputMode;
0179 }
0180
0181 const std::string& get_track_fitting_alg_name() const
0182 {
0183 return _track_fitting_alg_name;
0184 }
0185
0186 void set_track_fitting_alg_name(const std::string& trackFittingAlgName)
0187 {
0188 _track_fitting_alg_name = trackFittingAlgName;
0189 }
0190
0191 int get_primary_pid_guess() const
0192 {
0193 return _primary_pid_guess;
0194 }
0195
0196 void set_primary_pid_guess(int primaryPidGuess)
0197 {
0198 _primary_pid_guess = primaryPidGuess;
0199 }
0200
0201 double get_fit_min_pT() const
0202 {
0203 return _fit_min_pT;
0204 }
0205
0206 void set_fit_min_pT(double cutMinPT)
0207 {
0208 _fit_min_pT = cutMinPT;
0209 }
0210
0211 bool is_over_write_svtxtrackmap() const
0212 {
0213 return _over_write_svtxtrackmap;
0214 }
0215
0216 void set_over_write_svtxtrackmap(bool overWriteSvtxtrackmap)
0217 {
0218 _over_write_svtxtrackmap = overWriteSvtxtrackmap;
0219 }
0220
0221 bool is_over_write_svtxvertexmap() const
0222 {
0223 return _over_write_svtxvertexmap;
0224 }
0225
0226 void set_over_write_svtxvertexmap(bool overWriteSvtxvertexmap)
0227 {
0228 _over_write_svtxvertexmap = overWriteSvtxvertexmap;
0229 }
0230
0231 bool is_use_truth_vertex() const
0232 {
0233 return _use_truth_vertex;
0234 }
0235
0236 void set_use_truth_vertex(bool useTruthVertex)
0237 {
0238 _use_truth_vertex = useTruthVertex;
0239 }
0240
0241 double get_vertex_min_ndf() const
0242 {
0243 return _vertex_min_ndf;
0244 }
0245
0246 void set_vertex_min_ndf(double vertexMinPT)
0247 {
0248 _vertex_min_ndf = vertexMinPT;
0249 }
0250
0251 private:
0252
0253 int _event;
0254
0255
0256 int GetNodes(PHCompositeNode*);
0257
0258
0259 int CreateNodes(PHCompositeNode*);
0260
0261
0262
0263
0264
0265
0266 std::shared_ptr<PHGenFit::Track> ReFitTrack(PHCompositeNode*, const SvtxTrack* intrack, const SvtxVertex* invertex = NULL);
0267
0268
0269 std::shared_ptr<PHGenFit::Track> DisplayCluster(const TrkrCluster* cluster);
0270
0271
0272 std::shared_ptr<SvtxTrack> MakeSvtxTrack(const SvtxTrack* svtxtrack, const std::shared_ptr<PHGenFit::Track>& genfit_track, const SvtxVertex* vertex = NULL);
0273
0274
0275 std::shared_ptr<TpcPrototypeTrack> MakeTpcPrototypeTrack(const SvtxTrack* svtxtrack);
0276
0277
0278 bool FillSvtxVertexMap(
0279 const std::vector<genfit::GFRaveVertex*>& rave_vertices,
0280 const std::vector<genfit::Track*>& gf_tracks);
0281
0282 bool pos_cov_uvn_to_rz(
0283 const TVector3& u,
0284 const TVector3& v,
0285 const TVector3& n,
0286 const TMatrixF& pos_in,
0287 const TMatrixF& cov_in,
0288 TMatrixF& pos_out,
0289 TMatrixF& cov_out) const;
0290
0291 bool get_vertex_error_uvn(
0292 const TVector3& u,
0293 const TVector3& v,
0294 const TVector3& n,
0295 const TMatrixF& cov_in,
0296 TMatrixF& cov_out) const;
0297
0298 bool pos_cov_XYZ_to_RZ(
0299 const TVector3& n,
0300 const TMatrixF& pos_in,
0301 const TMatrixF& cov_in,
0302 TMatrixF& pos_out,
0303 TMatrixF& cov_out) const;
0304
0305
0306
0307
0308
0309 TMatrixF get_rotation_matrix(
0310 const TVector3 x,
0311 const TVector3 y,
0312 const TVector3 z,
0313 const TVector3 xp = TVector3(1., 0., 0.),
0314 const TVector3 yp = TVector3(0., 1., 0.),
0315 const TVector3 zp = TVector3(0., 0., 1.)) const;
0316
0317
0318 unsigned int _flags;
0319
0320
0321 OutPutMode _output_mode;
0322
0323 bool _over_write_svtxtrackmap;
0324 bool _over_write_svtxvertexmap;
0325
0326 bool _fit_primary_tracks;
0327
0328
0329 bool _use_truth_vertex;
0330
0331 PHGenFit::Fitter* _fitter;
0332
0333
0334 std::string _track_fitting_alg_name;
0335
0336 int _primary_pid_guess;
0337 double _fit_min_pT;
0338 double _vertex_min_ndf;
0339
0340 genfit::GFRaveVertexFactory* _vertex_finder;
0341
0342
0343 std::string _vertexing_method;
0344
0345
0346
0347
0348
0349 TrkrClusterContainer* _clustermap;
0350 SvtxTrackMap* _trackmap;
0351 SvtxVertexMap* _vertexmap;
0352
0353
0354 SvtxTrackMap* _trackmap_refit;
0355 SvtxTrackMap* _primary_trackmap;
0356 SvtxVertexMap* _vertexmap_refit;
0357
0358
0359
0360 bool _do_eval;
0361
0362
0363 std::string _eval_outname;
0364
0365 TTree* _eval_tree;
0366 int _tca_ntrack;
0367 TClonesArray* _tca_particlemap;
0368 TClonesArray* _tca_vtxmap;
0369 TClonesArray* _tca_trackmap;
0370 TClonesArray* _tca_tpctrackmap;
0371 TClonesArray* _tca_vertexmap;
0372 TClonesArray* _tca_trackmap_refit;
0373 TClonesArray* _tca_primtrackmap;
0374 TClonesArray* _tca_vertexmap_refit;
0375
0376 TTree* _cluster_eval_tree;
0377 float _cluster_eval_tree_x;
0378 float _cluster_eval_tree_y;
0379 float _cluster_eval_tree_z;
0380 float _cluster_eval_tree_gx;
0381 float _cluster_eval_tree_gy;
0382 float _cluster_eval_tree_gz;
0383
0384 bool _do_evt_display;
0385 };
0386
0387 #endif