2016-09-23 5 views
-1

이중 제한 효소 절단을 위해 수천 개의 서열을 분석하려고합니다. 이 예에서는이 두 효소가 EcoRI와 MspI라고 가정 해 봅니다. 나는 이것을 위해 Bioperl 모듈을 사용하고 있으며 (아래 코드를 보시오), 단일 효소로 작동시킬 수있다. 두 가지 효소가 모두 작용하여 이상한 결과를 주거나 예상대로 작동하지 않는 것입니다. 코드가 좀 이상한 이유로 소수의 'bothsize'부분 ... 인쇄 숫자에 도달하면Bioperl에서 double restriction enzyme digest

#!/usr/bin/perl 

use strict; 
use Bio::Seq; 
use Bio::SeqIO; 
use Bio::Restriction::Analysis; 
use Bio::Restriction::EnzymeCollection; 
use List::Util qw(min max sum); 

my $usage = "perl $0 <in><out>"; 
my $in = shift or die $usage; 
my $out = shift or die $usage; 

my ($ra, $seq); 
my $enz_collection = Bio::Restriction::EnzymeCollection->new(); 
my (@ecorbp, @ecorsize, @mspbp, @mspsize); 

my $seq_in = Bio::SeqIO->new( 
          -format => 'fasta', 
          -file => $in, 
          ); 
open OUT, ">$out"; 
while ($seq = $seq_in -> next_seq) 
{ 
$ra = Bio::Restriction::Analysis->new(-seq=>$seq); 

#how many times does each enzyme cut 
my $EcoRIcuts = $ra->cuts_by_enzyme('EcoRI'); 
my $MspIcuts = $ra->cuts_by_enzyme('MspI'); 
my $bothcuts = $ra->cuts_by_enzyme('EcoRI', 'MspI'); 
#print $bothcuts."\n"; 

#doing something with bp 
@ecorbp = $ra->positions('EcoRI'); 
@mspbp = $ra->positions('MspI'); 
my $ecorbp_min = min(@ecorbp); 
my $ecorbp_max = max(@ecorbp); 
my $mspbp_min = min(@mspbp); 
my $mspbp_max = max(@mspbp); 
my $ecorbp_avg = sum(@ecorbp)/@ecorbp; 
my $mspbp_avg = sum(@mspbp)/@mspbp; 

#doing something with cut size/fragment 
@ecorsize = $ra->sizes('EcoRI'); 
@mspsize = $ra->sizes('MspI'); 
my $ecorsize_min = min(@ecorsize); 
my $ecorsize_max = max(@ecorsize); 
my $mspsize_min = min(@mspsize); 
my $mspsize_max = max(@mspsize); 
my $ecorsize_avg = sum(@ecorsize)/@ecorsize; 
my $mspsize_avg = sum(@mspsize)/@mspsize; 

my @bothsize = $ra->sizes('EcoRI','MspI'); 
my $bothsize_max = max (@bothsize); 
my $bothsize_min = min (@bothsize); 
print $bothsize_max,"\n"; 
print $bothsize_min,"\n"; 

#do similar thing with the cut positions; this part not written yet 
@bothbp = $ra->positions('EcoRI','MspI'); 

#print OUT "EcoRI cuts ",$seq -> display_id," $EcoRIcuts times with at minimum base position of $ecorbp_min, maximum base position of $ecorbp_max with average base position of $ecorbp_avg to give minimum frament size of $ecorsize_min bp, maximum fragment size of $ecorsize_max bp with average fragment size of $ecorsize_avg bp\n"; 
#print OUT "MspI cuts ",$seq -> display_id," $MspIcuts times with at minimum base position of $mspbp_min, maximum base position of $mspbp_max with average base position of $mspbp_avg to give minimum frament size of $mspsize_min bp, maximum fragment size of $mspsize_max bp with average fragment size of $mspsize_avg bp\n"; 
} 

close OUT; 

문제는 온다.

는 여기에 내가 코드를 테스트하기 위해 사용하고 내 매우 짧은 입력 파일입니다 :

코드는 모두 효소가 절단 위치 ( ecorbp 유사한, mspbp)도 & 절단 조각을보고 할 것으로 예상된다
>Seq1 
AAAAGAATTCAAAAAAAAGAAAACAATAAGTAAAAGACAGACCGGCAGAGAAAACTTACCCGAC 
>Seq2 
AAACGAGAATTCAAAAAATAGAAAACCGGAATAAGTAAAAGACAGGAATTCAGCAGCCGGAGAA 

크기 (ecorsizemspsize과 유사).

이 도움말을 작성하는 방법에 대한 도움이나 조언을 보내 주시면 감사하겠습니다. 감사.

+0

예상되는 동작은 무엇인가 "가장 가까운 0.1 킬로바이트에 킬로베이스를"동의하지 않는 이유는 무엇입니까? –

+0

절단 위치와 절단 조각 크기를보고해야합니다. 또한 위의 질문을 명확히하기 위해 편집했습니다. – berge2015

+0

자신 만의 코드로 수행하는 작업은 귀하에게 달려 있습니다. 그러나 무료 도움말을 요청하는 경우 Perl 블록을 게시하여 읽기 쉽도록 들여 쓰기가 어렵습니다. – Borodin

답변

2

Bio::Restriction::Analysis 개체의 sizes 방법은 여러 효소

두 번째 매개 변수는 입니다

+1

@ber [코드에 기재] (https://metacpan.org/source/CJFIELDS/BioPerl-1.6.924/Bio/Restriction/Analysis.pm#L618)를 보면 더 명확 해집니다. ''MspI''가 두 번째 인수로 전달됩니다. 그것은 진정한 가치입니다. 따라서 의미가 무엇이든 가장 가까운 0.1 kb로 변환하는 수학이 있습니다. 이 함수를 두 번 호출하면됩니다. 몇 가지 간단한 코드 행을 읽는 데 도메인 지식이 필요하지 않습니다. 하지만 관련 도메인 지식을 질문에 포함하는 데 도움이됩니다. 사용하는 도구에 대해 자세히 알고 있으면 도움이 될 수 있습니다. 전기 톱이 고장났다면 나무가 얼마나 큰지 말할 수 있겠지? – simbabque