File indexing completed on 2024-04-06 12:30:41
0001
0002 #include "FWCore/Framework/interface/ESHandle.h"
0003
0004 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
0005 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
0006
0007 #include "SimGeneral/TrackingAnalysis/interface/PixelPSimHitSelector.h"
0008
0009 void PixelPSimHitSelector::select(PSimHitCollection &selection,
0010 edm::Event const &event,
0011 edm::EventSetup const &setup) const {
0012
0013 PSimHitCollectionMap::const_iterator pSimHitCollections = pSimHitCollectionMap_.find("pixel");
0014
0015
0016 if (pSimHitCollections == pSimHitCollectionMap_.end())
0017 return;
0018
0019
0020 edm::Handle<CrossingFrame<PSimHit>> cfPSimHits;
0021 std::vector<const CrossingFrame<PSimHit> *> cfPSimHitProductPointers;
0022
0023
0024 for (std::size_t i = 0; i < pSimHitCollections->second.size(); ++i) {
0025 event.getByLabel("mix", pSimHitCollections->second[i], cfPSimHits);
0026 cfPSimHitProductPointers.push_back(cfPSimHits.product());
0027 }
0028
0029
0030 std::unique_ptr<MixCollection<PSimHit>> pSimHits(new MixCollection<PSimHit>(cfPSimHitProductPointers));
0031
0032
0033 edm::ESHandle<SiPixelQuality> siPixelBadModule = setup.getHandle(badModuleToken_);
0034
0035
0036 std::vector<SiPixelQuality::disabledModuleType> badModules(siPixelBadModule->getBadComponentList());
0037 SiPixelQuality pixelQuality(badModules);
0038
0039
0040 for (MixCollection<PSimHit>::MixItr pSimHit = pSimHits->begin(); pSimHit != pSimHits->end(); ++pSimHit) {
0041 if (!pixelQuality.IsModuleBad(pSimHit->detUnitId()))
0042 selection.push_back(*pSimHit);
0043 }
0044 }