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: 2011/08/30 09:33:51 $
5  * $Revision: 1.163 $
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 
21 
22 #ifdef WITH_ECAL_COND_DB
28 #endif
29 
31 
34 
36 
38 
39  // cloneME switch
40  cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
41 
42  // verbose switch
43  verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
44 
45  // debug switch
46  debug_ = ps.getUntrackedParameter<bool>("debug", false);
47 
48  // prefixME path
49  prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
50 
51  // enableCleanup_ switch
52  enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
53 
54  // vector of selected Super Modules (Defaults to all 36).
55  superModules_.reserve(36);
56  for ( unsigned int i = 1; i <= 36; i++ ) superModules_.push_back(i);
57  superModules_ = ps.getUntrackedParameter<std::vector<int> >("superModules", superModules_);
58 
59  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
60 
61  int ism = superModules_[i];
62 
63  h03_[ism-1] = 0;
64 
65  }
66 
67  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
68 
69  int ism = superModules_[i];
70 
71  meg03_[ism-1] = 0;
72 
73  mep03_[ism-1] = 0;
74 
75  mer03_[ism-1] = 0;
76 
77  }
78 
79  expectedMean_ = 200.0;
80  discrepancyMean_ = 25.0;
81  RMSThreshold_ = 3.0;
83 
84 }
85 
87 
88 }
89 
91 
93 
94  if ( debug_ ) std::cout << "EBPedestalOnlineClient: beginJob" << std::endl;
95 
96  ievt_ = 0;
97  jevt_ = 0;
98 
99 }
100 
102 
103  if ( debug_ ) std::cout << "EBPedestalOnlineClient: beginRun" << std::endl;
104 
105  jevt_ = 0;
106 
107  this->setup();
108 
109 }
110 
112 
113  if ( debug_ ) std::cout << "EBPedestalOnlineClient: endJob, ievt = " << ievt_ << std::endl;
114 
115  this->cleanup();
116 
117 }
118 
120 
121  if ( debug_ ) std::cout << "EBPedestalOnlineClient: endRun, jevt = " << jevt_ << std::endl;
122 
123  this->cleanup();
124 
125 }
126 
128 
129  std::string name;
130 
131  dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient" );
132 
133  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
134 
135  int ism = superModules_[i];
136 
137  if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
138  name = "EBPOT pedestal quality G12 " + Numbers::sEB(ism);
139  meg03_[ism-1] = dqmStore_->book2D(name, name, 85, 0., 85., 20, 0., 20.);
140  meg03_[ism-1]->setAxisTitle("ieta", 1);
141  meg03_[ism-1]->setAxisTitle("iphi", 2);
142 
143  if ( mep03_[ism-1] ) dqmStore_->removeElement( mep03_[ism-1]->getName() );
144  name = "EBPOT pedestal mean G12 " + Numbers::sEB(ism);
145  mep03_[ism-1] = dqmStore_->book1D(name, name, 100, 150., 250.);
146  mep03_[ism-1]->setAxisTitle("mean", 1);
147 
148  if ( mer03_[ism-1] ) dqmStore_->removeElement( mer03_[ism-1]->getName() );
149  name = "EBPOT pedestal rms G12 " + Numbers::sEB(ism);
150  mer03_[ism-1] = dqmStore_->book1D(name, name, 100, 0., 10.);
151  mer03_[ism-1]->setAxisTitle("rms", 1);
152 
153  }
154 
155  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
156 
157  int ism = superModules_[i];
158 
159  if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
160 
161  for ( int ie = 1; ie <= 85; ie++ ) {
162  for ( int ip = 1; ip <= 20; ip++ ) {
163 
164  meg03_[ism-1]->setBinContent( ie, ip, 2. );
165 
166  }
167  }
168 
169  if ( mep03_[ism-1] ) mep03_[ism-1]->Reset();
170  if ( mer03_[ism-1] ) mer03_[ism-1]->Reset();
171 
172  }
173 
174 }
175 
177 
178  if ( ! enableCleanup_ ) return;
179 
180  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
181 
182  int ism = superModules_[i];
183 
184  if ( cloneME_ ) {
185  if ( h03_[ism-1] ) delete h03_[ism-1];
186  }
187 
188  h03_[ism-1] = 0;
189 
190  }
191 
192  dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient" );
193 
194  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
195 
196  int ism = superModules_[i];
197 
198  if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
199  meg03_[ism-1] = 0;
200 
201  if ( mep03_[ism-1] ) dqmStore_->removeElement( mep03_[ism-1]->getName() );
202  mep03_[ism-1] = 0;
203 
204  if ( mer03_[ism-1] ) dqmStore_->removeElement( mer03_[ism-1]->getName() );
205  mer03_[ism-1] = 0;
206 
207  }
208 
209 }
210 
211 #ifdef WITH_ECAL_COND_DB
212 bool EBPedestalOnlineClient::writeDb(EcalCondDBInterface* econn, RunIOV* runiov, MonRunIOV* moniov, bool& status) {
213 
214  status = true;
215 
216  EcalLogicID ecid;
217 
219  std::map<EcalLogicID, MonPedestalsOnlineDat> dataset;
220 
221  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
222 
223  int ism = superModules_[i];
224 
225  if ( verbose_ ) {
226  std::cout << " " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
227  std::cout << std::endl;
228  UtilsClient::printBadChannels(meg03_[ism-1], h03_[ism-1]);
229  }
230 
231  float num03;
232  float mean03;
233  float rms03;
234 
235  for ( int ie = 1; ie <= 85; ie++ ) {
236  for ( int ip = 1; ip <= 20; ip++ ) {
237 
238  bool update03;
239 
240  update03 = UtilsClient::getBinStatistics(h03_[ism-1], ie, ip, num03, mean03, rms03);
241 
242  if ( update03 ) {
243 
244  if ( Numbers::icEB(ism, ie, ip) == 1 ) {
245 
246  if ( verbose_ ) {
247  std::cout << "Preparing dataset for " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
248  std::cout << "G12 (" << ie << "," << ip << ") " << num03 << " " << mean03 << " " << rms03 << std::endl;
249  std::cout << std::endl;
250  }
251 
252  }
253 
254  p.setADCMeanG12(mean03);
255  p.setADCRMSG12(rms03);
256 
257  if ( UtilsClient::getBinStatus(meg03_[ism-1], ie, ip) ) {
258  p.setTaskStatus(true);
259  } else {
260  p.setTaskStatus(false);
261  }
262 
263  status = status && UtilsClient::getBinQuality(meg03_[ism-1], ie, ip);
264 
265  int ic = Numbers::indexEB(ism, ie, ip);
266 
267  if ( econn ) {
268  ecid = LogicID::getEcalLogicID("EB_crystal_number", Numbers::iSM(ism, EcalBarrel), ic);
269  dataset[ecid] = p;
270  }
271 
272  }
273 
274  }
275  }
276 
277  }
278 
279  if ( econn ) {
280  try {
281  if ( verbose_ ) std::cout << "Inserting MonPedestalsOnlineDat ..." << std::endl;
282  if ( dataset.size() != 0 ) econn->insertDataArraySet(&dataset, moniov);
283  if ( verbose_ ) std::cout << "done." << std::endl;
284  } catch (std::runtime_error &e) {
285  std::cerr << e.what() << std::endl;
286  }
287  }
288 
289  return true;
290 
291 }
292 #endif
293 
295 
296  ievt_++;
297  jevt_++;
298  if ( ievt_ % 10 == 0 ) {
299  if ( debug_ ) std::cout << "EBPedestalOnlineClient: ievt/jevt = " << ievt_ << "/" << jevt_ << std::endl;
300  }
301 
302  uint32_t bits03 = 0;
305 
306  MonitorElement* me;
307 
308  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
309 
310  int ism = superModules_[i];
311 
312  me = dqmStore_->get( prefixME_ + "/EBPedestalOnlineTask/Gain12/EBPOT pedestal " + Numbers::sEB(ism) + " G12" );
313  h03_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, h03_[ism-1] );
314  if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
315  if ( mep03_[ism-1] ) mep03_[ism-1]->Reset();
316  if ( mer03_[ism-1] ) mer03_[ism-1]->Reset();
317 
318  for ( int ie = 1; ie <= 85; ie++ ) {
319  for ( int ip = 1; ip <= 20; ip++ ) {
320 
321  if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent(ie, ip, 2.);
322 
323  bool update03;
324 
325  float num03;
326  float mean03;
327  float rms03;
328 
329  update03 = UtilsClient::getBinStatistics(h03_[ism-1], ie, ip, num03, mean03, rms03);
330 
331  if ( update03 ) {
332 
333  float val;
334 
335  val = 1.;
336  if ( std::abs(mean03 - expectedMean_) > discrepancyMean_ )
337  val = 0.;
338  if ( (ie<=40 && rms03 > RMSThreshold_) || (ie>40 && rms03 > RMSThresholdHighEta_) )
339  val = 0.;
340  if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent(ie, ip, val);
341 
342  if ( mep03_[ism-1] ) mep03_[ism-1]->Fill(mean03);
343  if ( mer03_[ism-1] ) mer03_[ism-1]->Fill(rms03);
344 
345  }
346 
347  if ( Masks::maskChannel(ism, ie, ip, bits03, EcalBarrel) ) UtilsClient::maskBinContent( meg03_[ism-1], ie, ip );
348 
349  }
350  }
351 
352  }
353 
354 }
355 
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:87
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:514
Some &quot;id&quot; conversions.
static bool getBinQuality(const MonitorElement *me, const int ix, const int iy)
Returns true if the bin quality is good or masked.
Definition: UtilsClient.cc:201
static const int PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR
#define abs(x)
Definition: mlp_lapack.h:159
static void maskBinContent(const MonitorElement *me, const int ix, const int iy)
Mask the bin content.
Definition: UtilsClient.cc:231
static int icEB(const int ism, const int ix, const int iy)
Definition: Numbers.cc:898
std::vector< int > superModules_
void beginRun(void)
BeginRun.
void Fill(long long x)
static bool getBinStatus(const MonitorElement *me, const int ix, const int iy)
Returns true if the bin status is red/dark red.
Definition: UtilsClient.cc:216
static int indexEB(const int ism, const int ie, const int ip)
Definition: Numbers.cc:869
static int iSM(const int ism, const EcalSubdetector subdet)
Definition: Numbers.cc:222
virtual ~EBPedestalOnlineClient()
Destructor.
void setTaskStatus(bool status)
void removeElement(const std::string &name)
Definition: DQMStore.cc:2353
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:1265
void setADCMeanG12(float mean)
void beginJob(void)
BeginJob.
Ecal Monitor Utils for Client.
static bool getBinStatistics(TH1 *histo, const int ix, const int iy, float &num, float &mean, float &rms, float minEntries=1.)
Returns true if the bin contains good statistical data.
Definition: UtilsClient.cc:74
static const int PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR
MonitorElement * meg03_[36]
MonitorElement * mep03_[36]
void insertDataArraySet(const std::map< EcalLogicID, DATT > *data, IOVT *iov)
tuple cout
Definition: gather_cfg.py:41
tuple status
Definition: ntuplemaker.py:245
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:642
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:56
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 void printBadChannels(const MonitorElement *me, TH1 *hi, bool positive_only=false)
Print the bad channels.
Definition: UtilsClient.cc:14
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:232