Hi Rene,
Here are the results:
First Root Session with no files connected:
root [0]
gSystem->Load("I:/packages/RW_root3/TBEvent/v2/Win32Debug/TBEventshr.dll")
(int)0
root [1] Event::Class()->GetStreamerInfo()->ls()
StreamerInfo for class: Event, version=2
BASE TObject offset= 0 type=66 Basic ROOT object
UInt_t m_run offset= 12 type=13 Run number
UInt_t m_event offset= 16 type=13 Event number
TObjArray* m_CAL offset= 20 type=64 List of Calorimeter logs
TObjArray* m_ACD offset= 24 type=64 List of ACD tiles
TObjArray* m_TKR offset= 28 type=64 List of Tracker layers
TObjArray* m_MCPart offset= 32 type=64 List of MC Particle objects
L1T* m_L1Trigger offset= 36 type=64 Level 1 trigger object
Tagger* m_Tagger offset= 40 type=64 Tagger object
i= 0, TObject type= 66, offset= 0, len=1, method=0
i= 1, m_run type= 13, offset= 12, len=1, method=0
i= 2, m_event type= 13, offset= 16, len=1, method=0
i= 3, m_CAL type= 64, offset= 20, len=1, method=26744439
i= 4, m_ACD type= 64, offset= 24, len=1, method=26743699
i= 5, m_TKR type= 64, offset= 28, len=1, method=26744074
i= 6, m_MCPart type= 64, offset= 32, len=1, method=26743814
i= 7, m_L1Trigger type= 64, offset= 36, len=1, method=26743589
i= 8, m_Tagger type= 64, offset= 40, len=1, method=26744489
****************************************************************************
********
Second Root session with the file connected:
root [0]
gSystem->Load("I:/packages/RW_root3/TBEvent/v2/Win32Debug/TBEventshr.dll")
(int)0
root [1] TFile f("myfile.root")
root [2] f.ShowStreamerInfo()
StreamerInfo for class: Event, version=2
BASE TObject offset= 0 type=66 Basic ROOT object
UInt_t m_run offset= 0 type=13 Run number
UInt_t m_event offset= 0 type=13 Event number
TObjArray* m_CAL offset= 0 type=64 List of Calorimeter logs
TObjArray* m_ACD offset= 0 type=64 List of ACD tiles
TObjArray* m_TKR offset= 0 type=64 List of Tracker layers
TObjArray* m_MCPart offset= 0 type=64 List of MC Particle objects
L1T* m_L1Trigger offset= 0 type=64 Level 1 trigger object
Tagger* m_Tagger offset= 0 type=64 Tagger object
****************************************************************************
****
The only thing that strikes me is that the offsets are all zero in this case.
Does this give you any ideas?
Thank you,
Heather
At 07:41 AM 3/23/01 +0000, Rene Brun wrote:
>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
>>
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:40 MET