免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9862 | 回复: 54
打印 上一主题 下一主题

20积分悬赏,求个perl程序,新手,写了好几个都无果。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-27 19:13 |只看该作者 |倒序浏览
20可用积分
本帖最后由 yanglc2013 于 2013-04-03 15:52 编辑




其中ref图中的数据为库,在同一条染色体上(两个图片中蓝色区域必须先相同),如果lnc图中红色矩形内的区域包含在ref图中红色区域内输出文件1(contain),

两个红色矩形框内的数据有交集输出文件2(overlap),无交集输出文件3(gapped).如果lnc区间比ref大,就是ref图中红色区域包含在lnc图中红色区域输出文件4(reserve).

希望输出的格式:(比如下面是overlap,不仅要输出lnc的数据,还有在同一行加上ref对应的数据。)

lnc-C1orf227-1:2        chr1        213028819        213031452        -    NM_014053        chr1        213031596        213072705        +        2210

后面的高手只是输出了lnc的数据。





数据文件.rar

920.59 KB, 下载次数: 38

论坛徽章:
0
2 [报告]
发表于 2013-03-27 19:13 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my (%ref, %data);

  5. open my $in , '<', 'refGene.txt'
  6.     or die "Can't open 'refGene.txt' for reading. $!\n";
  7. while (<$in>) {
  8.     chomp;
  9.     my @t = split;
  10.     push @{$ref{$t[1]}}, [@t];
  11. }
  12. close $in;

  13. open $in , '<', 'lncipedia_location.txt'
  14.     or die "Can't open 'lncipedia_location.txt' for reading. $!\n";
  15. while (<$in>) {
  16.     chomp;
  17.     my @t = split;
  18.     push @{$data{$t[1]}}, [@t];
  19. }
  20. close $in;

  21. open my $include , '>', 'include.txt'
  22.     or die "Can't create 'include.txt' for writing. $!\n";
  23. open my $non_include , '>', 'non_include.txt'
  24.     or die "Can't create 'non_include.txt' for writing. $!\n";
  25. open my $overlap , '>', 'overlap.txt'
  26.     or die "Can't create 'overlap.txt' for writing. $!\n";


  27. while (my ($chr, $v) = each %ref) {
  28.     my @ref_data = sort {$a->[2] <=> $b->[2]} @$v;
  29.     next unless exists $data{$chr};
  30.     my @inc_data = sort {$a->[2] <=> $b->[2]} @{$data{$chr}};
  31.     for (@ref_data) {
  32.         my @rd = @$_;
  33.         last unless @inc_data;
  34.         while (1) {
  35.             last unless @inc_data;
  36.             my @id = @{+shift @inc_data};
  37.             if ($id[3] < $rd[2]) {
  38.                 print {$non_include} join("\t", @id), "\n";
  39.                 next;
  40.             }
  41.             if ($id[2] > $rd[3]) {
  42.                 unshift @inc_data, [@id];
  43.                 last;
  44.             }
  45.             if ($id[2] >= $rd[2] && $id[3] <= $rd[3]) {
  46.                 print {$include} join("\t", @id), "\n";
  47.             }
  48.             else {
  49.                 print {$overlap} join("\t", @id), "\n";
  50.             }
  51.         }
  52.     }
  53.     delete $data{$chr};
  54. }

  55. while (my ($chr, $v) = each %data) {
  56.     my @inc_data = @$v;
  57.     for (@inc_data) {
  58.         print {$non_include} join("\t", @$_), "\n";
  59.     }
  60. }

  61. close $include;
  62. close $non_include;
  63. close $overlap;
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-03-27 20:44 |只看该作者
本帖最后由 Perlvim 于 2013-03-27 20:48 编辑

是测试DNA相似度吗?

1. refGene 文件中的
NR_026818        chr1        34610        36081        -        585
NR_033908        chr1        700244        714068        -        590
6个字段,是否只使用第2个到第4个,其他没有用?

2. refGene 文件中 第二个字段相同的,是否要合并范围?计算并集?

3. lnc 中的数据,计算在哪个范围,是否有交集,是在 ref 那个对应字段全部范围内计算吗?

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
4 [报告]
发表于 2013-03-27 20:50 |只看该作者
不懂生物 真苦逼{:3_186:}

论坛徽章:
0
5 [报告]
发表于 2013-03-27 22:02 |只看该作者
回复 2# Perlvim
一个染色体可以分好几段,虽然你说的有重复,但是其起始位置和终止位置不一样,所以不要合并啊。这是求gene的location信息。判断lnc中的染色体(chr)其起始位置和终止位置是不是包含在ref中的起始位置和终止位置中。就是你指的第三列(起始位置)和第四列(终止位置)。

论坛徽章:
0
6 [报告]
发表于 2013-03-27 22:41 |只看该作者
回复 5# yanglc2013


    意思是一个染色体中一个位置有很多片段,要每个片段都查找,是否有交集吗?

论坛徽章:
0
7 [报告]
发表于 2013-03-27 23:12 |只看该作者
回复 6# Perlvim
对啊。就是比对染色体,如果lnc中的那一段染色体在ref中就输出,不在输出待另一个文件,有一部分在又输出一个文件。

论坛徽章:
0
8 [报告]
发表于 2013-03-27 23:20 |只看该作者
数据好大,机器都快跑死了,你这个够牛的,不好做啊。

论坛徽章:
0
9 [报告]
发表于 2013-03-28 00:53 |只看该作者
回复 1# yanglc2013


    神马叫‘落在’,是两个数值相同的意思吗,生物不大懂,建议楼主先扫盲

论坛徽章:
0
10 [报告]
发表于 2013-03-28 08:32 |只看该作者
blackfur 发表于 2013-03-28 00:53
回复 1# yanglc2013


落在就是包含呗。 比如 4..6 落在 1..10中
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP