Guida esame ROOT

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

5 dicembre 2024

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()