CMS 3D CMS Logo

/data/git/CMSSW_5_3_11_patch5/src/DQM/CSCMonitorModule/interface/CSCDQM_HistoDef.h

Go to the documentation of this file.
00001 /*
00002  * =====================================================================================
00003  *
00004  *       Filename:  HistoDef.h
00005  *
00006  *    Description:  Histo Type Classes that are being used by EventProcessor
00007  *    to request histograms. 
00008  *
00009  *        Version:  1.0
00010  *        Created:  10/03/2008 11:54:31 AM
00011  *       Revision:  none
00012  *       Compiler:  gcc
00013  *
00014  *         Author:  Valdas Rapsevicius (VR), Valdas.Rapsevicius@cern.ch
00015  *        Company:  CERN, CH
00016  *
00017  * =====================================================================================
00018  */
00019 
00020 #ifndef CSCDQM_HistoDef_H
00021 #define CSCDQM_HistoDef_H 
00022 
00023 #include <string>
00024 #include <iostream>  
00025 
00026 #include "DQM/CSCMonitorModule/interface/CSCDQM_Utility.h"
00027 #include "DQM/CSCMonitorModule/interface/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 "DQM/CSCMonitorModule/interface/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