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

Bu makalenin farklı dillerde bulunduğu adresler: Castellano  English  Francais  Italiano  Turkce  

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

Yazar hakkında:
Carlos Andrés Pérez, biyoteknoloji alanında doktorasını tamamlamak üzere olan bir Moleküler Benzetim uzmanıdır. Grupo de Investigación en Educación Virtual (GIEV) - (Research Group in Virtual Learning) Virtual Öğrenme üzerine Araştırma ve Eğitim Grubu’nun teknik danışmanıdır. Adres: Universidad Santiago de Cali, Calle 5ª carrera 62 Campus Pampalinda, Cali Colombia.

Türkçe'ye çeviri:
Dicle Öztürk <dicleozturk(at)yahoo.com>

İçerik:

 

Linux ve Perl kullanarak bilgisayar destekli DNA benzetim programı

[Illustration]

Özet:

Bu makalede, her biri "s" tane nükleotide sahip, "n" tane DNA serisini, Perl programlarını rasgele kullanarak üreten yollardan biri anlatılmaktadır. DNA serilerini text zincirleri olarak ele alan-işleyen diğer programlardan farklı olarak, bu makalede anlatılan program DNA'ları dizi-array olarak ele alır. Bu yolla, görece aynı pozisyonda konumlanmış eş nükleotidlerin ortam yüzdelerinin(media fraction) istatistiksel analizini, dizilerin rasgele üretimi tekniğini kullanarak yaptığımızda bile, 0. 25'e yakın değerler elde edebiliriz.

_________________ _________________ _________________

 

Bilgisayarda Benzetim

Bilimsel araştırmalar, doğadaki süreçlerin anlaşılmasına odaklıdır. Araştırmalar şimdiye kadar hep deneysel gözlem ve kuramsal modellemeler yoluyla yapıldı. Bu gözlem ve modellemeler uzunca bir süredir açıklamalara ve denklemlerin geliştirilmesine dayalıdır. Ancak,teknik sebeplerden veya doğayı tam anlamıyla simgelemenin imkansızlığından, bu denklemleri çoğunun çözümü ne analitik, ne de nümerik olarak mümkündür.

Bilgisayar bilimlerinin sınırsız gelişebilen yapısı, doğayı tasvirde matematik denklemlerinin yerine, bilgisayar yazılımlarını bizlere sunar. Bu programlar, fiziksel ve biyolojik süreçlerin bilgisayarda benzetimini kolaylaştıran rasgele değişkenleri daha anlaşılır hale getirir. Ayrıca, benzetimlerin determinist-gerekirci yanlarını yakalayarak bunları daha sonra "kanun" haline çevirmemizi sağlar.

 

Neden perl?

Perl (Practical Extraction and Report Language), skaler, liste, dizi, hash ve dosya tipinde her türlü veriyle çalışan yapısal bir programlama dilidir. Çok yönlü uygulamaları vardır. Örneğin, her tür veri tipiyle değerlendirilebilen fonksiyonlar yazmaya oldukça elverişlidir. Ayrıca, veritabanlarında, dinamik sanal doku(web) sayfalarında ve Linux gibi işletim sistemlerinde de kullanılabilir. Böylece son kullanıcının birçok işi ortak bir ortamda gerçekleştirmesini sağlar.

