CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EBTriggerTowerClient.cc
Go to the documentation of this file.
1 /*
2  * \file EBTriggerTowerClient.cc
3  *
4  * $Date: 2012/04/27 13:45:59 $
5  * $Revision: 1.131 $
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 
17 
20 
23 
25 
27 
28  // cloneME switch
29  cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
30 
31  // verbose switch
32  verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
33 
34  // debug switch
35  debug_ = ps.getUntrackedParameter<bool>("debug", false);
36 
37  // prefixME path
38  prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
39 
40  // enableCleanup_ switch
41  enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
42 
43  // vector of selected Super Modules (Defaults to all 36).
44  superModules_.reserve(36);
45  for ( unsigned int i = 1; i <= 36; i++ ) superModules_.push_back(i);
46  superModules_ = ps.getUntrackedParameter<std::vector<int> >("superModules", superModules_);
47 
48  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
49 
50  int ism = superModules_[i];
51 
52  l01_[ism-1] = 0;
53  o01_[ism-1] = 0;
54 
55  mel01_[ism-1] = 0;
56  meo01_[ism-1] = 0;
57 
58  }
59 
60  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
61 
62  int ism = superModules_[i];
63 
64  me_o01_[ism-1] = 0;
65  me_o02_[ism-1] = 0;
66 
67  }
68 
69 }
70 
72 
73 }
74 
76 
78 
79  if ( debug_ ) std::cout << "EBTriggerTowerClient: beginJob" << std::endl;
80 
81  ievt_ = 0;
82  jevt_ = 0;
83 
84 }
85 
87 
88  if ( debug_ ) std::cout << "EBTriggerTowerClient: beginRun" << std::endl;
89 
90  jevt_ = 0;
91 
92  this->setup();
93 
94 }
95 
97 
98  if ( debug_ ) std::cout << "EBTriggerTowerClient: endJob, ievt = " << ievt_ << std::endl;
99 
100  this->cleanup();
101 
102 }
103 
105 
106  if ( debug_ ) std::cout << "EBTriggerTowerClient: endRun, jevt = " << jevt_ << std::endl;
107 
108  this->cleanup();
109 
110 }
111 
113 
114  std::string name;
115 
116  dqmStore_->setCurrentFolder( prefixME_ + "/EBTriggerTowerClient" );
117 
118  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
119 
120  int ism = superModules_[i];
121 
122  if ( me_o01_[ism-1] ) dqmStore_->removeElement( me_o01_[ism-1]->getName() );
123  name = "EBTTT Trigger Primitives Timing " + Numbers::sEB(ism);
124  me_o01_[ism-1] = dqmStore_->book2D(name, name, 17, 0., 17., 4, 0., 4.);
125  me_o01_[ism-1]->setAxisTitle("ieta'", 1);
126  me_o01_[ism-1]->setAxisTitle("iphi'", 2);
127 
128  if ( me_o02_[ism-1] ) dqmStore_->removeElement( me_o02_[ism-1]->getName() );
129  name = "EBTTT Non Single Timing " + Numbers::sEB(ism);
130  me_o02_[ism-1] = dqmStore_->book2D(name, name, 17, 0., 17., 4, 0., 4.);
131  me_o02_[ism-1]->setAxisTitle("ieta'", 1);
132  me_o02_[ism-1]->setAxisTitle("iphi'", 2);
133  me_o02_[ism-1]->setAxisTitle("fraction", 3);
134 
135  }
136 
137  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
138 
139  int ism = superModules_[i];
140 
141  if ( me_o01_[ism-1] ) me_o01_[ism-1]->Reset();
142  if ( me_o02_[ism-1] ) me_o02_[ism-1]->Reset();
143 
144  }
145 
146 }
147 
149 
150  if ( ! enableCleanup_ ) return;
151 
152  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
153 
154  int ism = superModules_[i];
155 
156  if ( cloneME_ ) {
157  if ( l01_[ism-1] ) delete l01_[ism-1];
158  if ( o01_[ism-1] ) delete o01_[ism-1];
159  }
160 
161  l01_[ism-1] = 0;
162  o01_[ism-1] = 0;
163 
164  mel01_[ism-1] = 0;
165  meo01_[ism-1] = 0;
166 
167  }
168 
169  dqmStore_->setCurrentFolder( prefixME_ + "/EBTriggerTowerClient" );
170 
171  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
172 
173  int ism = superModules_[i];
174 
175  if ( me_o01_[ism-1] ) dqmStore_->removeElement( me_o01_[ism-1]->getName() );
176  me_o01_[ism-1] = 0;
177  if ( me_o02_[ism-1] ) dqmStore_->removeElement( me_o02_[ism-1]->getName() );
178  me_o02_[ism-1] = 0;
179 
180  }
181 
182 }
183 
184 #ifdef WITH_ECAL_COND_DB
185 bool EBTriggerTowerClient::writeDb(EcalCondDBInterface* econn, RunIOV* runiov, MonRunIOV* moniov, bool& status) {
186 
187  status = true;
188 
189  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
190 
191  int ism = superModules_[i];
192 
193  if ( verbose_ ) {
194  std::cout << " " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
195  std::cout << std::endl;
196  UtilsClient::printBadChannels(mel01_[ism-1], UtilsClient::getHisto<TH2F*>(mel01_[ism-1]), true);
197  }
198 
199  }
200 
201  return true;
202 
203 }
204 #endif
205 
207 
208  ievt_++;
209  jevt_++;
210  if ( ievt_ % 10 == 0 ) {
211  if ( debug_ ) std::cout << "EBTriggerTowerClient: ievt/jevt = " << ievt_ << "/" << jevt_ << std::endl;
212  }
213 
214  MonitorElement* me;
215 
216  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
217 
218  int ism = superModules_[i];
219 
220  me = dqmStore_->get( prefixME_ + "/EBTriggerTowerTask/EBTTT EmulError " + Numbers::sEB(ism) );
221  l01_[ism-1] = UtilsClient::getHisto<TH2F*>( me, cloneME_, l01_[ism-1] );
222  mel01_[ism-1] = me;
223 
224  me = dqmStore_->get( prefixME_ + "/EBTriggerTowerTask/EBTTT EmulFineGrainVetoError " + Numbers::sEB(ism) );
225  l02_[ism-1] = UtilsClient::getHisto<TH2F*>( me, cloneME_, l02_[ism-1] );
226  mel02_[ism-1] = me;
227 
228  me = dqmStore_->get( prefixME_ + "/EBTriggerTowerTask/EBTTT EmulMatch " + Numbers::sEB(ism) );
229  o01_[ism-1] = UtilsClient::getHisto<TH3F*>( me, cloneME_, o01_[ism-1] );
230  meo01_[ism-1] = me;
231 
232  if ( me_o01_[ism-1] ) me_o01_[ism-1]->Reset();
233  if ( me_o02_[ism-1] ) me_o02_[ism-1]->Reset();
234 
235  for (int ie = 1; ie <= 17; ie++) {
236  for (int ip = 1; ip <= 4; ip++) {
237 
238  if ( o01_[ism-1] ) {
239  // find the most frequent TP timing that matches the emulator
240  float index=-1;
241  double max=0;
242  double total=0;
243  for (int j=0; j<6; j++) {
244  double sampleEntries = o01_[ism-1]->GetBinContent(ie, ip, j+1);
245  if(sampleEntries > max) {
246  index=j;
247  max = sampleEntries;
248  }
249  total += sampleEntries;
250  }
251  if ( max > 0 ) {
252  if ( index == 0 ) {
253  me_o01_[ism-1]->setBinContent(ie, ip, -1);
254  } else {
255  me_o01_[ism-1]->setBinContent(ie, ip, index );
256  }
257  }
258  double fraction = (total > 0) ? 1.0 - max/total : 0.;
259  if ( me_o02_[ism-1] ) me_o02_[ism-1]->setBinContent(ie, ip, fraction);
260  }
261 
262  }
263  }
264 
265  }
266 
267 }
268 
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)
MonitorElement * me_o02_[36]
Some &quot;id&quot; conversions.
MonitorElement * mel01_[36]
static std::string sEB(const unsigned ism)
Definition: Numbers.cc:94
MonitorElement * mel02_[36]
void cleanup(void)
Cleanup.
MonitorElement * meo01_[36]
void analyze(void)
Analyze.
const T & max(const T &a, const T &b)
std::vector< int > superModules_
void endRun(void)
EndRun.
void removeElement(const std::string &name)
Definition: DQMStore.cc:2572
void endJob(void)
EndJob.
int j
Definition: DBlmapReader.cc:9
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:1468
void beginJob(void)
BeginJob.
Ecal Monitor Utils for Client.
MonitorElement * me_o01_[36]
void beginRun(void)
BeginRun.
tuple cout
Definition: gather_cfg.py:121
EBTriggerTowerClient(const edm::ParameterSet &ps)
Constructor.
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:845
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)
virtual ~EBTriggerTowerClient()
Destructor.
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:429