ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
ISF
ISF_FastCaloSim
ISF_FastCaloSimParametrization
Root
TreeReader.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "TTreeFormula.h"
6
#include "TTreeFormulaManager.h"
7
#include "TString.h"
8
#include <iostream>
9
#include <TChain.h>
10
#include <vector>
11
#include "
ISF_FastCaloSimParametrization/TreeReader.h
"
12
14
//
15
// Class TreeReader
16
// TreeReader.cpp
17
//
19
20
//______________________________________________________________________________
21
/*
22
Class for Tree reading through TFormula.
23
______________________________________________________________________________*/
24
25
26
TreeReader::TreeReader
()
27
{
28
// Default constructor.
29
m_isChain
=
false
;
30
m_currentTree
= -1;
31
m_tree
=
nullptr
;
32
m_currentEntry
= -1;
33
m_entries
= -1;
34
}
35
36
TreeReader::~TreeReader
()
37
{
38
m_formulae
.clear();
39
}
40
41
42
//============================================================
43
TreeReader::TreeReader
(TTree* n)
44
//============================================================
45
{
46
// Constructor.
47
m_tree
=
nullptr
;
48
m_entries
= -1;
49
SetTree
(n);
50
}
51
52
//============================================================
53
void
TreeReader::SetTree
(TTree* n)
54
//============================================================
55
{
56
// check for null pointer BEFORE trying to use it
57
if
(!n)
return
;
58
// Set tree.
59
m_tree
= n;
60
m_currentEntry
= -1;
61
m_formulae
.clear();
62
m_formulae
[
"__DUMMY__"
] =
new
TTreeFormula(
"__DUMMY__"
,
"0"
,
m_tree
);
63
m_isChain
= (n->IsA() == TClass::GetClass(
"TChain"
));
64
m_currentTree
= 0;
65
m_entries
= (int)
m_tree
->GetEntries();
66
}
67
68
//=============================================================
69
double
TreeReader::GetVariable
(
const
char
* c,
int
entry)
70
//============================================================
71
{
72
// Get vaviable.
73
// Return variable for a given entry (<0 -> current entry).
74
if
(entry>=0 && entry!=
m_currentEntry
) this->
GetEntry
(entry);
75
std::string s = c;
76
TTreeFormula *f =
m_formulae
[s];
77
if
(!f)
78
{
79
f =
new
TTreeFormula(c,c,
m_tree
);
80
f->SetQuickLoad(kTRUE);
81
// fManager->Add(f);
82
// fManager->Sync();
83
if
(f->GetNdim()!=1)
//invalid fomula
84
{
85
delete
f;
86
f =
m_formulae
[
"__DUMMY__"
];
87
std::cout <<
"in [TreeReader] : "
<< s <<
" is not valid -> return 0"
<< std::endl;
88
}
89
// else {f->Notify();}
90
m_formulae
[s] = f;
91
}
92
if
(f ==
m_formulae
[
"__DUMMY__"
])
return
0;
93
int
valid = f->GetNdata() ;
94
if
(!valid)
return
0;
95
// std::cout << "Evaluating formula : " << s << std::flush;
96
// std::cout << " " << f->EvalInstance(0) << std::endl;
97
return
f->EvalInstance(0);
98
}
99
100
101
//============================================================
102
int
TreeReader::GetEntry
(
int
entry)
103
//============================================================
104
{
105
// Read a given entry in the buffer (-1 -> next entry).
106
// Return kFALSE if not found.
107
// entry += 1;
108
if
(
m_entries
==0)
return
0;
109
if
(entry==-1) entry =
m_currentEntry
+1;
110
if
(entry<
m_entries
)
111
{
112
int
entryNumber =
m_tree
->GetEntryNumber(entry);
113
if
(entryNumber < 0)
return
0;
114
Long64_t localEntry =
m_tree
->LoadTree(entryNumber);
115
if
(localEntry < 0)
return
0;
116
m_currentEntry
= entry;
117
if
(
m_isChain
)
// check file change in chain
118
{
119
int
I
=
static_cast<
TChain*
>
(
m_tree
)->GetTreeNumber();
120
if
(
I
!=
m_currentTree
)
121
{
122
m_currentTree
=
I
;
123
//fManager->Clear();
124
std::map<std::string, TTreeFormula*>::iterator itr =
m_formulae
.begin();
125
std::map<std::string, TTreeFormula*>::iterator itrE=
m_formulae
.end();
126
TTreeFormula* dummy =
m_formulae
[
"__DUMMY__"
];
127
for
(;itr!=itrE;++itr)
128
{
129
if
(itr->second!=dummy) itr->second->Notify();
//itr->second->UpdateFormulaLeaves();
130
}
131
}
132
}
133
return
1;
134
}
135
return
0;
136
}
137
138
139
140
//ClassImp(TreeReader) // Integrate this class into ROOT
141
I
#define I(x, y, z)
Definition
MD5.cxx:116
TreeReader.h
TreeReader::GetVariable
double GetVariable(const char *c, int entry=-2)
Definition
TreeReader.cxx:69
TreeReader::~TreeReader
virtual ~TreeReader()
Definition
TreeReader.cxx:36
TreeReader::m_tree
TTree * m_tree
Definition
TreeReader.h:33
TreeReader::TreeReader
TreeReader()
Definition
TreeReader.cxx:26
TreeReader::m_currentTree
int m_currentTree
Definition
TreeReader.h:37
TreeReader::m_formulae
std::map< std::string, TTreeFormula * > m_formulae
Definition
TreeReader.h:38
TreeReader::SetTree
void SetTree(TTree *n)
Definition
TreeReader.cxx:53
TreeReader::GetEntry
int GetEntry(int entry=-1)
Definition
TreeReader.cxx:102
TreeReader::m_entries
int m_entries
Definition
TreeReader.h:35
TreeReader::m_isChain
bool m_isChain
Definition
TreeReader.h:36
TreeReader::m_currentEntry
int m_currentEntry
Definition
TreeReader.h:34
Generated on
for ATLAS Offline Software by
1.17.0