std::set<PHG4Particle*> SvtxVertexEval::all_truth_particles(SvtxVertex* vertex) { if ((_do_cache) && (_cache_all_truth_particles.find(vertex) != _cache_all_truth_particles.end())) { return _cache_all_truth_particles[vertex]; } SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(_topNode,"SvtxTrackMap"); if (!trackmap) { cerr << PHWHERE << " ERROR: Can't find SvtxTrackMap" << endl; exit(-1); } std::set<PHG4Particle*> all_particles; // loop over all tracks on vertex for (SvtxVertex::TrackIter iter = vertex->begin_tracks(); iter != vertex->end_tracks(); ++iter) { SvtxTrack* track = trackmap->get(*iter); all_particles.insert(_trackeval.max_truth_particle_by_nclusters(track)); } if (_do_cache) _cache_all_truth_particles.insert(make_pair(vertex,all_particles)); return all_particles; }
// overlap calculations unsigned int SvtxVertexEval::get_ntracks_contribution(SvtxVertex* vertex, PHG4VtxPoint* truthpoint) { if ((_do_cache) && (_cache_get_ntracks_contribution.find(make_pair(vertex,truthpoint)) != _cache_get_ntracks_contribution.end())) { return _cache_get_ntracks_contribution[make_pair(vertex,truthpoint)]; } SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(_topNode,"SvtxTrackMap"); if (!trackmap) { cerr << PHWHERE << " ERROR: Can't find SvtxTrackMap" << endl; exit(-1); } PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(_topNode,"G4TruthInfo"); if (!truthinfo) { cerr << PHWHERE << " ERROR: Can't find G4TruthInfo" << endl; exit(-1); } unsigned int ntracks = 0; for (SvtxVertex::TrackIter iter = vertex->begin_tracks(); iter != vertex->end_tracks(); ++iter) { SvtxTrack* track = trackmap->get(*iter); PHG4Particle* particle = _trackeval.max_truth_particle_by_nclusters(track); // only consider primary particles PHG4TruthInfoContainer::Map primarymap = truthinfo->GetPrimaryMap(); if (primarymap.find(particle->get_track_id()) == primarymap.end()) continue; PHG4VtxPoint* candidate = truthinfo->GetPrimaryVtx(particle->get_vtx_id()); if (candidate->get_id() == truthpoint->get_id()) ++ntracks; } if (_do_cache) _cache_get_ntracks_contribution.insert(make_pair(make_pair(vertex,truthpoint),ntracks)); return ntracks; }