CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Static Public Member Functions | Private Attributes
sistrip::SpyUtilities Class Reference

#include <SiStripSpyUtilities.h>

Classes

struct  Frame
 
struct  FrameQuality
 

Public Member Functions

const SiStripFedCablinggetCabling (const edm::EventSetup &)
 Updates the cabling object from the DB. More...
 
const SiStripDetCablinggetDetCabling (const edm::EventSetup &)
 Updates the det cabling object from the DB. More...
 
edm::ESHandle< SiStripNoisesgetNoiseHandle (const edm::EventSetup &eventSetup)
 
edm::ESHandle< SiStripPedestalsgetPedestalHandle (const edm::EventSetup &eventSetup)
 
 SpyUtilities ()
 
 ~SpyUtilities ()
 

Static Public Member Functions

static const uint8_t extractAPVaddress (const Frame &aFrame)
 
static const Frame extractFrameInfo (const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, bool aPrintDebug=false)
 
static void fedIndex (uint32_t aFedIndex, uint16_t &aFedId, uint16_t &aFedChannel)
 
static void fillFEDMajorities (const std::map< uint32_t, uint32_t > &channelValues, std::vector< uint32_t > &fedMajoritiesToFill)
 
static const std::pair
< uint8_t, uint8_t > 
findAPVAddresses (const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, const uint16_t threshold, const uint16_t aFirstBits)
 
static const std::pair< bool,
bool > 
findAPVErrorBits (const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, const uint16_t threshold, const uint16_t aFirstBits)
 
static const uint16_t findHeaderBits (const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, const uint16_t threshold)
 
static std::pair< uint16_t,
uint32_t > 
findMajorityValue (std::vector< uint16_t > &values, const uint16_t aFedId=0)
 
static const uint16_t findTrailerBits (const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, const uint16_t threshold)
 
static void getMajorityHeader (const edm::DetSetVector< SiStripRawDigi > *aInputDigis, uint16_t &firstHeaderBit, bool printResult=true)
 
static const bool isValid (const Frame &aFrame, const FrameQuality &aQuality, const uint16_t aExpectedPos)
 
static std::string print (const Frame &aFrame, std::string aErr)
 
static const uint16_t range (const Frame &aFrame)
 
static const uint16_t threshold (const Frame &aFrame)
 

Private Attributes

const SiStripFedCablingcabling_
 The cabling object. More...
 
uint32_t cacheId_
 DB cache ID used to establish if the cabling has changed during the run. More...
 
uint32_t cacheIdDet_
 DB cache ID used to establish if the cabling has changed during the run. More...
 
const SiStripDetCablingdetCabling_
 The cabling object. More...
 
uint32_t noiseCacheId_
 
edm::ESHandle< SiStripNoisesnoiseHandle_
 
uint32_t pedsCacheId_
 
edm::ESHandle< SiStripPedestalspedsHandle_
 

Detailed Description

Definition at line 25 of file SiStripSpyUtilities.h.

Constructor & Destructor Documentation

sistrip::SpyUtilities::SpyUtilities ( )

Definition at line 21 of file SiStripSpyUtilities.cc.

21  :
22  cabling_(0),
23  cacheId_(0),
24  detCabling_(0),
25  cacheIdDet_(0),
26  pedsCacheId_(0),
27  pedsHandle_(0),
28  noiseCacheId_(0),
29  noiseHandle_(0)
30  {
31 
32  }
edm::ESHandle< SiStripNoises > noiseHandle_
uint32_t cacheIdDet_
DB cache ID used to establish if the cabling has changed during the run.
const SiStripDetCabling * detCabling_
The cabling object.
const SiStripFedCabling * cabling_
The cabling object.
edm::ESHandle< SiStripPedestals > pedsHandle_
uint32_t cacheId_
DB cache ID used to establish if the cabling has changed during the run.
sistrip::SpyUtilities::~SpyUtilities ( )

Definition at line 34 of file SiStripSpyUtilities.cc.

References cabling_, and detCabling_.

35  {
36  if ( cabling_ ) cabling_ = 0;
37  if ( detCabling_ ) detCabling_ = 0;
38  }
const SiStripDetCabling * detCabling_
The cabling object.
const SiStripFedCabling * cabling_
The cabling object.

Member Function Documentation

const uint8_t sistrip::SpyUtilities::extractAPVaddress ( const Frame aFrame)
static

Definition at line 196 of file SiStripSpyUtilities.cc.

References sistrip::SpyUtilities::Frame::apvAddress, and sistrip::SpyUtilities::Frame::apvErrorBit.

