720 likes | 735 Views
Explore the historic journey and recent advancements of the ROOT project, a collaborative effort by skilled developers at CERN and SLAC, including significant developments, key team members, future plans, and acknowledgments. Find out about the latest versions, important additions, collaborations, and achievements. Dive into the core features and enhancements, such as CINT improvements, new ports, and plug-in manager updates. Discover the significant impact of the ROOT project in the scientific computing domain and its continuous evolution over the years.
E N D
ROOT Project StatusSummary of major developments ROOT Workshop 2004 SLAC 25 February René Brun CERN Overview & Major Developments
Project History • Jan 95: Thinking/writing/rewriting/??? • November 95: Public seminar, show Root 0.5 • Spring 96: decision to use CINT • Jan 97: Root version 1.0 • Jan 98: Root version 2.0 • Mar 99: Root version 2.21/08 (1st Root workshop FNAL) • Feb 00: Root version 2.23/12 (2nd Root workshop CERN) • Mar 01: Root version 3.00/06 • Jun 01: Root version 3.01/05(3rd Root workshop FNAL) • Jan 02: Root version 3.02/07 (LCG project starts: RTAGs) • Oct 02: Root version 3.03/09 (4th Root workshop CERN) • Dec 03: Root version 3.10/02 (last PRO release) • Feb 04: Towards version 4.00 (5th Root workshop SLAC) 9 years !! Overview & Major Developments
Plan of talk • The ROOT Team • Summary of developments in 3.04,3.05,3.10 • Version 4.00 highlights • Medium term and long term • Relations with LCG/AA Overview & Major Developments
Today full time on the project • Ilka Antcheva (LCG staff) (since 1st Aug 2002) GUI/Doc • Maarten Ballintijn (MIT/Phobos) PROOF (since Sep 2001) • Rene Brun: PH/SFT group and Alice part time • Philippe Canal (FNAL/CD) (since 1998) • Olivier Couet CERN (since 1st Jun 2002) Graphics • Gerri Ganis (LCG) (since Dec 2002)Authentication • Andrei Gheata: (Alice) Geometry package (since Sep 2001) • Masa Goto (Agilent technologies) CINT fulltime! • Eddy Offermann (from Finance world. Sabatical for 1 year) • Valeriy Onuchin (LCG) GUI/Win32gdk (since 1st Feb 2002) • Fons Rademakers: Alice and PH/SFT group Overview & Major Developments
Also a substantial fraction of their time • Bertrand Bellenot (Alcan) Win32gdk (since June 2000) • Valery Fine (BNL/STAR) TVirtualX/Qt + Coin3D • Victor Perevoztchikov (BNL/STAR) STL, foreign classes • AND more than 70 important contributions from people spending a substantial fraction of their time on the project. See $ROOTSYS/README/CREDITS Overview & Major Developments
New Splash Screen To see the list of all contributors, select the HELP button in the browser or canvas. The window auto scrolls Until you click on it. Appears 4s When executing root Overview & Major Developments
CINT & Masa • Continuous and impressive list of developments by Masa (see his talk) • towards full C++ standard ? • Still problems with object scope in loops • CINT is fundamental to ROOT • ROOT puts many difficult requirements to CINT • Hook when object does not exist • Hook when an object is deleted • Many thanks to Masa for 9 years of very fruitful collaboration and 12 years of work on CINT ! Overview & Major Developments
Special thanks to: • FermiLab for supporting Philippe since many years. Philippe is a KEY developer • CERN/LCG for providing manpower for GUI, Windows support and Authentication. • BNL for supporting Valeri and Victor since many years (via Star->Atlas->Star). • BaBar for supporting the xrootd development • Our colleagues in LCG/AA and PH/SFT for stimulating discussions Overview & Major Developments
Roottalk Mails to roottalk + mails to rootdev and root-bugs 1323 in 1997 2515 in 1998 3004 in 1999 3567 in 2000 4686 in 2001 5370 in 2002 5393 in 2003 +1419 in Forum (August 2003->Feb 2004) + mails about-root-fnal + direct mails to team members + spam mail PLEASE: -Always indicate a mail subject -Always indicate which version of ROOT and which OS -Send a x.tar.gz file instead of many files in attachement Overview & Major Developments
Short summary of main developments since ROOT2002 • Dec 2002: version 3.04/07 • Jun 2003: version 3.05/07 • Dec 2003: version 3.10/02 • Feb 2004: version 4.00/02 (released in June) http://root.cern.ch/root/htmldoc/examples/Version30402.news.html http://root.cern.ch/root/htmldoc/examples/Version31002.news.html http://root.cern.ch/root/html/examples/V4.00.txt.html We have implemented more than 80% of our plan announced at the previous workshop in October 2002. See: ftp://root.cern.ch/root/R2002/future.pdf We have implemented many new features not foreseen in Oct 2002 Overview & Major Developments
Summary of 3.04, 3.05 and 3.10 October 2002 ->December 2003 Overview & Major Developments
ROOT Documentation Overview & Major Developments
New ports • Added port to IBM's xlC compiler under MacOS X, by Federico Carminati. • Port to Microsoft's VC++ 7.1. • Port to Intel's icc v8.0. • Port to RedHat 8.x, 9.x. • Port to Fedora Core 1. • Port to Cygwin gcc, by Axel Naumann. • Port to AMD Opteron and Athlon64 Overview & Major Developments
Plug-in Manager name class Shared lib How to call Plugin.TFile: ^rfio: TRFIOFile RFIO "TRFIOFile(const char*,Option_t*,const char*,Int_t)" +Plugin.TFile: ^castor: TCastorFile RFIO "TCastorFile(const char*,Option_t*,const char*,Int_t,Int_t)" +Plugin.TFile: ^dcache: TDCacheFile DCache "TDCacheFile(const char*,Option_t*,const char*,Int_t)" +Plugin.TFile: ^chirp: TChirpFile Chirp "TChirpFile(const char*,Option_t*,const char*,Int_t)" Plugin.TSystem: ^rfio: TRFIOSystem RFIO "TRFIOSystem()" Plugin.TSQLServer: ^mysql: TMySQLServer MySQL "TMySQLServer(const char*,const char*,const char*)" +Plugin.TSQLServer: ^pgsql: TPgSQLServer PgSQL "TPgSQLServer(const char*,const char*,const char*)" +Plugin.TSQLServer: ^sapdb: TSapDBServer SapDB "TSapDBServer(const char*,const char*,const char*)" +Plugin.TSQLServer: ^oracle: TOracleServer Oracle "TOracleServer(const char*,const char*,const char*)" Plugin.TGrid: ^alien TAlien RAliEn "TAlien(const char*,const char*,const char*,const char*)" Plugin.TVirtualPad: * TPad Gpad "TPad()" Plugin.TVirtualHistPainter: * THistPainter HistPainter "THistPainter()" Plugin.TVirtualTreePlayer: * TTreePlayer TreePlayer "TTreePlayer()" Plugin.TVirtualTreeViewer: * TTreeViewer TreeViewer "TTreeViewer(const TTree*)" Plugin.TVirtualGeoPainter: * TGeoPainter GeomPainter "TGeoPainter()" Plugin.TVirtualUtil3D: * TUtil3D Graf3d "TUtil3D()" Plugin.TVirtualUtilHist: * TUtilHist Hist "TUtilHist()" Plugin.TVirtualUtilPad: * TUtilPad Gpad "TUtilPad()" Plugin.TVirtualFitter: Minuit TFitter Minuit "TFitter(Int_t)" +Plugin.TVirtualFitter: Fumili TFumili Fumili "TFumili(Int_t)" Plugin.TVirtualPS: ps TPostScript Postscript "TPostScript()" +Plugin.TVirtualPS: svg TSVG Postscript "TSVG()" Plugin.TViewerX3D: x11 TViewerX3D X3d "TViewerX3D(TVirtualPad*,Option_t*)” +Plugin.TViewerX3D: qt TQtViewerX3D QtX3d "TQtViewerX3D(TVirtualPad*,Option_t*)” Overview & Major Developments
ACLIC • The '+' option now properly recreates the library when the script or one of the file it includes is newer than the shared library. • When asked to load a script (file.C) which has already been compiled (into file_C.so), ACLiC looks for a dependency file (file_C.d). If this dependency file is older than the library or does not exist, ACLiC generates a new dependency file using ROOT's rmkdepend tool and the list of -I and -D directives it knows about (see ACLiC description on how to set those). • Then ACLiC compare the time stamp of all the files listed in the dependency file and rebuild the library if any of them is newer than the library Root >.x file.C++ Root > .x file.C+ Root >.x file.C++g Overview & Major Developments
Rootcint (see Philippe talk) • Many developments. Consolidation • Digestion of STL collections • Better support for templates • Dictionary size: a problem ? Overview & Major Developments
ROOT Dictionary size If all classes have a dictionary, the size of the dictionary may become a large fraction of the executable module! Overview & Major Developments
Full native support for 64 bit integers • Support on all platforms for 64 bits integers via the portable typedefs Long64_t and ULong64_t. • Long long on Unix • _int64 with VC++ • Big-endian, little-endian byte swapping • Many internal class tables moved to Long64_t • Still more classes/functions to be converted • fEntries in TH1, TTree • Replacememt of TTree::BuildIndex internal tables with an array of ULong64_t • TEventList ? Overview & Major Developments
Trees improvements • Huge number of improvements (see Philippe) • Support for split mode in more complex cases • Performance improvement • Support for foreign classes as top branches #include “TObject.h” Class MyClass : public TObject { int i,j,k; ClassDef(MyClass,1) }; TTree T(“T”,”test foreign”) MyClass *a = new MyClass; T.Branch(“event”,”MyClass”,&a); Class MyClass { int i,j,k; }; Overview & Major Developments
TTreeViewer • Several layout improvement and changes. New Refresh button. Overview & Major Developments
TSelector • The TSelector class has been upgraded to improve its general functionality and better support its use in PROOF. Specific changes: • - Introduction of a Version() function to provide backward compatibility for the old version and support future upgrades. • - Replace ProcessCut() and ProcessFill() with a single Process() function. Reduce the information that needs to be shared between functions. Promote a more granular access to data by reading branches as they are needed. • Add SlaveBegin() and SlaveTerminate(), in the case of PROOF these routines are called on the slave servers. The Begin() and Terminate() function now always run on the (local) client machine even when using PROOF. Overview & Major Developments
rootd • The rootd daemon uses the new authentication methods described in detail at: http://root.cern.ch/root/Auth.html • Client/Server Authentication Client/Server authentication for access to data on remote hosts (via the rootd daemon) or to a PROOF cluster has been deeply restructured.. • See Gerri talk Overview & Major Developments
PROOF (see Maarten & Fons) • improved packetizer (work distributor). • interface to AliEn grid system via the TGridProof/TAlienProof classes. • interface to Condor Computing on Demand via TCondor class. - query progress dialog • introduced the Package Manager and Sandbox: • gProof->UploadPackage() • gProof->EnablePackage() • gProof->ClearPackage() Overview & Major Developments
Fitting/TMinuit/TFumili Choose Fitter at run time or via system.rootrc void FitBench(Int_t npass=100) { TCanvas *c1 = new TCanvas("c1"); c1->Divide(1,2); fitFcn = new TF1("fitFcn",fitFunction,0,3,6); fitFcn->SetNpx(200); gStyle->SetOptFit(); gStyle->SetStatY(0.6); //with Minuit c1->cd(1); TVirtualFitter::SetDefaultFitter("Minuit"); DoFit(npass); //with Fumili c1->cd(2); TVirtualFitter::SetDefaultFitter("Fumili"); DoFit("Fumili",npass); } Overview & Major Developments
TSpectrum • New improvements in the Spectrum classes by Miro Morach. Overview & Major Developments
TGraph2D • This new class is a set of N points x[i],y[i],zi[i] in a non uniform grid. Several visualization techniques are implemented, including Delaunay triangulation. TCanvas c; Double_t x, y, z, P = 6.; Int_t np = 200; TGraph2D dt; TRandom r; for (Int_t N=0; N<np; N++) { x = 2*P*(r.Rndm(N))-P; y = 2*P*(r.Rndm(N))-P; z = (sin(x)/x)*(sin(y)/y)+0.2; dt.SetPoint(N,x,y,z); } gStyle->SetPalette(1); dt.Draw("surf1"); dt.Draw(“same p0”); Overview & Major Developments
TMultiLayerPerceptron package(see Christophe Delaere talk) • New MultiLayerPerceptron (mlp) package, by Christophe Delaere. The package has 3 classes TMultiLayerPerceptron, TNeuron, TSynapse These classes describe a neural network. There are facilities to train the network and use the output. • The input layer is made of inactive neurons (returning the normalized input), hidden layers are made of sigmoids and output neurons are linear. The basic input is a TTree and two (training and test) TEventLists. • For classification jobs, a branch (maybe in a TFriend) must contain the expected output. 6 learning methods are available: kStochastic, kBatch, kSteepestDescent, kRibierePolak, kFletcherReeves and kBFGS. This implementation is *inspired* from the mlpfit package from J.Schwindling et al. Overview & Major Developments
New tutorials in $ROOTSYS/tutorial • graph2dfit.C: TGraph2D example. • graph2derrorsfit.C: TGraph2DErrors example. • markerwarning.C illustrating the danger of using asymmetric markers. • logscales.C illustrating the use of axis with log scales. • triangles.C illustrating how to interact with closed polylines. • multigraph.C illustrating the use of TMultiGraph. • mlpHiggs.C illustring the use of the NN classes TMultiLayerPerceptron, etc. • bent.C illustrating the use of the new class TGraphBentError • peaks.C illustrating how to use the peak finder (class TSpectrum) associated with a complex minimization problem. • TestAuth.C to test the ROOT Authentication methods. • threads.C illustrating the use of the Thread classes. • geoshapes.C illustrating the use of the TGeo shapes. • timeonaxis2.C illustrating the basics of the time units on the histogram axis. Overview & Major Developments
New tutorials in $ROOTSYS/tutorial • clonesA_Event.C illustrating complex situations of inheritance and multiple inheritance. • jets.C illustrating the use of a Tree using the JetEvent class. The JetEvent class has several collections (TClonesArray) and other collections (TRefArray ) referencing objects in the TClonesArrays. • tree2a.C with the same functionality than tree2.C but using a class instead of a C-struct. • copytree3.C showing how to copy selected entries to another Tree. Overview & Major Developments
Version 4.00 hightlights Overview & Major Developments
ROOT version 4 Highlights (1)(already in 4.00/02) • Support for Automatic Schema evolution for foreign classes without using a class version number. • Support for large files (> 2 GBytes) • New data type Double32_t (double in memory, saved as float on the file) • Native support for STL: automatic Streamers. • Tree split mode with STL vector/list • New Linear Algebra package • New class TRolke by Jan Conrad • New class TGraph2DErrors. More features in TGraph2D • Consolidation of win32gdk. • More features in the authentication system. • Consolidation of the PROOF classes. • GUI code generation See Philippe See Eddy See Gerri See Fons & Maarten See Ilka Overview & Major Developments
ROOT version 4 Highlights (2)(will be in final release in June) • Plug-in Manager upgrade (rlimap) with automatic library/class discovery/load. • xrootd • Virtual MC (G3, Fluka, G4?) • Support for Qt (alternative option to x11) • GUI builder • PROOF/Alien in production • Interface with Python (PyRoot with SEAL) • Interface with Ruby (ruby-root) • Geometry interface to OpenGL/Coin3D (V.Fine/STAR) • MakeClass/MakeSelector upgrade. Support for Tree friends • New GUI Histogram editor and Fitter see BaBar talks see Andrei Gheata /Alice see Valeri Fine/STAR see Ilka see Fons see Wim /Atlas/LBL Overview & Major Developments
Foreign classes checksum foreign class #include “Rtypes.h” class MyClass { int i,j,k; ClassDef(MyClass,1) }; class MyClass { int i,j,k; }; buffer .... Bytecount 0 checksum ObjectN Bytecount 0 checksum objectN+1 .... buffer 4 bytes .... bytecountversion ObjectN bytecountversion objectN+1 .... 2 bytes 4 bytes 4 bytes 2 bytes Overview & Major Developments
ClassDef advantages • The IsA function generated by ClassDef speeds up considerably the access to the TClass for a given object. • The version number (2 bytes maximum) consumes less space on disk than the “0+checksum” Overview & Major Developments
Support for large files • By default, a TFile will grow above 2 GBytes if necessary. • A TTree will only go above 2 GBytes if TTree::SetMaxTreeSize has been called. • Below 2 GBytes, all pointers are 4 bytes. Above 2 GBytes, they are 8 bytes. This saves some space when writing many small keys/baskets. • If a file is > 2GBytes, fSeekKey or fBasketSeek are always 8 bytes. • A file written with version 4 can be read by version 3 if the file size is < 2 GBytes. Overview & Major Developments
New Data type Double32_t • A new data type Double32_t is defined in Rtypes.h • Same as Double_t in memory • Same as Float_t on disk • The Automatic Schema evolution supports conversions from • Double32_t to Double_t and vice-versa • Double32_t to Float_t and vice-versa • Double32_t* to Double_t* and vice-versa • Double32_t* to Float_t* and vice-versa • This new data type may save a non negligible space on disk. • However be careful with loss of precision when making write->read->write->read->write… Overview & Major Developments
New Graphics Editor 1-Toggle Editor mode 3-Edit object attributes 2-Click On the object to be edited Overview & Major Developments
Gui Builder/Gui Code Generator Type CRTL/S anywhere on a widget To generate the C++ code for this widget Then do root > .x guisave.C Overview & Major Developments
Virtual Monte Carlo VMC • The VMC has considerably evolved in the past two years.The VMC was designed to have • A common input for the kinematics • A common input for the geometry • A common output for the hits (StepManager) • The original version was feeding the final target system (G3 or G4) via a common API. • In addition the new version has interfaces from G3 and Fluka to the Root geometry (G4 in plan) • In case of G3, one can run with the native G3 geometry or the ROOT geometry with no changes in the application. (See Andrei Gheata talk) Overview & Major Developments
Geometry classes TGeoxxx Modelling Visualisation Interactivity Where am I? Distance to boundary Closest boundary Persistency Simulation program Geant3-based Geant4-based Fluka-based C++ classes Geometry package MySQL XML Reconstruction program Visualisation Overview & Major Developments
Geometry and Geometries C++ classes G3 Geant3 rz file C++ classes C++ classes geometry G4 ROOT file geometry Geometry In memory Fluka XML Files Eg, GDML Recons Overview & Major Developments
Geometries: not the same goal ! External description only Used as input to a real geometry (G4, ROOT) Checker , Viewer may be implemented Requires some data structure in memory This has very limited functionality. Interesting (may be?) for input. Too much emphasis on this solution XML Files Eg, GDML Simulation/Reconstruction oriented C++ API for the construction Input can be via first solution Checker, Viewer must be (are) implemented Provide interface to navigators THIS IS THE MAIN HORSE TO BE OPTIMIZED Geometry In memory (G3,G4,ROOT) Overview & Major Developments
New Linear Algebra classes • Eddy Offermann has kindly maintained the old TMatrix, TVector classes for a few years. • Eddy is now spending one year with us at CERN.He has developed a new set of classes with more functionality and better performance. • See Eddy’s talk on Friday TDecompBase TDecompChol TDecompLU TDecompQRH TDecompSVD TMatrix TMatrixD TMatrixDBase TMatrixDCramerInv TMatrixDEigen TMatrixDLazy TMatrixDSym TMatrixDSymEigen TMatrixDUtils TMatrixF TMatrixFBase TMatrixFCramerInv TMatrixFLazy TMatrixFSym TMatrixFUtils TVector TVectorD TVectorF Overview & Major Developments
New Linear Algebra classes Overview & Major Developments
New class TRolke by Jan Conrad • This class computes confidence intervals for the rate of a Poisson in the presence of background and efficiency with a fully frequentist treatment of the uncertainties in the efficiency and background estimate using the profile likelihood method. • The signal is always assumed to be Poisson. • It allows the following Models: • 1: Background - Poisson, Efficiency - Binomial (cl,x,y,z,tau,m) • 2: Background - Poisson, Efficiency - Gaussian (cl,xd,y,em,tau,sde) • 3: Background - Gaussian, Efficiency - Gaussian (cl,x,bm,em,sd) • 4: Background - Poisson, Efficiency - known (cl,x,y,tau,e) • 5: Background - Gaussian, Efficiency - known (cl,x,y,z,sdb,e) • 6: Background - known, Efficiency - Binomial (cl,x,z,m,b) • 7: Background - known, Efficiency - Gaussian (cl,x,em,sde,b) • See example in tutorial Rolke.C Overview & Major Developments
Plugin manager & rlimap • An extension of the Plugin Manager and a new tool rlimap are currently under development (now in CVS). • $ROOTSYS/bin rlimap is a new tool generating the list of classes for a shared lib • rlimap libxxx.so libXXX.map • At run time, when CINT finds an unknown class, it calls a new Root module that is able to find the shared lib containing the class by looking into all libXXX.map files in the LD_LIBRARY_PATH. Eg. • TLorentzVector v; • will automatically trigger gSystem->Load(“libPhysics”); • gSystem->Load(libXXX”) can still be called Overview & Major Developments
Python/Root & Ruby/Root interfaces • We consider CINT + ACLIC to be the right combination for interactive data analysis • Having in addition an interface with other scripting languages is a bonus. We do not see these scripting languages to be an alternative to CINT/ACLIC, but an interesting complement. We are collaborating with: • LCG/AA for PyRoot (Pere Mato, Wim Lavrijsen) • Juan Alcaraz for PythonRoot & RubyRoot • Elias Athanasopoulos for ruby-root • It would be interesting to have a similar interface for PERL. • See also JavaRoot • http://sarkar.home.cern.ch/sarkar/jroot/main.html root > .x script.C root > .x script.C+ root > gSystem->Load(“libClasses”) Overview & Major Developments
PyRoot • PyRoot (successor of RootPython by Pere Mato) is an automatic interface between Python and any class having a CINT dictionary. • It does not require code generation. • We will distribute PyRoot as a sub-ROOT component, once PyRoot is stable. • See talk by Wim Lavrijsen Overview & Major Developments
PythonRoot http://alcaraz.home.cern.ch/alcaraz/PythonRoot/ Overview & Major Developments
RubyRoot http://alcaraz.home.cern.ch/alcaraz/RubyRoot/ Overview & Major Developments