 |
Belle II Software
release-05-02-19
|
12 #include <framework/pcore/Mergeable.h>
13 #include <framework/logging/Logger.h>
62 template <
class T>
class RootMergeable :
public Mergeable {
67 template<
class ...Args>
explicit RootMergeable(Args&& ... params) :
m_wrapped(new T(std::forward<Args>(params)...))
70 gROOT->GetListOfCleanups()->Add(
this);
75 gROOT->GetListOfCleanups()->Remove(
this);
102 B2ERROR(
"RootMergeable: wrapped object belongs to other file, Write() might crash. Make sure your histogram/ntuple already belongs to the file you want to save it to before filling (e.g. in initialize())");
105 m_wrapped->Write(
nullptr, TObject::kOverwrite);
120 list.SetOwner(
false);
121 list.Add(&otherMergeable->get());
131 virtual void clear()
override
147 gROOT->GetListOfCleanups()->Remove(
this);
Wrap a root histogram or TNtuple to make it mergeable.
T & get()
Get the wrapped root object.
RootMergeable()
default constructor for root.
virtual void RecursiveRemove(TObject *obj) override
Called from ROOT if obj is deleted.
virtual void removeSideEffects() override
An ugly little method that is called before event() for input and worker processes.
Abstract base class for different kinds of events.
virtual void clear() override
Clear content of this object (e.g.
T * m_wrapped
Wrapped root object.
virtual void merge(const Mergeable *other) override
Merge object 'other' into this one.
ClassDefOverride(RootMergeable, 2)
Wrap a root histogram or ntuple to make them mergeable.
void assign(T *p)
Replace wrapped object with p (takes ownership).
void write(TDirectory *file)
Write the wrapped object into 'file', overwriting existing objects of same name.
Abstract base class for objects that can be merged.