197  {
198 
199  if (aFrame.apvErrorBit.first == false) return aFrame.apvAddress.first;
200  else if (aFrame.apvErrorBit.second == false) {
201  return aFrame.apvAddress.second;
202  }
203  else {
204  return 0;
205  }
206 
207  }
const SpyUtilities::Frame sistrip::SpyUtilities::extractFrameInfo ( const edm::DetSetVector< SiStripRawDigi >::detset &  channelDigis,
bool  aPrintDebug = false 
)
static

Definition at line 121 of file SiStripSpyUtilities.cc.

References sistrip::SpyUtilities::Frame::apvAddress, sistrip::SpyUtilities::Frame::apvErrorBit, sistrip::SpyUtilities::Frame::baseline, edm::DetSet< T >::begin(), sistrip::SpyUtilities::Frame::detId, edm::DetSet< T >::detId(), sistrip::SpyUtilities::Frame::digitalHigh, sistrip::SpyUtilities::Frame::digitalLow, edm::DetSet< T >::end(), findAPVAddresses(), findAPVErrorBits(), findHeaderBits(), findTrailerBits(), sistrip::SpyUtilities::Frame::firstHeaderBit, sistrip::SpyUtilities::Frame::firstTrailerBit, max(), min, edm::DetSet< T >::size(), and threshold().

Referenced by SiStripSpyMonitorModule::analyze(), sistrip::SpyDigiConverter::extractPayloadDigis(), and getMajorityHeader().

123  {
124 
125  SpyUtilities::Frame lFrame;
126  lFrame.detId = channelDigis.detId();
127  lFrame.firstHeaderBit = 0;
128  lFrame.firstTrailerBit = 0;
129  lFrame.digitalLow = 0;
130  lFrame.digitalHigh = 0;
131  lFrame.baseline = 0;
132  lFrame.apvErrorBit.first = false;
133  lFrame.apvErrorBit.second = false;
134  lFrame.apvAddress.first = 0;
135  lFrame.apvAddress.second = 0;
136 
137  uint16_t min = 0x3FF;
138  uint16_t max = 0;
140  const edm::DetSetVector<SiStripRawDigi>::detset::const_iterator endChannelDigis = channelDigis.end();
141 
142  //counters for outputting warnings
143  uint16_t numzeroes = 0, numsats = 0;
144 
145  if (iDigi == endChannelDigis) return lFrame;
146 
147  for (; iDigi != endChannelDigis; ++iDigi) {
148  const uint16_t val = iDigi->adc();
149  if (val < min) min = val;
150  if (val > max) max = val;
151  if (val==0) numzeroes++;
152  if (val==0x3FF) numsats++;
153  lFrame.baseline += val;
154  }
155 
156  if (channelDigis.size()>0) lFrame.baseline = lFrame.baseline/channelDigis.size();
157  lFrame.digitalLow = min;
158  lFrame.digitalHigh = max;
159 
160  const uint16_t threshold = static_cast<uint16_t>( (2.0 * static_cast<double>(max-min)) / 3.0 );
161 
162  if (aPrintDebug){
163 // if ( edm::isDebugEnabled() ) {
164 // LogDebug("SiStripSpyUtilities") << "Channel with key: " << lFrame.detId
165 // << " Min: " << min << " Max: " << max
166 // << " Range: " << (max-min) << " Threshold: " << threshold;
167 // }
168  if (numzeroes>0 || numsats>0) {
169  edm::LogWarning("SiStripSpyUtilities") << "Channel with key: " << lFrame.detId << " has "
170  << numzeroes << " zero and "
171  << numsats << " saturated samples.";
172  }
173  }
174 
175  lFrame.firstHeaderBit = findHeaderBits(channelDigis,threshold);
176  lFrame.firstTrailerBit = findTrailerBits(channelDigis,threshold);
177 
178  lFrame.apvErrorBit = findAPVErrorBits(channelDigis,threshold,lFrame.firstHeaderBit);
179  lFrame.apvAddress = findAPVAddresses(channelDigis,threshold,lFrame.firstHeaderBit);
180 
181  return lFrame;
182 
183  }
iterator end()
Definition: DetSet.h:61
det_id_type detId() const
Definition: DetSet.h:73
static const std::pair< bool, bool > findAPVErrorBits(const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, const uint16_t threshold, const uint16_t aFirstBits)
#define min(a, b)
Definition: mlp_lapack.h:161
static const std::pair< uint8_t, uint8_t > findAPVAddresses(const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, const uint16_t threshold, const uint16_t aFirstBits)
static const uint16_t findHeaderBits(const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, const uint16_t threshold)
size_type size() const
Definition: DetSet.h:64
const T & max(const T &a, const T &b)
static const uint16_t threshold(const Frame &aFrame)
iterator begin()
Definition: DetSet.h:60
static const uint16_t findTrailerBits(const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, const uint16_t threshold)
collection_type::const_iterator const_iterator
Definition: DetSet.h:34
void sistrip::SpyUtilities::fedIndex ( uint32_t  aFedIndex,
uint16_t &  aFedId,
uint16_t &  aFedChannel 
)
static

