diff --git a/RecoTracker/MkFit/interface/MkFitGeometry.h b/RecoTracker/MkFit/interface/MkFitGeometry.h index 1fe5b6447580e..c7cd6bef2b7ed 100644 --- a/RecoTracker/MkFit/interface/MkFitGeometry.h +++ b/RecoTracker/MkFit/interface/MkFitGeometry.h @@ -36,6 +36,7 @@ class MkFitGeometry { mkfit::IterationsInfo const& iterationsInfo() const { return *iterationsInfo_; } const std::vector& detLayers() const { return dets_; } unsigned int uniqueIdInLayer(int layer, unsigned int detId) const { return detIdToShortId_.at(layer).at(detId); } + const TrackerTopology* topology() const { return ttopo_; } private: const TrackerTopology* ttopo_; diff --git a/RecoTracker/MkFit/plugins/MkFitEventOfHitsProducer.cc b/RecoTracker/MkFit/plugins/MkFitEventOfHitsProducer.cc index 270bce35fe048..ed0ef5601db74 100644 --- a/RecoTracker/MkFit/plugins/MkFitEventOfHitsProducer.cc +++ b/RecoTracker/MkFit/plugins/MkFitEventOfHitsProducer.cc @@ -12,9 +12,15 @@ #include "RecoTracker/MkFit/interface/MkFitHitWrapper.h" #include "RecoTracker/Record/interface/TrackerRecoGeometryRecord.h" +#include "CalibFormats/SiStripObjects/interface/SiStripQuality.h" +#include "CalibTracker/Records/interface/SiStripQualityRcd.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "DataFormats/TrackerCommon/interface/TrackerDetSide.h" + // mkFit includes #include "mkFit/HitStructures.h" #include "mkFit/MkStdSeqs.h" +#include "LayerNumberConverter.h" class MkFitEventOfHitsProducer : public edm::global::EDProducer<> { public: @@ -35,6 +41,8 @@ class MkFitEventOfHitsProducer : public edm::global::EDProducer<> { const edm::EDGetTokenT pixelClusterIndexToHitToken_; const edm::EDGetTokenT stripClusterIndexToHitToken_; const edm::ESGetToken mkFitGeomToken_; + const edm::ESGetToken qualityToken_; + const edm::ESGetToken geomToken_; const edm::EDPutTokenT putToken_; }; @@ -44,6 +52,8 @@ MkFitEventOfHitsProducer::MkFitEventOfHitsProducer(edm::ParameterSet const& iCon pixelClusterIndexToHitToken_{consumes(iConfig.getParameter("pixelHits"))}, stripClusterIndexToHitToken_{consumes(iConfig.getParameter("stripHits"))}, mkFitGeomToken_{esConsumes()}, + qualityToken_{esConsumes()}, + geomToken_{esConsumes()}, putToken_{produces()} {} void MkFitEventOfHitsProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -63,6 +73,23 @@ void MkFitEventOfHitsProducer::produce(edm::StreamID iID, edm::Event& iEvent, co auto eventOfHits = std::make_unique(mkFitGeom.trackerInfo()); mkfit::StdSeq::Cmssw_LoadHits_Begin(*eventOfHits, {&pixelHits.hits(), &stripHits.hits()}); + std::vector deadvectors(mkFitGeom.layerNumberConverter().nLayers()); + const auto& siStripQuality = iSetup.getData(qualityToken_); + const auto& trackerGeom = iSetup.getData(geomToken_); + const auto& badStrips = siStripQuality.getBadComponentList(); + for (const auto& bs : badStrips) { + const auto& surf = trackerGeom.idToDet(DetId(bs.detid))->surface(); + const DetId detid(bs.detid); + bool isBarrel = (mkFitGeom.topology()->side(detid) == static_cast(TrackerDetSide::Barrel)); + const auto ilay = mkFitGeom.mkFitLayerNumber(detid); + //dump content of deadmodules.h in standalone setup + // std::cout << "deadvectors["<