Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef CSCDQM_HistoDef_H
00021 #define CSCDQM_HistoDef_H
00022
00023 #include <string>
00024 #include <iostream>
00025
00026 #include "CSCDQM_Utility.h"
00027 #include "CSCDQM_Logger.h"
00028
00029 namespace cscdqm {
00030
00032 typedef std::string HistoName;
00033
00035 typedef unsigned int HistoId;
00036
00038 typedef unsigned int HwId;
00039
00040 namespace h {
00042 const HistoName HISTO_SKIP = "0";
00043 }
00044
00046 static const char PATH_FED[] = "FED_%03d";
00047
00049 static const char PATH_DDU[] = "DDU_%02d";
00050
00052 static const char PATH_CSC[] = "CSC_%03d_%02d";
00053
00054 static const TPRegexp REGEXP_ONDEMAND("^.*%d.*$");
00055
00056 #include "CSCDQM_HistoNames.h"
00057
00062 class HistoDef {
00063
00064 private:
00065
00067 HistoId id;
00068
00069 public:
00070
00076 HistoDef(const HistoId p_id) : id(p_id) { }
00077
00081 virtual ~HistoDef() { }
00082
00087 const HistoId getId() const { return id; }
00088
00093 const HistoName& getHistoName() const { return h::names[id]; }
00094
00101 virtual const std::string getName() const { return getHistoName(); }
00102
00108 const std::string getFullPath() const {
00109 std::string path(getPath());
00110 if (path.size() > 0) path.append("/");
00111 path.append(getName());
00112 return path;
00113 }
00114
00120 const bool operator== (const HistoDef& t) const {
00121 if (getId() != t.getId()) return false;
00122 if (getFEDId() != t.getFEDId()) return false;
00123 if (getDDUId() != t.getDDUId()) return false;
00124 if (getCrateId() != t.getCrateId()) return false;
00125 if (getDMBId() != t.getDMBId()) return false;
00126 if (getAddId() != t.getAddId()) return false;
00127 return true;
00128 }
00129
00135 const HistoDef& operator= (const HistoDef& t) {
00136 id = t.getId();
00137 return *this;
00138 }
00139
00145 const bool operator< (const HistoDef& t) const {
00146 if (getId() < t.getId()) return true;
00147 if (getFEDId() < t.getFEDId()) return true;
00148 if (getDDUId() < t.getDDUId()) return true;
00149 if (getCrateId() < t.getCrateId()) return true;
00150 if (getDMBId() < t.getDMBId()) return true;
00151 if (getAddId() < t.getAddId()) return true;
00152 return false;
00153 }
00154
00161 friend std::ostream& operator<<(std::ostream& out, const HistoDef& t) {
00162 return out << t.getFullPath();
00163 }
00164
00169 virtual const std::string getPath() const { return ""; }
00170
00175 virtual const HwId getCrateId() const { return 0; }
00176
00181 virtual const HwId getDMBId() const { return 0; }
00182
00188 virtual const HwId getAddId() const { return 0; }
00189
00194 virtual const HwId getFEDId() const { return 0; }
00195
00200 virtual const HwId getDDUId() const { return 0; }
00201
00207 virtual const std::string processTitle(const std::string& p_title) const {
00208 return p_title;
00209 }
00210
00217 static const bool getHistoIdByName(const std::string& p_name, HistoId& p_id) {
00218 for (HistoId i = 0; i < h::namesSize; i++) {
00219 if (p_name.compare(h::names[i]) == 0) {
00220 p_id = i;
00221 return true;
00222 }
00223 }
00224 return false;
00225 }
00226
00232 static const std::string getHistoKeyById(const HistoId& p_id) {
00233 return h::keys[p_id];
00234 }
00235
00242 static const std::string processName(const HistoName& p_name, const HwId p_id) {
00243 if (Utility::regexMatch(REGEXP_ONDEMAND, p_name)) {
00244 return Form(p_name.c_str(), p_id);
00245 }
00246 return p_name;
00247 }
00248
00249 };
00250
00255 class EMUHistoDef : public HistoDef {
00256
00257 public:
00258
00264 EMUHistoDef(const HistoId p_id) : HistoDef(p_id) { }
00265
00266 };
00267
00272 class FEDHistoDef : public HistoDef {
00273
00274 private:
00275
00276 HwId fedId;
00277
00278 public:
00279
00286 FEDHistoDef(const HistoId p_id, const HwId p_fedId) : HistoDef(p_id), fedId(p_fedId) { }
00287 const HwId getFEDId() const { return fedId; }
00288 const std::string getPath() const { return getPath(fedId); }
00289
00295 static const std::string getPath(const HwId p_fedId) {
00296 return Form(PATH_FED, p_fedId);
00297 }
00298
00305 const FEDHistoDef& operator= (const FEDHistoDef& t) {
00306 HistoDef *h1 = const_cast<FEDHistoDef*>(this);
00307 const HistoDef *h2 = &t;
00308 *h1 = *h2;
00309 fedId = t.getFEDId();
00310 return *this;
00311 }
00312
00313 const std::string processTitle(const std::string& p_title) const {
00314 return processName(p_title.c_str(), getFEDId());
00315 }
00316
00317 };
00318
00323 class DDUHistoDef : public HistoDef {
00324
00325 private:
00326
00327 HwId dduId;
00328
00329 public:
00330
00337 DDUHistoDef(const HistoId p_id, const HwId p_dduId) : HistoDef(p_id), dduId(p_dduId) { }
00338 const HwId getDDUId() const { return dduId; }
00339 const std::string getPath() const { return getPath(dduId); }
00340
00346 static const std::string getPath(const HwId p_dduId) {
00347 return Form(PATH_DDU, p_dduId);
00348 }
00349
00356 const DDUHistoDef& operator= (const DDUHistoDef& t) {
00357 HistoDef *h1 = const_cast<DDUHistoDef*>(this);
00358 const HistoDef *h2 = &t;
00359 *h1 = *h2;
00360 dduId = t.getDDUId();
00361 return *this;
00362 }
00363
00364 const std::string processTitle(const std::string& p_title) const {
00365 return processName(p_title.c_str(), getDDUId());
00366 }
00367
00368 };
00369
00374 class CSCHistoDef : public HistoDef {
00375
00376 private:
00377
00379 HwId crateId;
00381 HwId dmbId;
00383 HwId addId;
00384
00385 public:
00386
00396 CSCHistoDef(const HistoId p_id, const HwId p_crateId, const HwId p_dmbId, const HwId p_addId = 0) :
00397 HistoDef(p_id), crateId(p_crateId), dmbId(p_dmbId), addId(p_addId) { }
00398
00399 const HwId getCrateId() const { return crateId; }
00400 const HwId getDMBId() const { return dmbId; }
00401 const HwId getAddId() const { return addId; }
00402 const std::string getName() const { return processName(getHistoName(), getAddId()); }
00403 const std::string getPath() const { return getPath(crateId, dmbId); }
00404
00411 static const std::string getPath(const HwId p_crateId, const HwId p_dmbId) {
00412 return Form(PATH_CSC, p_crateId, p_dmbId);
00413 }
00414
00421 const CSCHistoDef& operator= (const CSCHistoDef& t) {
00422 HistoDef *h1 = const_cast<CSCHistoDef*>(this);
00423 const HistoDef *h2 = &t;
00424 *h1 = *h2;
00425 crateId = t.getCrateId();
00426 dmbId = t.getDMBId();
00427 addId = t.getAddId();
00428 return *this;
00429 }
00430
00431 const std::string processTitle(const std::string& p_title) const {
00432 return processName(p_title.c_str(), getAddId());
00433 }
00434
00435
00436 };
00437
00442 class ParHistoDef : public HistoDef {
00443
00444 private:
00445
00449 HistoName name;
00450
00451
00452 public:
00453
00459 ParHistoDef(const HistoName& p_name) : HistoDef(Utility::fastHash(p_name.c_str())), name(p_name) { }
00460
00466 ParHistoDef(const HistoId p_id) : HistoDef(p_id) {
00467 name = HistoDef::getHistoName();
00468 }
00469
00470 const HistoName& getHistoName() const { return name; }
00471
00472 };
00473
00474 static const std::type_info& EMUHistoDefT = typeid(cscdqm::EMUHistoDef);
00475 static const std::type_info& FEDHistoDefT = typeid(cscdqm::FEDHistoDef);
00476 static const std::type_info& DDUHistoDefT = typeid(cscdqm::DDUHistoDef);
00477 static const std::type_info& CSCHistoDefT = typeid(cscdqm::CSCHistoDef);
00478 static const std::type_info& ParHistoDefT = typeid(cscdqm::ParHistoDef);
00479
00480 }
00481
00482 #endif
00483