File indexing completed on 2024-04-06 12:30:48
0001 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
0002 #include "SimMuon/MCTruth/interface/PSimHitMap.h"
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004
0005 void PSimHitMap::fill(const edm::Event &e) {
0006 theMap.clear();
0007 edm::Handle<CrossingFrame<PSimHit>> cf;
0008 LogTrace("PSimHitMap") << "getting CrossingFrame<PSimHit> collection ";
0009 e.getByToken(sh_token, cf);
0010
0011 MixCollection<PSimHit> simHits(cf.product());
0012 LogTrace("PSimHitMap") << "... size = " << simHits.size();
0013
0014
0015 for (MixCollection<PSimHit>::MixItr hitItr = simHits.begin(); hitItr != simHits.end(); ++hitItr) {
0016 theMap[hitItr->detUnitId()].push_back(*hitItr);
0017 }
0018 }
0019
0020 const edm::PSimHitContainer &PSimHitMap::hits(int detId) const {
0021 std::map<int, edm::PSimHitContainer>::const_iterator mapItr = theMap.find(detId);
0022 if (mapItr != theMap.end()) {
0023 return mapItr->second;
0024 } else {
0025 return theEmptyContainer;
0026 }
0027 }
0028
0029 std::vector<int> PSimHitMap::detsWithHits() const {
0030 std::vector<int> result;
0031 result.reserve(theMap.size());
0032 for (std::map<int, edm::PSimHitContainer>::const_iterator mapItr = theMap.begin(), mapEnd = theMap.end();
0033 mapItr != mapEnd;
0034 ++mapItr) {
0035 result.push_back(mapItr->first);
0036 }
0037 return result;
0038 }