23.01.2015 Views

Studio e sviluppo di metodi computazionali per l'analisi delle ...

Studio e sviluppo di metodi computazionali per l'analisi delle ...

Studio e sviluppo di metodi computazionali per l'analisi delle ...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

UNIVERSITÀ DEGLI STUDI DI PARMA<br />

FACOLTÀ DI SCIENZE<br />

MATEMATICHE, FISICHE e NATURALI<br />

Corso <strong>di</strong> Laurea in Informatica<br />

Tesi <strong>di</strong> Laurea<br />

<strong>Stu<strong>di</strong>o</strong> e <strong>sviluppo</strong><br />

<strong>di</strong> meto<strong>di</strong> <strong>computazionali</strong><br />

<strong>per</strong> l’analisi <strong>delle</strong> conformazioni<br />

<strong>di</strong> molecole<br />

Relatore:<br />

Prof. Alessandro Dal Palù<br />

Can<strong>di</strong>dato:<br />

Tommaso Nanu<br />

Correlatore:<br />

Prof. Pietro Cozzini<br />

Anno Accademico 2010/2011


A mannedda mea Mariantonia<br />

e a thiu Zoseppe.


Ringraziamenti<br />

Sono passati ben cinque anni da quando ho fatto i bagagli e ho lasciato la<br />

mia famiglia, i miei amici e la mia terra <strong>di</strong> origine. Sono parecchi anni.<br />

Se in questo momento sto scrivendo queste poche righe, lo devo tutto ai miei<br />

genitori, Lucia e Tonino. Nei limiti del possibile, mi è stato concesso tutto,<br />

non mi è mai stato fatto mancare niente.<br />

E grazie anche <strong>di</strong> aver concepito la mia sorellona, Susanna. Con lei ho passato<br />

quasi tutti i momenti della mia vita, brutti e belli. Grazie Susà!<br />

Un sentito ringraziamento va al Professor Alessandro Dal Palù che nonostante<br />

mille impegni è riuscito a de<strong>di</strong>care numerose ore alla buona riuscita del lavoro<br />

<strong>di</strong> tirocinio e <strong>di</strong> tesi. Ringrazio anche il Professore Pietro Cozzini <strong>per</strong> la<br />

<strong>di</strong>sponibilità concessa.<br />

Un ringraziamento va a tutti gli amici <strong>di</strong> Olbia e <strong>di</strong> Parma che, in tutti questi<br />

anni, mi hanno sopportato. Un grazie particolare va a Michi: senza <strong>di</strong> lui, a<br />

quest’ora, potrei rotolare solo da una strada in <strong>di</strong>scesa!<br />

i


In<strong>di</strong>ce<br />

Introduzione<br />

v<br />

1 Background 1<br />

1.1 Proteine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />

1.1.1 Caratteristiche strutturali . . . . . . . . . . . . . . . . 2<br />

1.1.2 Sito attivo . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

1.2 Legame chimico e forze intermolecolari . . . . . . . . . . . . . 7<br />

1.2.1 Forze intermolecolari . . . . . . . . . . . . . . . . . . . 8<br />

1.3 Strutture dati fondamentali . . . . . . . . . . . . . . . . . . . 8<br />

1.3.1 Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

1.4 Programmazione a vincoli . . . . . . . . . . . . . . . . . . . . 9<br />

1.4.1 Alberi <strong>di</strong> ricerca . . . . . . . . . . . . . . . . . . . . . . 11<br />

1.5 Drug Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

1.6 Algoritmi <strong>di</strong> Docking . . . . . . . . . . . . . . . . . . . . . . . 14<br />

1.6.1 Algoritmi con corpi rigi<strong>di</strong> . . . . . . . . . . . . . . . . 14<br />

1.6.2 Algoritmi con ligando flessibile . . . . . . . . . . . . . . 14<br />

1.6.3 Docking attraverso simulazione . . . . . . . . . . . . . 15<br />

1.6.4 Panorama del mercato attuale . . . . . . . . . . . . . . 16<br />

2 Scopo della Tesi 19<br />

2.1 Ligand-rotation . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

2.1.1 Analisi dei requisiti . . . . . . . . . . . . . . . . . . . . 21<br />

3 Formalizzazione 23<br />

3.1 Modello del problema a vincoli . . . . . . . . . . . . . . . . . . 24<br />

3.1.1 Variabili . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

3.1.2 Dominio <strong>delle</strong> variabili . . . . . . . . . . . . . . . . . . 24<br />

3.1.3 Vincoli implementati . . . . . . . . . . . . . . . . . . . 25<br />

3.2 Visita dello spazio <strong>di</strong> ricerca . . . . . . . . . . . . . . . . . . . 25<br />

3.2.1 Albero <strong>di</strong> ricerca . . . . . . . . . . . . . . . . . . . . . 26<br />

3.3 Generazione <strong>delle</strong> conformazioni . . . . . . . . . . . . . . . . . 27<br />

iii


iv<br />

INDICE<br />

3.4 Rotazione <strong>di</strong> un legame . . . . . . . . . . . . . . . . . . . . . . 32<br />

3.5 Esplorazione del sito attivo della proteina . . . . . . . . . . . . 34<br />

3.5.1 Construzione <strong>delle</strong> basi ortonormali . . . . . . . . . . . 35<br />

3.5.2 Generazione ligan<strong>di</strong> base . . . . . . . . . . . . . . . . . 35<br />

3.5.3 Campionamento <strong>di</strong> S . . . . . . . . . . . . . . . . . . . 36<br />

4 Dettagli implementativi 37<br />

4.1 Inizializzazione <strong>di</strong> ligand-rotation . . . . . . . . . . . . . . . . 37<br />

4.1.1 Acquisizione informazioni <strong>di</strong> configurazione . . . . . . . 38<br />

4.1.2 Struttura file mol2 . . . . . . . . . . . . . . . . . . . . 40<br />

4.2 Strutture dati del risolutore . . . . . . . . . . . . . . . . . . . 41<br />

4.2.1 Matrice <strong>di</strong> Vicinanza . . . . . . . . . . . . . . . . . . . 42<br />

4.2.2 Discretizzazione <strong>di</strong> un sottoinsieme limitato <strong>di</strong> R 3 . . . 42<br />

4.2.3 Celle contenenti atomi ‘vicini’ . . . . . . . . . . . . . . 45<br />

4.3 Algoritmo <strong>di</strong> ligand-rotation . . . . . . . . . . . . . . . . . . . 46<br />

4.3.1 Parte I: inizializzazione . . . . . . . . . . . . . . . . . . 47<br />

4.3.2 Parte II: generazione conformazioni . . . . . . . . . . . 48<br />

4.4 Consistenza del vincolo . . . . . . . . . . . . . . . . . . . . . . 50<br />

4.4.1 Verifica dei vincoli . . . . . . . . . . . . . . . . . . . . 51<br />

4.5 Accenni <strong>di</strong> Complessità . . . . . . . . . . . . . . . . . . . . . . 51<br />

5 Risultati 53<br />

5.1 Applicazioni possibili . . . . . . . . . . . . . . . . . . . . . . . 54<br />

5.2 Efficienza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />

5.2.1 Variazione parametri qualitativi . . . . . . . . . . . . . 57<br />

5.3 Confronti su visite . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

5.3.1 DFS sul grafo della molecola . . . . . . . . . . . . . . . 60<br />

5.3.2 Mo<strong>di</strong>fica della DFS: first fail . . . . . . . . . . . . . . . 62<br />

6 Conclusioni e Sviluppi futuri 65<br />

6.1 Molecole contenenti cicloesano . . . . . . . . . . . . . . . . . . 66<br />

6.1.1 Cicloesano . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

6.1.2 Nuovi gra<strong>di</strong> <strong>di</strong> libertà . . . . . . . . . . . . . . . . . . . 68<br />

6.2 Espansione modello a vincoli . . . . . . . . . . . . . . . . . . . 68<br />

6.2.1 Controllo lunghezza legame . . . . . . . . . . . . . . . 68<br />

6.2.2 Implementazione propagazione dei vincoli . . . . . . . 68<br />

Bibliografia 71


Introduzione<br />

La costruzione <strong>di</strong> un farmaco capace <strong>di</strong> interagire correttamente con la causa<br />

<strong>di</strong> una malattia è un compito molto complesso. Durante le fasi iniziali, dopo<br />

aver in<strong>di</strong>viduato il processo biologico su cui intervenire <strong>per</strong> mo<strong>di</strong>ficare il decorso<br />

della malattia, ricercatori e me<strong>di</strong>ci selezionano alcuni composti guida,<br />

ossia potenziali can<strong>di</strong>dati <strong>per</strong> il principio attivo del farmaco.<br />

Un composto guida, precursore <strong>di</strong> un futuro farmaco, viene stu<strong>di</strong>ato e<br />

testato meticolosamente. Una prima fase prevede che venga s<strong>per</strong>imentato su<br />

colture <strong>di</strong> cellule, in modo da attestarne l’efficacia e il grado <strong>di</strong> sicurezza<br />

<strong>per</strong> l’organismo. Dopo aver su<strong>per</strong>ato i test della fase precedente, ha inizio lo<br />

stu<strong>di</strong>o su animali e uomo.<br />

La ricerca del composto guida non è semplice; si possono seguire molte<br />

strade. Per esempio, si possono analizzare le attività farmacologiche possedute<br />

da estratti <strong>di</strong> piante, si può partire dalla valutazione degli effetti collaterali<br />

<strong>di</strong> altri farmaci già in commercio oppure si può seguire un metodo s<strong>per</strong>imentale,<br />

usato in chimica farmaceutica, consistente nello stu<strong>di</strong>o della relazione<br />

struttura-attività della molecola in esame.<br />

Un approccio utilizzato negli ultimi vent’anni consiste nella progettazione<br />

<strong>di</strong> nuovi farmaci a partire dalle simulazioni <strong>delle</strong> interazioni tra farmaco<br />

e recettore. Ciò è possibile grazie alle nuove tecnologie informatiche e al<br />

progre<strong>di</strong>re <strong>delle</strong> conoscenze <strong>di</strong> farmacologia molecolare.<br />

Attualmente esistono numerosi pacchetti software in grado <strong>di</strong> progettare<br />

molecole in modo efficiente. Tuttavia, esiste una lacuna insita nel loro algoritmo<br />

<strong>di</strong> costruzione dovuta non ad un errore <strong>di</strong> programmazione o all’utilizzo<br />

<strong>di</strong> modelli scorretti (cioè le soluzioni ottenute sono, pur sempre, atten<strong>di</strong>bili),<br />

bensì all’elevato numero <strong>di</strong> falsi positivi generati dai suddetti algoritmi,<br />

che potrebbero, quin<strong>di</strong>, causare la <strong>per</strong><strong>di</strong>ta <strong>di</strong> potenziali composti guida. In<br />

breve, un falso positivo è una molecola con struttura tri<strong>di</strong>mensionale geometricamente<br />

corretta accettata da un pacchetto <strong>di</strong> docking e rifiutata da un<br />

altro. Ciò è causato dai <strong>di</strong>versi approcci su cui si basano i programmi, in<br />

particolare dal <strong>di</strong>fferente algoritmo utilizzato <strong>per</strong> il calcolo dell’energia <strong>delle</strong><br />

molecole che verificherà se il composto guida, all’interno del target proteico,<br />

v


vi<br />

INDICE<br />

è energeticamente stabile.<br />

Nel presente lavoro <strong>di</strong> tesi, in collaborazione con il Dipartimento <strong>di</strong> Chimica<br />

e il Dipartimento <strong>di</strong> Matematica dell’Università <strong>di</strong> Parma, verrà presentata<br />

una possibile soluzione al problema evidenziato esibendo un programma esente<br />

dal <strong>di</strong>fetto che andrà a costruire geometricamente dei potenziali principi<br />

attivi.<br />

Nel capitolo 1 verranno introdotte e descritte le conoscenze <strong>di</strong> base, utili<br />

<strong>per</strong> capire al meglio le argomentazioni trattate in questa tesi, e i meto<strong>di</strong><br />

matematico-informatici utilizzati nella formalizzazione e nella implementazione<br />

del pacchetto software. Nel capitolo 2 si definiranno i requisiti funzionali<br />

del nuovo programma. Il capitoli 3 e 4 introducono formalmente i principi<br />

e le tecniche dettagliate utilizzate affinché si generino <strong>delle</strong> molecole atten<strong>di</strong>bili.<br />

Nel capitolo 5 si elencheranno tutti i test effettuati che andranno a<br />

misurare prestazioni del programma e qualità dei can<strong>di</strong>dati generati. Infine,<br />

nel capitolo 6 verranno presentati dei possibili ampliamenti e suggerimenti<br />

da adottare nelle versioni successive del software.


Capitolo 1<br />

Background<br />

Questo capitolo si propone l’obiettivo <strong>di</strong> illustrare le conoscenze <strong>di</strong> base<br />

trattate in questo lavoro <strong>di</strong> tesi.<br />

Nella sezione 1.1 verranno introdotte le proteine, sostanze <strong>di</strong> fondamentale<br />

importanza <strong>per</strong> gli esseri viventi; il tema principale è rivolto alla loro struttura<br />

e funzionalità.<br />

Nella sezione 1.2 verrà data la nozione <strong>di</strong> legame chimico. Verrà, inoltre,<br />

presentata la struttura dati grafo e alcune sue proprietà nella sezione 1.3.1;<br />

grazie ad esso è possibile dare una rappresentazione astratta al concetto <strong>di</strong><br />

molecola.<br />

Nella sezione 1.4 si descriverà la tecnica <strong>di</strong> programmazione a vincoli,<br />

dandone una definizione formale; parte <strong>di</strong> queste tecniche sono state utilizzate<br />

in questa tesi con lo scopo <strong>di</strong> poter esprimere vincoli da applicare agli atomi<br />

<strong>delle</strong> molecole che andremo a generare.<br />

La parte finale <strong>di</strong> questo capitolo (sezione 1.5) affronterà le nuove tecniche<br />

e gli approcci utilizzati <strong>per</strong> la sintesi <strong>di</strong> nuovi farmaci, il Drug Design e il Docking.<br />

Faremo, in aggiunta, una carrellata dei principali programmi <strong>di</strong> Docking<br />

in commercio, marcando le loro caratteristiche e i loro limiti funzionali.<br />

1.1 Proteine<br />

Le proteine sono polimeri naturali composti da unità <strong>di</strong> amminoacido legate<br />

fra loro da legami pepti<strong>di</strong>ci. Sono sostanze <strong>di</strong> primaria importanza <strong>per</strong> la<br />

struttura, il funzionamento e la riproduzione della materia vivente.<br />

Gli amminoaci<strong>di</strong> si concatenano nei pepti<strong>di</strong> e nelle proteine me<strong>di</strong>ante la<br />

formazione <strong>di</strong> legami pepti<strong>di</strong>ci fra il gruppo carbossilico <strong>di</strong> un amminoacido e<br />

il gruppo amminico in α <strong>di</strong> un altro amminoacido, rispettivamente, il carbonio<br />

1


2 CAPITOLO 1. BACKGROUND<br />

Figura 1.1: Legame pepti<strong>di</strong>co<br />

legato ai due ossigeni in ‘Amino acid (1)’ e l’azoto legato a due idrogeni in<br />

‘Amino acid (2)’, figura 1.1.<br />

Tranne che nella glicina, dove R = H, il carbonio in α è un centro stereogeno<br />

1 . La figura 1.2 riporta i venti α-amminoaci<strong>di</strong> comunemente re<strong>per</strong>ibili<br />

nelle proteine. Tutti hanno un nome comune, inoltre <strong>per</strong> ognuno c’è un co<strong>di</strong>ce<br />

<strong>di</strong> tre lettere ed un co<strong>di</strong>ce <strong>di</strong> una lettera usata nella scrittura <strong>di</strong> formule <strong>di</strong><br />

pepti<strong>di</strong> o <strong>di</strong> proteine.<br />

1.1.1 Caratteristiche strutturali<br />

Si possono in<strong>di</strong>viduare quattro livelli <strong>di</strong> struttura <strong>di</strong> una proteina:<br />

• Struttura primaria<br />

• Struttura secondaria<br />

• Struttura terziaria<br />

• Struttura quaternaria<br />

1 Un atomo <strong>di</strong> carbonio legato a quattro gruppi <strong>di</strong>versi si definisce asimmetrico o chirale<br />

e costituisce un centro stereogeno


1.1. PROTEINE 3<br />

Figura 1.2: Amminoaci<strong>di</strong>


4 CAPITOLO 1. BACKGROUND<br />

Struttura primaria<br />

La struttura primaria è formata dalla sequenza specifica degli amminoaci<strong>di</strong>.<br />

Lo scheletro pepti<strong>di</strong>co <strong>di</strong> tale struttura è il risultato della regolare successione<br />

<strong>di</strong> tre atomi −N − C − C− appartenenti, rispettivamente, al gruppo<br />

amminico, all’atomo <strong>di</strong> carbonio α e al gruppo carbossilico <strong>di</strong> ogni residuo.<br />

I livelli su<strong>per</strong>iori della struttura <strong>di</strong> una proteina, dati dalle modalità <strong>di</strong><br />

ripiegamento locale e dal ripiegamento dell’intera molecola, conferiscono alla<br />

proteina la forma finale biologicamente attiva; tuttavia questi ripiegamenti<br />

derivano dalla struttura primaria. Le <strong>di</strong>fferenti proprietà associate a una<br />

precisa sequenza amminoaci<strong>di</strong>ca determinano il modo in cui la proteina può<br />

ruotare o ripiegarsi assumendo una specifica e stabile struttura tri<strong>di</strong>mensionale<br />

che la <strong>di</strong>stingue da tutte le proteine. I legami coinvolti nella struttura<br />

primaria sono covalenti mentre nei livelli successivi sono presenti legami a<br />

idrogeno, più deboli dei primi.<br />

Struttura secondaria<br />

Come descritta in [3], la struttura secondaria <strong>di</strong> una proteina è data dalle<br />

modalità <strong>di</strong> ripiegamento della catena polipepti<strong>di</strong>ca. Esistono principalmente<br />

tre 2 tipi <strong>di</strong>versi <strong>di</strong> struttura secondaria: α-elica, β-foglietti e loop.<br />

L’α-elica è una spirale destrorsa nella quale i gruppi R si proiettano all’esterno<br />

dello scheletro pepti<strong>di</strong>co <strong>per</strong>pen<strong>di</strong>colarmente all’asse dell’elica. La<br />

struttura a elica <strong>di</strong> un polipeptide è stabilizzata dalla formazione <strong>di</strong> legami<br />

a idrogeno tra gli atomi <strong>di</strong> idrogeno del gruppo amminico <strong>di</strong> un residuo amminoaci<strong>di</strong>co<br />

e gli atomi <strong>di</strong> idrogeno del gruppo carbonile <strong>di</strong> un altro residuo<br />

(figura 1.3). Quando questo modello <strong>di</strong> legami a idrogeno si ripete regolarmente<br />

lungo un segmento <strong>di</strong> catena polipepti<strong>di</strong>ca, viene a stabilizzarsi la<br />

struttura ripiegata ad α-elica.<br />

La struttura a foglietto β a pieghe si forma quando due o più catene<br />

polipepti<strong>di</strong>che sono quasi completamente <strong>di</strong>stese e giacciono l’una accanto<br />

all’altra. Il foglietto è stabilizzato da legami a idrogeno che si formano tra i<br />

gruppi amminici <strong>di</strong> una catena e i gruppi carbonili dell’altra. Questa struttura<br />

può essere formata da catene polipepti<strong>di</strong>che <strong>di</strong>verse oppure da <strong>di</strong>fferenti<br />

regioni della stessa catena polipepti<strong>di</strong>ca la quale si ripiega su se stessa.<br />

Struttura terziaria<br />

Affinché la molecola assuma la caratteristica struttura compatta è necessario<br />

che la catena polipepti<strong>di</strong>ca cambi <strong>di</strong>rezione in corrispondenza <strong>di</strong> particolari<br />

2 Esistono altri tipi <strong>di</strong> strutture, ma comunque meno frequenti.


1.1. PROTEINE 5<br />

Figura 1.3: Dettaglio <strong>di</strong> una α-elica.<br />

punti, ripiegandosi in varie <strong>di</strong>rezioni. La struttura terziaria rappresenta la<br />

<strong>di</strong>sposizione, l’organizzazione nello spazio che una proteina assume in <strong>di</strong>pendenza<br />

della sua specifica struttura primaria. La stabilizzazione della struttura,<br />

secondo [3], è data dalle interazioni chimiche tra i gruppi R (le catene<br />

laterali dei residui amminoaci<strong>di</strong>ci).<br />

• Tra specifici residui <strong>di</strong> cisteina possono formarsi legami covalenti <strong>di</strong>solfuro<br />

che contribuiscono a mantenere il corretto ripiegamento <strong>di</strong> una<br />

catena polipepti<strong>di</strong>ca.<br />

• Le catene laterali idrofobiche possono aggregarsi all’interno della molecola<br />

