# ROOT version 3.11 Development Notes

    2003-12-27 17:14  brun

    	* tree/src/TBranchClones.cxx, tree/src/TTree.cxx,
    	treeplayer/src/TTreeFormula.cxx:
    	More changes required by the introduction of the new data type Double32_t

    2003-12-27 17:13  brun

    	* test/: Event.cxx, Event.h:
    	Modidy the classes Event and Track to make use of the new data type Double32_t

    2003-12-27 12:28  brun

    	* win32gdk/gdk/src/gdk/win32/: gdkdrawable-win32.c,
    	gdkwindow-win32.c:
    	Patch from Bertrand fixing brushes related memory leaks

    2003-12-26 23:06  brun

    	* tree/src/TBranchElement.cxx:
    	Changes to support
    	 -Long64 and ULong64_t
    	 -Double32_t

    2003-12-26 19:38  brun

    	* base/inc/LinkDef1.h, base/inc/Rtypes.h, meta/inc/TDataType.h,
    	meta/inc/TStreamerInfo.h, meta/src/TDataType.cxx,
    	meta/src/TStreamerInfo.cxx:
    	Implement a new data type Double32_t (in Rtypes.h).
    	In memory a Double32_t is like a Double_t (8 bytes).
    	When written to a file, the type is converted to a Float 4 bytes.
    	The newdata type is accepted as a simple variable, as a fixed length array
    	or a variable length array, like:
    	  Double32_t  fPt:
    	  Double32_t  fVertex[3];
    	  Int_t       fNtracks;
    	  Double32_t *fPx;  //[fNtracks]

    	The new data type is supported in all I/O modes (TKey or TTree)

    	The automatic schema evolution algorithm accepts this new type.
    	For example a class in a file containing a Double_t data member
    	can be read by a new class where the member is now of type Double32_t
    	and vice-versa.

    2003-12-25 19:11  brun

    	* dcache/src/TDCacheFile.cxx:
    	Fix warnings with unused parameter

    2003-12-25 18:55  brun

    	* tree/: inc/TBranchElement.h, src/TBranchElement.cxx:
    	Add a new member fCheckSum and corresponding getter GetCheckSum.
    	Classversion incremented to version 8.
    	In TBranchElement::GetInfo, use the fCheckSum member to find the right
    	TStreamerInfo object in TClass.
    	With this change and the previous changes in TBuffer, TClass and TStreamerInfo,
    	automatic schema evolution is supported for foreign classes written in a TTree
    	or as classes written as a TKey.

    2003-12-25 18:51  brun

    	* meta/src/TStreamerInfo.cxx:
    	In TStreamerInfo::BuildCheck recompute the fClassVersion and the pointer to the
    	TStreamerInfo object corresponding to the current class checksum.
    	In case of a foreign class, do not print the Warning in case the current class
    	checksum and the checksum in the TStreamerInfo differ. Instead recompute
    	the correct class version using the checksum parameter.

    2003-12-25 18:48  brun

    	* meta/src/TClass.cxx:
    	Pass the pointer to the current class as 3rd argument of TBuffer::ReadVersion

    2003-12-25 18:47  brun

    	* base/: inc/TBuffer.h, src/TBuffer.cxx:
    	Add an optional argument to TBuffer::ReadVersion.
    	The new argument "TClass* cl) is used to retrieve the version number
    	corresponding to the class checksum.
    	This change is required to support automatic schema evolution
    	for foreign classes.

    2003-12-24 18:33  brun

    	* win32gdk/Module.mk:
    	Fix a TAB problem (Bertrand)

    2003-12-24 18:28  brun

    	* win32gdk/gdk/src/gdk/win32/gdkdrawable-win32.c:
    	A pach from Bertrand Bellenot fixing region-related memory leaks.

    2003-12-24 14:36  brun

    	* win32gdk/Module.mk:
    	Fix to previous fix

    2003-12-24 14:30  brun

    	* win32gdk/Module.mk:
    	Fix to Makefile by Bertrand Bellenot

    2003-12-24 11:58  brun

    	* win32gdk/gdk/src/gdk/win32/: gdkevents-win32.c,
    	gdkwindow-win32.c:
    	Fix memory leaks (Bertrand Bellenot)

    2003-12-24 10:45  brun

    	* treeplayer/src/TSelectorDraw.cxx:
    	From Philippe:

    	Because of a misplaced curly bracket, TSelectorDraw::ProcessFillObject was unable to draw a large amount of data (i.e.
    	up to fTree->GetEstimate()).

    2003-12-21 20:07  brun

    	* base/src/TVirtualX.cxx:
    	Fix a long list of badly formatted comments (when commenting unused pointers)

    2003-12-21 15:49  brun

    	* fumili/src/TFumili.cxx:
    	The functions TFumili::GetParameter and TFumili::GetParError had code inverted.
    	Memory leak fixed in GraphFitChisquareFumili.
    	Thanks to Fedor Ignatov

    2003-12-19 17:36  brun

    	* gui/src/TGLayout.cxx:
    	From Valeriy Onuchin:

    	- small fix in TGVerticalLayout, TGHorizontalLayout

    2003-12-19 17:10  brun

    	* tree/src/TLeafL.cxx:
    	Fix in casting a return value to satisfy VC++6

    2003-12-19 17:04  brun

    	* test/RootShower/RootShower.cxx:
    	Fix for Windows by Bertrand

    2003-12-19 17:00  brun

    	* gui/src/TGButton.cxx:
    	From Valeriy Onuchin:
    	 - TGCheckButton alignment fixed.  Label is aligned against button.

    2003-12-19 14:40  brun

    	* tree/: inc/LinkDef.h, inc/TLeafL.h, src/TBranch.cxx,
    	src/TLeafL.cxx, src/TTree.cxx:
    	Add new class TLeafL to support Long64_t, ULong64_t data types in a TBranch

    2003-12-19 11:26  brun

    	* win32gdk/src/TGWin32ProxyBase.cxx:
    	From valeriy Onuchin:

    	- mods in TGWin32ProxyBase::ForwardCallBack(Bool_t sync)
    	  Do not execute the method which had failed to be executed because of delay
    	  with response from "server thread".

    2003-12-19 10:31  brun

    	* tree/src/TSelector.cxx, treeplayer/src/TTreePlayer.cxx:
    	Add the following warning in TSelector::GetSelector:

    	//   WARNING when a selector is used with a TChain:
    	//    in the Process, ProcessCut, ProcessFill function, you must use
    	//    the pointer to the current Tree to call GetEntry(entry).
    	//    entry is always the local entry number in the current tree.
    	//    Assuming that fChain is the pointer to the TChain being processed,
    	//    use fChain->GetTree()->GetEntry(entry);

    	Modify TTreePlayer::MakeSelector to generate the code with this warning
    	in the selector Process function.

    2003-12-19 08:55  brun

    	* tree/: inc/TLeaf.h, src/TLeaf.cxx:
    	From Philippe:

    	Using valgrind on TBench, I found some uninitialized memory in TLeaf
    	in the case of a TLeafElement belonging to a split TClonesArray.

    	The uninitialized memory came from the fact that the constructor was
    	not initializing everything if it could not find the leafcount.
    	In the case described above, the leafcount is not available until
    	after the constructor of the leaf (or so it seems) and is explicitly
    	set later using TLeaf::SetLeafCount.

    	This patch insures that more data members are initialized even in
    	case of seemingly incorrect configuration and insures that the Zombie
    	state is removed if the leafcount becomes available after the end of
    	the constructor.

    2003-12-18 19:31  brun

    	* krb5auth/src/Krb5Auth.cxx:
    	From Philippe:
    	corrects the printing of a couple of debug messages and add one more debug message.

    2003-12-18 16:14  brun

    	* gui/src/TGListBox.cxx:
    	From Valeriy Onuchin:
    	- TGListBox. Reset GetSelected when setting OFF the multiple selection.

    2003-12-18 14:21  brun

    	* hist/src/TFormula.cxx, test/dt_DrawTest.C, test/dt_MakeRef.C,
    	tree/src/TTree.cxx, treeplayer/inc/TTreeFormula.h,
    	treeplayer/src/TTreeFormula.cxx, treeplayer/src/TTreePlayer.cxx:
    	From Philippe:

    	        Add support for the boolean optimization in TFormula::GetExpFormula

    	        Prevent TTree::Scan from printing random value for invalid formulas

    	        Add a new TTreeFormula special function:

    	      Alt$(primary,alternate) : return the value of "primary" if it is available
    	                    for the current iteration otherwise return the value of "alternate".
    	                    For example, with arr1[3] and arr2[2]
    	      tree->Draw("arr1-Alt$(arr2,0)");
    	                 will draw arr[0]+arr2[0] ; arr[1]+arr2[1] and arr[1]+0
    	                    Or with a variable size array arr3
    	       tree->Draw("Alt$(arr3[0],0)+Alt$(arr3[1],0)+Alt$(arr3[2],0)");
    	                    will draw the sum arr3 for the index 0 to min(2,actual_size_of_arr3-1)
    	                    As a comparison
    	       tree->Draw("arr3[0]+arr3[1]+arr3[2]");
    	                    will draw the sum arr3 for the index 0 to 2 only if the
    	                    actual_size_of_arr3 is greater or equal to 3.
    	                    Note that the array in 'primary' is flatened/linearilized thus using
    	                    Alt$ with multi-dimensional arrays of different dimensions in unlikely
    	                    to yield the expected results.  To visualize a bit more what elements
    	                    would be matched by TTree::Draw, TTree::Scan can be used:
    	       tree->Scan("arr1:Alt$(arr2,0)");
    	                    will print on one line the value of arr1 and (arr2,0) that will be
    	                    matched by
    	       tree->Draw("arr1-Alt$(arr2,0)");

    2003-12-18 14:17  brun

    	* gui/src/TGListBox.cxx:
    	From Valeriy Onuchin:

    	- TGListBox class:
    	  generation Selected signals  added when SetMultipleSelections(kTRUE)

    2003-12-17 16:20  brun

    	* treeplayer/src/TTreePlayer.cxx:
    	Fix a problem in TTreePlayer::UnbinnedFit in case the initial value of a parameter is negative.
    	In this case, the step size was set negative, forcing Minuit in RESET mode.

    2003-12-16 23:42  brun

    	* treeplayer/src/TTreePlayer.cxx:
    	From Philippe

    	This patch makes sure the formula are properly refreshed when using a chain.

    	It removes the printing of some (spurious) empty lines when using a selection criterion.
    	I.e. Without a selection criterion, there is always a least one line per entry (if is empty) while with a selection
    	criterion, an entry is printed if and only if a least one of the sub-element exist and match the criterion.

    2003-12-16 23:31  brun

    	* gui/src/TGMenu.cxx:
    	Protection added to TGMenu (Thanks Valeri Fine)

    2003-12-16 22:58  brun

    	* treeplayer/src/TTreePlayer.cxx:
    	From Philippe:

    	With this improvement, TTree::Scan properly correlate (as needed) the selection criterium and the printed columns.