Mercurial > repos > cpt > cpt_psm_prep
comparison lib/CPT/Bio/DataSource/Chado.pm @ 1:d724f34e671d draft default tip
planemo upload commit 94b0cd1fff0826c6db3e7dc0c91c0c5a8be8bb0c
author | cpt |
---|---|
date | Mon, 05 Jun 2023 02:50:07 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:e4de0a0e90c8 | 1:d724f34e671d |
---|---|
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 |