8 #include "classlib/utils/RegexpMatch.h"
9 #include "classlib/utils/Regexp.h"
10 #include "classlib/utils/StringOps.h"
11 #include <google/protobuf/io/coded_stream.h>
12 #include <google/protobuf/io/gzip_stream.h>
13 #include <google/protobuf/io/zero_copy_stream_impl.h>
19 #include "TBufferFile.h"
22 #include <boost/algorithm/string.hpp>
56 static const std::string s_safe =
"/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+=_()# ";
58 static const lat::Regexp
s_rxmeval (
"^<(.*)>(i|f|s|e|t|qr)=(.*)</\\1>$");
59 static const lat::Regexp
s_rxmeqr1 (
"^st:(\\d+):([-+e.\\d]+):([^:]*):(.*)$");
60 static const lat::Regexp
s_rxmeqr2 (
"^st\\.(\\d+)\\.(.*)$");
61 static const lat::Regexp
s_rxtrace (
"(.*)\\((.*)\\+0x.*\\).*");
62 static const lat::Regexp
s_rxpbfile (
".*\\.pb$");
71 || (path.size() >= ofdir.size()
72 && path.compare(0, ofdir.size(), ofdir) == 0
73 && (path.size() == ofdir.size()
74 || path[ofdir.size()] ==
'/')));
83 size_t len = path.size();
84 for ( ; len > 0 && path[len-1] ==
'/'; --len)
87 if (len != path.size())
89 clean = path.substr(0, len);
97 size_t slash = path.rfind(
'/');
98 if (slash != std::string::npos)
100 dir.append(path, 0, slash);
101 name.append(path, slash+1, std::string::npos);
110 path.reserve(dir.size() + name.size() + 2);
120 {
return new T(qtname); }
125 {
m[T::getAlgoName()] = &makeQCriterion<T>; }
130 fastString_ (_fastString), matching_ (UseFull)
138 catch (lat::Error &
e)
141 raiseDQMError(
"DQMStore",
"Invalid wildcard pattern '%s' in quality"
146 size_t starCount = 0;
151 if ((
size_t)pos == std::string::npos)
157 if ((
fastString_.find(
'"') != std::string::npos) ||
170 if (boost::algorithm::starts_with(
fastString_,
"*"))
188 if (boost::algorithm::starts_with(
fastString_,
"*") &&
208 if (input.size() < pattern.size())
214 std::string::const_reverse_iterator rit_pattern = pattern.rbegin();
215 std::string::const_reverse_iterator rit_input = input.rbegin();
217 for (; rit_pattern < pattern.rend(); rit_pattern++, rit_input++)
219 if (*rit_pattern != *rit_input)
229 if (input.size() < pattern.size())
235 std::string::const_iterator rit_pattern = pattern.begin();
236 std::string::const_iterator rit_input = input.begin();
238 for (; rit_pattern < pattern.end(); rit_pattern++, rit_input++)
240 if (*rit_pattern != *rit_input)
275 owner_->setCurrentFolder(fullpath);
283 return owner_->pwd();
287 owner_->tag(me, tag);
291 owner_->tagContents(path, myTag);
295 std::vector<MonitorElement*>
299 return owner_->getAllContents(path, runNumber, lumi);
303 return owner_->get(path);
307 return owner_->getSubdirs();
311 return owner_->getMEs();
315 return owner_->containsAnyMonitorable(path);
319 return owner_->dirExists(path);
331 owner_->setCurrentFolder(fullpath);
347 std::cout <<
"DQMStore::mergeAndResetMEsRunSummaryCache - Merging objects from run: "
349 <<
", stream: " << streamId
350 <<
" module: " << moduleId << std::endl;
357 MonitorElement proto(&null_str, null_str, run, streamId, moduleId);
358 std::set<MonitorElement>::const_iterator
e =
data_.end();
359 std::set<MonitorElement>::const_iterator
i =
data_.lower_bound(proto);
361 if (i->data_.run != run
362 || i->data_.streamId != streamId
363 || i->data_.moduleId != moduleId)
380 std::set<MonitorElement>::const_iterator me =
data_.find(global_me);
381 if (me !=
data_.end()) {
383 std::cout <<
"Found global Object, using it --> " << me->getFullname() << std::endl;
388 if(me->getTH1()->CanExtendAllAxes() && i->getTH1()->CanExtendAllAxes()) {
390 list.Add(i->getTH1());
391 if( -1 == me->getTH1()->Merge(&list)) {
392 std::cout <<
"mergeAndResetMEsRunSummaryCache: Failed to merge DQM element "<<me->getFullname();
396 me->getTH1()->Add(i->getTH1());
400 std::cout <<
"No global Object found. " << std::endl;
401 std::pair<std::set<MonitorElement>::const_iterator,
bool> gme;
406 gme =
data_.insert(std::move(actual_global_me));
419 std::cout <<
"DQMStore::mergeAndResetMEsLuminositySummaryCache - Merging objects from run: "
420 << run <<
" lumi: " << lumi
421 <<
", stream: " << streamId
422 <<
" module: " << moduleId << std::endl;
424 MonitorElement proto(&null_str, null_str, run, streamId, moduleId);
425 std::set<MonitorElement>::const_iterator
e =
data_.end();
426 std::set<MonitorElement>::const_iterator
i =
data_.lower_bound(proto);
429 if (i->data_.run != run
430 || i->data_.streamId != streamId
431 || i->data_.moduleId != moduleId)
446 std::set<MonitorElement>::const_iterator me =
data_.find(global_me);
447 if (me !=
data_.end()) {
449 std::cout <<
"Found global Object, using it --> " << me->getFullname() << std::endl;
454 if(me->getTH1()->CanExtendAllAxes() && i->getTH1()->CanExtendAllAxes()) {
456 list.Add(i->getTH1());
457 if( -1 == me->getTH1()->Merge(&list)) {
458 std::cout <<
"mergeAndResetMEsLuminositySummaryCache: Failed to merge DQM element "<<me->getFullname();
462 me->getTH1()->Add(i->getTH1());
466 std::cout <<
"No global Object found. " << std::endl;
467 std::pair<std::set<MonitorElement>::const_iterator,
bool> gme;
472 actual_global_me.
setLumi(lumi);
473 gme =
data_.insert(std::move(actual_global_me));
523 collateHistograms_ (
false),
524 enableMultiThread_(
false),
525 readSelectedDirectory_ (
""),
570 std::cout <<
"DQMStore: histogram collation is enabled\n";
574 std::cout <<
"DQMStore: MultiThread option is enabled\n";
578 std::cout <<
"DQMStore: LSbasedMode option is enabled\n";
583 std::cout <<
"DQMStore: using reference file '" << ref <<
"'\n";
587 initQCriterion<Comp2RefChi2>(
qalgos_);
588 initQCriterion<Comp2RefKolmogorov>(
qalgos_);
589 initQCriterion<ContentsXRange>(
qalgos_);
590 initQCriterion<ContentsYRange>(
qalgos_);
591 initQCriterion<MeanWithinExpected>(
qalgos_);
592 initQCriterion<Comp2RefEqualH>(
qalgos_);
593 initQCriterion<DeadChannel>(
qalgos_);
594 initQCriterion<NoisyChannel>(
qalgos_);
595 initQCriterion<ContentsWithinExpected>(
qalgos_);
596 initQCriterion<CompareToMedian>(
qalgos_);
597 initQCriterion<CompareLastFilledBin>(
qalgos_);
598 initQCriterion<CheckVariance>(
qalgos_);
602 std::cout <<
"DQMStore: Scaling Flag set to " << scaleFlag_ << std::endl;
621 stream_ =
new std::ofstream(
"histogramBookingBT.log");
630 size = backtrace (array, 10);
631 strings = backtrace_symbols (array, size);
636 char * demangled = abi::__cxa_demangle(m.matchString(strings[4], 2).c_str(), 0, 0, &
r);
639 << (r ? m.matchString(strings[4], 2) : demangled) <<
" "
640 << m.matchString(strings[4], 1) <<
"\n";
644 *
stream_ <<
"Skipping "<< dir <<
"/" << name
645 <<
" with stack size " << size <<
"\n";
653 for (i = 0; i <
size; i++)
654 if (
s_rxtrace.match(strings[i], 0, 0, &m))
656 char * demangled = abi::__cxa_demangle(m.matchString(strings[i], 2).c_str(), 0, 0, &
r);
657 *
stream_ <<
"\t\t" << i <<
"/" << size <<
" "
658 << (r ? m.matchString(strings[i], 2) : demangled) <<
" "
659 << m.matchString(strings[i], 1) << std::endl;
696 raiseDQMError(
"DQMStore",
"Cannot 'cd' into non-existent directory '%s'",
720 size_t pos =
pwd_.rfind(
'/');
721 if (pos == std::string::npos)
736 prev.reserve(path.size());
737 subdir.reserve(path.size());
738 name.reserve(path.size());
746 subdir.append(path, 0, slash);
748 name.append(subdir, prevname, std::string::npos);
750 raiseDQMError(
"DQMStore",
"Attempt to create subdirectory '%s'"
751 " which already exists as a monitor element",
754 if (!
dirs_.count(subdir))
755 dirs_.insert(subdir);
758 if (slash+1 >= path.size())
763 prevname = slash ? slash+1 :
slash;
765 if ((slash = path.find(
'/', ++slash)) == std::string::npos)
773 {
return dirs_.count(path) > 0; }
778 template <
class HISTO,
class COLLATE>
781 const char *context,
int kind,
782 HISTO *
h, COLLATE collate)
784 assert(name.find(
'/') == std::string::npos);
807 << context <<
": monitor element '"
808 << path <<
"' already exists, collating" << std::endl;
826 for ( ; qi != qe; ++qi)
828 if ( qi->first->match(path) )
829 me->addQReport(qi->second);
853 assert(name.find(
'/') == std::string::npos);
866 << context <<
": monitor element '"
867 << path <<
"' already exists, resetting" << std::endl;
895 return book(dir, name,
"bookInt")
925 return book(dir, name,
"bookFloat")
954 return book(dir, name,
"bookString")
995 int nchX,
double lowX,
double highX)
997 return book1D(
pwd_, name,
new TH1F(name, title, nchX, lowX, highX));
1003 int nchX,
double lowX,
double highX)
1005 return book1D(
pwd_, name,
new TH1F(name.c_str(), title.c_str(), nchX, lowX, highX));
1011 int nchX,
double lowX,
double highX)
1013 return book1S(
pwd_, name,
new TH1S(name, title, nchX, lowX, highX));
1019 int nchX,
double lowX,
double highX)
1021 return book1S(
pwd_, name,
new TH1S(name.c_str(), title.c_str(), nchX, lowX, highX));
1027 int nchX,
double lowX,
double highX)
1029 return book1DD(
pwd_, name,
new TH1D(name, title, nchX, lowX, highX));
1035 int nchX,
double lowX,
double highX)
1037 return book1DD(
pwd_, name,
new TH1D(name.c_str(), title.c_str(), nchX, lowX, highX));
1043 int nchX,
const float *xbinsize)
1045 return book1D(
pwd_, name,
new TH1F(name, title, nchX, xbinsize));
1051 int nchX,
const float *xbinsize)
1053 return book1D(
pwd_, name,
new TH1F(name.c_str(), title.c_str(), nchX, xbinsize));
1060 return book1D(
pwd_, name, static_cast<TH1F *>(source->Clone(name)));
1067 return book1D(
pwd_, name, static_cast<TH1F *>(source->Clone(name.c_str())));
1074 return book1S(
pwd_, name, static_cast<TH1S *>(source->Clone(name)));
1081 return book1S(
pwd_, name, static_cast<TH1S *>(source->Clone(name.c_str())));
1088 return book1DD(
pwd_, name, static_cast<TH1D *>(source->Clone(name)));
1095 return book1DD(
pwd_, name, static_cast<TH1D *>(source->Clone(name.c_str())));
1123 int nchX,
double lowX,
double highX,
1124 int nchY,
double lowY,
double highY)
1126 return book2D(
pwd_, name,
new TH2F(name, title,
1128 nchY, lowY, highY));
1134 int nchX,
double lowX,
double highX,
1135 int nchY,
double lowY,
double highY)
1137 return book2D(
pwd_, name,
new TH2F(name.c_str(), title.c_str(),
1139 nchY, lowY, highY));
1145 int nchX,
double lowX,
double highX,
1146 int nchY,
double lowY,
double highY)
1148 return book2S(
pwd_, name,
new TH2S(name, title,
1150 nchY, lowY, highY));
1156 int nchX,
double lowX,
double highX,
1157 int nchY,
double lowY,
double highY)
1159 return book2S(
pwd_, name,
new TH2S(name.c_str(), title.c_str(),
1161 nchY, lowY, highY));
1167 int nchX,
double lowX,
double highX,
1168 int nchY,
double lowY,
double highY)
1172 nchY, lowY, highY));
1178 int nchX,
double lowX,
double highX,
1179 int nchY,
double lowY,
double highY)
1181 return book2DD(
pwd_, name,
new TH2D(name.c_str(), title.c_str(),
1183 nchY, lowY, highY));
1189 int nchX,
const float *xbinsize,
int nchY,
const float *ybinsize)
1191 return book2D(
pwd_, name,
new TH2F(name, title,
1192 nchX, xbinsize, nchY, ybinsize));
1198 int nchX,
const float *xbinsize,
int nchY,
const float *ybinsize)
1200 return book2D(
pwd_, name,
new TH2F(name.c_str(), title.c_str(),
1201 nchX, xbinsize, nchY, ybinsize));
1208 return book2D(
pwd_, name, static_cast<TH2F *>(source->Clone(name)));
1215 return book2D(
pwd_, name, static_cast<TH2F *>(source->Clone(name.c_str())));
1222 return book2S(
pwd_, name, static_cast<TH2S *>(source->Clone(name)));
1229 return book2S(
pwd_, name, static_cast<TH2S *>(source->Clone(name.c_str())));
1236 return book2DD(
pwd_, name, static_cast<TH2D *>(source->Clone(name)));
1243 return book2DD(
pwd_, name, static_cast<TH2D *>(source->Clone(name.c_str())));
1257 int nchX,
double lowX,
double highX,
1258 int nchY,
double lowY,
double highY,
1259 int nchZ,
double lowZ,
double highZ)
1261 return book3D(
pwd_, name,
new TH3F(name, title,
1264 nchZ, lowZ, highZ));
1270 int nchX,
double lowX,
double highX,
1271 int nchY,
double lowY,
double highY,
1272 int nchZ,
double lowZ,
double highZ)
1274 return book3D(
pwd_, name,
new TH3F(name.c_str(), title.c_str(),
1277 nchZ, lowZ, highZ));
1284 return book3D(
pwd_, name, static_cast<TH3F *>(source->Clone(name)));
1291 return book3D(
pwd_, name, static_cast<TH3F *>(source->Clone(name.c_str())));
1299 return book(dir, name,
"bookProfile",
1309 int nchX,
double lowX,
double highX,
1310 int ,
double lowY,
double highY,
1311 const char *option )
1324 int nchX,
double lowX,
double highX,
1325 int ,
double lowY,
double highY,
1326 const char *option )
1328 return bookProfile(
pwd_, name,
new TProfile(name.c_str(), title.c_str(),
1339 int nchX,
double lowX,
double highX,
1340 double lowY,
double highY,
1341 const char *option )
1354 int nchX,
double lowX,
double highX,
1355 double lowY,
double highY,
1356 const char *option )
1358 return bookProfile(
pwd_, name,
new TProfile(name.c_str(), title.c_str(),
1369 int nchX,
const double *xbinsize,
1370 int ,
double lowY,
double highY,
1371 const char *option )
1384 int nchX,
const double *xbinsize,
1385 int ,
double lowY,
double highY,
1386 const char *option )
1388 return bookProfile(
pwd_, name,
new TProfile(name.c_str(), title.c_str(),
1399 int nchX,
const double *xbinsize,
1400 double lowY,
double highY,
1401 const char *option )
1414 int nchX,
const double *xbinsize,
1415 double lowY,
double highY,
1416 const char *option )
1418 return bookProfile(
pwd_, name,
new TProfile(name.c_str(), title.c_str(),
1428 return bookProfile(
pwd_, name, static_cast<TProfile *>(source->Clone(name)));
1435 return bookProfile(
pwd_, name, static_cast<TProfile *>(source->Clone(name.c_str())));
1443 return book(dir, name,
"bookProfile2D",
1453 int nchX,
double lowX,
double highX,
1454 int nchY,
double lowY,
double highY,
1455 int ,
double lowZ,
double highZ,
1456 const char *option )
1470 int nchX,
double lowX,
double highX,
1471 int nchY,
double lowY,
double highY,
1472 int ,
double lowZ,
double highZ,
1473 const char *option )
1487 int nchX,
double lowX,
double highX,
1488 int nchY,
double lowY,
double highY,
1489 double lowZ,
double highZ,
1490 const char *option )
1504 int nchX,
double lowX,
double highX,
1505 int nchY,
double lowY,
double highY,
1506 double lowZ,
double highZ,
1507 const char *option )
1520 return bookProfile2D(
pwd_, name, static_cast<TProfile2D *>(source->Clone(name)));
1527 return bookProfile2D(
pwd_, name, static_cast<TProfile2D *>(source->Clone(name.c_str())));
1536 if (me->
getTH1()->GetNbinsX() != h->GetNbinsX()
1537 || me->
getTH1()->GetNbinsY() != h->GetNbinsY()
1538 || me->
getTH1()->GetNbinsZ() != h->GetNbinsZ()
1539 || me->
getTH1()->GetXaxis()->GetXmin() != h->GetXaxis()->GetXmin()
1540 || me->
getTH1()->GetYaxis()->GetXmin() != h->GetYaxis()->GetXmin()
1541 || me->
getTH1()->GetZaxis()->GetXmin() != h->GetZaxis()->GetXmin()
1542 || me->
getTH1()->GetXaxis()->GetXmax() != h->GetXaxis()->GetXmax()
1543 || me->
getTH1()->GetYaxis()->GetXmax() != h->GetYaxis()->GetXmax()
1544 || me->
getTH1()->GetZaxis()->GetXmax() != h->GetZaxis()->GetXmax()
1551 <<
"checkBinningMatches: different binning - cannot add object '"
1552 << h->GetName() <<
"' of type "
1553 << h->IsA()->GetName() <<
" to existing ME: '"
1637 raiseDQMError(
"DQMStore",
"Attempt to tag monitor element '%s'"
1640 raiseDQMError(
"DQMStore",
"Attempt to tag monitor element '%s'"
1641 " twice with multiple tags", me->
getFullname().c_str());
1658 raiseDQMError(
"DQMStore",
"Attempt to tag non-existent monitor element"
1659 " '%s' with tag %u", path.c_str(), myTag);
1668 MEMap::iterator
e =
data_.end();
1669 MEMap::iterator
i =
data_.lower_bound(proto);
1670 for ( ; i != e && path == *i->data_.dirname; ++
i)
1671 tag(const_cast<MonitorElement *>(&*i), myTag);
1685 MEMap::iterator
e =
data_.end();
1686 MEMap::iterator
i =
data_.lower_bound(proto);
1689 tag(const_cast<MonitorElement *>(&*i), myTag);
1698 std::vector<std::string>
1701 std::vector<std::string>
result;
1702 std::set<std::string>::const_iterator
e =
dirs_.end();
1703 std::set<std::string>::const_iterator
i =
dirs_.find(
pwd_);
1714 if (i->find(
'/',
pwd_.size()+1) == std::string::npos)
1715 result.push_back(*i);
1721 std::vector<std::string>
1725 std::vector<std::string>
result;
1726 MEMap::const_iterator
e =
data_.end();
1727 MEMap::const_iterator
i =
data_.lower_bound(proto);
1729 if (
pwd_ == *i->data_.dirname)
1730 result.push_back(i->getName());
1741 MEMap::const_iterator
e =
data_.end();
1742 MEMap::const_iterator
i =
data_.lower_bound(proto);
1754 MEMap::const_iterator mepos =
data_.find(proto);
1755 return (mepos ==
data_.end() ? 0
1760 std::vector<MonitorElement *>
1764 std::vector<MonitorElement *>
result;
1765 for (MEMap::const_iterator
i =
data_.begin(),
e =
data_.end();
i !=
e; ++
i)
1769 result.push_back(const_cast<MonitorElement *>(&me));
1776 std::vector<MonitorElement *>
1784 std::vector<MonitorElement *>
result;
1785 MEMap::const_iterator
e =
data_.end();
1786 MEMap::const_iterator
i =
data_.lower_bound(proto);
1788 if (*cleaned == *i->data_.dirname)
1789 result.push_back(const_cast<MonitorElement *>(&*i));
1795 std::vector<MonitorElement *>
1803 std::vector<MonitorElement *>
result;
1804 MEMap::const_iterator
e =
data_.end();
1805 MEMap::const_iterator
i =
data_.lower_bound(proto);
1807 if (*cleaned == *i->data_.dirname
1809 && i->data_.tag ==
tag)
1810 result.push_back(const_cast<MonitorElement *>(&*i));
1823 into.reserve(
dirs_.size());
1825 MEMap::const_iterator me =
data_.end();
1826 std::set<std::string>::const_iterator di =
dirs_.begin();
1827 std::set<std::string>::const_iterator de =
dirs_.end();
1828 for ( ; di != de; ++di)
1831 MEMap::const_iterator mi =
data_.lower_bound(proto);
1832 MEMap::const_iterator
m = mi;
1833 size_t sz = di->size() + 2;
1836 if (*di == *m->data_.dirname)
1838 sz += m->data_.objname.size() + 1;
1845 std::vector<std::string>::iterator istr
1854 for (sz = 0; mi !=
m; ++mi)
1856 if (*di != *mi->data_.dirname)
1862 *istr += mi->data_.objname;
1868 istr->reserve(di->size() + 2);
1880 const uint32_t
run ,
1881 const uint32_t
lumi ,
1882 const uint32_t streamId ,
1883 const uint32_t moduleId )
const
1885 if (dir.find_first_not_of(
s_safe) != std::string::npos)
1886 raiseDQMError(
"DQMStore",
"Monitor element path name '%s' uses"
1887 " unacceptable characters", dir.c_str());
1888 if (name.find_first_not_of(
s_safe) != std::string::npos)
1889 raiseDQMError(
"DQMStore",
"Monitor element path name '%s' uses"
1890 " unacceptable characters", name.c_str());
1900 MEMap::const_iterator mepos =
data_.find(proto);
1901 return (mepos ==
data_.end() ? 0
1911 into.reserve(
dirs_.size());
1913 MEMap::const_iterator me =
data_.end();
1914 std::set<std::string>::const_iterator di =
dirs_.begin();
1915 std::set<std::string>::const_iterator de =
dirs_.end();
1918 for ( ; di != de; ++di)
1921 MEMap::const_iterator mi =
data_.lower_bound(proto);
1922 MEMap::const_iterator
m = mi;
1923 size_t sz = di->size() + 2;
1929 sz += 1 + m->data_.objname.size() + 11;
1936 std::vector<std::string>::iterator istr
1943 for (sz = 0; mi !=
m; ++mi)
1947 sprintf(tagbuf,
"/%u", mi->data_.tag);
1950 *istr += m->data_.objname;
1960 std::vector<MonitorElement*>
1963 uint32_t
lumi )
const
1971 std::vector<MonitorElement *>
result;
1972 MEMap::const_iterator
e =
data_.end();
1973 MEMap::const_iterator
i =
data_.lower_bound(proto);
1975 if (runNumber != 0) {
1976 if (i->data_.run > runNumber
1977 || i->data_.streamId != 0
1978 || i->data_.moduleId != 0)
1982 if (i->data_.lumi > lumi
1983 || i->data_.streamId != 0
1984 || i->data_.moduleId != 0)
1987 if (runNumber != 0
or lumi !=0) {
1988 assert(i->data_.streamId == 0);
1989 assert(i->data_.moduleId == 0);
1991 result.push_back(const_cast<MonitorElement *>(&*i));
1999 if (i->data_.run != 0 || i->data_.streamId != 0 || i->data_.moduleId != 0)
break;
2000 result.push_back(const_cast<MonitorElement *>(&*i));
2009 std::vector<MonitorElement*>
2015 rx = lat::Regexp(pattern, 0, syntaxType);
2018 catch (lat::Error &
e)
2020 raiseDQMError(
"DQMStore",
"Invalid regular expression '%s': %s",
2021 pattern.c_str(), e.explain().c_str());
2025 std::vector<MonitorElement *>
result;
2026 MEMap::const_iterator
i =
data_.begin();
2027 MEMap::const_iterator e =
data_.end();
2028 for ( ; i !=
e; ++
i)
2031 mergePath(path, *i->data_.dirname, i->data_.objname);
2033 result.push_back(const_cast<MonitorElement *>(&*i));
2048 MEMap::iterator mi =
data_.begin();
2049 MEMap::iterator me =
data_.end();
2050 for ( ; mi != me; ++mi)
2053 if (mi->wasUpdated())
2072 MEMap::iterator mi =
data_.begin();
2073 MEMap::iterator me =
data_.end();
2074 for ( ; mi != me; ++mi)
2105 std::set<MonitorElement>::const_iterator
e =
data_.end();
2106 std::set<MonitorElement>::const_iterator
i =
data_.lower_bound(proto);
2109 if (i->data_.streamId != 0 ||
2110 i->data_.moduleId != 0)
2112 if (i->data_.lumi != lumi)
2114 if (i->data_.run != run)
2121 std::cout <<
"DQMStore::deleteUnusedLumiHistograms: deleted monitor element '"
2122 << *i->data_.dirname <<
"/" << i->data_.objname <<
"'"
2123 <<
"flags " << i->data_.flags <<
"\n";
2141 if (TProfile *
h = dynamic_cast<TProfile *>(obj))
2145 me =
bookProfile(dir,
h->GetName(), (TProfile *)
h->Clone());
2152 else if (TProfile2D *
h = dynamic_cast<TProfile2D *>(obj))
2163 else if (TH1F *
h = dynamic_cast<TH1F *>(obj))
2167 me =
book1D(dir,
h->GetName(), (TH1F *)
h->Clone());
2174 else if (TH1S *
h = dynamic_cast<TH1S *>(obj))
2178 me =
book1S(dir,
h->GetName(), (TH1S *)
h->Clone());
2185 else if (TH1D *
h = dynamic_cast<TH1D *>(obj))
2189 me =
book1DD(dir,
h->GetName(), (TH1D *)
h->Clone());
2196 else if (TH2F *
h = dynamic_cast<TH2F *>(obj))
2200 me =
book2D(dir,
h->GetName(), (TH2F *)
h->Clone());
2207 else if (TH2S *
h = dynamic_cast<TH2S *>(obj))
2211 me =
book2S(dir,
h->GetName(), (TH2S *)
h->Clone());
2218 else if (TH2D *
h = dynamic_cast<TH2D *>(obj))
2222 me =
book2DD(dir,
h->GetName(), (TH2D *)
h->Clone());
2229 else if (TH3F *
h = dynamic_cast<TH3F *>(obj))
2233 me =
book3D(dir,
h->GetName(), (TH3F *)
h->Clone());
2240 else if (dynamic_cast<TObjString *>(obj))
2243 if (!
s_rxmeval.match(obj->GetName(), 0, 0, &
m))
2245 if (strstr(obj->GetName(),
"CMSSW"))
2248 std::cout <<
"Input file version: " << obj->GetName() << std::endl;
2251 else if (strstr(obj->GetName(),
"DQMPATCH"))
2254 std::cout <<
"DQM patch version: " << obj->GetName() << std::endl;
2259 std::cout <<
"*** DQMStore: WARNING: cannot extract object '"
2260 << obj->GetName() <<
"' of type '"
2261 << obj->IsA()->GetName() <<
"'\n";
2273 if (! me || overwrite)
2275 if (! me) me =
bookInt(dir, label);
2276 me->
Fill(atoll(value.c_str()));
2279 else if (kind ==
"f")
2282 if (! me || overwrite)
2285 me->
Fill(atof(value.c_str()));
2288 else if (kind ==
"s")
2296 else if (kind ==
"e")
2301 std::cout <<
"*** DQMStore: WARNING: no monitor element '"
2302 << label <<
"' in directory '"
2303 << dir <<
"' to be marked as efficiency plot.\n";
2308 else if (kind ==
"t")
2313 std::cout <<
"*** DQMStore: WARNING: no monitor element '"
2314 << label <<
"' in directory '"
2315 << dir <<
"' for a tag\n";
2320 unsigned long val = strtoul(value.c_str(), &endp, 10);
2321 if ((val == 0 && errno) || *endp || val > ~uint32_t(0))
2323 std::cout <<
"*** DQMStore: WARNING: cannot restore tag '"
2324 << value <<
"' for monitor element '"
2325 << label <<
"' in directory '"
2326 << dir <<
"' - invalid value\n";
2331 else if (kind ==
"qr")
2336 size_t dot = label.find(
'.');
2337 if (dot == std::string::npos)
2339 std::cout <<
"*** DQMStore: WARNING: quality report label in '" << label
2340 <<
"' is missing a '.' and cannot be extracted\n";
2345 std::string qrname (label, dot+1, std::string::npos);
2351 qv.
code = atoi(m.matchString(value, 1).c_str());
2352 qv.
qtresult = strtod(m.matchString(value, 2).c_str(), 0);
2353 qv.
message = m.matchString(value, 4);
2357 else if (
s_rxmeqr2.match(value, 0, 0, &m))
2359 qv.
code = atoi(m.matchString(value, 1).c_str());
2361 qv.
message = m.matchString(value, 2);
2367 std::cout <<
"*** DQMStore: WARNING: quality test value '"
2368 << value <<
"' is incorrectly formatted\n";
2375 std::cout <<
"*** DQMStore: WARNING: no monitor element '"
2376 << mename <<
"' in directory '"
2377 << dir <<
"' for quality test '"
2387 std::cout <<
"*** DQMStore: WARNING: cannot extract object '"
2388 << obj->GetName() <<
"' of type '"
2389 << obj->IsA()->GetName() <<
"'\n";
2393 else if (TNamed *
n = dynamic_cast<TNamed *>(obj))
2397 s.reserve(6 + strlen(
n->GetTitle()) + 2*strlen(
n->GetName()));
2398 s +=
'<'; s +=
n->GetName(); s +=
'>';
2400 s +=
'<'; s +=
'/'; s +=
n->GetName(); s +=
'>';
2401 TObjString os(s.c_str());
2406 std::cout <<
"*** DQMStore: WARNING: cannot extract object '"
2407 << obj->GetName() <<
"' of type '" << obj->IsA()->GetName()
2408 <<
"' and with title '" << obj->GetTitle() <<
"'\n";
2438 size_t end = path.find(
'/', start);
2439 if (end == std::string::npos)
2447 TObject *
o = gDirectory->Get(part.c_str());
2448 if (o && ! dynamic_cast<TDirectory *>(o))
2449 raiseDQMError(
"DQMStore",
"Attempt to create directory '%s' in a file"
2450 " fails because the part '%s' already exists and is not"
2451 " directory", path.c_str(), part.c_str());
2453 gDirectory->mkdir(part.c_str());
2455 if (! gDirectory->cd(part.c_str()))
2456 raiseDQMError(
"DQMStore",
"Attempt to create directory '%s' in a file"
2457 " fails because could not cd into subdirectory '%s'",
2458 path.c_str(), part.c_str());
2461 if (end+1 >= path.size())
2466 end = path.find(
'/', start);
2467 if (end == std::string::npos)
2476 const uint32_t
run ,
2477 const uint32_t
lumi ,
2478 const bool resetMEsAfterWriting )
2480 using google::protobuf::io::FileOutputStream;
2481 using google::protobuf::io::GzipOutputStream;
2482 using google::protobuf::io::StringOutputStream;
2486 std::set<std::string>::iterator di, de;
2487 MEMap::iterator mi, me =
data_.end();
2492 std::cout <<
"\n DQMStore: Opening PBFile '"
2493 << filename <<
"'"<< std::endl;
2496 for (di =
dirs_.begin(), de =
dirs_.end(); di != de; ++di)
2509 mi =
data_.lower_bound(proto);
2510 for ( ; mi != me &&
isSubdirectory(*di, *mi->data_.dirname); ++mi)
2514 <<
" Lumi: " << (*mi).lumi()
2515 <<
" LumiFlag: " << (*mi).getLumiFlag()
2516 <<
" streamId: " << (*mi).streamId()
2517 <<
" moduleId: " << (*mi).moduleId()
2518 <<
" fullpathname: " << (*mi).getFullname() << std::endl;
2525 if (*di != *mi->data_.dirname)
2534 if (run != 0 && (mi->data_.streamId !=0 || mi->data_.moduleId !=0))
2538 std::cout <<
"DQMStore::savePB: saving monitor element '"
2539 << *mi->data_.dirname <<
"/" << mi->data_.objname <<
"'"
2540 <<
"flags " << mi->data_.flags <<
"\n";
2547 TObject *toWrite =
nullptr;
2551 toWrite =
new TObjString(mi->tagString().c_str());
2552 deleteObject =
true;
2554 toWrite = mi->object_;
2557 TBufferFile buffer(TBufferFile::kWrite);
2558 buffer.WriteObject(toWrite);
2568 if (resetMEsAfterWriting)
2573 int filedescriptor =
::open(filename.c_str(),
2574 O_WRONLY | O_CREAT | O_TRUNC,
2578 FileOutputStream file_stream(filedescriptor);
2580 options.format = GzipOutputStream::GZIP;
2581 options.compression_level = 6;
2582 GzipOutputStream gzip_stream(&file_stream,
2584 dqmstore_message.SerializeToZeroCopyStream(&gzip_stream);
2587 gzip_stream.Close();
2588 file_stream.Close();
2589 ::close(filedescriptor);
2593 std::cout <<
"DQMStore::savePB: successfully wrote " << nme
2594 <<
" objects from path '" << path
2595 <<
"' into DQM file '" << filename <<
"'\n";
2608 const uint32_t
run ,
2609 const uint32_t
lumi ,
2613 const bool resetMEsAfterWriting )
2617 std::set<std::string>::iterator di, de;
2618 MEMap::iterator mi, me =
data_.end();
2619 DQMNet::QReports::const_iterator qi, qe;
2627 class TFileNoSync :
public TFile
2630 TFileNoSync(
const char *
file,
const char *opt) : TFile(file, opt) {}
2631 virtual Int_t SysSync(Int_t)
override {
return 0; }
2636 std::cout <<
"\n DQMStore: Opening TFile '" << filename
2637 <<
"' with option '" << fileupdate <<
"'\n";
2639 TFileNoSync
f(filename.c_str(), fileupdate.c_str());
2641 raiseDQMError(
"DQMStore",
"Failed to create/update file '%s'", filename.c_str());
2645 std::auto_ptr<lat::Regexp> rxpat;
2646 if (! pattern.empty())
2647 rxpat.reset(
new lat::Regexp(pattern.c_str()));
2660 for (di =
dirs_.begin(), de =
dirs_.end(); di != de; ++di)
2674 mi =
data_.lower_bound(proto);
2675 for ( ; mi != me &&
isSubdirectory(*di, *mi->data_.dirname); ++mi)
2678 std::cout <<
"DQMStore::save: Run: " << (*mi).run()
2679 <<
" Lumi: " << (*mi).lumi()
2680 <<
" LumiFlag: " << (*mi).getLumiFlag()
2681 <<
" streamId: " << (*mi).streamId()
2682 <<
" moduleId: " << (*mi).moduleId()
2683 <<
" fullpathname: " << (*mi).getFullname() << std::endl;
2690 if (*di != *mi->data_.dirname) {
2692 std::cout <<
"DQMStore::save: isn't a direct child. Skipping" << std::endl;
2702 if (run != 0 && (mi->data_.streamId !=0 || mi->data_.moduleId !=0)) {
2728 for (
size_t i = 0,
e = master->data_.qreports.size();
i !=
e; ++
i)
2729 status =
std::max(status, master->data_.qreports[
i].code);
2731 if (! master || status < minStatus)
2734 std::cout <<
"DQMStore::save: skipping monitor element '"
2735 << mi->data_.objname <<
"' while saving, status is "
2736 << status <<
", required minimum status is "
2737 << minStatus << std::endl;
2744 std::cout <<
"DQMStore::save: saving monitor element '"
2745 << mi->data_.objname <<
"'\n";
2749 gDirectory->cd(
"/");
2752 else if (rxpat.get())
2763 TObjString(mi->tagString().c_str()).Write();
2767 mi->object_->Write();
2774 qi = mi->data_.qreports.begin();
2775 qe = mi->data_.qreports.end();
2776 for ( ; qi != qe; ++qi)
2777 TObjString(mi->qualityTagString(*qi).c_str()).Write();
2782 TObjString(mi->effLabelString().c_str()).Write();
2786 TObjString(mi->tagLabelString().c_str()).Write();
2789 if (resetMEsAfterWriting)
2798 std::cout <<
"DQMStore::save: successfully wrote " << nme
2799 <<
" objects from path '" << path
2800 <<
"' into DQM file '" << filename <<
"'\n";
2813 unsigned int ntot = 0;
2814 unsigned int count = 0;
2816 if (! file->cd(curdir.c_str()))
2817 raiseDQMError(
"DQMStore",
"Failed to process directory '%s' while"
2818 " reading file '%s'", curdir.c_str(), file->GetName());
2841 size_t slash = dirpart.find(
'/');
2842 size_t pos = dirpart.find(
"/Run summary");
2843 if (slash != std::string::npos && pos !=std::string::npos)
2845 dirpart.erase(pos,12);
2847 pos = dirpart.find(
"Run ");
2848 size_t length = dirpart.find(
'/',pos+1)-pos+1;
2849 if (pos !=std::string::npos)
2850 dirpart.erase(pos,length);
2859 size_t slash = dirpart.find(
'/');
2861 if (slash == std::string::npos
2866 slash = dirpart.find(
'/');
2868 if (slash != std::string::npos
2869 && slash + 10 == dirpart.size()
2870 && dirpart.compare( slash+1 , 9 ,
"EventInfo") == 0) {
2872 std::cout <<
"DQMStore::readDirectory: skipping '" << dirpart <<
"'\n";
2877 if (dirpart.empty())
2880 dirpart = prepend +
'/' + dirpart;
2882 else if (! prepend.empty())
2884 if (dirpart.empty())
2887 dirpart = prepend +
'/' + dirpart;
2895 TIter
next (gDirectory->GetListOfKeys());
2896 std::list<TObject *> delayed;
2897 while ((key = (TKey *)
next()))
2899 std::auto_ptr<TObject>
obj(key->ReadObj());
2900 if (dynamic_cast<TDirectory *>(
obj.get()))
2903 subdir.reserve(curdir.size() + strlen(
obj->GetName()) + 2);
2905 if (! curdir.empty())
2907 subdir +=
obj->GetName();
2909 ntot +=
readDirectory(file, overwrite, onlypath, prepend, subdir, stripdirs);
2913 else if (dynamic_cast<TObjString *>(
obj.get()))
2915 delayed.push_back(
obj.release());
2920 std::cout <<
"DQMStore: reading object '" <<
obj->GetName()
2921 <<
"' of type '" <<
obj->IsA()->GetName()
2922 <<
"' from '" << file->GetName()
2923 <<
"' into '" << dirpart <<
"'\n";
2931 while (! delayed.empty())
2934 std::cout <<
"DQMStore: reading object '" << delayed.front()->GetName()
2935 <<
"' of type '" << delayed.front()->IsA()->GetName()
2936 <<
"' from '" << file->GetName()
2937 <<
"' into '" << dirpart <<
"'\n";
2943 delete delayed.front();
2944 delayed.pop_front();
2948 std::cout <<
"DQMStore: read " << count <<
'/' << ntot
2949 <<
" objects from directory '" << dirpart <<
"'\n";
2951 return ntot +
count;
2966 bool fileMustExist )
2968 return readFile(filename,overwrite,onlypath,prepend,stripdirs,fileMustExist);
2978 bool fileMustExist )
2980 bool overwrite =
true;
2984 std::cout <<
"DQMStore::load: reading from file '" << filename <<
"'\n";
2986 std::cout <<
"DQMStore::load: in collate mode " <<
"\n";
2988 std::cout <<
"DQMStore::load: in overwrite mode " <<
"\n";
2992 return readFile(filename, overwrite,
"",
"", stripdirs, fileMustExist);
2994 return readFilePB(filename, overwrite,
"",
"", stripdirs, fileMustExist);
3008 bool fileMustExist )
3012 std::cout <<
"DQMStore::readFile: reading from file '" << filename <<
"'\n";
3014 std::auto_ptr<TFile>
f;
3018 f.reset(TFile::Open(filename.c_str()));
3019 if (! f.get() || f->IsZombie())
3020 raiseDQMError(
"DQMStore",
"Failed to open file '%s'", filename.c_str());
3029 std::cout <<
"DQMStore::readFile: file '" << filename <<
"' does not exist, continuing\n";
3034 unsigned n =
readDirectory(f.get(), overwrite, onlypath, prepend,
"", stripdirs);
3037 MEMap::iterator mi =
data_.begin();
3038 MEMap::iterator me =
data_.end();
3039 for ( ; mi != me; ++mi)
3040 const_cast<MonitorElement &>(*mi).updateQReportStats();
3044 std::cout <<
"DQMStore::open: successfully read " << n
3045 <<
" objects from file '" << filename <<
"'";
3046 if (! onlypath.empty())
3047 std::cout <<
" from directory '" << onlypath <<
"'";
3048 if (! prepend.empty())
3049 std::cout <<
" into directory '" << prepend <<
"'";
3059 if (buf.Length() == buf.BufferSize())
3062 void *ptr = buf.ReadObjectAny(0);
3063 return reinterpret_cast<TObject *
>(ptr);
3072 size_t dirpos = (slash == std::string::npos ? 0 :
slash);
3073 size_t namepos = (slash == std::string::npos ? 0 : slash+1);
3075 objname.assign(h.
full_pathname(), namepos, std::string::npos);
3076 TBufferFile buf(TBufferFile::kRead, h.
size(),
3092 bool fileMustExist )
3094 using google::protobuf::io::FileInputStream;
3095 using google::protobuf::io::FileOutputStream;
3096 using google::protobuf::io::GzipInputStream;
3097 using google::protobuf::io::GzipOutputStream;
3098 using google::protobuf::io::CodedInputStream;
3099 using google::protobuf::io::ArrayInputStream;
3102 std::cout <<
"DQMStore::readFile: reading from file '" << filename <<
"'\n";
3105 if ((filedescriptor = ::
open(filename.c_str(), O_RDONLY)) == -1) {
3107 raiseDQMError(
"DQMStore",
"Failed to open file '%s'", filename.c_str());
3110 std::cout <<
"DQMStore::readFile: file '" << filename <<
"' does not exist, continuing\n";
3115 FileInputStream
fin(filedescriptor);
3116 GzipInputStream
input(&fin);
3117 CodedInputStream input_coded(&input);
3118 input_coded.SetTotalBytesLimit(1024*1024*1024, -1);
3119 if (!dqmstore_message.ParseFromCodedStream(&input_coded)) {
3120 raiseDQMError(
"DQMStore",
"Fatal parsing file '%s'", filename.c_str());
3123 ::close(filedescriptor);
3147 extract(static_cast<TObject *>(obj), path, overwrite, collate);
3149 if (me ==
nullptr) {
3175 MEMap::iterator
e =
data_.end();
3176 MEMap::iterator
i =
data_.lower_bound(proto);
3180 std::set<std::string>::iterator de =
dirs_.end();
3181 std::set<std::string>::iterator di =
dirs_.lower_bound(*cleaned);
3191 MEMap::iterator
e =
data_.end();
3192 MEMap::iterator
i =
data_.lower_bound(proto);
3194 if (dir == *i->data_.dirname)
3221 MEMap::iterator pos =
data_.find(proto);
3222 if (pos !=
data_.end())
3225 std::cout <<
"DQMStore: WARNING: attempt to remove non-existent"
3226 <<
" monitor element '" << name <<
"' in '" << dir <<
"'\n";
3237 QCMap::const_iterator
i =
qtests_.find(qtname);
3238 QCMap::const_iterator
e =
qtests_.end();
3239 return (i == e ? 0 : i->second);
3249 raiseDQMError(
"DQMStore",
"Attempt to create duplicate quality test '%s'",
3252 QAMap::iterator
i =
qalgos_.find(algoname);
3254 raiseDQMError(
"DQMStore",
"Cannot create a quality test using unknown"
3255 " algorithm '%s'", algoname.c_str());
3275 if (cleaned->find_first_not_of(
s_safe) != std::string::npos)
3277 " uses unacceptable characters", cleaned->c_str());
3289 raiseDQMError(
"DQMStore",
"Cannot apply non-existent quality test '%s'",
3299 MEMap::iterator mi =
data_.begin();
3300 MEMap::iterator me =
data_.end();
3303 for ( ; mi != me; ++mi)
3306 mergePath(path, *mi->data_.dirname, mi->data_.objname);
3307 if (fm->match(path))
3324 std::cout <<
"DQMStore: running runQTests() with reset = "
3325 << (
reset_ ?
"true" :
"false" ) << std::endl;
3328 MEMap::iterator mi =
data_.begin();
3329 MEMap::iterator me =
data_.end();
3330 for ( ; mi != me; ++mi)
3348 MEMap::const_iterator mi =
data_.begin();
3349 MEMap::const_iterator me =
data_.end();
3350 for ( ; mi != me; ++mi)
3352 if (! cleaned->empty() && !
isSubdirectory(*cleaned, *mi->data_.dirname))
3357 else if (mi->hasWarning())
3360 && mi->hasOtherReport())
3404 std::cout <<
" ------------------------------------------------------------\n"
3405 <<
" Directory structure: \n"
3406 <<
" ------------------------------------------------------------\n";
3408 std::copy(contents.begin(), contents.end(),
3409 std::ostream_iterator<std::string>(
std::cout,
"\n"));
3411 std::cout <<
" ------------------------------------------------------------\n";
3448 MonitorElement * event_me =
get(
"Info/EventInfo/processedEvents");
3451 factor = factor/(events*1.0);
3453 MEMap::iterator mi =
data_.begin();
3454 MEMap::iterator me =
data_.end();
3455 for ( ; mi != me; ++mi)
3507 std::cout <<
" The DQM object '" << me.
getFullname() <<
"' is not scalable object " << std::endl;
QCriterion * getQCriterion(const std::string &qtname) const
bool compare_strings_reverse(std::string const &pattern, std::string const &input) const
std::pair< fastmatch *, QCriterion * > QTestSpec
TH2S * getTH2S(void) const
TH1S * getTH1S(void) const
T getUntrackedParameter(std::string const &, T const &) const
DQMStore(const edm::ParameterSet &pset, edm::ActivityRegistry &)
static const lat::Regexp s_rxmeqr2("^st\\.(\\d+)\\.(.*)$")
MonitorElement * book2S(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2S histogram.
bool containsAnyMonitorable(const std::string &path) const
inline::google::protobuf::uint32 size() const
bool isCollateME(MonitorElement *me) const
void resetUpdate(void)
reset "was updated" flag
tuple start
Check for commandline option errors.
bool cdInto(const std::string &path) const
const ::std::string & full_pathname() const
int getStatus(const std::string &path="") const
MonitorElement * initialise(Kind kind)
static void mergePath(std::string &path, const std::string &dir, const std::string &name)
std::vector< std::string > getSubdirs(void) const
TProfile2D * getTProfile2D(void) const
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void rmdir(const std::string &fullpath)
static void collate3D(MonitorElement *me, TH3F *h, unsigned verbose)
bool match(std::string const &s) const
bool readFile(const std::string &filename, bool overwrite=false, const std::string &path="", const std::string &prepend="", OpenRunDirs stripdirs=StripRunDirs, bool fileMustExist=true)
MonitorElement * findObject(const std::string &dir, const std::string &name, const uint32_t run=0, const uint32_t lumi=0, const uint32_t streamId=0, const uint32_t moduleId=0) const
static void collateProfile(MonitorElement *me, TProfile *h, unsigned verbose)
MonitorElement * book3D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, int nchZ, double lowZ, double highZ)
Book 3D histogram.
void setLumi(uint32_t ls)
void cd(void)
go to top directory (ie. root)
MonitorElement * get(const std::string &path)
MonitorElement * book2DD(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D double histogram.
static const std::string s_safe
static void splitPath(std::string &dir, std::string &name, const std::string &path)
const std::string & pwd(void)
void disableSoftReset(void)
reverts action of softReset
static void collate2DD(MonitorElement *me, TH2D *h, unsigned verbose)
std::vector< MonitorElement * > getMatchingContents(const std::string &pattern, lat::Regexp::Syntax syntaxType=lat::Regexp::Wildcard) const
TH3F * getTH3F(void) const
static const uint32_t DQM_PROP_TAGGED
TH1D * getTH1D(void) const
MatchingHeuristicEnum matching_
void runQTests(void)
run all quality tests
static const uint32_t DQM_PROP_EFFICIENCY_PLOT
TH2D * getTH2D(void) const
const std::string * dirname
MonitorElement * book1DD(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1S histogram.
void initializeFrom(const edm::ParameterSet &)
void set_flags(::google::protobuf::uint32 value)
const ::std::string & streamed_histo() const
void initQCriterion(std::map< std::string, QCriterion *(*)(const std::string &)> &m)
static const std::string s_collateDirName
MonitorElement * book(const std::string &dir, const std::string &name, const char *context)
static const std::string s_monitorDirName
name of global monitoring folder (containing all sources subdirectories)
MonitorElement * bookFloat(const char *name)
Book float.
static std::string const input
static const lat::Regexp s_rxtrace("(.*)\\((.*)\\+0x.*\\).*")
static void cleanTrailingSlashes(const std::string &path, std::string &clean, const std::string *&cleaned)
Preallocate preallocateSignal_
signal is emitted before beginJob
void tag(MonitorElement *me, unsigned int myTag)
void disableSoftReset(MonitorElement *me)
unsigned int maxNumberOfStreams() const
static const lat::Regexp s_rxmeval("^<(.*)>(i|f|s|e|t|qr)=(.*)</\\1>$")
static bool isSubdirectory(const std::string &ofdir, const std::string &path)
std::vector< MonitorElement * > getAllContents(const std::string &path, uint32_t runNumber=0, uint32_t lumi=0) const
fastmatch(std::string const &_fastString)
static const uint32_t DQM_PROP_HAS_REFERENCE
void removeContents(void)
erase all monitoring elements in current directory (not including subfolders);
void deleteUnusedLumiHistograms(uint32_t run, uint32_t lumi)
void get_info(const dqmstorepb::ROOTFilePB_Histo &, std::string &dirname, std::string &objname, TObject **obj)
void watchPostSourceRun(PostSourceRun::slot_type const &iSlot)
MonitorElement * bookString(const char *name, const char *value)
Book string.
bool isCollate(void) const
void removeElement(const std::string &name)
void addProfiles(TProfile *h1, TProfile *h2, TProfile *sum, float c1, float c2)
static void collateProfile2D(MonitorElement *me, TProfile2D *h, unsigned verbose)
double getFloatValue(void) const
void tag(MonitorElement *, unsigned int)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
QCriterion * makeQCriterion(const std::string &qtname)
void setVerbose(unsigned level)
void softReset(MonitorElement *me)
Kind kind(void) const
Get the type of the monitor element.
TObject * extractNextObject(TBufferFile &) const
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. "my/long/dir/my_histo")
const std::string getFullname(void) const
get full name of ME including Pathname
std::vector< MonitorElement * > getContents(const std::string &path) const
string key
FastSim: produces sample of signal events, overlayed with premixed minbias events.
std::string readSelectedDirectory_
std::vector< std::string > getMEs(void)
void mergeAndResetMEsRunSummaryCache(uint32_t run, uint32_t streamId, uint32_t moduleId)
bool dirExists(const std::string &path) const
true if directory exists
void savePB(const std::string &filename, const std::string &path="", const uint32_t run=0, const uint32_t lumi=0, const bool resetMEsAfterWriting=false)
void getAllTags(std::vector< std::string > &into) const
bool dirExists(const std::string &path)
bool load(const std::string &filename, OpenRunDirs stripdirs=StripRunDirs, bool fileMustExist=true)
static void collate1DD(MonitorElement *me, TH1D *h, unsigned verbose)
void tagAllContents(const std::string &path, unsigned int myTag)
void setCurrentFolder(const std::string &fullpath)
MonitorElement * initialise(MonitorElement *me, const std::string &path)
void watchPostSourceLumi(PostSourceLumi::slot_type const &iSlot)
bool containsAnyMonitorable(const std::string &path)
void tagContents(const std::string &, unsigned int)
const ::dqmstorepb::ROOTFilePB_Histo & histo(int index) const
void set_size(::google::protobuf::uint32 value)
int64_t getIntValue(void) const
static const std::string s_referenceDirName
void print_trace(const std::string &dir, const std::string &name)
int useQTestByMatch(const std::string &pattern, const std::string &qtname)
attach quality test <qc> to monitor elements matching <pattern>.
std::vector< MonitorElement * > getAllContents(const std::string &path, uint32_t runNumber=0, uint32_t lumi=0)
TH1F * getTH1F(void) const
static void collate1D(MonitorElement *me, TH1F *h, unsigned verbose)
static const lat::Regexp s_rxpbfile(".*\\.pb$")
std::vector< std::string > getMEs(void) const
get list of (non-dir) MEs of current directory
std::vector< std::string > getSubdirs(void)
void setCurrentFolder(const std::string &fullpath)
bool resetMe(void) const
true if ME should be reset at end of monitoring cycle
void set_full_pathname(const ::std::string &value)
unsigned int readDirectory(TFile *file, bool overwrite, const std::string &path, const std::string &prepend, const std::string &curdir, OpenRunDirs stripdirs)
void setVerbose(int verbose)
probability limits for warnings, errors
bool extract(TObject *obj, const std::string &dir, bool overwrite, bool collateHistograms)
bool forceResetOnBeginLumi_
T dot(const Basic3DVector &v) const
Scalar product, or "dot" product, with a vector of same type.
std::vector< boost::shared_ptr< fireworks::OptionNode > > Options
void tagContents(const std::string &path, unsigned int myTag)
tag all children of folder (does NOT include subfolders)
inline::dqmstorepb::ROOTFilePB_Histo * add_histo()
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, const uint32_t lumi=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE", const bool resetMEsAfterWriting=false)
bool readFilePB(const std::string &filename, bool overwrite=false, const std::string &path="", const std::string &prepend="", OpenRunDirs stripdirs=StripRunDirs, bool fileMustExist=true)
TProfile * getTProfile(void) const
void useQTest(const std::string &dir, const std::string &qtname)
void goUp(void)
equivalent to "cd .."
bool open(const std::string &filename, bool overwrite=false, const std::string &path="", const std::string &prepend="", OpenRunDirs stripdirs=KeepRunDirs, bool fileMustExist=true)
inline::google::protobuf::uint32 flags() const
static const int STATUS_OK
void setAccumulate(MonitorElement *me, bool flag)
void setEfficiencyFlag(void)
static void collate1S(MonitorElement *me, TH1S *h, unsigned verbose)
void Reset(std::vector< TH2F > &depth)
QCriterion * createQTest(const std::string &algoname, const std::string &qtname)
static bool checkBinningMatches(MonitorElement *me, TH1 *h, unsigned verbose)
volatile std::atomic< bool > shutdown_flag false
void showDirStructure(void) const
bool deleteObject(T *fObject, const std::string &fInput, const std::string &fInputTag, HcalDbTool::IOVRun fInputRun, bool fVerbose)
TH2F * getTH2F(void) const
if(conf.exists("allCellsPositionCalc"))
static void collate2D(MonitorElement *me, TH2F *h, unsigned verbose)
MonitorElement * bookInt(const char *name)
Book int.
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
for(const auto &isodef:isoDefs)
void mergeAndResetMEsLuminositySummaryCache(uint32_t run, uint32_t lumi, uint32_t streamId, uint32_t moduleId)
std::set< std::string > dirs_
void Reset(void)
reset ME (ie. contents, errors, etc)
static const uint32_t DQM_PROP_LUMI
static std::string const source
void addQReport(const DQMNet::QValue &desc, QCriterion *qc)
Add quality report, from DQMStore.
MonitorElement * book1S(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1S histogram.
tuple size
Write out results.
static const lat::Regexp s_rxmeqr1("^st:(\\d+):([-+e.\\d]+):([^:]*):(.*)$")
void makeDirectory(const std::string &path)
bool compare_strings(std::string const &pattern, std::string const &input) const
void setCurrentFolder(const std::string &fullpath)
static void collate2S(MonitorElement *me, TH2S *h, unsigned verbose)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
const std::string & pwd(void) const
void set_streamed_histo(const ::std::string &value)
static bool CheckBinLabels(const TAxis *a1, const TAxis *a2)
Check the consistency of the axis labels.
MonitorElement * bookProfile2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, int nchZ, double lowZ, double highZ, const char *option="s")
void raiseDQMError(const char *context, const char *fmt,...)