Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-04-25 22:37:43

0001 // Package:    Phase2ITMonitorRecHit
0002 // Class:      Phase2ITMonitorRecHit
0003 //
0004 /**\class Phase2ITMonitorRecHit Phase2ITMonitorRecHit.cc 
0005  Description:  Plugin for Phase2 RecHit validation
0006 */
0007 //
0008 // Author: Shubhi Parolia, Suvankar Roy Chowdhury
0009 // Date: July 2020
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 // DQM Histograming
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 // -- Analyze
0100 void Phase2ITMonitorRecHit::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { fillITHistos(iEvent); }
0101 
0102 void Phase2ITMonitorRecHit::fillITHistos(const edm::Event& iEvent) {
0103   // Get the RecHits
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   // Loop over modules
0110   for (const auto& DSViter : *rechits) {
0111     // Get the detector id
0112     unsigned int rawid(DSViter.detId());
0113     DetId detId(rawid);
0114     // Get the geomdet
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     //loop over rechits for a single detId
0127     for (const auto& rechit : DSViter) {
0128       LocalPoint lp = rechit.localPosition();
0129       Global3DPoint globalPos = geomDetunit->surface().toGlobal(lp);
0130       //in mm
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       //Fill global positions
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       //layer wise histo
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     }  //end loop over rechits of a detId
0164   }    //End loop over DetSetVector
0165 
0166   //fill nRecHits per event
0167   numberRecHits_->Fill(nTotrechitsinevt);
0168   //fill nRecHit counter per layer
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   //Global histos for IT
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   //Now book layer wise histos
0204   edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
0205   if (theTkDigiGeomWatcher.check(iSetup)) {
0206     for (auto const& det_u : tkGeom_->detUnits()) {
0207       //Always check TrackerNumberingBuilder before changing this part
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 // -- Book Layer Histograms
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   // rechitMonitorIT
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   //Per layer/ring histos
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 //define this as a plug-in
0444 DEFINE_FWK_MODULE(Phase2ITMonitorRecHit);