[LinuxFocus-icon]
Castellano Chinese Deutsch English Français Nederlands

Questo documento è disponibile in: Castellano  English  Francais  Italiano  Turkce  

La Foto
Carlos Andrés Pérez
<caperez /at/ usc.edu.co>

L'autore:
Carlos Andrés Pérez é specializzato in Simulazione Molecolare, candidato al Dottorato in Biotecnologia. Consulente tecnico per il Grupo de Investigación en Educación Virtual (GIEV) - un gruppo di ricerca nell'apprendimento virtuale. Indirizzo: Universidad Santiago de Cali, Calle 5ª carrera 62 Campus Pampalinda, Cali – Colombia.

Tradotto in Italiano da:
Lucia Di Gaeta <lucialinux/at/hotmail.co.uk>

Contenuto:

 

Simulazione Assistita del DNA al Computer usando Linux e Perl

[Illustration]

Premessa:

Quest'articolo indica una strada per generare “n” sequenze di DNA con “s” nucleotidi, in modo casuale, utilizzando i programmi Perl. In contrasto con altri programmi in cui le sequenze di DNA sono processate come catene di testo, in quest'articolo ci si propone di lavorare con esse come tavole. Anche con una generazione casuale delle sequenza, quando conduciamo un'analisi statistica della frazione media di identici nucleotidi posti nella stessa posizione comparativa, otteniamo valori simili a 0.25.

_________________ _________________ _________________

 

Simulazione al Computer

La ricerca scientifica é focalizzata sullo studio e la comprensione dei processi in natura. La ricerca é stata condotta servendosi di osservazioni sperimentali e modelli teoretici che sono stati dedicati all'esposizione e lo sviluppo di equazioni per lungo tempo. Ma molte di queste equazioni non possono essere risolte analiticamente o numericamente a causa di aspetti tecnici o dell'impossibilitá di rappresentare la natura.

Il continuo sviluppo delle scienze informatiche ci consente di raggiungere fenomeni naturali attraverso programmi software che possono rimpiazzare le equazioni matematiche per descrivere i sistemi naturali. Questi programmi facilitano l'introduzione di variabili casuali che semplificano la riproduzione di processi biologici e fisici al computer, trovando aspetti deterministici nelle simulazioni, che possono poi essere tradotti in leggi.

 

Perchè perl?

Perl (Practical Extraction and Report Language), é un linguaggio strutturato che maneggia dati sotto forma di scale, liste, tavole, miscellanee e cartelle. É versatile nella sua applicabilitá, in quanto é facile generare funzioni che possono essere valutate con ogni tipo di dato, al di lá della sua capacitá di integrazione nei databases, websites dinamici e sistemi operativi quali Linux, che assistono l'utente finale con compiti comuni.