Definition at line 433 of file SiStripSpyUtilities.cc.

References sistrip::FED_ID_MAX, sistrip::FED_ID_MIN, sistrip::FEDCH_PER_FED, and sistrip::invalid_.

Referenced by sistrip::FEDEmulatorModule::produce().

435  {
436 
437  //find the corresponding detId (for the pedestals)
438  aFedId = static_cast<uint16_t>(aFedIndex/sistrip::FEDCH_PER_FED);
439  aFedChannel = static_cast<uint16_t>(aFedIndex%sistrip::FEDCH_PER_FED);
440 
441  if (aFedId < sistrip::FED_ID_MIN ||
442  aFedId > sistrip::FED_ID_MAX ||
443  aFedChannel >= sistrip::FEDCH_PER_FED ) {
444  aFedId = sistrip::invalid_;
445  aFedChannel = sistrip::invalid_;
446  }
447 
448  }
static const uint16_t FED_ID_MIN
static const uint16_t invalid_
Definition: Constants.h:17
static const uint16_t FEDCH_PER_FED
static const uint16_t FED_ID_MAX
void sistrip::SpyUtilities::fillFEDMajorities ( const std::map< uint32_t, uint32_t > &  channelValues,
std::vector< uint32_t > &  fedMajoritiesToFill 
)
static

Definition at line 485 of file SiStripSpyUtilities.cc.

References sistrip::FED_ID_MAX, sistrip::FED_ID_MIN, sistrip::FEDCH_PER_FED, and findMajorityValue().

487  {
488 
489  std::map<uint32_t,uint32_t>::const_iterator lMapIter = channelValues.begin();
490  uint16_t lPreviousFedId = 0;
491  std::vector<uint16_t> lAddrVec;
492  lAddrVec.reserve(sistrip::FEDCH_PER_FED);
493  fedMajoritiesToFill.resize(sistrip::FED_ID_MAX-sistrip::FED_ID_MIN+1,0);
494  uint32_t lChCount = 0;
495 
496  for ( ; lMapIter != channelValues.end(); ++lMapIter,++lChCount){
497 
498  uint16_t lFedId = static_cast<uint16_t>(lMapIter->first/sistrip::FEDCH_PER_FED);
499 
500  if (lPreviousFedId == 0) {
501  lPreviousFedId = lFedId;
502  }
503  if (lFedId == lPreviousFedId) {
504  lAddrVec.push_back(lMapIter->second);
505  }
506  if (lFedId != lPreviousFedId || (lChCount == channelValues.size()-1)) {
507  //extract majority address
508 
509  uint32_t lMaj = sistrip::SpyUtilities::findMajorityValue(lAddrVec,lPreviousFedId).first;
510  fedMajoritiesToFill[lPreviousFedId] = lMaj;
511 
512  lAddrVec.clear();
513 
514  //if new fed, fill the first channel
515  if (lFedId != lPreviousFedId) {
516  lAddrVec.push_back(lMapIter->second);
517  lPreviousFedId = lFedId;
518  }
519 
520  }
521  }
522 
523  }
static const uint16_t FED_ID_MIN
static std::pair< uint16_t, uint32_t > findMajorityValue(std::vector< uint16_t > &values, const uint16_t aFedId=0)
static const uint16_t FEDCH_PER_FED
static const uint16_t FED_ID_MAX
const std::pair< uint8_t, uint8_t > sistrip::SpyUtilities::findAPVAddresses ( const edm::DetSetVector< SiStripRawDigi >::detset &  channelDigis,
const uint16_t  threshold,
const uint16_t  aFirstBits 
)
static

Definition at line 376 of file SiStripSpyUtilities.cc.

References edm::DetSet< T >::begin(), prof2calltree::count, edm::DetSet< T >::end(), i, sistrip::SPY_SAMPLES_PER_CHANNEL, and threshold().

Referenced by extractFrameInfo().

