Re: [ROOT] Root 3.00.06, schema evolution, and StreamerInfo

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Mar 23 2001 - 08:41:49 MET


Hi Heather,

Your understanding of the migration process is correct, including your
implementation of Event::Streamer.
I do not understand why you get the Warning message. This message is printed
when your current class differs from the one used to write the file, but has
still the same class version number. Could you do the following:
 - run a Root session with no files connected and with the following command:
   root > Event::Class()->GetStreamerInfo()->ls()
 - run a new session. Connect your file
   root > TFile f("myfile.root");
   root > f.ShowStreamerInfo();

Compare the result of StreamerInfo for the first session with the one in the
second session. Let me know.

Rene Brun


Heather Kelly wrote:
> 
> Hi,
> 
> I am trying to use to Root 3.00.06, and am using Windows NT 4.
> 
> I have an Event class that I have used with both Root 2.22/10 and Root
> 2.25/03.  I wanted to start using the schema evolution that is now
> available.  To that end I followed the directions in the page
> http://root.cern.ch/root/SchemaEvolution.html.
> 
> In this case, I moved the streamers to the implementation files,
> incremented the version numbers of all classes, and modified the LinkDef.h
> so that all classes were of the form:
> #pragma link C++ class Event-;
> 
> Here is an example streamer, where we use the new method ReadBuffer if the
> version number is > 1:
> 
> void Event::Streamer(TBuffer &R__b)
> {
>    // Stream an object of class Event.
>    if (R__b.IsReading()) {
>       UInt_t R__s, R__c;
>       Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
>       if (R__v > 1)
>       {
>           Event::Class()->ReadBuffer(R__b, this, R__v, R__s, R__c);
>           return;
>       }
>       /// Old Versions
>       TObject::Streamer(R__b);
>       R__b >> m_run;
>       R__b >> m_event;
>       R__b >> m_CAL;
>       R__b >> m_ACD;
>       R__b >> m_TKR;
>       R__b >> m_MCPart;
>       R__b >> m_L1Trigger;
>       R__b >> m_Tagger;
>    } else {
>        Event::Class()->WriteBuffer(R__b, this);
>    }
> }
> 
> I can write a file (using Root 3.00.06) just fine, with no warnings...but
> when I go to open the root file (again in Root 3.00.06)..I receive a number
> of warning messages:
> 
> WARNING, class:Event StreamerInfo read from file:myfile.root
>         has the same version:2 than the active class
>         but a different checksum.
>         You should update the version to ClassDef(Event,3).
>         Do not try to write objects with the current class definition,
>         the files will not be readable.
> 
> What am I doing incorrectly?
> 
> Thank you,
> Heather
> 
> ********************************************************************
> Heather Maria Theresa Arrighi Kelly
> Goddard Space Flight Center
> T2 Room 59
> phone (301) 286-8359
> fax   (301) 286-1629



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:40 MET