Skip to content

Commit 3ee9c55

Browse files
committed
[Common] allow access to the reference comparator plots in derived classes
The changes allow to use the ReferenceComparatorTask as a base class, providing access to the reference comparison plots for the derived classes. A typical use case would be a post-processing task that produces some derived plots, which also need to compared with some reference. With the current production code, this involves adding a dedicated ReferenceComparatorTask in the workflow, that fetches the plots from the post-processing task from the QCDB. This commit allows to solve the above problem by deriving the post-processing task from the ReferenceComparatorTask, such that the reference comparison plots can be filled directly by the derived task, without going through the QCDB. This is achieved with the following two changes: * addition of a function that exposes the reference comparison plots in the ReferenceComparatorTask interface * storage of the pointer to the reference histogram in the ReferenceComparatorPlot object, such that it does not need to be passed to the `update()` method
1 parent 2af8981 commit 3ee9c55

4 files changed

Lines changed: 32 additions & 17 deletions

File tree

Modules/Common/include/Common/ReferenceComparatorPlot.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class ReferenceComparatorPlot
4848
virtual ~ReferenceComparatorPlot() = default;
4949

5050
TObject* getMainCanvas();
51-
void update(TH1* histogram, TH1* referenceHistogram);
51+
void update(TH1* histogram);
5252

5353
private:
5454
std::shared_ptr<ReferenceComparatorPlotImpl> mImplementation;

Modules/Common/include/Common/ReferenceComparatorTask.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ class ReferenceComparatorTask : public quality_control::postprocessing::PostProc
5050
void update(quality_control::postprocessing::Trigger, framework::ServiceRegistryRef) override;
5151
void finalize(quality_control::postprocessing::Trigger, framework::ServiceRegistryRef) override;
5252

53+
std::map<std::string, std::shared_ptr<ReferenceComparatorPlot>>& getComparatorPlots() { return mHistograms; }
54+
std::shared_ptr<ReferenceComparatorPlot> getComparatorPlot(std::string plotName);
55+
5356
struct HistoWithRef {
5457
std::shared_ptr<TH1> mPlot;
5558
std::shared_ptr<TH1> mRefPlot;

Modules/Common/src/ReferenceComparatorPlot.cxx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -159,21 +159,21 @@ static std::shared_ptr<HIST> createHisto2D(const char* name, const char* title,
159159
class ReferenceComparatorPlotImpl
160160
{
161161
public:
162-
ReferenceComparatorPlotImpl(bool scaleReference)
163-
: mScaleReference(scaleReference)
162+
ReferenceComparatorPlotImpl(TH1* referenceHistogram, bool scaleReference)
163+
: mReferenceHistogram(referenceHistogram), mScaleReference(scaleReference)
164164
{
165165
}
166166

167167
virtual ~ReferenceComparatorPlotImpl() = default;
168168

169-
virtual TObject* init(TH1* referenceHistogram, std::string outputPath, bool scaleReference, bool drawRatioOnly, std::string drawOption)
169+
virtual TObject* getMainCanvas()
170170
{
171171
return nullptr;
172172
}
173173

174-
virtual TObject* getMainCanvas()
174+
TH1* getReferenceHistogram()
175175
{
176-
return nullptr;
176+
return mReferenceHistogram;
177177
}
178178

179179
void setScaleRef(bool scaleReference)
@@ -183,9 +183,10 @@ class ReferenceComparatorPlotImpl
183183

184184
bool getScaleReference() { return mScaleReference; }
185185

186-
virtual void update(TH1* histogram, TH1* referenceHistogram) = 0;
186+
virtual void update(TH1* histogram) = 0;
187187

188188
private:
189+
TH1* mReferenceHistogram{ nullptr };
189190
bool mScaleReference{ true };
190191
};
191192

@@ -200,7 +201,7 @@ class ReferenceComparatorPlotImpl1D : public ReferenceComparatorPlotImpl
200201
bool drawRatioOnly,
201202
double legendHeight,
202203
const std::string& drawOption)
203-
: ReferenceComparatorPlotImpl(scaleReference), mLegendHeight(legendHeight)
204+
: ReferenceComparatorPlotImpl(referenceHistogram, scaleReference), mLegendHeight(legendHeight)
204205
{
205206
float labelSize = 0.04;
206207

@@ -343,8 +344,9 @@ class ReferenceComparatorPlotImpl1D : public ReferenceComparatorPlotImpl
343344
return mCanvas.get();
344345
}
345346

346-
void update(TH1* hist, TH1* referenceHistogram)
347+
void update(TH1* hist)
347348
{
349+
TH1* referenceHistogram = getReferenceHistogram();
348350
if (!hist || !referenceHistogram) {
349351
return;
350352
}
@@ -389,7 +391,7 @@ class ReferenceComparatorPlotImpl2D : public ReferenceComparatorPlotImpl
389391
bool scaleReference,
390392
bool drawRatioOnly,
391393
const std::string& drawOption)
392-
: ReferenceComparatorPlotImpl(scaleReference)
394+
: ReferenceComparatorPlotImpl(referenceHistogram, scaleReference)
393395
{
394396
if (!referenceHistogram) {
395397
return;
@@ -498,8 +500,9 @@ class ReferenceComparatorPlotImpl2D : public ReferenceComparatorPlotImpl
498500
return mCanvas.get();
499501
}
500502

501-
void update(TH1* histogram, TH1* referenceHistogram)
503+
void update(TH1* histogram)
502504
{
505+
TH1* referenceHistogram = getReferenceHistogram();
503506
if (!histogram || !referenceHistogram) {
504507
return;
505508
}
@@ -559,10 +562,10 @@ TObject* ReferenceComparatorPlot::getMainCanvas()
559562
return (mImplementation.get() ? mImplementation->getMainCanvas() : nullptr);
560563
}
561564

562-
void ReferenceComparatorPlot::update(TH1* histogram, TH1* referenceHistogram)
565+
void ReferenceComparatorPlot::update(TH1* histogram)
563566
{
564567
if (mImplementation) {
565-
mImplementation->update(histogram, referenceHistogram);
568+
mImplementation->update(histogram);
566569
}
567570
}
568571

Modules/Common/src/ReferenceComparatorTask.cxx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,18 @@ void ReferenceComparatorTask::initialize(quality_control::postprocessing::Trigge
167167

168168
//_________________________________________________________________________________________
169169

170+
std::shared_ptr<ReferenceComparatorPlot> ReferenceComparatorTask::getComparatorPlot(std::string plotName)
171+
{
172+
// check if a corresponding output plot was initialized
173+
auto iter = mHistograms.find(plotName);
174+
if (iter == mHistograms.end()) {
175+
return {};
176+
}
177+
return iter->second;
178+
}
179+
180+
//_________________________________________________________________________________________
181+
170182
void ReferenceComparatorTask::update(quality_control::postprocessing::Trigger trigger, framework::ServiceRegistryRef services)
171183
{
172184
auto& qcdb = services.get<repository::DatabaseInterface>();
@@ -194,10 +206,7 @@ void ReferenceComparatorTask::update(quality_control::postprocessing::Trigger tr
194206
}
195207

196208
// update the plot ratios and the histograms with superimposed reference
197-
auto referenceMO = mReferencePlots[plotName];
198-
TH1* referenceHistogram = dynamic_cast<TH1*>(referenceMO->getObject());
199-
200-
iter->second->update(histogram, referenceHistogram);
209+
iter->second->update(histogram);
201210
}
202211
}
203212
}

0 commit comments

Comments
 (0)