2009年9月27日星期日

[PerlChina] Re: 在我遇到的这种情况下散列和数组哪个快?

BitArray我不熟,不过这个同构异形体好象还不太一样。。。
比如我们设定散列:
my %code_of = (
A => 0,
G => 1,
C => 2,
T => 3
);

这样确实可以满足A(00)和T(11)互补以及G(01)和C(10)互补。但是核甘酸序列的书写是有方向的,生物化学中的叫法是从5撇端向3撇端方
向。彼此为互补链的两条序列书写时的方向要反过来。
比如一个四核甘酸:ATAC。对应的互补序列是GTAT而不是TATG。因为他的互补时的方向是这样的:
|-ATAC->
||||
<-TATG-|

这里"|-" 表示DNA链的开始方向,箭头"->"表示链终止方向。竖线表示上下两个核甘酸可以按照碱基互补原则配对。
专业一点的写法是这样:
5`-ATAC-3`
||||
3`-TATG-5`

为了省事,大家约定书写核甘酸序列都按从5撇到3撇的方向写。所以3`-TATG-5`的简写就是GTAT,完整写出来是5`-GTAT-3`
所以,ATAC的位运算表示是00110010,其互补链GTAT是01110011
这个和你说的同构异形还要加一个字符串反向的步骤。

在我写的那个脚本里是按照"先反向再替换"来得到互补链的:

$str[0] = uc( substr($seq,$i,$len) ); #从序列中截取一个短串
$str[1] = lc( reverse($str[0]) ); #先反向
$str[1] =~ s{a}{T}g;
$str[1] =~ s{t}{A}g;
$str[1] =~ s{g}{C}g;
$str[1] =~ s{c}{G}g; #以上以此替换,得到互补链


On 9月27日, 下午12时35分, agentzh <agen...@gmail.com> wrote:
> 2009/9/25 空格 <ribozyme2...@gmail.com>
>
> > 简单说,就是找到一个15bp串的时候,要同时把这个序列掉个,再按照AT互补GC互补的情况处理。生成的序列同样是应该考虑的一种情况。
>
> 这个可以在向 BitArray 注册序列时,把其"同构异形体也一并注册了 :) 在输出比特为 0 的对应序列的过程中,亦可将当前输出序列的同构异形体也在
> BitArray 中注册为比特 1,这样后面就不会重复输出了。所以应当是加几行 C++ 代码的交情,哈哈!不知道我说的对不对?
>
> Cheers,
> -agentzh
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: