File indexing completed on 2025-08-06 08:18:29
0001
0002
0003 #ifndef PHCOSMICTRACKMERGER_H
0004 #define PHCOSMICTRACKMERGER_H
0005
0006 #include <fun4all/SubsysReco.h>
0007
0008 #include <trackbase/ActsGeometry.h>
0009
0010 #include <TFile.h>
0011 #include <TH1.h>
0012 #include <TH2.h>
0013
0014 #include <string>
0015 #include <vector>
0016
0017 class PHCompositeNode;
0018 class TrackSeedContainer;
0019 class TrkrClusterContainer;
0020 class TrackSeed;
0021 class ActsGeometry;
0022
0023 class PHCosmicTrackMerger : public SubsysReco
0024 {
0025 using KeyPosMap = std::pair<std::vector<TrkrDefs::cluskey>, std::vector<Acts::Vector3>>;
0026
0027 public:
0028 PHCosmicTrackMerger(const std::string &name = "PHCosmicTrackMerger");
0029
0030 ~PHCosmicTrackMerger() override;
0031
0032 int Init(PHCompositeNode *) override;
0033 int InitRun(PHCompositeNode *topNode) override;
0034 int process_event(PHCompositeNode *topNode) override;
0035 int End(PHCompositeNode *) override;
0036
0037 void zero_field() { m_zeroField = true; }
0038 void dca_xycut(const float cut) { m_dcaxycut = cut; }
0039 void dca_rzcut(const float cut) { m_dcarzcut = cut; }
0040 void iter(const int it) { m_iter = it; }
0041 void removeOutliers() { m_removeOutliers = true; }
0042
0043 private:
0044 void addKeys(TrackSeed *toAddTo, TrackSeed *toAdd);
0045 void removeOutliers(TrackSeed *seed);
0046 void getBestClustersPerLayer(TrackSeed *seed);
0047
0048 ActsGeometry *m_geometry = nullptr;
0049 KeyPosMap getGlobalPositions(TrackSeed *seed);
0050 TrkrClusterContainer *m_clusterMap = nullptr;
0051 TrackSeedContainer *m_seeds = nullptr;
0052 TrackSeedContainer *m_tpcSeeds = nullptr;
0053 TrackSeedContainer *m_siliconSeeds = nullptr;
0054
0055 float m_dcaxycut = 0.5;
0056 float m_dcarzcut = 2.;
0057 bool m_zeroField = false;
0058 int m_iter = 0;
0059 bool m_removeOutliers = false;
0060 };
0061
0062 #endif