Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/SearchIO/chado.pm @ 0:1f6dce3d34e0
Uploaded
| author | mahtabm |
|---|---|
| date | Thu, 11 Apr 2013 02:01:53 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1f6dce3d34e0 |
|---|---|
| 1 # $Id: chado.pm,v 1.1 2002/12/03 08:13:55 cjm Exp $ | |
| 2 # | |
| 3 # BioPerl module for Bio::SearchIO::chado | |
| 4 # | |
| 5 # Chris Mungall <cjm@fruitfly.org> | |
| 6 # | |
| 7 # You may distribute this module under the same terms as perl itself | |
| 8 | |
| 9 # POD documentation - main docs before the code | |
| 10 | |
| 11 =head1 NAME | |
| 12 | |
| 13 Bio::SearchIO::chado - chado sequence input/output stream | |
| 14 | |
| 15 =head1 SYNOPSIS | |
| 16 | |
| 17 It is probably best not to use this object directly, but | |
| 18 rather go through the SearchIO handler system. Go: | |
| 19 | |
| 20 $stream = Bio::SearchIO->new(-file => $filename, -format => 'chado'); | |
| 21 | |
| 22 while ( my $seq = $stream->next_seq() ) { | |
| 23 # do something with $seq | |
| 24 } | |
| 25 | |
| 26 =head1 DESCRIPTION | |
| 27 | |
| 28 This object can transform Bio::Seq objects to and from chado flat | |
| 29 file databases. CURRENTLY ONLY TO | |
| 30 | |
| 31 | |
| 32 =head2 Optional functions | |
| 33 | |
| 34 =over 3 | |
| 35 | |
| 36 =item _show_dna() | |
| 37 | |
| 38 (output only) shows the dna or not | |
| 39 | |
| 40 =item _post_sort() | |
| 41 | |
| 42 (output only) provides a sorting func which is applied to the FTHelpers | |
| 43 before printing | |
| 44 | |
| 45 | |
| 46 =back | |
| 47 | |
| 48 =head1 FEEDBACK | |
| 49 | |
| 50 =head2 Mailing Lists | |
| 51 | |
| 52 User feedback is an integral part of the evolution of this | |
| 53 and other Bioperl modules. Send your comments and suggestions preferably | |
| 54 to one of the Bioperl mailing lists. | |
| 55 Your participation is much appreciated. | |
| 56 | |
| 57 bioperl-l@bioperl.org - General discussion | |
| 58 http://www.bioperl.org/MailList.shtml - About the mailing lists | |
| 59 | |
| 60 =head2 Reporting Bugs | |
| 61 | |
| 62 Report bugs to the Bioperl bug tracking system to help us keep track | |
| 63 the bugs and their resolution. | |
| 64 Bug reports can be submitted via email or the web: | |
| 65 | |
| 66 bioperl-bugs@bio.perl.org | |
| 67 http://bio.perl.org/bioperl-bugs/ | |
| 68 | |
| 69 =head1 AUTHOR - Chris Mungall | |
| 70 | |
| 71 Email cjm@fruitfly.org | |
| 72 | |
| 73 =head1 APPENDIX | |
| 74 | |
| 75 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _ | |
| 76 | |
| 77 =cut | |
| 78 | |
| 79 # Let the code begin... | |
| 80 | |
| 81 package Bio::SearchIO::chado; | |
| 82 use vars qw(@ISA); | |
| 83 use strict; | |
| 84 | |
| 85 use Bio::SearchIO; | |
| 86 use Bio::SeqFeature::Generic; | |
| 87 use Bio::Seq::SeqFactory; | |
| 88 use Bio::Annotation::Collection; | |
| 89 use Bio::Annotation::Comment; | |
| 90 use Bio::Annotation::Reference; | |
| 91 use Bio::Annotation::DBLink; | |
| 92 | |
| 93 | |
| 94 use Bio::SeqIO::chado; | |
| 95 | |
| 96 use Data::Stag qw(:all); | |
| 97 | |
| 98 # should really inherit off of a chado helper... | |
| 99 @ISA = qw(Bio::SearchIO Bio::SeqIO::chado); | |
| 100 | |
| 101 sub _initialize { | |
| 102 my($self,@args) = @_; | |
| 103 | |
| 104 $self->SUPER::_initialize(@args); | |
| 105 my $wclass = $self->default_handler_class; | |
| 106 $self->handler($wclass->new); | |
| 107 $self->{_end_of_data} = 0; | |
| 108 $self->handler->S("chado"); | |
| 109 return; | |
| 110 } | |
| 111 | |
| 112 sub DESTROY { | |
| 113 my $self = shift; | |
| 114 $self->end_of_data(); | |
| 115 $self->SUPER::DESTROY(); | |
| 116 } | |
| 117 | |
| 118 sub end_of_data { | |
| 119 my $self = shift; | |
| 120 $self->{_end_of_data} = 1; | |
| 121 $self->handler->E("chado"); | |
| 122 } | |
| 123 | |
| 124 sub default_handler_class { | |
| 125 return "Data::Stag::BaseHandler"; | |
| 126 } | |
| 127 | |
| 128 =head2 write_result | |
| 129 | |
| 130 Title : write_result | |
| 131 Usage : $stream->write_result($result) | |
| 132 Function: writes the $result object (must be result) to the stream | |
| 133 Returns : 1 for success and 0 for error | |
| 134 Args : Bio::Result | |
| 135 | |
| 136 | |
| 137 =cut | |
| 138 | |
| 139 sub write_result { | |
| 140 my ($self,$result) = @_; | |
| 141 | |
| 142 if( !defined $result ) { | |
| 143 $self->throw("Attempting to write with no result!"); | |
| 144 } | |
| 145 | |
| 146 my $w = $self->handler; | |
| 147 $w->S("result"); | |
| 148 # my $result_temp_uid = $self->get_temp_uid($result); | |
| 149 | |
| 150 my @stats = | |
| 151 (map { | |
| 152 [analysisprop=>[ | |
| 153 [pkey=>$_], | |
| 154 [pval=>$result->get_statistic($_)]]] | |
| 155 } $result->available_statistics); | |
| 156 my @params = | |
| 157 (map { | |
| 158 [analysisprop=>[ | |
| 159 [pkey=>$_], | |
| 160 [pval=>$result->get_parameter($_)]]] | |
| 161 } $result->available_parameters); | |
| 162 | |
| 163 my $cid = $self->get_temp_uid($result); | |
| 164 $w->ev(companalysis=>[ | |
| 165 [companalysis_id=>$cid], | |
| 166 [datasource=>$result->database_name], | |
| 167 @stats, | |
| 168 @params, | |
| 169 ] | |
| 170 ); | |
| 171 while( my $hit = $result->next_hit ) { | |
| 172 # process the Bio::Search::Hit::HitI object | |
| 173 $self->write_hit($hit, $cid); | |
| 174 } | |
| 175 $w->E("result"); | |
| 176 return 1; | |
| 177 } | |
| 178 | |
| 179 sub write_hit { | |
| 180 my $self = shift; | |
| 181 my $hit = shift; | |
| 182 my $cid = shift; | |
| 183 | |
| 184 my $w = $self->handler; | |
| 185 my $hit_id = $self->get_temp_uid($hit); | |
| 186 | |
| 187 # we should determine the type by the type of blast; | |
| 188 # eg blastx gives CDS for hit and CDS_exon for HSP | |
| 189 my $fnode = | |
| 190 [feature=> [ | |
| 191 [feature_id=>$hit_id], | |
| 192 [name=>$hit->name], | |
| 193 [typename=>"hit"], | |
| 194 [analysisfeature=>[ | |
| 195 [rawscore=>$hit->raw_score], | |
| 196 [significance=>$hit->significance], | |
| 197 [analysis_id=>$cid]]]]]; | |
| 198 $w->ev(@$fnode); | |
| 199 foreach my $hsp ( $hit->hsps) { | |
| 200 $self->write_hsp($hsp, $hit_id); | |
| 201 } | |
| 202 return 1; | |
| 203 } | |
| 204 | |
| 205 sub write_hsp { | |
| 206 my $self = shift; | |
| 207 my $hsp = shift; | |
| 208 my $hid = shift; | |
| 209 | |
| 210 my $w = $self->handler; | |
| 211 my $hsp_id = $self->get_temp_uid($hsp); | |
| 212 my $order = 0; | |
| 213 my @lnodes = | |
| 214 map { | |
| 215 my ($nbeg, $nend, $strand) = | |
| 216 $self->bp2ib([$hsp->start($_), | |
| 217 $hsp->end($_), | |
| 218 $hsp->strand($_) | |
| 219 ]); | |
| 220 my $src = $_ eq 'query' ? $hsp->query->seq_id : $hsp->hit->seq_id; | |
| 221 [featureloc=>[ | |
| 222 [nbeg=>$nbeg], | |
| 223 [nend=>$nend], | |
| 224 [strand=>$strand], | |
| 225 [srcfeature=>$src], | |
| 226 [group=>0], | |
| 227 [order=>$order++], | |
| 228 ] | |
| 229 ] | |
| 230 } qw(query subject); | |
| 231 my $fnode = | |
| 232 [feature => [ | |
| 233 | |
| 234 [feature_id=>$hsp_id], | |
| 235 [typename=>"hsp"], | |
| 236 [analysisfeature=>[ | |
| 237 [rawscore=>$hsp->score], | |
| 238 [significance=>$hsp->significance], | |
| 239 ] | |
| 240 ], | |
| 241 @lnodes, | |
| 242 ] | |
| 243 ]; | |
| 244 $w->ev(@$fnode); | |
| 245 $w->ev(feature_relationship=>[ | |
| 246 [subjfeature_id=>$hsp_id], | |
| 247 [objfeature_id=>$hid] | |
| 248 ] | |
| 249 ); | |
| 250 return 1; | |
| 251 } | |
| 252 | |
| 253 | |
| 254 1; |
