Hi Simon, The problem is a known problem which has been overcome in ROOT 3.05/07. Before this release of ROOT, the usage requires that set the addresses for ALL the existing top branches in the input file. However, this requirement is not inforced!. With any older version you will have to carefully look at the input files and add the needed lines like: fTaus = new TClonesArray("TMBTaus",kMaxTaus); fChain->SetBranchAddress("Taus",&fTaus); and all the other supporting declaration. Cheers, Philippe. -----Original Message----- From: owner-roottalk@pcroot.cern.ch [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Simon Dean Sent: Tuesday, August 05, 2003 11:20 AM To: root talk Subject: [ROOT] object tag too large, sample subset Dear ROOT experts, I've been trying to extract a subset of events from a ROOT tree using code similar to that shown at the end of this message. It runs OK (after removing the code in the automatically generated TMBTree destructor - otherwise I get a segmentation violation) BUT when I then run code over the new TFile, I get this output: Error in <TBuffer::ReadObject>: object tag too large, I/O buffer corrupted (...the above line appears 492 times in the real output - there are 374 branches in the tree...) *** Break *** segmentation violation Generating stack trace... 0x401d6cbb in TUnixSystem::StackTrace(void) + 0x25b from /home1/sdean/root305/lib/libCore.so 0x401d5812 in TUnixSystem::DispatchSignals(ESignals) + 0xb2 from /home1/sdean/root305/lib/libCore.so 0x401d49bb in <unknown> from /home1/sdean/root305/lib/libCore.so 0x401d8585 in <unknown> from /home1/sdean/root305/lib/libCore.so 0x40f32f75 in <unknown> from /lib/i686/libpthread.so.0 0x42029188 in <unknown> from ./runTMBTree 0x4013f447 in TRef::Streamer(TBuffer &) + 0x3f from /home1/sdean/root305/lib/libCore.so 0x401adbb4 in TStreamerInfo::ReadBufferClones(TBuffer &, TClonesArray *, int, int, int) + 0x1c9c from /home1/sdean/root305/lib/libCore.so 0x40d32a52 in TBranchElement::ReadLeaves(TBuffer &) + 0x8ca from /home1/sdean/root305/lib/libTree.so 0x40d2c5dc in TBranch::GetEntry(int, int) + 0x1b4 from /home1/sdean/root305/lib/libTree.so 0x40d31912 in TBranchElement::GetEntry(int, int) + 0x1da from /home1/sdean/root305/lib/libTree.so 0x40d318b5 in TBranchElement::GetEntry(int, int) + 0x17d from /home1/sdean/root305/lib/libTree.so 0x40d4ac90 in TTree::GetEntry(int, int) + 0x98 from /home1/sdean/root305/lib/libTree.so 0x40d36add in TChain::GetEntry(int, int) + 0x49 from /home1/sdean/root305/lib/libTree.so 0x08060908 in TMBTree::Emu(int, int) + 0xf20 from ./runTMBTree 0x0806694e in main + 0x1aa from ./runTMBTree 0x42017589 in __libc_start_main + 0x95 from ./runTMBTree 0x0804a6a1 in __register_frame_info + 0x3d from ./runTMBTree Aborted Can anyone halp me fix this? Thanks a lot, Simon Dean (compiled code - TMBTree.cpp and TMBTree.hpp were produced by the MakeClass() function) =====/ runTMBTree.cpp /==== #include "TMBTree.cpp" int main(){ TMBTree data(filename); data.SeparateChannels(); return 0; } =====/ TMBTree.cpp /===== #include "TMBTree.hpp" void TMBTree::SeparateChannels(){ if (fChain == 0) return; int nentries = (nevents)?nevents:int(fChain->GetEntries()); TFile *newfile = new TFile("SeparateChannels.root","RECREATE"); TTree *newtree = fChain->CloneTree(0); for (int jentry=0; jentry<nentries;jentry++) { int ientry = LoadTree(jentry); if (ientry < 0) break; nb = fChain->GetEntry(jentry); nbytes += nb; if (....) newtree->Fill() } newtree->Write("",TObject::kOverwrite); newfile->Close(); return; }
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:14 MET