proteica venendo escluse dal contatto con le molecole <strong>di</strong> acqua e<br />

contribuendo al processo <strong>di</strong> ripiegamento.<br />

• Le forze <strong>di</strong> van der Waals possono stabilizzare le strette interazioni tra<br />

residui idrofobici.<br />

• Legami ionici tra catene laterali con carica positiva e negativa situate<br />

all’interno <strong>di</strong> una proteina, lontano dal contatto con le molecole <strong>di</strong><br />

acqua, possono formare ponti salini.


6 CAPITOLO 1. BACKGROUND<br />

Struttura quaternaria<br />

Molte proteine nella loro forma funzionalmente attiva sono formate da due<br />

o più catene polipepti<strong>di</strong>che, dette subunità, ognuna <strong>delle</strong> quali è ripiegata<br />

in modo da assumere la propria peculiare struttura terziaria. La struttura<br />

quaternaria è il risultato del modo in cui le subunità proteiche si associano<br />

e interagiscono nell’intera proteina. Come descritto in [3], l’emoglobina è un<br />

chiaro esempio <strong>di</strong> proteina con struttura quaternaria (figura 1.4). Interazioni<br />

idrofobiche, forze <strong>di</strong> van der Waals, legami a idrogeno ionici stabilizzano l’associazione<br />

<strong>delle</strong> quattro catene polipepti<strong>di</strong>che che costituiscono la molecola<br />

dell’emoglobina.<br />

Figura 1.4: Esempio <strong>di</strong> struttura quaternaria: l’emoglobina. È possibile<br />

identificare quattro sub-unità, due in rosso e due in blu.<br />

La specifica forma <strong>delle</strong> proteine <strong>per</strong>mette loro <strong>di</strong> legare non covalentemente<br />

altre molecole e ciò, a sua volta, è seguito da altri eventi biologicamente<br />

importanti come ad esempio:<br />

• una sostanza può penetrare all’interno <strong>di</strong> una cellula legandosi a una<br />

proteina trasportatrice


1.2. LEGAME CHIMICO E FORZE INTERMOLECOLARI 7<br />

• una reazione chimica può essere accelerata quando una proteina enzimatica<br />

lega uno dei reagenti<br />

• segnali chimici come gli ormoni possono legarsi a proteine presenti sulla<br />

su<strong>per</strong>ficie esterna <strong>di</strong> una cellula<br />

L’acquisizione <strong>di</strong> informazioni riguardanti la struttura tri<strong>di</strong>mensionale e<br />

il processo con cui una proteina si ripiega (protein fol<strong>di</strong>ng) è <strong>di</strong> notevole importanza.<br />

Grazie a ciò è possibile fare <strong>delle</strong> inferenze funzionali sulla proteina<br />

a partire dal dogma fondamentale della biologia:<br />

Struttura ⇐⇒ Funzione<br />

nel senso che ad ogni <strong>di</strong>versa organizzazione strutturale della proteina è<br />

associata una specifica funzione biologica.<br />

La conoscenza dell’esatta forma <strong>di</strong> una molecola proteica e <strong>di</strong> ciò che vi<br />

si può legare è fondamentale non solo <strong>per</strong> comprendere la biologia <strong>di</strong> base,<br />

ma anche in altri campi come la me<strong>di</strong>cina. Un esempio fu la determinazione<br />

della struttura tri<strong>di</strong>mensionale <strong>di</strong> una proteina essenziale <strong>per</strong> la replicazione<br />

del virus HIV che <strong>per</strong>mise la progettazione <strong>di</strong> specifiche molecole capaci <strong>di</strong><br />

legarsi a questa e <strong>di</strong> bloccarne l’azione ([3]).<br />

1.1.2 Sito attivo<br />

Il sito attivo è una porzione <strong>di</strong> enzima 3 implicata nella formazione <strong>di</strong> legami<br />

con substrati 4 , che daranno luogo ad una reazione chimica. Il sito attivo <strong>di</strong><br />

un enzima si trova solitamente in una tasca <strong>di</strong> quest’ultima ed è rivestito<br />

da residui amminoaci<strong>di</strong>ci che partecipano al riconoscimento del substrato; è<br />

anche il punto su cui agiscono gli inibitori enzimatici. I substrati si legano al<br />

sito attivo <strong>per</strong> mezzo <strong>di</strong> legami chimici (si faccia riferimento alla sezione 1.2)<br />

come quello idrogeno, covalente o tramite interazioni idrofobiche, andando a<br />

formare un complesso.<br />

1.2 Legame chimico e forze intermolecolari<br />

Come definito in [4], il legame chimico è una connessione tra atomi. Si forma<br />

tra due atomi se la risultante <strong>di</strong>sposizione dei nuclei e degli elettroni possiede<br />

energia minore <strong>di</strong> quella totale corrispondente ai due atomi separati. Se la<br />

3 L’enzima è una proteina che catalizza reazioni chimiche<br />

4 Molecole su cui agisce un enzima


8 CAPITOLO 1. BACKGROUND<br />

minore energia si può conseguire trasferendo completamente uno o più elettroni<br />

da un atomo all’altro, si formano ioni e il composto sarà tenuto insieme<br />

dall’attrazione elettrostatica tra tali ioni, che viene definita legame ionico.<br />

Nel caso in cui l’energia minore si possa conseguire con<strong>di</strong>videndo elettroni,<br />

gli atomi si congiungeranno tramite un legame covalente e si formeranno molecole<br />

<strong>di</strong>stinte. Un terzo tipo <strong>di</strong> legame è il legame metallico, che vede un<br />

grande numero <strong>di</strong> cationi 5 vincolati da una mare <strong>di</strong> elettroni.<br />

Un legame tra due atomi può essere <strong>di</strong> tre tipi: semplice, doppio o triplo.<br />

I legami che andremo a considerare nelle rotazioni saranno tutti legami covalenti<br />

del primo tipo, ovvero semplici. I restanti due, a causa della loro natura<br />

chimica, non possono ruotare su loro stessi senza rincorrere allo sconveniente<br />

<strong>di</strong> spezzare il legame.<br />

1.2.1 Forze intermolecolari<br />

Le forze intermolecolari sono interazioni deboli <strong>di</strong> natura elettrostatica tra<br />

molecole neutre e ioni. Le energie coinvolte in questi tipi <strong>di</strong> interazione sono<br />

<strong>di</strong> gran lunga inferiori rispetto al legame chimico intramolecolare. A <strong>di</strong>fferenza<br />

dei legami intratomici, le forze intermolecolari tengono unite due o più<br />

molecole in modo non covalente. In riferimento al lavoro svolto in questa tesi,<br />

queste forze rappresentano l’interazione che più ci interessa. Grazie ad esse,<br />

un ligando ha la possibilità <strong>di</strong> entrare a contatto con il sito attivo <strong>di</strong> una<br />

proteina, con la conseguente formazione <strong>di</strong> un complesso.<br />

1.3 Strutture dati fondamentali<br />

1.3.1 Grafo<br />

Si definisce grafo una coppia or<strong>di</strong>nata G = (V, E) tale che:<br />

• V è l’insieme dei no<strong>di</strong><br />

• E è l’insieme {(a, b) : a ∈ V ∧ b ∈ V }, chiamato insieme degli archi.<br />

Si possono <strong>di</strong>stinguere due tipi <strong>di</strong> grafo: grafo orientato o <strong>di</strong>retto e grafo<br />

non orientato. Nel primo caso, ogni arco specifica la <strong>di</strong>rezione della connessione,<br />

ovvero si può <strong>di</strong>stinguere il nodo <strong>di</strong> partenza e il nodo <strong>di</strong> arrivo; nel<br />

secondo, non c’è <strong>di</strong>stinzione tra i due no<strong>di</strong> componenti l’arco.<br />

Definizione 1.1. L’insieme degli archi E O <strong>di</strong> un grafo orientato O = (V O , E O )<br />

è l’insieme <strong>delle</strong> coppie or<strong>di</strong>nate (a, b) con a, b ∈ V O<br />

5 Un catione è un atomo carico positivamente.


1.4. PROGRAMMAZIONE A VINCOLI 9<br />

Definizione 1.2. L’insieme degli archi E N <strong>di</strong> un grafo non orientato N =<br />

(V N , E N ) è l’insieme <strong>delle</strong> coppie non or<strong>di</strong>nate {a, b} con a, b ∈ V N<br />

Si definisce grafo semplice un grafo che non contiene archi orientati.<br />

Definizione 1.3. Si definisce <strong>per</strong>corso un insieme <strong>di</strong> vertici {v 0 , v 1 , . . . , v n }<br />

e una sequenza <strong>di</strong> archi {(v o , v 1 ), (v 1 , v 2 ), . . . , (v n−1 , v n )} che li collegano; v 0<br />

e v n rappresentano gli estremi del cammino.<br />

Un <strong>per</strong>corso che abbia gli archi <strong>di</strong>stinti, viene definito cammino; se v o = v n<br />

il cammino si chiama circuito o ciclo.<br />

Definizione 1.4. Sia G = (V, E) un generico grafo e siano u, v ∈ V due<br />

generici vertici <strong>di</strong> G. Se esiste un cammino con estremi u e v allora i due<br />

vertici sono connessi. Inoltre, la relazione <strong>di</strong> connessione è <strong>di</strong> equivalenza.<br />

A partire dalla relazione <strong>di</strong> equivalenza precedente, si possono definire k<br />

classi <strong>di</strong> equivalenza chiamati sottografi e definiti come<br />

G i = (V i , E i ) <strong>per</strong> i = 0, . . . , k<br />

dove V i ⊆ V e E i ⊆ E. Più semplicemente, un generico G i è un sottografo<br />

massimale che contiene tutti gli elementi connessi tra loro. L’insieme <strong>di</strong> questi<br />

sottografi prende il nome <strong>di</strong> componenti connesse <strong>di</strong> G e la sua car<strong>di</strong>nalità si<br />

in<strong>di</strong>ca con γ(G); ne segue che se γ(G) = 1, allora il grafo è connesso.<br />

1.4 Programmazione a vincoli<br />

La programmazione a vincoli è un para<strong>di</strong>gma <strong>di</strong> programmazione dove le<br />

relazioni tra variabili possono essere <strong>di</strong>chiarate in forma <strong>di</strong> vincoli. I vincoli<br />

<strong>di</strong>fferiscono dalle primitive normalmente definite dagli altri linguaggi <strong>di</strong><br />

programmazione <strong>per</strong> il fatto che non specificano azioni singole da eseguire<br />

passo-passo, ma, piuttosto, si limitano a specificare le proprietà <strong>di</strong> cui deve<br />

essere dotata la soluzione da trovare.<br />

La nozione centrale <strong>di</strong> questa tecnica è, appunto, il vincolo (<strong>per</strong> esempio<br />

X > 5, X + Y < 20); esso, definito su una sequenza <strong>di</strong> variabili, è<br />

semplicemente una relazione sul loro dominio. Più formalmente,<br />

Definizione 1.5. [Dominio] Sia y 1 , . . . , y k una sequenza <strong>di</strong> variabili. Diremo<br />

che D 1 × · · · × D k è il dominio loro associato se l’insieme <strong>di</strong> tutti i valori<br />

possibili assunti da ogni y i è proprio l’insieme D i , <strong>per</strong> i = 1, . . . , k. In formule:<br />

y i ∈ D i ,<br />

∀i = 1, . . . , k


10 CAPITOLO 1. BACKGROUND<br />

Definizione 1.6. [Vincolo] Consideriamo una sequenza finita <strong>di</strong> variabili<br />

Y := y 1 , . . . , y k , con k > 0, e D 1 , . . . , D k il dominio associato loro. Un vincolo<br />

C su Y è un sottoinsieme <strong>di</strong> D 1 × · · · × D k .<br />

A sua volta, si definisce Problema <strong>di</strong> sod<strong>di</strong>sfacimento dei vincoli o Constraint<br />

Satisfaction Problem, da cui l’acronimo (CSP), un insieme <strong>di</strong> vincoli<br />

applicati a un insieme <strong>di</strong> variabili.<br />

Definizione 1.7. Per Problema <strong>di</strong> sod<strong>di</strong>sfacimento dei vincoli si intende<br />

una sequenza finita <strong>di</strong> variabili X := x 1 , . . . , x k , con dominio rispettivamente<br />

D 1 , . . . , D k , insieme ad un insieme finito C <strong>di</strong> vincoli, ognuno su un<br />

sottoinsieme <strong>di</strong> X.<br />

Denotiamo un CSP con la <strong>di</strong>citura 〈C; D E 〉, con:<br />

D E := {x i : x i ∈ D i }<br />

∀i = 1, . . . , n<br />

dove, C è l’insieme dei vincoli definiti sul CSP e D E l’insieme dei valori<br />

del dominio.<br />

Una volta formulato il problema P con l’introduzione <strong>delle</strong> variabili (e<br />

del loro rispettivo dominio) e i vincoli definiti su <strong>di</strong> esse si procede con la<br />

risoluzione <strong>di</strong> P attraverso un Solver, composto principalmente da due parti:<br />

propagazione dei vincoli e ricerca <strong>delle</strong> soluzioni. La risoluzione <strong>di</strong> P ci<br />

<strong>per</strong>mette <strong>di</strong> stabilire se:<br />

• il problema è consistente, cioè se ammette soluzione;<br />

• la soluzione o le soluzioni;<br />

Definiamo formalmente il concetto <strong>di</strong> soluzione <strong>di</strong> un CSP.<br />

Definizione 1.8. Sia 〈C; D E 〉 un CSP con D E := x 1 ∈ D 1 , . . . , x n ∈ D n .<br />

Diciamo che (d 1 , . . . , d n ) ∈ D 1 × · · · × D n sod<strong>di</strong>sfa un vincolo C ∈ C sulle<br />

variabili x i1 , . . . , x im se (d i1 , . . . , d im ) ∈ C. Inoltre (d 1 , . . . , d n ) ∈ D 1 ×· · ·×D n<br />

è una soluzione <strong>per</strong> P se sod<strong>di</strong>sfa ogni vincolo C ∈ C.<br />

Esempio 1.1. Sia 〈x < y; x ∈ [0, 10] , y ∈ [5, 10]〉; allora tutte le soluzione del<br />

problema appena esposto sono l’insieme <strong>delle</strong> coppie (a, b) con a ∈ [0, 10] e b ∈<br />

[5, 10] tali che a < b.


1.4. PROGRAMMAZIONE A VINCOLI 11<br />

Ricerca <strong>delle</strong> soluzioni<br />

La ricerca <strong>delle</strong> soluzioni <strong>di</strong> un CSP è effettuata attraverso l’esplorazione<br />

<strong>di</strong> un albero, detto albero <strong>di</strong> ricerca, dove ad ogni livello compaiono tutte le<br />

possibili scelte <strong>di</strong> una precisa variabile. Un <strong>per</strong>corso ra<strong>di</strong>ce-foglia rappresenta<br />

una possibile soluzione e, se questa è consistente con l’insieme dei vincoli<br />

introdotti nel problema, allora è effettivamente una soluzione.<br />

Propagazione dei vincoli<br />

L’esplorazione <strong>di</strong> tutto l’albero (il quale cresce esponenzialmente rispetto al<br />

numero <strong>delle</strong> variabili) potenzialmente, potrebbe <strong>di</strong>ventare un processo molto<br />

lento. Di conseguenza, si introducono le tecniche della propagazione, il cui<br />

scopo è <strong>di</strong> riscrivere un vincolo C in uno equivalente, con l’applicazione <strong>di</strong><br />

determinate regole atte a sod<strong>di</strong>sfare alcune proprietà <strong>di</strong> consistenza locale.<br />

L’obiettivo è quello <strong>di</strong> ridurre l’albero <strong>di</strong> ricerca con l’eliminazione dei suoi<br />

sottoalberi che sicuramente non portano a soluzioni consistenti.<br />

Nello specifico, si hanno tre tipi <strong>di</strong> regole:<br />

• regole <strong>di</strong> Riduzione del Dominio, come conseguenza dell’applicazione<br />

dei vincoli alle variabili<br />

• regole <strong>di</strong> Trasformazione, cioè semplificazione dei vincoli<br />

• regole <strong>di</strong> Introduzione, grazie alle quali si aggiungono nuovi vincoli<br />

impliciti<br />

1.4.1 Alberi <strong>di</strong> ricerca<br />

Affinché si trovino tutte le soluzioni consistenti del problema, si ricorre agli<br />

alberi <strong>di</strong> ricerca e agli algoritmi <strong>per</strong> esplorarlo, algoritmi <strong>di</strong> ricerca. È doveroso<br />

precisare che l’algoritmo <strong>di</strong> ricerca non costruisce un albero <strong>di</strong> ricerca <strong>per</strong> poi<br />

esplorarlo successivamente; in realtà, l’albero viene costruito ‘al volo’ durante<br />

l’algoritmo <strong>di</strong> esplorazione.<br />

Definizione 1.9. Dati due CSP P 1 e P 2 e una sequenza X <strong>di</strong> variabili comuni<br />

ai due problemi, <strong>di</strong>remo che P 1 e P 2 sono equivalenti se:<br />

• <strong>per</strong> ogni soluzione d <strong>per</strong> P 1 , esiste una soluzione <strong>per</strong> P 2 e, quest’ultima,<br />

coincide proprio con d sulla sequenza <strong>di</strong> variabili X.<br />

• <strong>per</strong> ogni soluzione e <strong>per</strong> P 2 , esiste una soluzione <strong>per</strong> P 1 e, quest’ultima,<br />

coincide proprio con e sulla sequenza <strong>di</strong> variabili X.


12 CAPITOLO 1. BACKGROUND<br />

Definizione 1.10. Siano P un CSP e x 1 , . . . , x n una sequenza <strong>di</strong> variabili.<br />

A è un albero <strong>di</strong> ricerca finito <strong>per</strong> P se rispetta le seguenti clausole:<br />

• tutti i suoi no<strong>di</strong> sono degli altri CSP<br />

• la ra<strong>di</strong>ce è proprio P<br />

• i no<strong>di</strong> <strong>di</strong> un livello pari hanno esattamente un <strong>di</strong>scendente <strong>di</strong>retto<br />

• se P 1 , . . . , P m con m ≥ 1, sono <strong>di</strong>scendenti <strong>di</strong>retti <strong>di</strong> P 0 , allora l’unione<br />

<strong>di</strong> P 1 , . . . , P m è equivalente a P 0 (in relazione a X).<br />

Figura 1.5: Esempio <strong>di</strong> un Albero <strong>di</strong> Ricerca.<br />

O<strong>per</strong>ativamente, l’idea alla base <strong>di</strong> una visita <strong>di</strong> un albero <strong>di</strong> ricerca è<br />

la seguente: si parte dalla ra<strong>di</strong>ce e si prosegue visitando un figlio <strong>per</strong> tutte<br />

le sue scelte possibili. La visita è ricorsiva e nel momento in cui ci si trova<br />

ad avere un vincolo inconsistente si risale verso l’alto (backtracking) in cerca<br />

<strong>di</strong> un nodo con <strong>delle</strong> scelte ancora possibili; la ricerca <strong>di</strong> tutte le decisioni<br />

termina nel nodo ra<strong>di</strong>ce.<br />

1.5 Drug Design<br />

Dal momento in cui strutture tri<strong>di</strong>mensionali <strong>di</strong> proteine derivate da cristallografia<br />

a raggi X o spettroscopia NMR, <strong>di</strong>vennero <strong>di</strong>sponibili, si vide la


1.5. DRUG DESIGN 13<br />

nascita <strong>di</strong> pacchetti software in grado <strong>di</strong> utilizzare queste informazioni <strong>per</strong><br />

dar vita al progetto chiamato Drug Design. Il problema che questi software<br />

devono affrontare è quello del Docking, ovvero <strong>di</strong> pre<strong>di</strong>re un complesso energeticamente<br />

favorevole composto da una proteina e una molecola (ipotetico<br />

farmaco), chiamato in questo contesto, ligando.<br />

Il Drug Design ha l’obiettivo <strong>di</strong> trovare una struttura guida, una piccola<br />

molecola che si lega ad una precisa proteina target e che può essere stu<strong>di</strong>ata<br />

a fondo <strong>per</strong> <strong>di</strong>ventare un farmaco.<br />

Dal punto <strong>di</strong> vista biologico, legare una piccola molecola ad una specifica<br />

proteina significa poter inibire la sua funzione, in modo tale da poter rendere<br />

la sua azione verso l’organismo inoffensiva o, accelerare la sua funzione,<br />

simulando l’intervento del naturale ligando.<br />

Il metodo che sta alla base del Drug Design è il concetto <strong>di</strong> chiave-toppa<br />

(ligando-proteina): quel che si vuole ottenere è una serie <strong>di</strong> chiavi valide <strong>per</strong><br />

quella specifica toppa.<br />

Figura 1.6: Figura rappresentante il docking tra una piccola molecola (in<br />

marrone) e una proteina target <strong>per</strong> dar vita ad un complesso<br />

