[Cascavel-pm] Dúvida de Biotecnologia

Adriano Vivan Borro vivan em dim.fm.usp.br
Terça Setembro 16 19:39:56 CDT 2003


Legal, Luis. Vou estudar e inserir essas rotinas para teste. Agora, no final do email,
soh pra ver c eu entendi mesmo... Vc diz q, sempre q utilizo @, me refiro a um array. E
$ a um escalar. Isto quer dizer q, c eu usar @divide[$x] vou perder em muito em
eficiencia, jah que minha rotina rodarah diversas vezes, utilizando-se sempre de arrays
ao inves de escalares?



Luis Campos de Carvalho wrote:

> Adriano Vivan Borro wrote:
> > Legal. Vou procurar o Sr. Nicolas com certeza. Tks.
>
>    Bom congresso na Alemanha para você!
>    Mande lembranças ao Nick por mim!
>
> > Qto a minha duvida, eh o seguinte. A frase q estou verificando eh na verdade um
> > gene. E como todos sabem, um gene eh uma frase em um alfabeto de 4 caracteres (nao
> > deem essa definicao a um biologo ou biomedico, cnao eles podem ateh brigar. :-D ).
> > Ae, o q acontece... Eu nunca sei qual eh o tamanho dessa frase. E preciso cortar (
> > ou como eles tratam... "clivar" ) o gene em pontos especificos. De todos estes
> > pedacos de gene, tenho q retirar o ultimo, o penultimo, e assim por diante, ateh
> > achar determinada sequencia de caracteres.
>
>    Uau!!! Agora isso parece um problema interessante!! =-]
>    Obrigado por perder seu tempo explicando essas coisas!
>
> > Tenho, entao, que quero cortar minha frase em toda sequencia TACA por exemplo. E
> > quero achar a seguencia CAGA.
> >
> > Vai, entao um "exemplo de gene":
> >
> > AGATAATACAATATACAGGCAGACGCATACAGGGATACAGACCTACAATTCGTACACCGCAGATACAGACCAGC
> >
> > Entao, executando um split /TACA/,$seq , supondo $seq a variavel em q cologuei meu
> > "gene", temos:
> >
> > AGATAA       ATA               GGCAGACGCA          GGGA            GACC
> > ATTCG          CCGCAGA            GACCAGC
>
>    Eu particularmente acho o split() fraco e caro.
>    Provavelmente você poderia tentar uma expressão regular com múltiplos
> matches, e um loop while, assim:
>
>    my @genes;
>    my $gene = q.AGATAATACAATATACAGGCA. .
>               q.GACGCATACAGGGATACAGAC. .
>               q.CTACAATTCGTACACCGCAGA. .
>               q.TACAGACCAGC.
>
>    # "Enfileira" os genes encontrados em ordem inversa...
>    unshift @genes, $1 while( $gene =~ qr/([ACGT]+?)TACA/g );
>
>    # Seleciona os que interessam, separa o primeiro.
>    my $choice = (grep qr/CAGA/, @genes)[0];
>
>    __END__
>
>    Poderia ser feito assim, também:
>
>    my $gene = q.AGATAATACAATATACAGGCA. .
>               q.GACGCATACAGGGATACAGAC. .
>               q.CTACAATTCGTACACCGCAGA. .
>               q.TACAGACCAGC.
>
>    my $choice = ( grep qr/CAGA/, reverse split( qr/TACA/, $genes ) )[0];
>
>    __END__
>
>    E, finalmente, para resolver seu problema para sempre, a gente pode
> criar uma funçãozinha:
>
>    sub clivar{
>      my( $Splitter, $LookingFor, $Sequence ) = ( shift, shift, shift );
>      return
>        (grep qr/$LookingFor/o, reverse split(qr/$Splitter/o, $genes))[0];
>    }
>
> > Lembrando q a cada execucao, tenho um gene diferente a ser analizado, que tem o
> > tamanho diferente e terao diferentes numeros de clivagem, ou seja, nao sei nunca o
> > tamanho e nem o numero de elementos do meu array.
>
>    Ok, sem problemas. Tenho certeza de que a funçãozinha resolve o seu
> "abacaxi"... =-]
>
> > A sequencia procurada estah, entao, em $seq[-2] e em $seq[-6], pois estou contando
> > do final para o inicio. Mas a que quero eh a ultima ocorrencia, entao $seq[-2]. A
> > saida vai ser entao, o pedaco de gene q tem a sequencia procurada, ou seja, CCGCAGA
> > . Com isso, finalizo minha rotina, e serah feita a leitura de outro gene.
>
>    Legal!! =-] Eu gostei deste problema!
>    Tem mais assim para resolver?
>    A gente poderia começar um projetinho open-source... criar
> bibliotecas de biotecnologia Brasileiras, para o pessoal usar em
> pesquisa...
>
>    Se bem que existe muita coisa pronta no CPAN...
>
> > Espero ter conseguido, desta vez, explicar meu problema.
>
>    Desta vez, eu entendi tudinho, Adriano!
>    Foi divertido ajudar.
>    Espero que você se divirta também!
>
> >
> > E tb uma coisa... Existe alguma diferenca entre usar $divide[$x] e @divide[$x] ? Pq
> > eu testei isso e, ao menos no compilador q uso aki, deu o mesmo resultado....
> >
>
>    Bom, vamos com calma.
>    Certifique-se de que você tem uma diretriz
>
>      use strict;
>      use warnings;
>
>    No topo de seu programa.
>
>    Agora vamos ver a explicação:
>
>    Quando você diz $divide[$x], está se referindo ao $x-ésimo ESCALAR
> (Exatamente UMA coisa) contido no ARRAY @divide.
>
>    Quando você diz @divide[$x], está se referindo na verdade a um ARRAY
> de escalares (MUITAS coisas) que na pratica tem apenas o elemento de
> índice $x no ARRAY @divide.
>
>    Para efeito de algorítmo, os dois praticamente tem o mesmo
> significado. Mas isso pode mudar MUITO se você não controlar MUITO BEM
> que valores $x pode assumir. Isso pode vir até mesmo a ser perigoso,
> dependendo do restante do seu programa.
>
>    As boas práticas de programação Perl dizem que você deve usar '$'
> como prefixo sempre que se referir a uma variável contendo um escalar, e
> '@' sempre que se referir a uma variável contendo mais de um escalar
> (array).
>
>    Exemplo:
>
>    o array 'divide' (muitos elementos):
>
>    @divide;
>
>    o terceiro elemento do array divide (um elemento só):
>    $divide[2];
>
>    o terceiro, quarto e quinto elementos do array divide (muitos elementos):
>
>    @divide[2,3,4];
>
>    Os 5 últimos elementos do array divide (muitos elementos):
>
>    @divide[-5, $#divide];
>
>    Espero que isso deixe claro o que se pode fazer com ARRAYs e ESCALAREs.
>
>    []'z!
> --
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>    Luis Campos de Carvalho is Computer Scientist,
>    PerlMonk [SiteDocClan], Cascavel-pm Moderator,
>    Unix Sys Admin && Certified Oracle DBA
>    http://br.geocities.com/monsieur_champs/
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em mail.pm.org
> http://cascavel.pm.org/mailman/listinfo/cascavel-pm
>
> --------------------------
> Esta mensagem foi verificada
> pelo sistema de antivírus DIM e
> acredita-se estar livre de Virus.
> Virus data file v4292 created Sep 10 2003




Mais detalhes sobre a lista de discussão Cascavel-pm