-
Program do porównywania sekwencji DNA w PERLU
Witam wszystkich,
poszukuję niezwykle dobrego człowieka który pomógł by mi/ nakierował/ lub napisał program którego zadaniem jest: dla wczytanej z pliku sekwencji DNA znaleźć fragment o długości k-nukleotydów najbardziej podobny do wprowadzonego wzorca o takiej długości
(dane wejściowe: sekwencja wzorca, sekwencja DNA,
założenia: jako miarę podobieństwa przyjąć liczbę identycznych nukleotydów na odpowiadających sobie pozycjach podzieloną przez długość wzorca).
Jestem zielona jeżeli chodzi o sprawy programowania a ten program będzie mi niestety potrzebny już za trzy tygodnie
Błagam, proszę o pomoc...
-
Wypisz wymaluj zadanie z ROSALIND | Problems | Locations :-)
Rozwiazywalem cos podobnego - trzeba bylo znalezc najdluzsza mozliwa sekwencje DNA w podanych lanuchcach aby okreslic jak bardzo podobne do siebie sa dwa gatunki. Gdybym tylko mogl odnalezc swoj kod ktory wyslalem jako rozwiazanie to byloby super :-/
-
Znalazłam ten program, jednak jego działanie trochę się różni od tego którego ja potrzebuje :-/ Różnica jest taka, że wprowadzam krótki wzorzec, np o długości 10 nukleotydów. Następnie wprowadzam długą sekwencję dna w której mam znaleźć fragment o największym podobieństwie, czyli wzorzec musi być wielokrotnie przyrównany, zaczynając od pierwszego nukleotydu, następnie drugiego, trzeciego.. itd. Jako wynik program zwraca fragment sekwencji o największym podobieństwie do wzorca.
A to znaleziony przeze mnie program:
sub wczytaj_plik {
open (PLIK, $_[0]) || die "Nie moge zaladowac $_[0]: $!\n";
chomp(my @temp = <PLIK>);
close (PLIK);
# laczymy wiersze z pliku w jedna dluga linie
my $dna = join '', @temp;
# wywalamy znaki ktore nie opisuja DNA
$dna =~ s/[^actg]//gi;
# mamy sekwencje DNA do zwrocenia
return $dna;
}
sub compare {
my @a1 = split '', $_[0];
my @a2 = split '', $_[1];
# krotszy string decyduje o porownaniu
my $koniec = $#a1 < $#a2 ? $#a1 : $#a2;
my $wynik = 0;
for (my $l=0; $l<=$koniec; $l++) {
$wynik++ if $a1[$l] eq $a2[$l];
}
# wyliczamy globalne i loklane podobienstwo
my $A = (2 * $wynik) / ($#a1 + $#a2 + 2);
my $B = $wynik / ($koniec+1);
print "Podobne = $wynik, A = $A, B = $B\n";
}
#
# GLOWNA CZESC PROGRAMU
# wywolanie: porownaj.pl plikdna1 plikdna2
#
# wersja czytelna
my $dna1 = wczytaj_plik($ARGV[0]);
my $dna2 = wczytaj_plik($ARGV[1]);
compare ($dna1, $dna2);
# wersja skrocona ktora robi dokladnie to samo... ale jest mniej czytelna
#compare(wczytaj_plik($ARGV[0]), wczytaj_plik($ARGV[1]));
-
Jak znajde moj kod to podrzuce... jestem pewien ze jedno z zadan na rosalind to dokladnie to co potrzebujesz bo pamietam ze pisalem algorytm ktory robi takie wlasnie porownania jak potrzebujesz i zwraca jeden ciag DNA tak jak napisalem wczesniej - bylaby jedynie kwestia zmiany tego co zwraca na liczbe.
Zasady Postowania
- Nie możesz zakładać nowych tematów
- Nie możesz pisać wiadomości
- Nie możesz dodawać załączników
- Nie możesz edytować swoich postów
-
Forum Rules