Molti aspetti fanno del Docking un problema <strong>di</strong>fficile da risolvere. Primo<br />

tra tutti quello che riguarda il problema dello Scoring, ovvero calcolare e<br />

assegnare un punteggio al modo in cui ligando e proteina si legano tra loro<br />

<strong>per</strong> andare a formare il complesso. Al giorno d’oggi, non esiste una funzione<br />

<strong>di</strong> scoring “d’uso generale” che <strong>per</strong>metta <strong>di</strong> pre<strong>di</strong>re in modo accurato ciò. In<br />

secondo luogo, è necessario considerare l’elevato numero <strong>di</strong> gra<strong>di</strong> <strong>di</strong> libertà:<br />

il più importante è quello relativo al possibile orientamento spaziale della<br />

proteina e del ligando e la conformazione <strong>di</strong> quest’ultimo.<br />

Inoltre, può variare la conformazione della proteina, si possono aggiungere<br />

molecole d’acqua tra le molecole e può cambiare lo stato <strong>di</strong> protonazione 6 .<br />

Ciò implica che le funzioni <strong>di</strong> scoring contengano tipicamente molti minimi<br />

locali <strong>di</strong> energia <strong>di</strong>fficili da ottimizzare.<br />

6 La protonazione è una reazione che consiste nell’ad<strong>di</strong>zione <strong>di</strong> un protone, cioè un<br />

idrogeno carico positivamente (H + ), ad un atomo, ad una molecola o ad uno ione. La<br />

specie protonata subisce variazioni chimico-fisiche (idrofilia, proprietà ottiche, etc..).


14 CAPITOLO 1. BACKGROUND<br />

Malgrado non esista una soluzione generale al problema del docking, sono<br />

stati sviluppati molti algoritmi specializzati in vari aspetti del problema e<br />

applicati in modo sod<strong>di</strong>sfacente.<br />

1.6 Algoritmi <strong>di</strong> Docking<br />

Il Docking è una tecnica computazionale atta a generare varie conformazioni<br />

<strong>di</strong> piccole molecole all’interno del sito attivo <strong>di</strong> una proteina. Successivamente<br />

viene applicata una funzione <strong>di</strong> scoring ai risultati, in modo tale da poter<br />

ottenere una lista dei vari ligan<strong>di</strong> in base ad un certo punteggio: maggior<br />

punteggio uguale maggiore stabilità.<br />

Come descritto in [1], esistono <strong>di</strong>versi approcci <strong>per</strong> risolvere il problema<br />

del Docking.<br />

1.6.1 Algoritmi con corpi rigi<strong>di</strong><br />

Questi sono stati i primi algoritmi ad essere stati sviluppati. Sia la proteina<br />

che il ligando vengono tenuti fissi nella loro conformazione spaziale e la<br />

complessità del problema si riduce alla ricerca dell’orientamento, con energia<br />

minore, tra le due molecole. Sicuramente, il punto a favore <strong>di</strong> questa classe<br />

<strong>di</strong> algoritmi è la velocità <strong>di</strong> elaborazione: pochi gra<strong>di</strong> <strong>di</strong> libertà e vincoli assicurano<br />

<strong>delle</strong> prestazioni notevoli. Tuttavia, maggiore è la velocità <strong>di</strong> ricerca,<br />

minore è la qualità dei ligan<strong>di</strong> trovati; infatti, a causa dei pochi movimenti<br />

simulati, non si esplorano tutte le possibili combinazioni <strong>di</strong> un ligando.<br />

1.6.2 Algoritmi con ligando flessibile<br />

La limitazione maggiore della precedente classe <strong>di</strong> algoritmi consiste nell’ignorare<br />

completamente la flessibilità del ligando. Infatti, spesso piccole molecole<br />

hanno uno spazio conformazionale molto ampio con livelli energetici molto<br />

bassi, e quin<strong>di</strong> stabili.<br />

Algoritmi a costruzione incrementale<br />

Uno degli algoritmi usati frequentemente, facente parte <strong>di</strong> questa classe, è la<br />

costruzione incrementale, che si basa sul concetto <strong>di</strong> frammentazione. Il ligando<br />

viene sud<strong>di</strong>viso in numerosi frammenti, i quali costituiscono una porzione<br />

<strong>di</strong> ligando rigida, ovvero gli atomi che lo compongono non si muovono. In<br />

breve, l’algoritmo funziona nel modo seguente: viene piazzato il primo frammento<br />

del ligando (chiamato frammento àncora) nel sito attivo della protei-


1.6. ALGORITMI DI DOCKING 15<br />

na; quin<strong>di</strong> si procede al piazzamento in successione dei restanti frammenti,<br />

collegandoli l’un l’altro in sequenza e validandoli con il calcolo dell’energia.<br />

In altre parole, si possono riconoscere tre fasi:<br />

• selezione del frammento base;<br />

• piazzamento del frammento base;<br />

• costruzione incrementale del ligando con i frammenti successivi.<br />

Il grado <strong>di</strong> libertà <strong>di</strong> questo algoritmo è dato dalla rotazione dei legami singoli.<br />

Algoritmi genetici<br />

L’algoritmo genetico è un metodo euristico <strong>di</strong> ricerca e ottimizzazione che<br />

imita il processo <strong>di</strong> evoluzione. L’idea generale è quella <strong>di</strong> partire da un certo<br />

numero <strong>di</strong> possibili soluzioni (in<strong>di</strong>vidui) chiamate popolazione e, a ciascuna<br />

iterazione, o<strong>per</strong>are una selezione <strong>di</strong> in<strong>di</strong>vidui, impiegandoli <strong>per</strong> generare nuovi<br />

elementi della popolazione stessa, così da costituire una nuova popolazione<br />

<strong>per</strong> l’iterazione (o generazione) seguente. Tale successione <strong>di</strong> generazioni<br />

evolve verso una soluzione ottimale (locale o globale) del problema assegnato.<br />

L’evoluzione viene ottenuta attraverso una parziale ricombinazione <strong>delle</strong><br />

soluzioni, e l’introduzione <strong>di</strong> mutazioni casuali nella popolazione <strong>di</strong> partenza;<br />

spora<strong>di</strong>camente nascono in<strong>di</strong>vidui con caratteristiche non comprese tra<br />

quelle presenti nei dati della specie originaria. Finita la fase <strong>di</strong> evoluzione la<br />

popolazione risultante viene analizzata e vengono tenute solo le soluzioni che<br />

meglio risolvono il problema: gli in<strong>di</strong>vidui con le qualità più adatte all’ambiente<br />

in cui si trovano hanno quin<strong>di</strong> maggiori possibilità <strong>di</strong> sopravvivere e<br />

riprodursi. Queste soluzioni subiranno una nuova fase <strong>di</strong> evoluzione e così<br />

via. Questa classe <strong>di</strong> algoritmi viene utilizzata in vari campi; <strong>per</strong> esempio,<br />

in biologia molecolare è utilizzato <strong>per</strong> pre<strong>di</strong>re l’adattamento <strong>di</strong> un genoma<br />

all’ambiente, riconducendosi quin<strong>di</strong> all’evoluzione della specie introdotta da<br />

Charles Darwin.<br />

1.6.3 Docking attraverso simulazione<br />

Al contrario dei meto<strong>di</strong> appena menzionati, esistono algoritmi che affrontano<br />

il problema attraverso tecniche <strong>di</strong> simulazione. Questi algoritmi partono<br />

da una conformazione iniziale <strong>per</strong> poi passare ad altre ad energia minore,<br />

attraverso piccoli movimenti effettuati alla struttura e scartando quelle più<br />

instabili. Alcuni algoritmi facenti parte <strong>di</strong> questa categoria sono Simulazioni<br />

<strong>di</strong> Dinamica Molecolare, algoritmi <strong>di</strong> Monte-Carlo, Meto<strong>di</strong> ibri<strong>di</strong> ottenuti<br />

combinando due o più algoritmi.


16 CAPITOLO 1. BACKGROUND<br />

1.6.4 Panorama del mercato attuale<br />

La scelta <strong>di</strong> un pacchetto <strong>di</strong> Docking è una o<strong>per</strong>azione tutt’altro che semplice;<br />

prima <strong>di</strong> procedere all’acquisto, le case farmaceutiche eseguono particolari<br />

test su uno spettro molto ampio <strong>di</strong> complessi. Nel 2006 è stato condotto<br />

uno stu<strong>di</strong>o dalla GlaxosmithKline [7] volto a fare una indagine sullo stato<br />

attuale <strong>delle</strong> tecniche <strong>computazionali</strong> <strong>per</strong> il drug design ed in particolare<br />

sul docking e sulle funzioni <strong>di</strong> scoring. Da pochi anni a questa parte, sono<br />

stati pubblicati un numero sempre crescente <strong>di</strong> valutazioni su pacchetti <strong>di</strong><br />

docking e funzioni <strong>di</strong> scoring, includendo recensioni sulle nuove tecniche,<br />

facendo confronti tra più programmi <strong>di</strong> docking e stu<strong>di</strong>ando le correlazioni<br />

tra i punteggi formulati dal docking e i punteggi calcolati dall’affinità del<br />

composto (quanto due molecole si legano bene). Questo, invece, <strong>di</strong>fferisce<br />

dalle solite valutazioni <strong>per</strong> due motivi: primo, si misurano le <strong>per</strong>formace <strong>di</strong><br />

molti pacchetti <strong>di</strong> docking su numerosi target, secondo, il set dei composti <strong>per</strong><br />

ogni target è costituito da un gran numero <strong>di</strong> composti relativamente correlati<br />

tra loro, <strong>per</strong> cui le affinità s<strong>per</strong>imentali sono state misurate utilizzando un<br />

protocollo standard, sviluppato solitamente dallo stesso gruppo <strong>di</strong> ricerca.<br />

Sono stati presi in esame 10 <strong>di</strong>fferenti pacchetti; in particolare, alcuni <strong>di</strong><br />

questi offrono più funzioni <strong>di</strong> scoring o algoritmi <strong>di</strong> docking <strong>per</strong> un totale <strong>di</strong><br />

19 protocolli.<br />

Il focus della valutazione si basa su tre usi tipici <strong>di</strong> questi pacchetti:<br />

1. pre<strong>di</strong>zione <strong>delle</strong> conformazioni <strong>di</strong> piccole molecole all’interno della proteina<br />

target;<br />

2. virtual screening <strong>di</strong> banche dati volto all’identificazione <strong>di</strong> composti <strong>per</strong><br />

vari target <strong>di</strong> proteine;<br />

3. pre<strong>di</strong>zione dell’affinità dei composti<br />

Risultati dello stu<strong>di</strong>o valutativo<br />

Per quanto riguarda la pre<strong>di</strong>zione <strong>delle</strong> conformazioni <strong>di</strong> piccole molecole, si<br />

ottengono dei buoni valori <strong>per</strong> tutti i tipi <strong>di</strong> target proteici; in particolare, <strong>per</strong><br />

tutti i target (tranne uno), almeno un programma riesce a posizionare più del<br />

40% dei ligan<strong>di</strong> entro i 2Å rispetto la struttura cristallina 7 . Infatti, <strong>per</strong> molti<br />

target proteici, il 90% dei relativi ligan<strong>di</strong> potrebbe avere una orientazione<br />

corretta; da ciò si deduce che gli algoritmi <strong>di</strong> docking riescono ad esplorare lo<br />

7 Questo è un buon risultato: significa che la <strong>di</strong>stanza me<strong>di</strong>a tra la molecola originata e<br />

la struttura cristallina è minore <strong>di</strong> 2Å


1.6. ALGORITMI DI DOCKING 17<br />

spazio conformazionale sufficientemente bene da ottenere <strong>delle</strong> buone conformazioni.<br />

Il problema è <strong>di</strong> natura <strong>di</strong>versa: non esiste nessun programma che<br />

abbia valore generale, cioè che ottenga buoni risultati <strong>per</strong> un qualsiasi target<br />

proteico.<br />

Per quanto riguarda il Virtual Screening, questo ha successo quando<br />

si utilizzano dei dati che simulano una tipica classe <strong>di</strong> composti farmacueutici.<br />

Inoltre, in assenza <strong>di</strong> informazioni a priori sulla proteina target,<br />

le <strong>per</strong>formance dei programmi sono in contrasto rispetto ai tipi <strong>di</strong> target<br />

valutati.


18 CAPITOLO 1. BACKGROUND


Capitolo 2<br />

Scopo della Tesi<br />

Uno degli aspetti comuni a tutti i pacchetti <strong>di</strong> Docking esistenti è che un unico<br />

algoritmo racchiude due aspetti completamente <strong>di</strong>fferenti: posizionamento del<br />

ligando e calcolo dell’energia del sistema.<br />

Una conseguenza che deriva dall’aspetto appena menzionato è che un<br />

chimico-farmaceutico, in possesso <strong>di</strong> una propria funzione energetica F, nel<br />

momento in cui decidesse <strong>di</strong> applicarla, non avrebbe a <strong>di</strong>sposizione un set<br />

<strong>di</strong> ligan<strong>di</strong> “neutrali”: la sua funzione infatti verrebbe applicata ad un set <strong>di</strong><br />

molecole già precomputate da un’altra funzione energetica F ′ . In particolare,<br />

potrebbero mancare <strong>delle</strong> conformazioni che sarebbero state accettate da F<br />

ma rifiutate da F ′ .<br />

Un approccio completamente innovativo (e quin<strong>di</strong> s<strong>per</strong>imentale) potrebbe<br />

essere quello <strong>di</strong> separare in due parti un algoritmo <strong>di</strong> docking. L’idea è quella<br />

<strong>di</strong> <strong>di</strong>stinguere in modo netto la generazione <strong>di</strong> tutte le possibili conformazioni<br />

<strong>di</strong> un ligando all’interno del sito attivo della proteina target, ignorando<br />

completamente l’energia del sistema, dalla valutazione energetica.<br />

2.1 Ligand-rotation<br />

A fronte <strong>di</strong> tutto quello che si è detto nel capitolo precedente, quel che vogliamo<br />

è un pacchetto <strong>di</strong> Docking in grado <strong>di</strong> poter restituire <strong>delle</strong> conformazioni<br />

valide, cioè che rispettino la geometria della chimica, senza doverci<br />

preoccupare dello stato energetico del complesso.<br />

Lo scopo primo <strong>di</strong> questa tesi è dunque quello <strong>di</strong> stu<strong>di</strong>are, analizzare,<br />

modellare e implementare un programma de novo <strong>di</strong> Docking, ligand-rotation,<br />

scritto in C++, in grado <strong>di</strong> poter generare <strong>delle</strong> conformazioni valide dal<br />

punto <strong>di</strong> vista geometrico.<br />

19


20 CAPITOLO 2. SCOPO DELLA TESI<br />

Le tecniche alla base del funzionamento <strong>di</strong> ligand-rotation sono proprie<br />

della programmazione a vincoli. Nel capitolo 3 si andrà a definire formalmente<br />

il problema CSP associato e quin<strong>di</strong>, l’insieme <strong>delle</strong> variabili e dei vincoli;<br />

si mostrerà anche in che modo ligand-rotation assicura la consistenza dei<br />

vincoli rispetto ai movimenti del ligando. Inoltre, l’esplorazione dello spazio<br />

<strong>di</strong> ricerca viene eseguito efficacemente grazie ad algoritmi implementati adhoc<br />

<strong>per</strong> ligand-rotation, come la visita dell’albero <strong>di</strong> ricerca e l’algoritmo <strong>di</strong><br />

backtracking. Abbiamo ricorso ad una progettazione e realizzazione a mano<br />

del motore <strong>di</strong> ricerca, in quanto, gli oggetti del nostro algoritmo (i punti nelle<br />

tre <strong>di</strong>mensioni) non sono trattati nativamente dai risolutori esistenti. Osserviamo<br />

che, seppure il tutto si basi su tecniche <strong>di</strong> programmazione a vincoli,<br />

ligand-rotation non implementa la propagazione dei vincoli. La causa <strong>di</strong> ciò<br />

è da imputarsi al tempo: avendone a <strong>di</strong>sposizione poco, si è optato <strong>per</strong> una<br />

implementazione senza propagazione. Per ulteriori dettagli e approfon<strong>di</strong>menti<br />

si veda il paragrafo 6.2.2 nella quale si descrive una futura espansione <strong>di</strong><br />

ligand-rotation.<br />

Il funzionamento si basa su un modello che prevede la proteina rigida e il<br />

ligando flessibile, come la maggior parte dei pacchetti <strong>di</strong> Docking presenti sul<br />

mercato. Una motivazione valida <strong>di</strong> quanto appena detto è che la complessità<br />

dell’algoritmo cresce esponenzialmente all’aumentare del numero dei gra<strong>di</strong><br />

<strong>di</strong> libertà (sezione 4.5): trattare anche i possibili movimenti della proteina,<br />

renderebbe ligand-rotation più costoso.<br />

L’algoritmo centrale <strong>di</strong> tutto ligand-rotation prevede <strong>di</strong> partire da un<br />

potenziale can<strong>di</strong>dato ligando e da una proteina con cui dovrà interagire; si<br />

andrà, quin<strong>di</strong>, a simulare i possibili movimenti che il ligando può compiere<br />

all’interno del sito attivo della proteina. L’output sarà composto da una serie<br />

<strong>di</strong> molecole (in formato mol2); esse potranno essere stu<strong>di</strong>ate dal punto <strong>di</strong><br />

vista energetico, cioè valutate da una opportuna funzione <strong>di</strong> Scoring, la quale<br />

andrà a selezionare i ligan<strong>di</strong> che, inseriti nel contesto proteico, risulteranno<br />

energeticamente favorevoli.<br />

Evidenziamo il fatto che ligand-rotation è molto flessibile: i suoi parametri<br />

sono numerosi, molti dei quali definibili dall’utente. Attraverso un file <strong>di</strong><br />

configurazione, l’utente è in grado <strong>di</strong> mo<strong>di</strong>ficare il comportamento <strong>di</strong> ligandrotation<br />

in base alle sue esigenze e al tipo <strong>di</strong> risultato che vuole ottenere.<br />

Ad esempio, si può specificare il grado <strong>di</strong> qualità e precisione attraverso vari<br />

parametri che andranno a mo<strong>di</strong>ficare il campionamento <strong>delle</strong> strutture dati<br />

utilizzate o il numero dei gra<strong>di</strong> <strong>di</strong> libertà del sistema. A seconda <strong>delle</strong> scelte<br />

effettuate, si andrà ad incidere notevolmente sulla complessità computazionale<br />

e quin<strong>di</strong> sull’efficienza del software stesso, in termini <strong>di</strong> tempo impiegato<br />

dal pacchetto nel restituire una serie <strong>di</strong> ligan<strong>di</strong>.<br />

Nei prossimi capitoli si valuteranno le prestazioni ottenute da ligand-


2.1. LIGAND-ROTATION 21<br />

rotation in fase <strong>di</strong> test. A partire dall’insieme dei ligan<strong>di</strong> ottenuti, la valutazione<br />

verterà sui seguenti aspetti:<br />

• complessità in tempo, in relazione al tipo <strong>di</strong> configurazione impostata<br />

• qualità strutturale <strong>delle</strong> molecole ottenute<br />

• generazione <strong>di</strong> un file <strong>di</strong> configurazione ottimale<br />

Nel capitolo 5 descriveremo ampiamente i test effettuati su ligand-rotation.<br />

2.1.1 Analisi dei requisiti<br />

Il primo compito dell’analisi dei requisiti è identificare tutti i requisiti del<br />

sistema software. Questi vengono documentati in più iterazioni con il committente,<br />

in modo da chiarire eventuali dubbi e stendere gradualmente una<br />

documentazione. In questa fase si analizzano i punti <strong>di</strong> vista dell’utente finale,<br />

esterno, senza occuparsi dei dettagli implementativi informatici, i quali<br />

rappresentato il punto <strong>di</strong> vista dell’utente interno. La <strong>di</strong>fficoltà maggiore <strong>di</strong><br />

questa fase è costituita dai problemi <strong>di</strong> comunicazione: lo scambio <strong>di</strong> informazioni,<br />

pur su argomentazioni semplici, tra analista e cliente finale, si può<br />

rivelare complesso. Trovare un linguaggio comune tra i due e scambiare le<br />

proprie idee in modo comprensibile ad entrambi è <strong>di</strong> primaria importanza.<br />

Ligand-rotation è un progetto software sviluppato in collaborazione con<br />

il Dipartimento <strong>di</strong> Chimica dell’Università <strong>di</strong> Parma. L’idea è quella <strong>di</strong> realizzare<br />

un pacchetto <strong>di</strong> Docking in grado <strong>di</strong> lavorare in maniera in<strong>di</strong>pendente<br />

dall’energia del sistema ligando-proteina. In occasione <strong>di</strong> numerosi colloqui,<br />

abbiamo stilato i requisiti funzionali che ligand-rotation avrebbe dovuto rispettare.<br />

Innanzitutto, abbiamo definiti i gra<strong>di</strong> <strong>di</strong> libertà che il software deve<br />

