File indexing completed on 2024-04-06 11:58:18
0001 #ifndef SiStripObjects_SiStripQuality_h
0002 #define SiStripObjects_SiStripQuality_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include "CondFormats/RunInfo/interface/RunInfo.h"
0023 #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h"
0024 #include "CondFormats/SiStripObjects/interface/SiStripDetVOff.h"
0025 #include "CalibFormats/SiStripObjects/interface/SiStripDetInfo.h"
0026 #include <vector>
0027
0028 class SiStripDetCabling;
0029 class SiStripDetInfo;
0030 class TrackerTopology;
0031
0032 class SiStripQuality final : public SiStripBadStrip {
0033 public:
0034 struct BadComponent {
0035 uint32_t detid;
0036 unsigned short BadApvs : 6;
0037 unsigned short BadFibers : 3;
0038 bool BadModule : 1;
0039 };
0040
0041 class BadComponentStrictWeakOrdering {
0042 public:
0043 bool operator()(const BadComponent &p, uint32_t i) const { return p.detid < i; }
0044 };
0045
0046 SiStripQuality() = delete;
0047 explicit SiStripQuality(SiStripDetInfo);
0048 SiStripQuality(const SiStripQuality &) = default;
0049 SiStripQuality(SiStripQuality &&) = default;
0050
0051 ~SiStripQuality() override = default;
0052
0053 void clear() {
0054 v_badstrips.clear();
0055 indexes.clear();
0056 BadComponentVect.clear();
0057 toCleanUp = false;
0058 }
0059
0060 void add(uint32_t, const SiStripBadStrip::Range &);
0061 void add(const SiStripBadStrip *);
0062 void add(const SiStripDetCabling *);
0063 void add(const SiStripDetVOff *);
0064
0065
0066
0067
0068
0069
0070 void add(const RunInfo *);
0071 void addInvalidConnectionFromCabling();
0072 void addNotConnectedConnectionFromCabling();
0073
0074 bool cleanUp(bool force = false);
0075
0076 void fillBadComponents();
0077
0078 void ReduceGranularity(double);
0079
0080 SiStripQuality difference(const SiStripQuality &) const;
0081
0082
0083 bool IsModuleUsable(uint32_t detid) const;
0084
0085 bool IsModuleBad(uint32_t detid) const;
0086 bool IsFiberBad(uint32_t detid, short fiberNb) const;
0087 bool IsApvBad(uint32_t detid, short apvNb) const;
0088 bool IsStripBad(uint32_t detid, short strip) const;
0089 bool IsStripBad(const Range &range, short strip) const;
0090 int nBadStripsOnTheLeft(const Range &range,
0091 short strip) const;
0092
0093 int nBadStripsOnTheRight(const Range &range,
0094 short strip) const;
0095
0096
0097 short getBadApvs(uint32_t detid) const;
0098
0099
0100
0101
0102
0103
0104
0105 short getBadFibers(uint32_t detid) const;
0106
0107
0108
0109
0110
0111
0112
0113
0114 const std::vector<BadComponent> &getBadComponentList() const { return BadComponentVect; }
0115
0116 void compact(uint32_t detid, std::vector<unsigned int> &);
0117
0118 inline void setPrintDebugOutput(const bool printDebug) { printDebug_ = printDebug; }
0119 inline void setUseEmptyRunInfo(const bool useEmptyRunInfo) { useEmptyRunInfo_ = useEmptyRunInfo; }
0120
0121 SiStripDetCabling const *cabling() const { return SiStripDetCabling_; }
0122
0123 private:
0124 void compact(std::vector<unsigned int> &, std::vector<unsigned int> &, unsigned short &);
0125 void subtract(std::vector<unsigned int> &, const std::vector<unsigned int> &);
0126 void subtraction(std::vector<unsigned int> &, const unsigned int &);
0127 bool put_replace(uint32_t detId, Range input);
0128
0129
0130
0131
0132
0133 void turnOffFeds(const std::vector<int> &fedsList, const bool turnOffStrips, const bool printDebug);
0134
0135
0136 void printDetInfo(const TrackerTopology *const tTopo, uint32_t detId, uint32_t apvPairNumber, std::stringstream &ss);
0137
0138
0139 void printActiveFedsInfo(const std::vector<uint16_t> &activeFedsFromCabling,
0140 const std::vector<int> &activeFedsFromRunInfo,
0141 const std::vector<int> &differentFeds,
0142 const bool printDebug);
0143
0144 SiStripDetInfo info_;
0145 bool toCleanUp;
0146 std::vector<BadComponent> BadComponentVect;
0147
0148 const SiStripDetCabling *SiStripDetCabling_;
0149 bool printDebug_;
0150 bool useEmptyRunInfo_;
0151 };
0152
0153 #endif