A TTree represents a columnar dataset.
Any C++ type can be stored in its columns.
A TTree, often called in jargon tree, consists of a list of independent columns or branches, represented by the TBranch class. Behind each branch, buffers are allocated automatically by ROOT. Such buffers are automatically written to disk or kept in memory until the size stored in the attribute fMaxVirtualSize is reached. Variables of one branch are written to the same buffer. A branch buffer is automatically compressed if the file compression attribute is set (default). Branches may be written to different files (see TBranch::SetFile).
The ROOT user can decide to make one single branch and serialize one object into one single I/O buffer or to make several branches. Making several branches is particularly interesting in the data analysis phase, when it is desirable to have a high reading rate and not all columns are equally interesting
Creates a Tree with name and title.
Various kinds of branches can be added to a tree:
In the following, the details about the creation of different types of branches are given.
branch
) of fundamental types and arrays thereofThis strategy works also for lists of variables, e.g. to describe simple structures. It is strongly recommended to persistify those as objects rather than lists of leaves.
leaflist is the concatenation of all the variable names and types separated by a colon character : The variable name and the variable type are separated by a slash (/). The variable type must be 1 character. (Characters after the first are legal and will be appended to the visible name of the leaf, but have no effect.) If no type is given, the type of the variable is assumed to be the same as the previous variable. If the first variable does not have a type, it is assumed of type F by default. The list of currently supported types is given below:
C
: a character string terminated by the 0 characterB
: an 8 bit signed integer (Char_t
)b
: an 8 bit unsigned integer (UChar_t
)S
: a 16 bit signed integer (Short_t
)s
: a 16 bit unsigned integer (UShort_t
)I
: a 32 bit signed integer (Int_t
)i
: a 32 bit unsigned integer (UInt_t
)F
: a 32 bit floating point (Float_t
)f
: a 24 bit floating point with truncated mantissa (Float16_t
)D
: a 64 bit floating point (Double_t
)d
: a 24 bit truncated floating point (Double32_t
)L
: a 64 bit signed integer (Long64_t
)l
: a 64 bit unsigned integer (ULong64_t
)G
: a long signed integer, stored as 64 bit (Long_t
)g
: a long unsigned integer, stored as 64 bit (ULong_t
)O
: [the letter o
, not a zero] a boolean (Bool_t
)Examples:
myvar
column: "myArrdouble[myvar]/D"myvar
column , with values between 0 and 16: "myArr[myvar]/d[0,10]"myArr
of Double32_t
with values within a range of [0, 2*pi]
and the size of which is stored in a branch called myArrSize
, the syntax for the leaflist
string would be: myArr[myArrSize]/d[0,twopi]
. Of course the number of bits could be specified, the standard rules of opaque typedefs annotation are valid. For example, if only 18 bits were sufficient, the syntax would become: myArr[myArrSize]/d[0,twopi,18]
STLcollection is the address of a pointer to std::vector, std::list, std::deque, std::set or std::multiset containing pointers to objects. If the splitlevel is a value bigger than 100 (TTree::kSplitCollectionOfPointers) then the collection will be written in split mode, e.g. if it contains objects of any types deriving from TTrack this function will sort the objects based on their type and store them in separate branches in split mode.
In case of dynamic structures changing with each entry for example, one must redefine the branch address before filling the branch again. This is done via the TBranch::SetAddress member function.
Note: The 2nd parameter must be the address of a valid object. The object must not be destroyed (i.e. be deleted) until the TTree is deleted or TTree::ResetBranchAddress is called.
Another available syntax is the following:
Note: The pointer whose address is passed to TTree::Branch must not be destroyed (i.e. go out of scope) until the TTree is deleted or TTree::ResetBranchAddress is called.
Note: The pointer p_object must be initialized before calling TTree::Branch
It is recommended to use STL containers instead of TClonesArrays*.
The TClonesArray is a direct access list of objects of the same class. For example, if the TClonesArray is an array of TTrack objects, this function will create one subbranch for each data member of the object TTrack.
A TTree instance is filled with the invocation of the TTree::Fill method:
Upon its invocation, a loop on all defined branches takes place that for each branch invokes the TBranch::Fill method.
You may want to add a branch to an existing tree. For example, if one variable in the tree was computed with a certain algorithm, you may want to try another algorithm and compare the results. One solution is to add a new branch, fill it, and save the tree. The code below adds a simple branch to an existing tree. Note the kOverwrite option in the Write method, it overwrites the existing tree. If it is not specified, two copies of the tree headers are saved.
It is not always possible to add branches to existing datasets stored in TFiles: for example, these files might not be writeable, just readable. In addition, modifying in place a TTree causes a new TTree instance to be written and the previous one to be deleted. For this reasons, ROOT offers the concept of friends for TTree and TChain: if is good practice to rely on friend trees rather than adding a branch manually.
The TTree class has several additions for its use from Python, which are also available in its subclasses e.g. TChain and TNtuple.
First, TTree instances are iterable in Python. Therefore, assuming t
is a TTree instance, we can do:
At each iteration, a new entry of the tree will be read. In the code above, entry
allows to access the branch values for the current entry. This can be done with the syntax entry.branch_name
or, if the branch name is incompatible with Python naming rules, with e.g. "getattr(entry, '1_branch_name')".
Please note that iterating in Python can be slow, so only iterate over a tree as described above if performance is not an issue or when dealing with a small dataset. To read and process the entries of a tree in a much faster way, please use ROOT::RDataFrame.
Second, a couple of TTree methods have been modified to facilitate their use from Python: TTree::Branch and TTree::SetBranchAddress.
Regarding TTree::Branch, the following example shows how we can create different types of branches of a TTree. Note that Branch
will just link the new branch with a given Python object, so it is still necessary to fill such object with the desired content before calling TTree::Fill.
Concerning TTree::SetBranchAddress, below is an example of prepare the reading of different types of branches of a TTree. Note that SetBranchAddress
will just link a given branch with a certain Python object; after that, in order to read the content of such branch for a given TTree entry x
, TTree::GetEntry(x) must be invoked.
Classes | |
class | TClusterIterator |
Helper class to iterate over cluster of baskets. More... | |
class | TFriendLock |
Helper class to prevent infinite recursion in the usage of TTree Friends. More... | |
Public Member Functions | |
TTree () | |
Default constructor and I/O constructor. | |
TTree (const char *name, const char *title, Int_t splitlevel=99, TDirectory *dir=gDirectory) | |
Normal tree constructor. | |
TTree (const TTree &tt)=delete | |
virtual | ~TTree () |
Destructor. | |
void | AddAllocationCount (UInt_t count) |
virtual Int_t | AddBranchToCache (const char *bname, Bool_t subbranches=kFALSE) |
Add branch with name bname to the Tree cache. | |
virtual Int_t | AddBranchToCache (TBranch *branch, Bool_t subbranches=kFALSE) |
Add branch b to the Tree cache. | |
void | AddClone (TTree *) |
Add a cloned tree to our list of trees to be notified whenever we change our branch addresses or when we are deleted. | |
virtual TFriendElement * | AddFriend (const char *treename, const char *filename="") |
Add a TFriendElement to the list of friends. | |
virtual TFriendElement * | AddFriend (const char *treename, TFile *file) |
Add a TFriendElement to the list of friends. | |
virtual TFriendElement * | AddFriend (TTree *tree, const char *alias="", Bool_t warn=kFALSE) |
Add a TFriendElement to the list of friends. | |
virtual void | AddTotBytes (Int_t tot) |
virtual void | AddZipBytes (Int_t zip) |
virtual Long64_t | AutoSave (Option_t *option="") |
AutoSave tree header every fAutoSave bytes. | |
virtual Int_t | Branch (const char *folder, Int_t bufsize=32000, Int_t splitlevel=99) |
Create one branch for each element in the folder. | |
TBranch * | Branch (const char *name, char *address, const char *leaflist, Int_t bufsize=32000) |
template<class T > | |
TBranch * | Branch (const char *name, const char *classname, T **addobj, Int_t bufsize=32000, Int_t splitlevel=99) |
template<class T > | |
TBranch * | Branch (const char *name, const char *classname, T *obj, Int_t bufsize=32000, Int_t splitlevel=99) |
virtual TBranch * | Branch (const char *name, const char *classname, void *addobj, Int_t bufsize=32000, Int_t splitlevel=99) |
Create a new branch with the object of class classname at address addobj. | |
TBranch * | Branch (const char *name, int address, const char *leaflist, Int_t bufsize=32000) |
TBranch * | Branch (const char *name, Long_t address, const char *leaflist, Int_t bufsize=32000) |
template<typename T , std::size_t N> | |
TBranch * | Branch (const char *name, std::array< T, N > *obj, Int_t bufsize=32000, Int_t splitlevel=99) |
template<class T > | |
TBranch * | Branch (const char *name, T **addobj, Int_t bufsize=32000, Int_t splitlevel=99) |
Add a new branch, and infer the data type from the array addobj being passed. | |
template<class T > | |
TBranch * | Branch (const char *name, T *obj, Int_t bufsize=32000, Int_t splitlevel=99) |
Add a new branch, and infer the data type from the type of obj being passed. | |
virtual TBranch * | Branch (const char *name, void *address, const char *leaflist, Int_t bufsize=32000) |
Create a new TTree Branch. | |
virtual Int_t | Branch (TCollection *list, Int_t bufsize=32000, Int_t splitlevel=99, const char *name="") |
Create one branch for each element in the collection. | |
virtual Int_t | Branch (TList *list, Int_t bufsize=32000, Int_t splitlevel=99) |
Deprecated function. Use next function instead. | |
virtual TBranch * | BranchOld (const char *name, const char *classname, void *addobj, Int_t bufsize=32000, Int_t splitlevel=1) |
Create a new TTree BranchObject. | |
virtual TBranch * | BranchRef () |
Build the optional branch supporting the TRefTable. | |
virtual TBranch * | Bronch (const char *name, const char *classname, void *addobj, Int_t bufsize=32000, Int_t splitlevel=99) |
Create a new TTree BranchElement. | |
virtual void | Browse (TBrowser *) |
Browse content of the TTree. | |
virtual Int_t | BuildIndex (const char *majorname, const char *minorname="0") |
Build a Tree Index (default is TTreeIndex). | |
TStreamerInfo * | BuildStreamerInfo (TClass *cl, void *pointer=0, Bool_t canOptimize=kTRUE) |
Build StreamerInfo for class cl. | |
virtual TFile * | ChangeFile (TFile *file) |
Called by TTree::Fill() when file has reached its maximum fgMaxTreeSize. | |
virtual TTree * | CloneTree (Long64_t nentries=-1, Option_t *option="") |
Create a clone of this tree and copy nentries. | |
virtual void | CopyAddresses (TTree *, Bool_t undo=kFALSE) |
Set branch addresses of passed tree equal to ours. | |
virtual Long64_t | CopyEntries (TTree *tree, Long64_t nentries=-1, Option_t *option="", Bool_t needCopyAddresses=false) |
Copy nentries from given tree to this tree. | |
virtual TTree * | CopyTree (const char *selection, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Copy a tree with selection. | |
virtual TBasket * | CreateBasket (TBranch *) |
Create a basket for this tree and given branch. | |
Int_t | Debug () const |
virtual void | Delete (Option_t *option="") |
Delete this tree from memory or/and disk. | |
virtual void | DirectoryAutoAdd (TDirectory *) |
Called by TKey and TObject::Clone to automatically add us to a directory when we are read from a file. | |
virtual Long64_t | Draw (const char *varexp, const char *selection, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Draw expression varexp for specified entries. | |
virtual Long64_t | Draw (const char *varexp, const TCut &selection, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Draw expression varexp for specified entries. | |
virtual void | Draw (Option_t *opt) |
Default Draw method for all objects. | |
virtual void | DropBaskets () |
Remove some baskets from memory. | |
virtual Int_t | DropBranchFromCache (const char *bname, Bool_t subbranches=kFALSE) |
Remove the branch with name 'bname' from the Tree cache. | |
virtual Int_t | DropBranchFromCache (TBranch *branch, Bool_t subbranches=kFALSE) |
Remove the branch b from the Tree cache. | |
virtual void | DropBuffers (Int_t nbytes) |
Drop branch buffers to accommodate nbytes below MaxVirtualsize. | |
Bool_t | EnableCache () |
Enable the TTreeCache unless explicitly disabled for this TTree by a prior call to SetCacheSize(0) . | |
virtual Int_t | Fill () |
Fill all branches. | |
virtual TBranch * | FindBranch (const char *name) |
Return the branch that correspond to the path 'branchname', which can include the name of the tree or the omitted name of the parent branches. | |
virtual TLeaf * | FindLeaf (const char *name) |
Find leaf.. | |
virtual Int_t | Fit (const char *funcname, const char *varexp, const char *selection="", Option_t *option="", Option_t *goption="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Fit a projected item(s) from a tree. | |
virtual Int_t | FlushBaskets (Bool_t create_cluster=true) const |
Write to disk all the basket that have not yet been individually written and create an event cluster boundary (by default). | |
virtual const char * | GetAlias (const char *aliasName) const |
Returns the expanded value of the alias. Search in the friends if any. | |
UInt_t | GetAllocationCount () const |
virtual Long64_t | GetAutoFlush () const |
virtual Long64_t | GetAutoSave () const |
virtual TBranch * | GetBranch (const char *name) |
Return pointer to the branch with the given name in this tree or its friends. | |
virtual TBranchRef * | GetBranchRef () const |
virtual Bool_t | GetBranchStatus (const char *branchname) const |
Return status of branch with name branchname. | |
virtual Long64_t | GetCacheSize () const |
virtual Long64_t | GetChainEntryNumber (Long64_t entry) const |
virtual Long64_t | GetChainOffset () const |
virtual TClusterIterator | GetClusterIterator (Long64_t firstentry) |
Return an iterator over the cluster of baskets starting at firstentry. | |
virtual Bool_t | GetClusterPrefetch () const |
TFile * | GetCurrentFile () const |
Return pointer to the current file. | |
Long64_t | GetDebugMax () const |
Long64_t | GetDebugMin () const |
Int_t | GetDefaultEntryOffsetLen () const |
TDirectory * | GetDirectory () const |
virtual Long64_t | GetEntries () const |
virtual Long64_t | GetEntries (const char *selection) |
Return the number of entries matching the selection. | |
virtual Long64_t | GetEntriesFast () const |
virtual Long64_t | GetEntriesFriend () const |
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of friend trees. | |
virtual Int_t | GetEntry (Long64_t entry=0, Int_t getall=0) |
Read all branches of entry and return total number of bytes read. | |
virtual TEntryList * | GetEntryList () |
Returns the entry list assigned to this tree. | |
virtual Long64_t | GetEntryNumber (Long64_t entry) const |
Return entry number corresponding to entry. | |
virtual Long64_t | GetEntryNumberWithBestIndex (Long64_t major, Long64_t minor=0) const |
Return entry number corresponding to major and minor number. | |
virtual Long64_t | GetEntryNumberWithIndex (Long64_t major, Long64_t minor=0) const |
Return entry number corresponding to major and minor number. | |
virtual Int_t | GetEntryWithIndex (Int_t major, Int_t minor=0) |
Read entry corresponding to major and minor number. | |
virtual Long64_t | GetEstimate () const |
Int_t | GetEvent (Long64_t entry=0, Int_t getall=0) |
TEventList * | GetEventList () const |
virtual Int_t | GetFileNumber () const |
virtual TTree * | GetFriend (const char *) const |
Return a pointer to the TTree friend whose name or alias is friendname . | |
virtual const char * | GetFriendAlias (TTree *) const |
If the 'tree' is a friend, this method returns its alias name. | |
TH1 * | GetHistogram () |
virtual Bool_t | GetImplicitMT () |
virtual Int_t * | GetIndex () |
virtual Double_t * | GetIndexValues () |
ROOT::TIOFeatures | GetIOFeatures () const |
Returns the current set of IO settings. | |
virtual TIterator * | GetIteratorOnAllLeaves (Bool_t dir=kIterForward) |
Creates a new iterator that will go through all the leaves on the tree itself and its friend. | |
virtual TLeaf * | GetLeaf (const char *branchname, const char *leafname) |
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of friend trees. | |
virtual TLeaf * | GetLeaf (const char *name) |
Return pointer to first leaf named. | |
virtual TList * | GetListOfAliases () const |
virtual TObjArray * | GetListOfBranches () |
virtual TList * | GetListOfClones () |
virtual TList * | GetListOfFriends () const |
virtual TObjArray * | GetListOfLeaves () |
Int_t | GetMakeClass () const |
virtual Long64_t | GetMaxEntryLoop () const |
virtual Double_t | GetMaximum (const char *columname) |
Return maximum of column with name columname. | |
virtual Long64_t | GetMaxVirtualSize () const |
virtual Double_t | GetMinimum (const char *columname) |
Return minimum of column with name columname. | |
virtual Int_t | GetNbranches () |
TObject * | GetNotify () const |
virtual Int_t | GetPacketSize () const |
virtual TVirtualPerfStats * | GetPerfStats () const |
TVirtualTreePlayer * | GetPlayer () |
Load the TTreePlayer (if not already done). | |
TTreeCache * | GetReadCache (TFile *file) const |
Find and return the TTreeCache registered with the file and which may contain branches for us. | |
TTreeCache * | GetReadCache (TFile *file, Bool_t create) |
Find and return the TTreeCache registered with the file and which may contain branches for us. | |
virtual Long64_t | GetReadEntry () const |
virtual Long64_t | GetReadEvent () const |
virtual Int_t | GetScanField () const |
TTreeFormula * | GetSelect () |
virtual Long64_t | GetSelectedRows () |
Float_t | GetTargetMemoryRatio () const |
virtual Int_t | GetTimerInterval () const |
virtual Long64_t | GetTotBytes () const |
TBuffer * | GetTransientBuffer (Int_t size) |
Returns the transient buffer currently used by this TTree for reading/writing baskets. | |
virtual TTree * | GetTree () const |
virtual TVirtualIndex * | GetTreeIndex () const |
virtual Int_t | GetTreeNumber () const |
virtual Int_t | GetUpdate () const |
virtual TList * | GetUserInfo () |
Return a pointer to the list containing user objects associated to this tree. | |
virtual Double_t * | GetV1 () |
virtual Double_t * | GetV2 () |
virtual Double_t * | GetV3 () |
virtual Double_t * | GetV4 () |
virtual Double_t * | GetVal (Int_t i) |
TTreeFormula * | GetVar (Int_t i) |
TTreeFormula * | GetVar1 () |
TTreeFormula * | GetVar2 () |
TTreeFormula * | GetVar3 () |
TTreeFormula * | GetVar4 () |
virtual Double_t * | GetW () |
virtual Double_t | GetWeight () const |
virtual Long64_t | GetZipBytes () const |
virtual void | IncrementTotalBuffers (Int_t nbytes) |
virtual Bool_t | InPlaceClone (TDirectory *newdirectory, const char *options="") |
Copy the content to a new new file, update this TTree with the new location information and attach this TTree to the new directory. | |
Bool_t | IsFolder () const |
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects). | |
virtual Int_t | LoadBaskets (Long64_t maxmemory=2000000000) |
Read in memory all baskets from all branches up to the limit of maxmemory bytes. | |
virtual Long64_t | LoadTree (Long64_t entry) |
Set current entry. | |
virtual Long64_t | LoadTreeFriend (Long64_t entry, TTree *T) |
Load entry on behalf of our master tree, we may use an index. | |
virtual Int_t | MakeClass (const char *classname=0, Option_t *option="") |
Generate a skeleton analysis class for this tree. | |
virtual Int_t | MakeCode (const char *filename=0) |
Generate a skeleton function for this tree. | |
virtual Int_t | MakeProxy (const char *classname, const char *macrofilename=0, const char *cutfilename=0, const char *option=0, Int_t maxUnrolling=3) |
Generate a skeleton analysis class for this Tree using TBranchProxy. | |
virtual Int_t | MakeSelector (const char *selector=0, Option_t *option="") |
Generate skeleton selector class for this tree. | |
Bool_t | MemoryFull (Int_t nbytes) |
Check if adding nbytes to memory we are still below MaxVirtualsize. | |
virtual Long64_t | Merge (TCollection *list, Option_t *option="") |
Merge the trees in the TList into this tree. | |
virtual Long64_t | Merge (TCollection *list, TFileMergeInfo *info) |
Merge the trees in the TList into this tree. | |
virtual Bool_t | Notify () |
Function called when loading a new class library. | |
TTree & | operator= (const TTree &tt)=delete |
virtual void | OptimizeBaskets (ULong64_t maxMemory=10000000, Float_t minComp=1.1, Option_t *option="") |
This function may be called after having filled some entries in a Tree. | |
TPrincipal * | Principal (const char *varexp="", const char *selection="", Option_t *option="np", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Interface to the Principal Components Analysis class. | |
virtual void | Print (Option_t *option="") const |
Print a summary of the tree contents. | |
virtual void | PrintCacheStats (Option_t *option="") const |
Print statistics about the TreeCache for this tree. | |
virtual Long64_t | Process (const char *filename, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Process this tree executing the TSelector code in the specified filename. | |
virtual Long64_t | Process (TSelector *selector, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Process this tree executing the code in the specified selector. | |
virtual Long64_t | Project (const char *hname, const char *varexp, const char *selection="", Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Make a projection of a tree using selections. | |
virtual TSQLResult * | Query (const char *varexp="", const char *selection="", Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Loop over entries and return a TSQLResult object containing entries following selection. | |
virtual Long64_t | ReadFile (const char *filename, const char *branchDescriptor="", char delimiter=' ') |
Create or simply read branches from filename. | |
virtual Long64_t | ReadStream (std::istream &inputStream, const char *branchDescriptor="", char delimiter=' ') |
Create or simply read branches from an input stream. | |
virtual void | RecursiveRemove (TObject *obj) |
Make sure that obj (which is being deleted or will soon be) is no longer referenced by this TTree. | |
virtual void | Refresh () |
Refresh contents of this tree and its branches from the current status on disk. | |
virtual void | RegisterExternalFriend (TFriendElement *) |
Record a TFriendElement that we need to warn when the chain switches to a new file (typically this is because this chain is a friend of another TChain) | |
virtual void | RemoveExternalFriend (TFriendElement *) |
Removes external friend. | |
virtual void | RemoveFriend (TTree *) |
Remove a friend from the list of friends. | |
virtual void | Reset (Option_t *option="") |
Reset baskets, buffers and entries count in all branches and leaves. | |
virtual void | ResetAfterMerge (TFileMergeInfo *) |
Resets the state of this TTree after a merge (keep the customization but forget the data). | |
virtual void | ResetBranchAddress (TBranch *) |
Tell all of our branches to set their addresses to zero. | |
virtual void | ResetBranchAddresses () |
Tell all of our branches to drop their current objects and allocate new ones. | |
virtual Long64_t | Scan (const char *varexp="", const char *selection="", Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Loop over tree entries and print entries passing selection. | |
virtual Bool_t | SetAlias (const char *aliasName, const char *aliasFormula) |
Set a tree variable alias. | |
virtual void | SetAutoFlush (Long64_t autof=-30000000) |
This function may be called at the start of a program to change the default value for fAutoFlush. | |
virtual void | SetAutoSave (Long64_t autos=-300000000) |
This function may be called at the start of a program to change the default value for fAutoSave (and for SetAutoSave) is -300000000, ie 300 MBytes. | |
virtual void | SetBasketSize (const char *bname, Int_t buffsize=16000) |
Set a branch's basket size. | |
template<class T > | |
Int_t | SetBranchAddress (const char *bname, T **add, TBranch **ptr=0) |
template<class T > | |
Int_t | SetBranchAddress (const char *bname, T *add, TBranch **ptr=0) |
virtual Int_t | SetBranchAddress (const char *bname, void *add, TBranch **ptr, TClass *realClass, EDataType datatype, Bool_t isptr) |
Verify the validity of the type of addr before calling SetBranchAddress. | |
virtual Int_t | SetBranchAddress (const char *bname, void *add, TBranch **ptr=0) |
Change branch address, dealing with clone trees properly. | |
virtual Int_t | SetBranchAddress (const char *bname, void *add, TClass *realClass, EDataType datatype, Bool_t isptr) |
Verify the validity of the type of addr before calling SetBranchAddress. | |
virtual void | SetBranchStatus (const char *bname, Bool_t status=1, UInt_t *found=0) |
Set branch status to Process or DoNotProcess. | |
virtual Int_t | SetCacheEntryRange (Long64_t first, Long64_t last) |
interface to TTreeCache to set the cache entry range | |
virtual void | SetCacheLearnEntries (Int_t n=10) |
Interface to TTreeCache to set the number of entries for the learning phase. | |
virtual Int_t | SetCacheSize (Long64_t cachesize=-1) |
Set maximum size of the file cache . | |
virtual void | SetChainOffset (Long64_t offset=0) |
virtual void | SetCircular (Long64_t maxEntries) |
Enable/Disable circularity for this tree. | |
virtual void | SetClusterPrefetch (Bool_t enabled) |
virtual void | SetDebug (Int_t level=1, Long64_t min=0, Long64_t max=9999999) |
Set the debug level and the debug range. | |
virtual void | SetDefaultEntryOffsetLen (Int_t newdefault, Bool_t updateExisting=kFALSE) |
Update the default value for the branch's fEntryOffsetLen. | |
virtual void | SetDirectory (TDirectory *dir) |
Change the tree's directory. | |
virtual Long64_t | SetEntries (Long64_t n=-1) |
Change number of entries in the tree. | |
virtual void | SetEntryList (TEntryList *list, Option_t *opt="") |
Set an EntryList. | |
virtual void | SetEstimate (Long64_t nentries=1000000) |
Set number of entries to estimate variable limits. | |
virtual void | SetEventList (TEventList *list) |
This function transfroms the given TEventList into a TEntryList The new TEntryList is owned by the TTree and gets deleted when the tree is deleted. | |
virtual void | SetFileNumber (Int_t number=0) |
Set fFileNumber to number. | |
virtual void | SetImplicitMT (Bool_t enabled) |
ROOT::TIOFeatures | SetIOFeatures (const ROOT::TIOFeatures &) |
Provide the end-user with the ability to enable/disable various experimental IO features for this TTree. | |
virtual void | SetMakeClass (Int_t make) |
Set all the branches in this TTree to be in decomposed object mode (also known as MakeClass mode). | |
virtual void | SetMaxEntryLoop (Long64_t maxev=kMaxEntries) |
virtual void | SetMaxVirtualSize (Long64_t size=0) |
virtual void | SetName (const char *name) |
Change the name of this tree. | |
virtual void | SetNotify (TObject *obj) |
Sets the address of the object to be notified when the tree is loaded. | |
virtual void | SetObject (const char *name, const char *title) |
Change the name and title of this tree. | |
virtual void | SetParallelUnzip (Bool_t opt=kTRUE, Float_t RelSize=-1) |
Enable or disable parallel unzipping of Tree buffers. | |
virtual void | SetPerfStats (TVirtualPerfStats *perf) |
Set perf stats. | |
virtual void | SetScanField (Int_t n=50) |
void | SetTargetMemoryRatio (Float_t ratio) |
virtual void | SetTimerInterval (Int_t msec=333) |
virtual void | SetTreeIndex (TVirtualIndex *index) |
The current TreeIndex is replaced by the new index. | |
virtual void | SetUpdate (Int_t freq=0) |
virtual void | SetWeight (Double_t w=1, Option_t *option="") |
Set tree weight. | |
virtual void | Show (Long64_t entry=-1, Int_t lenmax=20) |
Print values of all active leaves for entry. | |
virtual void | StartViewer () |
Start the TTreeViewer on this tree. | |
virtual Int_t | StopCacheLearningPhase () |
Stop the cache learning phase. | |
virtual Int_t | UnbinnedFit (const char *funcname, const char *varexp, const char *selection="", Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0) |
Unbinned fit of one or more variable(s) from a tree. | |
void | UseCurrentStyle () |
Replace current attributes by current style. | |
virtual Int_t | Write (const char *name=0, Int_t option=0, Int_t bufsize=0) |
Write this object to the current directory. | |
virtual Int_t | Write (const char *name=0, Int_t option=0, Int_t bufsize=0) const |
Write this object to the current directory. | |
Public Member Functions inherited from TNamed | |
TNamed () | |
TNamed (const char *name, const char *title) | |
TNamed (const TNamed &named) | |
TNamed copy ctor. | |
TNamed (const TString &name, const TString &title) | |
virtual | ~TNamed () |
TNamed destructor. | |
virtual void | Clear (Option_t *option="") |
Set name and title to empty strings (""). | |
virtual TObject * | Clone (const char *newname="") const |
Make a clone of an object using the Streamer facility. | |
virtual Int_t | Compare (const TObject *obj) const |
Compare two TNamed objects. | |
virtual void | Copy (TObject &named) const |
Copy this to obj. | |
virtual void | FillBuffer (char *&buffer) |
Encode TNamed into output buffer. | |
virtual const char * | GetName () const |
Returns name of object. | |
virtual const char * | GetTitle () const |
Returns title of object. | |
virtual ULong_t | Hash () const |
Return hash value for this object. | |
virtual Bool_t | IsSortable () const |
virtual void | ls (Option_t *option="") const |
List TNamed name and title. | |
TNamed & | operator= (const TNamed &rhs) |
TNamed assignment operator. | |
virtual void | SetNameTitle (const char *name, const char *title) |
Set all the TNamed parameters (name and title). | |
virtual void | SetTitle (const char *title="") |
Set the title of the TNamed. | |
virtual Int_t | Sizeof () const |
Return size of the TNamed part of the TObject. | |
Public Member Functions inherited from TObject | |
TObject () | |
TObject constructor. | |
TObject (const TObject &object) | |
TObject copy ctor. | |
virtual | ~TObject () |
TObject destructor. | |
void | AbstractMethod (const char *method) const |
Use this method to implement an "abstract" method that you don't want to leave purely abstract. | |
virtual void | AppendPad (Option_t *option="") |
Append graphics object to current pad. | |
ULong_t | CheckedHash () |
Check and record whether this class has a consistent Hash/RecursiveRemove setup (*) and then return the regular Hash value for this object. | |
virtual const char * | ClassName () const |
Returns name of class to which the object belongs. | |
virtual Int_t | DistancetoPrimitive (Int_t px, Int_t py) |
Computes distance from point (px,py) to the object. | |
virtual void | DrawClass () const |
Draw class inheritance tree of the class to which this object belongs. | |
virtual TObject * | DrawClone (Option_t *option="") const |
Draw a clone of this object in the current selected pad for instance with: gROOT->SetSelectedPad(gPad) . | |
virtual void | Dump () const |
Dump contents of object on stdout. | |
virtual void | Error (const char *method, const char *msgfmt,...) const |
Issue error message. | |
virtual void | Execute (const char *method, const char *params, Int_t *error=0) |
Execute method on this object with the given parameter string, e.g. | |
virtual void | Execute (TMethod *method, TObjArray *params, Int_t *error=0) |
Execute method on this object with parameters stored in the TObjArray. | |
virtual void | ExecuteEvent (Int_t event, Int_t px, Int_t py) |
Execute action corresponding to an event at (px,py). | |
virtual void | Fatal (const char *method, const char *msgfmt,...) const |
Issue fatal error message. | |
virtual TObject * | FindObject (const char *name) const |
Must be redefined in derived classes. | |
virtual TObject * | FindObject (const TObject *obj) const |
Must be redefined in derived classes. | |
virtual Option_t * | GetDrawOption () const |
Get option used by the graphics system to draw this object. | |
virtual const char * | GetIconName () const |
Returns mime type name of object. | |
virtual char * | GetObjectInfo (Int_t px, Int_t py) const |
Returns string containing info about the object at position (px,py). | |
virtual Option_t * | GetOption () const |
virtual UInt_t | GetUniqueID () const |
Return the unique object id. | |
virtual Bool_t | HandleTimer (TTimer *timer) |
Execute action in response of a timer timing out. | |
Bool_t | HasInconsistentHash () const |
Return true is the type of this object is known to have an inconsistent setup for Hash and RecursiveRemove (i.e. | |
virtual void | Info (const char *method, const char *msgfmt,...) const |
Issue info message. | |
virtual Bool_t | InheritsFrom (const char *classname) const |
Returns kTRUE if object inherits from class "classname". | |
virtual Bool_t | InheritsFrom (const TClass *cl) const |
Returns kTRUE if object inherits from TClass cl. | |
virtual void | Inspect () const |
Dump contents of this object in a graphics canvas. | |
void | InvertBit (UInt_t f) |
virtual Bool_t | IsEqual (const TObject *obj) const |
Default equal comparison (objects are equal if they have the same address in memory). | |
R__ALWAYS_INLINE Bool_t | IsOnHeap () const |
R__ALWAYS_INLINE Bool_t | IsZombie () const |
void | MayNotUse (const char *method) const |
Use this method to signal that a method (defined in a base class) may not be called in a derived class (in principle against good design since a child class should not provide less functionality than its parent, however, sometimes it is necessary). | |
void | Obsolete (const char *method, const char *asOfVers, const char *removedFromVers) const |
Use this method to declare a method obsolete. | |
void | operator delete (void *ptr) |
Operator delete. | |
void | operator delete[] (void *ptr) |
Operator delete []. | |
void * | operator new (size_t sz) |
void * | operator new (size_t sz, void *vp) |
void * | operator new[] (size_t sz) |
void * | operator new[] (size_t sz, void *vp) |
TObject & | operator= (const TObject &rhs) |
TObject assignment operator. | |
virtual void | Paint (Option_t *option="") |
This method must be overridden if a class wants to paint itself. | |
virtual void | Pop () |
Pop on object drawn in a pad to the top of the display list. | |
virtual Int_t | Read (const char *name) |
Read contents of object with specified name from the current directory. | |
void | ResetBit (UInt_t f) |
virtual void | SaveAs (const char *filename="", Option_t *option="") const |
Save this object in the file specified by filename. | |
virtual void | SavePrimitive (std::ostream &out, Option_t *option="") |
Save a primitive as a C++ statement(s) on output stream "out". | |
void | SetBit (UInt_t f) |
void | SetBit (UInt_t f, Bool_t set) |
Set or unset the user status bits as specified in f. | |
virtual void | SetDrawOption (Option_t *option="") |
Set drawing option for object. | |
virtual void | SetUniqueID (UInt_t uid) |
Set the unique object id. | |
virtual void | SysError (const char *method, const char *msgfmt,...) const |
Issue system error message. | |
R__ALWAYS_INLINE Bool_t | TestBit (UInt_t f) const |
Int_t | TestBits (UInt_t f) const |
virtual void | Warning (const char *method, const char *msgfmt,...) const |
Issue warning message. | |
Public Member Functions inherited from TAttLine | |
TAttLine () | |
AttLine default constructor. | |
TAttLine (Color_t lcolor, Style_t lstyle, Width_t lwidth) | |
AttLine normal constructor. | |
virtual | ~TAttLine () |
AttLine destructor. | |
void | Copy (TAttLine &attline) const |
Copy this line attributes to a new TAttLine. | |
Int_t | DistancetoLine (Int_t px, Int_t py, Double_t xp1, Double_t yp1, Double_t xp2, Double_t yp2) |
Compute distance from point px,py to a line. | |
virtual Color_t | GetLineColor () const |
Return the line color. | |
virtual Style_t | GetLineStyle () const |
Return the line style. | |
virtual Width_t | GetLineWidth () const |
Return the line width. | |
virtual void | Modify () |
Change current line attributes if necessary. | |
virtual void | ResetAttLine (Option_t *option="") |
Reset this line attributes to default values. | |
virtual void | SaveLineAttributes (std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t widdef=1) |
Save line attributes as C++ statement(s) on output stream out. | |
virtual void | SetLineAttributes () |
Invoke the DialogCanvas Line attributes. | |
virtual void | SetLineColor (Color_t lcolor) |
Set the line color. | |
virtual void | SetLineColorAlpha (Color_t lcolor, Float_t lalpha) |
Set a transparent line color. | |
virtual void | SetLineStyle (Style_t lstyle) |
Set the line style. | |
virtual void | SetLineWidth (Width_t lwidth) |
Set the line width. | |
Public Member Functions inherited from TAttFill | |
TAttFill () | |
AttFill default constructor. | |
TAttFill (Color_t fcolor, Style_t fstyle) | |
AttFill normal constructor. | |
virtual | ~TAttFill () |
AttFill destructor. | |
void | Copy (TAttFill &attfill) const |
Copy this fill attributes to a new TAttFill. | |
virtual Color_t | GetFillColor () const |
Return the fill area color. | |
virtual Style_t | GetFillStyle () const |
Return the fill area style. | |
virtual Bool_t | IsTransparent () const |
virtual void | Modify () |
Change current fill area attributes if necessary. | |
virtual void | ResetAttFill (Option_t *option="") |
Reset this fill attributes to default values. | |
virtual void | SaveFillAttributes (std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1001) |
Save fill attributes as C++ statement(s) on output stream out. | |
virtual void | SetFillAttributes () |
Invoke the DialogCanvas Fill attributes. | |
virtual void | SetFillColor (Color_t fcolor) |
Set the fill area color. | |
virtual void | SetFillColorAlpha (Color_t fcolor, Float_t falpha) |
Set a transparent fill color. | |
virtual void | SetFillStyle (Style_t fstyle) |
Set the fill area style. | |
Public Member Functions inherited from TAttMarker | |
TAttMarker () | |
TAttMarker default constructor. | |
TAttMarker (Color_t color, Style_t style, Size_t msize) | |
TAttMarker normal constructor. | |
virtual | ~TAttMarker () |
TAttMarker destructor. | |
void | Copy (TAttMarker &attmarker) const |
Copy this marker attributes to a new TAttMarker. | |
virtual Color_t | GetMarkerColor () const |
Return the marker color. | |
virtual Size_t | GetMarkerSize () const |
Return the marker size. | |
virtual Style_t | GetMarkerStyle () const |
Return the marker style. | |
virtual void | Modify () |
Change current marker attributes if necessary. | |
virtual void | ResetAttMarker (Option_t *toption="") |
Reset this marker attributes to the default values. | |
virtual void | SaveMarkerAttributes (std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t sizdef=1) |
Save line attributes as C++ statement(s) on output stream out. | |
virtual void | SetMarkerAttributes () |
Invoke the DialogCanvas Marker attributes. | |
virtual void | SetMarkerColor (Color_t mcolor=1) |
Set the marker color. | |
virtual void | SetMarkerColorAlpha (Color_t mcolor, Float_t malpha) |
Set a transparent marker color. | |
virtual void | SetMarkerSize (Size_t msize=1) |
Set the marker size. | |
virtual void | SetMarkerStyle (Style_t mstyle=1) |
Set the marker style. | |
Static Public Member Functions | |
static Int_t | GetBranchStyle () |
Static function returning the current branch style. | |
static Long64_t | GetMaxTreeSize () |
Static function which returns the tree file size limit in bytes. | |
static TTree * | MergeTrees (TList *list, Option_t *option="") |
Static function merging the trees in the TList into a new tree. | |
static void | SetBranchStyle (Int_t style=1) |
Set the current branch style. | |
static void | SetMaxTreeSize (Long64_t maxsize=100000000000LL) |
Set the maximum size in bytes of a Tree file (static function). | |
Static Public Member Functions inherited from TObject | |
static Long_t | GetDtorOnly () |
Return destructor only flag. | |
static Bool_t | GetObjectStat () |
Get status of object stat flag. | |
static void | SetDtorOnly (void *obj) |
Set destructor only flag. | |
static void | SetObjectStat (Bool_t stat) |
Turn on/off tracking of objects in the TObjectTable. | |
Static Public Member Functions inherited from TAttMarker | |
static Width_t | GetMarkerLineWidth (Style_t style) |
Internal helper function that returns the line width of the given marker style (0 = filled marker) | |
static Style_t | GetMarkerStyleBase (Style_t style) |
Internal helper function that returns the corresponding marker style with line width 1 for the given style. | |
Static Public Attributes | |
static constexpr Long64_t | kMaxEntries = TVirtualTreePlayer::kMaxEntries |
Protected Types | |
enum | ELockStatusBits { kFindBranch = BIT(0) , kFindLeaf = BIT(1) , kGetAlias = BIT(2) , kGetBranch = BIT(3) , kGetEntry = BIT(4) , kGetEntryWithIndex = BIT(5) , kGetFriend = BIT(6) , kGetFriendAlias = BIT(7) , kGetLeaf = BIT(8) , kLoadTree = BIT(9) , kPrint = BIT(10) , kRemoveFriend = BIT(11) , kSetBranchStatus = BIT(12) } |
Protected Types inherited from TObject | |
enum | { kOnlyPrepStep = BIT(3) } |
Protected Member Functions | |
virtual TBranch * | BranchImp (const char *branchname, const char *classname, TClass *ptrClass, void *addobj, Int_t bufsize, Int_t splitlevel) |
Same as TTree::Branch() with added check that addobj matches className. | |
virtual TBranch * | BranchImp (const char *branchname, TClass *ptrClass, void *addobj, Int_t bufsize, Int_t splitlevel) |
Same as TTree::Branch but automatic detection of the class name. | |
virtual TBranch * | BranchImpArr (const char *branchname, EDataType datatype, std::size_t N, void *addobj, Int_t bufsize, Int_t splitlevel) |
virtual TBranch * | BranchImpRef (const char *branchname, const char *classname, TClass *ptrClass, void *addobj, Int_t bufsize, Int_t splitlevel) |
Same as TTree::Branch but automatic detection of the class name. | |
virtual TBranch * | BranchImpRef (const char *branchname, TClass *ptrClass, EDataType datatype, void *addobj, Int_t bufsize, Int_t splitlevel) |
Same as TTree::Branch but automatic detection of the class name. | |
virtual TBranch * | BronchExec (const char *name, const char *classname, void *addobj, Bool_t isptrptr, Int_t bufsize, Int_t splitlevel) |
Helper function implementing TTree::Bronch and TTree::Branch(const char *name, T &obj);. | |
virtual Int_t | CheckBranchAddressType (TBranch *branch, TClass *ptrClass, EDataType datatype, Bool_t ptr) |
Check whether or not the address described by the last 3 parameters matches the content of the branch. | |
Long64_t | GetCacheAutoSize (Bool_t withDefault=kFALSE) |
Used for automatic sizing of the cache. | |
virtual TLeaf * | GetLeafImpl (const char *branchname, const char *leafname) |
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of friend trees. | |
char | GetNewlineValue (std::istream &inputStream) |
Determine which newline this file is using. | |
void | ImportClusterRanges (TTree *fromtree) |
Appends the cluster range information stored in 'fromtree' to this tree, including the value of fAutoFlush. | |
virtual void | KeepCircular () |
Keep a maximum of fMaxEntries in memory. | |
void | MoveReadCache (TFile *src, TDirectory *dir) |
Move a cache from a file to the current file in dir. | |
Int_t | SetBranchAddressImp (TBranch *branch, void *addr, TBranch **ptr) |
Change branch address, dealing with clone trees properly. | |
Int_t | SetCacheSizeAux (Bool_t autocache=kTRUE, Long64_t cacheSize=0) |
Set the size of the file cache and create it if possible. | |
Protected Member Functions inherited from TObject | |
virtual void | DoError (int level, const char *location, const char *fmt, va_list va) const |
Interface to ErrorHandler (protected). | |
void | MakeZombie () |
Protected Attributes | |
TList * | fAliases |
List of aliases for expressions based on the tree branches. | |
std::atomic< UInt_t > | fAllocationCount {0} |
indicates basket should be resized to exact memory usage, but causes significant | |
Long64_t | fAutoFlush |
Auto-flush tree when fAutoFlush entries written or -fAutoFlush (compressed) bytes produced. | |
Long64_t | fAutoSave |
Autosave tree when fAutoSave entries written or -fAutoSave (compressed) bytes produced. | |
TObjArray | fBranches |
List of Branches. | |
TBranchRef * | fBranchRef |
Branch supporting the TRefTable (if any) | |
Bool_t | fCacheDoAutoInit |
! true if cache auto creation or resize check is needed | |
Bool_t | fCacheDoClusterPrefetch |
! true if cache is prefetching whole clusters | |
Long64_t | fCacheSize |
! Maximum size of file buffers | |
Bool_t | fCacheUserSet |
! true if the cache setting was explicitly given by user | |
Long64_t | fChainOffset |
! Offset of 1st entry of this Tree in a TChain | |
TList * | fClones |
! List of cloned trees which share our addresses | |
Long64_t * | fClusterRangeEnd |
[fNClusterRange] Last entry of a cluster range. | |
Long64_t * | fClusterSize |
[fNClusterRange] Number of entries in each cluster for a given range. | |
Int_t | fDebug |
! Debug level | |
Long64_t | fDebugMax |
! Last entry number to debug | |
Long64_t | fDebugMin |
! First entry number to debug | |
Int_t | fDefaultEntryOffsetLen |
Initial Length of fEntryOffset table in the basket buffers. | |
TDirectory * | fDirectory |
! Pointer to directory holding this tree | |
Long64_t | fEntries |
Number of entries. | |
TEntryList * | fEntryList |
! Pointer to event selection list (if one) | |
Long64_t | fEstimate |
Number of entries to estimate histogram limits. | |
TEventList * | fEventList |
! Pointer to event selection list (if one) | |
TList * | fExternalFriends |
! List of TFriendsElement pointing to us and need to be notified of LoadTree. Content not owned. | |
Int_t | fFileNumber |
! current file number (if file extensions) | |
Long64_t | fFlushedBytes |
Number of auto-flushed bytes. | |
UInt_t | fFriendLockStatus |
! Record which method is locking the friend recursion | |
TList * | fFriends |
pointer to list of friend elements | |
Bool_t | fIMTEnabled |
! true if implicit multi-threading is enabled for this tree | |
TArrayI | fIndex |
Index of sorted values. | |
TArrayD | fIndexValues |
Sorted index values. | |
TIOFeatures | fIOFeatures {0} |
IO features to define for newly-written baskets and branches. | |
TObjArray | fLeaves |
Direct pointers to individual branch leaves. | |
Int_t | fMakeClass |
! not zero when processing code generated by MakeClass | |
Int_t | fMaxClusterRange |
! Memory allocated for the cluster range. | |
Long64_t | fMaxEntries |
Maximum number of entries in case of circular buffers. | |
Long64_t | fMaxEntryLoop |
Maximum number of entries to process. | |
Long64_t | fMaxVirtualSize |
Maximum total size of buffers kept in memory. | |
Int_t | fNClusterRange |
Number of Cluster range in addition to the one defined by 'AutoFlush'. | |
UInt_t | fNEntriesSinceSorting |
! Number of entries processed since the last re-sorting of branches | |
Int_t | fNfill |
! Local for EntryLoop | |
TObject * | fNotify |
! Object to be notified when loading a Tree | |
Int_t | fPacketSize |
! Number of entries in one packet for parallel root | |
TVirtualPerfStats * | fPerfStats |
! pointer to the current perf stats object | |
TVirtualTreePlayer * | fPlayer |
! Pointer to current Tree player | |
Long64_t | fReadEntry |
! Number of the entry being processed | |
Long64_t | fSavedBytes |
Number of autosaved bytes. | |
Int_t | fScanField |
Number of runs before prompting in Scan. | |
std::vector< TBranch * > | fSeqBranches |
! Branches to be processed sequentially when IMT is on | |
std::vector< std::pair< Long64_t, TBranch * > > | fSortedBranches |
! Branches to be processed in parallel when IMT is on, sorted by average task time | |
Float_t | fTargetMemoryRatio {1.1f} |
! Ratio for memory usage in uncompressed buffers versus actual occupancy. | |
Int_t | fTimerInterval |
Timer interval in milliseconds. | |
std::atomic< Long64_t > | fTotalBuffers |
! Total number of bytes in branch buffers | |
Long64_t | fTotBytes |
Total number of bytes in all branches before compression. | |
TBuffer * | fTransientBuffer |
! Pointer to the current transient buffer. | |
TVirtualIndex * | fTreeIndex |
Pointer to the tree Index (if any) | |
Int_t | fUpdate |
Update frequency for EntryLoop. | |
TList * | fUserInfo |
pointer to a list of user objects associated to this Tree | |
Double_t | fWeight |
Tree weight (see TTree::SetWeight) | |
Long64_t | fZipBytes |
Total number of bytes in all branches after compression. | |
Protected Attributes inherited from TNamed | |
TString | fName |
TString | fTitle |
Protected Attributes inherited from TAttLine | |
Color_t | fLineColor |
Line color. | |
Style_t | fLineStyle |
Line style. | |
Width_t | fLineWidth |
Line width. | |
Protected Attributes inherited from TAttFill | |
Color_t | fFillColor |
Fill area color. | |
Style_t | fFillStyle |
Fill area style. | |
Protected Attributes inherited from TAttMarker | |
Color_t | fMarkerColor |
Marker color. | |
Size_t | fMarkerSize |
Marker size. | |
Style_t | fMarkerStyle |
Marker style. | |
Static Protected Attributes | |
static Int_t | fgBranchStyle = 1 |
Old/New branch style. | |
static Long64_t | fgMaxTreeSize = 100000000000LL |
Maximum size of a file containing a Tree. | |
Private Types | |
using | TIOFeatures = ROOT::TIOFeatures |
Private Member Functions | |
Int_t | FlushBasketsImpl () const |
Internal implementation of the FlushBaskets algorithm. | |
Long64_t | GetMedianClusterSize () |
Estimate the median cluster size for the TTree. | |
void | InitializeBranchLists (bool checkLeafCount) |
Divides the top-level branches into two vectors: (i) branches to be processed sequentially and (ii) branches to be processed in parallel. | |
void | MarkEventCluster () |
Mark the previous event as being at the end of the event cluster. | |
void | SortBranchesByTime () |
Sorts top-level branches by the last average task time recorded per branch. | |
Private Attributes | |
Bool_t | fIMTFlush {false} |
! True if we are doing a multithreaded flush. | |
std::atomic< Long64_t > | fIMTTotBytes |
! Total bytes for the IMT flush baskets | |
std::atomic< Long64_t > | fIMTZipBytes |
! Zip bytes for the IMT flush baskets. | |
Friends | |
class | TChainIndex |
class | TFriendLock |
TBranch * | TTreeBranchImpRef (TTree *tree, const char *branchname, TClass *ptrClass, EDataType datatype, void *addobj, Int_t bufsize, Int_t splitlevel) |
class | TTreeCloner |
class | TTreeIndex |
#include <TTree.h>
|
private |
|
protected |
enum TTree::EStatusBits |
Enumerator | |
---|---|
kForceRead | |
kCircular | |
kOnlyFlushAtCluster | If set, the branch's buffers will grow until an event cluster boundary is hit, guaranteeing a basket per cluster. This mode does not provide any guarantee on the memory bounds in the case of extremely large events. |
kEntriesReshuffled | If set, signals that this TTree is the output of the processing of another TTree, and the entries are reshuffled w.r.t. to the original TTree. As a safety measure, a TTree with this bit set cannot add friends nor can be added as a friend. If you know what you are doing, you can manually unset this bit with |
TTree::TTree | ( | ) |
TTree::TTree | ( | const char * | name, |
const char * | title, | ||
Int_t | splitlevel = 99 , |
||
TDirectory * | dir = gDirectory |
||
) |
Normal tree constructor.
The tree is created in the current directory. Use the various functions Branch below to add branches to this tree.
If the first character of title is a "/", the function assumes a folder name. In this case, it creates automatically branches following the folder hierarchy. splitlevel may be used in this case to control the split level.
|
delete |
|
virtual |
Add a TFriendElement to the list of friends.
This function:
A TFriendElement TF describes a TTree object TF in a file. When a TFriendElement TF is added to the the list of friends of an existing TTree T, any variable from TF can be referenced in a query to T.
A tree keeps a list of friends. In the context of a tree (or a chain), friendship means unrestricted access to the friends data. In this way it is much like adding another branch to the tree without taking the risk of damaging it. To add a friend to the list, you can use the TTree::AddFriend method. The tree in the diagram below has two friends (friend_tree1 and friend_tree2) and now has access to the variables a,b,c,i,j,k,l and m.
The AddFriend method has two parameters, the first is the tree name and the second is the name of the ROOT file where the friend tree is saved. AddFriend automatically opens the friend file. If no file name is given, the tree called ft1 is assumed to be in the same file as the original tree.
tree.AddFriend("ft1","friendfile1.root"); If the friend tree has the same name as the original tree, you can give it an alias in the context of the friendship:
tree.AddFriend("tree1 = tree","friendfile1.root"); Once the tree has friends, we can use TTree::Draw as if the friend's variables were in the original tree. To specify which tree to use in the Draw method, use the syntax:
If the variablename is enough to uniquely identify the variable, you can leave out the tree and/or branch name. For example, these commands generate a 3-d scatter plot of variable "var" in the TTree tree versus variable v1 in TTree ft1 versus variable v2 in TTree ft2.
The picture illustrates the access of the tree and its friends with a Draw command. When AddFriend is called, the ROOT file is automatically opened and the friend tree (ft1) is read into memory. The new friend (ft1) is added to the list of friends of tree. The number of entries in the friend must be equal or greater to the number of entries of the original tree. If the friend tree has fewer entries a warning is given and the missing entries are not included in the histogram. To retrieve the list of friends from a tree use TTree::GetListOfFriends. When the tree is written to file (TTree::Write), the friends list is saved with it. And when the tree is retrieved, the trees on the friends list are also retrieved and the friendship restored. When a tree is deleted, the elements of the friend list are also deleted. It is possible to declare a friend tree that has the same internal structure (same branches and leaves) as the original tree, and compare the same values by specifying the tree.
Reimplemented in TChain.
|
virtual |
Add a TFriendElement to the list of friends.
The TFile is managed by the user (e.g. the user must delete the file). For complete description see AddFriend(const char *, const char *). This function:
Reimplemented in TChain.
|
virtual |
Add a TFriendElement to the list of friends.
The TTree is managed by the user (e.g., the user must delete the file). For a complete description see AddFriend(const char *, const char *).
Reimplemented in TChain.
AutoSave tree header every fAutoSave bytes.
When large Trees are produced, it is safe to activate the AutoSave procedure. Some branches may have buffers holding many entries. If fAutoSave is negative, AutoSave is automatically called by TTree::Fill when the number of bytes generated since the previous AutoSave is greater than -fAutoSave bytes. If fAutoSave is positive, AutoSave is automatically called by TTree::Fill every N entries. This function may also be invoked by the user. Each AutoSave generates a new key on the file. Once the key with the tree header has been written, the previous cycle (if any) is deleted.
Note that calling TTree::AutoSave too frequently (or similarly calling TTree::SetAutoSave with a small value) is an expensive operation. You should make tests for your own application to find a compromise between speed and the quantity of information you may loose in case of a job crash.
In case your program crashes before closing the file holding this tree, the file will be automatically recovered when you will connect the file in UPDATE mode. The Tree will be recovered at the status corresponding to the last AutoSave.
if option contains "SaveSelf", gDirectory->SaveSelf() is called. This allows another process to analyze the Tree while the Tree is being filled.
if option contains "FlushBaskets", TTree::FlushBaskets is called and all the current basket are closed-out and written to disk individually.
By default the previous header is deleted after having written the new header. if option contains "Overwrite", the previous Tree header is deleted before written the new header. This option is slightly faster, but the default option is safer in case of a problem (disk quota exceeded) when writing the new header.
The function returns the number of bytes written to the file. if the number of bytes is null, an error has occurred while writing the header to the file.
The following two scripts illustrate how to do this. The script treew.C is executed by process1, treer.C by process2
script treew.C:
script treer.C:
|
virtual |
Create a new branch with the object of class classname at address addobj.
WARNING:
Starting with Root version 3.01, the Branch function uses the new style branches (TBranchElement). To get the old behaviour, you can:
Note that with the new style, classname does not need to derive from TObject. It must derived from TObject if the branch style has been set to 0 (old)
Note: See the comments in TBranchElement::SetAddress() for a more detailed discussion of the meaning of the addobj parameter in the case of new-style branches.
Use splitlevel < 0 instead of splitlevel=0 when the class has a custom Streamer
Note: if the split level is set to the default (99), TTree::Branch will not issue a warning if the class can not be split.
Reimplemented in TTreeSQL.
|
inline |
Add a new branch, and infer the data type from the array addobj
being passed.
[in] | name | Name of the branch to be created. |
[in] | addobj | Array of the objects to be added. When calling Fill(), the current value of the type/object will be saved. |
[in] | bufsize | he buffer size in bytes for this branch. When the buffer is full, it is compressed and written to disc. The default value of 32000 bytes and should be ok for most simple types. Larger buffers (e.g. 256000) if your Tree is not split and each entry is large (Megabytes). A small value for bufsize is beneficial if entries in the Tree are accessed randomly and the Tree is in split mode. |
[in] | splitlevel | If T is a class or struct and splitlevel > 0, the members of the object are serialised as separate branches. |
|
inline |
Add a new branch, and infer the data type from the type of obj
being passed.
[in] | name | Name of the branch to be created. |
[in] | obj | Address of the object to be added. Make sure to pass a pointer to the actual type/class that should be stored in the tree (no pointers to base classes). When calling Fill(), the current value of the type/object will be saved. |
[in] | bufsize | The buffer size in bytes for this branch. When the buffer is full, it is compressed and written to disc. The default value of 32000 bytes and should be ok for most simple types. Larger buffers (e.g. 256000) if your Tree is not split and each entry is large (Megabytes). A small value for bufsize is beneficial if entries in the Tree are accessed randomly and the Tree is in split mode. |
[in] | splitlevel | If T is a class or struct and splitlevel > 0, the members of the object are serialised as separate branches. |
|
virtual |
Create a new TTree Branch.
This Branch constructor is provided to support non-objects in a Tree. The variables described in leaflist may be simple variables or structures. // See the two following constructors for writing objects in a Tree.
By default the branch buffers are stored in the same file as the Tree. use TBranch::SetFile to specify a different file
leaflist is the concatenation of all the variable names and types separated by a colon character : The variable name and the variable type are separated by a slash (/). The variable type may be 0,1 or 2 characters. If no type is given, the type of the variable is assumed to be the same as the previous variable. If the first variable does not have a type, it is assumed of type F by default. The list of currently supported types is given below:
C
: a character string terminated by the 0 characterB
: an 8 bit signed integer (Char_t
)b
: an 8 bit unsigned integer (UChar_t
)S
: a 16 bit signed integer (Short_t
)s
: a 16 bit unsigned integer (UShort_t
)I
: a 32 bit signed integer (Int_t
)i
: a 32 bit unsigned integer (UInt_t
)F
: a 32 bit floating point (Float_t
)f
: a 24 bit floating point with truncated mantissa (Float16_t
)D
: a 64 bit floating point (Double_t
)d
: a 24 bit truncated floating point (Double32_t
)L
: a 64 bit signed integer (Long64_t
)l
: a 64 bit unsigned integer (ULong64_t
)G
: a long signed integer, stored as 64 bit (Long_t
)g
: a long unsigned integer, stored as 64 bit (ULong_t
)O
: [the letter o
, not a zero] a boolean (Bool_t
)Arrays of values are supported with the following syntax:
TStreamerElement::GetRange()
for further information.Any of other form is not supported.
Note that the TTree will assume that all the item are contiguous in memory. On some platform, this is not always true of the member of a struct or a class, due to padding and alignment. Sorting your data member in order of decreasing sizeof usually leads to their being contiguous in memory.
Reimplemented in TTreeSQL.
|
virtual |
Create one branch for each element in the collection.
Each entry in the collection becomes a top level branch if the corresponding class is not a collection. If it is a collection, the entry in the collection becomes in turn top level branches, etc. The splitlevel is decreased by 1 every time a new collection is found. For example if list is a TObjArray*
In case a collection element is a TClonesArray, the special Tree constructor for TClonesArray is called. The collection itself cannot be a TClonesArray.
The function returns the total number of branches created.
If name is given, all branch names will be prefixed with name_.
IMPORTANT NOTE1: This function should not be called with splitlevel < 1.
IMPORTANT NOTE2: The branches created by this function will have names corresponding to the collection or object names. It is important to give names to collections to avoid misleading branch names or identical branch names. By default collections have a name equal to the corresponding class name, e.g. the default name for a TList is "TList".
And in general, in case two or more master branches contain subbranches with identical names, one must add a "." (dot) character at the end of the master branch name. This will force the name of the subbranches to be of the form master.subbranch
instead of simply subbranch
. This situation happens when the top level object has two or more members referencing the same class. For example, if a Tree has two branches B1 and B2 corresponding to objects of the same class MyClass, one can do:
if MyClass has 3 members a,b,c, the two instructions above will generate subbranches called B1.a, B1.b ,B1.c, B2.a, B2.b, B2.c
Example:
Reimplemented in TTreeSQL.
|
protectedvirtual |
Same as TTree::Branch() with added check that addobj matches className.
See TTree::Branch() for other details.
Reimplemented in TTreeSQL.
|
protectedvirtual |
Same as TTree::Branch but automatic detection of the class name.
See TTree::Branch for other details.
Reimplemented in TTreeSQL.
|
protectedvirtual |
Same as TTree::Branch but automatic detection of the class name.
See TTree::Branch for other details.
|
protectedvirtual |
Same as TTree::Branch but automatic detection of the class name.
See TTree::Branch for other details.
|
virtual |
Create a new TTree BranchObject.
Build a TBranchObject for an object of class classname. addobj is the address of a pointer to an object of class classname. IMPORTANT: classname must derive from TObject. The class dictionary must be available (ClassDef in class header).
This option requires access to the library where the corresponding class is defined. Accessing one single data member in the object implies reading the full object. See the next Branch constructor for a more efficient storage in case the entry consists of arrays of identical objects.
By default the branch buffers are stored in the same file as the Tree. use TBranch::SetFile to specify a different file
IMPORTANT NOTE about branch names:
And in general, in case two or more master branches contain subbranches with identical names, one must add a "." (dot) character at the end of the master branch name. This will force the name of the subbranches to be of the form master.subbranch
instead of simply subbranch
. This situation happens when the top level object has two or more members referencing the same class. For example, if a Tree has two branches B1 and B2 corresponding to objects of the same class MyClass, one can do:
if MyClass has 3 members a,b,c, the two instructions above will generate subbranches called B1.a, B1.b ,B1.c, B2.a, B2.b, B2.c
bufsize is the buffer size in bytes for this branch The default value is 32000 bytes and should be ok for most cases. You can specify a larger value (e.g. 256000) if your Tree is not split and each entry is large (Megabytes) A small value for bufsize is optimum if you intend to access the entries in the Tree randomly and your Tree is in split mode.
Reimplemented in TTreeSQL.
|
virtual |
Build the optional branch supporting the TRefTable.
This branch will keep all the information to find the branches containing referenced objects.
At each Tree::Fill, the branch numbers containing the referenced objects are saved to the TBranchRef basket. When the Tree header is saved (via TTree::Write), the branch is saved keeping the information with the pointers to the branches having referenced objects.
|
virtual |
Create a new TTree BranchElement.
This function is designed to replace the internal implementation of the old TTree::Branch (whose implementation has been moved to BranchOld).
NOTE: The 'Bronch' method supports only one possible calls signature (where the object type has to be specified explicitly and the address must be the address of a pointer). For more flexibility use 'Branch'. Use Bronch only in (rare) cases (likely to be legacy cases) where both the new and old implementation of Branch needs to be used at the same time.
This function is far more powerful than the old Branch function. It supports the full C++, including STL and has the same behaviour in split or non-split mode. classname does not have to derive from TObject. The function is based on the new TStreamerInfo.
Build a TBranchElement for an object of class classname.
addr is the address of a pointer to an object of class classname. The class dictionary must be available (ClassDef in class header).
Note: See the comments in TBranchElement::SetAddress() for a more detailed discussion of the meaning of the addr parameter.
This option requires access to the library where the corresponding class is defined. Accessing one single data member in the object implies reading the full object.
By default the branch buffers are stored in the same file as the Tree. use TBranch::SetFile to specify a different file
IMPORTANT NOTE about branch names:
And in general, in case two or more master branches contain subbranches with identical names, one must add a "." (dot) character at the end of the master branch name. This will force the name of the subbranches to be of the form master.subbranch
instead of simply subbranch
. This situation happens when the top level object has two or more members referencing the same class. For example, if a Tree has two branches B1 and B2 corresponding to objects of the same class MyClass, one can do:
if MyClass has 3 members a,b,c, the two instructions above will generate subbranches called B1.a, B1.b ,B1.c, B2.a, B2.b, B2.c
bufsize is the buffer size in bytes for this branch The default value is 32000 bytes and should be ok for most cases. You can specify a larger value (e.g. 256000) if your Tree is not split and each entry is large (Megabytes) A small value for bufsize is optimum if you intend to access the entries in the Tree randomly and your Tree is in split mode.
Use splitlevel < 0 instead of splitlevel=0 when the class has a custom Streamer
Note: if the split level is set to the default (99), TTree::Branch will not issue a warning if the class can not be split.
Reimplemented in TTreeSQL.
|
protectedvirtual |
Helper function implementing TTree::Bronch and TTree::Branch(const char *name, T &obj);.
|
virtual |
Build a Tree Index (default is TTreeIndex).
See a description of the parameters and functionality in TTreeIndex::TTreeIndex().
The return value is the number of entries in the Index (< 0 indicates failure).
A TTreeIndex object pointed by fTreeIndex is created. This object will be automatically deleted by the TTree destructor. If an index is already existing, this is replaced by the new one without being deleted. This behaviour prevents the deletion of a previously external index assigned to the TTree via the TTree::SetTreeIndex() method. See also comments in TTree::SetTreeIndex().
TStreamerInfo * TTree::BuildStreamerInfo | ( | TClass * | cl, |
void * | pointer = 0 , |
||
Bool_t | canOptimize = kTRUE |
||
) |
Called by TTree::Fill() when file has reached its maximum fgMaxTreeSize.
Create a new file. If the original file is named "myfile.root", subsequent files are named "myfile_1.root", "myfile_2.root", etc.
Returns a pointer to the new file.
Currently, the automatic change of file is restricted to the case where the tree is in the top level directory. The file should not contain sub-directories.
Before switching to a new file, the tree header is written to the current file, then the current file is closed.
To process the multiple files created by ChangeFile, one must use a TChain.
The new file name has a suffix "_N" where N is equal to fFileNumber+1. By default a Root session starts with fFileNumber=0. One can set fFileNumber to a different value via TTree::SetFileNumber. In case a file named "_N" already exists, the function will try a file named "__N", then "___N", etc.
fgMaxTreeSize can be set via the static function TTree::SetMaxTreeSize. The default value of fgMaxTreeSize is 100 Gigabytes.
If the current file contains other objects like TH1 and TTree, these objects are automatically moved to the new file.
TMemFile
or derivate.
|
protectedvirtual |
Check whether or not the address described by the last 3 parameters matches the content of the branch.
If a Data Model Evolution conversion is involved, reset the fInfo of the branch. The return values are:
Create a clone of this tree and copy nentries.
By default copy all entries. The compression level of the cloned tree is set to the destination file's compression level.
NOTE: Only active branches are copied. NOTE: If the TTree is a TChain, the structure of the first TTree is used for the copy.
IMPORTANT: The cloned tree stays connected with this tree until this tree is deleted. In particular, any changes in branch addresses in this tree are forwarded to the clone trees, unless a branch in a clone tree has had its address changed, in which case that change stays in effect. When this tree is deleted, all the addresses of the cloned tree are reset to their default values.
If 'option' contains the word 'fast' and nentries is -1, the cloning will be done without unzipping or unstreaming the baskets (i.e., a direct copy of the raw bytes on disk).
When 'fast' is specified, 'option' can also contain a sorting order for the baskets in the output file.
There are currently 3 supported sorting order:
When using SortBasketsByOffset the baskets are written in the output file in the same order as in the original file (i.e. the baskets are sorted by their offset in the original file; Usually this also means that the baskets are sorted by the index/number of the last entry they contain)
When using SortBasketsByBranch all the baskets of each individual branches are stored contiguously. This tends to optimize reading speed when reading a small number (1->5) of branches, since all their baskets will be clustered together instead of being spread across the file. However it might decrease the performance when reading more branches (or the full entry).
When using SortBasketsByEntry the baskets with the lowest starting entry are written first. (i.e. the baskets are sorted by the index/number of the first entry they contain). This means that on the file the baskets will be in the order in which they will be needed when reading the whole tree sequentially.
For examples of CloneTree, see tutorials:
Reimplemented in TNtuple.
|
virtual |
Copy nentries from given tree to this tree.
This routines assumes that the branches that intended to be copied are already connected. The typical case is that this tree was created using tree->CloneTree(0).
By default copy all entries.
Returns number of bytes copied to this tree.
If 'option' contains the word 'fast' and nentries is -1, the cloning will be done without unzipping or unstreaming the baskets (i.e., a direct copy of the raw bytes on disk).
When 'fast' is specified, 'option' can also contains a sorting order for the baskets in the output file.
There are currently 3 supported sorting order:
See TTree::CloneTree for a detailed explanation of the semantics of these 3 options.
If the tree or any of the underlying tree of the chain has an index, that index and any index in the subsequent underlying TTree objects will be merged.
There are currently three 'options' to control this merging:
|
virtual |
Copy a tree with selection.
The returned copied tree stays connected with the original tree until the original tree is deleted. In particular, any changes to the branch addresses in the original tree are also made to the copied tree. Any changes made to the branch addresses of the copied tree are overridden anytime the original tree changes its branch addresses. When the original tree is deleted, all the branch addresses of the copied tree are set to zero.
For examples of CopyTree, see the tutorials:
Delete this tree from memory or/and disk.
Reimplemented from TObject.
|
virtual |
Called by TKey and TObject::Clone to automatically add us to a directory when we are read from a file.
Reimplemented in TChain.
|
virtual |
Draw expression varexp for specified entries.
[in] | varexp | is an expression of the general form
|
[in] | selection | is an expression with a combination of the columns. In a selection all the C++ operators are authorized. The value corresponding to the selection expression is used as a weight to fill the histogram. If the expression includes only boolean operations, the result is 0 or 1. If the result is 0, the histogram is not filled. In general, the expression may be of the form: value*(boolean expression)
weight = value . Examples:
|
[in] | option | is the drawing option.
|
[in] | nentries | is the number of entries to process (default is all) |
[in] | firstentry | is the first entry to process (default is 0) |
Let assumes, a leaf fMatrix, on the branch fEvent, which is a 3 by 3 array, or a TClonesArray. In a TTree::Draw expression you can now access fMatrix using the following syntaxes:
String passed | What is used for each entry of the tree |
---|---|
fMatrix | the 9 elements of fMatrix |
fMatrix[][] | the 9 elements of fMatrix |
fMatrix[2][2] | only the elements fMatrix[2][2] |
fMatrix[1] | the 3 elements fMatrix[1][0], fMatrix[1][1] and fMatrix[1][2] |
fMatrix[1][] | the 3 elements fMatrix[1][0], fMatrix[1][1] and fMatrix[1][2] |
fMatrix[][0] | the 3 elements fMatrix[0][0], fMatrix[1][0] and fMatrix[2][0] |
"fEvent.fMatrix...." same as "fMatrix..." (unless there is more than one leaf named fMatrix!).
In summary, if a specific index is not specified for a dimension, TTree::Draw will loop through all the indices along this dimension. Leaving off the last (right most) dimension of specifying then with the two characters '[]' is equivalent. For variable size arrays (and TClonesArray) the range of the first dimension is recalculated for each entry of the tree. You can also specify the index as an expression of any other variables from the tree.
TTree::Draw also now properly handling operations involving 2 or more arrays.
Let assume a second matrix fResults[5][2], here are a sample of some of the possible combinations, the number of elements they produce and the loop used:
expression | element(s) | Loop |
---|---|---|
fMatrix[2][1] - fResults[5][2] | one | no loop |
fMatrix[2][] - fResults[5][2] | three | on 2nd dim fMatrix |
fMatrix[2][] - fResults[5][] | two | on both 2nd dimensions |
fMatrix[][2] - fResults[][1] | three | on both 1st dimensions |
fMatrix[][2] - fResults[][] | six | on both 1st and 2nd dimensions of fResults |
fMatrix[][2] - fResults[3][] | two | on 1st dim of fMatrix and 2nd of fResults (at the same time) |
fMatrix[][] - fResults[][] | six | on 1st dim then on 2nd dim |
fMatrix[][fResult[][]] | 30 | on 1st dim of fMatrix then on both dimensions of fResults. The value if fResults[j][k] is used as the second index of fMatrix. |
In summary, TTree::Draw loops through all unspecified dimensions. To figure out the range of each loop, we match each unspecified dimension from left to right (ignoring ALL dimensions for which an index has been specified), in the equivalent loop matched dimensions use the same index and are restricted to the smallest range (of only the matched dimensions). When involving variable arrays, the range can of course be different for each entry of the tree.
So the loop equivalent to "fMatrix[][2] - fResults[3][]" is:
So the loop equivalent to "fMatrix[][2] - fResults[][]" is:
So the loop equivalent to "fMatrix[][] - fResults[][]" is:
So the loop equivalent to "fMatrix[][fResults[][]]" is:
By default a temporary histogram called htemp
is created. It will be:
Draw("e1")
,Draw("e1:e2")
,Draw("e1:e2:e3")
.In the one dimensional case the htemp
is filled and drawn whatever the drawing option is.
In the two and three dimensional cases, with the default drawing option (""
), a cloud of points is drawn and the histogram htemp
is not filled. For all the other drawing options htemp
will be filled.
In all cases htemp
can be retrieved by calling:
In the two dimensional case (Draw("e1;e2")
), with the default drawing option, the data is filled into a TGraph named Graph
. This TGraph can be retrieved by calling
For the three and four dimensional cases, with the default drawing option, an unnamed TPolyMarker3D is produced, and therefore cannot be retrieved.
In all cases htemp
can be used to access the axes. For instance in the 2D case:
When the option "A"
is used (with TGraph painting option) to draw a 2D distribution:
a scatter plot is produced (with stars in that case) but the axis creation is delegated to TGraph and htemp
is not created.
If varexp
contains >>hnew
(following the variable(s) name(s)), the new histogram called hnew
is created and it is kept in the current directory (and also the current pad). This works for all dimensions.
Example:
will draw sqrt(x)
and save the histogram as "hsqrt" in the current directory. To retrieve it do:
The binning information is taken from the environment variables
In addition, the name of the histogram can be followed by up to 9 numbers between '(' and ')', where the numbers describe the following:
When a new binning is used the new value will become the default. Values can be skipped.
Example:
By default, the specified histogram is reset. To continue to append data to an existing histogram, use "+" in front of the histogram name.
A '+' in front of the histogram name is ignored, when the name is followed by binning information as described in the previous paragraph.
will not reset hsqrt
, but will continue filling. This works for 1-D, 2-D and 3-D histograms.
TTree::Draw default's handling of collections is to assume that any request on a collection pertain to it content. For example, if fTracks is a collection of Track objects, the following:
will plot the value of fPx for each Track objects inside the collection. Also
would plot the result of the member function Track::size() for each Track object inside the collection. To access information about the collection itself, TTree::Draw support the '@' notation. If a variable which points to a collection is prefixed or postfixed with '@', the next part of the expression will pertain to the collection object. For example:
will plot the size of the collection referred to by fTracks
(i.e the number of Track objects).
When a class has a member function named AsDouble or AsString, requesting to directly draw the object will imply a call to one of the 2 functions. If both AsDouble and AsString are present, AsDouble will be used. AsString can return either a char*, a std::string or a TString.s For example, the following
will draw the same histogram as
In addition, when the object is a type TString or std::string, TTree::Draw will call respectively TString::Data
and std::string::c_str()
If the object is a TBits, the histogram will contain the index of the bit that are turned on.
You can refer to the tree (or chain) containing the data by using the string 'This'. You can then could any TTree methods. For example:
will display the local entry numbers be read.
will display the name of the first 'user info' object.
Entry$
: A TTree::Draw formula can use the special variable Entry$
to access the entry number being read. For example to draw every other entry use:
Entry$
: return the current entry number (== TTree::GetReadEntry()
)LocalEntry$
: return the current entry number in the current tree of a chain (== GetTree()->GetReadEntry()
)Entries$
: return the total number of entries (== TTree::GetEntries())LocalEntries$
: return the total number of entries in the current tree of a chain (== GetTree()->TTree::GetEntries())Length$
: return the total number of element of this formula for this entry (==TTreeFormula::GetNdata()
)Iteration$
: return the current iteration over this formula for this entry (i.e. varies from 0 to Length$
).Length$(formula )
: return the total number of element of the formula given as a parameter.Sum$(formula )
: return the sum of the value of the elements of the formula given as a parameter. For example the mean for all the elements in one entry can be calculated with: Sum$(formula )/Length$(formula )
Min$(formula )
: return the minimun (within one TTree entry) of the value of the elements of the formula given as a parameter.Max$(formula )
: return the maximum (within one TTree entry) of the value of the elements of the formula given as a parameter.MinIf$(formula,condition)
MaxIf$(formula,condition)
: return the minimum (maximum) (within one TTree entry) of the value of the elements of the formula given as a parameter if they match the condition. If no element matches the condition, the result is zero. To avoid the resulting peak at zero, use the pattern: MinIf$
for the entries that have no match for the condition.Alt$(primary,alternate)
: return the value of "primary" if it is available for the current iteration otherwise return the value of "alternate". For example, with arr1[3] and arr2[2] Alt$
with multi-dimensional arrays of different dimensions in unlikely to yield the expected results. To visualize a bit more what elements would be matched by TTree::Draw, TTree::Scan can be used: var2<20 ? -99 : var1
, you can use: If the formula contains a file name, TTree::MakeProxy will be used to load and execute this file. In particular it will draw the result of a function with the same name as the file. The function will be executed in a context where the name of the branches can be used as a C++ variable.
For example draw px using the file hsimple.root (generated by the hsimple.C tutorial), we need a file named hsimple.cxx:
MakeProxy can then be used indirectly via the TTree::Draw interface as follow:
A more complete example is available in the tutorials directory: h1analysisProxy.cxx
, h1analysProxy.h
and h1analysisProxyCut.C
which reimplement the selector found in h1analysis.C
The main features of this facility are:
See TTree::MakeProxy for more details.
In case of a 2-Dim expression, one can generate a TProfile histogram instead of a TH2F histogram by specifying option=prof or option=profs or option=profi or option=profg ; the trailing letter select the way the bin error are computed, See TProfile2D::SetErrorOption for details on the differences. The option=prof is automatically selected in case of y:x>>pf where pf is an existing TProfile histogram.
In case of a 3-Dim expression, one can generate a TProfile2D histogram instead of a TH3F histogram by specifying option=prof or option=profs. or option=profi or option=profg ; the trailing letter select the way the bin error are computed, See TProfile2D::SetErrorOption for details on the differences. The option=prof is automatically selected in case of z:y:x>>pf where pf is an existing TProfile2D histogram.
If option GL5D is specified together with 5 variables, a 5D plot is drawn using OpenGL. See $ROOTSYS/tutorials/tree/staff.C as example.
In case of a 2-Dim or more expression with the option=para, one can generate a parallel coordinates plot. With that option, the number of dimensions is arbitrary. Giving more than 4 variables without the option=para or option=candle or option=goff will produce an error.
In case of a 2-Dim or more expression with the option=candle, one can generate a candle sticks chart. With that option, the number of dimensions is arbitrary. Giving more than 4 variables without the option=para or option=candle or option=goff will produce an error.
When option contains "norm" the output histogram is normalized to 1.
TTree::Draw can be used to fill a TEventList object (list of entry numbers) instead of histogramming one variable. If varexp0 has the form >>elist , a TEventList object named "elist" is created in the current directory. elist will contain the list of entry numbers satisfying the current selection. If option "entrylist" is used, a TEntryList object is created If the selection contains arrays, vectors or any container class and option "entrylistarray" is used, a TEntryListArray object is created containing also the subentries satisfying the selection, i.e. the indices of the branches which hold containers classes. Example:
will create a TEventList object named "yplus" in the current directory. In an interactive session, one can type (after TTree::Draw)
to print the list of entry numbers in the list.
will create a TEntryList object names "yplus" in the current directory
will create a TEntryListArray object names "yplus" in the current directory
By default, the specified entry list is reset. To continue to append data to an existing list, use "+" in front of the list name;
will not reset yplus, but will enter the selected entries at the end of the existing list.
Once a TEventList or a TEntryList object has been generated, it can be used as input for TTree::Draw. Use TTree::SetEventList or TTree::SetEntryList to set the current event list
Example 1:
Example 2:
If a TEventList object is used as input, a new TEntryList object is created inside the SetEventList function. In case of a TChain, all tree headers are loaded for this transformation. This new object is owned by the chain and is deleted with it, unless the user extracts it by calling GetEntryList() function. See also comments to SetEventList() function of TTree and TChain.
If arrays are used in the selection criteria and TEntryListArray is not used, all the entries that have at least one element of the array that satisfy the selection are entered in the list.
Example:
will draw the fPy of ALL tracks in event with at least one track with a positive fPy.
To select only the elements that did match the original selection use TEventList::SetReapplyCut or TEntryList::SetReapplyCut.
Example:
will draw the fPy of only the tracks that have a positive fPy.
To draw only the elements that match a selection in case of arrays, you can also use TEntryListArray (faster in case of a more general selection).
Example:
will draw the fPy of only the tracks that have a positive fPy, but without redoing the selection.
Note: Use tree->SetEventList(0) if you do not want use the list as input.
Once TTree::Draw has been called, it is possible to access useful information still stored in the TTree object via the following functions:
where V1,V2,V3 correspond to the expressions in
If the expression has more than 4 component use GetVal(index)
Example:
A more complete complete tutorial (treegetval.C) shows how to use the GetVal() method.
creates a TGraph object with a number of points corresponding to the number of entries selected by the expression "pz>4", the x points of the graph being the px values of the Tree and the y points the py values.
Important note: By default TTree::Draw creates the arrays obtained with GetW, GetV1, GetV2, GetV3, GetV4, GetVal with a length corresponding to the parameter fEstimate. The content will be the last GetSelectedRows() % GetEstimate()
values calculated. By default fEstimate=1000000 and can be modified via TTree::SetEstimate. To keep in memory all the results (in case where there is only one result per entry), use
You must call SetEstimate if the expected number of selected rows you need to look at is greater than 1000000.
You can use the option "goff" to turn off the graphics output of TTree::Draw in the above example.
A complete graphical interface to this function is implemented in the class TTreeViewer. To start the TTreeViewer, three possibilities:
Reimplemented in TChain, and TProofChain.
|
virtual |
Draw expression varexp for specified entries.
This function accepts TCut objects as arguments. Useful to use the string operator +
Example:
Reimplemented in TChain, and TProofChain.
Default Draw method for all objects.
Reimplemented from TObject.
Reimplemented in TProofChain, and TChain.
|
virtual |
Bool_t TTree::EnableCache | ( | ) |
Enable the TTreeCache unless explicitly disabled for this TTree by a prior call to SetCacheSize(0)
.
If the environment variable ROOT_TTREECACHE_SIZE
or the rootrc config TTreeCache.Size
has been set to zero, this call will over-ride them with a value of 1.0 (i.e. use a cache size to hold 1 cluster)
Return true if there is a cache attached to the TTree
(either pre-exisiting or created as part of this call)
|
virtual |
Fill all branches.
This function loops on all the branches of this tree. For each branch, it copies to the branch buffer (basket) the current values of the leaves data types. If a leaf is a simple data type, a simple conversion to a machine independent format has to be done.
This machine independent version of the data is copied into a basket (each branch has its own basket). When a basket is full (32k worth of data by default), it is then optionally compressed and written to disk (this operation is also called committing or 'flushing' the basket). The committed baskets are then immediately removed from memory.
The function returns the number of bytes committed to the individual branches.
If a write error occurs, the number of bytes returned is -1.
If no data are written, because, e.g., the branch is disabled, the number of bytes returned is 0.
The baskets are flushed and the Tree header saved at regular intervals
At regular intervals, when the amount of data written so far is greater than fAutoFlush (see SetAutoFlush) all the baskets are flushed to disk. This makes future reading faster as it guarantees that baskets belonging to nearby entries will be on the same disk region. When the first call to flush the baskets happen, we also take this opportunity to optimize the baskets buffers. We also check if the amount of data written is greater than fAutoSave (see SetAutoSave). In this case we also write the Tree header. This makes the Tree recoverable up to this point in case the program writing the Tree crashes. The decisions to FlushBaskets and Auto Save can be made based either on the number of bytes written (fAutoFlush and fAutoSave negative) or on the number of entries written (fAutoFlush and fAutoSave positive). Note that the user can decide to call FlushBaskets and AutoSave in her event loop base on the number of events written instead of the number of bytes written.
TTree::FlushBaskets
too often increases the IO time.TTree::AutoSave
too often increases the IO time and also the file size.TTree::ChangeFile
when the tree reaches a size greater than TTree::fgMaxTreeSize
. This doesn't happen if the tree is attached to a TMemFile
or derivate.
|
virtual |
Return the branch that correspond to the path 'branchname', which can include the name of the tree or the omitted name of the parent branches.
In case of ambiguity, returns the first match.
Reimplemented in TProofChain, and TChain.
|
virtual |
|
virtual |
Fit a projected item(s) from a tree.
funcname is a TF1 function.
See TTree::Draw() for explanations of the other parameters.
By default the temporary histogram created is called htemp. If varexp contains >>hnew , the new histogram created is called hnew and it is kept in the current directory.
The function returns the number of selected entries.
Example:
will fit sqrt(x) and save the histogram as "hsqrt" in the current directory.
See also TTree::UnbinnedFit
The function returns the status of the histogram fit (see TH1::Fit) If no entries were selected, the function returns -1; (i.e. fitResult is null if the fit is OK)
Write to disk all the basket that have not yet been individually written and create an event cluster boundary (by default).
If the caller wishes to flush the baskets but not create an event cluster, then set create_cluster to false.
If ROOT has IMT-mode enabled, this will launch multiple TBB tasks in parallel via TThreadExecutor to do this operation; one per basket compression. If the caller utilizes TBB also, care must be taken to prevent deadlocks.
For example, let's say the caller holds mutex A and calls FlushBaskets; while TBB is waiting for the ROOT compression tasks to complete, it may decide to run another one of the user's tasks in this thread. If the second user task tries to acquire A, then a deadlock will occur. The example call sequence looks like this:
At this point, the thread will deadlock: the code may function with IMT-mode disabled if the user assumed the legacy code never would run their own TBB tasks.
SO: users of TBB who want to enable IMT-mode should carefully review their locking patterns and make sure they hold no coarse-grained application locks when they invoke ROOT.
Return the number of bytes written or -1 in case of write error.
|
private |
Internal implementation of the FlushBaskets algorithm.
Unlike the public interface, this does NOT create an explicit event cluster boundary; it is up to the (internal) caller to determine whether that should done.
Otherwise, the comments for FlushBaskets applies.
|
virtual |
|
inlinevirtual |
|
virtual |
Return pointer to the branch with the given name in this tree or its friends.
The search is done breadth first.
Reimplemented in TProofChain, and TChain.
|
inlinevirtual |
|
virtual |
Return status of branch with name branchname.
Reimplemented in TProofChain, and TChain.
|
static |
|
inlinevirtual |
|
inlinevirtual |
|
virtual |
Return an iterator over the cluster of baskets starting at firstentry.
This iterator is not yet supported for TChain object.
Reimplemented in TChain.
|
inlinevirtual |
TFile * TTree::GetCurrentFile | ( | ) | const |
|
inline |
|
inlinevirtual |
Reimplemented in TProofChain, TChain, and TTreeSQL.
|
virtual |
Return the number of entries matching the selection.
Return -1 in case of errors.
If the selection uses any arrays or containers, we return the number of entries where at least one element match the selection. GetEntries is implemented using the selector class TSelectorEntries, which can be used directly (see code in TTreePlayer::GetEntries) for additional option. If SetEventList was used on the TTree or TChain, only that subset of entries will be considered.
Reimplemented in TProofChain, TChain, and TTreeSQL.
|
inlinevirtual |
|
virtual |
Read all branches of entry and return total number of bytes read.
getall = 0
: get only active branchesgetall = 1
: get all branchesThe function returns the number of bytes read from the input buffer. If entry does not exist the function returns 0. If an I/O error occurs, the function returns -1.
If the Tree has friends, also read the friends entry.
To activate/deactivate one or more branches, use TBranch::SetBranchStatus For example, if you have a Tree with several hundred branches, and you are interested only by branches named "a" and "b", do
when calling mytree.GetEntry(i); only branches "a" and "b" will be read.
WARNING!! If your Tree has been created in split mode with a parent branch "parent.",
will not activate the sub-branches of "parent". You should do:
Without the trailing dot in the branch creation you have no choice but to call SetBranchStatus explicitly for each of the sub branches.
An alternative is to call directly
By default, GetEntry reuses the space allocated by the previous object for each branch. You can force the previous object to be automatically deleted if you call mybranch.SetAutoDelete(kTRUE) (default is kFALSE).
Example:
Consider the example in $ROOTSYS/test/Event.h The top level branch in the tree T is declared with:
When reading the Tree, one can choose one of these 3 options:
The default (recommended). At the first entry an object of the class Event will be created and pointed by event. At the following entries, event will be overwritten by the new data. All internal members that are TObject* are automatically deleted. It is important that these members be in a valid state when GetEntry is called. Pointers must be correctly initialized. However these internal members will not be deleted if the characters "->" are specified as the first characters in the comment field of the data member declaration.
If "->" is specified, the pointer member is read via pointer->Streamer(buf). In this case, it is assumed that the pointer is never null (case of pointer TClonesArray *fTracks in the Event example). If "->" is not specified, the pointer member is read via buf >> pointer. In this case the pointer may be null. Note that the option with "->" is faster to read or write and it also consumes less space in the file.
The option AutoDelete is set
In this case, at each iteration, the object event is deleted by GetEntry and a new instance of Event is created and filled.
It is strongly recommended to use the default option 1. It has the additional advantage that functions like TTree::Draw (internally calling TTree::GetEntry) will be functional even when the classes in the file are not available.
Note: See the comments in TBranchElement::SetAddress() for the object ownership policy of the underlying (user) data.
Reimplemented in THbookTree, TChain, and TTreeSQL.
|
virtual |
Return entry number corresponding to entry.
if no TEntryList set returns entry else returns the entry number corresponding to the list index=entry
Reimplemented in TChain.
Return entry number corresponding to major and minor number.
Note that this function returns only the entry number, not the data To read the data corresponding to an entry number, use TTree::GetEntryWithIndex the BuildIndex function has created a table of Long64_t* of sorted values corresponding to val = major<<31 + minor; The function performs binary search in this sorted table. If it finds a pair that matches val, it returns directly the index in the table. If an entry corresponding to major and minor is not found, the function returns the index of the major,minor pair immediately lower than the requested value, ie it will return -1 if the pair is lower than the first entry in the index.
See also GetEntryNumberWithIndex
Return entry number corresponding to major and minor number.
Note that this function returns only the entry number, not the data To read the data corresponding to an entry number, use TTree::GetEntryWithIndex the BuildIndex function has created a table of Long64_t* of sorted values corresponding to val = major<<31 + minor; The function performs binary search in this sorted table. If it finds a pair that matches val, it returns directly the index in the table, otherwise it returns -1.
See also GetEntryNumberWithBestIndex
Read entry corresponding to major and minor number.
The function returns the total number of bytes read. If the Tree has friend trees, the corresponding entry with the index values (major,minor) is read. Note that the master Tree and its friend may have different entry serial numbers corresponding to (major,minor).
Reimplemented in TChain.
|
inline |
|
virtual |
|
virtual |
If the 'tree' is a friend, this method returns its alias name.
This alias is an alternate name for the tree.
It can be used in conjunction with a branch or leaf name in a TTreeFormula, to specify in which particular tree the branch or leaf can be found if the friend trees have branches or leaves with the same name as the master tree.
It can also be used in conjunction with an alias created using TTree::SetAlias in a TTreeFormula, e.g.:
where fPx is a branch of the friend tree aliased as 'treealias' and 'myAlias' was created using TTree::SetAlias on the friend tree.
However, note that 'treealias.myAlias' will be expanded literally, without remembering that it comes from the aliased friend and thus the branch name might not be disambiguated properly, which means that you may not be able to take advantage of this feature.
ROOT::TIOFeatures TTree::GetIOFeatures | ( | ) | const |
|
virtual |
|
virtual |
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of friend trees.
The leaf name can contain the name of a friend tree with the syntax: friend_dir_and_tree.full_leaf_name the friend_dir_and_tree can be of the form:
TDirectoryName/TreeName
Reimplemented in TChain.
|
virtual |
|
protectedvirtual |
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of friend trees.
The leaf name can contain the name of a friend tree with the syntax: friend_dir_and_tree.full_leaf_name the friend_dir_and_tree can be of the form:
|
inlinevirtual |
Reimplemented in TProofChain.
|
inlinevirtual |
Reimplemented in TProofChain, and TChain.
|
inlinevirtual |
Reimplemented in TProofChain.
|
inlinevirtual |
Reimplemented in TProofChain.
|
inlinevirtual |
Reimplemented in TProofChain, and TChain.
|
inlinevirtual |
|
virtual |
Return maximum of column with name columname.
if the Tree has an associated TEventList or TEntryList, the maximum is computed for the entries in this list.
Reimplemented in TChain.
|
static |
|
inlinevirtual |
|
private |
Estimate the median cluster size for the TTree.
This value provides e.g. a reasonable cache size default if other heuristics fail. Clusters with size 0 and the very last cluster range, that might not have been committed to fClusterSize yet, are ignored for the purposes of the calculation.
|
virtual |
Return minimum of column with name columname.
if the Tree has an associated TEventList or TEntryList, the minimum is computed for the entries in this list.
Reimplemented in TChain.
|
inlinevirtual |
|
protected |
|
inlinevirtual |
TVirtualTreePlayer * TTree::GetPlayer | ( | ) |
Load the TTreePlayer (if not already done).
TTreeCache * TTree::GetReadCache | ( | TFile * | file | ) | const |
Find and return the TTreeCache registered with the file and which may contain branches for us.
TTreeCache * TTree::GetReadCache | ( | TFile * | file, |
Bool_t | create | ||
) |
Find and return the TTreeCache registered with the file and which may contain branches for us.
If create is true and there is no cache a new cache is created with default size.
|
inlinevirtual |
Reimplemented in TProofChain, and TChain.
|
inlinevirtual |
|
inline |
|
inlinevirtual |
|
inlinevirtual |
|
inlinevirtual |
|
inlinevirtual |
|
virtual |
Return a pointer to the list containing user objects associated to this tree.
The list is automatically created if it does not exist.
WARNING: By default the TTree destructor will delete all objects added to this list. If you do not want these objects to be deleted, call:
mytree->GetUserInfo()->Clear();
before deleting the tree.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinevirtual |
Appends the cluster range information stored in 'fromtree' to this tree, including the value of fAutoFlush.
This is used when doing a fast cloning (by TTreeCloner). See also fAutoFlush and fAutoSave if needed.
Divides the top-level branches into two vectors: (i) branches to be processed sequentially and (ii) branches to be processed in parallel.
Even if IMT is on, some branches might need to be processed first and in a sequential fashion: in the parallelization of GetEntry, those are the branches that store the size of another branch for every entry (e.g. the size of an array branch). If such branches were processed in parallel with the rest, there could be two threads invoking TBranch::GetEntry on one of them at the same time, since a branch that depends on a size (or count) branch will also invoke GetEntry on the latter. This method can be invoked several times during the event loop if the TTree is being written, for example when adding new branches. In these cases, the checkLeafCount
parameter is false.
[in] | checkLeafCount | True if we need to check whether some branches are count leaves. |
|
virtual |
Copy the content to a new new file, update this TTree with the new location information and attach this TTree to the new directory.
options: Indicates a basket sorting method, see TTreeCloner::TTreeCloner for details
If new and old directory are in the same file, the data is untouched, this "just" does a call to SetDirectory. Equivalent to an "in place" cloning of the TTree.
Reimplemented in TChain.
|
inlinevirtual |
|
protectedvirtual |
Read in memory all baskets from all branches up to the limit of maxmemory bytes.
If maxmemory is non null and positive SetMaxVirtualSize is called with this value. Default for maxmemory is 2000000000 (2 Gigabytes). The function returns the total number of baskets read into memory if negative an error occurred while loading the branches. This method may be called to force branch baskets in memory when random access to branch entries is required. If random access to only a few branches is required, you should call directly TBranch::LoadBaskets.
Reimplemented in TChain.
Set current entry.
Returns -2 if entry does not exist (just as TChain::LoadTree()). Returns -6 if an error occurs in the notification callback (just as TChain::LoadTree()).
Note: This function is overloaded in TChain.
Load entry on behalf of our master tree, we may use an index.
Called by LoadTree() when the masterTree looks for the entry number in a friend tree (us) corresponding to the passed entry number in the masterTree.
If we have no index, our entry number and the masterTree entry number are the same.
If we do have an index, we must find the (major, minor) value pair in masterTree to locate our corresponding entry.
Generate a skeleton analysis class for this tree.
The following files are produced: classname.h and classname.C. If classname is 0, classname will be called "nameoftree".
The generated code in classname.h includes the following:
The generated code in classname.C includes only the main analysis function Loop.
To use this function:
where T is the name of the TTree in file myfile.root, and MyClass.h, MyClass.C the name of the files created by this function. In a ROOT session, you can do:
NOTE: Do not use the code generated for a single TTree which is part of a TChain to process that entire TChain. The maximum dimensions calculated for arrays on the basis of a single TTree from the TChain might be (will be!) too small when processing all of the TTrees in the TChain. You must use myChain.MakeClass() to generate the code, not myTree.MakeClass(...).
|
virtual |
Generate a skeleton function for this tree.
The function code is written on filename. If filename is 0, filename will be called nameoftree.C
The generated code includes the following:
To use this function:
where T is the name of the TTree in file myfile.root and MyAnalysis.C the name of the file created by this function.
NOTE: Since the implementation of this function, a new and better function TTree::MakeClass() has been developed.
|
virtual |
Generate a skeleton analysis class for this Tree using TBranchProxy.
TBranchProxy is the base of a class hierarchy implementing an indirect access to the content of the branches of a TTree.
"proxyClassname" is expected to be of the form:
The skeleton will then be generated in the file:
located in the current directory or in 'path/' if it is specified. The class generated will be named 'fileprefix'
"macrofilename" and optionally "cutfilename" are expected to point to source files which will be included by the generated skeleton. Method of the same name as the file(minus the extension and path) will be called by the generated skeleton's Process method as follow:
"option" can be used select some of the optional features during the code generation. The possible options are:
'maxUnrolling' controls how deep in the class hierarchy does the system 'unroll' classes that are not split. Unrolling a class allows direct access to its data members (this emulates the behavior of TTreeFormula).
The main features of this skeleton are:
For example with Event.root, if
is executed by one of the method of the skeleton, somePx will updated with the current value of fPx of the 3rd track.
Both macrofilename and the optional cutfilename are expected to be the name of source files which contain at least a free standing function with the signature:
and
x_t and y_t needs to be types that can convert respectively to a double and a bool (because the skeleton uses:
if (cutfilename()) htemp->Fill(macrofilename());
These two functions are run in a context such that the branch names are available as local variables of the correct (read-only) type.
Note that if you use the same 'variable' twice, it is more efficient to 'cache' the value. For example:
is more efficient than
Also, optionally, the generated selector will also call methods named macrofilename_methodname in each of 6 main selector methods if the method macrofilename_methodname exist (Where macrofilename is stripped of its extension).
Concretely, with the script named h1analysisProxy.C,
If a file name macrofilename.h (or .hh, .hpp, .hxx, .hPP, .hXX) exist it is included before the declaration of the proxy class. This can be used in particular to insure that the include files needed by the macro file are properly loaded.
The default histogram is accessible via the variable named 'htemp'.
If the library of the classes describing the data in the branch is loaded, the skeleton will add the needed include
statements and give the ability to access the object stored in the branches.
To draw px using the file hsimple.root (generated by the hsimple.C tutorial), we need a file named hsimple.cxx:
MakeProxy can then be used indirectly via the TTree::Draw interface as follow:
A more complete example is available in the tutorials directory: h1analysisProxy.cxx , h1analysProxy.h and h1analysisProxyCut.C which reimplement the selector found in h1analysis.C
Generate skeleton selector class for this tree.
The following files are produced: selector.h and selector.C. If selector is 0, the selector will be called "nameoftree". The option can be used to specify the branches that will have a data member.
The generated code in selector.h includes the following:
The class selector derives from TSelector. The generated code in selector.C includes empty functions defined above.
To use this function:
TFile f("myfile.root");
)T->MakeSelector("myselect");
where T is the name of the Tree in file myfile.root and myselect.h, myselect.C the name of the files created by this function. In a ROOT session, you can do:
|
private |
|
virtual |
|
virtual |
Merge the trees in the TList into this tree.
If info->fIsFirst is true, first we clone this TTree info the directory info->fOutputDirectory and then overlay the new TTree information onto this TTree object (so that this TTree object is now the appropriate to use for further merging).
Returns the total number of entries in the merged tree.
Reimplemented in TChain.
|
protected |
|
virtual |
|
virtual |
This function may be called after having filled some entries in a Tree.
Using the information in the existing branch buffers, it will reassign new branch buffer sizes to optimize time and memory.
The function computes the best values for branch buffer sizes such that the total buffer sizes is less than maxMemory and nearby entries written at the same time. In case the branch compression factor for the data written so far is less than compMin, the compression is disabled.
if option ="d" an analysis report is printed.
TPrincipal * TTree::Principal | ( | const char * | varexp = "" , |
const char * | selection = "" , |
||
Option_t * | option = "np" , |
||
Long64_t | nentries = kMaxEntries , |
||
Long64_t | firstentry = 0 |
||
) |
Interface to the Principal Components Analysis class.
Create an instance of TPrincipal
Fill it with the selected variables
see TTree::Draw for explanation of the other parameters.
The created object is named "principal" and a reference to it is added to the list of specials Root objects. you can retrieve a pointer to the created object via:
Print a summary of the tree contents.
Wildcarding can be used to print only a subset of the branches, e.g., T.Print("Elec*")
will print all branches with name starting with "Elec".
Reimplemented from TNamed.
Reimplemented in THbookTree, and TChain.
Print statistics about the TreeCache for this tree.
Like:
if option = "a" the list of blocks in the cache is printed
|
virtual |
Process this tree executing the TSelector code in the specified filename.
The return value is -1 in case of error and TSelector::GetStatus() in in case of success.
The code in filename is loaded (interpreted or compiled, see below), filename must contain a valid class implementation derived from TSelector, where TSelector has the following member functions:
Begin()
: called every time a loop on the tree starts, a convenient place to create your histograms.SlaveBegin()
: called after Begin(), when on PROOF called only on the slave servers.Process()
: called for each event, in this function you decide what to read and fill your histograms.SlaveTerminate
: called at the end of the loop on the tree, when on PROOF called only on the slave servers.Terminate()
: called at the end of the loop on the tree, a convenient place to draw/fit your histograms.If filename is of the form file.C, the file will be interpreted.
If filename is of the form file.C++, the file file.C will be compiled and dynamically loaded.
If filename is of the form file.C+, the file file.C will be compiled and dynamically loaded. At next call, if file.C is older than file.o and file.so, the file.C is not compiled, only file.so is loaded.
It may be more interesting to invoke directly the other Process function accepting a TSelector* as argument.eg
One should not call this function twice with the same selector file in the same script. If this is required, proceed as indicated in NOTE1, by getting a pointer to the corresponding TSelector,eg
or use ACLIC to compile the selector
Reimplemented in TChain, and TProofChain.
|
virtual |
Process this tree executing the code in the specified selector.
The return value is -1 in case of error and TSelector::GetStatus() in in case of success.
The TSelector class has the following member functions:
Begin()
: called every time a loop on the tree starts, a convenient place to create your histograms.SlaveBegin()
: called after Begin(), when on PROOF called only on the slave servers.Process()
: called for each event, in this function you decide what to read and fill your histograms.SlaveTerminate
: called at the end of the loop on the tree, when on PROOF called only on the slave servers.Terminate()
: called at the end of the loop on the tree, a convenient place to draw/fit your histograms.
If the Tree (Chain) has an associated EventList, the loop is on the nentries of the EventList, starting at firstentry, otherwise the loop is on the specified Tree entries.
Reimplemented in TChain, and TProofChain.
|
virtual |
|
virtual |
Loop over entries and return a TSQLResult object containing entries following selection.
|
virtual |
Create or simply read branches from filename.
if branchDescriptor = "" (default), it is assumed that the Tree descriptor is given in the first line of the file with a syntax like
otherwise branchDescriptor must be specified with the above syntax.
x:y:z
(all variables are assumed of type "F"x/D:y:z
(all variables are of type "D"x:y/D:z
(x is type "F", y and z of type "D"delimiter allows for the use of another delimiter besides whitespace. This provides support for direct import of common data file formats like csv. If delimiter != ' ' and branchDescriptor == "", then the branch description is taken from the first line in the file, but delimiter is used for the branch names tokenization rather than ':'. Note however that if the values in the first line do not use the /[type] syntax, all variables are assumed to be of type "F". If the filename ends with extensions .csv or .CSV and a delimiter is not specified (besides ' '), the delimiter is automatically set to ','.
Lines in the input file starting with "#" are ignored. Leading whitespace for each column data is skipped. Empty lines are skipped.
A TBranch object is created for each variable in the expression. The total number of rows read from the file is returned.
To fill a TTree with multiple input text files, proceed as indicated above for the first input file and omit the second argument for subsequent calls
|
virtual |
Create or simply read branches from an input stream.
See reference information for TTree::ReadFile
|
virtual |
|
virtual |
Record a TFriendElement that we need to warn when the chain switches to a new file (typically this is because this chain is a friend of another TChain)
|
virtual |
|
virtual |
|
virtual |
|
virtual |
Loop over tree entries and print entries passing selection.
Otherwise a columns selection can be made using "var1:var2:var3". See TTreePlayer::Scan for more information
Reimplemented in TChain.
|
virtual |
Set a tree variable alias.
Set an alias for an expression/formula based on the tree 'variables'.
The content of 'aliasName' can be used in TTreeFormula (i.e. TTree::Draw, TTree::Scan, TTreeViewer) and will be evaluated as the content of 'aliasFormula'.
If the content of 'aliasFormula' only contains symbol names, periods and array index specification (for example event.fTracks[3]), then the content of 'aliasName' can be used as the start of symbol.
If the alias 'aliasName' already existed, it is replaced by the new value.
When being used, the alias can be preceded by an eventual 'Friend Alias' (see TTree::GetFriendAlias)
Return true if it was added properly.
For example:
This function may be called at the start of a program to change the default value for fAutoFlush.
autof is the number of consecutive entries after which TTree::Fill will flush all branch buffers to disk.
When filling the Tree the branch buffers will be flushed to disk when more than autof bytes have been written to the file. At the first FlushBaskets TTree::Fill will replace fAutoFlush by the current value of fEntries.
Calling this function with autof<0 is interesting when it is hard to estimate the size of one entry. This value is also independent of the Tree.
The Tree is initialized with fAutoFlush=-30000000, ie that, by default, the first AutoFlush will be done when 30 MBytes of data are written to the file.
The AutoFlush mechanism is disabled.
Flushing the buffers at regular intervals optimize the location of consecutive entries on the disk by creating clusters of baskets.
A cluster of baskets is a set of baskets that contains all the data for a (consecutive) set of entries and that is stored consecutively on the disk. When reading all the branches, this is the minimum set of baskets that the TTreeCache will read.
This function may be called at the start of a program to change the default value for fAutoSave (and for SetAutoSave) is -300000000, ie 300 MBytes.
When filling the Tree the branch buffers as well as the Tree header will be flushed to disk when the watermark is reached. If fAutoSave is positive the watermark is reached when a multiple of fAutoSave entries have been written. If fAutoSave is negative the watermark is reached when -fAutoSave bytes have been written to the file. In case of a program crash, it will be possible to recover the data in the Tree up to the last AutoSave point.
|
virtual |
Verify the validity of the type of addr before calling SetBranchAddress.
See TTree::CheckBranchAddressType for the semantic of the return value.
Note: See the comments in TBranchElement::SetAddress() for the meaning of the addr parameter and the object ownership policy.
Reimplemented in TChain.
Change branch address, dealing with clone trees properly.
See TTree::CheckBranchAddressType for the semantic of the return value.
Note: See the comments in TBranchElement::SetAddress() for the meaning of the addr parameter and the object ownership policy.
Reimplemented in TChain.
|
virtual |
Verify the validity of the type of addr before calling SetBranchAddress.
See TTree::CheckBranchAddressType for the semantic of the return value.
Note: See the comments in TBranchElement::SetAddress() for the meaning of the addr parameter and the object ownership policy.
Reimplemented in TChain.
Change branch address, dealing with clone trees properly.
See TTree::CheckBranchAddressType for the semantic of the return value.
Note: See the comments in TBranchElement::SetAddress() for the meaning of the addr parameter and the object ownership policy.
Set branch status to Process or DoNotProcess.
When reading a Tree, by default, all branches are read. One can speed up considerably the analysis phase by activating only the branches that hold variables involved in a query.
bname is the name of a branch.
see TRegexp for wildcarding options
Example:
Assume a tree T with sub-branches a,b,c,d,e,f,g,etc.. when doing T.GetEntry(i) all branches are read for entry i. to read only the branches c and e, one can do
bname is interpreted as a wild-carded TRegexp (see TRegexp::MakeWildcard). Thus, "a*b" or "a.*b" matches branches starting with "a" and ending with "b", but not any other branch with an "a" followed at some point by a "b". For this second behavior, use "*a*b*". Note that TRegExp does not support '|', and so you cannot select, e.g. track and shower branches with "track|shower".
WARNING! WARNING! WARNING!
SetBranchStatus is matching the branch based on match of the branch 'name' and not on the branch hierarchy! In order to be able to selectively enable a top level object that is 'split' you need to make sure the name of the top level branch is prefixed to the sub-branches' name (by adding a dot ('.') at the end of the Branch creation and use the corresponding bname.
I.e If your Tree has been created in split mode with a parent branch "parent." (note the trailing dot).
will not activate the sub-branches of "parent". You should do:
Without the trailing dot in the branch creation you have no choice but to call SetBranchStatus explicitly for each of the sub branches.
An alternative to this function is to read directly and only the interesting branches. Example:
If found is not 0, the number of branch(es) found matching the regular expression is returned in *found AND the error message 'unknown branch' is suppressed.
Reimplemented in TChain.
Interface to TTreeCache to set the number of entries for the learning phase.
Set maximum size of the file cache .
Returns:
Reimplemented in TChain.
Set the size of the file cache and create it if possible.
If autocache is true: this may be an autocreated cache, possibly enlarging an existing autocreated cache. The size is calculated. The value passed in cacheSize:
If autocache is false: this is a user requested cache. cacheSize is used to size the cache. This cache should never be automatically adjusted.
Returns:
Enable/Disable circularity for this tree.
if maxEntries > 0 a maximum of maxEntries is kept in one buffer/basket per branch in memory. Note that when this function is called (maxEntries>0) the Tree must be empty or having only one basket per branch. if maxEntries <= 0 the tree circularity is disabled.
Circular Trees are interesting in online real time environments to store the results of the last maxEntries events.
Calling SetCircular with maxEntries <= 0 is necessary before merging circular Trees that have been saved on files.
SetCircular with maxEntries <= 0 is automatically called by TChain::Merge
A circular Tree can still be saved in a file. When read back, it is still a circular Tree and can be filled again.
Set the debug level and the debug range.
For entries in the debug range, the functions TBranchElement::Fill and TBranchElement::GetEntry will print the number of bytes filled or read for each branch.
Reimplemented in TProofChain.
|
virtual |
Change number of entries in the tree.
If n >= 0, set number of entries in the tree = n.
If n < 0, set number of entries in the tree to match the number of entries in each branch. (default for n is -1)
This function should be called only when one fills each branch independently via TBranch::Fill without calling TTree::Fill. Calling TTree::SetEntries() make sense only if the number of entries in each branch is identical, a warning is issued otherwise. The function returns the number of entries.
Reimplemented in THbookTree.
|
virtual |
Set number of entries to estimate variable limits.
If n is -1, the estimate is set to be the current maximum for the tree (i.e. GetEntries() + 1) If n is less than -1, the behavior is undefined.
|
virtual |
This function transfroms the given TEventList into a TEntryList The new TEntryList is owned by the TTree and gets deleted when the tree is deleted.
This TEntryList can be returned by GetEntryList() function.
Reimplemented in TProofChain, and TChain.
Set fFileNumber to number.
fFileNumber is used by TTree::Fill to set the file name for a new file to be created when the current file exceeds fgTreeMaxSize. (see TTree::ChangeFile) if fFileNumber=10, the new file name will have a suffix "_11", ie, fFileNumber is incremented before setting the file name
ROOT::TIOFeatures TTree::SetIOFeatures | ( | const ROOT::TIOFeatures & | features | ) |
Set all the branches in this TTree to be in decomposed object mode (also known as MakeClass mode).
For MakeClass mode 0, the TTree expects the address where the data is stored to be set by either the user or the TTree to the address of a full object through the top level branch. For MakeClass mode 1, this address is expected to point to a numerical type or C-style array (variable or not) of numerical type, representing the primitive data members. The function's primary purpose is to allow the user to access the data directly with numerical type variable rather than having to have the original set of classes (or a reproduction thereof).
Reimplemented in TChain.
|
inlinevirtual |
Set the maximum size in bytes of a Tree file (static function).
The default size is 100000000000LL, ie 100 Gigabytes.
In TTree::Fill, when the file has a size > fgMaxTreeSize, the function closes the current file and starts writing into a new file with a name of the style "file_1.root" if the original requested file name was "file.root".
|
virtual |
Sets the address of the object to be notified when the tree is loaded.
The method TObject::Notify is called for the given object when the tree is loaded. Specifically this occurs in the TTree::LoadTree method. To remove the notification call this method with nullptr:
[in] | obj | Pointer to a TObject to be notified. |
|
virtual |
|
virtual |
|
virtual |
The current TreeIndex is replaced by the new index.
Note that this function does not delete the previous index. This gives the possibility to play with more than one index, e.g.,
Set tree weight.
The weight is used by TTree::Draw to automatically weight each selected entry in the resulting histogram.
For example the equivalent of:
is:
This function is redefined by TChain::SetWeight. In case of a TChain, an option "global" may be specified to set the same weight for all trees in the TChain instead of the default behaviour using the weights of each tree in the chain (see TChain::SetWeight).
Reimplemented in TChain.
|
private |
|
virtual |
Start the TTreeViewer on this tree.
|
virtual |
|
virtual |
Unbinned fit of one or more variable(s) from a tree.
funcname is a TF1 function.
See TTree::Draw for explanations of the other parameters.
Fit the variable varexp using the function funcname using the selection cuts given by selection.
The list of fit options is given in parameter option.
You can specify boundary limits for some or all parameters via
if parmin>=parmax, the parameter is fixed
Note that you are not forced to fix the limits for all parameters. For example, if you fit a function with 6 parameters, you can do:
With this setup:
For the fit to be meaningful, the function must be self-normalized.
i.e. It must have the same integral regardless of the parameter settings. Otherwise the fit will effectively just maximize the area.
It is mandatory to have a normalization variable which is fixed for the fit. e.g.
1, 2 and 3 Dimensional fits are supported. See also TTree::Fit
Return status:
|
virtual |
Write this object to the current directory.
For more see TObject::Write If option & kFlushBasket, call FlushBasket before writing the tree.
Reimplemented from TObject.
Write this object to the current directory.
For more see TObject::Write If option & kFlushBasket, call FlushBasket before writing the tree.
Reimplemented from TObject.
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
protected |
|
mutableprotected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
staticprotected |
|
staticprotected |
|
protected |
|
mutableprivate |
|
mutableprivate |
|
mutableprivate |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Tree weight (see TTree::SetWeight)
|
protected |
|
staticconstexpr |