implementare. In primis, la molecola si muove grazie a degli step <strong>di</strong> rotazione<br />

applicati ai legami <strong>di</strong> tipo semplice. In secondo luogo, ligand-rotation deve<br />

essere in grado <strong>di</strong> esplorare il sito attivo della proteina.<br />

Affinché il programma possa essere utilizzato da utenti non prettamente<br />

informatici, questi comunicheranno con ligand-rotation attraverso un file <strong>di</strong><br />

configurazione. Si potranno specificare sia opzioni riguardati le funzionalità<br />

<strong>di</strong> base, come input proteina, input ligando, etc.., sia parametri riguardanti<br />

le prestazioni del software.


22 CAPITOLO 2. SCOPO DELLA TESI


Capitolo 3<br />

Formalizzazione<br />

In questo capitolo si esamineranno le tecniche e i principi utilizzati nell’implementazione<br />

<strong>di</strong> ligand-rotation, con lo scopo <strong>di</strong> conseguire gli obiettivi prefissati<br />

nei precedenti capitoli. Ligand-rotation inizierà la sua computazione<br />

considerando il ligando base, ricevuto in input. La generazione <strong>delle</strong> conformazioni<br />

avrà luogo effettuando sui legami tutte le rotazioni possibili, queste<br />

ultime ottenute con una combinazione <strong>di</strong> rotazioni in<strong>di</strong>pendenti in<strong>di</strong>viduate<br />

da una visita opportuna della molecola. Si andrà, quin<strong>di</strong>, a testare ogni<br />

possibilità <strong>di</strong> rotazione, verificando con i vincoli se queste realizzano un ligando<br />

valido geometricamente. Infine, sapendo generare tutte le conformazioni,<br />

queste saranno posizionate in uno spazio definito dall’utente in termini <strong>di</strong><br />

traslazioni e rotazioni. Questo affinché ligand-rotation possa analizzare la<br />

cavità del sito attivo. L’insieme <strong>di</strong> tutti questi gra<strong>di</strong> <strong>di</strong> libertà andranno a<br />

descrivere le <strong>di</strong>verse conformazioni ottenibili.<br />

Innanzitutto, nella sezione 3.1 verrà formalizzato il problema P, esplicitando<br />

l’insieme <strong>delle</strong> variabili e dei vincoli rappresentanti il modello del CSP<br />

relativo al problema P <strong>di</strong> ligand-rotation. La nozione <strong>di</strong> vincolo è intrinsecamente<br />

legata all’algoritmo che genera le conformazioni. Nella sezione 3.2<br />

verrà presentato l’algoritmo <strong>di</strong> visita dello spazio <strong>di</strong> ricerca <strong>delle</strong> combinazioni<br />

dove, <strong>per</strong> ogni atomo, si specificheranno l’insieme <strong>delle</strong> scelte possibili<br />

rappresentate dal numero <strong>di</strong> rotazioni che il legame relativo a quell’atomo<br />

può compiere; l’idea è quella <strong>di</strong> trovare tutte le possibili conformazioni <strong>di</strong><br />

un dato ligando. L’insieme <strong>delle</strong> sue soluzioni andrà a costruire, a sua volta,<br />

l’insieme dei ligan<strong>di</strong> vali<strong>di</strong>. Considerando le loro variabili, queste ultime dovranno<br />

andare a verificare, <strong>per</strong> definizione <strong>di</strong> soluzione <strong>di</strong> CSP, ogni vincolo<br />

definito <strong>per</strong> il problema P.<br />

La sola generazione <strong>di</strong> queste ultime, nel sistema <strong>di</strong> riferimento del ligando,<br />

è molto restrittivo nel senso che l’insieme <strong>delle</strong> soluzioni <strong>di</strong>fficilmente<br />

ne conterrà uno posizionato abbastanza correttamente rispetto a quello<br />

23


24 CAPITOLO 3. FORMALIZZAZIONE<br />

minimizzato, scaricato dalla banca dati PDB 1 .<br />

Una possibile soluzione presentata nella 3.5, implementata in ligandrotation,<br />

consiste nel posizionamento in sequenza dei ligan<strong>di</strong> ottenuti precedentemente<br />

in tanti sistemi <strong>di</strong> riferimento specifici della proteina, andando<br />

a costruire ligan<strong>di</strong> con orientamento spaziale <strong>di</strong>fferente in modo tale da<br />

esplorare il sito attivo della proteina.<br />

3.1 Modello del problema a vincoli<br />

L’aspetto chiave <strong>di</strong> questo progetto è proprio quello <strong>di</strong> CSP, Constraint Satisfaction<br />

Problem. Definiamo quin<strong>di</strong> formalmente il modello utilizzato <strong>per</strong> la<br />

rappresentazione del problema P riguardante ligand-rotation.<br />

3.1.1 Variabili<br />

Si possono in<strong>di</strong>viduare due tipi <strong>di</strong> variabili che compongono il problema P:<br />

• variabili <strong>di</strong> tipo legame, ovvero le k rotazioni che caratterizzano uno<br />

specifico legame<br />

• variabili <strong>di</strong> tipo punto, ovvero le coor<strong>di</strong>nate corrispondenti agli atomi<br />

del ligando e della proteina<br />

Le variabili <strong>di</strong> tipo legame sono associate ad ogni legame da ruotare nel<br />

ligando <strong>di</strong> partenza. Si procede all’identificazione <strong>delle</strong> suddette variabili <strong>per</strong><br />

poi effettuare <strong>delle</strong> rotazioni successive che mo<strong>di</strong>ficano la struttura della molecola.<br />

Intuitivamente, la rotazione <strong>di</strong> un legame influenza le due sottomolecole<br />

separate dal legame ruotato. Da ciò, si deduce che non tutti i legami potranno<br />

effettuare <strong>delle</strong> rotazioni, in quanto, se il legame in questione appartiene<br />

ad un anello, si va incontro alla rottura <strong>di</strong> quest’ultimo. Le variabili punto,<br />

invece, identificano tutti i possibili piazzamenti <strong>di</strong> un particolare atomo a<br />

seguito <strong>di</strong> rotazioni della sottomolecola a cui appartiene.<br />

3.1.2 Dominio <strong>delle</strong> variabili<br />

Il dominio <strong>di</strong> una variabile <strong>di</strong> tipo legame è un insieme <strong>di</strong> interi che identifica<br />

il numero <strong>di</strong> rotazioni che un legame può effettuare. Questo valore può<br />

variare a seconda della natura del legame chimico o <strong>delle</strong> impostazioni dettate<br />

dall’utente. In generale, si possono riassumere i seguenti casi: sia l un<br />

generico legame,<br />

1 Il Protein Data Bank, o PDB, è un archivio <strong>per</strong> dati <strong>di</strong> struttura in 3D <strong>di</strong> proteine e<br />

aci<strong>di</strong> nucleici.


3.2. VISITA DELLO SPAZIO DI RICERCA 25<br />

• se l compare all’interno <strong>di</strong> un ciclo aromatico, collega un atomo <strong>di</strong><br />

idrogeno o è stato bloccato dall’utente, si definisce un’unica rotazione,<br />

ovvero l’identità<br />

• in tutti gli altri casi, l effettua un numero <strong>di</strong> rotazioni pari a k, definito<br />

dall’utente; formalmente, l’insieme R degli angoli <strong>di</strong> rotazione è:<br />

{ }<br />

2π<br />

R =<br />

k i : i ∈ {0, . . . , k − 1}<br />

3.1.3 Vincoli implementati<br />

Per meglio comprendere la natura chimica del vincolo che si vuole implementare,<br />

consideriamo il legame più debole esistente, legame <strong>di</strong> Van der Waals<br />

e immaginiamo una sfera <strong>di</strong> raggio pari alla lunghezza del legame con centro<br />

sull’atomo che stiamo esaminando. Affinché due atomi non entrino in collisione<br />

è necessario che ci sia una certa <strong>di</strong>stanza tra i due, ovvero che le sfere<br />

identificate dai due atomi non si intersechino mai o a meno <strong>di</strong> una certa soglia<br />

o tolleranza.<br />

A partire da questa considerazione, nasce il vincolo <strong>di</strong> non sovrapposizione,<br />

il quale verificherà la consistenza <strong>di</strong> un movimento del ligando. Siano N,<br />

N P rispettivamente gli insiemi degli atomi del ligando e della proteina. Sia<br />

a ∈ N e sia r a il suo raggio atomico, allora ∀n ∈ (N {a}) ∪ N P<br />

‖a − n‖ ≥ r a + r nj ∀j = 1, . . . , |(N {a}) ∪ N P |<br />

dove r nj è il raggio atomico <strong>di</strong> n j .<br />

L’esecuzione del test <strong>di</strong> sovrapposizione richiede un tempo quadratico sul<br />

numero dei no<strong>di</strong>. Osserviamo che, <strong>per</strong> motivi <strong>di</strong> efficienza, il controllo non<br />

verterà su tutti gli atomi appartenenti all’insieme (N{a})∪N P ; nella sezione<br />

4.4 descriveremo l’implementazione lineare utilizzata da ligand-rotation <strong>per</strong><br />

la verifica dell’unico vincolo esistente e si descriveranno le strutture dati<br />

utilizzate <strong>per</strong> poter ridurre l’insieme degli atomi da verificare.<br />

3.2 Visita dello spazio <strong>di</strong> ricerca<br />

Il ligando si presta bene ad essere rappresentato da una struttura dati <strong>di</strong><br />

tipo grafo non orientato. Sia L = (N, A) il grafo in questione (illustrato<br />

in figura 3.4) dove N rappresenta l’insieme degli atomi e A l’insieme dei<br />

legami chimici esistenti tra atomi; e sia P = (N P , A P ) il grafo associato alla<br />

proteina target. Le informazioni relative ai no<strong>di</strong> e agli archi possono essere


26 CAPITOLO 3. FORMALIZZAZIONE<br />

ricavate facilmente dai file <strong>di</strong> estensione mol2, formato standard utilizzato<br />

<strong>per</strong> la rappresentazione <strong>di</strong> molecole (si faccia riferimento alla sezione 4.1.2<br />

<strong>per</strong> ulteriori approfon<strong>di</strong>menti).<br />

Grazie ad una visita sul grafo L, è possibile costruire un albero Z (figura<br />

3.5) definito spanning tree (albero <strong>di</strong> co<strong>per</strong>tura) <strong>per</strong> L, dove l’insieme dei<br />

suoi no<strong>di</strong> coincide con N mentre l’insieme degli archi R dell’albero è un<br />

sottoinsieme <strong>di</strong> A. L’albero Z ha lo scopo <strong>di</strong> dettare un or<strong>di</strong>ne <strong>di</strong> visita degli<br />

atomi della molecola al generatore <strong>di</strong> conformazioni. Ciò dà la possibilità <strong>di</strong><br />

effettuare il controllo <strong>di</strong> consistenza subito dopo la visita <strong>di</strong> un nodo, dato che<br />

i successivi non andranno a influire quello appena visitato (ciò sta a significare<br />

che esso sicuramente non subirà ulteriori rotazioni). Questa tecnica si traduce<br />

quin<strong>di</strong>, in un risparmio in termini temporali: una visita topologica <strong>per</strong>mette,<br />

infatti, <strong>di</strong> minimizzare il numero <strong>di</strong> volte che un atomo viene ruotato. Senza<br />

l’ausilio dell’albero, o <strong>di</strong> una opportuna visita della molecola, e visitando i<br />

no<strong>di</strong> in or<strong>di</strong>ne casuale, gli atomi si stabilizzano più tar<strong>di</strong>, dopo aver fatto<br />

molte più rotazioni del necessario: ciò a causa della <strong>di</strong>pendenza esistente tra<br />

gli atomi. La verifica <strong>di</strong> consistenza si sarebbe dovuta applicare dopo aver<br />

piazzato tutti i no<strong>di</strong> con un conseguente aumento dei tempi <strong>di</strong> esecuzione<br />

e rendendo ligand-rotation un programma inefficiente; inoltre, avrebbe reso<br />

vano l’utilizzo <strong>di</strong> tecniche <strong>di</strong> programmazione a vincoli.<br />

Grazie all’or<strong>di</strong>ne stabilito dalla visita, è possibile costruire una lista D <strong>di</strong><br />

atomi, la quale verrà iterata dal generatore durante la costruzione <strong>delle</strong> molecole.<br />

Ogni elemento della lista avrà associato il suo sottoalbero, <strong>di</strong>pendente<br />

dallo spanning-tree effettuato su L. Da una rotazione dell’elemento D k ne<br />

conseguirà una <strong>di</strong> tutto il suo sottoalbero.<br />

3.2.1 Albero <strong>di</strong> ricerca<br />

Per meglio comprendere in che modo vengono generate tutte le possibili<br />

conformazioni, introduciamo il concetto <strong>di</strong> albero <strong>di</strong> ricerca. Daremo una<br />

definizione costruttiva a livelli dell’albero <strong>di</strong> ricerca T <strong>di</strong> ligand-rotation. A<br />

livello 0 compare l’elemento D 0 . Al livello 1 compare D 1 in tutte le possibili<br />

scelte dettate dalla sua variabile <strong>di</strong> tipo legame, cioè in tutte le possibili<br />

rotazioni che, il legame caratterizzato dal nodo x ∈ Z corrispondente a D 1 e<br />

il padre y ∈ Z <strong>di</strong> x, può effettuare.<br />

Il numero dei no<strong>di</strong> che compaiono a livello k è uguale alle possibili scelte<br />

della variabile legame dell’elemento D k moltiplicata al numero <strong>di</strong> no<strong>di</strong> presenti<br />

a livello k − 1 <strong>di</strong> T . Ne segue che ogni nodo del livello k − 1 ha un<br />

numero <strong>di</strong> figli pari al numero <strong>di</strong> possibili scelte <strong>di</strong> D k .


3.3. GENERAZIONE DELLE CONFORMAZIONI 27<br />

Avremo, dunque, una corrispondenza tra gli alberi Z e T . Un nodo n ∈ T<br />

corrisponde ad una scelta <strong>di</strong> rotazione dell’arco <strong>di</strong> a ∈ Z, o legame chimico,<br />

che collega il nodo <strong>di</strong> Z corrispondente a n e suo padre.<br />

Nelle figure 3.1 e 3.2 sono raffigurati due esempi <strong>di</strong> albero Z e T .<br />

Figura 3.1: Albero Z<br />

Conseguentemente, un cammino ra<strong>di</strong>ce-foglia dell’albero T corrisponde<br />

ad una possibile soluzione e gli atomi compaiono nello stesso or<strong>di</strong>ne della<br />

lista D.<br />

3.3 Generazione <strong>delle</strong> conformazioni<br />

L’idea alla base della generazione <strong>delle</strong> conformazioni è quella <strong>di</strong> visitare l’albero<br />

<strong>di</strong> ricerca T andando ad esplorare tutti i suoi cammini, ovvero esaminare<br />

tutte le possibili scelte <strong>delle</strong> variabili <strong>di</strong> tipo legame <strong>di</strong> tutti gli elementi <strong>di</strong><br />

D.<br />

Il caso base è dato dall’esplorazione del nodo D 0 ; sappiamo che, i no<strong>di</strong><br />

successivi non andranno a mo<strong>di</strong>ficare la sua posizione in quanto ra<strong>di</strong>ce<br />

dell’albero Z. Verifichiamo dunque la consistenza del vincolo su <strong>di</strong> esso: se<br />

non avviene violazione, si prosegue con il nodo successivo D 1 , altrimenti la<br />

computazione termina.<br />

Il passo induttivo è caratterizzato dall’esplorazione del k-esimo elemento<br />

della lista, D k , il quale si trova al livello k <strong>di</strong> un generico cammino dell’albero<br />

T . Dalle considerazioni fatte precedentemente, sappiamo che gli elementi<br />

dell’insieme I k = {D 1 , . . . , D k }, ruotati con un opportuno angolo <strong>delle</strong> rispettive<br />

variabili <strong>di</strong> tipo legame, sono stati validati e quin<strong>di</strong>, non subiranno<br />

mo<strong>di</strong>fiche; ne segue che D k , essendo il figlio <strong>di</strong> un elemento <strong>di</strong> I k già piazzato,<br />

non subirà ulteriori violazioni. Verifichiamo, dunque, la consistenza del


28 CAPITOLO 3. FORMALIZZAZIONE<br />

Figura 3.2: Albero T


3.3. GENERAZIONE DELLE CONFORMAZIONI 29<br />

Figura 3.3: Struttura molecolare del tamoxifene renderizzata con Molegro<br />

Molecular Viewer.


30 CAPITOLO 3. FORMALIZZAZIONE<br />

Figura 3.4: Grafo rappresentante la molecola in figura 3.3. I numeri all’interno<br />

dei no<strong>di</strong> rappresentano l’id degli atomi mentre quelli negli archi<br />

rappresentano l’id dei legami chimici. Grafo costruito con Graphviz.


3.3. GENERAZIONE DELLE CONFORMAZIONI 31<br />

28<br />

1<br />

26<br />

1<br />

5<br />

27<br />

25<br />

5<br />

24<br />

5<br />

23<br />

5<br />

22<br />

1<br />

21<br />

1<br />

20<br />

1<br />

2<br />

5<br />

1<br />

3<br />

1<br />

5<br />

1<br />

1<br />

13<br />

4<br />

29<br />

1<br />

5<br />

5<br />

14<br />

5<br />

7<br />

1<br />

1<br />

1<br />

15<br />

6<br />

8<br />

1<br />

1<br />

16<br />

9<br />

1<br />

1<br />

1<br />

18<br />

17<br />

10<br />

1<br />

1<br />

19<br />

11<br />

1<br />

12<br />

Figura 3.5: Albero ottenuto da una visita sul grafo in figura 3.4. Sui no<strong>di</strong><br />

sono visibili gli id degli atomi mentre agli archi sono associati il numero <strong>delle</strong><br />

rotazioni che ogni legame può compiere. Gli archi tratteggiati rappresentano<br />

quelli effettivamente presenti sul grafo, ma eliminati <strong>per</strong> evitare cicli. Albero<br />

costruito con Graphviz.


32 CAPITOLO 3. FORMALIZZAZIONE<br />

vincolo su D k . Proseguendo con l’elemento D k+1 , del livello k + 1 <strong>di</strong> T , si<br />

aprono un numero <strong>di</strong> scelte pari al numero <strong>di</strong> rotazioni assegnate alla sua<br />

variabile legame, la quale corrisponde all’arco dell’albero Z che collega il<br />

vertice x ∈ Z (identificato da D k+1 ) e suo padre y ∈ Z. In questo punto<br />

dell’o<strong>per</strong>azione, non è necessario conoscere la scelta esplorata sul nodo D k ,<br />

ovvero non è importante sa<strong>per</strong>e quale particolare cammino stiamo seguendo;<br />

esploriamo, dunque, la prima scelta con conseguente verifica del vincolo.<br />

Se ha esito positivo, si piazza l’atomo D k+1 , aggiornando l’insieme I k , che<br />

<strong>di</strong>venta I k+1 = I k ∪{D k+1 } e proseguendo con D k+2 . In caso contrario, grazie<br />

alla procedura <strong>di</strong> backtracking, si seleziona una scelta non ancora esplorata<br />

<strong>per</strong> D k+1 .<br />

Giunti ad una foglia <strong>di</strong> T , ovvero all’elemento D n , la quale si rivela consistente<br />

rispetto al vincolo implementato, il nuovo insieme I n = I n−1 ∪ {D n }<br />

contiene tutti gli atomi consistenti, posizionati rispetto alla particolare variabile<br />

<strong>di</strong> legame a loro corrispondente. Le loro coor<strong>di</strong>nate attuali rappresentano<br />

una soluzione del problema P. A questo punto, si genera un file mol2,<br />

rappresentante una conformazione valida della molecola.<br />

Si prosegue ricercando le altre soluzioni, attivando il backtracking che<br />

risale lungo la lista e quin<strong>di</strong> lungo l’albero <strong>di</strong> ricerca T , <strong>per</strong> analizzare le<br />

scelte non ancora intraprese.<br />

La procedura globale termina quando il backtracking arriva alla ra<strong>di</strong>ce.<br />

3.4 Rotazione <strong>di</strong> un legame<br />

Le rotazioni dei legami rappresentano uno dei gra<strong>di</strong> <strong>di</strong> libertà <strong>di</strong> liganrotation.<br />

Attraverso <strong>di</strong> esse è possibile muovere strutturalmente il ligando<br />

e, con l’intervento della consistenza dei vincoli, si andrà a valutare geometricamente<br />

se il movimento è accettabile o meno.<br />

È doveroso precisare alcuni dettagli qui <strong>di</strong> seguito. Solitamente un ligando<br />

ha un numero elevato <strong>di</strong> legami; ne segue che non tutti ruoteranno. Ciò è<br />

dovuto al fatto che alcuni <strong>di</strong> essi vanno a formare particolari composti. Un<br />

esempio sono gli anelli aromatici, composti organici a struttura planare i cui<br />

