CMS 3D CMS Logo

DTSummaryClients.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author G. Mila - INFN Torino
5  *
6  * threadsafe version (//-) oct/nov 2014 - WATWanAbdullah -ncpp-um-my
7  *
8  */
9 
10 
12 
13 // Framework
17 
21 
22 #include <string>
23 
24 using namespace edm;
25 using namespace std;
26 
27 
29 
30  LogVerbatim("DTDQM|DTMonitorClient|DTSummaryClients") << "[DTSummaryClients]: Constructor";
31 
32  bookingdone = false;
33 
34 }
35 
37  LogVerbatim ("DTDQM|DTMonitorClient|DTSummaryClients") << "DTSummaryClients: analyzed " << nevents << " events";
38 
39 }
40 
42 
43  LogVerbatim ("DTDQM|DTMonitorClient|DTSummaryClients") <<"[DTSummaryClients]: endJob";
44 
45 }
46 
48  edm::LuminosityBlock const & lumiSeg, edm::EventSetup const & context) {
49 
50  if (!bookingdone) {
51 
52  // book the summary histos
53 
54  ibooker.setCurrentFolder("DT/EventInfo");
55 
56  summaryReport = ibooker.bookFloat("reportSummary");
57  // Initialize to 1 so that no alarms are thrown at the beginning of the run
58  summaryReport->Fill(1.);
59 
60  summaryReportMap = ibooker.book2D("reportSummaryMap","DT Report Summary Map",12,1,13,5,-2,3);
61  summaryReportMap->setAxisTitle("sector",1);
62  summaryReportMap->setAxisTitle("wheel",2);
63 
64  ibooker.setCurrentFolder("DT/EventInfo/reportSummaryContents");
65 
66  for(int wheel = -2; wheel != 3; ++wheel) {
67  stringstream streams;
68  streams << "DT_Wheel" << wheel;
69  string meName = streams.str();
70 
71  theSummaryContents.push_back(ibooker.bookFloat(meName));
72  // Initialize to 1 so that no alarms are thrown at the beginning of the run
73  theSummaryContents[wheel+2]->Fill(1.);
74  }
75 
76 }
77  bookingdone = true;
78 
79 
80  LogVerbatim("DTDQM|DTMonitorClient|DTSummaryClients")
81  << "[DTSummaryClients]: End of LS transition, performing the DQM client operation" << endl;
82 
83  // reset the monitor elements
86  for(int ii = 0; ii != 5; ++ii) {
87  theSummaryContents[ii]->Reset();
88  }
89 
90  bool noDTData = false;
91 
92  // Check if DT data in each ROS have been read out and set the SummaryContents and the ErrorSummary
93  // accordignly
94  MonitorElement * dataIntegritySummary = igetter.get("DT/00-DataIntegrity/DataIntegritySummary");
95  if(dataIntegritySummary != nullptr) {
96  int nDisabledFED = 0;
97  for(int wheel = 1; wheel != 6; ++wheel) { // loop over the wheels
98  int nDisablesROS = 0;
99  for(int sect = 1; sect != 13; ++sect) { // loop over sectors
100  if(dataIntegritySummary->getBinContent(sect,wheel) == 0) {
101  nDisablesROS++;
102  }
103  }
104  if(nDisablesROS == 12) {
105  nDisabledFED++;
106  theSummaryContents[wheel-1]->Fill(0);
107  }
108  }
109 
110  if(nDisabledFED == 5) {
111  noDTData = true;
112  summaryReport->Fill(-1);
113  }
114 
115  } else {
116  LogError("DTDQM|DTMonitorClient|DTSummaryClients")
117  << "Data Integrity Summary not found with name: DT/00-DataIntegrity/DataIntegritySummary" <<endl;
118  }
119 
120  double totalStatus = 0;
121  // protection
122  bool occupancyFound = true;
123 
124  // Fill the map using, at the moment, only the information from DT occupancy
125  // problems at a granularity smaller than the chamber are ignored
126  for(int wheel=-2; wheel<=2; wheel++){ // loop over wheels
127  // retrieve the occupancy summary
128  stringstream str;
129  str << "DT/01-Digi/OccupancySummary_W" << wheel;
130  MonitorElement * wheelOccupancySummary = igetter.get(str.str());
131  if(wheelOccupancySummary != nullptr) {
132  int nFailingChambers = 0;
133  for(int sector=1; sector<=12; sector++){ // loop over sectors
134  for(int station = 1; station != 5; ++station) { // loop over stations
135  double chamberStatus = wheelOccupancySummary->getBinContent(sector, station);
136  LogTrace("DTDQM|DTMonitorClient|DTSummaryClients")
137  << "Wheel: " << wheel << " Stat: " << station << " Sect: " << sector << " status: " << chamberStatus << endl;
138  if(chamberStatus != 4) {
139  summaryReportMap->Fill(sector, wheel, 0.25);
140  } else {
141  nFailingChambers++;
142  }
143  LogTrace("DTDQM|DTMonitorClient|DTSummaryClients") << " sector (" << sector << ") status on the map is: "
144  << summaryReportMap->getBinContent(sector, wheel+3) << endl;
145  }
146 
147  }
148  theSummaryContents[wheel+2]->Fill((48.-nFailingChambers)/48.);
149  totalStatus += (48.-nFailingChambers)/48.;
150  } else {
151  occupancyFound = false;
152  LogError("DTDQM|DTMonitorClient|DTSummaryClients")<< " Wheel Occupancy Summary not found with name: " << str.str() << endl;
153  }
154  }
155 
156 
157  if(occupancyFound && !noDTData)
158  summaryReport->Fill(totalStatus/5.);
159 
160 }
161 
162 
DTSummaryClients(const edm::ParameterSet &ps)
Constructor.
~DTSummaryClients() override
Destructor.
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:302
MonitorElement * summaryReport
MonitorElement * summaryReportMap
void Fill(long long x)
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
void Reset()
reset ME (ie. contents, errors, etc)
#define LogTrace(id)
ii
Definition: cuy.py:589
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:136
double getBinContent(int binx) const
get content of bin (1-D)
std::vector< MonitorElement * > theSummaryContents
HLT enums.
MonitorElement * bookFloat(Args &&...args)
Definition: DQMStore.h:112
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &) override
#define str(s)
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)