Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-09-15 23:07:00

0001 #ifndef MeasurementTrackerImpl_H
0002 #define MeasurementTrackerImpl_H
0003 
0004 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h"
0005 #include "RecoTracker/MeasurementDet/interface/MeasurementTrackerEvent.h"
0006 #include "RecoTracker/MeasurementDet/src/TkMeasurementDetSet.h"
0007 
0008 #include "DataFormats/DetId/interface/DetId.h"
0009 #include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h"
0010 #include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h"
0011 #include "RecoLocalTracker/Phase2TrackerRecHits/interface/Phase2StripCPE.h"
0012 #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
0013 
0014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0015 
0016 #include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
0017 #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
0018 #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
0019 
0020 #include "CondFormats/SiPixelObjects/interface/SiPixelQuality.h"
0021 
0022 #include <map>
0023 #include <unordered_map>
0024 #include <vector>
0025 
0026 class TkStripMeasurementDet;
0027 class TkPixelMeasurementDet;
0028 class TkPhase2OTMeasurementDet;
0029 class TkGluedMeasurementDet;
0030 class TkStackMeasurementDet;
0031 class GeometricSearchTracker;
0032 class SiStripRecHitMatcher;
0033 class GluedGeomDet;
0034 class StackGeomDet;
0035 class SiPixelFedCabling;
0036 class TrackerGeometry;
0037 
0038 class dso_hidden MeasurementTrackerImpl final : public MeasurementTracker {
0039 public:
0040   enum QualityFlags {
0041     BadModules = 1,  // for everybody
0042     /* Strips: */ BadAPVFibers = 2,
0043     BadStrips = 4,
0044     MaskBad128StripBlocks = 8,
0045     /* Pixels: */ BadROCs = 2
0046   };
0047 
0048   struct BadStripCutsDet {
0049     StMeasurementConditionSet::BadStripCuts tib;
0050     StMeasurementConditionSet::BadStripCuts tob;
0051     StMeasurementConditionSet::BadStripCuts tid;
0052     StMeasurementConditionSet::BadStripCuts tec;
0053   };
0054 
0055   MeasurementTrackerImpl(const BadStripCutsDet& badStripCuts,
0056                          const PixelClusterParameterEstimator* pixelCPE,
0057                          const StripClusterParameterEstimator* stripCPE,
0058                          const SiStripRecHitMatcher* hitMatcher,
0059                          const TrackerTopology* trackerTopology,
0060                          const TrackerGeometry* trackerGeom,
0061                          const GeometricSearchTracker* geometricSearchTracker,
0062                          const SiStripQuality* stripQuality,
0063                          int stripQualityFlags,
0064                          int stripQualityDebugFlags,
0065                          const SiPixelQuality* pixelQuality,
0066                          const SiPixelFedCabling* pixelCabling,
0067                          int pixelQualityFlags,
0068                          int pixelQualityDebugFlags,
0069                          const ClusterParameterEstimator<Phase2TrackerCluster1D>* phase2OTCPE = nullptr);
0070 
0071   ~MeasurementTrackerImpl() override;
0072 
0073   const TrackerGeometry* geomTracker() const { return theTrackerGeom; }
0074 
0075   const GeometricSearchTracker* geometricSearchTracker() const { return theGeometricSearchTracker; }
0076 
0077   /// MeasurementDetSystem interface  (won't be overloaded anymore)
0078   MeasurementDetWithData idToDet(const DetId& id, const MeasurementTrackerEvent& data) const override {
0079     return MeasurementDetWithData(*idToDetBare(id, data), data);
0080   }
0081 
0082   const MeasurementDet* idToDetBare(const DetId& id, const MeasurementTrackerEvent& data) const { return findDet(id); }
0083 
0084   const MeasurementDet* findDet(const DetId& id) const {
0085     auto it = theDetMap.find(id);
0086     if (it != theDetMap.end()) {
0087       return it->second;
0088     } else {
0089       //throw exception;
0090     }
0091 
0092     return nullptr;  //to avoid compile warning
0093   }
0094 
0095   typedef std::unordered_map<unsigned int, MeasurementDet*> DetContainer;
0096 
0097   /// For debug only
0098   const DetContainer& allDets() const { return theDetMap; }
0099   const std::vector<TkStripMeasurementDet>& stripDets() const { return theStripDets; }
0100   const std::vector<TkPixelMeasurementDet>& pixelDets() const { return thePixelDets; }
0101   const std::vector<TkGluedMeasurementDet>& gluedDets() const { return theGluedDets; }
0102   const std::vector<TkStackMeasurementDet>& stackDets() const { return theStackDets; }
0103 
0104   const StMeasurementConditionSet& stripDetConditions() const override { return theStDetConditions; }
0105   const PxMeasurementConditionSet& pixelDetConditions() const override { return thePxDetConditions; }
0106   const Phase2OTMeasurementConditionSet& phase2DetConditions() const override { return thePhase2DetConditions; }
0107 
0108 protected:
0109   StMeasurementConditionSet theStDetConditions;
0110   PxMeasurementConditionSet thePxDetConditions;
0111   Phase2OTMeasurementConditionSet thePhase2DetConditions;
0112 
0113   DetContainer theDetMap;
0114 
0115   std::vector<TkPixelMeasurementDet> thePixelDets;
0116   std::vector<TkStripMeasurementDet> theStripDets;
0117   std::vector<TkPhase2OTMeasurementDet> thePhase2Dets;
0118   std::vector<TkGluedMeasurementDet> theGluedDets;
0119   std::vector<TkStackMeasurementDet> theStackDets;
0120 
0121   const SiPixelFedCabling* thePixelCabling;
0122 
0123   void initialize(const TrackerTopology* trackerTopology);
0124   void initStMeasurementConditionSet(std::vector<TkStripMeasurementDet>& stripDets);
0125   void initPxMeasurementConditionSet(std::vector<TkPixelMeasurementDet>& pixelDets);
0126   void initPhase2OTMeasurementConditionSet(std::vector<TkPhase2OTMeasurementDet>& phase2Dets);
0127 
0128   void addStripDet(const GeomDet* gd);
0129   void addPixelDet(const GeomDet* gd);
0130   void addPhase2Det(const GeomDet* gd);
0131 
0132   void addGluedDet(const GluedGeomDet* gd);
0133   void addStackDet(const StackGeomDet* gd);
0134 
0135   void initGluedDet(TkGluedMeasurementDet& det, const TrackerTopology* trackerTopology);
0136   void initStackDet(TkStackMeasurementDet& det);
0137 
0138   void addDets(const TrackingGeometry::DetContainer& dets, bool subIsPixel, bool subIsOT);
0139 
0140   bool checkDets();
0141 
0142   void initializeStripStatus(const BadStripCutsDet& badStripCuts,
0143                              const SiStripQuality* stripQuality,
0144                              int qualityFlags,
0145                              int qualityDebugFlags);
0146 
0147   void initializePixelStatus(const SiPixelQuality* stripQuality,
0148                              const SiPixelFedCabling* pixelCabling,
0149                              int qualityFlags,
0150                              int qualityDebugFlags);
0151 };
0152 
0153 #endif