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