Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-20 01:53:54

0001 // Package:    Phase2OTValidateRecHitBase
0002 // Class:      Phase2OTValidateRecHitBase
0003 //
0004 /**\class Phase2OTValidateRecHitBase Phase2OTValidateRecHitBase.cc 
0005  Description:  Standalone  Plugin for Phase2 RecHit validation
0006 */
0007 //
0008 // Author: Suvankar Roy Chowdhury
0009 // Date: May 2021
0010 //
0011 // system include files
0012 #include "DQM/SiTrackerPhase2/interface/TrackerPhase2DQMUtil.h"
0013 #include "DataFormats/DetId/interface/DetId.h"
0014 #include "DataFormats/GeometrySurface/interface/LocalError.h"
0015 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0016 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0017 #include "FWCore/Framework/interface/ESWatcher.h"
0018 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0019 #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h"
0020 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0021 #include "Geometry/CommonDetUnit/interface/TrackerGeomDet.h"
0022 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0023 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0024 #include "Validation/SiTrackerPhase2V/interface/Phase2OTValidateRecHitBase.h"
0025 #include "Validation/SiTrackerPhase2V/interface/TrackerPhase2ValidationUtil.h"
0026 
0027 //
0028 // constructors
0029 //
0030 Phase2OTValidateRecHitBase::Phase2OTValidateRecHitBase(const edm::ParameterSet& iConfig)
0031     : config_(iConfig),
0032       geomToken_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, edm::Transition::BeginRun>()),
0033       topoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd, edm::Transition::BeginRun>()) {
0034   edm::LogInfo("Phase2OTValidateRecHitBase") << ">>> Construct Phase2OTValidateRecHitBase ";
0035 }
0036 
0037 //
0038 // destructor
0039 //
0040 Phase2OTValidateRecHitBase::~Phase2OTValidateRecHitBase() {
0041   // do anything here that needs to be done at desctruction time
0042   // (e.g. close files, deallocate resources etc.)
0043   edm::LogInfo("Phase2OTValidateRecHitBase") << ">>> Destroy Phase2OTValidateRecHitBase ";
0044 }
0045 //
0046 // -- DQM Begin Run
0047 void Phase2OTValidateRecHitBase::dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
0048   tkGeom_ = &iSetup.getData(geomToken_);
0049   tTopo_ = &iSetup.getData(topoToken_);
0050 }
0051 
0052 void Phase2OTValidateRecHitBase::fillOTRecHitHistos(const PSimHit* simhitClosest,
0053                                                     const Phase2TrackerRecHit1D* rechit,
0054                                                     const std::map<unsigned int, SimTrack>& selectedSimTrackMap,
0055                                                     std::map<std::string, unsigned int>& nrechitLayerMapP_primary,
0056                                                     std::map<std::string, unsigned int>& nrechitLayerMapS_primary) {
0057   auto detId = rechit->geographicalId();
0058   // Get the geomdet
0059   const GeomDetUnit* geomDetunit(tkGeom_->idToDetUnit(detId));
0060   if (!geomDetunit)
0061     return;
0062   // determine the detector we are in
0063   TrackerGeometry::ModuleType mType = tkGeom_->getDetectorType(detId);
0064   std::string key = phase2tkutil::getOTHistoId(detId.rawId(), tTopo_);
0065 
0066   LocalPoint lp = rechit->localPosition();
0067   auto simTrackIt(selectedSimTrackMap.find(simhitClosest->trackId()));
0068   bool isPrimary = false;
0069   //check if simhit is primary
0070   if (simTrackIt != selectedSimTrackMap.end())
0071     isPrimary = phase2tkutil::isPrimary(simTrackIt->second, simhitClosest);
0072   Local3DPoint simlp(simhitClosest->localPosition());
0073   const LocalError& lperr = rechit->localPositionError();
0074   double dx = lp.x() - simlp.x();
0075   double dy = lp.y() - simlp.y();
0076   double lperrx = std::sqrt(lperr.xx());
0077   double lperry = std::sqrt(lperr.yy());
0078   double pullx = 999.;
0079   double pully = 999.;
0080   if (lperr.xx())
0081     pullx = (dx) / std::sqrt(lperr.xx());
0082   if (lperr.yy())
0083     pully = (dx) / std::sqrt(lperr.yy());
0084   float eta = geomDetunit->surface().toGlobal(lp).eta();
0085   float phi = geomDetunit->surface().toGlobal(lp).phi();
0086 
0087   //scale for plotting
0088   dx *= phase2tkutil::cmtomicron;  //this is always the case
0089   lperrx *= phase2tkutil::cmtomicron;
0090   if (mType == TrackerGeometry::ModuleType::Ph2PSP) {
0091     dy *= phase2tkutil::cmtomicron;  //only for PSP sensors
0092     lperry *= phase2tkutil::cmtomicron;
0093 
0094     layerMEs_[key].deltaX_P->Fill(dx);
0095     layerMEs_[key].deltaY_P->Fill(dy);
0096 
0097     layerMEs_[key].errX_P->Fill(lperrx);
0098     layerMEs_[key].errY_P->Fill(lperry);
0099 
0100     layerMEs_[key].pullX_P->Fill(pullx);
0101     layerMEs_[key].pullY_P->Fill(pully);
0102 
0103     layerMEs_[key].deltaX_eta_P->Fill(std::abs(eta), dx);
0104     layerMEs_[key].deltaY_eta_P->Fill(std::abs(eta), dy);
0105     layerMEs_[key].deltaX_phi_P->Fill(phi, dx);
0106     layerMEs_[key].deltaY_phi_P->Fill(phi, dy);
0107 
0108     /*
0109       constant error, not needed for now
0110  
0111       layerMEs_[key].errX_eta_P->Fill(std::abs(eta), lperrx);
0112       layerMEs_[key].errY_eta_P->Fill(std::abs(eta), lperry);
0113       layerMEs_[key].errX_phi_P->Fill(phi, lperrx);
0114       layerMEs_[key].errY_phi_P->Fill(phi, lperry);
0115     */
0116 
0117     layerMEs_[key].pullX_eta_P->Fill(eta, pullx);
0118     layerMEs_[key].pullY_eta_P->Fill(eta, pully);
0119 
0120     if (isPrimary) {
0121       layerMEs_[key].deltaX_primary_P->Fill(dx);
0122       layerMEs_[key].deltaY_primary_P->Fill(dy);
0123       layerMEs_[key].pullX_primary_P->Fill(pullx);
0124       layerMEs_[key].pullY_primary_P->Fill(pully);
0125     } else
0126       nrechitLayerMapP_primary[key]--;
0127   } else if (mType == TrackerGeometry::ModuleType::Ph2PSS || mType == TrackerGeometry::ModuleType::Ph2SS) {
0128     layerMEs_[key].deltaX_S->Fill(dx);
0129     layerMEs_[key].deltaY_S->Fill(dy);
0130 
0131     layerMEs_[key].pullX_S->Fill(pullx);
0132     layerMEs_[key].pullY_S->Fill(pully);
0133 
0134     layerMEs_[key].errX_S->Fill(lperrx);
0135     layerMEs_[key].errY_S->Fill(lperry);
0136 
0137     layerMEs_[key].deltaX_eta_S->Fill(std::abs(eta), dx);
0138     layerMEs_[key].deltaY_eta_S->Fill(std::abs(eta), dy);
0139     layerMEs_[key].deltaX_phi_S->Fill(phi, dx);
0140     layerMEs_[key].deltaY_phi_S->Fill(phi, dy);
0141 
0142     /*
0143       contant error for now, not needed
0144       layerMEs_[key].errX_eta_S->Fill(std::abs(eta), lperrx);
0145       layerMEs_[key].errY_eta_S->Fill(std::abs(eta), lperry);
0146       layerMEs_[key].errX_phi_S->Fill(phi, lperrx);
0147       layerMEs_[key].errY_phi_S->Fill(phi, lperry);
0148     */
0149 
0150     layerMEs_[key].pullX_eta_S->Fill(eta, pullx);
0151     layerMEs_[key].pullY_eta_S->Fill(eta, pully);
0152 
0153     if (isPrimary) {
0154       layerMEs_[key].deltaX_primary_S->Fill(dx);
0155       layerMEs_[key].deltaY_primary_S->Fill(dy);
0156       layerMEs_[key].pullX_primary_S->Fill(pullx);
0157       layerMEs_[key].pullY_primary_S->Fill(pully);
0158     } else
0159       nrechitLayerMapS_primary[key]--;
0160   }
0161 }
0162 //
0163 // -- Book Histograms
0164 //
0165 void Phase2OTValidateRecHitBase::bookHistograms(DQMStore::IBooker& ibooker,
0166                                                 edm::Run const& iRun,
0167                                                 edm::EventSetup const& iSetup) {
0168   std::string top_folder = config_.getParameter<std::string>("TopFolderName");
0169   //Now book layer wise histos
0170   edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
0171   if (theTkDigiGeomWatcher.check(iSetup)) {
0172     for (auto const& det_u : tkGeom_->detUnits()) {
0173       //Always check TrackerNumberingBuilder before changing this part
0174       if (det_u->subDetector() == GeomDetEnumerators::SubDetector::P2PXB ||
0175           det_u->subDetector() == GeomDetEnumerators::SubDetector::P2PXEC)
0176         continue;
0177       unsigned int detId_raw = det_u->geographicalId().rawId();
0178       bookLayerHistos(ibooker, detId_raw, top_folder);
0179     }
0180   }
0181 }
0182 
0183 //
0184 // -- Book Layer Histograms
0185 //
0186 void Phase2OTValidateRecHitBase::bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id, std::string& subdir) {
0187   std::string key = phase2tkutil::getOTHistoId(det_id, tTopo_);
0188   if (layerMEs_.find(key) == layerMEs_.end()) {
0189     ibooker.cd();
0190     RecHitME local_histos;
0191     ibooker.setCurrentFolder(subdir + "/" + key);
0192     edm::LogInfo("Phase2OTValidateRecHitBase") << " Booking Histograms in : " << key;
0193 
0194     if (tkGeom_->getDetectorType(det_id) == TrackerGeometry::ModuleType::Ph2PSP) {
0195       local_histos.deltaX_P =
0196           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Pixel"), ibooker);
0197       local_histos.deltaY_P =
0198           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_Pixel"), ibooker);
0199 
0200       local_histos.errX_P =
0201           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("err_X_Pixel"), ibooker);
0202       local_histos.errY_P =
0203           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("err_Y_Pixel"), ibooker);
0204 
0205       local_histos.pullX_P =
0206           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Pixel"), ibooker);
0207       local_histos.pullY_P =
0208           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_Y_Pixel"), ibooker);
0209 
0210       /* residuals */
0211 
0212       local_histos.deltaX_eta_P =
0213           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_vs_eta_Pixel"), ibooker);
0214       local_histos.deltaY_eta_P =
0215           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_vs_eta_Pixel"), ibooker);
0216 
0217       local_histos.deltaX_phi_P =
0218           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_vs_phi_Pixel"), ibooker);
0219       local_histos.deltaY_phi_P =
0220           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_vs_phi_Pixel"), ibooker);
0221 
0222       local_histos.pullX_eta_P =
0223           phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_vs_eta_Pixel"), ibooker);
0224       local_histos.pullY_eta_P =
0225           phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_Y_vs_eta_Pixel"), ibooker);
0226 
0227       /* errors  (not needed for now)
0228      
0229       local_histos.errX_eta_P =
0230           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("err_X_vs_eta_Pixel"), ibooker);
0231       local_histos.errY_eta_P =
0232           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("err_Y_vs_eta_Pixel"), ibooker);
0233 
0234       local_histos.errX_phi_P =
0235           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("err_X_vs_phi_Pixel"), ibooker);
0236       local_histos.errY_phi_P =
0237           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("err_Y_vs_phi_Pixel"), ibooker);
0238 
0239       */
0240 
0241       ibooker.setCurrentFolder(subdir + "/" + key + "/PrimarySimHits");
0242       //all histos for Primary particles
0243       local_histos.numberRecHitsprimary_P =
0244           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("nRecHits_Pixel_primary"), ibooker);
0245 
0246       local_histos.deltaX_primary_P =
0247           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Pixel_Primary"), ibooker);
0248       local_histos.deltaY_primary_P =
0249           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_Pixel_Primary"), ibooker);
0250 
0251       local_histos.pullX_primary_P =
0252           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Pixel_Primary"), ibooker);
0253       local_histos.pullY_primary_P =
0254           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_Y_Pixel_Primary"), ibooker);
0255     }  //if block for P
0256 
0257     ibooker.setCurrentFolder(subdir + "/" + key);
0258     local_histos.deltaX_S =
0259         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Strip"), ibooker);
0260     local_histos.deltaY_S =
0261         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_Strip"), ibooker);
0262 
0263     local_histos.errX_S = phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("err_X_Strip"), ibooker);
0264     local_histos.errY_S = phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("err_Y_Strip"), ibooker);
0265 
0266     local_histos.pullX_S =
0267         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Strip"), ibooker);
0268     local_histos.pullY_S =
0269         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_Y_Strip"), ibooker);
0270 
0271     /* delta */
0272 
0273     local_histos.deltaX_eta_S =
0274         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_vs_eta_Strip"), ibooker);
0275     local_histos.deltaY_eta_S =
0276         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_vs_eta_Strip"), ibooker);
0277 
0278     local_histos.deltaX_phi_S =
0279         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_vs_phi_Strip"), ibooker);
0280     local_histos.deltaY_phi_S =
0281         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_vs_phi_Strip"), ibooker);
0282 
0283     /* errors (not needed for now)
0284 
0285     local_histos.errX_eta_S =
0286         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("err_X_vs_eta_Strip"), ibooker);
0287     local_histos.errY_eta_S =
0288         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("err_Y_vs_eta_Strip"), ibooker);
0289 
0290     local_histos.errX_phi_S =
0291         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("err_X_vs_phi_Strip"), ibooker);
0292     local_histos.errY_phi_S =
0293         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("err_Y_vs_phi_Strip"), ibooker);
0294 
0295     */
0296 
0297     local_histos.pullX_eta_S =
0298         phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_vs_eta_Strip"), ibooker);
0299     local_histos.pullY_eta_S =
0300         phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_Y_vs_eta_Pixel"), ibooker);
0301 
0302     //primary
0303     ibooker.setCurrentFolder(subdir + "/" + key + "/PrimarySimHits");
0304     local_histos.numberRecHitsprimary_S =
0305         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("nRecHits_Strip_primary"), ibooker);
0306 
0307     local_histos.deltaX_primary_S =
0308         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Strip_Primary"), ibooker);
0309     local_histos.deltaY_primary_S =
0310         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_Strip_Primary"), ibooker);
0311 
0312     local_histos.pullX_primary_S =
0313         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Strip_Primary"), ibooker);
0314     local_histos.pullY_primary_S =
0315         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Strip_Primary"), ibooker);
0316 
0317     layerMEs_.insert(std::make_pair(key, local_histos));
0318   }
0319 }
0320 
0321 void Phase2OTValidateRecHitBase::fillPSetDescription(edm::ParameterSetDescription& desc) {
0322   // rechitValidOT
0323   //for macro-pixel sensors
0324   std::string mptag = "macro-pixel sensor";
0325   std::string striptag = "strip sensor";
0326   {
0327     edm::ParameterSetDescription psd0;
0328     psd0.add<std::string>("name", "Delta_X_Pixel");
0329     psd0.add<std::string>("title", "#Delta X " + mptag + ";Cluster resolution X coordinate [#mum]");
0330     psd0.add<bool>("switch", true);
0331     psd0.add<double>("xmax", 250);
0332     psd0.add<double>("xmin", -250);
0333     psd0.add<int>("NxBins", 100);
0334     desc.add<edm::ParameterSetDescription>("Delta_X_Pixel", psd0);
0335   }
0336   {
0337     edm::ParameterSetDescription psd0;
0338     psd0.add<std::string>("name", "Delta_Y_Pixel");
0339     psd0.add<std::string>("title", "#Delta Y " + mptag + ";Cluster resolution Y coordinate [#mum]");
0340     psd0.add<bool>("switch", true);
0341     psd0.add<double>("xmin", -1500);
0342     psd0.add<double>("xmax", 1500);
0343     psd0.add<int>("NxBins", 100);
0344     desc.add<edm::ParameterSetDescription>("Delta_Y_Pixel", psd0);
0345   }
0346   {
0347     edm::ParameterSetDescription psd0;
0348     psd0.add<std::string>("name", "err_X_Pixel");
0349     psd0.add<std::string>("title", "error X " + mptag + ";Cluster error X coordinate [#mum]");
0350     psd0.add<bool>("switch", true);
0351     psd0.add<double>("xmax", 0.);
0352     psd0.add<double>("xmin", 100.);
0353     psd0.add<int>("NxBins", 100);
0354     desc.add<edm::ParameterSetDescription>("err_X_Pixel", psd0);
0355   }
0356   {
0357     edm::ParameterSetDescription psd0;
0358     psd0.add<std::string>("name", "err_Y_Pixel");
0359     psd0.add<std::string>("title", "error Y " + mptag + ";Cluster error Y coordinate [#mum]");
0360     psd0.add<bool>("switch", true);
0361     psd0.add<double>("xmin", 0.);
0362     psd0.add<double>("xmax", 500.);
0363     psd0.add<int>("NxBins", 100);
0364     desc.add<edm::ParameterSetDescription>("err_Y_Pixel", psd0);
0365   }
0366 
0367   {
0368     edm::ParameterSetDescription psd0;
0369     psd0.add<std::string>("name", "Delta_X_Pixel_Primary");
0370     psd0.add<std::string>("title", "#Delta X " + mptag + ";cluster resolution X coordinate [#mum]");
0371     psd0.add<bool>("switch", true);
0372     psd0.add<double>("xmin", -250);
0373     psd0.add<double>("xmax", 250);
0374     psd0.add<int>("NxBins", 100);
0375     desc.add<edm::ParameterSetDescription>("Delta_X_Pixel_Primary", psd0);
0376   }
0377   {
0378     edm::ParameterSetDescription psd0;
0379     psd0.add<std::string>("name", "Delta_Y_Pixel_Primary");
0380     psd0.add<std::string>("title", "#Delta Y " + mptag + ";cluster resolution Y coordinate [#mum]");
0381     psd0.add<bool>("switch", true);
0382     psd0.add<double>("xmin", -500);
0383     psd0.add<double>("xmax", 500);
0384     psd0.add<int>("NxBins", 100);
0385     desc.add<edm::ParameterSetDescription>("Delta_Y_Pixel_Primary", psd0);
0386   }
0387 
0388   {
0389     edm::ParameterSetDescription psd0;
0390     psd0.add<std::string>("name", "Delta_X_vs_Eta_Pixel");
0391     psd0.add<std::string>("title", ";|#eta|;#Delta x [#mum]");
0392     psd0.add<int>("NyBins", 250);
0393     psd0.add<double>("ymin", -250.0);
0394     psd0.add<double>("ymax", 250.0);
0395     psd0.add<int>("NxBins", 41);
0396     psd0.add<bool>("switch", true);
0397     psd0.add<double>("xmax", 4.1);
0398     psd0.add<double>("xmin", 0.);
0399     desc.add<edm::ParameterSetDescription>("Delta_X_vs_eta_Pixel", psd0);
0400   }
0401   {
0402     edm::ParameterSetDescription psd0;
0403     psd0.add<std::string>("name", "Delta_Y_vs_Eta_Pixel");
0404     psd0.add<std::string>("title", ";|#eta|;#Delta y [#mum]");
0405     psd0.add<int>("NyBins", 300);
0406     psd0.add<double>("ymin", -1500.0);
0407     psd0.add<double>("ymax", 1500.0);
0408     psd0.add<int>("NxBins", 41);
0409     psd0.add<bool>("switch", true);
0410     psd0.add<double>("xmax", 4.1);
0411     psd0.add<double>("xmin", 0.);
0412     desc.add<edm::ParameterSetDescription>("Delta_Y_vs_eta_Pixel", psd0);
0413   }
0414 
0415   {
0416     edm::ParameterSetDescription psd0;
0417     psd0.add<std::string>("name", "Delta_X_vs_Phi_Pixel");
0418     psd0.add<std::string>("title", ";#phi;#Delta x [#mum]");
0419     psd0.add<int>("NyBins", 250);
0420     psd0.add<double>("ymin", -250.0);
0421     psd0.add<double>("ymax", 250.0);
0422     psd0.add<int>("NxBins", 36);
0423     psd0.add<bool>("switch", true);
0424     psd0.add<double>("xmax", M_PI);
0425     psd0.add<double>("xmin", -M_PI);
0426     desc.add<edm::ParameterSetDescription>("Delta_X_vs_phi_Pixel", psd0);
0427   }
0428   {
0429     edm::ParameterSetDescription psd0;
0430     psd0.add<std::string>("name", "Delta_Y_vs_Phi_Pixel");
0431     psd0.add<std::string>("title", ";#phi;#Delta y [#mum]");
0432     psd0.add<int>("NyBins", 300);
0433     psd0.add<double>("ymin", -1500.0);
0434     psd0.add<double>("ymax", 1500.0);
0435     psd0.add<int>("NxBins", 35);
0436     psd0.add<bool>("switch", true);
0437     psd0.add<double>("xmax", M_PI);
0438     psd0.add<double>("xmin", -M_PI);
0439     desc.add<edm::ParameterSetDescription>("Delta_Y_vs_phi_Pixel", psd0);
0440   }
0441 
0442   // errors macro-pixels
0443   {
0444     edm::ParameterSetDescription psd0;
0445     psd0.add<std::string>("name", "err_X_vs_Eta_Pixel");
0446     psd0.add<std::string>("title", ";|#eta|;local error x [#mum]");
0447     psd0.add<int>("NyBins", 100);
0448     psd0.add<double>("ymin", 0);
0449     psd0.add<double>("ymax", 100.0);
0450     psd0.add<int>("NxBins", 41);
0451     psd0.add<bool>("switch", true);
0452     psd0.add<double>("xmax", 4.1);
0453     psd0.add<double>("xmin", 0.);
0454     desc.add<edm::ParameterSetDescription>("err_X_vs_eta_Pixel", psd0);
0455   }
0456   {
0457     edm::ParameterSetDescription psd0;
0458     psd0.add<std::string>("name", "err_Y_vs_Eta_Pixel");
0459     psd0.add<std::string>("title", ";|#eta|;local error y [#mum]");
0460     psd0.add<int>("NyBins", 100);
0461     psd0.add<double>("ymin", 0.);
0462     psd0.add<double>("ymax", 500.0);
0463     psd0.add<int>("NxBins", 41);
0464     psd0.add<bool>("switch", true);
0465     psd0.add<double>("xmax", 4.1);
0466     psd0.add<double>("xmin", 0.);
0467     desc.add<edm::ParameterSetDescription>("err_Y_vs_eta_Pixel", psd0);
0468   }
0469 
0470   {
0471     edm::ParameterSetDescription psd0;
0472     psd0.add<std::string>("name", "err_X_vs_Phi_Pixel");
0473     psd0.add<std::string>("title", ";#phi;local error x [#mum]");
0474     psd0.add<int>("NyBins", 100);
0475     psd0.add<double>("ymin", 0.);
0476     psd0.add<double>("ymax", 100.0);
0477     psd0.add<int>("NxBins", 36);
0478     psd0.add<bool>("switch", true);
0479     psd0.add<double>("xmax", M_PI);
0480     psd0.add<double>("xmin", -M_PI);
0481     desc.add<edm::ParameterSetDescription>("err_X_vs_phi_Pixel", psd0);
0482   }
0483   {
0484     edm::ParameterSetDescription psd0;
0485     psd0.add<std::string>("name", "err_Y_vs_Phi_Pixel");
0486     psd0.add<std::string>("title", ";#phi;local error y [#mum]");
0487     psd0.add<int>("NyBins", 100);
0488     psd0.add<double>("ymin", 0.);
0489     psd0.add<double>("ymax", 500.);
0490     psd0.add<int>("NxBins", 35);
0491     psd0.add<bool>("switch", true);
0492     psd0.add<double>("xmax", M_PI);
0493     psd0.add<double>("xmin", -M_PI);
0494     desc.add<edm::ParameterSetDescription>("err_Y_vs_phi_Pixel", psd0);
0495   }
0496   //Pulls macro-pixel
0497   {
0498     edm::ParameterSetDescription psd0;
0499     psd0.add<std::string>("name", "Pull_X_Pixel");
0500     psd0.add<std::string>("title", "Pull X " + mptag + ";pull x;");
0501     psd0.add<double>("xmin", -4.0);
0502     psd0.add<bool>("switch", true);
0503     psd0.add<double>("xmax", 4.0);
0504     psd0.add<int>("NxBins", 100);
0505     desc.add<edm::ParameterSetDescription>("Pull_X_Pixel", psd0);
0506   }
0507   {
0508     edm::ParameterSetDescription psd0;
0509     psd0.add<std::string>("name", "Pull_Y_Pixel");
0510     psd0.add<std::string>("title", "Pull Y " + mptag + ";pull y;");
0511     psd0.add<double>("xmin", -4.0);
0512     psd0.add<bool>("switch", true);
0513     psd0.add<double>("xmax", 4.0);
0514     psd0.add<int>("NxBins", 100);
0515     desc.add<edm::ParameterSetDescription>("Pull_Y_Pixel", psd0);
0516   }
0517 
0518   {
0519     edm::ParameterSetDescription psd0;
0520     psd0.add<std::string>("name", "Pull_X_Pixel_Primary");
0521     psd0.add<std::string>("title", "Pull X " + mptag + ";pull x;");
0522     psd0.add<double>("xmin", -4.0);
0523     psd0.add<bool>("switch", true);
0524     psd0.add<double>("xmax", 4.0);
0525     psd0.add<int>("NxBins", 100);
0526     desc.add<edm::ParameterSetDescription>("Pull_X_Pixel_Primary", psd0);
0527   }
0528   {
0529     edm::ParameterSetDescription psd0;
0530     psd0.add<std::string>("name", "Pull_Y_Pixel_Primary");
0531     psd0.add<std::string>("title", "Pull Y " + mptag + ";pull y;");
0532     psd0.add<double>("xmin", -4.0);
0533     psd0.add<bool>("switch", true);
0534     psd0.add<double>("xmax", 4.0);
0535     psd0.add<int>("NxBins", 100);
0536     desc.add<edm::ParameterSetDescription>("Pull_Y_Pixel_Primary", psd0);
0537   }
0538   {
0539     edm::ParameterSetDescription psd0;
0540     psd0.add<std::string>("name", "Pull_X_vs_Eta");
0541     psd0.add<std::string>("title", ";#eta;pull x");
0542     psd0.add<double>("ymax", 4.0);
0543     psd0.add<int>("NxBins", 82);
0544     psd0.add<bool>("switch", true);
0545     psd0.add<double>("xmax", 4.1);
0546     psd0.add<double>("xmin", -4.1);
0547     psd0.add<double>("ymin", -4.0);
0548     desc.add<edm::ParameterSetDescription>("Pull_X_vs_eta_Pixel", psd0);
0549   }
0550   {
0551     edm::ParameterSetDescription psd0;
0552     psd0.add<std::string>("name", "Pull_Y_vs_Eta");
0553     psd0.add<std::string>("title", ";#eta;pull y");
0554     psd0.add<double>("ymax", 4.0);
0555     psd0.add<int>("NxBins", 82);
0556     psd0.add<bool>("switch", true);
0557     psd0.add<double>("xmax", 4.1);
0558     psd0.add<double>("xmin", -4.1);
0559     psd0.add<double>("ymin", -4.0);
0560     desc.add<edm::ParameterSetDescription>("Pull_Y_vs_eta_Pixel", psd0);
0561   }
0562   {
0563     edm::ParameterSetDescription psd0;
0564     psd0.add<std::string>("name", "Number_RecHits_matched_PrimarySimTrack");
0565     psd0.add<std::string>("title", "Number of RecHits matched to primary SimTrack;;");
0566     psd0.add<double>("xmin", 0.0);
0567     psd0.add<bool>("switch", true);
0568     psd0.add<double>("xmax", 10000.0);
0569     psd0.add<int>("NxBins", 100);
0570     desc.add<edm::ParameterSetDescription>("nRecHits_Pixel_primary", psd0);
0571   }
0572   //strip sensors
0573   {
0574     edm::ParameterSetDescription psd0;
0575     psd0.add<std::string>("name", "Delta_X_Strip");
0576     psd0.add<std::string>("title", "#Delta X " + striptag + ";Cluster resolution X coordinate [#mum]");
0577     psd0.add<bool>("switch", true);
0578     psd0.add<double>("xmin", -250);
0579     psd0.add<double>("xmax", 250);
0580     psd0.add<int>("NxBins", 100);
0581     desc.add<edm::ParameterSetDescription>("Delta_X_Strip", psd0);
0582   }
0583   {
0584     edm::ParameterSetDescription psd0;
0585     psd0.add<std::string>("name", "Delta_Y_Strip");
0586     psd0.add<std::string>("title", "#Delta Y " + striptag + ";Cluster resolution Y coordinate [cm]");
0587     psd0.add<double>("xmin", -5.0);
0588     psd0.add<bool>("switch", true);
0589     psd0.add<double>("xmax", 5.0);
0590     psd0.add<int>("NxBins", 100);
0591     desc.add<edm::ParameterSetDescription>("Delta_Y_Strip", psd0);
0592   }
0593 
0594   // errors
0595   {
0596     edm::ParameterSetDescription psd0;
0597     psd0.add<std::string>("name", "err_X_Strip");
0598     psd0.add<std::string>("title", "local error X " + striptag + ";Cluster error X coordinate [#mum]");
0599     psd0.add<bool>("switch", true);
0600     psd0.add<double>("xmin", 0.);
0601     psd0.add<double>("xmax", 100);
0602     psd0.add<int>("NxBins", 100);
0603     desc.add<edm::ParameterSetDescription>("err_X_Strip", psd0);
0604   }
0605   {
0606     edm::ParameterSetDescription psd0;
0607     psd0.add<std::string>("name", "err_Y_Strip");
0608     psd0.add<std::string>("title", "local error Y " + striptag + ";Cluster error Y coordinate [cm]");
0609     psd0.add<double>("xmin", 0.);
0610     psd0.add<bool>("switch", true);
0611     psd0.add<double>("xmax", 10.);
0612     psd0.add<int>("NxBins", 100);
0613     desc.add<edm::ParameterSetDescription>("err_Y_Strip", psd0);
0614   }
0615   {
0616     edm::ParameterSetDescription psd0;
0617     psd0.add<std::string>("name", "Delta_X_Strip_Primary");
0618     psd0.add<std::string>("title", "#Delta X " + striptag + ";Cluster resolution X coordinate [#mum]");
0619     psd0.add<bool>("switch", true);
0620     psd0.add<double>("xmin", -250);
0621     psd0.add<double>("xmax", 250);
0622     psd0.add<int>("NxBins", 100);
0623     desc.add<edm::ParameterSetDescription>("Delta_X_Strip_Primary", psd0);
0624   }
0625   {
0626     edm::ParameterSetDescription psd0;
0627     psd0.add<std::string>("name", "Delta_Y_Strip_Primary");
0628     psd0.add<std::string>("title", "#Delta Y " + striptag + ";Cluster resolution Y coordinate [cm]");
0629     psd0.add<double>("xmin", -5.0);
0630     psd0.add<bool>("switch", true);
0631     psd0.add<double>("xmax", 5.0);
0632     psd0.add<int>("NxBins", 100);
0633     desc.add<edm::ParameterSetDescription>("Delta_Y_Strip_Primary", psd0);
0634   }
0635 
0636   {
0637     edm::ParameterSetDescription psd0;
0638     psd0.add<std::string>("name", "Delta_X_vs_Eta_Strip");
0639     psd0.add<std::string>("title", ";|#eta|;#Delta x [#mum]");
0640     psd0.add<int>("NyBins", 250);
0641     psd0.add<double>("ymin", -250.0);
0642     psd0.add<double>("ymax", 250.0);
0643     psd0.add<int>("NxBins", 41);
0644     psd0.add<bool>("switch", true);
0645     psd0.add<double>("xmax", 4.1);
0646     psd0.add<double>("xmin", 0.);
0647     desc.add<edm::ParameterSetDescription>("Delta_X_vs_eta_Strip", psd0);
0648   }
0649   {
0650     edm::ParameterSetDescription psd0;
0651     psd0.add<std::string>("name", "Delta_Y_vs_Eta_Strip");
0652     psd0.add<std::string>("title", ";|#eta|;#Delta y [cm]");
0653     psd0.add<int>("NyBins", 100);
0654     psd0.add<double>("ymin", -5.0);
0655     psd0.add<double>("ymax", 5.0);
0656     psd0.add<int>("NxBins", 41);
0657     psd0.add<bool>("switch", true);
0658     psd0.add<double>("xmax", 4.1);
0659     psd0.add<double>("xmin", 0.);
0660     desc.add<edm::ParameterSetDescription>("Delta_Y_vs_eta_Strip", psd0);
0661   }
0662 
0663   {
0664     edm::ParameterSetDescription psd0;
0665     psd0.add<std::string>("name", "Delta_X_vs_Phi_Strip");
0666     psd0.add<std::string>("title", ";#phi;#Delta x [#mum]");
0667     psd0.add<int>("NyBins", 250);
0668     psd0.add<double>("ymin", -250.0);
0669     psd0.add<double>("ymax", 250.0);
0670     psd0.add<int>("NxBins", 36);
0671     psd0.add<bool>("switch", true);
0672     psd0.add<double>("xmax", M_PI);
0673     psd0.add<double>("xmin", -M_PI);
0674     desc.add<edm::ParameterSetDescription>("Delta_X_vs_phi_Strip", psd0);
0675   }
0676   {
0677     edm::ParameterSetDescription psd0;
0678     psd0.add<std::string>("name", "Delta_Y_vs_Phi_Strip");
0679     psd0.add<std::string>("title", ";#phi;#Delta y [cm]");
0680     psd0.add<int>("NyBins", 100);
0681     psd0.add<double>("ymin", -5.0);
0682     psd0.add<double>("ymax", 5.0);
0683     psd0.add<int>("NxBins", 36);
0684     psd0.add<bool>("switch", true);
0685     psd0.add<double>("xmax", M_PI);
0686     psd0.add<double>("xmin", -M_PI);
0687     desc.add<edm::ParameterSetDescription>("Delta_Y_vs_phi_Strip", psd0);
0688   }
0689 
0690   // erorrs strips
0691   {
0692     edm::ParameterSetDescription psd0;
0693     psd0.add<std::string>("name", "err_X_vs_Eta_Strip");
0694     psd0.add<std::string>("title", ";|#eta|;local error x [#mum]");
0695     psd0.add<int>("NyBins", 100);
0696     psd0.add<double>("ymin", 0.);
0697     psd0.add<double>("ymax", 100.0);
0698     psd0.add<int>("NxBins", 41);
0699     psd0.add<bool>("switch", true);
0700     psd0.add<double>("xmax", 4.1);
0701     psd0.add<double>("xmin", 0.);
0702     desc.add<edm::ParameterSetDescription>("err_X_vs_eta_Strip", psd0);
0703   }
0704   {
0705     edm::ParameterSetDescription psd0;
0706     psd0.add<std::string>("name", "err_Y_vs_Eta_Strip");
0707     psd0.add<std::string>("title", ";|#eta|;local error y [cm]");
0708     psd0.add<int>("NyBins", 100);
0709     psd0.add<double>("ymin", 0.);
0710     psd0.add<double>("ymax", 10.);
0711     psd0.add<int>("NxBins", 41);
0712     psd0.add<bool>("switch", true);
0713     psd0.add<double>("xmax", 4.1);
0714     psd0.add<double>("xmin", 0.);
0715     desc.add<edm::ParameterSetDescription>("err_Y_vs_eta_Strip", psd0);
0716   }
0717   {
0718     edm::ParameterSetDescription psd0;
0719     psd0.add<std::string>("name", "err_X_vs_Phi_Strip");
0720     psd0.add<std::string>("title", ";#phi;local error x [#mum]");
0721     psd0.add<int>("NyBins", 100);
0722     psd0.add<double>("ymin", 0.);
0723     psd0.add<double>("ymax", 100.0);
0724     psd0.add<int>("NxBins", 36);
0725     psd0.add<bool>("switch", true);
0726     psd0.add<double>("xmax", M_PI);
0727     psd0.add<double>("xmin", -M_PI);
0728     desc.add<edm::ParameterSetDescription>("err_X_vs_phi_Strip", psd0);
0729   }
0730   {
0731     edm::ParameterSetDescription psd0;
0732     psd0.add<std::string>("name", "err_Y_vs_Phi_Strip");
0733     psd0.add<std::string>("title", ";#phi;local error y [cm]");
0734     psd0.add<int>("NyBins", 100);
0735     psd0.add<double>("ymin", 0.);
0736     psd0.add<double>("ymax", 10.);
0737     psd0.add<int>("NxBins", 36);
0738     psd0.add<bool>("switch", true);
0739     psd0.add<double>("xmax", M_PI);
0740     psd0.add<double>("xmin", -M_PI);
0741     desc.add<edm::ParameterSetDescription>("err_Y_vs_phi_Strip", psd0);
0742   }
0743   //pulls strips
0744   {
0745     edm::ParameterSetDescription psd0;
0746     psd0.add<std::string>("name", "Pull_X_Strip");
0747     psd0.add<std::string>("title", "Pull X " + striptag + ";pull x;");
0748     psd0.add<double>("xmin", -4.0);
0749     psd0.add<bool>("switch", true);
0750     psd0.add<double>("xmax", 4.0);
0751     psd0.add<int>("NxBins", 100);
0752     desc.add<edm::ParameterSetDescription>("Pull_X_Strip", psd0);
0753   }
0754   {
0755     edm::ParameterSetDescription psd0;
0756     psd0.add<std::string>("name", "Pull_Y_Strip");
0757     psd0.add<std::string>("title", "Pull Y " + striptag + ";pull y;");
0758     psd0.add<double>("xmin", -4.0);
0759     psd0.add<bool>("switch", true);
0760     psd0.add<double>("xmax", 4.0);
0761     psd0.add<int>("NxBins", 100);
0762     desc.add<edm::ParameterSetDescription>("Pull_Y_Strip", psd0);
0763   }
0764 
0765   {
0766     edm::ParameterSetDescription psd0;
0767     psd0.add<std::string>("name", "Pull_X_Strip_Primary");
0768     psd0.add<std::string>("title", "Pull X " + striptag + ";pull x;");
0769     psd0.add<double>("xmin", -4.0);
0770     psd0.add<bool>("switch", true);
0771     psd0.add<double>("xmax", 4.0);
0772     psd0.add<int>("NxBins", 100);
0773     desc.add<edm::ParameterSetDescription>("Pull_X_Strip_Primary", psd0);
0774   }
0775   {
0776     edm::ParameterSetDescription psd0;
0777     psd0.add<std::string>("name", "Pull_Y_Strip_Primary");
0778     psd0.add<std::string>("title", "Pull Y " + striptag + ";pull y;");
0779     psd0.add<double>("xmin", -4.0);
0780     psd0.add<bool>("switch", true);
0781     psd0.add<double>("xmax", 4.0);
0782     psd0.add<int>("NxBins", 100);
0783     desc.add<edm::ParameterSetDescription>("Pull_Y_Strip_Primary", psd0);
0784   }
0785   {
0786     edm::ParameterSetDescription psd0;
0787     psd0.add<std::string>("name", "Pull_X_vs_Eta_Strip");
0788     psd0.add<std::string>("title", ";#eta;pull x");
0789     psd0.add<double>("ymax", 4.0);
0790     psd0.add<int>("NxBins", 82);
0791     psd0.add<bool>("switch", true);
0792     psd0.add<double>("xmax", 4.1);
0793     psd0.add<double>("xmin", -4.1);
0794     psd0.add<double>("ymin", -4.0);
0795     desc.add<edm::ParameterSetDescription>("Pull_X_vs_eta_Strip", psd0);
0796   }
0797   {
0798     edm::ParameterSetDescription psd0;
0799     psd0.add<std::string>("name", "Pull_Y_vs_Eta_Strip");
0800     psd0.add<std::string>("title", ";#eta;pull y");
0801     psd0.add<double>("ymax", 4.0);
0802     psd0.add<int>("NxBins", 82);
0803     psd0.add<bool>("switch", true);
0804     psd0.add<double>("xmax", 4.1);
0805     psd0.add<double>("xmin", -4.1);
0806     psd0.add<double>("ymin", -4.0);
0807     desc.add<edm::ParameterSetDescription>("Pull_Y_vs_eta_Strip", psd0);
0808   }
0809   {
0810     edm::ParameterSetDescription psd0;
0811     psd0.add<std::string>("name", "Number_RecHits_matched_PrimarySimTrack");
0812     psd0.add<std::string>("title", "Number of RecHits matched to primary SimTrack;;");
0813     psd0.add<double>("xmin", 0.0);
0814     psd0.add<bool>("switch", true);
0815     psd0.add<double>("xmax", 10000.0);
0816     psd0.add<int>("NxBins", 100);
0817     desc.add<edm::ParameterSetDescription>("nRecHits_Strip_primary", psd0);
0818   }
0819 }
0820 
0821 //define this as a plug-in
0822 DEFINE_FWK_MODULE(Phase2OTValidateRecHitBase);