test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
IntegrityClient.cc
Go to the documentation of this file.
1 #include "../interface/IntegrityClient.h"
2 
4 
6 
10 
12 
13 namespace ecaldqm
14 {
17  errFractionThreshold_(0.)
18  {
19  qualitySummaries_.insert("Quality");
20  qualitySummaries_.insert("QualitySummary");
21  }
22 
23  void
25  {
26  errFractionThreshold_ = _params.getUntrackedParameter<double>("errFractionThreshold");
27  }
28 
29  // Check Channel Status Record at every endLumi
30  // Used to fill Channel Status Map MEs
31  void
33  {
34  _es.get<EcalChannelStatusRcd>().get( chStatus );
35  }
36 
37  void
39  {
40  uint32_t mask(1 << EcalDQMStatusHelper::CH_ID_ERROR |
45 
46  MESet& meQuality(MEs_.at("Quality"));
47  MESet& meQualitySummary(MEs_.at("QualitySummary"));
48  MESet& meChStatus( MEs_.at("ChStatus") );
49 
50  MESet const& sOccupancy(sources_.at("Occupancy"));
51  MESet const& sGain(sources_.at("Gain"));
52  MESet const& sChId(sources_.at("ChId"));
53  MESet const& sGainSwitch(sources_.at("GainSwitch"));
54  MESet const& sTowerId(sources_.at("TowerId"));
55  MESet const& sBlockSize(sources_.at("BlockSize"));
56 
57  // Fill Channel Status Map MEs
58  // Record is checked for updates at every endLumi and filled here
59  MESet::iterator chSEnd( meChStatus.end() );
60  for( MESet::iterator chSItr(meChStatus.beginChannel()); chSItr != chSEnd; chSItr.toNextChannel() ){
61 
62  DetId id( chSItr->getId() );
63 
65 
66  // Set appropriate channel map (EB or EE)
67  if( id.subdetId() == EcalBarrel ){
68  EBDetId ebid(id);
69  chIt = chStatus->find( ebid );
70  }
71  else {
72  EEDetId eeid(id);
73  chIt = chStatus->find( eeid );
74  }
75 
76  // Get status code and fill ME
77  if ( chIt != chStatus->end() ){
78  uint16_t code( chIt->getEncodedStatusCode() );
79  chSItr->setBinContent( code );
80  }
81 
82  } // Channel Status Map
83 
84  MESet::iterator qEnd(meQuality.end());
85  MESet::const_iterator occItr(sOccupancy);
86  for(MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()){
87 
88  occItr = qItr;
89 
90  DetId id(qItr->getId());
91 
92  bool doMask(meQuality.maskMatches(id, mask, statusManager_));
93 
94  float entries(occItr->getBinContent());
95 
96  float gain(sGain.getBinContent(id));
97  float chid(sChId.getBinContent(id));
98  float gainswitch(sGainSwitch.getBinContent(id));
99 
100  float towerid(sTowerId.getBinContent(id));
101  float blocksize(sBlockSize.getBinContent(id));
102 
103  if(entries + gain + chid + gainswitch + towerid + blocksize < 1.){
104  qItr->setBinContent(doMask ? kMUnknown : kUnknown);
105  meQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown);
106  continue;
107  }
108 
109  float chErr((gain + chid + gainswitch + towerid + blocksize) / (entries + gain + chid + gainswitch + towerid + blocksize));
110 
111  if(chErr > errFractionThreshold_){
112  qItr->setBinContent(doMask ? kMBad : kBad);
113  meQualitySummary.setBinContent(id, doMask ? kMBad : kBad);
114  }
115  else{
116  qItr->setBinContent(doMask ? kMGood : kGood);
117  meQualitySummary.setBinContent(id, doMask ? kMGood : kGood);
118  }
119  }
120 
121  // Quality check: set an entire FED to BAD if "any" DCC-SRP or DCC-TCC mismatch errors are detected
122  // Fill mismatch statistics
123  MESet const& sBXSRP(sources_.at("BXSRP"));
124  MESet const& sBXTCC(sources_.at("BXTCC"));
125  std::vector<bool> hasMismatchDCC(nDCC,false);
126  for ( unsigned iDCC(0); iDCC < nDCC; ++iDCC ) {
127  if ( sBXSRP.getBinContent(iDCC + 1) > 50. || sBXTCC.getBinContent(iDCC + 1) > 50. ) // "any" => 50
128  hasMismatchDCC[iDCC] = true;
129  }
130  // Analyze mismatch statistics
131  for ( MESet::iterator qsItr(meQualitySummary.beginChannel()); qsItr != meQualitySummary.end(); qsItr.toNextChannel() ) {
132  DetId id( qsItr->getId() );
133  unsigned iDCC( dccId(id)-1 );
134  if ( hasMismatchDCC[iDCC] )
135  meQualitySummary.setBinContent( id, meQualitySummary.maskMatches(id, mask, statusManager_) ? kMBad : kBad );
136  }
137 
138  } // producePlots()
139 
141 }
T getUntrackedParameter(std::string const &, T const &) const
#define DEFINE_ECALDQM_WORKER(TYPE)
Definition: DQWorker.h:108
void producePlots(ProcessType) override
edm::ESHandle< EcalChannelStatus > chStatus
static const int TT_SIZE_ERROR
static const int CH_GAIN_SWITCH_ERROR
const_iterator & toNextChannel()
Definition: MESet.h:271
void setParams(edm::ParameterSet const &) override
std::set< std::string > qualitySummaries_
void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
StatusManager const * statusManager_
MESetCollection sources_
Definition: DetId.h:18
const T & get() const
Definition: EventSetup.h:56
static const int CH_GAIN_ZERO_ERROR
std::vector< Item >::const_iterator const_iterator
MESetCollection MEs_
Definition: DQWorker.h:75
static const int TT_ID_ERROR
static const int CH_ID_ERROR
unsigned dccId(DetId const &)