File indexing completed on 2023-03-17 10:56:14
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <iostream>
0011
0012
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "FWCore/Framework/interface/Event.h"
0015 #include "FWCore/Framework/interface/MakerMacros.h"
0016 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0017 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0018 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0019 #include "CondFormats/SiPixelObjects/interface/SiPixelFedCabling.h"
0020 #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h"
0021 #include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h"
0022
0023
0024 #include "DQMServices/Core/interface/DQMStore.h"
0025
0026
0027 #include "DataFormats/Common/interface/DetSetVector.h"
0028 #include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
0029 #include "DataFormats/SiPixelDetId/interface/PixelFEDChannel.h"
0030
0031
0032 #include "DQM/SiPixelPhase1Common/interface/SiPixelPhase1Base.h"
0033
0034 namespace {
0035
0036 class SiPixelPhase1DeadFEDChannels final : public SiPixelPhase1Base {
0037
0038 enum {
0039 DEADCHAN,
0040 DEADCHANROC
0041
0042 };
0043
0044 public:
0045 explicit SiPixelPhase1DeadFEDChannels(const edm::ParameterSet& conf);
0046 void analyze(const edm::Event&, const edm::EventSetup&) override;
0047
0048 private:
0049 edm::EDGetTokenT<PixelFEDChannelCollection> pixelFEDChannelCollectionToken_;
0050 edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> trackerGeomToken_;
0051 edm::ESGetToken<SiPixelFedCablingMap, SiPixelFedCablingMapRcd> cablingMapToken_;
0052
0053 bool firstEvent_;
0054 const TrackerGeometry* trackerGeometry_ = nullptr;
0055 const SiPixelFedCabling* cablingMap = nullptr;
0056 };
0057
0058 SiPixelPhase1DeadFEDChannels::SiPixelPhase1DeadFEDChannels(const edm::ParameterSet& iConfig)
0059 : SiPixelPhase1Base(iConfig) {
0060 pixelFEDChannelCollectionToken_ = consumes<PixelFEDChannelCollection>(edm::InputTag("siPixelDigis"));
0061 trackerGeomToken_ = esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>();
0062 cablingMapToken_ = esConsumes<SiPixelFedCablingMap, SiPixelFedCablingMapRcd>();
0063 firstEvent_ = true;
0064 };
0065
0066 void SiPixelPhase1DeadFEDChannels::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0067 if (!checktrigger(iEvent, iSetup, DCS))
0068 return;
0069
0070 if (firstEvent_) {
0071 edm::ESHandle<TrackerGeometry> tmpTkGeometry = iSetup.getHandle(trackerGeomToken_);
0072 trackerGeometry_ = &(*tmpTkGeometry);
0073
0074 edm::ESHandle<SiPixelFedCablingMap> pixelCabling = iSetup.getHandle(cablingMapToken_);
0075 cablingMap = pixelCabling.product();
0076
0077 firstEvent_ = false;
0078 }
0079
0080 edm::Handle<edmNew::DetSetVector<PixelFEDChannel> > input;
0081
0082 iEvent.getByToken(pixelFEDChannelCollectionToken_, input);
0083 if (!input.isValid())
0084 return;
0085
0086 for (const auto& disabledOnDetId : *input) {
0087 for (const auto& ch : disabledOnDetId) {
0088 sipixelobjects::CablingPathToDetUnit path = {ch.fed, ch.link, 0};
0089
0090 for (path.roc = 1; path.roc <= (ch.roc_last - ch.roc_first) + 1; path.roc++) {
0091 const sipixelobjects::PixelROC* roc = cablingMap->findItem(path);
0092 assert(roc != nullptr);
0093 assert(roc->rawId() == disabledOnDetId.detId());
0094
0095 const PixelGeomDetUnit* theGeomDet =
0096 dynamic_cast<const PixelGeomDetUnit*>(trackerGeometry_->idToDet(roc->rawId()));
0097 PixelTopology const* topology = &(theGeomDet->specificTopology());
0098 sipixelobjects::LocalPixel::RocRowCol local = {topology->rowsperroc() / 2,
0099 topology->colsperroc() / 2};
0100 sipixelobjects::GlobalPixel global = roc->toGlobal(sipixelobjects::LocalPixel(local));
0101 histo[DEADCHANROC].fill(disabledOnDetId.detId(), &iEvent, global.col, global.row);
0102 }
0103
0104 histo[DEADCHAN].fill(disabledOnDetId.detId(), &iEvent);
0105 }
0106 }
0107
0108 histo[DEADCHAN].executePerEventHarvesting(&iEvent);
0109 }
0110 }
0111
0112 DEFINE_FWK_MODULE(SiPixelPhase1DeadFEDChannels);