이중 제한 효소 절단을 위해 수천 개의 서열을 분석하려고합니다. 이 예에서는이 두 효소가 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
크기 (ecorsize
및 mspsize
과 유사).
이 도움말을 작성하는 방법에 대한 도움이나 조언을 보내 주시면 감사하겠습니다. 감사.
예상되는 동작은 무엇인가 "가장 가까운 0.1 킬로바이트에 킬로베이스를"동의하지 않는 이유는 무엇입니까? –
절단 위치와 절단 조각 크기를보고해야합니다. 또한 위의 질문을 명확히하기 위해 편집했습니다. – berge2015
자신 만의 코드로 수행하는 작업은 귀하에게 달려 있습니다. 그러나 무료 도움말을 요청하는 경우 Perl 블록을 게시하여 읽기 쉽도록 들여 쓰기가 어렵습니다. – Borodin