File indexing completed on 2025-08-06 08:18:28
0001
0002
0003 #ifndef PHCOSMICSEEDER_H
0004 #define PHCOSMICSEEDER_H
0005
0006 #include <fun4all/SubsysReco.h>
0007 #include <trackbase/ActsGeometry.h>
0008 #include <trackbase/TrkrDefs.h>
0009 #include <trackbase/MvtxDefs.h>
0010
0011 #include <map>
0012 #include <string>
0013 class PHCompositeNode;
0014 class ActsGeometry;
0015 class TrkrClusterContainer;
0016 class TrackSeedContainer;
0017 class TFile;
0018 class TNtuple;
0019 class PHCosmicSeeder : public SubsysReco
0020 {
0021 public:
0022 using PositionMap = std::map<TrkrDefs::cluskey, Acts::Vector3>;
0023 struct seed
0024 {
0025 float xyslope = std::numeric_limits<float>::quiet_NaN();
0026 float xyintercept = std::numeric_limits<float>::quiet_NaN();
0027 float xzslope = std::numeric_limits<float>::quiet_NaN();
0028 float xzintercept = std::numeric_limits<float>::quiet_NaN();
0029 float yzslope = std::numeric_limits<float>::quiet_NaN();
0030 float yzintercept = std::numeric_limits<float>::quiet_NaN();
0031 std::set<TrkrDefs::cluskey> ckeys;
0032 };
0033 using SeedVector = std::vector<seed>;
0034 PHCosmicSeeder(const std::string &name = "PHCosmicSeeder");
0035
0036 ~PHCosmicSeeder() override = default;
0037 int Init(PHCompositeNode *topNode) override;
0038 int InitRun(PHCompositeNode *topNode) override;
0039 int process_event(PHCompositeNode *topNode) override;
0040 int End(PHCompositeNode *topNode) override;
0041 void adcCut(float cut) { m_adcCut = cut; }
0042 void xyTolerance(float tol) { m_xyTolerance = tol; }
0043 void seedAnalysis() { m_analysis = true; }
0044 void trackMapName(const std::string &name) { m_trackMapName = name; }
0045 void trackerId(TrkrDefs::TrkrId trackerId) { m_trackerId = trackerId; }
0046
0047 private:
0048 int getNodes(PHCompositeNode *topNode);
0049 int createNodes(PHCompositeNode *topNode);
0050 SeedVector makeSeeds(PositionMap &clusterPositions);
0051 SeedVector combineSeeds(SeedVector &initialSeeds, PositionMap &clusterPositions);
0052 SeedVector findIntersections(SeedVector &initialSeeds);
0053 SeedVector chainSeeds(SeedVector &initialSeeds, PositionMap &clusterPositions);
0054 void recalculateSeedLineParameters(seed &seed, PositionMap &clusters, bool isXY);
0055
0056 float m_xyTolerance = 2.;
0057
0058 std::string m_trackMapName = "TpcTrackSeedContainer";
0059 TrkrDefs::TrkrId m_trackerId = TrkrDefs::TrkrId::tpcId;
0060 ActsGeometry *m_tGeometry = nullptr;
0061 float m_adcCut = 0;
0062 TrkrClusterContainer *m_clusterContainer = nullptr;
0063 TrackSeedContainer *m_seedContainer = nullptr;
0064 TFile *m_outfile = nullptr;
0065 TNtuple *m_tup = nullptr;
0066 bool m_analysis = false;
0067 float m_event = 0;
0068 };
0069
0070 #endif