Belle II Software development
TestBoundarySettingAlgorithm.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#include <calibration/example_caf_lib/TestBoundarySettingAlgorithm.h>
9
10#include <memory>
11
12#include <TH1F.h>
13
14#include <calibration/dbobjects/TestCalibMean.h>
15
16using namespace Belle2;
17using namespace Calibration;
18
20{
22 " -------------------------- Test Calibration Algorithm -------------------------\n"
23 " \n"
24 " Testing algorithm which just gets mean of a test histogram collected by \n"
25 " CaTest module and provides a DB object with another histogram with one \n"
26 " entry at calibrated value. \n"
27 " ------------------------------------------------------------------------------\n"
28 );
29}
30
32{
33 // Pulling in data from collector output. It now returns shared_ptr<T> so the underlying pointer
34 // will delete itself automatically at the end of this scope unless you do something
35 auto hist = getObjectPtr<TH1F>("MyHisto");
36 if (!hist) return c_Failure;
37 B2INFO("Number of Entries in MyHisto was " << hist->GetEntries());
38
39 float mean = hist->GetMean();
40 float meanError = hist->GetMeanError();
41
42 B2INFO("Mean of MyHisto was " << mean);
43 B2INFO("Mean Error of MyHisto was " << meanError);
44
45 if (hist->GetEntries() < 100)
46 return c_NotEnoughData;
47
48 // Example of saving a DBObject.
49 TestCalibMean* correction = new TestCalibMean(mean, meanError);
50 saveCalibration(correction, "TestCalibMean");
51
52 // Decide if we need to iterate or if this value was fine
53 if (mean - 42. >= 1.) {
54 return c_Iterate;
55 } else {
56 return c_OK;
57 }
58}
59
60
62{
63 // First run in data as we iterate, but our boundaries weren't set manually already?
64 // Just set the first run to be a boundary and we are done.
65 if (m_boundaries.empty()) {
66 B2INFO("This is the first run encountered, let's say it is a boundary.");
67 return true;
68 } else {
69 return false;
70 }
71}
void saveCalibration(TClonesArray *data, const std::string &name)
Store DBArray payload with given name with default IOV.
std::vector< Calibration::ExpRun > m_boundaries
When using the boundaries functionality from isBoundaryRequired, this is used to store the boundaries...
void setDescription(const std::string &description)
Set algorithm description (in constructor)
EResult
The result of calibration.
@ c_OK
Finished successfully =0 in Python.
@ c_Iterate
Needs iteration =1 in Python.
@ c_NotEnoughData
Needs more data =2 in Python.
CalibrationAlgorithm(const std::string &collectorModuleName)
Constructor - sets the prefix for collected objects (won't be accesses until execute(....
TestBoundarySettingAlgorithm()
Constructor set the prefix to TestCalibration.
virtual EResult calibrate() override
Run algo on data.
virtual bool isBoundaryRequired(const Calibration::ExpRun &) override
Decide if a run should be a payload boundary. Only used in certain Python Algorithm Starategies.
std::shared_ptr< T > getObjectPtr(const std::string &name, const std::vector< Calibration::ExpRun > &requestedRuns)
Get calibration data object by name and list of runs, the Merge function will be called to generate t...
Abstract base class for different kinds of events.
Struct containing exp number and run number.
Definition Splitter.h:51