Perl é molto attraente come strumento analitico in quanto la sua sintassi ci consente di lavorare con strutture simili alla matematica, un potente linguaggio simbolico ( http://www.xahlee.org/PerlMathematica_dir/perlMathematica.html ), come pure i suoi moduli possono essere integrati con librerie C, GTK, GGI, GGL libraries, con l'aggiunta della capacitá di programmi integrati in un unico linguaggio.

Ci sono diversi programmi con un grande vantaggio nella manutenzione dei dati, strutturati in modo di programmazione matematico. Ma si tratta di pacchetti software commerciali e questo limita la loro riproduzione e miglioramento. Allo stesso tempo sono molto restrittivi quando comunicano con altri linguaggi.

Perl non limita le dimensioni dei dati, ció dipende dalla capacitá di memoria e dalle risorse ricorsive. Anche il numero di miscellanee usato in tavole associative non é limitato.

In quest'articolo ogni catena di DNA é stata rappresentata come vettore. Possiamo usare il modulo PDL (Perl Data Language, (http://pdl.sourceforge.net/WWW-old/index_es.html ), orientato al processo numerico dei dati attraverso una matrice n-dimensionale, ma abbiamo problemi nel definire ogni elemento vettore come nucleotide, in quanto la funzione “pdl” supporta solo ordini numerici. Per questo motivo procediamo nell'utilizzare le funzioni basilari di Perl per le tavole, ed in ogni caso ció non limita la possibilitá di rappresentare ogni nucleotide come numero.

 

Sequeze Casuali

Il programma ci permette di generare “n” catene di DNA composte di “s” nucleotidi. Ogni catena ha la stessa lunghezza e le sue componenti sono nucleotidi scelti a caso. Il programma converte le liste scalari trasmesse come parametri con la funzione Dumper in una catena Perl che descrive la struttura dei dati, in modo che possiamo visualizzare ogni vettore.

#!/usr/bin/perl
# Usa il modulo Data::Dumper
use Data::Dumper;
# In $var1 é conservato il numero di sequenze,
# in $var2 la lunghezza della catena.
print "Entra il numero di sequenze casuali da generare\n";
$var1 = <STDIN>;
print "Entra il numero di nucleotidi per sequenza\n";
$var2 = <STDIN>;
# In aleatorio definiamo la tavola @ns che contiene i nucleotidi,
# $lon é la variabile locale che conserva il numero di nucleotidi
# $col é la variabile locale che conserva il numero di sequenze
sub aleatorio {
local @ns = (a,g,c,t);
local $lon = $_[1];
local $col = $_[0];
# Definiamo una tavola vuota @a per conservare i vettori.
@a = ();
# Le variabili che indicano i vettori e le posizioni dei suoi componenti.
local $i = 0;
local $u = 0;
while ($u <= $col - 1 && $i <= $lon - 1) {
# $result é la variabile che conserva l'elezione casuale
# di ciascun nucleotide.
$result = @ns[int(rand(4))];
# Aggiungi i nucleotidi e conserva le catene che li contengono.
$a[$u][$i] = $result;
$i = $i + 1;
if ($i == $lon ) {
$u = $u + 1;
$i = 0;
}
}
return @a;
}
# Mostra sullo schermo ogni vettore ed i suoi componenti.
stampa Dumper(&aleatorio($var1,$var2));
# Definisci le posizioni ed i vettori iniziali usati per paragonare
# se hanno nucleotidi identici nella medesima posizione.
$k = 0;
$count = 0;
$s1 = 0;
$s2 = 1;
while ($s1 <= $col - 2  &&  $s2 <= $col - 1 && $k <= $lon - 1 ) {
# Se sono identici $count aumenta di 1.
if ($a[$s1][$k] eq $a[$s2][$k]) {
$count = $count + 1;
}
# $k indica i nucleotidi nel vettore, $s1 e $s2 sono i vettori
# messi a paragone.
# Se il valore $k é lo stesso del numero di nucleotidi
# compare una bandierina ad indicare che il paragone é terminato.
$k = $k + 1;
if ($k == $lon ) {
$k = 0;
$s2 = $s2 +1;
}
# Se $s2 é lo stesso di $col, sappiamo che uno dei vettori
# é stato paragonato con gli altri.
if ($s2 == $col ) {
$k = 0;
$s1 = $s1 + 1;
$s2 = $s1 + 1 ;
}
}
# Determiniamo il valore di $p
# che dimostra il numero di paragoni.
for ($p = $col - 1, $r = $col -2; $r >= 0 ; $r--){
$p+= $r;
}
# I risultati sono riportati.
print "Il numero di nucleotidi identici é: $count\n";
print "Il numero di paragoni e: $p\n";
$y = $count/$p;
# In $cor conserviamo il valore della frazione media di nucleodidi
# identici nella stessa posizione durante la comparazione.
$cor = $y/$lon;
print "La frazione media dei nucleotidi ";
print "che appaiono nella stessa posizione e: $cor";

Considerando il valore $cor per 10 sequenze di 30, 50, 70 e 90 nucleotidi, otteniamo i seguenti risultati: 0.2340, 0.26, 0.26031, 0.2661.

Per 40 sequenze di 100, 200, 300 e 500 nucleotidi otteniamo i seguenti valori di $cor: 0.2507, 0.2482, 0.2480, 0.2489.


According to that we conclude that for “n” number of DNA sequences with “s” nucleotides and randomly generated, show a media fraction of identical nucleotides that are in the same position around 0.25.

 

Bibliography

 

File download

Perl source code: ADNaleatorio_pl.txt  

Discussioni su quest'articolo

ogni articolo possiede una sua pagina di discussione, da questa pagina puoi inviare un commento o leggere quelli degli altri lettori:




Webpages maintained by the LinuxFocus Editor team
© Carlos Andrés Pérez
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Translation information:
en --> -- : Carlos Andrés Pérez <caperez /at/ usc.edu.co>
en --> it: Lucia Di Gaeta <lucialinux/at/hotmail.co.uk>

2006-08-12, generated by lfparser version 2.54