Hello,
I encounter the following error when reading a (user) object derived from
TObject from a root
file:
R__unzip: error in header
[ the header words checked are 0,9,0 instead of 67,83,8]
My object CAnalysis contains a pointer to TNtuple - I modified
CAnalysis::Streamer() (see below)
to save the TNtuple when the object is saved and restore the pointer when
the object is read in.
Note: the above error only occurs when the TNtuple is large (I have not
characterized the exact
size which triggers the problem - 10's of MB does not cause a proble, 100's
of MB does I have 1GB
of ram)
Here's the modification of the CAnalysis::Streamer() for OUTPUT (
CAnalysis::Streamer was
never called on input - the R__unzip error occured in TKey::ReadObj() before
the streamer is
called - fNtCorr is a pointer to TNtuple member variable
.
.
.
R__b << (TObject*)fVoltProf;
R__b << (TObject*)fTofMap;
R__b.SetByteCount(R__c, kTRUE);
if (fNtCorr)
{
TNtuple *pNcopy = new TNtuple("ntCorr",fPchTitle,kNTCORR);
for(int i=0;i<fNtCorr->GetEntries();i++)
{
fNtCorr->GetEntry(i);
Float_t *args = fNtCorr->GetArgs();
pNcopy->Fill(args);
}
}
gDirectory->Write();
}
Note1: fNtCorr is MEMORY RESIDENT - that is, when it is created, the current
directory is
not writable. [this is the only way I know how to make an ntuple memory
resident]
Note2: I can succesfully read the the ntuple from the root file:
TFile *f = new TFile("save.root");
TNtuple *pNtup = (TNtuple *)f->Get("ntCorr"); //ok
I just can't read CAnalysis
CAnalysis *pAn = (CAnalysis *)f->Get("CAnalysis") // R__unzip error in
header
I am using 3.02/07 for Win32, my code compiled win VC++ version 6
Any help would be greatly appreciated...
Ed
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:44 MET