File indexing completed on 2026-08-31 08:21:23
0001
0002
0003 #ifndef TPCTRACKRECO_TPCPOLYTRACKRECO_H
0004 #define TPCTRACKRECO_TPCPOLYTRACKRECO_H
0005
0006 #include "Tpc_FittingTools.h"
0007
0008 #include <fun4all/SubsysReco.h>
0009
0010 #include <string>
0011 #include <vector>
0012
0013 class Tpc_PolyTrackContainer;
0014 class IdealPadMap;
0015 class PHCompositeNode;
0016 class Tpc_PolyCluster;
0017 class Tpc_PolyClusterContainer;
0018
0019 class Tpc_PolyTrackReco : public SubsysReco
0020 {
0021 public:
0022 enum class FitMode
0023 {
0024 Helix,
0025 Line3D
0026 };
0027
0028 explicit Tpc_PolyTrackReco(const std::string& name = "Tpc_PolyTrackReco");
0029 ~Tpc_PolyTrackReco() override;
0030
0031 int InitRun(PHCompositeNode*) override;
0032 int process_event(PHCompositeNode*) override;
0033
0034 void setInputNodeName(const std::string& n) { m_inputNodeName = n; }
0035 void setOutputNodeName(const std::string& n) { m_outputNodeName = n; }
0036 void setMagneticFieldTesla(double v) { m_magneticFieldTesla = v; }
0037 void setFitMode(FitMode mode) { m_fitMode = mode; }
0038 void setUseLine3DFit(bool v) { m_fitMode = v ? FitMode::Line3D : FitMode::Helix; }
0039
0040 private:
0041 int getNodes(PHCompositeNode*);
0042 int createNodes(PHCompositeNode*);
0043 double calc_dedx(const std::vector<const Tpc_PolyCluster*>& clusters,
0044 const Tpc_FittingTools::FitResult& fit,
0045 bool fit_ok) const;
0046 void fillTpc_PolyTrack(unsigned int source_assembled_track_id,
0047 const std::vector<const Tpc_PolyCluster*>& clusters,
0048 const Tpc_FittingTools::FitResult& fit,
0049 bool fit_ok);
0050
0051 std::string m_inputNodeName;
0052 std::string m_outputNodeName;
0053 Tpc_PolyClusterContainer* m_clusters{nullptr};
0054 Tpc_PolyTrackContainer* m_polyTracks{nullptr};
0055 IdealPadMap* m_idealPadMap{nullptr};
0056 unsigned int m_event{0};
0057 double m_magneticFieldTesla{1.4};
0058 FitMode m_fitMode{FitMode::Helix};
0059 };
0060 #endif