CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PresampleClient.cc
Go to the documentation of this file.
1 #include "../interface/PresampleClient.h"
2 
4 
7 
9 
10 #include <cmath>
11 
12 namespace ecaldqm
13 {
16  minChannelEntries_(0),
17  expectedMean_(0.),
18  toleranceMean_(0.),
19  toleranceRMS_(0.),
20  toleranceRMSFwd_(0.)
21  {
22  qualitySummaries_.insert("Quality");
23  qualitySummaries_.insert("QualitySummary");
24  }
25 
26  void
28  {
29  minChannelEntries_ = _params.getUntrackedParameter<int>("minChannelEntries");
30  expectedMean_ = _params.getUntrackedParameter<double>("expectedMean");
31  toleranceMean_ = _params.getUntrackedParameter<double>("toleranceMean");
32  toleranceRMS_ = _params.getUntrackedParameter<double>("toleranceRMS");
33  toleranceRMSFwd_ = _params.getUntrackedParameter<double>("toleranceRMSFwd");
34  }
35 
36  void
38  {
39  MESet& meQualitySummary(MEs_.at("QualitySummary"));
40  MESet& meQuality(MEs_.at("Quality"));
41  MESet& meErrorsSummary(MEs_.at("ErrorsSummary"));
42  MESet& meMean(MEs_.at("Mean"));
43  MESet& meRMS(MEs_.at("RMS"));
44  MESet& meRMSMap(MEs_.at("RMSMap"));
45  MESet& meRMSMapAll(MEs_.at("RMSMapAll"));
46 
47  MESet const& sPedestal(sources_.at("Pedestal"));
48  MESet const& sPedestalByLS(sources_.at("PedestalByLS"));
49  MESet const& sChStatus(sources_.at("ChStatus"));
50 
53 
54  MESet::iterator qEnd(meQuality.end());
55 
56  MESet::const_iterator pItr(sPedestal);
57  MESet::const_iterator pLSItr(sPedestalByLS);
58  double maxEB(0.), minEB(0.), maxEE(0.), minEE(0.);
59  double rmsMaxEB(0.), rmsMaxEE(0.);
60  for(MESet::iterator qItr(meQuality.beginChannel()); qItr != qEnd; qItr.toNextChannel()){
61 
62  pItr = qItr;
63 
64  DetId id(qItr->getId());
65 
66  bool doMask(meQuality.maskMatches(id, mask, statusManager_));
67 
68  double rmsThresh(toleranceRMS_);
69 
70  if(isForward(id)) rmsThresh = toleranceRMSFwd_;
71 
72  double entries(pItr->getBinEntries());
73 
74  if(entries < minChannelEntries_){
75  qItr->setBinContent(doMask ? kMUnknown : kUnknown);
76  meQualitySummary.setBinContent(id, doMask ? kMUnknown : kUnknown);
77  meRMSMap.setBinContent(id, -1.);
78  continue;
79  }
80 
81  double mean(pItr->getBinContent());
82  double rms(pItr->getBinError() * std::sqrt(entries));
83 
84  int dccid(dccId(id));
85 
86  meMean.fill(dccid, mean);
87  meRMS.fill(dccid, rms);
88  meRMSMap.setBinContent(id, rms);
89 
90  if(std::abs(mean - expectedMean_) > toleranceMean_ || rms > rmsThresh){
91  qItr->setBinContent(doMask ? kMBad : kBad);
92  meQualitySummary.setBinContent(id, doMask ? kMBad : kBad);
93  if(!doMask) meErrorsSummary.fill(id);
94  }
95  else{
96  qItr->setBinContent(doMask ? kMGood : kGood);
97  meQualitySummary.setBinContent(id, doMask ? kMGood : kGood);
98  }
99 
100  // Fill Presample Trend plots:
101  // Use PedestalByLS which only contains digis from "current" LS
102  pLSItr = qItr;
103  double entriesLS( pLSItr->getBinEntries() );
104  double meanLS( pLSItr->getBinContent() );
105  double rmsLS( pLSItr->getBinError() * std::sqrt(entries) );
106  float chStatus( sChStatus.getBinContent(id) );
107 
108  if ( entriesLS < minChannelEntries_ ) continue;
109  if ( chStatus != EcalChannelStatusCode::kOk ) continue; // exclude problematic channels
110 
111  // Get max/min
112  // Min is effectively just 0
113  if( id.subdetId() == EcalBarrel ){
114  if( meanLS > maxEB ) maxEB = meanLS;
115  if( meanLS < minEB ) minEB = meanLS;
116  if( rmsLS > rmsMaxEB ) rmsMaxEB = rmsLS;
117  }
118  else {
119  if( meanLS > maxEE ) maxEE = meanLS;
120  if( meanLS < minEE ) minEE = meanLS;
121  if( rmsLS > rmsMaxEE ) rmsMaxEE = rmsLS;
122  }
123 
124  } // qItr
125 
126  towerAverage_(meRMSMapAll, meRMSMap, -1.);
127 
128  MESet& meTrendMean(MEs_.at("TrendMean"));
129  MESet& meTrendRMS(MEs_.at("TrendRMS"));
130  meTrendMean.fill(EcalBarrel, double(timestamp_.iLumi), maxEB - minEB);
131  meTrendMean.fill(EcalEndcap, double(timestamp_.iLumi), maxEE - minEE);
132  meTrendRMS.fill(EcalBarrel, double(timestamp_.iLumi), rmsMaxEB);
133  meTrendRMS.fill(EcalEndcap, double(timestamp_.iLumi), rmsMaxEE);
134  }
135 
137 }
T getUntrackedParameter(std::string const &, T const &) const
void towerAverage_(MESet &, MESet const &, float)
#define DEFINE_ECALDQM_WORKER(TYPE)
Definition: DQWorker.h:108
edm::LuminosityBlockNumber_t iLumi
Definition: DQWorker.h:35
double getBinEntries() const
Definition: MESet.h:179
bool isForward(DetId const &)
static const int PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR
const_iterator & toNextChannel()
Definition: MESet.h:271
void setParams(edm::ParameterSet const &) override
std::set< std::string > qualitySummaries_
T sqrt(T t)
Definition: SSEVec.h:18
StatusManager const * statusManager_
double getBinError() const
Definition: MESet.h:174
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
MESetCollection sources_
Definition: DetId.h:18
Timestamp timestamp_
Definition: DQWorker.h:78
static const int PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR
virtual void fill(DetId const &, double=1., double=1., double=1.)
Definition: MESet.h:46
MESetCollection MEs_
Definition: DQWorker.h:75
double getBinContent() const
Definition: MESet.h:169
void producePlots(ProcessType) override
unsigned dccId(DetId const &)