Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:17:43

0001 #ifndef TRACKRECO_TRKRNTUPLIZER_H
0002 #define TRACKRECO_TRKRNTUPLIZER_H
0003 
0004 //===============================================
0005 /// \file SvtxEvaluator.h
0006 /// \brief Compares reconstructed tracks to truth particles
0007 /// \author Michael P. McCumber (revised SVTX version)
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 // class ClusterErrorPara;
0038 
0039 /// \class SvtxEvaluator
0040 ///
0041 /// \brief Compares reconstructed tracks to truth particles
0042 ///
0043 /// Plan: This module will trace the reconstructed tracks back to
0044 /// the greatest contributor Monte Carlo particle and then
0045 /// test one against the other.
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   //  void do_primaries(bool b);
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   // eval stack
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   // TrkrClusterContainer *cluster_map{nullptr};
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   // evaluator output ntuples
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   // evaluator output file
0144   std::string _filename;
0145   // Track map name
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   // output subroutines
0159   void fillOutputNtuples(PHCompositeNode *topNode);  ///< dump the evaluator information into ntuple for external analysis
0160   void printInputInfo(PHCompositeNode *topNode);     ///< print out the input object information (debugging upstream components)
0161   void printOutputInfo(PHCompositeNode *topNode);    ///< print out the ancestry information for detailed diagnosis
0162   double AdcClockPeriod = 53.0;                      // ns
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  // G4EVAL_SVTXEVALUATOR_H