test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 
30 // -----------------------------------------------------------------------------
33  const edm::ActivityRegistry&):
34  m_gaincalibrationfactor(static_cast<float>(pset.getUntrackedParameter<double>("GainNormalizationFactor",690.))),
35  m_defaultpedestalvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultPedestal",0.))),
36  m_defaultnoisevalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultNoise",0.))),
37  m_defaultthresholdhighvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultThresholdHigh",0.))),
38  m_defaultthresholdlowvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultThresholdLow",0.))),
39  m_defaultapvmodevalue(static_cast<uint16_t>(pset.getUntrackedParameter<uint32_t>("DefaultAPVMode",37))),
40  m_defaultapvlatencyvalue(static_cast<uint16_t>(pset.getUntrackedParameter<uint32_t>("DefaultAPVLatency",142))),
41  m_defaulttickheightvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultTickHeight",690.))),
42  m_useanalysis(static_cast<bool>(pset.getUntrackedParameter<bool>("UseAnalysis",false))),
43  m_usefed(static_cast<bool>(pset.getUntrackedParameter<bool>("UseFED",false))),
44  m_usefec(static_cast<bool>(pset.getUntrackedParameter<bool>("UseFEC",false))),
45  m_debug(static_cast<bool>(pset.getUntrackedParameter<bool>("DebugMode",false))),
46  tTopo(buildTrackerTopology())
47 {
49  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
50  << " Constructing object...";
51 }
52 
53 // -----------------------------------------------------------------------------
56 {
58  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
59  << " Constructing object...";
60 }
61 
62 // -----------------------------------------------------------------------------
66  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
67  << " Destructing object...";
68  delete tTopo;
69 }
70 
71 // -----------------------------------------------------------------------------
72 
75  if (!(dbParams_==dbParams())){
77  buildCondObj();
78  }
79 }
80 // -----------------------------------------------------------------------------
88 
89  pxbVals_.layerStartBit_ = 16;
90  pxbVals_.ladderStartBit_ = 8;
91  pxbVals_.moduleStartBit_ = 2;
92  pxbVals_.layerMask_ = 0xF;
93  pxbVals_.ladderMask_ = 0xFF;
94  pxbVals_.moduleMask_ = 0x3F;
95  pxfVals_.sideStartBit_ = 23;
96  pxfVals_.diskStartBit_ = 16;
97  pxfVals_.bladeStartBit_ = 10;
98  pxfVals_.panelStartBit_ = 8;
99  pxfVals_.moduleStartBit_ = 2;
100  pxfVals_.sideMask_ = 0x3;
101  pxfVals_.diskMask_ = 0xF;
102  pxfVals_.bladeMask_ = 0x3F;
103  pxfVals_.panelMask_ = 0x3;
104  pxfVals_.moduleMask_ = 0x3F;
105  tecVals_.sideStartBit_ = 18;
106  tecVals_.wheelStartBit_ = 14;
107  tecVals_.petal_fw_bwStartBit_ = 12;
108  tecVals_.petalStartBit_ = 8;
109  tecVals_.ringStartBit_ = 5;
110  tecVals_.moduleStartBit_ = 2;
111  tecVals_.sterStartBit_ = 0;
112  tecVals_.sideMask_ = 0x3;
113  tecVals_.wheelMask_ = 0xF;
114  tecVals_.petal_fw_bwMask_ = 0x3;
115  tecVals_.petalMask_ = 0xF;
116  tecVals_.ringMask_ = 0x7;
117  tecVals_.moduleMask_ = 0x7;
118  tecVals_.sterMask_ = 0x3;
119  tibVals_.layerStartBit_ = 14;
120  tibVals_.str_fw_bwStartBit_ = 12;
121  tibVals_.str_int_extStartBit_ = 10;
122  tibVals_.strStartBit_ = 4;
123  tibVals_.moduleStartBit_ = 2;
124  tibVals_.sterStartBit_ = 0;
125  tibVals_.layerMask_ = 0x7;
126  tibVals_.str_fw_bwMask_ = 0x3;
127  tibVals_.str_int_extMask_ = 0x3;
128  tibVals_.strMask_ = 0x3F;
129  tibVals_.moduleMask_ = 0x3;
130  tibVals_.sterMask_ = 0x3;
131  tidVals_.sideStartBit_ = 13;
132  tidVals_.wheelStartBit_ = 11;
133  tidVals_.ringStartBit_ = 9;
134  tidVals_.module_fw_bwStartBit_ = 7;
135  tidVals_.moduleStartBit_ = 2;
136  tidVals_.sterStartBit_ = 0;
137  tidVals_.sideMask_ = 0x3;
138  tidVals_.wheelMask_ = 0x3;
139  tidVals_.ringMask_ = 0x3;
140  tidVals_.module_fw_bwMask_ = 0x3;
141  tidVals_.moduleMask_ = 0x1F;
142  tidVals_.sterMask_ = 0x3;
143  tobVals_.layerStartBit_ = 14;
144  tobVals_.rod_fw_bwStartBit_ = 12;
145  tobVals_.rodStartBit_ = 5;
146  tobVals_.moduleStartBit_ = 2;
147  tobVals_.sterStartBit_ = 0;
148  tobVals_.layerMask_ = 0x7;
149  tobVals_.rod_fw_bwMask_ = 0x3;
150  tobVals_.rodMask_ = 0x7F;
151  tobVals_.moduleMask_ = 0x7;
152  tobVals_.sterMask_ = 0x3;
153 
154  return new TrackerTopology(pxbVals_, pxfVals_, tecVals_, tibVals_, tidVals_, tobVals_);
155 }
156 // -----------------------------------------------------------------------------
159  // DEPRECATED. Superseded by SiStripCondObjBuilderFromDb::getConfigString(const std::type_info& typeInfo).
160 
161  //get current config DB parameter
162 
164 
165  SiStripDbParams::SiStripPartitions::const_iterator ipart = partitionsRange.begin();
166  SiStripDbParams::SiStripPartitions::const_iterator ipartEnd = partitionsRange.end();
167  for ( ; ipart != ipartEnd; ++ipart ) {
168  SiStripPartition partition=ipart->second;
169  output << "@ "
170  << " Partition " << partition.partitionName() ;
171  if (label!="Cabling" && label !="ApvLatency")
172  output << " FedVer " << partition.fedVersion().first << "." << partition.fedVersion().second;
173  if(label=="Cabling")
174  output << " CabVer " << partition.cabVersion().first << "." << partition.cabVersion().second
175  << " MaskVer " << partition.maskVersion().first << "." << partition.maskVersion().second;
176  if(label=="ApvTiming")
177  output<< " ApvTimingVer " << partition.apvTimingVersion().first << "." << partition.apvTimingVersion().second;
178  if(label=="ApvLatency")
179  output<< " FecVersion " << partition.fecVersion().first << "." << partition.fecVersion().second;
180  }
181 
182  if (!strcmp(output.str().c_str(),input.str().c_str()))
183  return false;
184 
185  return true;
186 }
187 // -----------------------------------------------------------------------------
190  // create config line used by fast O2O
191 
192  std::stringstream output;
193 
195  SiStripDbParams::SiStripPartitions::const_iterator ipart = partitionsRange.begin();
196  SiStripDbParams::SiStripPartitions::const_iterator ipartEnd = partitionsRange.end();
197  for ( ; ipart != ipartEnd; ++ipart ) {
198  SiStripPartition partition=ipart->second;
199  output << "%%" << "Partition: " << partition.partitionName();
200 
201  // Make everything depend on cabVersion and maskVersion!
202  output << " CablingVersion: " << partition.cabVersion().first << "." << partition.cabVersion().second;
203  output << " MaskVersion: " << partition.maskVersion().first << "." << partition.maskVersion().second;
204 
205  if(typeInfo==typeid(SiStripFedCabling)){
206  // Do nothing. FedCabling only depends on cabVersion and maskVersion.
207  }
208  else if(typeInfo==typeid(SiStripLatency)){
209  // Latency is FEC related, add fecVersion.
210  output << " FecVersion: " << partition.fecVersion().first << "." << partition.fecVersion().second;
211  }else{
212  // BadStrip, Noises, Pedestals and Thresholds are FED related, add fecVersion.
213  output << " FedVersion: " << partition.fedVersion().first << "." << partition.fedVersion().second;
214  if(typeInfo==typeid(SiStripApvGain)){
215  // Not used in O2O.
216  output << " ApvTimingVersion: " << partition.apvTimingVersion().first << "." << partition.apvTimingVersion().second;
217  }
218  }
219  }
220 
221  return output.str();
222 
223 }
224 // -----------------------------------------------------------------------------
228  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]";
229 
230  // Check if DB connection is made
231  if ( db_ ) {
232 
233  // Check if DB connection is made
234  if ( db_->deviceFactory() ||
235  db_->databaseCache() ) {
236 
237  // Build FEC cabling object
238  SiStripFecCabling fec_cabling;
239 
241  fec_cabling,
244 
246  SiStripDetCabling det_cabling( *fed_cabling_, tTopo );
247  buildStripRelatedObjects( &*db_, det_cabling );
248 
249 
253 
254 
255 
256  } else {
258  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
259  << " NULL pointer to DeviceFactory returned by SiStripConfigDb!"
260  << " Cannot build Pedestals object!";
261  }
262  } else {
264  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
265  << " NULL pointer to SiStripConfigDb returned by DB \"service\"!"
266  << " Cannot build Pedestals object!";
267  }
268 }
269 
270 // -----------------------------------------------------------------------------
272 //Retrieve FedDescriptions from configuration database
275  if ( descriptions.empty() ) {
277  << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
278  << " No FED descriptions found!";
279 
280  return false;
281  }
282  return true;
283 }
284 
285 // -----------------------------------------------------------------------------
287  // Retrieve gain from configuration database
289  SiStripConfigDb::AnalysisDescriptionsRange anal_descriptions =
290  db->getAnalysisDescriptions( CommissioningAnalysisDescription::T_ANALYSIS_TIMING );
291  if ( anal_descriptions.empty() ) {
293  << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
294  << " Unable to build SiStripApvGain object!"
295  << " No timing-scan analysis descriptions found!";
296  return false;
297  }
298  return true;
299 }
300 
301 // -----------------------------------------------------------------------------
303  // Retrieve list of active DetIds
305  vector<uint32_t> det_ids;
306  det_cabling.addActiveDetectorsRawIds(det_ids);
307  if ( det_ids.empty() ) {
309  << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
310  << " Unable to build Pedestals object!"
311  << " No DetIds found!";
312  return det_ids;
313  }
315  << "\n\nSiStripCondObjBuilderFromDb::" << __func__ << "]"
316  << " Found " << det_ids.size() << " active DetIds";
317  return det_ids;
318 }
319 
320 // -----------------------------------------------------------------------------
322  //build connections per DetId
323 vector<const FedChannelConnection *> SiStripCondObjBuilderFromDb::buildConnections(const SiStripDetCabling& det_cabling, uint32_t det_id ){
324  vector<const FedChannelConnection *> conns = det_cabling.getConnections(det_id);
325  if (conns.size()==0){
327  << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
328  << " Unable to build condition object!"
329  << " No FED channel connections found for detid "<< det_id;
330  }
331  return conns;
332 }
333 
334 // -----------------------------------------------------------------------------
336 //retrieve number of APV pairs per detid
338  uint16_t nApvPairs;
340  nApvPairs=fr->getNumberOfApvsAndStripLength(det_id).first/2;
341  return nApvPairs;
342 }
343 
344 // -----------------------------------------------------------------------------
346 //set default values for Cabling Objects Peds, Noise, thresh, Quality
348  uint16_t istrip = apvPair*sistrip::STRIPS_PER_FEDCH;
349  std::cout << "Found disabled FedConnection! APVPair: " << apvPair << " Strips: " << sistrip::STRIPS_PER_FEDCH << std::endl;
350  inputQuality.push_back(quality_->encode(istrip,sistrip::STRIPS_PER_FEDCH));
351  for ( ;istrip < (apvPair+1)*sistrip::STRIPS_PER_FEDCH; ++istrip ){
355  }
356 }
357 
358 // -----------------------------------------------------------------------------
363 }
364 
365 // -----------------------------------------------------------------------------
367 void SiStripCondObjBuilderFromDb::setDefaultValuesApvLatency(SiStripLatency & latency_, const FedChannelConnection& ipair, uint32_t detid, uint16_t apvnr){
368  std::cout << "[SiStripCondObjBuilderFromDb::"<<__func__<<"]: Set Default Latency for Detid: " << detid << " ApvNr: " << apvnr << std::endl;
369  if(!latency_.put( detid, apvnr, m_defaultapvmodevalue, m_defaultapvlatencyvalue))
370  {
371  std::cout << "[SiStripCondObjBuilderFromDb::"<<__func__<<"]: Unable to fill Latency for Detid: " << detid << " ApvNr: " << apvnr << std::endl;
372  }
373  if(!latency_.put( detid, ++apvnr, m_defaultapvmodevalue, m_defaultapvlatencyvalue))
374  {
375  std::cout << "[SiStripCondObjBuilderFromDb::"<<__func__<<"]: Unable to fill Latency for Detid: " << detid << " ApvNr: " << apvnr << std::endl;
376  }
377 
378 }
379 
380 
381 
382 // -----------------------------------------------------------------------------
385  SiStripConfigDb::AnalysisDescriptionsRange anal_descriptions = db->getAnalysisDescriptions( CommissioningAnalysisDescription::T_ANALYSIS_TIMING );
386  SiStripConfigDb::AnalysisDescriptionsV::const_iterator iii = anal_descriptions.begin();
387  SiStripConfigDb::AnalysisDescriptionsV::const_iterator jjj = anal_descriptions.end();
388 
389  while ( iii != jjj ) {
390  CommissioningAnalysisDescription* tmp = *iii;
391  uint16_t fed_id = tmp->getFedId();
392  uint16_t fed_ch = SiStripFedKey::fedCh( tmp->getFeUnit(), tmp->getFeChan() );
393  if ( fed_id == ipair.fedId() && fed_ch == ipair.fedCh() ) { break; }
394  iii++;
395  }
396 
397  TimingAnalysisDescription *anal=0;
398  if ( iii != jjj ) { anal = dynamic_cast<TimingAnalysisDescription*>(*iii); }
399  if ( anal ) {
400  float tick_height = (anal->getHeight() / m_gaincalibrationfactor);
401  inputApvGain.push_back( tick_height ); // APV0
402  inputApvGain.push_back( tick_height); // APV1
403  } else {
406  return false;
407  }
408 
409  return true;
410 }
411 
412 // -----------------------------------------------------------------------------
417 
418  SiStripConfigDb::DeviceDescriptionsV::const_iterator iapv = apvs.begin();
419  SiStripConfigDb::DeviceDescriptionsV::const_iterator japv = apvs.end();
420  if(iapv==japv) return false;
421  for ( ; iapv != japv; ++iapv ) {
422  apvDescription* apv = dynamic_cast<apvDescription*>( *iapv );
423  if ( !apv ) { continue; }
424  if((apv->getCrateId()) != (ipair.fecCrate())) continue;
425  if((apv->getFecSlot()) != (ipair.fecSlot())) continue;
426  if((apv->getRingSlot()) != (ipair.fecRing())) continue;
427  if((apv->getCcuAddress()) != (ipair.ccuAddr())) continue;
428  if((apv->getChannel()) != (ipair.ccuChan())) continue;
429  // Insert latency values into latency object
430  if((apv->getAddress()) == (ipair.i2cAddr(0))) {
431  if(!latency_.put( detid, apvnr, static_cast<uint16_t>(apv->getLatency()), static_cast<uint16_t>(apv->getApvMode()))){
432  std::cout << "UNABLE APVLatency Put: Detid "<< dec<<detid
433  << " APVNr.: " << apvnr
434  << " Latency Value: " << dec <<static_cast<uint16_t>(apv->getLatency())
435  << " APV Mode: " << dec<< static_cast<uint16_t>(apv->getApvMode())
436  << std::endl;
437  return false;
438  }else{++apvnr;}
439  }
440  if((apv->getAddress()) == (ipair.i2cAddr(1))) {
441  if(!latency_.put( detid, apvnr, static_cast<uint16_t>(apv->getLatency()), static_cast<uint16_t>(apv->getApvMode()))){
442  std::cout << "UNABLE APVLatency Put: Detid "<<dec<< detid
443  << " APVNr.: " << apvnr
444  << " Latency Value: " << dec <<static_cast<uint16_t>(apv->getLatency())
445  << " APV Mode: " << dec <<static_cast<uint16_t>(apv->getApvMode())
446  << std::endl;
447  continue;
448  return false;
449  }else{++apvnr;}
450  }
451  }
452  return true;
453 }
454 
455 // -----------------------------------------------------------------------------
457 //bool SiStripCondObjBuilderFromDb::setValuesCabling(SiStripConfigDb* const db, FedChannelConnection &ipair, uint32_t detid){
459  //SiStripConfigDb::FedDescriptionsRange descriptions = db->getFedDescriptions();
460  SiStripConfigDb::FedDescriptionsV::const_iterator description = descriptions.begin();
461  while ( description != descriptions.end() ) {
462  if ( (*description)->getFedId() ==ipair.fedId() ) { break; }
463  description++;
464  }
465  if ( description == descriptions.end() ) {return false;}
466  // Retrieve Fed9UStrips object from FED description
467  const Fed9U::Fed9UStrips& strips = (*description)->getFedStrips();
468 
469 
470  // Retrieve StripDescriptions for each APV
471  uint16_t jstrip = ipair.apvPairNumber()*sistrip::STRIPS_PER_FEDCH;
472  for ( uint16_t iapv = 2*ipair.fedCh(); iapv < 2*ipair.fedCh()+2; iapv++ ) {
473 
474  // Get StripDescriptions for the given APV
475  Fed9U::Fed9UAddress addr;
476  addr.setFedApv(iapv);
477  vector<Fed9U::Fed9UStripDescription> strip = strips.getApvStrips(addr);
478 
479  vector<Fed9U::Fed9UStripDescription>::const_iterator istrip = strip.begin();
480 
481  for ( ; istrip != strip.end(); istrip++ ) {
482  pedestals_->setData( istrip->getPedestal() , inputPedestals);
483  noises_ ->setData( istrip->getNoise() , inputNoises );
484  threshold_->setData( jstrip, istrip->getLowThresholdFactor(),
485  istrip->getHighThresholdFactor(), inputThreshold );
486  if(istrip->getDisable()){
487  std::cout << "Found disabled strip! Detid: " << detid << " APVNr: " << iapv << " Strips: " << jstrip << std::endl;
488 
489  inputQuality.push_back(quality_->encode(jstrip,1));
490  }
491  jstrip++;
492  }
493  }
494  return true;
495 }
496 
497 
498 // -----------------------------------------------------------------------------
500 //store objects
502  if ( !pedestals_->put(det_id, inputPedestals ) ) {
503  std::cout
504  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
505  << " Unable to insert values into SiStripPedestals object!"
506  << " DetId already exists!" << std::endl;
507  }
508  inputPedestals.clear();
509 
510  }
511 
512 
513 
514 // -----------------------------------------------------------------------------
517  // Insert noise values into Noises object
518 
519  if ( !noises_->put(det_id, inputNoises ) ) {
520  std::cout
521  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
522  << " Unable to insert values into SiStripNoises object!"
523  << " DetId already exists!" << std::endl;
524  }
525  inputNoises.clear();
526 
527  }
528 
529 // -----------------------------------------------------------------------------
532  // Insert threshold values into Threshold object
533  if ( !threshold_->put(det_id, inputThreshold ) ) {
534  std::cout
535  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
536  << " Unable to insert values into SiStripThreshold object!"
537  << " DetId already exists!" << std::endl;
538  }
539  inputThreshold.clear();
540 }
541 
542 // -----------------------------------------------------------------------------
545  // Insert quality values into Quality object
546  if (inputQuality.size()){
547  quality_->compact(det_id,inputQuality);
548  if ( !quality_->put(det_id, inputQuality ) ) {
549  std::cout
550  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
551  << " Unable to insert values into SiStripQuality object!"
552  << " DetId already exists!" << std::endl;
553  }
554  }
555  inputQuality.clear();
556 }
557 
558 // -----------------------------------------------------------------------------
561  // Insert tick height values into Gain object
562  SiStripApvGain::Range range( inputApvGain.begin(), inputApvGain.end() );
563  if ( !gain_->put( det_id, range ) ) {
565  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
566  << " Unable to insert values into SiStripApvGain object!"
567  << " DetId already exists!";
568  }
569  inputApvGain.clear();
570 }
571 
572 // -----------------------------------------------------------------------------
575  const SiStripDetCabling& det_cabling){
576  //variables needed in this function
577  uint16_t nApvPairs;
578  vector<uint32_t>::const_iterator det_id;
579  vector<uint32_t> det_ids;
580 
582  << "\n[SiStripCondObjBuilderFromDb::" << __func__ << "] first call to this method";
583 
584  //Check if FedDescriptions exist, if not return
585  if (!retrieveFedDescriptions(db)) {std::cout<< "Found no FedDescription!" << std::endl;return;}
586  // Retrieve list of active DetIds
587  det_cabling.addActiveDetectorsRawIds(det_ids);
588  if ( det_ids.empty() ) {
589  std::cout
590  << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
591  << " Unable to build Pedestals object!"
592  << " No DetIds found!" << std::endl;
593  return;
594  }
595  std::cout << "\n\nSiStripCondObjBuilderFromDb::" << __func__ << "]"
596  << " Found " << det_ids.size() << " active DetIds";
597 
598  // Loop Active DetIds
599  det_id = det_ids.begin();
600  for ( ; det_id != det_ids.end(); det_id++ ) {
601  std::stringstream ssMessage;
602 
603  // Ignore NULL DetIds
604  if ( !(*det_id) ) { continue; }
605  if ( *det_id == sistrip::invalid32_ ) { continue; }
606 
607 
608  //build connections per DetId
609  const vector<const FedChannelConnection *>& conns=buildConnections(det_cabling, *det_id);
610 
611  vector<const FedChannelConnection *>::const_iterator ipair = conns.begin();
612  if(conns.size() ==0 ) continue;
613 
614  //retrieve number of APV pairs per detid
615  nApvPairs=retrieveNumberAPVPairs(*det_id);
616 
617 
618  //loop connections and check if APVPair is connected
619  vector< vector<const FedChannelConnection *>::const_iterator > listConns(nApvPairs,conns.end());
620 
621  for ( ; ipair != conns.end(); ++ipair ){
622  // Check if the ApvPair is connected
623  if ( !(*ipair) ) continue;
624  if ((*ipair)->fedId()!=sistrip::invalid_ && (*ipair)->apvPairNumber()<3){
625  // (*ipair)->print(ssMessage);
626  // ssMessage<< std::endl;
627  listConns[ipair-conns.begin()]=ipair;
628  } else {
629  std::cout
630  << "\n impossible to assign connection position in listConns " << std::endl;
631  // (*ipair)->print(ssMessage);
632  // ssMessage << std::endl;
633  }
634  }
635 
636  // get data
637  // vector< vector<const FedChannelConnection *>::const_iterator >::const_iterator ilistConns=listConns.begin();
638  for (uint16_t apvPair=0;apvPair<listConns.size();++apvPair){
639  ipair=listConns[apvPair];
640  if ( ipair == conns.end() ) {
641  // Fill object with default values
642  std::cout
643  << "\n "
644  << " Unable to find FED connection for detid : " << std::dec << *det_id << " APV pair number " << apvPair
645  << " Writing default values" << std::endl;
646 // (*ipair)->print(ssMessage); // this will crash!
647  //If no connection was found, add 100 to apvpair
648  apvPair+=100;
649  std::cout << " Put apvPair+100:" << apvPair << " into vector!" << std::endl;
650  // use dummy FedChannelConnection since it's not used in this case
651  FedChannelConnection dummy;
652  p_apvpcon=std::make_pair(apvPair,dummy);
653  v_apvpcon.push_back(p_apvpcon);
654  apvPair=apvPair-100;
655  continue;
656  }
657  p_apvpcon=std::make_pair(apvPair,**ipair);
658  v_apvpcon.push_back(p_apvpcon);
659  } //conns loop
660  p_detcon=std::make_pair(*det_id,v_apvpcon);
661  v_trackercon.push_back(p_detcon);
662  v_apvpcon.clear();
663  } // det id loop
664 }
665 
666 // -----------------------------------------------------------------------------
669  trackercon tc = _tc;
670  std::cout << "Entering [SiStripCondObjBuilderFromDb::"<<__func__ <<"]"<<std::endl;
671  //data container
672  gain_= new SiStripApvGain();
673 
674  //check if Timing analysis description is found, otherwise quit
677  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
678  << " NULL pointer to AnalysisDescriptions returned by SiStripConfigDb!"
679  << " Cannot build Analysis object! QUIT";
680  // some values have to be set, otherwise PopCon will crash
682  storeTiming(4711);
683  return;
684  }
685 
686  i_trackercon detids_end=tc.end();
687 
688  //loop detids
689  for(i_trackercon detids=tc.begin();detids!=detids_end;detids++){
690  uint32_t detid = (*detids).first;
691  i_apvpairconn connections_end=((*detids).second).end();
692 
693  //loop connections
694  for(i_apvpairconn connections=((*detids).second).begin();connections!=connections_end;connections++){
695  uint32_t apvPair =(*connections).first;
696  FedChannelConnection ipair =(*connections).second;
697 
698 
699  //no connection for apvPair found
700  if(apvPair>=100){
702  continue;
703  }
704 
705  //fill data
706  if(!setValuesApvTiming(db, ipair)){
707  std::cout
708  << "\n "
709  << " Unable to find Timing Analysis Description"
710  << " Writing default values for DetId: " << detid
711  << " Value: " << m_defaulttickheightvalue/m_gaincalibrationfactor << std::endl;
713  }
714  }//connections
715  storeTiming(detid);
716  }//detids
717 
718 }
719 
720 // -----------------------------------------------------------------------------
723  trackercon tc = _tc;
724  std::cout << "Entering [SiStripCondObjBuilderFromDb::"<<__func__ <<"]"<<std::endl;
725  //data container
726  latency_ = new SiStripLatency();
727 
728  i_trackercon detids_end=tc.end();
729 
730  // get APV DeviceDescriptions
732 
733 
734  //loop detids
735  for(i_trackercon detids=tc.begin();detids!=detids_end;detids++){
736  uint32_t detid = (*detids).first;
737  uint16_t apvnr=1;
738  i_apvpairconn connections_end=((*detids).second).end();
739 
740 
741  //loop connections
742  for(i_apvpairconn connections=((*detids).second).begin();connections!=connections_end;connections++){
743  uint32_t apvPair =(*connections).first;
744  FedChannelConnection ipair =(*connections).second;
745 
746  //no connection for apvPair found
747  if(apvPair>=100){
748  //setDefaultValuesApvLatency((*latency_),ipair, detid, apvnr);
749  std::cout << "[SiStripCondObjBuilderFromDb::" << __func__ << "] No FEDConnection for DetId " << detid << " ApvPair " << apvPair-100 << " found, skipping Latency Insertion!" << std::endl;
750  continue;
751  }
752 
753  //fill data
754  if(!setValuesApvLatency((*latency_),db, ipair, detid, apvnr, apvs)){
755  std::cout
756  << "\n "
757  << " Unable to find FEC Description"
758  << " Skipping Insertion for DetId: " << detid << std::endl;
759  //setDefaultValuesApvLatency((*latency_),ipair, detid, apvnr);
760  }
761  apvnr+=2;
762  }//connections
763  // compact Latency Object
764 
765  }//detids
766  latency_->compress();
767  std::stringstream ss;
768  // latency debug output
769  latency_->printSummary(ss);
770  latency_->printDebug(ss);
771  std::cout << ss.str() << std::endl;
772 }
773 
774 // -----------------------------------------------------------------------------
777  trackercon tc = _tc;
778  std::cout << "Entering [SiStripCondObjBuilderFromDb::"<<__func__ <<"]"<<std::endl;
779 
780  //data containers
782  noises_ = new SiStripNoises();
784  quality_ = new SiStripQuality();
785 
786  i_trackercon detids_end=tc.end();
787 
788  //Build FED Descriptions out of db object
790 
791  //loop detids
792  for(i_trackercon detids=tc.begin();detids!=detids_end;detids++){
793  uint32_t detid = (*detids).first;
794  i_apvpairconn connections_end=((*detids).second).end();
795 
796  //loop connections
797  for(i_apvpairconn connections=((*detids).second).begin();connections!=connections_end;connections++){
798  uint32_t apvPair =(*connections).first;
799  FedChannelConnection ipair =(*connections).second;
800 
801  //no connection for apvPair found
802  if(apvPair>=100){
803  std::cout
804  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
805  << " Unable to find FED description for FED id: " << ipair.fedId()
806  << " detid : " << detid << " APV pair number " << apvPair
807  << " Writing default values"<< std::endl;
808  setDefaultValuesCabling((apvPair-100));
809  continue;
810  }
811  // if(!setValuesCabling(db, ipair, detid)){
812  if(!setValuesCabling(descriptions, ipair, detid)){
813  std::cout
814  << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
815  << " Unable to find FED description for FED id: " << ipair.fedId()
816  << " detid : " << detid << " APV pair number " << apvPair
817  << " Writing default values"<< std::endl;
818  setDefaultValuesCabling(apvPair);
819  }
820  }//connections
821  storePedestals(detid);
822  storeNoise(detid);
823  storeThreshold(detid);
824  storeQuality(detid);
825  }//detids
826 }
827 
828 
const uint16_t & fecSlot() const
bool put(const uint32_t &detID, const InputVector &vect)
vector< uint32_t > retrieveActiveDetIds(const SiStripDetCabling &det_cabling)
SiStripPedestals::InputVector inputPedestals
const uint16_t & fecCrate() const
bool put(const uint32_t detId, const uint16_t apv, const uint16_t latency, const uint16_t mode)
void addActiveDetectorsRawIds(std::vector< uint32_t > &) const
Versions maskVersion() const
const uint16_t & fedCh() const
const std::pair< unsigned short, double > getNumberOfApvsAndStripLength(uint32_t detId) const
void buildAnalysisRelatedObjects(SiStripConfigDb *const db, const trackercon &tc)
DeviceFactory *const deviceFactory(std::string method_name="") const
static const uint32_t invalid32_
Definition: Constants.h:15
SiStripQuality::InputVector inputQuality
FedDescriptionsRange getFedDescriptions(std::string partition="")
std::string partitionName() const
uint16_t apvPairNumber() const
tuple db
Definition: EcalCondDB.py:151
FedDescriptions::range FedDescriptionsRange
SiStripThreshold::InputVector inputThreshold
const uint16_t & fedId() const
void setDefaultValuesCabling(uint16_t apvPair)
static std::string const input
Definition: EdmProvDump.cc:44
edm::Service< SiStripConfigDb > db_
bool put(const uint32_t &detID, Range input)
void buildFECRelatedObjects(SiStripConfigDb *const db, const trackercon &tc)
const std::vector< const FedChannelConnection * > & getConnections(uint32_t det_id) const
const_iterator_range partitions() const
bool setValuesApvLatency(SiStripLatency &latency_, SiStripConfigDb *const db, FedChannelConnection &ipair, uint32_t detid, uint16_t apvnr, SiStripConfigDb::DeviceDescriptionsRange apvs)
bool retrieveFedDescriptions(SiStripConfigDb *const db)
list connections
Definition: shell.py:10
Versions apvTimingVersion() const
void buildStripRelatedObjects(SiStripConfigDb *const db, const SiStripDetCabling &det_cabling)
bool checkForCompatibility(std::stringstream &input, std::stringstream &output, std::string &label)
const uint16_t & fecRing() const
static void buildFecCabling(SiStripConfigDb *const, SiStripFecCabling &, const sistrip::CablingSource &)
Class containning control, module, detector and connection information, at the level of a FED channel...
DeviceDescriptions::range DeviceDescriptionsRange
void compact(unsigned int &, std::vector< unsigned int > &)
An interface class to the DeviceFactory.
const uint16_t & ccuChan() const
void buildFEDRelatedObjects(SiStripConfigDb *const db, const trackercon &tc)
std::pair< ContainerIterator, ContainerIterator > Range
uint16_t retrieveNumberAPVPairs(uint32_t det_id)
std::vector< pair_detcon > trackercon
Container class for database partition parameters.
#define end
Definition: vmac.h:37
AnalysisDescriptionsRange getAnalysisDescriptions(AnalysisType, std::string partition="")
const uint16_t & ccuAddr() const
vector< const FedChannelConnection * > buildConnections(const SiStripDetCabling &det_cabling, uint32_t det_id)
SiStripNoises::InputVector inputNoises
#define LogTrace(id)
void printSummary(std::stringstream &ss) const
Prints the number of ranges as well as the value of singleLatency and singleMode. ...
bool put(const uint32_t &detID, const InputVector &input)
DbClient *const databaseCache(std::string method_name="") const
const SiStripDbParams & dbParams() const
tuple description
Definition: idDealer.py:66
bool setValuesCabling(SiStripConfigDb::FedDescriptionsRange &descriptions, FedChannelConnection &ipair, uint32_t detid)
static void getFedCabling(const SiStripFecCabling &in, SiStripFedCabling &out)
static const uint16_t STRIPS_PER_FEDCH
bool put(const uint32_t &detID, InputVector &input)
bool retrieveTimingAnalysisDescriptions(SiStripConfigDb *const db)
AnalysisDescriptions::range AnalysisDescriptionsRange
unsigned int module_fw_bwStartBit_
static const uint16_t invalid_
Definition: Constants.h:16
std::string getConfigString(const std::type_info &typeInfo)
void setDefaultValuesApvLatency(SiStripLatency &latency_, const FedChannelConnection &ipair, uint32_t detid, uint16_t apvnr)
void setData(const uint16_t &strip, const float &lTh, const float &hTh, Container &vthr)
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
boost::iterator_range< SiStripPartitions::const_iterator > const_iterator_range
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
SiStripApvGain::InputVector inputApvGain
void printDebug(std::stringstream &ss) const
Prints the full list of all ranges and corresponding values of latency and mode.
void setData(float ped, InputVector &vped)
tuple cout
Definition: gather_cfg.py:145
static uint16_t fedCh(const uint16_t &fe_unit, const uint16_t &fe_chan)
volatile std::atomic< bool > shutdown_flag false
DeviceDescriptionsRange getDeviceDescriptions(std::string partition="")
static const char mlESSources_[]
const uint16_t & i2cAddr(const uint16_t &apv0_or_1) const
bool put(const uint32_t &detID, const InputVector &vect)
std::vector< pair_detcon >::iterator i_trackercon
Versions fecVersion() const
Versions cabVersion() const
std::vector< pair_apvpairconn >::iterator i_apvpairconn
unsigned int encode(const unsigned short &first, const unsigned short &NconsecutiveBadStrips, const unsigned short &flag=0)
Versions fedVersion() const
void setData(float noise_, InputVector &vped)
bool setValuesApvTiming(SiStripConfigDb *const db, FedChannelConnection &ipair)