annotate variant_effect_predictor/Bio/Structure/IO/pdb.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
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: pdb.pm,v 1.9.2.2 2003/08/29 16:24:14 birney Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Structure::IO::pdb
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Kris Boulez <kris.boulez@algonomics.com>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright 2001, 2002 Kris Boulez
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # Framework is a copy of Bio::SeqIO::embl.pm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 Bio::Structure::IO::pdb - PDB input/output stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 It is probably best not to use this object directly, but
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 rather go through the Bio::Structure::IO handler system. Go:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 $stream = Bio::Structure::IO->new(-file => $filename,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 -format => 'PDB');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 while ( (my $structure = $stream->next_structure()) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 # do something with $structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 This object can transform Bio::Structure objects to and from PDB flat
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 file databases. The working is similar to that of the Bio::SeqIO handlers.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 User feedback is an integral part of the evolution of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 and other Bioperl modules. Send your comments and suggestions preferably
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 to one of the Bioperl mailing lists.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 http://www.bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 the bugs and their resolution.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 Bug reports can be submitted via email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 =head1 AUTHOR - Kris Boulez
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 Email kris.boulez@algonomics.com
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 package Bio::Structure::IO::pdb;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 use Bio::Structure::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 use Bio::Structure::Entry;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 #use Bio::Structure::Model;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 #use Bio::Structure::Chain;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 #use Bio::Structure::Residue;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 use Bio::Structure::Atom;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 use Bio::SeqFeature::Generic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 use Bio::Annotation::Reference;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 @ISA = qw(Bio::Structure::IO);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 sub _initialize {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 $self->SUPER::_initialize(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 my ($noheader, $noatom) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 $self->_rearrange([qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 NOHEADER
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 NOATOM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 )],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 $noheader && $self->_noheader($noheader);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 $noatom && $self->_noatom($noatom);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 =head2 next_structure;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Title : next_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Usage : $struc = $stream->next_structure()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Function: returns the next structure in the stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Returns : Bio::Structure object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 sub next_structure {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my ($line);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my ($obslte, $title, $caveat, $compnd, $source, $keywds,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 $expdta, $author, %revdat, $revdat, $sprsde, $jrnl, %remark, $dbref,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 $seqadv, $seqres, $modres, $het, $hetnam, $hetsyn, $formul, $helix,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 $sheet, $turn, $ssbond, $link, $hydbnd, $sltbrg, $cispep,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 $site, $cryst1, $tvect,);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 my $struc = Bio::Structure::Entry->new(-id => 'created from pdb.pm');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 my $all_headers = ( !$self->_noheader ); # we'll parse all headers and store as annotation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 my %header; # stores all header RECORDs an is stored as annotations when ATOM is reached
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 $line = $self->_readline; # This needs to be before the first eof() test
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 if( !defined $line ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 return undef; # no throws - end of file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 if( $line =~ /^\s+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 while( defined ($line = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 $line =~/\S/ && last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 if( !defined $line ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 return undef; # end of file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 $line =~ /^HEADER\s+\S+/ || $self->throw("PDB stream with no HEADER. Not pdb in my book");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 my($header_line) = unpack "x10 a56", $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 $header{'header'} = $header_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 my($class, $depdate, $idcode) = unpack "x10 a40 a9 x3 a4", $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 $idcode =~ s/^\s*(\S+)\s*$/$1/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 $struc->id($idcode);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 $self->debug("PBD c $class d $depdate id $idcode\n"); # XXX KB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my $buffer = $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 BEFORE_COORDINATES :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 until( !defined $buffer ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 $_ = $buffer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 # Exit at start of coordinate section
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 last if /^(MODEL|ATOM|HETATM)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 # OBSLTE line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 if (/^OBSLTE / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $obslte = $self->_read_PDB_singlecontline("OBSLTE","12-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $header{'obslte'} = $obslte;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 # TITLE line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 if (/^TITLE / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 $title = $self->_read_PDB_singlecontline("TITLE","11-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 $header{'title'} = $title;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 # CAVEAT line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 if (/^CAVEAT / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $caveat = $self->_read_PDB_singlecontline("CAVEAT","12-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $header{'caveat'} = $caveat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 # COMPND line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 if (/^COMPND / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 $compnd = $self->_read_PDB_singlecontline("COMPND","11-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 $header{'compnd'} = $compnd;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $self->debug("get COMPND $compnd\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 # SOURCE line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 if (/^SOURCE / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 $source = $self->_read_PDB_singlecontline("SOURCE","11-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $header{'source'} = $source;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 # KEYWDS line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 if (/^KEYWDS / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $keywds = $self->_read_PDB_singlecontline("KEYWDS","11-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 $header{'keywds'} = $keywds;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 # EXPDTA line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 if (/^EXPDTA / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 $expdta = $self->_read_PDB_singlecontline("EXPDTA","11-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $header{'expdta'} = $expdta;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 # AUTHOR line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 if (/^AUTHOR / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 $author = $self->_read_PDB_singlecontline("AUTHOR","11-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 $header{'author'} = $author;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 # REVDAT line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 # a bit more elaborate as we also store the modification number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 if (/^REVDAT / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 ##my($modnum,$rol) = unpack "x7 A3 x3 A53", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 ##$modnum =~ s/\s+//; # remove spaces
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 ##$revdat{$modnum} .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 my ($rol) = unpack "x7 a59", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 $revdat .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 $header{'revdat'} = $revdat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 # SPRSDE line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 if (/^SPRSDE / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 $sprsde = $self->_read_PDB_singlecontline("SPRSDE","12-70",\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $header{'sprsde'} = $sprsde;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 # jRNL line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 if (/^JRNL / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 $jrnl = $self->_read_PDB_jrnl(\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $struc->annotation->add_Annotation('reference',$jrnl);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $header{'jrnl'} = 1; # when writing out, we need a way to check there was a JRNL record (not mandatory)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 # REMARK line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 # we only parse the "REMARK 1" lines (additional references)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 # thre rest is stored in %remark (indexed on remarkNum) (pack does space-padding)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if (/^REMARK\s+(\d+)\s*/ && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 my $remark_num = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 if ($remark_num == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 my @refs = $self->_read_PDB_remark_1(\$buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 # How can we find the primary reference when writing (JRNL record) XXX KB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 foreach my $ref (@refs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $struc->annotation->add_Annotation('reference', $ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 # $_ still holds the REMARK_1 line, $buffer now contains the first non
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 # REMARK_1 line. We need to parse it in this pass (so no else block)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 $_ = $buffer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 # for the moment I don't see a better solution (other then using goto)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 if (/^REMARK\s+(\d+)\s*/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 my $r_num = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 if ($r_num != 1) { # other remarks, we store literlly at the moment
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 my ($rol) = unpack "x11 a59", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 $remark{$r_num} .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 } # REMARK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 # DBREF line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 # references to sequences in other databases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 # we store as 'dblink' annotations and whole line as simple annotation (round-trip)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 if (/^DBREF / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 my ($rol) = unpack "x7 a61", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $dbref .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 $header{'dbref'} = $dbref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 my ($db, $acc) = unpack "x26 a6 x1 a8", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $db =~ s/\s*$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 $acc =~ s/\s*$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 my $link = Bio::Annotation::DBLink->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $link->database($db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $link->primary_id($acc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 $struc->annotation->add_Annotation('dblink', $link);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 } # DBREF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 # SEQADV line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 if (/^SEQADV / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 my ($rol) = unpack "x7 a63", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $seqadv .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 $header{'seqadv'} = $seqadv;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 } # SEQADV
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 # SEQRES line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 # this is (I think) the sequence of macromolecule that was analysed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 # this will be returned when doing $struc->seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 if (/^SEQRES / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my ($rol) = unpack "x8 a62", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $seqres .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $header{'seqres'} = $seqres;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 } # SEQRES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 # MODRES line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 if (/^MODRES / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my ($rol) = unpack "x7 a63", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $modres .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $header{'modres'} = $modres;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 } # MODRES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 # HET line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 if (/^HET / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 my ($rol) = unpack "x7 a63", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $het .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 $header{'het'} = $het;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 } # HET
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 # HETNAM line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 if (/^HETNAM / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 my ($rol) = unpack "x8 a62", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 $hetnam .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 $header{'hetnam'} = $hetnam;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 } # HETNAM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 # HETSYN line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 if (/^HETSYN / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 my ($rol) = unpack "x8 a62", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $hetsyn .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $header{'hetsyn'} = $hetsyn;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 } # HETSYN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 # FORMUL line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 if (/^FORMUL / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 my ($rol) = unpack "x8 a62", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $formul .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 $header{'formul'} = $formul;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 } # FORMUL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 # HELIX line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 # store as specific object ??
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 if (/^HELIX / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 my ($rol) = unpack "x7 a69", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $helix .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $header{'helix'} = $helix;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 } # HELIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 # SHEET line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 # store as specific object ??
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 if (/^SHEET / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 my ($rol) = unpack "x7 a63", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 $sheet .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $header{'sheet'} = $sheet;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 } # SHEET
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 # TURN line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 # store as specific object ??
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 if (/^TURN / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 my ($rol) = unpack "x7 a63", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 $turn .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 $header{'turn'} = $turn;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 } # TURN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 # SSBOND line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 # store in connection-like object (see parsing of CONECT record)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 if (/^SSBOND / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 my ($rol) = unpack "x7 a65", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $ssbond .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $header{'ssbond'} = $ssbond;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 } # SSBOND
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 # LINK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 # store like SSBOND ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 if (/^LINK / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 my ($rol) = unpack "x12 a60", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 $link .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 $header{'link'} = $link;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 } # LINK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 # HYDBND
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 # store like SSBOND
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 if (/^HYDBND / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 my ($rol) = unpack "x12 a60", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 $hydbnd .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 $header{'hydbnd'} = $hydbnd;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 } # HYDBND
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 # SLTBRG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 # store like SSBOND ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 if (/^SLTBRG / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 my ($rol) = unpack "x12 a60",$_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 $sltbrg .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 $header{'sltbrg'} = $sltbrg;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 } # SLTBRG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 # CISPEP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 # store like SSBOND ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 if (/^CISPEP / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my ($rol) = unpack "x7 a52", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 $cispep .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 $header{'cispep'} = $cispep;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 # SITE line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 if (/^SITE / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 my ($rol) = unpack "x7 a54", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 $site .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 $header{'site'} = $site;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 } # SITE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 # CRYST1 line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 # store in some crystallographic subobject ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 if (/^CRYST1/ && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 my ($rol) = unpack "x6 a64", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $cryst1 .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $header{'cryst1'} = $cryst1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 } # CRYST1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 # ORIGXn line(s) (n=1,2,3)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 if (/^(ORIGX\d) / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 my $origxn = lc($1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 my ($rol) = unpack "x10 a45", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 $header{$origxn} .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 } # ORIGXn
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 # SCALEn line(s) (n=1,2,3)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 if (/^(SCALE\d) / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my $scalen = lc($1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my ($rol) = unpack "x10 a45", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 $header{$scalen} .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 } # SCALEn
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 # MTRIXn line(s) (n=1,2,3)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 if (/^(MTRIX\d) / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 my $mtrixn = lc($1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 my ($rol) = unpack "x7 a53", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 $header{$mtrixn} .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 } # MTRIXn
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 # TVECT line(s)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 if (/^TVECT / && $all_headers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 my ($rol) = unpack "x7 a63", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $tvect .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 $header{'tvect'} = $tvect;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 # Get next line.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 $buffer = $self->_readline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 # store %header entries a annotations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 if (%header) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 for my $record (keys %header) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 my $sim = Bio::Annotation::SimpleValue->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 $sim->value($header{$record});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 $struc->annotation->add_Annotation($record, $sim);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 # store %remark entries as annotations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 if (%remark) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 for my $remark_num (keys %remark) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 my $sim = Bio::Annotation::SimpleValue->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 $sim->value($remark{$remark_num});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 $struc->annotation->add_Annotation("remark_$remark_num", $sim);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 # Coordinate section, the real meat
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 # $_ contains a line beginning with (ATOM|MODEL)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $buffer = $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 if (defined($buffer) && $buffer =~ /^(ATOM |MODEL |HETATM)/ ) { # can you have an entry without ATOM ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 until( !defined ($buffer) ) { # (yes : 1a7z )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 # read in one model at a time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 my $model = $self->_read_PDB_coordinate_section(\$buffer, $struc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 # add this to $struc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 $struc->add_model($struc, $model);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 if ($buffer !~ /^MODEL /) { # if we get here we have multiple MODELs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 $self->throw("Could not find a coordinate section in this record\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 until( !defined $buffer ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $_ = $buffer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 # CONNECT records
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 if (/^CONECT/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 # do not differentiate between different type of connect (column dependant)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 my $conect_unpack = "x6 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 my (@conect) = unpack $conect_unpack, $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 for my $k (0 .. $#conect) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 $conect[$k] =~ s/\s//g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 my $source = shift @conect;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 my $type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 for my $k (0 .. 9) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 next unless ($conect[$k] =~ /^\d+$/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 # 0..3 bond
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 if( $k <= 3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 $type = "bond";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 # 4..5,7..8 hydrogen bonded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 elsif( ($k >= 4 && $k <= 5) || ($k >= 7 && $k <= 8) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $type = "hydrogen";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 # 6, 9 salt bridged
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 elsif( $k == 6 || $k == 9 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $type = "saltbridged";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 $self->throw("k has impossible value ($k), check brain");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 $struc->conect($source, $conect[$k], $type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 # MASTER record
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 if (/^MASTER /) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 # the numbers in here a checksums, we should use them :)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 my ($rol) = unpack "x10 a60", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 $struc->master($rol);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 if (/^END/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 # this it the end ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 $buffer = $self->_readline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 return $struc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 =head2 write_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 Title : write_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Usage : $stream->write_structure($struc)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 Function: writes the $struc object (must be a Bio::Structure) to the stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Returns : 1 for success and 0 for error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Args : Bio::Structure object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 sub write_structure {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 my ($self, $struc) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 if( !defined $struc ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 $self->throw("Attempting to write with no structure!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 if( ! ref $struc || ! $struc->isa('Bio::Structure::StructureI') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 $self->throw(" $struc is not a StructureI compliant module.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 my ($ann, $string, $output_string, $key);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 # HEADER
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 ($ann) = $struc->annotation->get_Annotations("header");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 if ($ann) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 $string = $ann->as_text;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 $string =~ s/^Value: //;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 $output_string = pack ("A10 A56", "HEADER", $string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 } else { # not read in via read_structure, create HEADER line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 my $id = $struc->id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 if (!$id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 $id = "UNK1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 if (length($id) > 4) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 $id = substr($id,0,4);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 my $classification = "DEFAULT CLASSIFICATION";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 my $dep_date = "24-JAN-70";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 $output_string = pack ("A10 A40 A12 A4", "HEADER", $classification, $dep_date, $id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 $output_string .= " " x (80 - length($output_string) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 $self->_print("$output_string\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 my (%header);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 for $key ($struc->annotation->get_all_annotation_keys) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 $header{$key} = 1;;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 exists $header{'obslte'} && $self->_write_PDB_simple_record(-name => "OBSLTE ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 -annotation => $struc->annotation->get_Annotations("obslte"), -rol => "11-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 exists $header{'title'} && $self->_write_PDB_simple_record(-name => "TITLE ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 -annotation => $struc->annotation->get_Annotations("title"), -rol => "11-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 exists $header{'caveat'} && $self->_write_PDB_simple_record(-name => "CAVEAT ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 -annotation => $struc->annotation->get_Annotations("caveat"), -rol => "12-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 exists $header{'compnd'} && $self->_write_PDB_simple_record(-name => "COMPND ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 -annotation => $struc->annotation->get_Annotations("compnd"), -rol => "11-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 exists $header{'source'} && $self->_write_PDB_simple_record(-name => "SOURCE ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 -annotation => $struc->annotation->get_Annotations("source"), -rol => "11-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 exists $header{'keywds'} && $self->_write_PDB_simple_record(-name => "KEYWDS ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 -annotation => $struc->annotation->get_Annotations("keywds"), -rol => "11-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 exists $header{'expdta'} && $self->_write_PDB_simple_record(-name => "EXPDTA ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 -annotation => $struc->annotation->get_Annotations("expdta"), -rol => "11-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 exists $header{'author'} && $self->_write_PDB_simple_record(-name => "AUTHOR ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 -annotation => $struc->annotation->get_Annotations("author"), -rol => "11-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 exists $header{'revdat'} && $self->_write_PDB_simple_record(-name => "REVDAT ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 -annotation => $struc->annotation->get_Annotations("revdat"), -rol => "8-66");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 exists $header{'sprsde'} && $self->_write_PDB_simple_record(-name => "SPRSDE ", -cont => "9-10",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 -annotation => $struc->annotation->get_Annotations("sprsde"), -rol => "12-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 # JRNL en REMARK 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 my ($jrnl_done, $remark_1_counter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 if ( !exists $header{'jrnl'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 $jrnl_done = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 foreach my $ref ($struc->annotation->get_Annotations('reference') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 if( !$jrnl_done ) { # JRNL record
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 $ref->authors && $self->_write_PDB_simple_record(-name => "JRNL AUTH",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 -cont => "17-18", -rol => "20-70", -string => $ref->authors );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 $ref->title && $self->_write_PDB_simple_record(-name => "JRNL TITL",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 -cont => "17-18", -rol => "20-70", -string => $ref->title );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 $ref->editors && $self->_write_PDB_simple_record(-name => "JRNL EDIT",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 -cont => "17-18", -rol => "20-70", -string => $ref->editors );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 $ref->location && $self->_write_PDB_simple_record(-name => "JRNL REF ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 -cont => "17-18", -rol => "20-70", -string => $ref->location );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 $ref->editors && $self->_write_PDB_simple_record(-name => "JRNL EDIT",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 -cont => "17-18", -rol => "20-70", -string => $ref->editors );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 $ref->encoded_ref && $self->_write_PDB_simple_record(-name => "JRNL REFN",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 -cont => "17-18", -rol => "20-70", -string => $ref->encoded_ref );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 $jrnl_done = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 } else { # REMARK 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 if (!$remark_1_counter) { # header line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 my $remark_1_header_line = "REMARK 1" . " " x 70;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 $self->_print("$remark_1_header_line\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 $remark_1_counter = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 # per reference header
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 my $rem_line = "REMARK 1 REFERENCE " . $remark_1_counter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 $rem_line .= " " x (80 - length($rem_line) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 $self->_print($rem_line,"\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 $ref->authors && $self->_write_PDB_simple_record(-name => "REMARK 1 AUTH",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 -cont => "17-18", -rol => "20-70", -string => $ref->authors );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 $ref->title && $self->_write_PDB_simple_record(-name => "REMARK 1 TITL",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 -cont => "17-18", -rol => "20-70", -string => $ref->title );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 $ref->editors && $self->_write_PDB_simple_record(-name => "REMARK 1 EDIT",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 -cont => "17-18", -rol => "20-70", -string => $ref->editors );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 $ref->location && $self->_write_PDB_simple_record(-name => "REMARK 1 REF ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 -cont => "17-18", -rol => "20-70", -string => $ref->location );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 $ref->editors && $self->_write_PDB_simple_record(-name => "REMARK 1 EDIT",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 -cont => "17-18", -rol => "20-70", -string => $ref->editors );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 $ref->encoded_ref && $self->_write_PDB_simple_record(-name => "REMARK 1 REFN",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 -cont => "17-18", -rol => "20-70", -string => $ref->encoded_ref );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 $remark_1_counter++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 if (! defined $remark_1_counter ) { # no remark 1 record written yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 my $remark_1_header_line = "REMARK 1" . " " x 70;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 $self->_print("$remark_1_header_line\n"); # write dummy (we need this line)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 # REMARK's (not 1 at the moment, references)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 my (%remarks, $remark_num);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 for $key (keys %header) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 next unless ($key =~ /^remark_(\d+)$/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 next if ($1 == 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 $remarks{$1} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 for $remark_num (sort {$a <=> $b} keys %remarks) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 $self->_write_PDB_remark_record($struc, $remark_num);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 exists $header{'dbref'} && $self->_write_PDB_simple_record(-name => "DBREF ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 -annotation => $struc->annotation->get_Annotations("dbref"), -rol => "8-68");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 exists $header{'seqadv'} && $self->_write_PDB_simple_record(-name => "SEQADV ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 -annotation => $struc->annotation->get_Annotations("seqadv"), -rol => "8-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 exists $header{'seqres'} && $self->_write_PDB_simple_record(-name => "SEQRES ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 -annotation => $struc->annotation->get_Annotations("seqres"), -rol => "9-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 exists $header{'modres'} && $self->_write_PDB_simple_record(-name => "MODRES ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 -annotation => $struc->annotation->get_Annotations("modres"), -rol => "8-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 exists $header{'het'} && $self->_write_PDB_simple_record(-name => "HET ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 -annotation => $struc->annotation->get_Annotations("het"), -rol => "8-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 exists $header{'hetnam'} && $self->_write_PDB_simple_record(-name => "HETNAM ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 -annotation => $struc->annotation->get_Annotations("hetnam"), -rol => "9-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 exists $header{'hetsyn'} && $self->_write_PDB_simple_record(-name => "HETSYN ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 -annotation => $struc->annotation->get_Annotations("hetsyn"), -rol => "9-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 exists $header{'formul'} && $self->_write_PDB_simple_record(-name => "FORMUL ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 -annotation => $struc->annotation->get_Annotations("formul"), -rol => "9-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 exists $header{'helix'} && $self->_write_PDB_simple_record(-name => "HELIX ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 -annotation => $struc->annotation->get_Annotations("helix"), -rol => "8-76");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 exists $header{'sheet'} && $self->_write_PDB_simple_record(-name => "SHEET ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 -annotation => $struc->annotation->get_Annotations("sheet"), -rol => "8-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 exists $header{'turn'} && $self->_write_PDB_simple_record(-name => "TURN ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 -annotation => $struc->annotation->get_Annotations("turn"), -rol => "8-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 exists $header{'ssbond'} && $self->_write_PDB_simple_record(-name => "SSBOND ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 -annotation => $struc->annotation->get_Annotations("ssbond"), -rol => "8-72");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 exists $header{'link'} && $self->_write_PDB_simple_record(-name => "LINK ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 -annotation => $struc->annotation->get_Annotations("link"), -rol => "13-72");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 exists $header{'hydbnd'} && $self->_write_PDB_simple_record(-name => "HYDBND ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 -annotation => $struc->annotation->get_Annotations("hydbnd"), -rol => "13-72");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 exists $header{'sltbrg'} && $self->_write_PDB_simple_record(-name => "SLTBRG ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 -annotation => $struc->annotation->get_Annotations("sltbrg"), -rol => "13-72");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 exists $header{'cispep'} && $self->_write_PDB_simple_record(-name => "CISPEP ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 -annotation => $struc->annotation->get_Annotations("cispep"), -rol => "8-59");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 exists $header{'site'} && $self->_write_PDB_simple_record(-name => "SITE ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 -annotation => $struc->annotation->get_Annotations("site"), -rol => "8-61");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 exists $header{'cryst1'} && $self->_write_PDB_simple_record(-name => "CRYST1",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 -annotation => $struc->annotation->get_Annotations("cryst1"), -rol => "7-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 for my $k (1..3) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 my $origxn = "origx".$k;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 my $ORIGXN = uc($origxn)." ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 exists $header{$origxn} && $self->_write_PDB_simple_record(-name => $ORIGXN,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 -annotation => $struc->annotation->get_Annotations($origxn), -rol => "11-55");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 for my $k (1..3) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 my $scalen = "scale".$k;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 my $SCALEN = uc($scalen)." ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 exists $header{$scalen} && $self->_write_PDB_simple_record(-name => $SCALEN,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 -annotation => $struc->annotation->get_Annotations($scalen), -rol => "11-55");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 for my $k (1..3) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 my $mtrixn = "mtrix".$k;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 my $MTRIXN = uc($mtrixn)." ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 exists $header{$mtrixn} && $self->_write_PDB_simple_record(-name => $MTRIXN,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 -annotation => $struc->annotation->get_Annotations($mtrixn), -rol => "8-60");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 exists $header{'tvect'} && $self->_write_PDB_simple_record(-name => "TVECT ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 -annotation => $struc->annotation->get_Annotations("tvect"), -rol => "8-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 # write out coordinate section
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 my %het_res; # hetero residues
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 $het_res{'HOH'} = 1; # water is default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 if (exists $header{'het'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 my ($het_line) = ($struc->annotation->get_Annotations("het"))[0]->as_text;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 $het_line =~ s/^Value: //;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 for ( my $k = 0; $k <= length $het_line ; $k += 63) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 my $l = substr $het_line, $k, 63;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 $l =~ s/^\s*(\S+)\s+.*$/$1/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 $het_res{$l} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 for my $model ($struc->get_models) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 # more then one model ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 if ($struc->get_models > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 my $model_line = sprintf("MODEL %4d", $model->id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 $model_line .= " " x (80 - length($model_line) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 $self->_print($model_line, "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 for my $chain ($struc->get_chains($model)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 my ($residue, $atom, $resname, $resnum, $atom_line, $atom_serial, $atom_icode, $chain_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 my ($prev_resname, $prev_resnum, $prev_atomicode); # need these for TER record
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 my $wr_ter = 0; # have we already written out a TER for this chain
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 $chain_id = $chain->id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 if ( $chain_id eq "default" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 $chain_id = " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 $self->debug("model_id: $model->id chain_id: $chain_id\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 for $residue ($struc->get_residues($chain)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 ($resname, $resnum) = split /-/, $residue->id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 for $atom ($struc->get_atoms($residue)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 if ($het_res{$resname}) { # HETATM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 if ( ! $wr_ter && $resname ne "HOH" ) { # going from ATOM -> HETATM, we have to write TER
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 my $ter_line = "TER ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 $ter_line .= sprintf("%5d", $atom_serial + 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 $ter_line .= " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 $ter_line .= sprintf("%3s ", $prev_resname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 $ter_line .= $chain_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 $ter_line .= sprintf("%4d", $prev_resnum);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 $ter_line .= $atom_icode ? $prev_atomicode : " "; # 27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 $ter_line .= " " x (80 - length $ter_line); # extend to 80 chars
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 $self->_print($ter_line,"\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 $wr_ter = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 $atom_line = "HETATM";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 $atom_line = "ATOM ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 $atom_line .= sprintf("%5d ", $atom->serial);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 $atom_serial = $atom->serial; # we need it for TER record
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 $atom_icode = $atom->icode;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 # remember some stuff if next iteration needs writing TER
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 $prev_resname = $resname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 $prev_resnum = $resnum;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 $prev_atomicode = $atom_icode;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 # getting the name of the atom correct is subtrivial
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 my $atom_id = $atom->id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 # is pdb_atomname set, then use this (most probably set when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 # reading in the PDB record)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 my $pdb_atomname = $atom->pdb_atomname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 if( defined $pdb_atomname ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 $atom_line .= sprintf("%-4s", $pdb_atomname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 # start (educated) guessing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 my $element = $atom->element;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 if( defined $element && $element ne "H") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 # element should be at first two positions (right justified)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 # ie. Calcium should be "CA "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 # C alpha should be " CA "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 if( length($element) == 2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 $atom_line .= sprintf("%-4s", $atom->id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 $atom_line .= sprintf(" %-3s", $atom->id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 } else { # old behaviour do a best guess
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 if ($atom->id =~ /^\dH/) { # H: four positions, left justified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 $atom_line .= sprintf("%-4s", $atom->id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 } elsif (length($atom_id) == 4) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 if ($atom_id =~ /^(H\d\d)(\d)$/) { # turn H123 into 3H12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 $atom_line .= $2.$1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 } else { # no more guesses, no more alternatives
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 $atom_line .= $atom_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 } else { # if we get here and it is not correct let me know
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 $atom_line .= sprintf(" %-3s", $atom->id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 # we don't do alternate location at this moment
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809 $atom_line .= " "; # 17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 $atom_line .= sprintf("%3s",$resname); # 18-20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 $atom_line .= " ".$chain_id; # 21, 22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 $atom_line .= sprintf("%4d", $resnum); # 23-26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 $atom_line .= $atom->icode ? $atom->icode : " "; # 27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 $atom_line .= " "; # 28-30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 $atom_line .= sprintf("%8.3f", $atom->x); # 31-38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 $atom_line .= sprintf("%8.3f", $atom->y); # 39-46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 $atom_line .= sprintf("%8.3f", $atom->z); # 47-54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 $atom_line .= sprintf("%6.2f", $atom->occupancy); # 55-60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 $atom_line .= sprintf("%6.2f", $atom->tempfactor); # 61-66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 $atom_line .= " "; # 67-72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 $atom_line .= $atom->segID ? # segID 73-76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 sprintf("%-4s", $atom->segID) :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 $atom_line .= $atom->element ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 sprintf("%2s", $atom->element) :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 $atom_line .= $atom->charge ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 sprintf("%2s", $atom->charge) :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 $self->_print($atom_line,"\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 # write out TER record if it hasn't been written yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 if ( $resname ne "HOH" && ! $wr_ter ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 my $ter_line = "TER ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 $ter_line .= sprintf("%5d", $atom_serial + 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 $ter_line .= " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 $ter_line .= sprintf("%3s ", $resname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 $ter_line .= $chain_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 $ter_line .= sprintf("%4d", $resnum);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 $ter_line .= $atom_icode ? $atom_icode : " "; # 27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 $ter_line .= " " x (80 - length $ter_line); # extend to 80 chars
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 $self->_print($ter_line,"\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 $wr_ter = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 if ($struc->get_models > 1) { # we need ENDMDL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 my $endmdl_line = "ENDMDL" . " " x 74;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 $self->_print($endmdl_line, "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 } # for my $model
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 # CONECT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 my @sources = $struc->get_all_conect_source;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 my ($conect_line,@conect, @bond, @hydbond, @saltbridge, $to, $type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 for my $source (@sources) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 # get all conect's
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 my @conect = $struc->conect($source);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 # classify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 for my $con (@conect) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 ($to, $type) = split /_/, $con;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 if($type eq "bond") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 push @bond, $to;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 } elsif($type eq "hydrogenbonded") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 push @hydbond, $to;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 } elsif($type eq "saltbridged") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 push @saltbridge, $to;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 $self->throw("type $type is unknown for conect");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 # and write out CONECT lines as long as there is something
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 # in one of the arrays
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 while ( @bond || @hydbond || @saltbridge) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 my ($b, $hb, $sb);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 $conect_line = "CONECT". sprintf("%5d", $source);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 for my $k (0..3) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 $b = shift @bond;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 $conect_line .= $b ? sprintf("%5d", $b) : " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 for my $k (4..5) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 $hb = shift @hydbond;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 $conect_line .= $hb ? sprintf("%5d", $hb) : " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 $sb = shift @saltbridge;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 $conect_line .= $sb ? sprintf("%5d", $sb) : " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 for my $k (7..8) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 $hb = shift @hydbond;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 $conect_line .= $hb ? sprintf("%5d", $hb) : " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 $sb = shift @saltbridge;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 $conect_line .= $sb ? sprintf("%5d", $sb) : " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 $conect_line .= " " x (80 - length($conect_line) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 $self->_print($conect_line, "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901 # MASTER line contains checksums, we should calculate them of course :)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 my $master_line = "MASTER " . $struc->master;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 $master_line .= " " x (80 - length($master_line) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 $self->_print($master_line, "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 my $end_line = "END" . " " x 77;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 $self->_print($end_line,"\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 #$self->throw("write_structure is not yet implemented, start holding your breath\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 =head2 _filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 Title : _filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 Usage : $obj->_filehandle($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 Returns : value of _filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 sub _filehandle{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 my ($obj,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 $obj->{'_filehandle'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 return $obj->{'_filehandle'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933 =head2 _noatom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 Title : _noatom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 Usage : $obj->_noatom($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 Returns : value of _noatom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 sub _noatom{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 my ($obj,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 $obj->{'_noatom'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 return $obj->{'_noatom'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 =head2 _noheader
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 Title : _noheader
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 Usage : $obj->_noheader($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 Returns : value of _noheader
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 sub _noheader{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 my ($obj,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 $obj->{'_noheader'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 return $obj->{'_noheader'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 =head2 _read_PDB_singlecontline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 Title : _read_PDB_singlecontline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 Usage : $obj->_read_PDB_singlecontline($record, $fromto, $buffer))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 Function: read single continued record from PDB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 Returns : concatenated record entry (between $fromto columns)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 Args : record, colunm delimiters, buffer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985 sub _read_PDB_singlecontline {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 my ($self, $record, $fromto, $buffer) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 my $concat_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 my ($begin, $end) = (split (/-/, $fromto));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 my $unpack_string = "x8 a2 ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 if($begin == 12) { # one additional space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 $unpack_string .= "x1 a59";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 $unpack_string .= "a60";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 $_ = $$buffer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 while (defined( $_ ||= $self->_readline ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 if ( /^$record/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 my($cont, $rol) = unpack $unpack_string, $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 if($cont =~ /\d$/ && $begin == 11) { # continuation line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 # and text normally at pos 11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 $rol =~ s/^\s//; # strip leading space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 ## no space (store litteraly) $concat_line .= $rol . " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 $concat_line .= $rol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 $_ = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 $concat_line =~ s/\s$//; # remove trailing space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 $$buffer = $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 return $concat_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 =head2 _read_PDB_jrnl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 Title : _read_PDB_jrnl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 Usage : $obj->_read_PDB_jrnl($\buffer))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 Function: read jrnl record from PDB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 Returns : Bio::Annotation::Reference object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 sub _read_PDB_jrnl {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 my ($self, $buffer) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 $_ = $$buffer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 my ($auth, $titl,$edit,$ref,$publ,$refn);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 while (defined( $_ ||= $self->_readline )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 if (/^JRNL /) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 # this code belgons in a seperate method (shared with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 # remark 1 parsing)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 my ($rec, $subr, $cont, $rol) = unpack "A6 x6 A4 A2 x1 A51", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039 $auth = $self->_concatenate_lines($auth,$rol) if ($subr eq "AUTH");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 $titl = $self->_concatenate_lines($titl,$rol) if ($subr eq "TITL");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 $edit = $self->_concatenate_lines($edit,$rol) if ($subr eq "EDIT");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 $ref = $self->_concatenate_lines($ref ,$rol) if ($subr eq "REF");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 $publ = $self->_concatenate_lines($publ,$rol) if ($subr eq "PUBL");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 $refn = $self->_concatenate_lines($refn,$rol) if ($subr eq "REFN");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 $_ = undef; # trigger reading of next line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 } # while
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 $$buffer = $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 my $jrnl_ref = Bio::Annotation::Reference->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 $jrnl_ref->authors($auth);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056 $jrnl_ref->title($titl);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057 $jrnl_ref->location($ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 $jrnl_ref->publisher($publ);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059 $jrnl_ref->editors($edit);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 $jrnl_ref->encoded_ref($refn);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 return $jrnl_ref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 } # sub _read_PDB_jrnl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066 =head2 _read_PDB_remark_1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068 Title : _read_PDB_remark_1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 Usage : $obj->_read_PDB_remark_1($\buffer))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 Function: read "remark 1" record from PDB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071 Returns : array of Bio::Annotation::Reference objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 sub _read_PDB_remark_1 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 my ($self, $buffer) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 $_ = $$buffer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 my ($auth, $titl,$edit,$ref,$publ,$refn,$refnum);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081 my @refs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 while (defined( $_ ||= $self->_readline )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084 if (/^REMARK 1 /) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085 if (/^REMARK 1\s+REFERENCE\s+(\d+)\s*/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086 $refnum = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087 if ($refnum != 1) { # this is first line of a reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088 my $rref = Bio::Annotation::Reference->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 $rref->authors($auth);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090 $rref->title($titl);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091 $rref->location($ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092 $rref->publisher($publ);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093 $rref->editors($edit);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094 $rref->encoded_ref($refn);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095 $auth = $titl = $edit = $ref = $publ = $refn = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 push @refs, $rref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099 # this code belgons in a seperate method (shared with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100 # remark 1 parsing)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101 my ($rec, $subr, $cont, $rol) = unpack "A6 x6 A4 A2 x1 A51", $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 $auth = $self->_concatenate_lines($auth,$rol) if ($subr eq "AUTH");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103 $titl = $self->_concatenate_lines($titl,$rol) if ($subr eq "TITL");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104 $edit = $self->_concatenate_lines($edit,$rol) if ($subr eq "EDIT");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 $ref = $self->_concatenate_lines($ref ,$rol) if ($subr eq "REF");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106 $publ = $self->_concatenate_lines($publ,$rol) if ($subr eq "PUBL");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107 $refn = $self->_concatenate_lines($refn,$rol) if ($subr eq "REFN");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 # have we seen any reference at all (could be single REMARK 1 line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111 if ( ! defined ($refnum) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 last; # get out of while()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115 # create last reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116 my $rref = Bio::Annotation::Reference->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117 $rref->authors($auth);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1118 $rref->title($titl);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1119 $rref->location($ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1120 $rref->publisher($publ);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1121 $rref->editors($edit);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1122 $rref->encoded_ref($refn);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1123 push @refs, $rref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1124 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1125 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1127 $_ = undef; # trigger reading of next line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1128 } # while
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1130 $$buffer = $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1132 return @refs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1133 } # sub _read_PDB_jrnl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1136 =head2 _read_PDB_coordinate_section
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1138 Title : _read_PDB_coordinate_section
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1139 Usage : $obj->_read_PDB_coordinate_section($\buffer))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1140 Function: read one model from a PDB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1141 Returns : Bio::Structure::Model object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1142 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1144 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1146 sub _read_PDB_coordinate_section {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1147 my ($self, $buffer, $struc) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1148 my ($model_num, $chain_name, $residue_name, $atom_name); # to keep track of state
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1149 $model_num = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1150 $chain_name = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1151 $residue_name = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1152 $atom_name = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1154 my $atom_unpack = "x6 a5 x1 a4 a1 a3 x1 a1 a4 a1 x3 a8 a8 a8 a6 a6 x6 a4 a2 a2";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1155 my $anisou_unpack = "x6 a5 x1 a4 a1 a3 x1 a1 a4 a1 x1 a7 a7 a7 a7 a7 a7 a4 a2 a2";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1157 my $model = Bio::Structure::Model->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1158 $model->id('default');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1159 my $noatom = $self->_noatom;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1160 my ($chain, $residue, $atom, $old);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1161 my (%_ch_in_model); # which chains are already in this model
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1163 $_ = $$buffer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1164 while (defined( $_ ||= $self->_readline )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1165 # start of a new model
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1166 if (/^MODEL\s+(\d+)/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1167 $model_num = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1168 $self->debug("_read_PDB_coor: parsing model $model_num\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1169 $model->id($model_num);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1170 if (/^MODEL\s+\d+\s+\S+/) { # old format (pre 2.1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1171 $old = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1172 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1173 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1174 # old hier ook setten XXX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1175 # ATOM lines, if first set chain
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1176 if (/^(ATOM |HETATM|SIGATM)/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1177 my @line_elements = unpack $atom_unpack, $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1178 my $pdb_atomname = $line_elements[1]; # need to get this before removing spaces
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1179 for my $k (0 .. $#line_elements) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1180 $line_elements[$k] =~ s/^\s+//; # remove leading space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1181 $line_elements[$k] =~ s/\s+$//; # remove trailing space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1182 $line_elements[$k] = undef if ($line_elements[$k] =~ /^\s*$/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1183 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1184 my ($serial, $atomname, $altloc, $resname, $chainID, $resseq, $icode, $x, $y, $z,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1185 $occupancy, $tempfactor, $segID, $element, $charge) = @line_elements;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1186 $chainID = 'default' if ( !defined $chainID );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1187 if ($chainID ne $chain_name) { # possibly a new chain
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1188 # fix for bug #1187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1189 # we can have ATOM/HETATM of an already defined chain (A B A B)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1190 # e.g. 1abm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1192 if (exists $_ch_in_model{$chainID} ) { # we have already seen this chain in this model
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1193 $chain = $_ch_in_model{$chainID};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1194 } else { # we create a new chain
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1195 $chain = Bio::Structure::Chain->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1196 $struc->add_chain($model,$chain);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1197 $chain->id($chainID);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1198 $_ch_in_model{$chainID} = $chain;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1199 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1200 $chain_name = $chain->id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1201 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1203 # fix from bug 1485, by dhoworth@mrc-lmb.cam.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1204 # passes visual inspection by Ewan and tests are ok.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1205 # (bug fix was to add $icode here to make unique)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1206 # original looked like
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1207 # my $res_name_num = $resname."-".$resseq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1209 # to get around warning, set icode to "" if not defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1210 if( !defined $icode ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1211 $icode = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1214 my $res_name_num = $resname."-".$resseq.$icode;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1215 if ($res_name_num ne $residue_name) { # new residue
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1216 $residue = Bio::Structure::Residue->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1217 $struc->add_residue($chain,$residue);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1218 $residue->id($res_name_num);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1219 $residue_name = $res_name_num;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1220 $atom_name = ""; # only needed inside a residue
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1221 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1222 # get out of here if we don't want the atom objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1223 if ($noatom) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1224 $_ = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1225 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1227 # alternative location: only take first one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1228 if ( $altloc && ($altloc =~ /\S+/) && ($atomname eq $atom_name) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1229 $_ = undef; # trigger reading next line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1230 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1231 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1232 if (/^(ATOM |HETATM)/) { # ATOM / HETATM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1233 $atom_name = $atomname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1234 $atom = Bio::Structure::Atom->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1235 $struc->add_atom($residue,$atom);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1236 $atom->id($atomname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1237 $atom->pdb_atomname($pdb_atomname); # store away PDB atomname for writing out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1238 $atom->serial($serial);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1239 $atom->icode($icode);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1240 $atom->x($x);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1241 $atom->y($y);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1242 $atom->z($z);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1243 $atom->occupancy($occupancy);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1244 $atom->tempfactor($tempfactor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1245 $atom->segID($segID); # deprecated but used by people
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1246 if (! $old ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1247 $atom->element($element);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1248 $atom->charge($charge);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1251 else { # SIGATM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1252 my $sigx = $x;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1253 my $sigy = $y;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1254 my $sigz = $z;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1255 my $sigocc = $occupancy;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1256 my $sigtemp = $tempfactor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1257 if ($atom_name ne $atomname) { # something wrong with PDB file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1258 $self->throw("A SIGATM record should have the same $atomname as the previous record $atom_name\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1259 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1260 $atom->sigx($sigx);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1261 $atom->sigy($sigy);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1262 $atom->sigz($sigz);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1263 $atom->sigocc($sigocc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1264 $atom->sigtemp($sigtemp);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1266 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1267 } # ATOM|HETARM|SIGATM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1269 # ANISOU | SIGUIJ lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1270 if (/^(ANISOU|SIGUIJ)/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1271 if ($noatom) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1272 $_ = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1273 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1275 my @line_elements = unpack $anisou_unpack, $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1276 for my $k (0 .. $#line_elements) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1277 $line_elements[$k] =~ s/^\s+//; # remove leading space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1278 $line_elements[$k] =~ s/\s+$//; # remove trailing space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1279 $line_elements[$k] = undef if ($line_elements[$k] =~ /^\s*$/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1280 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1281 my ($serial, $atomname, $altloc, $resname, $chainID, $resseq, $icode,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1282 $u11,$u22, $u33, $u12, $u13, $u23, $segID, $element, $charge) = @line_elements;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1283 $self->debug("read_PDB_coor: parsing ANISOU record: $serial $atomname\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1284 if ( $altloc && ($altloc =~ /\S+/) && ($atomname eq $atom_name) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1285 $_ = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1286 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1287 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1288 if (/^ANISOU/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1289 if ($atom_name ne $atomname) { # something wrong with PDB file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1290 $self->throw("A ANISOU record should have the same $atomname as the previous record $atom_name\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1291 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1292 $atom->aniso("u11",$u11);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1293 $atom->aniso("u22",$u22);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1294 $atom->aniso("u33",$u33);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1295 $atom->aniso("u12",$u12);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1296 $atom->aniso("u13",$u13);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1297 $atom->aniso("u23",$u23);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1298 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1299 else { # SIGUIJ
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1300 if ($atom_name ne $atomname) { # something wrong with PDB file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1301 $self->throw("A SIGUIJ record should have the same $atomname as the previous record $atom_name\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1302 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1303 # could use different variable names, but hey ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1304 $atom->aniso("sigu11",$u11);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1305 $atom->aniso("sigu22",$u22);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1306 $atom->aniso("sigu33",$u33);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1307 $atom->aniso("sigu12",$u12);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1308 $atom->aniso("sigu13",$u13);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1309 $atom->aniso("sigu23",$u23);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1310 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1311 } # ANISOU | SIGUIJ
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1313 if (/^TER /) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1314 $_ = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1315 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1316 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1318 if (/^ENDMDL/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1319 $_ = $self->_readline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1320 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1321 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1323 if (/^(CONECT|MASTER)/) { # get out of here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1324 # current line is OK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1325 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1326 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1327 $_ = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1329 } # while
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1331 $$buffer = $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1333 return $model;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1334 } # _read_PDB_coordinate_section
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1337 sub _write_PDB_simple_record {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1338 my ($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1339 my ($name, $cont , $annotation, $rol, $string) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1340 $self->_rearrange([qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1341 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1342 CONT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1343 ANNOTATION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1344 ROL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1345 STRING
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1346 )],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1347 @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1348 if (defined $string && defined $annotation) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1349 $self->throw("you can only supply one of -annoation or -string");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1350 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1351 my ($output_string, $ann_string, $t_string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1352 my ($rol_begin, $rol_end) = $rol =~ /^(\d+)-(\d+)$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1353 my $rol_length = $rol_end - $rol_begin +1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1354 if ($string) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1355 if (length $string > $rol_length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1356 # we might need to split $string in multiple lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1357 while (length $string > $rol_length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1358 # other option might be to go for a bunch of substr's
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1359 my @c = split//,$string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1360 my $t = $rol_length; # index into @c
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1361 while ($c[$t] ne " ") { # find first space, going backwards
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1362 $self->debug("c[t]: $c[$t] $t\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1363 $t--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1364 if ($t == 0) { $self->throw("Found no space for $string\n"); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1365 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1366 $self->debug("t: $t rol_length: $rol_length\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1367 $ann_string .= substr($string, 0, $t);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1368 $self->debug("ann_string: $ann_string\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1369 $ann_string .= " " x ($rol_length - $t );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1370 $string = substr($string, $t+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1371 $string =~ s/^\s+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1372 $self->debug("ann_string: $ann_string~~\nstring: $string~~\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1373 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1374 $ann_string .= $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1375 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1376 $ann_string = $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1377 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1378 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1379 $ann_string = $annotation->as_text;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1380 $ann_string =~ s/^Value: //;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1381 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1382 # ann_string contains the thing to write out, writing out happens below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1383 my $ann_length = length $ann_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1385 $self->debug("ann_string: $ann_string\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1386 if ($cont) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1387 my ($c_begin, $c_end) = $cont =~ /^(\d+)-(\d+)$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1388 if ( $ann_length > $rol_length ) { # we need to continuation lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1389 my $first_line = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1390 my $cont_number = 2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1391 my $out_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1392 my $num_pos = $rol_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1393 my $i = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1394 while( $i < $ann_length ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1395 $t_string = substr($ann_string, $i, $num_pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1396 $self->debug("t_string: $t_string~~$i $num_pos\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1397 if ($first_line) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1398 $out_line = $name . " " x ($rol_begin - $c_begin) . $t_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1399 $out_line .= " " x (80 - length($out_line) ) . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1400 $first_line = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1401 $output_string = $out_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1402 $i += $num_pos; # first do counter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1403 if ($rol_begin - $c_end == 1) { # next line one character less
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1404 $num_pos--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1405 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1406 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1407 $out_line = $name . sprintf("%2d",$cont_number);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1408 # a space after continuation number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1409 if ($rol_begin - $c_end == 1) { # one space after cont number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1410 $out_line .= " ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1411 $out_line .= $t_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1412 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1413 $out_line .= " " x ($rol_begin - $c_end - 1) . $t_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1414 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1415 $out_line .= " " x (80 -length($out_line) ) . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1416 $cont_number++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1417 $output_string .= $out_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1418 $i += $num_pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1419 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1420 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1421 } else { # no continuation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1422 my $spaces = $rol_begin - $c_begin; # number of spaces need to insert
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1423 $output_string = $name . " " x $spaces . $ann_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1424 $output_string .= " " x (80 - length($output_string) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1425 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1426 } else { # no contintuation lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1427 if ($ann_length < $rol_length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1428 $output_string = $name . $ann_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1429 $output_string .= " " x (80 - length($output_string) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1430 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1431 for (my $i = 0; $i < $ann_length; $i += $rol_length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1432 my $out_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1433 $t_string = substr($ann_string, $i, $rol_length);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1434 $out_line = $name . $t_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1435 $out_line .= " " x (80 -length($out_line) ) . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1436 $output_string .= $out_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1437 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1438 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1440 $output_string =~ s/\n$//; # remove trailing newline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1441 $self->_print("$output_string\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1443 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1445 sub _write_PDB_remark_record {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1446 my ($self, $struc, $remark_num) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1447 my ($ann) = $struc->annotation->get_Annotations("remark_$remark_num");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1448 my $name = sprintf("REMARK %3d ",$remark_num);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1449 $self->_write_PDB_simple_record(-name => $name, -annotation => $ann, -rol => "12-70");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1450 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1452 1;