legami non sono singoli; ciò implica che il composto è molto stabile e una<br />

rotazione dei suoi legami sarebbe molto improbabile.<br />

Inoltre, eviteremo <strong>di</strong> far ruotare i legami nei quali in una <strong>delle</strong> due estremità<br />

compare un idrogeno. Si tratta <strong>di</strong> una scelta implementativa fatta sostanzialmente<br />

<strong>per</strong> due motivi: in primis, la rotazione <strong>di</strong> un idrogeno non<br />

è necessaria <strong>per</strong>ché questa non apporta benefici all’energia del complesso<br />

proteina-ligando e, in secondo luogo, la rotazione <strong>di</strong> molti legami aumenta la<br />

complessità in tempo <strong>di</strong> ligand-rotation (si veda la sezione 4.5).


3.4. ROTAZIONE DI UN LEGAME 33<br />

a<br />

b<br />

d<br />

c<br />

y<br />

l<br />

e<br />

x<br />

f<br />

g<br />

h<br />

Figura 3.6: Esempio <strong>di</strong> albero Z. In rosso sono evidenziati i no<strong>di</strong> che caratterizzano<br />

il legame ruotante l e in blu gli elementi <strong>di</strong> B che subiranno la<br />

rotazione.<br />

Detto ciò, possiamo ora dare la definizione formale <strong>di</strong> rotazione.<br />

Sia L l’insieme dei legami ruotabili, ovvero l’insieme dei legami tali che:<br />

• non compaiano in composti aromatici;<br />

• gli atomi caratterizzanti il legame non sono degli idrogeni<br />

Poiché un legame identifica un particolare arco dell’albero Z, la sua rotazione<br />

andrà a mo<strong>di</strong>ficare tutto il sottoalbero con ra<strong>di</strong>ce proprio il figlio<br />

dell’arco. Sia l ∈ L un legame che ammette rotazione, x, y rispettivamente<br />

il padre e il figlio del corrispondente arco <strong>di</strong> A e sia B l’insieme dei no<strong>di</strong><br />

del sottoalbero ra<strong>di</strong>cato in y (figura 3.6). L’obiettivo è quello <strong>di</strong> ruotare ogni<br />

nodo <strong>di</strong> B. Ad esempio, data la rotazione del legame l <strong>di</strong> figura 3.6, l’insieme<br />

B è composto dagli elementi {f, g, h}.<br />

Siano X, Y i punti dello spazio associati ai no<strong>di</strong> x, y. Sia inoltre S Y<br />

l’insieme dei punti dello spazio associati all’insieme dei no<strong>di</strong> B. Sia P ∈ S Y<br />

generico e sia t la retta passante <strong>per</strong> i punti X e Y che identifica l’asse <strong>di</strong><br />

rotazione.<br />

Si definisce rotazione <strong>di</strong> Φ gra<strong>di</strong> su t la rotazione effettuata su tutti gli<br />

atomi appartenenti a S Y .


34 CAPITOLO 3. FORMALIZZAZIONE<br />

Figura 3.7: Formula della Rotazione descritta in [8]<br />

O<strong>per</strong>ativamente, la rotazione viene effettuata nel seguente modo: sia P ∈<br />

S Y come mostrato in figura 3.7 e sia s la retta passante <strong>per</strong> N ed O. Calcolo<br />

il versore ˆn attraverso la formula:<br />

ˆn =<br />

N − O<br />

‖N − O‖<br />

Applicando ora la formula 3.2 al punto P , otterremo la retta r ′ e quin<strong>di</strong> il<br />

punto Q. Procedendo con questo algoritmo <strong>per</strong> tutti i punti <strong>di</strong> S Y otterremo<br />

la rotazione lungo s <strong>di</strong> angolo Φ <strong>di</strong> tutto il sottoalbero.<br />

r ′ = −−→ ON + −−→ NV + −→ V Q (3.1)<br />

= r cos Φ + ˆn(ˆn · r)(1 − cos Φ) + (r × ˆn) sin Φ (3.2)<br />

3.5 Esplorazione del sito attivo della proteina<br />

La generazione <strong>delle</strong> combinazioni del ligando (presentata nella sezione 3.3)<br />

non è sufficiente <strong>per</strong> i nostri scopi. Essa ha luogo sul sistema <strong>di</strong> riferimento del<br />

ligando, ignorando completamente la struttura della proteina. In altre parole,<br />

le semplici rotazioni lungo i legami del ligando non bastano, ma sono necessari<br />

altri gra<strong>di</strong> <strong>di</strong> libertà che <strong>per</strong>mettano a ligand-rotation <strong>di</strong> poter esplorare la<br />

cavità della proteina.<br />

L’idea implementata in ligand-rotation consiste nella generazione <strong>di</strong> una<br />

serie <strong>di</strong> basi ortonormali che andranno a campionare i tre gra<strong>di</strong> <strong>di</strong> libertà e,<br />

<strong>per</strong> ognuno <strong>di</strong> essi, si andrà a testare <strong>di</strong>verse origini sul quale posizionare l’atomo<br />

D 0 . L’applicazione <strong>di</strong> queste basi al nostro ligando <strong>di</strong> partenza su tutte


3.5. ESPLORAZIONE DEL SITO ATTIVO DELLA PROTEINA 35<br />

le origini definite dall’utente daranno luogo a una serie <strong>di</strong> ligan<strong>di</strong>, chiamati<br />

ligan<strong>di</strong> base, dall’orientamento spaziale molto vario. Avviando la ricerca <strong>delle</strong><br />

conformazioni su ognuno <strong>di</strong> questi ligan<strong>di</strong>, ligand-rotation sarà in grado <strong>di</strong><br />

ottenere risultati molto sod<strong>di</strong>sfacenti.<br />

Definiamo ora formalmente questi concetti.<br />

3.5.1 Construzione <strong>delle</strong> basi ortonormali<br />

Consideriamo l’insieme H ⊂ R 3 che identifica n punti su una sfera <strong>di</strong> raggio<br />

unitario e su ognuno <strong>di</strong> essi costruiamo un sistema <strong>di</strong> riferimento. Effettuando<br />

k rotazioni <strong>di</strong> 2π/k lungo l’asse in<strong>di</strong>viduato dal versore uscente da ogni punto<br />

<strong>di</strong> H si andranno a generare k sistemi <strong>di</strong> riferimento su ogni punto, con un<br />

totale <strong>di</strong> n · k.<br />

Sia c il versore uscente da un generico punto h ∈ H e sia B = (0, 0, 1) un<br />

versore della base canonica <strong>di</strong> R 3 . Chiamiamo a e b rispettivamente i versori<br />

ottenuti dal prodotto vettoriale tra c e B e tra c e a, ovvero:<br />

a = c × B<br />

b = c × a<br />

(3.3)<br />

Nel caso in cui c sia proprio il versore B, i versori a e b avranno componenti<br />

rispettivamente (1, 0, 0) e (0, 1, 0).<br />

I versori a, b e c identificano il sistema <strong>di</strong> riferimento ortogonale R con<br />

origine nel punto h. Eseguendo k step <strong>di</strong> rotazioni lungo l’asse c, ognuna <strong>di</strong><br />

2π/k, otteniamo i k sistemi <strong>di</strong> riferimento.<br />

Eseguendo questo proce<strong>di</strong>mento <strong>per</strong> ogni punto della sfera otteniamo m =<br />

n · k sistemi <strong>di</strong> riferimento R 1 , . . . , R m .<br />

3.5.2 Generazione ligan<strong>di</strong> base<br />

Avendo ora a <strong>di</strong>sposizione m sistemi <strong>di</strong> riferimento, an<strong>di</strong>amo ad applicare<br />

questi ultimi al ligando iniziale, ottenendo appunto m ligan<strong>di</strong> base.<br />

Per ogni sistema <strong>di</strong> riferimento R i con i = 1, . . . , m, definiamo le matrici<br />

M i ∈ R 3 in modo tale che la prima riga corrisponda al versore a <strong>di</strong> R i , la<br />

seconda e la terza riga rispettivamente b e c <strong>di</strong> R i .<br />

⎡ ⎤ ⎡<br />

⎤<br />

a i a x i a y i a z i<br />

M i = ⎣b i<br />

⎦ = ⎣b x i b y i b z i ⎦ (3.4)<br />

c i c x i c y i c z i<br />

Chiamiamo queste matrici M i , al variare <strong>di</strong> i tra 1 e m, matrice associata<br />

alla base ortonormale <strong>per</strong> R i .


36 CAPITOLO 3. FORMALIZZAZIONE<br />

Il passo successivo consiste nell’applicazione del ligando su ogni sistema<br />

<strong>di</strong> riferimento, con lo scopo <strong>di</strong> ottenerne un insieme da usare come input <strong>per</strong><br />

ligand-rotation. Questo processo può essere descritto grazie alle matrici <strong>delle</strong><br />

basi ortonormali definite poco sopra dalla formula 3.4.<br />

Sia L così definito<br />

L = {q j : j = 1, . . . t}<br />

l’insieme dei punti <strong>di</strong> R 3 , con |L| = t, tale che q j rappresenta la posizione<br />

nello spazio del j-esimo atomo del ligando <strong>di</strong> partenza. Quel che vogliamo<br />

ottenere è un insieme <strong>di</strong> ligan<strong>di</strong> L R 1<br />

, . . . , L Rm tali che:<br />

{<br />

}<br />

L R i<br />

= p (i)<br />

j : j = 1, . . . , t i = 0, . . . , m<br />

con<br />

⎡<br />

⎢<br />

⎣<br />

p (i)<br />

x (i) p j<br />

y (i) p j<br />

z (i) p j<br />

j = M i · q j j = 1, . . . , t<br />

⎤<br />

⎡<br />

⎤ ⎡ ⎤<br />

a x i b x i c x i x qj<br />

⎥<br />

⎦ = ⎣a y i b y i c y i⎦<br />

⎣y qj<br />

⎦<br />

a z i b z i c z i z qj<br />

j = 1, . . . , t<br />

i = 1, . . . , m<br />

dove le M i rappresentano le matrici definite nella formula 3.4.<br />

(3.5)<br />

3.5.3 Campionamento <strong>di</strong> S<br />

L’ultimo passo che resta da fare prima <strong>di</strong> far parire l’algoritmo vero e proprio<br />

è quello <strong>di</strong> traslare ogni ligando L R i<br />

su ogni punto <strong>di</strong> S in modo che D 0<br />

2<br />

coincida con l’origine dei sistemi <strong>di</strong> riferimento; in questo modo partiranno<br />

|S| · m istanze dell’algoritmo generatore <strong>di</strong> tutte le combinazioni valide.<br />

L’insieme S è costruito dai dati forniti dall’utente: due punti e un passo<br />

l. Si costruisce un cubo a partire dalle 2 coor<strong>di</strong>nate e lo si partiziona in tanti<br />

cubetti tali che il loro lato sia uguale a l e che il lato del cubo sia <strong>di</strong>visibile<br />

<strong>per</strong> l. L’insieme <strong>di</strong> tutti gli spigoli dei cubetti è proprio S.<br />

Ligand-rotation non è un software statico, bensì <strong>di</strong>namico e completamente<br />

configurabile dall’utente. Per quanto riguarda la costruzione dell’insieme<br />

S, si dovranno specificare gli estremi dello spazio in cui si vuole che abbia<br />

inizio la costruzione del ligando e il passo <strong>di</strong> campionamento <strong>di</strong> questi punti;<br />

mentre, <strong>per</strong> quel che riguarda i sistemi <strong>di</strong> riferimento, le costanti k e n sono<br />

<strong>per</strong>sonalizzabili.<br />

2 D è l’elenco degli atomi del ligando; sono in or<strong>di</strong>ne secondo la visita effettuata su G.<br />

Si faccia riferimento alla sezione 3.2


Capitolo 4<br />

Dettagli implementativi<br />

In questo capitolo verranno descritti gli algoritmi implementati e le strutture<br />

dati utilizzate in ligand-rotation. In particolare si mostrerà (nella sezione<br />

4.1) come, a partire da un file <strong>di</strong> configurazione, si caricheranno tutte<br />

le informazioni relative al ligando ed alla proteina. Non soltanto, andremo<br />

anche a specificare tutte le opzioni <strong>di</strong>sponibili <strong>per</strong> <strong>per</strong>mettere una buona<br />

<strong>per</strong>sonalizzazione.<br />

In aggiunta, andremo a definire (nella sezione 4.2) <strong>delle</strong> strutture dati che<br />

<strong>per</strong>metteranno a ligand-rotation un incremento <strong>delle</strong> prestazioni, <strong>per</strong> quanto<br />

riguarda la verifica della consistenza del vincolo (sezione 4.4). Questo è<br />

un aspetto molto importante, che ci <strong>per</strong>mette <strong>di</strong> notare che la procedura<br />

che verifica i vincoli viene chiamata dopo ogni movimento del ligando (ossia<br />

parecchie volte) e non è accettabile una inefficienza a questo riguardo.<br />

Andremo ad esaminare nei dettagli (nella sezione 4.3) l’algoritmo principale<br />

del pacchetto. Descriveremo come le varie tecniche presentate fino ad<br />

ora interagiscono tra loro a partire dall’esplorazione del sito attivo fino alla<br />

generazione <strong>di</strong> una conformazione consistente.<br />

Come ultimo argomento (nella sezione 4.5) daremo alcuni accenni circa<br />

la complessità <strong>di</strong> ligand-rotation, in termini <strong>di</strong> tempo e <strong>di</strong> spazio occupato.<br />

4.1 Inizializzazione <strong>di</strong> ligand-rotation<br />

In questa sezione verranno descritte le fasi iniziali in cui ligand-rotation viene<br />

configurato, a partire dal file <strong>di</strong> input <strong>di</strong> configurazione, e inizializzate le sue<br />

strutture dati.<br />

37


38 CAPITOLO 4. DETTAGLI IMPLEMENTATIVI<br />

4.1.1 Acquisizione informazioni <strong>di</strong> configurazione<br />

L’unico modo che ha un utente <strong>di</strong> comunicare con ligand-rotation è attraverso<br />

il file <strong>di</strong> configurazione; configurazione, in cui è possibile specificare tutti i<br />

parametri, sia funzionali che qualitativi, utilizzati dall’algoritmo <strong>di</strong> docking:<br />

• ligando: specificare file mol2 1 contenente le coor<strong>di</strong>nate del can<strong>di</strong>dato<br />

ligando<br />

• proteina: file mol2 contenente le posizioni degli atomi della proteina<br />

target<br />

• step rotazioni: specifica il numero <strong>di</strong> rotazioni che un legame ruotante<br />

compie<br />

• legami bloccati: specifica, in sequenza, l’id 2 dei legami che non devono<br />

ruotare<br />

• coor<strong>di</strong>nate sito attivo: specifica gli estremi dell’area in cui si trova il<br />

sito attivo della proteina<br />

• passo area <strong>di</strong> lavoro: in<strong>di</strong>ca il passo con cui l’area del sito attivo verrà<br />

partizionata<br />

• set punti iniziali: specifica gli estremi dell’area in cui si piazzerà il primo<br />

atomo del ligando<br />

• passo punti iniziali: passo <strong>di</strong> partizionamento dell’area contenente i<br />

punti iniziali<br />

• punti sfera: numero dei punti sulla sfera <strong>di</strong> raggio unitario nei quali si<br />

genereranno le basi ortonormali<br />

• rotazioni su Z: step <strong>di</strong> rotazioni <strong>delle</strong> basi ortonormali sull’asse Z<br />

Una volta in possesso <strong>di</strong> questi parametri, si andrà a generare prima <strong>di</strong><br />

tutto il grafo rappresentante il ligando, L = (N, A) e, in un secondo momento,<br />

l’albero T , grazie ad una visita V su L.<br />

1 mol2 rappresenta un formato standard <strong>di</strong> rappresentazione <strong>delle</strong> molecole.<br />

Approfon<strong>di</strong>remo l’argomento nella sezione 4.1.2<br />

2 L’Id corrisponde a quello specificato nel file mol2


4.1. INIZIALIZZAZIONE DI LIGAND-ROTATION 39<br />

Implementazione<br />

La realizzazione dei no<strong>di</strong> e degli archi è stata resa possibile grazie all’ausilio<br />

<strong>delle</strong> classi Nodo e Arco (nelle figure 4.1 e 4.2 viene presentata una possibile<br />

implementazione <strong>delle</strong> due strutture). Il grafo che rappresenta la molecola è<br />

stato implementato con <strong>delle</strong> liste <strong>di</strong> a<strong>di</strong>acenza (co<strong>di</strong>ce 4.3), con particolare<br />

riguardo all’efficienza, visti i numerosi accessi in lettura.<br />

✞<br />

✡✝<br />

Co<strong>di</strong>ce 4.1: Struttura della classe Nodo<br />

class Nodo {<br />

public :<br />

// . . .<br />

private :<br />

int id atomo ;<br />

s t r i n g nome atomo ;<br />

MyReal x ;<br />

MyReal y ;<br />

MyReal z ;<br />

s t r i n g tipo atomo ;<br />

MyReal r a g g i o a t o m ico ;<br />

} ;<br />

✆<br />

✞<br />

✡✝<br />

Co<strong>di</strong>ce 4.2: Struttura della classe Arco<br />

class Arco {<br />

public :<br />

// . . .<br />

private :<br />

int id legame ;<br />

int atomo1 ;<br />

int atomo2 ;<br />

s t r i n g tipo legame ;<br />

int r o t a z i o n i l e g a m e ;<br />

} ;<br />

✆<br />

Per motivi <strong>di</strong> efficienza, l’implementazione del grafo è stata realizzata <strong>per</strong><br />

mezzo <strong>di</strong> una matrice <strong>di</strong> vettori della libreria standard del C++. Nella prima<br />

colonna sono stati <strong>di</strong>sposti tutti gli id dei no<strong>di</strong>, mentre, su ogni riga, una<br />

lista degli id corrispondenti agli archi caratterizzanti il nodo stesso.


40 CAPITOLO 4. DETTAGLI IMPLEMENTATIVI<br />

✞<br />

Co<strong>di</strong>ce 4.3: Struttura della classe Grafo<br />

class Grafo {<br />

public :<br />

// . . .<br />

private :<br />

std : : vector legami ;<br />

std : : vector atomi ;<br />

std : : vector < std : : vector > molecola ;<br />

✡✝<br />

} ;<br />

// . . .<br />

✆<br />

Il passo successivo consiste nell’impostare, negli oggetti <strong>di</strong> tipo Arco, le<br />

rotazioni possibili <strong>per</strong> ogni legame attraverso il metodo imposta legami(),<br />

specificate nel file mol2 con la seguente sintassi:<br />

• ar: legame facente parte <strong>di</strong> un composto aromatico<br />

• 1: legame singolo o semplice<br />

• 2: legame doppio<br />

Qui <strong>di</strong> seguito lo pseudoco<strong>di</strong>ce della procedura:<br />

✞ Co<strong>di</strong>ce 4.4: Pseudoco<strong>di</strong>ce del metodo imposta rotazioni()<br />

for arco in a r c h i m o l e c o l a ( )<br />

i f arco . tipo legame i s ‘ ‘ ar ’ ’<br />

arco . r o t a z i o n i l e g a m e = 1<br />

else i f arco . tipo legame i s not ‘ ‘1 ’ ’<br />

arco . r o t a z i o n i l e g a m e = 1<br />

else i f arco . c o n t a i n s (H)<br />

arco . r o t a z i o n i l e g a m e = 1<br />

else<br />

arco . r o t a z i o n i l e g a m e = k<br />

✡✝<br />

✆<br />

4.1.2 Struttura file mol2<br />

Il file mol2 è uno dei sistemi <strong>per</strong> poter rappresentare la struttura <strong>di</strong> una<br />

molecola attraverso file. Qui <strong>di</strong> seguito un esempio <strong>di</strong> file mol2:


4.2. STRUTTURE DATI DEL RISOLUTORE 41<br />

@MOLECULE<br />

4OHT<br />

29 31 1 0 0<br />

SMALL<br />

USER_CHARGES<br />

@ATOM<br />

1 C1 31.1300 -1.5780 24.9020 C.ar 1 LIG600 0.00<br />

2 O1 25.1930 -1.6480 26.9150 O.3 1 LIG600 0.00<br />

3 C2 31.5550 -1.7460 26.2270 C.ar 1 LIG600 0.00<br />

4 O2 33.4760 -3.6110 23.0430 O.3 1 LIG600 0.00<br />

5 N1 34.3180 -4.9410 20.4290 N.3 1 LIG600 1.00<br />

@BOND<br />

1 1 2 ar<br />

2 2 3 1<br />

3 3 4 1<br />

4 4 5 2<br />

@SUBSTRUCTURE<br />

1 LIG600 1 GROUP 1 LIG 1<br />

Nella sezione MOLECULE vengono riassunte le informazioni principali<br />

della molecola, come il suo nome, il numero degli atomi e dei legami chimici.<br />

Le sessioni ATOM e BOND sono le più importanti <strong>per</strong> i nostri scopi. Nella<br />

prima, infatti, vengono elencati tutti gli atomi della molecola, identificati da<br />

un Id, con le loro posizioni nello spazio e il tipo <strong>di</strong> ibri<strong>di</strong>zzazione assunta. Per<br />

esempio, l’atomo indentificato dall’Id 2 è un ossigeno con coor<strong>di</strong>nate x, y, z<br />

rispettivamente (25.1930, −1.6480, 26.9150), caratterizzato da una ibri<strong>di</strong>zzazione<br />

sp 3 . Nella seconda, si elencano i legami chimici esistenti tra atomi, in<br />

cui la prima colonna contiene l’id del legame, la seconda e la terza, rispettivamente<br />

gli Id degli atomi coinvolti e la quarta il tipo <strong>di</strong> legame (ar <strong>per</strong><br />

legame facente parte <strong>di</strong> un composto aromatico, 1 legame singolo, etc..).<br />

Per ulteriori approfon<strong>di</strong>menti si rimanda al sito web<br />

http://tripos.com/data/support/mol2.pdf<br />

4.2 Strutture dati del risolutore<br />

Qui <strong>di</strong> seguito verranno illustrate alcune strutture dati utilizzate dal risolutore<br />

dei vincoli <strong>di</strong> ligand-rotation.


42 CAPITOLO 4. DETTAGLI IMPLEMENTATIVI<br />

4.2.1 Matrice <strong>di</strong> Vicinanza<br />

La matrice <strong>di</strong> vicinanza, in<strong>di</strong>cata con M ∈ {0, 1} n×n , n = |N| con N l’insieme<br />

degli atomi del ligando, è una matrice quadrata <strong>di</strong> or<strong>di</strong>ne n, booleana, dove<br />

gli in<strong>di</strong>ci <strong>di</strong> riga e <strong>di</strong> colonna corrispondono agli id degli atomi. Lo scopo<br />

<strong>di</strong> M è quello <strong>di</strong> specificare gli atomi a<strong>di</strong>acenti <strong>per</strong> ogni atomo del ligando.<br />

Nel momento in cui si posizionerà un atomo a ∈ V e si andrà a verificare la<br />

consistenza del vincolo <strong>di</strong> <strong>di</strong>stanza su <strong>di</strong> esso, si eviterà <strong>di</strong> calcolare la <strong>di</strong>stanza<br />

euclidea tra a e i suoi a<strong>di</strong>acenti. Questo <strong>per</strong>ché, essendo i vicini una catena<br />

<strong>di</strong> atomi legati tra loro covalentemente, non vale più il concetto <strong>di</strong> sfera <strong>di</strong><br />

Van der Waals. La lunghezza del legame covalente è inferiore rispetto alla<br />

lunghezza <strong>di</strong> un legame <strong>di</strong> Van der Waals e, evitando questo controllo, si<br />

otterrebbero dei ‘falsi positivi’.<br />

Formalizziamo il concetto <strong>di</strong> a<strong>di</strong>acenza:<br />

Definizione 4.1. Un atomo x ∈ N è a<strong>di</strong>acente ad un altro atomo y ∈ N se<br />

e solo se il cammino tra x e y ha lunghezza massima 3, ovvero il cammino<br />

non deve essere composto da più <strong>di</strong> tre legami.<br />

Avremo quin<strong>di</strong>, <strong>per</strong> ogni atomo del ligando una serie <strong>di</strong> atomi a<strong>di</strong>centi.<br />

In<strong>di</strong>chiamo questo fatto con la seguente notazione: <strong>per</strong> ogni atomo a ∈ N<br />

adj(a) = {v ∈ N : M(a, v) = M(v, a) = M(a, a) = true}<br />

La costruzione <strong>di</strong> M viene effettuata grazie a n visite in ampiezza sul<br />

grafo L del ligando, dove |N| = |n|, specificando su ogni computazione il<br />

livello <strong>di</strong> profon<strong>di</strong>tà, cioè 3.<br />

4.2.2 Discretizzazione <strong>di</strong> un sottoinsieme limitato <strong>di</strong><br />

R 3<br />

Consideriamo una porzione cubica <strong>di</strong> spazio, V, identificato da due punti<br />

(due vertici del cubo) corrispondenti rispettivamente alle coor<strong>di</strong>nate minime<br />

e massime <strong>delle</strong> tre <strong>di</strong>mensioni: lunghezza, larghezza e profon<strong>di</strong>tà. Siano Min<br />

e Max tali punti e sia p il lato del cubo.<br />

Consideriamo una sua <strong>di</strong>scretizzazione: <strong>di</strong>vi<strong>di</strong>amo V in tante celle cubiche<br />

C <strong>di</strong> uguale <strong>di</strong>mensione, caratterizzate anch’esse da un minimo, Min C , un<br />

massimo, Max C , e un passo l ≤ p tale che p sia <strong>di</strong>visibile <strong>per</strong> l. Sia C l’insieme<br />

<strong>di</strong> tutte le celle <strong>di</strong> V; ogni cella rappresenta anch’essa un sottoinsieme limitato<br />

<strong>di</strong> R 3 .<br />

Ogni cella potrà memorizzare al suo interno un insieme <strong>di</strong> atomi. Dato un<br />

atomo a, esso stazionerà all’interno <strong>di</strong> una particolare cella C a se le coor<strong>di</strong>nate<br />

<strong>di</strong> a appartengono all’insieme dei punti <strong>di</strong> R 3 , in<strong>di</strong>viduati da C a .


4.2. STRUTTURE DATI DEL RISOLUTORE 43<br />

Definizione 4.2. [Appartenenza]<br />

Siano (x a , y a , z a ) le coor<strong>di</strong>nate <strong>di</strong> a e sia P Ca l’insieme dei punti <strong>di</strong> R 3 appartenenti<br />

alla cella C a :<br />

P Ca = { }<br />

(x, y, z) ∈ R 3 : Min x ≤ x < Max x ∧ Min y ≤ y < Max y ∧ Min z ≤ z < Min z<br />

dove (Min x , Min y , Min z ) = Min C e (Max x , Max y , Max z ) = Max C . Allora:<br />

a ∈ C a<br />

⇐⇒ (x a , y a , z a ) ∈ P Ca<br />

Figura 4.1: Quattro celle cubiche con all’interno alcuni atomi.<br />

L’insieme V appena introdotto avrà un ruolo fondamentale nel risolutore<br />

<strong>di</strong> vincoli da noi implementato. Le celle rappresentano la struttura base a<br />

cui si accederà <strong>per</strong> la verifica della consistenza del vincolo <strong>di</strong> non sovrapposizione.<br />

Durante l’esecuzione dell’algoritmo <strong>di</strong> ligand-rotation, quando siamo<br />

sicuri che un atomo, supponiamo D k , non verrà può ruotato 3 , è necessario<br />

verificare la consistenza su <strong>di</strong> esso. Per far ciò, ci cerca <strong>di</strong> inserirlo all’interno<br />

<strong>di</strong> una cella; se nelle sue vicinanze ci sono altri atomi, l’inserimento fallisce,<br />

altrimenti ha successo. Viceversa, nel momento in cui si fa backtracking su<br />

D k , l’o<strong>per</strong>azione da eseguire è quella inversa: eliminare l’atomo D k dalla cella<br />

in cui si trova, in quanto si sta cercando una nuova configurazione e quin<strong>di</strong> subirà<br />

una potenziale rotazione. In questo modo, la struttura dati conterrà solo<br />

atomi consistenti e la verifica dei vicini sarà effettuata molto efficientemente<br />

grazie ai meto<strong>di</strong> implementati su <strong>di</strong> essa.<br />

3 Nella sezione 4.3.2 descriveremo nei dettagli il momento esatto in cui si verifica la<br />

consistenza.


44 CAPITOLO 4. DETTAGLI IMPLEMENTATIVI<br />

Identificazione <strong>delle</strong> celle<br />

Supponendo <strong>di</strong> dover inserire un atomo a all’interno <strong>di</strong> una cella, la sua<br />

identificazione si ottiene ricavando tre in<strong>di</strong>ci, univoci <strong>per</strong> ogni cella, (X, Y, Z),<br />

a partire dalle coor<strong>di</strong>nate (x, y, z) <strong>di</strong> a:<br />

X = ⌊ x − Min x<br />

⌋<br />

l<br />

Implementazione<br />

Y = ⌊ y − Min y<br />

⌋<br />

l<br />

Z = ⌊ z − Min z<br />

⌋<br />

l<br />

Una simile struttura dati può essere facilmente implementata con dei vector<br />

della libreria standard del C++.<br />

✞<br />

Co<strong>di</strong>ce 4.5: Implementazione <strong>di</strong> V<br />

std : : vector < std : : vector < std : : vector > ><br />

✡✝<br />

✆<br />

Al contrario, una cella è stata implementata <strong>per</strong> mezzo <strong>di</strong> una classe,<br />

affinché possa memorizzare al suo interno l’insieme degli atomi.<br />

✞<br />

✡✝<br />

Co<strong>di</strong>ce 4.6: Implementazione <strong>di</strong> una cella<br />

class C e l l a {<br />

private :<br />

std : : vector atomi ;<br />

public :<br />

. . .<br />

} ;<br />

✆<br />

Insieme <strong>delle</strong> o<strong>per</strong>azioni<br />

L’insieme <strong>delle</strong> o<strong>per</strong>azioni ammesse <strong>per</strong> la struttura V e <strong>per</strong> la Cella sono<br />

elencate qui <strong>di</strong> seguito con il relativo pseudoco<strong>di</strong>ce.<br />

• dato un atomo, identificazione della sua cella (co<strong>di</strong>ce 4.7)<br />

• inserimento <strong>di</strong> un atomo in una cella (co<strong>di</strong>ce 4.8)<br />

• eliminazione <strong>di</strong> un atomo da una cella (co<strong>di</strong>ce 4.9)


4.2. STRUTTURE DATI DEL RISOLUTORE 45<br />

✞<br />

✡✝<br />

Co<strong>di</strong>ce 4.7: Pseudoco<strong>di</strong>ce <strong>per</strong> l’identificazione <strong>di</strong> una cella<br />

V : : i d e n t i f i c a c e l l a ( atomo ) {<br />

// . . .<br />

i d c e l l a [ 0 ] = ( atomo . x − Min . x )/p ;<br />

i d c e l l a [ 1 ] = ( atomo . y − Min . y )/p ;<br />

i d c e l l a [ 2 ] = ( atomo . z − Min . z )/p ;<br />

return i d c e l l a ;<br />

}<br />

✆<br />

✞<br />

✡✝<br />

Co<strong>di</strong>ce 4.8: Pseudoco<strong>di</strong>ce <strong>per</strong> l’inserimento <strong>di</strong> un atomo in una cella<br />

V : : i n s e r i s c i ( atomo ) {<br />

// . . .<br />

i d c e l l a = V : : i d e n t i f i c a c e l l a ( atomo ) ;<br />

i f ( i d c e l l a != NULL)<br />

C e l l a : : i n s e r i s c i ( i d c e l l a , atomo ) ;<br />

}<br />

C e l l a : : i n s e r i s c i ( i d c e l l a , atomo ) {<br />

// . . .<br />

cubo . at ( i d c e l l a ) . push back ( atomo ) ;<br />

}<br />

✆<br />

Osserviamo che, durante l’identificazione della cella, nel caso in cui le<br />

coor<strong>di</strong>nate dell’atomo non appartengano alla porzione <strong>di</strong> spazio V riene restituito<br />

il valore NULL.<br />

4.2.3 Celle contenenti atomi ‘vicini’<br />

Lo scopo <strong>di</strong> questo paragrafo è illustrare in che modo vengono recu<strong>per</strong>ate<br />

le celle contenenti gli atomi definiti ‘vicini’, ovvero quelli che subiranno il<br />

controllo della <strong>di</strong>stanza euclidea con l’atomo da inserire da parte del risolutore<br />

<strong>di</strong> vincoli. Definiamo prima <strong>di</strong> tutto il concetto <strong>di</strong> atomo vicino e l’insieme<br />

formato da questi ultimi.<br />

Definizione 4.3. Sia a ∈ C un generico atomo appartente ad una cella,<br />

anch’essa generica. L’insieme G è composto dall’insieme degli atomi appartenenti<br />

ad una qualche cella <strong>di</strong> V tali che la loro <strong>di</strong>stanza euclidea da a sia<br />

inferiore o uguale alla somma del raggio atomico <strong>di</strong> a e del raggio atomico<br />

massimale degli atomi del ligando.


46 CAPITOLO 4. DETTAGLI IMPLEMENTATIVI<br />

✞<br />

✡✝<br />

Co<strong>di</strong>ce 4.9: Pseudoco<strong>di</strong>ce <strong>per</strong> l’eliminazione <strong>di</strong> un atomo da una cella<br />

V : : e l i m i n a ( atomo ) {<br />

// . . .<br />

i d c e l l a = V : : i d e n t i f i c a c e l l a ( atomo ) ;<br />

C e l l a : : e l i m i n a ( i d c e l l a , atomo ) ;<br />

}<br />

C e l l a : : i n s e r i s c i ( i d c e l l a , atomo ) {<br />

// . . .<br />

cubo . at ( i d c e l l a ) . pop back ( atomo ) ;<br />

}<br />

✆<br />

Costruire l’insieme G non è affatto semplice, in quanto occorre esplorare<br />

tutta la porzione <strong>di</strong> spazio che comprende l’atomo da inserire. L’approccio<br />

utilizzato da ligand-rotation consiste nell’in<strong>di</strong>viduazione <strong>di</strong> tutte le celle che<br />

potenzialmente potrebbero contenere atomi vicini. Sia R il raggio massimo<br />

degli atomi componenti il complesso ligando-proteina, sia r il raggio dell’atomo<br />

da inserire e c la cella in cui inserirlo. Da queste due informazioni ci<br />

costruiamo il range <strong>delle</strong> celle da controllare, dato da:<br />

range = ⌊ R + r ⌋ + 1<br />

l<br />

L’insieme <strong>delle</strong> celle K i cui in<strong>di</strong>ci rispetto c spaziano della quantità range<br />

sono proprio quelle che il risolutore andrà ad esaminare <strong>per</strong> la verifica del<br />

vincolo <strong>di</strong> vicinanza.<br />

4.3 Algoritmo <strong>di</strong> ligand-rotation<br />

In questa sezione verrà presentato nei dettagli il cuore dell’algoritmo <strong>di</strong> docking.<br />

Si parlerà <strong>di</strong> consistenza in riferimento all’unico vincolo implementato<br />

su ligand-rotation, ovvero quello <strong>di</strong> non sovrapposizione. La prima o<strong>per</strong>azione<br />

effettuata su V è quella relativa al piazzamento degli atomi della proteina.<br />

Questi, infatti, vengono inseriti imme<strong>di</strong>atamente <strong>per</strong> il semplice motivo che<br />

la proteina è un corpo statico e quin<strong>di</strong> gli atomi non verranno mai spostati<br />

<strong>di</strong> posizione. Notiamo che l’inserimento avviene senza il controllo della<br />

consistenza.


4.3. ALGORITMO DI LIGAND-ROTATION 47<br />

4.3.1 Parte I: inizializzazione<br />

Come descritto formalmente nella sezione 3.5, questa fase si occupa della<br />

generazione degli m sistemi <strong>di</strong> riferimento su cui applicare il ligando base,<br />

ottenendo quin<strong>di</strong> m ligan<strong>di</strong> <strong>di</strong> partenza pronti <strong>per</strong> essere computati, ognuno<br />

con un orientamento <strong>di</strong>fferente. Di seguito lo pseudoco<strong>di</strong>ce:<br />

✞ Co<strong>di</strong>ce 4.10: Pseudoco<strong>di</strong>ce relativo alla generazione dei ligan<strong>di</strong> base<br />

P = p u n t i s f e r a ( k )<br />

S = c a m p i o n a p u n t i i n i z i a l i ( j )<br />

for p in P<br />

Z = a s s e z<br />

B = base (Z)<br />

X = p r o d o t t o V e t t o r i a l e (Z , B)<br />

Y = p r o d o t t o V e t t o r i a l e (Z , X)<br />

norma1 (X)<br />

norma1 (Y)<br />

T = numeroRotazioniZ ( )<br />

for t in T<br />

ruota su Z ( angolo )<br />

t r a s l o m o l e c o l a (O(X, Y, Z ) )<br />

r u o t a m o l e c o l a (X, Y, Z)<br />

for s in S<br />

t r a s l o m o l e c o l a ( s )<br />

g e n e r a c o n f o r m a z i o n i ( )<br />

angolo += step<br />

✡✝<br />

✆<br />

La funzione punti sfera(k) genera k punti <strong>di</strong>sposti uniformemente su una<br />

sfera <strong>di</strong> raggio unitario e, su ognuno <strong>di</strong> questi, si costruirà un sistema <strong>di</strong><br />

riferimento (come spiegato formalmente nella sezione 3.5.1). Successivamente<br />

lo si ruoterà <strong>di</strong> T step lungo l’asse Z, ottenendo il terzo grado <strong>di</strong> libertà.<br />

Sull’origine dei sistemi <strong>di</strong> riferimento appena generati, si andrà a posizionare<br />

l’atomo D 0 del ligando e si ruoterà la molecola in modo tale da applicarle<br />

la base appena generata. I ligan<strong>di</strong> che si otterrano andranno riposizionati<br />

su ogni punto <strong>di</strong> S, insieme <strong>di</strong> coor<strong>di</strong>nate definite dall’utente e campionate<br />

dal metodo campiona punti iniziali(j) (con passo j) facendo, come al solito,<br />

coincidere l’atomo D 0 dei ligan<strong>di</strong> con i vari punti <strong>di</strong> S. In conclusione, <strong>per</strong><br />

ognuno dei ligan<strong>di</strong> applicati sui sistemi <strong>di</strong> riferimento costruiti, si farà partire<br />

l’algoritmo che genererà tutte le strutture consistenti, attraverso la chiamata<br />

alla funzione genera conformazioni().


48 CAPITOLO 4. DETTAGLI IMPLEMENTATIVI<br />

4.3.2 Parte II: generazione conformazioni<br />

In seguito all’esecuzione della prima parte dell’algoritmo, ora abbiamo a<br />

<strong>di</strong>sposizione un set <strong>di</strong> ligan<strong>di</strong> L R i<br />

, i = 1, . . . , m da poter utilizzare come<br />

partenza <strong>per</strong> la generazione <strong>delle</strong> conformazioni consistenti.<br />

Sia fissato k ∈ {1, . . . , m} e consideriamo L R k il ligando su cui eseguire<br />

la computazione.<br />

Sia inoltre D l’elenco or<strong>di</strong>nato degli atomi <strong>di</strong> L R k ottenuto da una visita<br />

V sul grafo G, <strong>di</strong> cui ne abbiamo <strong>di</strong>scusso nella sezione 3.3.<br />

Qui <strong>di</strong> seguito lo pseudoco<strong>di</strong>ce dell’algoritmo utilizzato in ligand-rotation:<br />

✞<br />

g e n e r a c o n f o r m a z i o n i ( i )<br />

i f D[ i ] i s root<br />

i f v e r i f i c a v i n c o l o (D[ i ] )<br />

i++<br />

g e n e r a c o n f o r m a z i o n i ( i )<br />

backtracking ( i )<br />

i−−<br />

backtracking ( i )<br />

else<br />

termina computazione ( )<br />

else<br />

s a l v a s o t t o a l b e r o (D[ i ] )<br />

a n g o l o r o t a z i o n e = 0<br />

for r o t a z i o n e in r o t a z i o n i (D[ i ] )<br />

i f v e r i f i c a v i n c o l o (D[ i ] )<br />

r u o t a s o t t o a l b e r o (D[ i ] , a n g o l o r o t a z i o n e )<br />

i++<br />

i f not D[ i ] i s l a s t<br />

g e n e r a c o n f o r m a z i o n i ( i )<br />

backtracking ( i )<br />

else<br />

s c r i v i c o n f o r m a z i o n e ( )<br />

i−−<br />

r i p r i s t i n a s o t t o a l b e r o (D[ i ] )<br />

a n g o l o r o t a z i o n e += step<br />

else :<br />

a n g o l o r o t a z i o n e += step<br />

r i p r i s t i n a s o t t o a l b e r o (D[ i ] )<br />

r u o t a s o t t o a l b e r o (D[ i ] , a n g o l o r o t a z i o n e )<br />

✡✝<br />


4.3. ALGORITMO DI LIGAND-ROTATION 49<br />

Il primo passo dell’algoritmo sarà quello <strong>di</strong> testare, sull’atomo ra<strong>di</strong>ce, cioè<br />

D 0 , il vincolo <strong>di</strong> consistenza attraverso verifica vincolo(D 0 ). Nel caso <strong>di</strong> fallimento<br />

la computazione fallirà imme<strong>di</strong>atamente e si procederà con un nuovo<br />

ligando L Rh con h ≠ k; altrimenti, si memorizzerà la posizione dell’atomo D 0<br />

