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