Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-08-31 08:21:23

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
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