Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-04-29 02:32:29

0001 // Package:    Phase2OTMonitorRecHit
0002 // Class:      Phase2OTMonitorRecHit
0003 //
0004 /**\class Phase2OTMonitorRecHit Phase2OTMonitorRecHit.cc 
0005  Description:  Standalone  Plugin for Phase2 RecHit validation
0006 */
0007 //
0008 // Author: Suvankar Roy Chowdhury
0009 // Date: March 2021
0010 //
0011 // system include files
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 // DQM Histograming
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     // use TH1D instead of TH1F to avoid stauration at 2^31
0080     // above this increments with +1 don't work for float, need double
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 // constructors
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 // destructor
0107 //
0108 Phase2OTMonitorRecHit::~Phase2OTMonitorRecHit() {
0109   // do anything here that needs to be done at desctruction time
0110   // (e.g. close files, deallocate resources etc.)
0111   edm::LogInfo("Phase2OTMonitorRecHit") << ">>> Destroy Phase2OTMonitorRecHit ";
0112 }
0113 //
0114 // -- DQM Begin Run
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 // -- Analyze
0123 //
0124 void Phase2OTMonitorRecHit::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0125   // Get the RecHits Phase2TrackerRecHit1DCollectionNew
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   // Loop over modules
0133   Phase2TrackerRecHit1DCollectionNew::const_iterator DSViter;
0134   for (DSViter = rechits->begin(); DSViter != rechits->end(); ++DSViter) {
0135     // Get the detector unit's id
0136     unsigned int rawid(DSViter->detId());
0137     DetId detId(rawid);
0138     // Get the geomdet
0139     const GeomDetUnit* geomDetunit(tkGeom_->idToDetUnit(detId));
0140     if (!geomDetunit)
0141       continue;
0142     // determine the detector we are in
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     //loop over rechits for a single detId
0161     for (rechitIt = DSViter->begin(); rechitIt != DSViter->end(); ++rechitIt) {
0162       LocalPoint lp = rechitIt->localPosition();
0163       Global3DPoint globalPos = geomDetunit->surface().toGlobal(lp);
0164       //in mm
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       //Fill positions
0170       if (mType == TrackerGeometry::ModuleType::Ph2PSP) {
0171         globalXY_P_->Fill(gx, gy);
0172         globalRZ_P_->Fill(gz, gr);
0173         //layer wise histo
0174         layerMEs_[key].clusterSize_P->Fill(rechitIt->cluster()->size());
0175         //layerMEs_[key].globalPosXY_P->Fill(gx, gy);
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         //layer wise histo
0181         layerMEs_[key].clusterSize_S->Fill(rechitIt->cluster()->size());
0182         //layerMEs_[key].globalPosXY_S->Fill(gx, gy);
0183         layerMEs_[key].localPosXY_S->Fill(lp.x(), lp.y());
0184       }
0185     }  //end loop over rechits of a detId
0186   }    //End loop over DetSetVector
0187 
0188   //fill nRecHits per event
0189   numberRecHits_->Fill(nTotrechitsinevt);
0190   //fill nRecHit counter per layer
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 // -- Book Histograms
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   //std::stringstream folder_name;
0206 
0207   ibooker.cd();
0208   edm::LogInfo("Phase2OTMonitorRecHit") << " Booking Histograms in : " << top_folder;
0209   ibooker.setCurrentFolder(top_folder);
0210 
0211   //Global histos for OT
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   //Now book layer wise histos
0223   edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
0224   if (theTkDigiGeomWatcher.check(iSetup)) {
0225     for (auto const& det_u : tkGeom_->detUnits()) {
0226       //Always check TrackerNumberingBuilder before changing this part
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 // -- Book Layer Histograms
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     }  //if block for P
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   // rechitMonitorOT
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   //Layer wise parameter
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   // or use the following to generate the label from the module's C++ type
0443   //descriptions.addWithDefaultLabel(desc);
0444 }
0445 
0446 //define this as a plug-in
0447 DEFINE_FWK_MODULE(Phase2OTMonitorRecHit);