- 論壇徽章:
- 1
|
本帖最后由 chenhao392 于 2014-12-16 05:15 編輯
可能的小老鄉(xiāng)你好.
既然你是洛陽(yáng)上的本科,我猜我們多半 算半個(gè)老鄉(xiāng)。我也有高中時(shí)代的哥們?cè)谀撬髮W(xué)讀本科?丛谖覀兪抢相l(xiāng)的份上,看在你不停的積極討論的份上,我也就不潛水了。程序大概給你寫(xiě)完了,請(qǐng)查收。
我理解你的需求是:根據(jù)OrthoMCL計(jì)算出的同源基因名稱(chēng),從不同的植物的基因序列 (200 Gb)中,拿到OrthoMCL提到的基因,并把一個(gè)同源基因組的存放在一個(gè)文件里。
但是!
每一次提問(wèn)前,請(qǐng)一定要想一想自己的問(wèn)題是否問(wèn)的夠有效率。這次你忽略了幾個(gè)比較關(guān)鍵的信息:
1. Step 1-3 似乎是你自己的programming想法。其實(shí)不妨把整個(gè)需求描述出來(lái),也許別人有更好的辦法呢? 比如我的code,用到了hash of hash.
2. 一個(gè)基因會(huì)有多個(gè)isoforms,你的ortholog 信息是gene的,而你提供的Allseq.fa 是根據(jù)isoform的,直接的ID當(dāng)然一個(gè)match都沒(méi)有。我的code假設(shè)你的Allseq.fa 里的isoform是加了 . (點(diǎn)) 或者 _(下劃線(xiàn)) 的。這cover了玉米,水稻和擬南芥,并不一定cover了所有的情況。所以,這個(gè)代碼你可能還要改。
3. Again, 一個(gè)gene有多個(gè)isoforms,要選哪一個(gè)呢?這要看你的研究課題了。我知道通常會(huì)選最長(zhǎng)的那一個(gè)。
4. 請(qǐng)以后盡量學(xué)習(xí)用linux,你用windows 下載的Allseq.fa 的換行符,需要多用一個(gè)chop,將來(lái)記不住自己的代碼干了什么的話(huà),會(huì)出錯(cuò)。
5. 最重要的是,你真的理解你提供的文件么?
Quote- 其中要求生成的ID文件如下:
- APK_ORTHOMCL0
- 416
- 2
- rice sorghum
- LOC_Os04g04140
- LOC_Os05g29160
- LOC_Os10g02640
復(fù)制代碼 在我看來(lái),數(shù)字416 是說(shuō)這個(gè)ortholog在這些物種里一共有多少個(gè)copy,數(shù)字 2是說(shuō)有多少個(gè)物種里有這個(gè)ortholog,在上文中是rice(水稻)和 sorghum(高粱)。我的程序已經(jīng)考慮了這一點(diǎn),會(huì)從類(lèi)似 LOC_Os04g04140 的位置讀取。
請(qǐng)用嚴(yán)謹(jǐn)認(rèn)真的態(tài)度來(lái)做科研和在版面上提出問(wèn)題。將來(lái)perl玩熟練的話(huà),也請(qǐng)回到版面上幫助別人。
此致,
你的半個(gè)老鄉(xiāng): chenhao392
run- perl orthoMCL_picker.pl orthol-msu.txt Allseq.fa
復(fù)制代碼 code- #!/usr/bin/perl
- use strict;
- use warnings;
- my %id;
- my %seq;
- #load orthoMCL result from MSU
- open FILE, "<$ARGV[0]" or die "$!\n";
- while(<FILE>){
- chomp;
- #skip header line
- if($. == 1){
- next;
- }
- #get ortholog groups
- my ($orthoID,undef,$speciesCount,@line)=split(/\s+/,$_);
- for(my $i=$speciesCount;$i<scalar(@line);$i++){
- $id{$orthoID}{$line[$i]}="";
- $seq{$line[$i]}="";
- }
- }
- close FILE;
- #scanning through the seq
- my $switch=0;
- my $id="";
- open FILE, "<$ARGV[1]" or die "$!\n";
- while(<FILE>){
- chomp;
- chop;
- if($_ =~ />(.*?)\s.*/){
- $switch =0;
- $id=$1;
- $id=~s/[\._].*//;
- if(defined $seq{$id}){
- $switch = 1;
- }
- }
- elsif($_ =~ /^[ATCGatcg]/ && $switch == 1){
- $seq{$id}.=$_;
- }
- }
- close FILE;
- foreach my $orthoID(keys %id){
- open OUT, ">$orthoID.fa" or die "$!\n";
- foreach my $id(keys %{$id{$orthoID}}){
- print OUT ">$id\n$seq{$id}\n";
- }
- close OUT;
- }
復(fù)制代碼 |
|