Mercurial > repos > cpt > cpt_psm_recombine
diff lib/CPT/Bio/DataSource/Chado.pm @ 1:97ef96676b48 draft
planemo upload commit 94b0cd1fff0826c6db3e7dc0c91c0c5a8be8bb0c
author | cpt |
---|---|
date | Mon, 05 Jun 2023 02:51:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/CPT/Bio/DataSource/Chado.pm Mon Jun 05 02:51:26 2023 +0000 @@ -0,0 +1,125 @@ +package CPT::Bio::DataSource::Chado; +no warnings; +use Moose; +with 'CPT::Bio::DataSource'; + +has 'host' => ( is => 'rw', isa => 'Str' ); +has 'pass' => ( is => 'rw', isa => 'Str' ); +has 'user' => ( is => 'rw', isa => 'Str' ); +has 'name' => ( is => 'rw', isa => 'Str' ); +has 'port' => ( is => 'rw', isa => 'Str' ); + +has 'landmark' => ( is => 'rw', isa => 'Str' ); +has 'organism' => ( is => 'rw', isa => 'Str' ); + + +sub getSeqIO { + my ($self) = @_; + require CPT::Chado::GMOD_Conf; + + my $db = Bio::DB::Das::Chado->new( + -dsn => sprintf( 'dbi:Pg:dbname=%s;host=%s;port=%s', $self->name(), $self->host(), $self->port() ), + -user => $self->user(), + -pass => $self->pass(), + -organism => $self->organism(), + -inferCDS => 1, + + ); + + # Get a list of "segments". Essentially (seqlen IS NOT NULL) + my @segments = $db->segment( -name => $self->{'landmark'} ); + + # TODO: Need to have a fallback method + # Should only produce ONE since we specify landmark exactly + foreach my $segment (@segments) { + my $stream = $segment->get_feature_stream(); + use Bio::Seq; + my $seq_obj = Bio::Seq->new( + -seq => $segment->seq->seq(), + -display_id => $segment->id() + ); + use Bio::SeqFeature::Generic; + while ( my $feat = $stream->next_seq ) { + + # In an IDEAL world we'd just do $seq_obj->add_SeqFeature($feat); + # + # HOWEVER. + # + # ------------- EXCEPTION: Bio::Root::NotImplemented ------------- + # MSG: Abstract method "Bio::DB::Das::Chado::Segment::Feature::attach_seq" is not implemented by package Bio::DB::Das::Chado::Segment::Feature. + # This is not your fault - author of Bio::DB::Das::Chado::Segment::Feature should be blamed! + # STACK: Error::throw + # STACK: Bio::Root::Root::throw /usr/local/share/perl/5.14.2/Bio/Root/Root.pm:472 + # STACK: Bio::Root::RootI::throw_not_implemented /usr/local/share/perl/5.14.2/Bio/Root/RootI.pm:748 + # STACK: Bio::DB::Das::Chado::Segment::Feature::attach_seq /usr/local/share/perl/5.14.2/Bio/DB/Das/Chado/Segment/Feature.pm:374 + # STACK: Bio::Seq::add_SeqFeature /usr/local/share/perl/5.14.2/Bio/Seq.pm:1148 + # STACK: chado_export.pl:59 + # ---------------------------------------------------------------- + + # BUT WE CAN'T. >_> rageface.tiff + + my %keys; + foreach my $tag ( $feat->get_all_tags() ) { + my @values = $feat->get_tag_values($tag); + if ( $tag eq 'Note' ) { + $tag = 'note'; + } + if ( $tag eq 'Dbxref' ) { + $tag = 'db_xref'; + + #@values = map { if($_ ne 'GFF_source:Genbank'){ $_ } } @values; + @values = grep !/GFF_source:Genbank/, @values; + } + $keys{$tag} = \@values; + } + + #print $feat->gff_string(),"\n"; + my $new_feat = new Bio::SeqFeature::Generic( + -start => $feat->start(), + -end => $feat->end(), + -strand => $feat->strand(), + -primary_tag => $feat->primary_tag(), + -tag => \%keys, + ); + $seq_obj->add_SeqFeature($new_feat); + } + + return $seq_obj; + } + +} + +no Moose; +1; + +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +CPT::Bio::DataSource::Chado + +=head1 VERSION + +version 1.99.4 + +=head2 getSeqIO + +supposed to get a seqIO object from a chado DB. not fully implemented + +=head1 AUTHOR + +Eric Rasche <rasche.eric@yandex.ru> + +=head1 COPYRIGHT AND LICENSE + +This software is Copyright (c) 2014 by Eric Rasche. + +This is free software, licensed under: + + The GNU General Public License, Version 3, June 2007 + +=cut