sulla sua cella corrispondente, (cf. paragrafo 4.2.2) e si procederà con l’atomo<br />

successivo D 1 con la chiamata ricorsiva genera conformazioni(1).<br />

Supponiamo ora <strong>di</strong> essere arrivati ad una situazione <strong>di</strong> questo tipo: abbiamo<br />

appena verificato e convalidato il vincolo sull’atomo D i−1 e ruotato il sottoalbero<br />

con ra<strong>di</strong>ce il nodo corrispondente a D i−1 . Gli atomi attualmente presenti<br />

in V, oltre quelli appartenenti alla proteina, sono I = {D 0 , . . . , D i−1 }.<br />

Siamo in procinto <strong>di</strong> avviare la computazione <strong>per</strong> l’atomo D i con la chiamata<br />

ricorsiva genera conformazioni(i).<br />

Una volta chiamata, la procedura salva sottoalbero(D i ) salva la posizione<br />

<strong>di</strong> tutti gli atomi del sottoalbero con ra<strong>di</strong>ce l’atomo corrispondente a D i<br />

(approfon<strong>di</strong>remo il <strong>per</strong>ché <strong>di</strong> questa scelta nel paragrafo 4.3.2). Tra le possibili<br />

scelte <strong>di</strong> rotazione su D i , si prende la prima e si verifica, quin<strong>di</strong>, il vincolo <strong>di</strong><br />

consistenza su D i .<br />

Osserviamo come la verifica <strong>di</strong> consistenza viene effettuata sull’unico atomo<br />

D i . In questo istante, si è certi che D i non subirà ulteriori rotazioni e se<br />

valido, lo rimarrà fino a quando non verrà rimosso dalla struttura dati <strong>di</strong> cui<br />

si serve il risolutore, tramite la procedura <strong>di</strong> backtracking. Inoltre, essendo<br />

gli atomi dell’insieme I già validati e quin<strong>di</strong> presenti all’interno <strong>delle</strong> celle <strong>di</strong><br />

V si è certi che questi sono rimasti consistenti all’avanzare dell’algoritmo.<br />

Nel caso <strong>di</strong> consistenza <strong>di</strong> D i , si procede alla rotazione del suo sottoalbero<br />

(come spiegato nella sezione 3.4). Fatto ciò, si passa al nodo successivo e,<br />

se non è l’ultimo, si richiama ricorsivamente la procedura proprio su D i+1 ;<br />

in caso contrario, avendo su<strong>per</strong>ato con successo tutti i vincoli su tutti gli<br />

atomi, siamo arrivati alla fine della molecola. Creiamo, quin<strong>di</strong>, il file mol2 del<br />

ligando appena generato. Nel caso in cui il vincolo <strong>di</strong> consistenza sull’atomo<br />

D i fallisce, si procede ad effettuare il backtracking <strong>per</strong> portarci all’atomo<br />

precedente, si ripristina la situazione precedente alla rotazione e quin<strong>di</strong>, si<br />

termina la computazione del nodo D i con la sua successiva eliminazione dalla<br />

struttura dati del risolutore attraverso la procedura backtracking(i). Se D i−1<br />

può effettuare ulteriori rotazioni, si prosegue <strong>per</strong> questa scelta, altrimenti<br />

termina l’esplorazione del sottoalbero con ra<strong>di</strong>ce D i−1 .<br />

Nel momento in cui si esplorano tutte le scelte dei no<strong>di</strong>, l’ultima o<strong>per</strong>azione<br />

da fare è eliminare l’atomo ra<strong>di</strong>ce dalla sua cella e procedere con un<br />

nuovo ligando base.


50 CAPITOLO 4. DETTAGLI IMPLEMENTATIVI<br />

Ripristino situazione precedenete alla rotazione<br />

L’aspetto chiave della seconda fase dell’algoritmo è senza dubbio la visita<br />

dell’albero <strong>di</strong> ricerca. Qui vengono intraprese tutte le scelte possibili dei no<strong>di</strong><br />

e, <strong>di</strong> conseguenza, le rotazioni effettuate sul ligando base sono numerose;<br />

l’effetto negativo è la presenza <strong>di</strong> errori numerici. Infatti, sapendo <strong>di</strong> avere<br />

a che fare con una mole <strong>di</strong> calcoli su R, dobbiamo preoccuparci dell’aritmetica<br />

macchina e quin<strong>di</strong> del risultante accumulo <strong>di</strong> errore nelle o<strong>per</strong>azioni <strong>di</strong><br />

rotazione.<br />

Si può ricorrere a due tipi <strong>di</strong> soluzione:<br />

• rotazione inversa<br />

• memorizzazione informazioni prima della rotazione<br />

Nel caso della rotazione inversa, prima <strong>di</strong> intraprendere le <strong>di</strong>verse scelte<br />

<strong>di</strong> rotazione <strong>di</strong> un nodo, si effettua una rotazione inversa <strong>per</strong> portarci al caso<br />

base, quin<strong>di</strong> ruotare nuovamente <strong>per</strong> proseguire lungo una scelta. Lo svantaggio<br />

<strong>di</strong> questa tecnica è che, seppur limitatamente, an<strong>di</strong>amo incontro ad<br />

accumulo <strong>di</strong> errore: la rotazione inversa non è la funzione inversa della rotazione.<br />

Per cui, l’applicazione <strong>di</strong> essa non ci porterà alla situazione iniziale,<br />

bensì ad una simile che si ri<strong>per</strong>quoterà sulle rotazioni <strong>di</strong> tutto il suo sottoalbero.<br />

Nella seconda soluzione, implementata su ligand-rotation, il ripristino si<br />

basa su una apposita struttura dati. Prima della rotazione <strong>di</strong> un sottoalbero,<br />

cioè prima <strong>di</strong> effettuare una scelta sul livello k, si salva la situazione corrente<br />

dei no<strong>di</strong>, ovvero le loro coor<strong>di</strong>nate spaziali, <strong>per</strong> poi venire ripristinata quando<br />

la procedura del backtracking ci riporta al livello k <strong>per</strong> <strong>per</strong>correre un’altra<br />

scelta. Al contrario della prima soluzione, l’unico errore numerico commesso<br />

è nel calcolo della singola rotazione il quale, non si ri<strong>per</strong>quoterà né sulle rotazioni<br />

successive dello stesso nodo né sulle rotazioni dei no<strong>di</strong> del sottoalbero.<br />

L’unico svantaggio è nell’occupazione <strong>di</strong> memoria: <strong>per</strong> ogni livello e <strong>per</strong> ogni<br />

scelta si dovrà memorizzare la situazione del sottoalbero. Comunque, avendo<br />

a che fare con ligan<strong>di</strong> composti da poche decine <strong>di</strong> atomi, al massimo un<br />

centinaio, le informazioni da salvare sono contenute.<br />

4.4 Consistenza del vincolo<br />

La definizione <strong>di</strong> consistenza del vincolo data in precedenza, seppure esatta,<br />

è estremamente inefficiente. Infatti, è inutile effettuare il controllo <strong>di</strong> sovrapposizione<br />

su atomi <strong>di</strong>stanti o ad<strong>di</strong>ritura su atomi non ancora piazzati. Ciò<br />

che formalizzeremo ora è l’algoritmo implementato da ligand-rotation <strong>per</strong> la<br />

verifica della consistenza, grazie alle strutture dati definite nella sezione 4.2.


4.5. ACCENNI DI COMPLESSITÀ 51<br />

4.4.1 Verifica dei vincoli<br />

Il controllo dei vincoli durante l’esecuzione dell’algoritmo <strong>di</strong> ligand-rotation<br />

funziona in questo modo: una volta effettuata la rotazione <strong>di</strong> un atomo e del<br />

relativo sottoalbero, si inserisce il primo atomo all’interno <strong>di</strong> una cella. Sia<br />

a l’atomo da inserire con coor<strong>di</strong>nate spaziali (x a , y a , z a ) ∈ R e <strong>di</strong> raggio r.<br />

L’insieme C degli atomi da verificare è definito come:<br />

dove:<br />

C = G adj(a)<br />

• G è l’insieme degli atomi vicini, (cf. definizione 4.3)<br />

• adj(a) è l’insieme degli atomi a<strong>di</strong>acenti, (cf. definizione 4.1)<br />

Il vincolo <strong>di</strong> non sovrapposizione viene dunque verificato <strong>per</strong> ogni z ∈ C:<br />

S(a, z) =<br />

