Re: [ROOT] automatic schema evolution

From: Rene Brun (Rene.Brun@cern.ch)
Date: Thu Nov 21 2002 - 16:11:48 MET


Hi Sue,

The schema evolution will work in your example if you
move a member from a derived class to an EXISTING base class.
In your case RunHeader is a new class. This case is not currently
supported, but should not be too complex to support.
On my long list of things to do.

Rene Brun

On Tue, 19 Nov 2002, Susan Kasahara wrote:

> Hi roottalk,
> I'm trying to understand automatic schema evolution in root.
> I have used automatic schema evolution all along in generating
> my files (old & new), using the '+' flag in the class pragma
> statement in the LinkDef.h file to activate this.  I am having
> a problem now when attempting to move a data member
> from a derived class to a base class.
>   When I read the documentation (root user manual version 3.02c),
> I interpret the section on Schema Evolution to indicate that
> root will map a persistent data member to one memory in the
> event that a data member is moved from a derived class to a
> base class, or vice versa.  But in tests I find that when I move
> a data member to a base class, this mapping
> doesn't seem to take place.  Instead the moved data member is simply
> skipped on input.
>   For example, if I move the fRun data member of the EventHeader
> class in $ROOTSYS/test/Event.h to a new base class "RunHeader", e.g.
> change the current:
> 
> class EventHeader  {
> 
> private:
>     Int_t fEvtNum;
>     Int_t fRun;
>     Int_t fDate;
>  public:
>  ...
>    ClassDef(EventHeader,1)
> };
> 
> to:
> 
> class RunHeader {
>  protected:
>     Int_t fRun;
> 
>   public:
>   ...
>    ClassDef(RunHeader,1)
> };
> 
> class EventHeader : public RunHeader {
>  private:
>    Int_t fEvent;
>    Int_t fDate;
>   public:
>      ...
>    ClassDef(EventHeader,2)
> };
> 
> I find that using EventHeader version 2 I am able to read old files
> that have been generated with EventHeader version 1, but the fRun
> data member, now in the RunHeader base class, is not filled in
> properly.
> 
> So, two questions:
> 1)Should I be able to move a data member to base class and expect
>     root's schema evolution to be able to map this transition when
>     reading old data files?
> 2)If not, how do I handle this mapping myself?
> 
> I am using cvs root from today with gcc 3.2 on linux.
> Thanks for your help,
> -Sue
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:20 MET