Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 10:07:40

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 "Validation/SiTrackerPhase2V/interface/Phase2OTValidateRecHitBase.h"
0013 #include "Validation/SiTrackerPhase2V/interface/TrackerPhase2ValidationUtil.h"
0014 #include "DQM/SiTrackerPhase2/interface/TrackerPhase2DQMUtil.h"
0015 #include "FWCore/Framework/interface/ESWatcher.h"
0016 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0017 #include "DataFormats/DetId/interface/DetId.h"
0018 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0019 #include "Geometry/CommonDetUnit/interface/TrackerGeomDet.h"
0020 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0021 #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h"
0022 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0023 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0024 #include "DataFormats/GeometrySurface/interface/LocalError.h"
0025 #include "DataFormats/GeometryVector/interface/LocalPoint.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 pullx = 999.;
0077   double pully = 999.;
0078   if (lperr.xx())
0079     pullx = (dx) / std::sqrt(lperr.xx());
0080   if (lperr.yy())
0081     pully = (dx) / std::sqrt(lperr.yy());
0082   float eta = geomDetunit->surface().toGlobal(lp).eta();
0083   float phi = geomDetunit->surface().toGlobal(lp).phi();
0084 
0085   //scale for plotting
0086   dx *= phase2tkutil::cmtomicron;  //this is always the case
0087   if (mType == TrackerGeometry::ModuleType::Ph2PSP) {
0088     dy *= phase2tkutil::cmtomicron;  //only for PSP sensors
0089 
0090     layerMEs_[key].deltaX_P->Fill(dx);
0091     layerMEs_[key].deltaY_P->Fill(dy);
0092 
0093     layerMEs_[key].pullX_P->Fill(pullx);
0094     layerMEs_[key].pullY_P->Fill(pully);
0095 
0096     layerMEs_[key].deltaX_eta_P->Fill(std::abs(eta), dx);
0097     layerMEs_[key].deltaY_eta_P->Fill(std::abs(eta), dy);
0098     layerMEs_[key].deltaX_phi_P->Fill(phi, dx);
0099     layerMEs_[key].deltaY_phi_P->Fill(phi, dy);
0100 
0101     layerMEs_[key].pullX_eta_P->Fill(eta, pullx);
0102     layerMEs_[key].pullY_eta_P->Fill(eta, pully);
0103 
0104     if (isPrimary) {
0105       layerMEs_[key].deltaX_primary_P->Fill(dx);
0106       layerMEs_[key].deltaY_primary_P->Fill(dy);
0107       layerMEs_[key].pullX_primary_P->Fill(pullx);
0108       layerMEs_[key].pullY_primary_P->Fill(pully);
0109     } else
0110       nrechitLayerMapP_primary[key]--;
0111   } else if (mType == TrackerGeometry::ModuleType::Ph2PSS || mType == TrackerGeometry::ModuleType::Ph2SS) {
0112     layerMEs_[key].deltaX_S->Fill(dx);
0113     layerMEs_[key].deltaY_S->Fill(dy);
0114 
0115     layerMEs_[key].pullX_S->Fill(pullx);
0116     layerMEs_[key].pullY_S->Fill(pully);
0117 
0118     layerMEs_[key].deltaX_eta_S->Fill(std::abs(eta), dx);
0119     layerMEs_[key].deltaY_eta_S->Fill(std::abs(eta), dy);
0120     layerMEs_[key].deltaX_phi_S->Fill(phi, dx);
0121     layerMEs_[key].deltaY_phi_S->Fill(phi, dy);
0122 
0123     layerMEs_[key].pullX_eta_S->Fill(eta, pullx);
0124     layerMEs_[key].pullY_eta_S->Fill(eta, pully);
0125 
0126     if (isPrimary) {
0127       layerMEs_[key].deltaX_primary_S->Fill(dx);
0128       layerMEs_[key].deltaY_primary_S->Fill(dy);
0129       layerMEs_[key].pullX_primary_S->Fill(pullx);
0130       layerMEs_[key].pullY_primary_S->Fill(pully);
0131     } else
0132       nrechitLayerMapS_primary[key]--;
0133   }
0134 }
0135 //
0136 // -- Book Histograms
0137 //
0138 void Phase2OTValidateRecHitBase::bookHistograms(DQMStore::IBooker& ibooker,
0139                                                 edm::Run const& iRun,
0140                                                 edm::EventSetup const& iSetup) {
0141   std::string top_folder = config_.getParameter<std::string>("TopFolderName");
0142   //Now book layer wise histos
0143   edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
0144   if (theTkDigiGeomWatcher.check(iSetup)) {
0145     for (auto const& det_u : tkGeom_->detUnits()) {
0146       //Always check TrackerNumberingBuilder before changing this part
0147       if (det_u->subDetector() == GeomDetEnumerators::SubDetector::P2PXB ||
0148           det_u->subDetector() == GeomDetEnumerators::SubDetector::P2PXEC)
0149         continue;
0150       unsigned int detId_raw = det_u->geographicalId().rawId();
0151       bookLayerHistos(ibooker, detId_raw, top_folder);
0152     }
0153   }
0154 }
0155 
0156 //
0157 // -- Book Layer Histograms
0158 //
0159 void Phase2OTValidateRecHitBase::bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id, std::string& subdir) {
0160   std::string key = phase2tkutil::getOTHistoId(det_id, tTopo_);
0161   if (layerMEs_.find(key) == layerMEs_.end()) {
0162     ibooker.cd();
0163     RecHitME local_histos;
0164     ibooker.setCurrentFolder(subdir + "/" + key);
0165     edm::LogInfo("Phase2OTValidateRecHitBase") << " Booking Histograms in : " << key;
0166 
0167     if (tkGeom_->getDetectorType(det_id) == TrackerGeometry::ModuleType::Ph2PSP) {
0168       local_histos.deltaX_P =
0169           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Pixel"), ibooker);
0170       local_histos.deltaY_P =
0171           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_Pixel"), ibooker);
0172 
0173       local_histos.pullX_P =
0174           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Pixel"), ibooker);
0175       local_histos.pullY_P =
0176           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Pixel"), ibooker);
0177 
0178       local_histos.deltaX_eta_P =
0179           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_vs_eta_Pixel"), ibooker);
0180       local_histos.deltaY_eta_P =
0181           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_vs_eta_Pixel"), ibooker);
0182 
0183       local_histos.deltaX_phi_P =
0184           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_vs_phi_Pixel"), ibooker);
0185       local_histos.deltaY_phi_P =
0186           phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_vs_phi_Pixel"), ibooker);
0187 
0188       local_histos.pullX_eta_P =
0189           phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_vs_eta_Pixel"), ibooker);
0190       local_histos.pullY_eta_P =
0191           phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_vs_eta_Pixel"), ibooker);
0192 
0193       ibooker.setCurrentFolder(subdir + "/" + key + "/PrimarySimHits");
0194       //all histos for Primary particles
0195       local_histos.numberRecHitsprimary_P =
0196           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("nRecHits_Pixel_primary"), ibooker);
0197 
0198       local_histos.deltaX_primary_P =
0199           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Pixel_Primary"), ibooker);
0200       local_histos.deltaY_primary_P =
0201           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Pixel_Primary"), ibooker);
0202 
0203       local_histos.pullX_primary_P =
0204           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Pixel_Primary"), ibooker);
0205       local_histos.pullY_primary_P =
0206           phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Pixel_Primary"), ibooker);
0207     }  //if block for P
0208 
0209     ibooker.setCurrentFolder(subdir + "/" + key);
0210     local_histos.deltaX_S =
0211         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Strip"), ibooker);
0212     local_histos.deltaY_S =
0213         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_Strip"), ibooker);
0214 
0215     local_histos.pullX_S =
0216         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Strip"), ibooker);
0217     local_histos.pullY_S =
0218         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_Y_Strip"), ibooker);
0219 
0220     local_histos.deltaX_eta_S =
0221         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_vs_eta_Strip"), ibooker);
0222     local_histos.deltaY_eta_S =
0223         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_vs_eta_Strip"), ibooker);
0224 
0225     local_histos.deltaX_phi_S =
0226         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_vs_phi_Strip"), ibooker);
0227     local_histos.deltaY_phi_S =
0228         phase2tkutil::book2DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_vs_phi_Strip"), ibooker);
0229 
0230     local_histos.pullX_eta_S =
0231         phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_vs_eta_Strip"), ibooker);
0232     local_histos.pullY_eta_S =
0233         phase2tkutil::bookProfile1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_vs_eta_Pixel"), ibooker);
0234 
0235     //primary
0236     ibooker.setCurrentFolder(subdir + "/" + key + "/PrimarySimHits");
0237     local_histos.numberRecHitsprimary_S =
0238         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("nRecHits_Strip_primary"), ibooker);
0239 
0240     local_histos.deltaX_primary_S =
0241         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_X_Strip_Primary"), ibooker);
0242     local_histos.deltaY_primary_S =
0243         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Delta_Y_Strip_Primary"), ibooker);
0244 
0245     local_histos.pullX_primary_S =
0246         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Strip_Primary"), ibooker);
0247     local_histos.pullY_primary_S =
0248         phase2tkutil::book1DFromPSet(config_.getParameter<edm::ParameterSet>("Pull_X_Strip_Primary"), ibooker);
0249 
0250     layerMEs_.insert(std::make_pair(key, local_histos));
0251   }
0252 }
0253 
0254 void Phase2OTValidateRecHitBase::fillPSetDescription(edm::ParameterSetDescription& desc) {
0255   // rechitValidOT
0256   //for macro-pixel sensors
0257   std::string mptag = "macro-pixel sensor";
0258   std::string striptag = "strip sensor";
0259   {
0260     edm::ParameterSetDescription psd0;
0261     psd0.add<std::string>("name", "Delta_X_Pixel");
0262     psd0.add<std::string>("title", "#Delta X " + mptag + ";Cluster resolution X coordinate [#mum]");
0263     psd0.add<bool>("switch", true);
0264     psd0.add<double>("xmax", 250);
0265     psd0.add<double>("xmin", -250);
0266     psd0.add<int>("NxBins", 100);
0267     desc.add<edm::ParameterSetDescription>("Delta_X_Pixel", psd0);
0268   }
0269   {
0270     edm::ParameterSetDescription psd0;
0271     psd0.add<std::string>("name", "Delta_Y_Pixel");
0272     psd0.add<std::string>("title", "#Delta Y " + mptag + ";Cluster resolution Y coordinate [#mum]");
0273     psd0.add<bool>("switch", true);
0274     psd0.add<double>("xmin", -1500);
0275     psd0.add<double>("xmax", 1500);
0276     psd0.add<int>("NxBins", 100);
0277     desc.add<edm::ParameterSetDescription>("Delta_Y_Pixel", psd0);
0278   }
0279   {
0280     edm::ParameterSetDescription psd0;
0281     psd0.add<std::string>("name", "Delta_X_Pixel_Primary");
0282     psd0.add<std::string>("title", "#Delta X " + mptag + ";cluster resolution X coordinate [#mum]");
0283     psd0.add<bool>("switch", true);
0284     psd0.add<double>("xmin", -250);
0285     psd0.add<double>("xmax", 250);
0286     psd0.add<int>("NxBins", 100);
0287     desc.add<edm::ParameterSetDescription>("Delta_X_Pixel_Primary", psd0);
0288   }
0289   {
0290     edm::ParameterSetDescription psd0;
0291     psd0.add<std::string>("name", "Delta_Y_Pixel_Primary");
0292     psd0.add<std::string>("title", "#Delta Y " + mptag + ";cluster resolution Y coordinate [#mum]");
0293     psd0.add<bool>("switch", true);
0294     psd0.add<double>("xmin", -500);
0295     psd0.add<double>("xmax", 500);
0296     psd0.add<int>("NxBins", 100);
0297     desc.add<edm::ParameterSetDescription>("Delta_Y_Pixel_Primary", psd0);
0298   }
0299 
0300   {
0301     edm::ParameterSetDescription psd0;
0302     psd0.add<std::string>("name", "Delta_X_vs_Eta_Pixel");
0303     psd0.add<std::string>("title", ";|#eta|;#Delta x [#mum]");
0304     psd0.add<int>("NyBins", 250);
0305     psd0.add<double>("ymin", -250.0);
0306     psd0.add<double>("ymax", 250.0);
0307     psd0.add<int>("NxBins", 41);
0308     psd0.add<bool>("switch", true);
0309     psd0.add<double>("xmax", 4.1);
0310     psd0.add<double>("xmin", 0.);
0311     desc.add<edm::ParameterSetDescription>("Delta_X_vs_eta_Pixel", psd0);
0312   }
0313   {
0314     edm::ParameterSetDescription psd0;
0315     psd0.add<std::string>("name", "Delta_Y_vs_Eta_Pixel");
0316     psd0.add<std::string>("title", ";|#eta|;#Delta y [#mum]");
0317     psd0.add<int>("NyBins", 300);
0318     psd0.add<double>("ymin", -1500.0);
0319     psd0.add<double>("ymax", 1500.0);
0320     psd0.add<int>("NxBins", 41);
0321     psd0.add<bool>("switch", true);
0322     psd0.add<double>("xmax", 4.1);
0323     psd0.add<double>("xmin", 0.);
0324     desc.add<edm::ParameterSetDescription>("Delta_Y_vs_eta_Pixel", psd0);
0325   }
0326 
0327   {
0328     edm::ParameterSetDescription psd0;
0329     psd0.add<std::string>("name", "Delta_X_vs_Phi_Pixel");
0330     psd0.add<std::string>("title", ";#phi;#Delta x [#mum]");
0331     psd0.add<int>("NyBins", 250);
0332     psd0.add<double>("ymin", -250.0);
0333     psd0.add<double>("ymax", 250.0);
0334     psd0.add<int>("NxBins", 36);
0335     psd0.add<bool>("switch", true);
0336     psd0.add<double>("xmax", M_PI);
0337     psd0.add<double>("xmin", -M_PI);
0338     desc.add<edm::ParameterSetDescription>("Delta_X_vs_phi_Pixel", psd0);
0339   }
0340   {
0341     edm::ParameterSetDescription psd0;
0342     psd0.add<std::string>("name", "Delta_Y_vs_Phi_Pixel");
0343     psd0.add<std::string>("title", ";#phi;#Delta y [#mum]");
0344     psd0.add<int>("NyBins", 300);
0345     psd0.add<double>("ymin", -1500.0);
0346     psd0.add<double>("ymax", 1500.0);
0347     psd0.add<int>("NxBins", 35);
0348     psd0.add<bool>("switch", true);
0349     psd0.add<double>("xmax", M_PI);
0350     psd0.add<double>("xmin", -M_PI);
0351     desc.add<edm::ParameterSetDescription>("Delta_Y_vs_phi_Pixel", psd0);
0352   }
0353   //Pulls macro-pixel
0354   {
0355     edm::ParameterSetDescription psd0;
0356     psd0.add<std::string>("name", "Pull_X_Pixel");
0357     psd0.add<std::string>("title", ";pull x;");
0358     psd0.add<double>("xmin", -4.0);
0359     psd0.add<bool>("switch", true);
0360     psd0.add<double>("xmax", 4.0);
0361     psd0.add<int>("NxBins", 100);
0362     desc.add<edm::ParameterSetDescription>("Pull_X_Pixel", psd0);
0363   }
0364   {
0365     edm::ParameterSetDescription psd0;
0366     psd0.add<std::string>("name", "Pull_Y_Pixel");
0367     psd0.add<std::string>("title", ";pull y;");
0368     psd0.add<double>("xmin", -4.0);
0369     psd0.add<bool>("switch", true);
0370     psd0.add<double>("xmax", 4.0);
0371     psd0.add<int>("NxBins", 100);
0372     desc.add<edm::ParameterSetDescription>("Pull_Y_Pixel", psd0);
0373   }
0374 
0375   {
0376     edm::ParameterSetDescription psd0;
0377     psd0.add<std::string>("name", "Pull_X_Pixel_Primary");
0378     psd0.add<std::string>("title", ";pull x;");
0379     psd0.add<double>("xmin", -4.0);
0380     psd0.add<bool>("switch", true);
0381     psd0.add<double>("xmax", 4.0);
0382     psd0.add<int>("NxBins", 100);
0383     desc.add<edm::ParameterSetDescription>("Pull_X_Pixel_Primary", psd0);
0384   }
0385   {
0386     edm::ParameterSetDescription psd0;
0387     psd0.add<std::string>("name", "Pull_Y_Pixel_Primary");
0388     psd0.add<std::string>("title", ";pull y;");
0389     psd0.add<double>("xmin", -4.0);
0390     psd0.add<bool>("switch", true);
0391     psd0.add<double>("xmax", 4.0);
0392     psd0.add<int>("NxBins", 100);
0393     desc.add<edm::ParameterSetDescription>("Pull_Y_Pixel_Primary", psd0);
0394   }
0395   {
0396     edm::ParameterSetDescription psd0;
0397     psd0.add<std::string>("name", "Pull_X_vs_Eta");
0398     psd0.add<std::string>("title", ";#eta;pull x");
0399     psd0.add<double>("ymax", 4.0);
0400     psd0.add<int>("NxBins", 82);
0401     psd0.add<bool>("switch", true);
0402     psd0.add<double>("xmax", 4.1);
0403     psd0.add<double>("xmin", -4.1);
0404     psd0.add<double>("ymin", -4.0);
0405     desc.add<edm::ParameterSetDescription>("Pull_X_vs_eta_Pixel", psd0);
0406   }
0407   {
0408     edm::ParameterSetDescription psd0;
0409     psd0.add<std::string>("name", "Pull_Y_vs_Eta");
0410     psd0.add<std::string>("title", ";#eta;pull y");
0411     psd0.add<double>("ymax", 4.0);
0412     psd0.add<int>("NxBins", 82);
0413     psd0.add<bool>("switch", true);
0414     psd0.add<double>("xmax", 4.1);
0415     psd0.add<double>("xmin", -4.1);
0416     psd0.add<double>("ymin", -4.0);
0417     desc.add<edm::ParameterSetDescription>("Pull_Y_vs_eta_Pixel", psd0);
0418   }
0419   {
0420     edm::ParameterSetDescription psd0;
0421     psd0.add<std::string>("name", "Number_RecHits_matched_PrimarySimTrack");
0422     psd0.add<std::string>("title", "Number of RecHits matched to primary SimTrack;;");
0423     psd0.add<double>("xmin", 0.0);
0424     psd0.add<bool>("switch", true);
0425     psd0.add<double>("xmax", 10000.0);
0426     psd0.add<int>("NxBins", 100);
0427     desc.add<edm::ParameterSetDescription>("nRecHits_Pixel_primary", psd0);
0428   }
0429   //strip sensors
0430   {
0431     edm::ParameterSetDescription psd0;
0432     psd0.add<std::string>("name", "Delta_X_Strip");
0433     psd0.add<std::string>("title", "#Delta X " + striptag + ";Cluster resolution X coordinate [#mum]");
0434     psd0.add<bool>("switch", true);
0435     psd0.add<double>("xmin", -250);
0436     psd0.add<double>("xmax", 250);
0437     psd0.add<int>("NxBins", 100);
0438     desc.add<edm::ParameterSetDescription>("Delta_X_Strip", psd0);
0439   }
0440   {
0441     edm::ParameterSetDescription psd0;
0442     psd0.add<std::string>("name", "Delta_Y_Strip");
0443     psd0.add<std::string>("title", "#Delta Y " + striptag + ";Cluster resolution Y coordinate [cm]");
0444     psd0.add<double>("xmin", -5.0);
0445     psd0.add<bool>("switch", true);
0446     psd0.add<double>("xmax", 5.0);
0447     psd0.add<int>("NxBins", 100);
0448     desc.add<edm::ParameterSetDescription>("Delta_Y_Strip", psd0);
0449   }
0450   {
0451     edm::ParameterSetDescription psd0;
0452     psd0.add<std::string>("name", "Delta_X_Strip_Primary");
0453     psd0.add<std::string>("title", "#Delta X " + striptag + ";Cluster resolution X coordinate [#mum]");
0454     psd0.add<bool>("switch", true);
0455     psd0.add<double>("xmin", -250);
0456     psd0.add<double>("xmax", 250);
0457     psd0.add<int>("NxBins", 100);
0458     desc.add<edm::ParameterSetDescription>("Delta_X_Strip_Primary", psd0);
0459   }
0460   {
0461     edm::ParameterSetDescription psd0;
0462     psd0.add<std::string>("name", "Delta_Y_Strip_Primary");
0463     psd0.add<std::string>("title", "#Delta Y " + striptag + ";Cluster resolution Y coordinate [cm]");
0464     psd0.add<double>("xmin", -5.0);
0465     psd0.add<bool>("switch", true);
0466     psd0.add<double>("xmax", 5.0);
0467     psd0.add<int>("NxBins", 100);
0468     desc.add<edm::ParameterSetDescription>("Delta_Y_Strip_Primary", psd0);
0469   }
0470 
0471   {
0472     edm::ParameterSetDescription psd0;
0473     psd0.add<std::string>("name", "Delta_X_vs_Eta_Strip");
0474     psd0.add<std::string>("title", ";|#eta|;#Delta x [#mum]");
0475     psd0.add<int>("NyBins", 250);
0476     psd0.add<double>("ymin", -250.0);
0477     psd0.add<double>("ymax", 250.0);
0478     psd0.add<int>("NxBins", 41);
0479     psd0.add<bool>("switch", true);
0480     psd0.add<double>("xmax", 4.1);
0481     psd0.add<double>("xmin", 0.);
0482     desc.add<edm::ParameterSetDescription>("Delta_X_vs_eta_Strip", psd0);
0483   }
0484   {
0485     edm::ParameterSetDescription psd0;
0486     psd0.add<std::string>("name", "Delta_Y_vs_Eta_Strip");
0487     psd0.add<std::string>("title", ";|#eta|;#Delta y [cm]");
0488     psd0.add<int>("NyBins", 100);
0489     psd0.add<double>("ymin", -5.0);
0490     psd0.add<double>("ymax", 5.0);
0491     psd0.add<int>("NxBins", 41);
0492     psd0.add<bool>("switch", true);
0493     psd0.add<double>("xmax", 4.1);
0494     psd0.add<double>("xmin", 0.);
0495     desc.add<edm::ParameterSetDescription>("Delta_Y_vs_eta_Strip", psd0);
0496   }
0497 
0498   {
0499     edm::ParameterSetDescription psd0;
0500     psd0.add<std::string>("name", "Delta_X_vs_Phi_Strip");
0501     psd0.add<std::string>("title", ";#phi;#Delta x [#mum]");
0502     psd0.add<int>("NyBins", 250);
0503     psd0.add<double>("ymin", -250.0);
0504     psd0.add<double>("ymax", 250.0);
0505     psd0.add<int>("NxBins", 36);
0506     psd0.add<bool>("switch", true);
0507     psd0.add<double>("xmax", M_PI);
0508     psd0.add<double>("xmin", -M_PI);
0509     desc.add<edm::ParameterSetDescription>("Delta_X_vs_phi_Strip", psd0);
0510   }
0511   {
0512     edm::ParameterSetDescription psd0;
0513     psd0.add<std::string>("name", "Delta_Y_vs_Phi_Strip");
0514     psd0.add<std::string>("title", ";#phi;#Delta y [cm]");
0515     psd0.add<int>("NyBins", 100);
0516     psd0.add<double>("ymin", -5.0);
0517     psd0.add<double>("ymax", 5.0);
0518     psd0.add<int>("NxBins", 36);
0519     psd0.add<bool>("switch", true);
0520     psd0.add<double>("xmax", M_PI);
0521     psd0.add<double>("xmin", -M_PI);
0522     desc.add<edm::ParameterSetDescription>("Delta_Y_vs_phi_Strip", psd0);
0523   }
0524   //pulls strips
0525   {
0526     edm::ParameterSetDescription psd0;
0527     psd0.add<std::string>("name", "Pull_X_Strip");
0528     psd0.add<std::string>("title", ";pull x;");
0529     psd0.add<double>("xmin", -4.0);
0530     psd0.add<bool>("switch", true);
0531     psd0.add<double>("xmax", 4.0);
0532     psd0.add<int>("NxBins", 100);
0533     desc.add<edm::ParameterSetDescription>("Pull_X_Strip", psd0);
0534   }
0535   {
0536     edm::ParameterSetDescription psd0;
0537     psd0.add<std::string>("name", "Pull_Y_Strip");
0538     psd0.add<std::string>("title", ";pull y;");
0539     psd0.add<double>("xmin", -4.0);
0540     psd0.add<bool>("switch", true);
0541     psd0.add<double>("xmax", 4.0);
0542     psd0.add<int>("NxBins", 100);
0543     desc.add<edm::ParameterSetDescription>("Pull_Y_Strip", psd0);
0544   }
0545 
0546   {
0547     edm::ParameterSetDescription psd0;
0548     psd0.add<std::string>("name", "Pull_X_Strip_Primary");
0549     psd0.add<std::string>("title", ";pull x;");
0550     psd0.add<double>("xmin", -4.0);
0551     psd0.add<bool>("switch", true);
0552     psd0.add<double>("xmax", 4.0);
0553     psd0.add<int>("NxBins", 100);
0554     desc.add<edm::ParameterSetDescription>("Pull_X_Strip_Primary", psd0);
0555   }
0556   {
0557     edm::ParameterSetDescription psd0;
0558     psd0.add<std::string>("name", "Pull_Y_Strip_Primary");
0559     psd0.add<std::string>("title", ";pull y;");
0560     psd0.add<double>("xmin", -4.0);
0561     psd0.add<bool>("switch", true);
0562     psd0.add<double>("xmax", 4.0);
0563     psd0.add<int>("NxBins", 100);
0564     desc.add<edm::ParameterSetDescription>("Pull_Y_Strip_Primary", psd0);
0565   }
0566   {
0567     edm::ParameterSetDescription psd0;
0568     psd0.add<std::string>("name", "Pull_X_vs_Eta_Strip");
0569     psd0.add<std::string>("title", ";#eta;pull x");
0570     psd0.add<double>("ymax", 4.0);
0571     psd0.add<int>("NxBins", 82);
0572     psd0.add<bool>("switch", true);
0573     psd0.add<double>("xmax", 4.1);
0574     psd0.add<double>("xmin", -4.1);
0575     psd0.add<double>("ymin", -4.0);
0576     desc.add<edm::ParameterSetDescription>("Pull_X_vs_eta_Strip", psd0);
0577   }
0578   {
0579     edm::ParameterSetDescription psd0;
0580     psd0.add<std::string>("name", "Pull_Y_vs_Eta_Strip");
0581     psd0.add<std::string>("title", ";#eta;pull y");
0582     psd0.add<double>("ymax", 4.0);
0583     psd0.add<int>("NxBins", 82);
0584     psd0.add<bool>("switch", true);
0585     psd0.add<double>("xmax", 4.1);
0586     psd0.add<double>("xmin", -4.1);
0587     psd0.add<double>("ymin", -4.0);
0588     desc.add<edm::ParameterSetDescription>("Pull_Y_vs_eta_Strip", psd0);
0589   }
0590   {
0591     edm::ParameterSetDescription psd0;
0592     psd0.add<std::string>("name", "Number_RecHits_matched_PrimarySimTrack");
0593     psd0.add<std::string>("title", "Number of RecHits matched to primary SimTrack;;");
0594     psd0.add<double>("xmin", 0.0);
0595     psd0.add<bool>("switch", true);
0596     psd0.add<double>("xmax", 10000.0);
0597     psd0.add<int>("NxBins", 100);
0598     desc.add<edm::ParameterSetDescription>("nRecHits_Strip_primary", psd0);
0599   }
0600 }
0601 
0602 //define this as a plug-in
0603 DEFINE_FWK_MODULE(Phase2OTValidateRecHitBase);