Hi Christian, The TFolder class is to manage objects in memory not on disk. Use file directories for disk files. On Fri, 5 Jan 2001 cstrato@EUnet.at wrote: > Dear Rooters > > I would like to create a Class B which stores a list of trees, and a > Class A, > which stores a list of Class B and another list of histograms. > > In this respect I have the following questions on how to deal best with > this problem: > > 1, I understand that TFile is stored in machine independent format, > which is great. > This means that everything in TFile can be accessed independent of the > machine type, > including class TFolder when it is stored in TFile. > Could I also use TFolder as the highest hierarchy and store different > TFiles and > histograms in TFolder? Are histograms then accessible from different > machines or > do I still need to store historgrams in TFile first, which is itself > stored in > TFolder to access the histograms? > > 2, Can I create class A in the following way? > ClassA: public TNamed { > private > TFile *fFile; > TFolder *fFolder; > }; > How can I store this class A itself in its member variable fFile or > fFolder? > Is this possible? You can store the class A into fFile. You must declare fFile to be non persistent with TFile *fFile; //! In the default constructor, set fFile to 0. > > I would like to be able to write a simple macro > { > ClassA *classA = new Class("NameA"); > classA->DoSomething(); > } > Is it possible to code the constructor such that it opens its TFile > *fFile when it > exists and then accesses the information stored in itself, i.e. the > classA stored > earlier in fFile? yes > > 3, Would it be better to create class A in one of the following ways? > a,ClassA: public TFile { > private > TFolder *fFolder; > } No, you should not do this. > Would ClassA then also be machine independent? > Would this be a feasible idea? > > b,ClassA: public TFolder { > private > TFile *fFile; > } > no > 4, TFolder has a function TFolder::Add(TObject *obj) and the explanation > says > that "obj must be a TObject or a TFolder" > a, Does this also include classes derived from TObject such as TFile, > histograms? It means any object derived from TObject, including TFile, TCollections, etc > b, The code of Add() is fFolders->Add(obj), however, fFolders is > TCollection, which > is an abstract base class with TCollection::Add() = 0. Does this mean > that in the > constructor TFolder() I have to define the type of collection I want to > use? > No, it is preferable to call TFolder::AddFolder and specify the type of collection you want in the folder. The doc says; // Create a new folder and add it to the list of folders of this folder // return a pointer to the created folder // Note that a folder can be added to several folders // // if (collection is non NULL, the pointer fFolders is set to the existing // collection, otherwise a default collection (Tlist) is created > 5, Can I somewhere find a simple code fragment how to use TFolder class? See in the attachment, an example macro "folders.C" > > 6, Is there a better way to deal with the problem described at the > beginning? > Probably, the simplest way would be to create a TFile and store the > trees and > histograms in different subdirectories. However, this is not sufficient > for me > since both ClassA and ClassB will contain additional variables and > member functions. yes, use subdirectories. I cannot tell you more without a better description of what you want to do. I suggest you look at the example in the attachment and also the way TFolders are used in Root itself. See the TROOT constructor. Rene Brun -> > Thank you in advance > > Best regards > Christian Stratowa > Vienna, Austria > >
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:33 MET