379  {
380 
381  // Loop over digis looking for firstHeader+6
382  uint16_t count = aFirstBits+6;
383  std::pair<uint8_t,uint8_t> lPair = std::pair<uint8_t,uint8_t>(0,0);
384 
385  //check enough room to have 16 values....
386  if (count >= sistrip::SPY_SAMPLES_PER_CHANNEL-15) return lPair;
387 
389  const edm::DetSetVector<SiStripRawDigi>::detset::const_iterator endChannelDigis = channelDigis.end();
390 
391  //double check....
392  if (iDigi == endChannelDigis) return lPair;
393 
394  for (uint8_t i = 0; i < 16; ++i) {
395  if ( iDigi->adc() > threshold) {
396  //data is MSB first
397  if (i%2==0)
398  lPair.first |= (0x80 >> static_cast<uint8_t>(i/2));
399  else
400  lPair.second |= (0x80 >> static_cast<uint8_t>(i/2));
401  }
402  ++iDigi;
403  }
404 
405  return lPair;
406 
407  }
iterator end()
Definition: DetSet.h:61
int i
Definition: DBlmapReader.cc:9
static const uint16_t SPY_SAMPLES_PER_CHANNEL
static const uint16_t threshold(const Frame &aFrame)
iterator begin()
Definition: DetSet.h:60
collection_type::const_iterator const_iterator
Definition: DetSet.h:34
const std::pair< bool, bool > sistrip::SpyUtilities::findAPVErrorBits ( const edm::DetSetVector< SiStripRawDigi >::detset &  channelDigis,
const uint16_t  threshold,
const uint16_t  aFirstBits 
)
static

Definition at line 344 of file SiStripSpyUtilities.cc.

References edm::DetSet< T >::begin(), prof2calltree::count, edm::DetSet< T >::end(), if(), sistrip::SPY_SAMPLES_PER_CHANNEL, and threshold().

Referenced by extractFrameInfo().

347  {
348 
349  // Loop over digis looking for firstHeader+6+16
350  uint16_t count = aFirstBits+22;
351 
352  std::pair<bool,bool> lPair = std::pair<bool,bool>(false,false);
353 
354  //if header invalid: we don't know what apverr is....
355  if (count >= sistrip::SPY_SAMPLES_PER_CHANNEL-1) return lPair;
356 
358  const edm::DetSetVector<SiStripRawDigi>::detset::const_iterator endChannelDigis = channelDigis.end();
359 
360  //double check....
361  if (iDigi == endChannelDigis) return lPair;
362 
363  if ( iDigi->adc() <= threshold) lPair.first = true;
364  ++iDigi;
365 
366  //triple check...
367  if (iDigi == endChannelDigis) return std::pair<bool,bool>(false,false);
368 
369  if ( iDigi->adc() <= threshold) lPair.second = true;
370 
371  return lPair;
372  }
iterator end()
Definition: DetSet.h:61
static const uint16_t SPY_SAMPLES_PER_CHANNEL
static const uint16_t threshold(const Frame &aFrame)
iterator begin()
Definition: DetSet.h:60
perl if(1 lt scalar(@::datatypes))
Definition: edlooper.cc:31
collection_type::const_iterator const_iterator
Definition: DetSet.h:34
const uint16_t sistrip::SpyUtilities::findHeaderBits ( const edm::DetSetVector< SiStripRawDigi >::detset &  channelDigis,
const uint16_t  threshold 
)
static

Definition at line 275 of file SiStripSpyUtilities.cc.

References edm::DetSet< T >::begin(), prof2calltree::count, edm::DetSet< T >::end(), sistrip::SPY_SAMPLES_PER_CHANNEL, and threshold().

Referenced by extractFrameInfo().

277  {
278 
279  // Loop over digis looking for first above threshold
280  uint8_t aboveThreshold = 0;
281  bool foundHeader = false;
282  uint16_t count = 0;
283 
285  const edm::DetSetVector<SiStripRawDigi>::detset::const_iterator endChannelDigis = channelDigis.end();
286 
287  for (; iDigi != endChannelDigis; ++iDigi) {
288  if ( iDigi->adc() > threshold) {
289  aboveThreshold++;
290  }
291  else {
292  aboveThreshold = 0;
293  }
294  if (aboveThreshold == 6) {foundHeader = true; break; }
295  count++;
296  }//end of loop over digis
297 
298  //break before incrementing the last time... so count-5 is the first header sample.
299  if (foundHeader && count < 5) return 0;
300  if (foundHeader) return count-5;
302 
303  }
iterator end()
Definition: DetSet.h:61
static const uint16_t SPY_SAMPLES_PER_CHANNEL
static const uint16_t threshold(const Frame &aFrame)
iterator begin()
Definition: DetSet.h:60
collection_type::const_iterator const_iterator
Definition: DetSet.h:34
std::pair< uint16_t, uint32_t > sistrip::SpyUtilities::findMajorityValue ( std::vector< uint16_t > &  values,
const uint16_t  aFedId = 0 
)
static

