File indexing completed on 2023-03-17 10:57:06
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include <memory>
0019
0020 #include "DQM/SiTrackerPhase2/plugins/Phase2TrackerMonitorDigi.h"
0021
0022 #include "FWCore/Framework/interface/MakerMacros.h"
0023 #include "DataFormats/Common/interface/Handle.h"
0024
0025 #include "FWCore/ServiceRegistry/interface/Service.h"
0026 #include "FWCore/Utilities/interface/InputTag.h"
0027 #include "FWCore/Framework/interface/ESWatcher.h"
0028
0029 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0030 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0031 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0032 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0033 #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h"
0034
0035 #include "DataFormats/Phase2TrackerDigi/interface/Phase2TrackerDigi.h"
0036 #include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
0037 #include "DataFormats/SiPixelDigi/interface/PixelDigiCollection.h"
0038 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0039
0040
0041 #include "DQMServices/Core/interface/MonitorElement.h"
0042 #include "DQM/SiTrackerPhase2/interface/TrackerPhase2DQMUtil.h"
0043
0044 using Phase2TrackerGeomDetUnit = PixelGeomDetUnit;
0045
0046
0047
0048 Phase2TrackerMonitorDigi::Phase2TrackerMonitorDigi(const edm::ParameterSet& iConfig)
0049 : config_(iConfig),
0050 pixelFlag_(config_.getParameter<bool>("PixelPlotFillingFlag")),
0051 clsFlag_(config_.getParameter<bool>("StandAloneClusteriserFlag")),
0052 geomType_(config_.getParameter<std::string>("GeometryType")),
0053 otDigiSrc_(config_.getParameter<edm::InputTag>("OuterTrackerDigiSource")),
0054 itPixelDigiSrc_(config_.getParameter<edm::InputTag>("InnerPixelDigiSource")),
0055 otDigiToken_(consumes<edm::DetSetVector<Phase2TrackerDigi>>(otDigiSrc_)),
0056 itPixelDigiToken_(consumes<edm::DetSetVector<PixelDigi>>(itPixelDigiSrc_)),
0057 geomToken_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, edm::Transition::BeginRun>()),
0058 topoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd, edm::Transition::BeginRun>()) {
0059 edm::LogInfo("Phase2TrackerMonitorDigi") << ">>> Construct Phase2TrackerMonitorDigi ";
0060 }
0061
0062
0063
0064
0065 Phase2TrackerMonitorDigi::~Phase2TrackerMonitorDigi() {
0066
0067
0068 edm::LogInfo("Phase2TrackerMonitorDigi") << ">>> Destroy Phase2TrackerMonitorDigi ";
0069 }
0070
0071 void Phase2TrackerMonitorDigi::dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
0072 tkGeom_ = &iSetup.getData(geomToken_);
0073 tTopo_ = &iSetup.getData(topoToken_);
0074 }
0075
0076
0077
0078 void Phase2TrackerMonitorDigi::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0079 using namespace edm;
0080
0081
0082 const auto& pixDigiHandle = iEvent.getHandle(itPixelDigiToken_);
0083 const auto& otDigiHandle = iEvent.getHandle(otDigiToken_);
0084
0085
0086 edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
0087 if (theTkDigiGeomWatcher.check(iSetup)) {
0088 if (pixelFlag_)
0089 fillITPixelDigiHistos(pixDigiHandle);
0090 else
0091 fillOTDigiHistos(otDigiHandle);
0092 }
0093 }
0094 void Phase2TrackerMonitorDigi::fillITPixelDigiHistos(const edm::Handle<edm::DetSetVector<PixelDigi>> handle) {
0095 const edm::DetSetVector<PixelDigi>* digis = handle.product();
0096
0097 for (typename edm::DetSetVector<PixelDigi>::const_iterator DSViter = digis->begin(); DSViter != digis->end();
0098 DSViter++) {
0099 unsigned int rawid = DSViter->id;
0100 edm::LogInfo("Phase2TrackerMonitorDigi") << " Det Id = " << rawid;
0101
0102 int layer = tTopo_->getITPixelLayerNumber(rawid);
0103
0104 if (layer < 0)
0105 continue;
0106 const DetId detId(rawid);
0107
0108 std::string key = getHistoId(rawid, pixelFlag_);
0109 std::map<std::string, DigiMEs>::iterator pos = layerMEs.find(key);
0110
0111 if (pos == layerMEs.end())
0112 continue;
0113
0114 if (DetId(detId).det() != DetId::Detector::Tracker)
0115 continue;
0116
0117 const GeomDetUnit* gDetUnit = tkGeom_->idToDetUnit(detId);
0118 const GeomDet* geomDet = tkGeom_->idToDet(detId);
0119
0120 const Phase2TrackerGeomDetUnit* tkDetUnit = dynamic_cast<const Phase2TrackerGeomDetUnit*>(gDetUnit);
0121 int nRows = tkDetUnit->specificTopology().nrows();
0122 int nColumns = tkDetUnit->specificTopology().ncolumns();
0123 if (nRows * nColumns == 0)
0124 continue;
0125
0126 DigiMEs& local_mes = pos->second;
0127
0128 local_mes.nHitDetsPerLayer++;
0129
0130 int nDigi = 0;
0131 int row_last = -1;
0132 int col_last = -1;
0133 std::vector<Ph2DigiCluster> digiClusters;
0134 for (typename edm::DetSet<PixelDigi>::const_iterator di = DSViter->begin(); di != DSViter->end(); di++) {
0135 int col = di->column();
0136 int row = di->row();
0137 int adc = di->adc();
0138 if (geomDet) {
0139 MeasurementPoint mp(row + 0.5, col + 0.5);
0140 GlobalPoint pdPos = geomDet->surface().toGlobal(gDetUnit->topology().localPosition(mp));
0141 if (XYPositionMap)
0142 XYPositionMap->Fill(pdPos.x() * 10., pdPos.y() * 10.);
0143 if (RZPositionMap)
0144 RZPositionMap->Fill(pdPos.z() * 10., std::hypot(pdPos.x(), pdPos.y()) * 10.);
0145 }
0146 nDigi++;
0147 edm::LogInfo("Phase2TrackerMonitorDigi") << " column " << col << " row " << row << std::dec << std::endl;
0148 if (local_mes.ChargeXYMap)
0149 local_mes.ChargeXYMap->Fill(col, row, adc);
0150 if (local_mes.PositionOfDigisP)
0151 local_mes.PositionOfDigisP->Fill(row + 1, col + 1);
0152 if (local_mes.ChargeOfDigis)
0153 local_mes.ChargeOfDigis->Fill(adc);
0154 if (clsFlag_) {
0155 if (row_last == -1 || abs(row - row_last) != 1 || col != col_last) {
0156 Ph2DigiCluster dClus;
0157 dClus.position = row + 1;
0158 dClus.column = col;
0159 dClus.width = 1;
0160 dClus.charge = 255;
0161 digiClusters.push_back(dClus);
0162 } else {
0163 int pos = digiClusters.back().position + row + 1;
0164 int width = digiClusters.back().width + 1;
0165 pos /= width;
0166
0167 digiClusters.back().position = pos;
0168 digiClusters.back().width += 1;
0169 }
0170 edm::LogInfo("Phase2TrackerMonitorDigi") << " row " << row << " col " << col << " row_last " << row_last
0171 << " col_last " << col_last << " width " << digiClusters.back().width;
0172 row_last = row;
0173 col_last = col;
0174 }
0175 }
0176 if (local_mes.NumberOfDigisPerDet)
0177 local_mes.NumberOfDigisPerDet->Fill(nDigi);
0178 if (clsFlag_)
0179 fillDigiClusters(local_mes, digiClusters);
0180 local_mes.nDigiPerLayer += nDigi;
0181 float occupancy = 1.0;
0182 if (nRows * nColumns > 0)
0183 occupancy = nDigi * 1.0 / (nRows * nColumns);
0184 if (geomDet) {
0185 GlobalPoint gp = geomDet->surface().toGlobal(
0186 gDetUnit->topology().localPosition(MeasurementPoint(nRows / 2.0, nColumns / 2.0)));
0187 if (XYOccupancyMap)
0188 XYOccupancyMap->Fill(gp.x() * 10., gp.y() * 10, occupancy);
0189 if (RZOccupancyMap)
0190 RZOccupancyMap->Fill(gp.z() * 10., std::hypot(gp.x(), gp.y()) * 10., occupancy);
0191 if (local_mes.EtaOccupancyProfP)
0192 local_mes.EtaOccupancyProfP->Fill(gp.eta(), occupancy);
0193 }
0194
0195 if (local_mes.DigiOccupancyP)
0196 local_mes.DigiOccupancyP->Fill(occupancy);
0197 }
0198
0199 for (auto& ilayer : layerMEs) {
0200 DigiMEs& local_mes = ilayer.second;
0201 if (local_mes.TotalNumberOfDigisPerLayer)
0202 local_mes.TotalNumberOfDigisPerLayer->Fill(local_mes.nDigiPerLayer);
0203 if (local_mes.NumberOfHitDetectorsPerLayer)
0204 local_mes.NumberOfHitDetectorsPerLayer->Fill(local_mes.nHitDetsPerLayer);
0205 local_mes.nDigiPerLayer = 0;
0206 local_mes.nHitDetsPerLayer = 0;
0207 }
0208 }
0209 void Phase2TrackerMonitorDigi::fillOTDigiHistos(const edm::Handle<edm::DetSetVector<Phase2TrackerDigi>> handle) {
0210 const edm::DetSetVector<Phase2TrackerDigi>* digis = handle.product();
0211
0212 for (typename edm::DetSetVector<Phase2TrackerDigi>::const_iterator DSViter = digis->begin(); DSViter != digis->end();
0213 DSViter++) {
0214 unsigned int rawid = DSViter->id;
0215 DetId detId(rawid);
0216 edm::LogInfo("Phase2TrackerMonitorDigi") << " Det Id = " << rawid;
0217 int layer = tTopo_->getOTLayerNumber(rawid);
0218 if (layer < 0)
0219 continue;
0220 std::string key = getHistoId(rawid, pixelFlag_);
0221 std::map<std::string, DigiMEs>::iterator pos = layerMEs.find(key);
0222 if (pos == layerMEs.end())
0223 continue;
0224 DigiMEs& local_mes = pos->second;
0225
0226 local_mes.nHitDetsPerLayer++;
0227 if (DetId(detId).det() != DetId::Detector::Tracker)
0228 continue;
0229
0230 const GeomDetUnit* gDetUnit = tkGeom_->idToDetUnit(detId);
0231 const GeomDet* geomDet = tkGeom_->idToDet(detId);
0232
0233 const Phase2TrackerGeomDetUnit* tkDetUnit = dynamic_cast<const Phase2TrackerGeomDetUnit*>(gDetUnit);
0234 int nRows = tkDetUnit->specificTopology().nrows();
0235 int nColumns = tkDetUnit->specificTopology().ncolumns();
0236 if (nRows * nColumns == 0)
0237 continue;
0238
0239 int nDigi = 0;
0240 int row_last = -1;
0241 int col_last = -1;
0242 float frac_ot = 0.;
0243 std::vector<Ph2DigiCluster> digiClusters;
0244 for (typename edm::DetSet<Phase2TrackerDigi>::const_iterator di = DSViter->begin(); di != DSViter->end(); di++) {
0245 int col = di->column();
0246 int row = di->row();
0247 const DetId detId(rawid);
0248
0249 if (geomDet) {
0250 MeasurementPoint mp(row + 0.5, col + 0.5);
0251 GlobalPoint pdPos = geomDet->surface().toGlobal(gDetUnit->topology().localPosition(mp));
0252 if (XYPositionMap)
0253 XYPositionMap->Fill(pdPos.x() * 10., pdPos.y() * 10.);
0254 if (RZPositionMap)
0255 RZPositionMap->Fill(pdPos.z() * 10., std::hypot(pdPos.x(), pdPos.y()) * 10.);
0256 }
0257 nDigi++;
0258 if (di->overThreshold())
0259 frac_ot++;
0260 edm::LogInfo("Phase2TrackerMonitorDigi") << " column " << col << " row " << row << std::dec << std::endl;
0261 if (nColumns > 2 && local_mes.PositionOfDigisP)
0262 local_mes.PositionOfDigisP->Fill(row + 1, col + 1);
0263 if (nColumns <= 2 && local_mes.PositionOfDigisS)
0264 local_mes.PositionOfDigisS->Fill(row + 1, col + 1);
0265
0266 if (clsFlag_) {
0267 if (row_last == -1 || abs(row - row_last) != 1 || col != col_last) {
0268 Ph2DigiCluster dClus;
0269 dClus.position = row + 1;
0270 dClus.column = col;
0271 dClus.width = 1;
0272 dClus.charge = 255;
0273 digiClusters.push_back(dClus);
0274 } else {
0275 int pos = digiClusters.back().position + row + 1;
0276 int width = digiClusters.back().width + 1;
0277 pos /= width;
0278
0279 digiClusters.back().position = pos;
0280 digiClusters.back().width += 1;
0281 }
0282 row_last = row;
0283 col_last = col;
0284 edm::LogInfo("Phase2TrackerMonitorDigi") << " row " << row << " col " << col << " row_last " << row_last
0285 << " col_last " << col_last << " width " << digiClusters.back().width;
0286 }
0287 }
0288 if (local_mes.NumberOfDigisPerDet)
0289 local_mes.NumberOfDigisPerDet->Fill(nDigi);
0290 if (clsFlag_)
0291 fillDigiClusters(local_mes, digiClusters);
0292 local_mes.nDigiPerLayer += nDigi;
0293 if (nDigi)
0294 frac_ot /= nDigi;
0295 if (local_mes.FractionOfOvTBits && nColumns <= 2)
0296 local_mes.FractionOfOvTBits->Fill(frac_ot);
0297
0298 float occupancy = 1.0;
0299 if (nRows * nColumns > 0)
0300 occupancy = nDigi * 1.0 / (nRows * nColumns);
0301 if (geomDet) {
0302 GlobalPoint gp = geomDet->surface().toGlobal(gDetUnit->topology().localPosition(MeasurementPoint(0.0, 0.0)));
0303 if (XYOccupancyMap)
0304 XYOccupancyMap->Fill(gp.x() * 10., gp.y() * 10., occupancy);
0305 if (RZOccupancyMap)
0306 RZOccupancyMap->Fill(gp.z() * 10., std::hypot(gp.x(), gp.y()) * 10., occupancy);
0307 if (nColumns > 2) {
0308 if (local_mes.DigiOccupancyP)
0309 local_mes.DigiOccupancyP->Fill(occupancy);
0310 if (local_mes.EtaOccupancyProfP)
0311 local_mes.EtaOccupancyProfP->Fill(gp.eta(), occupancy);
0312 } else {
0313 if (local_mes.DigiOccupancyS)
0314 local_mes.DigiOccupancyS->Fill(occupancy);
0315 if (local_mes.EtaOccupancyProfS)
0316 local_mes.EtaOccupancyProfS->Fill(gp.eta(), occupancy);
0317 if (local_mes.FractionOfOvTBitsVsEta)
0318 local_mes.FractionOfOvTBitsVsEta->Fill(gp.eta(), frac_ot);
0319 }
0320 }
0321 }
0322
0323 for (auto& ilayer : layerMEs) {
0324 DigiMEs& local_mes = ilayer.second;
0325 if (local_mes.TotalNumberOfDigisPerLayer)
0326 local_mes.TotalNumberOfDigisPerLayer->Fill(local_mes.nDigiPerLayer);
0327 if (local_mes.NumberOfHitDetectorsPerLayer)
0328 local_mes.NumberOfHitDetectorsPerLayer->Fill(local_mes.nHitDetsPerLayer);
0329 local_mes.nDigiPerLayer = 0;
0330 local_mes.nHitDetsPerLayer = 0;
0331 }
0332 }
0333
0334
0335
0336 void Phase2TrackerMonitorDigi::bookHistograms(DQMStore::IBooker& ibooker,
0337 edm::Run const& iRun,
0338 edm::EventSetup const& iSetup) {
0339 std::string top_folder = config_.getParameter<std::string>("TopFolderName");
0340 edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
0341
0342 if (theTkDigiGeomWatcher.check(iSetup)) {
0343 for (auto const& det_u : tkGeom_->detUnits()) {
0344 unsigned int detId_raw = det_u->geographicalId().rawId();
0345 bookLayerHistos(ibooker, detId_raw);
0346 }
0347 }
0348 ibooker.cd();
0349 std::stringstream folder_name;
0350 folder_name << top_folder << "/"
0351 << "DigiMonitor";
0352 ibooker.setCurrentFolder(folder_name.str());
0353
0354 edm::ParameterSet Parameters = config_.getParameter<edm::ParameterSet>("XYPositionMapH");
0355 edm::ParameterSet ParametersOcc = config_.getParameter<edm::ParameterSet>("DigiOccupancyPH");
0356 if (Parameters.getParameter<bool>("switch"))
0357 XYPositionMap = ibooker.book2D("DigiXPosVsYPos",
0358 "DigiXPosVsYPos",
0359 Parameters.getParameter<int32_t>("Nxbins"),
0360 Parameters.getParameter<double>("xmin"),
0361 Parameters.getParameter<double>("xmax"),
0362 Parameters.getParameter<int32_t>("Nybins"),
0363 Parameters.getParameter<double>("ymin"),
0364 Parameters.getParameter<double>("ymax"));
0365 else
0366 XYPositionMap = nullptr;
0367
0368 if (Parameters.getParameter<bool>("switch") && ParametersOcc.getParameter<bool>("switch"))
0369 XYOccupancyMap = ibooker.bookProfile2D("OccupancyInXY",
0370 "OccupancyInXY",
0371 Parameters.getParameter<int32_t>("Nxbins"),
0372 Parameters.getParameter<double>("xmin"),
0373 Parameters.getParameter<double>("xmax"),
0374 Parameters.getParameter<int32_t>("Nybins"),
0375 Parameters.getParameter<double>("ymin"),
0376 Parameters.getParameter<double>("ymax"),
0377 ParametersOcc.getParameter<double>("xmin"),
0378 ParametersOcc.getParameter<double>("xmax"));
0379 else
0380 XYOccupancyMap = nullptr;
0381
0382 Parameters = config_.getParameter<edm::ParameterSet>("RZPositionMapH");
0383 if (Parameters.getParameter<bool>("switch"))
0384 RZPositionMap = ibooker.book2D("DigiRPosVsZPos",
0385 "DigiRPosVsZPos",
0386 Parameters.getParameter<int32_t>("Nxbins"),
0387 Parameters.getParameter<double>("xmin"),
0388 Parameters.getParameter<double>("xmax"),
0389 Parameters.getParameter<int32_t>("Nybins"),
0390 Parameters.getParameter<double>("ymin"),
0391 Parameters.getParameter<double>("ymax"));
0392 else
0393 RZPositionMap = nullptr;
0394
0395 if (Parameters.getParameter<bool>("switch") && ParametersOcc.getParameter<bool>("switch"))
0396 RZOccupancyMap = ibooker.bookProfile2D("OccupancyInRZ",
0397 "OccupancyInRZ",
0398 Parameters.getParameter<int32_t>("Nxbins"),
0399 Parameters.getParameter<double>("xmin"),
0400 Parameters.getParameter<double>("xmax"),
0401 Parameters.getParameter<int32_t>("Nybins"),
0402 Parameters.getParameter<double>("ymin"),
0403 Parameters.getParameter<double>("ymax"),
0404 ParametersOcc.getParameter<double>("xmin"),
0405 ParametersOcc.getParameter<double>("xmax"));
0406 else
0407 RZOccupancyMap = nullptr;
0408 }
0409
0410
0411
0412 void Phase2TrackerMonitorDigi::bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id) {
0413 int layer;
0414 if (pixelFlag_)
0415 layer = tTopo_->getITPixelLayerNumber(det_id);
0416 else
0417 layer = tTopo_->getOTLayerNumber(det_id);
0418
0419 if (layer < 0)
0420 return;
0421 std::string key = getHistoId(det_id, pixelFlag_);
0422 std::map<std::string, DigiMEs>::iterator pos = layerMEs.find(key);
0423
0424 if (pos == layerMEs.end()) {
0425 std::string top_folder = config_.getParameter<std::string>("TopFolderName");
0426 std::stringstream folder_name;
0427
0428
0429 bool isPStypeModForTEDD_1 =
0430 (!pixelFlag_ && layer > 100 && tTopo_->tidWheel(det_id) < 3 && tTopo_->tidRing(det_id) <= 10) ? true : false;
0431 bool isPStypeModForTEDD_2 =
0432 (!pixelFlag_ && layer > 100 && tTopo_->tidWheel(det_id) >= 3 && tTopo_->tidRing(det_id) <= 7) ? true : false;
0433
0434 bool isPtypeSensor =
0435 (pixelFlag_ || (layer < 4 || (layer > 6 && (isPStypeModForTEDD_1 || isPStypeModForTEDD_2)))) ? true : false;
0436
0437 ibooker.cd();
0438 ibooker.setCurrentFolder(top_folder + "/DigiMonitor/" + key);
0439 edm::LogInfo("Phase2TrackerMonitorDigi") << " Booking Histograms in : " << key;
0440
0441 std::ostringstream HistoName;
0442 DigiMEs local_mes;
0443
0444 local_mes.nDigiPerLayer = 0;
0445 local_mes.nHitDetsPerLayer = 0;
0446
0447 edm::ParameterSet Parameters = config_.getParameter<edm::ParameterSet>("NumberOfDigisPerDetH");
0448 edm::ParameterSet EtaParameters = config_.getParameter<edm::ParameterSet>("EtaH");
0449 HistoName.str("");
0450 HistoName << "NumberOfDigisPerDet";
0451 if (Parameters.getParameter<bool>("switch"))
0452 local_mes.NumberOfDigisPerDet = ibooker.book1D(HistoName.str(),
0453 HistoName.str(),
0454 Parameters.getParameter<int32_t>("Nbins"),
0455 Parameters.getParameter<double>("xmin"),
0456 Parameters.getParameter<double>("xmax"));
0457 else
0458 local_mes.NumberOfDigisPerDet = nullptr;
0459
0460 Parameters = config_.getParameter<edm::ParameterSet>("TotalNumberOfDigisPerLayerH");
0461 HistoName.str("");
0462 HistoName << "TotalNumberOfDigisPerLayer";
0463 if (Parameters.getParameter<bool>("switch"))
0464 local_mes.TotalNumberOfDigisPerLayer = ibooker.book1D(HistoName.str(),
0465 HistoName.str(),
0466 Parameters.getParameter<int32_t>("Nbins"),
0467 Parameters.getParameter<double>("xmin"),
0468 Parameters.getParameter<double>("xmax"));
0469 else
0470 local_mes.TotalNumberOfDigisPerLayer = nullptr;
0471
0472 Parameters = config_.getParameter<edm::ParameterSet>("NumberOfHitDetsPerLayerH");
0473 HistoName.str("");
0474 HistoName << "NumberOfHitDetectorsPerLayer";
0475 if (Parameters.getParameter<bool>("switch"))
0476 local_mes.NumberOfHitDetectorsPerLayer = ibooker.book1D(HistoName.str(),
0477 HistoName.str(),
0478 Parameters.getParameter<int32_t>("Nbins"),
0479 Parameters.getParameter<double>("xmin"),
0480 Parameters.getParameter<double>("xmax"));
0481 else
0482 local_mes.NumberOfHitDetectorsPerLayer = nullptr;
0483
0484
0485 if (pixelFlag_) {
0486 Parameters = config_.getParameter<edm::ParameterSet>("ChargeXYMapH");
0487 HistoName.str("");
0488 HistoName << "ChargeXYMap";
0489 if (Parameters.getParameter<bool>("switch"))
0490 local_mes.ChargeXYMap = ibooker.book2D(HistoName.str(),
0491 HistoName.str(),
0492 Parameters.getParameter<int32_t>("Nxbins"),
0493 Parameters.getParameter<double>("xmin"),
0494 Parameters.getParameter<double>("xmax"),
0495 Parameters.getParameter<int32_t>("Nybins"),
0496 Parameters.getParameter<double>("ymin"),
0497 Parameters.getParameter<double>("ymax"));
0498 else
0499 local_mes.ChargeXYMap = nullptr;
0500
0501 Parameters = config_.getParameter<edm::ParameterSet>("DigiChargeH");
0502 HistoName.str("");
0503 HistoName << "ChargeOfDigis";
0504 if (Parameters.getParameter<bool>("switch"))
0505 local_mes.ChargeOfDigis = ibooker.book1D(HistoName.str(),
0506 HistoName.str(),
0507 Parameters.getParameter<int32_t>("Nbins"),
0508 Parameters.getParameter<double>("xmin"),
0509 Parameters.getParameter<double>("xmax"));
0510 else
0511 local_mes.ChargeOfDigis = nullptr;
0512
0513
0514 if (clsFlag_) {
0515 edm::ParameterSet WidthParameters = config_.getParameter<edm::ParameterSet>("ClusterWidthH");
0516 HistoName.str("");
0517 HistoName << "ChargeOfDigisVsWidth";
0518 if (Parameters.getParameter<bool>("switch") && WidthParameters.getParameter<bool>("switch"))
0519 local_mes.ChargeOfDigisVsWidth = ibooker.book2D(HistoName.str(),
0520 HistoName.str(),
0521 Parameters.getParameter<int32_t>("Nbins"),
0522 Parameters.getParameter<double>("xmin"),
0523 Parameters.getParameter<double>("xmax"),
0524 WidthParameters.getParameter<int32_t>("Nbins"),
0525 WidthParameters.getParameter<double>("xmin"),
0526 WidthParameters.getParameter<double>("xmax"));
0527 else
0528 local_mes.ChargeOfDigisVsWidth = nullptr;
0529 }
0530 }
0531
0532 else {
0533 Parameters = config_.getParameter<edm::ParameterSet>("DigiOccupancySH");
0534 HistoName.str("");
0535 HistoName << "DigiOccupancyS";
0536 if (Parameters.getParameter<bool>("switch"))
0537 local_mes.DigiOccupancyS = ibooker.book1D(HistoName.str(),
0538 HistoName.str(),
0539 Parameters.getParameter<int32_t>("Nbins"),
0540 Parameters.getParameter<double>("xmin"),
0541 Parameters.getParameter<double>("xmax"));
0542 else
0543 local_mes.DigiOccupancyS = nullptr;
0544
0545 HistoName.str("");
0546 HistoName << "DigiOccupancyVsEtaS";
0547 if (Parameters.getParameter<bool>("switch") && EtaParameters.getParameter<bool>("switch"))
0548 local_mes.EtaOccupancyProfS = ibooker.bookProfile(HistoName.str(),
0549 HistoName.str(),
0550 EtaParameters.getParameter<int32_t>("Nbins"),
0551 EtaParameters.getParameter<double>("xmin"),
0552 EtaParameters.getParameter<double>("xmax"),
0553 Parameters.getParameter<double>("xmin"),
0554 Parameters.getParameter<double>("xmax"),
0555 "");
0556 else
0557 local_mes.EtaOccupancyProfS = nullptr;
0558
0559 Parameters = config_.getParameter<edm::ParameterSet>("PositionOfDigisSH");
0560 HistoName.str("");
0561 HistoName << "PositionOfDigisS";
0562 if (Parameters.getParameter<bool>("switch"))
0563 local_mes.PositionOfDigisS = ibooker.book2D(HistoName.str(),
0564 HistoName.str(),
0565 Parameters.getParameter<int32_t>("Nxbins"),
0566 Parameters.getParameter<double>("xmin"),
0567 Parameters.getParameter<double>("xmax"),
0568 Parameters.getParameter<int32_t>("Nybins"),
0569 Parameters.getParameter<double>("ymin"),
0570 Parameters.getParameter<double>("ymax"));
0571 else
0572 local_mes.PositionOfDigisS = nullptr;
0573
0574
0575 if (clsFlag_) {
0576 Parameters = config_.getParameter<edm::ParameterSet>("ClusterPositionSH");
0577 HistoName.str("");
0578 HistoName << "ClusterPositionS";
0579 if (Parameters.getParameter<bool>("switch"))
0580 local_mes.ClusterPositionS = ibooker.book2D(HistoName.str(),
0581 HistoName.str(),
0582 Parameters.getParameter<int32_t>("Nxbins"),
0583 Parameters.getParameter<double>("xmin"),
0584 Parameters.getParameter<double>("xmax"),
0585 Parameters.getParameter<int32_t>("Nybins"),
0586 Parameters.getParameter<double>("ymin"),
0587 Parameters.getParameter<double>("ymax"));
0588 else
0589 local_mes.ClusterPositionS = nullptr;
0590 }
0591
0592
0593 if (isPStypeModForTEDD_1 || isPStypeModForTEDD_2) {
0594 HistoName.str("");
0595 HistoName << "FractionOfOverThresholdDigis";
0596 local_mes.FractionOfOvTBits = ibooker.book1D(HistoName.str(), HistoName.str(), 11, -0.05, 1.05);
0597
0598 Parameters = config_.getParameter<edm::ParameterSet>("NumberOfDigisPerDetH");
0599 HistoName.str("");
0600 HistoName << "FractionOfOverThresholdDigisVaEta";
0601 if (Parameters.getParameter<bool>("switch") && EtaParameters.getParameter<bool>("switch"))
0602 local_mes.FractionOfOvTBitsVsEta = ibooker.bookProfile(HistoName.str(),
0603 HistoName.str(),
0604 EtaParameters.getParameter<int32_t>("Nbins"),
0605 EtaParameters.getParameter<double>("xmin"),
0606 EtaParameters.getParameter<double>("xmax"),
0607 Parameters.getParameter<double>("xmin"),
0608 Parameters.getParameter<double>("xmax"),
0609 "");
0610 else
0611 local_mes.FractionOfOvTBitsVsEta = nullptr;
0612 }
0613 }
0614
0615
0616 if (isPtypeSensor) {
0617 Parameters = config_.getParameter<edm::ParameterSet>("DigiOccupancyPH");
0618 HistoName.str("");
0619 HistoName << "DigiOccupancyP";
0620 if (Parameters.getParameter<bool>("switch"))
0621 local_mes.DigiOccupancyP = ibooker.book1D(HistoName.str(),
0622 HistoName.str(),
0623 Parameters.getParameter<int32_t>("Nbins"),
0624 Parameters.getParameter<double>("xmin"),
0625 Parameters.getParameter<double>("xmax"));
0626 else
0627 local_mes.DigiOccupancyP = nullptr;
0628
0629 HistoName.str("");
0630 HistoName << "DigiOccupancyVsEtaP";
0631 if (Parameters.getParameter<bool>("switch") && EtaParameters.getParameter<bool>("switch"))
0632 local_mes.EtaOccupancyProfP = ibooker.bookProfile(HistoName.str(),
0633 HistoName.str(),
0634 EtaParameters.getParameter<int32_t>("Nbins"),
0635 EtaParameters.getParameter<double>("xmin"),
0636 EtaParameters.getParameter<double>("xmax"),
0637 Parameters.getParameter<double>("xmin"),
0638 Parameters.getParameter<double>("xmax"),
0639 "");
0640 else
0641 local_mes.EtaOccupancyProfP = nullptr;
0642
0643 Parameters = config_.getParameter<edm::ParameterSet>("PositionOfDigisPH");
0644 HistoName.str("");
0645 HistoName << "PositionOfDigisP";
0646 if (Parameters.getParameter<bool>("switch"))
0647 local_mes.PositionOfDigisP = ibooker.book2D(HistoName.str(),
0648 HistoName.str(),
0649 Parameters.getParameter<int32_t>("Nxbins"),
0650 Parameters.getParameter<double>("xmin"),
0651 Parameters.getParameter<double>("xmax"),
0652 Parameters.getParameter<int32_t>("Nybins"),
0653 Parameters.getParameter<double>("ymin"),
0654 Parameters.getParameter<double>("ymax"));
0655 else
0656 local_mes.PositionOfDigisP = nullptr;
0657
0658 if (clsFlag_) {
0659 Parameters = config_.getParameter<edm::ParameterSet>("ClusterPositionPH");
0660 HistoName.str("");
0661 HistoName << "ClusterPositionP";
0662 if (Parameters.getParameter<bool>("switch"))
0663 local_mes.ClusterPositionP = ibooker.book2D(HistoName.str(),
0664 HistoName.str(),
0665 Parameters.getParameter<int32_t>("Nxbins"),
0666 Parameters.getParameter<double>("xmin"),
0667 Parameters.getParameter<double>("xmax"),
0668 Parameters.getParameter<int32_t>("Nybins"),
0669 Parameters.getParameter<double>("ymin"),
0670 Parameters.getParameter<double>("ymax"));
0671 else
0672 local_mes.ClusterPositionP = nullptr;
0673 }
0674 }
0675
0676
0677 if (clsFlag_) {
0678 Parameters = config_.getParameter<edm::ParameterSet>("NumberOfClustersPerDetH");
0679 HistoName.str("");
0680 HistoName << "NumberOfClustersPerDet";
0681 if (Parameters.getParameter<bool>("switch"))
0682 local_mes.NumberOfClustersPerDet = ibooker.book1D(HistoName.str(),
0683 HistoName.str(),
0684 Parameters.getParameter<int32_t>("Nbins"),
0685 Parameters.getParameter<double>("xmin"),
0686 Parameters.getParameter<double>("xmax"));
0687 else
0688 local_mes.NumberOfClustersPerDet = nullptr;
0689
0690 Parameters = config_.getParameter<edm::ParameterSet>("ClusterWidthH");
0691 HistoName.str("");
0692 HistoName << "ClusterWidth";
0693 if (Parameters.getParameter<bool>("switch"))
0694 local_mes.ClusterWidth = ibooker.book1D(HistoName.str(),
0695 HistoName.str(),
0696 Parameters.getParameter<int32_t>("Nbins"),
0697 Parameters.getParameter<double>("xmin"),
0698 Parameters.getParameter<double>("xmax"));
0699 else
0700 local_mes.ClusterWidth = nullptr;
0701 }
0702
0703 layerMEs.insert(std::make_pair(key, local_mes));
0704 }
0705 }
0706
0707 std::string Phase2TrackerMonitorDigi::getHistoId(uint32_t det_id, bool flag) {
0708 if (flag)
0709 return phase2tkutil::getITHistoId(det_id, tTopo_);
0710 else
0711 return phase2tkutil::getOTHistoId(det_id, tTopo_);
0712 }
0713
0714 void Phase2TrackerMonitorDigi::fillDigiClusters(DigiMEs& mes, std::vector<Ph2DigiCluster>& digi_clusters) {
0715 int nclus = digi_clusters.size();
0716 if (mes.NumberOfClustersPerDet)
0717 mes.NumberOfClustersPerDet->Fill(nclus);
0718 for (auto& iclus : digi_clusters) {
0719 if (mes.ClusterWidth)
0720 mes.ClusterWidth->Fill(iclus.width);
0721 if (pixelFlag_ && mes.ChargeOfDigisVsWidth)
0722 mes.ChargeOfDigisVsWidth->Fill(iclus.charge, iclus.width);
0723 if (mes.ClusterPositionP)
0724 mes.ClusterPositionP->Fill(iclus.position, iclus.column + 1);
0725 if (!pixelFlag_ && mes.ClusterPositionS && iclus.column <= 2)
0726 mes.ClusterPositionS->Fill(iclus.position, iclus.column + 1);
0727 }
0728 }
0729
0730 DEFINE_FWK_MODULE(Phase2TrackerMonitorDigi);