Hi Valery,
Valeri Fine wrote:
>
> Hello Rene,
>
> Bottom line:
>
> -------------------------------------------------------------------------------------------
> ROOT doesn't allow to assigned any value to the class pointers but zeros
> with the class default ctor.
> -----------------------------------------------------------------------------------
No problems. see ROOT Users Guide page 194
In case you create objects in the default constructor (your case
in TVolumePosition with the member fMatrix), you can instruct ROOT I/O of this
situation by specifying "->" as the first characters of the comment field.
In this case:
- I/O will be faster; fMatrix->Streamer(buf) will be called instead of
buf << fMatrix;
- the file will be slightly smaller (no need to save the class identifier
at each write.
- the member will not be deleted when reading (just overwritten).
I modified TVolumePosition.h in CVS, declaring:
TRotMatrix *fMatrix; //->Pointer to rotation matrix
Note that in case you wrote a file with the old fMatrix declaration,
you can read it by instruction ROOT to NOT delete the object when reading with:
TStreamerInfo::SetCanDelete(kFALSE);
For example, I can read your file starGeom.root with:
TStreamerInfo::SetCanDelete(kFALSE);
gSystem->Load("libStar");
TFile f("starGeom.root");
TVolume *hall = (TVolume*)f.Get("HALL");
If now, you write again the TVolume object into a new file, eg
TFile f2("newstarGeom.root","recreate");
hall->Write();
in the following session, you can do directly:
gSystem->Load("libStar");
TFile f("newstarGeom.root");
TVolume *hall = (TVolume*)f.Get("HALL");
Rene Brun
--------
>
> I've found a reason for one of the crash reported today.
> This is due a new ROOT I/O schema imposes some new constrain.
>
> In this particular case the ctor of TVolumePosition class
> http://root.cern.ch/root/htmldoc/src/TVolumePosition.cxx.html#TVolumePosition:TVolumePosition
> contains a statement:
>
> if (!fMatrix) fMatrix = TVolume::GetIdentity();
>
> This is to assign a pointer to the static Identity matrix in case it is not provided by
> the user code.i.e it is a default value !!! and this value is NOT zero.
>
> What happens when the object is read by the new ROOT i/o layer.
>
> 1. It instantiates TVolumePosition calling its default ctor.
> As result fMatrix is assigned to the static object pointer "by default".
>
> 2. ROOT does apply a "delete" statement to all pointers of the new created object.
> "Usually" all pointers are still zero and cause no big problem.
>
> 3. In this case the pointer fMatrix points to the static stack object. It is
> NOT zero and "delete" causes the program crash.
>
> So the bottom line:
>
> -------------------------------------------------------------------------------------------
> Default ctor is not allowed to assigned any value to the class pointer but zeros.
> -------------------------------------------------------------------------------------------
>
> Now the question is it "by design" and my class should be redesigned or
> the problem could be fixed ?
>
> What about Bill Love's TTree troubles I suspect his class has "not right" ctor as well.
> I'll check this tomorrow.
>
> With my best regards, Valeri
>
> -----
> Dr.Valeri Fine
> STAR/US Atlas E-mail: fine@bnl.gov
> Brookhaven National Lab Phone: +1 631 344 7806
> Upton, NY 11973-5000 FAX: +1 631 344 4206
> USA
>
> ----- Original Message -----
> From: "Rene Brun" <brun@pcbrun.cern.ch>
> To: "Valeri Fine" <fine@bnl.gov>
> Cc: <roottalk@pcroot.cern.ch>
> Sent: Monday, December 10, 2001 5:03 PM
> Subject: Re: [ROOT] Re: ROOT] LAST CALL for comments before closing ROOT version 3.02
>
> > Hi
> >
> > On Mon, 10 Dec 2001, Valeri Fine wrote:
> >
> > > Hello Rene,
> > >
> > > > We intend to release Root version 3.02/06 this week. This will be the PRO
> > > > release.
> > >
> > > He have discovered several problems with the last version of ROOT from CVS
> > >
> > > 1. We can not read back our files written half year ago (with ROOT 3.00.06)
> > > We have not had any problem to read them with ROOT versions 3.02.00 / 01
> >
> > Could you be more explicit? I cannot do anything with just this info.
> >
> > >
> > 2. We
> > can not use TChain to read several TTrees' in row (See Bill Love's report)
> > > The macro crashes occasionally
> >
> > I am waiting from Bill a session where he can reproduce the problem.
> >
> > >
> > 3. We can not read the new files with TVolume objects,
> > > but we can read the old versions of there files though.
> >
> > TVolume has not been modified in version 3.02.
> >
> > >
> > > We are working to understand the reasons of these new problems and will appreciate you
> > > will wait a little with your release.
> >
> > Why are you reporting these problems only now?
> > >
> > > Have you any idea what has happened with ROOT i/o recently, that may have affected the
> > > backward compatibility ?
> >
> > So far, you are the only one complaining. If there are other people with
> > the same experience, please let me know.
> >
> > When you encounter an I/O problem, I suggest the following procedure:
> > Set gDebug=2; before reading or writing. The I/O functions in
> > TStreamerInfo
> > will print one line for each data member of a class being read/written.
> > It also shows the persistent class definition. This should help you
> > to localize the problem.
> >
> > Rene Brun
> >
> >
> > >
> > > With my regards, Valeri
> > > -----
> > > Dr.Valeri Fine
> > > STAR/US Atlas E-mail: fine@bnl.gov
> > > Brookhaven National Lab Phone: +1 631 344 7806
> > > Upton, NY 11973-5000 FAX: +1 631 344 4206
> > > USA
> > >
> > >
> > >
> > >
> >
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:11 MET