CMS 3D CMS Logo

SiStripUtility.cc
Go to the documentation of this file.
4 
7 
8 //
9 // Get a list of MEs in a folder
10 //
11 int SiStripUtility::getMEList(std::string name, std::vector<std::string>& values) {
12  values.clear();
13  std::string prefix_str = name.substr(0,(name.find(":")));
14  prefix_str += "/";
15  std::string temp_str = name.substr(name.find(":")+1);
16  split(temp_str, values, ",");
17  for (std::vector<std::string>::iterator it = values.begin();
18  it != values.end(); it++) (*it).insert(0,prefix_str);
19  return values.size();
20 }
21 //
22 // Get a list of MEs in a folder and the path name
23 //
24 int SiStripUtility::getMEList(std::string name, std::string& dir_path, std::vector<std::string>& values) {
25  values.clear();
26  dir_path = name.substr(0,(name.find(":")));
27  dir_path += "/";
28  std::string temp_str = name.substr(name.find(":")+1);
29  split(temp_str, values, ",");
30  return values.size();
31 }
32 
33 // Check if the requested ME exists in a folder
35  if (name.find(name) == std::string::npos) return false;
36  std::string prefix_str = name.substr(0,(name.find(":")));
37  prefix_str += "/";
38  std::string temp_str = name.substr(name.find(":")+1);
39  std::vector<std::string> values;
40  split(temp_str, values, ",");
41  for (std::vector<std::string>::iterator it = values.begin();
42  it != values.end(); it++) {
43  if ((*it).find(me_name) != std::string::npos) {
44  full_path = prefix_str + (*it);
45  return true;
46  }
47  }
48  return false;
49 }
50 //
51 // -- Split a given string into a number of strings using given
52 // delimiters and fill a vector with splitted strings
53 //
54 void SiStripUtility::split(const std::string& str, std::vector<std::string>& tokens, const std::string& delimiters) {
55  // Skip delimiters at beginning.
56  std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
57 
58  // Find first "non-delimiter".
59  std::string::size_type pos = str.find_first_of(delimiters, lastPos);
60 
61  while (std::string::npos != pos || std::string::npos != lastPos) {
62  // Found a token, add it to the std::vector.
63  tokens.push_back(str.substr(lastPos, pos - lastPos));
64 
65  // Skip delimiters. Note the "not_of"
66  lastPos = str.find_first_not_of(delimiters, pos);
67 
68  // Find next "non-delimiter"
69  pos = str.find_first_of(delimiters, lastPos);
70  }
71 }
72 //
73 // -- Get Color code from Status
74 //
75 void SiStripUtility::getMEStatusColor(int status, int& rval, int&gval, int& bval) {
76  if (status == dqm::qstatus::STATUS_OK) {
77  rval = 0; gval = 255; bval = 0;
78  } else if (status == dqm::qstatus::WARNING) {
79  rval = 255; gval = 255; bval = 0;
80  } else if (status == dqm::qstatus::ERROR) {
81  rval = 255; gval = 0; bval = 0;
82  } else if (status == dqm::qstatus::OTHER) {
83  rval = 255; gval = 150; bval = 0;
84  } else {
85  rval = 0; gval = 0; bval = 255;
86  }
87 }
88 //
89 // -- Get Color code from Status
90 //
92  if (status == dqm::qstatus::STATUS_OK) {
93  tag = "Ok";
94  icol = 3;
95  } else if (status == dqm::qstatus::WARNING) {
96  tag = "Warning";
97  icol = 5;
98  } else if (status == dqm::qstatus::ERROR) {
99  tag = "Error";
100  icol = 2;
101  } else if (status == dqm::qstatus::OTHER) {
102  tag = "Other";
103  icol = 1;
104  } else {
105  tag = " ";
106  icol = 1;
107  }
108 }
109 //
110 // -- Get Color code from Status
111 //
112 void SiStripUtility::getDetectorStatusColor(int status, int& rval, int&gval, int& bval) {
113  // No Error
114  if (status == 0) {
115  rval = 0; gval = 255;bval = 0;
116  return;
117  }
118  // Error detected in FED Channel
119  if (((status >> 0) & 0x1) > 0) {
120  rval = 150; gval = 0; bval = 0;
121  return;
122  }
123  // Excluded FED Channel
124  if (((status >> 3) & 0x1) > 0) {
125  rval = 100; gval = 100; bval = 255;
126  return;
127  }
128  // DCS Error
129  if (((status >> 4) & 0x1) > 0) {
130  rval = 200; gval = 20; bval = 255;
131  return;
132  }
133  // Digi and Cluster Problem
134  if (((status >> 1) & 0x1) > 0) {
135  rval = 255; bval = 0;
136  if (((status >> 2) & 0x1) > 0) gval = 0;
137  else gval = 100;
138  } else {
139  rval = 251; gval = 0; bval = 100;
140  }
141 }
142 
143 //
144 // -- Get Status of Monitor Element
145 //
147  int status = 0;
148  if (me->getQReports().empty()) {
149  status = 0;
150  } else if (me->hasError()) {
151  status = dqm::qstatus::ERROR;
152  } else if (me->hasWarning()) {
153  status = dqm::qstatus::WARNING;
154  } else if (me->hasOtherReport()) {
155  status = dqm::qstatus::OTHER;
156  } else {
157  status = dqm::qstatus::STATUS_OK;
158  }
159  return status;
160 }
161 //
162 // -- Fill Module Names
163 //
164 void SiStripUtility::getModuleFolderList(DQMStore * dqm_store, std::vector<std::string>& mfolders){
165  std::string currDir = dqm_store->pwd();
166  if (currDir.find("module_") != std::string::npos) {
167  // std::string mId = currDir.substr(currDir.find("module_")+7, 9);
168  mfolders.push_back(currDir);
169  } else {
170  std::vector<std::string> subdirs = dqm_store->getSubdirs();
171  for (std::vector<std::string>::const_iterator it = subdirs.begin();
172  it != subdirs.end(); it++) {
173  dqm_store->cd(*it);
174  getModuleFolderList(dqm_store, mfolders);
175  dqm_store->goUp();
176  }
177  }
178 }
179 //
180 // -- Get Status of Monitor Element
181 //
182 int SiStripUtility::getMEStatus(MonitorElement* me, int& bad_channels) {
183  int status = 0;
184  if (me->getQReports().empty()) {
185  status = 0;
186  bad_channels = -1;
187  } else {
188  std::vector<QReport *> qreports = me->getQReports();
189  bad_channels =qreports[0]->getBadChannels().size();
190  if (me->hasError()) {
191  status = dqm::qstatus::ERROR;
192  } else if (me->hasWarning()) {
193  status = dqm::qstatus::WARNING;
194  } else if (me->hasOtherReport()) {
195  status = dqm::qstatus::OTHER;
196  } else {
197  status = dqm::qstatus::STATUS_OK;
198  }
199  }
200  return status;
201 }
202 //
203 // -- Get Status of Monitor Element
204 //
206  val = "";
207  if ( me && ( me->kind()==MonitorElement::DQM_KIND_REAL || me->kind()==MonitorElement::DQM_KIND_INT ) ) {
208  val = me->valueString();
209  val = val.substr(val.find("=")+1);
210  }
211 }
212 //
213 // -- go to a given Directory
214 //
216  std::string currDir = dqm_store->pwd();
217  std::string dirName = currDir.substr(currDir.find_last_of("/")+1);
218  if (dirName.find(name) == 0) {
219  return true;
220  }
221  std::vector<std::string> subDirVec = dqm_store->getSubdirs();
222  for (std::vector<std::string>::const_iterator ic = subDirVec.begin();
223  ic != subDirVec.end(); ic++) {
224  std::string fname = (*ic);
225  if (
226  (fname.find("Reference") != std::string::npos) ||
227  (fname.find("AlCaReco") != std::string::npos) ||
228  (fname.find("HLT") != std::string::npos) ||
229  (fname.find("IsolatedBunches") != std::string::npos)
230  ) continue;
231  dqm_store->cd(fname);
232  if (!goToDir(dqm_store, name)) dqm_store->goUp();
233  else return true;
234  }
235  return false;
236 }
237 //
238 // -- Get Sub Detector tag from DetId
239 //
241  StripSubdetector subdet(det_id);
242  subdet_tag = "";
243  switch (subdet.subdetId())
244  {
246  {
247  subdet_tag = "TIB";
248  break;
249  }
251  {
252 
253  if (tTopo->tidSide(det_id) == 2) {
254  subdet_tag = "TIDF";
255  } else if (tTopo->tidSide(det_id) == 1) {
256  subdet_tag = "TIDB";
257  }
258  break;
259  }
261  {
262  subdet_tag = "TOB";
263  break;
264  }
266  {
267 
268  if (tTopo->tecSide(det_id) == 2) {
269  subdet_tag = "TECF";
270  } else if (tTopo->tecSide(det_id) == 1) {
271  subdet_tag = "TECB";
272  }
273  break;
274  }
275  }
276 }
277 //
278 // -- Set Bad Channel Flag from hname
279 //
280 void SiStripUtility::setBadModuleFlag(std::string & hname, uint16_t& flg){
281 
282  if (hname.find("FractionOfBadChannels") != std::string::npos) flg |= (1<<0);
283  else if (hname.find("NumberOfDigi") != std::string::npos) flg |= (1<<1);
284  else if (hname.find("NumberOfCluster") != std::string::npos) flg |= (1<<2);
285  else if (hname.find("ExcludedFedChannel") != std::string::npos) flg |= (1<<3);
286  else if (hname.find("DCSError") != std::string::npos) flg |= (1<<4);
287 }
288 //
289 // -- Get the Status Message from Bad Module Flag
290 //
292  if (flag == 0) message += " No Error";
293  else {
294  // message += " Error from :: ";
295  if (((flag >> 0) & 0x1) > 0) message += " Fed BadChannel : ";
296  if (((flag >> 1) & 0x1) > 0) message += " # of Digi : ";
297  if (((flag >> 2) & 0x1) > 0) message += " # of Clusters :";
298  if (((flag >> 3) & 0x1) > 0) message += " Excluded FED Channel ";
299  if (((flag >> 4) & 0x1) > 0) message += " DCSError ";
300  }
301 }
302 //
303 // -- Set Event Info Folder
304 //
306 
307  path = "";
308  dqm_store->cd();
309  if (dqm_store->dirExists(top_dir)) {
310  dqm_store->cd(top_dir);
311  path = dqm_store->pwd();
312  } else {
313  if (SiStripUtility::goToDir(dqm_store, top_dir)) {
314  std::string mdir = "MechanicalView";
315  if (SiStripUtility::goToDir(dqm_store, mdir)) {
316  path = dqm_store->pwd();
317  path = path.substr(0, path.find(mdir)-1);
318  }
319  }
320  }
321 }
static void setBadModuleFlag(std::string &hname, uint16_t &flg)
std::string valueString() const
static const int OTHER
static void getMEValue(MonitorElement *me, std::string &val)
static const int WARNING
bool hasError() const
true if at least of one of the quality tests returned an error
static void getDetectorStatusColor(int status, int &rval, int &gval, int &bval)
bool hasOtherReport() const
true if at least of one of the tests returned some other (non-ok) status
static void getBadModuleStatus(uint16_t flag, std::string &message)
uint16_t size_type
static void split(const std::string &str, std::vector< std::string > &tokens, const std::string &delimiters=" ")
static bool checkME(std::string element, std::string name, std::string &full_path)
unsigned int tidSide(const DetId &id) const
bool dirExists(std::string const &path) const
true if directory exists
Definition: DQMStore.cc:629
bool hasWarning() const
true if at least of one of the quality tests returned a warning
const std::string subdet_tag("SubDet")
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
std::vector< std::string > getSubdirs() const
Definition: DQMStore.cc:1552
std::string const & pwd() const
Definition: DQMStore.cc:533
unsigned long long int rval
Definition: vlib.h:22
static void getMEStatusColor(int status, int &rval, int &gval, int &bval)
void cd()
go to top directory (ie. root)
Definition: DQMStore.cc:540
static int getMEStatus(MonitorElement *me)
static int getMEList(std::string name, std::vector< std::string > &values)
std::vector< QReport * > getQReports() const
get map of QReports
string fname
main script
static void getSubDetectorTag(uint32_t det_id, std::string &subdet_tag, const TrackerTopology *tTopo)
static const int STATUS_OK
void goUp()
equivalent to "cd .."
Definition: DQMStore.cc:576
static void getModuleFolderList(DQMStore *dqm_store, std::vector< std::string > &m_ids)
#define str(s)
static bool goToDir(DQMStore *dqm_store, std::string name)
Kind kind() const
Get the type of the monitor element.
static void getTopFolderPath(DQMStore *dqm_store, std::string top_dir, std::string &path)
static const int ERROR
unsigned int tecSide(const DetId &id) const