Re: [ROOT] TDirectory question

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Oct 17 2001 - 11:52:35 MEST


Hi Mike,

I have some difficulties understanding why you need this kind of logic.
Anyhow, it is your business ::)
You can simplify the logic to be like:

void CalAnal::WriteObjects(TDirectory* dir)
{
     TDirectory* save_dir = gDirectory;
     if(dir==0) return;
     dir->cd();
     ObjVecIter it = fHolder.begin();
     while(it != fHolder.end()){
          TObject* obj = *it;
          if( obj->IsA() == TDirectory::Class()) {
               TDirectory* adir = (TDirectory*)obj;
               dir->Append(adir);
               adir->Write();
               save_dir->cd();
               adir->cd(0);
          } else {
             obj->Write();
          }
          it++;
     }
     save_dir->cd();
}

Rene Brun

Mike Kordosky wrote:
> 
> Hi,
> 
> Could someone tell me how to do the following, or if it is possible:
> 
> Create a TDirectory to hold some objects.
> Place objects in the directory.
> At a later time, supply a file and save the directory in the file.
> Preserve ownership of the directory in the object that created it.
> The file is not known at the time of directory creation.
> 
> Here is my code snippet, but it doesn't work:
> 
> void CalAnal::WriteObjects(TDirectory* dir)
> {
>      TDirectory* save_dir = gDirectory;
>      if(dir==0) return;
>      dir->cd();
>      ObjVecIter it = fHolder.begin();
>      while(it != fHolder.end()){
>           TObject* obj = *it;
>           TClass* cl = obj->Class();
>           TString name(cl->GetName());
>           Bool_t ok = kTRUE;
>           if( (name==(TString("TDirectory")) ) )
>           {
>                TDirectory* adir = dynamic_cast<TDirectory*>(obj);
>                if(adir!=0){
>                     dir->Append(adir);
>                     adir->Write();
>                     save_dir->cd();
>                     adir->cd(0);
>                }
>                else {ok = kFALSE;}
>           }
>           else {
>           obj->Write();
>           }
>           it++;
>      }
>      save_dir->cd();
> }
> 
> How I do this?
> 
> mike
> 
> --
> Graduate Research Assistant  // High Energy Physics Lab
> kordosky@hep.utexas.edu     // University of Texas at Austin
> kordosky@fnal.gov          //
> ph: (512) 471-8426 (RLM Lab, Office)
>     (512) 475-8673 (ENS Lab)



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:03 MET