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