Complex objects, streams and split trees

Hi,

I tried to read some manuals I found on web, but they didn’t answer all my questions.

It is somehow related to the topic of multiple inherited objects I posted a few days ago.

In the older version, the object GoodTrack was inheriting directly from TLorentzVector:
TLorentzVector <-- GoodTrack (version 1)
but now I have intermediate class
TLorentzVector <-- BaseTrack <-- GoodTracks (version 2)

Some fields from GoodTrack were moved to BaseTrack.

In both classes GT and BT I have Streamers defined, but as far as I know, when they are used with TClonesArray and in split trees, the Streamers are not used, instead some other I/O methods using TStreamerInfo class. And indeed Streamers are no called.

This class (TStreamerInfo) is aware of the version and recreate objects according to preserved info data. How can this class reconstruct object of version 1 when I am using version 2? Can it properly initialize fields which were in GoodTrack and were moved to BaseTrack?

I was using info from: https://root.cern.ch/root/htmldoc/guides/users-guide/InputOutput.html#the-class-description-list-streamerinfo-list

Most often, the automatica schema evolution support will detect fields that are moved from a base to a derived and vice-et-versa.

In both classes GT and BT I have Streamers defined,

Why? What do they do? Which style are they written in? Custom Streamer prevent splitting (well in v5, sometimes it inadvertently did not) and often (depending on how they are written) prevent automatic schema evolution.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.