ROOT
From Wikipedia, the free encyclopedia
- For other uses of "root", see root (disambiguation).
ROOT | |
---|---|
Example ROOT plot showing regions of interest in a 2D distribution |
|
Developed by | CERN |
Latest release | 5.18/00 / January 17th, 2008 |
OS | Cross-platform |
Genre | Data Analysis |
License | LGPL/GPL |
Website | ROOT home page |
ROOT is an object-oriented program and library developed by CERN. It was originally designed for particle physics data analysis and contains several features specific to this field, but it is also commonly[dubious ] used in other applications such as astronomy and data mining.
Contents |
[edit] Description
Development was initiated by René Brun and Fons Rademakers in 1994. ROOT is written in C++. Some parts are published under the LGPL, while others are based on GPL software and thus are also published under the GPL. It provides platform independent access to a computer's graphics subsystem and operating system using abstract layers. Parts of the abstract platform are: a graphical user interface and a gui builder, container classes, reflection, a C++ script and command line interpreter (CINT), object serialization and persistence.
The packages provided by ROOT include those for
- histogramming and graphing to visualize and analyze distributions and functions,
- curve fitting (regression analysis) and minimization of functionals,
- statistics tools used for data analysis,
- matrix algebra,
- four-vector computations, as used in high energy physics,
- standard mathematical functions,
- multivariate data analysis, e.g. using neural networks,
- image manipulation, used e.g. to analyze astronomical pictures,
- access to distributed data (in the context of the Grid),
- distributed computing, to parallelize data analyses,
- persistence and serialization of objects, which can cope with changes in class definitions of persistent data,
- access to databases,
- 3D visualizations (geometry)
- creating files in various graphics formats, like PostScript, JPEG, SVG,
- interfacing Python and Ruby code in both directions,
- interfacing Monte Carlo event generators.
A key feature of ROOT is a data container called tree, with its substructures branches and leaves. A tree can be seen as a sliding window to the raw data, as stored in a file. Data from the next entry in the file can be retrieved by advancing the index in the tree. This avoids memory allocation problems associated with object creation, and allows the tree to act as a lightweight container while handling buffering invisibly.
ROOT's focus on performance is caused by the amount of data that the Large Hadron Collider's experiments will collect, estimated to several petabytes per year. Physicists are expected to analyze this data using ROOT. ROOT is currently mainly used in data analysis and data acquisition in high energy physics experiments — most current experimental plots and results are obtained using ROOT.
The inclusion of the CINT C++ interpreter makes this package very versatile as it can be used in interactive, scripted and compiled modes in a manner similar to commercial products like Matlab.
[edit] Criticisms
This article or section may contain original research or unverified claims. Please improve the article by adding references. See the talk page for details. (September 2007) |
ROOT has been criticised by users, claiming it has a monolithic design, a tendency to re-invent existing technologies, a too-strong reliance on the CINT interpreter, and poor use of object-oriented programming methods, including OO antipatterns.[1] In attempting to provide all the functionality required by any data analysis task through a single interface, ROOT has attracted "no silver bullet" criticisms. Many of ROOT's fundamental design elements, such as global state, STL-incompatibility and aggressive single-owner based memory management, can make integration of ROOT functionality with stand-alone code difficult. The C++ wrapping is superficial as most common actions are performed by passing cryptic text commands to ROOT object member functions, so users must navigate a C++ interface plus multiple ad-hoc scripting languages.
Additionally, some users fault ROOT for generally poor documentation. ROOT classes do not always behave as advertised or as expected.
ROOT is very difficult for users to begin learning, largely because the ROOT documentation and webpage hardly elucidate in any way what the purpose of ROOT is. The documentation repeatedly stresses the internal design characteristics of ROOT over what features it actually provides to users. It says that ROOT's main features are "The Runtime Type Information System, The Object I/O System, Automatic Documentation Generation".[2] In documentation marked "read this first", the user is mostly told things like "the backbone of the ROOT architecture is a layered class hierarchy".[3]
From time to time, issues of ROOT's design and implementation are discussed on the ROOT users mailing list.[4][5]
[edit] Application of ROOT
Several particle physics experiments have written software based on ROOT, often in favor of using more generic solutions (i.e. using ROOT containers instead of STL).
- Some of the running particle physics experiments using software based on ROOT
- Future particle physics experiments currently developing software based on ROOT
- Other physics projects using ROOT
[edit] References
- ^ The problem with ROOT
- ^ ROOT webpage: ROOT's main features
- ^ ROOT webpage: ROOT Roadmap
- ^ ROOTTALK: 27 July 2006
- ^ ROOTTALK: 28 July 2008
[edit] See also
- CINT
- HippoDraw — an alternative C++-based data analysis system
- Java Analysis Studio — a Java-based AIDA-compliant data analysis system
- R programming language
- AIDA (computing) — open interfaces and formats for particle physics data processing
- PAW
- Particle physics
- CERN
- IGOR Pro
- Scientific computing
- OpenDX
[edit] External links
- The ROOT System Home Page
- ROOT users mailing list
- The Qt/ROOT System Home Page
- GSI Object Oriented On-line Off-line system, an alternative GUI for ROOT based on QT/ROOT.
- OpenScientist a C++-based data analysis system, AIDA-compliant.
- The RooFit Toolkit for Data Modeling, an extension to ROOT to facilitate maximum likelihood fits
- Perl Binding using SWIG
- ROOT Repository for Ubuntu
- ROOT Repository for Debian