Grid simulation (AliEn) Network data transfer model Eugen Mudnić Technical university Split -FESB.
ROOT - FESB
Transcript of ROOT - FESB
![Page 1: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/1.jpg)
ROOTROOTBertrand Bellenot, Axel Naumann
CERNCERN
![Page 2: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/2.jpg)
What's ROOT?
CSC08 • ROOT 2
![Page 3: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/3.jpg)
What's ROOT?
CSC08 • ROOT 3
![Page 4: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/4.jpg)
What's ROOT?
CSC08 • ROOT 4
![Page 5: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/5.jpg)
What's ROOT?
CSC08 • ROOT 5
![Page 6: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/6.jpg)
ROOT: An Open Source Project• Started in 1995• 11 full time developers at CERN plus11 full time developers at CERN, plus
Fermilab, Agilent Tech, Japan, MIT (one each)each)
• Large number of part-time developers: let users participateusers participate
• Available (incl. source) under GNU LGPL
CSC08 • ROOT 6
![Page 7: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/7.jpg)
ROOT in a NutshellF k f l l d h dliFramework for large scale data handlingProvides, among others,
– an efficient data storage, access and query system (PetaBytes)
(– advanced statistical analysis algorithms (multi dimensional histogramming, fitting, minimization and cluster finding)and cluster finding)
– scientific visualization: 2D and 3D graphics, Postscript PDF LateXPostscript, PDF, LateX
– geometrical modeller– PROOF parallel query engine
CSC08 • ROOT 7
– PROOF parallel query engine
![Page 8: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/8.jpg)
Graphics
CSC08 • ROOT 8
![Page 9: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/9.jpg)
Histogramming• Histogram is just occurrence counting, i.e.
how often they appeary pp• Example: {1,3,2,6,2,3,4,3,4,3,5}
CSC08 • ROOT 9
![Page 10: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/10.jpg)
Histogramming• How is a Real Histogram Made?
Lets consider the age distribution of the gparticipants:
Binning:
Grouping ages ofGrouping ages of participants in several categoriesseveral categories (bins)
CSC08 • ROOT 10
![Page 11: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/11.jpg)
HistogrammingTable of Ages(binned)
Shows distribution of ages, total number of entries (57 participants) and average: 27
CSC08 • ROOT 11
entries (57 participants) and average: 27 years 10 months 6 days…
![Page 12: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/12.jpg)
HistogramsAnalysis result: often a histogram
Menu:View / EditorView / Editor
CSC08 • ROOT 12
![Page 13: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/13.jpg)
FittingAnalysis result:
often a fitbased on a histogramg
CSC08 • ROOT 13
![Page 14: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/14.jpg)
FitFunction describing the distribution of dataFit = optimization in parameters,p p ,
e g Gaussian2
2
]2[2])1[(
]0[)( ⋅−
−
⋅=x
exfe.g. GaussianFor Gaussian: [0] = "Constant"
[1] = "Mean"
]0[)( exf
[1] Mean[2] = "Sigma" / "Width"
Objective: choose parameters [0], [1], [2] to get function as close as possible to histogram
CSC08 • ROOT 14
function as close as possible to histogram
![Page 15: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/15.jpg)
Fit
[2] (sigma)
Gaussian fit over our histogram:
[0] (constant)
2])1[( −x
[0] (constant)
2]2[2])[(
]0[)( ⋅−
⋅= exf
CSC08 • ROOT 15[1] (mean)
![Page 16: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/16.jpg)
Fit PanelTo fit a histogram:right click histogramright click histogram,"Fit Panel"
Straightforward interface for fitting!
CSC08 • ROOT 16
![Page 17: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/17.jpg)
2D/3DWe have seen 1D histograms, but there are also histograms in more dimensionsalso histograms in more dimensions.
CSC08 • ROOT 17
2D Histogram 3D Histogram
![Page 18: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/18.jpg)
2D FittingExample of a fit over a 2D histogram
CSC08 • ROOT 18
![Page 19: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/19.jpg)
OpenGL• OpenGL can be used to render 2D & 3D
histograms, functions, parametric equations, and to visualize 3D objects (geometry)
CSC08 • ROOT 19
![Page 20: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/20.jpg)
OpenGL
CSC08 • ROOT 20
![Page 21: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/21.jpg)
Geometry• Describes complex detector geometries• Allows visualization of these detectorAllows visualization of these detector
geometries with e.g. OpenGL• Optimized particle transport in complex• Optimized particle transport in complex
geometriesW ki i l ti ith i l ti• Working in correlation with simulation packages such as GEANT3, GEANT4 and FLUKAFLUKA
CSC08 • ROOT 21
![Page 22: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/22.jpg)
Geometry
CSC08 • ROOT 22
![Page 23: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/23.jpg)
EVE (Event Visualization Environment)• Event: Collection of data from a detector (hits,
tracks, …), )Use EVE to:• Visualize these physics objects together with• Visualize these physics objects together with
detector geometry (OpenGL)Vi ll i t t ith th d t l t• Visually interact with the data, e.g. select a particular track and retrieve its physical
tiproperties
CSC08 • ROOT 23
![Page 24: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/24.jpg)
EVE
CSC08 • ROOT 24
![Page 25: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/25.jpg)
Math TMVA
SPlot
CSC08 • ROOT 25
![Page 26: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/26.jpg)
Multivariate Analysis• Consider this simple question: How to
estimate someone’s life expectancy? p y• This depends on many variables:
Life style Sex (m/f)
Country(region)
Life style Sex (m/f)
Life expectancy
Genetics Income
expectancy
CSC08 • ROOT 26
…
![Page 27: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/27.jpg)
Multivariate Analysis• Many variables? Parallel Coordinates
• This will not help to solve the problem, it only allows to visualize multiple variables
CSC08 • ROOT 27
allows to visualize multiple variables
![Page 28: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/28.jpg)
Multivariate Analysis• Sample described by k variables (that are
found to be discriminating)• Samples can be classified
into n categories: H1 … HnH2
x2
1 n• E.g.
– H1 : life exp. < 40H1
H31 p– H2 : life exp. 40..60– H3 : life exp. > 60
x1Example: k=2, n=3
• Example: k=2 variables x1, x2n=3 categories H1, H2, H3
CSC08 • ROOT 28
g 1, 2, 3
![Page 29: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/29.jpg)
Multivariate AnalysisProblem: Find boundaries between H1, H2, and
H3 such that f(x) returns the category of x with 3 ( ) g ymaximum correctness
Non-linear BoundariesLinear Boundaries ?Rectangular Cuts ?
H2x2H2
x2H2x2
H1H3
H1H3
H1H3
x1x1x1
Simple example I can do it by hand.
Large input variable space, complex
CSC08 • ROOT 29
g p p pcorrelations: manual optimization very difficult
![Page 30: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/30.jpg)
Multivariate AnalysisGeneric problem: find category for set of valuesTo make such an estimation we need twoTo make such an estimation, we need two
phases:• (Supervised) learning / training phase:• (Supervised) learning / training phase:
– Take samples for which categories are known M hi d t t i th ll t l ifi ti– Machine adapts to give the smallest classification error on training sample
P i h• Processing phase:– The trained system can now analyze and produce
t t f lCSC08 • ROOT 30
output for any new sample
![Page 31: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/31.jpg)
TMVA• Framework offering a collection of data mining
tools, e.g. NN (Neural Network), GA (Genetic , g ( ), (Algorithm), …
• In HEP mostly two class problems – signal (S)• In HEP mostly two class problems – signal (S) and background (B)– Physics processes– Finding physics objects– Detector readout– ...
CSC08 • ROOT 31
![Page 32: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/32.jpg)
Interlude: HELP!ROOT is a framework – only as good as its
documentation.User's Guide (it has your answers!)
h // hhttp://root.cern.ch“What is TNamed? What functions does itWhat is TNamed? What functions does it
have?”R f G idReference Guide
http://root cern ch/root/htmlCSC08 • ROOT 32CSC08 • ROOT 32
http://root.cern.ch/root/html
![Page 33: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/33.jpg)
Let's fire up ROOT!
CSC08 • ROOT 33CSC08 • ROOT 33
![Page 34: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/34.jpg)
Setting Up ROOTBefore starting ROOT:
setup environment variables $PATH, p $ ,$LD_LIBRARY_PATH
Go to where ROOT is:$ d / th t / t
(ba)sh:
$ cd /path-to/root
$ . bin/thisroot.sh(ba)sh: (t)csh: $ source bin/thisroot.csh
$ . bin/thisroot.sh
CSC08 • ROOT 34CSC08 • ROOT 34
![Page 35: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/35.jpg)
Starting Up ROOTROOT is prompt-based$ root$ rootroot [0] _
Prompt speaks C++p p
root [0] gROOT->GetVersion();↵( t h * 0 5 f7 8)"5 16/00"(const char* 0x5ef7e8)"5.16/00"
CSC08 • ROOT 35CSC08 • ROOT 35
![Page 36: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/36.jpg)
ROOT As Pocket CalculatorCalculations:
t [0] t(42)root [0] sqrt(42)(const double)6.48074069840786038e+00
t [1] d bl l 0 17root [1] double val = 0.17;root [2] sin(val)(const double)1.69182349066996029e-01
Uses C++ Interpreter CINT
CSC08 • ROOT 36CSC08 • ROOT 36
![Page 37: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/37.jpg)
Running CodeTo run function mycode() in file mycode.C:root [0] .x mycode.C
Equivalent: load file and run function:
[ ] y
root [0] .L mycode.Croot [1] mycode()
Quit:root [0] .q
All of CINT's commands (help):t [0] h
[ ] q
CSC08 • ROOT 37CSC08 • ROOT 37
root [0] .h
![Page 38: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/38.jpg)
ROOT PromptWhy C++ and not a scripting language?!You'll write your code in C++ too Support forYou ll write your code in C++, too. Support for python, ruby,… exists.
Why a prompt instead of a GUI?Why a prompt instead of a GUI?
ROOT is a programming framework, not an ffi it U GUI h d doffice suite. Use GUIs where needed.
CSC08 • ROOT 38CSC08 • ROOT 38
![Page 39: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/39.jpg)
Running CodeMacro: file that is interpreted by CINT (.x)
int mymacro(int value){{int ret = 42;ret += value;ret + value;return ret;
}
E t ith (42)
}
CSC08 • ROOT 39CSC08 • ROOT 39
Execute with .x mymacro.C(42)
![Page 40: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/40.jpg)
Compiling Code: ACLiCLoad code as shared lib, much faster:.x mymacro.C++(42)
Uses the system's compiler, takes seconds
.x mymacro.C++(42)
Subsequent .x mymacro.C+(42) check for changes, only rebuild if needed
Exactly as fast as e.g. Makefile based stand-alone binary!y
CINT knows types, functions in the file, e.g. call
CSC08 • ROOT 40CSC08 • ROOT 40
mymacro(43)
![Page 41: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/41.jpg)
Compiled versus InterpretedWhy compile?Faster execution CINT has limitationsFaster execution, CINT has limitations, validate code.
Why interpret?Faster Edit → Run → Check result → EditFaster Edit Run Check result Edit cycles ("rapid prototyping").Scripting is sometimes just easier.Scripting is sometimes just easier.
Are Makefiles dead?
CSC08 • ROOT 41CSC08 • ROOT 41
Yes! ACLiC is even platform independent!
![Page 42: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/42.jpg)
A Little C[++]Hopefully many of you know – but some don't.• Object constructor assignmentObject, constructor, assignment• Pointer, reference
S d t t• Scope, destructor• Stack vs. heap• Inheritance, virtual functions
If you use C++ you have to understand these concepts!
CSC08 • ROOT 42CSC08 • ROOT 42
concepts!
![Page 43: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/43.jpg)
Objects, Constructors, =Look at this code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed mySecond;mySecond = myObject;mySecond myObject;cout << mySecond.GetName() << endl;
CSC08 • ROOT 43CSC08 • ROOT 43
![Page 44: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/44.jpg)
Objects, Constructors, =Look at this code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed mySecond;mySecond = myObject;mySecond myObject;cout << mySecond.GetName() << endl;
Creating objects:1. Constructor TNamed::TNamed(const1. Constructor TNamed::TNamed(const
char*, const char*)2 Default constructor TNamed::TNamed()CSC08 • ROOT 44CSC08 • ROOT 44
2. Default constructor TNamed::TNamed()
![Page 45: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/45.jpg)
Objects, Constructors, =Look at this code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed mySecond;mySecond = myObject;mySecond myObject;cout << mySecond.GetName() << endl;
3. Assignment:myObjectmySecond
TNamed:fName "name"fTitle "title"
y jTNamed:fName ""fTitle ""
y
CSC08 • ROOT 45CSC08 • ROOT 45
fTitle "title"fTitle ""
![Page 46: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/46.jpg)
Objects, Constructors, =Look at this code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed mySecond;mySecond = myObject;mySecond myObject;cout << mySecond.GetName() << endl;
3. Assignment: creating a twinmyObjectmySecond
= TNamed:fName "name"fTitle "title"
TNamed:fName ""fTitle ""
TNamed:fName "name"fTitle "title"
y jy
CSC08 • ROOT 46CSC08 • ROOT 46
fTitle "title"fTitle "" fTitle "title"
![Page 47: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/47.jpg)
Objects, Constructors, =Look at this code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed mySecond;mySecond = myObject;mySecond myObject;cout << mySecond.GetName() << endl;
4. New contentmySecond
output:TNamed:fName "name"fTitle "title"
y
"name"
CSC08 • ROOT 47CSC08 • ROOT 47
fTitle "title"
![Page 48: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/48.jpg)
Pointer, ReferenceModified code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed* pMySecond = 0;pMySecond = &myObject;pMySecond &myObject;cout << pMySecond->GetName() << endl;
Pointer declared with "*", initialize to 0
CSC08 • ROOT 48CSC08 • ROOT 48
![Page 49: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/49.jpg)
Pointer, ReferenceModified code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed* pMySecond = 0;pMySecond = &myObject;pMySecond &myObject;cout << pMySecond->GetName() << endl;
myObjectAssignment: point to myObject; no copy
TNamed:fName "name"fTitle "title"
y j
= & [address]pMySecond
fTitle "title"
CSC08 • ROOT 49CSC08 • ROOT 49
![Page 50: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/50.jpg)
Pointer, ReferenceModified code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed* pMySecond = 0;pMySecond = &myObject;pMySecond &myObject;cout << pMySecond->GetName() << endl;
Assignment: "&" creates reference:myObject
= & TNamed:fName "name"fTitle "title"
[address]
y jpMySecond
CSC08 • ROOT 50CSC08 • ROOT 50
fTitle "title"
![Page 51: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/51.jpg)
Pointer, ReferenceModified code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed* pMySecond = 0;pMySecond = &myObject;pMySecond &myObject;cout << pMySecond->GetName() << endl;
Access members of value pointed to by "->"Access members of value pointed to by >
CSC08 • ROOT 51CSC08 • ROOT 51
![Page 52: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/52.jpg)
Pointer, ReferenceModified code:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed* pMySecond = 0;pMySecond = &myObject;pMySecond &myObject;cout << (*pMySecond).GetName() << endl;
Or dereference pointer by "*"Or dereference pointer by and then access like object with "."
CSC08 • ROOT 52CSC08 • ROOT 52
![Page 53: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/53.jpg)
Pointer, ReferenceChanges propagated:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed* pMySecond = 0;pMySecond = &myObject;pMySecond &myObject;pMySecond->SetName("newname");cout << myObject GetName() << endl;
Pointer forwards to object
cout << myObject.GetName() << endl;
Pointer forwards to objectName of object changed – prints "newname"!
CSC08 • ROOT 53CSC08 • ROOT 53
![Page 54: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/54.jpg)
Object vs. PointerCompare object:TNamed myObject("name", "title");TNamed myObject( name , title );TNamed mySecond = myObject;cout << mySecond GetName() << endl;
t i t
cout << mySecond.GetName() << endl;
to pointer:TNamed myObject("name", "title");TNamed* pMySecond = &myObject;cout << pMySecond->GetName() << endl;
CSC08 • ROOT 54CSC08 • ROOT 54
![Page 55: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/55.jpg)
Object vs. Pointer: ParametersCalling functions: object parameter obj gets
copied void funcO(TNamed obj);pfor function call!
void funcO(TNamed obj);
TNamed myObject;funcO(myObject);
Pointer parameter: only address passed
funcO(myObject);
Pointer parameter: only address passed,no copy void funcP(TNamed* ptr);
TNamed myObject;funcP(&myObject);
CSC08 • ROOT 55CSC08 • ROOT 55
![Page 56: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/56.jpg)
Object vs. Pointer: ParametersFunctions changing parameter: funcO can only
access copy! void funcO(TNamed obj){pycaller notchanged!
void funcO(TNamed obj){obj.SetName("nope");
}gfuncO(caller);
Using pointers (or references) funcP can change void funcP(TNamed* ptr){caller
( p ){ptr->SetName("yes");
}
CSC08 • ROOT 56CSC08 • ROOT 56
funcP(&caller);
![Page 57: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/57.jpg)
ScopeScope: range of accessibility and C++ "life".Birth: constructor death: destructorBirth: constructor, death: destructor{ // birth: TNamed() calledTNamed n;TNamed n;
} // death: ~TNamed() called
Variables are valid / accessible only in scopes:int a = 42;int a = 42;{ int a = 0; }
t << << dl
CSC08 • ROOT 57CSC08 • ROOT 57
cout << a << endl;
![Page 58: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/58.jpg)
ScopeFunctions are scopes:void func(){ TNamed obj; }void func(){ TNamed obj; }
func();cout << obj << end; // obj UNKNOWN!
must not returnTNamed* func(){TNamed obj;
pointers tolocal variables!
TNamed obj;return &obj; // BAD!
}
CSC08 • ROOT 58CSC08 • ROOT 58
}
![Page 59: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/59.jpg)
Stack vs. HeapSo far only stack:TNamed myObj("n","t");
Fast, but often < 10MB. Only survive in scope.
TNamed myObj( n , t );
Heap: slower GBs (RAM + swap) creation andHeap: slower, GBs (RAM + swap), creation and destruction managed by user:
TNamed* pMyObj = new TNamed("n","t");delete pMyObj; // or memory leak!
CSC08 • ROOT 59CSC08 • ROOT 59
![Page 60: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/60.jpg)
Stack vs. Heap: FunctionsCan return heap objects without copying:TNamed* CreateNamed(){TNamed CreateNamed(){// user must delete returned obj!TNamed* ptr = new TNamed("n","t");
t b t TN d bj t till th h
TNamed ptr new TNamed( n , t );return ptr; }
ptr gone – but TNamed object still on the heap, address returned!TNamed* pMyObj = CreateNamed();cout << pMyObj->GetName() << endl;
CSC08 • ROOT 60CSC08 • ROOT 60
delete pMyObj; // or memory leak!
![Page 61: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/61.jpg)
InheritanceClasses "of same kind" can re-use functionalityE g TPlate TBowl both dishes:E.g. TPlate, TBowl both dishes:class TPlate: public TDish {...};class TBowl: public TDish { };
Can implement common functions in TDish:
class TBowl: public TDish {...};
Can implement common functions in TDish:class TDish {public:public:void Wash();
};
CSC08 • ROOT 61CSC08 • ROOT 61
};
![Page 62: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/62.jpg)
Inheritance: The BaseUse TPlate, TBowl as dishes:
assign pointer of derived to pointer of base g p p"every plate is a dish"TDish *a = new TPlate();TDish a new TPlate();TDish *b = new TBowl();
But not every dish is a plate, i.e. the inverse doesn't work. And a bowl is totally not a plate!y pTPlate* p = new TDish(); // NO!TPlate* q = new TBowl(); // NO!
CSC08 • ROOT 62CSC08 • ROOT 62
TPlate q new TBowl(); // NO!
![Page 63: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/63.jpg)
Virtual FunctionsOften derived classes behave differently:
class TDish {class TDish { ...virtual bool ForSoup() const;
}};class TPlate: public TDish { ...bool ForSoup() const {return false;}
};class TBowl: public TDish { ...bool ForSoup() const {return true;}
CSC08 • ROOT 63CSC08 • ROOT 63
};
![Page 64: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/64.jpg)
Pure Virtual FunctionsBut TDish cannot know! Mark as "not
implemented"pclass TDish { ...virtual bool ForSoup() const = 0;virtual bool ForSoup() const 0;
};
Only for virtual functions.Cannot create object of TDish anymore (oneCannot create object of TDish anymore (one
function is missing!)
CSC08 • ROOT 64CSC08 • ROOT 64
![Page 65: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/65.jpg)
Calling Virtual FunctionsCall to virtual functions evaluated at runtime:void FillWithSoup(TDish* dish) {if (dish->ForSoup())dish->SetFull();
W k f t t d
();}
Works for any type as expected:TDish* a = new TPlate();TDish* b = new TBowl();FillWithSoup(a); // will not be full
CSC08 • ROOT 65CSC08 • ROOT 65
FillWithSoup(b); // is now full
![Page 66: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/66.jpg)
Virtual vs. Non-VirtualSo what happens if non-virtual?class TDish { ...class TDish { ...bool ForSoup() const {return false;}
};
Will now always call TDish::ForSoup() i e false
};
Will now always call TDish::ForSoup(), i.e. falsevoid FillWithSoup(TDish* dish) {if (di h F S ())if (dish->ForSoup())dish->SetFull();
CSC08 • ROOT 66CSC08 • ROOT 66
}
![Page 67: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/67.jpg)
Congrats!
You have earned yourself theFine print:* c m s with lif lYou have earned yourself theCSC08 ROOT C++ Diploma.* comes with lifelong
subscription, pFrom now on you may useC++with t f li l t!*
pthis diploma is worth nothing
if not x cis d ula lyC++without feeling lost!*if not exercised regularly
CSC08 • ROOT 67CSC08 • ROOT 67
![Page 68: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/68.jpg)
SummaryWe know:• why and how to start ROOTwhy and how to start ROOT• C++ basics
th t d ith " "• that you run your code with ".x"• can call functions in libraries• can (mis-) use ROOT as a pocket calculator!
Lots for you to discover during next two lectures and especially the exercises!
CSC08 • ROOT 68CSC08 • ROOT 68
and especially the exercises!
![Page 69: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/69.jpg)
Saving DataSaving Data
Streaming, Reflection, TFile,Schema EvolutionSchema Evolution
CSC08 • ROOT 69CSC08 • ROOT 69
![Page 70: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/70.jpg)
Saving ObjectsCannot do in C++:TNamed* o; TNamed* p;TNamed o; TNamed p;o = new TNamed("name", "title");std::write("file.bin", "obj1", o);p = std::read("file.bin", "obj1");p->GetName();
E.g. LHC experiments use C++ to manage dataNeed to write C++ objects and read them backNeed to write C++ objects and read them backstd::cout not an option: 15PetaBytes / year of
processed data (i e data that will be read)CSC08 • ROOT 70CSC08 • ROOT 70
processed data (i.e. data that will be read)
![Page 71: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/71.jpg)
Saving Objects – Saving TypesWhat's needed?TNamed* o;TNamed* o;o = new TNamed("name", "title");std::write("file.bin", "obj1", o);
Store data members of TNamed; need to know:
( , j , )
1) type of object2) data members for the type2) data members for the type3) where data members are in memory4) d th i l f it t di kCSC08 • ROOT 71CSC08 • ROOT 71
4) read their values from memory, write to disk
![Page 72: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/72.jpg)
SerializationStore data members of TNamed: serialization1) type of object: runtime-type-information RTTI1) type of object: runtime type information RTTI2) data members for the type: reflection3) h d t b i3) where data members are in memory:
introspection4) read their values from memory, write to disk:
raw I/O
Complex task and C++ is not your friend
CSC08 • ROOT 72CSC08 • ROOT 72
Complex task, and C is not your friend.
![Page 73: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/73.jpg)
ReflectionNeed type description (aka reflection)1 types sizes members1. types, sizes, members
class TMyClass {
TMyClass is a class. float fFloat;Long64_t fLong;
Members:"fFloat" type float size 4 bytes
};
– fFloat , type float, size 4 bytes– "fLong", type Long64_t, size 8 bytes
CSC08 • ROOT 73CSC08 • ROOT 73
![Page 74: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/74.jpg)
Platform Data TypesFundamental data types (int, long,…):
size is platform dependentp p
Store "long" on 64bit platform writing 8 bytes:Store long on 64bit platform, writing 8 bytes:00, 00, 00, 00, 00, 00, 00, 42
R d 32bit l tf "l " l 4 b tRead on 32bit platform, "long" only 4 bytes:00, 00, 00, 00
Data loss, data corruption!
CSC08 • ROOT 74CSC08 • ROOT 74
, p
![Page 75: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/75.jpg)
ROOT Basic Data TypesSolution: ROOT typedefs
Signed Unsigned sizeof [bytes]h hChar_t UChar_t 1
Short_t UShort_t 2Int_t UInt_t 4Long64 t ULong64 t 8Long64_t ULong64_t 8Double32_t float on disk,
double in RAMCSC08 • ROOT 75CSC08 • ROOT 75
double in RAM
![Page 76: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/76.jpg)
ReflectionNeed type description (platform dependent)1 types sizes members1. types, sizes, members2. offsets in memory class TMyClass {
float fFloat;Long64_t fLong;
ress – 16
– 14};
lass
y A
ddr
fLong– 12– 10
8
TMyC
emor
y – 8– 6– 4
PADDING "fFloat" is at offset 0"fL " i t ff t 8
CSC08 • ROOT 76CSC08 • ROOT 76
Me fFloat– 2
– 0"fLong" is at offset 8
![Page 77: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/77.jpg)
I/O Using Reflectionmembers memory disk
ess – 16
14
ass
Add
re
fLong– 14– 12– 10
TMyCla
mor
y A
– 8– 6– 4
PADDING
T
Mem fFloat
– 4– 2– 0
CSC08 • ROOT 77CSC08 • ROOT 77
![Page 78: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/78.jpg)
C++ Is Not JavaLesson: need reflection!Where from?Where from?
J t d t b ithJava: get data members with Class.forName("MyClass").getFields()
C++: get data members with BE CAREFUL
– oops. Not part of C++. THIS LANGUAGEHAS NO BRAIN
USE YOUR OWN
CSC08 • ROOT 78CSC08 • ROOT 78
USE YOUR OWN
![Page 79: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/79.jpg)
ROOT And ReflectionSimply use ACLiC:
L MyCode cxx+
C t lib ith fl ti d t ("di ti ")
.L MyCode.cxx+
Creates library with reflection data ("dictionary") of all types in MyCode.cxx!
Dictionary needed for interpreter, tooy p ,ROOT has dictionary for all its types
CSC08 • ROOT 79CSC08 • ROOT 79
![Page 80: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/80.jpg)
Back To Saving Objects: TFileROOT stores objects in TFiles:
TFile* f = new TFile("file.root", "NEW");
TFile behaves like file system:f->mkdir("dir");
TFile has a current directory:
f->mkdir( dir );
TFile compresses data ("zip"):
f->cd("dir");
TFile compresses data ( zip ):f->GetCompressionFactor()2.61442160606384277e00
CSC08 • ROOT 80CSC08 • ROOT 80
![Page 81: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/81.jpg)
Saving Objects, ReallyGiven a TFile:TFile* f = new TFile("file.root", "RECREATE");
W it bj t d i i f TObj t
( , );
Write an object deriving from TObject:object->Write("optionalName")
"optionalName" or TObject::GetName()
Write any object (with dictionary):f >W it Obj t( bj t " ")
CSC08 • ROOT 81CSC08 • ROOT 81
f->WriteObject(object, "name");
![Page 82: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/82.jpg)
"Where Is My Histogram?"TFile owns histograms, graphs, trees
(due to historical reasons):( )TFile* f = new TFile("myfile.root");TH1F* h = new TH1F("h","h",10,0.,1.);( , , , , )h->Write();TCanvas* c = new TCanvas();c->Write();
h automatically deleted: owned by file
c >Write();delete f;
h automatically deleted: owned by file.c still there. names unique!
CSC08 • ROOT 82CSC08 • ROOT 82
TFile acts like a scope for hists, graphs, trees!
![Page 83: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/83.jpg)
Risks With I/OPhysicists can loop a lot:For each particle collisionFor each particle collision
For each particle createdF h d t t d lFor each detector module
Do something.Physicists can loose a lot:Run for hoursRun for hours…
Crash.E thi l t
CSC08 • ROOT 83CSC08 • ROOT 83
Everything lost.
![Page 84: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/84.jpg)
Name CyclesCreate snapshots regularly:
MyObject;1MyObject;1MyObject;2…MyObject; 5427MyObject
Write() does not replace but append!but see documentation TObject::Write()
CSC08 • ROOT 84CSC08 • ROOT 84
but see documentation TObject::Write()
![Page 85: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/85.jpg)
The "I" Of I/OReading is simple:
TFile* f = new TFile("myfile.root");TH1F* h = 0;f->GetObject("h", h);h->Draw();delete f;
Remember:
delete f;
Remember:TFile owns histograms!file gone histogram gone!
CSC08 • ROOT 85CSC08 • ROOT 85
file gone, histogram gone!
![Page 86: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/86.jpg)
Ownership And TFilesSeparate TFile and histograms:
TFile* f = new TFile("myfile.root");TH1F* h = 0;TH1::AddDirectory(kFALSE);f->GetObject("h", h);h->Draw();h >Draw();delete f;
… and h will stay around.
CSC08 • ROOT 86CSC08 • ROOT 86
![Page 87: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/87.jpg)
Changing Class – The ProblemThings change:
class TMyClass {class TMyClass {float fFloat;Long64 t fLong;Long64_t fLong;
};
CSC08 • ROOT 87CSC08 • ROOT 87
![Page 88: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/88.jpg)
Changing Class – The ProblemThings change:
class TMyClass {class TMyClass {double fFloat;Long64 t fLong;Long64_t fLong;
};
Inconsistent reflection data, mismatch in memory, on disky,
Objects written with old version cannot be readNeed to store reflection with data to detect!CSC08 • ROOT 88CSC08 • ROOT 88
Need to store reflection with data to detect!
![Page 89: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/89.jpg)
Schema EvolutionSimple rules to convert disk to memory layout1. skip removed membersp
Long64_t fLong;file.root RAM
ignore
2 default-initialize added members
float fFloat; float fFloat;
2. default initialize added members
file.root Long64 t fLong;RAMTMyClass(): fLong(0)
3 convert members where possible
float fFloat;g _ g;
float fFloat;
CSC08 • ROOT 89CSC08 • ROOT 89
3. convert members where possible
![Page 90: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/90.jpg)
Class VersionClassDef() macro makes I/O faster, needed
when deriving from TObjectg jCan have multiple class versions in same fileUse version number to identify layout:Use version number to identify layout:class TMyClass: public TObject {blipublic:TMyClass(): fLong(0), fFloat(0.) {}virtual ~TMyClass() {}...ClassDef(TMyClass,1); // example class
};
CSC08 • ROOT 90CSC08 • ROOT 90
};
![Page 91: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/91.jpg)
Reading FilesFiles store reflection and data: need no library!
function
call
CSC08 • ROOT 91CSC08 • ROOT 91
![Page 92: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/92.jpg)
Powers of ROOT I/O• Can even open TFile("http://myserver.com/afile.root")( p y )including read-what-you-need!
• Nice viewer for TFile: new TBrowserNice viewer for TFile: new TBrowser• Combine contents of TFiles with $ROOTSYS/bin/hadd$ROOTSYS/bin/hadd
CSC08 • ROOT 92CSC08 • ROOT 92
![Page 93: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/93.jpg)
SummaryBig picture:• you know ROOT files – for petabytes of datayou know ROOT files for petabytes of data • you learned what schema evolution is
l d th t fl ti i k f I/O• you learned that reflection is key for I/O
Small picture:• you can write your own data to filesyou can write your own data to files• you can read it back
h th d fi iti f lCSC08 • ROOT 93CSC08 • ROOT 93
• you can change the definition of your classes
![Page 94: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/94.jpg)
ROOT Collection ClassesROOT Collection Classes
![Page 95: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/95.jpg)
Collection ClassesROOT collections polymorphic containers: hold
pointers to TObject, so:p j ,• Can only hold objects that inherit from
TObjectTObject• Return pointers to TObject, that have to be
cast back to the correct subclasscast back to the correct subclassvoid DrawHist(TObjArray *vect, int at){{
TH1F *hist = (TH1F*)vect->At(at);if (hist) hist->Draw();
}
CSC08 • ROOT 95
}
![Page 96: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/96.jpg)
TObjArray• Like vector<TObject *>, supports traditional
array semantics:y– Objects can be directly accessed via an index
with the operator[]p []– Expands automatically when objects are added
CSC08 • ROOT 96
![Page 97: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/97.jpg)
TClonesArrayArray of objects of the
same class ("clones")( )Designed for repetitive
data analysis tasks:data analysis tasks: same type of objects created and deletedcreated and deleted many times.
No comparable class inNo comparable class in STL! The internal data structure of a
TClonesArray
CSC08 • ROOT 97
![Page 98: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/98.jpg)
Traditional ArraysVery large number of new and delete calls in large
loops like this (N(100000) x N(10000) times new/delete):
10000
N(100000)
TObjArray a(10000);while (TEvent *ev = (TEvent *)next()) {
for (int i = 0; i < ev->Ntracks; ++i) {a[i] = new TTrack(x,y,z,...);...
} N(10000)}...a.Delete();
}
( )
CSC08 • ROOT 98
}
![Page 99: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/99.jpg)
You better use a TClonesArray which reduces the number of new/delete calls to only N(10000):TClonesArray a("TTrack", 10000);
N(100000)
while (TEvent *ev = (TEvent *)next()) {for (int i = 0; i < ev->Ntracks; ++i) {
new(a[i]) TTrack(x,y,z,...);new(a[i]) TTrack(x,y,z,...);...
}N(10000)
...a.Delete();
}
Pair of new / delete calls cost about 4 µsAllocating / freeing memory NN(109) times costs about
CSC08 • ROOT 99
g g y ( )1 hour!
![Page 100: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/100.jpg)
ROOT Trees
![Page 101: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/101.jpg)
TreesFrom:Simple data types(e.g. Excel tables)
To:Complex data types(e.g. Database tables)
Event
Header Type
Particles
Pt Charge
Energy Track
VertexVertex
Position
CSC08 • ROOT 101
…
![Page 102: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/102.jpg)
Trees• Databases have row wise access
– Designed to store complete objects.es g ed o s o e co p e e objec s– Data clustering is organized around objects and
containers of objects. j– Can only access the full object (e.g. full event)
• ROOT trees have column wise accessROOT trees have column wise access– Direct access to any event, any branch or any leaf
even in the case of variable length structureseven in the case of variable length structures– Designed to access only a subset of the object
attributes (e.g. only particles’ energy)
CSC08 • ROOT 102
( g y p gy)
![Page 103: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/103.jpg)
Why Trees ?object.Write() convenient for simple objects like
histograms, inappropriate for saving g , pp p gcollections of events containing complex objectsj
• Reading a collection: read all elements (all events)events)
• With trees: only one element in memory, or even only a part of it (less I/O)even only a part of it (less I/O)
CSC08 • ROOT 103
![Page 104: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/104.jpg)
Why Trees ?• Extremely efficient write once, read many
("WORM")( )• Designed to store >109 (HEP events) with
same data structuresame data structure• Trees allow fast direct and random access to
any entry (sequential access is the best)any entry (sequential access is the best)• Optimized for network access
CSC08 • ROOT 104
![Page 105: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/105.jpg)
Building ROOT TreesOverview of
Trees– Trees– Branches
5 t t b ild TT5 steps to build a TTree
CSC08 • ROOT 105
![Page 106: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/106.jpg)
Tree structure
CSC08 • ROOT 106
![Page 107: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/107.jpg)
Tree structure• Branches: directories • Leaves: data containers• Can read a subset of all branches – speeds up
considerably the data analysis processesT l t b ti i d f d t l i• Tree layout can be optimized for data analysis
• The class for a branch is called TBranch• Variables on TBranch are called leaf (yes TLeaf)• Variables on TBranch are called leaf (yes - TLeaf)• Branches of the same TTree can be written to
separate filesseparate files
CSC08 • ROOT 107
![Page 108: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/108.jpg)
Memory ↔ Tree
0 T.GetEntry(6)Memory
Each Node is a branch in the Tree
123456778910111213131415161718 T.Fill()
TCSC08 • ROOT 108
T
![Page 109: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/109.jpg)
Five Steps to Build a TreeSteps:
1 Create a TFile1. Create a TFile 2. Create a TTree3 Add TB h t th TT3. Add TBranch to the TTree4. Fill the tree5. Write the file
CSC08 • ROOT 109
![Page 110: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/110.jpg)
Example macrovoid WriteTree(){
Event *myEvent = new Event();Event *myEvent = new Event();TFile f("AFile.root");TTree *t = new TTree("myTree","A Tree"); t->Branch("EventBranch", myEvent);for (int e=0;e<100000;++e) {
myEvent->Generate(); // hypotheticaly (); // ypt->Fill();
}t->Write();t->Write();
}
CSC08 • ROOT 110
![Page 111: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/111.jpg)
Step 1: Create a TFile Object
Trees can be huge need fileTrees can be huge need file for swapping filled entries
TFile *hfile = new TFile("AFile.root");
CSC08 • ROOT 111
![Page 112: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/112.jpg)
Step 2: Create a TTree Object
The TTree constructor:Tree name (e g "myTree")– Tree name (e.g. myTree )
– Tree title
TTree *tree = new TTree("myTree","A Tree");
CSC08 • ROOT 112
![Page 113: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/113.jpg)
Step 3: Adding a Branch
• Branch name• Branch name• Pointer to the object
Event *myEvent = new Event();myTree->Branch("eBranch", myEvent);
CSC08 • ROOT 113
y ( , y );
![Page 114: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/114.jpg)
Step 4: Fill the Tree • Create a for loop
Assign al es to the object• Assign values to the object contained in each branch
• TTree::Fill() creates a new entry in the tree: snapshot of values of branches’ objects
f (i t 0 <100000 ++ ) {for (int e=0;e<100000;++e) {myEvent->Generate(e); // fill eventmyTree->Fill(); // fill the tree
CSC08 • ROOT 114
}
![Page 115: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/115.jpg)
Step 5: Write Tree To File
myTree->Write();
CSC08 • ROOT 115
![Page 116: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/116.jpg)
Reading a TTree• Looking at a tree
Ho to read a tree• How to read a tree• Friends and chains
CSC08 • ROOT 116
![Page 117: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/117.jpg)
Example macrovoid ReadTree(){Event *myEvent = 0;Event myEvent 0;TFile f("AFile.root");TTree *myTree = (TTree*)f->Get("myTree");T >S tB hAdd ("E tB h"myTree->SetBranchAddress("EventBranch",
myEvent);for (int e=0;e<100000;++e) {
myTree->GetEntry(e);myEvent->Analyze();
}}}
Th i t ( E t) MUST b t t 0CSC08 • ROOT 117
The pointer (myEvent) MUST be set to 0
![Page 118: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/118.jpg)
How to Read a TTree
Example:Example:
1. Open the TfileTFile f("AFile.root")
OR2. Get the TTree
TTree *myTree = 0;f G tObj t(" T "f.GetObject("myTree",myTree)
CSC08 • ROOT 118
![Page 119: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/119.jpg)
How to Read a TTree3. Create a variable pointing to the dataroot [] Event *myEvent = 0;
4. Associate a branch with the variable:root [] myTree->SetBranchAddress("eBranch", myEvent);
5 R d t i th TT5. Read one entry in the TTreeroot [] myTree->GetEntry(0) root [] myEvent->GetTracks()->First()->Dump()[] y () () p()==> Dumping object at: 0x0763aad0, name=Track,
class=TrackfPx 0.651241 X component of the momentumfPy 1.02466 Y component of the momentumfPz 1.2141 Z component of the momentum[...]
CSC08 • ROOT 119
[ ]
![Page 120: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/120.jpg)
Branch Access Selection• Use TTree::SetBranchStatus() to activate only
the branches holding wanted variables.g• Speed up considerably the reading phase
0TClonesArray* myMuons = 0;// disable all branchesmyTree->SetBranchStatus("*", 0);y// re-enable the "muon" branchesmyTree->SetBranchStatus("muon*", 1);myTree->SetBranchAddress("muon" myMuons);myTree >SetBranchAddress( muon ,myMuons);// now read (access) only the "muon" branchesmyTree->GetEntry(0);
CSC08 • ROOT 120
![Page 121: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/121.jpg)
Looking at the TreeTTree::Print() shows the data layout
root [] TFile f("AFile.root")root [] myTree->Print();*******************************************************************************Tree :myTree : A ROOT tree **Entries : 10 : Total = 867935 bytes File Size = 390138 ** : : Tree compression factor = 2.72 ********************************************************************************Branch :eBranch **Entries : 10 : BranchElement (see below) **............................................................................**Br 0 :fUniqueID : **Entries : 10 : Total Size= 698 bytes One basket in memory *y y*Baskets : 0 : Basket Size= 64000 bytes Compression= 1.00 **............................................................................*……
CSC08 • ROOT 121
![Page 122: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/122.jpg)
Looking at the TreeTTree::Scan("leaf:leaf:….") shows the valuesroot [] myTree->Scan("fNseg:fNtrack"); > scan.txt[] y ( g );
root [] myTree->Scan("fEvtHdr.fDate:fNtrack:fPx:fPy","", "colsize=13 precision=3 col=13:7::15.10");
******************************************************************************* Row * Instance * fEvtHdr.fDate * fNtrack * fPx * fPy ******************************************************************************** 0 * 0 * 960312 * 594 * 2.07 * 1.459911346 * 0 0 960312 594 2.07 1.459911346 * 0 * 1 * 960312 * 594 * 0.903 * -0.4093382061 ** 0 * 2 * 960312 * 594 * 0.696 * 0.3913401663 ** 0 * 3 * 960312 * 594 * -0.638 * 1.244356871 ** 0 * 4 * 960312 * 594 * -0.556 * -0.7361358404 ** 0 * 5 * 960312 * 594 * -1.57 * -0.3049036264 ** 0 * 6 * 960312 * 594 * 0.0425 * -1.006743073 ** 0 * 7 * 960312 * 594 * -0.6 * -1.895804524 *
CSC08 • ROOT 122
![Page 123: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/123.jpg)
TTree Selection Syntax
Prints the first 8 variables of the tree.MyTree->Scan();
Prints all the variables of the tree.S l t ifi i bl
MyTree->Scan("*");
Select specific variables:
Prints the values of var1 var2 and var3MyTree->Scan("var1:var2:var3");
Prints the values of var1, var2 and var3.A selection can be applied in the second argument:
MyTree->Scan("var1:var2:var3" "var1>0");
Prints the values of var1, var2 and var3 for the entries where var1 is greater than 0
MyTree >Scan( var1:var2:var3 , var1>0 );
CSC08 • ROOT 123
e e a s g ea e a 0Use the same syntax for TTree::Draw()
![Page 124: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/124.jpg)
Looking at the TreeTTree::Show(entry_number) shows the values
for one entry
root [] myTree->Show(0);======> EVENT:0eBranch = NULLfUniqueID = 0fBits = 50331648[ ][...]fNtrack = 594fNseg = 5964[...]fEvtHdr.fRun = 200[...]fTracks.fPx = 2.066806, 0.903484, 0.695610, -0.637773,...fTracks.fPy = 1.459911, -0.409338, 0.391340, 1.244357,...
CSC08 • ROOT 124
fTracks.fPy 1.459911, 0.409338, 0.391340, 1.244357,...
![Page 125: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/125.jpg)
TChain: the Forest• Collection of TTrees: list of ROOT files containing
the same tree• Same semantics as TTreeAs an example, assume we have three files called
fil 1 t fil 2 t fil 3 t E h t i tfile1.root, file2.root, file3.root. Each contains tree called "T". Create a chain:TChain chain("T"); // argument: tree namechain.Add("file1.root");chain Add("file2 root");chain.Add( file2.root );chain.Add("file3.root");
Now we can use the TChain like a TTree!CSC08 • ROOT 125
Now we can use the TChain like a TTree!
![Page 126: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/126.jpg)
T(3)TChain
T(3)file3.root
T(2)file2.root
T(1)T(1)file1.root
chain files together
CSC08 • ROOT 126
![Page 127: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/127.jpg)
Data Volume & Organisation100MB 1GB 10GB 1TB100GB 100TB 1PB10TB
1 1 500005000500505
TTree TChain
• A TFile typically contains 1 TTree• A TChain is a collection of TTrees or/and TChains• A TChain is typically the result of a query to a file
catalog
CSC08 • ROOT 127
g
![Page 128: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/128.jpg)
Tree Friendst
tree_1 tree_2
tree
n x
i ja b co p
i j
k l x
TFile f1("tree1.root");t AddF i d("t 1" "t 2 t")
q r
tree.AddFriend("tree_1", "tree2.root")tree.AddFriend("tree_2", "tree3.root");tree.Draw("x:a", "k<c");
CSC08 • ROOT 128
tree.Draw("x:tree_2.x", "sqrt(p)<b");
![Page 129: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/129.jpg)
Summary: Trees, basics• TTree is one of the most powerful collections
available for HEP• Extremely efficient for huge number of data
sets with identical layoutsets with identical layout• Very easy to look at TTree - use TBrowser!
W it d (WORM) id l f• Write once, read many (WORM) ideal for experiments' data
• Still: extensible, users can add their own tree as friend
CSC08 • ROOT 129
![Page 130: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/130.jpg)
Splitting
Split level = 0 Split level = 99
CSC08 • ROOT 130
![Page 131: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/131.jpg)
Splitting• Creates one branch per member – recursively• Allows to browse objects that are stored in j
trees, even without their library• Makes same members consecutive, e.g. for , g
object with position in X, Y, Z, and energy E, all X are consecutive, then come Y, then Z,
ffthen E. A lot higher zip efficiency!• Fine grained branches allow fain-grained I/O -
read only members that are needed, instead of full objectS STL i !
CSC08 • ROOT 131
• Supports STL containers, too!
![Page 132: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/132.jpg)
SplittingSetting the split level (default = 99)
Split level = 0 Split level = 99
CSC08 • ROOT 132
tree->Branch("EvBr", &event, 64000, 0 );
![Page 133: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/133.jpg)
Performance ConsiderationsA split branch is:• Faster to read - the type does not have to beFaster to read the type does not have to be
read each time• Slower to write due to the large number of• Slower to write due to the large number of
branches
CSC08 • ROOT 133
![Page 134: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/134.jpg)
Analyzing TreesAnalyzing Trees
Selectors, Analysis, PROOF
CSC08 • ROOT 134CSC08 • ROOT 134
![Page 135: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/135.jpg)
RecapTTree efficient storage and access
for huge amounts of structured datagAllows selective access of dataTTree knows its layoutTTree knows its layout
Almost all HEP analyses based on TTree
CSC08 • ROOT 135CSC08 • ROOT 135
![Page 136: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/136.jpg)
TTree Data AccessTSelector: generic "TTree based analysis"Derive from it ("TMySelector")Derive from it ( TMySelector )ROOT invokes TSelector's functions,U d b t P (TS l t * )Used e.g. by tree->Process(TSelector*,…),
PROOFFunctions called are virtual, thus TMySelector's
functions called.
CSC08 • ROOT 136CSC08 • ROOT 136
![Page 137: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/137.jpg)
TSelectorSteps of ROOT using a TSelector:1 setup Init(TTree*)1. setup Init(TTree )
called to inform selector about tree2 start SlaveBegin()2. start SlaveBegin()
called to create histograms3 P (L 64 t)3. run Process(Long64_t)
called for each entry to load and analyze it4. end Terminate()
called to fit histograms, write them to files,…
CSC08 • ROOT 137CSC08 • ROOT 137
![Page 138: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/138.jpg)
TTree Data AccessE.g.
Init(tree)
tree->Process("MySelector.C+")
SlaveBegin()
Init(tree)
SlaveBegin()
Process(i)Process(i)
t t ?yes
T i t ()
next entry?no
y
CSC08 • ROOT 138CSC08 • ROOT 138
Terminate()
![Page 139: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/139.jpg)
TSelector: Usage• Init(TTree* tree):
e.g. TMySelector::fChain = tree.g ySet branch addresses.
• SlaveBegin(): create histogramsSlaveBegin(): create histograms• Process(Long64_t entry):
fChain >GetTree() >GetEntry(entry);fChain->GetTree()->GetEntry(entry);fill histogramsT i t () fit hi t• Terminate(): fit; save histograms
CSC08 • ROOT 139CSC08 • ROOT 139
![Page 140: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/140.jpg)
Analysis ExampleDetermine trigger efficiencies from data, typical
ingredient in analysesg yTrigger selection before writing data: not all
events availableevents availableUsually higher energy is taken, lower is ignoredE l 15G V t i t ithExample 15GeV muon trigger: events with a
muon > 15GeV transverse momentum ("pT") d dare recorded.
muon p muon pT
CSC08 • ROOT 140CSC08 • ROOT 140beam
![Page 141: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/141.jpg)
Ideal TriggerEfficiency: probability to record an event with a
given (transverse) muon momentumg ( )
eff = triggered/all none alleff = triggered/all
Ideal 15GeVmuon trigger
CSC08 • ROOT 141CSC08 • ROOT 141
![Page 142: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/142.jpg)
Trigger ExampleExample for a trigger from STAR @ BNL
Main properties:l t• plateau
• turn-on• minimum
CSC08 • ROOT 142CSC08 • ROOT 142
![Page 143: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/143.jpg)
Trigger Efficiency From DataLook at data triggered by 15GeV muon trigger:for each event's muon:for each event s muon:
T=triggered, N=not triggered{T} {NTN}{TT}{TNT}{NT}{TT}{T} {NTN}{TT}{TNT}{NT}{TT}…
But this sample doesn't see {N}, {NN}, {NNN},…eff = |T| / all = |T| / (|T| + |N|)But |N| unknown! Cannot determine efficiency!| | yInstead: need muons that are independent of
trigger ("unbiased")
CSC08 • ROOT 143CSC08 • ROOT 143
trigger ( unbiased )
![Page 144: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/144.jpg)
Dice And Tag / ProbeThink of two dice
Want probability for "6" ("6" trigger efficiency)H l t i d d t ll lt h 1 "6"Have only triggered data, all results have >1 "6"
{1,6}, {6,4}, {6,6}, {1,6},…
Solution: one die has 6, the other is unbiased!,
Result: N N T N will yield 1/6CSC08 • ROOT 144CSC08 • ROOT 144
Result: N, N, T, N,… will yield 1/6
![Page 145: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/145.jpg)
Muons And Tag / ProbeSolution: events with >1 muonFor each muon:For each muon:
if exists other muon causing trigger:thi i bi d!this muon is unbiased!
Need trigger decision stored with data, as in:"other muon caused the 15GeV muon trigger"other muon caused the 15GeV muon trigger
CSC08 • ROOT 145CSC08 • ROOT 145
![Page 146: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/146.jpg)
Get Data From TTreeIn TSelector::Init(tree) select branches and
connect tree with our member fMuons:TTree* t = fChain->GetTree();t->SetBranchStatus("*", 0); // all offt >S tB hSt t (" *" 1) // b tt->SetBranchStatus("muons*", 1); // but muonst->SetBranchAddress("muons", fMuons);
TTree::GetEntry(i) will load data from branch muons into fMuons; can access data via fMuons TMySelector
fMuons
TREEmuons
CSC08 • ROOT 146CSC08 • ROOT 146
fMuonsmuons
![Page 147: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/147.jpg)
TClonesArrayfMuons could be TClonesArray:TClonesArray* fMuons; // array of TMuony ; // yclass TMuon: public TObject {public:...float Pt() const;bool Mu15() const; // triggered
Print pT of the i th muon:
};
Print pT of the i-th muon:TMuon* muon = (TMuon*) fMuons->At(i); cout << muon->Pt() << endl;
CSC08 • ROOT 147CSC08 • ROOT 147
cout << muon >Pt() << endl;
![Page 148: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/148.jpg)
Determine EfficiencyTake a random muon number i ("probe")Check that another muon ("tag") has causedCheck that another muon ( tag ) has caused
trigger, then:++ all[probe >pT()]++ all[probe->pT()]if probe muon has triggered:
++fired[probe->pT()]efficiency[pT] = fired[pT] / all[pT]y[p ] [p ] [p ]Counting in pT-bins – use histogramDivision: binomial errors check Wikipedia ; )CSC08 • ROOT 148CSC08 • ROOT 148
Division: binomial errors, check Wikipedia ;-)
![Page 149: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/149.jpg)
ResultDividing probes / tags yields sampled efficiency"Bumpy" because of low numbers of eventsBumpy because of low numbers of events
CSC08 • ROOT 149CSC08 • ROOT 149
![Page 150: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/150.jpg)
Statistics, Or: We Know Better!Sampling "known" distributionInfluenced by statisticsInfluenced by statistics
Missing data
Not monotonic!
CSC08 • ROOT 150CSC08 • ROOT 150
![Page 151: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/151.jpg)
FitCombine our knowledge with statistics / data by
fitting a distribution:g
1 Find appropriate1. Find appropriatefunction withparametersparameters
2. Fit function todistribution
CSC08 • ROOT 151CSC08 • ROOT 151
![Page 152: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/152.jpg)
Fitting: The FunctionFinding the proper function involves:• behavioral analysis:behavioral analysis:
starts at 0, goes to constant, monotonic,…• physics interpretation:• physics interpretation:
"E proportional to sin^2(phi)"h i d k l d f t i l f ti• having a good knowledge of typical functions (see TMath)
• finding a good compromise between generalization ("constant") and precision
CSC08 • ROOT 152CSC08 • ROOT 152
("polynomial 900th degree")
![Page 153: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/153.jpg)
Fitting: The FunctionFinding the proper function involves:• behavioral analysis:behavioral analysis:
starts at 0, goes to constant, monotonic,…• physics interpretation:• physics interpretation:
"E proportional to sin^2(phi)"h i d k l d f t i l f tiMAGIC• having a good knowledge of typical functions (see TMath) MAGIC
• finding a good compromise between generalization ("constant") and precision
CSC08 • ROOT 153CSC08 • ROOT 153
("polynomial 900th degree")
![Page 154: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/154.jpg)
Fitting: ParametersLet's take "erf" erf(x)/2.+0.5
Free parameters:(erf((x-[0])/[1])/2.+0.5)*[2]
[0]: x @ center of the slope[1]: width of the slope[1]: width of the slope[2]: maximum efficiency
[0]
[2]
How do I know?[0]
CSC08 • ROOT 154CSC08 • ROOT 154
Study function behavior [1]
![Page 155: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/155.jpg)
Fitting: Parameter InitNeed to initialize parameters!sensible: [0]: 35 [1]: 10 [2]: 1sensible: [0]: 35, [1]: 10, [2]: 1
CSC08 • ROOT 155CSC08 • ROOT 155
![Page 156: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/156.jpg)
Fitting: The MathFitting = finding parameters such that
f(x) – hist(x)( ) ( )minimal for all x [or any similar measure]
Histogram with errors:f(x) – hist(x) / err(x)[or similar]
CSC08 • ROOT 156CSC08 • ROOT 156
![Page 157: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/157.jpg)
Fitting In ROOTDefine fit function:TF1* f = new TF1("myfit","(TMath::Erf((x-[0])/[1])/2.+0.5)*[2]"0., 100.);
Set parameters:f->SetParameter(0 35 );f >SetParameter(0, 35.);f->SetParameter(1, 10.);f->SetParameter(2, 1.);
Fit it to the histogram:
CSC08 • ROOT 157CSC08 • ROOT 157
hist->Fit(f);
![Page 158: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/158.jpg)
Fitting ResultResult of fit printed orcout << f->GetParameter(0) << endl;
[0]: 34 9
cout << f >GetParameter(0) << endl;
[0]: 34.9[1]: 12.1[2]: 0.98
which means:(TMath::Erf((x-34.9)/12.1)/2.+0.5)*0.98
CSC08 • ROOT 158CSC08 • ROOT 158
Get efficiency at pT=42GeV: f->Eval(42.)
![Page 159: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/159.jpg)
Analysis: RecapWe started with the trigger problem – and
ended with an answer
You now knowYou now know• how to determine trigger efficiency from
t i d d ttriggered data• why large samples are relevant• what fitting is, how it works, when to do it, and
how it's done with ROOT.
CSC08 • ROOT 159CSC08 • ROOT 159
![Page 160: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/160.jpg)
Interactive Data Analysis withPROOF
Bleeding Edge Physics withBleeding Edge ComputingBleeding Edge Computing
![Page 161: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/161.jpg)
Parallel Analysis: PROOFSome numbers (from Alice experiment)• 1 5 PB (1 5 * 1015) of raw data per year1.5 PB (1.5 10 ) of raw data per year• 360 TB of ESD+AOD* per year (20% of raw)
O t 15 MB/ ill t k 9 th !• One pass at 15 MB/s will take 9 months!
Parallelism is the only way out!
CSC08 • ROOT 161
* ESD: Event Summary Data AOD: Analysis Object Data
![Page 162: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/162.jpg)
PROOFHuge amounts of events, hundreds of CPUsSplit the job into N events / CPU!p jPROOF for TSelector based analysis:• start analysis locally ("client")start analysis locally ( client ), • PROOF distributes data and code,• lets CPUs ("workers") run the analysis• lets CPUs ( workers ) run the analysis,• collects and combines (merges) data,
h l i lt l ll• shows analysis results locally• More dynamic than a batch system
CSC08 • ROOT 162
Including on-the-fly status reports!
![Page 163: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/163.jpg)
Interactive!• Start analysis• Watch status while runningWatch status while running• Forgot to create a histogram?
Interr pt the process– Interrupt the process– Modify the selector
R t t th l i– Re-start the analysis
CSC08 • ROOT 163
![Page 164: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/164.jpg)
PROOF
Storage
PROOF fCli t PROOF farmcommands,commands,scriptsscripts
Client
MASTERlist of outputlist of output
objectsobjects(histograms, …)(histograms, …)
CSC08 • ROOT 164
Workers
![Page 165: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/165.jpg)
Creating a sessionTo create a PROOF session from the ROOTprompt just type:prompt, just type:
TProof *p = TProof::Open("master")
where "master" is the hostname of the master machine on the PROOF cluster
CSC08 • ROOT 165
![Page 166: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/166.jpg)
PROOF Analysis• Example of local TChain analysis// Create a chain of trees
PROOF
// Create a chain of treesroot[0] TChain *c = new TChain("myTree");root[1] c->Add("http://www.any.where/file1.root");root[2] c->Add("http://www.any.where/file2.root");PROOFroot[2] c >Add( http://www.any.where/file2.root );
// MySelector is a TSelectorroot[3] c->Process("MySelector.C+");y
CSC08 • ROOT 166
![Page 167: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/167.jpg)
PROOF Analysis• Same example with PROOF// Create a chain of trees// Create a chain of treesroot[0] TChain *c = new TChain("myTree");root[1] c->Add("http://www.any.where/file1.root");root[2] c->Add("http://www.any.where/file2.root");root[2] c >Add( http://www.any.where/file2.root );
// Start PROOF and tell the chain to use itroot[3] TProof::Open("masterURL");proot[4] c->SetProof();
// Process goes via PROOFroot[5] c->Process("MySelector.C+");
CSC08 • ROOT 167
![Page 168: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/168.jpg)
TSelector & PROOF• Begin() called on the client only• SlaveBegin() called on each worker: createSlaveBegin() called on each worker: create
histograms• SlaveTerminate() rarely used; post• SlaveTerminate() rarely used; post
processing of partial results before they are sent to master and mergedsent to master and merged
• Terminate() runs on the client: save results, di l hi tdisplay histograms, …
CSC08 • ROOT 168
![Page 169: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/169.jpg)
PROOF Analysisoutput listSelector (worker)
SlaveBegin()•Create histos, …•Define output list
Process()
preselection analysisOKSlaveTerminate()
•Post-processing
eventbranch
nSelector (client)
branch
leaf
leafleaf
branch
branch
leaf leaf
Begin() Terminate()•Final analysis(fitting, saving …)
leafleaf
1 2 n lastChain
CSC08 • ROOT 169
loop over events
![Page 170: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/170.jpg)
Output List (result of the query)• Each worker has a partial output list• Objects have to be added to the list in j
TSelector::SlaveBegin() e.g.:fHist = new TH1F("h1", "h1", 100, -3., 3.);
• At the end of processing the output list gets
fHist new TH1F( h1 , h1 , 100, 3., 3.);fOutput->Add(fHist);
At the end of processing the output list gets sent to the master
• The Master merges objects and returns themThe Master merges objects and returns them to the client. Merging is e.g. "Add()" for histograms, appending for lists and trees
CSC08 • ROOT 170
g , pp g
![Page 171: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/171.jpg)
Results
At the end of Process() the output list isAt the end of Process(), the output list is accessible via gProof->GetOutputList()
// Get the output listroot[0] TList *output = gProof->GetOutputList();// Retrieve 2D histogram "h2"
1 2 2 2 2root[1] TH2F *h2 = (TH2F*)output->FindObject("h2");// Display the histogramroot[2] h2->Draw();
CSC08 • ROOT 171
![Page 172: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/172.jpg)
PROOF GUI SessionStarting a PROOF GUI session is trivial:
O GUI
TProof::Open()
Opens GUI:
CSC08 • ROOT 172
![Page 173: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/173.jpg)
PROOF GUI Session – ResultsResults accessible via TSessionViewer, too:
CSC08 • ROOT 173
![Page 174: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/174.jpg)
PROOF DocumentationDocumentation available online at
root cern ch/twiki/bin/view/ROOT/PROOFroot.cern.ch/twiki/bin/view/ROOT/PROOFBut of course you need a little cluster of CPUs
Like your multicore laptop!Like your multicore laptop!
CSC08 • ROOT 174
![Page 175: ROOT - FESB](https://reader030.fdocuments.net/reader030/viewer/2022012019/616882fad394e9041f7016aa/html5/thumbnails/175.jpg)
SummaryYou've learned:• analyzing a TTree can be easy and efficientanalyzing a TTree can be easy and efficient• integral part of physics is counting
ROOT id hi t i d fitti• ROOT provides histogramming and fitting• > 1 CPU: use PROOF!
Looking forward to hearing from you:Looking forward to hearing from you:• as a user (help! bug! suggestion!)
d d l !CSC08 • ROOT 175
• and as a developer!