CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/SimMuon/MCTruth/src/PSimHitMap.cc

Go to the documentation of this file.
00001 #include "SimMuon/MCTruth/interface/PSimHitMap.h"
00002 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
00003 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
00004 
00005 PSimHitMap::PSimHitMap(const edm::InputTag & collectionTag)
00006 :  theMap(),
00007    theEmptyContainer(),  
00008    simHitsTag(collectionTag)
00009 {
00010 }
00011 
00012 
00013 void PSimHitMap::fill(const edm::Event & e)
00014 {
00015   theMap.clear();
00016   edm::Handle<CrossingFrame<PSimHit> > cf;
00017   LogTrace("PSimHitMap") <<"getting CrossingFrame<PSimHit> collection - "<<simHitsTag;
00018   e.getByLabel(simHitsTag, cf);
00019 
00020   MixCollection<PSimHit> simHits(cf.product());
00021   LogTrace("PSimHitMap") <<"... size = "<<simHits.size();
00022 
00023   // arrange the hits by detUnit
00024   for(MixCollection<PSimHit>::MixItr hitItr = simHits.begin();
00025       hitItr != simHits.end(); ++hitItr)
00026   {
00027     theMap[hitItr->detUnitId()].push_back(*hitItr);
00028   }
00029 }
00030 
00031 
00032 const edm::PSimHitContainer & PSimHitMap::hits(int detId) const
00033 {
00034   std::map<int, edm::PSimHitContainer>::const_iterator mapItr
00035     = theMap.find(detId);
00036   if(mapItr != theMap.end())
00037   {
00038     return mapItr->second;
00039   }
00040   else
00041   {
00042     return theEmptyContainer;
00043   }
00044 }
00045 
00046 
00047 std::vector<int> PSimHitMap::detsWithHits() const 
00048 {
00049   std::vector<int> result;
00050   result.reserve(theMap.size());
00051   for(std::map<int, edm::PSimHitContainer>::const_iterator mapItr = theMap.begin(),
00052       mapEnd = theMap.end();
00053       mapItr != mapEnd;
00054       ++mapItr)
00055   {
00056     result.push_back(mapItr->first);
00057   }
00058   return result;
00059 } 
00060      
00061