CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EBPedestalOnlineClient.cc
Go to the documentation of this file.
1 /*
2  * \file EBPedestalOnlineClient.cc
3  *
4  * $Date: 2010/08/30 13:14:07 $
5  * $Revision: 1.160 $
6  * \author G. Della Ricca
7  * \author F. Cossutti
8  *
9 */
10 
11 #include <memory>
12 #include <iostream>
13 #include <fstream>
14 #include <iomanip>
15 #include <math.h>
16 
18 
20 
21 #ifdef WITH_ECAL_COND_DB
27 #endif
28 
30 
33 
35 
37 
38  // cloneME switch
39  cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
40 
41  // verbose switch
42  verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
43 
44  // debug switch
45  debug_ = ps.getUntrackedParameter<bool>("debug", false);
46 
47  // prefixME path
48  prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
49 
50  // enableCleanup_ switch
51  enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
52 
53  // vector of selected Super Modules (Defaults to all 36).
54  superModules_.reserve(36);
55  for ( unsigned int i = 1; i <= 36; i++ ) superModules_.push_back(i);
56  superModules_ = ps.getUntrackedParameter<std::vector<int> >("superModules", superModules_);
57 
58  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
59 
60  int ism = superModules_[i];
61 
62  h03_[ism-1] = 0;
63 
64  }
65 
66  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
67 
68  int ism = superModules_[i];
69 
70  meg03_[ism-1] = 0;
71 
72  mep03_[ism-1] = 0;
73 
74  mer03_[ism-1] = 0;
75 
76  }
77 
78  expectedMean_ = 200.0;
79  discrepancyMean_ = 25.0;
80  RMSThreshold_ = 2.0;
81 
82 }
83 
85 
86 }
87 
89 
91 
92  if ( debug_ ) std::cout << "EBPedestalOnlineClient: beginJob" << std::endl;
93 
94  ievt_ = 0;
95  jevt_ = 0;
96 
97 }
98 
100 
101  if ( debug_ ) std::cout << "EBPedestalOnlineClient: beginRun" << std::endl;
102 
103  jevt_ = 0;
104 
105  this->setup();
106 
107 }
108 
110 
111  if ( debug_ ) std::cout << "EBPedestalOnlineClient: endJob, ievt = " << ievt_ << std::endl;
112 
113  this->cleanup();
114 
115 }
116 
118 
119  if ( debug_ ) std::cout << "EBPedestalOnlineClient: endRun, jevt = " << jevt_ << std::endl;
120 
121  this->cleanup();
122 
123 }
124 
126 
127  char histo[200];
128 
129  dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient" );
130 
131  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
132 
133  int ism = superModules_[i];
134 
135  if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
136  sprintf(histo, "EBPOT pedestal quality G12 %s", Numbers::sEB(ism).c_str());
137  meg03_[ism-1] = dqmStore_->book2D(histo, histo, 85, 0., 85., 20, 0., 20.);
138  meg03_[ism-1]->setAxisTitle("ieta", 1);
139  meg03_[ism-1]->setAxisTitle("iphi", 2);
140 
141  if ( mep03_[ism-1] ) dqmStore_->removeElement( mep03_[ism-1]->getName() );
142  sprintf(histo, "EBPOT pedestal mean G12 %s", Numbers::sEB(ism).c_str());
143  mep03_[ism-1] = dqmStore_->book1D(histo, histo, 100, 150., 250.);
144  mep03_[ism-1]->setAxisTitle("mean", 1);
145 
146  if ( mer03_[ism-1] ) dqmStore_->removeElement( mer03_[ism-1]->getName() );
147  sprintf(histo, "EBPOT pedestal rms G12 %s", Numbers::sEB(ism).c_str());
148  mer03_[ism-1] = dqmStore_->book1D(histo, histo, 100, 0., 10.);
149  mer03_[ism-1]->setAxisTitle("rms", 1);
150 
151  }
152 
153  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
154 
155  int ism = superModules_[i];
156 
157  if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
158 
159  for ( int ie = 1; ie <= 85; ie++ ) {
160  for ( int ip = 1; ip <= 20; ip++ ) {
161 
162  meg03_[ism-1]->setBinContent( ie, ip, 2. );
163 
164  }
165  }
166 
167  if ( mep03_[ism-1] ) mep03_[ism-1]->Reset();
168  if ( mer03_[ism-1] ) mer03_[ism-1]->Reset();
169 
170  }
171 
172 }
173 
175 
176  if ( ! enableCleanup_ ) return;
177 
178  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
179 
180  int ism = superModules_[i];
181 
182  if ( cloneME_ ) {
183  if ( h03_[ism-1] ) delete h03_[ism-1];
184  }
185 
186  h03_[ism-1] = 0;
187 
188  }
189 
190  dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient" );
191 
192  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
193 
194  int ism = superModules_[i];
195 
196  if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
197  meg03_[ism-1] = 0;
198 
199  if ( mep03_[ism-1] ) dqmStore_->removeElement( mep03_[ism-1]->getName() );
200  mep03_[ism-1] = 0;
201 
202  if ( mer03_[ism-1] ) dqmStore_->removeElement( mer03_[ism-1]->getName() );
203  mer03_[ism-1] = 0;
204 
205  }
206 
207 }
208 
209 #ifdef WITH_ECAL_COND_DB
210 bool EBPedestalOnlineClient::writeDb(EcalCondDBInterface* econn, RunIOV* runiov, MonRunIOV* moniov, bool& status) {
211 
212  status = true;
213 
214  EcalLogicID ecid;
215 
217  std::map<EcalLogicID, MonPedestalsOnlineDat> dataset;
218 
219  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
220 
221  int ism = superModules_[i];
222 
223  if ( verbose_ ) {
224  std::cout << " " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
225  std::cout << std::endl;
226  UtilsClient::printBadChannels(meg03_[ism-1], h03_[ism-1]);
227  }
228 
229  float num03;
230  float mean03;
231  float rms03;
232 
233  for ( int ie = 1; ie <= 85; ie++ ) {
234  for ( int ip = 1; ip <= 20; ip++ ) {
235 
236  bool update03;
237 
238  update03 = UtilsClient::getBinStatistics(h03_[ism-1], ie, ip, num03, mean03, rms03);
239 
240  if ( update03 ) {
241 
242  if ( Numbers::icEB(ism, ie, ip) == 1 ) {
243 
244  if ( verbose_ ) {
245  std::cout << "Preparing dataset for " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
246  std::cout << "G12 (" << ie << "," << ip << ") " << num03 << " " << mean03 << " " << rms03 << std::endl;
247  std::cout << std::endl;
248  }
249 
250  }
251 
252  p.setADCMeanG12(mean03);
253  p.setADCRMSG12(rms03);
254 
255  if ( UtilsClient::getBinStatus(meg03_[ism-1], ie, ip) ) {
256  p.setTaskStatus(true);
257  } else {
258  p.setTaskStatus(false);
259  }
260 
261  status = status && UtilsClient::getBinQuality(meg03_[ism-1], ie, ip);
262 
263  int ic = Numbers::indexEB(ism, ie, ip);
264 
265  if ( econn ) {
266  ecid = LogicID::getEcalLogicID("EB_crystal_number", Numbers::iSM(ism, EcalBarrel), ic);
267  dataset[ecid] = p;
268  }
269 
270  }
271 
272  }
273  }
274 
275  }
276 
277  if ( econn ) {
278  try {
279  if ( verbose_ ) std::cout << "Inserting MonPedestalsOnlineDat ..." << std::endl;
280  if ( dataset.size() != 0 ) econn->insertDataArraySet(&dataset, moniov);
281  if ( verbose_ ) std::cout << "done." << std::endl;
282  } catch (std::runtime_error &e) {
283  std::cerr << e.what() << std::endl;
284  }
285  }
286 
287  return true;
288 
289 }
290 #endif
291 
293 
294  ievt_++;
295  jevt_++;
296  if ( ievt_ % 10 == 0 ) {
297  if ( debug_ ) std::cout << "EBPedestalOnlineClient: ievt/jevt = " << ievt_ << "/" << jevt_ << std::endl;
298  }
299 
300  uint32_t bits03 = 0;
303 
304  char histo[200];
305 
306  MonitorElement* me;
307 
308  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
309 
310  int ism = superModules_[i];
311 
312  sprintf(histo, (prefixME_ + "/EBPedestalOnlineTask/Gain12/EBPOT pedestal %s G12").c_str(), Numbers::sEB(ism).c_str());
313  me = dqmStore_->get(histo);
314  h03_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, h03_[ism-1] );
315  if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
316  if ( mep03_[ism-1] ) mep03_[ism-1]->Reset();
317  if ( mer03_[ism-1] ) mer03_[ism-1]->Reset();
318 
319  for ( int ie = 1; ie <= 85; ie++ ) {
320  for ( int ip = 1; ip <= 20; ip++ ) {
321 
322  if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent(ie, ip, 2.);
323 
324  bool update03;
325 
326  float num03;
327  float mean03;
328  float rms03;
329 
330  update03 = UtilsClient::getBinStatistics(h03_[ism-1], ie, ip, num03, mean03, rms03);
331 
332  if ( update03 ) {
333 
334  float val;
335 
336  val = 1.;
337  if ( std::abs(mean03 - expectedMean_) > discrepancyMean_ )
338  val = 0.;
339  if ( rms03 > RMSThreshold_ )
340  val = 0.;
341  if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent(ie, ip, val);
342 
343  if ( mep03_[ism-1] ) mep03_[ism-1]->Fill(mean03);
344  if ( mer03_[ism-1] ) mer03_[ism-1]->Fill(rms03);
345 
346  }
347 
348  if ( Masks::maskChannel(ism, ie, ip, bits03, EcalBarrel) ) UtilsClient::maskBinContent( meg03_[ism-1], ie, ip );
349 
350  }
351  }
352 
353  }
354 
355 }
356 
static void printBadChannels(const MonitorElement *me, const T *hi, bool positive_only=false)
Print the bad channels.
Definition: UtilsClient.h:67
Cache logicID vector from database.
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
void setBinContent(int binx, double content)
set content of bin (1-D)
static bool maskChannel(int ism, int i1, int i2, uint32_t bits, const EcalSubdetector subdet)
Definition: Masks.cc:60
static std::string sEB(const int ism)
Definition: Numbers.cc:81
EBPedestalOnlineClient(const edm::ParameterSet &ps)
Constructor.
MonitorElement * mer03_[36]
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:519
Some &quot;id&quot; conversions.
static void maskBinContent(const MonitorElement *me, const int ix, const int iy)
Mask the bin content.
Definition: UtilsClient.h:189
static const int PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR
#define abs(x)
Definition: mlp_lapack.h:159
tuple histo
Definition: trackerHits.py:12
static int icEB(const int ism, const int ix, const int iy)
Definition: Numbers.cc:892
std::vector< int > superModules_
void beginRun(void)
BeginRun.
void Fill(long long x)
static int indexEB(const int ism, const int ie, const int ip)
Definition: Numbers.cc:863
static int iSM(const int ism, const EcalSubdetector subdet)
Definition: Numbers.cc:216
virtual ~EBPedestalOnlineClient()
Destructor.
void setTaskStatus(bool status)
void removeElement(const std::string &name)
Definition: DQMStore.cc:2338
channel masking
std::string getName(Reflex::Type &cc)
Definition: ClassFiller.cc:18
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1270
void setADCMeanG12(float mean)
void beginJob(void)
BeginJob.
Ecal Monitor Utils for Client.
static const int PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR
MonitorElement * meg03_[36]
MonitorElement * mep03_[36]
static bool getBinStatus(const MonitorElement *me, const int ix, const int iy)
Returns true if the bin status is red/dark red.
Definition: UtilsClient.h:171
void insertDataArraySet(const std::map< EcalLogicID, DATT > *data, IOVT *iov)
tuple cout
Definition: gather_cfg.py:41
tuple status
Definition: ntuplemaker.py:245
static bool getBinQuality(const MonitorElement *me, const int ix, const int iy)
Returns true if the bin quality is good or masked.
Definition: UtilsClient.h:153
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:647
static EcalLogicID getEcalLogicID(const char *name, const int id1=EcalLogicID::NULLID, const int id2=EcalLogicID::NULLID, const int id3=EcalLogicID::NULLID)
Definition: LogicID.h:31
Definition: RunIOV.h:13
int ism(int ieta, int iphi)
Definition: EcalPyUtils.cc:47
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void Reset(void)
reset ME (ie. contents, errors, etc)
static bool getBinStatistics(const T *histo, const int ix, const int iy, float &num, float &mean, float &rms)
Returns true if the bin contains good statistical data.
Definition: UtilsClient.h:133
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:237