Definition at line 450 of file SiStripSpyUtilities.cc.

References prof2calltree::count, and python.multivaluedict::sort().

Referenced by fillFEDMajorities(), getMajorityHeader(), and sistrip::SpyDigiConverter::processFED().

452  {
453 
454  uint32_t lTot = values.size();
455  if (!lTot) return std::pair<uint16_t,uint32_t>(0,0);
456 
457  std::sort(values.begin(),values.end());
458  uint32_t lMajorityCounter = 0;
459  uint16_t lMaj = 0;
460 
461  std::vector<uint16_t>::iterator lIter = values.begin();
462  for ( ; lIter != values.end(); ) {
463  uint32_t lCounter = std::count(lIter,values.end(),*lIter);
464  if (lCounter > lMajorityCounter) {
465  lMajorityCounter = lCounter;
466  lMaj = *lIter;
467  }
468  lIter += lCounter;
469  }
470 
471  //std::cout << " -- Found majority value " << lMaj << " for " << lMajorityCounter << " elements out of " << values.size() << "." << std::endl;
472 
473  if (static_cast<float>(lMajorityCounter)/lTot < 0.5) {
474  LogError("SiStripSpyUtilities") << " -- Found majority position for index "
475  << aFedId
476  << ": " << lMaj
477  << " for less than half the values : " << lMajorityCounter << " out of " << lTot << " values."
478  << std::endl;
479  }
480 
481  return std::pair<uint16_t,uint32_t>(lMaj,lMajorityCounter);
482 
483  }
const uint16_t sistrip::SpyUtilities::findTrailerBits ( const edm::DetSetVector< SiStripRawDigi >::detset &  channelDigis,
const uint16_t  threshold 
)
static

Definition at line 305 of file SiStripSpyUtilities.cc.

References edm::DetSet< T >::begin(), prof2calltree::count, edm::DetSet< T >::end(), sistrip::SPY_SAMPLES_PER_CHANNEL, sistrip::STRIPS_PER_FEDCH, and threshold().

Referenced by extractFrameInfo().

307  {
308 
309  // Loop over digis looking for last above threshold
310  uint8_t aboveThreshold = 0;
311  bool foundTrailer = false;
312 
313  //discard the first 30 values, which will have some digital high in them...
314  //start searching from the expected position : sometimes after 24+256 samples,
315  //normally at 6+24+256 if 6-bit low before tickmark header bits...
316  uint16_t count = 24+sistrip::STRIPS_PER_FEDCH;
317 
319 
321  const edm::DetSetVector<SiStripRawDigi>::detset::const_iterator endChannelDigis = channelDigis.end();
322 
323  for (; iDigi != endChannelDigis; ++iDigi) {
324  if ( iDigi->adc() > threshold) {
325  aboveThreshold++;
326  }
327  else {
328  aboveThreshold = 0;
329  }
330  if (aboveThreshold == 2) {foundTrailer = true; break; }
331  count++;
332  }//end of loop over digis
333 
334  //break before incrementing the last time... so count-1 is the first trailer sample.
335  if (foundTrailer && count < 1) return 0;
336  if (foundTrailer) return count-1;
338 
339  }
iterator end()
Definition: DetSet.h:61
static const uint16_t SPY_SAMPLES_PER_CHANNEL
static const uint16_t threshold(const Frame &aFrame)
iterator begin()
Definition: DetSet.h:60
static const uint16_t STRIPS_PER_FEDCH
collection_type::const_iterator const_iterator
Definition: DetSet.h:34
const SiStripFedCabling * sistrip::SpyUtilities::getCabling ( const edm::EventSetup setup)

Updates the cabling object from the DB.

Definition at line 40 of file SiStripSpyUtilities.cc.

References trackerHits::c, cabling_, cacheId_, edm::EventSetup::get(), and edm::ESHandle< class >::product().

Referenced by SiStripSpyMonitorModule::analyze(), sistrip::SpyDigiConverterModule::produce(), sistrip::SpyUnpackerModule::produce(), and sistrip::FEDEmulatorModule::produce().

