annotate variant_effect_predictor/Bio/Structure/Entry.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: Entry.pm,v 1.17 2002/10/22 07:38:44 lapp Exp $
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 # bioperl module for Bio::Structure::Entry
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Kris Boulez <kris.boulez@algonomics.com>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Kris Boulez
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15 Bio::Structure::Entry - Bioperl structure Object, describes the whole entry
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19 #add synopsis here
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23 This object stores a whole Bio::Structure entry. It can consist of one or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24 more models (Bio::Structure::Model), which in turn consist of one or more
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25 chains (Bio::Structure::Chain). A chain is composed of residues
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26 (Bio::Structure::Residue) and a residue consists of atoms (Bio::Structure::Atom)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27 If no specific model or chain is chosen, the first one is choosen.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 =head1 FEEDBACK
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31 =head2 Mailing Lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 User feedback is an integral part of the evolution of this and other
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34 Bioperl modules. Send your comments and suggestions preferably to one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35 of the Bioperl mailing lists. Your participation is much appreciated.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 bioperl-l@bioperl.org - General discussion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38 http://bio.perl.org/MailList.html - About the mailing lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 =head2 Reporting Bugs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42 Report bugs to the Bioperl bug tracking system to help us keep track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 the bugs and their resolution. Bug reports can be submitted via email
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44 or the web:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46 bioperl-bugs@bio.perl.org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 http://bugzilla.bioperl.org/
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 =head1 AUTHOR - Kris Boulez
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51 Email kris.boulez@algonomics.com
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53 =head1 APPENDIX
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60 # Let the code begin...
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 package Bio::Structure::Entry;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63 use vars qw(@ISA);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66 use Bio::Root::Root;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 use Bio::Structure::StructureI;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68 use Bio::Structure::Model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69 use Bio::Structure::Chain;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70 use Bio::Annotation::Collection;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 use Tie::RefHash;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73 @ISA = qw(Bio::Root::Root Bio::Structure::StructureI);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76 =head2 new()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 Title : new()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79 Usage : $struc = Bio::Structure::Entry->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80 -id => 'structure_id',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83 Function: Returns a new Bio::Structure::Entry object from basic
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84 constructors. Probably most called from Bio::Structure::IO.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85 Returns : a new Bio::Structure::Model object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 sub new {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90 my ($class, @args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91 my $self = $class->SUPER::new(@args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 my($id, $model, $chain, $residue ) =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94 $self->_rearrange([qw(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 ID
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96 MODEL
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 CHAIN
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98 RESIDUE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 )],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 @args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 # where to store parent->child relations (1 -> 1..n)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103 # value to this hash will be an array ref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 # by using Tie::RefHash we can store references in this hash
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105 $self->{'p_c'} = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 tie %{ $self->{'p_c'} } , "Tie::RefHash";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 # where to store child->parent relations (1 -> 1)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109 $self->{'c_p'} = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 tie %{ $self->{'c_p'} } , "Tie::RefHash";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112 $id && $self->id($id);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 $self->{'model'} = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115 $model && $self->model($model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 if($chain) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 if ( ! defined($self->model) ) { # no model yet, create default one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120 $self->_create_default_model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122 for my $m ($self->model) { # add this chain on all models
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 $m->chain($chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 $residue && $self->residue($residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129 # taken from Bio::Seq (or should we just inherit Bio::Seq and override some methods)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 my $ann = Bio::Annotation::Collection->new;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131 $self->annotation($ann);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133 return $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137 =head2 model()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 Title : model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140 Function: Connects a (or a list of) Model objects to a Bio::Structure::Entry.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141 To add a Model (and keep the existing ones) use add_model()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 It returns a list of Model objects.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143 Returns : list of Bio::Structure::Model objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 Args : One Model or a reference to an array of Model objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 sub model {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149 my ($self, $model) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151 if( defined $model) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152 if( (ref($model) eq "ARRAY") ||
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 ($model->isa('Bio::Structure::Model')) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154 # remove existing ones, tell they've become orphan
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155 my @obj = $self->model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156 if (@obj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157 for my $m (@obj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158 $self->_remove_from_graph($m);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 $self->{'model'} = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162 # add the new ones
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163 $self->add_model($self,$model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166 $self->throw("Supplied a $model to model, we want a Bio::Structure::Model or a list of these\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 # give back list of models via general get method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 $self->get_models($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175 =head2 add_model()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177 Title : add_model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178 Usage : $structure->add_model($model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179 Function: Adds a (or a list of) Model objects to a Bio::Structure::Entry.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 Args : One Model or a reference to an array of Model objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185 sub add_model {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186 my($self,$entry,$model) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 # if only one argument and it's a model, change evrything one place
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189 # this is for people calling $entry->add_model($model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 if ( !defined $model && ref($entry) =~ /^Bio::Structure::Model/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191 $model = $entry;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192 $entry = $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 # $self and $entry are the same here, but it's used for uniformicity
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 if ( !defined($entry) || ref($entry) !~ /^Bio::Structure::Entry/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196 $self->throw("first argument to add_model needs to be a Bio::Structure::Entry object\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198 if (defined $model) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 if (ref($model) eq "ARRAY") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200 # if the user passed in a reference to an array
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201 for my $m ( @{$model} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202 if( ! $m->isa('Bio::Structure::Model') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 $self->throw("$m is not a Model\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205 if ( $self->_parent($m) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206 $self->throw("$m already assigned to a parent\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208 push @{$self->{'model'}}, $m;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 # create a stringified version of our ref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 # not used untill we get symbolic ref working
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211 #my $str_ref = "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212 #$m->_grandparent($str_ref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 elsif ( $model->isa('Bio::Structure::Model') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216 if ( $self->_parent($model) ) { # already assigned to a parent
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 $self->throw("$model already assigned\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 push @{$self->{'model'}}, $model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 # create a stringified version of our ref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221 #my $str_ref = "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 #$model->_grandparent($str_ref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225 $self->throw("Supplied a $model to add_model, we want a Model or list of Models\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229 my $array_ref = $self->{'model'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230 return $array_ref ? @{$array_ref} : ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 =head2 get_models()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 Title : get_models
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237 Usage : $structure->get_models($structure);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 Function: general get method for models attached to an Entry
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239 Returns : a list of models attached to this entry
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240 Args : an Entry
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 sub get_models {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245 my ($self, $entry) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 # self and entry can be the same
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 if ( !defined $entry) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249 $entry = $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 # pass through to add_model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252 $self->add_model($entry);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 =head2 id()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 Title : id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260 Usage : $entry->id("identity");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 Function: Gets/sets the ID
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267 sub id {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268 my ($self, $value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 $self->{'id'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 return $self->{'id'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 =head2 chain()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278 Title : chain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279 Usage : @chains = $structure->chain($chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280 Function: Connects a (or a list of) Chain objects to a Bio::Structure::Entry.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281 Returns : list of Bio::Structure::Residue objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282 Args : One Residue or a reference to an array of Residue objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286 sub chain {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287 my ($self, $chain) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289 if ( ! $self->model ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290 $self->_create_default_model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292 my @models = $self->model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 my $first_model = $models[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295 if ( defined $chain) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297 if( (ref($chain) eq "ARRAY") ||
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298 ($chain->isa('Bio::Structure::Chain')) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 # remove existing ones, tell they've become orphan
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300 my @obj = $self->get_chains($first_model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301 if (@obj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302 for my $c (@obj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303 $self->_remove_from_graph($c);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306 # add the new ones
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307 $self->add_chain($first_model,$chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310 $self->throw("Supplied a $chain to chain, we want a Bio::Structure::Chain or a list of these\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313 $self->get_chains($first_model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 =head2 add_chain()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319 Title : add_chain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320 Usage : @chains = $structure->add_chain($add_chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321 Function: Adds a (or a list of) Chain objects to a Bio::Structure::Entry.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327 sub add_chain {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 my($self, $model, $chain) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330 if (ref($model) !~ /^Bio::Structure::Model/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331 $self->throw("add_chain: first argument needs to be a Model object ($model)\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333 if (defined $chain) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334 if (ref($chain) eq "ARRAY") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335 # if the user passed in a reference to an array
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 for my $c ( @{$chain} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337 if( ! $c->isa('Bio::Structure::Chain') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338 $self->throw("$c is not a Chain\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340 if ( $self->_parent($c) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341 $self->throw("$c already assigned to a parent\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 $self->_parent($c, $model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344 $self->_child($model, $c);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 # stringify $self ref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 #my $str_ref = "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 #$c->_grandparent($str_ref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350 elsif ( $chain->isa('Bio::Structure::Chain') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351 if ( $self->_parent($chain) ) { # already assigned to parent
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352 $self->throw("$chain already assigned to a parent\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354 $self->_parent($chain,$model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355 $self->_child($model, $chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356 # stringify $self ref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357 #my $str_ref = "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358 #$chain->_grandparent($str_ref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361 $self->throw("Supplied a $chain to add_chain, we want a Chain or list of Chains\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 my $array_ref = $self->_child($model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365 return $array_ref ? @{$array_ref} : ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369 =head2 get_chains()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371 Title : get_chains
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372 Usage : $entry->get_chains($model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373 Function: general get method for chains attached to a Model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374 Returns : a list of chains attached to this model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375 Args : a Model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379 sub get_chains {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 my ($self, $model) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382 if (! defined $model) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383 $model = ($self->get_models)[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 # pass through to add_chain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 $self->add_chain($model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390 =head2 residue()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392 Title : residue
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393 Usage : @residues = $structure->residue($residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394 Function: Connects a (or a list of) Residue objects to a Bio::Structure::Entry.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395 Returns : list of Bio::Structure::Residue objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 Args : One Residue or a reference to an array of Residue objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400 sub residue {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401 my ($self, $residue) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403 if ( ! $self->model ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404 my $m = $self->_create_default_model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405 $self->add_model($self,$m);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 my @models = $self->model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408 my $first_model = $models[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410 if ( ! $self->get_chains($first_model) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411 my $c = $self->_create_default_chain;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412 $self->add_chain($first_model, $c);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414 my @chains = $self->get_chains($first_model);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415 my $first_chain = $chains[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417 if( defined $residue) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 if( (ref($residue) eq "ARRAY") ||
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419 ($residue->isa('Bio::Structure::Residue')) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420 # remove existing ones, tell they've become orphan
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 my @obj = $self->get_residues($first_chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422 if (@obj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423 for my $r (@obj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424 $self->_remove_from_graph($r);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427 # add the new ones
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
428 $self->add_residue($first_chain,$residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
429 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
430 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
431 $self->throw("Supplied a $residue to residue, we want a Bio::Structure::Residue or a list of these\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
432 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
433 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
434 $self->get_residues($first_chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
435 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
436
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
437
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
438 =head2 add_residue()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
439
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
440 Title : add_residue
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
441 Usage : @residues = $structure->add_residue($residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
442 Function: Adds a (or a list of) Residue objects to a Bio::Structure::Entry.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
443 Returns : list of Bio::Structure::Residue objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
444 Args : One Residue or a reference to an array of Residue objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
445
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
446 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
447
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
448 sub add_residue {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
449 my($self,$chain,$residue) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
450
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
451 if (ref($chain) !~ /^Bio::Structure::Chain/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
452 $self->throw("add_residue: first argument needs to be a Chain object\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
453 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
454 if (defined $residue) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
455 if (ref($residue) eq "ARRAY") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
456 # if the user passed in a reference to an array
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
457 for my $r ( @{$residue} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
458 if( ! $r->isa('Bio::Structure::Residue') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
459 $self->throw("$r is not a Residue\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
460 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
461 if ( $self->_parent($r) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
462 $self->throw("$r already belongs to a parent\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
463 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
464 $self->_parent($r, $chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
465 $self->_child($chain, $r);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
466 # stringify
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
467 my $str_ref = "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
468 $r->_grandparent($str_ref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
469 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
470 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
471 elsif ( $residue->isa('Bio::Structure::Residue') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
472 if ( $self->_parent($residue) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
473 $self->throw("$residue already belongs to a parent\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
474 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
475 $self->_parent($residue, $chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
476 $self->_child($chain, $residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
477 # stringify
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
478 my $str_ref = "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
479 $residue->_grandparent($str_ref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
480 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
481 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
482 $self->throw("Supplied a $residue to add_residue, we want a Residue or list of Residues\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
483 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
484 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
485 my $array_ref = $self->_child($chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
486 return $array_ref ? @{$array_ref} : ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
487 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
488
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
489
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
490 =head2 get_residues()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
491
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
492 Title : get_residues
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
493 Usage : $structure->get_residues($chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
494 Function: general get method for residues attached to a Chain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
495 Returns : a list of residues attached to this chain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
496 Args : a chain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
497
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
498 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
499
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
500 sub get_residues {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
501 my ($self, $chain) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
502
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
503 if ( !defined $chain) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
504 $self->throw("get_residues needs a Chain as argument");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
505 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
506 # pass through to add_residue
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
507 $self->add_residue($chain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
508 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
509
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
510
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
511 =head2 add_atom()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
512
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
513 Title : add_atom
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
514 Usage : @atoms = $structure->add_atom($residue,$atom);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
515 Function: Adds a (or a list of) Atom objects to a Bio::Structure::Residue.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
516 Returns : list of Bio::Structure::Atom objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
517 Args : a residue and an atom
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
518
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
519 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
520
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
521 sub add_atom {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
522 my($self,$residue,$atom) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
523
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
524 if (ref($residue) !~ /^Bio::Structure::Residue/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
525 $self->throw("add_atom: first argument needs to be a Residue object\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
526 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
527 if (defined $atom) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
528 if (ref($atom) eq "ARRAY") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
529 # if the user passed in a reference to an array
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
530 for my $a ( @{$atom} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
531 if( ! $a->isa('Bio::Structure::Atom') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
532 $self->throw("$a is not an Atom\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
533 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
534 if ( $self->_parent($a) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
535 $self->throw("$a already belongs to a parent\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
536 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
537 $self->_parent($a, $residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
538 $self->_child($residue, $a);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
539 # stringify
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
540 #my $str_ref = "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
541 #$r->_grandparent($str_ref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
542 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
543 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
544 #elsif ( $atom->isa('Bio::Structure::Atom') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
545 elsif ( ref($atom) =~ /^Bio::Structure::Atom/ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
546 if ( $self->_parent($atom) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
547 $self->throw("$atom already belongs to a parent\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
548 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
549 $self->_parent($atom, $residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
550 $self->_child($residue, $atom);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
551 # stringify
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
552 #my $str_ref = "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
553 #$atom->_grandparent($str_ref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
554 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
555 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
556 my $array_ref = $self->_child($residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
557 return $array_ref ? @{$array_ref} : ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
558 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
559
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
560
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
561 =head2 get_atoms()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
562
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
563 Title : get_atoms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
564 Usage : $structure->get_atoms($residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
565 Function: general get method for atoms attached to a Residue
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
566 Returns : a list of atoms attached to this residue
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
567 Args : a residue
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
568
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
569 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
570
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
571 sub get_atoms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
572 my ($self, $residue) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
573
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
574 if ( !defined $residue) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
575 $self->throw("get_atoms needs a Residue as argument");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
576 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
577 # pass through to add_atom
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
578 $self->add_atom($residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
579 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
580
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
581
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
582 =head2 parent()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
583
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
584 Title : parent
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
585 Usage : $structure->parent($residue);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
586 Function: returns the parent of the argument
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
587 Returns : the parent of the argument
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
588 Args : a Bio::Structure object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
589
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
590 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
591
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
592 =head2 conect()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
593
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
594 Title : conect
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
595 Usage : $structure->conect($source);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
596 Function: get/set method for conect
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
597 Returns : a list of serial numbers for atoms connected to source
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
598 (together with $entry->get_atom_by_serial($model, $serial) this should be OK for now)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
599 Args : the serial number for the source atom
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
600
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
601 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
602
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
603 sub conect {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
604 my ($self, $source, $serial, $type) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
605
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
606 if ( !defined $source ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
607 $self->throw("You need to supply at least a source to conect");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
608 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
609 if ( defined $serial && defined $type ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
610 if ( !exists(${$self->{'conect'}}{$source}) || ref(${$self->{'conect'}}{$source} !~ /^ARRAY/ ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
611 ${$self->{'conect'}}{$source} = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
612 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
613 # we also need to store type, a conect object might be better
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
614 my $c = $serial . "_" . $type;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
615 push @{ ${$self->{'conect'}}{$source} }, $c;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
616 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
617 return @{ ${$self->{'conect'}}{$source} };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
618 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
619
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
620 =head2 get_all_conect_source()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
621
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
622 Title : get_all_conect_source
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
623 Usage : @sources = $structure->get_all_conect_source;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
624 Function: get all the sources for the conect records
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
625 Returns : a list of serial numbers for atoms connected to source
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
626 (together with $entry->get_atom_by_serial($model, $serial) this should be OK for now)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
627 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
628 Description : This is a bit of a kludge, but it's the best for now. Conect info might need
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
629 to go in a sepearte object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
630
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
631 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
632
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
633 sub get_all_conect_source {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
634 my ($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
635 my (@sources);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
636
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
637 for my $source (sort {$a<=>$b} keys %{$self->{'conect'}}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
638 push @sources, $source;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
639 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
640 return @sources;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
641 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
642
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
643
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
644 =head2 master()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
645
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
646 Title : master
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
647 Usage : $structure->master($source);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
648 Function: get/set method for master
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
649 Returns : the master line
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
650 Args : the master line for this entry
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
651
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
652 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
653
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
654 sub master {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
655 my ($self, $value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
656 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
657 $self->{'master'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
658 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
659 return $self->{'master'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
660 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
661
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
662
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
663 =head2 seqres()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
664
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
665 Title : seqres
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
666 Usage : $seqobj = $structure->seqres("A");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
667 Function: gets a sequence object containing the sequence from the SEQRES record.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
668 if a chain-ID is given , the sequence for this chain is given, if none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
669 is provided the first chain is choosen
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
670 Returns : a Bio::PrimarySeq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
671 Args : the chain-ID of the chain you want the sequence from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
672
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
673 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
674
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
675 sub seqres {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
676 my ($self, $chainid) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
677 my $s_u = "x3 A1 x7 A3 x1 A3 x1 A3 x1 A3 x1 A3 x1 A3 x1 A3 x1 A3 x1 A3 x1 A3 x1 A3 x1 A3 x1 A3";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
678 my (%seq_ch);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
679 if ( !defined $chainid) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
680 my $m = ($self->get_models($self))[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
681 my $c = ($self->get_chains($m))[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
682 $chainid = $c->id;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
683 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
684 my $seqres = ($self->annotation->get_Annotations("seqres"))[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
685 my $seqres_string = $seqres->as_text;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
686 $self->debug("seqres : $seqres_string\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
687 $seqres_string =~ s/^Value: //;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
688 # split into lines of 62 long
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
689 my @l = unpack("A62" x (length($seqres_string)/62), $seqres_string);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
690 for my $line (@l) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
691 # get out chain_id and sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
692 # we use a1, as A1 strips all spaces :(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
693 my ($chid, $seq) = unpack("x3 a1 x7 A51", $line);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
694 if ($chid eq " ") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
695 $chid = "default";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
696 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
697 $seq =~ s/(\w+)/\u\L$1/g; # ALA -> Ala (for SeqUtils)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
698 $seq =~ s/\s//g; # strip all spaces
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
699 $seq_ch{$chid} .= $seq;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
700 $self->debug("seqres : $chid $seq_ch{$chid}\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
701 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
702 # do we have a seqres for this chainid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
703 if(! exists $seq_ch{$chainid} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
704 $self->warn("There is no SEQRES known for chainid \"$chainid\"");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
705 return undef;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
706 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
707
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
708 # this will break for non-protein structures (about 10% for now) XXX KB
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
709 my $pseq = Bio::PrimarySeq->new(-alphabet => 'protein');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
710 $pseq = Bio::SeqUtils->seq3in($pseq,$seq_ch{$chainid});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
711 my $id = $self->id . "_" . $chainid;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
712 $pseq->id($id);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
713 return $pseq;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
714 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
715
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
716 =head2 get_atom_by_serial()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
717
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
718 Title : get_atom_by_serial
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
719 Usage : $structure->get_atom_by_serial($module, $serial);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
720 Function: get the Atom for a for get_atom_by_serial
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
721 Returns : the Atom object with this serial number in the model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
722 Args : Model on which to work, serial number for atom
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
723 (if only a number is supplied, the first model is chosen)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
724
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
725 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
726
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
727 sub get_atom_by_serial {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
728 my ($self, $model, $serial) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
729
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
730 if ($model =~ /^\d+$/ && !defined $serial) { # only serial given
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
731 $serial = $model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
732 my @m = $self->get_models($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
733 $model = $m[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
734 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
735 if ( !defined $model || ref($model) !~ /^Bio::Structure::Model/ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
736 $self->throw("Could not find (first) model\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
737 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
738 if ( !defined $serial || ($serial !~ /^\d+$/) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
739 $self->throw("The serial number you provided looks fishy ($serial)\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
740 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
741 for my $chain ($self->get_chains($model) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
742 for my $residue ($self->get_residues($chain) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
743 for my $atom ($self->get_atoms($residue) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
744 # this could get expensive, do we cache ???
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
745 next unless ($atom->serial == $serial);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
746 return $atom;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
747 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
748 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
749 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
750 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
751
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
752 sub parent {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
753 my ($self, $obj) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
754
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
755 if ( !defined $obj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
756 $self->throw("parent: you need to supply an argument to get the parent from\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
757 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
758
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
759 # for now we pass on to _parent, untill we get the symbolic ref thing working.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
760 $self->_parent($obj);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
761 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
762
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
763 sub DESTROY {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
764 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
765
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
766 #print STDERR "DESTROY on $self being called\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
767
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
768 ## for my $pc (keys %{ $self->{'p_c'} } ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
769 ## next unless ( defined ${ $self->{'p_c'} }{$pc} );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
770 ## delete ${$self->{'p_c'}}{$pc};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
771 ## }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
772 ## for my $cp (keys %{ $self->{'c_p'} } ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
773 ## next unless ( defined ${ $self->{'c_p'} }{$cp} );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
774 ## delete ${$self->{'c_p'}}{$cp};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
775 ## }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
776 %{ $self->{'p_c'} } = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
777 %{ $self->{'c_p'} } = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
778 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
779
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
780 # copied from Bio::Seq.pm
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
781 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
782 =head2 annotation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
783
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
784 Title : annotation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
785 Usage : $obj->annotation($seq_obj)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
786 Function:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
787 Example :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
788 Returns : value of annotation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
789 Args : newvalue (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
790
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
791
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
792 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
793
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
794 sub annotation {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
795 my ($obj,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
796 if( defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
797 $obj->{'annotation'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
798 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
799 return $obj->{'annotation'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
800
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
801 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
802
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
803
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
804 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
805 # from here on only private methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
806 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
807
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
808 =head2 _remove_models()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
809
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
810 Title : _remove_models
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
811 Usage :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
812 Function: Removes the models attached to an Entry. Tells the models they
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
813 don't belong to this Entry any more
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
814 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
815 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
816
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
817 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
818
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
819 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
820
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
821 sub _remove_models {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
822 my ($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
823
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
824 ;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
825 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
826
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
827
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
828 =head2 _create_default_model()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
829
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
830 Title : _create_default_model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
831 Usage :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
832 Function: Creates a default Model for this Entry. Typical situation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
833 in an X-ray structure where there is only one model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
834 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
835 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
836
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
837 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
838
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
839 sub _create_default_model {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
840 my ($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
841
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
842 my $model = Bio::Structure::Model->new(-id => "default");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
843 return $model;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
844 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
845
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
846
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
847 =head2 _create_default_chain()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
848
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
849 Title : _create_default_chain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
850 Usage :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
851 Function: Creates a default Chain for this Model. Typical situation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
852 in an X-ray structure where there is only one chain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
853 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
854 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
855
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
856 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
857
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
858 sub _create_default_chain {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
859 my ($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
860
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
861 my $chain = Bio::Structure::Chain->new(-id => "default");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
862 return $chain;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
863 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
864
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
865
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
866
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
867 =head2 _parent()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
868
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
869 Title : _parent
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
870 Usage : This is an internal function only. It is used to have one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
871 place that keeps track of which object has which other object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
872 as parent. Thus allowing the underlying modules (Atom, Residue,...)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
873 to have no knowledge about all this (and thus removing the possibility
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
874 of reference cycles).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
875 This method hides the details of manipulating references to an anonymous
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
876 hash.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
877 Function: To get/set an objects parent
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
878 Returns : a reference to the parent if it exist, undef otherwise. In the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
879 current implementation each node should have a parent (except Entry).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
880 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
881
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
882 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
883
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
884 # manipulating the c_p hash
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
885
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
886 sub _parent {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
887 no strict "refs";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
888 my ($self, $key, $value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
889
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
890 if ( (!defined $key) || (ref($key) !~ /^Bio::/) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
891 $self->throw("First argument to _parent needs to be a reference to a Bio:: object ($key)\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
892 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
893 if ( (defined $value) && (ref($value) !~ /^Bio::/) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
894 $self->throw("Second argument to _parent needs to be a reference to a Bio:: object\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
895 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
896 # no checking here for consistency of key and value, needs to happen in caller
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
897
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
898 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
899 # is this value already in, shout
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
900 if (defined ( $self->{'c_p'}->{$key}) &&
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
901 exists ( $self->{'c_p'}->{$key})
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
902 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
903 $self->throw("_parent: $key already has a parent ${$self->{'c_p'}}{$key}\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
904 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
905 ${$self->{'c_p'}}{$key} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
906 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
907 return ${$self->{'c_p'}}{$key};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
908 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
909
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
910
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
911 =head2 _child()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
912
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
913 Title : _child
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
914 Usage : This is an internal function only. It is used to have one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
915 place that keeps track of which object has which other object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
916 as child. Thus allowing the underlying modules (Atom, Residue,...)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
917 to have no knowledge about all this (and thus removing the possibility
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
918 to have no knowledge about all this (and thus removing the possibility
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
919 of reference cycles).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
920 This method hides the details of manipulating references to an anonymous
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
921 hash.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
922 Function: To get/set an object's child(ren)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
923 Returns : a reference to an array of child(ren) if it exist, undef otherwise.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
924 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
925
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
926 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
927
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
928 # manipulating the p_c hash
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
929 sub _child {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
930 my ($self, $key, $value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
931
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
932 if ( (!defined $key) || (ref($key) !~ /^Bio::/) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
933 $self->throw("First argument to _child needs to be a reference to a Bio:: object\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
934 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
935 if ( (defined $value) && (ref($value) !~ /^Bio::/) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
936 $self->throw("Second argument to _child needs to be a reference to a Bio:: object\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
937 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
938 # no checking here for consistency of key and value, needs to happen in caller
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
939
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
940 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
941 if ( !exists(${$self->{'p_c'}}{$key}) || ref(${$self->{'p_c'}}{$key}) !~ /^ARRAY/ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
942 ${$self->{'p_c'}}{$key} = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
943 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
944 push @{ ${$self->{'p_c'}}{$key} }, $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
945 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
946 return ${$self->{'p_c'}}{$key};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
947 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
948
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
949
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
950
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
951 =head2 _remove_from_graph()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
952
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
953 Title : _remove_from_graph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
954 Usage : This is an internal function only. It is used to remove from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
955 the parent/child graph. We only remove the links from object to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
956 his parent. Not the ones from object to its children.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
957 Function: To remove an object from the parent/child graph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
958 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
959 Args : the object to be orphaned
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
960
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
961 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
962
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
963 sub _remove_from_graph {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
964 my ($self, $object) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
965
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
966 if ( !defined($object) && ref($object) !~ /^Bio::/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
967 $self->throw("_remove_from_graph needs a Bio object as argument");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
968 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
969 if ( $self->_parent($object) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
970 my $dad = $self->_parent($object);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
971 # if we have a parent, remove me as being a child
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
972 for my $k (0 .. $#{$self->_child($dad)}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
973 if ($object eq ${$self->{'p_c'}{$dad}}[$k]) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
974 splice(@{$self->{'p_c'}{$dad}}, $k,1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
975 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
976 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
977 delete( $self->{'c_p'}{$object});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
978 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
979 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
980
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
981
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
982 sub _print_stats_pc {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
983 # print stats about the parent/child hashes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
984 my ($self) =@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
985 my $pc = scalar keys %{$self->{'p_c'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
986 my $cp = scalar keys %{$self->{'c_p'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
987 my $now_time = Time::HiRes::time();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
988 $self->debug("pc stats: P_C $pc C_P $cp $now_time\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
989 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
990
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
991
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
992 1;