annotate pfamScan/Bio/Pfam/Scan/PfamScan.pm @ 0:68a3648c7d91 draft default tip

Uploaded
author matteoc
date Thu, 22 Dec 2016 04:45:31 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
1
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
2 =head1 NAME
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
3
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
4 Bio::Pfam::Scan::PfamScan
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
5
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
6 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
7
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
8 package Bio::Pfam::Scan::PfamScan;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
9
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
10 =head1 SYNOPSIS
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
11
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
12 my $ps = Bio::Pfam::Scan::PfamScan->new(
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
13 -cut_off => $hmmscan_cut_off,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
14 -dir => $dir,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
15 -clan_overlap => $clan_overlap,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
16 -fasta => $fasta,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
17 -align => $align,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
18 -as => $as
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
19 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
20
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
21 $ps->search;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
22 $ps->write_results;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
23
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
24 =head1 DESCRIPTION
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
25
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
26 $Id: PfamScan.pm,v 1.4 2010-01-12 09:41:42 jm14 Exp $
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
27
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
28 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
29
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
30 use strict;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
31 use warnings;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
32
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
33 use Bio::Pfam::HMM::HMMResultsIO;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
34 use Bio::Pfam::Active_site::as_search;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
35 use Bio::SimpleAlign;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
36 use Bio::Pfam::Scan::Seq;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
37
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
38 use Carp;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
39 use IPC::Run qw( start finish );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
40
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
41 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
42 #- constructor -----------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
43 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
44
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
45 =head1 METHODS
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
46
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
47 =head2 new
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
48
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
49 The only constructor for the object. Accepts a set of arguments that specify
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
50 the parameters for the search:
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
51
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
52 =over
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
53
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
54 =item -cut_off
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
55
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
56 =item -dir
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
57
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
58 =item -clan_overlap
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
59
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
60 =item -fasta
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
61
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
62 =item -sequence
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
63
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
64 =item -align
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
65
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
66 =item -hmm
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
67
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
68 =item -as
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
69
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
70 =back
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
71
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
72 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
73
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
74 sub new {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
75 my ( $class, @args ) = @_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
76
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
77 my $self = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
78 bless $self, $class;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
79
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
80 # To avoid hard coding the location for the binary, we assume it will be on the path.....
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
81 $self->{_HMMSCAN} = 'hmmscan';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
82
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
83 # handle arguments, if we were given any here
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
84 $self->_process_args(@args) if @args;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
85
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
86 return $self;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
87 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
88
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
89 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
90 #- public methods --------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
91 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
92
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
93 =head2 search
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
94
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
95 The main method on the object. Performs a C<hmmscan> search using the supplied
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
96 sequence and the specified HMM library.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
97
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
98 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
99
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
100 sub search {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
101 my ( $self, @args ) = @_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
102
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
103 # handle the arguments, if we were handed any here
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
104 $self->_process_args(@args) if @args;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
105
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
106 # set up the output header
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
107 $self->_build_header;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
108
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
109 croak qq(FATAL: no sequence given; set the search parameters before calling "search")
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
110 unless defined $self->{_sequence};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
111
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
112 my ( %AllResults, $pfamB, $firstResult );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
113
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
114 foreach my $hmmlib ( @{ $self->{_hmmlib} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
115
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
116 my ( @hmmscan_cut_off, $seq_evalue, $dom_evalue );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
117 if ( $hmmlib !~ /Pfam\-B/ ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
118 @hmmscan_cut_off = @{ $self->{_hmmscan_cutoff} };
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
119 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
120 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
121 $pfamB = 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
122 $seq_evalue = 0.001;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
123 $dom_evalue = 0.001;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
124
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
125 # It's a pfamB search so use some default cut off values
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
126 push @hmmscan_cut_off, '-E', $seq_evalue, '--domE', $dom_evalue;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
127 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
128
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
129 push @{ $self->{_header} },
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
130 "# cpu number specified: " . $self->{_cpu} . "\n"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
131 if ( $hmmlib !~ /Pfam\-B/ and $self->{_cpu} );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
132
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
133 push @{ $self->{_header} },
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
134 "# searching against: "
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
135 . $self->{_dir}
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
136 . "/$hmmlib, with cut off "
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
137 . join( " ", @hmmscan_cut_off ) . "\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
138 my @params;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
139 if ( $self->{_cpu} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
140 @params = (
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
141 'hmmscan', '--notextw', '--cpu', $self->{_cpu}, @hmmscan_cut_off,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
142 $self->{_dir} . '/' . $hmmlib,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
143 $self->{_fasta}
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
144 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
145 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
146 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
147 @params = (
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
148 'hmmscan', '--notextw', @hmmscan_cut_off, $self->{_dir} . '/' . $hmmlib,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
149 $self->{_fasta}
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
150 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
151
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
152 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
153
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
154 print STDERR "PfamScan::search: hmmscan command: |@params|\n"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
155 if $ENV{DEBUG};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
156 print STDERR 'PfamScan::search: sequence: |' . $self->{_sequence} . "|\n"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
157 if $ENV{DEBUG};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
158
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
159 my $run = start \@params, '<pipe', \*IN, '>pipe', \*OUT, '2>pipe', \*ERR
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
160 or croak qq(FATAL: error running hmmscan; IPC::Run returned '$?');
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
161
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
162 # print IN $self->{_sequence}; ;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
163 close IN;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
164
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
165 $self->{_hmmresultIO} = Bio::Pfam::HMM::HMMResultsIO->new;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
166 $self->{_all_results} = $self->{_hmmresultIO}->parseMultiHMMER3( \*OUT );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
167 close OUT;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
168
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
169 my $err;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
170 while (<ERR>) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
171 $err .= $_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
172 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
173 close ERR;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
174
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
175 finish $run
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
176 or croak qq|FATAL: error running hmmscan ($err); ipc returned '$?'|;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
177
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
178 unless ( $hmmlib =~ /Pfam\-B/ ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
179
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
180 if ( $self->{_clan_overlap} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
181 push( @{ $self->{_header} }, "# resolve clan overlaps: off\n" );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
182 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
183 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
184 push( @{ $self->{_header} }, "# resolve clan overlaps: on\n" );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
185 $self->_resolve_clan_overlap;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
186 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
187
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
188 if ( $self->{_as} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
189 push( @{ $self->{_header} }, "# predict active sites: on\n" );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
190 $self->_pred_act_sites;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
191 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
192 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
193 push( @{ $self->{_header} }, "# predict active sites: off\n" );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
194 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
195
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
196 if ( $self->{_translate} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
197 push @{ $self->{_header} }, "# translate DNA sequence: " . $self->{_translate} . "\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
198 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
199 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
200
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
201 # Determine which hits are significant
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
202 foreach my $result ( @{ $self->{_all_results} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
203 foreach
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
204 my $unit ( sort { $a->seqFrom <=> $b->seqFrom } @{ $result->units } )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
205 {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
206
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
207 unless ($pfamB) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
208
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
209 $unit->sig(0);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
210 if ( $result->seqs->{ $unit->name }->bits >=
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
211 $self->{_seqGA}->{ $unit->name } )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
212 {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
213 if ( $unit->bits >= $self->{_domGA}->{ $unit->name } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
214 $unit->sig(1);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
215 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
216 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
217 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
218 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
219 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
220
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
221 if ($firstResult) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
222 $AllResults{ $self->{_all_results} } = $self->{_all_results};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
223 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
224 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
225 $firstResult = $self->{_all_results};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
226 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
227
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
228 } # end of "foreach $hmmlib"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
229
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
230 # If more than one search, merge results into one object
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
231 if ( keys %AllResults ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
232
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
233 foreach my $AllResult ( keys %AllResults ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
234
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
235 foreach my $seq_id ( keys %{ $self->{_seq_hash} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
236
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
237 my $flag;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
238
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
239 #If seq exists in both, add all units from $AllResult to $firstResult
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
240 foreach my $result ( @{$firstResult} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
241
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
242 if ( $result->seqName eq $seq_id ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
243 $flag = 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
244
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
245 foreach my $result2 ( @{ $AllResults{$AllResult} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
246
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
247 if ( $result2->seqName eq $seq_id ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
248 foreach my $hmmname ( keys %{ $result2->seqs } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
249 $result->addHMMSeq( $result2->seqs->{$hmmname} );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
250 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
251 foreach my $unit ( @{ $result2->units } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
252 $result->addHMMUnit($unit);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
253 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
254 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
255 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
256 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
257 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
258
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
259 #If seq doesn't exist in $firstResult, need to add both sequence and units to $firstResult
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
260 unless ($flag) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
261 foreach my $result2 ( @{ $AllResults{$AllResult} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
262 if ( $result2->seqName eq $seq_id ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
263 push @{$firstResult}, $result2;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
264 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
265 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
266 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
267 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
268 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
269 $self->{_all_results} = $firstResult;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
270
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
271 } # end of "if keys %AllResults"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
272
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
273 push @{ $self->{_header} }, "# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =\n#\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
274
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
275 if ( $self->{_as} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
276 push @{ $self->{_header} }, "# <seq id> <alignment start> <alignment end> <envelope start> <envelope end> <hmm acc> <hmm name> <type> <hmm start> <hmm end> <hmm length> <bit score> <E-value> <significance> <clan> <predicted_active_site_residues>";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
277 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
278 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
279 push @{ $self->{_header} }, "# <seq id> <alignment start> <alignment end> <envelope start> <envelope end> <hmm acc> <hmm name> <type> <hmm start> <hmm end> <hmm length> <bit score> <E-value> <significance> <clan>";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
280 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
281
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
282 if ( $self->{_translate} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
283 push @{ $self->{_header} }, " <strand> <nt start> <nt end>";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
284 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
285 push @{ $self->{_header} }, "\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
286 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
287
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
288 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
289
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
290 =head2 write_results
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
291
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
292 Writes the results of the C<hmmscan> search. Takes a single argument, which can
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
293 be an open filehandle or a filename. A fatal error is generated if a file of the
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
294 given name already exists.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
295
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
296 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
297
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
298 sub write_results {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
299 my ( $self, $out, $e_seq, $e_dom, $b_seq, $b_dom ) = @_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
300
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
301 my $fh;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
302
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
303 if ( ref $out eq 'GLOB' ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
304
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
305 # we were handed a filehandle
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
306 $fh = $out;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
307 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
308 elsif ( $out and not ref $out ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
309
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
310 # we were handed a filename
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
311 croak qq(FATAL: output file "$out" already exists) if -f $out;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
312
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
313 open( FH, ">$out" )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
314 or croak qq(FATAL: Can\'t write to your output file "$out": $!);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
315 $fh = \*FH;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
316 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
317 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
318
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
319 # neither filehandle nor filename, default to STDOUT
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
320 $fh = \*STDOUT;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
321 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
322
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
323 if ( $self->{_header} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
324 my $header = join '', @{ $self->{_header} };
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
325 print $fh "$header\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
326 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
327
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
328 foreach my $result ( @{ $self->{_all_results} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
329 $self->{_hmmresultIO}
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
330 ->write_ascii_out( $result, $fh, $self, $e_seq, $e_dom, $b_seq, $b_dom );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
331 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
332 close $fh;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
333 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
334
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
335 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
336
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
337 =head2 results
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
338
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
339 Returns the search results.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
340
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
341 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
342
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
343 sub results {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
344 my ( $self, $e_value ) = @_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
345
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
346 unless ( defined $self->{_all_results} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
347 carp "WARNING: call search() before trying to retrieve results";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
348 return;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
349 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
350
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
351 my @search_results = ();
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
352
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
353 foreach my $hmm_result ( @{ $self->{_all_results} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
354 push @search_results, @{ $hmm_result->results( $self, $e_value ) };
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
355 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
356
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
357 return \@search_results;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
358 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
359
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
360 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
361 #- private methods -------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
362 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
363
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
364 =head1 PRIVATE METHODS
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
365
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
366 =head2 _process_args
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
367
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
368 Handles the input arguments.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
369
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
370 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
371
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
372 sub _process_args {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
373 my ( $self, @args ) = @_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
374
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
375 # accept both a hash and a hash ref
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
376 my $args = ( ref $args[0] eq 'HASH' ) ? shift @args : {@args};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
377
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
378 # make sure we get a sequence
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
379 if ( $args->{-fasta} and $args->{-sequence} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
380 croak qq(FATAL: "-fasta" and "-sequence" are mutually exclusive);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
381 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
382 elsif ( $args->{-fasta} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
383 croak qq(FATAL: fasta file "$args->{-fasta}" doesn\'t exist)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
384 unless -s $args->{-fasta};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
385 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
386 elsif ( $args->{-sequence} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
387 croak qq(FATAL: no sequence given)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
388 unless length( $args->{-sequence} );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
389 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
390 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
391 croak qq(FATAL: must specify either "-fasta" or "-sequence");
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
392 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
393
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
394 # check the cut off
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
395 if ( ( $args->{-e_seq} and ( $args->{-b_seq} || $args->{-b_dom} ) )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
396 or ( $args->{-b_seq} and ( $args->{-e_seq} || $args->{-e_dom} ) )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
397 or ( $args->{-b_dom} and $args->{-e_dom} ) )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
398 {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
399 croak qq(FATAL: can\'t use e value and bit score threshold together);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
400 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
401
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
402 $self->{_hmmscan_cutoff} = ();
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
403 if ( $args->{-e_seq} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
404 croak qq(FATAL: the E-value sequence cut-off "$args->{-e_seq}" must be a positive non-zero number)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
405 unless $args->{-e_seq} > 0;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
406
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
407 push @{ $self->{_hmmscan_cutoff} }, '-E', $args->{-e_seq};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
408 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
409
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
410 if ( $args->{-e_dom} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
411 croak q(FATAL: if you supply "-e_dom" you must also supply "-e_seq")
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
412 unless $args->{-e_seq};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
413
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
414 croak qq(FATAL: the E-value domain cut-off "$args->{-e_dom}" must be positive non-zero number)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
415 unless $args->{-e_dom} > 0;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
416
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
417 push @{ $self->{_hmmscan_cutoff} }, '--domE', $args->{-e_dom};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
418 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
419
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
420 if ( $args->{-b_seq} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
421 push @{ $self->{_hmmscan_cutoff} }, '-T', $args->{-b_seq};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
422 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
423
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
424 if ( $args->{-b_dom} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
425 croak q(FATAL: if you supply "-b_dom" you must also supply "-b_seq")
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
426 unless $args->{-b_seq};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
427
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
428 push @{ $self->{_hmmscan_cutoff} }, '--domT', $args->{-b_dom};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
429 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
430
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
431 unless ( $self->{_hmmscan_cutoff} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
432 push @{ $self->{_hmmscan_cutoff} }, '--cut_ga';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
433 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
434
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
435 # make sure we have a valid directory for the HMM data files
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
436 croak qq(FATAL: directory "$args->{-dir}" does not exist)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
437 unless -d $args->{-dir};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
438
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
439 # populate the object
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
440 $self->{_cut_off} = $args->{-cut_off};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
441 $self->{_dir} = $args->{-dir};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
442 $self->{_clan_overlap} = $args->{-clan_overlap};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
443 $self->{_fasta} = $args->{-fasta};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
444 $self->{_align} = $args->{-align};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
445 $self->{_as} = $args->{-as};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
446 $self->{_sequence} = $args->{-sequence};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
447 $self->{_cpu} = $args->{-cpu};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
448 $self->{_translate} = $args->{-translate};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
449
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
450 $self->{_hmmlib} = [];
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
451 if ( $args->{-hmmlib} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
452 if ( ref $args->{-hmmlib} eq 'ARRAY' ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
453 push @{ $self->{_hmmlib} }, @{ $args->{-hmmlib} };
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
454 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
455 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
456 push @{ $self->{_hmmlib} }, $args->{-hmmlib};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
457 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
458 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
459 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
460 push @{ $self->{_hmmlib} }, "Pfam-A.hmm";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
461 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
462
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
463 # Now check that the library exists in the data dir!
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
464 foreach my $hmmlib ( @{ $self->{_hmmlib} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
465
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
466 croak qq(FATAL: can't find $hmmlib and/or $hmmlib binaries in "$args->{-dir}")
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
467 unless (
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
468 -s $self->{_dir},
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
469 "/$hmmlib"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
470 and -s $self->{_dir} . "/$hmmlib.h3f"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
471 and -s $self->{_dir} . "/$hmmlib.h3i"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
472 and -s $self->{_dir} . "/$hmmlib.h3m"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
473 and -s $self->{_dir} . "/$hmmlib.h3p"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
474 and -s $self->{_dir} . "/$hmmlib.dat"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
475 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
476
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
477 # read the necessary data, if it's not been read already
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
478 $self->_read_pfam_data;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
479 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
480
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
481 $self->{_max_seqname} = 0;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
482
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
483 # if there's nothing in "_sequence" try to load a fasta file
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
484 $self->_read_fasta
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
485 unless $self->{_sequence};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
486
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
487 # check again for a sequence. If we don't have one at this point, bail with
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
488 # an error
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
489 croak qq(FATAL: no sequence given)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
490 unless $self->{_sequence};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
491
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
492 # read fasta file, store maximum sequence name and store sequences for active
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
493 # sites prediction
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
494 $self->_parse_sequence
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
495 unless $self->{_max_seqname};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
496
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
497 if ( $self->{_as} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
498 $self->_parse_act_site_data
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
499 unless $self->{_read_read_act_site_data};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
500 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
501
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
502 if ( $self->{_translate} ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
503 $self->_translate_fasta;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
504 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
505
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
506 # see if a version number was specified
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
507 $self->{_version} = $args->{version};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
508
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
509 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
510
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
511 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
512
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
513 =head2 _build_header
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
514
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
515 Adds version to the header object
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
516
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
517 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
518
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
519 sub _build_header {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
520 my ( $self, $version ) = @_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
521
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
522 unshift @{ $self->{_header} },
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
523 '# query sequence file: ' . $self->{_fasta} . "\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
524
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
525 unshift @{ $self->{_header} }, <<EOF_license;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
526 # Copyright (c) 2009 Genome Research Ltd\n# Freely distributed under the GNU
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
527 # General Public License
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
528 #
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
529 # Authors: Jaina Mistry (jaina\@ebi.ac.uk),
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
530 # Rob Finn (rdf\@ebi.ac.uk)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
531 #
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
532 # This is free software; you can redistribute it and/or modify it under
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
533 # the terms of the GNU General Public License as published by the Free Software
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
534 # Foundation; either version 2 of the License, or (at your option) any later version.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
535 # This program is distributed in the hope that it will be useful, but WITHOUT
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
536 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
537 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
538 # details.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
539 #
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
540 # You should have received a copy of the GNU General Public License along with
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
541 # this program. If not, see <http://www.gnu.org/licenses/>.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
542 # = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
543 EOF_license
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
544
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
545 my $v =
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
546 ( defined $self->{_version} )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
547 ? "version $version, "
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
548 : '';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
549
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
550 unshift @{ $self->{_header} },
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
551 "# pfam_scan.pl, $v run at " . scalar(localtime) . "\n#\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
552 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
553
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
554 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
555
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
556 =head2 _read_fasta
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
557
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
558 Reads a sequence from the fasta-format file that was specified in the
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
559 parameters.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
560
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
561 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
562
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
563 sub _read_fasta {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
564 my $self = shift;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
565
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
566 open( FASTA, $self->{_fasta} )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
567 or croak qq(FATAL: Couldn't open fasta file "$self->{_fasta}" $!\n);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
568 my @rows = <FASTA>;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
569 close FASTA;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
570
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
571 $self->{_sequence_rows} = \@rows;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
572
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
573 $self->{_sequence} = join '', @rows;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
574 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
575
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
576 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
577
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
578 =head2 _resolve_clan_overlap
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
579
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
580 Resolves overlaps between clans.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
581
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
582 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
583
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
584 sub _resolve_clan_overlap {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
585 my $self = shift;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
586
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
587 my @no_clan_overlap = ();
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
588 foreach my $result ( @{ $self->{_all_results} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
589 my $new =
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
590 $result->remove_overlaps_by_clan( $self->{_clanmap}, $self->{_nested} );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
591
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
592 push @no_clan_overlap, $new;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
593 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
594
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
595 $self->{_all_results} = \@no_clan_overlap;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
596 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
597
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
598 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
599
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
600 =head2 _pred_act_sites
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
601
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
602 Predicts active sites. Takes no arguments. Populates the "act_site" field on
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
603 each results object.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
604
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
605 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
606
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
607 sub _pred_act_sites {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
608 my $self = shift;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
609
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
610 # print STDERR "predicting active sites...\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
611
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
612 my $hmm_file = $self->{_dir} . '/Pfam-A.hmm';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
613
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
614 RESULT: foreach my $result ( @{ $self->{_all_results} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
615
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
616 # print STDERR "result: |" . $result->seqName . "|\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
617
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
618 UNIT: foreach my $unit ( @{ $result->units } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
619
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
620 # print STDERR "family: |" . $unit->name . "|\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
621
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
622 next UNIT
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
623 unless ( $self->{_act_site_data}->{ $unit->name }->{'alignment'} );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
624
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
625 my $seq_region = substr(
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
626 $self->{_seq_hash}->{ $result->seqName },
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
627 $unit->seqFrom - 1,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
628 $unit->seqTo - $unit->seqFrom + 1
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
629 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
630
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
631 my $seq_se = $unit->seqFrom . '-' . $unit->seqTo;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
632
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
633 # print STDERR "seq_id: |" . $result->seqName . "|\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
634 # print STDERR "seq_se: |" . $seq_se . "|\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
635 # print STDERR "seq_region: |" . $seq_region . "|\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
636 # print STDERR "family: |" . $unit->name . "|\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
637 # print STDERR "hmm_file: |" . $hmm_file . "|\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
638 # print STDERR "dir: |" . $self->{_dir} . "|\n";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
639
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
640 $unit->{act_site} = Bio::Pfam::Active_site::as_search::find_as(
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
641 $self->{_act_site_data}->{ $unit->name }->{'alignment'},
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
642 $self->{_act_site_data}->{ $unit->name }->{'residues'},
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
643 $result->seqName,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
644 $seq_se,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
645 $seq_region,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
646 $unit->name,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
647 $hmm_file
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
648 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
649 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
650 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
651 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
652
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
653 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
654
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
655 =head2 _read_pfam_data
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
656
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
657 Reads the Pfam data file ("Pfam-A.scan.dat") and populates the C<accmap>,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
658 C<nested> and C<clanmap> hashes on the object.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
659
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
660 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
661
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
662 sub _read_pfam_data {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
663 my $self = shift;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
664
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
665 #print STDERR "reading " . $self->{_hmmlib} . ".dat\n" if($ENV{DEBUG});
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
666 $self->{_accmap} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
667 $self->{_nested} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
668 $self->{_clanmap} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
669 $self->{_desc} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
670 $self->{_seqGA} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
671 $self->{_domGA} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
672 $self->{_type} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
673 $self->{_model_len} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
674
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
675 foreach my $hmmlib ( @{ $self->{_hmmlib} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
676 my $scandat = $self->{_dir} . '/' . $hmmlib . '.dat';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
677 open( SCANDAT, $scandat )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
678 or croak qq(FATAL: Couldn't open "$scandat" data file: $!);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
679 my $id;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
680 while (<SCANDAT>) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
681 if (m/^\#=GF ID\s+(\S+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
682 $id = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
683 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
684 elsif (m/^\#=GF\s+AC\s+(\S+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
685 $self->{_accmap}->{$id} = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
686 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
687 elsif (m/^\#=GF\s+DE\s+(.+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
688 $self->{_desc}->{$id} = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
689 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
690 elsif (m/^\#=GF\s+GA\s+(\S+)\;\s+(\S+)\;/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
691 $self->{_seqGA}->{$id} = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
692 $self->{_domGA}->{$id} = $2;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
693 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
694 elsif (m/^\#=GF\s+TP\s+(\S+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
695 $self->{_type}->{$id} = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
696 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
697 elsif (m/^\#=GF\s+ML\s+(\d+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
698 $self->{_model_len}->{$id} = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
699 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
700 elsif (/^\#=GF\s+NE\s+(\S+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
701 $self->{_nested}->{$id}->{$1} = 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
702 $self->{_nested}->{$1}->{$id} = 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
703 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
704 elsif (/^\#=GF\s+CL\s+(\S+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
705 $self->{_clanmap}->{$id} = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
706 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
707 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
708
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
709 close SCANDAT;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
710
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
711 # set a flag to show that we've read the data files already
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
712 $self->{ '_read_' . $hmmlib } = 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
713 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
714
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
715 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
716
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
717 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
718
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
719 =head2 _read_act_site_data
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
720
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
721 Reads the Pfam active site data file ("active_site.dat") and populates
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
722 the C<act_site_data> hashes on the object.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
723
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
724 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
725
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
726 sub _parse_act_site_data {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
727 my $self = shift;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
728 my $as_dat = $self->{_dir} . '/active_site.dat';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
729
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
730 $self->{_act_site_data} = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
731
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
732 open( AS, $as_dat )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
733 or croak qq(FATAL: Couldn\'t open "$as_dat" data file: $!);
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
734
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
735 my ( $fam_id, $aln );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
736
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
737 while (<AS>) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
738 if (/^ID\s+(\S+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
739 $fam_id = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
740 $aln = new Bio::SimpleAlign;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
741 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
742 elsif (/^AL\s+(\S+)\/(\d+)\-(\d+)\s+(\S+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
743 my ( $seq_id, $st, $en, $seq ) = ( $1, $2, $3, $4 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
744
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
745 $aln->add_seq(
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
746 Bio::Pfam::Scan::Seq->new(
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
747 '-seq' => $seq,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
748 '-id' => $seq_id,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
749 '-start' => $st,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
750 '-end' => $en,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
751 '-type' => 'aligned'
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
752 )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
753 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
754 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
755 elsif (/^RE\s+(\S+)\s+(\d+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
756 my ( $seq_id, $res ) = ( $1, $2 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
757 push(
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
758 @{ $self->{_act_site_data}->{$fam_id}->{'residues'}->{$seq_id} },
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
759 $res
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
760 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
761
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
762 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
763 elsif (/^\/\//) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
764
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
765 $self->{_act_site_data}->{$fam_id}->{'alignment'} = $aln;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
766
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
767 $fam_id = "";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
768 $aln = "";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
769
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
770 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
771 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
772 warn "Ignoring line:\n[$_]";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
773 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
774 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
775 close AS;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
776 $self->{_read_read_act_site_data} = 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
777 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
778
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
779 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
780
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
781 =head2 _parse_sequence
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
782
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
783 This method is used to parse the sequence and hash it on sequence
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
784 identifier. It also stores the length of the longest sequence id
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
785
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
786 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
787
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
788 sub _parse_sequence {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
789 my $self = shift;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
790
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
791 my $seq_hash = {};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
792 my $seq_id;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
793 foreach ( @{ $self->{_sequence_rows} } ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
794
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
795 next if m/^\s*$/; #Ignore blank lines
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
796
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
797 if (m/^>(\S+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
798 $seq_id = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
799
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
800 if ( exists( $seq_hash->{$seq_id} ) ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
801 croak "FATAL: Sequence identifiers must be unique. Your fasta file contains two sequences with the same id ($seq_id)";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
802 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
803
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
804 #Store the max length of seq name, use this later when printing in ascii
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
805 $self->{_max_seqname} = length($seq_id)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
806 if ( !$self->{_max_seqname}
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
807 or length($seq_id) > $self->{_max_seqname} );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
808 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
809 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
810 croak "FATAL: Unrecognised format of fasta file. Each sequence must have a header line in the format '>identifier <optional description>'"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
811 unless defined $seq_id;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
812 chomp;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
813 $seq_hash->{$seq_id} .= $_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
814 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
815 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
816
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
817 $self->{_seq_hash} = $seq_hash;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
818 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
819
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
820 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
821
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
822 =head2 _translate_fasta
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
823
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
824 Uses the HMMER v2.3.2 progam "translate" to perform a six-frame translation of
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
825 the input sequence. Checks the parameter "-translate".
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
826
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
827 Accepted arguments are "all" and "orf", where "all" means (from the "translate"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
828 help text) "translate in full, with stops; no individual ORFs" and "orf" means
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
829 "report only ORFs greater than minlen" where minlen is set to the default of
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
830 20.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
831
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
832 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
833
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
834 sub _translate_fasta {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
835 my ($self) = @_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
836 my $translatedFasta = $self->{_fasta} . ".translated";
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
837
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
838 my @params = ( 'translate', '-q', );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
839 if ( $self->{_translate} eq 'all' ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
840 push( @params, '-a' );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
841 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
842 elsif ( $self->{_translate} eq 'orf' ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
843 push( @params, '-l', '20' );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
844 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
845 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
846 croak qq(Unexpected parameter '$self->{_translate}');
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
847 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
848 push( @params, '-o', $translatedFasta, $self->{_fasta} );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
849
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
850 print STDERR "PfamScan::translate_fasta: translate command: |@params|\n"
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
851 if $ENV{DEBUG};
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
852
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
853 my $run = start \@params, '<pipe', \*IN, '>pipe', \*OUT, '2>pipe', \*ERR
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
854 or croak qq(FATAL: error running translate; IPC::Run returned '$?');
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
855
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
856 close IN;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
857 close OUT;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
858
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
859 my $err;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
860 while (<ERR>) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
861 $err .= $_;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
862 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
863 close ERR;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
864
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
865 finish $run
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
866 or croak qq|FATAL: error running translate ($err); ipc returned '$?'|;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
867 open( F, "<", $translatedFasta )
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
868 or croak qw(Could not open $translatedFasta '$!');
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
869 if ( $self->{_translate} eq 'orf' ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
870 while (<F>) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
871 if (/^>\s?(\S+).*nt (\d+)\.+(\d+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
872 $self->{_orf}->{$1}->{start} = $2;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
873 $self->{_orf}->{$1}->{end} = $3;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
874 $self->{_orf}->{$1}->{strand} = ( $2 < $3 ) ? '+' : '-';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
875 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
876 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
877 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
878 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
879 my $currentSeq;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
880 my $currentFrame;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
881 my $currentLen = 0;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
882 my $maxEnd = 0;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
883 while (<F>) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
884 chomp;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
885 if (/^>\s?(\S+\:)(\d+)/) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
886 if ( $currentLen > 0 ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
887 my $seqName = $currentSeq . $currentFrame;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
888 if ( $currentFrame < 3 ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
889 my $start = 1 + $currentFrame;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
890 my $end = $start + $currentLen - 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
891 $self->{_orf}->{$seqName}->{strand} = '+';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
892 $self->{_orf}->{$seqName}->{start} = $start;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
893 $self->{_orf}->{$seqName}->{end} = $end;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
894 $maxEnd = $end if ( $end > $maxEnd );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
895 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
896 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
897 my $start = $maxEnd - ( $currentFrame - 3 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
898 my $end = $start - $currentLen + 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
899 $self->{_orf}->{$seqName}->{strand} = '-';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
900 $self->{_orf}->{$seqName}->{start} = $start;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
901 $self->{_orf}->{$seqName}->{end} = $end;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
902 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
903 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
904 $currentLen = 0;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
905 $currentSeq = $1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
906 $currentFrame = $2;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
907 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
908 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
909 $currentLen += length($_) * 3;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
910 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
911 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
912 my $seqName = $currentSeq . $currentFrame;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
913 if ( $currentFrame < 3 ) {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
914 my $start = 1 + $currentFrame;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
915 my $end = $start + $currentLen - 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
916 $self->{_orf}->{$seqName}->{strand} = '+';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
917 $self->{_orf}->{$seqName}->{start} = $start;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
918 $self->{_orf}->{$seqName}->{end} = $end;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
919 $maxEnd = $end if ( $end > $maxEnd );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
920 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
921 else {
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
922 my $start = $maxEnd - ( $currentFrame - 3 );
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
923 my $end = $start - $currentLen + 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
924 $self->{_orf}->{$seqName}->{strand} = '-';
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
925 $self->{_orf}->{$seqName}->{start} = $start;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
926 $self->{_orf}->{$seqName}->{end} = $end;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
927 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
928 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
929 $self->{_fasta} = $translatedFasta;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
930 }
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
931 #-------------------------------------------------------------------------------
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
932
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
933 =head1 COPYRIGHT
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
934
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
935 Copyright (c) 2009: Genome Research Ltd.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
936
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
937 Authors: Jaina Mistry (jm14@sanger.ac.uk), John Tate (jt6@sanger.ac.uk), Rob Finn (finnr@janelia.hhmi.org)
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
938
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
939 This is free software; you can redistribute it and/or
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
940 modify it under the terms of the GNU General Public License
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
941 as published by the Free Software Foundation; either version 2
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
942 of the License, or (at your option) any later version.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
943
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
944 This program is distributed in the hope that it will be useful,
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
945 but WITHOUT ANY WARRANTY; without even the implied warranty of
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
946 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
947 GNU General Public License for more details.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
948
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
949 You should have received a copy of the GNU General Public License
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
950 along with this program; if not, write to the Free Software
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
951 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
952 or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
953
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
954 =cut
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
955
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
956 1;
68a3648c7d91 Uploaded
matteoc
parents:
diff changeset
957