CMS 3D CMS Logo

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