41  {
42 
43  uint32_t cache_id = setup.get<SiStripFedCablingRcd>().cacheIdentifier();
44 
45  if ( cacheId_ != cache_id ) { // If the cache ID has changed since the last update...
46  // Update the cabling object
48  setup.get<SiStripFedCablingRcd>().get( c );
49  cabling_ = c.product();
50 
51 // if ( edm::isDebugEnabled() ) {
52 // if ( !cacheId_ ) { // First time cabling has been retrieved - print it out in full.
53 // std::stringstream ss;
54 // ss << "[sistrip::SpyChannelUnpackerModule::" << __func__ << "]"
55 // << " Updating cabling for first time..." << std::endl
56 // << " Terse print out of FED cabling:" << std::endl;
57 // //cabling_->terse(ss);
58 // //LogTrace("SiStripMonitorHardwareUnpacker") << ss.str();
59 // } // end of cacheId_ check
60 // } // end of debugEnabled check
61 
62 // if ( edm::isDebugEnabled() ) {
63 // std::stringstream sss;
64 // sss << "[sistrip::SpyUtilities::" << __func__ << "]"
65 // << " Summary of FED cabling:" << std::endl;
66 // cabling_->summary(sss);
67 // LogTrace("SiStripSpyUtilities") << sss.str();
68 // }
69 
70  // Update the cache ID with the new value.
71  cacheId_ = cache_id;
72 
73  } // end of new cache ID check
74 
75  return cabling_;
76  }
const SiStripFedCabling * cabling_
The cabling object.
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
uint32_t cacheId_
DB cache ID used to establish if the cabling has changed during the run.
const SiStripDetCabling * sistrip::SpyUtilities::getDetCabling ( const edm::EventSetup setup)

Updates the det cabling object from the DB.

Definition at line 78 of file SiStripSpyUtilities.cc.

References trackerHits::c, cacheIdDet_, detCabling_, edm::EventSetup::get(), and edm::ESHandle< class >::product().

Referenced by SiStripSpyDisplayModule::analyze().

79  {
80 
81  uint32_t cache_id = setup.get<SiStripDetCablingRcd>().cacheIdentifier();//.get( cabling_ );
82 
83  if ( cacheIdDet_ != cache_id ) { // If the cache ID has changed since the last update...
84  // Update the cabling object
86  setup.get<SiStripDetCablingRcd>().get( c );
87  detCabling_ = c.product();
88  cacheIdDet_ = cache_id;
89  } // end of new cache ID check
90 
91  return detCabling_;
92  }
uint32_t cacheIdDet_
DB cache ID used to establish if the cabling has changed during the run.
const SiStripDetCabling * detCabling_
The cabling object.
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
void sistrip::SpyUtilities::getMajorityHeader ( const edm::DetSetVector< SiStripRawDigi > *  aInputDigis,
uint16_t &  firstHeaderBit,
bool  printResult = true 
)
static

Definition at line 209 of file SiStripSpyUtilities.cc.

References edm::DetSetVector< T >::begin(), edm::DetSetVector< T >::end(), extractFrameInfo(), findMajorityValue(), sistrip::SpyUtilities::Frame::firstHeaderBit, edm::DetSetVector< T >::size(), and sistrip::STRIPS_PER_FEDCH.

Referenced by SiStripSpyMonitorModule::analyze(), and sistrip::SpyDigiConverterModule::produce().

212  {
213 
214  std::vector<uint16_t> lFirstBitVec;
215  lFirstBitVec.reserve(aInputDigis->size());
216  aFirstHeaderBit = 0;
218 
219  for ( ; lDigis != aInputDigis->end(); lDigis++){
221  lFirstBitVec.push_back(lFrame.firstHeaderBit);
222  }
223 
224  std::pair<uint16_t,uint32_t> lMaj = sistrip::SpyUtilities::findMajorityValue(lFirstBitVec);
225  aFirstHeaderBit = lMaj.first;
226  uint32_t lMajorityCounter = lMaj.second;
227 
228  //header is 24-sample long (2*8+2+6)
229  uint16_t lFirstTrailerBit = aFirstHeaderBit+24+sistrip::STRIPS_PER_FEDCH;
230 
231  if (printResult)
232  {
233  LogInfo("SiStripSpyUtilities") << " -- Found majority position of first header (trailer) bit: "
234  << aFirstHeaderBit
235  << " (" << lFirstTrailerBit
236  << ") for " << lMajorityCounter << " out of " << lFirstBitVec.size() << " channels."
237  << std::endl;
238  }
239  }
static const Frame extractFrameInfo(const edm::DetSetVector< SiStripRawDigi >::detset &channelDigis, bool aPrintDebug=false)
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:356
size_type size() const
Return the number of contained DetSets.
Definition: DetSetVector.h:278
static std::pair< uint16_t, uint32_t > findMajorityValue(std::vector< uint16_t > &values, const uint16_t aFedId=0)
static const uint16_t STRIPS_PER_FEDCH
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:341
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:106
edm::ESHandle< SiStripNoises > sistrip::SpyUtilities::getNoiseHandle ( const edm::EventSetup eventSetup)

