CMS 3D CMS Logo

TrackingUtility.cc
Go to the documentation of this file.
3 
5 //
6 // Get a list of MEs in a folder
7 //
8 int TrackingUtility::getMEList(std::string name, std::vector<std::string>& values) {
9  values.clear();
10  std::string prefix_str = name.substr(0, (name.find(":")));
11  prefix_str += "/";
12  std::string temp_str = name.substr(name.find(":") + 1);
13  split(temp_str, values, ",");
14  for (std::vector<std::string>::iterator it = values.begin(); it != values.end(); it++)
15  (*it).insert(0, prefix_str);
16  return values.size();
17 }
18 //
19 // Get a list of MEs in a folder and the path name
20 //
21 int TrackingUtility::getMEList(std::string name, std::string& dir_path, std::vector<std::string>& values) {
22  values.clear();
23  dir_path = name.substr(0, (name.find(":")));
24  dir_path += "/";
25  std::string temp_str = name.substr(name.find(":") + 1);
26  split(temp_str, values, ",");
27  return values.size();
28 }
29 
30 // Check if the requested ME exists in a folder
32  if (name.find(name) == std::string::npos)
33  return false;
34  std::string prefix_str = name.substr(0, (name.find(":")));
35  prefix_str += "/";
36  std::string temp_str = name.substr(name.find(":") + 1);
37  std::vector<std::string> values;
38  split(temp_str, values, ",");
39  for (std::vector<std::string>::iterator it = values.begin(); it != values.end(); it++) {
40  if ((*it).find(me_name) != std::string::npos) {
41  full_path = prefix_str + (*it);
42  return true;
43  }
44  }
45  return false;
46 }
47 //
48 // -- Split a given string into a number of strings using given
49 // delimiters and fill a vector with splitted strings
50 //
51 void TrackingUtility::split(const std::string& str, std::vector<std::string>& tokens, const std::string& delimiters) {
52  // Skip delimiters at beginning.
53  std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
54 
55  // Find first "non-delimiter".
56  std::string::size_type pos = str.find_first_of(delimiters, lastPos);
57 
58  while (std::string::npos != pos || std::string::npos != lastPos) {
59  // Found a token, add it to the std::vector.
60  tokens.push_back(str.substr(lastPos, pos - lastPos));
61 
62  // Skip delimiters. Note the "not_of"
63  lastPos = str.find_first_not_of(delimiters, pos);
64 
65  // Find next "non-delimiter"
66  pos = str.find_first_of(delimiters, lastPos);
67  }
68 }
69 //
70 // -- Get Color code from Status
71 //
72 void TrackingUtility::getMEStatusColor(int status, int& rval, int& gval, int& bval) {
73  if (status == dqm::qstatus::STATUS_OK) {
74  rval = 0;
75  gval = 255;
76  bval = 0;
77  } else if (status == dqm::qstatus::WARNING) {
78  rval = 255;
79  gval = 255;
80  bval = 0;
81  } else if (status == dqm::qstatus::ERROR) {
82  rval = 255;
83  gval = 0;
84  bval = 0;
85  } else if (status == dqm::qstatus::OTHER) {
86  rval = 255;
87  gval = 150;
88  bval = 0;
89  } else {
90  rval = 0;
91  gval = 0;
92  bval = 255;
93  }
94 }
95 //
96 // -- Get Color code from Status
97 //
99  if (status == dqm::qstatus::STATUS_OK) {
100  tag = "Ok";
101  icol = 3;
102  } else if (status == dqm::qstatus::WARNING) {
103  tag = "Warning";
104  icol = 5;
105  } else if (status == dqm::qstatus::ERROR) {
106  tag = "Error";
107  icol = 2;
108  } else if (status == dqm::qstatus::OTHER) {
109  tag = "Other";
110  icol = 1;
111  } else {
112  tag = " ";
113  icol = 1;
114  }
115 }
116 
117 //
118 // -- Get Status of Monitor Element
119 //
121  int status = 0;
122  if (me->getQReports().empty()) {
123  status = 0;
124  } else if (me->hasError()) {
125  status = dqm::qstatus::ERROR;
126  } else if (me->hasWarning()) {
127  status = dqm::qstatus::WARNING;
128  } else if (me->hasOtherReport()) {
129  status = dqm::qstatus::OTHER;
130  } else {
131  status = dqm::qstatus::STATUS_OK;
132  }
133  return status;
134 }
135 //
136 // -- Fill Module Names
137 //
139  DQMStore::IGetter& igetter,
140  std::vector<std::string>& mfolders) {
141  std::string currDir = ibooker.pwd();
142  if (currDir.find("module_") != std::string::npos) {
143  // std::string mId = currDir.substr(currDir.find("module_")+7, 9);
144  mfolders.push_back(currDir);
145  } else {
146  std::vector<std::string> subdirs = igetter.getSubdirs();
147  for (std::vector<std::string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
148  ibooker.cd(*it);
149  getModuleFolderList(ibooker, igetter, mfolders);
150  ibooker.goUp();
151  }
152  }
153 }
154 //
155 // -- Get Status of Monitor Element
156 //
158  int status = 0;
159  if (me->getQReports().empty()) {
160  status = 0;
161  bad_channels = -1;
162  } else {
163  std::vector<QReport*> qreports = me->getQReports();
164  bad_channels = qreports[0]->getBadChannels().size();
165  if (me->hasError()) {
166  status = dqm::qstatus::ERROR;
167  } else if (me->hasWarning()) {
168  status = dqm::qstatus::WARNING;
169  } else if (me->hasOtherReport()) {
170  status = dqm::qstatus::OTHER;
171  } else {
172  status = dqm::qstatus::STATUS_OK;
173  }
174  }
175  return status;
176 }
177 //
178 // -- Get Status of Monitor Element
179 //
181  val = "";
182  if (me && (me->kind() == MonitorElement::Kind::REAL || me->kind() == MonitorElement::Kind::INT)) {
183  val = me->valueString();
184  val = val.substr(val.find("=") + 1);
185  }
186 }
187 //
188 // -- go to a given Directory
189 //
191  std::string currDir = ibooker.pwd();
192  std::string dirName = currDir.substr(currDir.find_last_of("/") + 1);
193  if (dirName.find(name) == 0) {
194  return true;
195  }
196  std::vector<std::string> subDirVec = igetter.getSubdirs();
197  for (std::vector<std::string>::const_iterator ic = subDirVec.begin(); ic != subDirVec.end(); ic++) {
198  std::string fname = (*ic);
199  if ((fname.find("Reference") != std::string::npos) || (fname.find("AlCaReco") != std::string::npos) ||
200  (fname.find("HLT") != std::string::npos))
201  continue;
202  igetter.cd(fname);
203  if (!goToDir(ibooker, igetter, name))
204  ibooker.goUp();
205  else
206  return true;
207  }
208  return false;
209 }
210 //
211 // -- Set Bad Channel Flag from hname
212 //
213 void TrackingUtility::setBadModuleFlag(std::string& hname, uint16_t& flg) {
214  if (hname.find("FractionOfBadChannels") != std::string::npos)
215  flg |= (1 << 0);
216  else if (hname.find("NumberOfDigi") != std::string::npos)
217  flg |= (1 << 1);
218  else if (hname.find("NumberOfCluster") != std::string::npos)
219  flg |= (1 << 2);
220  else if (hname.find("ExcludedFedChannel") != std::string::npos)
221  flg |= (1 << 3);
222  else if (hname.find("DCSError") != std::string::npos)
223  flg |= (1 << 4);
224 }
225 //
226 // -- Get the Status Message from Bad Module Flag
227 //
229  if (flag == 0)
230  message += " No Error";
231  else {
232  // message += " Error from :: ";
233  if (((flag >> 0) & 0x1) > 0)
234  message += " Fed BadChannel : ";
235  if (((flag >> 1) & 0x1) > 0)
236  message += " # of Digi : ";
237  if (((flag >> 2) & 0x1) > 0)
238  message += " # of Clusters :";
239  if (((flag >> 3) & 0x1) > 0)
240  message += " Excluded FED Channel ";
241  if (((flag >> 4) & 0x1) > 0)
242  message += " DCSError ";
243  }
244 }
245 //
246 // -- Set Event Info Folder
247 //
249  DQMStore::IGetter& igetter,
250  std::string top_dir,
251  std::string& path) {
252  path = "";
253  ibooker.cd();
254  if (igetter.dirExists(top_dir)) {
255  ibooker.cd(top_dir);
256  path = ibooker.pwd();
257  } else {
258  if (TrackingUtility::goToDir(ibooker, igetter, top_dir)) {
259  std::string tdir = "TrackParameters";
260  if (TrackingUtility::goToDir(ibooker, igetter, tdir)) {
261  path = ibooker.pwd();
262  path = path.substr(0, path.find(tdir) - 1);
263  }
264  }
265  }
266 }
static void getModuleFolderList(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, std::vector< std::string > &m_ids)
static const int OTHER
static const int WARNING
Kind kind() const
Get the type of the monitor element.
bool hasOtherReport() const
true if at least of one of the tests returned some other (non-ok) status
static int getMEList(std::string name, std::vector< std::string > &values)
uint16_t size_type
static bool checkME(std::string element, std::string name, std::string &full_path)
static int getMEStatus(MonitorElement *me)
static void split(const std::string &str, std::vector< std::string > &tokens, const std::string &delimiters=" ")
bool hasWarning() const
true if at least of one of the quality tests returned a warning
static void getBadModuleStatus(uint16_t flag, std::string &message)
bool dirExists(std::string const &path)
Definition: DQMStore.cc:461
static bool goToDir(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, std::string name)
std::vector< QReport * > getQReports() const
get map of QReports
unsigned long long int rval
Definition: vlib.h:21
static void getMEStatusColor(int status, int &rval, int &gval, int &bval)
static void setBadModuleFlag(std::string &hname, uint16_t &flg)
bool hasError() const
true if at least of one of the quality tests returned an error
std::string valueString() const
static void getMEValue(MonitorElement *me, std::string &val)
string fname
main script
static const int STATUS_OK
#define str(s)
static void getTopFolderPath(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, std::string top_dir, std::string &path)
static const int ERROR
std::vector< std::string > getSubdirs()
Definition: DQMStore.cc:453