Official Release of ROOT Version 3.01 ===================================== The ROOT Team is pleased to announce the release of ROOT version 3.01. Compared to the previous production release (v3.00/06) this new version has major enhancements in the following areas: - Automatic schema evolution - Tree branches and Query mechanisms - An important new feature: Tree friendship - A long list of fixes and enhancements This new version is fully backward compatible with the previous production version. Binaries for all supported platforms are available at: http://root.cern.ch/root/Version301.html We have added support for new compiler/OS combinations. Versions for AFS have also been updated. See list of supported platforms: http://root.cern.ch/root/AFS.html A new version of the UsersGuide in pdf and doc formats is available at: http://root.cern.ch/root/RootDoc.html We would like to ask you to very attentively read the full list of new features and enhancements described below. They will help you in making a smooth transition to ROOT v3.01. Next week, we will be attending the workshop at FNAL, see http://www-root.fnal.gov/root2001/ As a consequence, we will not be able to answer emails very frequently. Rene Brun and Fons Rademakers Overview of the New Features, Enhancements, Classes and Fixes in ROOT v3.01 =========================================================================== For a more detailed list of enhancements, bug fixes, etc, see: http://root.cern.ch/root/html/examples/V3.01.txt.html Automatic TROOT object creation =============================== A TROOT object is now created automatically as soon as libCore is loaded. It is therefore not needed anymore to explicitly create in the main() program a TROOT object to initialize the system. TTree, TBranchElement and new branch styles =========================================== Add new static functions SetBranchStyle() and GetBranchStyle(). The old TTree::Branch() has been renamed TTree::BranchOld(). The new TTRee::Branch() is a dispatcher calling: - TTree::Bronch() if fgBranchStyle = 1 - TTree::BranchOld() if fgBranchStyle = 0 The default is fgBranchStyle=1. The new branch style is managed by the new class TBranchElement. This class supports more complex class structures than the previous branches. Use the static function TTree::SetBranchStyle(0) to use the old system. See more documentation in the TTree::Branch() functions. Add special case in TTree::Branch() when passing a TObject*. Splitlevel=-1 will force a call to the class Streamer() method instead of the more efficient WriteBuffer(). This option must be used for classes that have special Streamer() methods incompatible with the automatic Streamers generated by rootcint. When TTree::GetEntry() or TBranch::GetEntry() are called twice on the same entry the second call reads again the data from the buffers. In the previous version, calling twice GetEntry() on the same entry was a noop. However, this had several side-effects in case the objects in memory were modified between the two calls. TTree and TFolder ================= The TTree constructor can now create automatically a branch hierarchy from an existing folder structure when the first character of the title starts with a "/" Example; TTree T("T","/Event/Hits"); TTree Friends (new class TFriendElement) ======================================== A TFriendElement TF describes a TTree object TF in a file. When a TFriendElement TF is added to the the list of friends of an existing TTree T, any variable from TF can be referenced in a query of T. A tree keeps a list of friends. In the context of a tree (or a chain), friendship means unrestricted access to the friends data. In this way it is much like adding another branch to the tree without taking the risk of damaging the original tree. See extensive documentation in TTree::AddFriend(). Processing Trees without the class library ========================================== This is an important addition in this new version. It is possible to process Trees (split or no-split mode) when the classes used in the branches are missing. In this case, ROOT builds a "fake class". The Tree query mechanism is then still able to search data members in a complex hierarchy of objects. Objects in a TClonesArray may also be processed when the class library is missing. TTreeFormula: many extensions in the Tree query mechanism ========================================================= The TTreeFormula class has the following many new features: - Support for the TTree new style of branches - Support for drilling into un-split branches by specifying data members. This works even when the shared library defining the user classes is absent: myTree->Draw("fH.fXaxis.fXmax") - Support for using the return value of method calls: myTree->Draw("event.GetHistogram().GetXaxis().GetXmax()") myTree->Draw("event.fH.GetXaxis().fXmax"); - Enhance support of nested arrays, including variables length arrays inside a TClonesArrays. - Add support for the shift operators (<< and >>). Since >> is also used to explicitly name the histogram to be used, it needs to be disambiguated with parenthesis when used as a shift operator: myTree->Draw("fValid<<2"); myTree->Draw("(fValid>>2)"); - Enhance array support when using TBrowser. Double clicking on a leaf which is an array now properly histograms all the elements of the array. - Support the usage of another variable as array index: myTree->Draw("clone1.a1:clone2.a2[2]"); myTree->Draw("clone1.a1:clone2.a2[clone1.b1]"); myTree->Draw("clone1.a1","clone2.a2[clone1.b1]>0"); - Enhance the ability to omit some portion of the leaf name. The following three statements are equivalent, whether the event branch is split or not: myTree->Draw("fPx"); myTree->Draw("fTracks.fPx"); myTree->Draw("event.fTracks.fPx"); TStreamerInfo ============= Several modifications to take into account complex topologies like: - opening a file before loading the shared lib with the classes - reading objects without the shared library - complex class structures with multiple inheritance - members deriving from abstract classes - base classes with no data members Many changes to support the new TTree branch style and the extended support for complex classes in TClonesArray. Add support for classes generated by TTree::MakeClass(). TClonesArray ============ Several modifications to support the new branch style. Classes in TClonesArray may contain variable length items and pointers to other objects. TLatex ====== Several minor improvements for special characters or when the text is placed in narrow pads. TAxis ===== The functions DrawClone(), Delete(), SetDrawOption() are not visible in the context menu. In the default constructor, the default number of bins is 1 instead of 0. TH1 === The default constructor may be called by the user. Several protections added in this case. TH1::Fit(), TGraph::Fit() ========================= Take into account fixed parameters when computing the number of degrees of freedom. TChain ====== Remove the limitation that the file name must contain the string ".root". However, ".root" is necessary only in case one wants to specify a Tree in a subdirectory of a ROOT file with e.g., the format: //machine/file_name.root/subdir/tree_name TTreePlayer =========== Special binning procedure for variables of type integer. Force bin sizes to be integer. TF1 constructors and TFormula ============================= Thanks to John Odonnell to implement support for recursive functions definitions. For example, the following macro now works correctly: { TF1 *fcos = new TF1 ("fcos", "[0]*cos(x)", 0., 10.); fcos->SetParNames( "cos"); fcos->SetParameter( 0, 1.1); TF1 *fsin = new TF1 ("fsin", "[0]*sin(x)", 0., 10.); fsin->SetParNames( "sin"); fsin->SetParameter( 0, 2.1); TF1 *fsincos = new TF1 ("fsc", "fcos+fsin"); TF1 *fs2 = new TF1 ("fs2", "fsc+fsc"); } TCanvas and TStyle ================== Support for fonts specified in pixel precision also in sub-pads and also for histogram title and stat boxes. New TStyle methods: TStyle::SetTitleFontSize(), TStyle::SetStatFontSize(), TStyle::GetTitleFontSize(), TStyle::GetStatFontSize(). TCanvas embedding in Qt ======================= Some changes by Denis Bertini that will allow a TCanvas to be embedded in a Qt driven GUI. Fixed important memory leak in TCanvas ====================================== Fixed long standing memory leak related to updating canvases and pads in a loop. This problem was especially a problem for monitoring programs that were continuously updating canvases as for every update about 800 bytes were leaked. The problem was due to the stacking of GraphicsExpose and NoExpose X11 events that were never handled. TCanvas order of initialisation ============================== When running with threads, the thread running the canvas may run faster than the main thread. The order of initialisation in the canvas constructor has been modified. TDialogCanvas ============= Warning, new version may be incompatible. The SetEditable flag is not set in the default constructor. If you have a class deriving from TDialogCanvas and containing TButtons, note that you must call SetEditable(kTRUE) before adding buttons, then call SetEditable(kFALSE). TObject::Draw ============= When a pad is declared not editable (TPad::SetEditable()) the Draw function refuses to add the object to the pad list of primitives. TPad::Clear ============ When a pad is declared not editable (TPad::SetEditable()) the Clear() function does not erase the pad. Color handling ============== On true color displays (normally all displays with > 8 bit planes) color values are now calculated instead of queried from the X server. This reduces ROOT startup time over a 64KB ISDN line from 30 to 10 seconds. Also the limit of 1000 color has been removed. X3D === Corrected color rendering for all true color devices. Also stereo view mode works now on these displays. Integration of OpenInventor =========================== OpenInventor can now be used embedded in the ROOT GUI to view 3D scenes. After installing OpenInventor (which requires the setting of the environment variable IVROOT) build ROOT again and you will get the OpenIventor interface when selecting the OpenGL option in TCanvas. TGTableLayout ============= New GUI TGTableLayout manager by Brett Viren. The TGTableLayout manager places child frames in a table. It uses TGTableLayoutHints (not TGLayoutHints). See TGTableLayoutHints for how to use these. This manager works like TGMatrixLayout with the addition that: - Child frames can span more than one column/row. - Child frames can resize with the frame. - Column and row sizes are not fixed nor (optionally) homogeneous. - The number of columns and rows must be fully specified. See also the test program $ROOTSYS/test/guiviewer.cxx. TThread ======= Several changes in the initialization procedure. New Thread constructor to connect to an existing running thread. By Mathieu de Naurois. TSystem ======= New methods ResetSignal() and IgnoreSignal() to reset specific signals to their default or to ignore them. Both methods can toggle their state. TDatime ======= New method Set(UInt_t) which takes the result of time() or of TDatime::Conver(). New tutorials ============= The following new tutorials have been added: - tasks.C: This tutorial illustrates the use of the class TTask. It dynamically compiles and links a set of TTask classes in the new file MyTasks.cxx - tree1.C: show how to write/read a simple Tree - tree2.C: a Tree from variables or C-structs - tree3.C: show a Tree with friends - tree4.C: process a tree with objects of the class Event. - tv3.C: a Tree with TVector3 objects - fitcont.C: illustrating how to get a contour from TMinuit in graphical form - shapesAnim.C: illustrates how to animate a geometry picture. - fit2.C: illustrates how to fit a 2-D histogram. Test programs and benchmarks ============================ Use the new Tree branch style. Renormalized benchmarks. rootcint ======== Several improvements, in particular for STL maps. h2root ====== Implement a new value option for the parameter tolower. if tolower = 1, variable names are converted to lower case, first character converted to upper case, if tolower = 2, variable names are converted to lower case. Makefile targets for building RedHat and Debian packages ======================================================== Christian Holm Christensen contributed scripts to automatically package ROOT binaries in the RedHat rpm and Debian pkg format. MacOS X ======= A port to MacOS X provided by Keisuke Fujii and Ben Cowan. iPAQ ==== A port to the Compaq iPAQ handheld (32 MB RAM, 16 MB flash). Kind of a curiosity, running ROOT on a 320x160 pixel handheld, but more importantly a proof of concept that the system is still lean and mean enough so it can run in such a limited environment.
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:49 MET