File indexing completed on 2025-08-03 08:17:43
0001 #ifndef TRACKRECO_TRKRNTUPLIZER_H
0002 #define TRACKRECO_TRKRNTUPLIZER_H
0003
0004
0005
0006
0007
0008
0009
0010 #include <fun4all/SubsysReco.h>
0011 #include <trackbase/ClusterErrorPara.h>
0012 #include <trackbase/TrkrDefs.h>
0013
0014 #include <TMatrixFfwd.h>
0015 #include <TMatrixT.h>
0016 #include <TMatrixTUtils.h>
0017
0018 #include <limits>
0019 #include <map>
0020 #include <set>
0021 #include <string>
0022
0023 class PHCompositeNode;
0024 class PHTimer;
0025 class TrkrCluster;
0026 class TFile;
0027 class TNtuple;
0028 class SvtxTrack;
0029 class TrackSeed;
0030 class SvtxTrackMap;
0031 class SvtxVertexMap;
0032 class TrkrClusterContainer;
0033 class ActsGeometry;
0034 class PHG4TpcCylinderGeomContainer;
0035 class GlobalVertexMap;
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 class TrkrNtuplizer : public SubsysReco
0049 {
0050 public:
0051 TrkrNtuplizer(const std::string &name = "TRKRNTUPLEIZER",
0052 const std::string &filename = "trkrntuple.root",
0053 const std::string &trackmapname = "SvtxTrackMap",
0054 unsigned int nlayers_maps = 3,
0055 unsigned int nlayers_intt = 4,
0056 unsigned int nlayers_tpc = 48,
0057 unsigned int nlayers_mms = 2);
0058 ~TrkrNtuplizer() override;
0059
0060 int Init(PHCompositeNode *topNode) override;
0061 int InitRun(PHCompositeNode *topNode) override;
0062 int process_event(PHCompositeNode *topNode) override;
0063 int End(PHCompositeNode *topNode) override;
0064
0065
0066 void do_info_eval(bool b) { _do_info_eval = b; }
0067 void do_vertex_eval(bool b) { _do_vertex_eval = b; }
0068 void do_hit_eval(bool b) { _do_hit_eval = b; }
0069 void do_cluster_eval(bool b) { _do_cluster_eval = b; }
0070 void do_clus_trk_eval(bool b) { _do_clus_trk_eval = b; }
0071 void do_track_eval(bool b) { _do_track_eval = b; }
0072 void do_dedx_calib(bool b) { _do_dedx_calib = b; }
0073 void do_tpcseed_eval(bool b) { _do_tpcseed_eval = b; }
0074 void do_siseed_eval(bool b) { _do_siseed_eval = b; }
0075 void set_first_event(int value) { _ievent = value; }
0076 void set_trkclus_seed_container(const std::string &name)
0077 {
0078 _clustrackseedcontainer = name;
0079 }
0080 SvtxTrack *best_track_from(TrkrDefs::cluskey cluster_key);
0081 std::set<SvtxTrack *> all_tracks_from(TrkrDefs::cluskey cluster_key);
0082 void create_cache_track_from_cluster();
0083 static std::vector<TrkrDefs::cluskey> get_track_ckeys(SvtxTrack *track);
0084 void segment(const int seg) { m_segment = seg; }
0085 void runnumber(const int run) { m_runnumber = run; }
0086 void job(const int job) { m_job = job; }
0087
0088 private:
0089 int m_segment = 0;
0090 int m_runnumber = 0;
0091 int m_job = 0;
0092
0093 unsigned int _ievent{0};
0094 unsigned int _iseed{0};
0095 float m_fSeed{std::numeric_limits<float>::quiet_NaN()};
0096
0097
0098 float calc_dedx(TrackSeed *tpcseed);
0099 TF1 *f_pion_plus{nullptr};
0100 TF1 *f_kaon_plus{nullptr};
0101 TF1 *f_proton_plus{nullptr};
0102 TF1 *f_pion_minus{nullptr};
0103 TF1 *f_kaon_minus{nullptr};
0104 TF1 *f_proton_minus{nullptr};
0105 float dedxcorr[2][12][3]{};
0106 float get_n1pix(TrackSeed *tpcseed);
0107
0108 static TMatrixF calculateClusterError(TrkrCluster *c, float &clusphi);
0109 void get_dca(SvtxTrack *track, SvtxVertexMap *vertexmap,
0110 float &dca3dxy, float &dca3dz,
0111 float &dca3dxysigma, float &dca3dzsigma);
0112
0113
0114 void FillCluster(Float_t fXcluster[30], TrkrDefs::cluskey cluster_key);
0115 void FillTrack(Float_t fXcluster[30], SvtxTrack *track, GlobalVertexMap *vertexmap);
0116
0117
0118
0119 bool _do_info_eval{true};
0120 bool _do_vertex_eval{true};
0121 bool _do_hit_eval{true};
0122 bool _do_cluster_eval{true};
0123 bool _do_clus_trk_eval{true};
0124 bool _do_track_eval{true};
0125 bool _do_dedx_calib{false};
0126 bool _do_tpcseed_eval{false};
0127 bool _do_siseed_eval{false};
0128
0129 unsigned int _nlayers_maps{3};
0130 unsigned int _nlayers_intt{4};
0131 unsigned int _nlayers_tpc{48};
0132 unsigned int _nlayers_mms{2};
0133
0134 TNtuple *_ntp_info{nullptr};
0135 TNtuple *_ntp_vertex{nullptr};
0136 TNtuple *_ntp_hit{nullptr};
0137 TNtuple *_ntp_cluster{nullptr};
0138 TNtuple *_ntp_clus_trk{nullptr};
0139 TNtuple *_ntp_track{nullptr};
0140 TNtuple *_ntp_tpcseed{nullptr};
0141 TNtuple *_ntp_siseed{nullptr};
0142
0143
0144 std::string _filename;
0145
0146 std::string _trackmapname;
0147 ClusterErrorPara _ClusErrPara;
0148 TrkrClusterContainer *_cluster_map{nullptr};
0149 SvtxTrackMap *_trackmap{nullptr};
0150 ActsGeometry *_tgeometry{nullptr};
0151 PHG4TpcCylinderGeomContainer *_geom_container{nullptr};
0152
0153 std::string _clustrackseedcontainer = "TpcTrackSeedContainer";
0154
0155 TFile *_tfile{nullptr};
0156 PHTimer *_timer{nullptr};
0157
0158
0159 void fillOutputNtuples(PHCompositeNode *topNode);
0160 void printInputInfo(PHCompositeNode *topNode);
0161 void printOutputInfo(PHCompositeNode *topNode);
0162 double AdcClockPeriod = 53.0;
0163
0164 bool _cache_track_from_cluster_exists = false;
0165 std::map<TrkrDefs::cluskey, std::set<SvtxTrack *> > _cache_all_tracks_from_cluster;
0166 std::map<TrkrDefs::cluskey, SvtxTrack *> _cache_best_track_from_cluster;
0167 };
0168
0169 #endif