Skip to content

Commit c0af007

Browse files
committed
Fix TH2Poly handling in DQM Monitor Elements
- Add support for GetNcells() to identify empty TH2Poly objects - Update Reset() functionality for DQM Monitor Elements - Fix bin accumulation issue in TH2Poly addition - Add more support for TH2Poly::AddBin() methods - Add unit tests with polygonal bins
1 parent 07470c1 commit c0af007

File tree

6 files changed

+129
-100
lines changed

6 files changed

+129
-100
lines changed

DQMServices/Core/interface/MonitorElement.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ namespace dqm::impl {
376376
virtual int getNbinsY() const;
377377
virtual int getNbinsZ() const;
378378
virtual int getBin(int binx, int biny) const;
379+
virtual int getNcells() const;
379380
virtual std::string getAxisTitle(int axis = 1) const;
380381
virtual std::string getTitle() const;
381382

@@ -401,6 +402,8 @@ namespace dqm::impl {
401402

402403
// non-const -- thread safety and semantical issues
403404
virtual void addBin(TGraph *graph);
405+
virtual void addBin(int n, const double *x, const double *y);
406+
virtual void addBin(double x1, double y1, double x2, double y2);
404407
virtual void setBinContent(int binx, double content);
405408
virtual void setBinContent(int binx, int biny, double content);
406409
virtual void setBinContent(int binx, int biny, int binz, double content);

DQMServices/Core/src/MonitorElement.cc

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,32 @@ namespace dqm::impl {
365365
access.value.scalar_.real = 0;
366366
else if (kind() == Kind::STRING)
367367
access.value.scalar_.str.clear();
368-
else
368+
else if (kind() == Kind::TH1F)
369+
return accessRootObject(access, __PRETTY_FUNCTION__, 1)->Reset();
370+
else if (kind() == Kind::TH1S)
371+
return accessRootObject(access, __PRETTY_FUNCTION__, 1)->Reset();
372+
else if (kind() == Kind::TH1D)
373+
return accessRootObject(access, __PRETTY_FUNCTION__, 1)->Reset();
374+
else if (kind() == Kind::TH1I)
375+
return accessRootObject(access, __PRETTY_FUNCTION__, 1)->Reset();
376+
else if (kind() == Kind::TPROFILE)
369377
return accessRootObject(access, __PRETTY_FUNCTION__, 1)->Reset();
378+
else if (kind() == Kind::TH2F)
379+
return accessRootObject(access, __PRETTY_FUNCTION__, 2)->Reset();
380+
else if (kind() == Kind::TH2S)
381+
return accessRootObject(access, __PRETTY_FUNCTION__, 2)->Reset();
382+
else if (kind() == Kind::TH2D)
383+
return accessRootObject(access, __PRETTY_FUNCTION__, 2)->Reset();
384+
else if (kind() == Kind::TH2I)
385+
return accessRootObject(access, __PRETTY_FUNCTION__, 2)->Reset();
386+
else if (kind() == Kind::TH2Poly)
387+
return accessRootObject(access, __PRETTY_FUNCTION__, 2)->Reset();
388+
else if (kind() == Kind::TPROFILE2D)
389+
return accessRootObject(access, __PRETTY_FUNCTION__, 2)->Reset();
390+
else if (kind() == Kind::TH3F)
391+
return accessRootObject(access, __PRETTY_FUNCTION__, 3)->Reset();
392+
else
393+
incompatible(__PRETTY_FUNCTION__);
370394
}
371395

372396
/// convert scalar data into a string.
@@ -646,6 +670,12 @@ namespace dqm::impl {
646670
}
647671
}
648672

673+
// Returns number of cells (9 indicates empty TH2Poly without user-defined bins)
674+
int MonitorElement::getNcells() const {
675+
auto access = this->access();
676+
return accessRootObject(access, __PRETTY_FUNCTION__, 1)->GetNcells();
677+
}
678+
649679
/// get # of bin entries (for profiles)
650680
double MonitorElement::getBinEntries(int bin) const {
651681
auto access = this->access();
@@ -691,8 +721,8 @@ namespace dqm::impl {
691721
}
692722

693723
/*** setter methods (wrapper around ROOT methods) ****/
694-
//
695-
/// set polygon bin (TH2Poly)
724+
725+
// Add a polygonal bin to a TH2Poly histogram through TGraph
696726
void MonitorElement::addBin(TGraph *graph) {
697727
auto access = this->accessMut();
698728
if (kind() == Kind::TH2Poly) {
@@ -702,6 +732,26 @@ namespace dqm::impl {
702732
}
703733
}
704734

735+
// Add a polygonal bin to a TH2Poly histogram through arrays
736+
void MonitorElement::addBin(int n, const double *x, const double *y) {
737+
auto access = this->accessMut();
738+
if (kind() == Kind::TH2Poly) {
739+
static_cast<TH2Poly *>(accessRootObject(access, __PRETTY_FUNCTION__, 2))->AddBin(n, x, y);
740+
} else {
741+
incompatible(__PRETTY_FUNCTION__);
742+
}
743+
}
744+
745+
// Add a rectangular bin to a TH2Poly histogram
746+
void MonitorElement::addBin(double x1, double y1, double x2, double y2) {
747+
auto access = this->accessMut();
748+
if (kind() == Kind::TH2Poly) {
749+
static_cast<TH2Poly *>(accessRootObject(access, __PRETTY_FUNCTION__, 2))->AddBin(x1, y1, x2, y2);
750+
} else {
751+
incompatible(__PRETTY_FUNCTION__);
752+
}
753+
}
754+
705755
/// set content of bin (1-D)
706756
void MonitorElement::setBinContent(int binx, double content) {
707757
auto access = this->accessMut();

DQMServices/Demo/test/TestDQMEDAnalyzer.cc

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,24 @@
77

88
template <typename BOOKERLIKE, typename ME, bool DOLUMI = false>
99
class BookerFiller {
10+
private:
11+
struct PolygonDef {
12+
int nPoints;
13+
std::vector<double> x;
14+
std::vector<double> y;
15+
};
16+
std::vector<PolygonDef> m_polygons;
17+
1018
public:
1119
BookerFiller(std::string folder, int howmany) {
1220
this->howmany = howmany;
1321
this->folder = folder;
22+
m_polygons = {
23+
{6, {37.5, 25.0, -0.5, -0.5, 25.0, 37.5}, {5.0, -0.5, -0.5, 10.0, 10.0, 5.0}}, // polygon-1: n, x, y
24+
{5, {37.5, 25.0, 75.0, 62.5, 37.5}, {5.0, 10.0, 10.0, 5.0, 5.0}}, // polygon-2: n, x, y
25+
{5, {37.5, 25.0, 75.0, 62.5, 37.5}, {5.0, -0.5, -0.5, 5.0, 5.0}}, // polygon-3: n, x, y
26+
{6, {62.5, 75.0, 100.0, 100.0, 75.0, 62.5}, {5.0, 10.0, 10.0, -0.5, -0.5, 5.0}} // polygon-3: n, x, y
27+
};
1428
}
1529

1630
BookerFiller() {}
@@ -34,8 +48,16 @@ class BookerFiller {
3448
mes_2D.push_back(ibooker.book2D("th2f" + num, "2D Float Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
3549
mes_2D.push_back(ibooker.book2S("th2s" + num, "2D Short Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
3650
mes_2D.push_back(ibooker.book2DD("th2d" + num, "2D Double Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
37-
mes_2D.push_back(
38-
ibooker.book2DPoly("th2poly" + num, "2D Polygonal Double Histogram " + num, -0.5, 100.5, -0.5, 10.5));
51+
auto th2poly_main =
52+
ibooker.book2DPoly("th2poly" + num, "2D Polygonal Double Histogram " + num, -0.5, 100.5, -0.5, 10.5);
53+
int nCells = th2poly_main->getNcells();
54+
// Only add bins if they don't exist yet (nCells<=9)
55+
if (nCells <= 9) {
56+
for (const auto& poly : m_polygons) {
57+
th2poly_main->addBin(poly.nPoints, poly.x.data(), poly.y.data());
58+
}
59+
}
60+
mes_2D.push_back(th2poly_main);
3961
mes_2D.push_back(ibooker.book2I("th2i" + num, "2D Integer Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
4062
mes_2D.push_back(
4163
ibooker.bookProfile("tprofile" + num, "1D Profile Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
@@ -59,8 +81,16 @@ class BookerFiller {
5981
mes_2D.push_back(ibooker.book2D("th2f" + num, "2D Float Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
6082
mes_2D.push_back(ibooker.book2S("th2s" + num, "2D Short Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
6183
mes_2D.push_back(ibooker.book2DD("th2d" + num, "2D Double Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
62-
mes_2D.push_back(
63-
ibooker.book2DPoly("th2poly" + num, "2D Polygonal Double Histogram " + num, -0.5, 100.5, -0.5, 10.5));
84+
auto th2poly_lumi =
85+
ibooker.book2DPoly("th2poly" + num, "2D Polygonal Double Histogram " + num, -0.5, 100.5, -0.5, 10.5);
86+
int nCells_lumi = th2poly_lumi->getNcells();
87+
// Only add bins if they don't exist yet (nCells<=9)
88+
if (nCells_lumi <= 9) {
89+
for (const auto& poly : m_polygons) {
90+
th2poly_lumi->addBin(poly.nPoints, poly.x.data(), poly.y.data());
91+
}
92+
}
93+
mes_2D.push_back(th2poly_lumi);
6494
mes_2D.push_back(ibooker.book2I("th2i" + num, "2D Integer Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
6595
mes_2D.push_back(
6696
ibooker.bookProfile("tprofile" + num, "1D Profile Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
@@ -268,8 +298,7 @@ class TestDQMGlobalEDAnalyzer : public DQMGlobalEDAnalyzer<TestHistograms> {
268298
edm::Run const&,
269299
edm::EventSetup const&,
270300
TestHistograms& h) const override {
271-
h.folder = this->folder_;
272-
h.howmany = this->howmany_;
301+
h = TestHistograms(this->folder_, this->howmany_);
273302
h.bookall(ibooker);
274303
}
275304

@@ -294,7 +323,7 @@ class TestDQMGlobalRunSummaryEDAnalyzer : public DQMGlobalRunSummaryEDAnalyzer<T
294323

295324
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
296325
edm::ParameterSetDescription desc;
297-
desc.add<std::string>("folder", "Global/testglobal")->setComment("Where to put all the histograms");
326+
desc.add<std::string>("folder", "Global/testglobalrunsummary")->setComment("Where to put all the histograms");
298327
desc.add<int>("howmany", 1)->setComment("How many copies of each ME to put");
299328
desc.add<double>("value", 1)->setComment("Which value to use on the third axis (first two are lumi and run)");
300329
descriptions.add("testglobalrunsummary", desc);
@@ -309,8 +338,7 @@ class TestDQMGlobalRunSummaryEDAnalyzer : public DQMGlobalRunSummaryEDAnalyzer<T
309338
edm::Run const&,
310339
edm::EventSetup const&,
311340
TestHistograms& h) const override {
312-
h.folder = this->folder_;
313-
h.howmany = this->howmany_;
341+
h = TestHistograms(this->folder_, this->howmany_);
314342
h.bookall(ibooker);
315343
}
316344

DQMServices/Demo/test/runtests.sh

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ set -x
77
# 1. Run a very simple configuration with all module types.
88
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=alltypes.root numberEventsInRun=100 numberEventsInLuminosityBlock=20 nEvents=100
99
# actually we'd expect 99, but the MEs by legacy modules are booked with JOB scope and cannot be saved to DQMIO.
10-
[ 84 = $(dqmiolistmes.py alltypes.root -r 1 | wc -l) ]
10+
[ 98 = $(dqmiolistmes.py alltypes.root -r 1 | wc -l) ]
1111
[ 84 = $(dqmiolistmes.py alltypes.root -r 1 -l 1 | wc -l) ]
1212
# this is deeply related to what the analyzers actually do.
1313
# again, the legacy modules output is not saved.
@@ -16,14 +16,14 @@ cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=alltypes.root numberEvent
1616
# testonefilllumi also should have 5 entries in the histograms (9 more)
1717
# the "fillrun" module should have one entry in the histograms (9 total) and 0 in the scalars (2 total)
1818

19-
[ "0: 7, 0.0: 1, 1: 11, 100: 33, 200: 11, 5: 16, 5.0: 5" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 --summary)" ]
19+
[ "0: 1, 0.0: 1, 1: 12, 100: 60, 5: 18, 5.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 --summary)" ]
2020
# per lumi we see 20 in most histograms (4*9), and the current lumi number in the scalars (6 modules * 2).
2121
# the two fillumi modules should have one entry in each of the lumi histograms, (2*9 total)
22-
[ "0: 6, 1: 28, 1.0: 6, 20: 44" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 1 --summary)" ]
23-
[ "0: 6, 1: 22, 2: 6, 2.0: 6, 20: 44" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 2 --summary)" ]
24-
[ "0: 6, 1: 22, 20: 44, 3: 6, 3.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 3 --summary)" ]
25-
[ "0: 6, 1: 22, 20: 44, 4: 6, 4.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 4 --summary)" ]
26-
[ "0: 6, 1: 22, 20: 44, 5: 6, 5.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 5 --summary)" ]
22+
[ "1: 30, 1.0: 6, 20: 48" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 1 --summary)" ]
23+
[ "1: 24, 2: 6, 2.0: 6, 20: 48" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 2 --summary)" ]
24+
[ "1: 24, 20: 48, 3: 6, 3.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 3 --summary)" ]
25+
[ "1: 24, 20: 48, 4: 6, 4.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 4 --summary)" ]
26+
[ "1: 24, 20: 48, 5: 6, 5.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 5 --summary)" ]
2727
# just make sure we are not off by one
2828
[ "" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py alltypes.root -r 1 -l 6 --summary)" ]
2929

@@ -39,16 +39,15 @@ cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=nolegacy-cl.root numberEv
3939
# same math as above, just a few less modules, and more events.
4040
for f in nolegacy.root nolegacy-mt.root nolegacy-cl.root
4141
do
42-
[ "0: 5, 0.0: 1, 1: 11, 1000: 22, 2000: 11, 5: 3, 5.0: 3" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 --summary)" ]
43-
[ "0: 2, 1: 2, 1.0: 2, 200: 22" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 1 --summary)" ]
44-
[ "0: 2, 2: 2, 2.0: 2, 200: 22" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 2 --summary)" ]
45-
[ "0: 2, 200: 22, 3: 2, 3.0: 2" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 3 --summary)" ]
46-
[ "0: 2, 200: 22, 4: 2, 4.0: 2" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 4 --summary)" ]
47-
[ "0: 2, 200: 22, 5: 2, 5.0: 2" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 5 --summary)" ]
42+
[ "0: 1, 0.0: 1, 1: 12, 1000: 48, 5: 4, 5.0: 4" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 --summary)" ]
43+
[ "1: 2, 1.0: 2, 200: 24" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 1 --summary)" ]
44+
[ "2: 2, 2.0: 2, 200: 24" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 2 --summary)" ]
45+
[ "200: 24, 3: 2, 3.0: 2" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 3 --summary)" ]
46+
[ "200: 24, 4: 2, 4.0: 2" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 4 --summary)" ]
47+
[ "200: 24, 5: 2, 5.0: 2" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 5 --summary)" ]
4848
[ "" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py $f -r 1 -l 6 --summary)" ]
4949
done
5050

51-
5251
# 4. Try crossing a run boundary.
5352
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=multirun.root numberEventsInRun=300 numberEventsInLuminosityBlock=100 nEvents=1200
5453
dqmiodumpmetadata.py multirun.root | grep -q '4 runs, 12 lumisections'
@@ -88,7 +87,7 @@ cmp <(${SCRAM_TEST_PATH}/dqmiodumpentries.py multirun.root -r 1 -l 2) <(${SCRAM_
8887
cmsRun ${SCRAM_TEST_PATH}/run_harvesters_cfg.py inputFiles=alltypes.root nomodules=True legacyoutput=True reScope=JOB
8988
# this number is rather messy: we have 66 per-lumi objecs (harvested), 66 per-run objects (no legacy output), one folder for each set of 11,
9089
# plus some higher-level folders and the ProvInfo hierarchy create by the FileSaver.
91-
[ 197 = $(rootlist DQM_V0001_R000000001__Harvesting__DQMTests__DQMIO.root | wc -l) ]
90+
[ 212 = $(rootlist DQM_V0001_R000000001__Harvesting__DQMTests__DQMIO.root | wc -l) ]
9291

9392
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py numberEventsInRun=100 numberEventsInLuminosityBlock=20 nEvents=100 legacyoutput=True
9493
# we expect only the (per-job) legacy histograms here: 3*11 objects in 3 folders, plus 9 more for ProvInfo and higher-level folders.
@@ -98,25 +97,25 @@ cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py numberEventsInRun=100 numberEvent
9897
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py numberEventsInRun=300 numberEventsInLuminosityBlock=100 nEvents=1200 protobufoutput=True
9998

10099
cmsRun ${SCRAM_TEST_PATH}/run_harvesters_cfg.py inputFiles=./run000001 outfile=pbdata.root nomodules=True protobufinput=True
101-
[ 126 = $(dqmiolistmes.py pbdata.root -r 1 | wc -l) ]
100+
[ 140 = $(dqmiolistmes.py pbdata.root -r 1 | wc -l) ]
102101
[ 84 = $(dqmiolistmes.py pbdata.root -r 1 -l 1 | wc -l) ]
103102

104103
# this will potentially mess up statistics (we should only fastHadd *within* a lumisection, not *across*), but should technically work.
105104
fastHadd add -o streamDQMHistograms.pb run000001/run000001_ls*_streamDQMHistograms.pb
106105
# the output format is different from the harvesting above, this is a not-DQM-formatted TDirectory file.
107106
fastHadd convert -o streamDQMHistograms.root streamDQMHistograms.pb
108107
# here we expect all (incl. legacy) MEs (99+66), plus folders (14 + 4 higher-level)
109-
[ 229 = $(rootlist streamDQMHistograms.root | wc -l) ]
108+
[ 244 = $(rootlist streamDQMHistograms.root | wc -l) ]
110109

111110

112111
# 9. Try writing online files. This is really TDirectory files, but written via a different module.
113112
# Note that this does not really need to support multiple runs, but it appears it does.
114113
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py numberEventsInRun=300 numberEventsInLuminosityBlock=100 nEvents=1200 onlineoutput=True
115114
# here we expect full per-run output (99 objects), no per-lumi MEs, plus folders (9 + 10 higher-level).
116-
[ 145 = $(rootlist DQM_V0001_UNKNOWN_R000000001.root | wc -l) ]
117-
[ 145 = $(rootlist DQM_V0001_UNKNOWN_R000000002.root | wc -l) ]
118-
[ 145 = $(rootlist DQM_V0001_UNKNOWN_R000000003.root | wc -l) ]
119-
[ 145 = $(rootlist DQM_V0001_UNKNOWN_R000000004.root | wc -l) ]
115+
[ 160 = $(rootlist DQM_V0001_UNKNOWN_R000000001.root | wc -l) ]
116+
[ 160 = $(rootlist DQM_V0001_UNKNOWN_R000000002.root | wc -l) ]
117+
[ 160 = $(rootlist DQM_V0001_UNKNOWN_R000000003.root | wc -l) ]
118+
[ 160 = $(rootlist DQM_V0001_UNKNOWN_R000000004.root | wc -l) ]
120119

121120

122121
# 10. Try running some harvesting modules and check if their output makes it out.
@@ -129,15 +128,15 @@ cmsRun ${SCRAM_TEST_PATH}/run_harvesters_cfg.py inputFiles=part1.root inputFiles
129128
# 11. Try MEtoEDM and EDMtoME.
130129
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=metoedm.root numberEventsInRun=100 numberEventsInLuminosityBlock=20 nEvents=100 metoedmoutput=True
131130
cmsRun ${SCRAM_TEST_PATH}/run_harvesters_cfg.py outfile=edmtome.root inputFiles=metoedm.root nomodules=True metoedminput=True
132-
[ 78 = $(dqmiolistmes.py edmtome.root -r 1 | wc -l) ]
131+
[ 91 = $(dqmiolistmes.py edmtome.root -r 1 | wc -l) ]
133132
[ 78 = $(dqmiolistmes.py edmtome.root -r 1 -l 1 | wc -l) ]
134133
# again, no legacy module (run) output here due to JOB scope for legacy modules
135-
[ "0: 7, 0.0: 1, 1: 10, 100: 30, 200: 10, 5: 15, 5.0: 5" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 --summary)" ]
136-
[ "0: 6, 1: 26, 1.0: 6, 20: 40" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 1 --summary)" ]
137-
[ "0: 6, 1: 20, 2: 6, 2.0: 6, 20: 40" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 2 --summary)" ]
138-
[ "0: 6, 1: 20, 20: 40, 3: 6, 3.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 3 --summary)" ]
139-
[ "0: 6, 1: 20, 20: 40, 4: 6, 4.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 4 --summary)" ]
140-
[ "0: 6, 1: 20, 20: 40, 5: 6, 5.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 5 --summary)" ]
134+
[ "0: 1, 0.0: 1, 1: 11, 100: 55, 5: 17, 5.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 --summary)" ]
135+
[ "1: 28, 1.0: 6, 20: 44" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 1 --summary)" ]
136+
[ "1: 22, 2: 6, 2.0: 6, 20: 44" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 2 --summary)" ]
137+
[ "1: 22, 20: 44, 3: 6, 3.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 3 --summary)" ]
138+
[ "1: 22, 20: 44, 4: 6, 4.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 4 --summary)" ]
139+
[ "1: 22, 20: 44, 5: 6, 5.0: 6" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 5 --summary)" ]
141140
[ "" = "$(${SCRAM_TEST_PATH}/dqmiodumpentries.py edmtome.root -r 1 -l 6 --summary)" ]
142141

143142
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=part1_metoedm.root metoedmoutput=True numberEventsInRun=300 numberEventsInLuminosityBlock=100 nEvents=50 # 1st half of 1st lumi
@@ -156,7 +155,7 @@ cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=empty.root howmany=0 lega
156155
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=empty.root howmany=0 protobufoutput=True
157156
# nLumisections might be a bit buggy (off by one) in EDM, but is fine here.
158157
cmsRun ${SCRAM_TEST_PATH}/run_analyzers_cfg.py outfile=noevents.root processingMode='RunsAndLumis' nLumisections=20
159-
[ 84 = $(dqmiolistmes.py noevents.root -r 1 | wc -l) ]
158+
[ 98 = $(dqmiolistmes.py noevents.root -r 1 | wc -l) ]
160159
[ 84 = $(dqmiolistmes.py noevents.root -r 1 -l 1 | wc -l) ]
161-
[ 84 = $(dqmiolistmes.py noevents.root -r 2 | wc -l) ]
160+
[ 98 = $(dqmiolistmes.py noevents.root -r 2 | wc -l) ]
162161
[ 84 = $(dqmiolistmes.py noevents.root -r 2 -l 2 | wc -l) ]

0 commit comments

Comments
 (0)