Analitik bir araç olarak Perl gerçekten ilgiye değer. Sözdizimi, güçlü bir sembolik dil olan Mathematica ( http://www.xahlee.org/PerlMathematica_dir/perlMathematica.html )'nınkine benzer yapılarla çalışmamıza izin verir. Modülleri C, GTK, GGI, GGL kitaplıklarıyla çalışabilir. Böylece, tek bir dilde birçok programı bir araya getirmenin olanaklarından faydalanabiliriz.

Veri yönetiminde avantaj sağlayan, matematiksel bir tarzda yazılmış birçok program var. Fakat bunlar ticari yazılım paketleri ve bu durum programların yeniden üretimi ve geliştirmesini sınırlar. Aynı zamanda, bu paketler diğer dillerle beraber çalışma açısından da oldukça sınırlıdır.

Perl, veri boyutunu sınırlamaz. Bu konuda hafızaya ve özyinelemeli kaynaklara bağlıdır. İç içe (associative) dizilerde kullanılan hash tablolarının sayısı da sınırlı değildir.

Bu makalede, her DNA zinciri bir vektör olarak temsil edilmiştir. n-boyutlu matrislerin nümerik işlenmesine dayalı PDL (Perl Data Language, (http://pdl.sourceforge.net/WWW-old/index_es.html ) modülünü kullanabiliriz. Fakat her bir vektör elemanını bir nükleotid olarak tanımlama noktasında bir sorunumuz var. Çünkü "pdl" fonksiyonu sadece nümerik değerleri ele alır. Bu sebeple, dizilerle uğraşırken temel Perl fonksiyonlarını kullanacağız. Bunun bir sakıncası yok. Bu, nükleotidleri birer sayı olarak simgelememizde her hangi bir sınırlama oluşturmaz.

 

Rasgele Seriler

Programda her biri "s" nükleotid içeren, "n" tane DNA zinciri üretiyoruz. Her zincir eşit uzunlukta ve her zincirin bileşeni, rasgele seçilmiş nükleotidler. Programda, Dumper fonksiyonunun parametresi olan skaler liste, veri yapısını tasvir eden bir Perl zincirine dönüştürülür.

#!/usr/bin/perl
# Use the module Data::Dumper
use Data::Dumper;
# In $var1 the sequences number is stored, in $var2 the chain length.
print "Enter the number of random sequences to be generated\n";
$var1 = <STDIN>;
print "Enter the number of nucleotides per sequence\n";
$var2 = <STDIN>;
# In aleatorio we define the array @ns that contains the nucleotides,
# $lon is the local variable that stores the number of nucleotides
# $col is the local variable that stores the number of
# sequences
sub aleatorio {
local @ns = (a,g,c,t);
local $lon = $_[1];
local $col = $_[0];
# We define an empty array  @a to store the vectors.
@a = ();
# The variables that indicate the vectors and its componnent?s positions.
local $i = 0;
local $u = 0;
while ($u <= $col - 1 && $i <= $lon - 1) {
# $result is the variable that stores the random election of every of the
# nucleotides.
$result = @ns[int(rand(4))];
# Add nucleotides and store the chains that contains them.
$a[$u][$i] = $result;
$i = $i + 1;
if ($i == $lon ) {
$u = $u + 1;
$i = 0;
}
}
return @a;
}
#Show in the creen every vector and its components.
print Dumper(&aleatorio($var1,$var2));
# Define positions and inicial vectors used to compare
# if they have identical nucleotides in the same positions.
$k = 0;
$count = 0;
$s1 = 0;
$s2 = 1;
while ($s1 <= $col - 2  &&  $s2 <= $col - 1 && $k <= $lon - 1 ) {
# If they are identical $count increases in 1.
if ($a[$s1][$k] eq $a[$s2][$k]) {
$count = $count + 1;
}
# $k indicates nucleotides in the vector, $s1 and $s2 are the vectors being compared.
# If $k  value is the same at the nucleotides number is a flag
# that the comparation has finished.
$k = $k + 1;
if($k == $lon ) {
$k = 0;
$s2 = $s2 +1;
}
# If $s2 is the same than $col, we know that one of the vectors has been
# compared with the others.
if ($s2 == $col ) {
$k = 0;
$s1 = $s1 + 1;
$s2 = $s1 + 1 ;
}
}
# We determine $pvalue
# which shows the number of comparisons.
for ($p = $col - 1, $r = $col -2; $r >= 0 ; $r--){
$p+= $r;
}
# The results are shown.
print "The number of identical nucleotides is: $count\n";
print "The number of comparisons is: $p\n";
$y = $count/$p;
# In $cor we store the media fraction value of
# identical nucleotides in the same position
#during the comparison.
$cor = $y/$lon;
print "The media fraction of nucleotides appearing in the same position is: $cor";

30, 50, 70 ve 90 nükleotidli 10 tane serinin $cor değerlerini tahmin ederek şu sonuçlara ulaşırız: 0.2340, 0.26, 0.26031, 0.2661.

100, 200, 300 ve 500 nükleotidli 40 tane serinin $cor değerleri içinse şöyle sonuçlar elde ederiz: 0.2507, 0.2482, 0.2480, 0.2489.


Buna göre, şöyle bir çıkarımda bulunabiliriz: rasgele seçilmiş "s" tane nükleotid içeren, "n" tane DNA serisinde, aynı konumda bulunan eş nükleotidlerin ortam yüzdeleri yaklaşık 0. 25'tir.

 

Bibliography

 

File Download

Perl source code: ADNaleatorio_pl.txt  

Bu yazı için görüş bildiriminde bulunabilirsiniz

Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.




Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Carlos Andrés Pérez
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Çeviri bilgisi:
es --> -- : Carlos Andrés Pérez <caperez /at/ usc.edu.co>
en --> tr: Dicle Öztürk <dicleozturk(at)yahoo.com>

2006-02-15, generated by lfparser version 2.54