File indexing completed on 2024-09-11 04:32:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <memory>
0011 #include <map>
0012 #include <vector>
0013 #include <algorithm>
0014 #include "FWCore/Framework/interface/ESWatcher.h"
0015 #include "FWCore/Framework/interface/Frameworkfwd.h"
0016 #include "FWCore/Framework/interface/Event.h"
0017 #include "FWCore/Framework/interface/MakerMacros.h"
0018 #include "FWCore/Framework/interface/ESHandle.h"
0019 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0020 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0021 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0022 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0023 #include "FWCore/ServiceRegistry/interface/Service.h"
0024 #include "FWCore/Utilities/interface/InputTag.h"
0025 #include "DataFormats/Common/interface/DetSetVector.h"
0026 #include "DataFormats/Common/interface/DetSetVectorNew.h"
0027 #include "DataFormats/Common/interface/Handle.h"
0028 #include "DataFormats/DetId/interface/DetId.h"
0029 #include "DataFormats/GeometrySurface/interface/LocalError.h"
0030 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0031 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0032 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h"
0033 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0034 #include "Geometry/CommonDetUnit/interface/TrackerGeomDet.h"
0035 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0036 #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h"
0037 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0038 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0039 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0040
0041 #include "DQMServices/Core/interface/MonitorElement.h"
0042 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0043 #include "DQMServices/Core/interface/DQMStore.h"
0044
0045 class Phase2ITMonitorRecHit : public DQMEDAnalyzer {
0046 public:
0047 explicit Phase2ITMonitorRecHit(const edm::ParameterSet&);
0048 ~Phase2ITMonitorRecHit() override;
0049 void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) override;
0050 void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
0051 void dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) override;
0052 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0053
0054 private:
0055 void fillITHistos(const edm::Event& iEvent);
0056 void bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id, std::string& subdir);
0057
0058 edm::ParameterSet config_;
0059 std::string geomType_;
0060 const edm::EDGetTokenT<SiPixelRecHitCollection> tokenRecHitsIT_;
0061 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
0062 const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoToken_;
0063 const TrackerGeometry* tkGeom_ = nullptr;
0064 const TrackerTopology* tTopo_ = nullptr;
0065 static constexpr float million = 1e6;
0066 MonitorElement* numberRecHits_;
0067 MonitorElement* globalXY_barrel_;
0068 MonitorElement* globalXY_endcap_;
0069 MonitorElement* globalRZ_barrel_;
0070 MonitorElement* globalRZ_endcap_;
0071
0072 struct RecHitME {
0073 MonitorElement* numberRecHits = nullptr;
0074 MonitorElement* globalPosXY = nullptr;
0075 MonitorElement* globalPosRZ = nullptr;
0076 MonitorElement* localPosXY = nullptr;
0077 MonitorElement* posX = nullptr;
0078 MonitorElement* posY = nullptr;
0079 MonitorElement* poserrX = nullptr;
0080 MonitorElement* poserrY = nullptr;
0081 MonitorElement* clusterSizeX = nullptr;
0082 MonitorElement* clusterSizeY = nullptr;
0083 };
0084 std::map<std::string, RecHitME> layerMEs_;
0085 };
0086 #include "DQM/SiTrackerPhase2/interface/TrackerPhase2DQMUtil.h"
0087
0088 Phase2ITMonitorRecHit::Phase2ITMonitorRecHit(const edm::ParameterSet& iConfig)
0089 : config_(iConfig),
0090 tokenRecHitsIT_(consumes<SiPixelRecHitCollection>(iConfig.getParameter<edm::InputTag>("rechitsSrc"))),
0091 geomToken_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, edm::Transition::BeginRun>()),
0092 topoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd, edm::Transition::BeginRun>()) {
0093 edm::LogInfo("Phase2ITMonitorRecHit") << ">>> Construct Phase2ITMonitorRecHit ";
0094 }
0095
0096 Phase2ITMonitorRecHit::~Phase2ITMonitorRecHit() {
0097 edm::LogInfo("Phase2ITMonitorRecHit") << ">>> Destroy Phase2ITMonitorRecHit ";
0098 }
0099
0100 void Phase2ITMonitorRecHit::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { fillITHistos(iEvent); }
0101
0102 void Phase2ITMonitorRecHit::fillITHistos(const edm::Event& iEvent) {
0103
0104 const auto& rechits = iEvent.getHandle(tokenRecHitsIT_);
0105 if (!rechits.isValid())
0106 return;
0107 std::map<std::string, unsigned int> nrechitLayerMap;
0108 unsigned long int nTotrechitsinevt = 0;
0109
0110 for (const auto& DSViter : *rechits) {
0111
0112 unsigned int rawid(DSViter.detId());
0113 DetId detId(rawid);
0114
0115 const GeomDetUnit* geomDetunit(tkGeom_->idToDetUnit(detId));
0116 if (!geomDetunit)
0117 continue;
0118 std::string key = phase2tkutil::getITHistoId(detId.rawId(), tTopo_);
0119 nTotrechitsinevt += DSViter.size();
0120 auto counterDet = nrechitLayerMap.find(key);
0121 if (nrechitLayerMap.find(key) == nrechitLayerMap.end()) {
0122 nrechitLayerMap.emplace(key, DSViter.size());
0123 } else
0124 counterDet->second += DSViter.size();
0125
0126
0127 for (const auto& rechit : DSViter) {
0128 LocalPoint lp = rechit.localPosition();
0129 Global3DPoint globalPos = geomDetunit->surface().toGlobal(lp);
0130
0131 double gx = globalPos.x() * 10.;
0132 double gy = globalPos.y() * 10.;
0133 double gz = globalPos.z() * 10.;
0134 double gr = globalPos.perp() * 10.;
0135
0136 if (geomDetunit->subDetector() == GeomDetEnumerators::SubDetector::P2PXB) {
0137 globalXY_barrel_->Fill(gx, gy);
0138 globalRZ_barrel_->Fill(gz, gr);
0139 } else if (geomDetunit->subDetector() == GeomDetEnumerators::SubDetector::P2PXEC) {
0140 globalXY_endcap_->Fill(gx, gy);
0141 globalRZ_endcap_->Fill(gz, gr);
0142 }
0143
0144 if (layerMEs_[key].clusterSizeX)
0145 layerMEs_[key].clusterSizeX->Fill(rechit.cluster()->sizeX());
0146 if (layerMEs_[key].clusterSizeY)
0147 layerMEs_[key].clusterSizeY->Fill(rechit.cluster()->sizeY());
0148 if (layerMEs_[key].globalPosXY)
0149 layerMEs_[key].globalPosXY->Fill(gx, gy);
0150 if (layerMEs_[key].globalPosRZ)
0151 layerMEs_[key].globalPosRZ->Fill(gz, gr);
0152 if (layerMEs_[key].localPosXY)
0153 layerMEs_[key].localPosXY->Fill(lp.x(), lp.y());
0154 if (layerMEs_[key].posX)
0155 layerMEs_[key].posX->Fill(lp.x());
0156 if (layerMEs_[key].posY)
0157 layerMEs_[key].posY->Fill(lp.y());
0158 float eta = geomDetunit->surface().toGlobal(lp).eta();
0159 if (layerMEs_[key].poserrX)
0160 layerMEs_[key].poserrX->Fill(eta, million * rechit.localPositionError().xx());
0161 if (layerMEs_[key].poserrY)
0162 layerMEs_[key].poserrY->Fill(eta, million * rechit.localPositionError().yy());
0163 }
0164 }
0165
0166
0167 numberRecHits_->Fill(nTotrechitsinevt);
0168
0169 for (const auto& lme : nrechitLayerMap)
0170 if (layerMEs_[lme.first].numberRecHits)
0171 layerMEs_[lme.first].numberRecHits->Fill(lme.second);
0172 }
0173
0174 void Phase2ITMonitorRecHit::dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
0175 tkGeom_ = &iSetup.getData(geomToken_);
0176 tTopo_ = &iSetup.getData(topoToken_);
0177 }
0178
0179 void Phase2ITMonitorRecHit::bookHistograms(DQMStore::IBooker& ibooker,
0180 edm::Run const& iRun,
0181 edm::EventSetup const& iSetup) {
0182 std::string top_folder = config_.getParameter<std::string>("TopFolderName");
0183 ibooker.cd();
0184 edm::LogInfo("Phase2ITMonitorRecHit") << " Booking Histograms in : " << top_folder;
0185 std::string dir = top_folder;
0186 ibooker.setCurrentFolder(dir);
0187
0188 numberRecHits_ =
0189 phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalNumberRecHits"), ibooker);
0190
0191 globalXY_barrel_ =
0192 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionXY_PXB"), ibooker);
0193
0194 globalRZ_barrel_ =
0195 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionRZ_PXB"), ibooker);
0196
0197 globalXY_endcap_ =
0198 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionXY_PXEC"), ibooker);
0199
0200 globalRZ_endcap_ =
0201 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionRZ_PXEC"), ibooker);
0202
0203
0204 edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
0205 if (theTkDigiGeomWatcher.check(iSetup)) {
0206 for (auto const& det_u : tkGeom_->detUnits()) {
0207
0208 if (!(det_u->subDetector() == GeomDetEnumerators::SubDetector::P2PXB ||
0209 det_u->subDetector() == GeomDetEnumerators::SubDetector::P2PXEC))
0210 continue;
0211 unsigned int detId_raw = det_u->geographicalId().rawId();
0212 edm::LogInfo("Phase2ITMonitorRecHit") << "Detid:" << detId_raw << "\tsubdet=" << det_u->subDetector()
0213 << "\t key=" << phase2tkutil::getITHistoId(detId_raw, tTopo_) << std::endl;
0214 bookLayerHistos(ibooker, detId_raw, dir);
0215 }
0216 }
0217 }
0218
0219 void Phase2ITMonitorRecHit::bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id, std::string& subdir) {
0220 std::string key = phase2tkutil::getITHistoId(det_id, tTopo_);
0221 if (key.empty())
0222 return;
0223 if (layerMEs_.find(key) == layerMEs_.end()) {
0224 ibooker.cd();
0225 RecHitME local_histos;
0226 ibooker.setCurrentFolder(subdir + "/" + key);
0227 edm::LogInfo("Phase2ITMonitorRecHit") << " Booking Histograms in : " << (subdir + "/" + key);
0228
0229 local_histos.numberRecHits =
0230 phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("LocalNumberRecHits"), ibooker);
0231
0232 local_histos.posX = phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("RecHitPosX"), ibooker);
0233
0234 local_histos.posY = phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("RecHitPosY"), ibooker);
0235
0236 local_histos.poserrX =
0237 phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("RecHitPosErrorX_Eta"), ibooker);
0238
0239 local_histos.poserrY =
0240 phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("RecHitPosErrorY_Eta"), ibooker);
0241
0242 local_histos.clusterSizeX =
0243 phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("LocalClusterSizeX"), ibooker);
0244
0245 local_histos.clusterSizeY =
0246 phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("LocalClusterSizeY"), ibooker);
0247
0248 local_histos.globalPosXY =
0249 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionXY_perlayer"), ibooker);
0250
0251 local_histos.globalPosRZ =
0252 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionRZ_perlayer"), ibooker);
0253
0254 local_histos.localPosXY =
0255 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("LocalPositionXY"), ibooker);
0256 layerMEs_.emplace(key, local_histos);
0257 }
0258 }
0259
0260 void Phase2ITMonitorRecHit::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0261
0262 edm::ParameterSetDescription desc;
0263 {
0264 edm::ParameterSetDescription psd0;
0265 psd0.add<std::string>("name", "NumberRecHits");
0266 psd0.add<std::string>("title", "NumberRecHits;Number of RecHits;");
0267 psd0.add<double>("xmin", 0.0);
0268 psd0.add<bool>("switch", true);
0269 psd0.add<double>("xmax", 250000.0);
0270 psd0.add<int>("NxBins", 250);
0271 desc.add<edm::ParameterSetDescription>("GlobalNumberRecHits", psd0);
0272 }
0273 {
0274 edm::ParameterSetDescription psd0;
0275 psd0.add<std::string>("name", "Global_Position_RZ_IT_barrel");
0276 psd0.add<std::string>("title", "Global_Position_RZ_IT_barrel;z [mm];r [mm]");
0277 psd0.add<double>("ymax", 300.0);
0278 psd0.add<int>("NxBins", 1500);
0279 psd0.add<int>("NyBins", 300);
0280 psd0.add<bool>("switch", true);
0281 psd0.add<double>("xmax", 3000.0);
0282 psd0.add<double>("xmin", -3000.0);
0283 psd0.add<double>("ymin", 0.0);
0284 desc.add<edm::ParameterSetDescription>("GlobalPositionRZ_PXB", psd0);
0285 }
0286 {
0287 edm::ParameterSetDescription psd0;
0288 psd0.add<std::string>("name", "Global_Position_XY_IT_barrel");
0289 psd0.add<std::string>("title", "Global_Position_XY_IT_barrel;x [mm];y [mm];");
0290 psd0.add<double>("ymax", 300.0);
0291 psd0.add<int>("NxBins", 600);
0292 psd0.add<int>("NyBins", 600);
0293 psd0.add<bool>("switch", true);
0294 psd0.add<double>("xmax", 300.0);
0295 psd0.add<double>("xmin", -300.0);
0296 psd0.add<double>("ymin", -300.0);
0297 desc.add<edm::ParameterSetDescription>("GlobalPositionXY_PXB", psd0);
0298 }
0299 {
0300 edm::ParameterSetDescription psd0;
0301 psd0.add<std::string>("name", "Global_Position_RZ_IT_endcap");
0302 psd0.add<std::string>("title", "Global_Position_RZ_IT_endcap;z [mm];r [mm]");
0303 psd0.add<double>("ymax", 300.0);
0304 psd0.add<int>("NxBins", 1500);
0305 psd0.add<int>("NyBins", 300);
0306 psd0.add<bool>("switch", true);
0307 psd0.add<double>("xmax", 3000.0);
0308 psd0.add<double>("xmin", -3000.0);
0309 psd0.add<double>("ymin", 0.0);
0310 desc.add<edm::ParameterSetDescription>("GlobalPositionRZ_PXEC", psd0);
0311 }
0312 {
0313 edm::ParameterSetDescription psd0;
0314 psd0.add<std::string>("name", "Global_Position_XY_IT_endcap");
0315 psd0.add<std::string>("title", "Global_Position_XY_IT_endcap; x [mm]; y [mm]");
0316 psd0.add<double>("ymax", 300.0);
0317 psd0.add<int>("NxBins", 600);
0318 psd0.add<int>("NyBins", 600);
0319 psd0.add<bool>("switch", true);
0320 psd0.add<double>("xmax", 300.0);
0321 psd0.add<double>("xmin", -300.0);
0322 psd0.add<double>("ymin", -300.0);
0323 desc.add<edm::ParameterSetDescription>("GlobalPositionXY_PXEC", psd0);
0324 }
0325
0326 {
0327 edm::ParameterSetDescription psd0;
0328 psd0.add<std::string>("name", "LocalNumberRecHits");
0329 psd0.add<std::string>("title", "NumberRecHits;Number of RecHits;");
0330 psd0.add<double>("xmin", 0.0);
0331 psd0.add<bool>("switch", true);
0332 psd0.add<double>("xmax", 150000.0);
0333 psd0.add<int>("NxBins", 150);
0334 desc.add<edm::ParameterSetDescription>("LocalNumberRecHits", psd0);
0335 }
0336 {
0337 edm::ParameterSetDescription psd0;
0338 psd0.add<std::string>("name", "Global_Position_RZ");
0339 psd0.add<std::string>("title", "Global_Position_RZ;z [mm];r [mm]");
0340 psd0.add<double>("ymax", 300.0);
0341 psd0.add<int>("NxBins", 1500);
0342 psd0.add<int>("NyBins", 300);
0343 psd0.add<bool>("switch", false);
0344 psd0.add<double>("xmax", 3000.0);
0345 psd0.add<double>("xmin", -3000.0);
0346 psd0.add<double>("ymin", 0.0);
0347 desc.add<edm::ParameterSetDescription>("GlobalPositionRZ_perlayer", psd0);
0348 }
0349 {
0350 edm::ParameterSetDescription psd0;
0351 psd0.add<std::string>("name", "Global_Position_XY");
0352 psd0.add<std::string>("title", "Global_Position_XY;x [mm]; y[mm]");
0353 psd0.add<double>("ymax", 300.0);
0354 psd0.add<int>("NxBins", 600);
0355 psd0.add<int>("NyBins", 600);
0356 psd0.add<bool>("switch", false);
0357 psd0.add<double>("xmax", 300.0);
0358 psd0.add<double>("xmin", -300.0);
0359 psd0.add<double>("ymin", -300.0);
0360 desc.add<edm::ParameterSetDescription>("GlobalPositionXY_perlayer", psd0);
0361 }
0362 {
0363 edm::ParameterSetDescription psd0;
0364 psd0.add<std::string>("name", "Local_Position_XY");
0365 psd0.add<std::string>("title", "Local_Position_XY; x; y");
0366 psd0.add<double>("ymax", 0.0);
0367 psd0.add<int>("NxBins", 500);
0368 psd0.add<int>("NyBins", 500);
0369 psd0.add<bool>("switch", true);
0370 psd0.add<double>("xmax", 0.0);
0371 psd0.add<double>("xmin", 0.0);
0372 psd0.add<double>("ymin", 0.0);
0373 desc.add<edm::ParameterSetDescription>("LocalPositionXY", psd0);
0374 }
0375 {
0376 edm::ParameterSetDescription psd0;
0377 psd0.add<std::string>("name", "Cluster_SizeX");
0378 psd0.add<std::string>("title", "Cluster_SizeX; cluster size x;");
0379 psd0.add<double>("xmin", -0.5);
0380 psd0.add<bool>("switch", true);
0381 psd0.add<double>("xmax", 20.5);
0382 psd0.add<int>("NxBins", 21);
0383 desc.add<edm::ParameterSetDescription>("LocalClusterSizeX", psd0);
0384 }
0385 {
0386 edm::ParameterSetDescription psd0;
0387 psd0.add<std::string>("name", "Cluster_SizeY");
0388 psd0.add<std::string>("title", "Cluster_SizeY;cluster size y;");
0389 psd0.add<double>("xmin", -0.5);
0390 psd0.add<bool>("switch", true);
0391 psd0.add<double>("xmax", 25.5);
0392 psd0.add<int>("NxBins", 26);
0393 desc.add<edm::ParameterSetDescription>("LocalClusterSizeY", psd0);
0394 }
0395 {
0396 edm::ParameterSetDescription psd0;
0397 psd0.add<std::string>("name", "RecHit_X");
0398 psd0.add<std::string>("title", "RecHit_X;RecHit position X dimension;");
0399 psd0.add<double>("xmin", -2.5);
0400 psd0.add<bool>("switch", true);
0401 psd0.add<double>("xmax", 2.5);
0402 psd0.add<int>("NxBins", 100);
0403 desc.add<edm::ParameterSetDescription>("RecHitPosX", psd0);
0404 }
0405 {
0406 edm::ParameterSetDescription psd0;
0407 psd0.add<std::string>("name", "RecHit_Y");
0408 psd0.add<std::string>("title", "RecHit_Y;RecHit position X dimension;");
0409 psd0.add<double>("xmin", -2.5);
0410 psd0.add<bool>("switch", true);
0411 psd0.add<double>("xmax", 2.5);
0412 psd0.add<int>("NxBins", 100);
0413 desc.add<edm::ParameterSetDescription>("RecHitPosY", psd0);
0414 }
0415 {
0416 edm::ParameterSetDescription psd0;
0417 psd0.add<std::string>("name", "RecHit_X_error_Vs_eta");
0418 psd0.add<std::string>("title", "RecHit_X_error_Vs_eta;#eta;x error [#mum]");
0419 psd0.add<bool>("switch", true);
0420 psd0.add<int>("NxBins", 82);
0421 psd0.add<double>("xmax", 4.1);
0422 psd0.add<double>("xmin", -4.1);
0423 psd0.add<double>("ymax", 10.0);
0424 psd0.add<double>("ymin", 0.);
0425 desc.add<edm::ParameterSetDescription>("RecHitPosErrorX_Eta", psd0);
0426 }
0427 {
0428 edm::ParameterSetDescription psd0;
0429 psd0.add<std::string>("name", "RecHit_Y_error_Vs_eta");
0430 psd0.add<std::string>("title", "RecHit_Y_error_Vs_eta;#eta;y error [#mum]");
0431 psd0.add<bool>("switch", true);
0432 psd0.add<int>("NxBins", 82);
0433 psd0.add<double>("xmax", 4.1);
0434 psd0.add<double>("xmin", -4.1);
0435 psd0.add<double>("ymax", 10.0);
0436 psd0.add<double>("ymin", 0.);
0437 desc.add<edm::ParameterSetDescription>("RecHitPosErrorY_Eta", psd0);
0438 }
0439 desc.add<std::string>("TopFolderName", "TrackerPhase2ITRecHit");
0440 desc.add<edm::InputTag>("rechitsSrc", edm::InputTag("siPixelRecHits"));
0441 descriptions.add("Phase2ITMonitorRecHit", desc);
0442 }
0443
0444 DEFINE_FWK_MODULE(Phase2ITMonitorRecHit);