14 #include "NTreeBranch.h"
22 : TObject(), fName(name), fObjectClassName(objClassName)
46 NLogError(
"Tree is nullptr !!!");
50 if (tree->GetBranch(
fName.c_str())) {
64 NLogTrace(
"NTreeBranch::SetAddress: Setting address %p for branch '%s' ...", address,
fName.c_str());
67 if (
fObject && deleteExisting) {
68 NLogDebug(
"NTreeBranch::SetAddress: Deleting existing object %p for branch '%s' ...",
fObject,
fName.c_str());
84 NLogError(
"Tree is nullptr !!!");
88 NLogTrace(
"NTreeBranch::SetBranchAddress: Setting branch address '%s' ...",
fName.c_str());
91 NLogDebug(
"NTreeBranch::SetBranchAddress: Deleting existing object %p for branch '%s' ...",
fObject,
fName.c_str());
108 if (tree ==
nullptr) {
109 NLogError(
"Tree is not initialized !!!");
113 NLogTrace(
"Getting entry for branch '%s' %lld status=%d ...",
fBranch->GetName(), entry,
114 tree->GetBranchStatus(
fBranch->GetName()));
126 NLogTrace(
"NTreeBranch::GetEntry: Deleting existing object %p for branch '%s' ...",
fObject,
fName.c_str());
128 TList * lst =
static_cast<TList *
>(
fObject);
132 bytes =
fBranch->GetEntry(entry);
138 NLogTrace(
"NTreeBranch::GetEntry: Getting content from %s with size %.3f MB",
fBranch->GetName(),
139 (
double)bytes / (1024 * 1024));
149 NLogTrace(
"Saving entry for branch=%s ...",
fName.c_str());
153 if (classNameStr.BeginsWith(
"THnSparse")) {
155 THnSparse * in = (THnSparse *)hnstBranchIn->
GetObject();
157 if (in->GetNdimensions() > 0) {
160 auto dims = std::make_unique<Int_t[]>(in->GetNdimensions());
162 for (Int_t iDim = 0; iDim < in->GetNdimensions(); iDim++) {
165 THnSparse * out = (THnSparse *)in->ProjectionND(in->GetNdimensions(), dims.get(), projOpt.c_str());
168 NLogTrace(
"Projection of %s with filled bins %lld ...", in->GetName(), out->GetNbins());
169 for (Int_t i = 0; i < out->GetNbins(); i++) {
170 NLogTrace(
"Bin %d content=%f", i, out->GetBinContent(i));
171 sum += out->GetBinContent(i);
174 out->SetEntries(sum);
175 out->SetNameTitle(in->GetName(), in->GetTitle());
189 NLogTrace(
"Class '%s' is stored default method !!!", classNameStr.Data());
199 NLogInfo(
"Branch name='%s' objClassName='%s' address=%p branch=%p status=%d",
fName.c_str(),
fObjectClassName.c_str(),
NDMSPC tree branch object for managing ROOT TBranch and associated data.
std::string GetObjectClassName() const
Get object class name.
Long64_t GetEntry(TTree *tree, Long64_t entry)
Get entry from TTree.
NTreeBranch(TTree *tree=nullptr, const std::string &name="", void *address=nullptr, const std::string &objClassName="TObject")
Constructor.
TObject * fObject
! Object pointer
int fBranchStatus
Branch status.
virtual void Print(Option_t *option="") const
Print branch information.
virtual ~NTreeBranch()
Destructor.
std::string fObjectClassName
Object class name.
TBranch * Branch(TTree *tree, void *address)
Create branch in TTree with given address.
void SaveEntry(NTreeBranch *hnstIn, bool useProjection=false, const std::string projOpt="OE")
Save entry to another NTreeBranch.
void SetAddress(void *address, bool deleteExisting=false)
Set address for branch data.
TObject * GetObject() const
Get object pointer.
TBranch * fBranch
! Branch pointer
void SetBranchAddress(TTree *tree)
Set branch address in TTree.
std::string fName
Branch name.
static void SafeDeleteTList(TList *&lst)
Safely delete a TList and all its contents, bypassing ROOT's GarbageCollect.