File indexing completed on 2024-09-11 04:32:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <memory>
0013 #include <map>
0014 #include "FWCore/Framework/interface/Frameworkfwd.h"
0015 #include "FWCore/Framework/interface/Event.h"
0016 #include "FWCore/Framework/interface/ESHandle.h"
0017 #include "FWCore/Framework/interface/MakerMacros.h"
0018 #include "FWCore/Framework/interface/ESWatcher.h"
0019 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0020 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0021 #include "FWCore/ServiceRegistry/interface/Service.h"
0022 #include "FWCore/Utilities/interface/InputTag.h"
0023
0024 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0025 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0026 #include "Geometry/CommonDetUnit/interface/TrackerGeomDet.h"
0027 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0028 #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h"
0029 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0030 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0031 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0032 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0033
0034 #include "DataFormats/Common/interface/Handle.h"
0035 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0036 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0037 #include "DataFormats/DetId/interface/DetId.h"
0038 #include "DataFormats/Common/interface/DetSetVector.h"
0039 #include "DataFormats/Common/interface/DetSetVectorNew.h"
0040 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0041 #include "DataFormats/TrackerRecHit2D/interface/Phase2TrackerRecHit1D.h"
0042 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h"
0043 #include "DataFormats/GeometrySurface/interface/LocalError.h"
0044 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0045
0046
0047 #include "DQMServices/Core/interface/MonitorElement.h"
0048 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0049 #include "DQMServices/Core/interface/DQMStore.h"
0050
0051 #include "DQM/SiTrackerPhase2/interface/TrackerPhase2DQMUtil.h"
0052
0053 class Phase2OTMonitorRecHit : public DQMEDAnalyzer {
0054 public:
0055 explicit Phase2OTMonitorRecHit(const edm::ParameterSet&);
0056 ~Phase2OTMonitorRecHit() override;
0057 void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) override;
0058 void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
0059 void dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) override;
0060 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0061
0062 private:
0063 void bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id, std::string& subdir);
0064
0065 edm::ParameterSet config_;
0066 const edm::EDGetTokenT<Phase2TrackerRecHit1DCollectionNew> tokenRecHitsOT_;
0067
0068 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
0069 const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoToken_;
0070 const TrackerGeometry* tkGeom_ = nullptr;
0071 const TrackerTopology* tTopo_ = nullptr;
0072
0073 MonitorElement* numberRecHits_ = nullptr;
0074 MonitorElement* globalXY_P_ = nullptr;
0075 MonitorElement* globalRZ_P_ = nullptr;
0076 MonitorElement* globalXY_S_ = nullptr;
0077 MonitorElement* globalRZ_S_ = nullptr;
0078 struct RecHitME {
0079
0080
0081 MonitorElement* globalPosXY_P = nullptr;
0082 MonitorElement* globalPosXY_S = nullptr;
0083 MonitorElement* localPosXY_P = nullptr;
0084 MonitorElement* localPosXY_S = nullptr;
0085
0086 MonitorElement* numberRecHits_P = nullptr;
0087 MonitorElement* numberRecHits_S = nullptr;
0088 MonitorElement* clusterSize_P = nullptr;
0089 MonitorElement* clusterSize_S = nullptr;
0090 };
0091 std::map<std::string, RecHitME> layerMEs_;
0092 };
0093
0094
0095
0096
0097 Phase2OTMonitorRecHit::Phase2OTMonitorRecHit(const edm::ParameterSet& iConfig)
0098 : config_(iConfig),
0099 tokenRecHitsOT_(consumes<Phase2TrackerRecHit1DCollectionNew>(config_.getParameter<edm::InputTag>("rechitsSrc"))),
0100 geomToken_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, edm::Transition::BeginRun>()),
0101 topoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd, edm::Transition::BeginRun>()) {
0102 edm::LogInfo("Phase2OTMonitorRecHit") << ">>> Construct Phase2OTMonitorRecHit ";
0103 }
0104
0105
0106
0107
0108 Phase2OTMonitorRecHit::~Phase2OTMonitorRecHit() {
0109
0110
0111 edm::LogInfo("Phase2OTMonitorRecHit") << ">>> Destroy Phase2OTMonitorRecHit ";
0112 }
0113
0114
0115 void Phase2OTMonitorRecHit::dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
0116 tkGeom_ = &iSetup.getData(geomToken_);
0117 tTopo_ = &iSetup.getData(topoToken_);
0118 ;
0119 }
0120
0121
0122
0123
0124 void Phase2OTMonitorRecHit::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0125
0126 const auto& rechits = iEvent.getHandle(tokenRecHitsOT_);
0127 if (!rechits.isValid())
0128 return;
0129 std::map<std::string, unsigned int> nrechitLayerMapP;
0130 std::map<std::string, unsigned int> nrechitLayerMapS;
0131 unsigned long int nTotrechitsinevt = 0;
0132
0133 Phase2TrackerRecHit1DCollectionNew::const_iterator DSViter;
0134 for (DSViter = rechits->begin(); DSViter != rechits->end(); ++DSViter) {
0135
0136 unsigned int rawid(DSViter->detId());
0137 DetId detId(rawid);
0138
0139 const GeomDetUnit* geomDetunit(tkGeom_->idToDetUnit(detId));
0140 if (!geomDetunit)
0141 continue;
0142
0143 TrackerGeometry::ModuleType mType = tkGeom_->getDetectorType(detId);
0144 std::string key = phase2tkutil::getOTHistoId(detId.rawId(), tTopo_);
0145 nTotrechitsinevt += DSViter->size();
0146 if (mType == TrackerGeometry::ModuleType::Ph2PSP) {
0147 if (nrechitLayerMapP.find(key) == nrechitLayerMapP.end()) {
0148 nrechitLayerMapP.insert(std::make_pair(key, DSViter->size()));
0149 } else {
0150 nrechitLayerMapP[key] += DSViter->size();
0151 }
0152 } else if (mType == TrackerGeometry::ModuleType::Ph2PSS || mType == TrackerGeometry::ModuleType::Ph2SS) {
0153 if (nrechitLayerMapS.find(key) == nrechitLayerMapS.end()) {
0154 nrechitLayerMapS.insert(std::make_pair(key, DSViter->size()));
0155 } else {
0156 nrechitLayerMapS[key] += DSViter->size();
0157 }
0158 }
0159 edmNew::DetSet<Phase2TrackerRecHit1D>::const_iterator rechitIt;
0160
0161 for (rechitIt = DSViter->begin(); rechitIt != DSViter->end(); ++rechitIt) {
0162 LocalPoint lp = rechitIt->localPosition();
0163 Global3DPoint globalPos = geomDetunit->surface().toGlobal(lp);
0164
0165 double gx = globalPos.x() * 10.;
0166 double gy = globalPos.y() * 10.;
0167 double gz = globalPos.z() * 10.;
0168 double gr = globalPos.perp() * 10.;
0169
0170 if (mType == TrackerGeometry::ModuleType::Ph2PSP) {
0171 globalXY_P_->Fill(gx, gy);
0172 globalRZ_P_->Fill(gz, gr);
0173
0174 layerMEs_[key].clusterSize_P->Fill(rechitIt->cluster()->size());
0175
0176 layerMEs_[key].localPosXY_P->Fill(lp.x(), lp.y());
0177 } else if (mType == TrackerGeometry::ModuleType::Ph2PSS || mType == TrackerGeometry::ModuleType::Ph2SS) {
0178 globalXY_S_->Fill(gx, gy);
0179 globalRZ_S_->Fill(gz, gr);
0180
0181 layerMEs_[key].clusterSize_S->Fill(rechitIt->cluster()->size());
0182
0183 layerMEs_[key].localPosXY_S->Fill(lp.x(), lp.y());
0184 }
0185 }
0186 }
0187
0188
0189 numberRecHits_->Fill(nTotrechitsinevt);
0190
0191 for (auto& lme : nrechitLayerMapP) {
0192 layerMEs_[lme.first].numberRecHits_P->Fill(lme.second);
0193 }
0194 for (auto& lme : nrechitLayerMapS) {
0195 layerMEs_[lme.first].numberRecHits_S->Fill(lme.second);
0196 }
0197 }
0198
0199
0200
0201 void Phase2OTMonitorRecHit::bookHistograms(DQMStore::IBooker& ibooker,
0202 edm::Run const& iRun,
0203 edm::EventSetup const& iSetup) {
0204 std::string top_folder = config_.getParameter<std::string>("TopFolderName");
0205
0206
0207 ibooker.cd();
0208 edm::LogInfo("Phase2OTMonitorRecHit") << " Booking Histograms in : " << top_folder;
0209 ibooker.setCurrentFolder(top_folder);
0210
0211
0212 numberRecHits_ = phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalNRecHits"), ibooker);
0213
0214 globalXY_P_ = phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionXY_P"), ibooker);
0215
0216 globalRZ_P_ = phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionRZ_P"), ibooker);
0217
0218 globalXY_S_ = phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionXY_S"), ibooker);
0219
0220 globalRZ_S_ = phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionRZ_S"), ibooker);
0221
0222
0223 edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
0224 if (theTkDigiGeomWatcher.check(iSetup)) {
0225 for (auto const& det_u : tkGeom_->detUnits()) {
0226
0227 if (det_u->subDetector() == GeomDetEnumerators::SubDetector::P2PXB ||
0228 det_u->subDetector() == GeomDetEnumerators::SubDetector::P2PXEC)
0229 continue;
0230 unsigned int detId_raw = det_u->geographicalId().rawId();
0231 bookLayerHistos(ibooker, detId_raw, top_folder);
0232 }
0233 }
0234 }
0235
0236
0237
0238
0239 void Phase2OTMonitorRecHit::bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id, std::string& subdir) {
0240 std::string key = phase2tkutil::getOTHistoId(det_id, tTopo_);
0241 if (layerMEs_.find(key) == layerMEs_.end()) {
0242 ibooker.cd();
0243 RecHitME local_histos;
0244 ibooker.setCurrentFolder(subdir + "/" + key);
0245 edm::LogInfo("Phase2OTMonitorRecHit") << " Booking Histograms in : " << key;
0246
0247 if (tkGeom_->getDetectorType(det_id) == TrackerGeometry::ModuleType::Ph2PSP) {
0248 local_histos.numberRecHits_P =
0249 phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("NRecHitsLayer_P"), ibooker);
0250
0251 local_histos.clusterSize_P =
0252 phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("ClusterSize_P"), ibooker);
0253
0254 local_histos.globalPosXY_P =
0255 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("GlobalPositionXY_perlayer_P"), ibooker);
0256
0257 local_histos.localPosXY_P =
0258 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("LocalPositionXY_P"), ibooker);
0259
0260 }
0261
0262 ibooker.setCurrentFolder(subdir + "/" + key);
0263 local_histos.numberRecHits_S =
0264 phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("NRecHitsLayer_P"), ibooker);
0265 local_histos.clusterSize_S =
0266 phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("ClusterSize_S"), ibooker);
0267 local_histos.localPosXY_S =
0268 phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("LocalPositionXY_S"), ibooker);
0269
0270 layerMEs_.insert(std::make_pair(key, local_histos));
0271 }
0272 }
0273
0274 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0275 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0276 void Phase2OTMonitorRecHit::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0277
0278 edm::ParameterSetDescription desc;
0279 {
0280 edm::ParameterSetDescription psd0;
0281 psd0.add<std::string>("name", "NumberOfRecHits");
0282 psd0.add<std::string>("title", ";Number of rechits per event;");
0283 psd0.add<double>("xmin", 0.0);
0284 psd0.add<bool>("switch", true);
0285 psd0.add<double>("xmax", 000.0);
0286 psd0.add<int>("NxBins", 150);
0287 desc.add<edm::ParameterSetDescription>("GlobalNRecHits", psd0);
0288 }
0289 {
0290 edm::ParameterSetDescription psd0;
0291 psd0.add<std::string>("name", "Global_RecHitPosition_XY_P");
0292 psd0.add<std::string>("title", "Global_RecHitPosition_XY_P;x [mm];y [mm];");
0293 psd0.add<int>("NxBins", 1250);
0294 psd0.add<double>("xmin", -1250.0);
0295 psd0.add<double>("xmax", 1250.0);
0296 psd0.add<int>("NyBins", 1250);
0297 psd0.add<double>("ymin", -1250.0);
0298 psd0.add<double>("ymax", 1250.0);
0299 psd0.add<bool>("switch", true);
0300 desc.add<edm::ParameterSetDescription>("GlobalPositionXY_P", psd0);
0301 }
0302 {
0303 edm::ParameterSetDescription psd0;
0304 psd0.add<std::string>("name", "Global_RecHitPosition_XY_S");
0305 psd0.add<std::string>("title", "Global_RecHitPosition_XY_S;x [mm];y [mm];");
0306 psd0.add<int>("NxBins", 1250);
0307 psd0.add<double>("xmin", -1250.0);
0308 psd0.add<double>("xmax", 1250.0);
0309 psd0.add<int>("NyBins", 1250);
0310 psd0.add<double>("ymin", -1250.0);
0311 psd0.add<double>("ymax", 1250.0);
0312 psd0.add<bool>("switch", true);
0313 desc.add<edm::ParameterSetDescription>("GlobalPositionXY_S", psd0);
0314 }
0315
0316 {
0317 edm::ParameterSetDescription psd0;
0318 psd0.add<std::string>("name", "Global_RecHitPosition_RZ_P");
0319 psd0.add<std::string>("title", "Global_RecHitPosition_RZ_P;z [mm];r [mm]");
0320 psd0.add<int>("NxBins", 1500);
0321 psd0.add<double>("xmin", -3000.0);
0322 psd0.add<double>("xmax", 3000.0);
0323 psd0.add<int>("NyBins", 1250);
0324 psd0.add<double>("ymin", 0.0);
0325 psd0.add<double>("ymax", 1250.0);
0326 psd0.add<bool>("switch", true);
0327 desc.add<edm::ParameterSetDescription>("GlobalPositionRZ_P", psd0);
0328 }
0329 {
0330 edm::ParameterSetDescription psd0;
0331 psd0.add<std::string>("name", "Global_RecHitPosition_RZ_S");
0332 psd0.add<std::string>("title", "Global_RecHitPosition_RZ_S;z [mm];r [mm]");
0333
0334 psd0.add<int>("NxBins", 1500);
0335 psd0.add<double>("xmin", -3000.0);
0336 psd0.add<double>("xmax", 3000.0);
0337 psd0.add<int>("NyBins", 1250);
0338 psd0.add<double>("ymin", 0.0);
0339 psd0.add<double>("ymax", 1250.0);
0340 psd0.add<bool>("switch", true);
0341 desc.add<edm::ParameterSetDescription>("GlobalPositionRZ_S", psd0);
0342 }
0343
0344 {
0345 edm::ParameterSetDescription psd0;
0346 psd0.add<std::string>("name", "NumberOfRecHitsLayerP");
0347 psd0.add<std::string>("title", ";Number of clusters per event(macro pixel sensor);");
0348 psd0.add<double>("xmin", 0.0);
0349 psd0.add<double>("xmax", 28000.0);
0350 psd0.add<int>("NxBins", 150);
0351 psd0.add<bool>("switch", true);
0352 desc.add<edm::ParameterSetDescription>("NRecHitsLayer_P", psd0);
0353 }
0354
0355 {
0356 edm::ParameterSetDescription psd0;
0357 psd0.add<std::string>("name", "NumberOfRecHitsLayerS");
0358 psd0.add<std::string>("title", ";Number of clusters per event(strip sensor);");
0359 psd0.add<double>("xmin", 0.0);
0360 psd0.add<double>("xmax", 28000.0);
0361 psd0.add<int>("NxBins", 150);
0362 psd0.add<bool>("switch", true);
0363 desc.add<edm::ParameterSetDescription>("NRecHitsLayer_S", psd0);
0364 }
0365
0366 {
0367 edm::ParameterSetDescription psd0;
0368 psd0.add<std::string>("name", "ClusterSize_P");
0369 psd0.add<std::string>("title", ";cluster size(macro pixel sensor);");
0370 psd0.add<double>("xmin", -0.5);
0371 psd0.add<double>("xmax", 30.5);
0372 psd0.add<int>("NxBins", 31);
0373 psd0.add<bool>("switch", true);
0374 desc.add<edm::ParameterSetDescription>("ClusterSize_P", psd0);
0375 }
0376 {
0377 edm::ParameterSetDescription psd0;
0378 psd0.add<std::string>("name", "ClusterSize_S");
0379 psd0.add<std::string>("title", ";cluster size(strip sensor);");
0380 psd0.add<double>("xmin", -0.5);
0381 psd0.add<double>("xmax", 30.5);
0382 psd0.add<int>("NxBins", 31);
0383 psd0.add<bool>("switch", true);
0384 desc.add<edm::ParameterSetDescription>("ClusterSize_S", psd0);
0385 }
0386 {
0387 edm::ParameterSetDescription psd0;
0388 psd0.add<std::string>("name", "GlobalPositionXY_perlayer_P");
0389 psd0.add<std::string>("title", "GlobalRecHitPositionXY_perlayer_P;x[mm];y[mm];");
0390 psd0.add<int>("NxBins", 1250);
0391 psd0.add<double>("xmin", -1250.0);
0392 psd0.add<double>("xmax", 1250.0);
0393 psd0.add<int>("NyBins", 1250);
0394 psd0.add<double>("ymin", -1250.0);
0395 psd0.add<double>("ymax", 1250.0);
0396 psd0.add<bool>("switch", true);
0397 desc.add<edm::ParameterSetDescription>("GlobalPositionXY_perlayer_P", psd0);
0398 }
0399 {
0400 edm::ParameterSetDescription psd0;
0401 psd0.add<std::string>("name", "GlobalPositionXY_perlayer_S");
0402 psd0.add<std::string>("title", "GlobalRecHitPositionXY_perlayer_S;x[mm];y[mm];");
0403 psd0.add<int>("NxBins", 1250);
0404 psd0.add<double>("xmin", -1250.0);
0405 psd0.add<double>("xmax", 1250.0);
0406 psd0.add<int>("NyBins", 1250);
0407 psd0.add<double>("ymin", -1250.0);
0408 psd0.add<double>("ymax", 1250.0);
0409 psd0.add<bool>("switch", true);
0410 desc.add<edm::ParameterSetDescription>("GlobalPositionXY_perlayer_S", psd0);
0411 }
0412 {
0413 edm::ParameterSetDescription psd0;
0414 psd0.add<std::string>("name", "LocalPositionXY_P");
0415 psd0.add<std::string>("title", "LocalPositionXY_P;x ;y ;");
0416 psd0.add<int>("NxBins", 50);
0417 psd0.add<double>("xmin", -10.0);
0418 psd0.add<double>("xmax", 10.0);
0419 psd0.add<int>("NyBins", 50);
0420 psd0.add<double>("ymin", -10.0);
0421 psd0.add<double>("ymax", 10.0);
0422 psd0.add<bool>("switch", true);
0423 desc.add<edm::ParameterSetDescription>("LocalPositionXY_P", psd0);
0424 }
0425 {
0426 edm::ParameterSetDescription psd0;
0427 psd0.add<std::string>("name", "LocalPositionXY_S");
0428 psd0.add<std::string>("title", "LocalPositionXY_S;x ;y ;");
0429 psd0.add<int>("NxBins", 50);
0430 psd0.add<double>("xmin", -10.0);
0431 psd0.add<double>("xmax", 10.0);
0432 psd0.add<int>("NyBins", 50);
0433 psd0.add<double>("ymin", -10.0);
0434 psd0.add<double>("ymax", 10.0);
0435 psd0.add<bool>("switch", true);
0436 desc.add<edm::ParameterSetDescription>("LocalPositionXY_S", psd0);
0437 }
0438 desc.add<std::string>("TopFolderName", "TrackerPhase2OTRecHit");
0439 desc.add<bool>("Verbosity", false);
0440 desc.add<edm::InputTag>("rechitsSrc", edm::InputTag("siPhase2RecHits"));
0441 descriptions.add("Phase2OTMonitorRecHit", desc);
0442
0443
0444 }
0445
0446
0447 DEFINE_FWK_MODULE(Phase2OTMonitorRecHit);