Back to home page

sPhenix code displayed by LXR

 
 

    


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   // access the clustereval (and its cached values)
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   // backtrace through to PHG4Hits
0055   std::set<PHG4Hit*> all_truth_hits(SvtxTrack* track);
0056 
0057   // backtrace through to PHG4Particles
0058   std::set<PHG4Particle*> all_truth_particles(SvtxTrack* track);
0059   PHG4Particle* max_truth_particle_by_nclusters(SvtxTrack* track);
0060 
0061   // forwardtrace through to SvtxTracks
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   // overlap calculations
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  // G4EVAL_SVTXTRACKEVAL_H