I/O
Schema Evolution
- Fix schema evolution problem in TTree::Draw by extending support in
TStreamerInfo::ReadValueAux to 'converted' numerical types, (
see issue in ROOT forum)
- When reading more than one TStreamerInfo for the same versioned
class, we now use the highest possible class version as the current
version of the class. Practically, we update the class version
when reading new (higher versioned) StreamerInfo until the Class
is actually used (i.e. TClass::GetClassVersion is call directly
or indirectly).
In particular, if a file has several StreamerInfos for the same
versioned class, we will use the highest version number as the
'current' class version (as opposed to the lowest until now).
-
For backward compatibility TStreamerInfo::BuildCheck compares the checksum of
the on-file StreamerInfo not only to the current value of the class checksum
but also to the checksum calculated using the older algorithms.
This patch extends this test to also be done when comparing 2 on-file StreamerInfos.
This removes spurrious warning message when loading 2 older files which
were written with 2 different version of the TClass CheckSum algorithm
(and the in-memory class's version is greater than both TStreamerInfos'
class version).
- Extend support of TStreamerInfo::ReadValueAux to 'converted' numerical types, hence solving TTree::Draw's schema evolution problem (see http://root.cern.ch/phpBB2/viewtopic.php?t=6225)
DirectoryAutoAdd
Use the new DirectoryAutoAdd facility for the classes:
TTree, TH1, TEventList, TEntryList, TGraph2D
(and hence their derived classes).
The instances of those classes are now added automatically
to the current directory only when Constructe'd with arguments or Clone'd
and to the directory they are read from when their are stored
directly in a TKey. [Note: the default constructor never adds
the object to the current directory]
The directory auto add can still be disabled for instance
of TH1 and TGraph2D by setting TH1::AddDirectory.
Additionally one can disable the directory auto add for
a specific class by doing:
TClass::GetClass("myclass")->SetDirectoryAutoAdd(0)
However you might want to also be able to restore the
behavior in which case you ought to do:
TClass *cl = TClass::GetClass("myclass");
ROOT::DirAutoAdd_t func = cl->GetDirectoryAutoAdd();
cl->SetDirectoryAutoAdd(0);
TROOT::ReadingObject is marked as deprecated.. It is still
set (as it was) but is no longer used by the above mention
classes.
NOTE: One side effect of this change, is that instance
of TTree, TH1, TEventList, TEntryList, TGraph2D that are
retrieved from a TMessage (i.e. from a socket) no longer
auto register themselves to the current ROOT directory.