Hi Rene, I cannot reproduce what you say... I'm using root 3.10/02 (g++ 3.3.1) and the output of test2.C (attached) is 1 1078907948 the output of test3.C is 16 1 1078907948 *** Break *** segmentation violation the output of test4.C is 16 1 [*] <see below> 65536 0 Can you tell me what's wrong with this example? We have tried all three collections as (valid!) pointers as data-members in our classes (using a '+' in the #pragma statement). Writing the class to a file seems to work. Reading it always results in arrays with 0 size. Best regards, Thomas. [*] Error in <TBuffer::ReadObject>: object tag too large, I/O buffer corrupted Warning in <TExMap::Remove>: key 1701016576 not found at 350 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=1701016576 pointer will be 0 Warning in <TExMap::Remove>: key 100 not found at 100 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=100 pointer will be 0 Warning in <TExMap::Remove>: key 24 not found at 24 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=24 pointer will be 0 Warning in <TExMap::Remove>: key 16777216 not found at 154 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=16777216 pointer will be 0 Warning in <TExMap::Remove>: key 48 not found at 48 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=48 pointer will be 0 Warning in <TExMap::Remove>: key 112 not found at 112 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=112 pointer will be 0 Warning in <TExMap::Remove>: key 360 not found at 360 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=360 pointer will be 0 Warning in <TExMap::Remove>: key 675365036 not found at 14 Warning in <TBuffer::CheckObject>: reference to unavailable class TObject, point ers of this type will be 0 Warning in <TExMap::Remove>: key 692994048 not found at 385 Warning in <TBuffer::CheckObject>: reference to unavailable class TObject, point ers of this type will be 0 Warning in <TExMap::Remove>: key 25625 not found at 475 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=25625 pointer will be 0 Warning in <TExMap::Remove>: key 184 not found at 184 Warning in <TBuffer::CheckObject>: reference to object of unavailable class TObj ect, offset=184 pointer will be 0 Warning in <TExMap::Remove>: key 954728713 not found at 6 Warning in <TBuffer::CheckObject>: reference to unavailable class TObject, point ers of this type will be 0 Error in <TBuffer::CheckByteCount>: object of class TObjArray read too many byte s: 85 instead of 22 Warning in <TBuffer::CheckByteCount>: TObjArray::Streamer() not in sync with dat a on file, fix Streamer() Rene Brun wrote: > Thomas, > > Your question is not clear. Do you mean "can" or "cannot" ? > > Any collection of objects can be written to a file > (see TCollection::Write method). You have two ways > -single key (all objects are serialized in teh same buffer) > -one key per object in the collection (default). > > Obviously, each object in the collection must be streamable (have a > dictionary). > > See for example this session: > root [4] TObjArray a(3) > root [5] a.Add(hpx) > root [6] a.Add(hprof) > root [7] a.Add(hpxpy) > root [8] TFile f("junk.root","recreate") > root [9] a.Write("a") > (Int_t)4644 > root [10] .ls > TFile** junk.root > TFile* junk.root > KEY: TH2F a;3 py vs px > KEY: TProfile a;2 Profile of pz versus px > KEY: TH1F a;1 This is the px distribution > root [11] a.Write("as",TObject::kSingleKey) > (Int_t)4381 > root [12] .ls > TFile** junk.root > TFile* junk.root > KEY: TH2F a;3 py vs px > KEY: TProfile a;2 Profile of pz versus px > KEY: TH1F a;1 This is the px distribution > KEY: TObjArray as;1 An array of objects > > > Rene Brun > > On Wed, 15 > Sep > 2004, Thomas Bretz wrote: > > >>Hi, >> >>is it possible that a TObjArray cannot be written to a file? I cannot >>find anything about this in the documenation... >> >>Thomas. >> > > void test2() { { TOrdCollection col; col.Add(new TNamed("MyObject", "")); TFile f("delme.root", "recreate"); cout << col.GetSize() << endl; col.Write("Test"); f.Close(); } { TFile f("delme.root", "read"); cout << ((TOrdCollection*)f.Get("Test"))->GetSize() << endl; } } void test3() { { TObjArray col; col.Add(new TNamed("MyObject", "")); TFile f("delme.root", "recreate"); cout << col.GetSize() << endl; cout << col.GetEntries() << endl; col.Write("Test"); f.Close(); } { TFile f("delme.root", "read"); cout << ((TObjArray*)f.Get("Test"))->GetSize() << endl; cout << ((TObjArray*)f.Get("Test"))->GetEntries() << endl; } } void test4() { { TObjArray col; col.Add(new TNamed("MyObject", "")); TFile f("delme.root", "recreate"); cout << col.GetSize() << endl; cout << col.GetEntries() << endl; col.Write("Test"); f.Close(); } { TFile f("delme.root", "read"); TObjArray col2; col2.Read("Test"); cout << col2.GetSize() << endl; cout << col2.GetEntries() << endl; } }
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET