diff --git a/DQM/SiPixelPhase1Track/interface/SiPixelPhase1ResidualsExtra.h b/DQM/SiPixelPhase1Track/interface/SiPixelPhase1ResidualsExtra.h deleted file mode 100644 index 38137a1b5f5da..0000000000000 --- a/DQM/SiPixelPhase1Track/interface/SiPixelPhase1ResidualsExtra.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef SiPixelPhase1ResidualsExtra_SiPixelPhase1ResidualsExtra_h -#define SiPixelPhase1ResidualsExtra_SiPixelPhase1ResidualsExtra_h -// -*- C++ -*- -// -// Package: SiPixelPhase1ResidualsExtra -// Class : SiPixelPhase1ResidualsExtra -// -/* - - Description: Introduce some computation over the PixelPhase1 residuals distributions - - Usage: - - -*/ -// -// Original Author: Alessandro Rossi -// Created: 21st May 2021 -// - -//#include - -// user include files -#include "DQMServices/Core/interface/DQMEDHarvester.h" -#include "DQMServices/Core/interface/DQMStore.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -class SiPixelPhase1ResidualsExtra : public DQMEDHarvester { -public: - explicit SiPixelPhase1ResidualsExtra(const edm::ParameterSet& conf); - ~SiPixelPhase1ResidualsExtra() override; - -protected: - // BeginRun - void beginRun(edm::Run const& run, edm::EventSetup const& eSetup) override; - - // EndJob - void dqmEndJob(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter) override; - -private: - std::string topFolderName_; - int minHits_; - edm::ParameterSet conf_; - - std::map residuals_; - std::map DRnR_; - - //Book Monitoring Elements - void bookMEs(DQMStore::IBooker& iBooker); - - //Fill Monitoring Elements - void fillMEs(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter); -}; - -#endif diff --git a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1ResidualsExtra.cc b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1ResidualsExtra.cc index cb15ea5fdc213..7d7f51caaf6c5 100644 --- a/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1ResidualsExtra.cc +++ b/DQM/SiPixelPhase1Track/plugins/SiPixelPhase1ResidualsExtra.cc @@ -7,55 +7,87 @@ Description: Create the Phsae 1 pixel DRnR plots - Implementation: - + Implementation: Introduce some computation over the PixelPhase1 residuals distributions */ // // Original Author: Alessandro Rossi // Created: 25th May 2021 // // -#include "DQM/SiPixelPhase1Track/interface/SiPixelPhase1ResidualsExtra.h" -// Framework -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -// DQM Framework + +// system includes +#include +#include +#include +#include +#include + +// user includes #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h" +#include "DQMServices/Core/interface/DQMEDHarvester.h" #include "DQMServices/Core/interface/DQMStore.h" -// Geometry -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" -// DataFormats #include "DataFormats/DetId/interface/DetId.h" +#include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h" +#include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h" -#include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h" #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h" -#include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h" -// -#include -#include -#include -#include -#include +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" +#include "Geometry/CommonTopologies/interface/PixelTopology.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" using namespace std; using namespace edm; +class SiPixelPhase1ResidualsExtra : public DQMEDHarvester { +public: + explicit SiPixelPhase1ResidualsExtra(const edm::ParameterSet& conf); + ~SiPixelPhase1ResidualsExtra() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +protected: + // BeginRun + void beginRun(edm::Run const& run, edm::EventSetup const& eSetup) override; + + // EndJob + void dqmEndJob(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter) override; + +private: + const std::string topFolderName_; + const std::string inputFolderName_; + const int minHits_; + + std::map residuals_; + std::map DRnR_; + + //Book Monitoring Elements + void bookMEs(DQMStore::IBooker& iBooker); + + //Fill Monitoring Elements + void fillMEs(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter); +}; + SiPixelPhase1ResidualsExtra::SiPixelPhase1ResidualsExtra(const edm::ParameterSet& iConfig) - : DQMEDHarvester(iConfig), conf_(iConfig) { + : DQMEDHarvester(iConfig), + topFolderName_(iConfig.getParameter("TopFolderName")), + inputFolderName_(iConfig.getParameter("InputFolderName")), + minHits_(iConfig.getParameter("MinHits")) { LogInfo("PixelDQM") << "SiPixelPhase1ResidualsExtra::SiPixelPhase1ResidualsExtra: Got DQM BackEnd interface" << endl; - topFolderName_ = conf_.getParameter("TopFolderName"); - minHits_ = conf_.getParameter("MinHits"); } SiPixelPhase1ResidualsExtra::~SiPixelPhase1ResidualsExtra() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) LogInfo("PixelDQM") << "SiPixelPhase1ResidualsExtra::~SiPixelPhase1ResidualsExtra: Destructor" << endl; } @@ -292,13 +324,13 @@ void SiPixelPhase1ResidualsExtra::fillMEs(DQMStore::IBooker& iBooker, DQMStore:: for (std::string layer : {"1", "2", "3", "4"}) { MonitorElement* me_x = - iGetter.get("PixelPhase1/Tracks/PXBarrel/residual_x_per_SignedModule_per_SignedLadder_PXLayer_" + layer); + iGetter.get(inputFolderName_ + "/PXBarrel/residual_x_per_SignedModule_per_SignedLadder_PXLayer_" + layer); MonitorElement* me_y = - iGetter.get("PixelPhase1/Tracks/PXBarrel/residual_y_per_SignedModule_per_SignedLadder_PXLayer_" + layer); + iGetter.get(inputFolderName_ + "/PXBarrel/residual_y_per_SignedModule_per_SignedLadder_PXLayer_" + layer); MonitorElement* me2_x = iGetter.get( - "PixelPhase1/Tracks/ResidualsExtra/PXBarrel/DRnR_x_per_SignedModule_per_SignedLadder_PXLayer_" + layer); + inputFolderName_ + "/ResidualsExtra/PXBarrel/DRnR_x_per_SignedModule_per_SignedLadder_PXLayer_" + layer); MonitorElement* me2_y = iGetter.get( - "PixelPhase1/Tracks/ResidualsExtra/PXBarrel/DRnR_y_per_SignedModule_per_SignedLadder_PXLayer_" + layer); + inputFolderName_ + "/ResidualsExtra/PXBarrel/DRnR_y_per_SignedModule_per_SignedLadder_PXLayer_" + layer); if (me_x == nullptr || me_y == nullptr || me2_x == nullptr || me2_y == nullptr) { edm::LogWarning("SiPixelPhase1ResidualsExtra") @@ -388,13 +420,13 @@ void SiPixelPhase1ResidualsExtra::fillMEs(DQMStore::IBooker& iBooker, DQMStore:: //PXForward separating outer and inner modules as well as positive and negative side for (std::string ring : {"1", "2"}) { MonitorElement* me_x = - iGetter.get("PixelPhase1/Tracks/PXForward/residual_x_per_PXDisk_per_SignedBladePanel_PXRing_" + ring); + iGetter.get(inputFolderName_ + "/PXForward/residual_x_per_PXDisk_per_SignedBladePanel_PXRing_" + ring); MonitorElement* me_y = - iGetter.get("PixelPhase1/Tracks/PXForward/residual_y_per_PXDisk_per_SignedBladePanel_PXRing_" + ring); + iGetter.get(inputFolderName_ + "/PXForward/residual_y_per_PXDisk_per_SignedBladePanel_PXRing_" + ring); MonitorElement* me2_x = iGetter.get( - "PixelPhase1/Tracks/ResidualsExtra/PXForward/DRnR_x_per_PXDisk_per_SignedBladePanel_PXRing_" + ring); + inputFolderName_ + "/ResidualsExtra/PXForward/DRnR_x_per_PXDisk_per_SignedBladePanel_PXRing_" + ring); MonitorElement* me2_y = iGetter.get( - "PixelPhase1/Tracks/ResidualsExtra/PXForward/DRnR_y_per_PXDisk_per_SignedBladePanel_PXRing_" + ring); + inputFolderName_ + "/ResidualsExtra/PXForward/DRnR_y_per_PXDisk_per_SignedBladePanel_PXRing_" + ring); if (me_x == nullptr || me_y == nullptr || me2_x == nullptr || me2_y == nullptr) { edm::LogWarning("SiPixelPhase1ResidualsExtra") @@ -472,5 +504,14 @@ void SiPixelPhase1ResidualsExtra::fillMEs(DQMStore::IBooker& iBooker, DQMStore:: } } +void SiPixelPhase1ResidualsExtra::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("TopFolderName", "PixelPhase1/Tracks/ResidualsExtra") + ->setComment("Folder in which to write output histograms"); + desc.add("InputFolderName", "")->setComment("Folder from which to fetch in the input MEs"); + desc.add("MinHits", 30)->setComment("minimum number of hits per module to fill the DRnR plots"); + descriptions.addWithDefaultLabel(desc); +} + //define this as a plug-in DEFINE_FWK_MODULE(SiPixelPhase1ResidualsExtra); diff --git a/DQM/SiPixelPhase1Track/python/SiPixelPhase1ResidualsExtra_cfi.py b/DQM/SiPixelPhase1Track/python/SiPixelPhase1ResidualsExtra_cfi.py index 0cd2c9efe6dcf..786314623c71b 100644 --- a/DQM/SiPixelPhase1Track/python/SiPixelPhase1ResidualsExtra_cfi.py +++ b/DQM/SiPixelPhase1Track/python/SiPixelPhase1ResidualsExtra_cfi.py @@ -3,5 +3,6 @@ SiPixelPhase1ResidualsExtra = DQMEDHarvester("SiPixelPhase1ResidualsExtra", TopFolderName = cms.string('PixelPhase1/Tracks/ResidualsExtra'), + InputFolderName = cms.string('PixelPhase1/Tracks'), MinHits = cms.int32(30) ) diff --git a/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_Client_cff.py b/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_Client_cff.py index 9fa9351ab0248..75a03b5ec98d7 100644 --- a/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_Client_cff.py +++ b/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_Client_cff.py @@ -2,6 +2,7 @@ from DQMOffline.Trigger.SiPixel_OfflineMonitoring_Cluster_cff import * from DQMOffline.Trigger.SiPixel_OfflineMonitoring_TrackCluster_cff import * +from DQMOffline.Trigger.SiPixel_OfflineMonitoring_TrackResiduals_cff import * from DQM.HLTEvF.dqmCorrelationClient_cfi import * pixelClusterVsLumi = dqmCorrelationClient.clone( @@ -51,9 +52,11 @@ pixelTrackClusterVsLumiPXForward.me2.name = "num_clusters_ontrack_per_Lumisection_PXForward" sipixelHarvesterHLTsequence = cms.Sequence( -# hltSiPixelPhase1ClustersHarvester -# + hltSiPixelPhase1TrackClustersHarvester - pixelClusterVsLumiPXBarrel + #hltSiPixelPhase1ClustersHarvester + #+ hltSiPixelPhase1TrackClustersHarvester + hltSiPixelPhase1TrackResidualsHarvester + + hltSiPixelPhase1ResidualsExtra + + pixelClusterVsLumiPXBarrel + pixelClusterVsLumiPXForward # + pixelTrackClusterVsLumiPXBarrel # + pixelTrackClusterVsLumiPXForward diff --git a/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_HistogramManager_cfi.py b/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_HistogramManager_cfi.py index 1a86814a6c1c3..e65161e9a8590 100644 --- a/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_HistogramManager_cfi.py +++ b/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_HistogramManager_cfi.py @@ -23,6 +23,10 @@ hltDefaultHistoTrack = DefaultHistoTrack.clone( topFolderName= "HLT/Pixel/TrackClusters" ) +hltDefaultHistoTrackResiduals = DefaultHistoTrack.clone( + topFolderName= "HLT/Pixel/Tracks" +) + hltStandardSpecificationPixelmapProfile = [#produces pixel map with the mean (TProfile) Specification(PerLayer2D) .groupBy("PXBarrel/PXLayer/SignedLadderCoord/SignedModuleCoord") diff --git a/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_TrackResiduals_cff.py b/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_TrackResiduals_cff.py new file mode 100644 index 0000000000000..c653c326db42c --- /dev/null +++ b/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_TrackResiduals_cff.py @@ -0,0 +1,154 @@ +import FWCore.ParameterSet.Config as cms +from DQMServices.Core.DQMEDHarvester import DQMEDHarvester + +from DQMOffline.Trigger.SiPixel_OfflineMonitoring_HistogramManager_cfi import * + +# order is important and it should follow ordering in hltSiPixelPhase1ClustersConf VPSet +hltSiPixelPhase1TrackResidualsResidualsX = hltDefaultHistoTrackResiduals.clone( + name = "residual_x", + title = "Track Residuals X", + range_min = -0.1, range_max = 0.1, range_nbins = 100, + xlabel = "(x_rec - x_pred) [cm]", + dimensions = 1, + specs = VPSet( + StandardSpecification2DProfile, + Specification().groupBy("PXBarrel/PXLayer").saveAll(), + Specification().groupBy("PXForward/PXDisk").saveAll(), + + Specification().groupBy("PXBarrel/PXLayer/LumiBlock") + .reduce("MEAN") + .groupBy("PXBarrel/PXLayer", "EXTEND_X") + .save(), + + Specification().groupBy("PXForward/PXDisk/LumiBlock") + .reduce("MEAN") + .groupBy("PXForward/PXDisk", "EXTEND_X") + .save(), + + Specification(PerLayer1D).groupBy("PXBarrel/Shell/PXLayer").save(), + Specification(PerLayer1D).groupBy("PXForward/HalfCylinder/PXRing/PXDisk").save() + ) +) + +hltSiPixelPhase1TrackResidualsResidualsY = hltSiPixelPhase1TrackResidualsResidualsX.clone( + name = "residual_y", + title = "Track Residuals Y", + xlabel = "(y_rec - y_pred) [cm]", +) + +hltSiPixelPhase1TrackResidualsResOnEdgeX = hltDefaultHistoTrackResiduals.clone( + name = "residual_OnEdge_x", + title = "Track Residuals X (OnEdge Clusters)", + range_min = -0.1, range_max = 0.1, range_nbins = 100, + xlabel = "(x_rec - x_pred) [cm]", + dimensions = 1, + specs = VPSet( + Specification().groupBy("PXBarrel/PXLayer").saveAll(), + Specification().groupBy("PXForward/PXDisk").saveAll(), + Specification(PerLayer1D).groupBy("PXBarrel/Shell/PXLayer").save(), + Specification(PerLayer1D).groupBy("PXForward/HalfCylinder/PXRing/PXDisk").save() + ) +) + +hltSiPixelPhase1TrackResidualsResOnEdgeY = hltSiPixelPhase1TrackResidualsResOnEdgeX.clone( + name = "residual_OnEdge_y", + title = "Track Residuals Y (OnEdge Clusters)", + xlabel = "(y_rec - y_pred) [cm]", +) + + +hltSiPixelPhase1TrackResidualsResOtherBadX = hltDefaultHistoTrackResiduals.clone( + name = "residual_OtherBad_x", + title = "Track Residuals X (OtherBad Clusters)", + range_min = -0.1, range_max = 0.1, range_nbins = 100, + xlabel = "(x_rec - x_pred) [cm]", + dimensions = 1, + specs = VPSet( + Specification().groupBy("PXBarrel/PXLayer").saveAll(), + Specification().groupBy("PXForward/PXDisk").saveAll(), + Specification(PerLayer1D).groupBy("PXBarrel/Shell/PXLayer").save(), + Specification(PerLayer1D).groupBy("PXForward/HalfCylinder/PXRing/PXDisk").save() + ) +) + +hltSiPixelPhase1TrackResidualsResOtherBadY = hltSiPixelPhase1TrackResidualsResOtherBadX.clone( + name = "residual_OtherBad_y", + title = "Track Residuals Y (OtherBad Clusters)", + xlabel = "(y_rec - y_pred) [cm]", +) + + +hltSiPixelPhase1TrackNormResX = hltDefaultHistoTrackResiduals.clone( + topFolderName= cms.string("HLT/Pixel/Tracks/ResidualsExtra"), + name = "NormRes_x", + title = "Normalized Residuals X", + range_min = -5, range_max = 5, range_nbins = 100, + xlabel = "(x_rec - x_pred)/x_err", + dimensions = 1, + specs = VPSet( + Specification().groupBy("PXBarrel/PXLayer").saveAll(), + Specification().groupBy("PXForward/PXDisk").saveAll(), + Specification(PerLayer1D).groupBy("PXBarrel/Shell/PXLayer").save(), + Specification(PerLayer1D).groupBy("PXForward/HalfCylinder/PXRing/PXDisk").save() + ) +) + +hltSiPixelPhase1TrackNormResY = hltSiPixelPhase1TrackNormResX.clone( + name = "NormRes_y", + title = "Normalized Residuals Y", + range_min = -5, range_max = 5, range_nbins = 100, + xlabel = "(y_rec - y_pred)/y_err", +) + +hltSiPixelPhase1TrackDRnRX = hltDefaultHistoTrackResiduals.clone( + topFolderName= cms.string("HLT/Pixel/Tracks/ResidualsExtra"), + name = "DRnR_x", + title = "Distribution of RMS of Normalized Residuals X", + range_min = -5, range_max = 5, range_nbins = 100, + xlabel = "#sigma_{(x_rec - x_pred)/x_err}", + dimensions = 1, + specs = VPSet( + StandardSpecification2DProfile + ) +) + +hltSiPixelPhase1TrackDRnRY = hltSiPixelPhase1TrackDRnRX.clone( + name = "DRnR_y", + title = "Distribution of RMS of Normalized Residuals Y", + range_min = -5, range_max = 5, range_nbins = 100, + xlabel = "#sigma_{(y_rec - y_pred)/y_err}", +) + +hltSiPixelPhase1TrackResidualsConf = cms.VPSet( + hltSiPixelPhase1TrackResidualsResidualsX, + hltSiPixelPhase1TrackResidualsResidualsY, + hltSiPixelPhase1TrackResidualsResOnEdgeX, + hltSiPixelPhase1TrackResidualsResOnEdgeY, + hltSiPixelPhase1TrackResidualsResOtherBadX, + hltSiPixelPhase1TrackResidualsResOtherBadY, + hltSiPixelPhase1TrackNormResX, + hltSiPixelPhase1TrackNormResY, + hltSiPixelPhase1TrackDRnRX, + hltSiPixelPhase1TrackDRnRY +) + +from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer +hltSiPixelPhase1TrackResidualsAnalyzer = DQMEDAnalyzer('SiPixelPhase1TrackResiduals', + trajectoryInput = cms.string("hltrefittedForPixelDQM"), + Tracks = cms.InputTag("hltrefittedForPixelDQM"), + vertices = cms.InputTag("hltPixelVertices"), + histograms = hltSiPixelPhase1TrackResidualsConf, + geometry = hltSiPixelPhase1Geometry, + VertexCut = cms.untracked.bool(True) +) + +hltSiPixelPhase1TrackResidualsHarvester = DQMEDHarvester("SiPixelPhase1Harvester", + histograms = hltSiPixelPhase1TrackResidualsConf, + geometry = hltSiPixelPhase1Geometry +) + +hltSiPixelPhase1ResidualsExtra = DQMEDHarvester("SiPixelPhase1ResidualsExtra", + TopFolderName = cms.string('HLT/Pixel/Tracks/ResidualsExtra'), + InputFolderName = cms.string('HLT/Pixel/Tracks'), + MinHits = cms.int32(30) +) diff --git a/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_cff.py b/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_cff.py index ecd04eb15e582..0d1904ac471a6 100644 --- a/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_cff.py +++ b/DQMOffline/Trigger/python/SiPixel_OfflineMonitoring_cff.py @@ -2,6 +2,7 @@ from DQMOffline.Trigger.SiPixel_OfflineMonitoring_Cluster_cff import * from DQMOffline.Trigger.SiPixel_OfflineMonitoring_TrackCluster_cff import * +from DQMOffline.Trigger.SiPixel_OfflineMonitoring_TrackResiduals_cff import * from RecoTracker.PixelLowPtUtilities.siPixelClusterShapeCache_cfi import * from DQM.SiPixelMonitorTrack.RefitterForPixelDQM import * from RecoLocalTracker.SiPixelRecHits.SiPixelTemplateStoreESProducer_cfi import * @@ -22,6 +23,7 @@ hltSiPixelClusterShapeCache + hltSiPixelPhase1ClustersAnalyzer + hltrefittedForPixelDQM - + hltSiPixelPhase1TrackClustersAnalyzer, + + hltSiPixelPhase1TrackClustersAnalyzer + + hltSiPixelPhase1TrackResidualsAnalyzer, cms.Task(SiPixelTemplateStoreESProducer) )