|
![]() |
Bu makalenin farklý dillerde bulunduðu adresler: Castellano English Francais Italiano Turkce |
![]() 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ý![]() Ö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.
|
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.
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.
#!/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.
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:
|
2006-02-15, generated by lfparser version 2.54