CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripActionExecutor.cc
Go to the documentation of this file.
1 
4 
6 
10 
18 
20 
21 
22 #include <iomanip>
23 //
24 // -- Constructor
25 //
27  edm::LogInfo("SiStripActionExecutor") <<
28  " Creating SiStripActionExecutor " << "\n" ;
29  summaryCreator_ = 0;
30  tkMapCreator_ = 0;
31  qualityChecker_ = 0;
32  configWriter_ = 0;
33 }
34 //
35 // -- Destructor
36 //
38  edm::LogInfo("SiStripActionExecutor") <<
39  " Deleting SiStripActionExecutor " << "\n" ;
40  if (summaryCreator_) delete summaryCreator_;
41  if (tkMapCreator_) delete tkMapCreator_;
42  if (qualityChecker_) delete qualityChecker_;
43 }
44 //
45 // -- Read Configurationn File
46 //
48 
49  if (!summaryCreator_) {
51  }
52  std::string fpath = pSet_.getUntrackedParameter<std::string>("SummaryConfigPath","DQM/SiStripMonitorClient/data/sistrip_monitorelement_config.xml");
53  if (summaryCreator_->readConfiguration(fpath)) return true;
54  else return false;
55 }
56 //
57 // -- Read Configurationn File
58 //
59 /*
60 bool SiStripActionExecutor::readTkMapConfiguration() {
61 
62  if (tkMapCreator_) delete tkMapCreator_;
63  tkMapCreator_ = new SiStripTrackerMapCreator();
64  if (tkMapCreator_) return true;
65  else return false;
66 }
67 */
69 
70  if (tkMapCreator_) delete tkMapCreator_;
72  if (tkMapCreator_) return true;
73  else return false;
74 }
75 //
76 // -- Create and Fill Summary Monitor Elements
77 //
79  if (summaryCreator_) {
80  dqm_store->cd();
81  std::string dname = "SiStrip/MechanicalView";
82  if (dqm_store->dirExists(dname)) {
83  dqm_store->cd(dname);
84  summaryCreator_->createSummary(dqm_store);
85  }
86  }
87 }
88 //
89 // -- Create and Fill Summary Monitor Elements
90 //
92  if (summaryCreator_) {
93  dqm_store->cd();
94  std::string dname = "MechanicalView";
95  if (SiStripUtility::goToDir(dqm_store, dname)) {
96  summaryCreator_->createSummary(dqm_store);
97  }
98  dqm_store->cd();
99  }
100 }
101 //
102 // -- create tracker map
103 //
105  DQMStore* dqm_store, std::string& map_type,
106  const edm::EventSetup& eSetup) {
107  if (tkMapCreator_) tkMapCreator_->create(tkmapPset, dqm_store, map_type, eSetup);
108 }
109 //
110 // -- create tracker map for offline
111 //
113  DQMStore* dqm_store, std::string& map_type,
114  const edm::EventSetup& eSetup) {
115  if (tkMapCreator_) tkMapCreator_->createForOffline(tkmapPset, dqm_store, map_type, eSetup);
116 }
117 
118 //
119 // -- Create Status Monitor Elements
120 //
123  qualityChecker_->bookStatus(dqm_store);
124 }
125 //
126 // -- Fill Dummy Status
127 //
130 }
131 //
132 // -- Fill Status
133 //
135  qualityChecker_->fillStatus(dqm_store, detcabling, eSetup);
136 }
137 //
138 // -- Fill Lumi Status
139 //
141  qualityChecker_->fillStatusAtLumi(dqm_store);
142 }
143 //
144 // --
145 //
147  std::ofstream report_file;
148  report_file.open("sistrip_shift_report.txt", std::ios::out);
149  report_file << " Nothing to report!!" << std::endl;
150  report_file.close();
151 }
152 //
153 // -- Create Shift Report
154 //
156 
157  // Read layout configuration
158  std::string localPath = std::string("DQM/SiStripMonitorClient/data/sistrip_plot_layout.xml");
159  SiStripLayoutParser layout_parser;
160  layout_parser.getDocument(edm::FileInPath(localPath).fullPath());
161 
162  std::map<std::string, std::vector<std::string> > layout_map;
163  if (!layout_parser.getAllLayouts(layout_map)) return;
164 
165 
166  std::ostringstream shift_summary;
167  if (configWriter_) delete configWriter_;
169  configWriter_->init("ShiftReport");
170 
171 
172  // Print Report Summary Content
173  shift_summary << " Report Summary Content :" << std::endl;
174  shift_summary << " =========================" << std::endl;
175  configWriter_->createElement("ReportSummary");
176 
177  MonitorElement* me;
178  std::string report_path;
179  report_path = "SiStrip/EventInfo/reportSummaryContents/SiStrip_DetFraction_TECB";
180  me = dqm_store->get(report_path);
181  printReportSummary(me, shift_summary, "TECB");
182 
183  report_path = "SiStrip/EventInfo/reportSummaryContents/SiStrip_DetFraction_TECF";
184  me = dqm_store->get(report_path);
185  printReportSummary(me, shift_summary, "TECF");
186 
187  report_path = "SiStrip/EventInfo/reportSummaryContents/SiStrip_DetFraction_TIB";
188  me = dqm_store->get(report_path);
189  printReportSummary(me, shift_summary, "TIB");
190 
191  report_path = "SiStrip/EventInfo/reportSummaryContents/SiStrip_DetFraction_TIDB";
192  me = dqm_store->get(report_path);
193  printReportSummary(me, shift_summary, "TIDB");
194 
195  report_path = "SiStrip/EventInfo/reportSummaryContents/SiStrip_DetFraction_TIDF";
196  me = dqm_store->get(report_path);
197  printReportSummary(me, shift_summary, "TIDF");
198 
199  report_path = "SiStrip/EventInfo/reportSummaryContents/SiStrip_DetFraction_TOB";
200  me = dqm_store->get(report_path);
201  printReportSummary(me, shift_summary, "TOB");
202 
203  shift_summary << std::endl;
204  printShiftHistoParameters(dqm_store, layout_map, shift_summary);
205 
206  std::ofstream report_file;
207  report_file.open("sistrip_shift_report.txt", std::ios::out);
208  report_file << shift_summary.str() << std::endl;
209  report_file.close();
210  configWriter_->write("sistrip_shift_report.xml");
211  delete configWriter_;
212  configWriter_ = 0;
213 }
214 //
215 // -- Print Report Summary
216 //
218  std::ostringstream& str_val, std::string name) {
219  str_val <<" " << name << " : ";
221  SiStripUtility::getMEValue(me, value);
222  configWriter_->createChildElement("MonitorElement", name, "value", value);
223  float fvalue = atof(value.c_str());
224  if (fvalue == -1.0) str_val <<" Dummy Value "<<std::endl;
225  else str_val << fvalue << std::endl;
226 }
227 //
228 // -- Print Shift Histogram Properties
229 //
230 void SiStripActionExecutor::printShiftHistoParameters(DQMStore * dqm_store, std::map<std::string, std::vector<std::string> >& layout_map, std::ostringstream& str_val) {
231 
232  str_val << std::endl;
233  for (std::map<std::string, std::vector< std::string > >::iterator it = layout_map.begin() ; it != layout_map.end(); it++) {
234  std::string set_name = it->first;
235  if (set_name.find("Summary") != std::string::npos) continue;
236  configWriter_->createElement(set_name);
237 
238  str_val << " " << set_name << " : " << std::endl;
239  str_val << " ===================================="<< std::endl;
240 
241  str_val << std::setprecision(2);
242  str_val << setiosflags(std::ios::fixed);
243  for (std::vector<std::string>::iterator im = it->second.begin();
244  im != it->second.end(); im++) {
245  std::string path_name = (*im);
246  if (path_name.size() == 0) continue;
247  MonitorElement* me = dqm_store->get(path_name);
248  std::ostringstream entry_str, mean_str, rms_str;
249  entry_str << std::setprecision(2);
250  entry_str << setiosflags(std::ios::fixed);
251  mean_str << std::setprecision(2);
252  mean_str << setiosflags(std::ios::fixed);
253  rms_str << std::setprecision(2);
254  rms_str << setiosflags(std::ios::fixed);
255  entry_str << std::setw(7) << me->getEntries();
256  mean_str << std::setw(7) << me->getMean();
257  rms_str << std::setw(7) << me->getRMS();
258  configWriter_->createChildElement("MonitorElement", me->getName(),
259  "entries",entry_str.str(),"mean",mean_str.str(),"rms",rms_str.str());
260 
261  if (me) str_val << " "<< me->getName() <<" : entries = "<< std::setw(7)
262  << me->getEntries() << " mean = "<< me->getMean()
263  <<" : rms = "<< me->getRMS()<< std::endl;
264  }
265  str_val << std::endl;
266  }
267 }
268 //
269 // -- Print List of Modules with QTest warning or Error
270 //
271 void SiStripActionExecutor::printFaultyModuleList(DQMStore * dqm_store, std::ostringstream& str_val) {
272  dqm_store->cd();
273 
274  std::string mdir = "MechanicalView";
275  if (!SiStripUtility::goToDir(dqm_store, mdir)) return;
276  std::string mechanicalview_dir = dqm_store->pwd();
277 
278  std::vector<std::string> subdet_folder;
279  subdet_folder.push_back("TIB");
280  subdet_folder.push_back("TOB");
281  subdet_folder.push_back("TEC/MINUS");
282  subdet_folder.push_back("TEC/PLUS");
283  subdet_folder.push_back("TID/MINUS");
284  subdet_folder.push_back("TID/PLUS");
285 
286  int nDetsTotal = 0;
287  int nDetsWithErrorTotal = 0;
288  for (std::vector<std::string>::const_iterator im = subdet_folder.begin(); im != subdet_folder.end(); im++) {
289  std::string dname = mechanicalview_dir + "/" + (*im);
290  if (!dqm_store->dirExists(dname)) continue;
291  str_val << "============"<< std::endl;
292  str_val << (*im) << std::endl;
293  str_val << "============"<< std::endl;
294  str_val << std::endl;
295 
296  dqm_store->cd(dname);
297  std::vector<std::string> module_folders;
298  SiStripUtility::getModuleFolderList(dqm_store, module_folders);
299  int nDets = module_folders.size();
300  dqm_store->cd();
301 
302  int nDetsWithError = 0;
303  std::string bad_module_folder = dname + "/" + "BadModuleList";
304  if (dqm_store->dirExists(bad_module_folder)) {
305  std::vector<MonitorElement *> meVec = dqm_store->getContents(bad_module_folder);
306  for (std::vector<MonitorElement *>::const_iterator it = meVec.begin();
307  it != meVec.end(); it++) {
308  nDetsWithError++;
309  uint16_t flag = (*it)->getIntValue();
311  SiStripUtility::getBadModuleStatus(flag, message);
312  str_val << (*it)->getName() << " flag : " << (*it)->getIntValue() << " " << message << std::endl;
313  }
314  }
315  str_val << "--------------------------------------------------------------------"<< std::endl;
316  str_val << " Detectors : Total "<< nDets
317  << " with Error " << nDetsWithError<< std::endl;
318  str_val << "--------------------------------------------------------------------"<< std::endl;
319  nDetsTotal += nDets;
320  nDetsWithErrorTotal += nDetsWithError;
321  }
322  dqm_store->cd();
323  str_val << "--------------------------------------------------------------------"<< std::endl;
324  str_val << " Total Number of Connected Detectors : " << nDetsTotal << std::endl;
325  str_val << " Total Number of Detectors with Error : " << nDetsWithErrorTotal << std::endl;
326  str_val << "--------------------------------------------------------------------"<< std::endl;
327 
328 }
void fillStatus(DQMStore *dqm_store, const edm::ESHandle< SiStripDetCabling > &cabling, const edm::EventSetup &eSetup)
T getUntrackedParameter(std::string const &, T const &) const
const std::string & getName(void) const
get name of ME
void createChildElement(std::string tag, std::string name)
void createOfflineTkMap(const edm::ParameterSet &tkmapPset, DQMStore *dqm_store, std::string &map_type, const edm::EventSetup &eSetup)
void createTkMap(const edm::ParameterSet &tkmapPset, DQMStore *dqm_store, std::string &map_type, const edm::EventSetup &eSetup)
void bookStatus(DQMStore *dqm_store)
static void getMEValue(MonitorElement *me, std::string &val)
void getDocument(std::string configFile, bool UseDB=false)
Methor that parses the xml file configFile.
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:696
void createSummary(DQMStore *dqm_store)
SiStripActionExecutor(edm::ParameterSet const &ps)
void fillStatus(DQMStore *dqm_store, const edm::ESHandle< SiStripDetCabling > &fedcabling, const edm::EventSetup &eSetup)
bool readTkMapConfiguration(const edm::EventSetup &eSetup)
void createStatus(DQMStore *dqm_store)
double getEntries(void) const
get # of entries
double getMean(int axis=1) const
get mean value of histogram along x, y or z axis (axis=1, 2, 3 respectively)
static void getBadModuleStatus(uint16_t flag, std::string &message)
SiStripSummaryCreator * summaryCreator_
void createElement(std::string tag)
bool readConfiguration(std::string &file_path)
bool init(std::string main)
Write XML file.
void createSummary(DQMStore *dqm_store)
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1760
std::vector< MonitorElement * > getContents(const std::string &path) const
Definition: DQMStore.cc:1789
void createShiftReport(DQMStore *dqm_store)
SiStripConfigWriter * configWriter_
bool dirExists(const std::string &path) const
true if directory exists
Definition: DQMStore.cc:784
tuple out
Definition: dbtoconf.py:99
SiStripTrackerMapCreator * tkMapCreator_
void fillStatusAtLumi(DQMStore *dqm_store)
void fillStatusAtLumi(DQMStore *dqm_store)
void printShiftHistoParameters(DQMStore *dqm_store, std::map< std::string, std::vector< std::string > > &layout_map, std::ostringstream &str_val)
double getRMS(int axis=1) const
get RMS of histogram along x, y or z axis (axis=1, 2, 3 respectively)
void createForOffline(const edm::ParameterSet &tkmapPset, DQMStore *dqm_store, std::string &htype, const edm::EventSetup &eSetup)
void write(std::string fname)
void createSummaryOffline(DQMStore *dqm_store)
bool getAllLayouts(std::map< std::string, std::vector< std::string > > &me_names)
void printReportSummary(MonitorElement *me, std::ostringstream &str_val, std::string name)
SiStripQualityChecker * qualityChecker_
static void getModuleFolderList(DQMStore *dqm_store, std::vector< std::string > &m_ids)
void printFaultyModuleList(DQMStore *dqm_store, std::ostringstream &str_val)
static bool goToDir(DQMStore *dqm_store, std::string name)
void create(const edm::ParameterSet &tkmapPset, DQMStore *dqm_store, std::string &htype, const edm::EventSetup &eSetup)
const std::string & pwd(void) const
Definition: DQMStore.cc:691