28 fDirector(0), fInitialized(false), fIsMember(false), fIsClone(false), fIsaPointer(false),
29 fHasLeafCount(false), fBranchName(
""), fParent(0), fDataMember(
""),
30 fClassName(
""), fClass(0), fElement(0), fMemberOffset(0), fOffset(0), fArrayLength(1),
31 fBranch(0), fBranchCount(0),
32 fLastTree(0), fRead(-1), fWhere(0),fCollection(0), fCurrentTreeNumber(-1)
39 fDirector(boss), fInitialized(false), fIsMember(false), fIsClone(false), fIsaPointer(false),
40 fHasLeafCount(false), fBranchName(top), fParent(0), fDataMember(
""),
41 fClassName(
""), fClass(0), fElement(0), fMemberOffset(0), fOffset(0), fArrayLength(1),
42 fBranch(0), fBranchCount(0),
43 fLastTree(0), fRead(-1), fWhere(0),fCollection(0), fCurrentTreeNumber(-1)
55 fDirector(boss), fInitialized(false), fIsMember(true), fIsClone(false), fIsaPointer(false),
56 fHasLeafCount(false), fBranchName(top), fParent(0), fDataMember(membername),
57 fClassName(
""), fClass(0), fElement(0), fMemberOffset(0), fOffset(0), fArrayLength(1),
58 fBranch(0), fBranchCount(0),
59 fLastTree(0), fRead(-1), fWhere(0),fCollection(0), fCurrentTreeNumber(-1)
74 fDirector(boss), fInitialized(false), fIsMember(true), fIsClone(false), fIsaPointer(false),
75 fHasLeafCount(false), fBranchName(top), fParent(parent), fDataMember(membername),
76 fClassName(
""), fClass(0), fElement(0), fMemberOffset(0), fOffset(0), fArrayLength(1),
77 fBranch(0), fBranchCount(0),
78 fLastTree(0), fRead(-1), fWhere(0),fCollection(0), fCurrentTreeNumber(-1)
92 fDirector(boss), fInitialized(false), fIsMember(membername != 0 && membername[0]), fIsClone(false), fIsaPointer(false),
93 fHasLeafCount(false), fBranchName(branch->
GetName()), fParent(0), fDataMember(membername),
94 fClassName(
""), fClass(0), fElement(0), fMemberOffset(0), fOffset(0), fArrayLength(1),
95 fBranch(0), fBranchCount(0),
96 fLastTree(0), fRead(-1), fWhere(0),fCollection(0), fCurrentTreeNumber(-1)
122 fInitialized =
false;
123 fHasLeafCount =
false;
127 fCurrentTreeNumber = -1;
134 std::cout <<
"fBranchName " << fBranchName << std::endl;
136 std::cout <<
"fBranch " << fBranch << std::endl;
137 if (fBranchCount) std::cout <<
"fBranchCount " << fBranchCount << std::endl;
146 if (!fDirector->GetTree()) {
151 if (!fParent->Setup()) {
161 Int_t i = fDirector->GetReadEntry();
162 if (i<0) fDirector->SetReadEntry(0);
163 if (fParent->Read()) {
164 if (i<0) fDirector->SetReadEntry(i);
169 if (clones) pcl = clones->
GetClass();
174 if (fCollection)
delete fCollection;
176 pcl = fCollection->GetValueClass();
179 Error(
"Setup",
"Not finding TClass for collecion for the data member %s seems no longer be in class %s",fDataMember.Data(),fParent->GetClass()->GetName());
186 Error(
"Setup",
"Data member %s seems no longer be in class %s",fDataMember.Data(),pcl->
GetName());
190 fIsaPointer = fElement->IsaPointer();
191 fClass = fElement->GetClassPointer();
196 fOffset = fMemberOffset = fElement->GetOffset();
198 fArrayLength = fElement->GetArrayLength();
200 fWhere = fParent->fWhere;
202 if (fParent->IsaPointer()) {
212 }
else if (!fBranch || fCurrentTreeNumber != fDirector->GetTree()->GetTreeNumber() || fLastTree != fDirector->GetTree()) {
216 fBranch = fDirector->GetTree()->GetBranch(fBranchName.Data());
217 if (!fBranch)
return false;
221 TLeaf *leaf = (
TLeaf*) fBranch->GetListOfLeaves()->At(0);
239 fWhere = (
double*)fBranch->GetAddress();
243 TLeaf *leaf2 =
nullptr;
244 if (fDataMember.Length()) {
245 leaf2 = fBranch->GetLeaf(fDataMember);
246 }
else if (!fWhere) {
247 leaf2 = (
TLeaf*)fBranch->GetListOfLeaves()->At(0);
252 fArrayLength = leaf2->
GetLen();
255 fHasLeafCount =
true;
262 fWhere = (
double*)fBranch->GetAddress();
275 fIsaPointer = fElement->IsaPointer();
276 fClass = fElement->GetClassPointer();
287 if ( fIsMember && be->
GetType()==3 ) {
289 }
else if (fIsaPointer) {
290 clones = (
TClonesArray*)*(
void**)((
char*)fWhere+fOffset);
294 if (!fIsMember) fIsClone =
true;
296 }
else if (fClass && fClass->GetCollectionProxy()) {
303 if (fClass) fClassName = fClass->
GetName();
312 if (!fIsMember) fIsClone =
true;
329 }
else if (be->
GetType()==41) {
335 }
else if (be->
GetType()==31) {
348 fWhere = ((
unsigned char*)be->
GetObject()) + fOffset;
352 fClassName = fBranch->GetClassName();
390 TString bname = fBranch->
GetName();
391 TString bcname = bcount->
GetName();
392 member = bname.Remove(0,bcname.Length()+1);
394 member = fDataMember;
397 fMemberOffset = fClass->GetDataMemberOffset(member);
399 if (fMemberOffset<0) {
400 Error(
"Setup",
"%s",
Form(
"Negative offset %d for %s in %s",
401 fMemberOffset,fBranch->GetName(),
402 bcount?bcount->
GetName():
"unknown"));
408 fClass->GetStreamerInfo()->GetElements()->FindObject(fDataMember);
410 fMemberOffset = fElement->GetOffset();
416 member += fDataMember;
417 fMemberOffset = fClass->GetDataMemberOffset(member);
425 Error(
"Setup",
"%s",
Form(
"Missing TClass object for %s\n",fClassName.Data()));
431 fOffset = fMemberOffset;
435 fWhere = ((
unsigned char*)fWhere) + fMemberOffset;
441 fLastTree = fDirector->GetTree();
442 fCurrentTreeNumber = fLastTree->GetTreeNumber();
Describe Streamer information for one class version
virtual const char * GetName() const
Returns name of object.
std::string GetName(const std::string &scope_name)
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
TVirtualCollectionProxy * GetCollectionProxy()
Return the collection proxy describing the branch content, if any.
virtual void SetAddress(void *add)
Set address of this branch.
virtual TClass * GetValueClass() const =0
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist...
TStreamerInfo * GetInfo() const
Get streamer info for the branch class.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
TObject * At(Int_t idx) const
TBranchElement * GetBranchCount() const
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
const TString fBranchName
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of a BranchElement and return total number of bytes.
virtual void SetAddress(void *add=0)
virtual Int_t GetLen() const
Return the number of effective elements of this leaf.
char * GetObject() const
Return a pointer to our object.
char * Form(const char *fmt,...)
virtual TLeaf * GetLeafCount() const
virtual void * GetValuePointer() const
The ROOT global object gROOT contains a list of all defined classes.
Int_t GetElementOffset(Int_t id) const
A Branch for the case of an object.
virtual TObjArray * GetElements() const =0
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any. ...
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
TClass * GetClass() const
TObjArray * GetElements() const
An array of clone (identical) objects.
virtual char * GetAddress() const
Base class for all the proxy object.
TBranch * GetBranch() const
A TTree is a list of TBranches.
TBranch * GetMother() const
Get our top-level parent branch in the tree.
void Error(ErrorHandler_t func, int code, const char *va_(fmt),...)
Write error message and call a handler, if required.
virtual TVirtualCollectionProxy * Generate() const =0
void Attach(Detail::TBranchProxy *p)