Re: [ROOT] Questions regarding TDirectory

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sat Jan 05 2002 - 10:09:40 MET


Hi Christian,

On Fri, 4 Jan 2002, cstrato@EUnet.at wrote:

> Dear Rene;
> 
> When trying to create a complicated directory hierarchy in TFile, I came
> 
> across the following questions:
> 
> 1, Constructor: Sorrowly, mkdir() cannot be used to check if a directory
> 
> exists already, since "Error("TDirectory","Directory %s exists
> already",name);"
> in the constructor does not set "gDirectoy = 0;". I suppose this is a
> feature to allow namecycles, but then I would suggest to change "Error"
> to "Warning"?
> 
You can check if name (object or directory) is already in the current dir
with gDirectory->FindObject(name).

> 2, RecursiveRemove(): Is it ok to call RecursiveRemove(), when I want to
> 
> delete a TObject, or does this have side effects? (I need to pass a
> TObject and not a namecycle.)

Why do you want to call RecursiveRemove? This function is automatically
by the TObject destructor when object->TestBit(kMustCleanup) is true.
The kMustCleanup bit is automatically set for objects added to TPad
and TFolder. You can set this bit yourself object->SetBit(kMustCleanup)
if you want this object to be automatically removed from all containers
referencing it when the object is deleted.
You can add a container to teh list of containers to be cleaned via
gROOT->GetListOfCleanups()->Add(mycollection);

> 
> 3, Write(): Is there a reason why the variable "name" is not used in
> method
> Write(name = 0,..)? It would be great if I could use dir->Write(MyName)
> to
> write a single object to TFile.

You better use object->Write();
or object->Write(name);

This will write object into the current directory. By default, if you do
not specify a name, the object name is used. If you specify the parameter 
name, this will be the name of the key.

> > 4, FindObjectAny(): How can  I
find an object in TFile containing a > complicated
> hierarchy of TDirectories? It would be great to have a recursive method
> analogous to "TFolder::FindObjectAny()".

I will implement FindObjectAny. This was not implemented because in case
of a complex directory structure, this call will force reading all
directory keys in memory. But, I agree that there are more advantages
than disadvantages in implementing FindObjectAny.

> 
> 5, EncodeNameCycle(): Since every TObject can be stored in TFile, would
> it
> be possible to move the methods Encode/DecodeNameCycle() to TObject?

Why do you need this ?
See object->Write

> 
> 6, Shortcut/Alias: A nice feature of TFolder is that one folder can be
> added to different folders. It would be great if this could also be done
> 
> with TDirectory, e.g. as shortcut or alias as known from other file
> systems.
> Sorrowly, creating a reference TRef does not help, since TBrowser is not
> 
> able to recognize it as alias to TDirectory.

Unix-like links are not implemented in TDirectory. This could be added
to the current TKey or a new class TKeyLink implemented.

Rene Brun.

> 
> Thank you for your help.
> 
> Best regards
> Christian
> ----------------------------------
> C.h.r.i.s.t.i.a.n  S.t.r.a.t.o.w.a
> V.i.e.n.n.a,  A.u.s.t.r.i.a
> 
> 
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:37 MET