File Coverage

blib/lib/Bio/GeneDesign/Oligo.pm
Criterion Covered Total %
statement 12 39 30.7
branch 0 10 0.0
condition 0 2 0.0
subroutine 4 7 57.1
pod n/a
total 16 58 27.5


line stmt bran cond sub pod time code
1             #
2             # GeneDesign module for sequence segmentation
3             #
4              
5             =head1 NAME
6              
7             Bio::GeneDesign::Oligo
8              
9             =head1 VERSION
10              
11             Version 5.56
12              
13             =head1 DESCRIPTION
14              
15              
16             =head1 AUTHOR
17              
18             Sarah Richardson .
19              
20             =cut
21              
22             package Bio::GeneDesign::Oligo;
23             require Exporter;
24              
25 11     11   74 use Bio::GeneDesign::Basic qw(:GD);
  11         20  
  11         1867  
26 11     11   69 use strict;
  11         19  
  11         256  
27 11     11   54 use warnings;
  11         25  
  11         495  
28              
29             our $VERSION = 5.56;
30              
31 11     11   72 use base qw(Exporter);
  11         20  
  11         4000  
32             our @EXPORT_OK = qw(
33             _make_amplification_primers
34             _filter_homopolymer
35             _check_for_homopolymer
36             $VERSION
37             );
38             our %EXPORT_TAGS = (GD => \@EXPORT_OK);
39              
40             =head1 Functions
41              
42             =head2 _filter_homopolymer()
43              
44             =cut
45              
46             sub _filter_homopolymer
47             {
48 0     0     my ($seqarr, $length) = @_;
49 0           my @newarr = ();
50 0           foreach my $seq (@{$seqarr})
  0            
51             {
52 0 0         push @newarr, $seq if (! _check_for_homopolymer($seq, $length));
53             }
54 0           return \@newarr;
55             }
56              
57             =head2 _check_for_homopolymer()
58              
59             =cut
60              
61             sub _check_for_homopolymer
62             {
63 0     0     my ($seq, $length) = @_;
64 0   0       $length = $length || 5;
65 0 0         return 1 if ($length <= 1);
66 0 0         return 1 if $seq =~ m{A{$length}|T{$length}|C{$length}|G{$length}}msxi;
67 0           return 0;
68             }
69              
70             =head2 _make_amplification_primers()
71              
72             =cut
73              
74             sub _make_amplification_primers
75             {
76 0     0     my ($sequence, $temperature) = @_;
77              
78 0           my $left_length = 5;
79 0           my $lprimer = substr($sequence, 0, $left_length);
80 0           while (_melt($lprimer) < $temperature)
81             {
82 0           $left_length++;
83 0 0         last if ($left_length > 45);
84 0           $lprimer = substr($sequence, 0, $left_length)
85             }
86              
87 0           my $right_end = length($sequence);
88 0           my $right_length = 5;
89 0           my $rprimer = substr($sequence, $right_end - $right_length, $right_length);
90 0           while (_melt($rprimer) < $temperature)
91             {
92 0           $right_length++;
93 0 0         last if ($right_length > 45);
94 0           $rprimer = substr($sequence, $right_end - $right_length, $right_length);
95             }
96 0           $rprimer = _complement($rprimer, 1);
97              
98 0           return ($lprimer, $rprimer);
99             }
100              
101             1;
102              
103             __END__