Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:28:11

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