[ROOT] appending directories

From: Michael Gold (gold@higgs.phys.unm.edu)
Date: Tue May 20 2003 - 01:59:35 MEST


Dear rooters:

this is the continuation of a problem I previously 
reported in attempting to collect a bunch of 
directories from a number of files into 
a single directory in an output file.

The subroutine attached below manages to read the directories in 
TDirectory *inDir ("db") and append them to outDir TDirectory ("db")
which exists in the output file (TFile *fout).
When I do  fout->ls("-m");

I get the directories listed as follows:

 TFile*         results/edil08.root
  TDirectory*           db       data base stuff
  OBJ: TTree    STNTUPLE        stn analysis ntuple : 0 at: 0xadb5878
  OBJ: TH1F     Ncon    conversion pair multiplicity : 0 at: 0xc136060
  .....  
  TDirectory*           db       data base stuff
   TDirectory*          run_140157      run_140157
   TDirectory*          run_140187      run_140187
   TDirectory*          run_140217      run_140217

which is peculiar because the directory "db" is listed twice.
this may or may not be related to the problem, which is that 
when I do fout->ls("-d") only the first listing of db appears,
(not the second that actually contains all the sub directories)
and the output file has an empty db directory.

any advice as always is greatly appreciated.

sincerely,
Michael Gold

-----------------------
ps: here is the subroutine:

void readDb(string inFile, TFile *fout)
{
  TDirectory* save_dir = gDirectory;
  TDirectory  *outDir  = (TDirectory *)   fout->GetKey("db")->ReadObj();
  TFile *input = new TFile(inFile.c_str());
  TDirectory  *inDir   = (TDirectory *) input->GetKey("db")->ReadObj();  
  assert(inDir);
  assert(outDir);
  TIter next( inDir->GetListOfKeys());
  TKey *kdir;
  while (( kdir = (TKey *)next())) {
    if(kdir->ReadObj()->InheritsFrom("TDirectory")) {
      TDirectory *subDir =  (TDirectory *) kdir->ReadObj() ;
      outDir->Append(subDir);
      input->GetList()->Remove(subDir); //<========	
    }
  }
  //outDir->ls();
  delete input;
  save_dir->cd();
}



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET