comparison 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
comparison
equal deleted inserted replaced
0:b18e8268bf4e 1:97ef96676b48
1 package CPT::Bio::DataSource::Chado;
2 no warnings;
3 use Moose;
4 with 'CPT::Bio::DataSource';
5
6 has 'host' => ( is => 'rw', isa => 'Str' );
7 has 'pass' => ( is => 'rw', isa => 'Str' );
8 has 'user' => ( is => 'rw', isa => 'Str' );
9 has 'name' => ( is => 'rw', isa => 'Str' );
10 has 'port' => ( is => 'rw', isa => 'Str' );
11
12 has 'landmark' => ( is => 'rw', isa => 'Str' );
13 has 'organism' => ( is => 'rw', isa => 'Str' );
14
15
16 sub getSeqIO {
17 my ($self) = @_;
18 require CPT::Chado::GMOD_Conf;
19
20 my $db = Bio::DB::Das::Chado->new(
21 -dsn => sprintf( 'dbi:Pg:dbname=%s;host=%s;port=%s', $self->name(), $self->host(), $self->port() ),
22 -user => $self->user(),
23 -pass => $self->pass(),
24 -organism => $self->organism(),
25 -inferCDS => 1,
26
27 );
28
29 # Get a list of "segments". Essentially (seqlen IS NOT NULL)
30 my @segments = $db->segment( -name => $self->{'landmark'} );
31
32 # TODO: Need to have a fallback method
33 # Should only produce ONE since we specify landmark exactly
34 foreach my $segment (@segments) {
35 my $stream = $segment->get_feature_stream();
36 use Bio::Seq;
37 my $seq_obj = Bio::Seq->new(
38 -seq => $segment->seq->seq(),
39 -display_id => $segment->id()
40 );
41 use Bio::SeqFeature::Generic;
42 while ( my $feat = $stream->next_seq ) {
43
44 # In an IDEAL world we'd just do $seq_obj->add_SeqFeature($feat);
45 #
46 # HOWEVER.
47 #
48 # ------------- EXCEPTION: Bio::Root::NotImplemented -------------
49 # MSG: Abstract method "Bio::DB::Das::Chado::Segment::Feature::attach_seq" is not implemented by package Bio::DB::Das::Chado::Segment::Feature.
50 # This is not your fault - author of Bio::DB::Das::Chado::Segment::Feature should be blamed!
51 # STACK: Error::throw
52 # STACK: Bio::Root::Root::throw /usr/local/share/perl/5.14.2/Bio/Root/Root.pm:472
53 # STACK: Bio::Root::RootI::throw_not_implemented /usr/local/share/perl/5.14.2/Bio/Root/RootI.pm:748
54 # STACK: Bio::DB::Das::Chado::Segment::Feature::attach_seq /usr/local/share/perl/5.14.2/Bio/DB/Das/Chado/Segment/Feature.pm:374
55 # STACK: Bio::Seq::add_SeqFeature /usr/local/share/perl/5.14.2/Bio/Seq.pm:1148
56 # STACK: chado_export.pl:59
57 # ----------------------------------------------------------------
58
59 # BUT WE CAN'T. >_> rageface.tiff
60
61 my %keys;
62 foreach my $tag ( $feat->get_all_tags() ) {
63 my @values = $feat->get_tag_values($tag);
64 if ( $tag eq 'Note' ) {
65 $tag = 'note';
66 }
67 if ( $tag eq 'Dbxref' ) {
68 $tag = 'db_xref';
69
70 #@values = map { if($_ ne 'GFF_source:Genbank'){ $_ } } @values;
71 @values = grep !/GFF_source:Genbank/, @values;
72 }
73 $keys{$tag} = \@values;
74 }
75
76 #print $feat->gff_string(),"\n";
77 my $new_feat = new Bio::SeqFeature::Generic(
78 -start => $feat->start(),
79 -end => $feat->end(),
80 -strand => $feat->strand(),
81 -primary_tag => $feat->primary_tag(),
82 -tag => \%keys,
83 );
84 $seq_obj->add_SeqFeature($new_feat);
85 }
86
87 return $seq_obj;
88 }
89
90 }
91
92 no Moose;
93 1;
94
95 __END__
96
97 =pod
98
99 =encoding UTF-8
100
101 =head1 NAME
102
103 CPT::Bio::DataSource::Chado
104
105 =head1 VERSION
106
107 version 1.99.4
108
109 =head2 getSeqIO
110
111 supposed to get a seqIO object from a chado DB. not fully implemented
112
113 =head1 AUTHOR
114
115 Eric Rasche <rasche.eric@yandex.ru>
116
117 =head1 COPYRIGHT AND LICENSE
118
119 This software is Copyright (c) 2014 by Eric Rasche.
120
121 This is free software, licensed under:
122
123 The GNU General Public License, Version 3, June 2007
124
125 =cut