Pokaż wyniki 1 do 4 z 4

Temat: Program do porównywania sekwencji DNA w PERLU

  1. #1
    Zarejestrowany
    Dec 2013
    Postów
    2

    Domyślnie 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...

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    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 :-/
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    Dec 2013
    Postów
    2

    Domyślnie

    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]));

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    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.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

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
  •  
Subskrybuj

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52