{<br />

true, se ‖a − z‖ ≥ raggio(a) + raggio(z)<br />

false,<br />

altrimenti<br />

✞<br />

✡✝<br />

Qui <strong>di</strong> seguito lo pseudoco<strong>di</strong>ce implementato in ligand-rotazion.<br />

v e r i f i c a v i n c o l o ( a , Celle , A<strong>di</strong>acenti )<br />

i f a not in V<br />

return f a l s e<br />

for c e l l a in C e l l e<br />

for atomo in atomi . c e l l a<br />

i f atomo i s not in a d i a c e n t i<br />

i f d ( a , atomo ) < a . r a g g i o + atomo . r a g g i o<br />

return f a l s e<br />

else<br />

return true<br />

✆<br />

4.5 Accenni <strong>di</strong> Complessità<br />

Il concetto <strong>di</strong> complessità computazionale è strettamente legato ai <strong>di</strong>versi<br />

gra<strong>di</strong> <strong>di</strong> libertà che ligand-rotation possiede. Il grado <strong>di</strong> libertà che più ‘rallenta’<br />

l’algoritmo è la rotazione sul legame: avendo a <strong>di</strong>sposizione k scelte <strong>per</strong>


52 CAPITOLO 4. DETTAGLI IMPLEMENTATIVI<br />

ogni legame, si deduce abbastanza velocemente che ligand-rotation ha una<br />

complessità esponenziale sul numero dei legami n. In particolare, risulta:<br />

C T (n) = O(k n )<br />

dove k rappresenta il numero degli step effettuati <strong>per</strong> ogni legame ruotabile.<br />

Sebbene ligand-rotation cresca esponenzialmente, le tecniche della programmazione<br />

a vincoli <strong>per</strong>mettono <strong>di</strong> ridurre notevolmente la complessità<br />

o<strong>per</strong>ando dei tagli all’albero <strong>di</strong> ricerca. Infatti, intercettando l’inconsistenza<br />

<strong>di</strong> un nodo, viene eliminato tutto il sottoalbero relativo e quin<strong>di</strong> parte <strong>delle</strong><br />

soluzioni totali, in modo tale da evitare la visita fino alle foglie dei <strong>per</strong>corsi<br />

inconsistenti.<br />

L’altro grado <strong>di</strong> libertà è dato dal possibile posizionamento del ligando<br />

nelle tre <strong>di</strong>mensioni. Esso rappresenta una semplice costante moltiplicativa<br />

a C T , data dal numero <strong>di</strong> sistemi <strong>di</strong> riferimento totali e dal numero <strong>di</strong> punti<br />

iniziali. Tuttavia, questa costante è abbastanza alta 4 e, non avendo un numero<br />

<strong>di</strong> legami ruotanti estremamente alto, il passo <strong>di</strong> <strong>di</strong>scretizzazione può influire<br />

sul costo complessivo dell’algoritmo.<br />

4 Nel caso <strong>di</strong> 210 <strong>di</strong>versi sistemi <strong>di</strong> riferimento e 27 punti iniziali, la costante è pari a<br />

5670, quin<strong>di</strong> da non sottovalutare.


Capitolo 5<br />

Risultati<br />

In questo capitolo si illustreranno i risultati ottenuti da ligand-rotation. Descriveremo<br />

(nella sezione 5.1) il complesso preso in esame <strong>per</strong> la realizzazione<br />

dei test. Successivamente (nella sezione 5.2) analizzaremo in dettaglio i test<br />

eseguiti, mostrando il comportamento registrato da ligand-rotation al variare<br />

dei parametri <strong>di</strong> qualità. Presenteremo, in particolare, una configurazione<br />

ottimale. Infine (nella sezione 5.3) faremo dei confronti sulle possibili visite<br />

implementabili <strong>per</strong> generare l’albero e su come esse andranno ad incidere sul<br />

tempo <strong>di</strong> esecuzione.<br />

Come primo test <strong>di</strong> fattibilità non consideriamo una funzione energetica<br />

bensì confrontiamo i risultati ottenuti con il ligando minimizzato preso da<br />

PDB attraverso un test <strong>di</strong> tipo geometrico, calcolando il Root Mean Square<br />

Deviation (RMSD) definito come segue:<br />

Definizione 5.1. Siano L e C gli insiemi degli atomi rispettivamente del ligando<br />

minimizzato e <strong>di</strong> quello appena generato. Sia N = |L| = |C|; definiamo<br />

l’RMSD come:<br />

RMSD = √ 1 N<br />

N∑<br />

‖n i − m i ‖ n i ∈ L, m i ∈ C (5.1)<br />

i=1<br />

Valori dell’RMSD pari a 0.5Å stanno a significare che la <strong>di</strong>stanza quadratica<br />

me<strong>di</strong>a tra gli atomi del ligando minimizzato e quello ottenuto da<br />

ligand-rotation è <strong>di</strong> 0.5Å. Le <strong>di</strong>stanze <strong>di</strong> legame sono circa <strong>di</strong> 1.5Å; commettere<br />

un errore sotto l’Ångström caratterizza le posizioni degli atomi con<br />

sufficiente precisione.<br />

53


54 CAPITOLO 5. RISULTATI<br />

5.1 Applicazioni possibili<br />

Figura 5.1: Struttura molecolare del tamoxifene<br />

Il complesso ligando-proteina stu<strong>di</strong>ato in questa tesi ha code number (relativo<br />

a PDB) 1XPC ; esso possiede numerosi ligan<strong>di</strong>, ma il nostro stu<strong>di</strong>o è<br />

stato rivolto principalmente all’analisi del tamoxifene.<br />

Sono stati effettuati i primi test <strong>di</strong> ligand-rotation con il tamoxifene<br />

(OHT). In figura 5.1 è illustrata la struttura del farmaco, mentre in 5.2 è<br />

illustrato il complesso ligando-proteina. Questo è un antitumorale appartenente<br />

alla famiglia dei farmaci interagenti con il recettore degli estrogeni e<br />

viene utilizzato nei casi <strong>di</strong> tumore mammario metastatico con buoni risultati.<br />

Successivamente sono stati sco<strong>per</strong>ti gli ottimi benefici nella prevenzione della<br />

ripresa della malattia in donne già o<strong>per</strong>ate <strong>per</strong> tumore al seno.<br />

Il tamoxifene presenta una struttura molecolare relativamente semplice;<br />

altri possibili ligan<strong>di</strong> non sono stati presi in considerazione, in quanto la<br />

loro struttura presentava dei cicli pentano e cicli esano che complicavano<br />

pesantemente l’algoritmo (cf. sezione 6.1). Avendo svolto questo lavoro in<br />

tempi relativamente brevi, non si è riusciti nell’intento <strong>di</strong> gestire molecole<br />

con le caratteristiche sopra citate.<br />

5.2 Efficienza<br />

Considerando il fatto che ligand-rotation è ancora un programma in evoluzione<br />

e che necessita <strong>di</strong> notevoli estensioni <strong>per</strong> essere utilizzato in ambito<br />

professionale, i risultati ottenuti sono abbastanza sod<strong>di</strong>sfacenti. Il nostro<br />

obiettivo è quello <strong>di</strong> generare conformazioni con un RMSD minore <strong>di</strong> 1Å in<br />

tempi ragionevoli. Come vedremo, è stato raggiunto con successo. La figura<br />

5.3 mostra uno tra i migliori risultati ottenuti con ligand-rotation.


5.2. EFFICIENZA 55<br />

Figura 5.2: Immagine del complesso esaminato ottenuta effettuando un rendering<br />

con Molegro Molecular Viewer: in rosso è possibile vedere la struttura<br />

della proteina, mentre in verde il ligando OHT


56 CAPITOLO 5. RISULTATI<br />

Figura 5.3: In verde è visibile il ligando ottenuto con ligand-rotation mentre<br />

in rosso è rappresentato il ligando minimizzato, scaricato da PDB. Il valore<br />

<strong>di</strong> RMSD tra le due molecole è pari a 0.799538, ottenuto con la seguente<br />

configurazione: 7 step <strong>di</strong> rotazioni, 210 sistemi <strong>di</strong> riferimento, passo cella <strong>di</strong> 1Å<br />

e punti iniziali campionati a 0.5Å. Il tempo <strong>di</strong> esecuzione <strong>di</strong> ligand-rotation,<br />

con questa specifica configurazione, è stato <strong>di</strong> 172 minuti.


5.2. EFFICIENZA 57<br />

5.2.1 Variazione parametri qualitativi<br />

Questa classe <strong>di</strong> test ha l’obiettivo <strong>di</strong> stabilire il grado <strong>di</strong> efficienza <strong>di</strong> ligandrotation<br />

al variare dei parametri <strong>di</strong> configurazione; si terrà conto del valore<br />

dell’RMSD migliore e del tempo impiegato nel generare tutte le conformazioni.<br />

Variazione degli step <strong>di</strong> rotazione<br />

Esaminiamo in dettaglio il comportamento registrato dal pacchetto <strong>di</strong> docking<br />

a variazioni degli step <strong>di</strong> rotazione. Ricor<strong>di</strong>amo che lo step <strong>di</strong> rotazione<br />

rappresenta il valore <strong>delle</strong> variabili <strong>di</strong> tipo legame.<br />

Lo scopo è quello <strong>di</strong> misurare l’efficienza e il corretto posizionamento del<br />

ligando al variare degli step. Fissatone uno, i test verranno condotti su configurazioni<br />

nelle quali varierà il numero dei sistemi <strong>di</strong> riferimento. Il numero <strong>di</strong><br />

step <strong>di</strong> rotazione presi in considerazione sono {2, 3, 4, 5, 6, 7}. Come visibile<br />

nel grafico 5.4, l’esecuzione con un numero <strong>di</strong> step inferiore a 5, sebbene impieghi<br />

molto meno, in particolare non si su<strong>per</strong>ano i 5 minuti <strong>di</strong> calcolo, non<br />

produce risultati significativi sotto l’Ångström. Dal grafico si può notare il<br />

miglioramento <strong>delle</strong> conformazioni ottenute, in termini <strong>di</strong> RMSD, all’aumentare<br />

degli step <strong>di</strong> rotazione, a <strong>di</strong>scapito del tempo impiegato, il quale resta<br />

comunque sempre ragionevole, ovvero entro le 6 ore <strong>di</strong> calcolo.<br />

Variazione campionamento <strong>delle</strong> basi ortonormali<br />

Questa classe <strong>di</strong> test è volta a misurare la reazione <strong>di</strong> ligand-rotation al variare<br />

dei sistemi <strong>di</strong> riferimento. Dopo averne fissato uno, i test eseguiti varieranno<br />

<strong>per</strong> il numero <strong>di</strong> step <strong>di</strong> rotazione. Nel grafico 5.5 sono visibili i valori ottenuti<br />

campionando le basi ortonormali: sull’asse <strong>delle</strong> ascisse sono riportati i tempi<br />

in scala logaritmica, mentre sull’asse <strong>delle</strong> or<strong>di</strong>nate i valori <strong>di</strong> RMSD migliori<br />

<strong>per</strong> ogni istanza <strong>di</strong> ligand-rotation. I risultati, limitatamente al ligando testato,<br />

mostrano che anche con soli 54 1 sistemi <strong>di</strong> riferimento ligand-rotation sia<br />

stato in grado <strong>di</strong> ottenere strutture molecolari molto valide, entro l’Ångström<br />

<strong>di</strong> RMSD, in tempi molto brevi, precisamente in un’ora e mezza <strong>di</strong> calcoli<br />

<strong>per</strong> una conformazione con RMSD pari a 0,85534Å.<br />

Campionamento <strong>delle</strong> celle <strong>di</strong> V<br />

Il seguente test è rivolto a identificare la <strong>di</strong>mensione ottimale <strong>delle</strong> celle <strong>di</strong><br />

V. Nel grafico 5.6, l’asse <strong>delle</strong> ascisse in<strong>di</strong>vidua il numero degli step <strong>di</strong> rotazione<br />

rispetto ai quali si sono effettuati i test, mentre l’asse <strong>delle</strong> or<strong>di</strong>nate, in<br />

1 Esattamente 9 punti sulla sfera e 6 step <strong>di</strong> rotazione sull’asse Z


58 CAPITOLO 5. RISULTATI<br />

Prestazioni−qualità al variare degli step <strong>di</strong> rotazione<br />

1.7<br />

1.6<br />

1.5<br />

7 step<br />

6 step<br />

5 step<br />

4 step<br />

1.4<br />

1.3<br />

rmsd<br />

1.2<br />

1.1<br />

1<br />

0.9<br />

0.8<br />

0.7<br />

10 −1 10 0 10 1 10 2 10 3<br />

tempo espresso in minuti<br />

Figura 5.4: Grafico rappresentante qualità in termini <strong>di</strong> RMSD, rispetto al<br />

ligando minimizzato, e prestazioni, in termini <strong>di</strong> tempo <strong>di</strong> esecuzione del<br />

programma. Le molecole accettabili si trovano sotto l’Ångström.


5.2. EFFICIENZA 59<br />

Prestazioni−qualità al variare del passo <strong>di</strong> campionamento<br />

della base ortonormale<br />

3.5<br />

3<br />

210<br />

120<br />

72<br />

54<br />

2.5<br />

rmsd<br />

2<br />

1.5<br />

1<br />

0.5<br />

10 −3 10 −2 10 −1 10 0 10 1 10 2 10 3<br />

tempo espresso in minuti<br />

Figura 5.5: Grafico rappresentante qualità in termini <strong>di</strong> RMSD, rispetto al<br />

ligando minimizzato, e prestazioni, in termini <strong>di</strong> tempo <strong>di</strong> esecuzione del<br />

programma. Le molecole accettabili si trovano sotto l’Ångström.


60 CAPITOLO 5. RISULTATI<br />

scala logaritmica, identifica il tempo in minuti dell’esecuzione <strong>di</strong> ogni istanza<br />

<strong>di</strong> ligand-rotation. La <strong>di</strong>mensione del lato <strong>delle</strong> celle è un parametro molto<br />

importante, che andrà ad influire sul tempo totale della computazione ma<br />

non sulla qualità dei risultati. Questo <strong>per</strong>ché, nel momento della verifica dei<br />

vincoli, si andranno a selezionare e controllare tutte le celle che potenzialmente<br />

possono contenere atomi sovrapposti. Una <strong>di</strong>mensione troppo piccola<br />

comporterebbe un numero <strong>di</strong> celle da visitare elevato, con conseguente <strong>per</strong><strong>di</strong>ta<br />

<strong>di</strong> tempo; su molte <strong>di</strong> esse potrebbe non esserci nemmeno un atomo.<br />

Al contrario, una <strong>di</strong>mensione troppo grande comporterebbe una verifica dei<br />

vincoli anche su atomi ‘lontani’ poiché una cella potrebbe contenere atomi<br />

<strong>di</strong>stanti tra loro, rappresentando una porzione <strong>di</strong> spazio relativamente grande.<br />

Dai risultati, si evince che la misura ottimale è data da 2Å: considerando<br />

l’esecuzione con 6 step, il tempo impiegato da quest’ultima rispetto ad un<br />

campionamento a 0.5Å si <strong>di</strong>mezza.<br />

5.3 Confronti su visite<br />

Un aspetto molto importante è la generazione dell’albero a partire dal grafo,<br />

dato che sta alla base della visita sullo spazio <strong>di</strong> ricerca <strong>delle</strong> combinazioni del<br />

ligando. Mo<strong>di</strong>ficando l’albero si influenzerà l’or<strong>di</strong>ne <strong>di</strong> esplorazione <strong>delle</strong> variabili<br />

(e <strong>di</strong> conseguenza l’albero <strong>di</strong> ricerca) e si potrà avere un miglioramento<br />

o un peggioramento <strong>delle</strong> prestazioni, in modo <strong>di</strong>pendente a seconda dalla<br />

particolare posizione assunta degli atomi nella lista D e da quanto spesso<br />

falliranno.<br />

5.3.1 DFS sul grafo della molecola<br />

Il primo algoritmo, implementato su ligand-rotation con il compito <strong>di</strong> visitare<br />

il grafo G = (V, E) rappresentante il ligando, è la DFS, visita in profon<strong>di</strong>tà.<br />

La strategia <strong>di</strong> ricerca esplora il grafo andando, in ogni istante dell’esecuzione<br />

dell’algoritmo, il più possibile in profon<strong>di</strong>tà: gli archi del grafo vengono<br />

esplorati a partire dall’ultimo vertice sco<strong>per</strong>to v che abbia ancora degli archi<br />

non esplorati uscenti da esso. Una volta terminata l’esplorazione <strong>di</strong> tutti gli<br />

archi non esplorati del vertice v, si ritorna in<strong>di</strong>etro <strong>per</strong> esplorare tutti gli archi<br />

uscenti a partire dal vertice da cui v ′ era stato precedentemente sco<strong>per</strong>to.<br />

Il processo <strong>di</strong> esplorazione continua fin quando tutti i vertici del grafo non<br />

siano stati esplorati.<br />

Grazie al fatto che G è connesso, ovvero che la car<strong>di</strong>nalità <strong>delle</strong> sue<br />

componenti connesse è 1, la ricerca DFS produce un unico albero.


5.3. CONFRONTI SU VISITE 61<br />

Prestazioni al variare del campionamento <strong>delle</strong> celle<br />

10 5<br />

10 4<br />

step rotazioni<br />

0.5Å<br />

1Å<br />

2Å<br />

3Å<br />

tempo espresso in minuti<br />

10 3<br />

10 2<br />

10 1<br />

10 0<br />

4 5 6<br />

Figura 5.6: Grafico rappresentante il tempo <strong>di</strong> esecuzione al variare del campionamento<br />

<strong>delle</strong> celle <strong>di</strong> V. Raggruppati sulle ascisse, i test svolti con 4,<br />

5, 6 step <strong>di</strong> rotazione, mentre sull’asse <strong>delle</strong> or<strong>di</strong>nate il tempo impiegato da<br />

ligand-rotation (in scala logaritmica).


62 CAPITOLO 5. RISULTATI<br />

La ricerca DFS, inoltre, marca ogni vertice con ben precise informazioni<br />

temporali, in particolar modo aggiorna due etichette <strong>per</strong> ogni vertice: d[v]<br />

che registra quando il generico vertice v è stato sco<strong>per</strong>to ed f[v] che registra<br />

quando è stata esplorata l’intera lista <strong>di</strong> a<strong>di</strong>acenza <strong>di</strong> v.<br />

La complessità computazionale <strong>di</strong> una DFS è pari a Ω(V +E). In ogni caso,<br />

rispetto al tempo <strong>di</strong> esecuzione dell’intero programma, è assai irrilevante: la<br />

DFS fa parte della fase <strong>di</strong> pre processing <strong>di</strong> ligand-rotation, <strong>per</strong> cui viene<br />

effettuata una sola volta.<br />

5.3.2 Mo<strong>di</strong>fica della DFS: first fail<br />

Una piccola, ma sostanziale, mo<strong>di</strong>fica all’algoritmo della DFS consiste nell’or<strong>di</strong>nare<br />

tutti i no<strong>di</strong> a<strong>di</strong>acenti a quello attualmente visitato in base al numero<br />

<strong>di</strong> rotazioni che possono effettuare: dal più basso al più alto. La strategia che<br />

si vuole implementare è quella simile ad una first fail, ovvero si fa in modo<br />

che durante l’iterazione della lista D si fallisca il prima possibile. Così facendo,<br />

poiché interviene il backtracking <strong>per</strong> portarci allo stato precedente, si<br />

elimina tutto il sottoalbero relativo al vertice in cui abbiamo fallito, andando<br />

a ridurre il numero <strong>di</strong> soluzioni finali e risparmiando il tempo impiegato ad<br />

una esplorazione <strong>di</strong> un sottoalbero privo <strong>di</strong> soluzioni.<br />

L’implementazione su ligand-rotation, in pratica, è una first fail statica.<br />

La scelta <strong>delle</strong> variabili viene effettuata nella fase <strong>di</strong> preprocessing, durante la<br />

DFS, e l’or<strong>di</strong>namento riguarda gli archi del singolo nodo, in<strong>di</strong>pendentemente<br />

dagli altri.<br />

La mo<strong>di</strong>fica della DFS può trovare giustificazione nel fatto che avendo da<br />

attuare due scelte, una <strong>di</strong>pendente dall’altra, conviene intraprendere prima<br />

quella con meno possibilità. Cosicché, in caso <strong>di</strong> fallimento, il sottoalbero<br />

eliminato conterrà più no<strong>di</strong>.<br />

Nel grafico 5.7 sono rappresentati i risultati ottenuti sia da istanze <strong>di</strong><br />

ligand-rotation su cui è stata implementata la first fail che da altre senza. Dai<br />

test effettuati si può concludere che la first fail ha avuto successo, riducendo<br />

i tempi <strong>di</strong> esecuzione.


5.3. CONFRONTI SU VISITE 63<br />

Prestazioni al variare della visita sul grafo<br />

10 4 DFS first fail<br />

DFS<br />

step rotazioni<br />

10 3<br />

tempo espresso in minuti<br />

10 2<br />

10 1<br />

10 0<br />

4 5 6<br />

Figura 5.7: Grafico rappresentante il tempo <strong>di</strong> esecuzione <strong>di</strong> istanze <strong>di</strong> ligandrotation<br />

con first fail e senza.


64 CAPITOLO 5. RISULTATI


Capitolo 6<br />

Conclusioni e Sviluppi futuri<br />

In questo lavoro <strong>di</strong> Tesi si è affrontato il problema del docking. In particolare,<br />

lo scopo era volto alla costruzione <strong>di</strong> un nuovo pacchetto in grado <strong>di</strong> far<br />

interagire tra loro due molecole, senza che ciò fosse influenzato da funzioni<br />

<strong>di</strong> scoring che valutano la stabilità energetica.<br />

La soluzione offerta a questo problema è, appunto, ligand-rotation; programma<br />

da me stu<strong>di</strong>ato e implementato, in grado <strong>di</strong> generare strutture molecolari<br />

geometricamente corrette e, oltretutto, in maniera efficiente, <strong>per</strong> quel<br />

che riguarda il tempo impiegato nei calcoli.<br />

Grazie all’approccio interamente geometrico, i test <strong>di</strong> vali<strong>di</strong>tà eseguiti<br />

su ligand-rotation hanno <strong>di</strong>mostrato che è possibile raggiungere una qualità<br />

accettabile rispetto alle richieste reali da parte <strong>delle</strong> case farmaceutiche.<br />

Con una configurazione standard, che porta il programma a conclusione<br />

nel giro <strong>di</strong> 6 ore al massimo 1 , si riesce a produrre posizionamenti <strong>di</strong> molecole<br />

entro l’Ångström <strong>di</strong> RMSD, cioè si ottengono ligan<strong>di</strong> dalla struttura molto<br />

simile a quella minimizzata, scaricata dal database PDB.<br />

Una passo successivo a questa Tesi consiste nell’applicare una funzione<br />

<strong>di</strong> scoring <strong>per</strong> valutare l’energia complessiva del complesso ligando-proteina<br />

determinando la stabilità del sistema; in particolare, ci interessa quanto sia<br />

correlata all’RMSD ottenuto dai nostri test.<br />

Verranno ora mostrati alcuni riferimenti utili all’evoluzione <strong>di</strong> ligandrotation.<br />

L’ingegneria del software insegna che un programma informatico<br />

è in costante evoluzione, sia <strong>per</strong> quel che riguarda la risoluzione <strong>di</strong> bug esistenti<br />

che <strong>per</strong> l’aggiunta <strong>di</strong> nuove funzionalità. Essendo un progetto giovane,<br />

l’intento è quello <strong>di</strong> poter sviluppare nuove metodologie che constentiranno a<br />

ligand-rotation l’elaborazione <strong>di</strong> <strong>di</strong>fferenti tipi <strong>di</strong> molecole, anche complesse,<br />

1 Il tempo impiegato da ligand-rotation <strong>di</strong>pende molto dal ligando scelto e dal numero<br />

<strong>di</strong> legami ruotabili.<br />

65


66 CAPITOLO 6. CONCLUSIONI E SVILUPPI FUTURI<br />

garantendo tempi <strong>di</strong> esecuzione ragionevoli e più precisione nella generazione<br />

<strong>delle</strong> strutture dei ligan<strong>di</strong>.<br />

Nella sezione 6.1 cercheremo <strong>di</strong> dare una possibile estensione all’algoritmo<br />

esistente, in modo tale da poter trattare molecole con caratteristiche <strong>di</strong><br />

struttura particolari.<br />

Successivamente (nella sezione 6.2) si descriverà l’idea <strong>di</strong> un nuovo potenziale<br />

modello a vincoli che prevede l’inserimento <strong>di</strong> ulteriori vincoli e<br />

l’implementazione della propagazione.<br />

6.1 Molecole contenenti cicloesano<br />

Un problema incontrato nello <strong>sviluppo</strong> <strong>di</strong> ligand-rotation è stato che, <strong>per</strong><br />

particolari ligan<strong>di</strong>, non si è riusciti ad ottenere un loro buon posizionamento<br />

in termini <strong>di</strong> RMSD con il ligando minimizzato. Sono stati condotti numerosi<br />

test e le migliori conformazioni si aggiravano intorno a 1.5Å - contro il nostro<br />

limite <strong>di</strong> accettazione <strong>di</strong> 1Å. Il problema non stava nemmeno alla base <strong>delle</strong><br />

opzioni <strong>di</strong> campionamento; infatti, all’aumentare dei parametri <strong>di</strong> qualità,<br />

non si apprezzavano miglioramenti da parte <strong>delle</strong> strutture generate.<br />

Figura 6.1: A sinistra il ligando ottenuto con ligand-rotation, a destra il<br />

ligando minimizzato scaricato da PDB<br />

La strada da <strong>per</strong>correre è completamente <strong>di</strong>versa. Alla base <strong>di</strong> ciò ci sono<br />

particolari strutture molecolari denominate Cicloesano e Ciclopentano, che<br />

dovranno essere trattate in modo completamente <strong>di</strong>fferente.


6.1. MOLECOLE CONTENENTI CICLOESANO 67<br />

6.1.1 Cicloesano<br />

Il cicloesano fa parte della famiglia dei cicloalcani; è composto da sei atomi<br />

<strong>di</strong> carbonio e 12 atomi <strong>di</strong> idrogeno, è privo <strong>di</strong> doppi e tripli legami e la sua<br />

struttura è chiusa ad anello.<br />

Gli atomi <strong>di</strong> carbonio hanno ibri<strong>di</strong>zzazione sp 3 , andando a formare <strong>delle</strong><br />

strutture tetraedriche con angoli <strong>di</strong> legame <strong>di</strong> 109.5 ◦ . La struttura quin<strong>di</strong><br />

non sarà planare, la quale ha angoli <strong>di</strong> 120 ◦ , bensì tenderà ad assumere una<br />

conformazione a se<strong>di</strong>a, visibile in figura 6.2.<br />

Figura 6.2: La figura mostra la struttura del cicloesano con a sinistra una<br />

conformazione a se<strong>di</strong>a e a destra una conformazione a barca<br />

Oltre quella a se<strong>di</strong>a, esistono altre conformazioni, sebbene con maggiore<br />

energia e quin<strong>di</strong> meno stabili: conformazione a barca (in figura 6.2) e a mezza<br />

se<strong>di</strong>a. In figura 6.3 si esprime l’energia del cicloesano <strong>per</strong> ogni conformazione.<br />

Figura 6.3: La figura rappresenta le possibili energie <strong>delle</strong> strutture del<br />

cicloesano in funzione alle conformazioni assunte


68 CAPITOLO 6. CONCLUSIONI E SVILUPPI FUTURI<br />

6.1.2 Nuovi gra<strong>di</strong> <strong>di</strong> libertà<br />

Tutte le conformazioni del cicloesano elencate nella precedente sezione non<br />

possono essere ottenute a partire da semplici rotazioni. È necessario implementare<br />

un nuovo algoritmo da inglobare a quello esistente, in grado <strong>di</strong> gestire<br />

più gra<strong>di</strong> <strong>di</strong> libertà. L’idea è quella <strong>di</strong> in<strong>di</strong>viduare queste strutture particolari<br />

attraverso la visita del grafo del ligando e, successivamente, nel momento<br />

in cui si piazzano i suoi atomi, è necessario capire la conformazione attuale<br />

<strong>per</strong> andare a simulare tutti i suoi possibili stati conformazionali prima della<br />

rotazione del sottoalbero.<br />

6.2 Espansione modello a vincoli<br />

Un primo ampliamento da realizzare su ligand-rotation potrebbe essere quello<br />

<strong>di</strong> integrare il modello a vincoli, introducendono <strong>di</strong> ulteriori, come la verifica<br />

della lunghezza <strong>di</strong> un legame chimico, oppure implementare la propagazione<br />

dei vincoli. Nei paragrafi 6.2.1 e 6.2.2 svilup<strong>per</strong>emo questi due argomenti.<br />

6.2.1 Controllo lunghezza legame<br />

Con il modello a vincoli attualmente implementato in ligand-rotation, la verifica<br />

della lunghezza dei legami chimici sarebbe completamente inutile, anzi<br />

sarebbe un aggravio alla complessità totale del sistema. Al contrario, riuscendo<br />

a trattare molecole come il cicloesano o il ciclopentano, si introdurrebbe<br />

un nuovo grado <strong>di</strong> libertà e il controllo <strong>di</strong>venterebbe sensato. Effettuando<br />

<strong>delle</strong> rotazioni anche sui legami <strong>delle</strong> precedenti strutture si potrebbe andare<br />

incontro ad una rottura del ciclo.<br />

6.2.2 Implementazione propagazione dei vincoli<br />

Il modello a vincoli qui presentato non implementa su <strong>di</strong> sé la propagazione<br />

dei vincoli; questione non affrontata a causa dello scarso tempo avuto a<br />

<strong>di</strong>sposizione. Dalla sezione 1.4 sappiamo che la propagazione ha il compito<br />

<strong>di</strong> ridurre lo spazio <strong>di</strong> ricerca, eliminando eventuali elementi del dominio.<br />

Nel nostro caso, l’eliminazione riguarda le possibili rotazioni. L’idea è<br />

quella <strong>di</strong> evitare <strong>di</strong> visitare porzioni <strong>di</strong> albero inconsistenti. Nel contesto <strong>di</strong><br />

ligand-rotation, una possibile definizione <strong>di</strong> propagazione sarebbe questa:<br />

nel momento in cui si identifica una rotazione che sicuramente porta<br />

a fallimento, la si elimina dal dominio della sua variabile legame. Come<br />

conseguenza <strong>di</strong> ciò, si potrebbe avere il risveglio a catena <strong>di</strong> altre propagazioni<br />

e quin<strong>di</strong> l’eliminazione <strong>di</strong> altre rotazioni.


6.2. ESPANSIONE MODELLO A VINCOLI 69<br />

L’interazione tra vincoli <strong>di</strong> non sovrapposizione e rotazione <strong>di</strong> un legame<br />

possono fornire deduzioni sulla effettiva vali<strong>di</strong>tà dei valori del dominio <strong>delle</strong><br />

variabili. Supponiamo <strong>di</strong> compiere un movimento alla struttura molecolare.<br />

Attraverso un algoritmo, possiamo essere in grado <strong>di</strong> stabilire a priori che<br />

sicuramente la rotazione appena effettuata non porta a nessuna soluzione<br />

valida. In virtù <strong>di</strong> ciò, si deduce che i valori ammissibili <strong>di</strong> alcune variabili<br />

<strong>di</strong> tipo legame sono incongruenti con i vincoli implementati e si effettua,<br />

quin<strong>di</strong>, una riduzione del dominio <strong>delle</strong> variabili implicate. Osserviamo come<br />

il costo computazionale degli algoritmi <strong>di</strong> propagazione debba essere molto<br />

basso affinché il loro utilizzo sia giustificato.


70 CAPITOLO 6. CONCLUSIONI E SVILUPPI FUTURI


Bibliografia<br />

[1] Thomas Lengauer (Ed.). Bioinformatics - From Genomes to Drugs,<br />

Volume I. WILEY-VCH, 2001.<br />

[2] Peter Atkins, Loretta Jones. Principi <strong>di</strong> chimica. Zanichelli, 2005.<br />

[3] William K. Purves, David Sadava, Gordon H. Orians and H. Craig<br />

Heller. Elementi <strong>di</strong> Biologia e Genetica. Zanichelli, 2005.<br />

[4] Harold Hart, David J. Hart, Leslie E. Craine. Chimica organica, quarta<br />

e<strong>di</strong>zione. Zanichelli, 1998.<br />

[5] Krzysztof R. Apt. Principles of Constraint Programming. Cambridge<br />

University Press, 2003.<br />

[6] Bjarne Stroustrup. C++: linguaggio, libreria standard, principi <strong>di</strong><br />

programmazione. Ad<strong>di</strong>son-Wesley, 2000.<br />

[7] Gregory L. Warren, C. Webster Andrews, Anna-Maria Capelli, Brian<br />

Clarke, Ju<strong>di</strong>th LaLonde, Millard H. Lambert, Mika Lindvall, Neysa Nevins,<br />

Simon F. Semus, Stefan Senger, Giovanna Tedesco, Ian D. Wall,<br />

James M. Woolven, Catherine E. Peishoff and Martha S. Head. A critical<br />

Assessment of Docking Programs and Scoring Function. Journal of<br />

Me<strong>di</strong>cinal Chemistry, 2006, Vol. 49, No. 20.<br />

[8] http: // mathworld. wolfram. com/ RotationFormula. html .<br />

71

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!