ROOT
# ROOT

ROOT ist eine am CERN entwickelte, objektorientierte freie Software (Lizenz: LGPL, Teile GPL), die zur Analyse von Daten eingesetzt wird. ROOT ist unter anderem unter den Betriebssystemen Linux, Solaris, macOS und Windows lauffähig.

## Geschichte

ROOT wurde 1994 am CERN von René Brun und Fons Rademakers als Nachfolger des in Fortran programmierten Software-Pakets PAW entwickelt, da zu erwarten war, dass diese Software mit den beim LHC auftretenden Datenmengen nicht mehr zurechtkommen würde. Die Entwicklung von PAW wurde inzwischen zugunsten von ROOT eingestellt. Ursprünglich für die Analyse von Daten im Bereich der Teilchenphysik entwickelt, wird ROOT inzwischen auch in anderen Anwendungsbereichen wie z. B. Data-Mining eingesetzt.

## Funktionsumfang

ROOT ist in C++ implementiert und verwendete bis zur Version 5 (einschließlich aller Unterversionen) den C++-Interpreter CINT. Ab Version 6 basiert ROOT auf dem C++ Interpreter Cling, der seinerseits auf dem C++-Compiler Clang und dem Compilerframework LLVM aufbaut. Programme, die das ROOT-Framework verwenden, können entweder nativ durch Einbindung der entsprechenden Bibliotheken und Header kompiliert, oder über den integrierten C++-Interpreter CINT ausgeführt werden.

ROOT weist einen sehr großen Funktionsumfang auf, darunter:

* Bedienung über Konsole und/oder graphische Benutzeroberfläche
* Erstellen von Histogrammen (2D/3D)
* Erstellen von Graphen
* Fitten von Funktionen
* Statistische Datenanalyse
* Zahlreiche mathematische Standard-Funktionen
* 3D-Visualisierungen
* Grafik-Export in zahlreiche Formate wie Postscript, EPS, PDF, PNG u. a.
* Tree-Objekt zur Speicherung von (Roh-)Daten
* Eigenes ROOT-Dateiformat zur Speicherung von ROOT-Objekten
* Unterstützung von Distributed Computing

## C++ Interpreter

### CINT (bis ROOT 5)

Bis ROOT Version 5 war der Kommandozeilen-Interpreter CINT für die Programmiersprachen C++ und C Teil von ROOT. Obwohl CINT für die Verwendung mit anderen Teilen von ROOT konzipiert wurde, kann es ebenso als eigenständige Erweiterung für andere Programme verwendet werden, die einen solchen Interpreter benötigen.

CINT ist eine interpretierte Version für C++ und C, in etwa so, wie BeanShell eine interpretierte Version von Java ist. Zusätzlich zur Funktionalität als Sprachen-Interpreter verfügt es über verschiedene Bash-ähnliche Shell-Funktionen wie Verlauf und Befehlszeilenergänzung. Letzteres basiert stark auf der Reflexion-Unterstützung in ROOT.

Die durch CINT interpretierte Sprache ist in Wirklichkeit eine Mischung aus C und C++ und deckt etwa 95 % ANSI-C und 85 % von C++ ab. Syntaxfehler werden zudem weniger streng geahndet als in C oder C++. So kann der Operator -> einfach durch ein . ersetzt werden, wobei nur eine optionale Warnung ausgegeben wird. Zusätzlich müssen Statements in der Kommandozeile nicht mit einem Semikolon enden. Dies ist nur bei Statements in Makros notwendig.

Seit CINT nicht mehr Teil von ROOT ist, wird das Projekt eigenständig weitergeführt.

### Cling (seit ROOT 6)

Ab Version 6 ist Cling der neue C++-Interpreter von ROOT und C++11 standardkonform. Cling baut auf LLVM und Clang auf.

