From 02ef71cd3117340b9e66e6f09a2228047dd55b49 Mon Sep 17 00:00:00 2001 From: Lassi Tuura <sha1-92571bde2a1dfb51d2414b8dbe0d8e18611879de@cern.ch> Date: Mon, 5 Oct 2009 14:07:39 +0000 Subject: [PATCH] --- yaml --- r: 74735 b: "refs/heads/CMSSW_7_1_X" c: 585a3af8ed67ff66a1af6d5c78a81f3ef5dee2a7 h: "refs/heads/CMSSW_7_1_X" i: 74733: 0fba79e23cc43ee87d44f5e0349990628b748105 74731: 815a1f3d63c7b60a735c9f519398f4e89df05249 74727: 4786284ed3c486b1c6b201d70e3fdb7155437a23 74719: f5500461a1ff746b768f2e1008b96afb78f6c5da v: v3 --- [refs] | 2 +- .../Core/interface/MonitorElement.h | 136 ++-- trunk/DQMServices/Core/src/MonitorElement.cc | 614 ++++++++++-------- 3 files changed, 427 insertions(+), 325 deletions(-) diff --git a/[refs] b/[refs] index 984ec3a5cc4a6..f4b8d50e38656 100644 --- a/[refs] +++ b/[refs] @@ -1,3 +1,3 @@ --- refs/heads/gh-pages: 09c786f70121f131b3715aaf3464996502bbeb7e -"refs/heads/CMSSW_7_1_X": 577f3dd9f6169f571ece1d91e80eecc4d3088a85 +"refs/heads/CMSSW_7_1_X": 585a3af8ed67ff66a1af6d5c78a81f3ef5dee2a7 diff --git a/trunk/DQMServices/Core/interface/MonitorElement.h b/trunk/DQMServices/Core/interface/MonitorElement.h index 1f4da71740e60..f9c15d444ac75 100755 --- a/trunk/DQMServices/Core/interface/MonitorElement.h +++ b/trunk/DQMServices/Core/interface/MonitorElement.h @@ -33,61 +33,57 @@ class QCriterion; /** The base class for all MonitorElements (ME) */ class MonitorElement { + friend class DQMStore; + friend class DQMService; public: - struct Value + struct Scalar { int64_t num; double real; std::string str; - TObject *tobj; }; enum Kind { - DQM_KIND_INVALID, - DQM_KIND_INT, - DQM_KIND_REAL, - DQM_KIND_STRING, - DQM_KIND_TH1F, - DQM_KIND_TH1S, - DQM_KIND_TH1D, - DQM_KIND_TH2F, - DQM_KIND_TH2S, - DQM_KIND_TH2D, - DQM_KIND_TH3F, - DQM_KIND_TPROFILE, - DQM_KIND_TPROFILE2D + DQM_KIND_INVALID = DQMNet::DQM_PROP_TYPE_INVALID, + DQM_KIND_INT = DQMNet::DQM_PROP_TYPE_INT, + DQM_KIND_REAL = DQMNet::DQM_PROP_TYPE_REAL, + DQM_KIND_STRING = DQMNet::DQM_PROP_TYPE_STRING, + DQM_KIND_TH1F = DQMNet::DQM_PROP_TYPE_TH1F, + DQM_KIND_TH1S = DQMNet::DQM_PROP_TYPE_TH1S, + DQM_KIND_TH1D = DQMNet::DQM_PROP_TYPE_TH1D, + DQM_KIND_TH2F = DQMNet::DQM_PROP_TYPE_TH2F, + DQM_KIND_TH2S = DQMNet::DQM_PROP_TYPE_TH2S, + DQM_KIND_TH2D = DQMNet::DQM_PROP_TYPE_TH2D, + DQM_KIND_TH3F = DQMNet::DQM_PROP_TYPE_TH3F, + DQM_KIND_TPROFILE = DQMNet::DQM_PROP_TYPE_TPROF, + DQM_KIND_TPROFILE2D = DQMNet::DQM_PROP_TYPE_TPROF2D }; typedef std::vector<QReport>::const_iterator QReportIterator; - static const uint32_t DQM_FLAG_RESET = 0x01000000; - static const uint32_t DQM_FLAG_ACCUMULATE = 0x02000000; - private: - Kind kind_; - DQMNet::CoreObject data_; - std::string name_; - std::string path_; - std::vector<QReport> qreports_; - size_t nqerror_; //< errors from last set of quality tests - size_t nqwarning_; //< warnings from last set of quality tests - size_t nqother_; //< other quality reports (not an error, warning or ok) - - Value curvalue_; - TH1 *refvalue_; - - MonitorElement *initialise(Kind kind, const std::string &path); - MonitorElement *initialise(Kind kind, const std::string &path, TH1 *rootobj); - MonitorElement *initialise(Kind kind, const std::string &path, const std::string &value); + DQMNet::CoreObject data_; //< Core object information. + Scalar scalar_; //< Current scalar value. + TH1 *object_; //< Current ROOT object value. + TH1 *reference_; //< Current ROOT reference object. + TH1 *refvalue_; //< Soft reference if any. + std::vector<QReport> qreports_; //< QReports associated to this object. + + MonitorElement *initialise(Kind kind); + MonitorElement *initialise(Kind kind, TH1 *rootobj); + MonitorElement *initialise(Kind kind, const std::string &value); public: MonitorElement(void); + MonitorElement(const std::string *path, const std::string &name); + MonitorElement(const MonitorElement &); + MonitorElement &operator=(const MonitorElement &); ~MonitorElement(void); /// Get the type of the monitor element. Kind kind(void) const - { return kind_; } + { return Kind(data_.flags & DQMNet::DQM_PROP_TYPE_MASK); } /// Get the object flags. uint32_t flags(void) const @@ -95,28 +91,36 @@ class MonitorElement /// get name of ME const std::string &getName(void) const - { return name_; } + { return data_.objname; } /// get pathname of parent folder const std::string &getPathname(void) const - { return path_; } + { return *data_.dirname; } /// get full name of ME including Pathname - const std::string &getFullname(void) const - { return data_.name; } + const std::string getFullname(void) const + { + std::string path; + path.reserve(data_.dirname->size() + data_.objname.size() + 2); + path += *data_.dirname; + if (! data_.dirname->empty()) + path += '/'; + path += data_.objname; + return path; + } /// true if ME was updated in last monitoring cycle bool wasUpdated(void) const - { return data_.flags & DQMNet::DQM_FLAG_NEW; } + { return data_.flags & DQMNet::DQM_PROP_NEW; } /// Mark the object updated. void update(void) - { data_.flags |= DQMNet::DQM_FLAG_NEW; } + { data_.flags |= DQMNet::DQM_PROP_NEW; } /// specify whether ME should be reset at end of monitoring cycle (default:false); /// (typically called by Sources that control the original ME) void setResetMe(bool flag) - { data_.flags |= DQM_FLAG_RESET; } + { data_.flags |= DQMNet::DQM_PROP_RESET; } void Fill(uint64_t x) { Fill(static_cast<int64_t>(x)); } void Fill(int32_t x) { Fill(static_cast<int64_t>(x)); } @@ -140,19 +144,22 @@ class MonitorElement std::string valueString(void) const; std::string tagString(void) const; + std::string tagLabelString(void) const; std::string qualityTagString(const DQMNet::QValue &qv) const; + void packScalarData(std::string &into, const char *prefix) const; + void packQualityData(std::string &into) const; /// true if at least of one of the quality tests returned an error bool hasError(void) const - { return nqerror_ > 0; } + { return data_.flags & DQMNet::DQM_PROP_REPORT_ERROR; } /// true if at least of one of the quality tests returned a warning bool hasWarning(void) const - { return nqwarning_ > 0; } + { return data_.flags & DQMNet::DQM_PROP_REPORT_WARN; } /// true if at least of one of the tests returned some other (non-ok) status bool hasOtherReport(void) const - { return nqother_ > 0; } + { return data_.flags & DQMNet::DQM_PROP_REPORT_OTHER; } /// get QReport corresponding to <qtname> (null pointer if QReport does not exist) const QReport *getQReport(const std::string &qtname) const; @@ -230,21 +237,21 @@ class MonitorElement /// whether ME contents should be accumulated over multiple monitoring periods; default: false bool isAccumulateEnabled(void) const - { return data_.flags & DQM_FLAG_ACCUMULATE; } + { return data_.flags & DQMNet::DQM_PROP_ACCUMULATE; } private: /// reset "was updated" flag void resetUpdate(void) - { data_.flags &= ~DQMNet::DQM_FLAG_NEW; } + { data_.flags &= ~DQMNet::DQM_PROP_NEW; } /// true if ME should be reset at end of monitoring cycle bool resetMe(void) const - { return data_.flags & DQM_FLAG_RESET; } + { return data_.flags & DQMNet::DQM_PROP_RESET; } /// if true, will accumulate ME contents (over many periods) /// until method is called with flag = false again void setAccumulate(bool flag) - { data_.flags |= DQM_FLAG_ACCUMULATE; } + { data_.flags |= DQMNet::DQM_PROP_ACCUMULATE; } TAxis *getAxis(const char *func, int axis) const; @@ -288,33 +295,34 @@ class MonitorElement TProfile *getRefTProfile(void) const; TProfile2D *getRefTProfile2D(void) const; - const int64_t &getIntValue(void) const + int64_t getIntValue(void) const { - assert(kind_ == DQM_KIND_INT); - return curvalue_.num; + assert(kind() == DQM_KIND_INT); + return scalar_.num; } - const double &getFloatValue(void) const + double getFloatValue(void) const { - assert(kind_ == DQM_KIND_REAL); - return curvalue_.real; + assert(kind() == DQM_KIND_REAL); + return scalar_.real; } const std::string &getStringValue(void) const { - assert(kind_ == DQM_KIND_STRING); - return curvalue_.str; + assert(kind() == DQM_KIND_STRING); + return scalar_.str; } - const DQMNet::TagList &getTags(void) const - { return data_.tags; } - -private: - friend class DQMStore; - friend class DQMService; + DQMNet::TagList getTags(void) const // DEPRECATED + { + DQMNet::TagList tags; + if (data_.flags & DQMNet::DQM_PROP_TAGGED) + tags.push_back(data_.tag); + return tags; + } - //MonitorElement(const MonitorElement &); - //MonitorElement &operator=(const MonitorElement &); + const uint32_t getTag(void) const + { return data_.tag; } }; #endif // DQMSERVICES_CORE_MONITOR_ELEMENT_H diff --git a/trunk/DQMServices/Core/src/MonitorElement.cc b/trunk/DQMServices/Core/src/MonitorElement.cc index b3d4021c1e560..c53193f31d792 100755 --- a/trunk/DQMServices/Core/src/MonitorElement.cc +++ b/trunk/DQMServices/Core/src/MonitorElement.cc @@ -1,3 +1,4 @@ +#define __STDC_FORMAT_MACROS 1 #define DQM_ROOT_METHODS 1 #include "DQMServices/Core/interface/MonitorElement.h" #include "DQMServices/Core/interface/QTest.h" @@ -7,6 +8,8 @@ #include "TList.h" #include <iostream> #include <cassert> +#include <cfloat> +#include <inttypes.h> static TH1 * checkRootObject(const std::string &name, TObject *tobj, const char *func, int reqdim) @@ -16,12 +19,7 @@ checkRootObject(const std::string &name, TObject *tobj, const char *func, int re " element '%s' because it is not a ROOT object.", func, name.c_str()); - TH1 *h = dynamic_cast<TH1 *>(tobj); - if (! h) - raiseDQMError("MonitorElement", "Method '%s' cannot be invoked on monitor" - " element '%s' because it is not a ROOT histogram; it is of" - " type '%s'", func, name.c_str(), typeid(*tobj).name()); - + TH1 *h = static_cast<TH1 *>(tobj); int ndim = h->GetDimension(); if (reqdim < 0 || reqdim > ndim) raiseDQMError("MonitorElement", "Method '%s' cannot be invoked on monitor" @@ -33,33 +31,13 @@ checkRootObject(const std::string &name, TObject *tobj, const char *func, int re } MonitorElement * -MonitorElement::initialise(Kind kind, const std::string &path) +MonitorElement::initialise(Kind kind) { - const char *slash = strrchr(path.c_str(), '/'); - data_.name = path; - kind_ = kind; - if (slash) - { - name_ = slash+1; - path_ = std::string(path.c_str(), slash); - } - else - { - name_ = path; - path_.clear(); - } - switch (kind) { case DQM_KIND_INT: case DQM_KIND_REAL: case DQM_KIND_STRING: - data_.object = new TObjString; - static_cast<TObjString *>(data_.object) - ->SetString(tagString().c_str()); - data_.flags |= DQMNet::DQM_FLAG_SCALAR; - break; - case DQM_KIND_TH1F: case DQM_KIND_TH1S: case DQM_KIND_TH1D: @@ -69,112 +47,172 @@ MonitorElement::initialise(Kind kind, const std::string &path) case DQM_KIND_TH3F: case DQM_KIND_TPROFILE: case DQM_KIND_TPROFILE2D: + data_.flags &= ~DQMNet::DQM_PROP_TYPE_MASK; + data_.flags |= kind; break; default: - raiseDQMError("MonitorElement", "cannot initialise monitor element '%s'" - " to invalid type %d", path.c_str(), (int) kind); + raiseDQMError("MonitorElement", "cannot initialise monitor element" + " to invalid type %d", (int) kind); } return this; } MonitorElement * -MonitorElement::initialise(Kind kind, const std::string &path, TH1 *rootobj) +MonitorElement::initialise(Kind kind, TH1 *rootobj) { - initialise(kind, path); + initialise(kind); switch (kind) { case DQM_KIND_TH1F: assert(dynamic_cast<TH1F *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TH1F *>(reference_)); + object_ = rootobj; break; case DQM_KIND_TH1S: assert(dynamic_cast<TH1S *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TH1S *>(reference_)); + object_ = rootobj; break; case DQM_KIND_TH1D: assert(dynamic_cast<TH1D *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TH1D *>(reference_)); + object_ = rootobj; break; case DQM_KIND_TH2F: assert(dynamic_cast<TH2F *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TH2F *>(reference_)); + object_ = rootobj; break; case DQM_KIND_TH2S: assert(dynamic_cast<TH2S *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TH2S *>(reference_)); + object_ = rootobj; break; case DQM_KIND_TH2D: assert(dynamic_cast<TH2D *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TH1D *>(reference_)); + object_ = rootobj; break; case DQM_KIND_TH3F: assert(dynamic_cast<TH3F *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TH3F *>(reference_)); + object_ = rootobj; break; case DQM_KIND_TPROFILE: assert(dynamic_cast<TProfile *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TProfile *>(reference_)); + object_ = rootobj; break; case DQM_KIND_TPROFILE2D: assert(dynamic_cast<TProfile2D *>(rootobj)); - curvalue_.tobj = data_.object = rootobj; + assert(! reference_ || dynamic_cast<TProfile2D *>(reference_)); + object_ = rootobj; break; default: - raiseDQMError("MonitorElement", "cannot initialise monitor element '%s'" - " as a root object with type %d", path.c_str(), (int) kind); + raiseDQMError("MonitorElement", "cannot initialise monitor element" + " as a root object with type %d", (int) kind); } + if (reference_) + data_.flags |= DQMNet::DQM_PROP_HAS_REFERENCE; + return this; } MonitorElement * -MonitorElement::initialise(Kind kind, const std::string &path, const std::string &value) +MonitorElement::initialise(Kind kind, const std::string &value) { - initialise(kind, path); - if (kind == DQM_KIND_STRING) - { - curvalue_.str = value; - static_cast<TObjString *>(data_.object) - ->SetString(tagString().c_str()); - } + initialise(kind); + if (kind == DQM_KIND_STRING) + scalar_.str = value; else - raiseDQMError("MonitorElement", "cannot initialise monitor element '%s'" - " as a string with type %d", path.c_str(), (int) kind); + raiseDQMError("MonitorElement", "cannot initialise monitor element" + " as a string with type %d", (int) kind); return this; } MonitorElement::MonitorElement(void) - : kind_ (DQM_KIND_INVALID), - nqerror_ (0), - nqwarning_ (0), - nqother_ (0), - refvalue_ (0) + : object_(0), + reference_(0), + refvalue_(0) +{ + data_.version = 0; + data_.dirname = 0; + data_.tag = 0; + data_.flags = DQM_KIND_INVALID | DQMNet::DQM_PROP_NEW; + scalar_.num = 0; + scalar_.real = 0; +} + +MonitorElement::MonitorElement(const std::string *path, const std::string &name) + : object_(0), + reference_(0), + refvalue_(0) { data_.version = 0; - data_.object = 0; - data_.reference = 0; - data_.flags = DQMNet::DQM_FLAG_NEW; + data_.dirname = path; + data_.objname = name; + data_.tag = 0; + data_.flags = DQM_KIND_INVALID | DQMNet::DQM_PROP_NEW; + scalar_.num = 0; + scalar_.real = 0; +} - curvalue_.num = 0; - curvalue_.real = 0; - curvalue_.tobj = 0; +MonitorElement::MonitorElement(const MonitorElement &x) + : data_(x.data_), + scalar_(x.scalar_), + object_(x.object_), + reference_(x.reference_), + refvalue_(x.refvalue_), + qreports_(x.qreports_) +{ + if (object_) + object_ = static_cast<TH1 *>(object_->Clone()); + + if (refvalue_) + refvalue_ = static_cast<TH1 *>(refvalue_->Clone()); +} + +MonitorElement & +MonitorElement::operator=(const MonitorElement &x) +{ + if (this != &x) + { + delete object_; + delete refvalue_; + + data_ = x.data_; + scalar_ = x.scalar_; + object_ = x.object_; + reference_ = x.reference_; + refvalue_ = x.refvalue_; + qreports_ = x.qreports_; + + if (object_) + object_ = static_cast<TH1 *>(object_->Clone()); + + if (refvalue_) + refvalue_ = static_cast<TH1 *>(refvalue_->Clone()); + } + + return *this; } MonitorElement::~MonitorElement(void) { - delete data_.object; + delete object_; delete refvalue_; } @@ -183,12 +221,8 @@ void MonitorElement::Fill(std::string &value) { update(); - if (kind_ == DQM_KIND_STRING) - { - curvalue_.str = value; - static_cast<TObjString *>(data_.object) - ->SetString(tagString().c_str()); - } + if (kind() == DQM_KIND_STRING) + scalar_.str = value; else incompatible(__PRETTY_FUNCTION__); } @@ -198,25 +232,17 @@ void MonitorElement::Fill(double x) { update(); - if (kind_ == DQM_KIND_INT) - { - curvalue_.num = static_cast<int64_t>(x); - static_cast<TObjString *>(data_.object) - ->SetString(tagString().c_str()); - } - else if (kind_ == DQM_KIND_REAL) - { - curvalue_.real = x; - static_cast<TObjString *>(data_.object) - ->SetString(tagString().c_str()); - } - else if (kind_ == DQM_KIND_TH1F) + if (kind() == DQM_KIND_INT) + scalar_.num = static_cast<int64_t>(x); + else if (kind() == DQM_KIND_REAL) + scalar_.real = x; + else if (kind() == DQM_KIND_TH1F) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(x, 1); - else if (kind_ == DQM_KIND_TH1S) + else if (kind() == DQM_KIND_TH1S) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(x, 1); - else if (kind_ == DQM_KIND_TH1D) + else if (kind() == DQM_KIND_TH1D) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(x, 1); else @@ -228,25 +254,17 @@ void MonitorElement::Fill(int64_t x) { update(); - if (kind_ == DQM_KIND_INT) - { - curvalue_.num = static_cast<int64_t>(x); - static_cast<TObjString *>(data_.object) - ->SetString(tagString().c_str()); - } - else if (kind_ == DQM_KIND_REAL) - { - curvalue_.real = static_cast<double>(x); - static_cast<TObjString *>(data_.object) - ->SetString(tagString().c_str()); - } - else if (kind_ == DQM_KIND_TH1F) + if (kind() == DQM_KIND_INT) + scalar_.num = static_cast<int64_t>(x); + else if (kind() == DQM_KIND_REAL) + scalar_.real = static_cast<double>(x); + else if (kind() == DQM_KIND_TH1F) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(static_cast<double>(x), 1); - else if (kind_ == DQM_KIND_TH1S) + else if (kind() == DQM_KIND_TH1S) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(static_cast<double>(x), 1); - else if (kind_ == DQM_KIND_TH1D) + else if (kind() == DQM_KIND_TH1D) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(static_cast<double>(x), 1); else @@ -258,25 +276,25 @@ void MonitorElement::Fill(double x, double yw) { update(); - if (kind_ == DQM_KIND_TH1F) + if (kind() == DQM_KIND_TH1F) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(x, yw); - else if (kind_ == DQM_KIND_TH1S) + else if (kind() == DQM_KIND_TH1S) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(x, yw); - else if (kind_ == DQM_KIND_TH1D) + else if (kind() == DQM_KIND_TH1D) accessRootObject(__PRETTY_FUNCTION__, 1) ->Fill(x, yw); - else if (kind_ == DQM_KIND_TH2F) + else if (kind() == DQM_KIND_TH2F) static_cast<TH2F *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, yw, 1); - else if (kind_ == DQM_KIND_TH2S) + else if (kind() == DQM_KIND_TH2S) static_cast<TH2S *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, yw, 1); - else if (kind_ == DQM_KIND_TH2D) + else if (kind() == DQM_KIND_TH2D) static_cast<TH2D *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, yw, 1); - else if (kind_ == DQM_KIND_TPROFILE) + else if (kind() == DQM_KIND_TPROFILE) static_cast<TProfile *>(accessRootObject(__PRETTY_FUNCTION__, 1)) ->Fill(x, yw, 1); else @@ -290,9 +308,9 @@ void MonitorElement::ShiftFillLast(double y, double ye, int xscale) { update(); - if (kind_ == DQM_KIND_TH1F - || kind_ == DQM_KIND_TH1S - || kind_ == DQM_KIND_TH1D) + if (kind() == DQM_KIND_TH1F + || kind() == DQM_KIND_TH1S + || kind() == DQM_KIND_TH1D) { int nbins = getNbinsX(); int entries = (int)getEntries(); @@ -358,22 +376,22 @@ void MonitorElement::Fill(double x, double y, double zw) { update(); - if (kind_ == DQM_KIND_TH2F) + if (kind() == DQM_KIND_TH2F) static_cast<TH2F *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, y, zw); - else if (kind_ == DQM_KIND_TH2S) + else if (kind() == DQM_KIND_TH2S) static_cast<TH2S *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, y, zw); - else if (kind_ == DQM_KIND_TH2D) + else if (kind() == DQM_KIND_TH2D) static_cast<TH2D *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, y, zw); - else if (kind_ == DQM_KIND_TH3F) + else if (kind() == DQM_KIND_TH3F) static_cast<TH3F *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, y, zw, 1); - else if (kind_ == DQM_KIND_TPROFILE) + else if (kind() == DQM_KIND_TPROFILE) static_cast<TProfile *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, y, zw); - else if (kind_ == DQM_KIND_TPROFILE2D) + else if (kind() == DQM_KIND_TPROFILE2D) static_cast<TProfile2D *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, y, zw, 1); else @@ -385,10 +403,10 @@ void MonitorElement::Fill(double x, double y, double z, double w) { update(); - if (kind_ == DQM_KIND_TH3F) + if (kind() == DQM_KIND_TH3F) static_cast<TH3F *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, y, z, w); - else if (kind_ == DQM_KIND_TPROFILE2D) + else if (kind() == DQM_KIND_TPROFILE2D) static_cast<TProfile2D *>(accessRootObject(__PRETTY_FUNCTION__, 2)) ->Fill(x, y, z, w); else @@ -400,32 +418,65 @@ void MonitorElement::Reset(void) { update(); - if (kind_ == DQM_KIND_INT) - curvalue_.num = 0; - else if (kind_ == DQM_KIND_REAL) - curvalue_.real = 0; - else if (kind_ == DQM_KIND_STRING) - curvalue_.str.clear(); + if (kind() == DQM_KIND_INT) + scalar_.num = 0; + else if (kind() == DQM_KIND_REAL) + scalar_.real = 0; + else if (kind() == DQM_KIND_STRING) + scalar_.str.clear(); else return accessRootObject(__PRETTY_FUNCTION__, 1) ->Reset(); } +/// convert scalar data into a string. +void +MonitorElement::packScalarData(std::string &into, const char *prefix) const +{ + char buf[64]; + if (kind() == DQM_KIND_INT) + { + snprintf(buf, sizeof(buf), "%s%" PRId64, prefix, scalar_.num); + into = buf; + } + else if (kind() == DQM_KIND_REAL) + { + snprintf(buf, sizeof(buf), "%s%.*g", prefix, DBL_DIG+2, scalar_.real); + into = buf; + } + else if (kind() == DQM_KIND_STRING) + { + into.reserve(strlen(prefix) + scalar_.str.size()); + into += prefix; + into += scalar_.str; + } + else + incompatible(__PRETTY_FUNCTION__); +} + +/// serialise quality report information into a string. +void +MonitorElement::packQualityData(std::string &into) const +{ + DQMNet::packQualityData(into, data_.qreports); +} + /// returns value of ME in string format (eg. "f = 3.14151926" for double numbers); /// relevant only for scalar or string MEs std::string MonitorElement::valueString(void) const { - std::ostringstream buf; - if (kind_ == DQM_KIND_INT) - buf << "i=" << curvalue_.num; - else if (kind_ == DQM_KIND_REAL) - buf << "f=" << std::setprecision(16) << curvalue_.real; - else if (kind_ == DQM_KIND_STRING) - buf << "s=" << curvalue_.str; + std::string result; + if (kind() == DQM_KIND_INT) + packScalarData(result, "i="); + else if (kind() == DQM_KIND_REAL) + packScalarData(result, "f="); + else if (kind() == DQM_KIND_STRING) + packScalarData(result, "s="); else incompatible(__PRETTY_FUNCTION__); - return buf.str(); + + return result; } /// return tagged value of ME in string format @@ -433,22 +484,44 @@ MonitorElement::valueString(void) const /// relevant only for sending scalar or string MEs over TSocket std::string MonitorElement::tagString(void) const -{ return "<" + getName() + ">" + valueString() + "</" + getName() + ">"; } +{ + std::string result; + std::string val(valueString()); + result.reserve(6 + 2*data_.objname.size() + val.size()); + result += '<'; result += data_.objname; result += '>'; + result += val; + result += '<'; result += '/'; result += data_.objname; result += '>'; + return result; +} + +/// return label string for the monitor element tag (eg. <name>t=12345</name>) +std::string +MonitorElement::tagLabelString(void) const +{ + char buf[32]; + std::string result; + size_t len = sprintf(buf, "t=%" PRIu32, data_.tag); + + result.reserve(6 + 2*data_.objname.size() + len); + result += '<'; result += data_.objname; result += '>'; + result += buf; + result += '<'; result += '/'; result += data_.objname; result += '>'; + return result; +} std::string MonitorElement::qualityTagString(const DQMNet::QValue &qv) const { - std::string title; - title.reserve(name_.size() + qv.qtname.size() + 2); - title += name_; - title += '.'; - title += qv.qtname; + char buf[64]; + std::string result; + size_t titlelen = data_.objname.size() + qv.qtname.size() + 1; + size_t buflen = sprintf(buf, "qr=st:%d:%.*g:", qv.code, DBL_DIG+2, qv.qtresult); - std::ostringstream retval; - retval << "<" << title << ">" - << "qr=st." << qv.code << "." << qv.message - << "</" << title << ">"; - return retval.str(); + result.reserve(7 + 2*titlelen + buflen + qv.algorithm.size() + qv.message.size()); + result += '<'; result += data_.objname; result += '.'; result += qv.qtname; result += '>'; + result += buf; result += qv.algorithm; result += ':'; result += qv.message; + result += '<'; result += '/'; result += data_.objname; result += '.'; result += qv.qtname; result += '>'; + return result; } const QReport * @@ -466,7 +539,11 @@ MonitorElement::getQReports(void) const std::vector<QReport *> result; result.reserve(qreports_.size()); for (size_t i = 0, e = qreports_.size(); i != e; ++i) + { + const_cast<MonitorElement *>(this)->qreports_[i].qvalue_ + = const_cast<DQMNet::QValue *>(&data_.qreports[i]); result.push_back(const_cast<QReport *>(&qreports_[i])); + } return result; } @@ -477,7 +554,11 @@ MonitorElement::getQWarnings(void) const result.reserve(qreports_.size()); for (size_t i = 0, e = qreports_.size(); i != e; ++i) if (data_.qreports[i].code == dqm::qstatus::WARNING) + { + const_cast<MonitorElement *>(this)->qreports_[i].qvalue_ + = const_cast<DQMNet::QValue *>(&data_.qreports[i]); result.push_back(const_cast<QReport *>(&qreports_[i])); + } return result; } @@ -488,7 +569,11 @@ MonitorElement::getQErrors(void) const result.reserve(qreports_.size()); for (size_t i = 0, e = qreports_.size(); i != e; ++i) if (data_.qreports[i].code == dqm::qstatus::ERROR) + { + const_cast<MonitorElement *>(this)->qreports_[i].qvalue_ + = const_cast<DQMNet::QValue *>(&data_.qreports[i]); result.push_back(const_cast<QReport *>(&qreports_[i])); + } return result; } @@ -501,7 +586,11 @@ MonitorElement::getQOthers(void) const if (data_.qreports[i].code != dqm::qstatus::STATUS_OK && data_.qreports[i].code != dqm::qstatus::WARNING && data_.qreports[i].code != dqm::qstatus::ERROR) + { + const_cast<MonitorElement *>(this)->qreports_[i].qvalue_ + = const_cast<DQMNet::QValue *>(&data_.qreports[i]); result.push_back(const_cast<QReport *>(&qreports_[i])); + } return result; } @@ -521,7 +610,7 @@ MonitorElement::runQTests(void) qr.qvalue_ = &qv; // if (qc && (dirty || qc->wasModified())) // removed for new QTest (abm-090503) - if (qc && dirty ) + if (qc && dirty) { assert(qc->getName() == qv.qtname); std::string oldMessage = qv.message; @@ -542,12 +631,19 @@ void MonitorElement::incompatible(const char *func) const { raiseDQMError("MonitorElement", "Method '%s' cannot be invoked on monitor" - " element '%s'", func, data_.name.c_str()); + " element '%s'", func, data_.objname.c_str()); } TH1 * MonitorElement::accessRootObject(const char *func, int reqdim) const -{ return checkRootObject(data_.name, curvalue_.tobj, func, reqdim); } +{ + if (kind() < DQM_KIND_TH1F) + raiseDQMError("MonitorElement", "Method '%s' cannot be invoked on monitor" + " element '%s' because it is not a root object", + func, data_.objname.c_str()); + + return checkRootObject(data_.objname, object_, func, reqdim); +} /*** getter methods (wrapper around ROOT methods) ****/ // @@ -640,10 +736,10 @@ MonitorElement::getEntries(void) const double MonitorElement::getBinEntries(int bin) const { - if (kind_ == DQM_KIND_TPROFILE) + if (kind() == DQM_KIND_TPROFILE) return static_cast<TProfile *>(accessRootObject(__PRETTY_FUNCTION__, 1)) ->GetBinEntries(bin); - else if (kind_ == DQM_KIND_TPROFILE2D) + else if (kind() == DQM_KIND_TPROFILE2D) return static_cast<TProfile2D *>(accessRootObject(__PRETTY_FUNCTION__, 1)) ->GetBinEntries(bin); else @@ -657,7 +753,7 @@ MonitorElement::getBinEntries(int bin) const double MonitorElement::getYmin(void) const { - if (kind_ == DQM_KIND_TPROFILE) + if (kind() == DQM_KIND_TPROFILE) return static_cast<TProfile *>(accessRootObject(__PRETTY_FUNCTION__, 1)) ->GetYmin(); else @@ -671,7 +767,7 @@ MonitorElement::getYmin(void) const double MonitorElement::getYmax(void) const { - if (kind_ == DQM_KIND_TPROFILE) + if (kind() == DQM_KIND_TPROFILE) return static_cast<TProfile *>(accessRootObject(__PRETTY_FUNCTION__, 1)) ->GetYmax(); else @@ -752,10 +848,10 @@ void MonitorElement::setBinEntries(int bin, double nentries) { update(); - if (kind_ == DQM_KIND_TPROFILE) + if (kind() == DQM_KIND_TPROFILE) static_cast<TProfile *>(accessRootObject(__PRETTY_FUNCTION__, 1)) ->SetBinEntries(bin, nentries); - else if (kind_ == DQM_KIND_TPROFILE2D) + else if (kind() == DQM_KIND_TPROFILE2D) static_cast<TProfile2D *>(accessRootObject(__PRETTY_FUNCTION__, 1)) ->SetBinEntries(bin, nentries); else @@ -783,9 +879,9 @@ MonitorElement::setBinLabel(int bin, const std::string &label, int axis /* = 1 * } else { - // edm::LogWarning ("MonitorElement") - std::cout << "*** MonitorElement: WARNING:" - <<"setBinLabel: attempting to set label of non-existent bin number \n"; + // edm::LogWarning ("MonitorElement") + std::cout << "*** MonitorElement: WARNING:" + <<"setBinLabel: attempting to set label of non-existent bin number \n"; } } @@ -857,7 +953,7 @@ MonitorElement::getAxis(const char *func, int axis) const if (! a) raiseDQMError("MonitorElement", "No such axis %d in monitor element" - " '%s' of type '%s'", axis, data_.name.c_str(), + " '%s' of type '%s'", axis, data_.objname.c_str(), typeid(*h).name()); return a; @@ -876,9 +972,9 @@ MonitorElement::softReset(void) // On subsequent calls accumulate the current value to the // reference, and then reset the current value. This way the // future contents will have the reference "subtracted". - if (kind_ == DQM_KIND_TH1F) + if (kind() == DQM_KIND_TH1F) { - TH1F *orig = static_cast<TH1F *>(curvalue_.tobj); + TH1F *orig = static_cast<TH1F *>(object_); TH1F *r = static_cast<TH1F *>(refvalue_); if (! r) { @@ -894,9 +990,9 @@ MonitorElement::softReset(void) r->Add(orig); orig->Reset(); } - else if (kind_ == DQM_KIND_TH1S) + else if (kind() == DQM_KIND_TH1S) { - TH1S *orig = static_cast<TH1S *>(curvalue_.tobj); + TH1S *orig = static_cast<TH1S *>(object_); TH1S *r = static_cast<TH1S *>(refvalue_); if (! r) { @@ -912,9 +1008,9 @@ MonitorElement::softReset(void) r->Add(orig); orig->Reset(); } - else if (kind_ == DQM_KIND_TH1D) + else if (kind() == DQM_KIND_TH1D) { - TH1D *orig = static_cast<TH1D *>(curvalue_.tobj); + TH1D *orig = static_cast<TH1D *>(object_); TH1D *r = static_cast<TH1D *>(refvalue_); if (! r) { @@ -930,9 +1026,9 @@ MonitorElement::softReset(void) r->Add(orig); orig->Reset(); } - else if (kind_ == DQM_KIND_TH2F) + else if (kind() == DQM_KIND_TH2F) { - TH2F *orig = static_cast<TH2F *>(curvalue_.tobj); + TH2F *orig = static_cast<TH2F *>(object_); TH2F *r = static_cast<TH2F *>(refvalue_); if (! r) { @@ -951,9 +1047,9 @@ MonitorElement::softReset(void) r->Add(orig); orig->Reset(); } - else if (kind_ == DQM_KIND_TH2S) + else if (kind() == DQM_KIND_TH2S) { - TH2S *orig = static_cast<TH2S *>(curvalue_.tobj); + TH2S *orig = static_cast<TH2S *>(object_); TH2S *r = static_cast<TH2S *>(refvalue_); if (! r) { @@ -972,9 +1068,9 @@ MonitorElement::softReset(void) r->Add(orig); orig->Reset(); } - else if (kind_ == DQM_KIND_TH2D) + else if (kind() == DQM_KIND_TH2D) { - TH2D *orig = static_cast<TH2D *>(curvalue_.tobj); + TH2D *orig = static_cast<TH2D *>(object_); TH2D *r = static_cast<TH2D *>(refvalue_); if (! r) { @@ -993,9 +1089,9 @@ MonitorElement::softReset(void) r->Add(orig); orig->Reset(); } - else if (kind_ == DQM_KIND_TH3F) + else if (kind() == DQM_KIND_TH3F) { - TH3F *orig = static_cast<TH3F *>(curvalue_.tobj); + TH3F *orig = static_cast<TH3F *>(object_); TH3F *r = static_cast<TH3F *>(refvalue_); if (! r) { @@ -1017,9 +1113,9 @@ MonitorElement::softReset(void) r->Add(orig); orig->Reset(); } - else if (kind_ == DQM_KIND_TPROFILE) + else if (kind() == DQM_KIND_TPROFILE) { - TProfile *orig = static_cast<TProfile *>(curvalue_.tobj); + TProfile *orig = static_cast<TProfile *>(object_); TProfile *r = static_cast<TProfile *>(refvalue_); if (! r) { @@ -1038,9 +1134,9 @@ MonitorElement::softReset(void) addProfiles(r, orig, r, 1, 1); orig->Reset(); } - else if (kind_ == DQM_KIND_TPROFILE2D) + else if (kind() == DQM_KIND_TPROFILE2D) { - TProfile2D *orig = static_cast<TProfile2D *>(curvalue_.tobj); + TProfile2D *orig = static_cast<TProfile2D *>(object_); TProfile2D *r = static_cast<TProfile2D *>(refvalue_); if (! r) { @@ -1072,26 +1168,26 @@ MonitorElement::disableSoftReset(void) { if (refvalue_) { - if (kind_ == DQM_KIND_TH1F - || kind_ == DQM_KIND_TH1S - || kind_ == DQM_KIND_TH1D - || kind_ == DQM_KIND_TH2F - || kind_ == DQM_KIND_TH2S - || kind_ == DQM_KIND_TH2D - || kind_ == DQM_KIND_TH3F) + if (kind() == DQM_KIND_TH1F + || kind() == DQM_KIND_TH1S + || kind() == DQM_KIND_TH1D + || kind() == DQM_KIND_TH2F + || kind() == DQM_KIND_TH2S + || kind() == DQM_KIND_TH2D + || kind() == DQM_KIND_TH3F) { - TH1 *orig = static_cast<TH1 *>(curvalue_.tobj); + TH1 *orig = static_cast<TH1 *>(object_); orig->Add(refvalue_); } - else if (kind_ == DQM_KIND_TPROFILE) + else if (kind() == DQM_KIND_TPROFILE) { - TProfile *orig = static_cast<TProfile *>(curvalue_.tobj); + TProfile *orig = static_cast<TProfile *>(object_); TProfile *r = static_cast<TProfile *>(refvalue_); addProfiles(orig, r, orig, 1, 1); } - else if (kind_ == DQM_KIND_TPROFILE2D) + else if (kind() == DQM_KIND_TPROFILE2D) { - TProfile2D *orig = static_cast<TProfile2D *>(curvalue_.tobj); + TProfile2D *orig = static_cast<TProfile2D *>(object_); TProfile2D *r = static_cast<TProfile2D *>(refvalue_); addProfiles(orig, r, orig, 1, 1); } @@ -1214,14 +1310,14 @@ MonitorElement::copyFunctions(TH1 *from, TH1 *to) if (!strcmp(obj->IsA()->GetName(), "TPaveStats")) continue; - if(TF1 *fn = dynamic_cast<TF1 *>(obj)) + if (TF1 *fn = dynamic_cast<TF1 *>(obj)) tof->Add(new TF1(*fn)); //else if (dynamic_cast<TPaveStats *>(obj)) // ; // FIXME? tof->Add(new TPaveStats(*stats)); else raiseDQMError("MonitorElement", "Cannot extract function '%s' of type" " '%s' from monitor element '%s' for a copy", - obj->GetName(), obj->IsA()->GetName(), data_.name.c_str()); + obj->GetName(), obj->IsA()->GetName(), data_.objname.c_str()); } } @@ -1237,22 +1333,22 @@ MonitorElement::copyFrom(TH1 *from) if (isSoftResetEnabled()) { - if (kind_ == DQM_KIND_TH1F - || kind_ == DQM_KIND_TH1S - || kind_ == DQM_KIND_TH1D - || kind_ == DQM_KIND_TH2F - || kind_ == DQM_KIND_TH2S - || kind_ == DQM_KIND_TH2D - || kind_ == DQM_KIND_TH3F) + if (kind() == DQM_KIND_TH1F + || kind() == DQM_KIND_TH1S + || kind() == DQM_KIND_TH1D + || kind() == DQM_KIND_TH2F + || kind() == DQM_KIND_TH2S + || kind() == DQM_KIND_TH2D + || kind() == DQM_KIND_TH3F) // subtract "reference" orig->Add(from, refvalue_, 1, -1); - else if (kind_ == DQM_KIND_TPROFILE) + else if (kind() == DQM_KIND_TPROFILE) // subtract "reference" addProfiles(static_cast<TProfile *>(from), static_cast<TProfile *>(refvalue_), static_cast<TProfile *>(orig), 1, -1); - else if (kind_ == DQM_KIND_TPROFILE2D) + else if (kind() == DQM_KIND_TPROFILE2D) // subtract "reference" addProfiles(static_cast<TProfile2D *>(from), static_cast<TProfile2D *>(refvalue_), @@ -1289,6 +1385,7 @@ MonitorElement::getQReport(bool create, const std::string &qtname, QReport *&qr, DQMNet::QValue &q = data_.qreports.back(); q.code = dqm::qstatus::DID_NOT_RUN; + q.qtresult = 0; q.qtname = qtname; q.message = "NO_MESSAGE_ASSIGNED"; q.algorithm = "UNKNOWN_ALGORITHM"; @@ -1326,25 +1423,22 @@ MonitorElement::addQReport(QCriterion *qc) void MonitorElement::updateQReportStats(void) { - nqerror_ = nqwarning_ = nqother_ = 0; + data_.flags &= ~DQMNet::DQM_PROP_REPORT_ALARM; for (size_t i = 0, e = data_.qreports.size(); i < e; ++i) switch (data_.qreports[i].code) { - case dqm::qstatus::STATUS_OK: break; - case dqm::qstatus::WARNING: ++nqwarning_; break; - case dqm::qstatus::ERROR: ++nqerror_; break; - default: ++nqother_; break; + case dqm::qstatus::STATUS_OK: + break; + case dqm::qstatus::WARNING: + data_.flags |= DQMNet::DQM_PROP_REPORT_WARN; + break; + case dqm::qstatus::ERROR: + data_.flags |= DQMNet::DQM_PROP_REPORT_ERROR; + break; + default: + data_.flags |= DQMNet::DQM_PROP_REPORT_OTHER; + break; } - - data_.flags &= ~(DQMNet::DQM_FLAG_REPORT_ERROR - | DQMNet::DQM_FLAG_REPORT_WARNING - | DQMNet::DQM_FLAG_REPORT_OTHER); - if (nqerror_) - data_.flags |= DQMNet::DQM_FLAG_REPORT_ERROR; - if (nqwarning_) - data_.flags |= DQMNet::DQM_FLAG_REPORT_WARNING; - if (nqother_) - data_.flags |= DQMNet::DQM_FLAG_REPORT_OTHER; } // ------------------------------------------------------------------- @@ -1352,7 +1446,7 @@ TObject * MonitorElement::getRootObject(void) const { const_cast<MonitorElement *>(this)->update(); - return data_.object; + return object_; } TH1 * @@ -1365,73 +1459,73 @@ MonitorElement::getTH1(void) const TH1F * MonitorElement::getTH1F(void) const { - assert(kind_ == DQM_KIND_TH1F); + assert(kind() == DQM_KIND_TH1F); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH1F *>(accessRootObject(__PRETTY_FUNCTION__, 1)); + return static_cast<TH1F *>(accessRootObject(__PRETTY_FUNCTION__, 1)); } TH1S * MonitorElement::getTH1S(void) const { - assert(kind_ == DQM_KIND_TH1S); + assert(kind() == DQM_KIND_TH1S); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH1S *>(accessRootObject(__PRETTY_FUNCTION__, 1)); + return static_cast<TH1S *>(accessRootObject(__PRETTY_FUNCTION__, 1)); } TH1D * MonitorElement::getTH1D(void) const { - assert(kind_ == DQM_KIND_TH1D); + assert(kind() == DQM_KIND_TH1D); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH1D *>(accessRootObject(__PRETTY_FUNCTION__, 1)); + return static_cast<TH1D *>(accessRootObject(__PRETTY_FUNCTION__, 1)); } TH2F * MonitorElement::getTH2F(void) const { - assert(kind_ == DQM_KIND_TH2F); + assert(kind() == DQM_KIND_TH2F); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH2F *>(accessRootObject(__PRETTY_FUNCTION__, 2)); + return static_cast<TH2F *>(accessRootObject(__PRETTY_FUNCTION__, 2)); } TH2S * MonitorElement::getTH2S(void) const { - assert(kind_ == DQM_KIND_TH2S); + assert(kind() == DQM_KIND_TH2S); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH2S *>(accessRootObject(__PRETTY_FUNCTION__, 2)); + return static_cast<TH2S *>(accessRootObject(__PRETTY_FUNCTION__, 2)); } TH2D * MonitorElement::getTH2D(void) const { - assert(kind_ == DQM_KIND_TH2D); + assert(kind() == DQM_KIND_TH2D); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH2D *>(accessRootObject(__PRETTY_FUNCTION__, 2)); + return static_cast<TH2D *>(accessRootObject(__PRETTY_FUNCTION__, 2)); } TH3F * MonitorElement::getTH3F(void) const { - assert(kind_ == DQM_KIND_TH3F); + assert(kind() == DQM_KIND_TH3F); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH3F *>(accessRootObject(__PRETTY_FUNCTION__, 3)); + return static_cast<TH3F *>(accessRootObject(__PRETTY_FUNCTION__, 3)); } TProfile * MonitorElement::getTProfile(void) const { - assert(kind_ == DQM_KIND_TPROFILE); + assert(kind() == DQM_KIND_TPROFILE); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TProfile *>(accessRootObject(__PRETTY_FUNCTION__, 1)); + return static_cast<TProfile *>(accessRootObject(__PRETTY_FUNCTION__, 1)); } TProfile2D * MonitorElement::getTProfile2D(void) const { - assert(kind_ == DQM_KIND_TPROFILE2D); + assert(kind() == DQM_KIND_TPROFILE2D); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TProfile2D *>(accessRootObject(__PRETTY_FUNCTION__, 2)); + return static_cast<TProfile2D *>(accessRootObject(__PRETTY_FUNCTION__, 2)); } // ------------------------------------------------------------------- @@ -1439,93 +1533,93 @@ TObject * MonitorElement::getRefRootObject(void) const { const_cast<MonitorElement *>(this)->update(); - return data_.reference; + return reference_; } TH1 * MonitorElement::getRefTH1(void) const { const_cast<MonitorElement *>(this)->update(); - return checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 0); + return checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 0); } TH1F * MonitorElement::getRefTH1F(void) const { - assert(kind_ == DQM_KIND_TH1F); + assert(kind() == DQM_KIND_TH1F); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH1F *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 1)); + return static_cast<TH1F *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 1)); } TH1S * MonitorElement::getRefTH1S(void) const { - assert(kind_ == DQM_KIND_TH1S); + assert(kind() == DQM_KIND_TH1S); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH1S *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 1)); + return static_cast<TH1S *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 1)); } TH1D * MonitorElement::getRefTH1D(void) const { - assert(kind_ == DQM_KIND_TH1D); + assert(kind() == DQM_KIND_TH1D); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH1D *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 1)); + return static_cast<TH1D *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 1)); } TH2F * MonitorElement::getRefTH2F(void) const { - assert(kind_ == DQM_KIND_TH2F); + assert(kind() == DQM_KIND_TH2F); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH2F *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 2)); + return static_cast<TH2F *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 2)); } TH2S * MonitorElement::getRefTH2S(void) const { - assert(kind_ == DQM_KIND_TH2S); + assert(kind() == DQM_KIND_TH2S); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH2S *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 2)); + return static_cast<TH2S *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 2)); } TH2D * MonitorElement::getRefTH2D(void) const { - assert(kind_ == DQM_KIND_TH2D); + assert(kind() == DQM_KIND_TH2D); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH2D *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 2)); + return static_cast<TH2D *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 2)); } TH3F * MonitorElement::getRefTH3F(void) const { - assert(kind_ == DQM_KIND_TH3F); + assert(kind() == DQM_KIND_TH3F); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TH3F *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 3)); + return static_cast<TH3F *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 3)); } TProfile * MonitorElement::getRefTProfile(void) const { - assert(kind_ == DQM_KIND_TPROFILE); + assert(kind() == DQM_KIND_TPROFILE); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TProfile *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 1)); + return static_cast<TProfile *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 1)); } TProfile2D * MonitorElement::getRefTProfile2D(void) const { - assert(kind_ == DQM_KIND_TPROFILE2D); + assert(kind() == DQM_KIND_TPROFILE2D); const_cast<MonitorElement *>(this)->update(); - return dynamic_cast<TProfile2D *> - (checkRootObject(data_.name, data_.reference, __PRETTY_FUNCTION__, 2)); + return static_cast<TProfile2D *> + (checkRootObject(data_.objname, reference_, __PRETTY_FUNCTION__, 2)); }