CMS 3D CMS Logo

SiStripCondObjBuilderFromDb.cc
Go to the documentation of this file.
1 
19 
20 #include <cstdlib>
21 #include <iostream>
22 #include <sstream>
23 #include <iomanip>
24 #include "Fed9UUtils.hh"
25 
26 using namespace std;
27 using namespace sistrip;
28 
29 // -----------------------------------------------------------------------------
32  : m_skippedDevices(pset.getUntrackedParameter<edm::VParameterSet>("SkippedDevices", edm::VParameterSet())),
33  m_whitelistedDevices(pset.getUntrackedParameter<edm::VParameterSet>("WhitelistedDevices", edm::VParameterSet())),
34  m_tickmarkThreshold(static_cast<float>(pset.getUntrackedParameter<double>("TickmarkThreshold", 50.))),
35  m_gaincalibrationfactor(static_cast<float>(pset.getUntrackedParameter<double>("GainNormalizationFactor", 640.))),
36  m_defaultpedestalvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultPedestal", 0.))),
37  m_defaultnoisevalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultNoise", 0.))),
38  m_defaultthresholdhighvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultThresholdHigh", 0.))),
39  m_defaultthresholdlowvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultThresholdLow", 0.))),
40  m_defaultapvmodevalue(static_cast<uint16_t>(pset.getUntrackedParameter<uint32_t>("DefaultAPVMode", 37))),
41  m_defaultapvlatencyvalue(static_cast<uint16_t>(pset.getUntrackedParameter<uint32_t>("DefaultAPVLatency", 142))),
42  m_defaulttickheightvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultTickHeight", 690.))),
43  m_useanalysis(static_cast<bool>(pset.getUntrackedParameter<bool>("UseAnalysis", false))),
44  m_usefed(static_cast<bool>(pset.getUntrackedParameter<bool>("UseFED", false))),
45  m_usefec(static_cast<bool>(pset.getUntrackedParameter<bool>("UseFEC", false))),
46  m_debug(static_cast<bool>(pset.getUntrackedParameter<bool>("DebugMode", false))),
47  m_reader(std::make_unique<SiStripDetInfoFileReader>(
48  pset.getParameter<edm::FileInPath>("SiStripDetInfoFile").fullPath())),
49  tTopo(buildTrackerTopology()) {
50  LogTrace(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
51  << " Constructing object...";
52  for (const auto& pset : m_skippedDevices) {
53  skippedDevices.emplace_back(pset);
54  }
55  for (const auto& pset : m_whitelistedDevices) {
56  whitelistedDevices.emplace_back(pset);
57  }
58 }
59 
60 // -----------------------------------------------------------------------------
63  LogTrace(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
64  << " Constructing object...";
65 }
66 
67 // -----------------------------------------------------------------------------
70  LogTrace(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
71  << " Destructing object...";
72  delete tTopo;
73 }
74 
75 // -----------------------------------------------------------------------------
76 
79  if (!(dbParams_ == dbParams())) {
80  dbParams_ = dbParams();
81  buildCondObj();
82  }
83 }
84 // -----------------------------------------------------------------------------
92 
93  pxbVals_.layerStartBit_ = 16;
94  pxbVals_.ladderStartBit_ = 8;
95  pxbVals_.moduleStartBit_ = 2;
96  pxbVals_.layerMask_ = 0xF;
97  pxbVals_.ladderMask_ = 0xFF;
98  pxbVals_.moduleMask_ = 0x3F;
99  pxfVals_.sideStartBit_ = 23;
100  pxfVals_.diskStartBit_ = 16;
101  pxfVals_.bladeStartBit_ = 10;
102  pxfVals_.panelStartBit_ = 8;
103  pxfVals_.moduleStartBit_ = 2;
104  pxfVals_.sideMask_ = 0x3;
105  pxfVals_.diskMask_ = 0xF;
106  pxfVals_.bladeMask_ = 0x3F;
107  pxfVals_.panelMask_ = 0x3;
108  pxfVals_.moduleMask_ = 0x3F;
109  tecVals_.sideStartBit_ = 18;
110  tecVals_.wheelStartBit_ = 14;
111  tecVals_.petal_fw_bwStartBit_ = 12;
112  tecVals_.petalStartBit_ = 8;
113  tecVals_.ringStartBit_ = 5;
114  tecVals_.moduleStartBit_ = 2;
115  tecVals_.sterStartBit_ = 0;
116  tecVals_.sideMask_ = 0x3;
117  tecVals_.wheelMask_ = 0xF;
118  tecVals_.petal_fw_bwMask_ = 0x3;
119  tecVals_.petalMask_ = 0xF;
120  tecVals_.ringMask_ = 0x7;
121  tecVals_.moduleMask_ = 0x7;
122  tecVals_.sterMask_ = 0x3;
123  tibVals_.layerStartBit_ = 14;
124  tibVals_.str_fw_bwStartBit_ = 12;
125  tibVals_.str_int_extStartBit_ = 10;
126  tibVals_.strStartBit_ = 4;
127  tibVals_.moduleStartBit_ = 2;
128  tibVals_.sterStartBit_ = 0;
129  tibVals_.layerMask_ = 0x7;
130  tibVals_.str_fw_bwMask_ = 0x3;
131  tibVals_.str_int_extMask_ = 0x3;
132  tibVals_.strMask_ = 0x3F;
133  tibVals_.moduleMask_ = 0x3;
134  tibVals_.sterMask_ = 0x3;
135  tidVals_.sideStartBit_ = 13;
136  tidVals_.wheelStartBit_ = 11;
137  tidVals_.ringStartBit_ = 9;
138  tidVals_.module_fw_bwStartBit_ = 7;
139  tidVals_.moduleStartBit_ = 2;
140  tidVals_.sterStartBit_ = 0;
141  tidVals_.sideMask_ = 0x3;
142  tidVals_.wheelMask_ = 0x3;
143  tidVals_.ringMask_ = 0x3;
144  tidVals_.module_fw_bwMask_ = 0x3;
145  tidVals_.moduleMask_ = 0x1F;
146  tidVals_.sterMask_ = 0x3;
147  tobVals_.layerStartBit_ = 14;
148  tobVals_.rod_fw_bwStartBit_ = 12;
149  tobVals_.rodStartBit_ = 5;
150  tobVals_.moduleStartBit_ = 2;
151  tobVals_.sterStartBit_ = 0;
152  tobVals_.layerMask_ = 0x7;
153  tobVals_.rod_fw_bwMask_ = 0x3;
154  tobVals_.rodMask_ = 0x7F;
155  tobVals_.moduleMask_ = 0x7;
156  tobVals_.sterMask_ = 0x3;
157 
158  return new TrackerTopology(pxbVals_, pxfVals_, tecVals_, tibVals_, tidVals_, tobVals_);
159 }
160 // -----------------------------------------------------------------------------
163  std::stringstream& output,
164  std::string& label) {
165  // DEPRECATED. Superseded by SiStripCondObjBuilderFromDb::getConfigString(const std::type_info& typeInfo).
166 
167  //get current config DB parameter
168 
170 
171  SiStripDbParams::SiStripPartitions::const_iterator ipart = partitionsRange.begin();
172  SiStripDbParams::SiStripPartitions::const_iterator ipartEnd = partitionsRange.end();
173  for (; ipart != ipartEnd; ++ipart) {
174  SiStripPartition partition = ipart->second;
175  output << "@ "
176  << " Partition " << partition.partitionName();
177  if (label != "Cabling" && label != "ApvLatency")
178  output << " FedVer " << partition.fedVersion().first << "." << partition.fedVersion().second;
179  if (label == "Cabling")
180  output << " CabVer " << partition.cabVersion().first << "." << partition.cabVersion().second << " MaskVer "
181  << partition.maskVersion().first << "." << partition.maskVersion().second;
182  if (label == "ApvTiming")
183  output << " ApvTimingVer " << partition.apvTimingVersion().first << "." << partition.apvTimingVersion().second;
184  if (label == "ApvLatency")
185  output << " FecVersion " << partition.fecVersion().first << "." << partition.fecVersion().second;
186  }
187 
188  if (!strcmp(output.str().c_str(), input.str().c_str()))
189  return false;
190 
191  return true;
192 }
193 // -----------------------------------------------------------------------------
196  // create config line used by fast O2O
197 
198  std::stringstream output;
199 
201  SiStripDbParams::SiStripPartitions::const_iterator ipart = partitionsRange.begin();
202  SiStripDbParams::SiStripPartitions::const_iterator ipartEnd = partitionsRange.end();
203  for (; ipart != ipartEnd; ++ipart) {
204  SiStripPartition partition = ipart->second;
205  output << "%%"
206  << "Partition: " << partition.partitionName();
207 
208  // Make everything depend on cabVersion and maskVersion!
209  output << " CablingVersion: " << partition.cabVersion().first << "." << partition.cabVersion().second;
210  output << " MaskVersion: " << partition.maskVersion().first << "." << partition.maskVersion().second;
211 
212  if (typeInfo == typeid(SiStripFedCabling)) {
213  // Do nothing. FedCabling only depends on cabVersion and maskVersion.
214  } else if (typeInfo == typeid(SiStripLatency)) {
215  // Latency is FEC related, add fecVersion.
216  output << " FecVersion: " << partition.fecVersion().first << "." << partition.fecVersion().second;
217  } else {
218  // BadStrip, Noises, Pedestals and Thresholds are FED related, add fecVersion.
219  output << " FedVersion: " << partition.fedVersion().first << "." << partition.fedVersion().second;
220  if (typeInfo == typeid(SiStripApvGain)) {
221  // Not used in O2O.
222  output << " ApvTimingVersion: " << partition.apvTimingVersion().first << "."
223  << partition.apvTimingVersion().second;
224  }
225  }
226  }
227 
228  return output.str();
229 }
230 // -----------------------------------------------------------------------------
233  LogTrace(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]";
234 
235  // Check if DB connection is made
236  if (db_) {
237  // Check if DB connection is made
238  if (db_->deviceFactory() || db_->databaseCache()) {
239  // Build FEC cabling object
240  SiStripFecCabling fec_cabling;
241 
244 
246  SiStripDetCabling det_cabling(*fed_cabling_, tTopo);
247  buildStripRelatedObjects(&*db_, det_cabling);
248 
249  if (m_useanalysis)
251  if (m_usefed)
253  if (m_usefec)
255 
256  } else {
257  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
258  << " NULL pointer to DeviceFactory returned by SiStripConfigDb!"
259  << " Cannot build Pedestals object!";
260  }
261  } else {
262  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
263  << " NULL pointer to SiStripConfigDb returned by DB \"service\"!"
264  << " Cannot build Pedestals object!";
265  }
266 }
267 
268 // -----------------------------------------------------------------------------
270 //Retrieve FedDescriptions from configuration database
272  SiStripConfigDb::FedDescriptionsRange descriptions = db->getFedDescriptions();
273  if (descriptions.empty()) {
274  edm::LogWarning(mlESSources_) << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
275  << " No FED descriptions found!";
276 
277  return false;
278  }
279  return true;
280 }
281 
282 // -----------------------------------------------------------------------------
284 // Retrieve gain from configuration database
287  db->getAnalysisDescriptions(CommissioningAnalysisDescription::T_ANALYSIS_TIMING);
288  if (anal_descriptions.empty()) {
289  edm::LogWarning(mlESSources_) << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
290  << " Unable to build SiStripApvGain object!"
291  << " No timing-scan analysis descriptions found!";
292  return false;
293  }
294  return true;
295 }
296 
297 // -----------------------------------------------------------------------------
299 // Retrieve list of active DetIds
301  vector<uint32_t> det_ids;
302  det_cabling.addActiveDetectorsRawIds(det_ids);
303  if (det_ids.empty()) {
304  edm::LogWarning(mlESSources_) << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
305  << " Unable to build Pedestals object!"
306  << " No DetIds found!";
307  return det_ids;
308  }
309  LogTrace(mlESSources_) << "\n\nSiStripCondObjBuilderFromDb::" << __func__ << "]"
310  << " Found " << det_ids.size() << " active DetIds";
311  return det_ids;
312 }
313 
314 // -----------------------------------------------------------------------------
316 //build connections per DetId
317 vector<const FedChannelConnection*> SiStripCondObjBuilderFromDb::buildConnections(const SiStripDetCabling& det_cabling,
318  uint32_t det_id) {
319  vector<const FedChannelConnection*> conns = det_cabling.getConnections(det_id);
320  if (conns.empty()) {
321  edm::LogWarning(mlESSources_) << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
322  << " Unable to build condition object!"
323  << " No FED channel connections found for detid " << det_id;
324  }
325  return conns;
326 }
327 
328 // -----------------------------------------------------------------------------
330 //retrieve number of APV pairs per detid
332  uint16_t nApvPairs;
333  nApvPairs = m_reader->getNumberOfApvsAndStripLength(det_id).first / 2;
334  return nApvPairs;
335 }
336 
337 // -----------------------------------------------------------------------------
339 //set default values for Cabling Objects Peds, Noise, thresh, Quality
341  uint16_t istrip = apvPair * sistrip::STRIPS_PER_FEDCH;
342  std::cout << "Found disabled FedConnection! APVPair: " << apvPair << " Strips: " << sistrip::STRIPS_PER_FEDCH
343  << std::endl;
345  for (; istrip < (apvPair + 1) * sistrip::STRIPS_PER_FEDCH; ++istrip) {
349  }
350 }
351 
352 // -----------------------------------------------------------------------------
354 void SiStripCondObjBuilderFromDb::setDefaultValuesApvTiming(uint32_t detid, uint32_t apvPair) {
356 
357  if (gain_last_) {
358  auto range = gain_last_->getRange(detid);
359  if (apvPair * 2 < range.second - range.first) {
360  height = gain_last_->getApvGain(apvPair * 2, range);
361  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
362  << " [ApvGain] Read gain value from last IOV for DetId: " << detid
363  << " ApvPair: " << apvPair << ", value=" << height;
364  } else {
365  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
366  << " [ApvGain] Unable to read gain value from last IOV for DetId: " << detid
367  << " ApvPair: " << apvPair << ", use dummy value=" << height;
368  }
369  } else {
370  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
371  << " [ApvGain] NULL pointer for last stored gain object in DB!!! "
372  << "Will use dummy value=" << height << " for DetId: " << detid
373  << " ApvPair: " << apvPair;
374  }
375 
376  inputApvGain.push_back(height); // APV0
377  inputApvGain.push_back(height); // APV1
378 }
379 
380 // -----------------------------------------------------------------------------
383  const FedChannelConnection& ipair,
384  uint32_t detid,
385  uint16_t apvnr) {
386  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]: Set Default Latency for Detid: " << detid
387  << " ApvNr: " << apvnr << std::endl;
389  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]: Unable to fill Latency for Detid: " << detid
390  << " ApvNr: " << apvnr << std::endl;
391  }
393  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]: Unable to fill Latency for Detid: " << detid
394  << " ApvNr: " << apvnr << std::endl;
395  }
396 }
397 
398 // -----------------------------------------------------------------------------
402  db->getAnalysisDescriptions(CommissioningAnalysisDescription::T_ANALYSIS_TIMING);
403  SiStripConfigDb::AnalysisDescriptionsV::const_iterator iii = anal_descriptions.begin();
404  SiStripConfigDb::AnalysisDescriptionsV::const_iterator jjj = anal_descriptions.end();
405 
406  while (iii != jjj) {
407  CommissioningAnalysisDescription* tmp = *iii;
408  uint16_t fed_id = tmp->getFedId();
409  uint16_t fed_ch = SiStripFedKey::fedCh(tmp->getFeUnit(), tmp->getFeChan());
410  if (fed_id == ipair.fedId() && fed_ch == ipair.fedCh()) {
411  break;
412  }
413  iii++;
414  }
415 
416  TimingAnalysisDescription* anal = nullptr;
417  if (iii != jjj) {
418  anal = dynamic_cast<TimingAnalysisDescription*>(*iii);
419  }
420  if (!anal) {
421  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
422  << " [ApvGain] Unable to find Timing Analysis Description from DB for DetId: "
423  << ipair.detId() << " ApvPair:" << ipair.apvPairNumber();
424  return false;
425  }
426 
427  bool is_whitelist = false;
428  for (const auto& desc : whitelistedDevices) {
429  if (desc.isConsistent(ipair)) {
430  is_whitelist = true;
431  if (std::find(whitelistedDetIds.begin(), whitelistedDetIds.end(), ipair.detId()) == whitelistedDetIds.end()) {
432  whitelistedDetIds.push_back(ipair.detId());
433  }
434  break;
435  }
436  }
437 
438  if (!is_whitelist) {
439  // check if this should be skipped only if it is not in the whitelist
440  for (const auto& desc : skippedDevices) {
441  if (desc.isConsistent(ipair)) {
442  edm::LogInfo(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
443  << " [ApvGain] Skip module with DetId:" << ipair.detId()
444  << " ApvPair:" << ipair.apvPairNumber() << " according to \n"
445  << desc.dump();
446  if (std::find(skippedDetIds.begin(), skippedDetIds.end(), ipair.detId()) == skippedDetIds.end()) {
447  skippedDetIds.push_back(ipair.detId());
448  }
449  return false;
450  }
451  }
452  }
453 
454  if (anal->getHeight() > m_tickmarkThreshold) {
455  float tick_height = (anal->getHeight() / m_gaincalibrationfactor);
456  inputApvGain.push_back(tick_height); // APV0
457  inputApvGain.push_back(tick_height); // APV1
458  } else {
459  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
460  << " [ApvGain] Low tickmark height for DetId:" << ipair.detId()
461  << " ApvPair:" << ipair.apvPairNumber() << ", height=" << anal->getHeight();
462  return false;
463  }
464 
465  return true;
466 }
467 
468 // -----------------------------------------------------------------------------
471  SiStripConfigDb* const db,
472  FedChannelConnection& ipair,
473  uint32_t detid,
474  uint16_t apvnr,
476  m_reader->getNumberOfApvsAndStripLength(detid);
477 
478  SiStripConfigDb::DeviceDescriptionsV::const_iterator iapv = apvs.begin();
479  SiStripConfigDb::DeviceDescriptionsV::const_iterator japv = apvs.end();
480  if (iapv == japv)
481  return false;
482  for (; iapv != japv; ++iapv) {
483  apvDescription* apv = dynamic_cast<apvDescription*>(*iapv);
484  if (!apv) {
485  continue;
486  }
487  if ((apv->getCrateId()) != (ipair.fecCrate()))
488  continue;
489  if ((apv->getFecSlot()) != (ipair.fecSlot()))
490  continue;
491  if ((apv->getRingSlot()) != (ipair.fecRing()))
492  continue;
493  if ((apv->getCcuAddress()) != (ipair.ccuAddr()))
494  continue;
495  if ((apv->getChannel()) != (ipair.ccuChan()))
496  continue;
497  // Insert latency values into latency object
498  if ((apv->getAddress()) == (ipair.i2cAddr(0))) {
499  if (!latency_.put(
500  detid, apvnr, static_cast<uint16_t>(apv->getLatency()), static_cast<uint16_t>(apv->getApvMode()))) {
501  std::cout << "UNABLE APVLatency Put: Detid " << dec << detid << " APVNr.: " << apvnr
502  << " Latency Value: " << dec << static_cast<uint16_t>(apv->getLatency()) << " APV Mode: " << dec
503  << static_cast<uint16_t>(apv->getApvMode()) << std::endl;
504  return false;
505  } else {
506  ++apvnr;
507  }
508  }
509  if ((apv->getAddress()) == (ipair.i2cAddr(1))) {
510  if (!latency_.put(
511  detid, apvnr, static_cast<uint16_t>(apv->getLatency()), static_cast<uint16_t>(apv->getApvMode()))) {
512  std::cout << "UNABLE APVLatency Put: Detid " << dec << detid << " APVNr.: " << apvnr
513  << " Latency Value: " << dec << static_cast<uint16_t>(apv->getLatency()) << " APV Mode: " << dec
514  << static_cast<uint16_t>(apv->getApvMode()) << std::endl;
515  continue;
516  return false;
517  } else {
518  ++apvnr;
519  }
520  }
521  }
522  return true;
523 }
524 
525 // -----------------------------------------------------------------------------
527 //bool SiStripCondObjBuilderFromDb::setValuesCabling(SiStripConfigDb* const db, FedChannelConnection &ipair, uint32_t detid){
529  FedChannelConnection& ipair,
530  uint32_t detid) {
531  //SiStripConfigDb::FedDescriptionsRange descriptions = db->getFedDescriptions();
532  SiStripConfigDb::FedDescriptionsV::const_iterator description = descriptions.begin();
533  while (description != descriptions.end()) {
534  if ((*description)->getFedId() == ipair.fedId()) {
535  break;
536  }
537  description++;
538  }
539  if (description == descriptions.end()) {
540  return false;
541  }
542  // Retrieve Fed9UStrips object from FED description
543  const Fed9U::Fed9UStrips& strips = (*description)->getFedStrips();
544 
545  // Retrieve StripDescriptions for each APV
546  uint16_t jstrip = ipair.apvPairNumber() * sistrip::STRIPS_PER_FEDCH;
547  for (uint16_t iapv = 2 * ipair.fedCh(); iapv < 2 * ipair.fedCh() + 2; iapv++) {
548  // Get StripDescriptions for the given APV
549  Fed9U::Fed9UAddress addr;
550  addr.setFedApv(iapv);
551  vector<Fed9U::Fed9UStripDescription> strip = strips.getApvStrips(addr);
552 
553  vector<Fed9U::Fed9UStripDescription>::const_iterator istrip = strip.begin();
554 
555  for (; istrip != strip.end(); istrip++) {
556  pedestals_->setData(istrip->getPedestal(), inputPedestals);
557  noises_->setData(istrip->getNoise(), inputNoises);
558  threshold_->setData(jstrip, istrip->getLowThresholdFactor(), istrip->getHighThresholdFactor(), inputThreshold);
559  if (istrip->getDisable()) {
560  std::cout << "Found disabled strip! Detid: " << detid << " APVNr: " << iapv << " Strips: " << jstrip
561  << std::endl;
562 
563  inputQuality.push_back(quality_->encode(jstrip, 1));
564  }
565  jstrip++;
566  }
567  }
568  return true;
569 }
570 
571 // -----------------------------------------------------------------------------
573 //store objects
575  if (!pedestals_->put(det_id, inputPedestals)) {
576  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
577  << " Unable to insert values into SiStripPedestals object!"
578  << " DetId already exists!" << std::endl;
579  }
580  inputPedestals.clear();
581 }
582 
583 // -----------------------------------------------------------------------------
586  // Insert noise values into Noises object
587 
588  if (!noises_->put(det_id, inputNoises)) {
589  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
590  << " Unable to insert values into SiStripNoises object!"
591  << " DetId already exists!" << std::endl;
592  }
593  inputNoises.clear();
594 }
595 
596 // -----------------------------------------------------------------------------
599  // Insert threshold values into Threshold object
600  if (!threshold_->put(det_id, inputThreshold)) {
601  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
602  << " Unable to insert values into SiStripThreshold object!"
603  << " DetId already exists!" << std::endl;
604  }
605  inputThreshold.clear();
606 }
607 
608 // -----------------------------------------------------------------------------
611  // Insert quality values into Quality object
612  if (!inputQuality.empty()) {
613  quality_->compact(det_id, inputQuality);
614  if (!quality_->put(det_id, inputQuality)) {
615  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
616  << " Unable to insert values into SiStripQuality object!"
617  << " DetId already exists!" << std::endl;
618  }
619  }
620  inputQuality.clear();
621 }
622 
623 // -----------------------------------------------------------------------------
626  // Insert tick height values into Gain object
628  if (!gain_->put(det_id, range)) {
629  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
630  << " [ApvGain] Unable to insert values into SiStripApvGain object!"
631  << " DetId already exists!";
632  }
633  inputApvGain.clear();
634 }
635 
636 // -----------------------------------------------------------------------------
639  const SiStripDetCabling& det_cabling) {
640  //variables needed in this function
641  uint16_t nApvPairs;
642  vector<uint32_t>::const_iterator det_id;
643  vector<uint32_t> det_ids;
644 
645  edm::LogInfo(mlESSources_) << "\n[SiStripCondObjBuilderFromDb::" << __func__ << "] first call to this method";
646 
647  //Check if FedDescriptions exist, if not return
648  if (!retrieveFedDescriptions(db)) {
649  std::cout << "Found no FedDescription!" << std::endl;
650  return;
651  }
652  // Retrieve list of active DetIds
653  det_cabling.addActiveDetectorsRawIds(det_ids);
654  if (det_ids.empty()) {
655  std::cout << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
656  << " Unable to build Pedestals object!"
657  << " No DetIds found!" << std::endl;
658  return;
659  }
660  std::cout << "\n\nSiStripCondObjBuilderFromDb::" << __func__ << "]"
661  << " Found " << det_ids.size() << " active DetIds";
662 
663  // Loop Active DetIds
664  det_id = det_ids.begin();
665  for (; det_id != det_ids.end(); det_id++) {
666  std::stringstream ssMessage;
667 
668  // Ignore NULL DetIds
669  if (!(*det_id)) {
670  continue;
671  }
672  if (*det_id == sistrip::invalid32_) {
673  continue;
674  }
675 
676  //build connections per DetId
677  const vector<const FedChannelConnection*>& conns = buildConnections(det_cabling, *det_id);
678 
679  vector<const FedChannelConnection*>::const_iterator ipair = conns.begin();
680  if (conns.empty())
681  continue;
682 
683  //retrieve number of APV pairs per detid
684  nApvPairs = retrieveNumberAPVPairs(*det_id);
685 
686  //loop connections and check if APVPair is connected
687  vector<vector<const FedChannelConnection*>::const_iterator> listConns(nApvPairs, conns.end());
688 
689  for (; ipair != conns.end(); ++ipair) {
690  // Check if the ApvPair is connected
691  if (!(*ipair))
692  continue;
693  if ((*ipair)->fedId() != sistrip::invalid_ && (*ipair)->apvPairNumber() < 3) {
694  // (*ipair)->print(ssMessage);
695  // ssMessage<< std::endl;
696  listConns[ipair - conns.begin()] = ipair;
697  } else {
698  std::cout << "\n impossible to assign connection position in listConns " << std::endl;
699  // (*ipair)->print(ssMessage);
700  // ssMessage << std::endl;
701  }
702  }
703 
704  // get data
705  // vector< vector<const FedChannelConnection *>::const_iterator >::const_iterator ilistConns=listConns.begin();
706  for (uint16_t apvPair = 0; apvPair < listConns.size(); ++apvPair) {
707  ipair = listConns[apvPair];
708  if (ipair == conns.end()) {
709  // Fill object with default values
710  std::cout << "\n "
711  << " Unable to find FED connection for detid : " << std::dec << *det_id << " APV pair number "
712  << apvPair << " Writing default values" << std::endl;
713  // (*ipair)->print(ssMessage); // this will crash!
714  //If no connection was found, add 100 to apvpair
715  apvPair += 100;
716  std::cout << " Put apvPair+100:" << apvPair << " into vector!" << std::endl;
717  // use dummy FedChannelConnection since it's not used in this case
719  p_apvpcon = std::make_pair(apvPair, dummy);
720  v_apvpcon.push_back(p_apvpcon);
721  apvPair = apvPair - 100;
722  continue;
723  }
724  p_apvpcon = std::make_pair(apvPair, **ipair);
725  v_apvpcon.push_back(p_apvpcon);
726  } //conns loop
727  p_detcon = std::make_pair(*det_id, v_apvpcon);
728  v_trackercon.push_back(p_detcon);
729  v_apvpcon.clear();
730  } // det id loop
731 }
732 
733 // -----------------------------------------------------------------------------
736  trackercon tc = _tc;
737  std::cout << "Entering [SiStripCondObjBuilderFromDb::" << __func__ << "]" << std::endl;
738  //data container
739  gain_ = new SiStripApvGain();
740 
741  //check if Timing analysis description is found, otherwise quit
743  edm::LogWarning(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
744  << " NULL pointer to AnalysisDescriptions returned by SiStripConfigDb!"
745  << " Cannot build Analysis object! QUIT";
746  throw cms::Exception("Cannot build Analysis object!");
747  }
748 
749  // Get all detIds from the ideal geometry to build the payload
750  const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>& DetInfos = m_reader->getAllData();
751 
752  for (auto it = DetInfos.begin(); it != DetInfos.end(); ++it) {
753  // check if det id is correct and if it is actually cabled in the detector
754  if (it->first == 0 || it->first == sistrip::invalid32_) {
755  edm::LogError("DetIdNotGood") << "@SUB=analyze"
756  << "Invalid detid: " << it->first << " ... neglecting!" << std::endl;
757  continue;
758  }
759 
760  uint32_t detid = it->first;
761  bool update_ = true;
762  i_trackercon det_iter =
763  std::find_if(tc.begin(), tc.end(), [detid](const pair_detcon& p) { return p.first == detid; });
764  if (det_iter == tc.end()) {
765  update_ = false; // do not update if it is not connected in cabling
766  }
767 
768  if (update_) {
769  //loop connections
770  for (i_apvpairconn connections = det_iter->second.begin(); connections != det_iter->second.end(); connections++) {
771  uint32_t apvPair = (*connections).first;
772  FedChannelConnection ipair = (*connections).second;
773 
774  //no connection for apvPair found
775  if (apvPair >= 100) {
776  setDefaultValuesApvTiming(detid, apvPair - 100);
777  continue;
778  }
779 
780  //fill data
781  if (!setValuesApvTiming(db, ipair)) {
782  // either not found in analysis table or low tickmark height
783  setDefaultValuesApvTiming(detid, apvPair);
784  }
785  } //connections
786 
787  } else {
788  uint32_t nApvPairs = it->second.nApvs / 2;
789  for (uint32_t apvPair = 0; apvPair < nApvPairs; ++apvPair) {
790  setDefaultValuesApvTiming(detid, apvPair);
791  }
792  }
793 
794  storeTiming(detid);
795 
796  } // end loop detids
797 
798  //print out skipped modules
799  std::stringstream ss;
800  for (const auto& id : whitelistedDetIds) {
801  ss << "\n" << id;
802  }
803  edm::LogInfo(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
804  << " [ApvGainSummary] " << whitelistedDetIds.size()
805  << " modules are in the whitelist, updates will be ensured: " << ss.str();
806 
807  ss.str(""); // clear it!
808  for (const auto& skip : skippedDetIds) {
809  ss << "\n" << skip;
810  }
811  edm::LogInfo(mlESSources_) << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
812  << " [ApvGainSummary] Skipped " << skippedDetIds.size() << " modules: " << ss.str();
813 }
814 
815 // -----------------------------------------------------------------------------
818  trackercon tc = _tc;
819  std::cout << "Entering [SiStripCondObjBuilderFromDb::" << __func__ << "]" << std::endl;
820  //data container
821  latency_ = new SiStripLatency();
822 
823  i_trackercon detids_end = tc.end();
824 
825  // get APV DeviceDescriptions
826  SiStripConfigDb::DeviceDescriptionsRange apvs = db->getDeviceDescriptions(APV25);
827  ;
828 
829  //loop detids
830  for (i_trackercon detids = tc.begin(); detids != detids_end; detids++) {
831  uint32_t detid = (*detids).first;
832  uint16_t apvnr = 1;
833  i_apvpairconn connections_end = ((*detids).second).end();
834 
835  //loop connections
836  for (i_apvpairconn connections = ((*detids).second).begin(); connections != connections_end; connections++) {
837  uint32_t apvPair = (*connections).first;
838  FedChannelConnection ipair = (*connections).second;
839 
840  //no connection for apvPair found
841  if (apvPair >= 100) {
842  //setDefaultValuesApvLatency((*latency_),ipair, detid, apvnr);
843  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "] No FEDConnection for DetId " << detid
844  << " ApvPair " << apvPair - 100 << " found, skipping Latency Insertion!" << std::endl;
845  continue;
846  }
847 
848  //fill data
849  if (!setValuesApvLatency((*latency_), db, ipair, detid, apvnr, apvs)) {
850  std::cout << "\n "
851  << " Unable to find FEC Description"
852  << " Skipping Insertion for DetId: " << detid << std::endl;
853  //setDefaultValuesApvLatency((*latency_),ipair, detid, apvnr);
854  }
855  apvnr += 2;
856  } //connections
857  // compact Latency Object
858 
859  } //detids
860  latency_->compress();
861  std::stringstream ss;
862  // latency debug output
865  std::cout << ss.str() << std::endl;
866 }
867 
868 // -----------------------------------------------------------------------------
871  trackercon tc = _tc;
872  std::cout << "Entering [SiStripCondObjBuilderFromDb::" << __func__ << "]" << std::endl;
873 
874  //data containers
876  noises_ = new SiStripNoises();
878  quality_ = new SiStripQuality();
879 
880  i_trackercon detids_end = tc.end();
881 
882  //Build FED Descriptions out of db object
883  SiStripConfigDb::FedDescriptionsRange descriptions = db->getFedDescriptions();
884 
885  //loop detids
886  for (i_trackercon detids = tc.begin(); detids != detids_end; detids++) {
887  uint32_t detid = (*detids).first;
888  i_apvpairconn connections_end = ((*detids).second).end();
889 
890  //loop connections
891  for (i_apvpairconn connections = ((*detids).second).begin(); connections != connections_end; connections++) {
892  uint32_t apvPair = (*connections).first;
893  FedChannelConnection ipair = (*connections).second;
894 
895  //no connection for apvPair found
896  if (apvPair >= 100) {
897  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
898  << " Unable to find FED description for FED id: " << ipair.fedId() << " detid : " << detid
899  << " APV pair number " << apvPair << " Writing default values" << std::endl;
900  setDefaultValuesCabling((apvPair - 100));
901  continue;
902  }
903  // if(!setValuesCabling(db, ipair, detid)){
904  if (!setValuesCabling(descriptions, ipair, detid)) {
905  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
906  << " Unable to find FED description for FED id: " << ipair.fedId() << " detid : " << detid
907  << " APV pair number " << apvPair << " Writing default values" << std::endl;
908  setDefaultValuesCabling(apvPair);
909  }
910  } //connections
911  storePedestals(detid);
912  storeNoise(detid);
913  storeThreshold(detid);
914  storeQuality(detid);
915  } //detids
916 }
917 
919  : fec_(sistrip::invalid_), fed_(sistrip::invalid_), detid_(sistrip::invalid32_) {}
920 
922  : fec_(pset.getUntrackedParameter<uint32_t>("fecCrate", sistrip::invalid_),
923  pset.getUntrackedParameter<uint32_t>("fecSlot", sistrip::invalid_),
924  pset.getUntrackedParameter<uint32_t>("fecRing", sistrip::invalid_),
925  pset.getUntrackedParameter<uint32_t>("ccuAddr", sistrip::invalid_),
926  pset.getUntrackedParameter<uint32_t>("ccuChan", sistrip::invalid_),
927  pset.getUntrackedParameter<uint32_t>("lldChan", sistrip::invalid_),
928  pset.getUntrackedParameter<uint32_t>("i2cAddr", sistrip::invalid_)),
929  fed_(pset.getUntrackedParameter<uint32_t>("fedId", sistrip::invalid_),
930  pset.getUntrackedParameter<uint32_t>("feUnit", sistrip::invalid_),
931  pset.getUntrackedParameter<uint32_t>("feChan", sistrip::invalid_),
932  pset.getUntrackedParameter<uint32_t>("fedApv", sistrip::invalid_)),
933  detid_(pset.getUntrackedParameter<uint32_t>("detid", sistrip::invalid32_)) {
934  if (!fec_.isValid() && !fed_.isValid() && detid_ == sistrip::invalid32_) {
935  throw cms::Exception("InvalidPSet") << "None of FEC coordinates/FED coordinates/detids are valid in this PSet!\n"
936  << pset.dump(2);
937  }
938 }
939 
941  auto comp = [](uint16_t desc, uint16_t device) { return desc == 0 || desc == device; };
942 
943  // use FEC coordinates first if provided
944  if (fec_.isValid()) {
945  return comp(fec_.fecCrate(), fc.fecCrate()) && comp(fec_.fecSlot(), fc.fecSlot()) &&
946  comp(fec_.fecRing(), fc.fecRing()) && comp(fec_.ccuAddr(), fc.ccuAddr()) &&
947  comp(fec_.ccuChan(), fc.ccuChan()) && comp(fec_.lldChan(), fc.lldChannel()) &&
948  (comp(fec_.i2cAddr(), fc.i2cAddr(0)) ||
949  comp(fec_.i2cAddr(), fc.i2cAddr(1))); // do not distinguish between APV1 and APV2
950  }
951 
952  // then try FED coordinates
953  if (fed_.isValid()) {
954  return comp(fed_.fedId(), fc.fedId()) && comp(fed_.feUnit(), SiStripFedKey::feUnit(fc.fedCh())) &&
955  comp(fed_.feChan(), SiStripFedKey::feChan(fc.fedCh()));
956  // no fedApv in FedChannelConnection -- and we do not distinguish between APV1 and APV2
957  }
958 
959  // last try detids (will skip all APVs on the module)
960  if (detid_ != sistrip::invalid32_) {
961  return detid_ == fc.detId();
962  }
963 
964  return false;
965 }
966 
968  std::stringstream ss;
969  fec_.terse(ss);
970  ss << "\n";
971  fed_.terse(ss);
972  ss << "\n";
973  ss << "detid=" << detid_;
974  return ss.str();
975 }
SiStripCondObjBuilderFromDb::quality_
SiStripQuality * quality_
Definition: SiStripCondObjBuilderFromDb.h:145
SiStripCondObjBuilderFromDb::latency_
SiStripLatency * latency_
Definition: SiStripCondObjBuilderFromDb.h:147
SiStripCondObjBuilderFromDb::dbParams
const SiStripDbParams & dbParams() const
Definition: SiStripCondObjBuilderFromDb.h:79
TrackerTopology::TOBValues
Definition: TrackerTopology.h:88
SiStripDetCabling::addActiveDetectorsRawIds
void addActiveDetectorsRawIds(std::vector< uint32_t > &) const
Definition: SiStripDetCabling.cc:134
TrackerTopology::TECValues::ringMask_
unsigned int ringMask_
Definition: TrackerTopology.h:52
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
TrackerTopology::TIBValues::layerStartBit_
unsigned int layerStartBit_
Definition: TrackerTopology.h:58
TrackerTopology::TECValues::sideStartBit_
unsigned int sideStartBit_
Definition: TrackerTopology.h:41
SiStripCondObjBuilderFromDb::skippedDetIds
std::vector< uint32_t > skippedDetIds
Definition: SiStripCondObjBuilderFromDb.h:151
FedChannelConnection::fecCrate
const uint16_t & fecCrate() const
Definition: FedChannelConnection.h:200
SiStripFecCabling
Definition: SiStripFecCabling.h:24
TrackerTopology::TIDValues::sideMask_
unsigned int sideMask_
Definition: TrackerTopology.h:80
electrons_cff.bool
bool
Definition: electrons_cff.py:372
TrackerTopology::PixelEndcapValues::moduleStartBit_
unsigned int moduleStartBit_
Definition: TrackerTopology.h:32
SiStripCondObjBuilderFromDb::setValuesCabling
bool setValuesCabling(SiStripConfigDb::FedDescriptionsRange &descriptions, FedChannelConnection &ipair, uint32_t detid)
Definition: SiStripCondObjBuilderFromDb.cc:528
input
static const std::string input
Definition: EdmProvDump.cc:48
SiStripCondObjBuilderFromDb::storeQuality
void storeQuality(uint32_t det_id)
Definition: SiStripCondObjBuilderFromDb.cc:610
TrackerTopology::PixelBarrelValues::ladderStartBit_
unsigned int ladderStartBit_
Definition: TrackerTopology.h:20
MessageLogger.h
TrackerTopology::PixelEndcapValues::sideMask_
unsigned int sideMask_
Definition: TrackerTopology.h:33
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
funct::false
false
Definition: Factorize.h:34
TrackerTopology::TIBValues::sterStartBit_
unsigned int sterStartBit_
Definition: TrackerTopology.h:63
SiStripConfigDb::DeviceDescriptionsRange
DeviceDescriptions::range DeviceDescriptionsRange
Definition: SiStripConfigDb.h:110
SiStripCondObjBuilderFromDb::retrieveNumberAPVPairs
uint16_t retrieveNumberAPVPairs(uint32_t det_id)
Definition: SiStripCondObjBuilderFromDb.cc:331
SiStripCondObjBuilderFromDb::m_defaultapvlatencyvalue
uint16_t m_defaultapvlatencyvalue
Definition: SiStripCondObjBuilderFromDb.h:198
SiStripCondObjBuilderFromDb::whitelistedDevices
std::vector< SkipDeviceDescription > whitelistedDevices
Definition: SiStripCondObjBuilderFromDb.h:153
TrackerTopology::PixelEndcapValues::panelStartBit_
unsigned int panelStartBit_
Definition: TrackerTopology.h:31
TrackerTopology::TECValues::sterMask_
unsigned int sterMask_
Definition: TrackerTopology.h:54
SiStripCondObjBuilderFromDb::setValuesApvTiming
bool setValuesApvTiming(SiStripConfigDb *const db, FedChannelConnection &ipair)
Definition: SiStripCondObjBuilderFromDb.cc:400
TrackerTopology::TOBValues::sterStartBit_
unsigned int sterStartBit_
Definition: TrackerTopology.h:93
TrackerTopology::TECValues::sterStartBit_
unsigned int sterStartBit_
Definition: TrackerTopology.h:47
sistrip::invalid32_
static const uint32_t invalid32_
Definition: Constants.h:15
SiStripPartition
Container class for database partition parameters.
Definition: SiStripPartition.h:24
SiStripFedKey::isValid
bool isValid() const override
Definition: SiStripFedKey.cc:157
SiStripNoises
Definition: SiStripNoises.h:25
SiStripCondObjBuilderFromDb::v_apvpcon
v_apvpairconn v_apvpcon
Definition: SiStripCondObjBuilderFromDb.h:216
TrackerTopology::TIDValues::ringStartBit_
unsigned int ringStartBit_
Definition: TrackerTopology.h:76
AlCaHarvesting_cff.SiStripQuality
SiStripQuality
Definition: AlCaHarvesting_cff.py:223
SiStripNoises::put
bool put(const uint32_t &detID, const InputVector &input)
Definition: SiStripNoises.cc:16
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:32
SiStripPedestals::put
bool put(const uint32_t &detID, InputVector &input)
Definition: SiStripPedestals.cc:5
FedChannelConnection::fedCh
const uint16_t & fedCh() const
Definition: FedChannelConnection.h:220
SiStripCondObjBuilderFromDb::gain_last_
std::shared_ptr< SiStripApvGain > gain_last_
Definition: SiStripCondObjBuilderFromDb.h:149
SiStripCondObjBuilderFromDb::i_apvpairconn
std::vector< pair_apvpairconn >::iterator i_apvpairconn
Definition: SiStripCondObjBuilderFromDb.h:54
contentValuesFiles.fullPath
fullPath
Definition: contentValuesFiles.py:64
edm
HLT enums.
Definition: AlignableModifier.h:19
SiStripCondObjBuilderFromDb::p_detcon
pair_detcon p_detcon
Definition: SiStripCondObjBuilderFromDb.h:217
TrackerTopology
Definition: TrackerTopology.h:16
digitizers_cfi.strip
strip
Definition: digitizers_cfi.py:19
SiStripCondObjBuilderFromDb::buildFECRelatedObjects
void buildFECRelatedObjects(SiStripConfigDb *const db, const trackercon &tc)
Definition: SiStripCondObjBuilderFromDb.cc:817
TrackerTopology::PixelEndcapValues::diskStartBit_
unsigned int diskStartBit_
Definition: TrackerTopology.h:29
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
SiStripPedestals::setData
void setData(float ped, InputVector &vped)
Definition: SiStripPedestals.cc:47
edmLumisInFiles.description
description
Definition: edmLumisInFiles.py:11
SiStripCondObjBuilderFromDb::storeNoise
void storeNoise(uint32_t det_id)
Definition: SiStripCondObjBuilderFromDb.cc:585
gather_cfg.cout
cout
Definition: gather_cfg.py:144
FedChannelConnection::i2cAddr
const uint16_t & i2cAddr(const uint16_t &apv0_or_1) const
Definition: FedChannelConnection.cc:89
SiStripCondObjBuilderFromDb.h
SiStripCondObjBuilderFromDb::m_useanalysis
bool m_useanalysis
Definition: SiStripCondObjBuilderFromDb.h:200
SiStripCondObjBuilderFromDb::checkForCompatibility
bool checkForCompatibility(std::stringstream &input, std::stringstream &output, std::string &label)
Definition: SiStripCondObjBuilderFromDb.cc:162
edm::LogInfo
Definition: MessageLogger.h:254
SiStripPartition::cabVersion
Versions cabVersion() const
Definition: SiStripPartition.h:195
SiStripFedCablingBuilderFromDb::getFedCabling
static void getFedCabling(const SiStripFecCabling &in, SiStripFedCabling &out)
Definition: SiStripFedCablingBuilderFromDb.cc:1053
SiStripFedCabling.h
SiStripCondObjBuilderFromDb::SkipDeviceDescription::SkipDeviceDescription
SkipDeviceDescription()
Definition: SiStripCondObjBuilderFromDb.cc:918
TrackerTopology::PixelBarrelValues
Definition: TrackerTopology.h:18
TrackerTopology::PixelBarrelValues::moduleMask_
unsigned int moduleMask_
Definition: TrackerTopology.h:24
edm::VParameterSet
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:33
SiStripCondObjBuilderFromDb::SkipDeviceDescription::fed_
SiStripFedKey fed_
Definition: SiStripCondObjBuilderFromDb.h:68
TrackerTopology::TOBValues::rodStartBit_
unsigned int rodStartBit_
Definition: TrackerTopology.h:91
TrackerTopology::TIDValues
Definition: TrackerTopology.h:73
TrackerTopology::TECValues::petal_fw_bwStartBit_
unsigned int petal_fw_bwStartBit_
Definition: TrackerTopology.h:43
SiStripCondObjBuilderFromDb::setDefaultValuesApvTiming
void setDefaultValuesApvTiming(uint32_t detid, uint32_t apvPair)
Definition: SiStripCondObjBuilderFromDb.cc:354
TrackerTopology::PixelEndcapValues::moduleMask_
unsigned int moduleMask_
Definition: TrackerTopology.h:37
SiStripCondObjBuilderFromDb::dbParams_
SiStripDbParams dbParams_
Definition: SiStripCondObjBuilderFromDb.h:140
SiStripNoises.h
TrackerTopology::TECValues
Definition: TrackerTopology.h:40
SiStripCondObjBuilderFromDb::m_usefec
bool m_usefec
Definition: SiStripCondObjBuilderFromDb.h:202
SiStripBadStrip::put
bool put(const uint32_t &detID, const InputVector &vect)
Definition: SiStripBadStrip.h:65
TrackerTopology::TECValues::petalStartBit_
unsigned int petalStartBit_
Definition: TrackerTopology.h:44
SiStripFedCabling
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses,...
Definition: SiStripFedCabling.h:25
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
TrackerTopology::TOBValues::layerStartBit_
unsigned int layerStartBit_
Definition: TrackerTopology.h:89
createJobs.tmp
tmp
align.sh
Definition: createJobs.py:716
SiStripDetInfoFileReader
Definition: SiStripDetInfoFileReader.h:30
SiStripCondObjBuilderFromDb::m_tickmarkThreshold
float m_tickmarkThreshold
Definition: SiStripCondObjBuilderFromDb.h:191
AlCaHLTBitMon_QueryRunRegistry.comp
comp
Definition: AlCaHLTBitMon_QueryRunRegistry.py:249
FedChannelConnection::fecSlot
const uint16_t & fecSlot() const
Definition: FedChannelConnection.h:201
TrackerTopology::PixelBarrelValues::layerStartBit_
unsigned int layerStartBit_
Definition: TrackerTopology.h:19
TrackerTopology::PixelEndcapValues::bladeStartBit_
unsigned int bladeStartBit_
Definition: TrackerTopology.h:30
end
#define end
Definition: vmac.h:39
SiStripCondObjBuilderFromDb::gain_
SiStripApvGain * gain_
Definition: SiStripCondObjBuilderFromDb.h:146
TrackerTopology::TIBValues::strStartBit_
unsigned int strStartBit_
Definition: TrackerTopology.h:61
SiStripCondObjBuilderFromDb::inputNoises
SiStripNoises::InputVector inputNoises
Definition: SiStripCondObjBuilderFromDb.h:209
dqmiodatasetharvest.db
db
Definition: dqmiodatasetharvest.py:119
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
optionsL1T.skip
skip
Definition: optionsL1T.py:30
TrackerTopology.h
SiStripConfigDb::FedDescriptionsRange
FedDescriptions::range FedDescriptionsRange
Definition: SiStripConfigDb.h:116
SiStripCondObjBuilderFromDb::m_defaultpedestalvalue
float m_defaultpedestalvalue
Definition: SiStripCondObjBuilderFromDb.h:193
SiStripCondObjBuilderFromDb::buildCondObj
void buildCondObj()
Definition: SiStripCondObjBuilderFromDb.cc:232
SiStripCondObjBuilderFromDb::m_reader
std::unique_ptr< const SiStripDetInfoFileReader > m_reader
Definition: SiStripCondObjBuilderFromDb.h:204
SiStripCondObjBuilderFromDb::m_defaultapvmodevalue
uint16_t m_defaultapvmodevalue
Definition: SiStripCondObjBuilderFromDb.h:197
SiStripDetCabling.h
TrackerTopology::TECValues::petal_fw_bwMask_
unsigned int petal_fw_bwMask_
Definition: TrackerTopology.h:50
generateTowerEtThresholdLUT.addr
addr
Definition: generateTowerEtThresholdLUT.py:57
TrackerTopology::PixelEndcapValues
Definition: TrackerTopology.h:27
SiStripFedCablingBuilderFromDb.h
SiStripCondObjBuilderFromDb::v_trackercon
trackercon v_trackercon
Definition: SiStripCondObjBuilderFromDb.h:218
SiStripCondObjBuilderFromDb::m_defaultnoisevalue
float m_defaultnoisevalue
Definition: SiStripCondObjBuilderFromDb.h:194
SiStripConfigDb::deviceFactory
DeviceFactory *const deviceFactory(std::string method_name="") const
Definition: SiStripConfigDb.cc:191
SiStripCondObjBuilderFromDb::buildConnections
vector< const FedChannelConnection * > buildConnections(const SiStripDetCabling &det_cabling, uint32_t det_id)
Definition: SiStripCondObjBuilderFromDb.cc:317
TrackerTopology::TIBValues::moduleMask_
unsigned int moduleMask_
Definition: TrackerTopology.h:69
TrackerTopology::PixelEndcapValues::bladeMask_
unsigned int bladeMask_
Definition: TrackerTopology.h:35
SiStripLatency::printDebug
void printDebug(std::stringstream &ss, const TrackerTopology *trackerTopo) const
Prints the full list of all ranges and corresponding values of latency and mode.
Definition: SiStripLatency.cc:198
SiStripQuality::compact
void compact(unsigned int &, std::vector< unsigned int > &)
Definition: SiStripQuality.cc:331
SiStripApvGain::put
bool put(const uint32_t &detID, Range input)
Definition: SiStripApvGain.cc:8
SiStripDetCabling
Definition: SiStripDetCabling.h:21
TrackerTopology::TIDValues::sterStartBit_
unsigned int sterStartBit_
Definition: TrackerTopology.h:79
SiStripCondObjBuilderFromDb::m_usefed
bool m_usefed
Definition: SiStripCondObjBuilderFromDb.h:201
SiStripLatency::compress
void compress()
Definition: SiStripLatency.cc:43
SiStripCondObjBuilderFromDb::buildTrackerTopology
TrackerTopology * buildTrackerTopology()
Definition: SiStripCondObjBuilderFromDb.cc:85
TrackerTopology::TIBValues::str_int_extMask_
unsigned int str_int_extMask_
Definition: TrackerTopology.h:67
SiStripCondObjBuilderFromDb::db_
edm::Service< SiStripConfigDb > db_
Definition: SiStripCondObjBuilderFromDb.h:137
edm::ActivityRegistry
Definition: ActivityRegistry.h:132
TrackerTopology::TOBValues::rod_fw_bwMask_
unsigned int rod_fw_bwMask_
Definition: TrackerTopology.h:95
TrackerTopology::TOBValues::sterMask_
unsigned int sterMask_
Definition: TrackerTopology.h:98
SiStripCondObjBuilderFromDb::inputPedestals
SiStripPedestals::InputVector inputPedestals
Definition: SiStripCondObjBuilderFromDb.h:208
benchmark_cfg.fc
fc
Definition: benchmark_cfg.py:15
TrackerTopology::TOBValues::moduleStartBit_
unsigned int moduleStartBit_
Definition: TrackerTopology.h:92
SiStripConfigDb
An interface class to the DeviceFactory.
Definition: SiStripConfigDb.h:47
SiStripCondObjBuilderFromDb::fed_cabling_
SiStripFedCabling * fed_cabling_
Definition: SiStripCondObjBuilderFromDb.h:141
SiStripCondObjBuilderFromDb::pair_detcon
std::pair< uint32_t, v_apvpairconn > pair_detcon
Definition: SiStripCondObjBuilderFromDb.h:50
TrackerTopology::TIDValues::sterMask_
unsigned int sterMask_
Definition: TrackerTopology.h:85
SiStripDetInfoFileReader.h
SiStripNoises::setData
void setData(float noise_, InputVector &vped)
Definition: SiStripNoises.cc:74
SiStripApvGain.h
TrackerTopology::PixelEndcapValues::panelMask_
unsigned int panelMask_
Definition: TrackerTopology.h:36
SiStripCondObjBuilderFromDb::inputThreshold
SiStripThreshold::InputVector inputThreshold
Definition: SiStripCondObjBuilderFromDb.h:210
SiStripFecKey.h
TrackerTopology::TIBValues::str_fw_bwStartBit_
unsigned int str_fw_bwStartBit_
Definition: TrackerTopology.h:59
SiStripThreshold.h
TrackerTopology::TECValues::wheelMask_
unsigned int wheelMask_
Definition: TrackerTopology.h:49
TrackerTopology::PixelBarrelValues::ladderMask_
unsigned int ladderMask_
Definition: TrackerTopology.h:23
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::LogWarning
Definition: MessageLogger.h:141
SiStripCondObjBuilderFromDb::retrieveFedDescriptions
bool retrieveFedDescriptions(SiStripConfigDb *const db)
Definition: SiStripCondObjBuilderFromDb.cc:271
FedChannelConnection
Class containning control, module, detector and connection information, at the level of a FED channel...
Definition: FedChannelConnection.h:26
SiStripCondObjBuilderFromDb::trackercon
std::vector< pair_detcon > trackercon
Definition: SiStripCondObjBuilderFromDb.h:51
TrackerTopology::TECValues::wheelStartBit_
unsigned int wheelStartBit_
Definition: TrackerTopology.h:42
TrackerTopology::TIDValues::ringMask_
unsigned int ringMask_
Definition: TrackerTopology.h:82
SiStripLatency::put
bool put(const uint32_t detId, const uint16_t apv, const uint16_t latency, const uint16_t mode)
Definition: SiStripLatency.cc:10
SiStripLatency::printSummary
void printSummary(std::stringstream &ss, const TrackerTopology *trackerTopo) const
Prints the number of ranges as well as the value of singleLatency and singleMode.
Definition: SiStripLatency.cc:173
SiStripFedCablingBuilderFromDb::buildFecCabling
static void buildFecCabling(SiStripConfigDb *const, SiStripFecCabling &, const sistrip::CablingSource &)
Definition: SiStripFedCablingBuilderFromDb.cc:99
SiStripCondObjBuilderFromDb::~SiStripCondObjBuilderFromDb
virtual ~SiStripCondObjBuilderFromDb()
Definition: SiStripCondObjBuilderFromDb.cc:69
FedChannelConnection::ccuAddr
const uint16_t & ccuAddr() const
Definition: FedChannelConnection.h:203
FedChannelConnection::detId
const uint32_t & detId() const
Definition: FedChannelConnection.h:212
SiStripCondObjBuilderFromDb::SkipDeviceDescription::dump
std::string dump() const
Definition: SiStripCondObjBuilderFromDb.cc:967
SiStripFedKey.h
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
TrackerTopology::TECValues::sideMask_
unsigned int sideMask_
Definition: TrackerTopology.h:48
TrackerTopology::TOBValues::rodMask_
unsigned int rodMask_
Definition: TrackerTopology.h:96
TrackerTopology::PixelBarrelValues::moduleStartBit_
unsigned int moduleStartBit_
Definition: TrackerTopology.h:21
SiStripThreshold::put
bool put(const uint32_t &detID, const InputVector &vect)
Definition: SiStripThreshold.cc:8
TrackerTopology::TIDValues::module_fw_bwStartBit_
unsigned int module_fw_bwStartBit_
Definition: TrackerTopology.h:77
SiStripConfigDb::databaseCache
DbClient *const databaseCache(std::string method_name="") const
Definition: SiStripConfigDb.cc:208
TrackerTopology::TOBValues::rod_fw_bwStartBit_
unsigned int rod_fw_bwStartBit_
Definition: TrackerTopology.h:90
sistrip::STRIPS_PER_FEDCH
static const uint16_t STRIPS_PER_FEDCH
Definition: ConstantsForHardwareSystems.h:44
SiStripCondObjBuilderFromDb::checkUpdate
void checkUpdate()
Definition: SiStripCondObjBuilderFromDb.cc:78
SiStripDbParams::partitions
const_iterator_range partitions() const
Definition: SiStripDbParams.h:178
SiStripFedKey::feUnit
const uint16_t & feUnit() const
Definition: SiStripFedKey.h:189
TrackerTopology::TECValues::petalMask_
unsigned int petalMask_
Definition: TrackerTopology.h:51
SiStripCondObjBuilderFromDb::setDefaultValuesApvLatency
void setDefaultValuesApvLatency(SiStripLatency &latency_, const FedChannelConnection &ipair, uint32_t detid, uint16_t apvnr)
Definition: SiStripCondObjBuilderFromDb.cc:382
SiStripCondObjBuilderFromDb::m_gaincalibrationfactor
float m_gaincalibrationfactor
Definition: SiStripCondObjBuilderFromDb.h:192
SiStripCondObjBuilderFromDb::buildFEDRelatedObjects
void buildFEDRelatedObjects(SiStripConfigDb *const db, const trackercon &tc)
Definition: SiStripCondObjBuilderFromDb.cc:870
SiStripCondObjBuilderFromDb::i_trackercon
std::vector< pair_detcon >::iterator i_trackercon
Definition: SiStripCondObjBuilderFromDb.h:53
SiStripPartition::apvTimingVersion
Versions apvTimingVersion() const
Definition: SiStripPartition.h:207
TrackerTopology::TIDValues::sideStartBit_
unsigned int sideStartBit_
Definition: TrackerTopology.h:74
sistrip::invalid_
static const uint16_t invalid_
Definition: Constants.h:16
TrackerTopology::TIDValues::moduleMask_
unsigned int moduleMask_
Definition: TrackerTopology.h:84
SiStripCondObjBuilderFromDb::storeTiming
void storeTiming(uint32_t det_id)
Definition: SiStripCondObjBuilderFromDb.cc:625
SiStripConfigDb::AnalysisDescriptionsRange
AnalysisDescriptions::range AnalysisDescriptionsRange
Definition: SiStripConfigDb.h:134
SiStripCondObjBuilderFromDb::SkipDeviceDescription::detid_
uint32_t detid_
Definition: SiStripCondObjBuilderFromDb.h:69
SiStripDbParams::const_iterator_range
boost::iterator_range< SiStripPartitions::const_iterator > const_iterator_range
Definition: SiStripDbParams.h:47
TrackerTopology::TIBValues::moduleStartBit_
unsigned int moduleStartBit_
Definition: TrackerTopology.h:62
sistrip::mlESSources_
static const char mlESSources_[]
Definition: ConstantsForLogger.h:21
TrackerTopology::TIDValues::wheelMask_
unsigned int wheelMask_
Definition: TrackerTopology.h:81
SiStripCondObjBuilderFromDb::inputQuality
SiStripQuality::InputVector inputQuality
Definition: SiStripCondObjBuilderFromDb.h:211
SiStripCondObjBuilderFromDb::pedestals_
SiStripPedestals * pedestals_
Definition: SiStripCondObjBuilderFromDb.h:142
FedChannelConnection::fedId
const uint16_t & fedId() const
Definition: FedChannelConnection.h:219
TrackerTopology::TIBValues::sterMask_
unsigned int sterMask_
Definition: TrackerTopology.h:70
SiStripFedKey::fedCh
static uint16_t fedCh(const uint16_t &fe_unit, const uint16_t &fe_chan)
Definition: SiStripFedKey.cc:94
SiStripThreshold
Definition: __init__.py:1
std
Definition: JetResolutionObject.h:76
SiStripCondObjBuilderFromDb::tTopo
TrackerTopology * tTopo
Definition: SiStripCondObjBuilderFromDb.h:207
TrackerTopology::TECValues::moduleStartBit_
unsigned int moduleStartBit_
Definition: TrackerTopology.h:46
SiStripFecCabling.h
FedChannelConnection.h
TrackerTopology::TIBValues::strMask_
unsigned int strMask_
Definition: TrackerTopology.h:68
TrackerTopology::TIDValues::moduleStartBit_
unsigned int moduleStartBit_
Definition: TrackerTopology.h:78
SiStripPartition::fedVersion
Versions fedVersion() const
Definition: SiStripPartition.h:196
SiStripCondObjBuilderFromDb::setValuesApvLatency
bool setValuesApvLatency(SiStripLatency &latency_, SiStripConfigDb *const db, FedChannelConnection &ipair, uint32_t detid, uint16_t apvnr, SiStripConfigDb::DeviceDescriptionsRange apvs)
Definition: SiStripCondObjBuilderFromDb.cc:470
SiStripCondObjBuilderFromDb::setDefaultValuesCabling
void setDefaultValuesCabling(uint16_t apvPair)
Definition: SiStripCondObjBuilderFromDb.cc:340
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
SiStripApvGain::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripApvGain.h:28
SiStripCondObjBuilderFromDb::noises_
SiStripNoises * noises_
Definition: SiStripCondObjBuilderFromDb.h:143
SiStripCondObjBuilderFromDb::storeThreshold
void storeThreshold(uint32_t det_id)
Definition: SiStripCondObjBuilderFromDb.cc:598
Exception
Definition: hltDiff.cc:246
sistrip::CABLING_FROM_CONNS
Definition: ConstantsForCablingSource.h:30
SiStripQuality.h
SiStripCondObjBuilderFromDb::retrieveActiveDetIds
vector< uint32_t > retrieveActiveDetIds(const SiStripDetCabling &det_cabling)
Definition: SiStripCondObjBuilderFromDb.cc:300
SiStripPedestals.h
SiStripPartition::maskVersion
Versions maskVersion() const
Definition: SiStripPartition.h:201
SiStripCondObjBuilderFromDb::SkipDeviceDescription::isConsistent
bool isConsistent(const FedChannelConnection &fc) const
Definition: SiStripCondObjBuilderFromDb.cc:940
TrackerTopology::TECValues::ringStartBit_
unsigned int ringStartBit_
Definition: TrackerTopology.h:45
SiStripCondObjBuilderFromDb::m_defaulttickheightvalue
float m_defaulttickheightvalue
Definition: SiStripCondObjBuilderFromDb.h:199
SiStripCondObjBuilderFromDb::inputApvGain
SiStripApvGain::InputVector inputApvGain
Definition: SiStripCondObjBuilderFromDb.h:212
SiStripCondObjBuilderFromDb::getConfigString
std::string getConfigString(const std::type_info &typeInfo)
Definition: SiStripCondObjBuilderFromDb.cc:195
FedChannelConnection::apvPairNumber
uint16_t apvPairNumber() const
Definition: FedChannelConnection.cc:125
SiStripPartition::partitionName
std::string partitionName() const
Definition: SiStripPartition.h:189
TrackerTopology::TECValues::moduleMask_
unsigned int moduleMask_
Definition: TrackerTopology.h:53
SiStripPedestals
Definition: SiStripPedestals.h:27
SiStripPartition::fecVersion
Versions fecVersion() const
Definition: SiStripPartition.h:197
SiStripCondObjBuilderFromDb::m_defaultthresholdlowvalue
float m_defaultthresholdlowvalue
Definition: SiStripCondObjBuilderFromDb.h:196
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
SiStripCondObjBuilderFromDb::buildStripRelatedObjects
void buildStripRelatedObjects(SiStripConfigDb *const db, const SiStripDetCabling &det_cabling)
Definition: SiStripCondObjBuilderFromDb.cc:638
SiStripLatency.h
TrackerTopology::TIDValues::wheelStartBit_
unsigned int wheelStartBit_
Definition: TrackerTopology.h:75
SiStripCondObjBuilderFromDb::SkipDeviceDescription::fec_
SiStripFecKey fec_
Definition: SiStripCondObjBuilderFromDb.h:67
sistrip
sistrip classes
Definition: SiStripQualityHelpers.h:14
dummy
Definition: DummySelector.h:38
FedChannelConnection::ccuChan
const uint16_t & ccuChan() const
Definition: FedChannelConnection.h:204
conversion_template_cfg.anal
anal
Definition: conversion_template_cfg.py:16
TrackerTopology::TOBValues::moduleMask_
unsigned int moduleMask_
Definition: TrackerTopology.h:97
SiStripCondObjBuilderFromDb::SiStripCondObjBuilderFromDb
SiStripCondObjBuilderFromDb()
Definition: SiStripCondObjBuilderFromDb.cc:62
TrackerTopology::TIBValues
Definition: TrackerTopology.h:57
SiStripCondObjBuilderFromDb::threshold_
SiStripThreshold * threshold_
Definition: SiStripCondObjBuilderFromDb.h:144
SiStripLatency
Definition: SiStripLatency.h:59
SiStripApvGain
Definition: SiStripApvGain.h:25
SiStripBadStrip::encode
unsigned int encode(const unsigned short &first, const unsigned short &NconsecutiveBadStrips, const unsigned short &flag=0)
Definition: SiStripBadStrip.h:86
SiStripCondObjBuilderFromDb::m_defaultthresholdhighvalue
float m_defaultthresholdhighvalue
Definition: SiStripCondObjBuilderFromDb.h:195
SiStripCondObjBuilderFromDb::buildAnalysisRelatedObjects
void buildAnalysisRelatedObjects(SiStripConfigDb *const db, const trackercon &tc)
Definition: SiStripCondObjBuilderFromDb.cc:735
SiStripCondObjBuilderFromDb::whitelistedDetIds
std::vector< uint32_t > whitelistedDetIds
Definition: SiStripCondObjBuilderFromDb.h:154
SiStripCondObjBuilderFromDb::storePedestals
void storePedestals(uint32_t det_id)
Definition: SiStripCondObjBuilderFromDb.cc:574
TrackerTopology::TIDValues::module_fw_bwMask_
unsigned int module_fw_bwMask_
Definition: TrackerTopology.h:83
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
TrackerTopology::TIBValues::layerMask_
unsigned int layerMask_
Definition: TrackerTopology.h:65
TrackerTopology::PixelBarrelValues::layerMask_
unsigned int layerMask_
Definition: TrackerTopology.h:22
DigiDM_cff.strips
strips
#turn off noise in all subdetectors simHcalUnsuppressedDigis.doNoise = False mix.digitizers....
Definition: DigiDM_cff.py:32
label
const char * label
Definition: PFTauDecayModeTools.cc:11
SiStripCondObjBuilderFromDb::skippedDevices
std::vector< SkipDeviceDescription > skippedDevices
Definition: SiStripCondObjBuilderFromDb.h:150
SiStripDetCabling::getConnections
const std::vector< const FedChannelConnection * > & getConnections(uint32_t det_id) const
Definition: SiStripDetCabling.cc:161
SiStripCondObjBuilderFromDb::m_whitelistedDevices
edm::VParameterSet m_whitelistedDevices
Definition: SiStripCondObjBuilderFromDb.h:190
SiStripCondObjBuilderFromDb::p_apvpcon
pair_apvpairconn p_apvpcon
Definition: SiStripCondObjBuilderFromDb.h:215
FedChannelConnection::fecRing
const uint16_t & fecRing() const
Definition: FedChannelConnection.h:202
SiStripThreshold::setData
void setData(const uint16_t &strip, const float &lTh, const float &hTh, Container &vthr)
Definition: SiStripThreshold.cc:57
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
SiStripFedKey::feChan
const uint16_t & feChan() const
Definition: SiStripFedKey.h:190
TrackerTopology::TOBValues::layerMask_
unsigned int layerMask_
Definition: TrackerTopology.h:94
SiStripFecKey::isValid
bool isValid() const override
Definition: SiStripFecKey.cc:244
TrackerTopology::PixelEndcapValues::diskMask_
unsigned int diskMask_
Definition: TrackerTopology.h:34
TrackerTopology::PixelEndcapValues::sideStartBit_
unsigned int sideStartBit_
Definition: TrackerTopology.h:28
TrackerTopology::TIBValues::str_int_extStartBit_
unsigned int str_int_extStartBit_
Definition: TrackerTopology.h:60
SiStripCondObjBuilderFromDb::m_skippedDevices
edm::VParameterSet m_skippedDevices
Definition: SiStripCondObjBuilderFromDb.h:188
TrackerTopology::TIBValues::str_fw_bwMask_
unsigned int str_fw_bwMask_
Definition: TrackerTopology.h:66
SiStripCondObjBuilderFromDb::retrieveTimingAnalysisDescriptions
bool retrieveTimingAnalysisDescriptions(SiStripConfigDb *const db)
Definition: SiStripCondObjBuilderFromDb.cc:285