File indexing completed on 2025-08-05 08:18:00
0001 #ifndef G4EVAL_SVTXTRACKEVAL_H
0002 #define G4EVAL_SVTXTRACKEVAL_H
0003
0004 #include "SvtxClusterEval.h"
0005
0006 #include <trackbase/TrkrDefs.h>
0007
0008 #include <map>
0009 #include <set>
0010 #include <string> // for string
0011 #include <utility>
0012
0013 class PHCompositeNode;
0014
0015 class PHG4Hit;
0016 class PHG4Particle;
0017
0018 class SvtxHitEval;
0019 class SvtxTrack;
0020 class SvtxTrackMap;
0021 class SvtxTruthEval;
0022 class PHG4ParticleSvtxMap;
0023 class SvtxPHG4ParticleMap;
0024 class PHG4TruthInfoContainer;
0025
0026 class SvtxTrackEval
0027 {
0028 public:
0029 SvtxTrackEval(PHCompositeNode* topNode);
0030 virtual ~SvtxTrackEval();
0031
0032 void next_event(PHCompositeNode* topNode);
0033 void do_caching(bool do_cache)
0034 {
0035 _do_cache = do_cache;
0036 _clustereval.do_caching(do_cache);
0037 }
0038 void set_strict(bool strict)
0039 {
0040 _strict = strict;
0041 _clustereval.set_strict(strict);
0042 }
0043 void set_verbosity(int verbosity)
0044 {
0045 _verbosity = verbosity;
0046 _clustereval.set_verbosity(verbosity);
0047 }
0048
0049
0050 SvtxClusterEval* get_cluster_eval() { return &_clustereval; }
0051 SvtxHitEval* get_hit_eval() { return _clustereval.get_hit_eval(); }
0052 SvtxTruthEval* get_truth_eval() { return _clustereval.get_truth_eval(); }
0053
0054
0055 std::set<PHG4Hit*> all_truth_hits(SvtxTrack* track);
0056
0057
0058 std::set<PHG4Particle*> all_truth_particles(SvtxTrack* track);
0059 PHG4Particle* max_truth_particle_by_nclusters(SvtxTrack* track);
0060
0061
0062 std::set<SvtxTrack*> all_tracks_from(PHG4Particle* truthparticle);
0063 SvtxTrack* best_track_from(PHG4Particle* truthparticle);
0064 std::set<SvtxTrack*> all_tracks_from(PHG4Hit* truthhit);
0065 std::set<SvtxTrack*> all_tracks_from(TrkrDefs::cluskey cluster_key);
0066 SvtxTrack* best_track_from(TrkrDefs::cluskey cluster_key);
0067 void create_cache_track_from_cluster();
0068
0069
0070 void calc_cluster_contribution(SvtxTrack* svtxtrack, PHG4Particle* truthparticle);
0071 unsigned int get_nclusters_contribution(SvtxTrack* svtxtrack, PHG4Particle* truthparticle);
0072 std::pair<unsigned int, unsigned int> get_layer_range_contribution(SvtxTrack* track, PHG4Particle* particle, unsigned int start_layer, unsigned int end_layer);
0073 unsigned int get_nclusters_contribution_by_layer(SvtxTrack* svtxtrack, PHG4Particle* truthparticle);
0074 unsigned int get_nwrongclusters_contribution(SvtxTrack* svtxtrack, PHG4Particle* truthparticle);
0075 unsigned int get_errors() { return _errors + _clustereval.get_errors(); }
0076
0077 void set_track_nodename(const std::string& name) { m_TrackNodeName = name; }
0078
0079 private:
0080 void get_node_pointers(PHCompositeNode* topNode);
0081 bool has_node_pointers();
0082
0083 std::vector<TrkrDefs::cluskey> get_track_ckeys(SvtxTrack* track);
0084
0085 SvtxClusterEval _clustereval;
0086 SvtxTrackMap* _trackmap = nullptr;
0087 PHG4TruthInfoContainer* _truthinfo = nullptr;
0088 const PHG4ParticleSvtxMap* _truthRecoMap = nullptr;
0089 const SvtxPHG4ParticleMap* _recoTruthMap = nullptr;
0090
0091 bool _strict = false;
0092 int _verbosity = 0;
0093 unsigned int _errors = 0;
0094
0095 bool _do_cache = true;
0096 bool _cache_track_from_cluster_exists = false;
0097 std::map<SvtxTrack*, std::set<PHG4Hit*> > _cache_all_truth_hits;
0098 std::map<SvtxTrack*, std::set<PHG4Particle*> > _cache_all_truth_particles;
0099 std::map<SvtxTrack*, PHG4Particle*> _cache_max_truth_particle_by_nclusters;
0100 std::map<PHG4Particle*, std::set<SvtxTrack*> > _cache_all_tracks_from_particle;
0101 std::map<PHG4Particle*, SvtxTrack*> _cache_best_track_from_particle;
0102 std::map<PHG4Hit*, std::set<SvtxTrack*> > _cache_all_tracks_from_g4hit;
0103 std::map<TrkrDefs::cluskey, std::set<SvtxTrack*> > _cache_all_tracks_from_cluster;
0104 std::map<TrkrDefs::cluskey, SvtxTrack*> _cache_best_track_from_cluster;
0105 std::map<std::pair<SvtxTrack*, PHG4Particle*>, unsigned int> _cache_get_nclusters_contribution;
0106 std::map<std::pair<SvtxTrack*, PHG4Particle*>, unsigned int> _cache_get_nclusters_contribution_by_layer;
0107 std::map<std::pair<SvtxTrack*, PHG4Particle*>, unsigned int> _cache_get_nwrongclusters_contribution;
0108 std::string m_TrackNodeName = "SvtxTrackMap";
0109 };
0110
0111 #endif