luglio 2010 - Post
Nei prossimi mesi pubblicherò su questo blog le trascrizioni di alcune chiacchierate tenute con persone con cui ho avuto l’onore di lavorare nel mio passato. Comincerò con i responsabili della mia trasformazione da programmatore Fortran in ambiente Linux a programmatore .NET su piattaforma Microsoft: il gruppo di Emulsioni Nucleari dell’Università di Salerno. Si parlerà di sistemi operativi, Internet, compilatori, linguaggi di programmazione e tanto altro ancora.
Arrivederci dunque a Settembre e Buone vacanze a tutti!
![pionevent[1] pionevent[1]](http://dotnetcampania.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/salvatore.metablogapi/2502.pionevent1_5F00_thumb_5F00_467F2292.png)
Nel precedente post, abbiamo visto come PAW sia un potente strumento di analisi interattiva di dati. La persistenza dei dati su hard disk è però una richiesta fondamentale a cui nessuno strumento software di analisi può sottrarsi. PAW offre una soluzione interessante che non mancherà di colpire gli esperti di database.
Supponiamo di partecipare a un esperimento di Fisica. Viene allestito un apparato sperimentale e lo si “accende” per un certo periodo di tempo. L’apparato è costituito da una serie (talvolta anche migliaia) di rivelatori che forniscono in output informazioni in formato digitale. Tutti i dati vengono pre-processati per tenere conto delle calibrazioni dei rivelatori e, poi, immagazzinati da qualche parte. Al CERN di Ginevra esiste un sistema di Storage su nastro davvero impressionante (su Flickr troverete bellissime foto sotto la voce CERN Data Tape) , tuttavia si stanno cominciando ad utilizzare anche database quali Oracle.
A questo punto, i gruppi che hanno collaborato all’esperimento passano alla fase dell’analisi dei dati. Nel caso di esperimenti di particelle elementari, le ricerche possono essere molteplici e tipicamente consistono nella ricerca di eventi rari in un mare di rumore; ad esempio, la creazione e il decadimento di una particella con una particolare signature.
Pensare di utilizzare l’insieme completo dei dati è irrealistico (vedremo tra qualche post la dimensione tipica di un database per un esperimento di questo tipo). Occorre estrarre un sottoinsieme che soddisfi una serie di criteri di selezione che pensiamo descriva bene il processo che stiamo cercando. Come si può estrarre questo sample e come possiamo salvarlo sull’hard disk del nostro pc da studente di fisica? Torniamo indietro nel tempo al 1995 e vediamo la soluzione.
Non avendo a disposizione dei dati reali da leggere, supponiamo che essi siano contenuti in un file testuale (allegato). La kumac crea una n-tupla (con identificativo 100 e titolo “salvatore”) contenente due variabili intere chiamate ix e i iy. Ricordiamo che una n-tupla è una tabella e che ad ogni sua riga corrisponde un evento fisico nell’esperimento.
Estraiamo poi da un file testuale gli eventi da scrivere nella n-tupla.
Per verificare che l’estrazione sia andata bene, creiamo un istogramma (con identificativo 200) e proiettiamo su di esso una delle variabili della n-tupla.
Dopo aver creato e visualizzato altri istogrammi,
creiamo un file di output (pawout.hbook) in cui salviamo tutto quanto creato.
In una sessione successiva di PAW, possiamo caricare il nostro file pawout.hbook ed eventualmente aggiungere nuovi istogrammi.
 |
Ciò che trovo molto interessante è la possibilità di avere in un solo file di output sia le tabelle che gli istogrammi di nostro interesse. Permettetemi un paragone con Excel e Access. In passato ho elaborato (su richiesta di clienti) file di Excel contenenti dati, istogrammi e analisi statistiche sui dati (tutto fatto in vba). Non lo ritengo uno strumento paragonabile a PAW. I dati non sono sicuri, la gestione dei grafici è esoterica (ad esempio eseguire un semplice fit lineare su dei dati), il linguaggio di scripting è arcaico (rispetto a quanto offre la stessa Microsoft). Sicuramente potrete obiettare che è possibile proteggere le celle di un foglio di Excel ma il fatto che di default i dati siano non protetti è fortemente penalizzante. Provo maggiore simpatia per Access (per il mio passato di programmatore vb6) ma ha debolezze analoghe rispetto al suo fratello minore.
Un altro prodotto commerciale che consente un’analisi professionale dei dati è Origin. Si tratta tuttavia di un prodotto commerciale che necessita di un periodo di apprendimento maggiore rispetto a Paw e che soffre di un altro male tipico dei nostri tempi: il moltiplicarsi delle finestre! Già dopo pochi minuti di lavoro, troverete la vostra finestra principale colma di sotto-finestre create da ogni singola operazione! E poi, ancora una volta, i dati sono esposti in celle alla Excel.
Se avete lavorato con Mathematica, MatLab, Labview (o altri prodotti commerciali analoghi) non esitate a lasciare un commento sulla vostra esperienza. Per la sua semplicità, per la solidità delle sue librerie matematiche, per la ricchezza di opzioni nella costruzioni di istogrammi, PAW resta uno strumento insuperato per l’analisi dei dati.
P.S. Per mancanza di tempo, non vi ho mostrato grafici a colori o analisi statistiche sugli istogrammi. Sappiate solo che è tutto altamente configurabile.
PAW (Physics Analysis Workstation) è un’applicazione CERN usata per analizzare e rappresentare graficamente dati. La documentazione disponibile al seguente indirizzo è ottima e vi consentirà in breve tempo di diventare padroni del software. E’ possibile installare PAW anche sotto piattaforma Windows (consiglio fino a Windows XP per evitare bizzarri messaggi di errore) ma il mio suggerimento è di lavorare su una Ubuntu Desktop 9.10 dove sia stato installato l’intero pacchetto cernlib.
Il programma parte da linea di comando e si presenta come una sessione interattiva in attesa di istruzione dell’utente.
Strutture Dati
Ci sono diversi possibilità per organizzare e manipolare dati in PAW:
-
Histograms – Una serie di bin, ciascuno dei quali associati a un valore. Uno degli usi più comuni di un istogramma è rappresentare la distribuzione dei dati in uno o più variabili. Gli istogrammi possono essere mono o bi-dimensionali.
-
Vectors – L’equivalente degli array che ben conosciamo nei linguaggi di programmazione.
-
Ntuples – La classica definizione è quella di un Data Summary Tape (DST) che contenga 10000 eventi relativi a un certo esperimento. Ogni evento consiste di molte variabili (tipicamente nell’ordine delle centinaia) che descrivono completamente un certo stato. Se ci pensate bene, è quella che in un database chiamiamo tabella.
-
Functions – Funzioni mono e bi-dimensionali.
Kumac e Macro
Ogni commando PAW, oltre ad essere eseguito interattivamente, può essere salvato in un file di comandi, chiamato KUMAC. (Kuip MACROS) e successivamente eseguito tramite il comando EXEC. Una macro importante è .pawlogon.kumac che si trova nella home directory scelta per il programma. Tale kumac contiene tutte le nostre impostazioni preferite (pensate ad esempio alle impostazioni di un istogramma) e viene eseguita all’inizio di ogni sessione di PAW.
In allegato troverete due Kumac di esempio.
La prima (Vettori.kumac) è molto semplice nella sintassi; con esso definiamo, assegniamo valori e rappresentiamo graficamente alcuni vettori.
La seconda (histo.kumac) mostra un’altra grande capacità di PAW: eseguire dinamicamente codice Fortran caricato sotto forma di file esterno. L’allegato contiene due file di codice Fortran: il primo (htfun1.f) calcola i valori di una una funzione della variabile x mentre il secondo (urout.f) estrae dei numeri casuali (tramite una funzione delle CERLIB) e con essi riempie l’istogramma 110 definito nella kumac stessa. E’ ovvia che l’istruzione CALL HFILL(110,X,0.,1.) darebbe errore in fase di esecuzione se l’istogramma non fosse stato definito nella kumac.
Riassumendo, con PAW abbiamo a disposizione uno strumento matematico potentissimo per l’analisi dei dati (Ricordate,infatti, che esso è linkato alle CERNLIB!) Possiamo usarlo interattivamente o caricando codice scritto in opportune kumac. E’ possibile invocare codice fortran esterno nel caso di analisi più complesse ed esso stesso sarà in grado di riempire istogrammi.
Il grosso inconveniente è che occorre conoscere il Fortran, Tuttavia, la buona notizia è che PAW è evoluto in un altro framework, chiamato ROOT, che è un interprete di istruzioni C++ (immagino già l’entusiasmo dei lettori!).
Scriverò un altro posto dedicato a PAW, e in particolare sull’I/O.
Settimana di transizione in quanto ho dovuto allestire diverse macchine virtuali che mi serviranno nei post dei prossimi mesi.
- Ubuntu 9.1 Desktop (scaricata sul sito delle VMWare Appliances). Il mio scopo è quello di preparare esempi funzionanti sotto sistemi operativi Windows ma è più semplice per me testare prima tutto sotto Linux e poi spostare i risultati finali su piattaforme Microsoft.
- Windows 2000 (scelta nostalgica), Visual Studio 6.0, Office 2000
- Windows 98, VB runtime (il famoso vbrun che tanto ha afflitto la nostra gioventù) e Office 2000
Alla prossima!
 |
Il FORTRAN 77 è stato il mio primo linguaggio di programmazione (stiamo parlando del 1993-1994). E’ un’evoluzione del Fortran (o FORTRAN), uno dei primi linguaggi di programmazione, essendo stato sviluppato a partire dal 1954, da un gruppo di lavoro guidato da John Backus. Il Fortran è un linguaggio compilato, imperativo, procedurale e con tipizzazione statica delle variabili. Sin dall’inizio, è stato un linguaggio fortemente orientato al calcolo scientifico e numerico. Poiché stiamo parlando di un linguaggio nato oltre 50 anni fa, vi renderete conto che sono stati scritti innumerevoli programmi applicativi con esso e, soprattutto, sono state raccolte immense librerie di funzioni (richiamabili anche da programmi scritti con altri linguaggi di programmazione). Per mia esperienza diretta, nelle facoltà di Fisica è tutt’oggi ancora largamente usato. Il Fortran rimane inoltre il linguaggio di prima scelta per i programmi destinati a girare sui supercomputer, come ad esempio quelli usati per le previsioni meteorologiche, basati sui modelli matematici della fisica dell'atmosfera.
Ecco il codice per generare il famoso “Hello World”:
PROGRAM HELLO
PRINT *, 'Hello, world'
END
Il programma seguente, scritto da Backus e riportato nel manuale per il programmatore del FORTRAN I, legge N numeri e ne calcola il massimo.
DIMENSION A(999)
FREQUENCY 30 (2,1,10), 5(100)
READ 1, N, (A(I), I = 1,N)
1 FORMAT (I3/(12F6.2))
BIGA = A(1)
5 DO 20 I = 2,N
30 IF (BIGA-A(I)) 10,20,20
10 BIGA = A(I)
20 CONTINUE
PRINT 2, N, BIGA
2 FORMAT (22H1THE LARGEST OF THESE NUMBERS IS F7.2)
STOP 77777
Un’applicazione più sensata che richieda l’aiuto di librerie scritte in Fortran può essere la seguente: supponiamo di avere dei punti in input e di voler eseguire un fit polinomiale su di essi. I coefficienti del polinomio calcolato dovranno soddisfare la richiesta di minimizzare il χ² (Chi-Quadro) rispetto ai dati di input. Questa è un’operazione relativamente semplice da eseguire col pacchetto MINUIT delle CERNLIB. Son sicuro che con un software come MATLAB tale calcolo sia altrettanto semplice ma MATLAB è un costoso software a pagamento con una curva di apprendimento molto più lenta di un linguaggio ad alto livello come il Fortran. Analogamente, immagino che Excel consenta di eseguire un calcolo del genere (qui dovete venire voi in mio soccorso se avete esperienze in merito). Tra qualche mese vi mostrerò la mia esperienza col VBA ed Excel, ma già eseguire dei fit lineari e graficarne i risultati non era per nulla un’operazione semplice.
La sintassi del Fortran può apparire bizzarra ai programmatori che abbiano a che fare con linguaggi molto più recenti. E’ pur vero che col tempo sono state apportate modifiche per renderlo più fruibile e robusto. Ad esempio, le variabili i cui nomi cominciavano con le lettere I,J,K,L,M,N potevano essere non dichiarate: compilatore supponeva che esse fossero di tipo intero. Potete solo immaginare a che tipi di pasticci si potesse andare incontro. Venne quindi introdotta un’istruzione IMPLICIT NONE che il programmatore poteva inserire ad inizio del codice per imporre la dichiarazione del tipo di tutte le variabili.
Al seguente indirizzo troverete numerosi esempi di algoritmi scritti in Fortran 77.
Io ho quasi sempre utilizzato il Fortran in ambienti UNIX, Linux. Sotto tali sistemi operativi, il mio consiglio è di usare g77, il compilatore Gnu Fortran. Esso è la combinazione di un front end che traduce le istruzioni scritte in Fortran 77 e di un back end che usa i risultati della traduzione per costruire un file eseguibile. Il back end è lo stesso usato dai compilatori in C,C++ e Objective-C della GNU. Ovviamente, tutto il pacchetto è free software. Segnalo l’esistenza di una versione a 32-bit di g77 installabile sotto piattaforma Windows. Sinceramente, però, non so dirvi di più a riguardo.
Sotto piattaforma Windows, ho utilizzato sia il compilatore Compaq Visual Fortran che quello Intel® Visual Fortran, entrambi integrabili nell’IDE di Visual Studio. Sono entrambi prodotti di altissima qualità ma ovviamente molto costosi.