[ROOT] reading and writting a tree in a root file at the same time

From: Mark Wallace (walla123@mail.msu.edu)
Date: Sat Nov 01 2003 - 06:34:42 MET


Hello,
    I am trying to read a root file in a root session while a stand 
alone program is writing a tree to the file.  When I try to open it I 
get errors like

Error in <TFile::ReadKeys>: reading illegal key, exiting after 0 keys
Info in <TFile::Recover>: test.root, recovered key TTree:t2 at address 75342

I searched the archives and found
http://root.cern.ch/root/roottalk/roottalk03/4491.html

where and example was given on how to do this, however I can't get this 
example to run so I am not sure if its a problem with my version or if 
I'm still doing something wrong.  the code I copied from that example is 
given here

void treer() {
   TFile f("junk.root");
   TCanvas c1;
   Int_t first = 0;
   while(1) {
      f.ReadKeys();
      TTree *ntuple = (TTree*)f.Get("ntuple");
      if (first == 0) ntuple->Draw("px>>hpx","","",10000000,first);
      else            ntuple->Draw("px>>+hpx","","",10000000,first);
      first = (Int_t)ntuple->GetEntries();
      delete ntuple;
      c1.Update();
      gSystem->Sleep(1000); //sleep 1 second
   }
}
     
void treew() {
  TFile f("junk.root","recreate");
  TNtuple *ntuple = new TNtuple("ntuple","Demo ntuple","px:py:pz:random:i");
  Float_t px, py, pz;
  for ( Int_t i=0; i<1000000; i++) {
     gRandom->Rannor(px,py);
     pz = px*px + py*py;
     Float_t random = gRandom->Rndm(1);
     ntuple->Fill(px,py,pz,random,i);
     if (i%1000 == 1) {
        ntuple->AutoSave();
        f.SaveSelf();
     }
  }
}

I ran treew() in one root session while I did the following in another.

root [0] .L treew.C
root [1] treer();

This is what returned after that.

Error in <TFile::ReadKeys>: reading illegal key, exiting after 0 keys
Info in <TFile::Recover>: junk.root, recovered key TNtuple:ntuple at 
address 1367252
Error in <TFile::ReadKeys>: reading illegal key, exiting after 0 keys

 *** Break *** segmentation violation
 Generating stack trace...
 0x401a1dd1 in TUnixSystem::StackTrace() + 0x367 from 
/opt/root/lib/root/libCore.so
 0x401a099e in TUnixSystem::DispatchSignals(ESignals) + 0x78 from 
/opt/root/lib/root/libCore.so
 0x4019fbcf in <unknown> from /opt/root/lib/root/libCore.so
 0x401a35a9 in <unknown> from /opt/root/lib/root/libCore.so
 0x40cb7685 in <unknown> from /lib/libpthread.so.0
 0x40e075f8 in <unknown> from /lib/libc.so.6
 0x405806f6 in G__exec_asm + 0x7ff from /opt/root/lib/root/libCint.so
 0x40574614 in G__exec_loop + 0x525 from /opt/root/lib/root/libCint.so
 0x4057482e in G__exec_while + 0x77 from /opt/root/lib/root/libCint.so
 0x40576bf0 in G__exec_statement + 0x1f3b from /opt/root/lib/root/libCint.so
 0x4054e95c in G__interpret_func + 0x1d84 from /opt/root/lib/root/libCint.so
 0x405363a0 in G__getfunction + 0x1817 from /opt/root/lib/root/libCint.so
 0x4052f8df in G__getitem + 0x4b4 from /opt/root/lib/root/libCint.so
 0x4052e60b in G__getexpr + 0x74f6 from /opt/root/lib/root/libCint.so
 0x405709aa in G__exec_function + 0x129 from /opt/root/lib/root/libCint.so
 0x40576fb5 in G__exec_statement + 0x2300 from /opt/root/lib/root/libCint.so
 0x40518668 in G__exec_tempfile_core + 0x2d5 from 
/opt/root/lib/root/libCint.so
 0x4051880a in G__exec_tempfile_fp + 0x22 from /opt/root/lib/root/libCint.so
 0x4057eb38 in G__process_cmd + 0x43d3 from /opt/root/lib/root/libCint.so
 0x40150c87 in TCint::ProcessLine(char const*, 
TInterpreter::EErrorCode*) + 0x9b from /opt/root/lib/root/libCore.so
 0x400da433 in TApplication::ProcessLine(char const*, bool, int*) + 
0x561 from /opt/root/lib/root/libCore.so
 0x40c84c00 in TRint::HandleTermInput() + 0x11c from 
/opt/root/lib/root/libRint.so
 0x40c83be6 in TTermInputHandler::Notify() + 0x24 from 
/opt/root/lib/root/libRint.so
 0x40c853a0 in TTermInputHandler::ReadNotify() + 0x12 from 
/opt/root/lib/root/libRint.so
 0x401a0d0b in TUnixSystem::CheckDescriptors() + 0xed from 
/opt/root/lib/root/libCore.so
 0x401a04db in TUnixSystem::DispatchOneEvent(bool) + 0x101 from 
/opt/root/lib/root/libCore.so
 0x4012518d in TSystem::InnerLoop() + 0x1b from 
/opt/root/lib/root/libCore.so
 0x40125126 in TSystem::Run() + 0x78 from /opt/root/lib/root/libCore.so
 0x400dae73 in TApplication::Run(bool) + 0x2d from 
/opt/root/lib/root/libCore.so
 0x40c847d5 in TRint::Run(bool) + 0x2e1 from /opt/root/lib/root/libRint.so
 0x08048782 in main + 0x6e from /opt/root/bin/root.exe
 0x40df3e3e in __libc_start_main + 0xce from /lib/libc.so.6
 0x08048685 in _Unwind_Resume + 0x31 from /opt/root/bin/root.exe
Root > Function treer() busy flag cleared

root [2]

I'm using Root Version 3.05/04
Compiled for linuxdeb with thread support.

Thank you for your assistance

Mark



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