Skip to content

Commit 3048f0d

Browse files
author
wqiu
committed
bioseq: add --trim-ends
1 parent 098f8ab commit 3048f0d

File tree

3 files changed

+39
-9
lines changed

3 files changed

+39
-9
lines changed

bin/bioseq

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ GetOptions(
2727
"count-codons|C",
2828
"delete|d=s",
2929
"feat2fas|F",
30+
"fetch|f=s", # Retrieve sequence by accession number; broken by NCBI protocol change
31+
# "longest-orf|C",
32+
# "extract|e",
33+
# "dotplot|D=s",
3034
"hydroB|H",
3135
"iep",
3236
"input|i=s",
@@ -36,6 +40,7 @@ GetOptions(
3640
"linearize|L",
3741
"mol-wt",
3842
"no-gaps|g",
43+
"no-revcom|Z",
3944
"num-gaps-dna",
4045
"num-gaps-aa",
4146
"num-seq|n",
@@ -45,21 +50,17 @@ GetOptions(
4550
"remove-stop|X", # for PAML/codeml
4651
# "restrict|x=s",
4752
# "restrict-coord=s",
53+
"rename|N=s",
4854
"revcom|r",
4955
"sort=s",
5056
"split-cdhit=s",
5157
"subseq|s=s",
5258
"syn-code",
5359
"translate|t=i",
54-
"fetch|f=s", # Retrieve sequence by accession number; broken by NCBI protocol change
55-
# "longest-orf|C",
56-
# "extract|e",
57-
# "dotplot|D=s",
58-
"rename|N=s",
59-
"no-revcom|Z",
6060
# "slidingwindow|S=i",
6161
# "prefix=s",
62-
# "split|S=i",
62+
# "split|S=i",
63+
"trim-ends",
6364
) or pod2usage(2);
6465

6566
use Pod::Usage;

lib/Bio/BPWrapper/SeqManipulations.pm

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ pick_by_id del_by_id find_by_re
5151
pick_by_re del_by_re
5252
pick_by_file del_by_file
5353
find_by_ambig pick_by_ambig del_by_ambig find_by_length
54-
del_by_length codon_sim codon_info);
54+
del_by_length codon_sim codon_info trim_ends);
5555

5656
# Package global variables
5757
my ($in, $out, $seq, %opts, $filename, $in_format, $out_format, $guesser);
@@ -99,7 +99,7 @@ my %opt_dispatch = (
9999
# 'prefix' => \&anonymize,
100100
'rename' => \&rename_id,
101101
# 'slidingwindow' => \&sliding_window,
102-
# 'split' => \&split_seqs,
102+
'trim-ends' => \&trim_ends,
103103
);
104104

105105
my %filter_dispatch = (
@@ -193,6 +193,28 @@ sub write_out {
193193

194194
################### subroutines ########################
195195

196+
# from vapid trim python code
197+
sub trim_ends {
198+
while ($seq = $in->next_seq()) {
199+
my $xip = 0;
200+
my $len = $seq->length();
201+
my @mono = split //, $seq->seq();
202+
for(my $i = 0; $i < $len; $i++) {
203+
$xip ++ if $mono[$i] =~ /[NX\-\?]/i;
204+
last unless $mono[$i] =~ /[NX\-\?]/i;
205+
}
206+
207+
my $y = $len;
208+
for(my $i = $len - 1; $i >=0; $i--) {
209+
$y-- if $mono[$i] =~ /[NX\-\?]/i;
210+
last unless $mono[$i] =~ /[NX\-\?]/i;
211+
}
212+
$seq->seq($seq->subseq($xip+1, $y));
213+
$out->write_seq($seq);
214+
}
215+
}
216+
217+
196218
sub codon_sim {
197219
# my $seq = $in->next_seq(); # only the first sequence used
198220
# if (&_internal_stop_or_x($seq->translate()->seq())) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
>N40:1:101:1716:ORFK00021
2+
-----?----------NN---nn-----atgtataaacaacaatattttatttctggc
3+
aaggtgcaaggtgttggttttagatttttcacagagcaaatagcaaataatatgaaacta
4+
aaaggatttgtaaaaaatctcaacgatggaagggtagaaattgtagctttctttaatact
5+
aaagaacaaatgaaaaaatttgaaaaattattaaatgggaataagtattcaaacattgaa
6+
aacattgaaaaaatagctttagatgaaaattatccttttcaatttaatgattttaaaatt
7+
tattat-----?----------NN---NN

0 commit comments

Comments
 (0)