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,
0044 BadAPVFibers = 2,
0045 BadStrips = 4,
0046 MaskBad128StripBlocks = 8,
0047 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
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
0092 }
0093
0094 return nullptr;
0095 }
0096
0097 typedef std::unordered_map<unsigned int, MeasurementDet*> DetContainer;
0098
0099
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