annotate variant_effect_predictor/Bio/LiveSeq/IO/Loader.pm @ 2:a5976b2dce6f

changing defualt values for ensembl database
author mahtabm
date Thu, 11 Apr 2013 17:15:42 +1000
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: Loader.pm,v 1.15 2001/10/22 08:22:51 heikki Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # bioperl module for Bio::LiveSeq::IO::Loader
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Joseph Insana <insana@ebi.ac.uk> <jinsana@gmx.net>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Joseph Insana
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::LiveSeq::IO::Loader - Parent Loader for LiveSeq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 #documentation needed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 This package holds common methods used by BioPerl, SRS and file loaders.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 It contains methods to create LiveSeq objects out of entire entries or from a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 localized sequence region surrounding a particular gene.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 AUTHOR - Joseph A.L. Insana
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 Email: Insana@ebi.ac.uk, jinsana@gmx.net
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 EMBL Outstation, European Bioinformatics Institute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 Wellcome Trust Genome Campus, Hinxton
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 Cambs. CB10 1SD, United Kingdom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 package Bio::LiveSeq::IO::Loader;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 $VERSION=4.44;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 # Version history:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 # Wed Feb 16 17:55:01 GMT 2000 0.1a was a general EMBL entry printer with SRS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 # Wed Mar 29 16:53:30 BST 2000 0.2 rewrote as SRS LiveSeq Loader
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 # Wed Mar 29 19:11:21 BST 2000 0.2.1 used successfully by liveseq3.pl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 # Fri Mar 31 02:33:43 BST 2000 v 1.0 begun wrapping into this package
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 # Fri Mar 31 03:58:43 BST 2000 v 1.1 finished wrapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 # Fri Mar 31 04:24:50 BST 2000 v 1.2 added test_transl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 # Fri Mar 31 04:34:48 BST 2000: noticed problem with K02083, if translation is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 # included as valid qualifier name -> investigate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 # Fri Mar 31 16:55:07 BST 2000 v 1.21 removed chop in test_transl()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # Mon Apr 3 18:25:27 BST 2000 v 1.3 begun working at lightweight loader
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # Mon Apr 3 18:42:30 BST 2000 v 1.31 started changing so that CDS is no more
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 # the only default feature possibly asked for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 # Tue Apr 4 16:19:09 BST 2000 v 1.4 started creating hash2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 # Tue Apr 4 16:41:56 BST 2000 v 1.42 created location2range and rewritten
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 # cdslocation2transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 # Tue Apr 4 18:18:42 BST 2000 v 1.44 finished (maybe) hash2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 # Tue Apr 4 19:14:33 BST 2000 v 1.49 temporary printgene done. All working :)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 # Wed Apr 5 02:04:01 BST 2000 v 1.5 added upbound,downbound to hash2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 # Wed Apr 5 13:06:43 BST 2000 v 2.0 started obj_oriented and inheritance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 # Thu Apr 6 03:11:29 BST 2000 v 2.2 transition from $location to @range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 # Thu Apr 6 04:26:04 BST 2000 v 2.3 both SRS and BP work with gene and entry!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 # Fri Apr 7 01:47:51 BST 2000 v 2.4 genes() created
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 # Fri Apr 7 03:01:46 BST 2000 v 2.5 changed hash2gene so that if there is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 # just 1 CDS in entry it will use all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 # features of the entry as Gene features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 # Tue Apr 18 18:14:19 BST 2000 v 3.0 printswissprot added
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 # Wed Apr 19 22:15:12 BST 2000 v 3.2 swisshash2liveseq created
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 # Thu Apr 20 00:14:09 BST 2000 v 3.4 swisshash2liveseq updated: now it correctly handles cleaved_met and conflicts/mod_res/variants recorded differences between EMBL and SWISSPROT translations sequences. Still some not-recorded conflicts are possible and in these cases the program won't create the AARange -> this could change in the future, if a better stringcomparison is introduced
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 # Thu Apr 20 01:14:16 BST 2000 v 3.6 changed entry2liveseq and gene2liveseq to namedargument input format; added getswissprotinfo flag/option
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 # Thu Apr 20 02:18:58 BST 2000 v 3.7 mRNA added as valid_feature -> it gets recorded as prim_transcript object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 # Thu Apr 27 16:19:43 BST 2000 v 3.8 translation_table set added to hash2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 # Mon May 1 22:16:18 BST 2000 v 3.9 -position option added to gene2liveseq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 # Tue May 2 02:43:05 BST 2000 v 4.0 moved some code in _findgenefeatures, added the possibility of using cds_position information, created _checkfeatureproximity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 # Tue May 2 03:20:20 BST 2000 v 4.01 findgenefeatures debugged
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 # Wed May 31 13:59:09 BST 2000 v 4.02 chopped $translated to take away STOP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 # Fri Jun 2 14:49:12 BST 2000 v 4.1 prints alignment with CLUSTALW
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 # Wed Jun 7 02:07:54 BST 2000 v 4.2 added code for "simplifying" joinedlocation features (e.g. join() in mRNA features), changing them to plain start-end ones
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 # Wed Jun 7 04:20:15 BST 2000 v 4.22 added translation->{'offset'} for INIT_MET
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 # Tue Jun 27 14:05:19 BST 2000 v. 4.3 added if() conditions so that if new() of object creation failed, the object is not passed on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 # Tue Jul 4 14:15:58 BST 2000 v 4.4 note and number qualifier added to exon and intron descriptions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 # Wed Jul 12 14:06:38 BST 2000 v 4.41 added if() condition out of transcript creation in transexoncreation()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 # Fri Sep 15 15:41:02 BST 2000 v 4.44 created _common_novelaasequence2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 # Note: test_transl has been left as deprecated and is not really supported now
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 use Carp qw(cluck croak carp);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 use vars qw($VERSION @ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 use Bio::LiveSeq::DNA 1.2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 use Bio::LiveSeq::Exon 1.0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 use Bio::LiveSeq::Transcript 2.4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 use Bio::LiveSeq::Translation 1.4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 use Bio::LiveSeq::Gene 1.1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 use Bio::LiveSeq::Intron 1.0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 use Bio::LiveSeq::Prim_Transcript 1.0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 use Bio::LiveSeq::Repeat_Region 1.0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 use Bio::LiveSeq::Repeat_Unit 1.0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 use Bio::LiveSeq::AARange 1.4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 use Bio::Tools::CodonTable;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 #@ISA=qw(Bio::LiveSeq::); # not useful now
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 =head2 entry2liveseq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 Title : entry2liveseq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 Usage : @translationobjects=$loader->entry2liveseq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 : @translationobjects=$loader->entry2liveseq(-getswissprotinfo => 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Function: creates LiveSeq objects from an entry previously loaded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Returns : array of references to objects of class Translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Errorcode 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Args : optional boolean flag to avoid the retrieval of SwissProt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 informations for all Transcripts containing SwissProt x-reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 default is 1 (to retrieve those informations and create AARange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 LiveSeq objects)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Note : this method can get really slow for big entries. The lightweight
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 gene2liveseq method is recommended
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 sub entry2liveseq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 my ($self, %args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 my ($getswissprotinfo)=($args{-getswissprotinfo});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 if (defined($getswissprotinfo)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 if (($getswissprotinfo ne 0)&&($getswissprotinfo ne 1)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 carp "-getswissprotinfo argument can take only boolean (1 or 0) values. Setting it to 0, i.e. not trying to retrieve SwissProt information....";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 $getswissprotinfo=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 $getswissprotinfo=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 my $hashref=$self->{'hash'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 unless ($hashref) { return (0); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 my @translationobjects=$self->hash2liveseq($hashref,$getswissprotinfo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 my $test_transl=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 if ($test_transl) { $self->test_transl($hashref,\@translationobjects);}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 return @translationobjects;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 =head2 novelaasequence2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 Title : novelaasequence2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 Usage : $gene=$loader->novelaasequence2gene(-aasequence => "MGLAAPTRS*");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 : $gene=$loader->novelaasequence2gene(-aasequence => "MGLAAPTRS*");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 -taxon => 9606,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 -gene_name => "tyr-kinase");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Function: creates LiveSeq objects from a novel amino acid sequence,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 using codon usage database to choose codons according to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 relative frequencies.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 If a taxon ID is not specified, the default is to use the human
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 one (taxonomy ID 9606).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Returns : reference to a Gene object containing references to LiveSeq objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 Errorcode 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 Args : string containing an amino acid sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 integer (optional) with a taxonomy ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 string specifying a gene name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 =head2 gene2liveseq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 Title : gene2liveseq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 Usage : $gene=$loader->gene2liveseq(-gene_name => "gene name");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 : $gene=$loader->gene2liveseq(-gene_name => "gene name",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 -flanking => 64);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 : $gene=$loader->gene2liveseq(-gene_name => "gene name",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 -getswissprotinfo => 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 : $gene=$loader->gene2liveseq(-position => 4);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Function: creates LiveSeq objects from an entry previously loaded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 It is a "light weight" creation because it creates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 a LiveSequence just for the interesting region in an entry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 (instead than for the total entry, like in entry2liveseq) and for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 the flanking regions up to 500 nucleotides (default) or up to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 the specified amount of nucleotides (given as argument) around the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Gene.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Returns : reference to a Gene object containing possibly alternative
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Transcripts.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 Errorcode 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 Args : string containing the gene name as in the EMBL feature qualifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 integer (optional) "flanking": amount of flanking bases to be kept
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 boolean (optional) "getswissprotinfo": if set to "0" it will avoid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 trying to fetch information from a crossreference to a SwissProt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 entry, avoding the process of creation of AARange objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 It is "1" (on) by default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Alternative to a gene_name, a position can be given: an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 integer (1-) containing the position of the desired CDS in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 loaded entry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 sub gene2liveseq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 my ($self, %args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 my ($gene_name,$flanking,$getswissprotinfo,$cds_position)=($args{-gene_name},$args{-flanking},$args{-getswissprotinfo},$args{-position});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my $input;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 unless (($gene_name)||($cds_position)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 carp "Gene_Name or Position not specified for gene2liveseq loading function";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 if (($gene_name)&&($cds_position)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 carp "Gene_Name and Position cannot be given together, use one";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 } elsif ($gene_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $input=$gene_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $input="cds-position:".$cds_position;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 if (defined($getswissprotinfo)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 if (($getswissprotinfo ne 0)&&($getswissprotinfo ne 1)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 carp "-getswissprotinfo argument can take only boolean (1 or 0) values. Setting it to 0, i.e. not trying to retrieve SwissProt information....";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $getswissprotinfo=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $getswissprotinfo=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 if (defined($flanking)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 unless ($flanking >= 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 carp "No sense in specifying a number < 0 for flanking regions to be created for gene2liveseq loading function";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 $flanking=500; # the default flanking length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 my $hashref=$self->{'hash'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 unless ($hashref) { return (0); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 my $gene=$self->hash2gene($hashref,$input,$flanking,$getswissprotinfo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 unless ($gene) { # if $gene == 0 it means problems in hash2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 carp "gene2liveseq produced error";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 return $gene;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 # TODO: update so that it will work even if CDS is not only accepted FEATURE!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 # this method is for now deprecated and not supported
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 sub test_transl {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 my ($self,$entry)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 my @features=@{$entry->{'Features'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 my @translationobjects=@{$_[1]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my ($i,$translation);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 my ($obj_transl,$hash_transl);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my @cds=@{$entry->{'CDS'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 foreach $translation (@translationobjects) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $obj_transl=$translation->seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $hash_transl=$cds[$i]->{'qualifiers'}->{'translation'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 #before seq was changed in Translation 1.4# chop $obj_transl; # to remove trailing "*"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 unless ($obj_transl eq $hash_transl) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 cluck "Serious error: Translation from the Entry does not match Translation from object's seq for CDS at position $i";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 carp "\nEntry's transl: ",$hash_transl,"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 carp "\nObject's transl: ",$obj_transl,"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 exit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $i++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 # argument: hashref containing the EMBL entry datas,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 # getswissprotinfo boolean flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 # creates the liveseq objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 # returns: an array of Translation object references
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 sub hash2liveseq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 my ($self,$entry,$getswissprotinfo)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 my $i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my @transcripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my $dna=Bio::LiveSeq::DNA->new(-seq => $entry->{'Sequence'} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $dna->alphabet(lc($entry->{'Molecule'}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $dna->display_id($entry->{'ID'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $dna->accession_number($entry->{'AccNumber'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 $dna->desc($entry->{'Description'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 my @cds=@{$entry->{'CDS'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 my ($swissacc,$swisshash); my @swisshashes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 for $i (0..$#cds) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 #my @transcript=@{$cds[$i]->{'range'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 #$transcript=\@transcript;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 #push (@transcripts,$transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 push (@transcripts,$cds[$i]->{'range'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 if ($getswissprotinfo) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $swissacc=$cds[$i]->{'qualifiers'}->{'db_xref'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $swisshash=$self->get_swisshash($swissacc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 #$self->printswissprot($swisshash); # DEBUG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 push (@swisshashes,$swisshash);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 my @translations=($self->transexonscreation($dna,\@transcripts));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my $translation; my $j=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 foreach $translation (@translations) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 if ($swisshashes[$j]) { # if not 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $self->swisshash2liveseq($swisshashes[$j],$translation);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $j++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 return (@translations);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 # only features pertaining to a specified gene are created
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 # only the sequence of the gene and appropriate context flanking regions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 # are created as chain
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 # arguments: hashref, gene_name (OR: cds_position), length_of_flanking_sequences, getswissprotinfo boolean flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 # returns: reference to Gene object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 # Note: if entry contains just one CDS, all the features get added
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 # this is useful because often the features in these entries do not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 # carry the /gene qualifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 # errorcode: 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 sub hash2gene {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 my ($self,$entry,$input,$flanking,$getswissprotinfo)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my $entryfeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 my $genefeatureshash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 my @cds=@{$entry->{'CDS'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 # checking if a position has been given instead than a gene_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 if (index($input,"cds-position:") == 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 my $cds_position=substr($input,13); # extracting the cds position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 if (($cds_position >= 1)&&($cds_position <= scalar(@cds))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $genefeatureshash=$self->_findgenefeatures($entry,undef,$cds_position,$getswissprotinfo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 $genefeatureshash=$self->_findgenefeatures($entry,$input,undef,$getswissprotinfo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 unless (($genefeatureshash)&&(scalar(@{$genefeatureshash->{'genefeatures'}}))) { # array empty, no gene features found
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 my @genes=$self->genes($entry);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 my $cds_number=scalar(@cds);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 warn "Warning! Not even one genefeature found for /$input/....
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 The genes present in this entry are:\n\t@genes\n
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 The number of CDS in this entry is:\n\t$cds_number\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 return(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 # get max and min, check flankings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 my ($min,$max)=$self->rangeofarray(@{$genefeatureshash->{'labels'}}); # gene "boundaries"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 my $seqlength=$entry->{'SeqLength'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 my ($mindna,$maxdna); # some flanking region next to the gene "boundaries"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 if ($min-$flanking < 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $mindna=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 $mindna=$min-$flanking;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 if ($max+$flanking > $seqlength) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 $maxdna=$seqlength;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $maxdna=$max+$flanking;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 my $subseq=substr($entry->{'Sequence'},$mindna-1,$maxdna-$mindna+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 # create LiveSeq objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 # create DNA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 my $dna=Bio::LiveSeq::DNA->new(-seq => $subseq, -offset => $mindna);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $dna->alphabet(lc($entry->{'Molecule'}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 $dna->source($entry->{'Organism'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 $dna->display_id($entry->{'ID'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 $dna->accession_number($entry->{'AccNumber'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 $dna->desc($entry->{'Description'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 my @transcripts=@{$genefeatureshash->{'transcripts'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 # create Translations, Transcripts, Exons out of the CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 unless (@transcripts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 cluck "no CDS feature found for /$input/....";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 return(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 my @translationobjs=$self->transexonscreation($dna,\@transcripts);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 my @transcriptobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 # get the Transcript obj_refs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my $translation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 my $j=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 my @ttables=@{$genefeatureshash->{'ttables'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 my @swisshashes=@{$genefeatureshash->{'swisshashes'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 foreach $translation (@translationobjs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 push(@transcriptobjs,$translation->get_Transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 if ($ttables[$j]) { # if not undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $translation->get_Transcript->translation_table($ttables[$j]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 #} else { # DEBUG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 # print "\n\t\tno translation table information....\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 if ($swisshashes[$j]) { # if not 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 $self->swisshash2liveseq($swisshashes[$j],$translation);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 $j++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 my %gene; # this is the hash to store created object references
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 $gene{DNA}=$dna;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $gene{Transcripts}=\@transcriptobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 $gene{Translations}=\@translationobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 my @exonobjs; my @intronobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 my @repeatunitobjs; my @repeatregionobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 my @primtranscriptobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 my ($object,$range,$start,$end,$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my @exons=@{$genefeatureshash->{'exons'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my @exondescs=@{$genefeatureshash->{'exondescs'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 if (@exons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my $exoncount = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 foreach $range (@exons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 ($start,$end,$strand)=@{$range};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 $object = Bio::LiveSeq::Exon->new(-seq=>$dna,-start=>$start,-end=>$end,-strand=>$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 if ($object != -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 $object->desc($exondescs[$exoncount]) if defined $exondescs[$exoncount];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $exoncount++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 push (@exonobjs,$object);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 $exoncount++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $gene{Exons}=\@exonobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 my @introns=@{$genefeatureshash->{'introns'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 my @introndescs=@{$genefeatureshash->{'introndescs'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 if (@introns) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 my $introncount = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 foreach $range (@introns) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 ($start,$end,$strand)=@{$range};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 $object=Bio::LiveSeq::Intron->new(-seq=>$dna,-start=>$start,-end=>$end,-strand=>$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 if ($object != -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 $object->desc($introndescs[$introncount]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 $introncount++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 push (@intronobjs,$object);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 $introncount++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 $gene{Introns}=\@intronobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 my @prim_transcripts=@{$genefeatureshash->{'prim_transcripts'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 if (@prim_transcripts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 foreach $range (@prim_transcripts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 ($start,$end,$strand)=@{$range};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 $object=Bio::LiveSeq::Prim_Transcript->new(-seq=>$dna,-start=>$start,-end=>$end,-strand=>$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 if ($object != -1) { push (@primtranscriptobjs,$object); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 $gene{Prim_Transcripts}=\@primtranscriptobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 my @repeat_regions=@{$genefeatureshash->{'repeat_regions'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 my @repeat_regions_family=@{$genefeatureshash->{'repeat_regions_family'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 if (@repeat_regions) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 my $k=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 foreach $range (@repeat_regions) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 ($start,$end,$strand)=@{$range};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 $object=Bio::LiveSeq::Repeat_Region->new(-seq=>$dna,-start=>$start,-end=>$end,-strand=>$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 if ($object != -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $object->desc($repeat_regions_family[$k]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 $k++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 push (@repeatregionobjs,$object);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 $k++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 $gene{Repeat_Regions}=\@repeatregionobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 my @repeat_units=@{$genefeatureshash->{'repeat_units'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 my @repeat_units_family=@{$genefeatureshash->{'repeat_units_family'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 if (@repeat_units) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 my $k=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 foreach $range (@repeat_units) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 ($start,$end,$strand)=@{$range};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $object=Bio::LiveSeq::Repeat_Unit->new(-seq=>$dna,-start=>$start,-end=>$end,-strand=>$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 if ($object != -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 $object->desc($repeat_units_family[$k]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 $k++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 push (@repeatunitobjs,$object);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 $k++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 $gene{Repeat_Units}=\@repeatunitobjs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 # create the Gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 my $gene_name=$genefeatureshash->{'gene_name'}; # either a name or a cdspos
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 return (Bio::LiveSeq::Gene->new(-name=>$gene_name,-features=>\%gene,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 -upbound=>$min,-downbound=>$max));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 # maybe this function will be moved to general utility package
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 # argument: array of numbers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 # returns: (min,max) numbers in the array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 sub rangeofarray {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 my @array=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 #print "\n-=-=-=-=-=-=-=-=-=-=array: @array\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 my ($max,$min,$element);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 $min=$max=shift(@array);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 foreach $element (@array) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 $element = 0 unless defined $element;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 if ($element < $min) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $min=$element;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 if ($element > $max) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $max=$element;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 #print "\n-=-=-=-=-=-=-=-=-=-=min: $min\tmax: $max\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 return ($min,$max);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 # argument: reference to DNA object, reference to array of transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 # returns: an array of Translation object references
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 sub transexonscreation {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 my $dna=$_[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 my @transcripts=@{$_[1]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 my (@transexons,$start,$end,$strand,$exonref,$exonobj,$transcript,$transcriptobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 my $translationobj;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 my @translationobjects;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 foreach $transcript (@transcripts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 foreach $exonref (@{$transcript}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 ($start,$end,$strand)=@{$exonref};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 #print "Creating Exon: start $start end $end strand $strand\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 $exonobj=Bio::LiveSeq::Exon->new(-seq=>$dna,-start=>$start,-end=>$end,-strand=>$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 #push (@exonobjects,$exonobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 push (@transexons,$exonobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 $transcriptobj=Bio::LiveSeq::Transcript->new(-exons => \@transexons );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 if ($transcriptobj != -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 $translationobj=Bio::LiveSeq::Translation->new(-transcript=>$transcriptobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 @transexons=(); # cleans it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 #push (@transcriptobjects,$transcriptobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 push (@translationobjects,$translationobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 return (@translationobjects);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 #sub printgene {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 # deleted. Some functionality placed in Gene->printfeaturesnum
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 =head2 printswissprot
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Title : printswissprot
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Usage : $loader->printswissprot($hashref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 Function: prints out all informations loaded from a database entry into the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 loader. Mainly used for testing purposes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 Args : a hashref containing the SWISSPROT entry datas
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 Note : the hashref can be obtained with a call to the method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 $loader->get_swisshash() (only with SRS loader or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 BioPerl via Bio::DB::EMBL.pm)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 that takes as argument a string like "SWISS-PROT:P10275" or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 from $loader->swissprot2hash() that takes an SRS query string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 as its argument (e.g. "swissprot-acc:P10275")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 # argument: hashref containing the SWISSPROT entry datas
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 # prints out that hash, showing the informations loaded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 sub printswissprot {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 my ($self,$entry)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 unless ($entry) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 printf "ID: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 $entry->{'ID'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 printf "ACC: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 $entry->{'AccNumber'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 printf "GENE: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 $entry->{'Gene'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 printf "DES: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 $entry->{'Description'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 printf "ORG: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 $entry->{'Organism'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 printf "SEQLN: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 $entry->{'SeqLength'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 printf "SEQ: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 substr($entry->{'Sequence'},0,64);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 if ($entry->{'Features'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 my @features=@{$entry->{'Features'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 my $i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 for $i (0..$#features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 print "|",$features[$i]->{'name'},"|";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 print " at ",$features[$i]->{'location'},": ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 print "",$features[$i]->{'desc'},"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 =head2 printembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 Title : printembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 Usage : $loader->printembl();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 Function: prints out all informations loaded from a database entry into the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 loader. Mainly used for testing purposes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 # argument: hashref containing the EMBL entry datas
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 # prints out that hash, showing the informations loaded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 sub printembl {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 my ($self,$entry)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 unless ($entry) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 $entry=$self->{'hash'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 my ($i,$featurename);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 printf "ID: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 $entry->{'ID'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 printf "ACC: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 $entry->{'AccNumber'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 printf "MOL: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 $entry->{'Molecule'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 printf "DIV: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 $entry->{'Division'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 printf "DES: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 $entry->{'Description'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 printf "ORG: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 $entry->{'Organism'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 printf "SEQLN: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 $entry->{'SeqLength'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 printf "SEQ: %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 substr($entry->{'Sequence'},0,64);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 my @features=@{$entry->{'Features'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 my @cds=@{$entry->{'CDS'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 print "\nFEATURES\nNumber of CDS: ",scalar(@cds)," (out of ",$entry->{'FeaturesNumber'}, " total features)\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 my ($exonref,$transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 my ($qualifiernumber,$qualifiers,$key);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 my ($start,$end,$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 my $j=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 for $i (0..$#features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 $featurename=$features[$i]->{'name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 if ($featurename eq "CDS") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 print "|CDS| number $j at feature position: $i\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 #print $features[$i]->{'location'},"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 $transcript=$features[$i]->{'range'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 foreach $exonref (@{$transcript}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 ($start,$end,$strand)=@{$exonref};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 print "\tExon: start $start end $end strand $strand\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 $j++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 print "|$featurename| at feature position: $i\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 print "\trange: ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 print join("\t",@{$features[$i]->{'range'}}),"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 #print $features[$i]->{'location'},"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 $qualifiernumber=$features[$i]->{'qual_number'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 $qualifiers=$features[$i]->{'qualifiers'}; # hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 foreach $key (keys (%{$qualifiers})) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 print "\t\t",$key,": ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 print $qualifiers->{$key},"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 =head2 genes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 Title : genes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 Usage : $loader->genes();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 Function: Returns an array of gene_names (strings) contained in the loaded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 entry.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 # argument: entryhashref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 # returns: array of genenames found in the entry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 sub genes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 my ($self,$entry)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 unless ($entry) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 $entry=$self->{'hash'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 my @entryfeatures=@{$entry->{'Features'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 my ($genename,$genenames,$entryfeature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 for $entryfeature (@entryfeatures) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 $genename=$entryfeature->{'qualifiers'}->{'gene'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 if ($genename) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 if (index($genenames,$genename) == -1) { # if name is new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 $genenames .= $genename . " "; # add the name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 return (split(/ /,$genenames)); # assumes no space inbetween each genename
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 # arguments: swisshash, translation objref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 # adds information to the Translation, creates AARange objects, sets the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 # aa_range attribute on the Translation, pointing to those objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 sub swisshash2liveseq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 my ($self,$entry,$translation)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 my $translength=$translation->length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 $translation->desc($translation->desc . $entry->{'Description'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 $translation->display_id("SWISSPROT:" . $entry->{'ID'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 $translation->accession_number("SWISSPROT:" . $entry->{'AccNumber'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 $translation->name($entry->{'Gene'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 $translation->source($entry->{'Organism'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 my @aarangeobjects;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 my ($start,$end,$aarangeobj,$feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 my @features; my @newfeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 if ($entry->{'Features'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 @features=@{$entry->{'Features'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 my $cleavedmet=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 # check for cleaved Met
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 foreach $feature (@features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 if (($feature->{'name'} eq "INIT_MET")&&($feature->{'location'} eq "0 0")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 $cleavedmet=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 $translation->{'offset'}="1"; # from swissprot to liveseq protein sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 push(@newfeatures,$feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 my $swissseq=$entry->{'Sequence'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 my $liveseqtransl=$translation->seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 chop $liveseqtransl; # to take away the trailing STOP "*"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 my $translated=substr($liveseqtransl,$cleavedmet);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 my ($liveseq_aa,$swiss_aa,$codes_aa)=$self->_get_alignment($translated,$swissseq); # alignment after cleavage of possible initial met
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 if ((index($liveseq_aa,"-") != -1)||(index($swiss_aa,"-") != -1)) { # there are gaps, how to proceed?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 print "LIVE-SEQ=\'$liveseq_aa\'\nIDENTITY=\'$codes_aa\'\nSWS-PROT=\'$swiss_aa\'\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 carp "Nucleotides translation and SwissProt translation are different in size, cannot attach the SwissSequence to the EMBL one, cannot add any AminoAcidRange object/Domain information!";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 #my $i=0; # debug
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 @features=@newfeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 foreach $feature (@features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 #print "Processing SwissProtFeature: $i\n"; # debug
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 ($start,$end)=split(/ /,$feature->{'location'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 # Note: cleavedmet is taken in account for updating numbering
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 $aarangeobj=Bio::LiveSeq::AARange->new(-start => $start+$cleavedmet, -end => $end+$cleavedmet, -name => $feature->{'name'}, -desc => $feature->{'desc'}, -translation => $translation, -translength => $translength);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 if ($aarangeobj != -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 push(@aarangeobjects,$aarangeobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 # $i++; # debug
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 $translation->{'aa_ranges'}=\@aarangeobjects;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 # if there is no SRS support, the default will be to return 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 # i.e. this function is overridden in SRS package
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 sub get_swisshash {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 # Args: $entry hashref, gene_name OR cds_position (undef is used to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 # choose between the two), getswissprotinfo boolean flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 # Returns: an hash holding various arrayref used in the hash2gene method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 # Function: examines the nucleotide entry, identifying features belonging
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 # to the gene (defined either by its name or by the position of its CDS in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 # the entry)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 sub _findgenefeatures {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 my ($self,$entry,$gene_name,$cds_position,$getswissprotinfo)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 my @entryfeatures=@{$entry->{'Features'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 my @exons; my @introns; my @prim_transcripts; my @transcripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 my @repeat_units; my @repeat_regions;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 my @repeat_units_family; my @repeat_regions_family; my $rpt_family;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 my $entryfeature; my @genefeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 my $desc; my @exondescs; my @introndescs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 # for swissprot xreference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 my ($swissacc,$swisshash); my @swisshashes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 # for translation_tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 my @ttables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 # to create labels
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 my ($name,$exon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 my @range; my @cdsexons; my @labels;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 # maybe here also could be added special case when there is no CDS feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 # in the entry (e.g. tRNA entry -> TOCHECK).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 # let's deal with the special case in which there is just one gene per entry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 # usually without /gene qualifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 my @cds=@{$entry->{'CDS'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 my $skipgenematch=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 if (scalar(@cds) == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 #carp "Note: only one CDS in this entry. Treating all features found in entry as Gene features.";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 $skipgenematch=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 my ($cds_begin,$cds_end,$proximity);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 if ($cds_position) { # if a position has been requested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 my @cds_exons=@{$cds[$cds_position-1]->{'range'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 ($cds_begin,$cds_end)=($cds_exons[0]->[0],$cds_exons[-1]->[1]); # begin and end of CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 $gene_name=$cds[$cds_position-1]->{'qualifiers'}->{'gene'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 # DEBUG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 unless ($skipgenematch) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 carp "--DEBUG-- cdsbegin $cds_begin cdsend $cds_end--------";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 $proximity=100; # proximity CONSTANT to decide whether a feature "belongs" to the CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 for $entryfeature (@entryfeatures) { # get only features for the desired gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 if (($skipgenematch)||(($cds_position)&&($self->_checkfeatureproximity($entryfeature->{'range'},$cds_begin,$cds_end,$proximity)))||(!($cds_position)&&($entryfeature->{'qualifiers'}->{'gene'} eq "$gene_name"))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 push(@genefeatures,$entryfeature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809 my @range=@{$entryfeature->{'range'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 $name=$entryfeature->{'name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 my %qualifierhash=%{$entryfeature->{'qualifiers'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 if ($name eq "CDS") { # that has range containing array of exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 # swissprot crossindexing (if without SRS support it will fill array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 # with zeros and do nothing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 if ($getswissprotinfo) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 $swissacc=$entryfeature->{'qualifiers'}->{'db_xref'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 $swisshash=$self->get_swisshash($swissacc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 #$self->printswissprot($swisshash); # DEBUG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 push (@swisshashes,$swisshash);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 push (@ttables,$entryfeature->{'qualifiers'}->{'transl_table'}); # undef if not specified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 # create labels array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 for $exon (@range) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 push(@labels,$exon->[0],$exon->[1]); # start and end of every exon of the CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 push (@transcripts,$entryfeature->{'range'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 # "simplifying" the joinedlocation features. I.e. changing them from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 # multijoined ones to simple plain start-end features, taking only
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 # the start of the first "exon" and the end of the last "exon" as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 # start and end of the entire feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 if ($entryfeature->{'locationtype'} && $entryfeature->{'locationtype'} eq "joined") { # joined location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 @range=($range[0]->[0],$range[-1]->[1]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 push(@labels,$range[0],$range[1]); # start and end of every feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 if ($name eq "exon") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 $desc=$entryfeature->{'qualifiers'}->{'number'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 if ($entryfeature->{'qualifiers'}->{'note'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 if ($desc) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 $desc .= "|" . $entryfeature->{'qualifiers'}->{'note'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 $desc = $entryfeature->{'qualifiers'}->{'note'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 push (@exondescs,$desc || "unknown");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 push(@exons,\@range);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 if ($name eq "intron") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 $desc=$entryfeature->{'qualifiers'}->{'number'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 if ($desc) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 $desc .= "|" . $entryfeature->{'qualifiers'}->{'note'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 $desc = $entryfeature->{'qualifiers'}->{'note'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 push (@introndescs,$desc || "unknown");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 push(@introns,\@range);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 if (($name eq "prim_transcript")||($name eq "mRNA")) { push(@prim_transcripts,\@range); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 if ($name eq "repeat_unit") { push(@repeat_units,\@range);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 $rpt_family=$entryfeature->{'qualifiers'}->{'rpt_family'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 push (@repeat_units_family,$rpt_family || "unknown");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 if ($name eq "repeat_region") { push(@repeat_regions,\@range);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 $rpt_family=$entryfeature->{'qualifiers'}->{'rpt_family'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 push (@repeat_regions_family,$rpt_family || "unknown");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 unless ($gene_name) { $gene_name="cds-position:".$cds_position; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 my %genefeatureshash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 $genefeatureshash{gene_name}=$gene_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 $genefeatureshash{genefeatures}=\@genefeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 $genefeatureshash{labels}=\@labels;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 $genefeatureshash{ttables}=\@ttables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 $genefeatureshash{swisshashes}=\@swisshashes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 $genefeatureshash{transcripts}=\@transcripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881 $genefeatureshash{exons}=\@exons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 $genefeatureshash{exondescs}=\@exondescs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 $genefeatureshash{introns}=\@introns;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 $genefeatureshash{introndescs}=\@introndescs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 $genefeatureshash{prim_transcripts}=\@prim_transcripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 $genefeatureshash{repeat_units}=\@repeat_units;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 $genefeatureshash{repeat_regions}=\@repeat_regions;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 $genefeatureshash{repeat_units_family}=\@repeat_units_family;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 $genefeatureshash{repeat_regions_family}=\@repeat_regions_family;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 return (\%genefeatureshash);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 # used by _findgenefeatures, when a CDS at a certain position is requested,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 # to retrieve only features quite close to the wanted CDS.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 # Args: range hashref, begin and end positions of the CDS, $proximity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 # $proximity holds the maximum distance between the extremes of the CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 # and of the feature under exam.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 # Returns: boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 sub _checkfeatureproximity {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901 my ($self,$range,$cds_begin,$cds_end,$proximity)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 my @range=@{$range};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 my ($begin,$end,$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 if (ref($range[0]) eq "ARRAY") { # like in CDS, whose range equivals to exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905 ($begin,$end,$strand)=($range[0]->[0],$range[-1]->[1],$range[0]->[2]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 ($begin,$end,$strand)=@range;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 if ($cds_begin > $cds_end) { # i.e. reverse strand CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 ($cds_begin,$cds_end)=($cds_end,$cds_begin); # swap boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 if ($strand == -1) { # reverse strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 ($begin,$end)=($end,$begin); # swap boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 if (($cds_begin-$end)>$proximity) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 carp "--DEBUG-- feature rejected: begin $begin end $end -------";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 if (($begin-$cds_end)>$proximity) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 carp "--DEBUG-- feature rejected: begin $begin end $end -------";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923 carp "--DEBUG-- feature accepted: begin $begin end $end -------";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 return (1); # otherwise ok, feature considered next to CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 # function that calls the external program "align" (on the fasta2 package)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 # to create an alignment between two sequences, returning the aligned
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930 # strings and the codes for the identity (:: ::::)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 sub _get_alignment {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933 my ($self,$seq1,$seq2)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 my $fastafile1="/tmp/tmpfastafile1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 my $fastafile2="/tmp/tmpfastafile2";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 my $grepcut='egrep -v "[[:digit:]]|^ *$|sequences" | cut -c8-'; # grep/cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 my $alignprogram="/usr/local/etc/bioinfo/fasta2/align -s /usr/local/etc/bioinfo/fasta2/idnaa.mat $fastafile1 $fastafile2 2>/dev/null | $grepcut"; # ALIGN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 open TMPFASTAFILE1,">$fastafile1" || croak "Cannot write into $fastafile1 for aa alignment";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 open TMPFASTAFILE2,">$fastafile2" || croak "Cannot write into $fastafile1 for aa alignment";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 print TMPFASTAFILE1 ">firstseq\n$seq1\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 print TMPFASTAFILE2 ">secondseq\n$seq2\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 close TMPFASTAFILE1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 close TMPFASTAFILE2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944 my $alignment=`$alignprogram`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 my @alignlines=split(/\n/,$alignment);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 my ($linecount,$seq1_aligned,$seq2_aligned,$codes);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 for ($linecount=0; $linecount < @alignlines; $linecount+=3) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 $seq1_aligned .= $alignlines[$linecount];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 $codes .= $alignlines[$linecount+1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 $seq2_aligned .= $alignlines[$linecount+2];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 return ($seq1_aligned,$seq2_aligned,$codes);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 # common part of the function to create a novel liveseq gene structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 # from an amino acid sequence, using codon usage frequencies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 # args: codon_usage_array transltableid aasequence gene_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 sub _common_novelaasequence2gene {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 my ($species_codon_usage,$ttabid,$aasequence,$gene_name)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 my @species_codon_usage=@{$species_codon_usage};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 my @codon_usage_label=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 qw (cga cgc cgg cgt aga agg cta ctc ctg ctt tta ttg tca tcc tcg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 tct agc agt aca acc acg act cca ccc ccg cct gca gcc gcg gct gga
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 ggc ggg ggt gta gtc gtg gtt aaa aag aac aat caa cag cac cat gaa
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 gag gac gat tac tat tgc tgt ttc ttt ata atc att atg tgg taa tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 tga);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 my ($i,$j);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 my %codon_usage_value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 my $aa_codon_total;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 for ($i=0;$i<64;$i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 $codon_usage_value{$codon_usage_label[$i]}=$species_codon_usage[$i];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 my $CodonTable = Bio::Tools::CodonTable->new ( -id => $ttabid );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 my @aminoacids = split(//,uc($aasequence));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 my @alt_codons; my ($relativeusage,$dnasequence,$chosen_codon,$dice,$partial,$thiscodon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 for $i (@aminoacids) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 @alt_codons = $CodonTable->revtranslate($i);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 unless (@alt_codons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 carp "No reverse translation possible for aminoacid \'$i\'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 $dnasequence .= "???";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 $aa_codon_total=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 for $j (@alt_codons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985 $aa_codon_total+=$codon_usage_value{$j};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 # print "aminoacid $i, codonchoice: "; # verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988 #$partial=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 #for $j (@alt_codons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 #printf "%s %.2f ",$j,$partial+$codon_usage_value{$j}/$aa_codon_total;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 #$partial+=($codon_usage_value{$j}/$aa_codon_total);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 #print "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 $dice=rand(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 #print "roulette: $dice\n"; # verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 $partial=0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 $chosen_codon="";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 CODONCHOICE:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 for $j (0..@alt_codons) { # last one not accounted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 $thiscodon=$alt_codons[$j];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 $relativeusage=($codon_usage_value{$thiscodon}/$aa_codon_total);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 if ($dice < $relativeusage+$partial) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 $chosen_codon=$thiscodon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 last CODONCHOICE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 $partial += $relativeusage;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 unless ($chosen_codon) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 $chosen_codon = $alt_codons[-1]; # the last one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 # print ".....adding $chosen_codon\n"; # verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 $dnasequence .= $chosen_codon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 my $dna = Bio::LiveSeq::DNA->new(-seq => $dnasequence);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018 my $min=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 my $max=length($dnasequence);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 my $exon = Bio::LiveSeq::Exon->new(-seq => $dna, -start => $min, -end => $max, -strand => 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 my @exons=($exon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 my $transcript = Bio::LiveSeq::Transcript->new(-exons => \@exons);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 $transcript->translation_table($ttabid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 my @transcripts=($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 my $translation = Bio::LiveSeq::Translation->new(-transcript => $transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 my @translations=($translation);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 my %features=(DNA => $dna, Transcripts => \@transcripts, Translations => \@translations);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 my $gene = Bio::LiveSeq::Gene->new(-name => $gene_name, -features => \%features, -upbound => $min, -downbound => $max);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 # creation of gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031 unless ($gene) { # if $gene == 0 it means problems in hash2gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 carp "Error in Gene creation phase";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 return $gene;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 1;