annotate lib/PDBFileUtil.pm @ 0:4816e4a8ae95 draft default tip

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 09:23:18 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1 package PDBFileUtil;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: PDBFileUtil.pm,v $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:47:18 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.36 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
6 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
8 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
10 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
12 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
17 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
22 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
27 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
28
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
30 use Exporter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
31 use Text::ParseWords;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
32 use TextUtil;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
33 use FileUtil;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
34 use TimeUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
35
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
36 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
37
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
38 @ISA = qw(Exporter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
39 @EXPORT = qw(GetPDBRecordType GetRecordTypesCount GetAllResidues GetConectRecordLines GetChainsAndResidues GetExperimentalTechnique GetExperimentalTechniqueResolution GetMinMaxCoords IsPDBFile IsAtomRecordType IsConectRecordType IsHeaderRecordType IsHetatmRecordType IsSeqresRecordType IsModelRecordType IsEndmdlRecordType IsTerRecordType IsMasterRecordType ReadPDBFile ParseHeaderRecordLine GenerateHeaderRecordLine GenerateHeaderRecordTimeStamp ParseAtomRecordLine GenerateAtomRecordLine ParseAtomOrHetatmRecordLine GenerateAtomOrHetatmRecordLine GenerateHetatmRecordLine ParseHetatmRecordLine ParseConectRecordLine GenerateConectRecordLine ParseExpdtaRecordLine ParseRemark2ResolutionRecordLine ParseSeqresRecordLine ParseTerRecordLine GenerateTerRecordLine ParseMasterRecordLine GenerateEndRecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
40 @EXPORT_OK = qw();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
41
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
42 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
43
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
44 # Get PDB record type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
45 sub GetPDBRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
46 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
47
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
48 return _GetRecordType($Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
49 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
50
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
51 # Is it a PDB file?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
52 sub IsPDBFile {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
53 my($PDBFile) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
54 my($Line, $Status);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
55
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
56 $Status = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
57 open PDBFILE, "$PDBFile" or die "Can't open $PDBFile: $!\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
58 $Line = GetTextLine(\*PDBFILE);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
59 $Status = ($Line =~ /^HEADER/i) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
60 close PDBFILE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
61
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
62 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
63 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
64
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
65 # Is it a atom record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
66 sub IsAtomRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
67 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
68
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
69 return _IsRecordType($Line, 'ATOM');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
70 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
71
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
72 # Is it a connect record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
73 sub IsConectRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
74 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
75
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
76 return _IsRecordType($Line, 'CONECT');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
77 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
78
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
79 # Is it a header atom record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
80 sub IsHeaderRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
81 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
82
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
83 return _IsRecordType($Line, 'HEADER');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
84 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
85
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
86 # Is it a hetro atom record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
87 sub IsHetatmRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
88 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
89
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
90 return _IsRecordType($Line, 'HETATM');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
91 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
92
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
93 # Is it a seqres record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
94 sub IsSeqresRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
95 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
96
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
97 return _IsRecordType($Line, 'SEQRES');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
98 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
99
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
100 # Is it a MODEL record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
101 sub IsModelRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
102 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
103
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
104 return _IsRecordType($Line, 'MODEL');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
105 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
106
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
107 # Is it a ENDMDL record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
108 sub IsEndmdlRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
109 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
110
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
111 return _IsRecordType($Line, 'ENDMDL');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
112 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
113
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
114 # Is it a TER record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
115 sub IsTerRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
116 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
117
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
118 return _IsRecordType($Line, 'TER');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
119 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
120
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
121 # Is it a MASTER record type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
122 sub IsMasterRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
123 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
124
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
125 return _IsRecordType($Line, 'MASTER');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
126 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
127
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
128 # Count the number of each record type and a reference to data type with these key/value pairs:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
129 # {RecordTypes} - An array of unique record types in order of their presence in the file
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
130 # {Count}{$RecordType} - Count of each record type
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
131 # {Lines}{$RecordType} - Optional lines data for a specific record type.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
132 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
133 sub GetRecordTypesCount {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
134 my($PDBRecordLinesRef, $SpecifiedRecordType, $GetRecordLinesFlag, $RecordType, $RecordLine, %RecordTypeDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
135
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
136 %RecordTypeDataMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
137 @{$RecordTypeDataMap{RecordTypes}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
138 %{$RecordTypeDataMap{Count}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
139 %{$RecordTypeDataMap{Lines}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
140
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
141 $SpecifiedRecordType = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
142 $GetRecordLinesFlag = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
143 if (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
144 ($PDBRecordLinesRef, $SpecifiedRecordType, $GetRecordLinesFlag) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
145 $SpecifiedRecordType = uc $SpecifiedRecordType;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
146 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
147 elsif (@_ == 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
148 ($PDBRecordLinesRef, $SpecifiedRecordType) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
149 $SpecifiedRecordType = uc $SpecifiedRecordType;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
150 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
151 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
152 ($PDBRecordLinesRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
153 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
154 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
155 $RecordType = _GetRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
156 if ($SpecifiedRecordType && ($SpecifiedRecordType ne $RecordType)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
157 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
158 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
159 if (exists $RecordTypeDataMap{Count}{$RecordType}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
160 # Update count...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
161 $RecordTypeDataMap{Count}{$RecordType} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
162
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
163 if ($GetRecordLinesFlag) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
164 push @{$RecordTypeDataMap{Lines}{$RecordType}}, $RecordLine;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
165 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
166 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
167 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
168 # New record type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
169 push @{$RecordTypeDataMap{RecordTypes}}, $RecordType;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
170 $RecordTypeDataMap{Count}{$RecordType} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
171
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
172 if ($GetRecordLinesFlag) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
173 @{$RecordTypeDataMap{Lines}{$RecordType}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
174 push @{$RecordTypeDataMap{Lines}{$RecordType}}, $RecordLine;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
175 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
176 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
177 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
178 return (\%RecordTypeDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
179 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
180
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
181 # Collect CONECT record lines for specific atom number, modified specified data to exclude any atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
182 # number not present in the list of specified atom numbers and return a reference to list of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
183 # CONECT record lines.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
184 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
185 sub GetConectRecordLines {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
186 my($PDBRecordLinesRef, $AtomNumbersMapRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
187 my($AtomNumber, $ConectAtomNumber, $RecordLine, @ConectRecordAtomNums, @ConectRecordLines);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
188
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
189 @ConectRecordLines = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
190 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
191 if (!IsConectRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
192 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
193 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
194 @ConectRecordAtomNums = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
195 push @ConectRecordAtomNums, ParseConectRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
196 ATOMNUMBER: for $ConectAtomNumber (@ConectRecordAtomNums) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
197 if (defined $ConectAtomNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
198 $AtomNumber = $ConectAtomNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
199 if ($AtomNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
200 if (! exists $AtomNumbersMapRef->{$AtomNumber}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
201 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
202 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
203 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
204 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
205 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
206 push @ConectRecordLines, $RecordLine;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
207 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
208 return \@ConectRecordLines;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
209 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
210
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
211 # Get chains and residue information using ATOM/HETATM or SEQRES records. And return a reference to a
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
212 # hash with these keys:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
213 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
214 # @{$ChainsDataMap{ChainIDs}} - List of chain IDs with 'None' for no chain identification
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
215 # @{$ChainsDataMap{Residues}{$ChainID}} - List of residues in order of their appearance in a chain
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
216 # @{$ChainsDataMap{ResidueNumbers}{$ChainID}} - List of residue numbers in order of their appearance in a chain
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
217 # %{$ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName}} - Count of specific residues in a chain
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
218 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
219 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
220 # . Chains and residue data can be extacted using either ATOM/HETATM records or SEQRES records.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
221 # . In addition to a different chain ID in ATOM/HETATM a TER record also indicates end of an existing chain
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
222 # and start of a new one: ChainID in ATOM/HETATM records might still be emtpy.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
223 # . ATOM/HETATM records after the first ENDMDL records are simply ingnored.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
224 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
225 sub GetChainsAndResidues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
226 my($PDBRecordLinesRef, $RecordsSource, $GetChainResiduesBeyondTERFlag, $GetRecordLinesFlag);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
227
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
228 $RecordsSource = 'AtomAndHetatm';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
229 $GetChainResiduesBeyondTERFlag = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
230 $GetRecordLinesFlag = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
231
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
232 if (@_ == 4) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
233 ($PDBRecordLinesRef, $RecordsSource, $GetChainResiduesBeyondTERFlag, $GetRecordLinesFlag) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
234 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
235 elsif (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
236 ($PDBRecordLinesRef, $RecordsSource, $GetChainResiduesBeyondTERFlag) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
237 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
238 elsif (@_ == 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
239 ($PDBRecordLinesRef, $RecordsSource) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
240 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
241 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
242 ($PDBRecordLinesRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
243 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
244
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
245 if ($RecordsSource =~ /^AtomAndHetatm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
246 return _GetChainsAndResiduesFromAtomHetatmRecords($PDBRecordLinesRef, $GetChainResiduesBeyondTERFlag, $GetRecordLinesFlag);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
247 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
248 elsif ($RecordsSource =~ /^Seqres$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
249 return _GetChainsAndResiduesFromSeqresRecords($PDBRecordLinesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
250 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
251 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
252 my(%ChainsDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
253 %ChainsDataMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
254 @{$ChainsDataMap{ChainIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
255 %{$ChainsDataMap{Residues}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
256 %{$ChainsDataMap{ResidueNumbers}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
257 %{$ChainsDataMap{ResidueCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
258
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
259 return \%ChainsDataMap;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
260 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
261 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
262
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
263
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
264 # Get residue information using ATOM/HETATM records and return a reference to a hash with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
265 # these keys:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
266 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
267 # @{$ResiduesDataMap{ResidueNames}} - List of all the residues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
268 # %{$ResiduesDataMap{ResidueCount}{$ResidueName}} - Count of residues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
269 # @{$ResiduesDataMap{AtomResidueNames}} - List of all the residues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
270 # %{$ResiduesDataMap{AtomResidueCount}{$ResidueName}} - Count of residues in ATOM records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
271 # @{$ResiduesDataMap{HetatomResidueNames}} - List of all the residues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
272 # %{$ResiduesDataMap{HetatmResidueCount}{$ResidueName}} - Count of residues HETATM records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
273 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
274 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
275 # . ATOM/HETATM records after the first ENDMDL records are simply ingnored.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
276 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
277 sub GetAllResidues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
278 my($PDBRecordLinesRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
279
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
280 my($PreviousChainID, $PreviousResidueNumber, $RecordLine, $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge, %ResiduesDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
281
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
282 %ResiduesDataMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
283 @{$ResiduesDataMap{ResidueNames}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
284 %{$ResiduesDataMap{ResidueCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
285 @{$ResiduesDataMap{AtomResidueNames}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
286 %{$ResiduesDataMap{AtomResidueCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
287 @{$ResiduesDataMap{HetatmResidueNames}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
288 %{$ResiduesDataMap{HetatmResidueCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
289
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
290 $PreviousChainID = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
291 $PreviousResidueNumber = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
292
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
293 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
294 if (IsEndmdlRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
295 last LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
296 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
297 if (!(IsAtomRecordType($RecordLine) || IsHetatmRecordType($RecordLine))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
298 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
299 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
300 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = ParseAtomRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
301
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
302 if ($PreviousChainID eq $ChainID) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
303 if ($ResidueNumber == $PreviousResidueNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
304 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
305 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
306 $PreviousResidueNumber = $ResidueNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
307 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
308 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
309 # New chain...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
310 $PreviousChainID = $ChainID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
311 $PreviousResidueNumber = $ResidueNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
312 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
313
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
314 # Store the residue and update its count...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
315 push @{$ResiduesDataMap{ResidueNames}}, $ResidueName;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
316 if (exists $ResiduesDataMap{ResidueCount}{$ResidueName}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
317 $ResiduesDataMap{ResidueCount}{$ResidueName} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
318 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
319 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
320 $ResiduesDataMap{ResidueCount}{$ResidueName} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
321 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
322 # Update ATOM residue data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
323 if (IsAtomRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
324 push @{$ResiduesDataMap{AtomResidueNames}}, $ResidueName;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
325 if (exists $ResiduesDataMap{AtomResidueCount}{$ResidueName}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
326 $ResiduesDataMap{AtomResidueCount}{$ResidueName} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
327 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
328 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
329 $ResiduesDataMap{AtomResidueCount}{$ResidueName} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
330 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
331 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
332 # Update HETATM residue data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
333 if (IsHetatmRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
334 push @{$ResiduesDataMap{HetatmResidueNames}}, $ResidueName;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
335 if (exists $ResiduesDataMap{HetatmResidueCount}{$ResidueName}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
336 $ResiduesDataMap{HetatmResidueCount}{$ResidueName} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
337 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
338 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
339 $ResiduesDataMap{HetatmResidueCount}{$ResidueName} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
340 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
341 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
342 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
343
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
344 return \%ResiduesDataMap;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
345 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
346
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
347 # Return min/max XYZ coordinates for ATOM/HETATM records...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
348 sub GetMinMaxCoords {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
349 my($PDBRecordLinesRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
350
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
351 my($XMin, $YMin, $ZMin, $XMax, $YMax, $ZMax, $RecordLine, $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
352
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
353 ($XMin, $YMin, $ZMin) = (99999) x 3;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
354 ($XMax, $YMax, $ZMax) = (-99999) x 3;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
355
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
356 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
357 if (!(IsAtomRecordType($RecordLine) || IsHetatmRecordType($RecordLine))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
358 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
359 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
360 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = ParseAtomRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
361
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
362 $XMin = ($X < $XMin) ? $X : $XMin;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
363 $YMin = ($Y < $YMin) ? $Y : $YMin;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
364 $ZMin = ($Z < $ZMin) ? $Z : $ZMin;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
365
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
366 $XMax = ($X > $XMax) ? $X : $XMax;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
367 $YMax = ($Y > $YMax) ? $Y : $YMax;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
368 $ZMax = ($Z > $ZMax) ? $Z : $ZMax;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
369 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
370
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
371 if ($XMin == 99999) { $XMin = undef; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
372 if ($YMin == 99999) { $YMin = undef; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
373 if ($ZMin == 99999) { $ZMin = undef; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
374 if ($XMax == -99999) { $XMax = undef; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
375 if ($YMax == -99999) { $YMax = undef; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
376 if ($ZMax == -99999) { $ZMax = undef; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
377
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
378 return ($XMin, $YMin, $ZMin, $XMax, $YMax, $ZMax);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
379 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
380
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
381 # Read PDB file and return reference to record lines..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
382 sub ReadPDBFile {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
383 my($PDBFile) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
385 my($Line, @PDBRecordLines);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
386
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
387 @PDBRecordLines = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
388 open PDBFILE, "$PDBFile" or die "Can't open $PDBFile: $!\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
389 while ($Line = GetTextLine(\*PDBFILE)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
390 push @PDBRecordLines, $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
391 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
392
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
393 close PDBFILE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
394
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
395 return (\@PDBRecordLines);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
396 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
397
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
398 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
399 # Get experimental technique information...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
400 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
401 sub GetExperimentalTechnique {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
402 my($PDBRecordLinesRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
403 my($RecordLine, $ContinuationNum, $ExperimentalTechnique);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
404
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
405 $ExperimentalTechnique = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
407 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
408 if (_IsRecordType($RecordLine, 'EXPDTA')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
409 ($ContinuationNum, $ExperimentalTechnique) = ParseExpdtaRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
410 last LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
411 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
412 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
413
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
414 return $ExperimentalTechnique;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
415 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
416
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
417 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
418 # Get experimental technique resolution information...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
419 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
420 sub GetExperimentalTechniqueResolution {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
421 my($PDBRecordLinesRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
422 my($RecordLine, $Resolution, $ResolutionUnits);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
423
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
424 ($Resolution, $ResolutionUnits) = ((undef) x 2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
425
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
426 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
427 if ($RecordLine =~ /^REMARK 2 RESOLUTION./i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
428 ($Resolution, $ResolutionUnits) = ParseRemark2ResolutionRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
429 last LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
430 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
431 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
432
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
433 return ($Resolution, $ResolutionUnits);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
434 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
435
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
436 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
437 # Parse HEADER record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
438 sub ParseHeaderRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
439 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
440 my($Classification, $DepositionDate, $IDCode) = (undef, undef, undef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
441
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
442 if ($Line !~ /^HEADER/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
443 return ($Classification, $DepositionDate, $IDCode);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
444 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
445 my($Length);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
446
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
447 ($Classification, $DepositionDate, $IDCode) = ('') x 3;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
448
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
449 $Length = length $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
450
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
451 if ($Length <= 62) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
452 ($Classification, $DepositionDate) = unpack("x10A40A9", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
453 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
454 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
455 ($Classification, $DepositionDate, $IDCode) = unpack("x10A40A9x3A4", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
456 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
457
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
458 $Classification = RemoveLeadingAndTrailingWhiteSpaces($Classification);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
459 $DepositionDate =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
460 $IDCode =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
461
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
462 return ($Classification, $DepositionDate, $IDCode);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
463 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
464
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
465 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
466 # Generate HEADER record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
467 sub GenerateHeaderRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
468 my($Classification, $Date, $IDCode, $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
469
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
470 $Classification = "Created using MayaChemTools";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
471 $Date = GenerateHeaderRecordTimeStamp();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
472 if (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
473 ($IDCode, $Classification, $Date) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
474 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
475 elsif (@_ == 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
476 ($IDCode, $Classification) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
477 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
478 elsif (@_ == 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
479 ($IDCode) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
480 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
482 $Line = sprintf "HEADER %-40.40s%9.9s %4.4s", $Classification, $Date, $IDCode;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
483 return $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
484 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
485
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
486 # Generate PDB header time stamp...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
487 sub GenerateHeaderRecordTimeStamp {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
488 return TimeUtil::PDBFileTimeStamp();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
489 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
490
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
491 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
492 # Parse ATOM record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
493 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
494 sub ParseAtomRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
495 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
496
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
497 return _ParseAtomOrHetatmRecordLine($Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
498 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
499
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
500 # Generate ATOM record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
501 sub GenerateAtomRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
502 my($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
503
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
504 return _GenerateAtomOrHetatmRecordLine('ATOM', $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
505 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
506
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
507 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
508 # Parse ATOM/HETATm record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
509 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
510 sub ParseAtomOrHetatmRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
511 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
512
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
513 return _ParseAtomOrHetatmRecordLine($Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
514 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
515
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
516 # Generate ATOM/HETATM record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
517 sub GenerateAtomOrHetatmRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
518 my($RecordType, $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
519
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
520 return _GenerateAtomOrHetatmRecordLine($RecordType, $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
521 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
522 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
523 # Parse HETATM record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
524 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
525 sub ParseHetatmRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
526 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
527
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
528 return _ParseAtomOrHetatmRecordLine($Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
529 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
530
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
531 # Generate HETATM record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
532 sub GenerateHetatmRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
533 my($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
534
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
535 return _GenerateAtomOrHetatmRecordLine('HETATM', $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
536 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
537
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
538 # Parse EXPDTA record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
539 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
540 # EXPDTA format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
541 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
542 #1 - 6 Record name "EXPDTA"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
543 # 9 - 10 Continuation continuation Allows concatenation of multiple records.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
544 # 11 - 70 SList technique The experimental technique(s) with optional comment describing the sample or experiment.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
545 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
546 # The EXPDTA record identifies the experimental technique used. This may refer to the type of radiation and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
547 # sample, or include the spectroscopic or modeling technique. Permitted values include:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
548 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
549 # ELECTRON DIFFRACTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
550 # FIBER DIFFRACTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
551 # FLUORESCENCE TRANSFER
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
552 # NEUTRON DIFFRACTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
553 # NMR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
554 # THEORETICAL MODEL
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
555 # X-RAY DIFFRACTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
556 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
557 sub ParseExpdtaRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
558 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
559
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
560 if ($Line !~ /^EXPDTA/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
561 return ((undef) x 2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
562 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
563
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
564 my($ContinuationNum, $ExperimentalTechnique) = unpack("x8A2A60" , $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
565
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
566 $ContinuationNum =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
567 $ExperimentalTechnique = RemoveLeadingAndTrailingWhiteSpaces($ExperimentalTechnique);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
568
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
569 return ($ContinuationNum, $ExperimentalTechnique);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
570 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
571
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
572 # Parse REMARK 2 record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
573 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
574 # REMARK 2 format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
575 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
576 # The second REMARK 2 record has one of two formats. The first is used for diffraction studies, the second
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
577 # for other types of experiments in which resolution is not relevant, e.g., NMR and theoretical modeling.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
578 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
579 #For diffraction experiments:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
580 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
581 # 1 - 6 Record name "REMARK"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
582 # 10 LString(1) "2"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
583 # 12 - 22 LString(11) "RESOLUTION."
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
584 # 23 - 27 Real(5.2) resolution Resolution.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
585 # 29 - 38 LString(10) "ANGSTROMS."
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
586 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
587 # REMARK 2 when not a diffraction experiment:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
588 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
589 # 1 - 6 Record name "REMARK"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
590 # 10 LString(1) "2"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
591 # 12 - 38 LString(28) "RESOLUTION. NOT APPLICABLE."
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
592 # 41 - 70 String comment Comment.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
593 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
594 sub ParseRemark2ResolutionRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
595 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
596
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
597 if ($Line !~ /^REMARK 2 RESOLUTION./i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
598 return ((undef) x 2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
599 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
600
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
601 my($Resolution, $ResolutionUnits);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
602
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
603 if ($Line =~ /NOT APPLICABLE/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
604 ($Resolution, $ResolutionUnits) = ("NOT APPLICABLE", "");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
605 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
606 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
607 ($Resolution, $ResolutionUnits) = unpack("x22A5x1A10" , $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
608 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
609
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
610 $Resolution = RemoveLeadingAndTrailingWhiteSpaces($Resolution);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
611
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
612 $ResolutionUnits = RemoveLeadingAndTrailingWhiteSpaces($ResolutionUnits);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
613 $ResolutionUnits =~ s/\.$//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
614
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
615 return ($Resolution, $ResolutionUnits);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
616 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
617
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
618 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
619 # Parse SEQRES record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
620 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
621 # SEQRES format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
622 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
623 # 1 - 6 Record name "SEQRES"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
624 # 9 - 10 Serial number of the SEQRES record for the current chain. Starts at 1 and increments by one each line. Reset to 1 for each chain.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
625 # 12 - Chain identifier
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
626 # 14 - 17 Integer numRes Number of residues in the chain
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
627 # 20 - 22 24 -26 ... ... 68 - 70 Residue name resName Residue name.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
628 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
629 sub ParseSeqresRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
630 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
631
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
632 if ($Line !~ /^SEQRES/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
633 return ((undef) x 5);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
634 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
635 my($RecordSerialNumber, $ChainID, $NumOfResidues, $ResidueNames) = unpack("x8A2x1A1x1A4x2A51" , $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
636 $RecordSerialNumber =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
637 $ChainID =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
638 $NumOfResidues =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
639 $ResidueNames = RemoveLeadingAndTrailingWhiteSpaces($ResidueNames);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
640
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
641 return ($RecordSerialNumber, $ChainID, $NumOfResidues, $ResidueNames);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
642 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
643
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
644 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
645 # Parse CONECT record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
646 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
647 # CONECT format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
648 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
649 # 1 - 6 Record name "CONECT"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
650 # 7 - 11 Atom number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
651 # 12 - 16, 17 - 21, 22 - 26, 27 - 31 Atom number of bonded atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
652 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
653 # 32 - 36, 37 - 41 Atom number of hydrogen bonded atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
654 # 42 - 46 Atom number of salt bridged atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
655 # 47 - 51, 52 -56 Atom number of hydrogen bonded atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
656 # 57 - 61 Atom number of salt bridged atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
657 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
658 sub ParseConectRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
659 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
660
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
661 if ($Line !~ /^CONECT/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
662 return ((undef) x 11);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
663 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
664 my($AtomNum, $BondedAtomNum1, $BondedAtomNum2, $BondedAtomNum3, $BondedAtomNum4, $HBondedAtomNum1, $HBondedAtomNum2, $SaltBridgedAtomNum1, $HBondedAtomNum3, $HBondedAtomNum4, $SaltBridgedAtomNum2) = map {s/ //g; $_} unpack("x6A5A5A5A5A5A5A5A5A5A5A5", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
665
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
666 return ($AtomNum, $BondedAtomNum1, $BondedAtomNum2, $BondedAtomNum3, $BondedAtomNum4, $HBondedAtomNum1, $HBondedAtomNum2, $SaltBridgedAtomNum1, $HBondedAtomNum3, $HBondedAtomNum4, $SaltBridgedAtomNum2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
667 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
668
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
669 # Generate CONECT record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
670 sub GenerateConectRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
671 my($AtomNum, $BondedAtomNum1, $BondedAtomNum2, $BondedAtomNum3, $BondedAtomNum4, $HBondedAtomNum1, $HBondedAtomNum2, $SaltBridgedAtomNum1, $HBondedAtomNum3, $HBondedAtomNum4, $SaltBridgedAtomNum2) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
672 my($Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
673
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
674 $Line = sprintf "CONECT%5.5s%5.5s%5.5s%5.5s%5.5s%5.5s%5.5s%5.5s%5.5s%5.5s%5.5s", $AtomNum, $BondedAtomNum1, $BondedAtomNum2, $BondedAtomNum3, $BondedAtomNum4, $HBondedAtomNum1, $HBondedAtomNum2, $SaltBridgedAtomNum1, $HBondedAtomNum3, $HBondedAtomNum4, $SaltBridgedAtomNum2;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
675
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
676 return $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
677 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
678
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
679 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
680 # Parse TER record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
681 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
682 # TER format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
683 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
684 #1 - 6 Record name "TER "
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
685 # 7 - 11 Serial number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
686 # 18 - 20 Residue name
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
687 # 22 Chain identifier
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
688 # 23 - 26 Residue sequence number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
689 # 27 Insertion code
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
690 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
691 sub ParseTerRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
692 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
693
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
694 if ($Line !~ /^TER/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
695 return ((undef) x 5);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
696 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
697 my($SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $Length);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
698
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
699 ($SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode) = ('') x 5;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
700
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
701 $Length = length $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
702
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
703 if ($Length <= 17) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
704 ($SerialNumber, $ResidueName) = map {s/ //g; $_} unpack("x6A5", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
705 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
706 elsif ($Length <= 21) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
707 ($SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode) = map {s/ //g; $_} unpack("x6A5x6A3", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
708 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
709 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
710 ($SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode) = map {s/ //g; $_} unpack("x6A5x6A3xA1A4A1", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
711 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
712
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
713 return ($SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
714 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
715
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
716 # Generate TER record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
717 sub GenerateTerRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
718 my($SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $Line) = ('') x 6;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
719
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
720 if (@_ == 5) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
721 ($SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
722 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
723 elsif (@_ == 4) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
724 ($SerialNumber, $ResidueName, $ChainID, $ResidueNumber) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
725 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
726 elsif (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
727 ($SerialNumber, $ResidueName) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
728 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
729 elsif (@_ == 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
730 ($SerialNumber, $ResidueName) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
731 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
732 elsif (@_ == 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
733 ($SerialNumber) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
734 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
735 $Line = sprintf "TER %5.5s %-3.3s %1.1s%4.4s%1.1s", $SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
736
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
737 return $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
738 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
739
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
740 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
741 # Parse MASTER record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
742 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
743 # MASTER record format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
744 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
745 #1 - 6 Record name "MASTER"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
746 # 11 - 15 Number of REMARK records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
747 # 16 - 20 "0"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
748 # 21 - 25 Number of HET records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
749 # 26 - 30 Number of HELIX records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
750 # 31 - 35 Number of SHEET records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
751 # 36 - 40 Number of TURN records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
752 # 41 - 45 Number of SITE records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
753 # 46 - 50 Number of coordinate transformation records (ORIGXn+SCALEn+MTRIXn)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
754 # 51 - 55 Number of atomic coordinate records (ATOM+HETATM)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
755 # 56 - 60 Number of TER records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
756 # 61 - 65 Number of CONECT records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
757 # 66 - 70 Number of SEQRES records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
758 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
759 sub ParseMasterRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
760 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
761
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
762 if ($Line !~ /^MASTER/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
763 return ((undef) x 11);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
764 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
765 my($NumOfRemarkRecords, $NumOfHetRecords, $NumOfHelixRecords, $NumOfSheetRecords, $NumOfTurnRecords, $NumOfSiteRecords, $NumOfTransformationsRecords, $NumOfAtomAndHetatmRecords, $NumOfTerRecords, $NumOfConectRecords, $NumOfSeqresRecords) = map {s/ //g; $_} unpack("x6x4A5x5A5A5A5A5A5A5A5A5A5A5", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
766
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
767 return ($NumOfRemarkRecords, $NumOfHetRecords, $NumOfHelixRecords, $NumOfSheetRecords, $NumOfTurnRecords, $NumOfSiteRecords, $NumOfTransformationsRecords, $NumOfAtomAndHetatmRecords, $NumOfTerRecords, $NumOfConectRecords, $NumOfSeqresRecords);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
768 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
769
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
770 # End record...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
771 sub GenerateEndRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
772 my($Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
773 $Line = 'END ';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
774 return $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
775 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
776
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
777 # ATOM/HETATM record format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
778 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
779 # 1 - 6 Record name
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
780 # 7 - 11 Atom serial number - right justified
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
781 # 13 - 16 Atom name
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
782 # 17 Alternate location indicator.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
783 # 18 - 20 Residue name - right justified
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
784 # 22 Chain identifier.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
785 # 23 - 26 Residue sequence number - right justified
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
786 # 27 Code for insertion of residues.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
787 # 31 - 38 Real(8.3), Orthogonal coordinates for X in Angstroms.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
788 # 39 - 46 Real(8.3), Orthogonal coordinates for Y in Angstroms.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
789 # 47 - 54 Real(8.3), Orthogonal coordinates for Z in Angstroms.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
790 # 55 - 60 Real(6.2), Occupancy
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
791 # 61 - 66 Real(6.2), Temperature factor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
792 # 73 - 76 LString(4), Segment identifier, left-justified.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
793 # 77 - 78 LString(2), Element symbol, right-justified.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
794 #79 - 80 LString(2), Charge on the atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
795 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
796 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
797 # . Atom names starting with C, N, O and S are left justified starting with column 14
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
798 # and others are left justified starting with column 13.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
799 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
800 # . Six characters (columns) are reserved for atom names, assigned as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
801 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
802 # 13 - 14 Chemical symbol - right justified, except for hydrogen atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
803 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
804 # And for amino acids:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
805 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
806 # 15 Remoteness indicator (alphabetic) (A, B, G, D, E, Z and so on)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
807 # 16 Branch designator (numeric)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
808 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
809 sub _ParseAtomOrHetatmRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
810 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
811
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
812 if ($Line !~ /^(ATOM|HETATM)/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
813 return ((undef) x 15);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
814 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
815 my($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge, $Length);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
816
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
817 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = ('') x 15;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
818
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
819 $Length = length $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
820
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
821 if ($Length <= 72) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
822 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor) = map {s/ //g; $_} unpack("x6A5xA4A1A3xA1A4A1x3A8A8A8A6A6", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
823 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
824 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
825 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = map {s/ //g; $_} unpack("x6A5xA4A1A3xA1A4A1x3A8A8A8A6A6x6A4A2A2", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
826 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
827 return($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
828 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
830 # Generate ATOM/HETATM record line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
831 sub _GenerateAtomOrHetatmRecordLine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
832 my($RecordType, $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
833 my($Line, $AtomNameFormat);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
834
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
835 if (length($AtomName) >= 4) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
836 # Left justified starting at column 13 for all atom names of length 4...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
837 $AtomNameFormat = "%-4.4s";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
838 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
839 elsif (IsEmpty($ElementSymbol)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
840 # No element symbol specified; just guess from atom name to cover most likely cases...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
841 $AtomNameFormat = ($AtomName =~ /^(C|N|O|S)/i) ? " %-3.3s" : "%-4.4s";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
842 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
843 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
844 # Element symbol specified...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
845 if ($ElementSymbol =~ /^H$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
846 # Hydrogen atom name with <=3 characters is left justified starting at column 14;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
847 # Otherwise, left justified starting at column 13.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
848 $AtomNameFormat = (length($AtomName) <= 3) ? " %-3.3s" : "%-4.4s";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
849 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
850 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
851 # Non-hydrogen atom name...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
852 $AtomNameFormat = (length($ElementSymbol) == 1) ? " %-3.3s" : "%-4.4s";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
853 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
854 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
855
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
856 $Line = sprintf "%-6.6s%5.5s ${AtomNameFormat}%1.1s%3.3s %1.1s%4.4s%1.1s %8.8s%8.8s%8.8s%6.6s%6.6s %-4.4s%2.2s%2.2s", $RecordType, $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
857
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
858 return $Line;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
859 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
860
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
861 # Check record type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
862 sub _IsRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
863 my($Line, $SpecifiedType) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
864 my($Type, $Status);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
865
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
866 ($Type) = map {s/ //g; $_} unpack("A6", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
867
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
868 $Status = ($SpecifiedType eq $Type) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
869
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
870 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
871 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
872
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
873 # Get record type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
874 sub _GetRecordType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
875 my($Line) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
876 my($Type);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
877
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
878 ($Type) = map {s/ //g; $_} unpack("A6", $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
879
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
880 return $Type;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
881 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
882
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
883 # Get chains and residues data using ATOM/HETATM records...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
884 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
885 sub _GetChainsAndResiduesFromAtomHetatmRecords {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
886 my($PDBRecordLinesRef, $GetChainResiduesBeyondTERFlag, $GetRecordLinesFlag) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
887
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
888 my($LineCount, $TotalChainCount, $PreviousResidueNumber, $ChainCount, $DefaultChainID, $DefaultChainLabel, $RecordLine, $AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge, %ChainsDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
889
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
890 # Do a quick chain count using TER record...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
891 $TotalChainCount = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
892 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
893 if (IsEndmdlRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
894 last LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
895 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
896 if (IsTerRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
897 $TotalChainCount++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
898 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
899 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
900
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
901 %ChainsDataMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
902 @{$ChainsDataMap{ChainIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
903 %{$ChainsDataMap{Residues}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
904 %{$ChainsDataMap{ResidueNumbers}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
905 %{$ChainsDataMap{Lines}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
906 %{$ChainsDataMap{ResidueCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
907
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
908 $LineCount = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
909 $ChainCount = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
910 $DefaultChainLabel = 'None';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
911 $DefaultChainID = $DefaultChainLabel . ($ChainCount + 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
912 $PreviousResidueNumber = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
913
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
914 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
915 $LineCount++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
916 if (IsTerRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
917 $DefaultChainID = $DefaultChainLabel . ($ChainCount + 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
918 $ChainCount++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
919 if ($ChainCount == $TotalChainCount) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
920 last LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
921 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
922 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
923 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
924 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
925 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
926 elsif (!(IsAtomRecordType($RecordLine) || IsHetatmRecordType($RecordLine))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
927 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
928 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
929 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = ParseAtomRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
930
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
931 if (IsEmpty($ChainID)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
932 $ChainID = $DefaultChainID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
933 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
934 if (exists $ChainsDataMap{Residues}{$ChainID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
935 # Data for existing chain...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
936 if ($GetRecordLinesFlag) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
937 push @{$ChainsDataMap{Lines}{$ChainID}}, $RecordLine;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
938 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
939
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
940 if ($ResidueNumber != $PreviousResidueNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
941 # Next residue with in the chain...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
942 push @{$ChainsDataMap{Residues}{$ChainID}}, $ResidueName;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
943 push @{$ChainsDataMap{ResidueNumbers}{$ChainID}}, $ResidueNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
944
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
945 if (exists $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
946 $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
947 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
948 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
949 $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
950 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
951 $PreviousResidueNumber = $ResidueNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
952 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
953 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
954 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
955 # Data for new chain...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
956 push @{$ChainsDataMap{ChainIDs}}, $ChainID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
957
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
958 @{$ChainsDataMap{Residues}{$ChainID}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
959 push @{$ChainsDataMap{Residues}{$ChainID}}, $ResidueName;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
960
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
961 @{$ChainsDataMap{ResidueNumbers}{$ChainID}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
962 push @{$ChainsDataMap{ResidueNumbers}{$ChainID}}, $ResidueNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
963
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
964 @{$ChainsDataMap{Lines}{$ChainID}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
965 if ($GetRecordLinesFlag) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
966 push @{$ChainsDataMap{Lines}{$ChainID}}, $RecordLine;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
967 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
968
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
969 %{$ChainsDataMap{ResidueCount}{$ChainID}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
970 $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
971 $PreviousResidueNumber = $ResidueNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
972 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
973 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
974 if (!$GetChainResiduesBeyondTERFlag) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
975 return \%ChainsDataMap;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
976 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
977 # Look for any HETATM residues specified outside TER records which could belong to an existing chain...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
978 my($LineIndex, $PreviousChainID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
979 $PreviousChainID = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
980 $PreviousResidueNumber = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
981 LINE: for $LineIndex (($LineCount - 1) .. $#{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
982 $RecordLine = $PDBRecordLinesRef->[$LineIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
983 if (IsEndmdlRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
984 last LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
985 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
986 if (!(IsAtomRecordType($RecordLine) || IsHetatmRecordType($RecordLine))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
987 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
988 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
989 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) = ParseAtomRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
990 if (IsEmpty($ChainID)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
991 # Ignore the chains with no ids...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
992 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
993 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
994 if (! exists($ChainsDataMap{Residues}{$ChainID})) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
995 # Don't collect any new chains after TER record...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
996 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
997 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
998 if ($GetRecordLinesFlag) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
999 push @{$ChainsDataMap{Lines}{$ChainID}}, $RecordLine;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1000 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1001 if ($ResidueNumber != $PreviousResidueNumber || $ChainID ne $PreviousChainID) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1002
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1003 push @{$ChainsDataMap{Residues}{$ChainID}}, $ResidueName;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1004 push @{$ChainsDataMap{ResidueNumbers}{$ChainID}}, $ResidueNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1005
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1006 if (exists $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1007 $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1008 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1009 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1010 $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1011 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1012 $PreviousChainID = $ChainID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1013 $PreviousResidueNumber = $ResidueNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1014 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1015 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1016 return \%ChainsDataMap;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1017 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1018
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1019 # Get chains and residues data using SEQRES records...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1020 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1021 sub _GetChainsAndResiduesFromSeqresRecords {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1022 my($PDBRecordLinesRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1023
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1024 my($ChainCount, $DefaultChainLabel, $DefaultChainID, $RecordLine, $RecordSerialNumber, $ChainID, $NumOfResidues, $ResidueName, $ResidueNamesString, @ResidueNamesList, %ChainsDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1025
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1026 %ChainsDataMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1027 @{$ChainsDataMap{ChainIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1028 %{$ChainsDataMap{Residues}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1029 %{$ChainsDataMap{ResidueNumbers}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1030 %{$ChainsDataMap{ResidueCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1031
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1032 $ChainCount = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1033 $DefaultChainLabel = 'None';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1034 $DefaultChainID = $DefaultChainLabel . ($ChainCount + 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1035
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1036 LINE: for $RecordLine (@{$PDBRecordLinesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1037 if (!IsSeqresRecordType($RecordLine)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1038 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1039 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1040 ($RecordSerialNumber, $ChainID, $NumOfResidues, $ResidueNamesString) = ParseSeqresRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1041 if ($RecordSerialNumber == 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1042 # Indicates start of a new chain...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1043 $DefaultChainID = $DefaultChainLabel . ($ChainCount + 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1044 $ChainCount++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1045 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1046 if (IsEmpty($ChainID)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1047 $ChainID = $DefaultChainID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1048 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1049 # Process the residues...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1050 @ResidueNamesList = split /[ ]+/, $ResidueNamesString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1051
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1052 if (exists $ChainsDataMap{Residues}{$ChainID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1053 # Data for existing chain...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1054 push @{$ChainsDataMap{Residues}{$ChainID}}, @ResidueNamesList;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1055 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1056 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1057 # Data for new chain...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1058 push @{$ChainsDataMap{ChainIDs}}, $ChainID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1059 @{$ChainsDataMap{Residues}{$ChainID}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1060 push @{$ChainsDataMap{Residues}{$ChainID}}, @ResidueNamesList;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1061 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1062
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1063 # Setup residue count...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1064 for $ResidueName (@ResidueNamesList) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1065 if (exists $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1066 $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1067 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1068 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1069 $ChainsDataMap{ResidueCount}{$ChainID}{$ResidueName} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1070 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1071 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1072 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1073 return \%ChainsDataMap;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1074 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1075
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1076 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1077
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1078 __END__
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1079
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1080 =head1 NAME
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1081
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1082 PDBFileUtil
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1083
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1084 =head1 SYNOPSIS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1085
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1086 use PDBFileUtil ;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1087
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1088 use PDBFileUtil qw(:all);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1089
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1090 =head1 DESCRIPTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1091
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1092 B<PDBFileUtil> module provides the following functions:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1093
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1094 GenerateAtomOrHetatmRecordLine, GenerateAtomRecordLine, GenerateConectRecordLine,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1095 GenerateEndRecordLine, GenerateHeaderRecordLine, GenerateHeaderRecordTimeStamp,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1096 GenerateHetatmRecordLine, GenerateTerRecordLine, GetAllResidues,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1097 GetChainsAndResidues, GetConectRecordLines, GetExperimentalTechnique,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1098 GetExperimentalTechniqueResolution, GetMinMaxCoords, GetPDBRecordType,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1099 GetRecordTypesCount, IsAtomRecordType, IsConectRecordType, IsEndmdlRecordType,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1100 IsHeaderRecordType, IsHetatmRecordType, IsMasterRecordType, IsModelRecordType,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1101 IsPDBFile, IsSeqresRecordType, IsTerRecordType, ParseAtomOrHetatmRecordLine,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1102 ParseAtomRecordLine, ParseConectRecordLine, ParseExpdtaRecordLine,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1103 ParseHeaderRecordLine, ParseHetatmRecordLine, ParseMasterRecordLine,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1104 ParseRemark2ResolutionRecordLine, ParseSeqresRecordLine, ParseTerRecordLine,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1105 ReadPDBFile
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1106
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1107 =head1 METHODS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1108
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1109 =over 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1110
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1111 =item B<GenerateAtomOrHetatmRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1112
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1113 $RecordLine = GenerateAtomOrHetatmRecordLine($RecordType,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1114 $AtomNumber, $AtomName, $AlternateLocation, $ResidueName,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1115 $ChainID, $ResidueNumber, $InsertionCode, $X, $Y, $Z,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1116 $Occupancy, $TemperatureFactor, $SegmentID,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1117 $ElementSymbol, $AtomCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1118
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1119 Returns ATOM or HETATM record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1120
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1121 =item B<GenerateAtomRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1122
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1123 $RecordLine = GenerateAtomRecordLine($AtomNumber,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1124 $AtomName, $AlternateLocation, $ResidueName, $ChainID,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1125 $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1126 $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1127
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1128 Returns ATOM record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1129
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1130 =item B<GenerateConectRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1131
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1132 $RecordLine = GenerateConectRecordLine($AtomNum, $BondedAtomNum1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1133 $BondedAtomNum2, $BondedAtomNum3, $BondedAtomNum4,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1134 $HBondedAtomNum1, $HBondedAtomNum2, $SaltBridgedAtomNum1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1135 $HBondedAtomNum3, $HBondedAtomNum4, $SaltBridgedAtomNum2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1136
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1137 Returns CONECT record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1138
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1139 =item B<GenerateHeaderRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1140
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1141 $RecordLine = GenerateHeaderRecordLine($IDCode, [$Classification,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1142 $Date]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1143
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1144 Returns HEADER record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1145
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1146 =item B<GenerateHeaderRecordTimeStamp>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1147
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1148 $Date = GenerateHeaderRecordTimeStamp();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1149
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1150 Returns PDB header time stamp.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1151
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1152 =item B<GenerateHetatmRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1153
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1154 $RecordLine = GenerateHetatmRecordLine($AtomNumber, $AtomName,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1155 $AlternateLocation, $ResidueName, $ChainID, $ResidueNumber,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1156 $InsertionCode, $X, $Y, $Z, $Occupancy, $TemperatureFactor,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1157 $SegmentID, $ElementSymbol, $AtomCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1158
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1159 Returns HETATM record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1160
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1161 =item B<GenerateEndRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1162
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1163 $RecordLine = GenerateEndRecordLine();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1164
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1165 Returns END record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1166
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1167 =item B<GenerateTerRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1168
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1169 $RecordLine = GenerateTerRecordLine($SerialNumber, [$ResidueName,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1170 $ChainID, $ResidueNumber, $InsertionCode]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1171
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1172 Returns TER record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1173
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1174 =item B<GetAllResidues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1175
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1176 $ResiduesDataRef = GetAllResidues($PDBRecordLinesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1177
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1178 Gets residue information using ATOM/HETATM records and returns a reference to a hash with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1179 following key/value pairs:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1180
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1181 $ResiduesDataRef->{ResidueNames} - Array of all the residues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1182 $ResiduesDataRef->{ResidueCount}{$ResidueName} - Count of residues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1183 $ResiduesDataRef->{AtomResidueNames}} - Array of all ATOM residues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1184 $ResiduesDataRef->{AtomResidueCount}{$ResidueName} - Count of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1185 residues in ATOM records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1186 $ResiduesDataRef->{HetatomResidueNames} - List of all HETATM
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1187 residues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1188 $ResiduesDataRef->{HetatmResidueCount}{$ResidueName} - Count of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1189 residues HETATM records
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1190
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1191 ATOM/HETATM records after the first ENDMDL records are simply ingnored.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1192
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1193 =item B<GetChainsAndResidues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1194
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1195 $ChainsDataRef = GetChainsAndResidues($PDBRecordLinesRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1196 [$RecordsSource, $GetChainResiduesBeyondTERFlag,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1197 $GetRecordLinesFlag]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1198
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1199 Gets chains and residue information using ATOM/HETATM or SEQRES records and returns a reference to a
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1200 hash with these keys:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1201
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1202 $ChainsDataRef->{ChainIDs} - List of chain IDs with 'None' for
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1203 no IDs
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1204 $ChainsDataRef->{Residues}{$ChainID} - List of residues in order
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1205 of their appearance in a chain
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1206 $ChainsDataRef->{ResidueCount}{$ChainID}{$ResidueName} - Count of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1207 residues in a chain
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1208
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1209 Chains and residue data can be extacted using either ATOM/HETATM records or SEQRES records.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1210 ATOM/HETATM records after the first ENDMDL records are simply ingnored.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1211
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1212 =item B<GetConectRecordLines>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1213
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1214 $ConectRecordLinesRef = GetConectRecordLines($PDBRecordLinesRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1215 $AtomNumbersMapRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1216
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1217 Collects CONECT record lines for specific atom number, modified specified data to exclude any atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1218 number not present in the list of specified atom numbers and returns a reference to list of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1219 CONECT record lines.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1220
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1221 =item B<GetExperimentalTechnique>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1222
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1223 $ExperimentalTechnique = GetExperimentalTechnique($PDBRecordLinesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1224
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1225 Returns I<ExperimentalTechnique> value retrieved from EXPDATA record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1226
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1227 =item B<GetExperimentalTechniqueResolution>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1228
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1229 ($Resolution, $ResolutionUnits) = GetExperimentalTechniqueResolution(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1230 $PDBRecordLinesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1231
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1232 Returns I<Resolution> and I<ResolutionUnits> values from REMARK 2 RESOLUTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1233 record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1234
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1235 =item B<GetMinMaxCoords>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1236
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1237 ($XMin, $YMin, $ZMin, $XMax, $YMax, $ZMax) =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1238 GetMinMaxCoords($PDBRecordLinesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1239
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1240 Returns minimum and maximum XYZ coordinates for ATOM/HETATM records.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1241
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1242 =item B<GetPDBRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1243
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1244 $RecordType = GetPDBRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1245
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1246 Returns type of I<RecordLine>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1247
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1248 =item B<GetRecordTypesCount>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1249
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1250 $RecordTypeDataRef = GetRecordTypesCount($PDBRecordLinesRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1251 [$SpecifiedRecordType, $GetRecordLinesFlag]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1252
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1253 Counts the number of each record type or a $SpecifiedRecordType and returns a reference to data
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1254 type with following key/value pairs:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1255
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1256 $RecordTypeDataRef->{RecordTypes} - An array of unique record types
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1257 in order of their presence in the file
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1258 $RecordTypeDataRef->{Count}{$RecordType} - Count of each record type
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1259 $RecordTypeDataRef->{Lines}{$RecordType} - Optional lines data for a
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1260 specific record type.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1261
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1262 =item B<IsAtomRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1263
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1264 $Status = IsAtomRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1265
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1266 Returns 1 or 0 based on whether it's a ATOM record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1267
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1268 =item B<IsConectRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1269
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1270 $Status = IsAtomConectType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1271
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1272 Returns 1 or 0 based on whether it's a CONECT record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1273
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1274 =item B<IsEndmdlRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1275
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1276 $Status = IsEndmdlRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1277
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1278 Returns 1 or 0 based on whether it's a ENDMDL a record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1279
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1280 =item B<IsHeaderRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1281
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1282 $Status = IsHeaderRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1284 Returns 1 or 0 based on whether it's a HEADER a record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1285
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1286 =item B<IsHetatmRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1287
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1288 $Status = IsHetatmRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1289
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1290 Returns 1 or 0 based on whether it's a HETATM a record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1291
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1292 =item B<IsMasterRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1293
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1294 $Status = IsMasterRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1295
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1296 Returns 1 or 0 based on whether it's a MASTER a record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1297
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1298 =item B<IsModelRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1299
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1300 $Status = IsModelRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1301
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1302 Returns 1 or 0 based on whether it's a MODEL record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1303
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1304 =item B<IsPDBFile>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1305
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1306 $Status = IsPDBFile($PDBFile);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1307
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1308 Returns 1 or 0 based on whether it's a PDB file.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1309
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1310 =item B<IsSeqresRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1311
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1312 $Status = IsSeqresRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1313
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1314 Returns 1 or 0 based on whether it's SEQRES a record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1315
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1316 =item B<IsTerRecordType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1317
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1318 $Status = IsTerRecordType($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1319
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1320 Returns 1 or 0 based on whether it's a TER record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1321
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1322 =item B<ParseAtomOrHetatmRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1323
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1324 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1325 $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1326 $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1327 ParseAtomOrHetatmRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1328
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1329 Parses ATOM or HETATM record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1330
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1331 =item B<ParseAtomRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1332
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1333 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1334 $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1335 $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1336 ParseAtomRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1337
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1338 Parses ATOM record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1339
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1340 =item B<ParseConectRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1341
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1342 ($AtomNum, $BondedAtomNum1, $BondedAtomNum2, $BondedAtomNum3,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1343 $BondedAtomNum4, $HBondedAtomNum1, $HBondedAtomNum2,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1344 $SaltBridgedAtomNum1, $HBondedAtomNum3, $HBondedAtomNum4,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1345 $SaltBridgedAtomNum2) = ParseConectRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1346
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1347 Parses CONECT record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1348
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1349 =item B<ParseExpdtaRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1350
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1351 ($ContinuationNum, $ExperimentalTechnique) = ParseExpdtaRecordLine($Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1352
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1353 Parses EXPDTA record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1354
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1355 =item B<ParseHeaderRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1356
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1357 ($Classification, $DepositionDate, $IDCode) = ParseHeaderRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1358
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1359 Parses HEADER record line
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1360
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1361 =item B<ParseHetatmRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1362
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1363 ($AtomNumber, $AtomName, $AlternateLocation, $ResidueName, $ChainID,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1364 $ResidueNumber, $InsertionCode, $X, $Y, $Z, $Occupancy,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1365 $TemperatureFactor, $SegmentID, $ElementSymbol, $AtomCharge) =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1366 ParseHetatmRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1367
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1368 Parses HETATM record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1369
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1370 =item B<ParseMasterRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1372 ($NumOfRemarkRecords, $NumOfHetRecords, $NumOfHelixRecords,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1373 $NumOfSheetRecords, $NumOfTurnRecords, $NumOfSiteRecords,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1374 $NumOfTransformationsRecords, $NumOfAtomAndHetatmRecords,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1375 $NumOfTerRecords, $NumOfConectRecords, $NumOfSeqresRecords) =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1376 ParseMasterRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1377
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1378 Parses MASTER ecord line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1379
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1380 =item B<ParseRemark2ResolutionRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1381
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1382 ($Resolution, $ResolutionUnits) = ParseRemark2ResolutionRecordLine(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1383 $RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1385 Parses REMARK 2 RESOLUTION record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1386
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1387 =item B<ParseSeqresRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1388
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1389 ($RecordSerialNumber, $ChainID, $NumOfResidues, $ResidueNames) =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1390 ParseSeqresRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1391
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1392 Parses SEQRES record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1393
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1394 =item B<ParseTerRecordLine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1395
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1396 ($SerialNumber, $ResidueName, $ChainID, $ResidueNumber, $InsertionCode) =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1397 ParseTerRecordLine($RecordLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1398
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1399 Parses TER record line.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1400
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1401 =item B<ReadPDBFile>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1402
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1403 $PDBRecordLinesRef = ReadPDBFile($PDBFile);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1404
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1405 Reads PDB file and returns reference to record lines.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1407 =back
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1408
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1409 =head1 AUTHOR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1410
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1411 Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1412
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1413 =head1 SEE ALSO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1414
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1415 FileUtil.pm, SequenceFileUtil.pm, TextUtil.pm
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1416
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1417 =head1 COPYRIGHT
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1418
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1419 Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1420
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1421 This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1422
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1423 MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1424 the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1425 Software Foundation; either version 3 of the License, or (at your option)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1426 any later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1427
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1428 =cut