annotate external_tools/darwin/lib/hh/scripts/hhmakemodel.pl @ 6:2277dd59b9f9 draft

Uploaded
author hammock
date Wed, 01 Nov 2017 05:54:28 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1 #! /usr/bin/env perl
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
2 #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
3 # hhmakemodel.pl
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
4 # Generate a model from an output alignment of hhsearch.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
5 # Usage: hhmakemodel.pl -i file.out (-ts file.pdb|-al file.al) [-m int|-m name|-m auto] [-pdb pdbdir]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
6
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
7 # (C) Johannes Soeding 2012
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
8
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
9 # HHsuite version 2.0.16 (January 2013)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
10 #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
11 # Reference:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
12 # Remmert M., Biegert A., Hauser A., and Soding J.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
13 # HHblits: Lightning-fast iterative protein sequence searching by HMM-HMM alignment.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
14 # Nat. Methods, epub Dec 25, doi: 10.1038/NMETH.1818 (2011).
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
15
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
16 # This program is free software: you can redistribute it and/or modify
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
17 # it under the terms of the GNU General Public License as published by
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
18 # the Free Software Foundation, either version 3 of the License, or
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
19 # (at your option) any later version.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
20
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
21 # This program is distributed in the hope that it will be useful,
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
22 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
23 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
24 # GNU General Public License for more details.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
25
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
26 # You should have received a copy of the GNU General Public License
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
27 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
28
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
29 # We are very grateful for bug reports! Please contact us at soeding@genzentrum.lmu.de
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
30
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
31 use lib $ENV{"HHLIB"}."/scripts";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
32 use HHPaths; # config file with path variables for nr, blast, psipred, pdb, dssp etc.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
33 use strict;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
34 use Align;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
35
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
36
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
37 $|=1; # force flush after each print
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
38
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
39 # Default parameters
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
40 our $d=7; # gap opening penalty for Align.pm; more than 2 mismatches - 2 matches ## previously: 1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
41 our $e=0.01; # gap extension penatlty for Align.pm; allow to leave large gaps bridging uncrystallized regions ## previously: 0.1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
42 our $g=0.1; # endgap penalty for Align.pm; allow to shift SEQRES residues for uncrystallized aas to ends of alignment ## previously: 0.9
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
43 my $v=2; # 3: DEBUG
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
44
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
45 my $formatting="CASP"; # CASP or LIVEBENCH
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
46 my $servername="My server"; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
47 my $MINRES=30; # minumum number of new query residues required for a hit to be used as additional parent
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
48 my $infile="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
49 my $outfile="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
50 my $outformat="fas";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
51 my $pickhits="1 "; # default: build one model from best hit
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
52 my $Pthr=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
53 my $Ethr=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
54 my $Prob=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
55 my $shift=0; # ATTENTION: set to 0 as default!
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
56 my $NLEN=14; # length of the name field in alignments of hhsearch-output
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
57 my $NUMRES=100; # number of residues per line in FASTA, A2M, PIR format
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
58 my $program=$0; # name of perl script
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
59 my $usage="
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
60 hhmakemodel.pl from HHsuite $VERSION
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
61 From the top hits in an hhsearch output file (hhr), you can
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
62 * generate a MSA (multiple sequence alignment) containing all representative
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
63 template sequences from all selected alignments (options -fas, -a2m, -a3m, -pir)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
64 * generate several concatenated pairwise alignments in AL format (option -al)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
65 * generate several concatenated coarse 3D models in PDB format (option -ts)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
66 In PIR, PDB and AL format, the pdb files are required in order to read the pdb residue numbers
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
67 and ATOM records.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
68 The PIR formatted file can be used directly as input to the MODELLER homology modelling package.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
69 Usage: $program [-i] file.hhr [options]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
70
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
71 Options:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
72 -i <file.hhr> results file from hhsearch with hit list and alignments
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
73 -fas <file.fas> write a FASTA-formatted multiple alignment to file.fas
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
74 -a2m <file.a2m> write an A2M-formatted multiple alignment to file.a2m
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
75 -a3m <file.a3m> write an A3M-formatted multiple alignment to file.a3m
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
76 -m <int> [<int> ...] pick hits with specified indices (default='-m 1')
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
77 -p <probability> minimum probability threshold (default=$Pthr)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
78 -e <E-value> maximum E-value threshold (default=$Ethr)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
79 -q <query_ali> use the full-length query sequence in the alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
80 (not only the aligned part);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
81 the query alignment file must be in HHM, FASTA, A2M,
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
82 or A3M format.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
83 -N use query name from hhr filename (default: use same
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
84 name as in hhr file)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
85 -first include only first Q or T sequence of each hit in MSA
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
86 -v verbose mode (default=$v)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
87
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
88 Options when database matches in hhr file are PDB or SCOP sequences
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
89 -pir <file.pir> write a PIR-formatted multiple alignment to file.pir
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
90 -ts <file.pdb> write the PDB-formatted models based on *pairwise*
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
91 alignments into file.pdb
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
92 -al <file.al> write the AL-formatted *pairwise* alignments into file.al
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
93 -d <pdbdirs> directories containing the pdb files (for PDB, SCOP, or DALI
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
94 sequences) (default=$pdbdir)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
95 -s <int> shift the residue indices up/down by an integer (default=$shift);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
96 -CASP formatting for CASP (for -ts, -al options) (default: LIVEBENCH
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
97 formatting)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
98 Options when query is compared to itself (for repeat detection)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
99 -conj include also conjugate alignments in MSA (with query and
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
100 template exchanged)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
101 -conjs include conjugate alignments and sort by ascending diagonal
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
102 value (i.e. i0-j0)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
103 \n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
104
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
105 # Options to help extract repeats from self-alignments:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
106 # 1. default 2. -conj 3. -conj_diag 4. -conj_compact
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
107 # ABCD ABCD ---A ABCD
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
108 # BCD- BCD- --AB BCDA
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
109 # D--- CD-- -ABC CDAB
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
110 # CD-- D--- ABCD DABC
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
111 # ---A BCD-
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
112 # --AB CD--
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
113 # -ABC D---
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
114
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
115
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
116 # Variable declarations
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
117 my $line; # input line
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
118 my $score=-1; # score of the best model; at the moment: Probability
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
119 my $qname=""; # name of query from hhsearch output file (infile)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
120 my $tname=""; # name of template (hit) from hhsearch output file (infile)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
121 my $qnameline=""; # nameline of query
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
122 my $tnameline; # nameline of template
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
123 my $pdbfile; # name of pdbfile to read
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
124 my $pdbcode; # four-letter pdb code in lower case and _A if chain A (e.g. 1h7w_A)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
125 my $aaq; # query amino acids from hhsearch output
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
126 my @aaq; # query amino acids from hhsearch output
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
127 my @qname; # query names in present alignment as returned from ReadAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
128 my @qfirst; # indices of first residues in present alignmet as returned from ReadAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
129 my @qlast; # indices of last residues in present alignmet as returned from ReadAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
130 my @qseq; # sequences of querys in present alignment as returned from ReadAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
131 my @tname; # template names in present alignment as returned from ReadAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
132 my @tfirst; # indices of first residues in present alignmet as returned from ReadAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
133 my @tlast; # indices of last residues in present alignmet as returned from ReadAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
134 my @tseq; # sequences of templates in present alignment as returned from ReadAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
135 my $aat; # template amino acids from hhsearch output
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
136 my @aat; # template amino acids from hhsearch output
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
137 my $aapdb; # template amino acids from pdb file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
138 my @aapdb; # template amino acids from pdb file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
139 my $qfirst=0; # first residue of query
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
140 my $qlast=0; # last residue of query
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
141 my $qlength; # length of query sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
142 my $tfirst=0; # first residue of template
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
143 my $tlast=0; # first residue of template
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
144 my $tlength; # length of template sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
145 my $l=1; # counts template residues from pdb file (first=1, like for i[col2] and j[col2]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
146 my $col1=0; # counts columns from hhsearch alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
147 my $col2=0; # counts columns from alignment (by function &AlignNW) of $aat versus $aapdb
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
148 my @i1; # $i1[$col1] = index of query residue in column $col1 of hhsearch-alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
149 my @j1; # $j1[$col1] = index of template residue in column $col1 of hhsearch-alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
150 my @j2; # $j2[$col2] = index of hhsearch template seq in $col2 of alignment against pdb template sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
151 my @l2; # $l2[$col2] = index of pdb template seq in $col2 of alignment against hhsearch template sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
152 my @l1; # $l1[$col1] = $l2[$col2]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
153 my $res; # residue name
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
154 my $chain; # pdb chain from template name
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
155 my $qfile; # name of query sequence file (for -q option)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
156 my $qmatch; # number of match states in alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
157 my $hit; # index of hit in hit list
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
158 my $k; # index of hit sorted by position in alignment with query (k=1,...,k=@first-2)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
159 my %picked=(); # $picked{$hit} is defined and =$k for hits that will be transformed into model
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
160 my @remarks;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
161 my @printblock; # block 0: header block k: k'th hit
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
162 my $keyword=""; # either METHOD for CASP format or REMARK for LIVEBENCH format
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
163 my $conj=0; # include conjugate sequences? Sort in which way?
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
164 my $conjugate=0; # when query is compared to itself: do not include conjugate alignments
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
165 my $onlyfirst=0; # include only first representative sequence of each Q/T alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
166 my $dummy; # dummy
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
167 my $addchain=1; # 1: PDB files contain chain-id as in 1abc_A.pdb (not 1abc.pdb or pdb1abc.pdb etc.)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
168 my $pdbdirs=$pdbdir; # default pdb directory with *.pdb files
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
169 my $options="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
170
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
171 # Processing command line options
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
172 if (@ARGV<1) {die $usage;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
173 for (my $i=0; $i<@ARGV; $i++) {$options.=" $ARGV[$i] ";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
174
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
175
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
176 # Set options
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
177 if ($options=~s/ -i\s+(\S+) / /g) {$infile=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
178 if ($options=~s/ -q\s+(\S+) / /g) {$qfile=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
179 if ($options=~s/ -ts\s+(\S+) / /ig) {$outfile=$1; $outformat="TS";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
180 if ($options=~s/ -pdb\s+(\S+) / /ig) {$outfile=$1; $outformat="TS";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
181 if ($options=~s/ -al\s+(\S+) / /ig) {$outfile=$1; $outformat="AL";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
182 if ($options=~s/ -pir\s+(\S+) / /ig) {$outfile=$1; $outformat="PIR";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
183 if ($options=~s/ -fas\s+(\S+) / /ig) {$outfile=$1; $outformat="FASTA";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
184 if ($options=~s/ -a2m\s+(\S+) / /ig) {$outfile=$1; $outformat="A2M";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
185 if ($options=~s/ -a3m\s+(\S+) / /ig) {$outfile=$1; $outformat="A3M";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
186 if ($options=~s/ -p\s+(\S+) / /g) {$Pthr=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
187 if ($options=~s/ -e\s+(\S+) / /g) {$Ethr=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
188 if ($options=~s/ -s\s+(\S+) / /g) {$shift=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
189 if ($options=~s/ -d\s+(([^-\s]\S*\s+)*)/ /g) {$pdbdirs=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
190 if ($options=~s/ -m\s+((\d+\s+)+)/ /g) {$pickhits=$1; }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
191 if ($options=~s/ -first\s+/ /ig) {$onlyfirst=1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
192
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
193 # Self-alignment options
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
194 if ($options=~s/ -conj\s+/ /ig) {$conj=1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
195 if ($options=~s/ -conjs\s+/ /ig) {$conj=2;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
196
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
197 # Switch formatting and method description
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
198 if ($options=~s/ -CASP\s+/ /ig) {$formatting="CASP";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
199 if ($options=~s/ -LIVEBENCH\s+/ /ig) {$formatting="LIVEBENCH";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
200 if ($options=~s/ -server\s+(\S+)/ /g) {$servername=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
201
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
202 # Set verbose mode?
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
203 if ($options=~s/ -v\s+(\d+) / /g) {$v=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
204 elsif ($options=~s/ -v\s+/ /g) {$v=1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
205
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
206 # Read infile and outfile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
207 if (!$infile && $options=~s/^\s*([^-]\S+)\s*/ /) {$infile=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
208 if (!$outfile && $options=~s/^\s*([^-]\S+)\s*/ /) {$outfile=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
209 if ($options=~s/ -N / /ig) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
210 $qname=$infile;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
211 $qname=~s/^.*?([^\/]+)$/$1/; # remove path
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
212 $qname=~s/^(.*)\.[^\.]*$/$1/; # remove extension
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
213 $qnameline=$qname;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
214 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
215
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
216 # Warn if unknown options found or no infile/outfile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
217 if ($options!~/^\s*$/) {$options=~s/^\s*(.*?)\s*$/$1/g; die("Error: unknown options '$options'\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
218 if ($infile eq "") {die("$usage\nError in $program: input file missing: $!\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
219 if ($outfile eq "") {die("$usage\nError in $program: output file missing: $!\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
220
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
221 my @pdbdirs = split(/\s+/,$pdbdirs);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
222
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
223 # Find query name in input file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
224 open (INFILE, "<$infile") || die "Error in $program: Couldn't open $infile: $!\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
225 while ($line=<INFILE>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
226 if ($v>=3) {print("$line");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
227 if ($qname eq "" && $line=~/^Query:?\s*(\S+)(.*)/) {$qname=$1; $qnameline=$1.$2;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
228 if ($line=~/^Match_columns:?\s*(\S+)/) {$qmatch=$1; last;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
229 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
230 if (!($line=<INFILE>)) {die ("Error in $program: wrong format in $infile: $!\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
231
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
232
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
233 # Prepare hash %pick with indices of hits that will be transformed into model
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
234 # No Hit Prob E-value P-value Score SS Cols Query HMM Template HMM
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
235 # 1 153l Lysozyme (E.C.3.2.1.17) 100.0 0 0 381.0 19.4 185 1-185 1-185 (185)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
236 # 2 1qsa_A Soluble lytic transglyc 100.0 2.1E-39 2.5E-43 225.8 8.3 149 21-182 423-600 (618)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
237 # 3 1ltm 36 kDa soluble lytic tr 95.9 3.5E-06 4.1E-10 50.3 11.0 95 28-122 76-221 (320)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
238
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
239 # option '-m m1 m2 m3': pick models manually
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
240 my @pickhits = split(/\s+/,$pickhits);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
241 $k=1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
242 foreach $hit (@pickhits) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
243 if (!defined $picked{$hit}) {$picked{$hit}=$k;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
244 $k++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
245 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
246
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
247 if ($outformat eq "AL" || $outformat eq "TS") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
248 &MakePairwiseAlignments();
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
249 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
250 &MakeMultipleAlignment();
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
251 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
252 exit;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
253
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
254
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
255 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
256 # Construct AL or TS formatted alignment as a list of pairwise alignments
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
257 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
258 sub MakePairwiseAlignments()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
259 {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
260 # Scan through query-vs-template-alignments from infile and create first (combination) model
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
261 $hit=0; # counts hits in hit list
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
262 my $models=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
263 while ($line=<INFILE>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
264 if ($line=~/^>(\S+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
265 $hit++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
266 if ($Pthr || $Ethr || defined $picked{$hit}) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
267 # Found right alignment (hit)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
268 if (defined $picked{$hit}) {$k=$picked{$hit};} else {$k=$hit;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
269
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
270 if ($line=~/^>(.*?)\s+E=.*$/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
271 $line=$1; # remove E=1.3E-30 etc. at the end
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
272 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
273 $line=~/^>(.*)/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
274 $line=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
275 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
276 my $nameline=$line;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
277 my $evalue;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
278 $line=<INFILE>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
279 if ($line=~/Probab\s*=\s*(\S+).*E-value\s*=\s*(\S+)/) {$score=$1; $evalue=$2}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
280 else {$score=0; warn("WARNING: could not print score $line");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
281 if ($line=~/Aligned_cols=\s*(\S+)/) {;} else {warn("WARNING: could not find aligned_cols\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
282 if ($Pthr && $score<$Pthr) {last;} # Probability too low -> finished
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
283 if ($Ethr && $evalue>$Ethr) {last;} # Evalue too high > finished
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
284
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
285
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
286 # Commented out in CASP format
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
287 if ($formatting eq "LIVEBENCH") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
288 $printblock[$k] ="PFRMAT $outformat\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
289 $printblock[$k].="TARGET $qname\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
290 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
291
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
292 $remarks[$k]="REMARK $k: $nameline\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
293 $remarks[$k].="REMARK $line";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
294
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
295 &ReadAlignment();
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
296 $qfirst = $qfirst[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
297 $qlast = $qlast[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
298 $aaq = $qseq[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
299 $tfirst = $tfirst[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
300 $aat = $tseq[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
301 $tname = $tname[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
302
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
303 if ($v>=3) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
304 for (my $i=0; $i<@qfirst; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
305 printf("Q %-14.14s %s\n",$qname[$i],$qseq[$i]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
306 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
307 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
308 for (my $i=0; $i<@tfirst; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
309 printf("T %-14.14s %s\n",$tname[$i],$tseq[$i]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
310 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
311 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
312 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
313
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
314 # Extract pdbcode and construct name of pdbfile and return in global variables $pdbid and $chain
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
315 if (&ExtractPdbcodeAndChain($tname[0])) {next;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
316 if ($chain eq "[A ]") {$pdbcode.="_A";} elsif ($chain eq ".") {;} else {$pdbcode.="_$chain";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
317
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
318 # Read score (=probability)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
319 $printblock[$k].="REMARK $nameline\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
320 $printblock[$k].="REMARK $line";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
321 $printblock[$k].="SCORE $score\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
322 $printblock[$k].="PARENT $pdbcode\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
323 $printblock[$k].="MODEL $k\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
324
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
325 &WritePairwiseAlignments();
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
326 $printblock[$k].="END\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
327 $models++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
328
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
329 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
330 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
331 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
332 $k=$#printblock; # set $k to last index in @printblock
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
333 if ($k<0) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
334 $printblock[1]="PARENT NONE\nTER\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
335 $printblock[1].="END\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
336 if ($v>=1) {print("WARNING: no hits found for model!\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
337 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
338 close (INFILE);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
339
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
340 if ($v>=2) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
341 printf("$models models built\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
342 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
343
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
344
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
345
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
346 # Write model file header
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
347
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
348 #---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
349
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
350 # Print header
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
351 my $date = scalar(localtime);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
352 if ($formatting eq "CASP") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
353 $printblock[0]="PFRMAT $outformat\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
354 $printblock[0].="TARGET $qname\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
355 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
356 $printblock[0].="REMARK AUTHOR $servername\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
357 $printblock[0].="REMARK $date\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
358 # $printblock[0].="REMARK J. Soeding \n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
359
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
360 # Add remarks
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
361 for ($k=0; $k<@remarks; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
362 if (defined $remarks[$k]) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
363 $printblock[0].=$remarks[$k];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
364 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
365 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
366 $printblock[0].="REMARK \n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
367
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
368
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
369 # Print @printblock into outfile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
370
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
371 open (OUTFILE, ">$outfile") || die "Error in $program: Couldn't open $outfile: $!\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
372 foreach my $printstr (@printblock) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
373 my @printarr=split(/\n/,$printstr);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
374 if ($outformat eq "TS") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
375 foreach $printstr (@printarr) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
376 printf(OUTFILE "%-80.80s\n",$printstr);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
377 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
378 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
379 foreach $printstr (@printarr) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
380 printf(OUTFILE "%s\n",$printstr);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
381 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
382 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
383 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
384 close (OUTFILE);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
385
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
386 if ($outformat eq "TS") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
387 # Call MaxSprout to generate sidechains
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
388 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
389 return;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
390 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
391
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
392
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
393 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
394 # Construct multiple alignment in FASTA, A2M, or PIR format
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
395 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
396 sub MakeMultipleAlignment()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
397 {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
398 my @hitnames=(); # $hitnames[$k] is the nameline of the ihit'th hit
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
399 my @hitseqs=(); # $hitseqs[$k] contains the residues of the ihit'th hit
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
400 my @hitdiag=(); # $hitdiag[$k] = $qfirst[0]-$tfirst[0]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
401 my @conjnames=(); # $hitnames[$k] is the nameline of the ihit'th conjugate hit
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
402 my @conjseqs=(); # $hitseqs[$k] contains the residues of the ihit'th conjugate hit
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
403 my @conjdiag=(); # $hitdiag[$k] = $qfirst[0]-$tfirst[0] for conjugate alignments
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
404
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
405 my $new_hit; # residues of new hit
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
406 my $i; # residue index
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
407 my $j; # residue index
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
408 my $k; # sequence index
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
409
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
410 $hitnames[0]="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
411 $hitseqs[0]="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
412 $hitdiag[0]=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
413 $conjnames[0]="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
414 $conjseqs[0]="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
415 $conjdiag[0]=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
416
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
417 open (INFILE, "<$infile") || die "Error in $program: Couldn't open $infile: $!\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
418 $hit=0; # counts hits in hit list
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
419
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
420 # Read one alignment after the other
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
421 while ($line=<INFILE>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
422
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
423 # Found new aligment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
424 if ($line=~/^>(\S+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
425 $hit++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
426
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
427 # Is alignment selected by user?
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
428 if ($Pthr || $Ethr || defined $picked{$hit}) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
429
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
430 if ($line=~/^>(\S+)(.*)/) {$tname=$1; $tnameline=$1.$2;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
431 else {die("\nError: bad format in $infile, line $.: code 1\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
432
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
433 $line = <INFILE>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
434 if ($line=~/Probab\s*=\s*(\S+).*E-value\s*=\s*(\S+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
435 if ($Pthr && $1<$Pthr) {last;} # Probability too low -> finished
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
436 if ($Ethr && $2>$Ethr) {last;} # Evalue too high > finished
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
437 } else { die("\nError: bad format in $infile, line $.: code 2\n"); }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
438
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
439 # Read next alignment with $aaq, $qfirst, @tseq, @first, and @tname
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
440 &ReadAlignment();
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
441 chomp($tnameline);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
442 if ($tnameline=~/\S+\s+(.*)/) {$tname[0].=" $1";} # template seed sequence gets its description
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
443
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
444 # Format sequences into @hitseqs and @hitnames
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
445 &FormatSequences(\@hitnames,\@hitseqs,\@hitdiag,\@qname,\@qseq,\@qfirst,\@qlast,\$qlength,\@tname,\@tseq,\@tfirst,\@tlast,\$tlength);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
446
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
447 # Use conjugate alignments?
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
448 if ($conj>0) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
449 &FormatSequences(\@conjnames,\@conjseqs,\@conjdiag,\@tname,\@tseq,\@tfirst,\@tlast,\$tlength,\@qname,\@qseq,\@qfirst,\@qlast,\$qlength);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
450 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
451
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
452 } # end: if ($Pthr>0 || defined $picked{$hit})
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
453
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
454 } # end: if ($line=~/^>(\S+)/) # found new alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
455
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
456 } # end while
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
457 close (INFILE);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
458
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
459 # Insert full-length query sequence?
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
460 if ($qfile) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
461 $hitseqs[0]="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
462 open (QFILE, "<$qfile") || die "Error in $program: Couldn't open $qfile: $!\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
463 while ($line=<QFILE>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
464 if ($line=~/^>/ && $line!~/^>ss_/ && $line!~/^>sa_/ && $line!~/^>aa_/ && $line!~/^>Consensus/) {last;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
465 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
466 while ($line=<QFILE>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
467 if ($line=~/^>/ || $line=~/^\#/) {last;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
468 $line=~tr/\n\.-//d;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
469 $line=~tr/a-z/A-Z/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
470 $hitseqs[0].=$line;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
471 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
472 close(QFILE);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
473 if ($v>=2) {printf("\nQ(full) %-14.14s %s\n",$qname,$hitseqs[0]);}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
474 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
475
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
476
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
477 # DEBUG
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
478 if ($v>=3) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
479 printf("\nQuery %-14.14s %s\n",$qname,$hitseqs[0]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
480 for ($k=1; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
481 printf("T hit %3i %-14.14s %s\n",$k,$hitnames[$k],$hitseqs[$k]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
482 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
483 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
484 printf("\nQuery %-14.14s %s\n",$qname,$conjseqs[0]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
485 for ($k=1; $k<@conjnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
486 printf("T conj %3i %-14.14s %s\n",$k,$conjnames[$k],$conjseqs[$k]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
487 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
488 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
489 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
490
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
491
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
492 # Include conjugate sequences?
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
493 if ($conj>0) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
494 shift(@conjseqs); # delete zeroth ("query") sequence of @conjseqs
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
495 shift(@conjnames); #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
496 shift(@conjdiag); #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
497
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
498 # Sort by diagonals $hitdiag[], $conjdiag[]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
499 &Sort(\@hitdiag,\@hitseqs,\@hitnames);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
500 &Sort(\@conjdiag,\@conjseqs,\@conjnames);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
501
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
502 # Append conjugate sequences to hitseqs
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
503 splice(@hitseqs,scalar(@hitseqs),0,@conjseqs);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
504 splice(@hitnames,scalar(@hitnames),0,@conjnames);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
505
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
506 if ($v>=3) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
507 printf("\nQuery %-14.14s %s\n",$qname,$hitseqs[0]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
508 for ($k=1; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
509 chomp($hitnames[$k]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
510 printf("T tot %3i %-14.14s %s\n",$k,$hitnames[$k],$hitseqs[$k]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
511 $hitnames[$k].="\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
512 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
513 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
514 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
515
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
516 # Insert gaps:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
517
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
518 my @len_ins; # $len_ins[$j] will count the maximum number of inserted residues after match state $j.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
519 my @inserts; # $inserts[$j] contains the insert (in small case) of sequence $k after the $j'th match state
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
520 my $insert;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
521 my $ngap;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
522
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
523 # For each match state determine length of LONGEST insert after this match state and store in @len_ins
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
524 for ($k=0; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
525 # split into list of single match states and variable-length inserts
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
526 # ([A-Z]|-) is the split pattern. The parenthesis indicate that split patterns are to be included as list elements
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
527 # The '#' symbol is prepended to get rid of a perl bug in split
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
528 $j=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
529 @inserts = split(/([A-Z]|-)/,"#".$hitseqs[$k]."#");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
530 # printf("Sequence $k: $hitseqs[$k]\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
531 # printf("Sequence $k: @inserts\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
532 foreach $insert (@inserts) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
533 if( !defined $len_ins[$j] || length($insert)>$len_ins[$j]) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
534 $len_ins[$j]=length($insert);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
535 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
536 $j++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
537 # printf("$insert|");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
538 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
539 # printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
540 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
541
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
542
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
543
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
544 # After each match state insert residues and fill up with gaps to $len_ins[$i] characters
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
545 for ($k=0; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
546 # split into list of single match states and variable-length inserts
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
547 @inserts = split(/([A-Z]|-)/,"#".$hitseqs[$k]."#");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
548 $j=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
549
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
550 # append the missing number of gaps after each match state
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
551 foreach $insert (@inserts) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
552 if($outformat eq "FASTA") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
553 for ($i=length($insert); $i<$len_ins[$j]; $i++) {$insert.="-";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
554 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
555 else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
556 for ($i=length($insert); $i<$len_ins[$j]; $i++) {$insert.=".";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
557 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
558 $j++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
559 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
560 $hitseqs[$k] = join("",@inserts);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
561 $hitseqs[$k] =~ tr/\#//d; # remove the '#' symbols inserted at the beginning and end
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
562 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
563
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
564 # Remove columns at beginning and end with gaps in all sequences
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
565 my $remove_start;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
566 my $remove_end;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
567 my $len;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
568 $hitseqs[0]=~/^(-*)/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
569 $remove_start=length($1);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
570 $hitseqs[0]=~/(-*)$/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
571 $remove_end=length($1);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
572 for ($k=0; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
573 $hitseqs[$k]=~s/^.{$remove_start}(.*).{$remove_end}/$1/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
574 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
575 $len=($hitseqs[0]=~tr/a-zA-Z/a-zA-Z/);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
576
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
577 # Prepare name line of query
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
578 if ($outformat eq "PIR") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
579 my $qnametmp=$qname;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
580 $qnametmp=~tr/:/;/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
581 $qnameline=~/^\S+\s*(.*)/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
582 my $qnamelinetmp=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
583 $qnamelinetmp=~tr/:/;/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
584 $hitnames[0] = sprintf(">P1;%s\nsequence:%s:%4i: :%4i: :%s: : 0.00: 0.00\n",$qnametmp,$qnametmp,$remove_start+1,$len+$remove_start,$qnamelinetmp);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
585 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
586 # outformat is "FASTA" or "A2M" or "A3M" or ...
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
587 $hitnames[0] = ">$qnameline\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
588 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
589
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
590 # If pretty diagonally sorted order is wanted...
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
591 if ($conj>0) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
592 if ($conj==2) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
593 my $center = 0.5*(scalar(@hitseqs)-1);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
594 @conjseqs = splice(@hitseqs,$center+1,$center);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
595 splice(@hitseqs,0,0,@conjseqs);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
596 @hitseqs = reverse(@hitseqs);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
597
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
598 @conjnames = splice(@hitnames,$center+1,$center);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
599 splice(@hitnames,0,0,@conjnames);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
600 @hitnames = reverse(@hitnames);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
601 # Shorten namelines of all but first sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
602 my %count;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
603 for ($k=0; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
604 if ($k==$center) {$k++;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
605 $hitnames[$k]=~/(\S{1,14})/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
606 if (!defined $count{$1}) {$count{$1}=0;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
607 my $count = ++$count{$1};
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
608 # printf("vorher: %s ",$hitnames[$k]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
609 $hitnames[$k]=~s/^(\S{1,14}).*/$1:$count/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
610 # printf("nachher: %s\n",$hitnames[$k]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
611 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
612 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
613 for ($k=0; $k<@hitnames; $k++) {$hitnames[$k]=">$qname\n";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
614 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
615 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
616
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
617 # Remove gaps? Captialize?
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
618 if ($outformat eq "PIR") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
619 for ($k=0; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
620 $hitseqs[$k].="*";; # Transform to upper case
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
621 $hitseqs[$k]=~tr/a-z./A-Z-/; # Transform to upper case
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
622 $hitseqs[$k]=~s/(.{1,$NUMRES})/$1\n/g; # insert newlines every NUMRES positions
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
623 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
624 } elsif ($outformat eq "FASTA") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
625 for ($k=0; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
626 $hitseqs[$k]=~tr/a-z./A-Z-/; # Transform to upper case
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
627 $hitseqs[$k]=~s/(.{1,$NUMRES})/$1\n/g; # insert newlines every NUMRES positions
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
628 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
629 } elsif ($outformat eq "A2M") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
630 for ($k=0; $k<@hitnames; $k++) {$hitseqs[$k]=~s/(.{1,$NUMRES})/$1\n/g;} # insert newlines every NUMRES positions
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
631 } elsif ($outformat eq "A3M") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
632 for ($k=0; $k<@hitnames; $k++) {$hitseqs[$k]=~tr/.//d;$hitseqs[$k].="\n";} # Remove gaps aligned to inserts
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
633 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
634
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
635 # Write sequences into output file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
636 open (OUTFILE, ">$outfile") || die ("cannot open $outfile:$!");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
637 for ($k=0; $k<@hitnames; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
638 print(OUTFILE "$hitnames[$k]$hitseqs[$k]");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
639 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
640 close OUTFILE;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
641
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
642
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
643 if ($v>=2) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
644 printf("%i sequences written to $outfile\n",scalar(@hitnames));
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
645 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
646 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
647
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
648
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
649 # Format sequences into @hitseqs and @hitnames
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
650 # & Call with FormatSequences(\@hitnames,\@hitseqs,\@qname,\@qseq,\@qfirst,\@qlast,\$qlength,\@tname,\@tseq,\@tfirst,\@tlast,\$tlength);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
651 sub FormatSequences()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
652 {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
653 my $p_hitnames = $_[0]; # typeglob to $hitname
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
654 my $p_hitseqs = $_[1]; # ...
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
655 my $p_hitdiag = $_[2]; # ...
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
656
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
657 my $p_qname = $_[3]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
658 my $p_qseq = $_[4]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
659 my $p_qfirst = $_[5]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
660 my $p_qlast = $_[6]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
661 my $p_qlength = $_[7]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
662
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
663 my $p_tname = $_[8]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
664 my $p_tseq = $_[9]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
665 my $p_tfirst = $_[10]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
666 my $p_tlast = $_[11]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
667 my $p_tlength = $_[12]; #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
668 my $i;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
669
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
670 if ($v>=2) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
671 if (defined $picked{$hit}) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
672 print("hit=$hit picked=$picked{$hit} tname=$tname[0]");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
673 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
674 print("hit=$hit picked=evalue<$Ethr tname=$tname[0]");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
675 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
676 for (my $i=1; $i<@{$p_tname}; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
677 print(", $tname[$i]");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
678 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
679 print("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
680 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
681
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
682
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
683 my $qfirst = ${$p_qfirst}[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
684 my $qlast = ${$p_qlast}[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
685 my $qlength = ${$p_qlength};
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
686 my $aaq = ${$p_qseq}[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
687
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
688 @aaq = unpack("C*",$aaq); # needed for transforming template sequences into a3m based on query residues (NOT HMM match states!)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
689 $aaq=~tr/.-//d; # remove all gaps from query sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
690
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
691 # For all template sequences in the present alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
692 for (my $k=0; $k<@{$p_tname}; $k++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
693
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
694 $tname =${$p_tname}[$k];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
695 $tfirst=${$p_tfirst}[$k];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
696 $aat =${$p_tseq}[$k];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
697
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
698 # Transform template residues into a3m format:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
699 # match states are those where query has residue (NOT where HMM has match state!)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
700 # This makes sense since we want to build a model for the query sequence.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
701 @aat = unpack("C*",$aat);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
702 $aat="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
703
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
704 # Transform all columns with residue in query into match/delete states, all others to inserts
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
705 for ($i=0; $i<scalar(@aaq); $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
706 if ($aaq[$i]!=45 && $aaq[$i]!=46) { # no gap in query
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
707 if($aat[$i]==46) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
708 $aat.="-"; # transform '.' to '-' if aligned with a query residue
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
709 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
710 $aat .= uc(chr($aat[$i])); # UPPER case if aligned with a query residue (match state)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
711 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
712 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
713 if($aat[$i]!=45 && $aat[$i]!=46) { # no gap in template?
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
714 $aat.=lc(chr($aat[$i])); # lower case if aligned with a gap in the query (insert state)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
715 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
716 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
717 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
718
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
719 if ($v>=2) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
720 printf("\nQ %-14.14s %s\n",$qname,$aaq);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
721 printf("T %-14.14s %s\n",$tname,$aat);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
722 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
723
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
724 # Outformat is PIR? => read residues and indices from PDB ATOM records
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
725 if ($outformat eq "PIR") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
726
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
727 # Extract pdbcode and construct name of pdbfile and return in global variables $pdbid and $chain
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
728 if (&ExtractPdbcodeAndChain($tname)) {next;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
729
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
730 # Read sequence from pdb file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
731 if (!open (PDBFILE, "$pdbfile")) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
732 die ("Error in $program: Couldn't open $pdbfile: $!\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
733 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
734 $aapdb="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
735 $l=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
736 my @nres; # $nres[$l] = pdb residue index for residue $aapdb[$l]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
737 my $nres=-1e6;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
738 my $resolution=-1.00;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
739 my $rvalue=-1.00;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
740 while ($line=<PDBFILE>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
741 if ($line=~/^REMARK.*RESOLUTION\.\s+(\d+\.?\d*)/) {$resolution=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
742 if ($line=~/^REMARK.*R VALUE\s+\(WORKING SET\)\s+:\s+(\d+\.?\d*)/) {$rvalue=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
743 if ($line=~/^ENDMDL/) {last;} # if file contains NMR models read only first one
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
744 if (($line=~/^ATOM\s+\d+ .. [ A](\w{3}) $chain\s*(-?\d+.)/ ||
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
745 ($line=~/^HETATM\s+\d+ .. [ A](\w{3}) $chain\s*(-?\d+.)/ && &Three2OneLetter($1) ne "X") ) &&
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
746 $2 ne $nres ) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
747 $res=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
748 $nres=$2;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
749 $nres[$l]=$2;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
750 $res=&Three2OneLetter($res);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
751 $aapdb[$l++]=$res;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
752 $aapdb.=$res;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
753 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
754 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
755 close (PDBFILE);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
756 if (length($aapdb)<=0) {die("Error: chain $chain not found in pdb file $pdbfile\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
757
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
758 # Align template in hh-alignment ($aat) with template sequence in pdb ($aapdb)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
759 my $xseq=$aat;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
760 $xseq=~tr/-/~/; # transform Deletes to '~' to distinguish them from gaps '-' inserted by Align.pm
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
761 my $yseq=$aapdb;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
762 my ($jmin,$jmax,$lmin,$lmax);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
763 my $Sstr;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
764 my $score;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
765 # The aligned characters are returend in $j2[$col2] and $l2[$col2]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
766 $score=&AlignNW(\$xseq,\$yseq,\@j2,\@l2,\$jmin,\$jmax,\$lmin,\$lmax,\$Sstr);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
767
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
768 # DEBUG
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
769 if ($v>=3) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
770 printf("Template (hh) $xseq\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
771 printf("Identities $Sstr\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
772 printf("Template (pdb) $yseq\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
773 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
774 if ($v>=4) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
775 for ($col2=0; $col2<@l2 && $col2<1000; $col2++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
776 printf("%3i %3i:%s %3i:%s -> %i\n",$col2,$j2[$col2],substr($aat,$j2[$col2]-1,1),$l2[$col2],substr($aapdb,$l2[$col2]-1,1),$nres[$l2[$col2]-1]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
777 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
778 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
779 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
780
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
781 # check for reasonable alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
782 my $num_match = 0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
783 for ($i=0; $i<@l2; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
784 if ($j2[$i] > 0 && $l2[$i] > 0) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
785 $num_match++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
786 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
787 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
788 if (($score/$num_match) < 1) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
789 print "WARNING! Match score with PDBfile (score: $score num: $num_match score/num:".($score/$num_match).") to low => $pdbfile not included!\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
790 next;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
791 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
792
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
793 # Assign a3m-formatted amino acid sequence from pdb file to $aapdb
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
794 $aapdb="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
795 my @xseq=unpack("C*",$xseq);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
796 my @yseq=unpack("C*",$yseq);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
797 for ($i=0; $i<@yseq; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
798 if(($xseq[$i]>=65 && $xseq[$i]<=90) || $xseq[$i]==ord('~')) { # if $aat has upper case residue or Delete state
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
799 # Match state
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
800 $aapdb.=uc(chr($yseq[$i]));
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
801 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
802 # Insert state
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
803 if ($yseq[$i]!=45) {$aapdb.=lc(chr($yseq[$i]));} # add only if not a gap '-'
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
804 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
805 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
806
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
807 # Remove overlapping ends of $aapdb
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
808 $aapdb=~s/^[a-z]*(.*?)[a-z]*$/$1/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
809
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
810 # Glue gaps at beginning and end of aligned pdb sequence and add sequence to alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
811 push (@{$p_hitseqs}, ("-" x ($qfirst-1)).$aapdb.("-" x ($qlength-$qlast)) ); # use ATOM record residues $aapdb!
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
812
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
813 # Write hitname in PIR format into @hitnames
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
814 my $descr;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
815 my $organism;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
816 my $struc=$pdbcode;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
817 if ($tnameline=~/^(\S+)\s+(.*)/) {$descr=$2; $descr=~tr/://d;} else {$descr=" ";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
818 if ($tnameline=~/^(\S+)\s+.*\s+\{(.*)\}/) {$organism=$2;} else {$organism=" ";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
819 if (length($chain)>1 || $chain eq ".") { # MODELLER's special symbol for 'chain unspecified'
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
820 $chain=".";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
821 } elsif ($addchain && $chain ne " ") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
822 $struc.="_$chain";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
823 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
824 # push (@{$p_hitnames}, sprintf(">P1;%s\nstructureX:%4s:%4i:%1s:%4i:%1s:%s:%s:%-.2f:%-.2f\n",$struc,$struc,$nres[$lmin-1],$chain,$nres[$lmax-1],$chain,$descr,$organism,$resolution,$rvalue) );
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
825
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
826 my $descrtmp=$descr;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
827 $descrtmp=~tr/:/;/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
828 $organism=~tr/://d;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
829 push (@{$p_hitnames}, sprintf(">P1;%s\nstructureX:%4s: :%1s: :%1s:%s:%s:%-.2f:%-.2f\n",$struc,$struc,$chain,$chain,$descrtmp,$organism,$resolution,$rvalue) );
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
830 push (@{$p_hitdiag}, $tfirst-$qfirst);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
831 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
832 # outformat is "FASTA" or "A2M" or "A3M" or ...
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
833 # Write hitname in FASTA format into @hitnames
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
834 push (@{$p_hitseqs}, ("-" x ($qfirst-1)).$aat.("-" x ($qlength-$qlast)) );
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
835 push (@{$p_hitnames}, ">$tname\n" );
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
836 push (@{$p_hitdiag}, $tfirst-$qfirst);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
837 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
838
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
839 if ($onlyfirst>0) {last;} # extract only first (seed?) sequence in each alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
840
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
841 } # end: for (my $k=0; $k<@{$tname}; $k++)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
842
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
843 # Paste aligned subsequence of query over $hitseqs[0]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
844 if (${$p_hitseqs}[0] eq "") {${$p_hitseqs}[0] = "-" x $qlength;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
845 if (!$qfile) {substr(${$p_hitseqs}[0],$qfirst-1,length($aaq),$aaq);}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
846
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
847 return;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
848 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
849
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
850
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
851 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
852 # Read Alignment from infile (*.hhr file)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
853 # Results:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
854 # $aaq: query residues in present alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
855 # $qfirst: index of first query residue in present alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
856 # @tname: template names in present alignmen
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
857 # @tfirst: indices of first residues in present alignmet
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
858 # @tseq: sequences of templates in present alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
859 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
860 sub ReadAlignment() {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
861
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
862 @qname=(); # name of $it'th query in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
863 @qfirst=(); # index of first residue in $it'th query in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
864 @qlast=(); # index of last residue in $it'th query in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
865 @qseq=(); # residues of $it'th query in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
866
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
867 @tname=(); # name of $it'th template in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
868 @tfirst=(); # index of first residue in $it'th template in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
869 @tlast=(); # index of last residue in $it'th template in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
870 @tseq=(); # residues of $it'th template in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
871
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
872 if ($v>=3) {printf("Searching for Q $qname vs T $tname\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
873 $line=<INFILE>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
874
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
875 # Search for first line beginning with Q ot T and not followed by aa_, ss_pred, ss_conf, or Consensus
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
876 while (1) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
877 my $i; # index for query sequence in this alignment
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
878 # Scan up to first line starting with Q; stop when line 'No\s+\d+' or 'Done' is found
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
879 while (defined $line && $line!~/^Q\s(\S+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
880 if ($line=~/^No\s+\d/ || $line=~/^Done/) {last;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
881 $line=<INFILE>; next;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
882 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
883 if (!defined $line || $line=~/^No\s+\d/ || $line=~/^Done/) {last;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
884
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
885 # Scan up to first line that is not secondary structure line or consensus line
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
886 while (defined $line && $line=~/^Q\s+(ss_|sa_|aa_|Consens|Cons-)/) {$line=<INFILE>;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
887
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
888 # Read next block of query sequences
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
889 $i=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
890 while ($line=~/^Q\s+/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
891 if ($line!~/^Q\s+(ss_|sa_|aa_|Consens|Cons-)/ && $line=~/^Q\s*(\S+)\s+(\d+)\s+(\S+)\s+(\d+)\s+\((\d+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
892 $qname[$i]=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
893 if (!$qfirst[$i]) {$qfirst[$i]=$2;} # if $qfirst is undefined then this is the first alignment block -> set $qfirst to $1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
894 if (!$qseq[$i]) {$qseq[$i]=$3;} else {$qseq[$i].=$3;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
895 $qlast[$i]=$4;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
896 if ($i==0) {$qlength=$5}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
897 $i++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
898 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
899 $line=<INFILE>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
900 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
901 if ($i==0) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
902 die("\nError in $program: bad format in $infile, line $.: query block\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
903 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
904
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
905 # Scan up to first line starting with T
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
906 while (defined $line && $line!~/^T\s+(\S+)/) {$line=<INFILE>;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
907
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
908 # Scan up to first line that is not secondary structure line or consensus line
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
909 while (defined $line && $line=~/^T\s+(ss_|sa_|aa_|Consens|Cons-)/) {$line=<INFILE>;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
910
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
911 # Read next block of template sequences
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
912 $i=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
913 while ($line=~/^T\s+/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
914 if ($line!~/^T\s+(ss_|sa_|aa_|Consens|Cons-)/ && $line=~/^T\s*(\S+)\s+(\d+)\s+(\S+)\s+(\d+)\s+\((\d+)/){
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
915 $tname[$i]=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
916 if (!$tfirst[$i]) {$tfirst[$i]=$2;} # if $tfirst is undefined then this is the first alignment block -> set $tfirst to $1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
917 if (!$tseq[$i]) {$tseq[$i]=$3;} else {$tseq[$i].=$3;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
918 $tlast[$i]=$4;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
919 if ($i==0) {$tlength=$5}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
920 $i++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
921 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
922 $line=<INFILE>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
923 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
924 if ($i==0) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
925 die("\nError in $program: bad format in $infile, line $.: template block\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
926 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
927
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
928 } # end while ($line=<INFILE>)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
929
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
930 # if (!$qfirst) {$qfirst=1;} # if still $qfirst==0 then set $qfirst to 1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
931 # for (my $i=0; $i<@tfirst; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
932 # if (!$tfirst[$i]) {$tfirst[$i]=1;} # if still $tfirst[$i]==0 then set $tfirst to 1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
933 # }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
934
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
935 # Check lengths
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
936 if (length($qseq[0])!=length($tseq[0])) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
937 print("\nError: query and template lines do not have the same length in $infile, line $.\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
938 for (my $i=0; $i<@qfirst; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
939 printf("Q %-14.14s %s\n",$qname[$i],$qseq[$i]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
940 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
941 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
942 for (my $i=0; $i<@tfirst; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
943 printf("T %-14.14s %s\n",$tname[$i],$tseq[$i]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
944 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
945 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
946 exit 1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
947 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
948
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
949 if ($v>=3) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
950 for (my $i=0; $i<@qfirst; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
951 printf("Q %-14.14s %s\n",$qname[$i],$qseq[$i]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
952 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
953 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
954 for (my $i=0; $i<@tfirst; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
955 printf("T %-14.14s %s\n",$tname[$i],$tseq[$i]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
956 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
957 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
958 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
959 return;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
960 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
961
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
962
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
963 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
964 # Write Alignment to $printblock[$k]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
965 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
966 sub WritePairwiseAlignments() {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
967
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
968 #Delete columns with gaps in both sequences
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
969 $aaq=uc($aaq);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
970 $aat=uc($aat);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
971 @aaq=split(//,$aaq);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
972 @aat=split(//,$aat);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
973 my $col=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
974 for ($col1=0; $col1<@aaq; $col1++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
975 if ($aaq[$col1]=~tr/a-zA-Z/a-zA-Z/ || $aat[$col1]=~tr/a-zA-Z/a-zA-Z/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
976 $aaq[$col]=$aaq[$col1];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
977 $aat[$col]=$aat[$col1];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
978 $col++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
979 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
980 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
981 splice(@aaq,$col); # delete end of @aaq;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
982 splice(@aat,$col);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
983 $aaq=join("",@aaq);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
984 $aat=join("",@aat);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
985
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
986
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
987 # Count query and template residues into @i1 and @j1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
988 for ($col1=0; $col1<@aaq; $col1++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
989 if ($aaq[$col1]=~tr/a-zA-Z/a-zA-Z/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
990 $i1[$col1]=$qfirst++; #found query residue in $col1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
991 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
992 $i1[$col1]=0; #found gap in $col1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
993 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
994 if ($aat[$col1]=~tr/a-zA-Z/a-zA-Z/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
995 $j1[$col1]=$tfirst++; #found template residue in $col1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
996 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
997 $j1[$col1]=0; #found gap in $col1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
998 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
999 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1000
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1001
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1002 # DEBUG
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1003 if ($v>=3) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1004 printf ("col Q i1 T j1\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1005 for ($col1=0; $col1<@aaq; $col1++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1006 printf ("%3i %s %3i %s %3i\n",$col1,$aaq[$col1],$i1[$col1],$aat[$col1],$j1[$col1]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1007 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1008 printf ("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1009 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1010
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1011
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1012 # Read protein chain from pdb file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1013 # ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1014 # ATOM 1 N SER A 27 38.637 79.034 59.693 1.00 79.70 # ATOM 2083 CD1 LEU A 22S 15.343 -12.020 43.761 1.00 5.00 C
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1015
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1016 # Extract pdbcode and construct name of pdbfile and return in global variables $pdbid and $chain
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1017 if (&ExtractPdbcodeAndChain($tname)) {next;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1018
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1019 # Read sequence from pdb file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1020 if (! defined $pdbfile) {die ("Error in $program: Couldn't find pdb code in $tname\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1021 open (PDBFILE, "$pdbfile") || die ("Error in $program: Couldn't open $pdbfile: $!\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1022 if ($chain eq "[A ]") {$pdbcode.="_A";} elsif ($chain eq ".") {;} else {$pdbcode.="_$chain";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1023 $aapdb=""; $l=1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1024 $line=<PDBFILE>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1025 while ($line) {if ($line=~/^ATOM/) {last;} $line=<PDBFILE>;} # advance to ATOM records
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1026 my @nres; # $nres[$l] = pdb residue index for residue $aapdb[$l]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1027 my @coord; # $coord[$l] = coordinates of CA atom of residue $aapdb[$l]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1028 while ($line) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1029 if ($line=~/^ATOM\s+\d+ CA [ AB](\w{3}) $chain\s*(-?\d+.) (\s*\S+\s+\S+\s+\S+)/ ||
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1030 ($line=~/^HETATM\s+\d+ CA [ AB](\w{3}) $chain\s*(-?\d+.) (\s*\S+\s+\S+\s+\S+)/ && &Three2OneLetter($1) ne "X") ) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1031 $res=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1032 $nres[$l]=$2;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1033 $coord[$l]=$3." 1.00";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1034 $res=&Three2OneLetter($res);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1035 $aapdb[$l]=$res;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1036 $aapdb.=$res;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1037 $l++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1038 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1039 elsif ($l>10 && $line=~/^ATOM\s+\d+ CA/) {last;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1040 elsif ($line=~/^ENDMDL/) {last;} # if file contains NMR models read only first one
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1041 $line=<PDBFILE>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1042 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1043 close (PDBFILE);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1044
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1045 # Align template in hh-alignment ($aat) with template sequence in pdb ($aapdb)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1046
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1047 my $xseq=$aat;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1048 my $yseq=$aapdb;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1049 my ($jmin,$jmax,$lmin,$lmax);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1050 my $Sstr;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1051 my $score;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1052 $xseq=~tr/-/~/d; # transform Deletes to '~' to distinguish them from gaps inserted by Align.pm
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1053 #the aligned characters are returend in $j2[$col2] and $l2[$col2]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1054
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1055 if ($v>=3) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1056 printf("Template (hh) $xseq\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1057 printf("Identities $Sstr\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1058 printf("Template (pdb) $yseq\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1059 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1060 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1061
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1062 $score=&AlignNW(\$xseq,\$yseq,\@j2,\@l2,\$jmin,\$jmax,\$lmin,\$lmax,\$Sstr);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1063
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1064 # DEBUG
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1065 if ($v>=3) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1066 printf("Template (hh) $xseq\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1067 printf("Identities $Sstr\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1068 printf("Template (pdb) $yseq\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1069 printf("\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1070 if ($v>=4) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1071 for ($col2=0; $col2<@l2 && $col2<200; $col2++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1072 printf("%3i %3i %3i\n",$col2,$j2[$col2],$l2[$col2]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1073 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1074 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1075 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1076
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1077 # DEBUG
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1078
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1079 # Construct alignment of $aaq <-> $aapdb via alignments $aaq <-> $aat and $aat <-> $aapdb:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1080 # Find $l1[$col1] = line of pdb file corresponding to residue $aat[$col1] and $aaq[$col1]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1081 $col2=0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1082 for ($col1=0; $col1<@aaq; $col1++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1083 if ($j1[$col1]==0 || $i1[$col1]==0) {$l1[$col1]=0; next;} # skip gaps in query and gaps in template
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1084 while ($j2[$col2]<$col1+1) {$col2++;} # in $j2[col2] first index is 1, in $col1 first column is 0
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1085 $l1[$col1] = $l2[$col2];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1086 if ($v>=4) {printf("l1[%i]=%i l2[%i]=%i\n",$col1,$l1[$col1],$col2,$l2[$col2]);}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1087 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1088
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1089
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1090 if ($pdbcode ne "NONE") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1091 if ($outformat eq "TS") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1092 for ($col1=0; $col1<@aat; $col1++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1093 if ($i1[$col1]==0) {next;} # skip gaps in query
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1094 if ($j1[$col1]==0) {next;} # skip gaps in template sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1095 if ($l1[$col1]==0) {next;} # skip if corresponding residue was skipped in pdb file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1096
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1097 $printblock[$k].=sprintf("ATOM %5i CA %3s %4i %-50.50s\n",$i1[$col1],&One2ThreeLetter($aaq[$col1]),$i1[$col1]+$shift,$coord[$l1[$col1]]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1098 if ($v>=4) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1099 printf("ATOM %5i CA %3s %4i %-50.50s\n",$i1[$col1],&One2ThreeLetter($aaq[$col1]),$i1[$col1]+$shift,$coord[$l1[$col1]]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1100 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1101 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1102 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1103 for ($col1=0; $col1<@aat; $col1++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1104 if ($i1[$col1]==0) {next;} # skip gaps in query
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1105 if ($j1[$col1]==0) {next;} # skip gaps in template sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1106 if ($l1[$col1]==0) {next;} # skip if corresponding residue was skipped in pdb file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1107 $printblock[$k].=sprintf("%1s %3i %1s %s\n",$aaq[$col1],$i1[$col1],$aat[$col1],$nres[$l1[$col1]]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1108 if ($v>=4) {printf("%1s %3i %1s %s\n",$aaq[$col1],$i1[$col1],$aat[$col1],$nres[$l1[$col1]]);}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1109 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1110 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1111 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1112 $printblock[$k].=sprintf("TER\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1113 return;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1114 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1115
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1116
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1117
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1118 # Extract pdbcode and construct name of pdbfile and return in global variables $pdbid and $chain
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1119 sub ExtractPdbcodeAndChain()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1120 {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1121 my $name=$_[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1122 $name=~/^(\S+)/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1123 $name=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1124
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1125 # SCOP ID? (d3lkfa_,d3grs_3,d3pmga1,g1m26.1)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1126 if ($name=~/^[defgh](\d[a-z0-9]{3})([a-z0-9_.])[a-z0-9_]$/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1127 $pdbcode=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1128 if ($2 eq "_") {$chain="[A ]";} else {$chain=uc($2);}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1129 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1130
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1131 # PDB ID? (8fab, 1a0i)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1132 elsif ($name=~/^(\d[a-z0-9]{3})$/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1133 $pdbcode=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1134 $chain="[A ]";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1135 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1136
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1137 # PDB ID? (8fab_A)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1138 elsif ($name=~/^(\d[a-z0-9]{3})_(\S)$/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1139 $pdbcode=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1140 $chain=$2;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1141 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1142
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1143 # PDB ID? (1u1z_ABC)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1144 elsif ($name=~/^(\d[a-z0-9]{3})_(\S\S+)$/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1145 $pdbcode=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1146 $chain="[$2]";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1147 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1148
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1149 # DALI ID? (8fabA_0,1a0i_2)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1150 elsif ($name=~/^(\d[a-z0-9]{3})([A-Za-z0-9]?)_\d+$/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1151 $pdbcode=$1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1152 $chain=$2;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1153 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1154
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1155 else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1156 $pdbcode=$name;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1157 $chain="A";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1158 # return 1; # no SCOP/DALI/pdb sequence
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1159 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1160
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1161 &FindPDBfile($pdbcode);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1162
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1163 if ($pdbfile eq "") {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1164 if ($v>=2) {print("Warning: no pdb file found for sequence name '$name'\n");}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1165 return 1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1166 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1167 return 0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1168 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1169
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1170
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1171 # Resort arrays according to sorting array0:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1172 # Resort(\@array0,\@array1,...,\@arrayN)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1173 sub Sort()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1174 {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1175 my $p_array0 = $_[0];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1176 my @index=();
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1177 for (my $i=0; $i<@{$p_array0}; $i++) {$index[$i]=$i;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1178 @index = sort { ${$p_array0}[$a] <=> ${$p_array0}[$b] } @index;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1179 foreach my $p_array (@_) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1180 my @dummy = @{$p_array};
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1181 @{$p_array}=();
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1182 foreach my $i (@index) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1183 push(@{$p_array}, $dummy[$i]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1184 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1185 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1186 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1187
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1188 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1189 # Convert three-letter amino acid code into one-letter code
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1190 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1191 sub Three2OneLetter {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1192 my $res=uc($_[0]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1193 if ($res eq "GLY") {return "G";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1194 elsif ($res eq "ALA") {return "A";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1195 elsif ($res eq "VAL") {return "V";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1196 elsif ($res eq "LEU") {return "L";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1197 elsif ($res eq "ILE") {return "I";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1198 elsif ($res eq "MET") {return "M";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1199 elsif ($res eq "PHE") {return "F";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1200 elsif ($res eq "TYR") {return "Y";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1201 elsif ($res eq "TRP") {return "W";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1202 elsif ($res eq "ASN") {return "N";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1203 elsif ($res eq "ASP") {return "D";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1204 elsif ($res eq "GLN") {return "Q";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1205 elsif ($res eq "GLU") {return "E";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1206 elsif ($res eq "CYS") {return "C";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1207 elsif ($res eq "PRO") {return "P";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1208 elsif ($res eq "SER") {return "S";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1209 elsif ($res eq "THR") {return "T";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1210 elsif ($res eq "LYS") {return "K";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1211 elsif ($res eq "HIS") {return "H";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1212 elsif ($res eq "ARG") {return "R";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1213
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1214 # The HETATM selenomethionine is read by MODELLER like a normal MET in both its HETATM_IO=off and on mode!
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1215 elsif ($res eq "MSE") {return "M";} # SELENOMETHIONINE
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1216 elsif ($res eq "ASX") {return "B";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1217 elsif ($res eq "GLX") {return "Z";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1218 else {return "X";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1219
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1220 # The following post-translationally modified residues are ignored by MODELLER in its default SET HETATM_IO=off mode
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1221 # elsif ($res eq "SEC") {return "C";} # SELENOCYSTEINE
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1222 # elsif ($res eq "SEP") {return "S";} # PHOSPHOSERINE
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1223 # elsif ($res eq "TPO") {return "T";} # PHOSPHOTHREONINE
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1224 # elsif ($res eq "TYS") {return "Y";} # SULFONATED TYROSINE
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1225 # elsif ($res eq "KCX") {return "K";} # LYSINE NZ-CARBOXYLIC ACID
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1226 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1227
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1228 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1229 # Convert one-letter amino acid code into three-letter code
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1230 ##################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1231 sub One2ThreeLetter {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1232 my $res=uc($_[0]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1233 if ($res eq "G") {return "GLY";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1234 elsif ($res eq "A") {return "ALA";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1235 elsif ($res eq "V") {return "VAL";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1236 elsif ($res eq "L") {return "LEU";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1237 elsif ($res eq "I") {return "ILE";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1238 elsif ($res eq "M") {return "MET";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1239 elsif ($res eq "F") {return "PHE";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1240 elsif ($res eq "Y") {return "TYR";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1241 elsif ($res eq "W") {return "TRP";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1242 elsif ($res eq "N") {return "ASN";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1243 elsif ($res eq "D") {return "ASP";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1244 elsif ($res eq "Q") {return "GLN";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1245 elsif ($res eq "E") {return "GLU";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1246 elsif ($res eq "C") {return "CYS";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1247 elsif ($res eq "P") {return "PRO";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1248 elsif ($res eq "S") {return "SER";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1249 elsif ($res eq "T") {return "THR";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1250 elsif ($res eq "K") {return "LYS";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1251 elsif ($res eq "H") {return "HIS";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1252 elsif ($res eq "R") {return "ARG";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1253 elsif ($res eq "U") {return "SEC";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1254 elsif ($res eq "B") {return "ASX";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1255 elsif ($res eq "Z") {return "GLX";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1256 else {return "UNK";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1257 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1258
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1259 # Find the pdb file with $pdbcode in pdb directory
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1260 sub FindPDBfile() {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1261
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1262 my $pdbcode=lc($_[0]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1263 foreach $pdbdir (@pdbdirs) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1264 if (! -e "$pdbdir") {warn("Warning in $program: pdb directory '$pdbdir' does not exist!\n"); next;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1265 if (-e "$pdbdir/all") {$pdbfile="$pdbdir/all/";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1266 elsif (-e "$pdbdir/divided") {$pdbfile="$pdbdir/divided/".substr($pdbcode,1,2)."/";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1267 else {$pdbfile="$pdbdir/";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1268 if ($pdbdir=~/divided.?$/) {$pdbfile.=substr($pdbcode,1,2)."/";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1269 if (-e $pdbfile."pdb$pdbcode.ent") {$pdbfile.="pdb$pdbcode.ent";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1270 elsif (-e $pdbfile."pdb$pdbcode.ent.gz") {$pdbfile="gunzip -c $pdbfile"."pdb$pdbcode.ent.gz |";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1271 elsif (-e $pdbfile."pdb$pdbcode.ent.Z") {$pdbfile="gunzip -c $pdbfile"."pdb$pdbcode.ent.Z |";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1272 elsif (-e $pdbfile."$pdbcode.pdb") {$pdbfile.="$pdbcode.pdb";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1273 else {next;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1274 return $pdbfile;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1275 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1276 printf(STDERR "Warning in $program: Cannot find pdb file $pdbfile"."pdb$pdbcode.ent!\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1277 return "";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1278 }