Definition at line 107 of file SiStripSpyUtilities.cc.

References edm::EventSetup::get(), noiseCacheId_, and noiseHandle_.

Referenced by sistrip::FEDEmulatorModule::produce().

108  {
109  //check if new noise values are available
110  uint32_t lCacheId = eventSetup.get<SiStripNoisesRcd>().cacheIdentifier();
111  if (lCacheId != noiseCacheId_) {
112  eventSetup.get<SiStripNoisesRcd>().get(noiseHandle_);
113  noiseCacheId_ = lCacheId;
114  }
115 
116  return noiseHandle_;
117  }
edm::ESHandle< SiStripNoises > noiseHandle_
const T & get() const
Definition: EventSetup.h:55
edm::ESHandle< SiStripPedestals > sistrip::SpyUtilities::getPedestalHandle ( const edm::EventSetup eventSetup)

Definition at line 94 of file SiStripSpyUtilities.cc.

References edm::EventSetup::get(), pedsCacheId_, and pedsHandle_.

Referenced by sistrip::FEDEmulatorModule::produce().

95  {
96  //check if new pedestal values are available
97  uint32_t lCacheId = eventSetup.get<SiStripPedestalsRcd>().cacheIdentifier();
98  if (lCacheId != pedsCacheId_) {
99  eventSetup.get<SiStripPedestalsRcd>().get(pedsHandle_);
100  pedsCacheId_ = lCacheId;
101  }
102 
103  return pedsHandle_;
104  }
const T & get() const
Definition: EventSetup.h:55
edm::ESHandle< SiStripPedestals > pedsHandle_
const bool sistrip::SpyUtilities::isValid ( const Frame aFrame,
const FrameQuality aQuality,
const uint16_t  aExpectedPos 
)
static

Definition at line 242 of file SiStripSpyUtilities.cc.

References sistrip::SpyUtilities::Frame::apvErrorBit, sistrip::SpyUtilities::Frame::digitalHigh, sistrip::SpyUtilities::Frame::digitalLow, sistrip::SpyUtilities::Frame::firstHeaderBit, sistrip::SpyUtilities::Frame::firstTrailerBit, sistrip::SpyUtilities::FrameQuality::maxDigiRange, sistrip::SpyUtilities::FrameQuality::maxTickHeight, sistrip::SpyUtilities::FrameQuality::maxZeroLight, sistrip::SpyUtilities::FrameQuality::minTickHeight, sistrip::SpyUtilities::FrameQuality::minZeroLight, range(), and sistrip::STRIPS_PER_FEDCH.

Referenced by sistrip::SpyDigiConverter::extractPayloadDigis().

245  {
246 
247  uint16_t lRange = sistrip::SpyUtilities::range(aFrame);
248 
249  if (lRange < aQuality.minDigiRange || lRange > aQuality.maxDigiRange) {
250  return false;
251  }
252  else if (aFrame.digitalLow < aQuality.minZeroLight || aFrame.digitalLow > aQuality.maxZeroLight) {
253  return false;
254  }
255  else if (aFrame.digitalHigh < aQuality.minTickHeight || aFrame.digitalHigh > aQuality.maxTickHeight){
256  return false;
257  }
258  //if expectedPos=0: return true whatever the position of header is...
259  else if ( aExpectedPos > 0 &&
260  (
261  !(aFrame.firstHeaderBit == aExpectedPos &&
262  aFrame.firstTrailerBit == aExpectedPos+24+sistrip::STRIPS_PER_FEDCH)
263  )
264  ) {
265  return false;
266  }
267  else if (aFrame.apvErrorBit.first && aFrame.apvErrorBit.second) {
268  return false;
269  }
270 
271  return true;
272  }
static const uint16_t range(const Frame &aFrame)
static const uint16_t STRIPS_PER_FEDCH
std::string sistrip::SpyUtilities::print ( const Frame aFrame,
std::string  aErr 
)
static

