/* * Questo e' l'esempio di una macro che definisce una nuova funzione per ROOT. * La funzione prende come argomento il nome di un file. * Essa apre il file, immette i dati letti in un istogramma e termina * restituendo l'istogramma cosi' riempito. * Per caricare la funzione, bisogna dare dal prompt di ROOT il comando * .L randread.c * da questo punto la funzione sara' accessibile dalla riga di comando. * Ad esempio sara' possibile riempire un istogramma e disegnarlo dando da * riga di comando la sequenza: * TH1F istogramma; * istogramma = randread("NomeDelFile"); * istogramma.Draw(); */ TH1F randread(char* filename) { /* Definiamo la variabile histogram essere un oggetto di tipo TH1F (istogramma ad 1 dimensione, contenente float) */ TH1F histogram; FILE* f; int i=0; float xin; /* Definizione dei canali dell'istogramma: 100 canali iniziando da x=0. fino a x=100. */ histogram.SetBins(100,0.,10.); /* Ricordarsi sempre di verificare che il file sia stato aperto correttamente! */ if ( (f=fopen(filename,"r")) ) { /* fscanf resituisce il valore EOF se arriva alla fine del file: non c'e' bisogno di sapere a priori quante righe ci sono! */ while ( fscanf(f," %d %f \n",&i,&xin)!=EOF ) { /* Se si e' riusciti a leggere qualcosa dal file, allora bisogna usare il valore per riempire l'istogramma. */ histogram.Fill(xin); } fclose(f); } /* Fissa un massimo per la scala delle y, lo mettiamo al numero di punti diviso 10. */ histogram.SetMaximum((i+1.)/10.); /* Restituisci l'istogramma. */ return histogram; }