// @(#)root/tree:$Name: $:$Id: TBranch.h,v 1.27 2005/05/31 19:47:41 pcanal Exp $
// Author: Rene Brun 12/01/96
/*************************************************************************
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TBranch
#define ROOT_TBranch
//////////////////////////////////////////////////////////////////////////
// //
// TBranch //
// //
// A TTree object is a list of TBranchs. //
// A TBranch describes the branch data structure and supports : //
// the list of TBaskets (branch buffers) associated to this branch. //
// the list of TLeaves (branch description) //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
#ifndef ROOT_TObjArray
#include "TObjArray.h"
#endif
#ifndef ROOT_TStringLong
#include "TStringLong.h"
#endif
#ifndef ROOT_TAttFill
#include "TAttFill.h"
#endif
#ifndef ROOT_Htypes
#include "Htypes.h"
#endif
class TTree;
class TBasket;
class TLeaf;
class TBrowser;
class TDirectory;
class TFile;
class TClonesArray;
const Int_t kDoNotProcess = BIT(10); // Active bit for branches
const Int_t kIsClone = BIT(11); // to indicate a TBranchClones
const Int_t kBranchObject = BIT(12); // branch is a TObject*
class TBranch : public TNamed , public TAttFill {
protected:
// TBranch status bits
enum { kAutoDelete = BIT(15) };
static Int_t fgCount; //! branch counter
Int_t fCompress; // (=1 branch is compressed, 0 otherwise)
Int_t fBasketSize; // Initial Size of Basket Buffer
Int_t fEntryOffsetLen; // Initial Length of fEntryOffset table in the basket buffers
Int_t fWriteBasket; // Last basket number written
Long64_t fEntryNumber; // Current entry number (last one filled in this branch)
Int_t fOffset; // Offset of this branch
Int_t fMaxBaskets; // Maximum number of Baskets so far
Int_t fSplitLevel; // Branch split level
Int_t fNleaves; //! Number of leaves
Int_t fReadBasket; //! Current basket number when reading
Long64_t fReadEntry; //! Current entry number when reading
Long64_t fEntries; // Number of entries
Long64_t fTotBytes; // Total number of bytes in all leaves before compression
Long64_t fZipBytes; // Total number of bytes in all leaves after compression
TObjArray fBranches; //-> List of Branches of this branch
TObjArray fLeaves; //-> List of leaves of this branch
TObjArray fBaskets; //-> List of baskets of this branch
Int_t fNBasketRAM; //! Number of baskets in fBasketRAM
Int_t *fBasketRAM; //! [fNBasketRAM] table of basket numbers in memory
Int_t *fBasketBytes; //[fMaxBaskets] Lenght of baskets on file
Long64_t *fBasketEntry; //[fMaxBaskets] Table of first entry in eack basket
Long64_t *fBasketSeek; //[fMaxBaskets] Addresses of baskets on file
TTree *fTree; //! Pointer to Tree header
char *fAddress; //! Address of 1st leaf (variable or object)
TDirectory *fDirectory; //! Pointer to directory where this branch buffers are stored
TString fFileName; // Name of file where buffers are stored ("" if in same file as Tree header)
TBuffer *fEntryBuffer; //! Buffer used to directly pass the content without streaming
TList *fBrowsables; //! List of TVirtualBranchBrowsables used for Browse()
Bool_t fSkipZip; //!After being read, the buffer will not be unziped.
void SetSkipZip(Bool_t skip = kTRUE) { fSkipZip = skip; }
void WriteBasket(TBasket* basket);
public:
TBranch();
TBranch(const char *name, void *address, const char *leaflist, Int_t basketsize=32000, Int_t compress=-1);
virtual ~TBranch();
virtual void Browse(TBrowser *b);
virtual void DropBaskets(Option_t *option = "");
virtual Int_t Fill();
virtual void FillLeaves(TBuffer &b);
virtual TBranch *FindBranch(const char *name);
virtual TLeaf *FindLeaf(const char *name);
virtual char *GetAddress() const {return fAddress;}
virtual Int_t GetBasketSize() const {return fBasketSize;}
virtual const char* GetClassName() const { return ""; }
virtual Int_t GetCompressionLevel() const {return fCompress;}
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall = 0);
virtual Int_t GetEntryExport(Long64_t entry, Int_t getall, TClonesArray *list, Int_t n);
Int_t GetEvent(Long64_t entry=0) {return GetEntry(entry);}
Int_t GetEntryOffsetLen() const {return fEntryOffsetLen;}
const char *GetIconName() const;
virtual TLeaf *GetLeaf(const char *name) const;
TBasket *GetBasket(Int_t basket);
Int_t *GetBasketBytes() const {return fBasketBytes;}
Long64_t *GetBasketEntry() const {return fBasketEntry;}
virtual Long64_t GetBasketSeek(Int_t basket) const;
virtual TList *GetBrowsables();
TDirectory *GetDirectory() const {return fDirectory;}
virtual TFile *GetFile(Int_t mode=0);
const char *GetFileName() const {return fFileName.Data();}
Int_t GetOffset() const {return fOffset;}
Int_t GetReadBasket() const {return fReadBasket;}
Long64_t GetReadEntry() const {return fReadEntry;}
Int_t GetWriteBasket() const {return fWriteBasket;}
Long64_t GetTotalSize() const;
Long64_t GetTotBytes() const {return fTotBytes;}
Long64_t GetZipBytes() const {return fZipBytes;}
Long64_t GetEntryNumber() const {return fEntryNumber;}
TObjArray *GetListOfBaskets() {return &fBaskets;}
TObjArray *GetListOfBranches() {return &fBranches;}
TObjArray *GetListOfLeaves() {return &fLeaves;}
Int_t GetMaxBaskets() const {return fMaxBaskets;}
Int_t GetNleaves() const {return fNleaves;}
Int_t GetSplitLevel() const {return fSplitLevel;}
Long64_t GetEntries() const {return fEntries;}
TTree *GetTree() const {return fTree;}
virtual Int_t GetRow(Int_t row);
TBranch *GetMother() const;
TBranch *GetSubBranch(const TBranch *br) const;
Bool_t IsAutoDelete() const;
Bool_t IsFolder() const;
virtual void KeepCircular(Long64_t maxEntries);
virtual Int_t LoadBaskets();
virtual void Print(Option_t *option="") const;
virtual void ReadBasket(TBuffer &b);
virtual void ReadLeaves(TBuffer &b);
virtual void Refresh(TBranch *b);
virtual void Reset(Option_t *option="");
virtual void ResetAddress();
virtual void ResetReadEntry() {fReadEntry = -1;}
virtual void SetAddress(void *add);
virtual void SetAutoDelete(Bool_t autodel=kTRUE);
virtual void SetBasketSize(Int_t buffsize);
virtual void SetBufferAddress(TBuffer *entryBuffer);
virtual void SetCompressionLevel(Int_t level=1);
virtual void SetEntryOffsetLen(Int_t len) {fEntryOffsetLen = len;}
virtual void SetEntries(Long64_t entries);
virtual void SetFile(TFile *file=0);
virtual void SetFile(const char *filename);
virtual void SetOffset(Int_t offset=0) {fOffset=offset;}
virtual void SetTree(TTree *tree) { fTree = tree;}
virtual void UpdateAddress() {;}
static void ResetCount() {fgCount = 0;}
ClassDef(TBranch,10) //Branch descriptor
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1