Definition at line 410 of file SiStripSpyUtilities.cc.

References sistrip::SpyUtilities::Frame::apvAddress, sistrip::SpyUtilities::Frame::apvErrorBit, sistrip::SpyUtilities::Frame::baseline, sistrip::SpyUtilities::Frame::detId, sistrip::SpyUtilities::Frame::digitalHigh, sistrip::SpyUtilities::Frame::digitalLow, sistrip::SpyUtilities::Frame::firstHeaderBit, and sistrip::SpyUtilities::Frame::firstTrailerBit.

Referenced by sistrip::SpyDigiConverter::extractPayloadDigis().

412  {
413 
414  std::ostringstream lOs;
415  lOs << " ------------------------------------------------------" << std::endl
416  << " -- Error: " << aErr << std::endl
417  << " ------- Printing Frame for detId " << aFrame.detId << " --------" << std::endl
418  << " -- firstHeaderBit = " << aFrame.firstHeaderBit << std::endl
419  << " -- firstTrailerBit = " << aFrame.firstTrailerBit << std::endl
420  << " -- digitalLow = " << aFrame.digitalLow << std::endl
421  << " -- digitalHigh = " << aFrame.digitalHigh << std::endl
422  << " -- baseline = " << aFrame.baseline << std::endl
423  << " -- apvErrorBits = " << aFrame.apvErrorBit.first
424  << " " << aFrame.apvErrorBit.second << std::endl
425  << " -- apvAddresses = " << static_cast<uint16_t>(aFrame.apvAddress.first)
426  << " " << static_cast<uint16_t>(aFrame.apvAddress.second) << std::endl
427  << " ------------------------------------------------------" << std::endl;
428  return lOs.str();
429 
430  }
const uint16_t sistrip::SpyUtilities::range ( const Frame aFrame)
static

Definition at line 185 of file SiStripSpyUtilities.cc.

References sistrip::SpyUtilities::Frame::digitalHigh, and sistrip::SpyUtilities::Frame::digitalLow.

Referenced by SiStripSpyMonitorModule::analyze(), SPYHistograms::fillDetailedHistograms(), isValid(), and threshold().

186  {
187  if (aFrame.digitalHigh < aFrame.digitalLow) return 0;
188  else return aFrame.digitalHigh-aFrame.digitalLow;
189  }
const uint16_t sistrip::SpyUtilities::threshold ( const Frame aFrame)
static

Definition at line 191 of file SiStripSpyUtilities.cc.

References range().

Referenced by SiStripSpyMonitorModule::analyze(), extractFrameInfo(), findAPVAddresses(), findAPVErrorBits(), findHeaderBits(), and findTrailerBits().

192  {
193  return static_cast<uint16_t>( (2.0 * static_cast<double>(range(aFrame))) / 3.0 );
194  }
static const uint16_t range(const Frame &aFrame)

Member Data Documentation

const SiStripFedCabling* sistrip::SpyUtilities::cabling_
private

The cabling object.

Definition at line 112 of file SiStripSpyUtilities.h.

Referenced by getCabling(), and ~SpyUtilities().

uint32_t sistrip::SpyUtilities::cacheId_
private

DB cache ID used to establish if the cabling has changed during the run.

Definition at line 113 of file SiStripSpyUtilities.h.

Referenced by getCabling().

uint32_t sistrip::SpyUtilities::cacheIdDet_
private

DB cache ID used to establish if the cabling has changed during the run.

Definition at line 117 of file SiStripSpyUtilities.h.

Referenced by getDetCabling().

const SiStripDetCabling* sistrip::SpyUtilities::detCabling_
private

The cabling object.

Definition at line 116 of file SiStripSpyUtilities.h.

Referenced by getDetCabling(), and ~SpyUtilities().

uint32_t sistrip::SpyUtilities::noiseCacheId_
private

Definition at line 124 of file SiStripSpyUtilities.h.

Referenced by getNoiseHandle().

edm::ESHandle<SiStripNoises> sistrip::SpyUtilities::noiseHandle_
private

Definition at line 125 of file SiStripSpyUtilities.h.

Referenced by getNoiseHandle().

uint32_t sistrip::SpyUtilities::pedsCacheId_
private

Definition at line 120 of file SiStripSpyUtilities.h.

Referenced by getPedestalHandle().

edm::ESHandle<SiStripPedestals> sistrip::SpyUtilities::pedsHandle_
private

Definition at line 121 of file SiStripSpyUtilities.h.

Referenced by getPedestalHandle().