PAOLO CAMPIGOTTO - MATTEO PEDROTTI


Prefazione

L'idea di intraprendere uno studio coordinato del genoma umano sorse tra il 1985 e il 1987, nel corso di una serie di congressi scientifici. L'avviamento effettivo del Progetto genoma umano risale, invece, al 1990, grazie ai fondi messi a disposizione negli Stati Uniti da due istituzioni governative, i National Institutes of Health (NIH) e il Departement of Energy (DOE).

Il "Genoma Umano" contiene tutte le istruzioni biochimiche sotto forma di combinazioni delle quattro basi del DNA: adenina, timina, citosina, guanina (A,T,C,G,) per costruire e mantenere in vita un essere umano. Nel 1986 venne varata dalla comunità scientifica internazionale una delle tappe più ambiziose della ricerca biologica: la possibilità di identificare la sequenza nucleotidica del genoma (cioè l'insieme dei geni presenti nel corredo cromosomico di una specie).

Il genoma è la collezione completa di tutto il materiale genetico di un organismo vivente. Il genoma umano è composto da circa 50.000-100.000 geni, localizzati sulle 23 coppie di cromosomi presenti nel nucleo di ciascuna cellula umana. Un singolo cromosoma può arrivare a contenere più di 250 milioni di coppie di basi, mentre l'intero genoma umano, secondo alcune stime, è costituito da circa 3 miliardi di coppie di basi.

L'informatica svolge due servizi importanti per la mappatura del genoma umano:
Il progetto proposto appartiene al primo tipo di servizio. In particolare intende fornire al ricercatore le occorrenze di 8 basi in un dato tratto genomico.
I problemi che sorgono durante l'analisi sono legati ad imperfezioni nelle fasi di laboratorio: è infatti possibile che venga riconosciuta una base invece che un'altra.
A conoscenza di questi rischi, il progetto proponeva, non solo di separare nel tratto genomico le sequenze di 8 basi, ma anche di ipotizzare che una base all'interno della stringa sia stata rilevata in maniera erronea; questo significa che per ogni base della stringa viene calcolata l'occorrenza di 4 possibili stringhe.
In questo modo il ricercatore ha a disposizione la probabilità del numero di occorrenze di una stringa e non più un numero preciso che potrebbe rivelarsi errato.


Programma

Il linguggio utilizzato è stato il Pascal standard.
Si è pensato di implementare le funzionalità in modalità batch in modo che una volta avviato il programma esso produca automaticamente i file di testo contenenti tutte le analisi possibili (2 file standard e da 0 a 16 file jolly).
Il programma sovrascrive ad ogni esecuzione i vecchi file di output.
L'eseguibile è avviato tramite il comando

genoma < file_genoma> [< posizione_jolly>]

dove < file_genoma> è il file che viene letto e < posizione_jolly> e' la posizione del jolly.
Se la posizione_jolly e' 0 nessun file jolly verra' stampato, se e' 9 verranno stampati tutti gli 8 file jolly, infine un numero x compreso tra 1 e 8 rappresentera' la posizione del jolly voluta.

NOTE AGGIUNTIVE: visto l'utilizzo di file di grosse dimensioni, e vista la limitatezza del buffer utilizzabile in Pascal (255 caratteri) si è deciso di stampare a video i MegaByte letti fino a quel momento, in modo che l'utente possa rendersi conto del punto di avanzamento nel file.
I calcoli richiesti influenzano in maniera minima la velocità di lettura (si parla di milionesimi di secondo per le operazioni e di millesimi per l'accesso al file su disco rigido) e forniscono un servizio importante all'utente.


Descrizione delle strutture dati utilizzate

Il progetto e' stato realizzato sfruttando la strutturazione del linguaggio Pascal tramite la creazione di un "main program" che organizza le chiamate alle procedure/funzioni che implementano le varie "azioni" richieste nella traccia.
Per rappresentare i dati ricavati dai files di input si sono utilizzate le seguenti strutture:

Descrizione del codice

Ciascuna azione che si compie sulle strutture sopra descritte e' implementata da una apposita funzione/procedura. Ecco le principali funzioni usate per lavorare nell'albero alfabeto:

Ecco le principali funzioni usate per lavorare nell'albero frequenza:

Infine si descrivono le procedure/funzioni usate per elaborare i dati in modalita' "jolly":

MAIN PROGRAM

1. Inizializzazione:

2. Caricamento:

3. Elaborazione:

4. Stampa file senza jolly:

5. Elaborazione e stampa file jolly