Guida esame ROOT

Russo Alessandro, Antonelli Tommaso, Berselli Gregorio
https://github.com/Grufoony/Fisica_UNIBO

17 dicembre 2025

Sommario

Le notazioni utilizzate in questo schema sono ⃗x per rappresntare un generico array x, dim indica sempre una dimensione, xCode indica un codice di root inerente a x, opt indica sempre la stringa di caratteri che ROOT interpreta come opzioni, i indica un indice (o una quantitá indicizzabile), n indica sempre un intero.

1 Istogrammi

TH1F("name", "title", nBins, xmin, xmax)

Dichiarazione di un istogramma 1D

Metodi dei bin:

Estetica:

Operazioni (sia h1 un istogramma):

2 Grafici

TGraph(npoints, ⃗x, ⃗y)
TGraph(filename, *format="%lg %lg", "opt")

da file TGraphErrors(n, x, y, ex, ey) grafico con barre errore TGraphErrors(filename, format="%lg %lg %lg %lg", "opt")

Estetica:

3 Funzioni

TF1("name", "function", xmin, xmax)

nella funzione i parametri vanno indicati con [i]
NB: per funzioni definite a tratti, siano f(x) e g(x) funzioni generiche

        "function" = "f(x)*(x>=a && x<b) + g(x)*(x>=b && x<c) + ..."
    

4 Fitting

Metodo Fit("name", "opt") valido per piú classi. Funzioni predefinite "gaus" "expo" "poln" OptFit:

Metodi:

5 Random

gRandom->SetSeed()

per inizializzare la generazione Distribuzioni predefinite:

6 Canvas

TCanvas("name", "title", "width", "height")

6.1 Legenda

TLegend(x1, y1, x2, y2, "name")

7 List

TList()

8 ROOT Files

TFile("name", "opt")

Options:

Metodi:

9 Benchmark

Metodi:

10 Esempi

10.1 Lettura da file

        ifstream in;
        in.open("maxwell.dat"); //nome del file
        Float_t x,y;
        while (1) {
        in >> x >> y;
        if (!in.good()) break;
        h1->Fill(y);
        }
        in.close();
    

10.2 Scrivere una classe su un ROOT File

In "MyClass.h"
Mettere inheritance: public TObject
Chiamare macro in fondo (prima della chiusura delle parentesi: ClassDef(MyClass, 1))

        class MyClass: public TObject {
        ...
        ClassDef(MyClass, 1) //rende la classe scrivibile sul file ROOT
        };

        In "MyClass.cxx"
        Chiamare macro in fondo: ClassImp(MyClass)

        Se hai fatto questo poi per scriverla sul file: //con A oggetto di MyClass
        1) TFile *file = new TFile("test.root","recreate");
        2) A.Write("A");
        3) file->Close();
    

NB: per usare una classe esterna da ROOT:

        gROOT->LoadMacro("MyClass.cxx++"); //compiling MyClass
    

10.3 Risoluzione o Smearing

10.3.1 A valore fisso
            for(Int_t i=0;i<nGen;i++){
                h[0]->Fill(gRandom->Gaus(fixedValue, res));
            }
        

10.3.2 Con una distribuzione
            for(Int_t i=0;i<nGen;i++){
                h[1]->Fill(gRandom->Gaus(distribution, res));
            }
        

10.4 Efficienza

10.4.1 Costante
            (efficenza del 70%)
            x=gRandom->Gaus(mean, sigma);
            y=gRandom->Rndm();
            if(y<0.7){h1->Fill(x)}
        

10.4.2 Variabile
            TF1 *eff = new TF1(“eff”, "function", min, max);
            x=gRandom->Gaus(mean, sigma);
            y=gRandom->Rndm();
            if(y < eff->Eval(x)) {
                h1->Fill(x)
            }
        

10.4.3 Istogramma dell’efficienza
            TH1F *hEff=new Th1F(*hTot); //hTot istogramma con tutte le x(non solo quelle scartate)
            hEff->Divide(h1, hTot, 1, 1, “B”); //h1 istogramma con solo le x accettate
        

10.5 Compilazione

10.5.1 da ROOT
            .L macro.cpp oppure root [0] gROOT->LoadMacro(“macro.cpp”)
            macro() [per eseguire]
        

10.5.2 da SHELL
            g++ -o ExampleMacro .exe macro.cpp ‘root-config --cflags --libs‘
            ./macro.exe [per eseguire]  //IMPORTANTE: la macro deve contenere un main()