Integrazione di Dati Provenienti da Genotipizzazioni su Larga Scala

UNIVERSITÀ DEGLI STUDI DI VERONA
Facoltà di Scienze MM.FF.NN.
Corso di Laurea Specialistica in Informatica
Tesi di Laurea
Integrazione di Dati Provenienti da
Genotipizzazioni su Larga Scala per lo
Studio di Malattie Multifattoriali
Relatore:
Prof. Carlo Combi
Correlatore:
Prof. Pier Franco Pignatti
Laureando:
Luciano Xumerle
ANNO ACCADEMICO 2003/2004
Riassunto
Presentiamo gli aggiornamenti e le nuove funzionalità apportate ad
un sistema per la Gestione dell’Informazione nella Attività di Ricerca su
Fenotipi Complessi (GIARFC) [Xum03].
Le funzionalità aggiunte sono orientate alla gestione di dati genetici
ottenuti attraverso un metodo di genotipizzazione multipla. La base di dati
è stata arricchita con nuove tabelle per memorizzare le informazioni relative
al metodo di genotipizzazione multipla. Inoltre, sono state implementate le
nuove componenti software necessarie.
È dimostrato l’uso delle nuove funzionalità per la gestione
dell’informazione nel progetto relativo allo studio genetico delle malattie
cardiovascolari.
Indice
1
2
3
Nozioni di Genetica
2
1.1
DNA, Cromosomi e Geni . . . . . . . . . . . . . . . . . . . . . .
2
1.2
Genotipo e Fenotipo . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3
Malattia e Difetto Molecolare . . . . . . . . . . . . . . . . . . . .
3
1.4
Malattie Multifattoriali . . . . . . . . . . . . . . . . . . . . . . .
4
1.5
Le malattie cardiovascolari . . . . . . . . . . . . . . . . . . . . .
6
1.6
La genotipizzazione multipla degli individui . . . . . . . . . . . .
6
Progettazione della base di dati
10
2.1
Lo schema Entità-Relazione (E-R) . . . . . . . . . . . . . . . . .
11
2.2
Lo schema logico . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.3
Lo schema fisico . . . . . . . . . . . . . . . . . . . . . . . . . .
15
I programmi per la gestione dei dati genetici
17
3.1
Il modulo PDB::Strip . . . . . . . . . . . . . . . . . . . . . . . .
17
3.2
Creazione automatica delle tabelle strip <tipo striscetta> . . . .
19
3.3
La memorizzazione delle striscette: db-set-strip.cgi . . . . . . . .
20
3.4
L’estrazione dei dati . . . . . . . . . . . . . . . . . . . . . . . . .
23
4
Discussione
25
5
Sviluppi futuri
27
6
Conclusioni
28
Bibliografia
29
Introduzione
Lo studio delle malattie genetiche complesse rappresenta una delle sfide più attuali
con le quali i ricercatori si stanno confrontando. Le prime difficoltà si incontrano
spesso già nella definizione della malattia da studiare. La stessa manifestazione
potrebbe essere dovuta a cause diverse e/o essere il risultato di diverse patologie.
Avere a disposizione un sempre maggior numero di marcatori genetici potrebbe
essere di aiuto nell’individuare i soggetti suscettibili a sviluppare la patologia
e nel caso di individui affetti di classificare efficientemente la patologia al
fine di indirizzare il trattamento farmacologico. Uno studio genomico richiede
ingenti risorse: si devono caratterizzare clinicamente e geneticamente centinaia di
individui.
Precedentemente,
abbiamo presentato un Sistema per la Gestione
dell’Informazione nella Attività di Ricerca su Fenotipi Complessi in un
Laboratorio di Genetica Umana (GIARFC) [Xum03]. GIARFC è stato utilizzato
per l’inserimento e l’estrazione delle informazioni cliniche e genetiche necessarie
allo studio di asma ed osteoporosi.
Recentemente si è pensato di utilizzare GIARFC anche per lo studio delle
malattie cardiovascolari.
Questo ha aggiunto nuove problematiche relative
alla memorizzazione, estrazione ed inserimento dei dati genetici in quanto
la caratterizzazione genetica degli individui viene svolta tramite un metodo
di genotipizzazione multipla (striscette o strip) fornito dalla Roche Molecular
System [CGP+ 99] con la quale è in corso da anni una collaborazione scientifica.
Lo scopo del lavoro è mostrare come la struttura modulare di GIARFC abbia
permesso di aggiungere alla base di dati ed ai programmi sviluppati in precedenza
1
le parti necessarie per gestire le informazioni genetiche ricavate attraverso le
striscette.
Il lavoro è stato svolto nel laboratorio di Genetica Matematica, della sezione
di Biologia e Genetica, Dipartimento Materno Infantile e di Biologia e Genetica
dell’Università degli Studi di Verona.
1
Nozioni di Genetica
Il fatto che certe caratteristiche siano trasmesse dai genitori ai figli è noto fin dai
tempi antichi. Gregorio Mendel (1822-1884) fu il primo a riconoscere l’esistenza
dei fattori ereditari attraverso diversi esperimenti condotti su Pisum sativum e
Lathyrus odoratus [SGML92].
1.1
DNA, Cromosomi e Geni
I geni sono contenuti all’interno dei cromosomi. Quest’ultimi sono costituiti
da DNA e da una parte proteica con funzione strutturale e regolativa. Il DNA
(acido desossiribonucleico) è una molecola formata da una lunga catena di basi
nucleotidiche (A adenina, T timina, C citosina, G guanina) che contiene l’insieme
dei caratteri ereditari da cui dipendono l’organizzazione delle molecole proteiche
e la regolarità delle reazioni che avvengono nelle cellule [SGML92].
L’uomo è un organismo diploide (ogni cellula porta due copie di ogni
cromosoma); possiede 22 coppie di cromosomi omologhi (uno di provenienza
paterna ed uno di provenienza materna) e 2 cromosomi detti sessuali (X e Y ) per
un totale di 46 cromosomi [SGML92].
2
1.2
Genotipo e Fenotipo
Ogni individuo porta con se 2 copie dello stesso gene (uno su ognuno dei due
cromosomi omologhi). Per ogni gene possono esistere molte varianti, dette alleli,
che costituiscono il pool genico della popolazione (l’insieme di tutti i geni di una
specie, ognuno con tutti i suoi alleli) [SGML92]. I due alleli di un gene (tra quelli
presenti nella popolazione) portati da un individuo vanno a costituire il genotipo
dell’individuo per quel gene. Un individuo è detto omozigote se entrambi gli
alleli di un gene sono identici, mentre è eterozigote se i 2 alleli sono diversi fra
loro [SGML92].
Il fenotipo di un individuo riferito ad un carattere è la forma che viene
mostrata (osservabile) e può essere espressa sia in termini qualitativi (ad esempio,
affetto/non affetto) che quantitativi (ad esempio, altezza, peso). La relazione tra
genotipo e fenotipo può essere più o meno stretta. Nel caso di una relazione diretta
tra genotipo e fenotipo si parla di carattere mendeliano mentre per altri caratteri la
relazione può essere determinata anche da fattori ambientali (fenotipo complesso)
oppure dalla sola componente ambientale [GS02].
1.3
Malattia e Difetto Molecolare
Il patrimonio genetico della specie umana va incontro a continue modificazioni;
questo salvaguarda la capacità di adattamento all’ambiente. Tuttavia, alcune di
queste modificazioni, o mutazioni, possono comportare malattie [BLC+ 01].
Uno degli obiettivi della genetica umana è di identificare la mutazione
(alterazione) genetica che è associabile ad una patologia.
L’alterazione
può verificarsi a livello cromosomico (duplicazioni, delezioni, inversioni di
3
frammenti) o molecolare (ad esempio, sostituzione di un nucleotide sul DNA).
Il difetto molecolare è spesso rilevato grazie a tecniche di biologia molecolare
[BLC+ 01].
Le malattie in relazione alla loro origine possono essere classificate in 3
categorie principali [GS02]:
1. patologie ad esclusiva origine genetica o malattie Mendeliane: seguono
una segregazione (trasmissione del fenotipo o del genotipo attraverso
individui imparentati) Mendeliana (ad esempio la Fibrosi Cistica).
2. patologie ambientali: traumi ed infezioni (ad esempio un incidente
stradale).
3. malattie multifattoriali o poligeniche: gruppo estremamente variabile ed
eterogeneo in relazione al numero di geni e fattori ambientali coinvolti (per
esempio il diabete, l’asma, le malattie cardiovascolari).
Questa classificazione è utile da un punto di vista didattico, ma appare sempre
più inadeguata e semplicistica. Ciò che si osserva è che il contributo delle
componenti geniche e ambientali è variabile nelle diverse malattie [SR99].
1.4
Malattie Multifattoriali
Le malattie multifattoriali sono il risultato di numerose interazioni tra genigeni e geni-ambiente [SH03]. Poichè le malattie complesse si manifestano con
una elevata prevalenza nella popolazione, sono studiate in campo medico con
sempre maggior interesse [GS02]. L’obiettivo primario di una ricerca genetica
4
su malattie multifattoriali è di identificare fattori genetici che possono portare
ad una variazione del rischio malattia. Si vuole capire il ruolo che le varianti
geniche giocano nella determinazione del rischio e la correlazione con il fenotipo
risultante. Poichè ogni singola mutazione in ogni singolo gene potrebbe dare un
piccolo contributo per la determinazione di un profilo di rischio, per ogni soggetto
dobbiamo considerare l’azione di più geni contemporaneamente. Le componenti
geniche devono inoltre essere valutate assieme a quelle ambientali [SH03].
Esistono diverse strategie per ricercare geni associati alle malattie complesse:
attraverso lo studio di geni candidati (scelti sulla base delle conoscenze
biochimiche e fisiologiche che possono legarsi all’eziopatogenesi della malattia)
o tramite scansioni genomiche in cui vengono analizzati molti marcatori lungo
tutto il genoma [WKE04]. Gli studi di associazione sono utilizzati per verificare
una diversa distribuzione della variante genetica in classi diverse di individui (ad
esempio, studio caso-controllo) [Ott99].
Alcuni studi distinti intrapresi dal nostro laboratorio hanno l’obiettivo di
identificare fattori genetici coinvolti nell’asma infantile, nelle alterazioni del
metabolismo osseo e nelle malattie cardiovascolari. Lo studio per l’asma infantile
ha richiesto l’analisi di circa 200 famiglie (∼ 850 individui) dove ogni individuo
è stato caratterizzato geneticamente (genotipizzato) con 400 marcatori disposti
lungo i cromosomi. Uno studio analogo è stato attivato per l’identificazione
di fattori genetici coinvolti nell’osteoporosi (∼ 1700 individui) e nelle malattie
cardiovascolari (∼ 1500 individui per ∼ 120 marcatori genetici).
5
1.5
Le malattie cardiovascolari
Le malattie cardiovascolari (CVD) rappresentano ormai da alcuni decenni un
interessante ambito per la ricerca scientifica sia a livello clinico, vista la notevole
incidenza sulla popolazione mondiale e la quantità di decessi annui, sia da un
punto di vista diagnostico.
I principali fattori di rischio per le CVD nella
popolazione sono il sesso, l’età, il diabete, l’obesità, alti livelli di colesterolo,
ipertensione, fumo di sigaretta e ridotta attività fisica [YII+ 02]. Tramite studi
familiari e di associazione su pazienti a livello genetico e molecolare si cerca
di ottenere informazioni atte a diagnosticare e prevenire per tempo il rischio di
malattie coronariche [SH03].
Grazie alla collaborazione dei clinici che ci forniscono i campioni biologici,
abbiamo a disposizione le informazioni riguardanti i caratteri fenotipici e la
struttura delle famiglie di tutti gli individui.
1.6
La genotipizzazione multipla degli individui
Per lo studio genomico degli individui affetti da CVD è stato adottato un
metodo di genotipizzazione multipla (striscette o strip) fornito dalla Roche
Molecular System [CGP+ 99].
Gli individui sono stati genotipizzati per
circa 120 marcatori distribuiti su quattro tipi diversi di striscetta (“strip A”,
“strip B”, “strip 1” e “strip 2”).
L’utilizzo delle striscette permette di
genotipizzare un individuo per molte SNP (Single Nucleotide Polymorphism)
contemporaneamente [CGP+ 99]. Le SNP sono varianti di sequenza dovute alla
sostituzione di una singola base nucleotidica in una precisa posizione (locus)
lungo la sequenza stessa [SR99]. Le SNP presenti all’interno delle striscette sono
6
localizzate all’interno di geni candidati per lo studio delle malattie cardiovascolari
che sono coinvolti, ad esempio, nell’infiammazione, nel metabolismo lipidico,
nel metabolismo dell’omocisteina, nella coagulazione o nella regolazione della
pressione sanguigna [CGP+ 99].
In Figura 1 (Pag. 8) viene mostrato un esempio in cui sono rappresentati i
profili genetici di 14 individui. Per ogni striscetta viene estratta una stringa binaria
nella quale 1 indica la presenza della banda azzurra sulla striscetta (la variante
allelica è presente per quel marcatore) e 0 una banda bianca (la variante allelica
è assente per quel marcatore). Per esempio, la stringa binaria che corrisponde
alla striscetta del 140 individuo rappresentato in Figura 1 (Pag. 8) inizia con:
10111010111. In una seconda fase, l’informazione presente sulla stringa binaria
viene trasformata nell’informazione relativa ai genotipi dei singoli marcatori. La
conversione è utile e necessaria per poter trattare l’informazione con i programmi
di elaborazione statistica.
Inizialmente la conversione della stringa binaria verso i genotipi
corrispondenti era basata sulle seguenti regole:
• se esiste un solo allele colorato per il marcatore x allora il genotipo è
omozigote (per l’allele stesso);
• altrimenti se esistono due alleli colorati per il marcatore x allora il genotipo
è eterozigote (per i due alleli);
• altrimenti il genotipo è sconosciuto.
Successivamente, quando abbiamo iniziato la genotipizzazione degli individui
utilizzando tutti i tipi di striscetta, abbiamo riscontrato che esistevano alcune
7
Figura 1. Sono rappresentate le genotipizzazioni per 14 individui. Le righe nere
indicano le posizioni degli alleli ed i nomi dei marcatori corrispondenti (nella
figura vengono rilevati 65 alleli). La presenza di una banda colorata (azzurra)
indica la presenza di quel particolare allele per il marcatore corrispondente.
8
striscette per le quali la regola di conversione precedentemente adottata non era
valida. Ad esempio il genotipo del gene Apo-E viene rilevato osservando i due
alleli di ognuno dei due marcatori adiacenti e seguendo la regola della Tabella 1.
genotipo
Apo-E
E2/E2
E3/E3
E4/E4
E2/E3
E2/E4
E3/E4
Marcatore 1
allele
allele
cys112 112arg
1
0
1
0
0
1
1
0
1
1
1
1
Marcatore 2
allele
allele
arg158 158cys
0
1
1
0
1
0
1
1
1
1
1
0
Tabella 1. La codifica adottata per il gene Apo-E. Sono mostrate solo le
combinazioni degli alleli dei due marcatori che sono state osservate in laboratorio.
Un altro esempio si ha con il genotipo di due marcatori presenti nel gene
TNF-α. La codifica del genotipo dipende dalla lettura delle 2 bande per ognuno
dei due marcatori. Nella Tabella 2 è possibile vedere la regola che viene applicata
per la traduzione.
genotipo
TNFa -244GA TNFa -238GA
2/2
2/2
2/2
1/1
2/2
1/2
1/1
2/2
1/2
2/2
1/2
1/2
1/1
1/1
1/2
1/2
1/2
1/1
1/1
1/2
Marcatore 1
allele allele
-244G -244A
0
0
0
0
0
0
0
1
0
1
0
1
1
0
1
0
1
0
1
1
Marcatore 2
allele allele
-238G -238A
0
1
1
0
1
1
0
0
0
1
1
0
0
0
0
1
1
0
0
0
Tabella 2. La codifica per i marcatori del gene TNF-α. Sono mostrate solo le
combinazioni degli alleli dei due marcatori che sono state osservate in laboratorio.
Per poter tradurre tutti i tipi di striscetta abbiamo creato delle tabelle
9
all’interno della base di dati in cui memorizzare come saranno tradotti i diversi
marcatori presenti nelle striscette. Ad ogni tipo di codifica abbiamo associato un
nome univoco, la parte di stringa binaria che sarà letta sulla striscetta, i due alleli
(separati da “;”) del genotipo che risulterà dopo la conversione ed un “header” per
la tabella che verrà restituita in output. Ad esempio, per il gene Apo-E, abbiamo
la Tabella 3.
nome
codifica
apo-e
apo-e
apo-e
apo-e
apo-e
apo-e
stringa
binaria
1001
1011
1111
1010
1110
0110
genotipo
risultante
e2;e2
e2;e3
e2;e4
e3;e3
e3;e4
e4;e4
header
apoe 1;apoe
apoe 1;apoe
apoe 1;apoe
apoe 1;apoe
apoe 1;apoe
apoe 1;apoe
2
2
2
2
2
2
Tabella 3. La tabella per la conversione da tutte le possibili stringhe binarie del
gene Apo-E verso i genotipi corrispondenti.
Supponendo che il valore della stringa binaria per i due alleli dei due marcatori
del gene Apo-E per l’individuo 555 sia 1011, si ottiene il risultato voluto (Tabella
4).
id
555
Tabella 4.
2
apoe 1
e2
apoe 2
e3
stringa binaria
1011
La conversione della stringa binaria in genotipo per il gene Apo-E.
Progettazione della base di dati
La base di dati progettata per GIARFC [Xum03] necessita di alcune aggiunte per
poter memorizzare e gestire le informazioni riguardanti le striscette.
10
2.1
Lo schema Entità-Relazione (E-R)
Lo schema E-R di Figura 2 mostra solamente le estensioni che abbiamo apportato
alla base di dati al fine di rappresentare le informazioni che riguardano le striscette.
Come per le altre entità della base di dati [Xum03], anche il nome delle entità che
rappresentano le striscette hanno un prefisso: “strip”.
Figura 2.
Sullo schema sono mostrati soltanto gli identificatori delle entità.
L’entità strips contiene le informazioni che descrivono i tipi di striscetta come
il nome, il nome dei marcatori e degli alleli presenti con la posizione sulla
striscetta ed il tipo di codifica da adottare per ogni marcatore presente. L’entità
stripcodifica descrive i nomi delle possibili codifiche applicabili ai marcatori
presenti all’interno delle striscette. L’entità strip2genotype descrive la traduzione
dalla stringa binaria al genotipo risultante attraverso il nome della codifica, la
stringa binaria sulla striscetta che rappresenta gli alleli accesi o spenti di un
marcatore della striscetta ed il genotipo corrispondente.
Per
ogni
tipo
di
striscetta
viene
creata
una
tabella
di
nome
strip <tipo striscetta> dove sono memorizzate le singole striscette che
appartengono agli individui presenti nella base di dati. Per ogni tipo si striscetta,
11
un individuo può avere più di una striscetta memorizzata (ad esempio, il
laboratorio ripete l’esperimento), ma solo una deve essere utilizzata durante le
elaborazioni statistiche. Tutte le entità strip <tipo striscetta> sono relazionate
all’entità fml individuo lab in cui sono descritti i codici degli individui nei vari
laboratori [Xum03]. Ogni entità strip <tipo striscetta> descrive le striscette
degli individui attraverso il codice dell’individuo, un campo replica che assegna
un numero univoco ad ogni striscetta di un individuo, la data di inserimento, un
giudizio sulla qualità della striscetta (necessario per generare un report in quanto
il metodo è ancora in fase sperimentale), un commento dell’utente se necessario
ed una serie di attributi all 1 .. all n che rappresentano tutti gli alleli presenti su
quel particolare tipo di striscetta. Con un campo valida è possibile decidere quale
sia la striscetta da utilizzare per le successive elaborazioni statistiche.
2.2
Lo schema logico
La traduzione da un modello concettuale - lo schema E-R - ad un modello logico
- il modello relazionale - da il seguente risultato:
strips(strip, marker, allele, :::::
type, position)
stripcodifica(nome, header)
strip2genotype(nome, strval, geno)
strip ?(id, geno lab, replica, valida, data, giudizio, commento, all 1, ..., all n)
dove con nome-attributo indichiamo la PRIMARY KEY della relazione e
con nome
attributo le FOREIGN KEY. Un vincolo di integrità referenziale o
::::::::::::::::
FOREIGN KEY crea un legame tra i valori di un attributo A1 di una relazione
R1 ed i valori di un attributo A2 di una relazione R2 , imponendo che ogni valore
non nullo assunto dall’attributo A1 nelle righe di R1 sia presente tra i valori assunti
12
dall’attributo A2 della relazione R2 [ACPT99].
La relazione strips descrive le informazioni relative ai diversi tipi di striscetta.
• strip, marker, allele: PRIMARY KEY della relazione. strip indica il tipo di
una striscetta, marker il nome di un marcatore sulla striscetta ed allele il
nome degli alleli dei marcatori.
• :::::
type: è un identificatore esterno riferito alla PRIMARY KEY (l’attributo
nome) della relazione stripcodifica.
É definito come NOT NULL e
definisce il tipo di codifica da adottare per il marcatore corrispondente.
• position: indica la posizione di ogni allele all’interno di una striscetta ed è
definito come NOT NULL. Esiste un vincolo UNIQUE sugli attributi (strip,
marker, position) in quanto vogliamo che in una fissata posizione su una
striscetta sia presente un solo allele.
La relazione stripcodifica descrive le codifiche di conversione dalla stringa
binaria sulla striscetta al genotipo.
• nome: PRIMARY KEY della relazione.
• header: contiene il nome del marcatore che risulta dalla conversione. Il
nome viene usato per generare l’intestazione della tabella che conterrà i
genotipi.
La relazione strip2genotype descrive tutte le possibili traduzioni dalla stringa
binaria di una striscetta verso il genotipo a seconda del tipo di codifica.
13
• nome, strval: PRIMARY KEY della relazione. nome è un identificatore
esterno riferito alla PRIMARY KEY (l’attributo nome) della relazione
stripcodifica. strval è la stringa binaria che deve essere tradotta in genotipo.
• geno: il genotipo che corrisponde a strval per una data codifica. Viene
definito come NOT NULL.
Le relazioni di tipo strip <tipo striscetta> memorizzano le singole striscette
degli individui presenti nella base di dati.
• id, geno lab, replica: PRIMARY KEY della relazione.
id e geno lab
sono identificatori esterni riferiti alla PRIMARY KEY della relazione
fml individuo lab. replica indica il numero univoco della striscetta per un
dato individuo;
• valida: indica se la striscetta corrente è valida o no con valore di
DEFAULT=’f’ (falso);
• data: la data di ultima modifica della striscetta;
• giudizio: un giudizio qualitativo sulla striscetta (ad esempio sfumata, buona,
etc.);
• commento: consente di inserire un promemoria all’utente;
• all 1, ..., all n: sono gli attributi che descrivono tutti gli alleli presenti in una
striscetta. Possono assumere solo valore 0 (allele spento) o 1 (allele acceso).
14
Figura 3.
2.3
Lo schema fisico per la memorizzazione della struttura delle striscette.
Lo schema fisico
Lo schema fisico descrive come sono organizzate fisicamente le informazioni
sulle striscette che saranno memorizzate nella base di dati. Per mezzo di una
rappresentazione grafica (Fig. 3) - ottenuta utilizzando i programmi PostgreSQL
Autodoc [Tay99] e dia [Lar99] - mostriamo, per ogni tabella, il tipo di dato
di ogni attributo e le informazioni previste dal modello relazionale come le
PRIMARY KEY (indicate dal simbolo +) e le FOREIGN KEY (indicate con il
simbolo −). Qualora un attributo appartenesse sia ad una PRIMARY KEY che ad
una FOREIGN KEY, questo viene indicato con il simbolo #.
Le relazioni con nome strip <tipo striscetta> sono rappresentate in Fig. 4a.
Per utilizzare i dati delle tabelle strip <tipo striscetta> all’interno dei
programmi di statistica e per consentire l’estrazione delle informazioni con i
programmi che abbiamo sviluppato in precedenza [Xum03] abbiamo bisogno di
tradurre ogni tabella strip <tipo striscetta> verso una tabella, a cui diamo nome
chr strip <tipo striscetta>, in cui i genotipi sono rappresentati come coppie di
15
(a) Striscetta binaria
Figura 4.
striscetta
(b) Genotipi
striscetta
della
Relazioni per la memorizzazione e conversione in genotipi di una
16
alleli distinti [Xum03]. Un esempio di come sono rappresentate le tabelle con
nome chr strip <tipo striscetta> è in Fig. 4b.
3
I programmi per la gestione dei dati genetici
Per consentire a GIARFC di memorizzare, convertire ed estrarre le informazioni
relative alle striscette abbiamo sviluppato un nuovo modulo Perl ed alcuni
programmi di utilità.
3.1
Il modulo PDB::Strip
Prima di realizzare i nuovi strumenti software - utilizzabili via Web o da riga di
comando - abbiamo sviluppato un modulo Perl di nome PDB::Strip contenente
metodi che permettono di estrarre tutte le informazioni riguardanti i diversi tipi
di striscetta. Tramite i metodi di PDB::Strip possiamo ricavare la posizione
dei marcatori e dei loro alleli sulla striscetta, il tipo di codifica da applicare ad
ogni marcatore, il nome da assegnare a tutti i genotipi che risulteranno dalla
conversione e cosı̀ via.
La classe PDB::Strip viene istanziata per mezzo di un metodo new. Durante
l’inizializzazione della classe il metodo raccoglie tutte le informazioni che
riguardano i tipi di striscetta che sono memorizzati nella base di dati.
• getStripList(): Il metodo ritorna la lista dei tipi di striscetta che sono
presenti nella base di dati;
17
• uniqMarkersList(<tipo striscetta>): Ritorna la lista di marcatori presenti
su <tipo striscetta>;
• getStripAlleleList(<tipo striscetta>): Il metodo ritorna la lista ordinata
degli alleli presenti nelle striscette di tipo “<tipo striscetta>”;
• getMarkerStripStartPosition(<tipo striscetta>):
Per ogni marcatore
presente su <tipo striscetta>, ritorna la posizione degli alleli all’interno
della striscetta;
• getStripMarkerType(<tipo striscetta>): Per ogni marcatore presente su
<tipo striscetta>, ritorna il tipo di codifica da utilizzare per la conversione
dalla stringa binaria al genotipo;
• getAlleleNumber(<tipo striscetta>):
Per ogni marcatore presente su
<tipo striscetta>, ritorna il numero di varianti alleliche presenti;
• getType1HEADER(<tipo striscetta>):
Ritorna
una
lista
contenente il nome che verrà assegnato ai genotipi sulle tabelle
chr strip <tipo striscetta>.
Sono nella forma:
marker[1]_1,
marker[1]_2, ..., marker[n]_1, marker[n]_2.
• getStripTableHEADER(<tipo striscetta>): Ritorna la lista di attributi
all 1 .. all n utilizzata per generare automaticamente le istruzioni SQL
relative alle tabelle di tipo strip <tipo striscetta>;
• getValidStripSQL(<tipo striscetta>):
Genera
l’istruzione
SQL
necessaria per estrarre tutte le striscette valide da una tabella di tipo
strip <tipo striscetta>.
• toGenotipe(<tipo striscetta>, <marcatore>, <stringa binaria>):
Il
metodo che trasforma la sotto stringa binaria <stringa binaria> riferita al
18
marcatore <marcatore> in genotipo. Restituisce una lista con i due alleli
del marcatore oppure 0,0 qualora la trasformazione in genotipo fallisca.
• getStripReplicheID(<tipo striscetta>,
Seleziona
tutte
le
striscette
(valide
<identificatore individuo>):
e
non)
appartenenti
ad
<identificatore individuo> per <tipo striscetta>.
• isDELETEABLE(<tipo striscetta>,
<identificatore individuo>):
Ritorna vero se l’individuo <identificatore individuo> possiede almeno
due striscette per <tipo striscetta> ovvero esistono almeno due repliche
nella tabella strip <tipo striscetta>. Questo per evitare la situazione in cui
cancellando una replica, venga persa ogni informazione di un individuo per
un <tipo striscetta>.
• doRIMUOVI(<tipo striscetta>,
<identificatore individuo>,
<replica>): Rimuove la striscetta numero <replica> appartenente a
<identificatore individuo> per la striscetta <tipo striscetta>.
3.2
Creazione automatica delle tabelle strip <tipo striscetta>
Per definire un nuovo tipo di striscetta all’interno della base di dati dobbiamo,
per prima cosa, popolare la tabella strips con tutti i dati necessari ed
aggiungere le eventuali nuove codifiche di traduzione nelle tabelle stripcodifica
e strip2genotype. Dopo aver definito la struttura della nuova striscetta occorre
creare la corrispondente tabella di nome strip <tipo striscetta>. La nuova tabella
strip <tipo striscetta> viene generata in automatico utilizzando un programma
scritto appositamente: DB-strip create table.
I parametri dati in ingresso
al programma sono la base di dati su cui operare (ad esempio, cvd per i
cardiovascolari) ed il tipo di striscetta (ad esempio, “strip 1”).
19
Attraverso i metodi del modulo PDB::Strip il programma ricava il numero
di alleli presenti sulla striscetta dalla tabelle strip della base di dati e genera la
relativa tabella strip <tipo striscetta>. Se la tabella esiste, il programma non
compie nessuna operazione.
3.3
La memorizzazione delle striscette: db-set-strip.cgi
Utilizzando i metodi del modulo PDB::Strip abbiamo realizzato una interfaccia
Web dinamica,
gestita dal programma db-set-strip.cgi,
che consentire
l’inserimento dei dati genetici degli individui che sono genotipizzati usando i 4
tipi di striscetta.
L’interfaccia permette di scegliere il tipo di striscetta per la quale inserire i dati
degli individui (Fig. 5).
Figura 5.
La pagina mostra l’elenco dei 4 tipi di striscetta disponibili
Dopo aver scelto su quale tipo di striscetta lavorare viene presentato un indice
che mostra tutti gli individui caratterizzabili geneticamente (Fig. 6).
Per ogni individuo è possibile avere più di una striscetta (sono distinte
20
Figura 6. Gli individui che hanno il codice di colore blu hanno almeno una
striscetta inserita, quelli con codice di colore grigio non hanno alcuna striscetta
memorizzata.
attraverso il campo replica) per consentire di mantenere una memoria storica per
le striscette che vengono ripetute (ad esempio, per errori sperimentali). Per ogni
striscetta di un individuo è possibile stabilire, in aggiunta al valore di ogni allele,
se la striscetta è valida, un giudizio sulla striscetta ed un commento facoltativo
(Fig. 7). Per inserire la sequenza di 1 e 0 corrispondente alla striscetta l’utente
utilizza solamente i tasti T AB (per accedere il prossimo campo), 1 e 0: questo
evita di saltare da una parte all’altra della tastiera e consente di velocizzare la fase
di memorizzazione dei dati.
Il programma in automatico provvede ad aggiornare la data di ultima modifica
ed il valore del campo replica nella base di dati.
Durante la registrazione
delle informazioni sulla base di dati, le informazioni di ogni striscetta vengono
verificate per garantire che i valori assegnati ad ogni allele siano o 0 (allele non
colorato sulla striscetta) o 1 (allele colorato). Inoltre viene verificato che per un
21
(a) La pagina per inserire/modificare una striscetta. Per facilitare la gestione del grande
numero di individui presenti nella base di dati, sono forniti due indici per saltare da un
codice all’altro. Il primo indice mostra il codice corrente, i 20 codici precedenti ed i 20
successivi. Il secondo mostra un codice ogni 40 (codice in posizione 1, 41, 81, 121, e cosı̀
via).
(b) Un dettaglio visibile scorrendo in orizzontale la pagina
Figura 7. Inserimento/Modifica di una striscetta. Poichè ci sono molti alleli su
ogni striscetta, la schermata che li mostra è molto larga: è necessario scorrere la
pagina in orizzontale per vedere tutti gli alleli presenti.
individuo esista al massimo una sola striscetta valida; se esistono più striscette
valide il sistema rende valida solo quella con data di ultima modifica più recente
tra quelle rese valide. L’utente può anche decidere di non rendere valida nessuna
striscetta.
22
3.4
L’estrazione dei dati
Le striscette inserite dall’utente attraverso le pagine Web create dinamicamente
da db-set-strip.cgi vengono memorizzate nella base di dati all’interno di tabelle
con nome strip <tipo striscetta>. Le informazioni genetiche contenute nelle
tabelle strip <tipo striscetta> non sono direttamente utilizzabili dai programmi
di statistica che utilizziamo abitualmente: dobbiamo convertire le stringhe di
valori binari in modo da poter utilizzare i due alleli che formano il genotipo di
ogni marcatore sulla striscetta.
Per convertire correttamente tutti i marcatori presenti sulle striscette,
dobbiamo applicare le regole di conversione che sono memorizzate nelle tabelle
strips, stripcodifica e strip2genotype della base di dati.
Utilizzando i metodi forniti dal modulo PDB::Strip abbiamo realizzato il
programma DB-strip_create_tab1. Il programma esegue la conversione
da una tabella di tipo strip <tipo striscetta> (contenente stringhe binarie,
Fig. 4a) verso una tabella chr strip <tipo striscetta> (contenente i genotipi
corrispondenti, Fig. 4b) e riceve, come parametri di ingresso, il nome della base
di dati a cui connettersi (ad esempio, cvd per le malattie cardiovascolari) ed il
nome del tipo di striscetta (ad esempio, “strip 1”) da convertire. Dopo aver creato
una tabella chr strip <tipo striscetta> per ogni tipo di striscetta presente nella
base di dati è possibile riutilizzare il programma di estrazione delle informazioni
(utilizzabile via Web) che abbiamo già sviluppato [Xum03].
Per poter garantire che tutti gli utenti possano estrarre la versione più recente
dei dati memorizzati sulle striscette occorre verificare che l’ultima modifica
apportata ad una tabella strip <tipo striscetta> sia antecedente alla creazione
della corrispondente tabella chr strip <tipo striscetta>. Per verificare questa
23
condizione abbiamo creato una tabella strip create time all’interno della base di
dati, in cui memorizziamo il tipo di striscetta e l’istante di creazione della tabella
chr strip <tipo striscetta>. L’istante di ultima modifica della corrispondente
tabella strip <tipo striscetta> si ricava selezionando il valore massimo dal
campo data presente nella tabella. In questo modo possiamo sempre sapere
se la tabella chr strip <tipo striscetta> è aggiornata oppure no. Quando una
tabella non è aggiornata in fase di estrazione delle informazioni, in automatico
viene eseguito il programma DB-strip_create_tab1 per generare la nuova
tabella chr strip <tipo striscetta>.
Figura 8. Sono mostrati i dati relativi al processore del computer (ha frequenza
di 2400Mz), la dimensione della memoria RAM (pari a 1Gb) ed il tempo
impiegato per eseguire la riga di comando: DB-strip create tab1 cvd “strip 1”.
La scelta di utilizzare le tabelle chr strip <tipo striscetta> e di non usare un
approccio totalmente dinamico durante la fase di estrazione delle informazioni
dalla base di dati è dovuta principalmente a fattori prestazionali. Il processo
di traduzione delle striscette è oneroso computazionalmente in quanto per ogni
24
marcatore e per ogni individuo occorre trovare gli alleli del marcatore sulla
stringa binaria della striscetta e, poi, associare alla stringa binaria degli alleli
il genotipo corrispondente. Considerando che su una striscetta ci sono circa 50
marcatori e che disponiamo di circa 1500 individui, dobbiamo fare ∼ 1500 ∗ 50 =
75000 conversioni per ogni striscetta (nel caso in cui vengano selezionati tutti
i marcatori di ogni striscetta).
Poichè ci sono 4 tipi di striscetta si hanno
∼ 75000 ∗ 4 = 300000 conversioni.
In Figura 8 mostriamo un esempio
di traduzione utilizzando il programma DB-strip_create_tab1: il tempo
speso per compiere l’elaborazione sulla striscetta di tipo “strip 1” è di ∼ 8.5
secondi. Supponendo che, a parità di individui genotipizzati per ogni striscetta
(una situazione non testabile in questo momento), i tempi di traduzione per ogni
singola tabella chr strip <tipo striscetta> siano comparabili, avremmo un tempo
di attesa stimato maggiore di 30 sec.
La soluzione di preparare delle tabelle contenenti i genotipi delle striscette
già tradotti ha permesso di evitare il costo in termini di tempo dovuto alla
conversione dei genotipi.
Il caso peggiore si presenta solo quando tutte le
tabelle chr strip <tipo striscetta> sono meno recenti delle corrispondenti tabelle
strip <tipo striscetta> in quanto tutte le tabelle chr strip <tipo striscetta>
devono essere aggiornate.
4
Discussione
La continua e crescente evoluzione di tecniche utilizzate dalla genomica offrono
sempre più spesso mezzi per la genotipizzazione massiva su larga scala. Questo
implica che diventi sempre più semplice poter produrre informazioni relative ad
un elevato numero di marcatori genetici per un singolo individuo e che si possano
25
caratterizzare un elevatissimo numero di individui in un tempo relativamente
breve. L’elevato rate di genotipizzazione è fortemente dipendente dalla tecnologia
utilizzata ed attualmente ne sono disponibili diverse che basano la loro capacità
di identificare il genotipo su chimiche e supporti diversi. Questo comporta che
l’output prodotto sia codificato in termini della tecnologia utilizzata. La codifica
è inoltre legata alla struttura del supporto. L’operatore poi potrà convertire con
mezzi automatici o manualmente le informazioni in un formato più comodo e
standardizzato.
La genotipizzazione basata su striscette esprime il genotipo in termini di
presenza (1) o assenza (0) di un segnale colorato che è a sua volta legato alla
presenza o assenza del fattore genetico corrispondente. GIARFC è stato cosı̀
arricchito con un modulo sviluppato appositamente per interpretare i genotipi
espressi da stringhe di 0 e 1. Dopo la lettura della stringa i genotipi vengono
identificati in accordo con la sequenza binaria che li esprime. Il nuovo modulo
di GIARFC permette di trasformare i genotipi dall’iniziale formato binario al
formato standard basato sui 2 alleli.
Con la prima versione di GIARFC [Xum03] era possibile inserire e modificare
via Web le informazioni genetiche attraverso un unico formato che prevedeva di
rappresentare i genotipi di ogni marcatore attraverso la memorizzazione nella base
di dati dei due alleli che costituiscono il genotipo dell’individuo.
GIARFC è stato arricchito nella nuova versione con un modulo sviluppato
appositamente che permette di leggere i genotipi espressi in un formato su base
binaria. I genotipi sono identificati in accordo con una determinata sequenza
costituita da 0 ed 1. È stato cosı̀ necessario applicare una procedura di conversione
per trasformare i valori binari inseriti dall’utente nel formato standard che
definisce i genotipi.
26
In prima battuta, la base di dati è stata arricchita con nuove tabelle su cui
memorizzare la struttura ed i dati genetici delle striscette. Successivamente,
abbiamo creato strumenti software orientati alla gestione delle nuove tabelle
contenenti i dati delle striscette.
Attraverso il modulo PDB::Strip abbiamo
realizzato una serie di programmi che permettono di inserire ed estrarre i dati
genetici delle striscette via Web. Dato che il processo di trasformazione è oneroso
a livello computazionale, generiamo in modo automatico delle tabelle con nome
chr strip <tipo striscetta> in cui i dati delle striscette, dopo la conversione,
vengono rappresentati nel formato standard. Per garantire all’utente l’estrazione
dei dati genetici aggiornati abbiamo sviluppato un meccanismo che verifica se
sulle tabelle contenenti le informazioni in formato binario sono state apportate
modifiche o aggiornamenti che obblighino il sistema a rigenerare la tabella che
esprime i genotipi nel formato standard.
Sviluppando nuovi moduli che possono essere aggiunti continuamente a
GIARFC, è possibile raccogliere le informazioni provenienti da diversi metodi
di genotipizzazione e riferirle ad un unico formato standard che può essere preso
come riferimento per le successive elaborazioni statistiche.
5
Sviluppi futuri
Attualmente GIARFC può trattare efficacemente le informazioni relative ad alcuni
formati che descrivono il dato genetico. Tuttavia il sistema è ancora in fase di
sviluppo in quanto esistono alcune funzionalità di difficile utilizzo. È, ad esempio,
in fase di progettazione e sviluppo una interfaccia Web dedicata all’inserimento
e modifica dei dati relativi alla struttura dei diversi tipi di striscetta come la
gestione delle codifiche, dei marcatori e degli alleli sulle striscette. Inoltre le
27
nuove pagine Web sviluppate per trattare le striscette non sono ancora integrate
totalmente con il sistema. L’interfaccia Web per l’estrazione delle informazioni
[Xum03] deve essere potenziata per permettere all’utente di scegliere in modo
più intuitivo i marcatori da estrarre. Questo attualmente non è sempre facile
a causa dell’abbondanza di dati genetici presenti all’interno della base di dati.
Stiamo valutando la possibilità di sviluppare strumenti grafici al fine si sintetizzare
le informazioni.
Per consentire l’inserimento automatico delle informazioni
riguardanti le striscette all’interno della base di dati, si potrebbe sviluppare un
programma in grado di riconoscere l’orientamento e le bande (colorate o no) di
una striscetta attraverso l’utilizzo di un lettore ottico. Questo consentirebbe di
ridurre notevolmente il tempo speso dall’utente durante la memorizzazione delle
striscette.
6
Conclusioni
La nuova versione di GIARFC permette di gestire attraverso la sua interfaccia
Web i dati clinici e genetici. L’utilizzo di un nuovo metodo di genotipizzazione
multipla ha richiesto l’implementazione in GIARFC di nuove procedure per la
memorizzazione e gestione dei dati genetici.
Il sistema GIARFC è attualmente installato su due computer PC compatibili
connessi in una sottorete interna. Il sistema operativo è Debian GNU/Linux.
Uno dei computer ospita il Web server Apache [Fou02] ed i programmi per
la generazione dinamica delle pagine Web di GIARFC, mentre il secondo ha
installato il sistema di basi di dati relazionale è PostgreSQL [pos] ed opera come
Database Server. Il Web server è dotato di due schede di rete; una dedicata alla
rete pubblica ed una alla rete privata. Il linguaggio utilizzato per sviluppare tutto
28
RIFERIMENTI BIBLIOGRAFICI
il software prodotto è il Perl [Wal].
Le nuove estensioni applicate a GIARFC hanno permesso di trattare i dati
relativi alle striscette mantenendo inalterate le peculiarità del sistema stesso:
• GIARFC è scalabile: è sempre possibile aggiungere nuove funzionalità per
supportare nuove tecniche di genotipizzazione;
• il sistema può essere utilizzato per lo studio di più patologie: attualmente
viene utilizzato per la gestione delle informazioni per lo studio di asma,
osteoporosi e malattie cardiovascolari;
• per l’utente finale è disponibile una interfaccia Web le cui pagine sono
finalizzate al trattamento dei diversi formati di dato genetico.
• GIARFC è portabile su una qualunque architettura per la quale siano
disponibili il Web server Apache, il sistema di basi di dati PostgreSQL ed il
linguaggio Perl;
• GIARFC utilizza esclusivamente software Open Source.
Riferimenti bibliografici
[ACPT99] P. Atzeni, S. Ceri, S. Paraboschi e R. Torlone. Basi di dati: concetti,
linguaggi e architetture. McGraw-Hill Italia (1999).
[BLC+ 01] Franca Dagna Bricarelli, Faustina Lalatta, Romeo Carrozzo, Mario
Lituania, Simona Cavani e Umberto Nicolini. Filo diretto con le
malattie genetiche, volume 2. UTET (2001).
29
RIFERIMENTI BIBLIOGRAFICI
[CGP+ 99] Suzanne Cheng, Michael A. Grow, Cèline Pallaud, William Klitz,
Henry A. Erlich, Sophia Visvikis, John J. Chen, Clive R. Pullinger,
Mary J. Malloy, Gèrard Siest e John P. Kane.
“A multilocus
genotyping assay for candidate markers of cardiovascular disease
risk”. Genome Research, vol. 9: pp. 936–949 (oct 1999).
[Fou02]
The Apache Software Foundation. “Apache” (1999-2002).
[GS02]
GlaxoSmithKline e SIGU. Incontri 3 - Dalla Ricerca Genetica alla
pratica clinica.
GlaxoSmithKline e Società Italiana di Genetica
Umana (2002).
[Lar99]
Alexander Larsson. “Dia - a diagram drawing program” (1999).
[Ott99]
Jurg Ott. Analysis of Human Genetic Linkage. Johns Hopkins Univ
Pr (1999).
[pos]
“Postgresql - a sophisticated object-relational dbms”.
[SGML92] David T. Suzuki, Anthony J. F. Griffiths, Jeffrey H. Miller e
Richard C. Lewontin. Genetica, principi di analisi formale. Zanichelli
(1992).
[SH03]
J. W. Stephens e S. E. Humphries.
“The molecular genetics of
cardiovascular disease: clinical implications”. Journal of Internal
Medicine, vol. 253(2): pp. 120–127 (feb 2003).
[SR99]
Tom Strachan e Andrew P. Read. Human Molecular Genetics, 2nd
Edition. BIOS Scientific Publishers (1999).
[Tay99]
Rod Taylor. “Postgresql autodoc” (1999).
[Wal]
Larry Wall. “perl - practical extraction and report language”.
30
RIFERIMENTI BIBLIOGRAFICI
[WKE04] M. Wills-Karp e S. L. Ewart.
“Time to draw breath: asthma-
susceptibility genes are identified”.
Nat Rev Genet., vol. 5(5):
pp. 376–387 (may 2004).
[Xum03]
Luciano Xumerle.
Gestione dell’Informazione nella Attività di
Ricerca su Fenotipi Complessi in un Laboratorio di Genetica Umana.
Tesi di laurea, Università degli Studi di Verona, Facoltà di Scienze
MM.FF.NN. - Corso di Laurea in Informatica (sep 2003).
[YII+ 02]
Y. Yamada, H. Izawa, S. Ichihara, F. Takatsu, H. Ishihara,
H. Hirayama, T. Sone, M. Tanaka e M. Yokota. “Prediction of the risk
of myocardial infarction from polymorphisms in candidate genes”. N.
Engl. J. Med., vol. 347(24): pp. 1916–1923 (Dec 2002).
31