CMS 3D CMS Logo

SiStripBadModuleConfigurableFakeESSource.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: CalibTracker/SiStripESProducers
4 // Class: SiStripBadModuleConfigurableFakeESSource
5 //
14 // system include files
15 #include <memory>
16 
17 // user include files
20 
26 
28 
30 public:
33 
35  const edm::IOVSyncValue& iov,
36  edm::ValidityInterval& iValidity) override;
37 
38  typedef std::unique_ptr<SiStripBadStrip> ReturnType;
40 
41 private:
42  using Parameters = std::vector<edm::ParameterSet>;
46  bool m_doByAPVs;
49 
50  std::vector<uint32_t> selectDetectors(const TrackerTopology* tTopo, const std::vector<uint32_t>& detIds) const;
51  std::vector<std::pair<uint32_t, std::vector<uint32_t>>> selectAPVs() const;
52 };
53 
56 
58  : trackTopoToken_(setWhatProduced(this).consumes()) {
59  findingRecord<SiStripBadModuleRcd>();
60 
61  m_badComponentList = iConfig.getUntrackedParameter<Parameters>("BadComponentList");
62  m_doByAPVs = iConfig.getUntrackedParameter<bool>("doByAPVs", false);
63  m_badAPVsList = iConfig.getUntrackedParameter<Parameters>("BadAPVList");
64  m_printDebug = iConfig.getUntrackedParameter<bool>("printDebug", false);
66  SiStripDetInfoFileReader{iConfig.getParameter<edm::FileInPath>("SiStripDetInfoFile").fullPath()};
67 }
68 
70 
72  const edm::IOVSyncValue& iov,
73  edm::ValidityInterval& iValidity) {
74  iValidity = edm::ValidityInterval{iov.beginOfTime(), iov.endOfTime()};
75 }
76 
77 // ------------ method called to produce the data ------------
79  const SiStripBadModuleRcd& iRecord) {
80  using namespace edm::es;
81 
82  TrackerTopology const& tTopo = iRecord.get(trackTopoToken_);
83 
84  auto quality = std::make_unique<SiStripQuality>();
85 
86  if (!m_doByAPVs) {
87  std::vector<uint32_t> selDetIds{selectDetectors(&tTopo, m_detInfoFileReader.getAllDetIds())};
88  edm::LogInfo("SiStripQualityConfigurableFakeESSource")
89  << "[produce] number of selected dets to be removed " << selDetIds.size() << std::endl;
90 
91  std::stringstream ss;
92  for (const auto selId : selDetIds) {
93  SiStripQuality::InputVector theSiStripVector;
94 
95  unsigned short firstBadStrip{0};
96  unsigned short NconsecutiveBadStrips = m_detInfoFileReader.getNumberOfApvsAndStripLength(selId).first * 128;
97  unsigned int theBadStripRange{quality->encode(firstBadStrip, NconsecutiveBadStrips)};
98 
99  if (m_printDebug) {
100  ss << "detid " << selId << " \t"
101  << " firstBadStrip " << firstBadStrip << "\t "
102  << " NconsecutiveBadStrips " << NconsecutiveBadStrips << "\t "
103  << " packed integer " << std::hex << theBadStripRange << std::dec << std::endl;
104  }
105 
106  theSiStripVector.push_back(theBadStripRange);
107 
108  if (!quality->put(selId, SiStripBadStrip::Range{theSiStripVector.begin(), theSiStripVector.end()})) {
109  edm::LogError("SiStripQualityConfigurableFakeESSource") << "[produce] detid already exists";
110  }
111  }
112  if (m_printDebug) {
113  edm::LogInfo("SiStripQualityConfigurableFakeESSource") << ss.str();
114  }
115  quality->cleanUp();
116  //quality->fillBadComponents();
117  } else {
118  std::vector<std::pair<uint32_t, std::vector<uint32_t>>> selAPVs{selectAPVs()};
119  edm::LogInfo("SiStripQualityConfigurableFakeESSource")
120  << "[produce] number of selected dets to be removed " << selAPVs.size() << std::endl;
121 
122  std::stringstream ss;
123  for (const auto& selId : selAPVs) {
124  SiStripQuality::InputVector theSiStripVector;
125  auto the_detid = selId.first;
126 
127  for (const auto apv : selId.second) {
128  unsigned short firstBadStrip = apv * 128;
129  unsigned short NconsecutiveBadStrips = 128;
130  unsigned int theBadStripRange{quality->encode(firstBadStrip, NconsecutiveBadStrips)};
131 
132  if (m_printDebug) {
133  ss << "detid " << the_detid << " \t"
134  << " firstBadStrip " << firstBadStrip << "\t "
135  << " NconsecutiveBadStrips " << NconsecutiveBadStrips << "\t "
136  << " packed integer " << std::hex << theBadStripRange << std::dec << std::endl;
137  }
138 
139  theSiStripVector.push_back(theBadStripRange);
140  }
141 
142  if (!quality->put(the_detid, SiStripBadStrip::Range{theSiStripVector.begin(), theSiStripVector.end()})) {
143  edm::LogError("SiStripQualityConfigurableFakeESSource") << "[produce] detid already exists";
144  }
145  } // loop on the packed list of detid/apvs
146 
147  if (m_printDebug) {
148  edm::LogInfo("SiStripQualityConfigurableFakeESSource") << ss.str();
149  }
150  quality->cleanUp();
151 
152  } // do it by APVs
153 
154  if (m_printDebug) {
155  std::stringstream ss1;
156  for (const auto& badComp : quality->getBadComponentList()) {
157  ss1 << "bad module " << badComp.detid << " " << badComp.BadModule << "\n";
158  }
159  edm::LogInfo("SiStripQualityConfigurableFakeESSource") << ss1.str();
160  }
161 
162  return quality;
163 }
164 
165 namespace {
166  bool _isSel(uint32_t requested,
167  uint32_t i) { // internal helper: accept all i if requested is 0, otherwise require match
168  return (requested == 0) || (requested == i);
169  }
170 
171  SiStripDetId::SubDetector subDetFromString(const std::string& subDetStr) {
173  if (subDetStr == "TIB")
174  subDet = SiStripDetId::TIB;
175  else if (subDetStr == "TID")
176  subDet = SiStripDetId::TID;
177  else if (subDetStr == "TOB")
178  subDet = SiStripDetId::TOB;
179  else if (subDetStr == "TEC")
180  subDet = SiStripDetId::TEC;
181  return subDet;
182  }
183 } // namespace
184 
185 std::vector<std::pair<uint32_t, std::vector<uint32_t>>> SiStripBadModuleConfigurableFakeESSource::selectAPVs() const {
186  std::vector<std::pair<uint32_t, std::vector<uint32_t>>> selList;
187  selList.clear();
188 
189  for (const auto& badAPV : m_badAPVsList) {
190  const uint32_t det{badAPV.getParameter<uint32_t>("DetId")};
191  std::vector<uint32_t> apvs{badAPV.getParameter<std::vector<uint32_t>>("APVs")};
192  auto pair = std::make_pair(det, apvs);
193  selList.push_back(pair);
194  }
195  return selList;
196 }
197 
199  const TrackerTopology* tTopo, const std::vector<uint32_t>& detIds) const {
200  std::vector<uint32_t> selList;
201  std::stringstream ss;
202  for (const auto& badComp : m_badComponentList) {
203  const std::string subDetStr{badComp.getParameter<std::string>("SubDet")};
204  if (m_printDebug)
205  ss << "Bad SubDet " << subDetStr << " \t";
206  const SiStripDetId::SubDetector subDet = subDetFromString(subDetStr);
207 
208  const std::vector<uint32_t> genericBadDetIds{
209  badComp.getUntrackedParameter<std::vector<uint32_t>>("detidList", std::vector<uint32_t>())};
210  const bool anySubDet{!genericBadDetIds.empty()};
211 
212  std::cout << "genericBadDetIds.size() = " << genericBadDetIds.size() << std::endl;
213 
214  using DetIdIt = std::vector<uint32_t>::const_iterator;
215  const DetIdIt beginDetIt = std::lower_bound(
216  detIds.begin(), detIds.end(), DetId(DetId::Tracker, anySubDet ? SiStripDetId::TIB : subDet).rawId());
217  const DetIdIt endDetIt = std::lower_bound(
218  detIds.begin(), detIds.end(), DetId(DetId::Tracker, anySubDet ? SiStripDetId::TEC + 1 : subDet + 1).rawId());
219 
220  if (anySubDet) {
221  std::copy_if(beginDetIt, endDetIt, std::back_inserter(selList), [&genericBadDetIds](uint32_t detId) {
222  std::cout << "AnySubDet" << detId << std::endl;
223  return std::find(genericBadDetIds.begin(), genericBadDetIds.end(), detId) != genericBadDetIds.end();
224  });
225  } else {
226  switch (subDet) {
227  case SiStripDetId::TIB:
228  std::copy_if(beginDetIt, endDetIt, std::back_inserter(selList), [tTopo, &badComp](uint32_t detectorId) {
229  const DetId detId{detectorId};
230  return ((detId.subdetId() == SiStripDetId::TIB) &&
231  _isSel(badComp.getParameter<uint32_t>("layer"), tTopo->tibLayer(detId)) &&
232  _isSel(badComp.getParameter<uint32_t>("bkw_frw"), tTopo->tibIsZPlusSide(detId) ? 2 : 1) &&
233  _isSel(badComp.getParameter<uint32_t>("int_ext"), tTopo->tibIsInternalString(detId) ? 1 : 2) &&
234  _isSel(badComp.getParameter<uint32_t>("ster"),
235  tTopo->tibIsStereo(detId) ? 1 : (tTopo->tibIsRPhi(detId) ? 2 : -1)) &&
236  _isSel(badComp.getParameter<uint32_t>("string_"), tTopo->tibString(detId)) &&
237  _isSel(badComp.getParameter<uint32_t>("detid"), detId.rawId()));
238  });
239  break;
240  case SiStripDetId::TID:
241  std::copy_if(beginDetIt, endDetIt, std::back_inserter(selList), [tTopo, &badComp](uint32_t detectorId) {
242  const DetId detId{detectorId};
243  return ((detId.subdetId() == SiStripDetId::TID) &&
244  _isSel(badComp.getParameter<uint32_t>("wheel"), tTopo->tidWheel(detId)) &&
245  _isSel(badComp.getParameter<uint32_t>("side"), tTopo->tidIsZPlusSide(detId) ? 2 : 1) &&
246  _isSel(badComp.getParameter<uint32_t>("ster"),
247  tTopo->tidIsStereo(detId) ? 1 : (tTopo->tidIsRPhi(detId) ? 2 : -1)) &&
248  _isSel(badComp.getParameter<uint32_t>("ring"), tTopo->tidRing(detId)) &&
249  _isSel(badComp.getParameter<uint32_t>("detid"), detId.rawId()));
250  });
251  break;
252  case SiStripDetId::TOB:
253  std::copy_if(beginDetIt, endDetIt, std::back_inserter(selList), [tTopo, &badComp](uint32_t detectorId) {
254  const DetId detId{detectorId};
255  return ((detId.subdetId() == SiStripDetId::TOB) &&
256  _isSel(badComp.getParameter<uint32_t>("layer"), tTopo->tobLayer(detId)) &&
257  _isSel(badComp.getParameter<uint32_t>("bkw_frw"), tTopo->tobIsZPlusSide(detId) ? 2 : 1) &&
258  _isSel(badComp.getParameter<uint32_t>("ster"),
259  tTopo->tobIsStereo(detId) ? 1 : (tTopo->tobIsRPhi(detId) ? 2 : -1)) &&
260  _isSel(badComp.getParameter<uint32_t>("rod"), tTopo->tobRod(detId)) &&
261  _isSel(badComp.getParameter<uint32_t>("detid"), detId.rawId()));
262  });
263  break;
264  case SiStripDetId::TEC:
265  std::copy_if(beginDetIt, endDetIt, std::back_inserter(selList), [tTopo, &badComp](uint32_t detectorId) {
266  const DetId detId{detectorId};
267  return ((detId.subdetId() == SiStripDetId::TEC) &&
268  _isSel(badComp.getParameter<uint32_t>("wheel"), tTopo->tecWheel(detId)) &&
269  _isSel(badComp.getParameter<uint32_t>("side"), tTopo->tecIsZPlusSide(detId) ? 2 : 1) &&
270  _isSel(badComp.getParameter<uint32_t>("ster"), tTopo->tecIsStereo(detId) ? 1 : 2) &&
271  _isSel(badComp.getParameter<uint32_t>("petal_bkw_frw"), tTopo->tecIsFrontPetal(detId) ? 2 : 2) &&
272  _isSel(badComp.getParameter<uint32_t>("petal"), tTopo->tecPetalNumber(detId)) &&
273  _isSel(badComp.getParameter<uint32_t>("ring"), tTopo->tecRing(detId)) &&
274  _isSel(badComp.getParameter<uint32_t>("detid"), detId.rawId()));
275  });
276  break;
277  default:
278  break;
279  }
280  }
281  }
282  if (m_printDebug) {
283  edm::LogInfo("SiStripBadModuleGenerator") << ss.str();
284  }
285  return selList;
286 }
287 
288 //define this as a plug-in
TrackerTopology::tecIsFrontPetal
bool tecIsFrontPetal(const DetId &id) const
Definition: TrackerTopology.h:416
SiStripDetId::UNKNOWN
static constexpr auto UNKNOWN
Definition: SiStripDetId.h:36
mps_fire.i
i
Definition: mps_fire.py:428
TrackerTopology::tibIsInternalString
bool tibIsInternalString(const DetId &id) const
Definition: TrackerTopology.h:429
MessageLogger.h
SiStripBadModuleConfigurableFakeESSource
Definition: SiStripBadModuleConfigurableFakeESSource.cc:29
SiStripBadModuleConfigurableFakeESSource::SiStripBadModuleConfigurableFakeESSource
SiStripBadModuleConfigurableFakeESSource(const edm::ParameterSet &)
Definition: SiStripBadModuleConfigurableFakeESSource.cc:57
TrackerTopology::tobIsStereo
bool tobIsStereo(const DetId &id) const
Definition: TrackerTopology.h:264
contentValuesFiles.fullPath
fullPath
Definition: contentValuesFiles.py:64
TrackerTopology
Definition: TrackerTopology.h:16
TrackerTopology::tidIsRPhi
bool tidIsRPhi(const DetId &id) const
Definition: TrackerTopology.h:272
gather_cfg.cout
cout
Definition: gather_cfg.py:144
SiStripBadModuleConfigurableFakeESSource::setIntervalFor
void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &iov, edm::ValidityInterval &iValidity) override
Definition: SiStripBadModuleConfigurableFakeESSource.cc:71
edm::ValidityInterval
Definition: ValidityInterval.h:28
ESProducer.h
TrackerTopology::tecIsStereo
bool tecIsStereo(const DetId &id) const
Definition: TrackerTopology.h:265
SiStripDetId.h
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
SiStripBadStrip.h
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
SiStripDetInfoFileReader
Definition: SiStripDetInfoFileReader.h:30
edm::EventSetupRecordIntervalFinder
Definition: EventSetupRecordIntervalFinder.h:33
edm::eventsetup::EventSetupRecordKey
Definition: EventSetupRecordKey.h:30
TrackerTopology::tidRing
unsigned int tidRing(const DetId &id) const
Definition: TrackerTopology.h:218
TrackerTopology::tobIsRPhi
bool tobIsRPhi(const DetId &id) const
Definition: TrackerTopology.h:269
TrackerTopology::tobRod
unsigned int tobRod(const DetId &id) const
Definition: TrackerTopology.h:195
TrackerTopology::tidWheel
unsigned int tidWheel(const DetId &id) const
Definition: TrackerTopology.h:201
SiStripBadModuleConfigurableFakeESSource::produce
ReturnType produce(const SiStripBadModuleRcd &)
Definition: SiStripBadModuleConfigurableFakeESSource.cc:78
TrackerTopology::tidIsStereo
bool tidIsStereo(const DetId &id) const
Definition: TrackerTopology.h:267
SiStripBadModuleConfigurableFakeESSource::m_printDebug
bool m_printDebug
Definition: SiStripBadModuleConfigurableFakeESSource.cc:45
SiStripBadModuleConfigurableFakeESSource::m_badComponentList
Parameters m_badComponentList
Definition: SiStripBadModuleConfigurableFakeESSource.cc:43
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
DetId
Definition: DetId.h:17
edm::FileInPath
Definition: FileInPath.h:64
TrackerTopology.h
SiStripBadStrip::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripBadStrip.h:53
SiStripBadModuleConfigurableFakeESSource::m_badAPVsList
Parameters m_badAPVsList
Definition: SiStripBadModuleConfigurableFakeESSource.cc:44
TrackerTopology::tibIsStereo
bool tibIsStereo(const DetId &id) const
Definition: TrackerTopology.h:266
TrackerTopology::tobIsZPlusSide
bool tobIsZPlusSide(const DetId &id) const
Definition: TrackerTopology.h:252
SiStripDetInfoFileReader.h
SiStripBadModuleRcd
Definition: SiStripCondDataRecords.h:16
edm::eventsetup::DependentRecordImplementation::get
ProductT const & get(ESGetToken< ProductT, DepRecordT > const &iToken) const
Definition: DependentRecordImplementation.h:103
SiStripDetId::TEC
static constexpr auto TEC
Definition: SiStripDetId.h:40
edm::IOVSyncValue
Definition: IOVSyncValue.h:31
DEFINE_FWK_EVENTSETUP_SOURCE
#define DEFINE_FWK_EVENTSETUP_SOURCE(type)
Definition: SourceFactory.h:91
EventSetupRecordIntervalFinder.h
SiStripBadModuleConfigurableFakeESSource::selectAPVs
std::vector< std::pair< uint32_t, std::vector< uint32_t > > > selectAPVs() const
Definition: SiStripBadModuleConfigurableFakeESSource.cc:185
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SourceFactory.h
pfDeepBoostedJetPreprocessParams_cfi.lower_bound
lower_bound
Definition: pfDeepBoostedJetPreprocessParams_cfi.py:15
TrackerTopology::tibString
unsigned int tibString(const DetId &id) const
Definition: TrackerTopology.h:419
SiStripBadModuleConfigurableFakeESSource::m_doByAPVs
bool m_doByAPVs
Definition: SiStripBadModuleConfigurableFakeESSource.cc:46
edm::ParameterSet
Definition: ParameterSet.h:47
DetId::Tracker
Definition: DetId.h:25
SiStripCondDataRecords.h
edm::IOVSyncValue::endOfTime
static const IOVSyncValue & endOfTime()
Definition: IOVSyncValue.cc:82
TrackerTopology::tecPetalNumber
unsigned int tecPetalNumber(const DetId &id) const
Definition: TrackerTopology.h:221
TrackerTopology::tidIsZPlusSide
bool tidIsZPlusSide(const DetId &id) const
Definition: TrackerTopology.h:258
SiStripBadModuleConfigurableFakeESSource::trackTopoToken_
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > trackTopoToken_
Definition: SiStripBadModuleConfigurableFakeESSource.cc:48
TrackerTopology::tecRing
unsigned int tecRing(const DetId &id) const
ring id
Definition: TrackerTopology.h:217
SiStripDetId::TOB
static constexpr auto TOB
Definition: SiStripDetId.h:39
SiStripBadStrip::InputVector
Container InputVector
Definition: SiStripBadStrip.h:56
SiStripBadModuleConfigurableFakeESSource::Parameters
std::vector< edm::ParameterSet > Parameters
Definition: SiStripBadModuleConfigurableFakeESSource.cc:42
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
SiStripDetInfoFileReader::getAllDetIds
const std::vector< uint32_t > & getAllDetIds() const
Definition: SiStripDetInfoFileReader.h:52
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd >
SiStripDetId::TID
static constexpr auto TID
Definition: SiStripDetId.h:38
TrackerTopology::tobLayer
unsigned int tobLayer(const DetId &id) const
Definition: TrackerTopology.h:147
SiStripDetInfoFileReader::getNumberOfApvsAndStripLength
const std::pair< unsigned short, double > getNumberOfApvsAndStripLength(uint32_t detId) const
Definition: SiStripDetInfoFileReader.cc:101
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
qcdUeDQM_cfi.quality
quality
Definition: qcdUeDQM_cfi.py:31
SiStripBadModuleConfigurableFakeESSource::selectDetectors
std::vector< uint32_t > selectDetectors(const TrackerTopology *tTopo, const std::vector< uint32_t > &detIds) const
Definition: SiStripBadModuleConfigurableFakeESSource.cc:198
SiStripQuality.h
SiStripDetId::TIB
static constexpr auto TIB
Definition: SiStripDetId.h:37
TrackerTopology::tibIsZPlusSide
bool tibIsZPlusSide(const DetId &id) const
Definition: TrackerTopology.h:255
edm::es
Definition: es_Label.h:33
edm::IOVSyncValue::beginOfTime
static const IOVSyncValue & beginOfTime()
Definition: IOVSyncValue.cc:88
SiStripBadModuleConfigurableFakeESSource::~SiStripBadModuleConfigurableFakeESSource
~SiStripBadModuleConfigurableFakeESSource() override
Definition: SiStripBadModuleConfigurableFakeESSource.cc:69
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
SiStripBadModuleConfigurableFakeESSource::ReturnType
std::unique_ptr< SiStripBadStrip > ReturnType
Definition: SiStripBadModuleConfigurableFakeESSource.cc:38
TrackerTopology::tecIsZPlusSide
bool tecIsZPlusSide(const DetId &id) const
Definition: TrackerTopology.h:261
SiStripBadModuleConfigurableFakeESSource::m_detInfoFileReader
SiStripDetInfoFileReader m_detInfoFileReader
Definition: SiStripBadModuleConfigurableFakeESSource.cc:47
edm::ESProducer
Definition: ESProducer.h:104
ParameterSet.h
TrackerTopology::tibIsRPhi
bool tibIsRPhi(const DetId &id) const
Definition: TrackerTopology.h:271
SiStripSubdetector::Subdetector
Subdetector
Definition: SiStripEnums.h:5
TrackerTopology::tecWheel
unsigned int tecWheel(const DetId &id) const
Definition: TrackerTopology.h:198
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
TrackerTopology::tibLayer
unsigned int tibLayer(const DetId &id) const
Definition: TrackerTopology.h:150