1 / 78

The ROOT Project Status & Developments

The ROOT Project Status & Developments. Aachen 1 February 2005 Ren é .Brun@cern.ch. ROOT in a nutshell. An efficient data storage and access system designed to support structured data sets in very large distributed data bases (Petabytes).

Download Presentation

The ROOT Project Status & Developments

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The ROOT ProjectStatus & Developments Aachen 1 February 2005 René.Brun@cern.ch ROOT: Status & Developments

  2. ROOT in a nutshell • An efficient data storage and access system designed to support structured data sets in very large distributed data bases (Petabytes). • A query system to extract information from these distributed data sets. • The query system is able to use transparently parallel systems on the GRID (PROOF). • A scientific visualisation system with 2-D and 3-D graphics. • An advanced Graphical User Interface • A C++ interpreter allowing calls to user defined classes. • An Open Source Project ROOT: Status & Developments

  3. ROOT: An Open Source Project • The project is developed as a collaboration between : • Full time developers: • 6 people full time at CERN • 1 core developer at FermiLab • 1 core developer in Japan (Agilent Technologies) • 1 core developer at MIT • 1 mathematician at CERN sponsored by a US Finance Company • Many contributors spending a substantial fraction of their time in specific areas (> 50). • Key developers in large experiments using ROOT as a framework. • Several thousand users given feedback and a very long list of small contributions. ROOT: Status & Developments

  4. 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) • Feb 04: version 4.00 (5th Root workshop SLAC) • Dec 04: version 4.02 (current stable version) • Feb 05: Developing 4.04 to be released in June (LCG/ROOT merge) 10 years !! ROOT: Status & Developments

  5. The ROOT web pages http://root.cern.ch • General Information and News • Download source and binaries • Howto & tutorials • User Guide & Reference Guides • Roottalk Digest & Forum ROOT: Status & Developments

  6. Current ROOT structure & libs ROOT: Status & Developments

  7. CINT: the C++ interpreter ROOT: Status & Developments

  8. My first session root root [0]344+76.8 (const double)4.20800000000000010e+002 root [1]float x=89.7; root [2]float y=567.8; root [3]x+sqrt(y) (double)1.13528550991510710e+002 root [4]float z = x+2*sqrt(y/6); root [5]z (float)1.09155929565429690e+002 root [6].q root See file $HOME/.root_hist root [0]try up and down arrows ROOT: Status & Developments

  9. My second session root root [0].x session2.C for N=100000, sum= 45908.6 root [1]sum (double)4.59085828512453370e+004 Root [2] r.Rndm() (Double_t)8.29029321670533560e-001 root [3].q session2.C { int N = 100000; TRandom r; double sum = 0; for (int i=0;i<N;i++) { sum += sin(r.Rndm()); } printf("for N=%d, sum= %g\n",N,sum); } unnamed macro executes in global scope ROOT: Status & Developments

  10. My third session root root [0].x session3.C for N=100000, sum= 45908.6 root [1]sum Error: Symbol sum is not defined in current scope *** Interpreter error recovered *** Root [2] .x session3.C(1000) for N=1000, sum= 460.311 root [3].q session3.C void session3 (int N=100000) { TRandom r; double sum = 0; for (int i=0;i<N;i++) { sum += sin(r.Rndm()); } printf("for N=%d, sum= %g\n",N,sum); } Named macro Normal C++ scope rules ROOT: Status & Developments

  11. My third session with ACLIC root [0] gROOT->Time(); root [1].x session4.C(10000000) for N=10000000, sum= 4.59765e+006 Real time 0:00:06, CP time 6.890 root [2].x session4.C+(10000000) for N=10000000, sum= 4.59765e+006 Real time 0:00:09, CP time 1.062 root [3] session4(10000000) for N=10000000, sum= 4.59765e+006 Real time 0:00:01, CP time 1.052 root [4].q session4.C #include “TRandom.h” void session4 (int N) { TRandom r; double sum = 0; for (int i=0;i<N;i++) { sum += sin(r.Rndm()); } printf("for N=%d, sum= %g\n",N,sum); } File session4.C Automatically compiled and linked by the native compiler. Must be C++ compliant ROOT: Status & Developments

  12. Macros with more than one function root [0] .x session5.C >session5.log root [1].q root [0] .L session5.C root [1]session5(100); >session5.log root [2]session5b(3) sum(0) = 0 sum(1) = 1 sum(2) = 3 root [3].q session5.C void session5(int N=100) { session5a(N); session5b(N); gROOT->ProcessLine(“.x session4.C+(1000)”); } void session5a(int N) { for (int i=0;i<N;i++) { printf("sqrt(%d) = %g\n",i,sqrt(i)); } } void session5b(int N) { double sum = 0; for (int i=0;i<N;i++) { sum += i; printf("sum(%d) = %g\n",i,sum); } } .x session5.C executes the function session5 in session5.C use gROOT->ProcessLine to execute a macro from a macro or from compiled code ROOT: Status & Developments

  13. Combining UI and GUI root [0].x session2.C for N=100000, sum= 45908.6 root [1]sum (double)4.59085828512453370e+004 Root [2] r.Rndm() (Double_t)8.29029321670533560e-001 root [3].q ROOT: Status & Developments

  14. The Histogram Package ROOT: Status & Developments

  15. The Histogram Classes • Structure 1-Dim 2-Dim 3-Dim ROOT: Status & Developments

  16. Histograms • class THStack • Long list of functions in TH1 • Plenty of drawing options • Filling with string variables • Automatic binning • TH1::SetBuffer • TH1::GetRandom • h3 = 3*h1 – h2 ROOT: Status & Developments

  17. Filling with strings See tutorials -hlabels1.C -hlabels2.C -cernstaff.C ROOT: Status & Developments

  18. Peak Finder + Deconvolutionsby Miroslav Morach TSpectrum ROOT: Status & Developments

  19. Fitting TMinuit TFumili TFitter TVirtualFitter TH1::Fit bin chisquare bin likelihood TTree::Fit unbinned likelihood TGraph::Fit unbinned chisquare User ROOT: Status & Developments

  20. Graphics ROOT: Status & Developments

  21. Gui/Graphics strategy User/Root GUI and Graphics classes Applications see only Abstract Interfaces High level pad graphics TVirtualPad Low level screen graphics and GUI TVirtualX TPad TGWin32 TGQt TG?? TGX11 TGWin32GDK ROOT: Status & Developments

  22. A Data Analysis & Visualisation tool ROOT: Status & Developments

  23. Graphics : 1,2,3-D functions ROOT: Status & Developments

  24. Full LateXsupport on screen and postscript Formula or diagrams can be edited with the mouse TCurlyArc TCurlyLine TWavyLine and other building blocks for Feynmann diagrams ROOT: Status & Developments

  25. ROOT 3D Graphics The ROOT basic 3D shapes Simple Box ROOT: Status & Developments

  26. Alice 3 million nodes ROOT: Status & Developments

  27. ROOT 3D Graphics R. Brun (CERN), O. Couet (CERN), M. Gheata (ISS), A. Gheata (ISS), V. Onoutchine (IFVE), T.Pocheptsov (JINR) Text ………………… Atlas ROOT: Status & Developments

  28. GUI ROOT: Status & Developments

  29. Available Widgets • Complete set of widgets: • label, icon, button, check button, radio button, picture button, button box, list box, combo box, list view, icon view, number entry, text entry, text view, text edit, tree view, tab view, scrollbar, slider, menubar, popup menu, cascading menu, statusbar, toolbar, message dialogs, file selection dialog, progress bars, tooltips, ... ROOT: Status & Developments

  30. Basic Widgets ROOT: Status & Developments

  31. Advanced Widgets • Color selector dialog: TGColorDialog ROOT: Status & Developments

  32. GUI Examples ROOT: Status & Developments

  33. GUI Examples –Histogram Browser ROOT: Status & Developments

  34. More GUI Examples –Period System ROOT: Status & Developments

  35. Object Editors ROOT: Status & Developments

  36. Histogram Editor ROOT: Status & Developments

  37. Object Editors (rebinning) ROOT: Status & Developments

  38. Input/Output ROOT: Status & Developments

  39. Evolution of ROOT I/O 1995 • Hand-written Streamers • Streamers generated via rootcint • Support for Class Versions • Support for ByteCount • Persistent class Dictionary written to files • rootcint modified to generate automatic Streamers • Support for Automatic Schema Evolution • Can generate code for “DataObjects” classes in a file • Support for complex C++ cases • Can read files without the classes • Persistent Reference pointers • Support for foreign classes • Full support for STL 3.00 3.01 3.02 3.04 4.02 2005 ROOT: Status & Developments

  40. Object Persistency(in a nutshell) • Two I/O modes supported (Keys and Trees). • Key access: simple object streaming mode. • A ROOT file is like a Unix directory tree • Very convenient for objects like histograms, geometries, mag.field, calibrations • Trees • A generalization of ntuples to objects • Designed for storing events • split and no split modes • query processor • Chains: Collections of files containing Trees • ROOT files are self-describing • Interfaces with RDBMS also available • Access to remote files (RFIO, DCACHE, GRID) ROOT: Status & Developments

  41. ROOT I/O : An Example Program Writing demoh.C TFile f(“example.root”,”new”); TH1F h(“h”,”My histogram”,100,-3,3); h.FillRandom(“gaus”,5000); h.Write(); Program Reading demohr.C TFile f(“example.root”); TH1F *h = (TH1F*)f.Get(“h”): h->Draw(); f.Map(); 20010831/171903 At:64 N=90 TFile 20010831/171941 At:154 N=453 TH1F CX = 2.09 20010831/171946 At:607 N=2364 StreamerInfo CX = 3.25 20010831/171946 At:2971 N=96 KeysList 20010831/171946 At:3067 N=56 FreeSegments 20010831/171946 At:3123 N=1 END ROOT: Status & Developments

  42. Objects in directory /pippa/DM/CJ eg: /pippa/DM/CJ/h15 A Root file pippa.root with two levels of directories ROOT: Status & Developments

  43. Self-describing files • Dictionary for persistent classes written to the file when closing the file. • ROOT files can be read by foreign readers (eg JavaRoot (Tony Johnson) • Support for Backward and Forward compatibility • Files created in 2003 must be readable in 2015 • Classes (data objects) for all objects in a file can be regenerated via TFile::MakeProject Root >TFile f(“demo.root”); Root > f.MakeProject(“dir”,”*”,”new++”); ROOT: Status & Developments

  44. Automatic Schema Evolution ROOT: Status & Developments

  45. Auto Schema Evolution (2) ROOT: Status & Developments

  46. File types & Access in 4.02/xx user Local File X.xml TTreeSQL TFile TKey/TTree TStreamerInfo TSQLServer TSQLRow TSQLResult http rootd/xrootd Oracle Local File X.root Dcache Castor MySQL PgSQL RFIO Chirp SapDb ROOT: Status & Developments

  47. Memory <--> TreeEach Node is a branch in the Tree Memory T.GetEntry(6) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 T.Fill() 18 T ROOT: Status & Developments tr

  48. Tree example Event (write) All the examples can be executed with CINT or the compiler root > .x demoe.C root > .x demoe.C++ void demoe(int nevents) { //load shared lib with the Event class gSystem->Load("$ROOTSYS/test/libEvent"); //create a new ROOT file TFile f("demoe.root",”new"); //Create a ROOT Tree with one single top level branch int split = 99; //try also split=1 and split=0 int bufsize = 16000; Event *event = new Event; TTree T("T","Event demo tree"); T.Branch("event","Event",&event,bufsize,split); //Build Event in a loop and fill the Tree for (int i=0;i<nevents;i++) { event->Build(i); T.Fill(); } T.Print();//Print Tree statistics T.Write();//Write Tree header to the file } ROOT: Status & Developments

  49. Tree example Event (read 1) void demoer() { //load shared lib with the Event class gSystem->Load("$ROOTSYS/test/libEvent"); //connect ROOT file TFile *f = new TFile("demoe.root"); //Read Tree header and set top branch address Event *event = 0; TTree *T = (TTree*)f->Get("T"); T->SetBranchAddress("event",&event); //Loop on events and fill an histogram TH1F *h = new TH1F("hntrack","Number of tracks",100,580,620); int nevents = (int)T->GetEntries(); for (int i=0;i<nevents;i++) { T->GetEntry(i); h->Fill(event->GetNtrack()); } h->Draw(); } Rebuild the full event in memory ROOT: Status & Developments

  50. 8 leaves of branch Electrons A double-click to histogram the leaf 8 Branches of T ROOT: Status & Developments

More Related