File indexing completed on 2024-04-06 12:06:57
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef CSCDQM_HistoDef_H
0021 #define CSCDQM_HistoDef_H
0022
0023 #include <string>
0024 #include <iostream>
0025
0026 #include "CSCDQM_Utility.h"
0027 #include "CSCDQM_Logger.h"
0028
0029 namespace cscdqm {
0030
0031
0032 typedef std::string HistoName;
0033
0034
0035 typedef unsigned int HistoId;
0036
0037
0038 typedef unsigned int HwId;
0039
0040 namespace h {
0041
0042 const HistoName HISTO_SKIP = "0";
0043 }
0044
0045
0046 static const char PATH_FED[] = "FED_%03d";
0047
0048
0049 static const char PATH_DDU[] = "DDU_%02d";
0050
0051
0052 static const char PATH_CSC[] = "CSC_%03d_%02d";
0053
0054 static const TPRegexp REGEXP_ONDEMAND("^.*%d.*$");
0055
0056 #include "CSCDQM_HistoNames.icc"
0057
0058
0059
0060
0061
0062 class HistoDef {
0063 private:
0064
0065 HistoId id;
0066
0067 public:
0068
0069
0070
0071
0072
0073 HistoDef(const HistoId p_id) : id(p_id) {}
0074
0075
0076
0077
0078 HistoDef(const HistoDef&) = default;
0079
0080
0081
0082
0083 virtual ~HistoDef() {}
0084
0085
0086
0087
0088
0089 const HistoId getId() const { return id; }
0090
0091
0092
0093
0094
0095 const HistoName& getHistoName() const { return h::names[id]; }
0096
0097
0098
0099
0100
0101
0102
0103 virtual const std::string getName() const { return getHistoName(); }
0104
0105
0106
0107
0108
0109
0110 const std::string getFullPath() const {
0111 std::string path(getPath());
0112 if (!path.empty())
0113 path.append("/");
0114 path.append(getName());
0115 return path;
0116 }
0117
0118
0119
0120
0121
0122
0123 const bool operator==(const HistoDef& t) const {
0124 if (getId() != t.getId())
0125 return false;
0126 if (getFEDId() != t.getFEDId())
0127 return false;
0128 if (getDDUId() != t.getDDUId())
0129 return false;
0130 if (getCrateId() != t.getCrateId())
0131 return false;
0132 if (getDMBId() != t.getDMBId())
0133 return false;
0134 if (getAddId() != t.getAddId())
0135 return false;
0136 return true;
0137 }
0138
0139
0140
0141
0142
0143
0144 const HistoDef& operator=(const HistoDef& t) {
0145 id = t.getId();
0146 return *this;
0147 }
0148
0149
0150
0151
0152
0153
0154 const bool operator<(const HistoDef& t) const {
0155 if (getId() < t.getId())
0156 return true;
0157 if (getFEDId() < t.getFEDId())
0158 return true;
0159 if (getDDUId() < t.getDDUId())
0160 return true;
0161 if (getCrateId() < t.getCrateId())
0162 return true;
0163 if (getDMBId() < t.getDMBId())
0164 return true;
0165 if (getAddId() < t.getAddId())
0166 return true;
0167 return false;
0168 }
0169
0170
0171
0172
0173
0174
0175
0176 friend std::ostream& operator<<(std::ostream& out, const HistoDef& t) { return out << t.getFullPath(); }
0177
0178
0179
0180
0181
0182 virtual const std::string getPath() const { return ""; }
0183
0184
0185
0186
0187
0188 virtual const HwId getCrateId() const { return 0; }
0189
0190
0191
0192
0193
0194 virtual const HwId getDMBId() const { return 0; }
0195
0196
0197
0198
0199
0200
0201 virtual const HwId getAddId() const { return 0; }
0202
0203
0204
0205
0206
0207 virtual const HwId getFEDId() const { return 0; }
0208
0209
0210
0211
0212
0213 virtual const HwId getDDUId() const { return 0; }
0214
0215
0216
0217
0218
0219
0220 virtual const std::string processTitle(const std::string& p_title) const { return p_title; }
0221
0222
0223
0224
0225
0226
0227
0228 static const bool getHistoIdByName(const std::string& p_name, HistoId& p_id) {
0229 for (HistoId i = 0; i < h::namesSize; i++) {
0230 if (p_name == h::names[i]) {
0231 p_id = i;
0232 return true;
0233 }
0234 }
0235 return false;
0236 }
0237
0238
0239
0240
0241
0242
0243 static const std::string getHistoKeyById(const HistoId& p_id) { return h::keys[p_id]; }
0244
0245
0246
0247
0248
0249
0250
0251 static const std::string processName(const HistoName& p_name, const HwId p_id) {
0252 if (Utility::regexMatch(REGEXP_ONDEMAND, p_name)) {
0253 return Form(p_name.c_str(), p_id);
0254 }
0255 return p_name;
0256 }
0257 };
0258
0259
0260
0261
0262
0263 class EMUHistoDef : public HistoDef {
0264 public:
0265
0266
0267
0268
0269
0270 EMUHistoDef(const HistoId p_id) : HistoDef(p_id) {}
0271 };
0272
0273
0274
0275
0276
0277 class FEDHistoDef : public HistoDef {
0278 private:
0279 HwId fedId;
0280
0281 public:
0282
0283
0284
0285
0286
0287
0288 FEDHistoDef(const HistoId p_id, const HwId p_fedId) : HistoDef(p_id), fedId(p_fedId) {}
0289 const HwId getFEDId() const override { return fedId; }
0290 const std::string getPath() const override { return getPath(fedId); }
0291
0292
0293
0294
0295
0296
0297 static const std::string getPath(const HwId p_fedId) { return Form(PATH_FED, p_fedId); }
0298
0299
0300
0301
0302
0303
0304
0305 const FEDHistoDef& operator=(const FEDHistoDef& t) {
0306 HistoDef* h1 = const_cast<FEDHistoDef*>(this);
0307 const HistoDef* h2 = &t;
0308 *h1 = *h2;
0309 fedId = t.getFEDId();
0310 return *this;
0311 }
0312
0313 const std::string processTitle(const std::string& p_title) const override {
0314 return processName(p_title, getFEDId());
0315 }
0316 };
0317
0318
0319
0320
0321
0322 class DDUHistoDef : public HistoDef {
0323 private:
0324 HwId dduId;
0325
0326 public:
0327
0328
0329
0330
0331
0332
0333 DDUHistoDef(const HistoId p_id, const HwId p_dduId) : HistoDef(p_id), dduId(p_dduId) {}
0334 const HwId getDDUId() const override { return dduId; }
0335 const std::string getPath() const override { return getPath(dduId); }
0336
0337
0338
0339
0340
0341
0342 static const std::string getPath(const HwId p_dduId) { return Form(PATH_DDU, p_dduId); }
0343
0344
0345
0346
0347
0348
0349
0350 const DDUHistoDef& operator=(const DDUHistoDef& t) {
0351 HistoDef* h1 = const_cast<DDUHistoDef*>(this);
0352 const HistoDef* h2 = &t;
0353 *h1 = *h2;
0354 dduId = t.getDDUId();
0355 return *this;
0356 }
0357
0358 const std::string processTitle(const std::string& p_title) const override {
0359 return processName(p_title, getDDUId());
0360 }
0361 };
0362
0363
0364
0365
0366
0367 class CSCHistoDef : public HistoDef {
0368 private:
0369
0370 HwId crateId;
0371
0372 HwId dmbId;
0373
0374 HwId addId;
0375
0376 public:
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386 CSCHistoDef(const HistoId p_id, const HwId p_crateId, const HwId p_dmbId, const HwId p_addId = 0)
0387 : HistoDef(p_id), crateId(p_crateId), dmbId(p_dmbId), addId(p_addId) {}
0388
0389 const HwId getCrateId() const override { return crateId; }
0390 const HwId getDMBId() const override { return dmbId; }
0391 const HwId getAddId() const override { return addId; }
0392 const std::string getName() const override { return processName(getHistoName(), getAddId()); }
0393 const std::string getPath() const override { return getPath(crateId, dmbId); }
0394
0395
0396
0397
0398
0399
0400
0401 static const std::string getPath(const HwId p_crateId, const HwId p_dmbId) {
0402 return Form(PATH_CSC, p_crateId, p_dmbId);
0403 }
0404
0405
0406
0407
0408
0409
0410
0411 const CSCHistoDef& operator=(const CSCHistoDef& t) {
0412 HistoDef* h1 = const_cast<CSCHistoDef*>(this);
0413 const HistoDef* h2 = &t;
0414 *h1 = *h2;
0415 crateId = t.getCrateId();
0416 dmbId = t.getDMBId();
0417 addId = t.getAddId();
0418 return *this;
0419 }
0420
0421 const std::string processTitle(const std::string& p_title) const override {
0422 return processName(p_title, getAddId());
0423 }
0424 };
0425
0426
0427
0428
0429
0430 class ParHistoDef : public HistoDef {
0431 private:
0432
0433
0434
0435 HistoName name;
0436
0437 public:
0438
0439
0440
0441
0442
0443 ParHistoDef(const HistoName& p_name) : HistoDef(Utility::fastHash(p_name.c_str())), name(p_name) {}
0444
0445
0446
0447
0448
0449
0450 ParHistoDef(const HistoId p_id) : HistoDef(p_id) { name = HistoDef::getHistoName(); }
0451
0452 const HistoName& getHistoName() const { return name; }
0453 };
0454
0455 static const std::type_info& EMUHistoDefT = typeid(cscdqm::EMUHistoDef);
0456 static const std::type_info& FEDHistoDefT = typeid(cscdqm::FEDHistoDef);
0457 static const std::type_info& DDUHistoDefT = typeid(cscdqm::DDUHistoDef);
0458 static const std::type_info& CSCHistoDefT = typeid(cscdqm::CSCHistoDef);
0459 static const std::type_info& ParHistoDefT = typeid(cscdqm::ParHistoDef);
0460
0461 }
0462
0463 #endif