<classpathentry kind="lib" path="lib/jdas-1.0.4.jar"/>
<classpathentry kind="lib" path="lib/spring-core-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="lib/spring-web-3.0.5.RELEASE.jar"/>
- <classpathentry kind="lib" path="lib/groovy-all-1.8.2.jar"/>
<classpathentry kind="lib" path="lib/min-jabaws-client-2.1.0.jar" sourcepath="/clustengine"/>
<classpathentry kind="lib" path="lib/json_simple-1.1.jar" sourcepath="/Users/jimp/Downloads/json_simple-1.1-all.zip"/>
<classpathentry kind="lib" path="lib/slf4j-api-1.7.7.jar"/>
<classpathentry kind="lib" path="lib/VARNAv3-93.jar"/>
<classpathentry kind="lib" path="lib/jfreesvg-2.1.jar"/>
<classpathentry kind="lib" path="lib/quaqua-filechooser-only-8.0.jar"/>
+ <classpathentry kind="lib" path="lib/htsjdk-1.133.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/plugin"/>
<classpathentry kind="lib" path="lib/xml-apis.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="lib" path="lib/java-json.jar"/>
<classpathentry kind="lib" path="lib/Jmol-14.2.14_2015.06.11.jar"/>
<classpathentry kind="con" path="org.testng.TESTNG_CONTAINER"/>
+ <classpathentry kind="lib" path="lib/biojava-core-4.1.0.jar"/>
+ <classpathentry kind="lib" path="lib/biojava-ontology-4.1.0.jar"/>
+ <classpathentry kind="lib" path="lib/groovy-all-2.4.6-indy.jar"/>
<classpathentry kind="output" path="classes"/>
</classpath>
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
org.eclipse.jdt.core.formatter.comment.format_header=false
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
commons-logging-1.1.1.jar
commons-logging.jar
commons-net-3.3.jar
+groovy-all-2.4.6-indy.jar APL 2.0 License - downloaded and extracted from https://dl.bintray.com/groovy/maven/apache-groovy-binary-2.4.6.zip
httpclient-4.0.3.jar
httpcore-4.0.1.jar
httpmime-4.0.3.jar
quaqua: v.8.0 (latest stable) by Randel S Hofer. LGPL and BSD Modified license: downloaded from http://www.randelshofer.ch/quaqua/
+lib/htsjdk-1.120-SNAPSHOT.jar: built from maven master at https://github.com/samtools/htsjdk MIT License to Broad Institute
+
+
Additional dependencies
examples/javascript/deployJava.js : http://java.com/js/deployJava.js
</information>
<resources>
<j2se version="${j2sev}" initial_heap_size="${inih}" max_heap_size="${maxh}" />
+ <jar main="true" href="jalview.jar"/>
<fileset dir="${packageDir}">
- <include name="jalview.jar" />
- </fileset>
- <fileset dir="${packageDir}">
+ <exclude name="jalview.jar" />
<include name="*.jar" />
<include name="*_*.jar" />
- <exclude name="jalview.jar" />
<exclude name="*jnilib.jar" />
</fileset>
<property name="jalview.version" value="${JALVIEW_VERSION}" />
<target name="compileApplet" depends="init,clean">
<mkdir dir="${outputDir}" />
- <javac source="${javac.source}" target="${javac.target}" srcdir="${sourceDir}" destdir="${outputDir}" debug="${javac.debug}" classpathref="jalviewlite.deps" includes="jalview/appletgui/**" excludes="ext/**,gui/**,jbgui/**,MCview/**,org/**,vamsas/**,jalview/ext/rbvi/**,jalview/ext/paradise/**" />
+ <javac source="${javac.source}" target="${javac.target}" srcdir="${sourceDir}" destdir="${outputDir}" debug="${javac.debug}" classpathref="jalviewlite.deps" includes="jalview/appletgui/**" excludes="ext/**,gui/**,jbgui/**,MCview/**,org/**,vamsas/**,jalview/ext/rbvi/**,jalview/ext/paradise/**,jalview/ext/ensembl/**,jalview/ext/so" />
</target>
<target name="packageApplet" depends="compileApplet, buildPropertiesFile">
<pathelement location="appletlib/${jsoup}" />
<pathelement location="appletlib/${jsonSimple}" />
<pathelement location="appletlib/${javaJson}" />
- <pathelement location="appletlib/plugin.jar" />
+ <fileset dir="${java.home}/lib">
+ <include name="plugin.jar" />
+ </fileset>
</path>
<taskdef resource="proguard/ant/task.properties" classpath="utils/proguard.jar" />
</title>
<body>
<h1>
-Adding Groovy Support to Jalview
+Groovy Support in Jalview
</h1>
<p>
-There is currently no scripting language
-extension within Jalview, in part because a
-scripting API has not yet been developed.
-</p>
-<p>It is, however, really easy to embed scripting
-engines like groovy. If groovy is detected on the
-classpath, a new menu entry on the Desktop's Tools
-menu will open the GroovyShell.
+ <a href="http://www.groovy-lang.org">Groovy</a> has been bundled with the Jalview desktop since circa 2012. The program supports interactive execution of groovy scripts via the Groovy Console, and command line execution via the '-groovy' option. The main source for documentation about Groovy in Jalview is the <a href="http://www.jalview.org/help/html/features/groovy.html">online help pages</a>.
</p>
<p>Here are some scripts to get you started:</p>
<ul><li>Getting the title, alignment and first sequence from the current alignFrame<br>
<pre>
-def alf = Jalview.getAlignframes();
+def alf = Jalview.getAlignFrames();
print alf[0].getTitle();
def alignment = alf[0].viewport.alignment;
def seq = alignment.getSequenceAt(0);
</pre>
</li>
</ul>
-<h1>Getting Groovy...</h1>
-<p>
-You need the core groovy jars which include the GroovyShell. The easiest way of doing
-this is to add the groovy-all-*.jar to the lib directory whose path is given in the java.ext.dirs property.</p>
-<p>The is obtained from the <em>embedded</em> directory within the <a
-href="http://dist.codehaus.org/groovy/distributions"/>groovy distribution</a>).
-</p>
<h2>TODO</h2>
<p>
Using Java class methods from Groovy is straightforward, but currently, there isn't a set of easy to use methods for the jalview objects. A Jalview Scripting API needs to be developed to make this easier.</p>
-#-------------------------------------------------------------------------------
-# Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
-# Copyright (C) $$Year-Rel$$ The Jalview Authors
-#
-# This file is part of Jalview.
-#
-# Jalview is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
-#
-# Jalview is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE. See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
-# The Jalview Authors are detailed in the 'AUTHORS' file.
-#-------------------------------------------------------------------------------
-ST-TURN-IIL 705b23
-GAMMA-TURN-CLASSIC 788763
+ST-TURN-IIL blue|255,0,255|absolute|20.0|95.0|below|66.0
+GAMMA-TURN-CLASSIC red|0,255,255|20.0|95.0|below|66.0
BETA-TURN-IR 9a6a94
BETA-TURN-IL d6a6ca
BETA-BULGE 1dc451
--- /dev/null
+import jalview.workers.FeatureCounterI;
+import jalview.workers.AlignmentAnnotationFactory;
+
+/*
+ * Example script that registers two alignment annotation calculators
+ * - one that counts residues in a column with Pfam annotation
+ * - one that counts only charged residues with Pfam annotation
+ * To try this, first load uniref50.fa from the examples folder, then load features
+ * from examples/exampleFeatures.txt, before running this script from the Groovy console.
+
+ * Modify this example as required to count by column any desired value that can be
+ * derived from the residue and sequence features at each position of an alignment.
+ */
+
+/*
+ * A closure that returns true for any Charged residue
+ */
+def isCharged = { residue ->
+ switch(residue) {
+ case ['D', 'd', 'E', 'e', 'H', 'h', 'K', 'k', 'R', 'r']:
+ return true
+ }
+ false
+}
+
+/*
+ * A closure that returns 1 if sequence features include type 'Pfam', else 0
+ * Argument should be a list of SequenceFeature
+ */
+def hasPfam = { features ->
+ for (sf in features)
+ {
+ /*
+ * Here we inspect the type of the sequence feature.
+ * You can also test sf.description, sf.score, sf.featureGroup,
+ * sf.strand, sf.phase, sf.begin, sf.end
+ * or sf.getValue(attributeName) for GFF 'column 9' properties
+ */
+ if ("Pfam".equals(sf.type))
+ {
+ return true
+ }
+ }
+ false
+}
+
+/*
+ * Closure that counts residues with a Pfam feature annotation
+ * Parameters are
+ * - the name (label) for the alignment annotation
+ * - the description (tooltip) for the annotation
+ * - a closure (groovy function) that tests whether to include a residue
+ * - a closure that tests whether to increment count based on sequence features
+ */
+def getColumnCounter = { name, desc, acceptResidue, acceptFeatures ->
+ [
+ getName: { name },
+ getDescription: { desc },
+ getMinColour: { [0, 255, 255] }, // cyan
+ getMaxColour: { [0, 0, 255] }, // blue
+ count:
+ { res, feats ->
+ def c = 0
+ if (acceptResidue.call(res))
+ {
+ if (acceptFeatures.call(feats))
+ {
+ c++
+ }
+ }
+ c
+ }
+ ] as FeatureCounterI
+}
+
+/*
+ * Define an annotation that counts any residue with Pfam domain annotation
+ */
+def pfamAnnotation = getColumnCounter("Pfam", "Count of residues with Pfam domain annotation", {true}, hasPfam)
+
+/*
+ * Define an annotation that counts charged residues with Pfam domain annotation
+ */
+def chargedPfamAnnotation = getColumnCounter("Pfam charged", "Count of charged residues with Pfam domain annotation", isCharged, hasPfam)
+
+/*
+ * Register the annotations
+ */
+AlignmentAnnotationFactory.newCalculator(pfamAnnotation)
+AlignmentAnnotationFactory.newCalculator(chargedPfamAnnotation)
--- /dev/null
+import jalview.workers.AlignmentAnnotationFactory;
+import jalview.workers.AnnotationProviderI;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.util.ColorUtils;
+import jalview.util.Comparison;
+import java.awt.Color;
+
+/*
+ * Example script to compute two alignment annotations
+ * - count of Phosphorylation features
+ * - count of Turn features
+ * To try this, first load example file uniref50.fa and load on features file
+ * exampleFeatures.txt, before running this script
+ *
+ * The script only needs to be run once - it will be registered by Jalview
+ * and recalculated automatically when the alignment changes.
+ */
+
+/*
+ * A closure that returns true if value includes "PHOSPHORYLATION"
+ */
+def phosCounter = { type -> type.contains("PHOSPHORYLATION") }
+
+/*
+ * A closure that returns true if value includes "TURN"
+ */
+def turnCounter = { type -> type.contains("TURN") }
+
+/*
+ * A closure that computes and returns an array of Annotation values,
+ * one for each column of the alignment
+ */
+def getAnnotations(al, fr, counter)
+{
+ def width = al.width
+ def counts = new int[width]
+ def max = 0
+
+ /*
+ * count features in each column, record the maximum value
+ */
+ for (col = 0 ; col < width ; col++)
+ {
+ def count = 0
+ for (row = 0 ; row < al.height ; row++)
+ {
+ seq = al.getSequenceAt(row)
+ if (seq != null && col < seq.getLength())
+ {
+ def res = seq.getCharAt(col)
+ if (!Comparison.isGap(res))
+ {
+ pos = seq.findPosition(col)
+ features = fr.findFeaturesAtRes(seq, pos)
+ for (feature in features)
+ {
+ if (counter.call(feature.type))
+ {
+ count++
+ }
+ }
+ }
+ }
+ }
+ counts[col] = count
+ if (count > max)
+ {
+ max = count
+ }
+ }
+
+ /*
+ * make the Annotation objects, with a graduated colour scale
+ * (from min value to max value) for the histogram bars
+ */
+ def zero = '0' as char
+ def anns = new Annotation[width]
+ for (col = 0 ; col < width ; col++)
+ {
+ def c = counts[col]
+ if (c > 0)
+ {
+ Color color = ColorUtils.getGraduatedColour(c, 0, Color.cyan,
+ max, Color.blue)
+ anns[col] = AlignmentAnnotationFactory.newAnnotation(String.valueOf(c),
+ String.valueOf(c), zero, c, color)
+ }
+ }
+ anns
+}
+
+/*
+ * Define the method that performs the calculations, and builds two
+ * AlignmentAnnotation objects
+ */
+def annotator =
+ [ calculateAnnotation: { al, fr ->
+ def phosAnns = getAnnotations(al, fr, phosCounter)
+ def ann1 = AlignmentAnnotationFactory.newAlignmentAnnotation("Phosphorylation", "Count of Phosphorylation features", phosAnns)
+ def turnAnns = getAnnotations(al, fr, turnCounter)
+ def ann2 = AlignmentAnnotationFactory.newAlignmentAnnotation("Turn", "Count of Turn features", turnAnns)
+ return [ann1, ann2]
+ }
+ ] as AnnotationProviderI
+
+/*
+ * Register the annotation calculator with Jalview
+ */
+AlignmentAnnotationFactory.newCalculator(annotator)
--- /dev/null
+data_1QCF
+#
+_entry.id 1QCF
+#
+_audit_conform.dict_name mmcif_pdbx.dic
+_audit_conform.dict_version 4.007
+_audit_conform.dict_location http://mmcif.pdb.org/dictionaries/ascii/mmcif_pdbx.dic
+#
+loop_
+_database_2.database_id
+_database_2.database_code
+PDB 1QCF
+RCSB RCSB009070
+#
+loop_
+_database_PDB_rev.num
+_database_PDB_rev.date
+_database_PDB_rev.date_original
+_database_PDB_rev.status
+_database_PDB_rev.replaces
+_database_PDB_rev.mod_type
+1 1999-06-08 1999-05-04 ? 1QCF 0
+2 2003-09-23 ? ? 1QCF 1
+3 2009-02-24 ? ? 1QCF 1
+#
+loop_
+_database_PDB_rev_record.rev_num
+_database_PDB_rev_record.type
+_database_PDB_rev_record.details
+2 JRNL ?
+2 DBREF ?
+3 VERSN ?
+#
+_pdbx_database_related.db_name PDB
+_pdbx_database_related.db_id 1AD5
+_pdbx_database_related.details '1AD5 CONTAINS THE WILD-TYPE PROTEIN COMPLEXED WITH AMP-PNP'
+_pdbx_database_related.content_type unspecified
+#
+_pdbx_database_status.status_code REL
+_pdbx_database_status.entry_id 1QCF
+_pdbx_database_status.deposit_site RCSB
+_pdbx_database_status.process_site RCSB
+_pdbx_database_status.SG_entry .
+#
+loop_
+_audit_author.name
+_audit_author.pdbx_ordinal
+'Schindler, T.' 1
+'Sicheri, F.' 2
+'Pico, A.' 3
+'Gazit, A.' 4
+'Levitzki, A.' 5
+'Kuriyan, J.' 6
+#
+_citation.id primary
+_citation.title 'Crystal structure of Hck in complex with a Src family-selective tyrosine kinase inhibitor.'
+_citation.journal_abbrev Mol.Cell
+_citation.journal_volume 3
+_citation.page_first 639
+_citation.page_last 648
+_citation.year 1999
+_citation.journal_id_ASTM MOCEFL
+_citation.country US
+_citation.journal_id_ISSN 1097-2765
+_citation.journal_id_CSD 2168
+_citation.book_publisher ?
+_citation.pdbx_database_id_PubMed 10360180
+_citation.pdbx_database_id_DOI '10.1016/S1097-2765(00)80357-3'
+#
+loop_
+_citation_author.citation_id
+_citation_author.name
+_citation_author.ordinal
+primary 'Schindler, T.' 1
+primary 'Sicheri, F.' 2
+primary 'Pico, A.' 3
+primary 'Gazit, A.' 4
+primary 'Levitzki, A.' 5
+primary 'Kuriyan, J.' 6
+#
+_cell.entry_id 1QCF
+_cell.length_a 51.015
+_cell.length_b 99.002
+_cell.length_c 103.387
+_cell.angle_alpha 90
+_cell.angle_beta 90
+_cell.angle_gamma 90
+_cell.Z_PDB 4
+_cell.pdbx_unique_axis ?
+#
+_symmetry.entry_id 1QCF
+_symmetry.space_group_name_H-M 'P 21 21 21'
+_symmetry.pdbx_full_space_group_name_H-M ?
+_symmetry.cell_setting ?
+_symmetry.Int_Tables_number ?
+#
+loop_
+_entity.id
+_entity.type
+_entity.src_method
+_entity.pdbx_description
+_entity.formula_weight
+_entity.pdbx_number_of_molecules
+_entity.details
+_entity.pdbx_mutation
+_entity.pdbx_fragment
+_entity.pdbx_ec
+1 polymer man 'HAEMATOPOETIC CELL KINASE (HCK)' 52000.762 1 ? 'Q528E, Q529E, Q530I'
+'SH3-SH2-KINASE-HIGH AFFINITY TAIL' ?
+2 non-polymer syn '1-TER-BUTYL-3-P-TOLYL-1H-PYRAZOLO[3,4-D]PYRIMIDIN-4-YLAMINE' 281.360 1 ? ? ? ?
+3 water nat water 18.015 312 ? ? ? ?
+#
+loop_
+_entity_keywords.entity_id
+_entity_keywords.text
+1 ?
+2 ?
+3 ?
+#
+_entity_poly.entity_id 1
+_entity_poly.type 'polypeptide(L)'
+_entity_poly.nstd_linkage no
+_entity_poly.nstd_monomer yes
+_entity_poly.pdbx_seq_one_letter_code
+;GAMGSGIRIIVVALYDYEAIHHEDLSFQKGDQMVVLEESGEWWKARSLATRKEGYIPSNYVARVDSLETEEWFFKGISRK
+DAERQLLAPGNMLGSFMIRDSETTKGSYSLSVRDYDPRQGDTVKHYKIRTLDNGGFYISPRSTFSTLQELVDHYKKGNDG
+LCQKLSVPCMSSKPQKPWEKDAWEIPRESLKLEKKLGAGQFGEVWMATYNKHTKVAVKTMKPGSMSVEAFLAEANVMKTL
+QHDKLVKLHAVVTKEPIYIITEFMAKGSLLDFLKSDEGSKQPLPKLIDFSAQIAEGMAFIEQRNYIHRDLRAANILVSAS
+LVCKIADFGLARVIEDNEYTAREGAKFPIKWTAPEAINFGSFTIKSDVWSFGILLMEIVTYGRIPYPGMSNPEVIRALER
+GYRMPRPENCPEELYNIMMRCWKNRPEERPTFEYIQSVLDDFYTATESQ(PTR)EEIP
+;
+_entity_poly.pdbx_seq_one_letter_code_can
+;GAMGSGIRIIVVALYDYEAIHHEDLSFQKGDQMVVLEESGEWWKARSLATRKEGYIPSNYVARVDSLETEEWFFKGISRK
+DAERQLLAPGNMLGSFMIRDSETTKGSYSLSVRDYDPRQGDTVKHYKIRTLDNGGFYISPRSTFSTLQELVDHYKKGNDG
+LCQKLSVPCMSSKPQKPWEKDAWEIPRESLKLEKKLGAGQFGEVWMATYNKHTKVAVKTMKPGSMSVEAFLAEANVMKTL
+QHDKLVKLHAVVTKEPIYIITEFMAKGSLLDFLKSDEGSKQPLPKLIDFSAQIAEGMAFIEQRNYIHRDLRAANILVSAS
+LVCKIADFGLARVIEDNEYTAREGAKFPIKWTAPEAINFGSFTIKSDVWSFGILLMEIVTYGRIPYPGMSNPEVIRALER
+GYRMPRPENCPEELYNIMMRCWKNRPEERPTFEYIQSVLDDFYTATESQYEEIP
+;
+_entity_poly.pdbx_strand_id A
+#
+loop_
+_entity_poly_seq.entity_id
+_entity_poly_seq.num
+_entity_poly_seq.mon_id
+_entity_poly_seq.hetero
+1 1 GLY n
+1 2 ALA n
+1 3 MET n
+1 4 GLY n
+1 5 SER n
+1 6 GLY n
+1 7 ILE n
+1 8 ARG n
+1 9 ILE n
+1 10 ILE n
+1 11 VAL n
+1 12 VAL n
+1 13 ALA n
+1 14 LEU n
+1 15 TYR n
+1 16 ASP n
+1 17 TYR n
+1 18 GLU n
+1 19 ALA n
+1 20 ILE n
+1 21 HIS n
+1 22 HIS n
+1 23 GLU n
+1 24 ASP n
+1 25 LEU n
+1 26 SER n
+1 27 PHE n
+1 28 GLN n
+1 29 LYS n
+1 30 GLY n
+1 31 ASP n
+1 32 GLN n
+1 33 MET n
+1 34 VAL n
+1 35 VAL n
+1 36 LEU n
+1 37 GLU n
+1 38 GLU n
+1 39 SER n
+1 40 GLY n
+1 41 GLU n
+1 42 TRP n
+1 43 TRP n
+1 44 LYS n
+1 45 ALA n
+1 46 ARG n
+1 47 SER n
+1 48 LEU n
+1 49 ALA n
+1 50 THR n
+1 51 ARG n
+1 52 LYS n
+1 53 GLU n
+1 54 GLY n
+1 55 TYR n
+1 56 ILE n
+1 57 PRO n
+1 58 SER n
+1 59 ASN n
+1 60 TYR n
+1 61 VAL n
+1 62 ALA n
+1 63 ARG n
+1 64 VAL n
+1 65 ASP n
+1 66 SER n
+1 67 LEU n
+1 68 GLU n
+1 69 THR n
+1 70 GLU n
+1 71 GLU n
+1 72 TRP n
+1 73 PHE n
+1 74 PHE n
+1 75 LYS n
+1 76 GLY n
+1 77 ILE n
+1 78 SER n
+1 79 ARG n
+1 80 LYS n
+1 81 ASP n
+1 82 ALA n
+1 83 GLU n
+1 84 ARG n
+1 85 GLN n
+1 86 LEU n
+1 87 LEU n
+1 88 ALA n
+1 89 PRO n
+1 90 GLY n
+1 91 ASN n
+1 92 MET n
+1 93 LEU n
+1 94 GLY n
+1 95 SER n
+1 96 PHE n
+1 97 MET n
+1 98 ILE n
+1 99 ARG n
+1 100 ASP n
+1 101 SER n
+1 102 GLU n
+1 103 THR n
+1 104 THR n
+1 105 LYS n
+1 106 GLY n
+1 107 SER n
+1 108 TYR n
+1 109 SER n
+1 110 LEU n
+1 111 SER n
+1 112 VAL n
+1 113 ARG n
+1 114 ASP n
+1 115 TYR n
+1 116 ASP n
+1 117 PRO n
+1 118 ARG n
+1 119 GLN n
+1 120 GLY n
+1 121 ASP n
+1 122 THR n
+1 123 VAL n
+1 124 LYS n
+1 125 HIS n
+1 126 TYR n
+1 127 LYS n
+1 128 ILE n
+1 129 ARG n
+1 130 THR n
+1 131 LEU n
+1 132 ASP n
+1 133 ASN n
+1 134 GLY n
+1 135 GLY n
+1 136 PHE n
+1 137 TYR n
+1 138 ILE n
+1 139 SER n
+1 140 PRO n
+1 141 ARG n
+1 142 SER n
+1 143 THR n
+1 144 PHE n
+1 145 SER n
+1 146 THR n
+1 147 LEU n
+1 148 GLN n
+1 149 GLU n
+1 150 LEU n
+1 151 VAL n
+1 152 ASP n
+1 153 HIS n
+1 154 TYR n
+1 155 LYS n
+1 156 LYS n
+1 157 GLY n
+1 158 ASN n
+1 159 ASP n
+1 160 GLY n
+1 161 LEU n
+1 162 CYS n
+1 163 GLN n
+1 164 LYS n
+1 165 LEU n
+1 166 SER n
+1 167 VAL n
+1 168 PRO n
+1 169 CYS n
+1 170 MET n
+1 171 SER n
+1 172 SER n
+1 173 LYS n
+1 174 PRO n
+1 175 GLN n
+1 176 LYS n
+1 177 PRO n
+1 178 TRP n
+1 179 GLU n
+1 180 LYS n
+1 181 ASP n
+1 182 ALA n
+1 183 TRP n
+1 184 GLU n
+1 185 ILE n
+1 186 PRO n
+1 187 ARG n
+1 188 GLU n
+1 189 SER n
+1 190 LEU n
+1 191 LYS n
+1 192 LEU n
+1 193 GLU n
+1 194 LYS n
+1 195 LYS n
+1 196 LEU n
+1 197 GLY n
+1 198 ALA n
+1 199 GLY n
+1 200 GLN n
+1 201 PHE n
+1 202 GLY n
+1 203 GLU n
+1 204 VAL n
+1 205 TRP n
+1 206 MET n
+1 207 ALA n
+1 208 THR n
+1 209 TYR n
+1 210 ASN n
+1 211 LYS n
+1 212 HIS n
+1 213 THR n
+1 214 LYS n
+1 215 VAL n
+1 216 ALA n
+1 217 VAL n
+1 218 LYS n
+1 219 THR n
+1 220 MET n
+1 221 LYS n
+1 222 PRO n
+1 223 GLY n
+1 224 SER n
+1 225 MET n
+1 226 SER n
+1 227 VAL n
+1 228 GLU n
+1 229 ALA n
+1 230 PHE n
+1 231 LEU n
+1 232 ALA n
+1 233 GLU n
+1 234 ALA n
+1 235 ASN n
+1 236 VAL n
+1 237 MET n
+1 238 LYS n
+1 239 THR n
+1 240 LEU n
+1 241 GLN n
+1 242 HIS n
+1 243 ASP n
+1 244 LYS n
+1 245 LEU n
+1 246 VAL n
+1 247 LYS n
+1 248 LEU n
+1 249 HIS n
+1 250 ALA n
+1 251 VAL n
+1 252 VAL n
+1 253 THR n
+1 254 LYS n
+1 255 GLU n
+1 256 PRO n
+1 257 ILE n
+1 258 TYR n
+1 259 ILE n
+1 260 ILE n
+1 261 THR n
+1 262 GLU n
+1 263 PHE n
+1 264 MET n
+1 265 ALA n
+1 266 LYS n
+1 267 GLY n
+1 268 SER n
+1 269 LEU n
+1 270 LEU n
+1 271 ASP n
+1 272 PHE n
+1 273 LEU n
+1 274 LYS n
+1 275 SER n
+1 276 ASP n
+1 277 GLU n
+1 278 GLY n
+1 279 SER n
+1 280 LYS n
+1 281 GLN n
+1 282 PRO n
+1 283 LEU n
+1 284 PRO n
+1 285 LYS n
+1 286 LEU n
+1 287 ILE n
+1 288 ASP n
+1 289 PHE n
+1 290 SER n
+1 291 ALA n
+1 292 GLN n
+1 293 ILE n
+1 294 ALA n
+1 295 GLU n
+1 296 GLY n
+1 297 MET n
+1 298 ALA n
+1 299 PHE n
+1 300 ILE n
+1 301 GLU n
+1 302 GLN n
+1 303 ARG n
+1 304 ASN n
+1 305 TYR n
+1 306 ILE n
+1 307 HIS n
+1 308 ARG n
+1 309 ASP n
+1 310 LEU n
+1 311 ARG n
+1 312 ALA n
+1 313 ALA n
+1 314 ASN n
+1 315 ILE n
+1 316 LEU n
+1 317 VAL n
+1 318 SER n
+1 319 ALA n
+1 320 SER n
+1 321 LEU n
+1 322 VAL n
+1 323 CYS n
+1 324 LYS n
+1 325 ILE n
+1 326 ALA n
+1 327 ASP n
+1 328 PHE n
+1 329 GLY n
+1 330 LEU n
+1 331 ALA n
+1 332 ARG n
+1 333 VAL n
+1 334 ILE n
+1 335 GLU n
+1 336 ASP n
+1 337 ASN n
+1 338 GLU n
+1 339 TYR n
+1 340 THR n
+1 341 ALA n
+1 342 ARG n
+1 343 GLU n
+1 344 GLY n
+1 345 ALA n
+1 346 LYS n
+1 347 PHE n
+1 348 PRO n
+1 349 ILE n
+1 350 LYS n
+1 351 TRP n
+1 352 THR n
+1 353 ALA n
+1 354 PRO n
+1 355 GLU n
+1 356 ALA n
+1 357 ILE n
+1 358 ASN n
+1 359 PHE n
+1 360 GLY n
+1 361 SER n
+1 362 PHE n
+1 363 THR n
+1 364 ILE n
+1 365 LYS n
+1 366 SER n
+1 367 ASP n
+1 368 VAL n
+1 369 TRP n
+1 370 SER n
+1 371 PHE n
+1 372 GLY n
+1 373 ILE n
+1 374 LEU n
+1 375 LEU n
+1 376 MET n
+1 377 GLU n
+1 378 ILE n
+1 379 VAL n
+1 380 THR n
+1 381 TYR n
+1 382 GLY n
+1 383 ARG n
+1 384 ILE n
+1 385 PRO n
+1 386 TYR n
+1 387 PRO n
+1 388 GLY n
+1 389 MET n
+1 390 SER n
+1 391 ASN n
+1 392 PRO n
+1 393 GLU n
+1 394 VAL n
+1 395 ILE n
+1 396 ARG n
+1 397 ALA n
+1 398 LEU n
+1 399 GLU n
+1 400 ARG n
+1 401 GLY n
+1 402 TYR n
+1 403 ARG n
+1 404 MET n
+1 405 PRO n
+1 406 ARG n
+1 407 PRO n
+1 408 GLU n
+1 409 ASN n
+1 410 CYS n
+1 411 PRO n
+1 412 GLU n
+1 413 GLU n
+1 414 LEU n
+1 415 TYR n
+1 416 ASN n
+1 417 ILE n
+1 418 MET n
+1 419 MET n
+1 420 ARG n
+1 421 CYS n
+1 422 TRP n
+1 423 LYS n
+1 424 ASN n
+1 425 ARG n
+1 426 PRO n
+1 427 GLU n
+1 428 GLU n
+1 429 ARG n
+1 430 PRO n
+1 431 THR n
+1 432 PHE n
+1 433 GLU n
+1 434 TYR n
+1 435 ILE n
+1 436 GLN n
+1 437 SER n
+1 438 VAL n
+1 439 LEU n
+1 440 ASP n
+1 441 ASP n
+1 442 PHE n
+1 443 TYR n
+1 444 THR n
+1 445 ALA n
+1 446 THR n
+1 447 GLU n
+1 448 SER n
+1 449 GLN n
+1 450 PTR n
+1 451 GLU n
+1 452 GLU n
+1 453 ILE n
+1 454 PRO n
+#
+_entity_src_gen.entity_id 1
+_entity_src_gen.gene_src_common_name human
+_entity_src_gen.gene_src_genus Homo
+_entity_src_gen.pdbx_gene_src_gene ?
+_entity_src_gen.gene_src_species ?
+_entity_src_gen.gene_src_strain ?
+_entity_src_gen.gene_src_tissue ?
+_entity_src_gen.gene_src_tissue_fraction ?
+_entity_src_gen.gene_src_details ?
+_entity_src_gen.pdbx_gene_src_fragment ?
+_entity_src_gen.pdbx_gene_src_scientific_name 'Homo sapiens'
+_entity_src_gen.pdbx_gene_src_ncbi_taxonomy_id 9606
+_entity_src_gen.pdbx_gene_src_variant ?
+_entity_src_gen.pdbx_gene_src_cell_line ?
+_entity_src_gen.pdbx_gene_src_atcc ?
+_entity_src_gen.pdbx_gene_src_organ ?
+_entity_src_gen.pdbx_gene_src_organelle ?
+_entity_src_gen.pdbx_gene_src_cell ?
+_entity_src_gen.pdbx_gene_src_cellular_location ?
+_entity_src_gen.host_org_common_name 'INSECT CELLS, BACULOVIRUS'
+_entity_src_gen.pdbx_host_org_scientific_name ?
+_entity_src_gen.pdbx_host_org_ncbi_taxonomy_id ?
+_entity_src_gen.host_org_genus ?
+_entity_src_gen.pdbx_host_org_gene ?
+_entity_src_gen.pdbx_host_org_organ ?
+_entity_src_gen.host_org_species ?
+_entity_src_gen.pdbx_host_org_tissue ?
+_entity_src_gen.pdbx_host_org_tissue_fraction ?
+_entity_src_gen.pdbx_host_org_strain ?
+_entity_src_gen.pdbx_host_org_variant ?
+_entity_src_gen.pdbx_host_org_cell_line ?
+_entity_src_gen.pdbx_host_org_atcc ?
+_entity_src_gen.pdbx_host_org_culture_collection ?
+_entity_src_gen.pdbx_host_org_cell ?
+_entity_src_gen.pdbx_host_org_organelle ?
+_entity_src_gen.pdbx_host_org_cellular_location ?
+_entity_src_gen.pdbx_host_org_vector_type ?
+_entity_src_gen.pdbx_host_org_vector ?
+_entity_src_gen.plasmid_name ?
+_entity_src_gen.plasmid_details ?
+_entity_src_gen.pdbx_description ?
+#
+_struct_ref.id 1
+_struct_ref.db_name UNP
+_struct_ref.db_code HCK_HUMAN
+_struct_ref.biol_id .
+_struct_ref.entity_id 1
+_struct_ref.pdbx_db_accession P08631
+#
+_struct_ref_seq.align_id 1
+_struct_ref_seq.ref_id 1
+_struct_ref_seq.pdbx_PDB_id_code 1QCF
+_struct_ref_seq.pdbx_strand_id A
+_struct_ref_seq.seq_align_beg 1
+_struct_ref_seq.pdbx_seq_align_beg_ins_code ?
+_struct_ref_seq.seq_align_end 454
+_struct_ref_seq.pdbx_seq_align_end_ins_code ?
+_struct_ref_seq.pdbx_db_accession P08631
+_struct_ref_seq.db_align_beg 74
+_struct_ref_seq.pdbx_db_align_beg_ins_code ?
+_struct_ref_seq.db_align_end 526
+_struct_ref_seq.pdbx_db_align_end_ins_code ?
+_struct_ref_seq.pdbx_auth_seq_align_beg 76
+_struct_ref_seq.pdbx_auth_seq_align_end 531
+#
+loop_
+_struct_ref_seq_dif.align_id
+_struct_ref_seq_dif.pdbx_pdb_id_code
+_struct_ref_seq_dif.mon_id
+_struct_ref_seq_dif.pdbx_pdb_strand_id
+_struct_ref_seq_dif.seq_num
+_struct_ref_seq_dif.pdbx_pdb_ins_code
+_struct_ref_seq_dif.pdbx_seq_db_name
+_struct_ref_seq_dif.pdbx_seq_db_accession_code
+_struct_ref_seq_dif.db_mon_id
+_struct_ref_seq_dif.pdbx_seq_db_seq_num
+_struct_ref_seq_dif.details
+_struct_ref_seq_dif.pdbx_auth_seq_num
+_struct_ref_seq_dif.pdbx_ordinal
+1 1QCF GLU A 451 ? UNP P08631 GLN 523 ? 528 1
+1 1QCF GLU A 452 ? UNP P08631 GLN 524 ? 529 2
+1 1QCF ILE A 453 ? UNP P08631 GLU 525 ? 530 3
+#
+loop_
+_chem_comp.id
+_chem_comp.type
+_chem_comp.mon_nstd_flag
+_chem_comp.name
+_chem_comp.pdbx_synonyms
+_chem_comp.formula
+_chem_comp.formula_weight
+SER 'L-peptide linking' y SERINE ? 'C3 H7 N O3' 105.093
+GLY 'PEPTIDE LINKING' y GLYCINE ? 'C2 H5 N O2' 75.067
+ILE 'L-peptide linking' y ISOLEUCINE ? 'C6 H13 N O2' 131.174
+ARG 'L-peptide linking' y ARGININE ? 'C6 H15 N4 O2 1' 175.210
+VAL 'L-peptide linking' y VALINE ? 'C5 H11 N O2' 117.147
+ALA 'L-peptide linking' y ALANINE ? 'C3 H7 N O2' 89.094
+LEU 'L-peptide linking' y LEUCINE ? 'C6 H13 N O2' 131.174
+TYR 'L-peptide linking' y TYROSINE ? 'C9 H11 N O3' 181.191
+ASP 'L-peptide linking' y 'ASPARTIC ACID' ? 'C4 H7 N O4' 133.104
+GLU 'L-peptide linking' y 'GLUTAMIC ACID' ? 'C5 H9 N O4' 147.130
+HIS 'L-peptide linking' y HISTIDINE ? 'C6 H10 N3 O2 1' 156.164
+PHE 'L-peptide linking' y PHENYLALANINE ? 'C9 H11 N O2' 165.191
+GLN 'L-peptide linking' y GLUTAMINE ? 'C5 H10 N2 O3' 146.146
+LYS 'L-peptide linking' y LYSINE ? 'C6 H15 N2 O2 1' 147.197
+MET 'L-peptide linking' y METHIONINE ? 'C5 H11 N O2 S' 149.207
+TRP 'L-peptide linking' y TRYPTOPHAN ? 'C11 H12 N2 O2' 204.228
+THR 'L-peptide linking' y THREONINE ? 'C4 H9 N O3' 119.120
+PRO 'L-peptide linking' y PROLINE ? 'C5 H9 N O2' 115.132
+ASN 'L-peptide linking' y ASPARAGINE ? 'C4 H8 N2 O3' 132.119
+CYS 'L-peptide linking' y CYSTEINE ? 'C3 H7 N O2 S' 121.154
+PTR 'L-peptide linking' n O-PHOSPHOTYROSINE PHOSPHONOTYROSINE 'C9 H12 N O6 P' 261.171
+PP1 NON-POLYMER . '1-TER-BUTYL-3-P-TOLYL-1H-PYRAZOLO[3,4-D]PYRIMIDIN-4-YLAMINE' ? 'C16 H19 N5' 281.360
+HOH NON-POLYMER . WATER ? 'H2 O' 18.015
+#
+_exptl.entry_id 1QCF
+_exptl.method 'X-RAY DIFFRACTION'
+_exptl.crystals_number 1
+#
+_exptl_crystal.id 1
+_exptl_crystal.density_meas ?
+_exptl_crystal.density_Matthews 2.51
+_exptl_crystal.density_percent_sol 50.98
+_exptl_crystal.description ?
+#
+_exptl_crystal_grow.crystal_id 1
+_exptl_crystal_grow.method 'VAPOR DIFFUSION, HANGING DROP'
+_exptl_crystal_grow.temp 293
+_exptl_crystal_grow.temp_details ?
+_exptl_crystal_grow.pH 7.0
+_exptl_crystal_grow.pdbx_details
+;PEG 10000, DIMETHYL SULFOXIDE, N-(2-HYDROXYETHYL)PIPERAZINE-N-(2-
+ETHANESULFONIC ACID), pH 7.0, VAPOR DIFFUSION, HANGING DROP, temperature 293K
+;
+_exptl_crystal_grow.pdbx_pH_range .
+#
+_diffrn.id 1
+_diffrn.ambient_temp 105
+_diffrn.ambient_temp_details ?
+_diffrn.crystal_id 1
+#
+_diffrn_detector.diffrn_id 1
+_diffrn_detector.detector 'IMAGE PLATE'
+_diffrn_detector.type 'RIGAKU RAXIS IIC'
+_diffrn_detector.pdbx_collection_date 1999-10-22
+_diffrn_detector.details ?
+#
+_diffrn_radiation.diffrn_id 1
+_diffrn_radiation.wavelength_id 1
+_diffrn_radiation.pdbx_monochromatic_or_laue_m_l M
+_diffrn_radiation.monochromator ?
+_diffrn_radiation.pdbx_diffrn_protocol 'SINGLE WAVELENGTH'
+_diffrn_radiation.pdbx_scattering_type x-ray
+#
+_diffrn_radiation_wavelength.id 1
+_diffrn_radiation_wavelength.wavelength 1.5418
+_diffrn_radiation_wavelength.wt 1.0
+#
+_diffrn_source.diffrn_id 1
+_diffrn_source.source 'ROTATING ANODE'
+_diffrn_source.type 'RIGAKU RU200'
+_diffrn_source.pdbx_synchrotron_site ?
+_diffrn_source.pdbx_synchrotron_beamline ?
+_diffrn_source.pdbx_wavelength 1.5418
+_diffrn_source.pdbx_wavelength_list ?
+#
+_reflns.entry_id 1QCF
+_reflns.observed_criterion_sigma_I 0
+_reflns.observed_criterion_sigma_F 0
+_reflns.d_resolution_low 99
+_reflns.d_resolution_high 2.0
+_reflns.number_obs 35042
+_reflns.number_all 35649
+_reflns.percent_possible_obs 98.3
+_reflns.pdbx_Rmerge_I_obs 0.0860000
+_reflns.pdbx_Rsym_value ?
+_reflns.pdbx_netI_over_sigmaI 28.2
+_reflns.B_iso_Wilson_estimate 25.6
+_reflns.pdbx_redundancy 6.4
+_reflns.R_free_details ?
+_reflns.pdbx_ordinal 1
+_reflns.pdbx_diffrn_id 1
+#
+_reflns_shell.d_res_high 2.0
+_reflns_shell.d_res_low 2.1
+_reflns_shell.percent_possible_all 95.2
+_reflns_shell.Rmerge_I_obs 0.2770000
+_reflns_shell.pdbx_Rsym_value ?
+_reflns_shell.meanI_over_sigI_obs ?
+_reflns_shell.pdbx_redundancy 5.4
+_reflns_shell.percent_possible_obs ?
+_reflns_shell.number_unique_all ?
+_reflns_shell.pdbx_ordinal 1
+_reflns_shell.pdbx_diffrn_id 1
+#
+_computing.entry_id 1QCF
+_computing.pdbx_data_reduction_ii R-AXIS
+_computing.pdbx_data_reduction_ds SCALEPACK
+_computing.data_collection ?
+_computing.structure_solution AMORE
+_computing.structure_refinement CNS
+_computing.pdbx_structure_refinement_method ?
+#
+_refine.entry_id 1QCF
+_refine.ls_number_reflns_obs 35005
+_refine.ls_number_reflns_all 35649
+_refine.pdbx_ls_sigma_I 0
+_refine.pdbx_ls_sigma_F 0
+_refine.pdbx_data_cutoff_high_absF ?
+_refine.pdbx_data_cutoff_low_absF ?
+_refine.pdbx_data_cutoff_high_rms_absF ?
+_refine.ls_d_res_low 99
+_refine.ls_d_res_high 2.0
+_refine.ls_percent_reflns_obs 98.1
+_refine.ls_R_factor_obs ?
+_refine.ls_R_factor_all ?
+_refine.ls_R_factor_R_work 0.2150000
+_refine.ls_R_factor_R_free 0.2570000
+_refine.ls_R_factor_R_free_error ?
+_refine.ls_R_factor_R_free_error_details ?
+_refine.ls_percent_reflns_R_free ?
+_refine.ls_number_reflns_R_free 3475
+_refine.ls_number_parameters ?
+_refine.ls_number_restraints ?
+_refine.occupancy_min ?
+_refine.occupancy_max ?
+_refine.B_iso_mean ?
+_refine.aniso_B[1][1] ?
+_refine.aniso_B[2][2] ?
+_refine.aniso_B[3][3] ?
+_refine.aniso_B[1][2] ?
+_refine.aniso_B[1][3] ?
+_refine.aniso_B[2][3] ?
+_refine.solvent_model_details ?
+_refine.solvent_model_param_ksol ?
+_refine.solvent_model_param_bsol ?
+_refine.pdbx_ls_cross_valid_method ?
+_refine.details ?
+_refine.pdbx_starting_model ?
+_refine.pdbx_method_to_determine_struct ?
+_refine.pdbx_isotropic_thermal_model ?
+_refine.pdbx_stereochemistry_target_values 'ENGH & HUBER'
+_refine.pdbx_stereochem_target_val_spec_case ?
+_refine.pdbx_R_Free_selection_details ?
+_refine.pdbx_overall_ESU_R ?
+_refine.pdbx_overall_ESU_R_Free ?
+_refine.overall_SU_ML ?
+_refine.overall_SU_B ?
+_refine.ls_redundancy_reflns_obs ?
+_refine.pdbx_refine_id 'X-RAY DIFFRACTION'
+_refine.pdbx_diffrn_id 1
+#
+_refine_hist.pdbx_refine_id 'X-RAY DIFFRACTION'
+_refine_hist.cycle_id LAST
+_refine_hist.pdbx_number_atoms_protein 3626
+_refine_hist.pdbx_number_atoms_nucleic_acid 0
+_refine_hist.pdbx_number_atoms_ligand 21
+_refine_hist.number_atoms_solvent 312
+_refine_hist.number_atoms_total 3959
+_refine_hist.d_res_high 2.0
+_refine_hist.d_res_low 99
+#
+loop_
+_refine_ls_restr.type
+_refine_ls_restr.dev_ideal
+_refine_ls_restr.dev_ideal_target
+_refine_ls_restr.weight
+_refine_ls_restr.number
+_refine_ls_restr.pdbx_refine_id
+c_bond_d 0.007258 ? ? ? 'X-RAY DIFFRACTION'
+c_bond_d_na ? ? ? ? 'X-RAY DIFFRACTION'
+c_bond_d_prot ? ? ? ? 'X-RAY DIFFRACTION'
+c_angle_d ? ? ? ? 'X-RAY DIFFRACTION'
+c_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION'
+c_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION'
+c_angle_deg 1.54111 ? ? ? 'X-RAY DIFFRACTION'
+c_angle_deg_na ? ? ? ? 'X-RAY DIFFRACTION'
+c_angle_deg_prot ? ? ? ? 'X-RAY DIFFRACTION'
+c_dihedral_angle_d ? ? ? ? 'X-RAY DIFFRACTION'
+c_dihedral_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION'
+c_dihedral_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION'
+c_improper_angle_d ? ? ? ? 'X-RAY DIFFRACTION'
+c_improper_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION'
+c_improper_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION'
+c_mcbond_it ? ? ? ? 'X-RAY DIFFRACTION'
+c_mcangle_it ? ? ? ? 'X-RAY DIFFRACTION'
+c_scbond_it ? ? ? ? 'X-RAY DIFFRACTION'
+c_scangle_it ? ? ? ? 'X-RAY DIFFRACTION'
+#
+_struct.entry_id 1QCF
+_struct.title 'CRYSTAL STRUCTURE OF HCK IN COMPLEX WITH A SRC FAMILY-SELECTIVE TYROSINE KINASE INHIBITOR'
+_struct.pdbx_descriptor 'CRYSTAL STRUCTURE OF HCK IN COMPLEX WITH A SRC FAMILY-SELECTIVE TYROSINE KINASE INHIBITOR'
+_struct.pdbx_model_details ?
+_struct.pdbx_CASP_flag ?
+_struct.pdbx_model_type_details ?
+#
+_struct_keywords.entry_id 1QCF
+_struct_keywords.pdbx_keywords 'TYROSINE KINASE'
+_struct_keywords.text
+'TYROSINE KINASE-INHIBITOR COMPLEX, DOWN-REGULATED KINASE, ORDERED ACTIVATION LOOP, TYROSINE KINASE'
+#
+loop_
+_struct_asym.id
+_struct_asym.pdbx_blank_PDB_chainid_flag
+_struct_asym.pdbx_modified
+_struct_asym.entity_id
+_struct_asym.details
+A N N 1 ?
+B N N 2 ?
+C N N 3 ?
+#
+_struct_biol.id 1
+#
+loop_
+_struct_conf.conf_type_id
+_struct_conf.id
+_struct_conf.pdbx_PDB_helix_id
+_struct_conf.beg_label_comp_id
+_struct_conf.beg_label_asym_id
+_struct_conf.beg_label_seq_id
+_struct_conf.pdbx_beg_PDB_ins_code
+_struct_conf.end_label_comp_id
+_struct_conf.end_label_asym_id
+_struct_conf.end_label_seq_id
+_struct_conf.pdbx_end_PDB_ins_code
+_struct_conf.beg_auth_comp_id
+_struct_conf.beg_auth_asym_id
+_struct_conf.beg_auth_seq_id
+_struct_conf.end_auth_comp_id
+_struct_conf.end_auth_asym_id
+_struct_conf.end_auth_seq_id
+_struct_conf.pdbx_PDB_helix_class
+_struct_conf.details
+_struct_conf.pdbx_PDB_helix_length
+HELX_P HELX_P1 1 SER A 66 ? GLU A 70 ? SER A 142 GLU A 146 5 ? 5
+HELX_P HELX_P2 2 SER A 78 ? ALA A 88 ? SER A 154 ALA A 164 1 ? 11
+HELX_P HELX_P3 3 THR A 146 ? LYS A 155 ? THR A 222 LYS A 231 1 ? 10
+HELX_P HELX_P4 4 PRO A 186 ? GLU A 188 ? PRO A 263 GLU A 265 5 ? 3
+HELX_P HELX_P5 5 SER A 226 ? LYS A 238 ? SER A 303 LYS A 315 1 ? 13
+HELX_P HELX_P6 6 SER A 268 ? SER A 275 ? SER A 345 SER A 352 1 ? 8
+HELX_P HELX_P7 7 SER A 275 ? LYS A 280 ? SER A 352 LYS A 357 1 ? 6
+HELX_P HELX_P8 8 PRO A 282 ? ARG A 303 ? PRO A 359 ARG A 380 1 ? 22
+HELX_P HELX_P9 9 ARG A 311 ? ALA A 313 ? ARG A 388 ALA A 390 5 ? 3
+HELX_P HELX_P10 10 GLY A 329 ? VAL A 333 ? GLY A 406 VAL A 410 5 ? 5
+HELX_P HELX_P11 11 ASP A 336 ? ALA A 341 ? ASP A 413 ALA A 418 1 ? 6
+HELX_P HELX_P12 12 PRO A 348 ? THR A 352 ? PRO A 425 THR A 429 5 ? 5
+HELX_P HELX_P13 13 ALA A 353 ? GLY A 360 ? ALA A 430 GLY A 437 1 ? 8
+HELX_P HELX_P14 14 THR A 363 ? THR A 380 ? THR A 440 THR A 457 1 ? 18
+HELX_P HELX_P15 15 SER A 390 ? GLY A 401 ? SER A 467 GLY A 478 1 ? 12
+HELX_P HELX_P16 16 PRO A 411 ? TRP A 422 ? PRO A 488 TRP A 499 1 ? 12
+HELX_P HELX_P17 17 ARG A 425 ? ARG A 429 ? ARG A 502 ARG A 506 5 ? 5
+HELX_P HELX_P18 18 THR A 431 ? ASP A 441 ? THR A 508 ASP A 518 1 ? 11
+#
+_struct_conf_type.id HELX_P
+_struct_conf_type.criteria ?
+_struct_conf_type.reference ?
+#
+loop_
+_struct_conn.id
+_struct_conn.conn_type_id
+_struct_conn.pdbx_PDB_id
+_struct_conn.ptnr1_label_asym_id
+_struct_conn.ptnr1_label_comp_id
+_struct_conn.ptnr1_label_seq_id
+_struct_conn.ptnr1_label_atom_id
+_struct_conn.pdbx_ptnr1_label_alt_id
+_struct_conn.pdbx_ptnr1_PDB_ins_code
+_struct_conn.pdbx_ptnr1_standard_comp_id
+_struct_conn.ptnr1_symmetry
+_struct_conn.ptnr2_label_asym_id
+_struct_conn.ptnr2_label_comp_id
+_struct_conn.ptnr2_label_seq_id
+_struct_conn.ptnr2_label_atom_id
+_struct_conn.pdbx_ptnr2_label_alt_id
+_struct_conn.pdbx_ptnr2_PDB_ins_code
+_struct_conn.ptnr1_auth_asym_id
+_struct_conn.ptnr1_auth_comp_id
+_struct_conn.ptnr1_auth_seq_id
+_struct_conn.ptnr2_auth_asym_id
+_struct_conn.ptnr2_auth_comp_id
+_struct_conn.ptnr2_auth_seq_id
+_struct_conn.ptnr2_symmetry
+_struct_conn.pdbx_ptnr3_label_atom_id
+_struct_conn.pdbx_ptnr3_label_seq_id
+_struct_conn.pdbx_ptnr3_label_comp_id
+_struct_conn.pdbx_ptnr3_label_asym_id
+_struct_conn.pdbx_ptnr3_label_alt_id
+_struct_conn.pdbx_ptnr3_PDB_ins_code
+_struct_conn.details
+_struct_conn.pdbx_dist_value
+_struct_conn.pdbx_value_order
+covale1 covale ? A GLN 449 C ? ? ? 1_555 A PTR 450 N ? ? A GLN 526 A PTR 527 1_555 ? ? ? ? ? ? ? 1.321 ?
+covale2 covale ? A PTR 450 C ? ? ? 1_555 A GLU 451 N ? ? A PTR 527 A GLU 528 1_555 ? ? ? ? ? ? ? 1.324 ?
+#
+_struct_conn_type.id covale
+_struct_conn_type.criteria ?
+_struct_conn_type.reference ?
+#
+loop_
+_struct_mon_prot_cis.pdbx_id
+_struct_mon_prot_cis.label_comp_id
+_struct_mon_prot_cis.label_seq_id
+_struct_mon_prot_cis.label_asym_id
+_struct_mon_prot_cis.label_alt_id
+_struct_mon_prot_cis.pdbx_PDB_ins_code
+_struct_mon_prot_cis.auth_comp_id
+_struct_mon_prot_cis.auth_seq_id
+_struct_mon_prot_cis.auth_asym_id
+_struct_mon_prot_cis.pdbx_label_comp_id_2
+_struct_mon_prot_cis.pdbx_label_seq_id_2
+_struct_mon_prot_cis.pdbx_label_asym_id_2
+_struct_mon_prot_cis.pdbx_PDB_ins_code_2
+_struct_mon_prot_cis.pdbx_auth_comp_id_2
+_struct_mon_prot_cis.pdbx_auth_seq_id_2
+_struct_mon_prot_cis.pdbx_auth_asym_id_2
+_struct_mon_prot_cis.pdbx_PDB_model_num
+_struct_mon_prot_cis.pdbx_omega_angle
+1 GLU 255 A . ? GLU 332 A PRO 256 A ? PRO 333 A 1 -0.10
+2 ILE 453 A . ? ILE 530 A PRO 454 A ? PRO 531 A 1 -1.93
+#
+loop_
+_struct_sheet.id
+_struct_sheet.type
+_struct_sheet.number_strands
+_struct_sheet.details
+A ? 5 ?
+B ? 5 ?
+C ? 5 ?
+D ? 2 ?
+#
+loop_
+_struct_sheet_order.sheet_id
+_struct_sheet_order.range_id_1
+_struct_sheet_order.range_id_2
+_struct_sheet_order.offset
+_struct_sheet_order.sense
+A 1 2 ? anti-parallel
+A 2 3 ? anti-parallel
+A 3 4 ? anti-parallel
+A 4 5 ? anti-parallel
+B 1 2 ? parallel
+B 2 3 ? anti-parallel
+B 3 4 ? anti-parallel
+B 4 5 ? anti-parallel
+C 1 2 ? anti-parallel
+C 2 3 ? anti-parallel
+C 3 4 ? anti-parallel
+C 4 5 ? anti-parallel
+D 1 2 ? anti-parallel
+#
+loop_
+_struct_sheet_range.sheet_id
+_struct_sheet_range.id
+_struct_sheet_range.beg_label_comp_id
+_struct_sheet_range.beg_label_asym_id
+_struct_sheet_range.beg_label_seq_id
+_struct_sheet_range.pdbx_beg_PDB_ins_code
+_struct_sheet_range.end_label_comp_id
+_struct_sheet_range.end_label_asym_id
+_struct_sheet_range.end_label_seq_id
+_struct_sheet_range.pdbx_end_PDB_ins_code
+_struct_sheet_range.symmetry
+_struct_sheet_range.beg_auth_comp_id
+_struct_sheet_range.beg_auth_asym_id
+_struct_sheet_range.beg_auth_seq_id
+_struct_sheet_range.end_auth_comp_id
+_struct_sheet_range.end_auth_asym_id
+_struct_sheet_range.end_auth_seq_id
+A 1 GLU A 53 ? PRO A 57 ? ? GLU A 129 PRO A 133
+A 2 TRP A 42 ? SER A 47 ? ? TRP A 118 SER A 123
+A 3 GLN A 32 ? GLU A 37 ? ? GLN A 107 GLU A 112
+A 4 ILE A 10 ? ALA A 13 ? ? ILE A 85 ALA A 88
+A 5 VAL A 61 ? ARG A 63 ? ? VAL A 137 ARG A 139
+B 1 PHE A 73 ? PHE A 74 ? ? PHE A 149 PHE A 150
+B 2 PHE A 96 ? ASP A 100 ? ? PHE A 172 ASP A 176
+B 3 TYR A 108 ? ASP A 116 ? ? TYR A 184 ASP A 192
+B 4 GLY A 120 ? THR A 130 ? ? GLY A 196 THR A 206
+B 5 PHE A 136 ? TYR A 137 ? ? PHE A 212 TYR A 213
+C 1 LEU A 190 ? GLY A 197 ? ? LEU A 267 GLY A 274
+C 2 GLY A 202 ? TYR A 209 ? ? GLY A 279 TYR A 286
+C 3 THR A 213 ? MET A 220 ? ? THR A 290 MET A 297
+C 4 TYR A 258 ? THR A 261 ? ? TYR A 335 THR A 338
+C 5 LEU A 248 ? VAL A 252 ? ? LEU A 325 VAL A 329
+D 1 ILE A 315 ? VAL A 317 ? ? ILE A 392 VAL A 394
+D 2 CYS A 323 ? ILE A 325 ? ? CYS A 400 ILE A 402
+#
+loop_
+_pdbx_struct_sheet_hbond.sheet_id
+_pdbx_struct_sheet_hbond.range_id_1
+_pdbx_struct_sheet_hbond.range_id_2
+_pdbx_struct_sheet_hbond.range_1_label_atom_id
+_pdbx_struct_sheet_hbond.range_1_label_comp_id
+_pdbx_struct_sheet_hbond.range_1_label_asym_id
+_pdbx_struct_sheet_hbond.range_1_label_seq_id
+_pdbx_struct_sheet_hbond.range_1_PDB_ins_code
+_pdbx_struct_sheet_hbond.range_1_auth_atom_id
+_pdbx_struct_sheet_hbond.range_1_auth_comp_id
+_pdbx_struct_sheet_hbond.range_1_auth_asym_id
+_pdbx_struct_sheet_hbond.range_1_auth_seq_id
+_pdbx_struct_sheet_hbond.range_2_label_atom_id
+_pdbx_struct_sheet_hbond.range_2_label_comp_id
+_pdbx_struct_sheet_hbond.range_2_label_asym_id
+_pdbx_struct_sheet_hbond.range_2_label_seq_id
+_pdbx_struct_sheet_hbond.range_2_PDB_ins_code
+_pdbx_struct_sheet_hbond.range_2_auth_atom_id
+_pdbx_struct_sheet_hbond.range_2_auth_comp_id
+_pdbx_struct_sheet_hbond.range_2_auth_asym_id
+_pdbx_struct_sheet_hbond.range_2_auth_seq_id
+A 1 2 N ILE A 56 ? N ILE A 132 O TRP A 43 ? O TRP A 119
+A 2 3 O ARG A 46 ? O ARG A 122 N VAL A 34 ? N VAL A 109
+A 3 4 N MET A 33 ? N MET A 108 O VAL A 11 ? O VAL A 86
+A 4 5 N VAL A 12 ? N VAL A 87 O ALA A 62 ? O ALA A 138
+B 1 2 N PHE A 74 ? N PHE A 150 O ILE A 98 ? O ILE A 174
+B 2 3 N ARG A 99 ? N ARG A 175 O SER A 109 ? O SER A 185
+B 3 4 O ASP A 116 ? O ASP A 192 N GLY A 120 ? N GLY A 196
+B 4 5 N ARG A 129 ? N ARG A 205 O TYR A 137 ? O TYR A 213
+C 1 2 O GLY A 197 ? O GLY A 274 N VAL A 204 ? N VAL A 281
+C 2 3 N TYR A 209 ? N TYR A 286 O THR A 213 ? O THR A 290
+C 3 4 N LYS A 218 ? N LYS A 295 O ILE A 259 ? O ILE A 336
+C 4 5 O ILE A 260 ? O ILE A 337 N HIS A 249 ? N HIS A 326
+D 1 2 N LEU A 316 ? N LEU A 393 O LYS A 324 ? O LYS A 401
+#
+_struct_site.id AC1
+_struct_site.details 'BINDING SITE FOR RESIDUE PP1 A 532'
+_struct_site.pdbx_evidence_code SOFTWARE
+#
+loop_
+_struct_site_gen.id
+_struct_site_gen.site_id
+_struct_site_gen.pdbx_num_res
+_struct_site_gen.label_comp_id
+_struct_site_gen.label_asym_id
+_struct_site_gen.label_seq_id
+_struct_site_gen.pdbx_auth_ins_code
+_struct_site_gen.auth_comp_id
+_struct_site_gen.auth_asym_id
+_struct_site_gen.auth_seq_id
+_struct_site_gen.label_atom_id
+_struct_site_gen.label_alt_id
+_struct_site_gen.symmetry
+_struct_site_gen.details
+1 AC1 12 LEU A 196 ? LEU A 273 . . 1_555 ?
+2 AC1 12 VAL A 204 ? VAL A 281 . . 1_555 ?
+3 AC1 12 ALA A 216 ? ALA A 293 . . 1_555 ?
+4 AC1 12 ILE A 259 ? ILE A 336 . . 1_555 ?
+5 AC1 12 THR A 261 ? THR A 338 . . 1_555 ?
+6 AC1 12 GLU A 262 ? GLU A 339 . . 1_555 ?
+7 AC1 12 MET A 264 ? MET A 341 . . 1_555 ?
+8 AC1 12 SER A 268 ? SER A 345 . . 1_555 ?
+9 AC1 12 LEU A 316 ? LEU A 393 . . 1_555 ?
+10 AC1 12 ASP A 327 ? ASP A 404 . . 1_555 ?
+11 AC1 12 HOH C . ? HOH A 582 . . 1_555 ?
+12 AC1 12 HOH C . ? HOH A 774 . . 1_555 ?
+#
+_database_PDB_matrix.entry_id 1QCF
+_database_PDB_matrix.origx[1][1] 1.000000
+_database_PDB_matrix.origx[1][2] 0.000000
+_database_PDB_matrix.origx[1][3] 0.000000
+_database_PDB_matrix.origx[2][1] 0.000000
+_database_PDB_matrix.origx[2][2] 1.000000
+_database_PDB_matrix.origx[2][3] 0.000000
+_database_PDB_matrix.origx[3][1] 0.000000
+_database_PDB_matrix.origx[3][2] 0.000000
+_database_PDB_matrix.origx[3][3] 1.000000
+_database_PDB_matrix.origx_vector[1] 0.00000
+_database_PDB_matrix.origx_vector[2] 0.00000
+_database_PDB_matrix.origx_vector[3] 0.00000
+#
+_atom_sites.entry_id 1QCF
+_atom_sites.Cartn_transform_axes ?
+_atom_sites.fract_transf_matrix[1][1] 0.019602
+_atom_sites.fract_transf_matrix[1][2] 0.000000
+_atom_sites.fract_transf_matrix[1][3] 0.000000
+_atom_sites.fract_transf_matrix[2][1] 0.000000
+_atom_sites.fract_transf_matrix[2][2] 0.010101
+_atom_sites.fract_transf_matrix[2][3] 0.000000
+_atom_sites.fract_transf_matrix[3][1] 0.000000
+_atom_sites.fract_transf_matrix[3][2] 0.000000
+_atom_sites.fract_transf_matrix[3][3] 0.009672
+_atom_sites.fract_transf_vector[1] 0.00000
+_atom_sites.fract_transf_vector[2] 0.00000
+_atom_sites.fract_transf_vector[3] 0.00000
+#
+loop_
+_atom_type.symbol
+N
+C
+O
+S
+P
+#
+loop_
+_atom_site.group_PDB
+_atom_site.id
+_atom_site.type_symbol
+_atom_site.label_atom_id
+_atom_site.label_alt_id
+_atom_site.label_comp_id
+_atom_site.label_asym_id
+_atom_site.label_entity_id
+_atom_site.label_seq_id
+_atom_site.pdbx_PDB_ins_code
+_atom_site.Cartn_x
+_atom_site.Cartn_y
+_atom_site.Cartn_z
+_atom_site.occupancy
+_atom_site.B_iso_or_equiv
+_atom_site.Cartn_x_esd
+_atom_site.Cartn_y_esd
+_atom_site.Cartn_z_esd
+_atom_site.occupancy_esd
+_atom_site.B_iso_or_equiv_esd
+_atom_site.pdbx_formal_charge
+_atom_site.auth_seq_id
+_atom_site.auth_comp_id
+_atom_site.auth_asym_id
+_atom_site.auth_atom_id
+_atom_site.pdbx_PDB_model_num
+ATOM 1 N N . SER A 1 5 ? -12.315 3.135 35.123 1.00 58.24 ? ? ? ? ? ? 80 SER A N 1
+ATOM 2 C CA . SER A 1 5 ? -12.056 1.909 35.930 1.00 56.45 ? ? ? ? ? ? 80 SER A CA 1
+ATOM 3 C C . SER A 1 5 ? -10.561 1.626 35.997 1.00 54.76 ? ? ? ? ? ? 80 SER A C 1
+ATOM 4 O O . SER A 1 5 ? -9.758 2.328 35.378 1.00 55.95 ? ? ? ? ? ? 80 SER A O 1
+ATOM 5 C CB . SER A 1 5 ? -12.772 0.705 35.308 1.00 57.12 ? ? ? ? ? ? 80 SER A CB 1
+ATOM 6 O OG . SER A 1 5 ? -14.175 0.912 35.247 1.00 59.13 ? ? ? ? ? ? 80 SER A OG 1
+ATOM 7 N N . GLY A 1 6 ? -10.198 0.598 36.758 1.00 51.37 ? ? ? ? ? ? 81 GLY A N 1
+ATOM 8 C CA . GLY A 1 6 ? -8.804 0.220 36.882 1.00 44.34 ? ? ? ? ? ? 81 GLY A CA 1
+ATOM 9 C C . GLY A 1 6 ? -8.315 -0.399 35.586 1.00 39.98 ? ? ? ? ? ? 81 GLY A C 1
+ATOM 10 O O . GLY A 1 6 ? -8.076 -1.607 35.498 1.00 36.92 ? ? ? ? ? ? 81 GLY A O 1
+ATOM 11 N N . ILE A 1 7 ? -8.175 0.445 34.571 1.00 35.38 ? ? ? ? ? ? 82 ILE A N 1
+ATOM 12 C CA . ILE A 1 7 ? -7.713 0.023 33.258 1.00 33.74 ? ? ? ? ? ? 82 ILE A CA 1
+ATOM 13 C C . ILE A 1 7 ? -6.193 0.115 33.179 1.00 32.49 ? ? ? ? ? ? 82 ILE A C 1
+ATOM 14 O O . ILE A 1 7 ? -5.602 1.114 33.580 1.00 33.80 ? ? ? ? ? ? 82 ILE A O 1
+ATOM 15 C CB . ILE A 1 7 ? -8.356 0.905 32.167 1.00 33.93 ? ? ? ? ? ? 82 ILE A CB 1
+ATOM 16 C CG1 . ILE A 1 7 ? -9.875 0.670 32.170 1.00 32.55 ? ? ? ? ? ? 82 ILE A CG1 1
+ATOM 17 C CG2 . ILE A 1 7 ? -7.730 0.608 30.805 1.00 32.89 ? ? ? ? ? ? 82 ILE A CG2 1
+ATOM 18 C CD1 . ILE A 1 7 ? -10.674 1.635 31.319 1.00 30.01 ? ? ? ? ? ? 82 ILE A CD1 1
+ATOM 19 N N . ARG A 1 8 ? -5.561 -0.930 32.660 1.00 30.03 ? ? ? ? ? ? 83 ARG A N 1
+ATOM 20 C CA . ARG A 1 8 ? -4.110 -0.946 32.548 1.00 29.23 ? ? ? ? ? ? 83 ARG A CA 1
+ATOM 21 C C . ARG A 1 8 ? -3.665 0.213 31.660 1.00 31.20 ? ? ? ? ? ? 83 ARG A C 1
+ATOM 22 O O . ARG A 1 8 ? -4.206 0.425 30.574 1.00 28.24 ? ? ? ? ? ? 83 ARG A O 1
+ATOM 23 C CB . ARG A 1 8 ? -3.638 -2.289 31.975 1.00 30.07 ? ? ? ? ? ? 83 ARG A CB 1
+ATOM 24 C CG . ARG A 1 8 ? -2.157 -2.540 32.170 1.00 30.09 ? ? ? ? ? ? 83 ARG A CG 1
+ATOM 25 C CD . ARG A 1 8 ? -1.725 -3.917 31.700 1.00 28.81 ? ? ? ? ? ? 83 ARG A CD 1
+ATOM 26 N NE . ARG A 1 8 ? -2.015 -4.114 30.287 1.00 28.47 ? ? ? ? ? ? 83 ARG A NE 1
+ATOM 27 C CZ . ARG A 1 8 ? -1.360 -4.964 29.509 1.00 29.57 ? ? ? ? ? ? 83 ARG A CZ 1
+ATOM 28 N NH1 . ARG A 1 8 ? -0.371 -5.694 30.011 1.00 31.86 ? ? ? ? ? ? 83 ARG A NH1 1
+ATOM 29 N NH2 . ARG A 1 8 ? -1.688 -5.078 28.229 1.00 32.35 ? ? ? ? ? ? 83 ARG A NH2 1
+ATOM 30 N N . ILE A 1 9 ? -2.685 0.975 32.132 1.00 32.14 ? ? ? ? ? ? 84 ILE A N 1
+ATOM 31 C CA . ILE A 1 9 ? -2.197 2.116 31.374 1.00 34.25 ? ? ? ? ? ? 84 ILE A CA 1
+ATOM 32 C C . ILE A 1 9 ? -0.855 1.789 30.728 1.00 34.69 ? ? ? ? ? ? 84 ILE A C 1
+ATOM 33 O O . ILE A 1 9 ? 0.091 1.363 31.398 1.00 31.70 ? ? ? ? ? ? 84 ILE A O 1
+ATOM 34 C CB . ILE A 1 9 ? -2.079 3.355 32.293 1.00 38.13 ? ? ? ? ? ? 84 ILE A CB 1
+ATOM 35 C CG1 . ILE A 1 9 ? -1.720 4.610 31.486 1.00 40.14 ? ? ? ? ? ? 84 ILE A CG1 1
+ATOM 36 C CG2 . ILE A 1 9 ? -1.055 3.087 33.371 1.00 39.84 ? ? ? ? ? ? 84 ILE A CG2 1
+ATOM 37 C CD1 . ILE A 1 9 ? -0.316 4.642 30.930 1.00 43.16 ? ? ? ? ? ? 84 ILE A CD1 1
+ATOM 38 N N . ILE A 1 10 ? -0.786 1.991 29.415 1.00 35.19 ? ? ? ? ? ? 85 ILE A N 1
+ATOM 39 C CA . ILE A 1 10 ? 0.423 1.715 28.649 1.00 35.69 ? ? ? ? ? ? 85 ILE A CA 1
+ATOM 40 C C . ILE A 1 10 ? 1.006 2.998 28.062 1.00 36.73 ? ? ? ? ? ? 85 ILE A C 1
+ATOM 41 O O . ILE A 1 10 ? 0.277 3.949 27.768 1.00 36.76 ? ? ? ? ? ? 85 ILE A O 1
+ATOM 42 C CB . ILE A 1 10 ? 0.118 0.711 27.507 1.00 37.70 ? ? ? ? ? ? 85 ILE A CB 1
+ATOM 43 C CG1 . ILE A 1 10 ? -0.348 -0.617 28.112 1.00 38.50 ? ? ? ? ? ? 85 ILE A CG1 1
+ATOM 44 C CG2 . ILE A 1 10 ? 1.355 0.483 26.643 1.00 36.42 ? ? ? ? ? ? 85 ILE A CG2 1
+ATOM 45 C CD1 . ILE A 1 10 ? -0.801 -1.634 27.093 1.00 42.64 ? ? ? ? ? ? 85 ILE A CD1 1
+ATOM 46 N N . VAL A 1 11 ? 2.329 3.019 27.911 1.00 34.69 ? ? ? ? ? ? 86 VAL A N 1
+ATOM 47 C CA . VAL A 1 11 ? 3.022 4.170 27.344 1.00 31.49 ? ? ? ? ? ? 86 VAL A CA 1
+ATOM 48 C C . VAL A 1 11 ? 4.164 3.694 26.461 1.00 31.07 ? ? ? ? ? ? 86 VAL A C 1
+ATOM 49 O O . VAL A 1 11 ? 4.579 2.534 26.530 1.00 27.78 ? ? ? ? ? ? 86 VAL A O 1
+ATOM 50 C CB . VAL A 1 11 ? 3.616 5.095 28.440 1.00 30.31 ? ? ? ? ? ? 86 VAL A CB 1
+ATOM 51 C CG1 . VAL A 1 11 ? 2.510 5.682 29.289 1.00 27.82 ? ? ? ? ? ? 86 VAL A CG1 1
+ATOM 52 C CG2 . VAL A 1 11 ? 4.595 4.316 29.304 1.00 28.63 ? ? ? ? ? ? 86 VAL A CG2 1
+ATOM 53 N N . VAL A 1 12 ? 4.668 4.597 25.629 1.00 30.20 ? ? ? ? ? ? 87 VAL A N 1
+ATOM 54 C CA . VAL A 1 12 ? 5.779 4.279 24.746 1.00 31.48 ? ? ? ? ? ? 87 VAL A CA 1
+ATOM 55 C C . VAL A 1 12 ? 6.949 5.211 25.054 1.00 29.88 ? ? ? ? ? ? 87 VAL A C 1
+ATOM 56 O O . VAL A 1 12 ? 6.750 6.390 25.329 1.00 28.48 ? ? ? ? ? ? 87 VAL A O 1
+ATOM 57 C CB . VAL A 1 12 ? 5.383 4.439 23.266 1.00 30.59 ? ? ? ? ? ? 87 VAL A CB 1
+ATOM 58 C CG1 . VAL A 1 12 ? 4.841 5.835 23.020 1.00 33.37 ? ? ? ? ? ? 87 VAL A CG1 1
+ATOM 59 C CG2 . VAL A 1 12 ? 6.590 4.171 22.379 1.00 32.04 ? ? ? ? ? ? 87 VAL A CG2 1
+ATOM 60 N N . ALA A 1 13 ? 8.162 4.669 25.010 1.00 31.06 ? ? ? ? ? ? 88 ALA A N 1
+ATOM 61 C CA . ALA A 1 13 ? 9.369 5.440 25.288 1.00 33.50 ? ? ? ? ? ? 88 ALA A CA 1
+ATOM 62 C C . ALA A 1 13 ? 9.725 6.397 24.151 1.00 34.65 ? ? ? ? ? ? 88 ALA A C 1
+ATOM 63 O O . ALA A 1 13 ? 9.947 5.971 23.016 1.00 35.81 ? ? ? ? ? ? 88 ALA A O 1
+ATOM 64 C CB . ALA A 1 13 ? 10.530 4.494 25.547 1.00 31.62 ? ? ? ? ? ? 88 ALA A CB 1
+ATOM 65 N N . LEU A 1 14 ? 9.791 7.687 24.473 1.00 34.33 ? ? ? ? ? ? 89 LEU A N 1
+ATOM 66 C CA . LEU A 1 14 ? 10.128 8.724 23.501 1.00 35.85 ? ? ? ? ? ? 89 LEU A CA 1
+ATOM 67 C C . LEU A 1 14 ? 11.635 8.848 23.262 1.00 35.36 ? ? ? ? ? ? 89 LEU A C 1
+ATOM 68 O O . LEU A 1 14 ? 12.059 9.477 22.292 1.00 36.91 ? ? ? ? ? ? 89 LEU A O 1
+ATOM 69 C CB . LEU A 1 14 ? 9.597 10.080 23.972 1.00 33.18 ? ? ? ? ? ? 89 LEU A CB 1
+ATOM 70 C CG . LEU A 1 14 ? 8.090 10.255 24.157 1.00 33.16 ? ? ? ? ? ? 89 LEU A CG 1
+ATOM 71 C CD1 . LEU A 1 14 ? 7.828 11.619 24.770 1.00 30.41 ? ? ? ? ? ? 89 LEU A CD1 1
+ATOM 72 C CD2 . LEU A 1 14 ? 7.362 10.103 22.820 1.00 33.68 ? ? ? ? ? ? 89 LEU A CD2 1
+ATOM 73 N N . TYR A 1 15 ? 12.435 8.263 24.150 1.00 34.87 ? ? ? ? ? ? 90 TYR A N 1
+ATOM 74 C CA . TYR A 1 15 ? 13.897 8.323 24.045 1.00 35.34 ? ? ? ? ? ? 90 TYR A CA 1
+ATOM 75 C C . TYR A 1 15 ? 14.479 7.079 24.698 1.00 34.67 ? ? ? ? ? ? 90 TYR A C 1
+ATOM 76 O O . TYR A 1 15 ? 13.766 6.325 25.362 1.00 35.13 ? ? ? ? ? ? 90 TYR A O 1
+ATOM 77 C CB . TYR A 1 15 ? 14.447 9.522 24.825 1.00 34.85 ? ? ? ? ? ? 90 TYR A CB 1
+ATOM 78 C CG . TYR A 1 15 ? 13.701 10.818 24.633 1.00 37.00 ? ? ? ? ? ? 90 TYR A CG 1
+ATOM 79 C CD1 . TYR A 1 15 ? 13.845 11.573 23.471 1.00 37.27 ? ? ? ? ? ? 90 TYR A CD1 1
+ATOM 80 C CD2 . TYR A 1 15 ? 12.838 11.285 25.621 1.00 36.75 ? ? ? ? ? ? 90 TYR A CD2 1
+ATOM 81 C CE1 . TYR A 1 15 ? 13.144 12.766 23.302 1.00 37.86 ? ? ? ? ? ? 90 TYR A CE1 1
+ATOM 82 C CE2 . TYR A 1 15 ? 12.135 12.469 25.461 1.00 39.51 ? ? ? ? ? ? 90 TYR A CE2 1
+ATOM 83 C CZ . TYR A 1 15 ? 12.291 13.205 24.302 1.00 38.69 ? ? ? ? ? ? 90 TYR A CZ 1
+ATOM 84 O OH . TYR A 1 15 ? 11.594 14.383 24.160 1.00 43.44 ? ? ? ? ? ? 90 TYR A OH 1
+ATOM 85 N N . ASP A 1 16 ? 15.780 6.873 24.517 1.00 35.19 ? ? ? ? ? ? 91 ASP A N 1
+ATOM 86 C CA . ASP A 1 16 ? 16.461 5.752 25.150 1.00 36.29 ? ? ? ? ? ? 91 ASP A CA 1
+ATOM 87 C C . ASP A 1 16 ? 16.757 6.233 26.568 1.00 36.32 ? ? ? ? ? ? 91 ASP A C 1
+ATOM 88 O O . ASP A 1 16 ? 16.833 7.433 26.810 1.00 35.87 ? ? ? ? ? ? 91 ASP A O 1
+ATOM 89 C CB . ASP A 1 16 ? 17.789 5.443 24.451 1.00 40.07 ? ? ? ? ? ? 91 ASP A CB 1
+ATOM 90 C CG . ASP A 1 16 ? 17.611 4.909 23.041 1.00 43.56 ? ? ? ? ? ? 91 ASP A CG 1
+ATOM 91 O OD1 . ASP A 1 16 ? 18.639 4.672 22.375 1.00 46.78 ? ? ? ? ? ? 91 ASP A OD1 1
+ATOM 92 O OD2 . ASP A 1 16 ? 16.460 4.720 22.597 1.00 46.84 ? ? ? ? ? ? 91 ASP A OD2 1
+ATOM 93 N N . TYR A 1 17 ? 16.915 5.312 27.508 1.00 36.46 ? ? ? ? ? ? 92 TYR A N 1
+ATOM 94 C CA . TYR A 1 17 ? 17.232 5.708 28.874 1.00 36.00 ? ? ? ? ? ? 92 TYR A CA 1
+ATOM 95 C C . TYR A 1 17 ? 18.064 4.631 29.541 1.00 37.61 ? ? ? ? ? ? 92 TYR A C 1
+ATOM 96 O O . TYR A 1 17 ? 17.676 3.465 29.558 1.00 36.97 ? ? ? ? ? ? 92 TYR A O 1
+ATOM 97 C CB . TYR A 1 17 ? 15.962 5.946 29.694 1.00 34.09 ? ? ? ? ? ? 92 TYR A CB 1
+ATOM 98 C CG . TYR A 1 17 ? 16.261 6.309 31.133 1.00 35.24 ? ? ? ? ? ? 92 TYR A CG 1
+ATOM 99 C CD1 . TYR A 1 17 ? 16.926 7.492 31.448 1.00 37.65 ? ? ? ? ? ? 92 TYR A CD1 1
+ATOM 100 C CD2 . TYR A 1 17 ? 15.941 5.440 32.173 1.00 35.48 ? ? ? ? ? ? 92 TYR A CD2 1
+ATOM 101 C CE1 . TYR A 1 17 ? 17.269 7.798 32.765 1.00 38.85 ? ? ? ? ? ? 92 TYR A CE1 1
+ATOM 102 C CE2 . TYR A 1 17 ? 16.280 5.737 33.492 1.00 36.72 ? ? ? ? ? ? 92 TYR A CE2 1
+ATOM 103 C CZ . TYR A 1 17 ? 16.944 6.915 33.779 1.00 37.60 ? ? ? ? ? ? 92 TYR A CZ 1
+ATOM 104 O OH . TYR A 1 17 ? 17.292 7.210 35.078 1.00 42.53 ? ? ? ? ? ? 92 TYR A OH 1
+ATOM 105 N N . GLU A 1 18 ? 19.215 5.018 30.079 1.00 38.99 ? ? ? ? ? ? 93 GLU A N 1
+ATOM 106 C CA . GLU A 1 18 ? 20.077 4.059 30.753 1.00 42.62 ? ? ? ? ? ? 93 GLU A CA 1
+ATOM 107 C C . GLU A 1 18 ? 19.948 4.232 32.256 1.00 42.67 ? ? ? ? ? ? 93 GLU A C 1
+ATOM 108 O O . GLU A 1 18 ? 20.068 5.339 32.776 1.00 41.84 ? ? ? ? ? ? 93 GLU A O 1
+ATOM 109 C CB . GLU A 1 18 ? 21.538 4.251 30.338 1.00 45.96 ? ? ? ? ? ? 93 GLU A CB 1
+ATOM 110 C CG . GLU A 1 18 ? 22.490 3.277 31.017 1.00 52.30 ? ? ? ? ? ? 93 GLU A CG 1
+ATOM 111 C CD . GLU A 1 18 ? 23.926 3.412 30.534 1.00 56.09 ? ? ? ? ? ? 93 GLU A CD 1
+ATOM 112 O OE1 . GLU A 1 18 ? 24.531 4.489 30.722 1.00 58.01 ? ? ? ? ? ? 93 GLU A OE1 1
+ATOM 113 O OE2 . GLU A 1 18 ? 24.448 2.432 29.963 1.00 58.62 ? ? ? ? ? ? 93 GLU A OE2 1
+ATOM 114 N N . ALA A 1 19 ? 19.693 3.130 32.948 1.00 43.87 ? ? ? ? ? ? 94 ALA A N 1
+ATOM 115 C CA . ALA A 1 19 ? 19.548 3.158 34.393 1.00 45.92 ? ? ? ? ? ? 94 ALA A CA 1
+ATOM 116 C C . ALA A 1 19 ? 20.853 3.582 35.057 1.00 47.69 ? ? ? ? ? ? 94 ALA A C 1
+ATOM 117 O O . ALA A 1 19 ? 21.910 3.014 34.788 1.00 44.95 ? ? ? ? ? ? 94 ALA A O 1
+ATOM 118 C CB . ALA A 1 19 ? 19.133 1.784 34.897 1.00 44.26 ? ? ? ? ? ? 94 ALA A CB 1
+ATOM 119 N N . ILE A 1 20 ? 20.772 4.592 35.915 1.00 50.71 ? ? ? ? ? ? 95 ILE A N 1
+ATOM 120 C CA . ILE A 1 20 ? 21.940 5.074 36.633 1.00 55.05 ? ? ? ? ? ? 95 ILE A CA 1
+ATOM 121 C C . ILE A 1 20 ? 21.695 4.866 38.122 1.00 57.48 ? ? ? ? ? ? 95 ILE A C 1
+ATOM 122 O O . ILE A 1 20 ? 22.635 4.790 38.911 1.00 58.53 ? ? ? ? ? ? 95 ILE A O 1
+ATOM 123 C CB . ILE A 1 20 ? 22.210 6.577 36.354 1.00 56.23 ? ? ? ? ? ? 95 ILE A CB 1
+ATOM 124 C CG1 . ILE A 1 20 ? 21.017 7.428 36.790 1.00 56.58 ? ? ? ? ? ? 95 ILE A CG1 1
+ATOM 125 C CG2 . ILE A 1 20 ? 22.480 6.790 34.873 1.00 56.24 ? ? ? ? ? ? 95 ILE A CG2 1
+ATOM 126 C CD1 . ILE A 1 20 ? 21.224 8.923 36.574 1.00 56.85 ? ? ? ? ? ? 95 ILE A CD1 1
+ATOM 127 N N . HIS A 1 21 ? 20.421 4.760 38.493 1.00 60.30 ? ? ? ? ? ? 96 HIS A N 1
+ATOM 128 C CA . HIS A 1 21 ? 20.032 4.555 39.885 1.00 61.59 ? ? ? ? ? ? 96 HIS A CA 1
+ATOM 129 C C . HIS A 1 21 ? 19.652 3.094 40.130 1.00 63.02 ? ? ? ? ? ? 96 HIS A C 1
+ATOM 130 O O . HIS A 1 21 ? 19.282 2.371 39.202 1.00 63.01 ? ? ? ? ? ? 96 HIS A O 1
+ATOM 131 C CB . HIS A 1 21 ? 18.856 5.470 40.245 1.00 60.97 ? ? ? ? ? ? 96 HIS A CB 1
+ATOM 132 C CG . HIS A 1 21 ? 19.120 6.923 39.991 1.00 62.42 ? ? ? ? ? ? 96 HIS A CG 1
+ATOM 133 N ND1 . HIS A 1 21 ? 20.134 7.616 40.619 1.00 62.32 ? ? ? ? ? ? 96 HIS A ND1 1
+ATOM 134 C CD2 . HIS A 1 21 ? 18.518 7.808 39.163 1.00 62.31 ? ? ? ? ? ? 96 HIS A CD2 1
+ATOM 135 C CE1 . HIS A 1 21 ? 20.144 8.865 40.186 1.00 63.13 ? ? ? ? ? ? 96 HIS A CE1 1
+ATOM 136 N NE2 . HIS A 1 21 ? 19.173 9.008 39.302 1.00 61.82 ? ? ? ? ? ? 96 HIS A NE2 1
+ATOM 137 N N . HIS A 1 22 ? 19.745 2.677 41.389 1.00 63.58 ? ? ? ? ? ? 97 HIS A N 1
+ATOM 138 C CA . HIS A 1 22 ? 19.443 1.310 41.810 1.00 64.78 ? ? ? ? ? ? 97 HIS A CA 1
+ATOM 139 C C . HIS A 1 22 ? 18.144 0.693 41.275 1.00 64.19 ? ? ? ? ? ? 97 HIS A C 1
+ATOM 140 O O . HIS A 1 22 ? 18.165 -0.377 40.659 1.00 63.54 ? ? ? ? ? ? 97 HIS A O 1
+ATOM 141 C CB . HIS A 1 22 ? 19.435 1.242 43.340 1.00 66.65 ? ? ? ? ? ? 97 HIS A CB 1
+ATOM 142 C CG . HIS A 1 22 ? 19.091 -0.110 43.882 1.00 69.91 ? ? ? ? ? ? 97 HIS A CG 1
+ATOM 143 N ND1 . HIS A 1 22 ? 19.840 -1.234 43.612 1.00 71.18 ? ? ? ? ? ? 97 HIS A ND1 1
+ATOM 144 C CD2 . HIS A 1 22 ? 18.070 -0.520 44.674 1.00 70.93 ? ? ? ? ? ? 97 HIS A CD2 1
+ATOM 145 C CE1 . HIS A 1 22 ? 19.298 -2.279 44.212 1.00 72.26 ? ? ? ? ? ? 97 HIS A CE1 1
+ATOM 146 N NE2 . HIS A 1 22 ? 18.222 -1.872 44.863 1.00 72.48 ? ? ? ? ? ? 97 HIS A NE2 1
+ATOM 147 N N . GLU A 1 23 ? 17.020 1.356 41.521 1.00 63.07 ? ? ? ? ? ? 98 GLU A N 1
+ATOM 148 C CA . GLU A 1 23 ? 15.721 0.852 41.079 1.00 62.06 ? ? ? ? ? ? 98 GLU A CA 1
+ATOM 149 C C . GLU A 1 23 ? 15.320 1.309 39.674 1.00 59.39 ? ? ? ? ? ? 98 GLU A C 1
+ATOM 150 O O . GLU A 1 23 ? 14.177 1.124 39.253 1.00 57.96 ? ? ? ? ? ? 98 GLU A O 1
+ATOM 151 C CB . GLU A 1 23 ? 14.650 1.268 42.085 1.00 64.63 ? ? ? ? ? ? 98 GLU A CB 1
+ATOM 152 C CG . GLU A 1 23 ? 14.881 0.722 43.485 1.00 68.33 ? ? ? ? ? ? 98 GLU A CG 1
+ATOM 153 C CD . GLU A 1 23 ? 13.877 1.257 44.488 1.00 72.77 ? ? ? ? ? ? 98 GLU A CD 1
+ATOM 154 O OE1 . GLU A 1 23 ? 13.899 2.479 44.764 1.00 72.46 ? ? ? ? ? ? 98 GLU A OE1 1
+ATOM 155 O OE2 . GLU A 1 23 ? 13.060 0.457 44.994 1.00 74.85 ? ? ? ? ? ? 98 GLU A OE2 1
+ATOM 156 N N . ASP A 1 24 ? 16.263 1.904 38.952 1.00 56.28 ? ? ? ? ? ? 99 ASP A N 1
+ATOM 157 C CA . ASP A 1 24 ? 16.014 2.378 37.596 1.00 52.13 ? ? ? ? ? ? 99 ASP A CA 1
+ATOM 158 C C . ASP A 1 24 ? 15.701 1.255 36.622 1.00 50.96 ? ? ? ? ? ? 99 ASP A C 1
+ATOM 159 O O . ASP A 1 24 ? 16.193 0.134 36.760 1.00 52.38 ? ? ? ? ? ? 99 ASP A O 1
+ATOM 160 C CB . ASP A 1 24 ? 17.226 3.155 37.084 1.00 51.87 ? ? ? ? ? ? 99 ASP A CB 1
+ATOM 161 C CG . ASP A 1 24 ? 17.211 4.603 37.504 1.00 51.68 ? ? ? ? ? ? 99 ASP A CG 1
+ATOM 162 O OD1 . ASP A 1 24 ? 16.583 4.910 38.538 1.00 52.27 ? ? ? ? ? ? 99 ASP A OD1 1
+ATOM 163 O OD2 . ASP A 1 24 ? 17.845 5.428 36.807 1.00 48.20 ? ? ? ? ? ? 99 ASP A OD2 1
+ATOM 164 N N . LEU A 1 25 ? 14.878 1.569 35.631 1.00 48.34 ? ? ? ? ? ? 100 LEU A N 1
+ATOM 165 C CA . LEU A 1 25 ? 14.513 0.604 34.610 1.00 44.41 ? ? ? ? ? ? 100 LEU A CA 1
+ATOM 166 C C . LEU A 1 25 ? 15.020 1.208 33.307 1.00 43.33 ? ? ? ? ? ? 100 LEU A C 1
+ATOM 167 O O . LEU A 1 25 ? 14.627 2.313 32.933 1.00 40.90 ? ? ? ? ? ? 100 LEU A O 1
+ATOM 168 C CB . LEU A 1 25 ? 12.991 0.430 34.560 1.00 44.99 ? ? ? ? ? ? 100 LEU A CB 1
+ATOM 169 C CG . LEU A 1 25 ? 12.403 -0.751 33.778 1.00 42.66 ? ? ? ? ? ? 100 LEU A CG 1
+ATOM 170 C CD1 . LEU A 1 25 ? 10.891 -0.683 33.832 1.00 44.47 ? ? ? ? ? ? 100 LEU A CD1 1
+ATOM 171 C CD2 . LEU A 1 25 ? 12.870 -0.731 32.345 1.00 45.53 ? ? ? ? ? ? 100 LEU A CD2 1
+ATOM 172 N N . SER A 1 26 ? 15.914 0.497 32.628 1.00 43.53 ? ? ? ? ? ? 101 SER A N 1
+ATOM 173 C CA . SER A 1 26 ? 16.458 0.984 31.366 1.00 42.17 ? ? ? ? ? ? 101 SER A CA 1
+ATOM 174 C C . SER A 1 26 ? 15.539 0.577 30.224 1.00 40.58 ? ? ? ? ? ? 101 SER A C 1
+ATOM 175 O O . SER A 1 26 ? 14.941 -0.497 30.250 1.00 41.76 ? ? ? ? ? ? 101 SER A O 1
+ATOM 176 C CB . SER A 1 26 ? 17.856 0.408 31.123 1.00 42.86 ? ? ? ? ? ? 101 SER A CB 1
+ATOM 177 O OG . SER A 1 26 ? 18.747 0.762 32.166 1.00 44.85 ? ? ? ? ? ? 101 SER A OG 1
+ATOM 178 N N . PHE A 1 27 ? 15.425 1.444 29.226 1.00 37.21 ? ? ? ? ? ? 102 PHE A N 1
+ATOM 179 C CA . PHE A 1 27 ? 14.593 1.168 28.069 1.00 34.66 ? ? ? ? ? ? 102 PHE A CA 1
+ATOM 180 C C . PHE A 1 27 ? 15.129 1.914 26.858 1.00 37.23 ? ? ? ? ? ? 102 PHE A C 1
+ATOM 181 O O . PHE A 1 27 ? 15.856 2.896 26.990 1.00 35.65 ? ? ? ? ? ? 102 PHE A O 1
+ATOM 182 C CB . PHE A 1 27 ? 13.135 1.556 28.359 1.00 30.36 ? ? ? ? ? ? 102 PHE A CB 1
+ATOM 183 C CG . PHE A 1 27 ? 12.950 2.990 28.780 1.00 27.41 ? ? ? ? ? ? 102 PHE A CG 1
+ATOM 184 C CD1 . PHE A 1 27 ? 12.989 4.021 27.848 1.00 28.02 ? ? ? ? ? ? 102 PHE A CD1 1
+ATOM 185 C CD2 . PHE A 1 27 ? 12.727 3.305 30.119 1.00 26.95 ? ? ? ? ? ? 102 PHE A CD2 1
+ATOM 186 C CE1 . PHE A 1 27 ? 12.804 5.353 28.243 1.00 26.97 ? ? ? ? ? ? 102 PHE A CE1 1
+ATOM 187 C CE2 . PHE A 1 27 ? 12.542 4.630 30.527 1.00 22.91 ? ? ? ? ? ? 102 PHE A CE2 1
+ATOM 188 C CZ . PHE A 1 27 ? 12.579 5.654 29.588 1.00 24.41 ? ? ? ? ? ? 102 PHE A CZ 1
+ATOM 189 N N . GLN A 1 28 ? 14.790 1.430 25.672 1.00 40.15 ? ? ? ? ? ? 103 GLN A N 1
+ATOM 190 C CA . GLN A 1 28 ? 15.252 2.071 24.457 1.00 39.70 ? ? ? ? ? ? 103 GLN A CA 1
+ATOM 191 C C . GLN A 1 28 ? 14.021 2.665 23.779 1.00 39.87 ? ? ? ? ? ? 103 GLN A C 1
+ATOM 192 O O . GLN A 1 28 ? 12.912 2.154 23.943 1.00 36.73 ? ? ? ? ? ? 103 GLN A O 1
+ATOM 193 C CB . GLN A 1 28 ? 15.963 1.038 23.577 1.00 45.83 ? ? ? ? ? ? 103 GLN A CB 1
+ATOM 194 C CG . GLN A 1 28 ? 16.896 1.633 22.530 1.00 53.12 ? ? ? ? ? ? 103 GLN A CG 1
+ATOM 195 C CD . GLN A 1 28 ? 17.974 0.650 22.092 1.00 57.56 ? ? ? ? ? ? 103 GLN A CD 1
+ATOM 196 O OE1 . GLN A 1 28 ? 17.677 -0.427 21.573 1.00 60.41 ? ? ? ? ? ? 103 GLN A OE1 1
+ATOM 197 N NE2 . GLN A 1 28 ? 19.236 1.019 22.310 1.00 57.53 ? ? ? ? ? ? 103 GLN A NE2 1
+ATOM 198 N N . LYS A 1 29 ? 14.211 3.763 23.053 1.00 37.71 ? ? ? ? ? ? 104 LYS A N 1
+ATOM 199 C CA . LYS A 1 29 ? 13.108 4.440 22.381 1.00 40.24 ? ? ? ? ? ? 104 LYS A CA 1
+ATOM 200 C C . LYS A 1 29 ? 12.163 3.456 21.706 1.00 39.27 ? ? ? ? ? ? 104 LYS A C 1
+ATOM 201 O O . LYS A 1 29 ? 12.594 2.454 21.135 1.00 39.16 ? ? ? ? ? ? 104 LYS A O 1
+ATOM 202 C CB . LYS A 1 29 ? 13.647 5.436 21.350 1.00 40.10 ? ? ? ? ? ? 104 LYS A CB 1
+ATOM 203 C CG . LYS A 1 29 ? 12.571 6.248 20.659 1.00 41.56 ? ? ? ? ? ? 104 LYS A CG 1
+ATOM 204 C CD . LYS A 1 29 ? 13.176 7.284 19.731 1.00 44.35 ? ? ? ? ? ? 104 LYS A CD 1
+ATOM 205 C CE . LYS A 1 29 ? 12.098 8.137 19.081 1.00 45.99 ? ? ? ? ? ? 104 LYS A CE 1
+ATOM 206 N NZ . LYS A 1 29 ? 12.680 9.165 18.170 1.00 46.99 ? ? ? ? ? ? 104 LYS A NZ 1
+ATOM 207 N N . GLY A 1 30 ? 10.870 3.749 21.783 1.00 41.17 ? ? ? ? ? ? 105 GLY A N 1
+ATOM 208 C CA . GLY A 1 30 ? 9.879 2.882 21.179 1.00 42.10 ? ? ? ? ? ? 105 GLY A CA 1
+ATOM 209 C C . GLY A 1 30 ? 9.289 1.833 22.110 1.00 41.77 ? ? ? ? ? ? 105 GLY A C 1
+ATOM 210 O O . GLY A 1 30 ? 8.092 1.566 22.040 1.00 43.81 ? ? ? ? ? ? 105 GLY A O 1
+ATOM 211 N N . ASP A 1 31 ? 10.103 1.240 22.983 1.00 41.11 ? ? ? ? ? ? 106 ASP A N 1
+ATOM 212 C CA . ASP A 1 31 ? 9.600 0.207 23.892 1.00 41.68 ? ? ? ? ? ? 106 ASP A CA 1
+ATOM 213 C C . ASP A 1 31 ? 8.353 0.683 24.623 1.00 38.60 ? ? ? ? ? ? 106 ASP A C 1
+ATOM 214 O O . ASP A 1 31 ? 8.242 1.856 24.974 1.00 40.05 ? ? ? ? ? ? 106 ASP A O 1
+ATOM 215 C CB . ASP A 1 31 ? 10.643 -0.189 24.943 1.00 41.68 ? ? ? ? ? ? 106 ASP A CB 1
+ATOM 216 C CG . ASP A 1 31 ? 11.984 -0.550 24.343 1.00 47.29 ? ? ? ? ? ? 106 ASP A CG 1
+ATOM 217 O OD1 . ASP A 1 31 ? 12.025 -1.122 23.232 1.00 46.79 ? ? ? ? ? ? 106 ASP A OD1 1
+ATOM 218 O OD2 . ASP A 1 31 ? 13.006 -0.282 25.011 1.00 46.82 ? ? ? ? ? ? 106 ASP A OD2 1
+ATOM 219 N N . GLN A 1 32 ? 7.417 -0.232 24.856 1.00 38.75 ? ? ? ? ? ? 107 GLN A N 1
+ATOM 220 C CA . GLN A 1 32 ? 6.181 0.101 25.560 1.00 34.83 ? ? ? ? ? ? 107 GLN A CA 1
+ATOM 221 C C . GLN A 1 32 ? 6.196 -0.453 26.976 1.00 33.37 ? ? ? ? ? ? 107 GLN A C 1
+ATOM 222 O O . GLN A 1 32 ? 6.695 -1.555 27.216 1.00 32.05 ? ? ? ? ? ? 107 GLN A O 1
+ATOM 223 C CB . GLN A 1 32 ? 4.972 -0.433 24.796 1.00 36.28 ? ? ? ? ? ? 107 GLN A CB 1
+ATOM 224 C CG . GLN A 1 32 ? 4.716 0.315 23.498 1.00 37.97 ? ? ? ? ? ? 107 GLN A CG 1
+ATOM 225 C CD . GLN A 1 32 ? 3.521 -0.219 22.733 1.00 36.35 ? ? ? ? ? ? 107 GLN A CD 1
+ATOM 226 O OE1 . GLN A 1 32 ? 2.404 -0.263 23.247 1.00 37.70 ? ? ? ? ? ? 107 GLN A OE1 1
+ATOM 227 N NE2 . GLN A 1 32 ? 3.754 -0.622 21.491 1.00 38.28 ? ? ? ? ? ? 107 GLN A NE2 1
+ATOM 228 N N . MET A 1 33 ? 5.641 0.320 27.905 1.00 32.28 ? ? ? ? ? ? 108 MET A N 1
+ATOM 229 C CA . MET A 1 33 ? 5.608 -0.055 29.316 1.00 30.78 ? ? ? ? ? ? 108 MET A CA 1
+ATOM 230 C C . MET A 1 33 ? 4.265 0.193 29.986 1.00 26.76 ? ? ? ? ? ? 108 MET A C 1
+ATOM 231 O O . MET A 1 33 ? 3.483 1.032 29.547 1.00 29.95 ? ? ? ? ? ? 108 MET A O 1
+ATOM 232 C CB . MET A 1 33 ? 6.694 0.719 30.074 1.00 31.18 ? ? ? ? ? ? 108 MET A CB 1
+ATOM 233 C CG . MET A 1 33 ? 8.114 0.291 29.736 1.00 28.81 ? ? ? ? ? ? 108 MET A CG 1
+ATOM 234 S SD . MET A 1 33 ? 9.353 1.517 30.215 1.00 29.93 ? ? ? ? ? ? 108 MET A SD 1
+ATOM 235 C CE . MET A 1 33 ? 8.961 2.819 29.081 1.00 25.56 ? ? ? ? ? ? 108 MET A CE 1
+ATOM 236 N N . VAL A 1 34 ? 4.018 -0.548 31.061 1.00 28.08 ? ? ? ? ? ? 109 VAL A N 1
+ATOM 237 C CA . VAL A 1 34 ? 2.800 -0.421 31.854 1.00 26.73 ? ? ? ? ? ? 109 VAL A CA 1
+ATOM 238 C C . VAL A 1 34 ? 3.133 0.448 33.071 1.00 27.23 ? ? ? ? ? ? 109 VAL A C 1
+ATOM 239 O O . VAL A 1 34 ? 4.143 0.222 33.734 1.00 27.51 ? ? ? ? ? ? 109 VAL A O 1
+ATOM 240 C CB . VAL A 1 34 ? 2.322 -1.795 32.370 1.00 27.03 ? ? ? ? ? ? 109 VAL A CB 1
+ATOM 241 C CG1 . VAL A 1 34 ? 1.071 -1.623 33.223 1.00 24.38 ? ? ? ? ? ? 109 VAL A CG1 1
+ATOM 242 C CG2 . VAL A 1 34 ? 2.045 -2.731 31.195 1.00 34.35 ? ? ? ? ? ? 109 VAL A CG2 1
+ATOM 243 N N . VAL A 1 35 ? 2.289 1.431 33.368 1.00 28.59 ? ? ? ? ? ? 110 VAL A N 1
+ATOM 244 C CA . VAL A 1 35 ? 2.522 2.310 34.514 1.00 29.57 ? ? ? ? ? ? 110 VAL A CA 1
+ATOM 245 C C . VAL A 1 35 ? 1.962 1.724 35.815 1.00 29.27 ? ? ? ? ? ? 110 VAL A C 1
+ATOM 246 O O . VAL A 1 35 ? 0.766 1.440 35.910 1.00 30.35 ? ? ? ? ? ? 110 VAL A O 1
+ATOM 247 C CB . VAL A 1 35 ? 1.889 3.696 34.284 1.00 30.69 ? ? ? ? ? ? 110 VAL A CB 1
+ATOM 248 C CG1 . VAL A 1 35 ? 2.107 4.571 35.505 1.00 27.01 ? ? ? ? ? ? 110 VAL A CG1 1
+ATOM 249 C CG2 . VAL A 1 35 ? 2.491 4.343 33.041 1.00 31.83 ? ? ? ? ? ? 110 VAL A CG2 1
+ATOM 250 N N . LEU A 1 36 ? 2.826 1.550 36.815 1.00 28.85 ? ? ? ? ? ? 111 LEU A N 1
+ATOM 251 C CA . LEU A 1 36 ? 2.401 0.989 38.098 1.00 30.67 ? ? ? ? ? ? 111 LEU A CA 1
+ATOM 252 C C . LEU A 1 36 ? 2.126 2.060 39.150 1.00 33.88 ? ? ? ? ? ? 111 LEU A C 1
+ATOM 253 O O . LEU A 1 36 ? 1.167 1.955 39.910 1.00 32.75 ? ? ? ? ? ? 111 LEU A O 1
+ATOM 254 C CB . LEU A 1 36 ? 3.452 0.024 38.641 1.00 29.69 ? ? ? ? ? ? 111 LEU A CB 1
+ATOM 255 C CG . LEU A 1 36 ? 4.001 -1.058 37.711 1.00 28.40 ? ? ? ? ? ? 111 LEU A CG 1
+ATOM 256 C CD1 . LEU A 1 36 ? 4.770 -2.068 38.569 1.00 27.76 ? ? ? ? ? ? 111 LEU A CD1 1
+ATOM 257 C CD2 . LEU A 1 36 ? 2.876 -1.754 36.955 1.00 31.48 ? ? ? ? ? ? 111 LEU A CD2 1
+ATOM 258 N N . GLU A 1 37 ? 2.987 3.072 39.207 1.00 35.09 ? ? ? ? ? ? 112 GLU A N 1
+ATOM 259 C CA . GLU A 1 37 ? 2.831 4.179 40.149 1.00 36.06 ? ? ? ? ? ? 112 GLU A CA 1
+ATOM 260 C C . GLU A 1 37 ? 3.113 5.449 39.377 1.00 37.76 ? ? ? ? ? ? 112 GLU A C 1
+ATOM 261 O O . GLU A 1 37 ? 4.098 5.532 38.644 1.00 32.94 ? ? ? ? ? ? 112 GLU A O 1
+ATOM 262 C CB . GLU A 1 37 ? 3.815 4.080 41.317 1.00 37.39 ? ? ? ? ? ? 112 GLU A CB 1
+ATOM 263 C CG . GLU A 1 37 ? 3.629 2.872 42.217 1.00 43.66 ? ? ? ? ? ? 112 GLU A CG 1
+ATOM 264 C CD . GLU A 1 37 ? 4.670 2.807 43.329 1.00 48.09 ? ? ? ? ? ? 112 GLU A CD 1
+ATOM 265 O OE1 . GLU A 1 37 ? 4.674 1.806 44.081 1.00 51.07 ? ? ? ? ? ? 112 GLU A OE1 1
+ATOM 266 O OE2 . GLU A 1 37 ? 5.480 3.756 43.450 1.00 44.57 ? ? ? ? ? ? 112 GLU A OE2 1
+ATOM 267 N N . GLU A 1 38 ? 2.246 6.436 39.548 1.00 39.43 ? ? ? ? ? ? 113 GLU A N 1
+ATOM 268 C CA . GLU A 1 38 ? 2.387 7.703 38.853 1.00 44.22 ? ? ? ? ? ? 113 GLU A CA 1
+ATOM 269 C C . GLU A 1 38 ? 2.798 8.760 39.881 1.00 45.95 ? ? ? ? ? ? 113 GLU A C 1
+ATOM 270 O O . GLU A 1 38 ? 2.070 9.718 40.138 1.00 47.48 ? ? ? ? ? ? 113 GLU A O 1
+ATOM 271 C CB . GLU A 1 38 ? 1.050 8.037 38.188 1.00 46.63 ? ? ? ? ? ? 113 GLU A CB 1
+ATOM 272 C CG . GLU A 1 38 ? 1.101 9.108 37.125 1.00 52.38 ? ? ? ? ? ? 113 GLU A CG 1
+ATOM 273 C CD . GLU A 1 38 ? -0.187 9.176 36.325 1.00 55.07 ? ? ? ? ? ? 113 GLU A CD 1
+ATOM 274 O OE1 . GLU A 1 38 ? -0.534 8.175 35.659 1.00 55.80 ? ? ? ? ? ? 113 GLU A OE1 1
+ATOM 275 O OE2 . GLU A 1 38 ? -0.855 10.229 36.362 1.00 60.95 ? ? ? ? ? ? 113 GLU A OE2 1
+ATOM 276 N N . SER A 1 39 ? 3.986 8.567 40.452 1.00 47.39 ? ? ? ? ? ? 114 SER A N 1
+ATOM 277 C CA . SER A 1 39 ? 4.537 9.445 41.482 1.00 49.04 ? ? ? ? ? ? 114 SER A CA 1
+ATOM 278 C C . SER A 1 39 ? 5.346 10.656 40.999 1.00 48.27 ? ? ? ? ? ? 114 SER A C 1
+ATOM 279 O O . SER A 1 39 ? 6.543 10.759 41.273 1.00 51.26 ? ? ? ? ? ? 114 SER A O 1
+ATOM 280 C CB . SER A 1 39 ? 5.412 8.621 42.434 1.00 52.89 ? ? ? ? ? ? 114 SER A CB 1
+ATOM 281 O OG . SER A 1 39 ? 4.691 7.538 43.000 1.00 57.97 ? ? ? ? ? ? 114 SER A OG 1
+ATOM 282 N N . GLY A 1 40 ? 4.700 11.572 40.288 1.00 45.70 ? ? ? ? ? ? 116 GLY A N 1
+ATOM 283 C CA . GLY A 1 40 ? 5.391 12.765 39.827 1.00 42.46 ? ? ? ? ? ? 116 GLY A CA 1
+ATOM 284 C C . GLY A 1 40 ? 6.474 12.618 38.771 1.00 40.60 ? ? ? ? ? ? 116 GLY A C 1
+ATOM 285 O O . GLY A 1 40 ? 6.242 12.079 37.690 1.00 39.85 ? ? ? ? ? ? 116 GLY A O 1
+ATOM 286 N N . GLU A 1 41 ? 7.670 13.102 39.094 1.00 38.51 ? ? ? ? ? ? 117 GLU A N 1
+ATOM 287 C CA . GLU A 1 41 ? 8.800 13.077 38.166 1.00 35.67 ? ? ? ? ? ? 117 GLU A CA 1
+ATOM 288 C C . GLU A 1 41 ? 9.235 11.669 37.773 1.00 32.76 ? ? ? ? ? ? 117 GLU A C 1
+ATOM 289 O O . GLU A 1 41 ? 9.690 11.441 36.652 1.00 31.67 ? ? ? ? ? ? 117 GLU A O 1
+ATOM 290 C CB . GLU A 1 41 ? 9.970 13.850 38.776 1.00 41.01 ? ? ? ? ? ? 117 GLU A CB 1
+ATOM 291 C CG . GLU A 1 41 ? 11.043 14.255 37.786 1.00 44.24 ? ? ? ? ? ? 117 GLU A CG 1
+ATOM 292 C CD . GLU A 1 41 ? 11.948 15.339 38.347 1.00 47.88 ? ? ? ? ? ? 117 GLU A CD 1
+ATOM 293 O OE1 . GLU A 1 41 ? 12.714 15.059 39.298 1.00 47.58 ? ? ? ? ? ? 117 GLU A OE1 1
+ATOM 294 O OE2 . GLU A 1 41 ? 11.869 16.482 37.843 1.00 46.83 ? ? ? ? ? ? 117 GLU A OE2 1
+ATOM 295 N N . TRP A 1 42 ? 9.108 10.731 38.704 1.00 29.96 ? ? ? ? ? ? 118 TRP A N 1
+ATOM 296 C CA . TRP A 1 42 ? 9.447 9.342 38.435 1.00 29.82 ? ? ? ? ? ? 118 TRP A CA 1
+ATOM 297 C C . TRP A 1 42 ? 8.205 8.476 38.550 1.00 30.69 ? ? ? ? ? ? 118 TRP A C 1
+ATOM 298 O O . TRP A 1 42 ? 7.371 8.680 39.438 1.00 30.12 ? ? ? ? ? ? 118 TRP A O 1
+ATOM 299 C CB . TRP A 1 42 ? 10.498 8.809 39.416 1.00 29.55 ? ? ? ? ? ? 118 TRP A CB 1
+ATOM 300 C CG . TRP A 1 42 ? 11.822 9.459 39.292 1.00 27.62 ? ? ? ? ? ? 118 TRP A CG 1
+ATOM 301 C CD1 . TRP A 1 42 ? 12.194 10.673 39.795 1.00 28.09 ? ? ? ? ? ? 118 TRP A CD1 1
+ATOM 302 C CD2 . TRP A 1 42 ? 12.944 8.965 38.555 1.00 27.54 ? ? ? ? ? ? 118 TRP A CD2 1
+ATOM 303 N NE1 . TRP A 1 42 ? 13.484 10.965 39.415 1.00 28.45 ? ? ? ? ? ? 118 TRP A NE1 1
+ATOM 304 C CE2 . TRP A 1 42 ? 13.966 9.936 38.651 1.00 28.22 ? ? ? ? ? ? 118 TRP A CE2 1
+ATOM 305 C CE3 . TRP A 1 42 ? 13.184 7.796 37.818 1.00 27.52 ? ? ? ? ? ? 118 TRP A CE3 1
+ATOM 306 C CZ2 . TRP A 1 42 ? 15.217 9.771 38.038 1.00 28.75 ? ? ? ? ? ? 118 TRP A CZ2 1
+ATOM 307 C CZ3 . TRP A 1 42 ? 14.428 7.633 37.205 1.00 28.79 ? ? ? ? ? ? 118 TRP A CZ3 1
+ATOM 308 C CH2 . TRP A 1 42 ? 15.428 8.620 37.321 1.00 28.51 ? ? ? ? ? ? 118 TRP A CH2 1
+ATOM 309 N N . TRP A 1 43 ? 8.089 7.513 37.642 1.00 27.86 ? ? ? ? ? ? 119 TRP A N 1
+ATOM 310 C CA . TRP A 1 43 ? 6.974 6.579 37.642 1.00 29.23 ? ? ? ? ? ? 119 TRP A CA 1
+ATOM 311 C C . TRP A 1 43 ? 7.520 5.168 37.766 1.00 28.43 ? ? ? ? ? ? 119 TRP A C 1
+ATOM 312 O O . TRP A 1 43 ? 8.601 4.865 37.260 1.00 30.10 ? ? ? ? ? ? 119 TRP A O 1
+ATOM 313 C CB . TRP A 1 43 ? 6.174 6.678 36.341 1.00 27.68 ? ? ? ? ? ? 119 TRP A CB 1
+ATOM 314 C CG . TRP A 1 43 ? 5.389 7.934 36.172 1.00 31.57 ? ? ? ? ? ? 119 TRP A CG 1
+ATOM 315 C CD1 . TRP A 1 43 ? 5.365 9.015 37.007 1.00 32.31 ? ? ? ? ? ? 119 TRP A CD1 1
+ATOM 316 C CD2 . TRP A 1 43 ? 4.499 8.238 35.095 1.00 30.83 ? ? ? ? ? ? 119 TRP A CD2 1
+ATOM 317 N NE1 . TRP A 1 43 ? 4.511 9.973 36.516 1.00 29.13 ? ? ? ? ? ? 119 TRP A NE1 1
+ATOM 318 C CE2 . TRP A 1 43 ? 3.967 9.522 35.345 1.00 31.85 ? ? ? ? ? ? 119 TRP A CE2 1
+ATOM 319 C CE3 . TRP A 1 43 ? 4.098 7.548 33.944 1.00 33.26 ? ? ? ? ? ? 119 TRP A CE3 1
+ATOM 320 C CZ2 . TRP A 1 43 ? 3.051 10.131 34.481 1.00 32.84 ? ? ? ? ? ? 119 TRP A CZ2 1
+ATOM 321 C CZ3 . TRP A 1 43 ? 3.190 8.155 33.086 1.00 34.38 ? ? ? ? ? ? 119 TRP A CZ3 1
+ATOM 322 C CH2 . TRP A 1 43 ? 2.676 9.436 33.362 1.00 33.25 ? ? ? ? ? ? 119 TRP A CH2 1
+ATOM 323 N N . LYS A 1 44 ? 6.782 4.306 38.451 1.00 28.41 ? ? ? ? ? ? 120 LYS A N 1
+ATOM 324 C CA . LYS A 1 44 ? 7.199 2.924 38.582 1.00 29.98 ? ? ? ? ? ? 120 LYS A CA 1
+ATOM 325 C C . LYS A 1 44 ? 6.518 2.250 37.401 1.00 28.62 ? ? ? ? ? ? 120 LYS A C 1
+ATOM 326 O O . LYS A 1 44 ? 5.310 2.380 37.226 1.00 26.36 ? ? ? ? ? ? 120 LYS A O 1
+ATOM 327 C CB . LYS A 1 44 ? 6.712 2.321 39.904 1.00 32.23 ? ? ? ? ? ? 120 LYS A CB 1
+ATOM 328 C CG . LYS A 1 44 ? 7.267 0.921 40.157 1.00 36.61 ? ? ? ? ? ? 120 LYS A CG 1
+ATOM 329 C CD . LYS A 1 44 ? 6.930 0.399 41.547 1.00 38.85 ? ? ? ? ? ? 120 LYS A CD 1
+ATOM 330 C CE . LYS A 1 44 ? 7.595 -0.955 41.792 1.00 42.51 ? ? ? ? ? ? 120 LYS A CE 1
+ATOM 331 N NZ . LYS A 1 44 ? 7.334 -1.486 43.162 1.00 42.00 ? ? ? ? ? ? 120 LYS A NZ 1
+ATOM 332 N N . ALA A 1 45 ? 7.294 1.558 36.576 1.00 29.39 ? ? ? ? ? ? 121 ALA A N 1
+ATOM 333 C CA . ALA A 1 45 ? 6.735 0.902 35.402 1.00 30.73 ? ? ? ? ? ? 121 ALA A CA 1
+ATOM 334 C C . ALA A 1 45 ? 7.155 -0.550 35.276 1.00 32.55 ? ? ? ? ? ? 121 ALA A C 1
+ATOM 335 O O . ALA A 1 45 ? 7.969 -1.054 36.055 1.00 30.55 ? ? ? ? ? ? 121 ALA A O 1
+ATOM 336 C CB . ALA A 1 45 ? 7.135 1.661 34.142 1.00 30.38 ? ? ? ? ? ? 121 ALA A CB 1
+ATOM 337 N N . ARG A 1 46 ? 6.588 -1.207 34.272 1.00 32.21 ? ? ? ? ? ? 122 ARG A N 1
+ATOM 338 C CA . ARG A 1 46 ? 6.857 -2.608 33.998 1.00 34.01 ? ? ? ? ? ? 122 ARG A CA 1
+ATOM 339 C C . ARG A 1 46 ? 7.136 -2.775 32.512 1.00 33.47 ? ? ? ? ? ? 122 ARG A C 1
+ATOM 340 O O . ARG A 1 46 ? 6.379 -2.296 31.677 1.00 31.42 ? ? ? ? ? ? 122 ARG A O 1
+ATOM 341 C CB . ARG A 1 46 ? 5.642 -3.447 34.390 1.00 37.44 ? ? ? ? ? ? 122 ARG A CB 1
+ATOM 342 C CG . ARG A 1 46 ? 5.743 -4.916 34.026 1.00 43.03 ? ? ? ? ? ? 122 ARG A CG 1
+ATOM 343 C CD . ARG A 1 46 ? 4.461 -5.649 34.385 1.00 40.41 ? ? ? ? ? ? 122 ARG A CD 1
+ATOM 344 N NE . ARG A 1 46 ? 4.167 -5.550 35.812 1.00 45.50 ? ? ? ? ? ? 122 ARG A NE 1
+ATOM 345 C CZ . ARG A 1 46 ? 3.091 -4.957 36.313 1.00 46.83 ? ? ? ? ? ? 122 ARG A CZ 1
+ATOM 346 N NH1 . ARG A 1 46 ? 2.198 -4.405 35.499 1.00 48.08 ? ? ? ? ? ? 122 ARG A NH1 1
+ATOM 347 N NH2 . ARG A 1 46 ? 2.884 -4.943 37.626 1.00 47.66 ? ? ? ? ? ? 122 ARG A NH2 1
+ATOM 348 N N . SER A 1 47 ? 8.227 -3.454 32.185 1.00 37.44 ? ? ? ? ? ? 123 SER A N 1
+ATOM 349 C CA . SER A 1 47 ? 8.584 -3.679 30.790 1.00 42.30 ? ? ? ? ? ? 123 SER A CA 1
+ATOM 350 C C . SER A 1 47 ? 7.759 -4.808 30.183 1.00 44.87 ? ? ? ? ? ? 123 SER A C 1
+ATOM 351 O O . SER A 1 47 ? 7.747 -5.922 30.706 1.00 44.72 ? ? ? ? ? ? 123 SER A O 1
+ATOM 352 C CB . SER A 1 47 ? 10.072 -4.026 30.672 1.00 43.18 ? ? ? ? ? ? 123 SER A CB 1
+ATOM 353 O OG . SER A 1 47 ? 10.415 -4.351 29.334 1.00 44.42 ? ? ? ? ? ? 123 SER A OG 1
+ATOM 354 N N . LEU A 1 48 ? 7.066 -4.515 29.085 1.00 47.41 ? ? ? ? ? ? 124 LEU A N 1
+ATOM 355 C CA . LEU A 1 48 ? 6.266 -5.524 28.400 1.00 49.82 ? ? ? ? ? ? 124 LEU A CA 1
+ATOM 356 C C . LEU A 1 48 ? 7.193 -6.558 27.772 1.00 53.82 ? ? ? ? ? ? 124 LEU A C 1
+ATOM 357 O O . LEU A 1 48 ? 6.757 -7.626 27.348 1.00 54.71 ? ? ? ? ? ? 124 LEU A O 1
+ATOM 358 C CB . LEU A 1 48 ? 5.402 -4.887 27.307 1.00 48.16 ? ? ? ? ? ? 124 LEU A CB 1
+ATOM 359 C CG . LEU A 1 48 ? 4.156 -4.098 27.711 1.00 45.76 ? ? ? ? ? ? 124 LEU A CG 1
+ATOM 360 C CD1 . LEU A 1 48 ? 4.519 -2.998 28.680 1.00 48.82 ? ? ? ? ? ? 124 LEU A CD1 1
+ATOM 361 C CD2 . LEU A 1 48 ? 3.505 -3.526 26.468 1.00 43.90 ? ? ? ? ? ? 124 LEU A CD2 1
+ATOM 362 N N . ALA A 1 49 ? 8.478 -6.229 27.709 1.00 56.29 ? ? ? ? ? ? 125 ALA A N 1
+ATOM 363 C CA . ALA A 1 49 ? 9.463 -7.133 27.135 1.00 57.66 ? ? ? ? ? ? 125 ALA A CA 1
+ATOM 364 C C . ALA A 1 49 ? 9.987 -8.090 28.201 1.00 58.58 ? ? ? ? ? ? 125 ALA A C 1
+ATOM 365 O O . ALA A 1 49 ? 9.558 -9.241 28.286 1.00 59.91 ? ? ? ? ? ? 125 ALA A O 1
+ATOM 366 C CB . ALA A 1 49 ? 10.614 -6.334 26.534 1.00 58.46 ? ? ? ? ? ? 125 ALA A CB 1
+ATOM 367 N N . THR A 1 50 ? 10.907 -7.598 29.022 1.00 59.72 ? ? ? ? ? ? 126 THR A N 1
+ATOM 368 C CA . THR A 1 50 ? 11.515 -8.396 30.080 1.00 60.28 ? ? ? ? ? ? 126 THR A CA 1
+ATOM 369 C C . THR A 1 50 ? 10.619 -8.533 31.304 1.00 59.30 ? ? ? ? ? ? 126 THR A C 1
+ATOM 370 O O . THR A 1 50 ? 11.006 -9.154 32.295 1.00 57.97 ? ? ? ? ? ? 126 THR A O 1
+ATOM 371 C CB . THR A 1 50 ? 12.846 -7.770 30.537 1.00 61.26 ? ? ? ? ? ? 126 THR A CB 1
+ATOM 372 O OG1 . THR A 1 50 ? 12.597 -6.473 31.095 1.00 61.67 ? ? ? ? ? ? 126 THR A OG1 1
+ATOM 373 C CG2 . THR A 1 50 ? 13.796 -7.628 29.359 1.00 61.98 ? ? ? ? ? ? 126 THR A CG2 1
+ATOM 374 N N . ARG A 1 51 ? 9.424 -7.956 31.234 1.00 59.62 ? ? ? ? ? ? 127 ARG A N 1
+ATOM 375 C CA . ARG A 1 51 ? 8.493 -7.998 32.355 1.00 58.74 ? ? ? ? ? ? 127 ARG A CA 1
+ATOM 376 C C . ARG A 1 51 ? 9.112 -7.449 33.628 1.00 56.83 ? ? ? ? ? ? 127 ARG A C 1
+ATOM 377 O O . ARG A 1 51 ? 8.579 -7.649 34.720 1.00 56.32 ? ? ? ? ? ? 127 ARG A O 1
+ATOM 378 C CB . ARG A 1 51 ? 8.000 -9.425 32.603 1.00 62.05 ? ? ? ? ? ? 127 ARG A CB 1
+ATOM 379 C CG . ARG A 1 51 ? 6.875 -9.847 31.680 1.00 65.69 ? ? ? ? ? ? 127 ARG A CG 1
+ATOM 380 C CD . ARG A 1 51 ? 5.665 -8.936 31.875 1.00 70.08 ? ? ? ? ? ? 127 ARG A CD 1
+ATOM 381 N NE . ARG A 1 51 ? 4.530 -9.320 31.039 1.00 73.85 ? ? ? ? ? ? 127 ARG A NE 1
+ATOM 382 C CZ . ARG A 1 51 ? 4.564 -9.385 29.712 1.00 74.78 ? ? ? ? ? ? 127 ARG A CZ 1
+ATOM 383 N NH1 . ARG A 1 51 ? 5.679 -9.088 29.061 1.00 75.74 ? ? ? ? ? ? 127 ARG A NH1 1
+ATOM 384 N NH2 . ARG A 1 51 ? 3.482 -9.745 29.033 1.00 75.75 ? ? ? ? ? ? 127 ARG A NH2 1
+ATOM 385 N N . LYS A 1 52 ? 10.237 -6.755 33.492 1.00 53.42 ? ? ? ? ? ? 128 LYS A N 1
+ATOM 386 C CA . LYS A 1 52 ? 10.895 -6.189 34.659 1.00 51.16 ? ? ? ? ? ? 128 LYS A CA 1
+ATOM 387 C C . LYS A 1 52 ? 10.237 -4.886 35.095 1.00 47.04 ? ? ? ? ? ? 128 LYS A C 1
+ATOM 388 O O . LYS A 1 52 ? 9.660 -4.161 34.285 1.00 43.08 ? ? ? ? ? ? 128 LYS A O 1
+ATOM 389 C CB . LYS A 1 52 ? 12.386 -5.969 34.387 1.00 53.49 ? ? ? ? ? ? 128 LYS A CB 1
+ATOM 390 C CG . LYS A 1 52 ? 13.151 -5.392 35.580 1.00 57.21 ? ? ? ? ? ? 128 LYS A CG 1
+ATOM 391 C CD . LYS A 1 52 ? 12.784 -6.097 36.893 1.00 60.48 ? ? ? ? ? ? 128 LYS A CD 1
+ATOM 392 C CE . LYS A 1 52 ? 13.005 -7.604 36.830 1.00 62.93 ? ? ? ? ? ? 128 LYS A CE 1
+ATOM 393 N NZ . LYS A 1 52 ? 12.573 -8.274 38.090 1.00 63.07 ? ? ? ? ? ? 128 LYS A NZ 1
+ATOM 394 N N . GLU A 1 53 ? 10.328 -4.601 36.388 1.00 45.96 ? ? ? ? ? ? 129 GLU A N 1
+ATOM 395 C CA . GLU A 1 53 ? 9.730 -3.404 36.951 1.00 43.60 ? ? ? ? ? ? 129 GLU A CA 1
+ATOM 396 C C . GLU A 1 53 ? 10.797 -2.491 37.537 1.00 41.53 ? ? ? ? ? ? 129 GLU A C 1
+ATOM 397 O O . GLU A 1 53 ? 11.820 -2.955 38.043 1.00 41.05 ? ? ? ? ? ? 129 GLU A O 1
+ATOM 398 C CB . GLU A 1 53 ? 8.716 -3.800 38.025 1.00 44.33 ? ? ? ? ? ? 129 GLU A CB 1
+ATOM 399 C CG . GLU A 1 53 ? 7.702 -4.823 37.526 1.00 49.93 ? ? ? ? ? ? 129 GLU A CG 1
+ATOM 400 C CD . GLU A 1 53 ? 6.671 -5.207 38.568 1.00 52.79 ? ? ? ? ? ? 129 GLU A CD 1
+ATOM 401 O OE1 . GLU A 1 53 ? 7.066 -5.602 39.683 1.00 57.09 ? ? ? ? ? ? 129 GLU A OE1 1
+ATOM 402 O OE2 . GLU A 1 53 ? 5.463 -5.128 38.267 1.00 56.77 ? ? ? ? ? ? 129 GLU A OE2 1
+ATOM 403 N N . GLY A 1 54 ? 10.547 -1.188 37.454 1.00 37.50 ? ? ? ? ? ? 130 GLY A N 1
+ATOM 404 C CA . GLY A 1 54 ? 11.479 -0.204 37.972 1.00 34.21 ? ? ? ? ? ? 130 GLY A CA 1
+ATOM 405 C C . GLY A 1 54 ? 10.943 1.202 37.774 1.00 32.56 ? ? ? ? ? ? 130 GLY A C 1
+ATOM 406 O O . GLY A 1 54 ? 9.857 1.384 37.215 1.00 31.59 ? ? ? ? ? ? 130 GLY A O 1
+ATOM 407 N N . TYR A 1 55 ? 11.690 2.202 38.233 1.00 27.16 ? ? ? ? ? ? 131 TYR A N 1
+ATOM 408 C CA . TYR A 1 55 ? 11.262 3.588 38.087 1.00 29.35 ? ? ? ? ? ? 131 TYR A CA 1
+ATOM 409 C C . TYR A 1 55 ? 11.823 4.187 36.808 1.00 26.19 ? ? ? ? ? ? 131 TYR A C 1
+ATOM 410 O O . TYR A 1 55 ? 12.963 3.918 36.440 1.00 27.68 ? ? ? ? ? ? 131 TYR A O 1
+ATOM 411 C CB . TYR A 1 55 ? 11.712 4.404 39.299 1.00 33.03 ? ? ? ? ? ? 131 TYR A CB 1
+ATOM 412 C CG . TYR A 1 55 ? 11.035 3.974 40.580 1.00 36.29 ? ? ? ? ? ? 131 TYR A CG 1
+ATOM 413 C CD1 . TYR A 1 55 ? 9.692 4.274 40.817 1.00 39.72 ? ? ? ? ? ? 131 TYR A CD1 1
+ATOM 414 C CD2 . TYR A 1 55 ? 11.724 3.234 41.539 1.00 39.16 ? ? ? ? ? ? 131 TYR A CD2 1
+ATOM 415 C CE1 . TYR A 1 55 ? 9.050 3.847 41.981 1.00 40.43 ? ? ? ? ? ? 131 TYR A CE1 1
+ATOM 416 C CE2 . TYR A 1 55 ? 11.093 2.800 42.705 1.00 41.97 ? ? ? ? ? ? 131 TYR A CE2 1
+ATOM 417 C CZ . TYR A 1 55 ? 9.756 3.108 42.918 1.00 42.45 ? ? ? ? ? ? 131 TYR A CZ 1
+ATOM 418 O OH . TYR A 1 55 ? 9.119 2.658 44.056 1.00 45.56 ? ? ? ? ? ? 131 TYR A OH 1
+ATOM 419 N N . ILE A 1 56 ? 11.007 4.994 36.135 1.00 25.50 ? ? ? ? ? ? 132 ILE A N 1
+ATOM 420 C CA . ILE A 1 56 ? 11.395 5.641 34.884 1.00 22.51 ? ? ? ? ? ? 132 ILE A CA 1
+ATOM 421 C C . ILE A 1 56 ? 11.040 7.123 34.945 1.00 21.76 ? ? ? ? ? ? 132 ILE A C 1
+ATOM 422 O O . ILE A 1 56 ? 10.174 7.525 35.723 1.00 22.68 ? ? ? ? ? ? 132 ILE A O 1
+ATOM 423 C CB . ILE A 1 56 ? 10.638 5.042 33.688 1.00 24.59 ? ? ? ? ? ? 132 ILE A CB 1
+ATOM 424 C CG1 . ILE A 1 56 ? 9.129 5.291 33.855 1.00 25.52 ? ? ? ? ? ? 132 ILE A CG1 1
+ATOM 425 C CG2 . ILE A 1 56 ? 10.945 3.555 33.580 1.00 26.72 ? ? ? ? ? ? 132 ILE A CG2 1
+ATOM 426 C CD1 . ILE A 1 56 ? 8.277 4.849 32.676 1.00 25.75 ? ? ? ? ? ? 132 ILE A CD1 1
+ATOM 427 N N . PRO A 1 57 ? 11.721 7.958 34.138 1.00 22.49 ? ? ? ? ? ? 133 PRO A N 1
+ATOM 428 C CA . PRO A 1 57 ? 11.486 9.405 34.076 1.00 20.96 ? ? ? ? ? ? 133 PRO A CA 1
+ATOM 429 C C . PRO A 1 57 ? 10.140 9.620 33.398 1.00 22.88 ? ? ? ? ? ? 133 PRO A C 1
+ATOM 430 O O . PRO A 1 57 ? 9.963 9.199 32.263 1.00 22.46 ? ? ? ? ? ? 133 PRO A O 1
+ATOM 431 C CB . PRO A 1 57 ? 12.632 9.894 33.189 1.00 22.15 ? ? ? ? ? ? 133 PRO A CB 1
+ATOM 432 C CG . PRO A 1 57 ? 13.689 8.812 33.361 1.00 24.09 ? ? ? ? ? ? 133 PRO A CG 1
+ATOM 433 C CD . PRO A 1 57 ? 12.819 7.604 33.225 1.00 21.64 ? ? ? ? ? ? 133 PRO A CD 1
+ATOM 434 N N . SER A 1 58 ? 9.199 10.280 34.068 1.00 24.77 ? ? ? ? ? ? 134 SER A N 1
+ATOM 435 C CA . SER A 1 58 ? 7.879 10.486 33.469 1.00 28.42 ? ? ? ? ? ? 134 SER A CA 1
+ATOM 436 C C . SER A 1 58 ? 7.885 11.311 32.180 1.00 30.00 ? ? ? ? ? ? 134 SER A C 1
+ATOM 437 O O . SER A 1 58 ? 6.984 11.175 31.352 1.00 29.76 ? ? ? ? ? ? 134 SER A O 1
+ATOM 438 C CB . SER A 1 58 ? 6.914 11.109 34.493 1.00 30.03 ? ? ? ? ? ? 134 SER A CB 1
+ATOM 439 O OG . SER A 1 58 ? 7.391 12.342 35.006 1.00 30.21 ? ? ? ? ? ? 134 SER A OG 1
+ATOM 440 N N . ASN A 1 59 ? 8.907 12.142 31.993 1.00 30.34 ? ? ? ? ? ? 135 ASN A N 1
+ATOM 441 C CA . ASN A 1 59 ? 8.989 12.985 30.799 1.00 31.08 ? ? ? ? ? ? 135 ASN A CA 1
+ATOM 442 C C . ASN A 1 59 ? 9.609 12.264 29.602 1.00 29.07 ? ? ? ? ? ? 135 ASN A C 1
+ATOM 443 O O . ASN A 1 59 ? 9.748 12.841 28.524 1.00 31.80 ? ? ? ? ? ? 135 ASN A O 1
+ATOM 444 C CB . ASN A 1 59 ? 9.799 14.250 31.105 1.00 36.49 ? ? ? ? ? ? 135 ASN A CB 1
+ATOM 445 C CG . ASN A 1 59 ? 11.276 13.968 31.254 1.00 37.56 ? ? ? ? ? ? 135 ASN A CG 1
+ATOM 446 O OD1 . ASN A 1 59 ? 11.680 13.120 32.045 1.00 39.87 ? ? ? ? ? ? 135 ASN A OD1 1
+ATOM 447 N ND2 . ASN A 1 59 ? 12.093 14.682 30.491 1.00 47.17 ? ? ? ? ? ? 135 ASN A ND2 1
+ATOM 448 N N . TYR A 1 60 ? 9.991 11.006 29.793 1.00 24.92 ? ? ? ? ? ? 136 TYR A N 1
+ATOM 449 C CA . TYR A 1 60 ? 10.580 10.213 28.719 1.00 26.53 ? ? ? ? ? ? 136 TYR A CA 1
+ATOM 450 C C . TYR A 1 60 ? 9.563 9.316 28.018 1.00 26.66 ? ? ? ? ? ? 136 TYR A C 1
+ATOM 451 O O . TYR A 1 60 ? 9.905 8.617 27.065 1.00 26.97 ? ? ? ? ? ? 136 TYR A O 1
+ATOM 452 C CB . TYR A 1 60 ? 11.704 9.331 29.264 1.00 25.28 ? ? ? ? ? ? 136 TYR A CB 1
+ATOM 453 C CG . TYR A 1 60 ? 13.055 9.999 29.351 1.00 25.33 ? ? ? ? ? ? 136 TYR A CG 1
+ATOM 454 C CD1 . TYR A 1 60 ? 13.227 11.209 30.027 1.00 29.90 ? ? ? ? ? ? 136 TYR A CD1 1
+ATOM 455 C CD2 . TYR A 1 60 ? 14.176 9.399 28.777 1.00 28.02 ? ? ? ? ? ? 136 TYR A CD2 1
+ATOM 456 C CE1 . TYR A 1 60 ? 14.493 11.803 30.128 1.00 25.77 ? ? ? ? ? ? 136 TYR A CE1 1
+ATOM 457 C CE2 . TYR A 1 60 ? 15.436 9.978 28.872 1.00 27.00 ? ? ? ? ? ? 136 TYR A CE2 1
+ATOM 458 C CZ . TYR A 1 60 ? 15.590 11.175 29.546 1.00 28.82 ? ? ? ? ? ? 136 TYR A CZ 1
+ATOM 459 O OH . TYR A 1 60 ? 16.846 11.727 29.640 1.00 30.24 ? ? ? ? ? ? 136 TYR A OH 1
+ATOM 460 N N . VAL A 1 61 ? 8.322 9.332 28.493 1.00 29.13 ? ? ? ? ? ? 137 VAL A N 1
+ATOM 461 C CA . VAL A 1 61 ? 7.280 8.491 27.915 1.00 30.53 ? ? ? ? ? ? 137 VAL A CA 1
+ATOM 462 C C . VAL A 1 61 ? 6.003 9.262 27.606 1.00 31.22 ? ? ? ? ? ? 137 VAL A C 1
+ATOM 463 O O . VAL A 1 61 ? 5.822 10.393 28.052 1.00 31.98 ? ? ? ? ? ? 137 VAL A O 1
+ATOM 464 C CB . VAL A 1 61 ? 6.922 7.323 28.868 1.00 28.48 ? ? ? ? ? ? 137 VAL A CB 1
+ATOM 465 C CG1 . VAL A 1 61 ? 8.174 6.517 29.199 1.00 27.00 ? ? ? ? ? ? 137 VAL A CG1 1
+ATOM 466 C CG2 . VAL A 1 61 ? 6.280 7.859 30.132 1.00 24.25 ? ? ? ? ? ? 137 VAL A CG2 1
+ATOM 467 N N . ALA A 1 62 ? 5.110 8.634 26.846 1.00 33.46 ? ? ? ? ? ? 138 ALA A N 1
+ATOM 468 C CA . ALA A 1 62 ? 3.844 9.260 26.489 1.00 35.07 ? ? ? ? ? ? 138 ALA A CA 1
+ATOM 469 C C . ALA A 1 62 ? 2.827 8.209 26.052 1.00 35.58 ? ? ? ? ? ? 138 ALA A C 1
+ATOM 470 O O . ALA A 1 62 ? 3.194 7.069 25.751 1.00 35.02 ? ? ? ? ? ? 138 ALA A O 1
+ATOM 471 C CB . ALA A 1 62 ? 4.064 10.277 25.369 1.00 35.23 ? ? ? ? ? ? 138 ALA A CB 1
+ATOM 472 N N . ARG A 1 63 ? 1.553 8.593 26.026 1.00 39.77 ? ? ? ? ? ? 139 ARG A N 1
+ATOM 473 C CA . ARG A 1 63 ? 0.497 7.676 25.603 1.00 43.18 ? ? ? ? ? ? 139 ARG A CA 1
+ATOM 474 C C . ARG A 1 63 ? 0.874 7.166 24.226 1.00 42.57 ? ? ? ? ? ? 139 ARG A C 1
+ATOM 475 O O . ARG A 1 63 ? 1.474 7.893 23.431 1.00 43.15 ? ? ? ? ? ? 139 ARG A O 1
+ATOM 476 C CB . ARG A 1 63 ? -0.857 8.393 25.518 1.00 47.51 ? ? ? ? ? ? 139 ARG A CB 1
+ATOM 477 C CG . ARG A 1 63 ? -2.029 7.477 25.124 1.00 54.90 ? ? ? ? ? ? 139 ARG A CG 1
+ATOM 478 C CD . ARG A 1 63 ? -2.763 7.976 23.875 1.00 59.83 ? ? ? ? ? ? 139 ARG A CD 1
+ATOM 479 N NE . ARG A 1 63 ? -3.327 9.316 24.041 1.00 63.21 ? ? ? ? ? ? 139 ARG A NE 1
+ATOM 480 C CZ . ARG A 1 63 ? -3.949 9.994 23.077 1.00 65.78 ? ? ? ? ? ? 139 ARG A CZ 1
+ATOM 481 N NH1 . ARG A 1 63 ? -4.089 9.462 21.870 1.00 66.48 ? ? ? ? ? ? 139 ARG A NH1 1
+ATOM 482 N NH2 . ARG A 1 63 ? -4.427 11.208 23.317 1.00 67.91 ? ? ? ? ? ? 139 ARG A NH2 1
+ATOM 483 N N . VAL A 1 64 ? 0.524 5.920 23.937 1.00 41.18 ? ? ? ? ? ? 140 VAL A N 1
+ATOM 484 C CA . VAL A 1 64 ? 0.845 5.338 22.642 1.00 42.23 ? ? ? ? ? ? 140 VAL A CA 1
+ATOM 485 C C . VAL A 1 64 ? 0.149 6.090 21.509 1.00 41.86 ? ? ? ? ? ? 140 VAL A C 1
+ATOM 486 O O . VAL A 1 64 ? -0.977 6.558 21.664 1.00 37.75 ? ? ? ? ? ? 140 VAL A O 1
+ATOM 487 C CB . VAL A 1 64 ? 0.432 3.856 22.582 1.00 43.21 ? ? ? ? ? ? 140 VAL A CB 1
+ATOM 488 C CG1 . VAL A 1 64 ? 0.810 3.270 21.232 1.00 46.12 ? ? ? ? ? ? 140 VAL A CG1 1
+ATOM 489 C CG2 . VAL A 1 64 ? 1.105 3.084 23.710 1.00 45.39 ? ? ? ? ? ? 140 VAL A CG2 1
+ATOM 490 N N . ASP A 1 65 ? 0.835 6.201 20.375 1.00 44.04 ? ? ? ? ? ? 141 ASP A N 1
+ATOM 491 C CA . ASP A 1 65 ? 0.307 6.893 19.199 1.00 46.01 ? ? ? ? ? ? 141 ASP A CA 1
+ATOM 492 C C . ASP A 1 65 ? -0.155 8.323 19.494 1.00 45.18 ? ? ? ? ? ? 141 ASP A C 1
+ATOM 493 O O . ASP A 1 65 ? -0.796 8.958 18.659 1.00 46.61 ? ? ? ? ? ? 141 ASP A O 1
+ATOM 494 C CB . ASP A 1 65 ? -0.846 6.087 18.586 1.00 47.67 ? ? ? ? ? ? 141 ASP A CB 1
+ATOM 495 C CG . ASP A 1 65 ? -1.453 6.766 17.368 1.00 53.70 ? ? ? ? ? ? 141 ASP A CG 1
+ATOM 496 O OD1 . ASP A 1 65 ? -0.705 7.048 16.404 1.00 56.22 ? ? ? ? ? ? 141 ASP A OD1 1
+ATOM 497 O OD2 . ASP A 1 65 ? -2.678 7.021 17.374 1.00 55.21 ? ? ? ? ? ? 141 ASP A OD2 1
+ATOM 498 N N . SER A 1 66 ? 0.175 8.836 20.676 1.00 44.75 ? ? ? ? ? ? 142 SER A N 1
+ATOM 499 C CA . SER A 1 66 ? -0.223 10.193 21.026 1.00 40.56 ? ? ? ? ? ? 142 SER A CA 1
+ATOM 500 C C . SER A 1 66 ? 0.496 11.171 20.108 1.00 40.45 ? ? ? ? ? ? 142 SER A C 1
+ATOM 501 O O . SER A 1 66 ? 1.394 10.794 19.355 1.00 38.84 ? ? ? ? ? ? 142 SER A O 1
+ATOM 502 C CB . SER A 1 66 ? 0.115 10.506 22.486 1.00 43.21 ? ? ? ? ? ? 142 SER A CB 1
+ATOM 503 O OG . SER A 1 66 ? 1.513 10.490 22.707 1.00 44.57 ? ? ? ? ? ? 142 SER A OG 1
+ATOM 504 N N . LEU A 1 67 ? 0.100 12.433 20.181 1.00 37.92 ? ? ? ? ? ? 143 LEU A N 1
+ATOM 505 C CA . LEU A 1 67 ? 0.682 13.459 19.341 1.00 38.43 ? ? ? ? ? ? 143 LEU A CA 1
+ATOM 506 C C . LEU A 1 67 ? 2.130 13.790 19.733 1.00 37.33 ? ? ? ? ? ? 143 LEU A C 1
+ATOM 507 O O . LEU A 1 67 ? 2.885 14.325 18.922 1.00 36.92 ? ? ? ? ? ? 143 LEU A O 1
+ATOM 508 C CB . LEU A 1 67 ? -0.209 14.698 19.406 1.00 42.86 ? ? ? ? ? ? 143 LEU A CB 1
+ATOM 509 C CG . LEU A 1 67 ? -0.103 15.747 18.306 1.00 42.60 ? ? ? ? ? ? 143 LEU A CG 1
+ATOM 510 C CD1 . LEU A 1 67 ? -0.249 15.088 16.943 1.00 43.56 ? ? ? ? ? ? 143 LEU A CD1 1
+ATOM 511 C CD2 . LEU A 1 67 ? -1.192 16.785 18.515 1.00 43.86 ? ? ? ? ? ? 143 LEU A CD2 1
+ATOM 512 N N . GLU A 1 68 ? 2.524 13.450 20.960 1.00 33.59 ? ? ? ? ? ? 144 GLU A N 1
+ATOM 513 C CA . GLU A 1 68 ? 3.885 13.721 21.423 1.00 33.90 ? ? ? ? ? ? 144 GLU A CA 1
+ATOM 514 C C . GLU A 1 68 ? 4.907 12.742 20.866 1.00 30.61 ? ? ? ? ? ? 144 GLU A C 1
+ATOM 515 O O . GLU A 1 68 ? 6.103 12.902 21.104 1.00 29.05 ? ? ? ? ? ? 144 GLU A O 1
+ATOM 516 C CB . GLU A 1 68 ? 3.986 13.681 22.955 1.00 36.54 ? ? ? ? ? ? 144 GLU A CB 1
+ATOM 517 C CG . GLU A 1 68 ? 3.033 14.592 23.692 1.00 43.36 ? ? ? ? ? ? 144 GLU A CG 1
+ATOM 518 C CD . GLU A 1 68 ? 1.662 13.977 23.860 1.00 47.09 ? ? ? ? ? ? 144 GLU A CD 1
+ATOM 519 O OE1 . GLU A 1 68 ? 1.553 12.993 24.622 1.00 50.21 ? ? ? ? ? ? 144 GLU A OE1 1
+ATOM 520 O OE2 . GLU A 1 68 ? 0.698 14.462 23.232 1.00 49.26 ? ? ? ? ? ? 144 GLU A OE2 1
+ATOM 521 N N . THR A 1 69 ? 4.446 11.727 20.141 1.00 27.90 ? ? ? ? ? ? 145 THR A N 1
+ATOM 522 C CA . THR A 1 69 ? 5.356 10.735 19.576 1.00 29.17 ? ? ? ? ? ? 145 THR A CA 1
+ATOM 523 C C . THR A 1 69 ? 5.897 11.148 18.209 1.00 31.65 ? ? ? ? ? ? 145 THR A C 1
+ATOM 524 O O . THR A 1 69 ? 6.795 10.496 17.669 1.00 34.12 ? ? ? ? ? ? 145 THR A O 1
+ATOM 525 C CB . THR A 1 69 ? 4.673 9.357 19.420 1.00 29.72 ? ? ? ? ? ? 145 THR A CB 1
+ATOM 526 O OG1 . THR A 1 69 ? 3.556 9.474 18.529 1.00 25.91 ? ? ? ? ? ? 145 THR A OG1 1
+ATOM 527 C CG2 . THR A 1 69 ? 4.186 8.843 20.768 1.00 28.80 ? ? ? ? ? ? 145 THR A CG2 1
+ATOM 528 N N . GLU A 1 70 ? 5.352 12.227 17.653 1.00 30.68 ? ? ? ? ? ? 146 GLU A N 1
+ATOM 529 C CA . GLU A 1 70 ? 5.781 12.712 16.341 1.00 33.04 ? ? ? ? ? ? 146 GLU A CA 1
+ATOM 530 C C . GLU A 1 70 ? 6.996 13.628 16.437 1.00 32.95 ? ? ? ? ? ? 146 GLU A C 1
+ATOM 531 O O . GLU A 1 70 ? 7.146 14.377 17.401 1.00 31.72 ? ? ? ? ? ? 146 GLU A O 1
+ATOM 532 C CB . GLU A 1 70 ? 4.640 13.462 15.653 1.00 36.81 ? ? ? ? ? ? 146 GLU A CB 1
+ATOM 533 C CG . GLU A 1 70 ? 3.381 12.637 15.415 1.00 39.10 ? ? ? ? ? ? 146 GLU A CG 1
+ATOM 534 C CD . GLU A 1 70 ? 3.588 11.490 14.437 1.00 43.96 ? ? ? ? ? ? 146 GLU A CD 1
+ATOM 535 O OE1 . GLU A 1 70 ? 2.598 10.784 14.143 1.00 45.04 ? ? ? ? ? ? 146 GLU A OE1 1
+ATOM 536 O OE2 . GLU A 1 70 ? 4.729 11.294 13.961 1.00 44.83 ? ? ? ? ? ? 146 GLU A OE2 1
+ATOM 537 N N . GLU A 1 71 ? 7.853 13.566 15.420 1.00 33.78 ? ? ? ? ? ? 147 GLU A N 1
+ATOM 538 C CA . GLU A 1 71 ? 9.068 14.370 15.364 1.00 35.16 ? ? ? ? ? ? 147 GLU A CA 1
+ATOM 539 C C . GLU A 1 71 ? 8.770 15.853 15.159 1.00 32.58 ? ? ? ? ? ? 147 GLU A C 1
+ATOM 540 O O . GLU A 1 71 ? 9.519 16.716 15.611 1.00 31.37 ? ? ? ? ? ? 147 GLU A O 1
+ATOM 541 C CB . GLU A 1 71 ? 9.966 13.871 14.225 1.00 40.20 ? ? ? ? ? ? 147 GLU A CB 1
+ATOM 542 C CG . GLU A 1 71 ? 9.300 13.944 12.843 1.00 48.61 ? ? ? ? ? ? 147 GLU A CG 1
+ATOM 543 C CD . GLU A 1 71 ? 10.202 13.469 11.708 1.00 50.30 ? ? ? ? ? ? 147 GLU A CD 1
+ATOM 544 O OE1 . GLU A 1 71 ? 10.629 12.294 11.728 1.00 53.72 ? ? ? ? ? ? 147 GLU A OE1 1
+ATOM 545 O OE2 . GLU A 1 71 ? 10.481 14.272 10.792 1.00 50.02 ? ? ? ? ? ? 147 GLU A OE2 1
+ATOM 546 N N . TRP A 1 72 ? 7.667 16.140 14.478 1.00 30.99 ? ? ? ? ? ? 148 TRP A N 1
+ATOM 547 C CA . TRP A 1 72 ? 7.278 17.513 14.188 1.00 29.81 ? ? ? ? ? ? 148 TRP A CA 1
+ATOM 548 C C . TRP A 1 72 ? 6.376 18.196 15.220 1.00 29.32 ? ? ? ? ? ? 148 TRP A C 1
+ATOM 549 O O . TRP A 1 72 ? 6.019 19.362 15.042 1.00 27.96 ? ? ? ? ? ? 148 TRP A O 1
+ATOM 550 C CB . TRP A 1 72 ? 6.612 17.580 12.804 1.00 27.93 ? ? ? ? ? ? 148 TRP A CB 1
+ATOM 551 C CG . TRP A 1 72 ? 5.597 16.496 12.555 1.00 28.85 ? ? ? ? ? ? 148 TRP A CG 1
+ATOM 552 C CD1 . TRP A 1 72 ? 5.796 15.332 11.868 1.00 30.04 ? ? ? ? ? ? 148 TRP A CD1 1
+ATOM 553 C CD2 . TRP A 1 72 ? 4.251 16.438 13.057 1.00 27.69 ? ? ? ? ? ? 148 TRP A CD2 1
+ATOM 554 N NE1 . TRP A 1 72 ? 4.661 14.555 11.910 1.00 26.85 ? ? ? ? ? ? 148 TRP A NE1 1
+ATOM 555 C CE2 . TRP A 1 72 ? 3.699 15.208 12.633 1.00 28.32 ? ? ? ? ? ? 148 TRP A CE2 1
+ATOM 556 C CE3 . TRP A 1 72 ? 3.461 17.306 13.822 1.00 26.17 ? ? ? ? ? ? 148 TRP A CE3 1
+ATOM 557 C CZ2 . TRP A 1 72 ? 2.386 14.821 12.950 1.00 27.06 ? ? ? ? ? ? 148 TRP A CZ2 1
+ATOM 558 C CZ3 . TRP A 1 72 ? 2.157 16.921 14.140 1.00 29.62 ? ? ? ? ? ? 148 TRP A CZ3 1
+ATOM 559 C CH2 . TRP A 1 72 ? 1.634 15.685 13.701 1.00 25.27 ? ? ? ? ? ? 148 TRP A CH2 1
+ATOM 560 N N . PHE A 1 73 ? 6.011 17.498 16.294 1.00 26.07 ? ? ? ? ? ? 149 PHE A N 1
+ATOM 561 C CA . PHE A 1 73 ? 5.147 18.110 17.305 1.00 26.00 ? ? ? ? ? ? 149 PHE A CA 1
+ATOM 562 C C . PHE A 1 73 ? 5.932 18.502 18.552 1.00 28.15 ? ? ? ? ? ? 149 PHE A C 1
+ATOM 563 O O . PHE A 1 73 ? 6.750 17.731 19.054 1.00 25.70 ? ? ? ? ? ? 149 PHE A O 1
+ATOM 564 C CB . PHE A 1 73 ? 4.018 17.158 17.717 1.00 22.29 ? ? ? ? ? ? 149 PHE A CB 1
+ATOM 565 C CG . PHE A 1 73 ? 2.939 17.821 18.540 1.00 27.23 ? ? ? ? ? ? 149 PHE A CG 1
+ATOM 566 C CD1 . PHE A 1 73 ? 2.010 18.672 17.942 1.00 30.01 ? ? ? ? ? ? 149 PHE A CD1 1
+ATOM 567 C CD2 . PHE A 1 73 ? 2.883 17.638 19.915 1.00 23.13 ? ? ? ? ? ? 149 PHE A CD2 1
+ATOM 568 C CE1 . PHE A 1 73 ? 1.041 19.331 18.709 1.00 28.70 ? ? ? ? ? ? 149 PHE A CE1 1
+ATOM 569 C CE2 . PHE A 1 73 ? 1.921 18.292 20.686 1.00 26.85 ? ? ? ? ? ? 149 PHE A CE2 1
+ATOM 570 C CZ . PHE A 1 73 ? 1.002 19.138 20.083 1.00 26.71 ? ? ? ? ? ? 149 PHE A CZ 1
+ATOM 571 N N . PHE A 1 74 ? 5.687 19.712 19.044 1.00 28.23 ? ? ? ? ? ? 150 PHE A N 1
+ATOM 572 C CA . PHE A 1 74 ? 6.354 20.189 20.248 1.00 31.12 ? ? ? ? ? ? 150 PHE A CA 1
+ATOM 573 C C . PHE A 1 74 ? 5.312 20.528 21.300 1.00 31.48 ? ? ? ? ? ? 150 PHE A C 1
+ATOM 574 O O . PHE A 1 74 ? 4.665 21.570 21.242 1.00 31.75 ? ? ? ? ? ? 150 PHE A O 1
+ATOM 575 C CB . PHE A 1 74 ? 7.222 21.413 19.941 1.00 31.13 ? ? ? ? ? ? 150 PHE A CB 1
+ATOM 576 C CG . PHE A 1 74 ? 8.474 21.084 19.184 1.00 30.73 ? ? ? ? ? ? 150 PHE A CG 1
+ATOM 577 C CD1 . PHE A 1 74 ? 8.412 20.600 17.885 1.00 30.10 ? ? ? ? ? ? 150 PHE A CD1 1
+ATOM 578 C CD2 . PHE A 1 74 ? 9.718 21.218 19.790 1.00 31.91 ? ? ? ? ? ? 150 PHE A CD2 1
+ATOM 579 C CE1 . PHE A 1 74 ? 9.567 20.252 17.199 1.00 31.38 ? ? ? ? ? ? 150 PHE A CE1 1
+ATOM 580 C CE2 . PHE A 1 74 ? 10.882 20.870 19.109 1.00 32.77 ? ? ? ? ? ? 150 PHE A CE2 1
+ATOM 581 C CZ . PHE A 1 74 ? 10.807 20.387 17.815 1.00 29.83 ? ? ? ? ? ? 150 PHE A CZ 1
+ATOM 582 N N . LYS A 1 75 ? 5.166 19.635 22.269 1.00 32.95 ? ? ? ? ? ? 151 LYS A N 1
+ATOM 583 C CA . LYS A 1 75 ? 4.184 19.796 23.330 1.00 34.22 ? ? ? ? ? ? 151 LYS A CA 1
+ATOM 584 C C . LYS A 1 75 ? 4.542 20.828 24.391 1.00 36.50 ? ? ? ? ? ? 151 LYS A C 1
+ATOM 585 O O . LYS A 1 75 ? 5.694 20.927 24.824 1.00 38.35 ? ? ? ? ? ? 151 LYS A O 1
+ATOM 586 C CB . LYS A 1 75 ? 3.948 18.449 24.010 1.00 36.11 ? ? ? ? ? ? 151 LYS A CB 1
+ATOM 587 C CG . LYS A 1 75 ? 2.898 18.468 25.107 1.00 37.44 ? ? ? ? ? ? 151 LYS A CG 1
+ATOM 588 C CD . LYS A 1 75 ? 2.807 17.098 25.748 1.00 42.34 ? ? ? ? ? ? 151 LYS A CD 1
+ATOM 589 C CE . LYS A 1 75 ? 1.685 17.017 26.762 1.00 45.51 ? ? ? ? ? ? 151 LYS A CE 1
+ATOM 590 N NZ . LYS A 1 75 ? 1.620 15.655 27.371 1.00 49.26 ? ? ? ? ? ? 151 LYS A NZ 1
+ATOM 591 N N . GLY A 1 76 ? 3.533 21.589 24.801 1.00 34.34 ? ? ? ? ? ? 152 GLY A N 1
+ATOM 592 C CA . GLY A 1 76 ? 3.700 22.594 25.835 1.00 37.16 ? ? ? ? ? ? 152 GLY A CA 1
+ATOM 593 C C . GLY A 1 76 ? 4.665 23.742 25.605 1.00 37.54 ? ? ? ? ? ? 152 GLY A C 1
+ATOM 594 O O . GLY A 1 76 ? 5.125 24.348 26.570 1.00 42.89 ? ? ? ? ? ? 152 GLY A O 1
+ATOM 595 N N . ILE A 1 77 ? 4.984 24.059 24.354 1.00 35.48 ? ? ? ? ? ? 153 ILE A N 1
+ATOM 596 C CA . ILE A 1 77 ? 5.904 25.165 24.094 1.00 31.70 ? ? ? ? ? ? 153 ILE A CA 1
+ATOM 597 C C . ILE A 1 77 ? 5.107 26.395 23.661 1.00 31.59 ? ? ? ? ? ? 153 ILE A C 1
+ATOM 598 O O . ILE A 1 77 ? 4.214 26.305 22.818 1.00 32.46 ? ? ? ? ? ? 153 ILE A O 1
+ATOM 599 C CB . ILE A 1 77 ? 6.937 24.797 22.999 1.00 29.71 ? ? ? ? ? ? 153 ILE A CB 1
+ATOM 600 C CG1 . ILE A 1 77 ? 7.982 25.906 22.873 1.00 28.86 ? ? ? ? ? ? 153 ILE A CG1 1
+ATOM 601 C CG2 . ILE A 1 77 ? 6.235 24.597 21.663 1.00 28.20 ? ? ? ? ? ? 153 ILE A CG2 1
+ATOM 602 C CD1 . ILE A 1 77 ? 9.083 25.598 21.889 1.00 29.43 ? ? ? ? ? ? 153 ILE A CD1 1
+ATOM 603 N N . SER A 1 78 ? 5.418 27.542 24.251 1.00 27.09 ? ? ? ? ? ? 154 SER A N 1
+ATOM 604 C CA . SER A 1 78 ? 4.716 28.781 23.927 1.00 26.96 ? ? ? ? ? ? 154 SER A CA 1
+ATOM 605 C C . SER A 1 78 ? 5.199 29.353 22.600 1.00 26.46 ? ? ? ? ? ? 154 SER A C 1
+ATOM 606 O O . SER A 1 78 ? 6.224 28.928 22.064 1.00 27.25 ? ? ? ? ? ? 154 SER A O 1
+ATOM 607 C CB . SER A 1 78 ? 4.979 29.827 25.004 1.00 26.22 ? ? ? ? ? ? 154 SER A CB 1
+ATOM 608 O OG . SER A 1 78 ? 6.347 30.199 24.972 1.00 22.54 ? ? ? ? ? ? 154 SER A OG 1
+ATOM 609 N N . ARG A 1 79 ? 4.461 30.328 22.080 1.00 25.24 ? ? ? ? ? ? 155 ARG A N 1
+ATOM 610 C CA . ARG A 1 79 ? 4.845 30.988 20.839 1.00 25.60 ? ? ? ? ? ? 155 ARG A CA 1
+ATOM 611 C C . ARG A 1 79 ? 6.261 31.560 20.957 1.00 22.61 ? ? ? ? ? ? 155 ARG A C 1
+ATOM 612 O O . ARG A 1 79 ? 7.114 31.292 20.116 1.00 22.83 ? ? ? ? ? ? 155 ARG A O 1
+ATOM 613 C CB . ARG A 1 79 ? 3.877 32.129 20.524 1.00 29.33 ? ? ? ? ? ? 155 ARG A CB 1
+ATOM 614 C CG . ARG A 1 79 ? 4.426 33.144 19.518 1.00 31.78 ? ? ? ? ? ? 155 ARG A CG 1
+ATOM 615 C CD . ARG A 1 79 ? 3.545 34.377 19.479 1.00 37.38 ? ? ? ? ? ? 155 ARG A CD 1
+ATOM 616 N NE . ARG A 1 79 ? 2.299 34.106 18.786 1.00 42.94 ? ? ? ? ? ? 155 ARG A NE 1
+ATOM 617 C CZ . ARG A 1 79 ? 2.072 34.426 17.517 1.00 49.13 ? ? ? ? ? ? 155 ARG A CZ 1
+ATOM 618 N NH1 . ARG A 1 79 ? 3.012 35.036 16.800 1.00 50.45 ? ? ? ? ? ? 155 ARG A NH1 1
+ATOM 619 N NH2 . ARG A 1 79 ? 0.917 34.104 16.954 1.00 47.33 ? ? ? ? ? ? 155 ARG A NH2 1
+ATOM 620 N N . LYS A 1 80 ? 6.507 32.349 22.000 1.00 23.34 ? ? ? ? ? ? 156 LYS A N 1
+ATOM 621 C CA . LYS A 1 80 ? 7.822 32.958 22.186 1.00 21.61 ? ? ? ? ? ? 156 LYS A CA 1
+ATOM 622 C C . LYS A 1 80 ? 8.945 31.936 22.252 1.00 22.00 ? ? ? ? ? ? 156 LYS A C 1
+ATOM 623 O O . LYS A 1 80 ? 9.993 32.133 21.639 1.00 22.71 ? ? ? ? ? ? 156 LYS A O 1
+ATOM 624 C CB . LYS A 1 80 ? 7.853 33.827 23.453 1.00 26.67 ? ? ? ? ? ? 156 LYS A CB 1
+ATOM 625 C CG . LYS A 1 80 ? 6.870 34.992 23.445 1.00 30.17 ? ? ? ? ? ? 156 LYS A CG 1
+ATOM 626 C CD . LYS A 1 80 ? 7.119 35.954 22.291 1.00 29.17 ? ? ? ? ? ? 156 LYS A CD 1
+ATOM 627 C CE . LYS A 1 80 ? 8.498 36.576 22.358 1.00 32.79 ? ? ? ? ? ? 156 LYS A CE 1
+ATOM 628 N NZ . LYS A 1 80 ? 8.671 37.582 21.279 1.00 39.05 ? ? ? ? ? ? 156 LYS A NZ 1
+ATOM 629 N N . ASP A 1 81 ? 8.756 30.855 23.004 1.00 18.64 ? ? ? ? ? ? 157 ASP A N 1
+ATOM 630 C CA . ASP A 1 81 ? 9.811 29.853 23.074 1.00 19.52 ? ? ? ? ? ? 157 ASP A CA 1
+ATOM 631 C C . ASP A 1 81 ? 9.963 29.121 21.742 1.00 19.65 ? ? ? ? ? ? 157 ASP A C 1
+ATOM 632 O O . ASP A 1 81 ? 11.064 28.713 21.370 1.00 20.67 ? ? ? ? ? ? 157 ASP A O 1
+ATOM 633 C CB . ASP A 1 81 ? 9.573 28.851 24.212 1.00 21.10 ? ? ? ? ? ? 157 ASP A CB 1
+ATOM 634 C CG . ASP A 1 81 ? 9.858 29.449 25.588 1.00 24.07 ? ? ? ? ? ? 157 ASP A CG 1
+ATOM 635 O OD1 . ASP A 1 81 ? 10.818 30.236 25.712 1.00 23.34 ? ? ? ? ? ? 157 ASP A OD1 1
+ATOM 636 O OD2 . ASP A 1 81 ? 9.145 29.108 26.551 1.00 26.01 ? ? ? ? ? ? 157 ASP A OD2 1
+ATOM 637 N N . ALA A 1 82 ? 8.861 28.947 21.020 1.00 18.35 ? ? ? ? ? ? 158 ALA A N 1
+ATOM 638 C CA . ALA A 1 82 ? 8.940 28.305 19.712 1.00 21.49 ? ? ? ? ? ? 158 ALA A CA 1
+ATOM 639 C C . ALA A 1 82 ? 9.867 29.159 18.839 1.00 22.27 ? ? ? ? ? ? 158 ALA A C 1
+ATOM 640 O O . ALA A 1 82 ? 10.682 28.630 18.087 1.00 23.96 ? ? ? ? ? ? 158 ALA A O 1
+ATOM 641 C CB . ALA A 1 82 ? 7.555 28.219 19.080 1.00 22.26 ? ? ? ? ? ? 158 ALA A CB 1
+ATOM 642 N N . GLU A 1 83 ? 9.753 30.482 18.951 1.00 24.93 ? ? ? ? ? ? 159 GLU A N 1
+ATOM 643 C CA . GLU A 1 83 ? 10.597 31.371 18.149 1.00 24.98 ? ? ? ? ? ? 159 GLU A CA 1
+ATOM 644 C C . GLU A 1 83 ? 12.064 31.256 18.545 1.00 24.37 ? ? ? ? ? ? 159 GLU A C 1
+ATOM 645 O O . GLU A 1 83 ? 12.942 31.153 17.687 1.00 23.37 ? ? ? ? ? ? 159 GLU A O 1
+ATOM 646 C CB . GLU A 1 83 ? 10.176 32.837 18.301 1.00 23.58 ? ? ? ? ? ? 159 GLU A CB 1
+ATOM 647 C CG . GLU A 1 83 ? 8.683 33.090 18.234 1.00 31.01 ? ? ? ? ? ? 159 GLU A CG 1
+ATOM 648 C CD . GLU A 1 83 ? 8.341 34.574 18.234 1.00 32.24 ? ? ? ? ? ? 159 GLU A CD 1
+ATOM 649 O OE1 . GLU A 1 83 ? 9.054 35.363 18.894 1.00 30.99 ? ? ? ? ? ? 159 GLU A OE1 1
+ATOM 650 O OE2 . GLU A 1 83 ? 7.338 34.947 17.592 1.00 34.52 ? ? ? ? ? ? 159 GLU A OE2 1
+ATOM 651 N N . ARG A 1 84 ? 12.331 31.292 19.847 1.00 23.25 ? ? ? ? ? ? 160 ARG A N 1
+ATOM 652 C CA . ARG A 1 84 ? 13.703 31.203 20.341 1.00 24.41 ? ? ? ? ? ? 160 ARG A CA 1
+ATOM 653 C C . ARG A 1 84 ? 14.381 29.891 19.930 1.00 24.72 ? ? ? ? ? ? 160 ARG A C 1
+ATOM 654 O O . ARG A 1 84 ? 15.550 29.877 19.554 1.00 24.71 ? ? ? ? ? ? 160 ARG A O 1
+ATOM 655 C CB . ARG A 1 84 ? 13.717 31.356 21.875 1.00 24.73 ? ? ? ? ? ? 160 ARG A CB 1
+ATOM 656 C CG . ARG A 1 84 ? 13.167 32.703 22.353 1.00 22.51 ? ? ? ? ? ? 160 ARG A CG 1
+ATOM 657 C CD . ARG A 1 84 ? 12.850 32.739 23.854 1.00 20.93 ? ? ? ? ? ? 160 ARG A CD 1
+ATOM 658 N NE . ARG A 1 84 ? 12.272 34.032 24.225 1.00 17.83 ? ? ? ? ? ? 160 ARG A NE 1
+ATOM 659 C CZ . ARG A 1 84 ? 11.259 34.195 25.072 1.00 16.64 ? ? ? ? ? ? 160 ARG A CZ 1
+ATOM 660 N NH1 . ARG A 1 84 ? 10.698 33.146 25.650 1.00 19.48 ? ? ? ? ? ? 160 ARG A NH1 1
+ATOM 661 N NH2 . ARG A 1 84 ? 10.786 35.411 25.320 1.00 19.45 ? ? ? ? ? ? 160 ARG A NH2 1
+ATOM 662 N N . GLN A 1 85 ? 13.658 28.783 20.001 1.00 25.14 ? ? ? ? ? ? 161 GLN A N 1
+ATOM 663 C CA . GLN A 1 85 ? 14.257 27.507 19.632 1.00 26.24 ? ? ? ? ? ? 161 GLN A CA 1
+ATOM 664 C C . GLN A 1 85 ? 14.495 27.393 18.126 1.00 26.68 ? ? ? ? ? ? 161 GLN A C 1
+ATOM 665 O O . GLN A 1 85 ? 15.554 26.935 17.693 1.00 24.90 ? ? ? ? ? ? 161 GLN A O 1
+ATOM 666 C CB . GLN A 1 85 ? 13.395 26.361 20.168 1.00 27.88 ? ? ? ? ? ? 161 GLN A CB 1
+ATOM 667 C CG . GLN A 1 85 ? 13.525 26.235 21.689 1.00 32.29 ? ? ? ? ? ? 161 GLN A CG 1
+ATOM 668 C CD . GLN A 1 85 ? 12.566 25.236 22.310 1.00 35.38 ? ? ? ? ? ? 161 GLN A CD 1
+ATOM 669 O OE1 . GLN A 1 85 ? 12.342 24.150 21.771 1.00 33.43 ? ? ? ? ? ? 161 GLN A OE1 1
+ATOM 670 N NE2 . GLN A 1 85 ? 12.017 25.590 23.474 1.00 34.45 ? ? ? ? ? ? 161 GLN A NE2 1
+ATOM 671 N N . LEU A 1 86 ? 13.528 27.821 17.323 1.00 25.41 ? ? ? ? ? ? 162 LEU A N 1
+ATOM 672 C CA . LEU A 1 86 ? 13.697 27.769 15.871 1.00 26.57 ? ? ? ? ? ? 162 LEU A CA 1
+ATOM 673 C C . LEU A 1 86 ? 14.817 28.694 15.395 1.00 26.94 ? ? ? ? ? ? 162 LEU A C 1
+ATOM 674 O O . LEU A 1 86 ? 15.490 28.406 14.404 1.00 29.55 ? ? ? ? ? ? 162 LEU A O 1
+ATOM 675 C CB . LEU A 1 86 ? 12.389 28.140 15.165 1.00 22.12 ? ? ? ? ? ? 162 LEU A CB 1
+ATOM 676 C CG . LEU A 1 86 ? 11.361 27.017 15.053 1.00 25.00 ? ? ? ? ? ? 162 LEU A CG 1
+ATOM 677 C CD1 . LEU A 1 86 ? 10.021 27.556 14.584 1.00 22.00 ? ? ? ? ? ? 162 LEU A CD1 1
+ATOM 678 C CD2 . LEU A 1 86 ? 11.897 25.967 14.095 1.00 26.73 ? ? ? ? ? ? 162 LEU A CD2 1
+ATOM 679 N N . LEU A 1 87 ? 15.021 29.801 16.103 1.00 28.75 ? ? ? ? ? ? 163 LEU A N 1
+ATOM 680 C CA . LEU A 1 87 ? 16.057 30.758 15.727 1.00 31.72 ? ? ? ? ? ? 163 LEU A CA 1
+ATOM 681 C C . LEU A 1 87 ? 17.438 30.366 16.234 1.00 33.50 ? ? ? ? ? ? 163 LEU A C 1
+ATOM 682 O O . LEU A 1 87 ? 18.444 30.942 15.823 1.00 31.53 ? ? ? ? ? ? 163 LEU A O 1
+ATOM 683 C CB . LEU A 1 87 ? 15.695 32.156 16.236 1.00 30.22 ? ? ? ? ? ? 163 LEU A CB 1
+ATOM 684 C CG . LEU A 1 87 ? 14.481 32.837 15.595 1.00 28.90 ? ? ? ? ? ? 163 LEU A CG 1
+ATOM 685 C CD1 . LEU A 1 87 ? 14.189 34.139 16.329 1.00 30.83 ? ? ? ? ? ? 163 LEU A CD1 1
+ATOM 686 C CD2 . LEU A 1 87 ? 14.746 33.101 14.112 1.00 33.00 ? ? ? ? ? ? 163 LEU A CD2 1
+ATOM 687 N N . ALA A 1 88 ? 17.484 29.386 17.128 1.00 36.39 ? ? ? ? ? ? 164 ALA A N 1
+ATOM 688 C CA . ALA A 1 88 ? 18.752 28.925 17.679 1.00 39.13 ? ? ? ? ? ? 164 ALA A CA 1
+ATOM 689 C C . ALA A 1 88 ? 19.612 28.353 16.561 1.00 41.48 ? ? ? ? ? ? 164 ALA A C 1
+ATOM 690 O O . ALA A 1 88 ? 19.099 27.822 15.577 1.00 41.54 ? ? ? ? ? ? 164 ALA A O 1
+ATOM 691 C CB . ALA A 1 88 ? 18.509 27.862 18.743 1.00 38.23 ? ? ? ? ? ? 164 ALA A CB 1
+ATOM 692 N N . PRO A 1 89 ? 20.940 28.453 16.699 1.00 44.18 ? ? ? ? ? ? 165 PRO A N 1
+ATOM 693 C CA . PRO A 1 89 ? 21.845 27.931 15.676 1.00 46.13 ? ? ? ? ? ? 165 PRO A CA 1
+ATOM 694 C C . PRO A 1 89 ? 21.648 26.430 15.486 1.00 46.36 ? ? ? ? ? ? 165 PRO A C 1
+ATOM 695 O O . PRO A 1 89 ? 21.467 25.696 16.455 1.00 48.25 ? ? ? ? ? ? 165 PRO A O 1
+ATOM 696 C CB . PRO A 1 89 ? 23.222 28.276 16.246 1.00 47.44 ? ? ? ? ? ? 165 PRO A CB 1
+ATOM 697 C CG . PRO A 1 89 ? 22.925 29.543 17.057 1.00 47.17 ? ? ? ? ? ? 165 PRO A CG 1
+ATOM 698 C CD . PRO A 1 89 ? 21.717 29.043 17.800 1.00 45.55 ? ? ? ? ? ? 165 PRO A CD 1
+ATOM 699 N N . GLY A 1 90 ? 21.679 25.977 14.238 1.00 45.67 ? ? ? ? ? ? 166 GLY A N 1
+ATOM 700 C CA . GLY A 1 90 ? 21.506 24.561 13.976 1.00 44.65 ? ? ? ? ? ? 166 GLY A CA 1
+ATOM 701 C C . GLY A 1 90 ? 20.260 24.303 13.163 1.00 42.49 ? ? ? ? ? ? 166 GLY A C 1
+ATOM 702 O O . GLY A 1 90 ? 20.095 23.236 12.575 1.00 45.65 ? ? ? ? ? ? 166 GLY A O 1
+ATOM 703 N N . ASN A 1 91 ? 19.369 25.284 13.142 1.00 38.56 ? ? ? ? ? ? 167 ASN A N 1
+ATOM 704 C CA . ASN A 1 91 ? 18.138 25.165 12.382 1.00 34.97 ? ? ? ? ? ? 167 ASN A CA 1
+ATOM 705 C C . ASN A 1 91 ? 18.357 25.830 11.038 1.00 36.44 ? ? ? ? ? ? 167 ASN A C 1
+ATOM 706 O O . ASN A 1 91 ? 19.352 26.524 10.831 1.00 30.76 ? ? ? ? ? ? 167 ASN A O 1
+ATOM 707 C CB . ASN A 1 91 ? 16.989 25.839 13.128 1.00 33.59 ? ? ? ? ? ? 167 ASN A CB 1
+ATOM 708 C CG . ASN A 1 91 ? 16.651 25.129 14.422 1.00 33.28 ? ? ? ? ? ? 167 ASN A CG 1
+ATOM 709 O OD1 . ASN A 1 91 ? 16.162 23.999 14.410 1.00 31.22 ? ? ? ? ? ? 167 ASN A OD1 1
+ATOM 710 N ND2 . ASN A 1 91 ? 16.930 25.779 15.548 1.00 26.31 ? ? ? ? ? ? 167 ASN A ND2 1
+ATOM 711 N N . MET A 1 92 ? 17.423 25.625 10.124 1.00 36.40 ? ? ? ? ? ? 168 MET A N 1
+ATOM 712 C CA . MET A 1 92 ? 17.565 26.213 8.815 1.00 40.60 ? ? ? ? ? ? 168 MET A CA 1
+ATOM 713 C C . MET A 1 92 ? 16.271 26.772 8.270 1.00 38.86 ? ? ? ? ? ? 168 MET A C 1
+ATOM 714 O O . MET A 1 92 ? 15.203 26.658 8.873 1.00 35.45 ? ? ? ? ? ? 168 MET A O 1
+ATOM 715 C CB . MET A 1 92 ? 18.144 25.185 7.840 1.00 44.18 ? ? ? ? ? ? 168 MET A CB 1
+ATOM 716 C CG . MET A 1 92 ? 17.335 23.903 7.732 1.00 54.38 ? ? ? ? ? ? 168 MET A CG 1
+ATOM 717 S SD . MET A 1 92 ? 18.133 22.682 6.661 1.00 64.13 ? ? ? ? ? ? 168 MET A SD 1
+ATOM 718 C CE . MET A 1 92 ? 16.982 21.309 6.772 1.00 61.43 ? ? ? ? ? ? 168 MET A CE 1
+ATOM 719 N N . LEU A 1 93 ? 16.398 27.395 7.112 1.00 38.94 ? ? ? ? ? ? 169 LEU A N 1
+ATOM 720 C CA . LEU A 1 93 ? 15.282 27.996 6.428 1.00 38.06 ? ? ? ? ? ? 169 LEU A CA 1
+ATOM 721 C C . LEU A 1 93 ? 14.225 26.899 6.263 1.00 36.85 ? ? ? ? ? ? 169 LEU A C 1
+ATOM 722 O O . LEU A 1 93 ? 14.523 25.803 5.783 1.00 36.24 ? ? ? ? ? ? 169 LEU A O 1
+ATOM 723 C CB . LEU A 1 93 ? 15.793 28.542 5.086 1.00 40.10 ? ? ? ? ? ? 169 LEU A CB 1
+ATOM 724 C CG . LEU A 1 93 ? 14.947 29.495 4.248 1.00 43.17 ? ? ? ? ? ? 169 LEU A CG 1
+ATOM 725 C CD1 . LEU A 1 93 ? 13.850 28.727 3.565 1.00 46.74 ? ? ? ? ? ? 169 LEU A CD1 1
+ATOM 726 C CD2 . LEU A 1 93 ? 14.411 30.615 5.130 1.00 41.55 ? ? ? ? ? ? 169 LEU A CD2 1
+ATOM 727 N N . GLY A 1 94 ? 13.001 27.180 6.703 1.00 31.79 ? ? ? ? ? ? 170 GLY A N 1
+ATOM 728 C CA . GLY A 1 94 ? 11.940 26.197 6.594 1.00 30.88 ? ? ? ? ? ? 170 GLY A CA 1
+ATOM 729 C C . GLY A 1 94 ? 11.789 25.301 7.815 1.00 31.35 ? ? ? ? ? ? 170 GLY A C 1
+ATOM 730 O O . GLY A 1 94 ? 10.841 24.523 7.889 1.00 30.37 ? ? ? ? ? ? 170 GLY A O 1
+ATOM 731 N N . SER A 1 95 ? 12.719 25.384 8.767 1.00 31.56 ? ? ? ? ? ? 171 SER A N 1
+ATOM 732 C CA . SER A 1 95 ? 12.617 24.563 9.973 1.00 29.93 ? ? ? ? ? ? 171 SER A CA 1
+ATOM 733 C C . SER A 1 95 ? 11.302 24.917 10.655 1.00 29.06 ? ? ? ? ? ? 171 SER A C 1
+ATOM 734 O O . SER A 1 95 ? 10.928 26.091 10.731 1.00 28.62 ? ? ? ? ? ? 171 SER A O 1
+ATOM 735 C CB . SER A 1 95 ? 13.801 24.818 10.910 1.00 27.69 ? ? ? ? ? ? 171 SER A CB 1
+ATOM 736 O OG . SER A 1 95 ? 15.016 24.359 10.331 1.00 30.03 ? ? ? ? ? ? 171 SER A OG 1
+ATOM 737 N N . PHE A 1 96 ? 10.599 23.905 11.153 1.00 28.10 ? ? ? ? ? ? 172 PHE A N 1
+ATOM 738 C CA . PHE A 1 96 ? 9.305 24.147 11.769 1.00 29.23 ? ? ? ? ? ? 172 PHE A CA 1
+ATOM 739 C C . PHE A 1 96 ? 8.979 23.279 12.974 1.00 28.18 ? ? ? ? ? ? 172 PHE A C 1
+ATOM 740 O O . PHE A 1 96 ? 9.781 22.465 13.439 1.00 29.18 ? ? ? ? ? ? 172 PHE A O 1
+ATOM 741 C CB . PHE A 1 96 ? 8.204 23.901 10.747 1.00 30.17 ? ? ? ? ? ? 172 PHE A CB 1
+ATOM 742 C CG . PHE A 1 96 ? 8.053 22.449 10.379 1.00 33.63 ? ? ? ? ? ? 172 PHE A CG 1
+ATOM 743 C CD1 . PHE A 1 96 ? 9.047 21.791 9.663 1.00 32.53 ? ? ? ? ? ? 172 PHE A CD1 1
+ATOM 744 C CD2 . PHE A 1 96 ? 6.941 21.724 10.802 1.00 33.73 ? ? ? ? ? ? 172 PHE A CD2 1
+ATOM 745 C CE1 . PHE A 1 96 ? 8.937 20.432 9.375 1.00 33.83 ? ? ? ? ? ? 172 PHE A CE1 1
+ATOM 746 C CE2 . PHE A 1 96 ? 6.821 20.368 10.521 1.00 32.79 ? ? ? ? ? ? 172 PHE A CE2 1
+ATOM 747 C CZ . PHE A 1 96 ? 7.821 19.719 9.806 1.00 34.18 ? ? ? ? ? ? 172 PHE A CZ 1
+ATOM 748 N N . MET A 1 97 ? 7.762 23.479 13.462 1.00 27.66 ? ? ? ? ? ? 173 MET A N 1
+ATOM 749 C CA . MET A 1 97 ? 7.222 22.711 14.562 1.00 28.28 ? ? ? ? ? ? 173 MET A CA 1
+ATOM 750 C C . MET A 1 97 ? 5.732 22.983 14.598 1.00 27.87 ? ? ? ? ? ? 173 MET A C 1
+ATOM 751 O O . MET A 1 97 ? 5.272 24.069 14.235 1.00 28.27 ? ? ? ? ? ? 173 MET A O 1
+ATOM 752 C CB . MET A 1 97 ? 7.856 23.094 15.916 1.00 28.62 ? ? ? ? ? ? 173 MET A CB 1
+ATOM 753 C CG . MET A 1 97 ? 7.406 24.421 16.534 1.00 29.33 ? ? ? ? ? ? 173 MET A CG 1
+ATOM 754 S SD . MET A 1 97 ? 7.997 24.656 18.269 1.00 30.65 ? ? ? ? ? ? 173 MET A SD 1
+ATOM 755 C CE . MET A 1 97 ? 9.721 24.659 18.068 1.00 26.07 ? ? ? ? ? ? 173 MET A CE 1
+ATOM 756 N N . ILE A 1 98 ? 4.978 21.961 14.971 1.00 27.89 ? ? ? ? ? ? 174 ILE A N 1
+ATOM 757 C CA . ILE A 1 98 ? 3.543 22.082 15.130 1.00 28.48 ? ? ? ? ? ? 174 ILE A CA 1
+ATOM 758 C C . ILE A 1 98 ? 3.467 22.070 16.647 1.00 27.67 ? ? ? ? ? ? 174 ILE A C 1
+ATOM 759 O O . ILE A 1 98 ? 4.119 21.252 17.290 1.00 28.21 ? ? ? ? ? ? 174 ILE A O 1
+ATOM 760 C CB . ILE A 1 98 ? 2.781 20.854 14.588 1.00 32.07 ? ? ? ? ? ? 174 ILE A CB 1
+ATOM 761 C CG1 . ILE A 1 98 ? 2.992 20.713 13.076 1.00 34.92 ? ? ? ? ? ? 174 ILE A CG1 1
+ATOM 762 C CG2 . ILE A 1 98 ? 1.304 20.989 14.929 1.00 34.48 ? ? ? ? ? ? 174 ILE A CG2 1
+ATOM 763 C CD1 . ILE A 1 98 ? 2.432 21.855 12.254 1.00 36.99 ? ? ? ? ? ? 174 ILE A CD1 1
+ATOM 764 N N . ARG A 1 99 ? 2.687 22.972 17.221 1.00 26.34 ? ? ? ? ? ? 175 ARG A N 1
+ATOM 765 C CA . ARG A 1 99 ? 2.581 23.063 18.669 1.00 26.31 ? ? ? ? ? ? 175 ARG A CA 1
+ATOM 766 C C . ARG A 1 99 ? 1.146 23.376 19.052 1.00 26.93 ? ? ? ? ? ? 175 ARG A C 1
+ATOM 767 O O . ARG A 1 99 ? 0.327 23.693 18.190 1.00 28.20 ? ? ? ? ? ? 175 ARG A O 1
+ATOM 768 C CB . ARG A 1 99 ? 3.510 24.175 19.165 1.00 23.78 ? ? ? ? ? ? 175 ARG A CB 1
+ATOM 769 C CG . ARG A 1 99 ? 3.224 25.521 18.508 1.00 24.41 ? ? ? ? ? ? 175 ARG A CG 1
+ATOM 770 C CD . ARG A 1 99 ? 4.268 26.584 18.839 1.00 22.57 ? ? ? ? ? ? 175 ARG A CD 1
+ATOM 771 N NE . ARG A 1 99 ? 4.005 27.829 18.116 1.00 22.86 ? ? ? ? ? ? 175 ARG A NE 1
+ATOM 772 C CZ . ARG A 1 99 ? 2.998 28.655 18.386 1.00 24.94 ? ? ? ? ? ? 175 ARG A CZ 1
+ATOM 773 N NH1 . ARG A 1 99 ? 2.153 28.376 19.369 1.00 24.76 ? ? ? ? ? ? 175 ARG A NH1 1
+ATOM 774 N NH2 . ARG A 1 99 ? 2.820 29.750 17.660 1.00 27.28 ? ? ? ? ? ? 175 ARG A NH2 1
+ATOM 775 N N . ASP A 1 100 ? 0.841 23.267 20.342 1.00 28.77 ? ? ? ? ? ? 176 ASP A N 1
+ATOM 776 C CA . ASP A 1 100 ? -0.496 23.576 20.835 1.00 31.99 ? ? ? ? ? ? 176 ASP A CA 1
+ATOM 777 C C . ASP A 1 100 ? -0.676 25.079 20.710 1.00 33.53 ? ? ? ? ? ? 176 ASP A C 1
+ATOM 778 O O . ASP A 1 100 ? 0.251 25.840 20.984 1.00 35.08 ? ? ? ? ? ? 176 ASP A O 1
+ATOM 779 C CB . ASP A 1 100 ? -0.644 23.171 22.303 1.00 34.60 ? ? ? ? ? ? 176 ASP A CB 1
+ATOM 780 C CG . ASP A 1 100 ? -0.625 21.670 22.502 1.00 39.04 ? ? ? ? ? ? 176 ASP A CG 1
+ATOM 781 O OD1 . ASP A 1 100 ? -1.468 20.989 21.881 1.00 38.93 ? ? ? ? ? ? 176 ASP A OD1 1
+ATOM 782 O OD2 . ASP A 1 100 ? 0.221 21.175 23.281 1.00 39.59 ? ? ? ? ? ? 176 ASP A OD2 1
+ATOM 783 N N . SER A 1 101 ? -1.857 25.512 20.291 1.00 35.06 ? ? ? ? ? ? 177 SER A N 1
+ATOM 784 C CA . SER A 1 101 ? -2.111 26.939 20.138 1.00 36.69 ? ? ? ? ? ? 177 SER A CA 1
+ATOM 785 C C . SER A 1 101 ? -2.382 27.591 21.491 1.00 37.30 ? ? ? ? ? ? 177 SER A C 1
+ATOM 786 O O . SER A 1 101 ? -3.133 27.051 22.301 1.00 35.13 ? ? ? ? ? ? 177 SER A O 1
+ATOM 787 C CB . SER A 1 101 ? -3.307 27.163 19.205 1.00 37.36 ? ? ? ? ? ? 177 SER A CB 1
+ATOM 788 O OG . SER A 1 101 ? -3.563 28.547 19.022 1.00 37.78 ? ? ? ? ? ? 177 SER A OG 1
+ATOM 789 N N . GLU A 1 102 ? -1.753 28.740 21.735 1.00 38.28 ? ? ? ? ? ? 178 GLU A N 1
+ATOM 790 C CA . GLU A 1 102 ? -1.952 29.479 22.980 1.00 40.38 ? ? ? ? ? ? 178 GLU A CA 1
+ATOM 791 C C . GLU A 1 102 ? -3.189 30.359 22.863 1.00 40.93 ? ? ? ? ? ? 178 GLU A C 1
+ATOM 792 O O . GLU A 1 102 ? -3.903 30.579 23.839 1.00 42.98 ? ? ? ? ? ? 178 GLU A O 1
+ATOM 793 C CB . GLU A 1 102 ? -0.746 30.373 23.306 1.00 40.11 ? ? ? ? ? ? 178 GLU A CB 1
+ATOM 794 C CG . GLU A 1 102 ? 0.476 29.652 23.866 1.00 41.21 ? ? ? ? ? ? 178 GLU A CG 1
+ATOM 795 C CD . GLU A 1 102 ? 1.562 30.619 24.338 1.00 43.00 ? ? ? ? ? ? 178 GLU A CD 1
+ATOM 796 O OE1 . GLU A 1 102 ? 2.145 31.332 23.494 1.00 39.50 ? ? ? ? ? ? 178 GLU A OE1 1
+ATOM 797 O OE2 . GLU A 1 102 ? 1.828 30.671 25.560 1.00 41.89 ? ? ? ? ? ? 178 GLU A OE2 1
+ATOM 798 N N . THR A 1 103 ? -3.439 30.851 21.656 1.00 43.53 ? ? ? ? ? ? 179 THR A N 1
+ATOM 799 C CA . THR A 1 103 ? -4.576 31.724 21.395 1.00 45.96 ? ? ? ? ? ? 179 THR A CA 1
+ATOM 800 C C . THR A 1 103 ? -5.905 30.983 21.323 1.00 46.67 ? ? ? ? ? ? 179 THR A C 1
+ATOM 801 O O . THR A 1 103 ? -6.906 31.426 21.888 1.00 47.49 ? ? ? ? ? ? 179 THR A O 1
+ATOM 802 C CB . THR A 1 103 ? -4.378 32.478 20.080 1.00 45.48 ? ? ? ? ? ? 179 THR A CB 1
+ATOM 803 O OG1 . THR A 1 103 ? -3.151 33.210 20.142 1.00 49.05 ? ? ? ? ? ? 179 THR A OG1 1
+ATOM 804 C CG2 . THR A 1 103 ? -5.525 33.447 19.840 1.00 49.87 ? ? ? ? ? ? 179 THR A CG2 1
+ATOM 805 N N . THR A 1 104 ? -5.913 29.864 20.608 1.00 46.55 ? ? ? ? ? ? 180 THR A N 1
+ATOM 806 C CA . THR A 1 104 ? -7.121 29.066 20.460 1.00 45.69 ? ? ? ? ? ? 180 THR A CA 1
+ATOM 807 C C . THR A 1 104 ? -6.900 27.720 21.140 1.00 46.34 ? ? ? ? ? ? 180 THR A C 1
+ATOM 808 O O . THR A 1 104 ? -6.446 26.766 20.509 1.00 44.66 ? ? ? ? ? ? 180 THR A O 1
+ATOM 809 C CB . THR A 1 104 ? -7.453 28.825 18.969 1.00 44.04 ? ? ? ? ? ? 180 THR A CB 1
+ATOM 810 O OG1 . THR A 1 104 ? -7.483 30.077 18.272 1.00 43.33 ? ? ? ? ? ? 180 THR A OG1 1
+ATOM 811 C CG2 . THR A 1 104 ? -8.808 28.148 18.831 1.00 42.29 ? ? ? ? ? ? 180 THR A CG2 1
+ATOM 812 N N . LYS A 1 105 ? -7.217 27.649 22.429 1.00 47.48 ? ? ? ? ? ? 181 LYS A N 1
+ATOM 813 C CA . LYS A 1 105 ? -7.042 26.416 23.191 1.00 50.48 ? ? ? ? ? ? 181 LYS A CA 1
+ATOM 814 C C . LYS A 1 105 ? -7.622 25.204 22.462 1.00 51.35 ? ? ? ? ? ? 181 LYS A C 1
+ATOM 815 O O . LYS A 1 105 ? -8.697 25.279 21.866 1.00 54.02 ? ? ? ? ? ? 181 LYS A O 1
+ATOM 816 C CB . LYS A 1 105 ? -7.704 26.550 24.565 1.00 50.87 ? ? ? ? ? ? 181 LYS A CB 1
+ATOM 817 C CG . LYS A 1 105 ? -7.103 27.626 25.461 1.00 52.66 ? ? ? ? ? ? 181 LYS A CG 1
+ATOM 818 C CD . LYS A 1 105 ? -5.673 27.300 25.867 1.00 53.35 ? ? ? ? ? ? 181 LYS A CD 1
+ATOM 819 C CE . LYS A 1 105 ? -5.122 28.359 26.815 1.00 54.97 ? ? ? ? ? ? 181 LYS A CE 1
+ATOM 820 N NZ . LYS A 1 105 ? -3.740 28.051 27.284 1.00 51.89 ? ? ? ? ? ? 181 LYS A NZ 1
+ATOM 821 N N . GLY A 1 106 ? -6.899 24.087 22.508 1.00 50.06 ? ? ? ? ? ? 182 GLY A N 1
+ATOM 822 C CA . GLY A 1 106 ? -7.370 22.878 21.857 1.00 47.63 ? ? ? ? ? ? 182 GLY A CA 1
+ATOM 823 C C . GLY A 1 106 ? -6.948 22.752 20.406 1.00 46.33 ? ? ? ? ? ? 182 GLY A C 1
+ATOM 824 O O . GLY A 1 106 ? -6.833 21.643 19.880 1.00 46.26 ? ? ? ? ? ? 182 GLY A O 1
+ATOM 825 N N . SER A 1 107 ? -6.721 23.884 19.750 1.00 43.99 ? ? ? ? ? ? 183 SER A N 1
+ATOM 826 C CA . SER A 1 107 ? -6.307 23.866 18.358 1.00 42.16 ? ? ? ? ? ? 183 SER A CA 1
+ATOM 827 C C . SER A 1 107 ? -4.790 23.843 18.254 1.00 39.55 ? ? ? ? ? ? 183 SER A C 1
+ATOM 828 O O . SER A 1 107 ? -4.094 23.719 19.261 1.00 41.11 ? ? ? ? ? ? 183 SER A O 1
+ATOM 829 C CB . SER A 1 107 ? -6.878 25.076 17.615 1.00 44.69 ? ? ? ? ? ? 183 SER A CB 1
+ATOM 830 O OG . SER A 1 107 ? -8.295 24.999 17.558 1.00 49.15 ? ? ? ? ? ? 183 SER A OG 1
+ATOM 831 N N . TYR A 1 108 ? -4.283 23.973 17.035 1.00 35.65 ? ? ? ? ? ? 184 TYR A N 1
+ATOM 832 C CA . TYR A 1 108 ? -2.848 23.934 16.804 1.00 36.02 ? ? ? ? ? ? 184 TYR A CA 1
+ATOM 833 C C . TYR A 1 108 ? -2.340 25.119 15.997 1.00 35.47 ? ? ? ? ? ? 184 TYR A C 1
+ATOM 834 O O . TYR A 1 108 ? -3.119 25.863 15.394 1.00 34.99 ? ? ? ? ? ? 184 TYR A O 1
+ATOM 835 C CB . TYR A 1 108 ? -2.502 22.630 16.088 1.00 35.07 ? ? ? ? ? ? 184 TYR A CB 1
+ATOM 836 C CG . TYR A 1 108 ? -2.923 21.420 16.882 1.00 40.13 ? ? ? ? ? ? 184 TYR A CG 1
+ATOM 837 C CD1 . TYR A 1 108 ? -2.223 21.040 18.026 1.00 38.63 ? ? ? ? ? ? 184 TYR A CD1 1
+ATOM 838 C CD2 . TYR A 1 108 ? -4.070 20.703 16.541 1.00 40.44 ? ? ? ? ? ? 184 TYR A CD2 1
+ATOM 839 C CE1 . TYR A 1 108 ? -2.654 19.981 18.812 1.00 42.34 ? ? ? ? ? ? 184 TYR A CE1 1
+ATOM 840 C CE2 . TYR A 1 108 ? -4.513 19.639 17.322 1.00 41.28 ? ? ? ? ? ? 184 TYR A CE2 1
+ATOM 841 C CZ . TYR A 1 108 ? -3.802 19.284 18.456 1.00 41.96 ? ? ? ? ? ? 184 TYR A CZ 1
+ATOM 842 O OH . TYR A 1 108 ? -4.240 18.244 19.239 1.00 39.03 ? ? ? ? ? ? 184 TYR A OH 1
+ATOM 843 N N . SER A 1 109 ? -1.020 25.282 16.002 1.00 32.59 ? ? ? ? ? ? 185 SER A N 1
+ATOM 844 C CA . SER A 1 109 ? -0.361 26.348 15.265 1.00 30.43 ? ? ? ? ? ? 185 SER A CA 1
+ATOM 845 C C . SER A 1 109 ? 0.922 25.823 14.641 1.00 30.08 ? ? ? ? ? ? 185 SER A C 1
+ATOM 846 O O . SER A 1 109 ? 1.560 24.904 15.165 1.00 30.57 ? ? ? ? ? ? 185 SER A O 1
+ATOM 847 C CB . SER A 1 109 ? -0.032 27.524 16.193 1.00 32.57 ? ? ? ? ? ? 185 SER A CB 1
+ATOM 848 O OG . SER A 1 109 ? -1.212 28.109 16.714 1.00 30.79 ? ? ? ? ? ? 185 SER A OG 1
+ATOM 849 N N . LEU A 1 110 ? 1.291 26.409 13.512 1.00 28.78 ? ? ? ? ? ? 186 LEU A N 1
+ATOM 850 C CA . LEU A 1 110 ? 2.505 26.027 12.819 1.00 29.75 ? ? ? ? ? ? 186 LEU A CA 1
+ATOM 851 C C . LEU A 1 110 ? 3.498 27.176 12.917 1.00 30.54 ? ? ? ? ? ? 186 LEU A C 1
+ATOM 852 O O . LEU A 1 110 ? 3.136 28.335 12.708 1.00 31.57 ? ? ? ? ? ? 186 LEU A O 1
+ATOM 853 C CB . LEU A 1 110 ? 2.204 25.722 11.347 1.00 30.68 ? ? ? ? ? ? 186 LEU A CB 1
+ATOM 854 C CG . LEU A 1 110 ? 3.403 25.483 10.422 1.00 33.05 ? ? ? ? ? ? 186 LEU A CG 1
+ATOM 855 C CD1 . LEU A 1 110 ? 4.200 24.278 10.889 1.00 29.59 ? ? ? ? ? ? 186 LEU A CD1 1
+ATOM 856 C CD2 . LEU A 1 110 ? 2.910 25.277 8.991 1.00 34.10 ? ? ? ? ? ? 186 LEU A CD2 1
+ATOM 857 N N . SER A 1 111 ? 4.739 26.855 13.264 1.00 28.82 ? ? ? ? ? ? 187 SER A N 1
+ATOM 858 C CA . SER A 1 111 ? 5.791 27.855 13.363 1.00 26.21 ? ? ? ? ? ? 187 SER A CA 1
+ATOM 859 C C . SER A 1 111 ? 6.855 27.479 12.350 1.00 28.42 ? ? ? ? ? ? 187 SER A C 1
+ATOM 860 O O . SER A 1 111 ? 7.332 26.339 12.326 1.00 26.61 ? ? ? ? ? ? 187 SER A O 1
+ATOM 861 C CB . SER A 1 111 ? 6.374 27.895 14.772 1.00 25.28 ? ? ? ? ? ? 187 SER A CB 1
+ATOM 862 O OG . SER A 1 111 ? 5.403 28.370 15.686 1.00 23.67 ? ? ? ? ? ? 187 SER A OG 1
+ATOM 863 N N . VAL A 1 112 ? 7.223 28.448 11.517 1.00 28.78 ? ? ? ? ? ? 188 VAL A N 1
+ATOM 864 C CA . VAL A 1 112 ? 8.190 28.220 10.453 1.00 26.90 ? ? ? ? ? ? 188 VAL A CA 1
+ATOM 865 C C . VAL A 1 112 ? 9.293 29.272 10.417 1.00 27.17 ? ? ? ? ? ? 188 VAL A C 1
+ATOM 866 O O . VAL A 1 112 ? 9.031 30.467 10.539 1.00 27.15 ? ? ? ? ? ? 188 VAL A O 1
+ATOM 867 C CB . VAL A 1 112 ? 7.468 28.224 9.088 1.00 29.40 ? ? ? ? ? ? 188 VAL A CB 1
+ATOM 868 C CG1 . VAL A 1 112 ? 8.397 27.728 8.005 1.00 27.83 ? ? ? ? ? ? 188 VAL A CG1 1
+ATOM 869 C CG2 . VAL A 1 112 ? 6.200 27.373 9.167 1.00 27.32 ? ? ? ? ? ? 188 VAL A CG2 1
+ATOM 870 N N . ARG A 1 113 ? 10.532 28.825 10.257 1.00 27.88 ? ? ? ? ? ? 189 ARG A N 1
+ATOM 871 C CA . ARG A 1 113 ? 11.641 29.757 10.187 1.00 31.21 ? ? ? ? ? ? 189 ARG A CA 1
+ATOM 872 C C . ARG A 1 113 ? 11.640 30.422 8.811 1.00 32.78 ? ? ? ? ? ? 189 ARG A C 1
+ATOM 873 O O . ARG A 1 113 ? 11.501 29.756 7.782 1.00 33.52 ? ? ? ? ? ? 189 ARG A O 1
+ATOM 874 C CB . ARG A 1 113 ? 12.967 29.038 10.445 1.00 31.32 ? ? ? ? ? ? 189 ARG A CB 1
+ATOM 875 C CG . ARG A 1 113 ? 14.156 29.976 10.408 1.00 34.10 ? ? ? ? ? ? 189 ARG A CG 1
+ATOM 876 C CD . ARG A 1 113 ? 15.349 29.402 11.129 1.00 37.67 ? ? ? ? ? ? 189 ARG A CD 1
+ATOM 877 N NE . ARG A 1 113 ? 16.489 30.308 11.070 1.00 34.86 ? ? ? ? ? ? 189 ARG A NE 1
+ATOM 878 C CZ . ARG A 1 113 ? 17.626 30.117 11.726 1.00 39.02 ? ? ? ? ? ? 189 ARG A CZ 1
+ATOM 879 N NH1 . ARG A 1 113 ? 17.776 29.048 12.498 1.00 34.80 ? ? ? ? ? ? 189 ARG A NH1 1
+ATOM 880 N NH2 . ARG A 1 113 ? 18.619 30.987 11.599 1.00 39.24 ? ? ? ? ? ? 189 ARG A NH2 1
+ATOM 881 N N . ASP A 1 114 ? 11.784 31.742 8.801 1.00 34.61 ? ? ? ? ? ? 190 ASP A N 1
+ATOM 882 C CA . ASP A 1 114 ? 11.774 32.505 7.561 1.00 37.59 ? ? ? ? ? ? 190 ASP A CA 1
+ATOM 883 C C . ASP A 1 114 ? 12.947 33.479 7.505 1.00 39.08 ? ? ? ? ? ? 190 ASP A C 1
+ATOM 884 O O . ASP A 1 114 ? 13.735 33.572 8.448 1.00 38.87 ? ? ? ? ? ? 190 ASP A O 1
+ATOM 885 C CB . ASP A 1 114 ? 10.441 33.250 7.456 1.00 40.35 ? ? ? ? ? ? 190 ASP A CB 1
+ATOM 886 C CG . ASP A 1 114 ? 10.327 34.078 6.199 1.00 40.90 ? ? ? ? ? ? 190 ASP A CG 1
+ATOM 887 O OD1 . ASP A 1 114 ? 10.451 33.500 5.095 1.00 39.34 ? ? ? ? ? ? 190 ASP A OD1 1
+ATOM 888 O OD2 . ASP A 1 114 ? 10.102 35.303 6.327 1.00 38.80 ? ? ? ? ? ? 190 ASP A OD2 1
+ATOM 889 N N . TYR A 1 115 ? 13.072 34.192 6.391 1.00 39.96 ? ? ? ? ? ? 191 TYR A N 1
+ATOM 890 C CA . TYR A 1 115 ? 14.148 35.158 6.224 1.00 37.67 ? ? ? ? ? ? 191 TYR A CA 1
+ATOM 891 C C . TYR A 1 115 ? 13.899 36.172 5.117 1.00 37.07 ? ? ? ? ? ? 191 TYR A C 1
+ATOM 892 O O . TYR A 1 115 ? 13.424 35.825 4.042 1.00 36.05 ? ? ? ? ? ? 191 TYR A O 1
+ATOM 893 C CB . TYR A 1 115 ? 15.480 34.440 5.951 1.00 38.35 ? ? ? ? ? ? 191 TYR A CB 1
+ATOM 894 C CG . TYR A 1 115 ? 16.595 35.380 5.523 1.00 39.72 ? ? ? ? ? ? 191 TYR A CG 1
+ATOM 895 C CD1 . TYR A 1 115 ? 16.610 35.944 4.244 1.00 41.35 ? ? ? ? ? ? 191 TYR A CD1 1
+ATOM 896 C CD2 . TYR A 1 115 ? 17.581 35.776 6.423 1.00 38.48 ? ? ? ? ? ? 191 TYR A CD2 1
+ATOM 897 C CE1 . TYR A 1 115 ? 17.568 36.883 3.881 1.00 40.03 ? ? ? ? ? ? 191 TYR A CE1 1
+ATOM 898 C CE2 . TYR A 1 115 ? 18.542 36.714 6.069 1.00 39.63 ? ? ? ? ? ? 191 TYR A CE2 1
+ATOM 899 C CZ . TYR A 1 115 ? 18.527 37.265 4.799 1.00 39.53 ? ? ? ? ? ? 191 TYR A CZ 1
+ATOM 900 O OH . TYR A 1 115 ? 19.455 38.217 4.458 1.00 39.04 ? ? ? ? ? ? 191 TYR A OH 1
+ATOM 901 N N . ASP A 1 116 ? 14.224 37.430 5.400 1.00 36.36 ? ? ? ? ? ? 192 ASP A N 1
+ATOM 902 C CA . ASP A 1 116 ? 14.108 38.509 4.422 1.00 36.35 ? ? ? ? ? ? 192 ASP A CA 1
+ATOM 903 C C . ASP A 1 116 ? 15.211 39.498 4.770 1.00 37.24 ? ? ? ? ? ? 192 ASP A C 1
+ATOM 904 O O . ASP A 1 116 ? 15.595 39.630 5.930 1.00 38.65 ? ? ? ? ? ? 192 ASP A O 1
+ATOM 905 C CB . ASP A 1 116 ? 12.717 39.170 4.453 1.00 36.77 ? ? ? ? ? ? 192 ASP A CB 1
+ATOM 906 C CG . ASP A 1 116 ? 12.421 39.880 5.758 1.00 37.97 ? ? ? ? ? ? 192 ASP A CG 1
+ATOM 907 O OD1 . ASP A 1 116 ? 13.004 40.959 6.007 1.00 35.29 ? ? ? ? ? ? 192 ASP A OD1 1
+ATOM 908 O OD2 . ASP A 1 116 ? 11.602 39.346 6.537 1.00 36.32 ? ? ? ? ? ? 192 ASP A OD2 1
+ATOM 909 N N . PRO A 1 117 ? 15.759 40.190 3.765 1.00 37.65 ? ? ? ? ? ? 193 PRO A N 1
+ATOM 910 C CA . PRO A 1 117 ? 16.831 41.155 4.015 1.00 36.04 ? ? ? ? ? ? 193 PRO A CA 1
+ATOM 911 C C . PRO A 1 117 ? 16.526 42.256 5.035 1.00 35.31 ? ? ? ? ? ? 193 PRO A C 1
+ATOM 912 O O . PRO A 1 117 ? 17.430 42.751 5.705 1.00 34.78 ? ? ? ? ? ? 193 PRO A O 1
+ATOM 913 C CB . PRO A 1 117 ? 17.116 41.700 2.613 1.00 37.72 ? ? ? ? ? ? 193 PRO A CB 1
+ATOM 914 C CG . PRO A 1 117 ? 15.751 41.556 1.925 1.00 38.41 ? ? ? ? ? ? 193 PRO A CG 1
+ATOM 915 C CD . PRO A 1 117 ? 15.443 40.144 2.328 1.00 35.92 ? ? ? ? ? ? 193 PRO A CD 1
+ATOM 916 N N . ARG A 1 118 ? 15.257 42.625 5.165 1.00 35.02 ? ? ? ? ? ? 194 ARG A N 1
+ATOM 917 C CA . ARG A 1 118 ? 14.870 43.688 6.092 1.00 36.77 ? ? ? ? ? ? 194 ARG A CA 1
+ATOM 918 C C . ARG A 1 118 ? 14.901 43.291 7.568 1.00 35.60 ? ? ? ? ? ? 194 ARG A C 1
+ATOM 919 O O . ARG A 1 118 ? 15.468 44.007 8.397 1.00 34.31 ? ? ? ? ? ? 194 ARG A O 1
+ATOM 920 C CB . ARG A 1 118 ? 13.477 44.219 5.732 1.00 38.29 ? ? ? ? ? ? 194 ARG A CB 1
+ATOM 921 C CG . ARG A 1 118 ? 13.015 45.360 6.622 1.00 41.44 ? ? ? ? ? ? 194 ARG A CG 1
+ATOM 922 C CD . ARG A 1 118 ? 11.718 45.982 6.132 1.00 44.79 ? ? ? ? ? ? 194 ARG A CD 1
+ATOM 923 N NE . ARG A 1 118 ? 11.355 47.134 6.955 1.00 48.55 ? ? ? ? ? ? 194 ARG A NE 1
+ATOM 924 C CZ . ARG A 1 118 ? 10.376 47.991 6.675 1.00 46.60 ? ? ? ? ? ? 194 ARG A CZ 1
+ATOM 925 N NH1 . ARG A 1 118 ? 9.638 47.841 5.581 1.00 43.84 ? ? ? ? ? ? 194 ARG A NH1 1
+ATOM 926 N NH2 . ARG A 1 118 ? 10.141 49.007 7.495 1.00 47.58 ? ? ? ? ? ? 194 ARG A NH2 1
+ATOM 927 N N . GLN A 1 119 ? 14.299 42.150 7.891 1.00 34.54 ? ? ? ? ? ? 195 GLN A N 1
+ATOM 928 C CA . GLN A 1 119 ? 14.245 41.671 9.269 1.00 36.07 ? ? ? ? ? ? 195 GLN A CA 1
+ATOM 929 C C . GLN A 1 119 ? 15.242 40.562 9.590 1.00 34.47 ? ? ? ? ? ? 195 GLN A C 1
+ATOM 930 O O . GLN A 1 119 ? 15.520 40.288 10.759 1.00 33.70 ? ? ? ? ? ? 195 GLN A O 1
+ATOM 931 C CB . GLN A 1 119 ? 12.828 41.189 9.591 1.00 40.07 ? ? ? ? ? ? 195 GLN A CB 1
+ATOM 932 C CG . GLN A 1 119 ? 11.775 42.271 9.422 1.00 46.80 ? ? ? ? ? ? 195 GLN A CG 1
+ATOM 933 C CD . GLN A 1 119 ? 10.403 41.840 9.892 1.00 53.51 ? ? ? ? ? ? 195 GLN A CD 1
+ATOM 934 O OE1 . GLN A 1 119 ? 9.435 42.598 9.792 1.00 58.78 ? ? ? ? ? ? 195 GLN A OE1 1
+ATOM 935 N NE2 . GLN A 1 119 ? 10.309 40.622 10.414 1.00 55.40 ? ? ? ? ? ? 195 GLN A NE2 1
+ATOM 936 N N . GLY A 1 120 ? 15.785 39.930 8.556 1.00 33.39 ? ? ? ? ? ? 196 GLY A N 1
+ATOM 937 C CA . GLY A 1 120 ? 16.730 38.852 8.773 1.00 30.80 ? ? ? ? ? ? 196 GLY A CA 1
+ATOM 938 C C . GLY A 1 120 ? 15.982 37.570 9.086 1.00 29.99 ? ? ? ? ? ? 196 GLY A C 1
+ATOM 939 O O . GLY A 1 120 ? 14.869 37.360 8.597 1.00 27.45 ? ? ? ? ? ? 196 GLY A O 1
+ATOM 940 N N . ASP A 1 121 ? 16.583 36.704 9.898 1.00 31.85 ? ? ? ? ? ? 197 ASP A N 1
+ATOM 941 C CA . ASP A 1 121 ? 15.932 35.451 10.263 1.00 29.51 ? ? ? ? ? ? 197 ASP A CA 1
+ATOM 942 C C . ASP A 1 121 ? 14.745 35.758 11.156 1.00 27.75 ? ? ? ? ? ? 197 ASP A C 1
+ATOM 943 O O . ASP A 1 121 ? 14.864 36.533 12.104 1.00 28.15 ? ? ? ? ? ? 197 ASP A O 1
+ATOM 944 C CB . ASP A 1 121 ? 16.890 34.535 11.024 1.00 30.49 ? ? ? ? ? ? 197 ASP A CB 1
+ATOM 945 C CG . ASP A 1 121 ? 18.103 34.171 10.219 1.00 32.78 ? ? ? ? ? ? 197 ASP A CG 1
+ATOM 946 O OD1 . ASP A 1 121 ? 17.926 33.674 9.089 1.00 37.66 ? ? ? ? ? ? 197 ASP A OD1 1
+ATOM 947 O OD2 . ASP A 1 121 ? 19.231 34.373 10.718 1.00 37.87 ? ? ? ? ? ? 197 ASP A OD2 1
+ATOM 948 N N . THR A 1 122 ? 13.601 35.161 10.849 1.00 27.74 ? ? ? ? ? ? 198 THR A N 1
+ATOM 949 C CA . THR A 1 122 ? 12.409 35.361 11.659 1.00 29.38 ? ? ? ? ? ? 198 THR A CA 1
+ATOM 950 C C . THR A 1 122 ? 11.631 34.062 11.726 1.00 28.29 ? ? ? ? ? ? 198 THR A C 1
+ATOM 951 O O . THR A 1 122 ? 11.946 33.090 11.036 1.00 31.97 ? ? ? ? ? ? 198 THR A O 1
+ATOM 952 C CB . THR A 1 122 ? 11.466 36.425 11.067 1.00 30.70 ? ? ? ? ? ? 198 THR A CB 1
+ATOM 953 O OG1 . THR A 1 122 ? 10.897 35.931 9.847 1.00 31.46 ? ? ? ? ? ? 198 THR A OG1 1
+ATOM 954 C CG2 . THR A 1 122 ? 12.226 37.726 10.798 1.00 29.96 ? ? ? ? ? ? 198 THR A CG2 1
+ATOM 955 N N . VAL A 1 123 ? 10.607 34.056 12.564 1.00 27.19 ? ? ? ? ? ? 199 VAL A N 1
+ATOM 956 C CA . VAL A 1 123 ? 9.758 32.894 12.708 1.00 26.67 ? ? ? ? ? ? 199 VAL A CA 1
+ATOM 957 C C . VAL A 1 123 ? 8.329 33.356 12.500 1.00 28.48 ? ? ? ? ? ? 199 VAL A C 1
+ATOM 958 O O . VAL A 1 123 ? 7.847 34.257 13.189 1.00 28.94 ? ? ? ? ? ? 199 VAL A O 1
+ATOM 959 C CB . VAL A 1 123 ? 9.912 32.254 14.104 1.00 26.01 ? ? ? ? ? ? 199 VAL A CB 1
+ATOM 960 C CG1 . VAL A 1 123 ? 8.944 31.100 14.258 1.00 27.50 ? ? ? ? ? ? 199 VAL A CG1 1
+ATOM 961 C CG2 . VAL A 1 123 ? 11.344 31.768 14.289 1.00 26.92 ? ? ? ? ? ? 199 VAL A CG2 1
+ATOM 962 N N . LYS A 1 124 ? 7.667 32.752 11.520 1.00 30.09 ? ? ? ? ? ? 200 LYS A N 1
+ATOM 963 C CA . LYS A 1 124 ? 6.286 33.084 11.208 1.00 29.07 ? ? ? ? ? ? 200 LYS A CA 1
+ATOM 964 C C . LYS A 1 124 ? 5.375 32.019 11.812 1.00 30.03 ? ? ? ? ? ? 200 LYS A C 1
+ATOM 965 O O . LYS A 1 124 ? 5.728 30.837 11.857 1.00 27.25 ? ? ? ? ? ? 200 LYS A O 1
+ATOM 966 C CB . LYS A 1 124 ? 6.085 33.151 9.688 1.00 34.02 ? ? ? ? ? ? 200 LYS A CB 1
+ATOM 967 C CG . LYS A 1 124 ? 6.838 34.284 8.966 1.00 32.88 ? ? ? ? ? ? 200 LYS A CG 1
+ATOM 968 C CD . LYS A 1 124 ? 6.383 35.662 9.431 1.00 35.05 ? ? ? ? ? ? 200 LYS A CD 1
+ATOM 969 C CE . LYS A 1 124 ? 6.901 36.780 8.521 1.00 36.46 ? ? ? ? ? ? 200 LYS A CE 1
+ATOM 970 N NZ . LYS A 1 124 ? 8.386 36.859 8.429 1.00 37.68 ? ? ? ? ? ? 200 LYS A NZ 1
+ATOM 971 N N . HIS A 1 125 ? 4.205 32.445 12.278 1.00 27.77 ? ? ? ? ? ? 201 HIS A N 1
+ATOM 972 C CA . HIS A 1 125 ? 3.246 31.541 12.900 1.00 29.90 ? ? ? ? ? ? 201 HIS A CA 1
+ATOM 973 C C . HIS A 1 125 ? 1.932 31.506 12.122 1.00 33.43 ? ? ? ? ? ? 201 HIS A C 1
+ATOM 974 O O . HIS A 1 125 ? 1.408 32.554 11.740 1.00 34.12 ? ? ? ? ? ? 201 HIS A O 1
+ATOM 975 C CB . HIS A 1 125 ? 2.962 32.002 14.331 1.00 28.13 ? ? ? ? ? ? 201 HIS A CB 1
+ATOM 976 C CG . HIS A 1 125 ? 4.183 32.093 15.195 1.00 29.35 ? ? ? ? ? ? 201 HIS A CG 1
+ATOM 977 N ND1 . HIS A 1 125 ? 4.873 30.983 15.634 1.00 27.37 ? ? ? ? ? ? 201 HIS A ND1 1
+ATOM 978 C CD2 . HIS A 1 125 ? 4.844 33.166 15.691 1.00 29.39 ? ? ? ? ? ? 201 HIS A CD2 1
+ATOM 979 C CE1 . HIS A 1 125 ? 5.904 31.369 16.365 1.00 28.70 ? ? ? ? ? ? 201 HIS A CE1 1
+ATOM 980 N NE2 . HIS A 1 125 ? 5.910 32.689 16.415 1.00 27.43 ? ? ? ? ? ? 201 HIS A NE2 1
+ATOM 981 N N . TYR A 1 126 ? 1.398 30.307 11.899 1.00 33.00 ? ? ? ? ? ? 202 TYR A N 1
+ATOM 982 C CA . TYR A 1 126 ? 0.133 30.160 11.183 1.00 33.65 ? ? ? ? ? ? 202 TYR A CA 1
+ATOM 983 C C . TYR A 1 126 ? -0.868 29.369 12.004 1.00 33.63 ? ? ? ? ? ? 202 TYR A C 1
+ATOM 984 O O . TYR A 1 126 ? -0.533 28.338 12.592 1.00 32.94 ? ? ? ? ? ? 202 TYR A O 1
+ATOM 985 C CB . TYR A 1 126 ? 0.320 29.439 9.846 1.00 34.31 ? ? ? ? ? ? 202 TYR A CB 1
+ATOM 986 C CG . TYR A 1 126 ? 1.267 30.111 8.889 1.00 35.82 ? ? ? ? ? ? 202 TYR A CG 1
+ATOM 987 C CD1 . TYR A 1 126 ? 2.645 30.018 9.062 1.00 36.96 ? ? ? ? ? ? 202 TYR A CD1 1
+ATOM 988 C CD2 . TYR A 1 126 ? 0.785 30.853 7.813 1.00 38.42 ? ? ? ? ? ? 202 TYR A CD2 1
+ATOM 989 C CE1 . TYR A 1 126 ? 3.521 30.644 8.188 1.00 37.52 ? ? ? ? ? ? 202 TYR A CE1 1
+ATOM 990 C CE2 . TYR A 1 126 ? 1.651 31.485 6.932 1.00 40.31 ? ? ? ? ? ? 202 TYR A CE2 1
+ATOM 991 C CZ . TYR A 1 126 ? 3.018 31.376 7.125 1.00 41.17 ? ? ? ? ? ? 202 TYR A CZ 1
+ATOM 992 O OH . TYR A 1 126 ? 3.884 31.989 6.250 1.00 44.01 ? ? ? ? ? ? 202 TYR A OH 1
+ATOM 993 N N . LYS A 1 127 ? -2.104 29.846 12.045 1.00 33.50 ? ? ? ? ? ? 203 LYS A N 1
+ATOM 994 C CA . LYS A 1 127 ? -3.131 29.136 12.785 1.00 36.84 ? ? ? ? ? ? 203 LYS A CA 1
+ATOM 995 C C . LYS A 1 127 ? -3.564 27.926 11.973 1.00 38.49 ? ? ? ? ? ? 203 LYS A C 1
+ATOM 996 O O . LYS A 1 127 ? -3.773 28.022 10.764 1.00 39.04 ? ? ? ? ? ? 203 LYS A O 1
+ATOM 997 C CB . LYS A 1 127 ? -4.348 30.028 13.031 1.00 38.99 ? ? ? ? ? ? 203 LYS A CB 1
+ATOM 998 C CG . LYS A 1 127 ? -4.050 31.284 13.821 1.00 43.25 ? ? ? ? ? ? 203 LYS A CG 1
+ATOM 999 C CD . LYS A 1 127 ? -5.326 32.041 14.169 1.00 48.65 ? ? ? ? ? ? 203 LYS A CD 1
+ATOM 1000 C CE . LYS A 1 127 ? -6.224 31.213 15.080 1.00 50.44 ? ? ? ? ? ? 203 LYS A CE 1
+ATOM 1001 N NZ . LYS A 1 127 ? -5.535 30.840 16.353 1.00 50.87 ? ? ? ? ? ? 203 LYS A NZ 1
+ATOM 1002 N N . ILE A 1 128 ? -3.667 26.781 12.638 1.00 38.60 ? ? ? ? ? ? 204 ILE A N 1
+ATOM 1003 C CA . ILE A 1 128 ? -4.123 25.563 11.988 1.00 41.36 ? ? ? ? ? ? 204 ILE A CA 1
+ATOM 1004 C C . ILE A 1 128 ? -5.515 25.391 12.572 1.00 44.11 ? ? ? ? ? ? 204 ILE A C 1
+ATOM 1005 O O . ILE A 1 128 ? -5.670 25.144 13.764 1.00 45.95 ? ? ? ? ? ? 204 ILE A O 1
+ATOM 1006 C CB . ILE A 1 128 ? -3.247 24.349 12.351 1.00 38.96 ? ? ? ? ? ? 204 ILE A CB 1
+ATOM 1007 C CG1 . ILE A 1 128 ? -1.815 24.569 11.855 1.00 36.65 ? ? ? ? ? ? 204 ILE A CG1 1
+ATOM 1008 C CG2 . ILE A 1 128 ? -3.821 23.094 11.722 1.00 41.66 ? ? ? ? ? ? 204 ILE A CG2 1
+ATOM 1009 C CD1 . ILE A 1 128 ? -0.868 23.433 12.194 1.00 38.39 ? ? ? ? ? ? 204 ILE A CD1 1
+ATOM 1010 N N . ARG A 1 129 ? -6.531 25.553 11.735 1.00 47.12 ? ? ? ? ? ? 205 ARG A N 1
+ATOM 1011 C CA . ARG A 1 129 ? -7.905 25.457 12.199 1.00 49.17 ? ? ? ? ? ? 205 ARG A CA 1
+ATOM 1012 C C . ARG A 1 129 ? -8.403 24.023 12.217 1.00 48.51 ? ? ? ? ? ? 205 ARG A C 1
+ATOM 1013 O O . ARG A 1 129 ? -8.200 23.274 11.260 1.00 46.62 ? ? ? ? ? ? 205 ARG A O 1
+ATOM 1014 C CB . ARG A 1 129 ? -8.796 26.312 11.303 1.00 53.02 ? ? ? ? ? ? 205 ARG A CB 1
+ATOM 1015 C CG . ARG A 1 129 ? -9.856 27.100 12.041 1.00 58.13 ? ? ? ? ? ? 205 ARG A CG 1
+ATOM 1016 C CD . ARG A 1 129 ? -10.393 28.169 11.123 1.00 62.86 ? ? ? ? ? ? 205 ARG A CD 1
+ATOM 1017 N NE . ARG A 1 129 ? -9.287 28.849 10.452 1.00 65.94 ? ? ? ? ? ? 205 ARG A NE 1
+ATOM 1018 C CZ . ARG A 1 129 ? -9.402 29.975 9.757 1.00 66.93 ? ? ? ? ? ? 205 ARG A CZ 1
+ATOM 1019 N NH1 . ARG A 1 129 ? -10.581 30.569 9.637 1.00 66.68 ? ? ? ? ? ? 205 ARG A NH1 1
+ATOM 1020 N NH2 . ARG A 1 129 ? -8.335 30.507 9.177 1.00 65.77 ? ? ? ? ? ? 205 ARG A NH2 1
+ATOM 1021 N N . THR A 1 130 ? -9.050 23.647 13.316 1.00 49.04 ? ? ? ? ? ? 206 THR A N 1
+ATOM 1022 C CA . THR A 1 130 ? -9.595 22.305 13.461 1.00 52.07 ? ? ? ? ? ? 206 THR A CA 1
+ATOM 1023 C C . THR A 1 130 ? -11.055 22.328 13.035 1.00 55.26 ? ? ? ? ? ? 206 THR A C 1
+ATOM 1024 O O . THR A 1 130 ? -11.890 22.962 13.685 1.00 55.29 ? ? ? ? ? ? 206 THR A O 1
+ATOM 1025 C CB . THR A 1 130 ? -9.505 21.804 14.921 1.00 50.70 ? ? ? ? ? ? 206 THR A CB 1
+ATOM 1026 O OG1 . THR A 1 130 ? -8.132 21.738 15.322 1.00 53.22 ? ? ? ? ? ? 206 THR A OG1 1
+ATOM 1027 C CG2 . THR A 1 130 ? -10.126 20.417 15.052 1.00 49.00 ? ? ? ? ? ? 206 THR A CG2 1
+ATOM 1028 N N . LEU A 1 131 ? -11.351 21.640 11.935 1.00 57.57 ? ? ? ? ? ? 207 LEU A N 1
+ATOM 1029 C CA . LEU A 1 131 ? -12.708 21.575 11.405 1.00 60.16 ? ? ? ? ? ? 207 LEU A CA 1
+ATOM 1030 C C . LEU A 1 131 ? -13.527 20.537 12.134 1.00 60.90 ? ? ? ? ? ? 207 LEU A C 1
+ATOM 1031 O O . LEU A 1 131 ? -13.081 19.404 12.324 1.00 60.55 ? ? ? ? ? ? 207 LEU A O 1
+ATOM 1032 C CB . LEU A 1 131 ? -12.707 21.205 9.917 1.00 61.39 ? ? ? ? ? ? 207 LEU A CB 1
+ATOM 1033 C CG . LEU A 1 131 ? -12.009 22.117 8.913 1.00 62.55 ? ? ? ? ? ? 207 LEU A CG 1
+ATOM 1034 C CD1 . LEU A 1 131 ? -12.615 23.511 8.997 1.00 63.41 ? ? ? ? ? ? 207 LEU A CD1 1
+ATOM 1035 C CD2 . LEU A 1 131 ? -10.518 22.145 9.203 1.00 63.18 ? ? ? ? ? ? 207 LEU A CD2 1
+ATOM 1036 N N . ASP A 1 132 ? -14.725 20.923 12.553 1.00 62.47 ? ? ? ? ? ? 208 ASP A N 1
+ATOM 1037 C CA . ASP A 1 132 ? -15.602 19.975 13.212 1.00 64.08 ? ? ? ? ? ? 208 ASP A CA 1
+ATOM 1038 C C . ASP A 1 132 ? -15.853 18.929 12.132 1.00 62.20 ? ? ? ? ? ? 208 ASP A C 1
+ATOM 1039 O O . ASP A 1 132 ? -15.928 19.264 10.948 1.00 62.58 ? ? ? ? ? ? 208 ASP A O 1
+ATOM 1040 C CB . ASP A 1 132 ? -16.901 20.666 13.643 1.00 67.26 ? ? ? ? ? ? 208 ASP A CB 1
+ATOM 1041 C CG . ASP A 1 132 ? -17.546 21.453 12.519 1.00 69.12 ? ? ? ? ? ? 208 ASP A CG 1
+ATOM 1042 O OD1 . ASP A 1 132 ? -17.975 20.832 11.524 1.00 71.09 ? ? ? ? ? ? 208 ASP A OD1 1
+ATOM 1043 O OD2 . ASP A 1 132 ? -17.616 22.697 12.630 1.00 70.02 ? ? ? ? ? ? 208 ASP A OD2 1
+ATOM 1044 N N . ASN A 1 133 ? -15.950 17.667 12.532 1.00 60.49 ? ? ? ? ? ? 209 ASN A N 1
+ATOM 1045 C CA . ASN A 1 133 ? -16.161 16.571 11.589 1.00 59.46 ? ? ? ? ? ? 209 ASN A CA 1
+ATOM 1046 C C . ASN A 1 133 ? -14.867 16.249 10.842 1.00 59.03 ? ? ? ? ? ? 209 ASN A C 1
+ATOM 1047 O O . ASN A 1 133 ? -14.889 15.858 9.671 1.00 58.14 ? ? ? ? ? ? 209 ASN A O 1
+ATOM 1048 C CB . ASN A 1 133 ? -17.266 16.910 10.581 1.00 59.69 ? ? ? ? ? ? 209 ASN A CB 1
+ATOM 1049 C CG . ASN A 1 133 ? -18.611 17.136 11.243 1.00 59.65 ? ? ? ? ? ? 209 ASN A CG 1
+ATOM 1050 O OD1 . ASN A 1 133 ? -19.094 16.290 11.997 1.00 60.68 ? ? ? ? ? ? 209 ASN A OD1 1
+ATOM 1051 N ND2 . ASN A 1 133 ? -19.230 18.277 10.955 1.00 58.74 ? ? ? ? ? ? 209 ASN A ND2 1
+ATOM 1052 N N . GLY A 1 134 ? -13.743 16.424 11.533 1.00 58.21 ? ? ? ? ? ? 210 GLY A N 1
+ATOM 1053 C CA . GLY A 1 134 ? -12.445 16.133 10.950 1.00 56.12 ? ? ? ? ? ? 210 GLY A CA 1
+ATOM 1054 C C . GLY A 1 134 ? -11.934 17.126 9.923 1.00 55.04 ? ? ? ? ? ? 210 GLY A C 1
+ATOM 1055 O O . GLY A 1 134 ? -12.710 17.705 9.156 1.00 53.45 ? ? ? ? ? ? 210 GLY A O 1
+ATOM 1056 N N . GLY A 1 135 ? -10.615 17.317 9.910 1.00 52.70 ? ? ? ? ? ? 211 GLY A N 1
+ATOM 1057 C CA . GLY A 1 135 ? -10.005 18.234 8.964 1.00 51.64 ? ? ? ? ? ? 211 GLY A CA 1
+ATOM 1058 C C . GLY A 1 135 ? -9.080 19.262 9.590 1.00 49.38 ? ? ? ? ? ? 211 GLY A C 1
+ATOM 1059 O O . GLY A 1 135 ? -9.305 19.720 10.708 1.00 49.61 ? ? ? ? ? ? 211 GLY A O 1
+ATOM 1060 N N . PHE A 1 136 ? -8.038 19.630 8.854 1.00 47.21 ? ? ? ? ? ? 212 PHE A N 1
+ATOM 1061 C CA . PHE A 1 136 ? -7.064 20.611 9.316 1.00 46.41 ? ? ? ? ? ? 212 PHE A CA 1
+ATOM 1062 C C . PHE A 1 136 ? -6.623 21.477 8.150 1.00 46.81 ? ? ? ? ? ? 212 PHE A C 1
+ATOM 1063 O O . PHE A 1 136 ? -6.434 20.983 7.038 1.00 46.39 ? ? ? ? ? ? 212 PHE A O 1
+ATOM 1064 C CB . PHE A 1 136 ? -5.836 19.908 9.894 1.00 45.52 ? ? ? ? ? ? 212 PHE A CB 1
+ATOM 1065 C CG . PHE A 1 136 ? -6.109 19.133 11.147 1.00 43.30 ? ? ? ? ? ? 212 PHE A CG 1
+ATOM 1066 C CD1 . PHE A 1 136 ? -6.431 19.790 12.331 1.00 42.11 ? ? ? ? ? ? 212 PHE A CD1 1
+ATOM 1067 C CD2 . PHE A 1 136 ? -6.038 17.746 11.149 1.00 42.44 ? ? ? ? ? ? 212 PHE A CD2 1
+ATOM 1068 C CE1 . PHE A 1 136 ? -6.676 19.077 13.501 1.00 38.18 ? ? ? ? ? ? 212 PHE A CE1 1
+ATOM 1069 C CE2 . PHE A 1 136 ? -6.283 17.025 12.313 1.00 40.58 ? ? ? ? ? ? 212 PHE A CE2 1
+ATOM 1070 C CZ . PHE A 1 136 ? -6.602 17.693 13.492 1.00 40.29 ? ? ? ? ? ? 212 PHE A CZ 1
+ATOM 1071 N N . TYR A 1 137 ? -6.457 22.771 8.393 1.00 48.06 ? ? ? ? ? ? 213 TYR A N 1
+ATOM 1072 C CA . TYR A 1 137 ? -6.010 23.646 7.325 1.00 49.08 ? ? ? ? ? ? 213 TYR A CA 1
+ATOM 1073 C C . TYR A 1 137 ? -5.545 25.005 7.803 1.00 48.72 ? ? ? ? ? ? 213 TYR A C 1
+ATOM 1074 O O . TYR A 1 137 ? -5.969 25.507 8.842 1.00 47.63 ? ? ? ? ? ? 213 TYR A O 1
+ATOM 1075 C CB . TYR A 1 137 ? -7.120 23.876 6.299 1.00 51.11 ? ? ? ? ? ? 213 TYR A CB 1
+ATOM 1076 C CG . TYR A 1 137 ? -8.189 24.836 6.769 1.00 52.15 ? ? ? ? ? ? 213 TYR A CG 1
+ATOM 1077 C CD1 . TYR A 1 137 ? -9.115 24.465 7.735 1.00 52.07 ? ? ? ? ? ? 213 TYR A CD1 1
+ATOM 1078 C CD2 . TYR A 1 137 ? -8.248 26.134 6.269 1.00 54.02 ? ? ? ? ? ? 213 TYR A CD2 1
+ATOM 1079 C CE1 . TYR A 1 137 ? -10.077 25.362 8.191 1.00 53.22 ? ? ? ? ? ? 213 TYR A CE1 1
+ATOM 1080 C CE2 . TYR A 1 137 ? -9.203 27.040 6.716 1.00 54.20 ? ? ? ? ? ? 213 TYR A CE2 1
+ATOM 1081 C CZ . TYR A 1 137 ? -10.116 26.647 7.677 1.00 54.91 ? ? ? ? ? ? 213 TYR A CZ 1
+ATOM 1082 O OH . TYR A 1 137 ? -11.068 27.539 8.118 1.00 54.53 ? ? ? ? ? ? 213 TYR A OH 1
+ATOM 1083 N N . ILE A 1 138 ? -4.663 25.593 7.012 1.00 50.79 ? ? ? ? ? ? 214 ILE A N 1
+ATOM 1084 C CA . ILE A 1 138 ? -4.153 26.920 7.275 1.00 54.06 ? ? ? ? ? ? 214 ILE A CA 1
+ATOM 1085 C C . ILE A 1 138 ? -4.854 27.742 6.200 1.00 57.06 ? ? ? ? ? ? 214 ILE A C 1
+ATOM 1086 O O . ILE A 1 138 ? -5.220 28.894 6.418 1.00 57.10 ? ? ? ? ? ? 214 ILE A O 1
+ATOM 1087 C CB . ILE A 1 138 ? -2.621 26.974 7.092 1.00 53.19 ? ? ? ? ? ? 214 ILE A CB 1
+ATOM 1088 C CG1 . ILE A 1 138 ? -1.956 26.029 8.100 1.00 53.14 ? ? ? ? ? ? 214 ILE A CG1 1
+ATOM 1089 C CG2 . ILE A 1 138 ? -2.116 28.399 7.279 1.00 54.11 ? ? ? ? ? ? 214 ILE A CG2 1
+ATOM 1090 C CD1 . ILE A 1 138 ? -0.449 25.967 7.999 1.00 51.61 ? ? ? ? ? ? 214 ILE A CD1 1
+ATOM 1091 N N . SER A 1 139 ? -5.066 27.098 5.050 1.00 59.99 ? ? ? ? ? ? 215 SER A N 1
+ATOM 1092 C CA . SER A 1 139 ? -5.723 27.689 3.884 1.00 62.59 ? ? ? ? ? ? 215 SER A CA 1
+ATOM 1093 C C . SER A 1 139 ? -7.022 26.919 3.627 1.00 63.58 ? ? ? ? ? ? 215 SER A C 1
+ATOM 1094 O O . SER A 1 139 ? -6.992 25.698 3.467 1.00 63.23 ? ? ? ? ? ? 215 SER A O 1
+ATOM 1095 C CB . SER A 1 139 ? -4.828 27.535 2.649 1.00 63.38 ? ? ? ? ? ? 215 SER A CB 1
+ATOM 1096 O OG . SER A 1 139 ? -3.487 27.904 2.922 1.00 65.21 ? ? ? ? ? ? 215 SER A OG 1
+ATOM 1097 N N . PRO A 1 140 ? -8.177 27.608 3.582 1.00 64.89 ? ? ? ? ? ? 216 PRO A N 1
+ATOM 1098 C CA . PRO A 1 140 ? -9.408 26.852 3.331 1.00 65.58 ? ? ? ? ? ? 216 PRO A CA 1
+ATOM 1099 C C . PRO A 1 140 ? -9.314 26.123 1.992 1.00 65.22 ? ? ? ? ? ? 216 PRO A C 1
+ATOM 1100 O O . PRO A 1 140 ? -10.178 25.325 1.633 1.00 66.63 ? ? ? ? ? ? 216 PRO A O 1
+ATOM 1101 C CB . PRO A 1 140 ? -10.481 27.940 3.351 1.00 65.32 ? ? ? ? ? ? 216 PRO A CB 1
+ATOM 1102 C CG . PRO A 1 140 ? -9.713 29.155 2.847 1.00 66.01 ? ? ? ? ? ? 216 PRO A CG 1
+ATOM 1103 C CD . PRO A 1 140 ? -8.492 29.038 3.733 1.00 65.01 ? ? ? ? ? ? 216 PRO A CD 1
+ATOM 1104 N N . ARG A 1 141 ? -8.235 26.409 1.271 1.00 64.85 ? ? ? ? ? ? 217 ARG A N 1
+ATOM 1105 C CA . ARG A 1 141 ? -7.958 25.811 -0.026 1.00 64.16 ? ? ? ? ? ? 217 ARG A CA 1
+ATOM 1106 C C . ARG A 1 141 ? -7.347 24.423 0.127 1.00 63.10 ? ? ? ? ? ? 217 ARG A C 1
+ATOM 1107 O O . ARG A 1 141 ? -7.889 23.437 -0.375 1.00 63.70 ? ? ? ? ? ? 217 ARG A O 1
+ATOM 1108 C CB . ARG A 1 141 ? -6.997 26.711 -0.797 1.00 65.52 ? ? ? ? ? ? 217 ARG A CB 1
+ATOM 1109 C CG . ARG A 1 141 ? -6.417 26.109 -2.062 1.00 67.58 ? ? ? ? ? ? 217 ARG A CG 1
+ATOM 1110 C CD . ARG A 1 141 ? -5.444 27.097 -2.672 1.00 70.20 ? ? ? ? ? ? 217 ARG A CD 1
+ATOM 1111 N NE . ARG A 1 141 ? -4.365 27.430 -1.743 1.00 72.36 ? ? ? ? ? ? 217 ARG A NE 1
+ATOM 1112 C CZ . ARG A 1 141 ? -3.512 28.435 -1.915 1.00 73.05 ? ? ? ? ? ? 217 ARG A CZ 1
+ATOM 1113 N NH1 . ARG A 1 141 ? -3.609 29.215 -2.983 1.00 73.93 ? ? ? ? ? ? 217 ARG A NH1 1
+ATOM 1114 N NH2 . ARG A 1 141 ? -2.558 28.661 -1.021 1.00 73.75 ? ? ? ? ? ? 217 ARG A NH2 1
+ATOM 1115 N N . SER A 1 142 ? -6.214 24.358 0.821 1.00 60.55 ? ? ? ? ? ? 218 SER A N 1
+ATOM 1116 C CA . SER A 1 142 ? -5.509 23.100 1.038 1.00 58.19 ? ? ? ? ? ? 218 SER A CA 1
+ATOM 1117 C C . SER A 1 142 ? -5.877 22.452 2.371 1.00 56.52 ? ? ? ? ? ? 218 SER A C 1
+ATOM 1118 O O . SER A 1 142 ? -5.163 22.611 3.360 1.00 56.19 ? ? ? ? ? ? 218 SER A O 1
+ATOM 1119 C CB . SER A 1 142 ? -3.996 23.338 0.989 1.00 59.02 ? ? ? ? ? ? 218 SER A CB 1
+ATOM 1120 O OG . SER A 1 142 ? -3.600 23.900 -0.252 1.00 60.63 ? ? ? ? ? ? 218 SER A OG 1
+ATOM 1121 N N . THR A 1 143 ? -6.986 21.720 2.396 1.00 54.12 ? ? ? ? ? ? 219 THR A N 1
+ATOM 1122 C CA . THR A 1 143 ? -7.421 21.056 3.621 1.00 53.36 ? ? ? ? ? ? 219 THR A CA 1
+ATOM 1123 C C . THR A 1 143 ? -6.836 19.648 3.704 1.00 51.74 ? ? ? ? ? ? 219 THR A C 1
+ATOM 1124 O O . THR A 1 143 ? -6.516 19.037 2.682 1.00 50.99 ? ? ? ? ? ? 219 THR A O 1
+ATOM 1125 C CB . THR A 1 143 ? -8.960 20.981 3.699 1.00 54.69 ? ? ? ? ? ? 219 THR A CB 1
+ATOM 1126 O OG1 . THR A 1 143 ? -9.500 22.309 3.688 1.00 56.04 ? ? ? ? ? ? 219 THR A OG1 1
+ATOM 1127 C CG2 . THR A 1 143 ? -9.399 20.275 4.976 1.00 54.89 ? ? ? ? ? ? 219 THR A CG2 1
+ATOM 1128 N N . PHE A 1 144 ? -6.702 19.139 4.926 1.00 49.35 ? ? ? ? ? ? 220 PHE A N 1
+ATOM 1129 C CA . PHE A 1 144 ? -6.128 17.816 5.147 1.00 47.85 ? ? ? ? ? ? 220 PHE A CA 1
+ATOM 1130 C C . PHE A 1 144 ? -6.885 17.040 6.216 1.00 44.57 ? ? ? ? ? ? 220 PHE A C 1
+ATOM 1131 O O . PHE A 1 144 ? -7.535 17.628 7.080 1.00 44.38 ? ? ? ? ? ? 220 PHE A O 1
+ATOM 1132 C CB . PHE A 1 144 ? -4.674 17.970 5.577 1.00 50.37 ? ? ? ? ? ? 220 PHE A CB 1
+ATOM 1133 C CG . PHE A 1 144 ? -3.882 18.867 4.682 1.00 52.72 ? ? ? ? ? ? 220 PHE A CG 1
+ATOM 1134 C CD1 . PHE A 1 144 ? -3.574 18.482 3.381 1.00 52.84 ? ? ? ? ? ? 220 PHE A CD1 1
+ATOM 1135 C CD2 . PHE A 1 144 ? -3.478 20.119 5.127 1.00 54.17 ? ? ? ? ? ? 220 PHE A CD2 1
+ATOM 1136 C CE1 . PHE A 1 144 ? -2.875 19.336 2.537 1.00 54.98 ? ? ? ? ? ? 220 PHE A CE1 1
+ATOM 1137 C CE2 . PHE A 1 144 ? -2.779 20.978 4.292 1.00 55.60 ? ? ? ? ? ? 220 PHE A CE2 1
+ATOM 1138 C CZ . PHE A 1 144 ? -2.478 20.587 2.998 1.00 54.40 ? ? ? ? ? ? 220 PHE A CZ 1
+ATOM 1139 N N . SER A 1 145 ? -6.786 15.718 6.168 1.00 40.55 ? ? ? ? ? ? 221 SER A N 1
+ATOM 1140 C CA . SER A 1 145 ? -7.474 14.896 7.150 1.00 39.31 ? ? ? ? ? ? 221 SER A CA 1
+ATOM 1141 C C . SER A 1 145 ? -6.658 14.767 8.432 1.00 37.09 ? ? ? ? ? ? 221 SER A C 1
+ATOM 1142 O O . SER A 1 145 ? -7.221 14.574 9.509 1.00 37.26 ? ? ? ? ? ? 221 SER A O 1
+ATOM 1143 C CB . SER A 1 145 ? -7.780 13.507 6.576 1.00 37.70 ? ? ? ? ? ? 221 SER A CB 1
+ATOM 1144 O OG . SER A 1 145 ? -6.595 12.817 6.228 1.00 36.97 ? ? ? ? ? ? 221 SER A OG 1
+ATOM 1145 N N . THR A 1 146 ? -5.337 14.883 8.321 1.00 36.62 ? ? ? ? ? ? 222 THR A N 1
+ATOM 1146 C CA . THR A 1 146 ? -4.474 14.777 9.497 1.00 37.16 ? ? ? ? ? ? 222 THR A CA 1
+ATOM 1147 C C . THR A 1 146 ? -3.317 15.771 9.456 1.00 36.26 ? ? ? ? ? ? 222 THR A C 1
+ATOM 1148 O O . THR A 1 146 ? -2.908 16.233 8.387 1.00 36.61 ? ? ? ? ? ? 222 THR A O 1
+ATOM 1149 C CB . THR A 1 146 ? -3.860 13.381 9.621 1.00 36.49 ? ? ? ? ? ? 222 THR A CB 1
+ATOM 1150 O OG1 . THR A 1 146 ? -2.866 13.212 8.603 1.00 41.53 ? ? ? ? ? ? 222 THR A OG1 1
+ATOM 1151 C CG2 . THR A 1 146 ? -4.933 12.316 9.455 1.00 39.17 ? ? ? ? ? ? 222 THR A CG2 1
+ATOM 1152 N N . LEU A 1 147 ? -2.786 16.092 10.630 1.00 34.37 ? ? ? ? ? ? 223 LEU A N 1
+ATOM 1153 C CA . LEU A 1 147 ? -1.671 17.022 10.719 1.00 33.04 ? ? ? ? ? ? 223 LEU A CA 1
+ATOM 1154 C C . LEU A 1 147 ? -0.485 16.507 9.905 1.00 31.98 ? ? ? ? ? ? 223 LEU A C 1
+ATOM 1155 O O . LEU A 1 147 ? 0.195 17.286 9.233 1.00 30.82 ? ? ? ? ? ? 223 LEU A O 1
+ATOM 1156 C CB . LEU A 1 147 ? -1.264 17.224 12.183 1.00 31.65 ? ? ? ? ? ? 223 LEU A CB 1
+ATOM 1157 C CG . LEU A 1 147 ? -2.285 17.933 13.083 1.00 34.62 ? ? ? ? ? ? 223 LEU A CG 1
+ATOM 1158 C CD1 . LEU A 1 147 ? -1.798 17.921 14.519 1.00 33.35 ? ? ? ? ? ? 223 LEU A CD1 1
+ATOM 1159 C CD2 . LEU A 1 147 ? -2.498 19.364 12.605 1.00 30.59 ? ? ? ? ? ? 223 LEU A CD2 1
+ATOM 1160 N N . GLN A 1 148 ? -0.249 15.196 9.952 1.00 32.02 ? ? ? ? ? ? 224 GLN A N 1
+ATOM 1161 C CA . GLN A 1 148 ? 0.861 14.603 9.210 1.00 35.23 ? ? ? ? ? ? 224 GLN A CA 1
+ATOM 1162 C C . GLN A 1 148 ? 0.765 14.927 7.720 1.00 36.35 ? ? ? ? ? ? 224 GLN A C 1
+ATOM 1163 O O . GLN A 1 148 ? 1.764 15.259 7.079 1.00 36.07 ? ? ? ? ? ? 224 GLN A O 1
+ATOM 1164 C CB . GLN A 1 148 ? 0.893 13.082 9.400 1.00 36.79 ? ? ? ? ? ? 224 GLN A CB 1
+ATOM 1165 C CG . GLN A 1 148 ? 2.048 12.399 8.662 1.00 37.91 ? ? ? ? ? ? 224 GLN A CG 1
+ATOM 1166 C CD . GLN A 1 148 ? 3.419 12.802 9.194 1.00 38.90 ? ? ? ? ? ? 224 GLN A CD 1
+ATOM 1167 O OE1 . GLN A 1 148 ? 3.757 12.524 10.345 1.00 36.82 ? ? ? ? ? ? 224 GLN A OE1 1
+ATOM 1168 N NE2 . GLN A 1 148 ? 4.213 13.459 8.356 1.00 33.61 ? ? ? ? ? ? 224 GLN A NE2 1
+ATOM 1169 N N . GLU A 1 149 ? -0.440 14.830 7.170 1.00 37.59 ? ? ? ? ? ? 225 GLU A N 1
+ATOM 1170 C CA . GLU A 1 149 ? -0.642 15.125 5.760 1.00 40.60 ? ? ? ? ? ? 225 GLU A CA 1
+ATOM 1171 C C . GLU A 1 149 ? -0.435 16.607 5.506 1.00 40.15 ? ? ? ? ? ? 225 GLU A C 1
+ATOM 1172 O O . GLU A 1 149 ? 0.052 17.005 4.445 1.00 39.95 ? ? ? ? ? ? 225 GLU A O 1
+ATOM 1173 C CB . GLU A 1 149 ? -2.044 14.711 5.332 1.00 43.22 ? ? ? ? ? ? 225 GLU A CB 1
+ATOM 1174 C CG . GLU A 1 149 ? -2.264 13.218 5.401 1.00 48.37 ? ? ? ? ? ? 225 GLU A CG 1
+ATOM 1175 C CD . GLU A 1 149 ? -3.676 12.830 5.048 1.00 51.20 ? ? ? ? ? ? 225 GLU A CD 1
+ATOM 1176 O OE1 . GLU A 1 149 ? -4.140 13.212 3.953 1.00 53.95 ? ? ? ? ? ? 225 GLU A OE1 1
+ATOM 1177 O OE2 . GLU A 1 149 ? -4.318 12.137 5.863 1.00 56.29 ? ? ? ? ? ? 225 GLU A OE2 1
+ATOM 1178 N N . LEU A 1 150 ? -0.809 17.419 6.489 1.00 39.35 ? ? ? ? ? ? 226 LEU A N 1
+ATOM 1179 C CA . LEU A 1 150 ? -0.646 18.861 6.383 1.00 39.28 ? ? ? ? ? ? 226 LEU A CA 1
+ATOM 1180 C C . LEU A 1 150 ? 0.844 19.126 6.232 1.00 37.48 ? ? ? ? ? ? 226 LEU A C 1
+ATOM 1181 O O . LEU A 1 150 ? 1.266 19.904 5.373 1.00 39.76 ? ? ? ? ? ? 226 LEU A O 1
+ATOM 1182 C CB . LEU A 1 150 ? -1.196 19.546 7.641 1.00 38.94 ? ? ? ? ? ? 226 LEU A CB 1
+ATOM 1183 C CG . LEU A 1 150 ? -1.169 21.077 7.722 1.00 43.26 ? ? ? ? ? ? 226 LEU A CG 1
+ATOM 1184 C CD1 . LEU A 1 150 ? -1.975 21.528 8.927 1.00 43.10 ? ? ? ? ? ? 226 LEU A CD1 1
+ATOM 1185 C CD2 . LEU A 1 150 ? 0.266 21.585 7.816 1.00 42.59 ? ? ? ? ? ? 226 LEU A CD2 1
+ATOM 1186 N N . VAL A 1 151 ? 1.637 18.457 7.063 1.00 37.35 ? ? ? ? ? ? 227 VAL A N 1
+ATOM 1187 C CA . VAL A 1 151 ? 3.083 18.606 7.031 1.00 37.21 ? ? ? ? ? ? 227 VAL A CA 1
+ATOM 1188 C C . VAL A 1 151 ? 3.655 18.131 5.699 1.00 40.80 ? ? ? ? ? ? 227 VAL A C 1
+ATOM 1189 O O . VAL A 1 151 ? 4.377 18.872 5.033 1.00 41.93 ? ? ? ? ? ? 227 VAL A O 1
+ATOM 1190 C CB . VAL A 1 151 ? 3.747 17.816 8.172 1.00 35.83 ? ? ? ? ? ? 227 VAL A CB 1
+ATOM 1191 C CG1 . VAL A 1 151 ? 5.259 17.922 8.067 1.00 34.12 ? ? ? ? ? ? 227 VAL A CG1 1
+ATOM 1192 C CG2 . VAL A 1 151 ? 3.272 18.357 9.520 1.00 39.16 ? ? ? ? ? ? 227 VAL A CG2 1
+ATOM 1193 N N . ASP A 1 152 ? 3.328 16.900 5.309 1.00 43.66 ? ? ? ? ? ? 228 ASP A N 1
+ATOM 1194 C CA . ASP A 1 152 ? 3.827 16.350 4.051 1.00 46.53 ? ? ? ? ? ? 228 ASP A CA 1
+ATOM 1195 C C . ASP A 1 152 ? 3.553 17.272 2.868 1.00 47.92 ? ? ? ? ? ? 228 ASP A C 1
+ATOM 1196 O O . ASP A 1 152 ? 4.398 17.419 1.986 1.00 48.00 ? ? ? ? ? ? 228 ASP A O 1
+ATOM 1197 C CB . ASP A 1 152 ? 3.221 14.968 3.779 1.00 47.31 ? ? ? ? ? ? 228 ASP A CB 1
+ATOM 1198 C CG . ASP A 1 152 ? 3.636 13.932 4.813 1.00 46.38 ? ? ? ? ? ? 228 ASP A CG 1
+ATOM 1199 O OD1 . ASP A 1 152 ? 4.853 13.785 5.057 1.00 46.27 ? ? ? ? ? ? 228 ASP A OD1 1
+ATOM 1200 O OD2 . ASP A 1 152 ? 2.749 13.255 5.369 1.00 48.25 ? ? ? ? ? ? 228 ASP A OD2 1
+ATOM 1201 N N . HIS A 1 153 ? 2.377 17.894 2.847 1.00 50.25 ? ? ? ? ? ? 229 HIS A N 1
+ATOM 1202 C CA . HIS A 1 153 ? 2.040 18.799 1.758 1.00 51.55 ? ? ? ? ? ? 229 HIS A CA 1
+ATOM 1203 C C . HIS A 1 153 ? 2.987 19.990 1.747 1.00 52.52 ? ? ? ? ? ? 229 HIS A C 1
+ATOM 1204 O O . HIS A 1 153 ? 3.818 20.122 0.849 1.00 52.51 ? ? ? ? ? ? 229 HIS A O 1
+ATOM 1205 C CB . HIS A 1 153 ? 0.602 19.308 1.883 1.00 53.63 ? ? ? ? ? ? 229 HIS A CB 1
+ATOM 1206 C CG . HIS A 1 153 ? 0.222 20.302 0.826 1.00 58.25 ? ? ? ? ? ? 229 HIS A CG 1
+ATOM 1207 N ND1 . HIS A 1 153 ? -1.016 20.904 0.778 1.00 60.11 ? ? ? ? ? ? 229 HIS A ND1 1
+ATOM 1208 C CD2 . HIS A 1 153 ? 0.924 20.809 -0.217 1.00 59.50 ? ? ? ? ? ? 229 HIS A CD2 1
+ATOM 1209 C CE1 . HIS A 1 153 ? -1.062 21.738 -0.244 1.00 59.43 ? ? ? ? ? ? 229 HIS A CE1 1
+ATOM 1210 N NE2 . HIS A 1 153 ? 0.102 21.700 -0.865 1.00 60.77 ? ? ? ? ? ? 229 HIS A NE2 1
+ATOM 1211 N N . TYR A 1 154 ? 2.853 20.857 2.747 1.00 51.82 ? ? ? ? ? ? 230 TYR A N 1
+ATOM 1212 C CA . TYR A 1 154 ? 3.691 22.046 2.852 1.00 51.07 ? ? ? ? ? ? 230 TYR A CA 1
+ATOM 1213 C C . TYR A 1 154 ? 5.169 21.693 2.898 1.00 51.47 ? ? ? ? ? ? 230 TYR A C 1
+ATOM 1214 O O . TYR A 1 154 ? 6.034 22.569 2.828 1.00 52.06 ? ? ? ? ? ? 230 TYR A O 1
+ATOM 1215 C CB . TYR A 1 154 ? 3.297 22.853 4.089 1.00 47.64 ? ? ? ? ? ? 230 TYR A CB 1
+ATOM 1216 C CG . TYR A 1 154 ? 1.924 23.468 3.980 1.00 44.91 ? ? ? ? ? ? 230 TYR A CG 1
+ATOM 1217 C CD1 . TYR A 1 154 ? 1.669 24.490 3.066 1.00 44.77 ? ? ? ? ? ? 230 TYR A CD1 1
+ATOM 1218 C CD2 . TYR A 1 154 ? 0.874 23.022 4.779 1.00 43.53 ? ? ? ? ? ? 230 TYR A CD2 1
+ATOM 1219 C CE1 . TYR A 1 154 ? 0.404 25.053 2.953 1.00 44.08 ? ? ? ? ? ? 230 TYR A CE1 1
+ATOM 1220 C CE2 . TYR A 1 154 ? -0.392 23.575 4.675 1.00 43.78 ? ? ? ? ? ? 230 TYR A CE2 1
+ATOM 1221 C CZ . TYR A 1 154 ? -0.620 24.592 3.760 1.00 45.11 ? ? ? ? ? ? 230 TYR A CZ 1
+ATOM 1222 O OH . TYR A 1 154 ? -1.870 25.154 3.662 1.00 46.09 ? ? ? ? ? ? 230 TYR A OH 1
+ATOM 1223 N N . LYS A 1 155 ? 5.451 20.402 3.014 1.00 52.47 ? ? ? ? ? ? 231 LYS A N 1
+ATOM 1224 C CA . LYS A 1 155 ? 6.821 19.925 3.049 1.00 53.67 ? ? ? ? ? ? 231 LYS A CA 1
+ATOM 1225 C C . LYS A 1 155 ? 7.252 19.813 1.585 1.00 56.46 ? ? ? ? ? ? 231 LYS A C 1
+ATOM 1226 O O . LYS A 1 155 ? 8.430 19.643 1.277 1.00 56.59 ? ? ? ? ? ? 231 LYS A O 1
+ATOM 1227 C CB . LYS A 1 155 ? 6.866 18.571 3.760 1.00 53.41 ? ? ? ? ? ? 231 LYS A CB 1
+ATOM 1228 C CG . LYS A 1 155 ? 8.225 18.160 4.295 1.00 52.49 ? ? ? ? ? ? 231 LYS A CG 1
+ATOM 1229 C CD . LYS A 1 155 ? 8.072 16.975 5.239 1.00 51.56 ? ? ? ? ? ? 231 LYS A CD 1
+ATOM 1230 C CE . LYS A 1 155 ? 9.405 16.525 5.808 1.00 51.37 ? ? ? ? ? ? 231 LYS A CE 1
+ATOM 1231 N NZ . LYS A 1 155 ? 10.325 16.047 4.741 1.00 50.67 ? ? ? ? ? ? 231 LYS A NZ 1
+ATOM 1232 N N . LYS A 1 156 ? 6.270 19.929 0.691 1.00 58.11 ? ? ? ? ? ? 232 LYS A N 1
+ATOM 1233 C CA . LYS A 1 156 ? 6.486 19.872 -0.756 1.00 59.89 ? ? ? ? ? ? 232 LYS A CA 1
+ATOM 1234 C C . LYS A 1 156 ? 6.000 21.190 -1.346 1.00 59.82 ? ? ? ? ? ? 232 LYS A C 1
+ATOM 1235 O O . LYS A 1 156 ? 4.873 21.275 -1.830 1.00 60.73 ? ? ? ? ? ? 232 LYS A O 1
+ATOM 1236 C CB . LYS A 1 156 ? 5.675 18.737 -1.395 1.00 60.27 ? ? ? ? ? ? 232 LYS A CB 1
+ATOM 1237 C CG . LYS A 1 156 ? 5.935 17.354 -0.837 1.00 61.52 ? ? ? ? ? ? 232 LYS A CG 1
+ATOM 1238 C CD . LYS A 1 156 ? 5.141 16.277 -1.584 1.00 63.06 ? ? ? ? ? ? 232 LYS A CD 1
+ATOM 1239 C CE . LYS A 1 156 ? 3.625 16.481 -1.510 1.00 63.03 ? ? ? ? ? ? 232 LYS A CE 1
+ATOM 1240 N NZ . LYS A 1 156 ? 3.133 17.671 -2.266 1.00 62.92 ? ? ? ? ? ? 232 LYS A NZ 1
+ATOM 1241 N N . GLY A 1 157 ? 6.843 22.215 -1.306 1.00 60.48 ? ? ? ? ? ? 233 GLY A N 1
+ATOM 1242 C CA . GLY A 1 157 ? 6.441 23.503 -1.840 1.00 61.23 ? ? ? ? ? ? 233 GLY A CA 1
+ATOM 1243 C C . GLY A 1 157 ? 5.639 24.282 -0.816 1.00 61.86 ? ? ? ? ? ? 233 GLY A C 1
+ATOM 1244 O O . GLY A 1 157 ? 4.679 23.765 -0.237 1.00 61.98 ? ? ? ? ? ? 233 GLY A O 1
+ATOM 1245 N N . ASN A 1 158 ? 6.030 25.534 -0.601 1.00 61.32 ? ? ? ? ? ? 234 ASN A N 1
+ATOM 1246 C CA . ASN A 1 158 ? 5.372 26.398 0.371 1.00 60.01 ? ? ? ? ? ? 234 ASN A CA 1
+ATOM 1247 C C . ASN A 1 158 ? 3.868 26.576 0.181 1.00 58.71 ? ? ? ? ? ? 234 ASN A C 1
+ATOM 1248 O O . ASN A 1 158 ? 3.156 26.880 1.139 1.00 59.06 ? ? ? ? ? ? 234 ASN A O 1
+ATOM 1249 C CB . ASN A 1 158 ? 6.053 27.771 0.389 1.00 62.46 ? ? ? ? ? ? 234 ASN A CB 1
+ATOM 1250 C CG . ASN A 1 158 ? 6.046 28.446 -0.968 1.00 62.90 ? ? ? ? ? ? 234 ASN A CG 1
+ATOM 1251 O OD1 . ASN A 1 158 ? 4.987 28.711 -1.540 1.00 62.25 ? ? ? ? ? ? 234 ASN A OD1 1
+ATOM 1252 N ND2 . ASN A 1 158 ? 7.232 28.731 -1.491 1.00 61.76 ? ? ? ? ? ? 234 ASN A ND2 1
+ATOM 1253 N N . ASP A 1 159 ? 3.382 26.383 -1.041 1.00 56.50 ? ? ? ? ? ? 235 ASP A N 1
+ATOM 1254 C CA . ASP A 1 159 ? 1.956 26.545 -1.330 1.00 55.39 ? ? ? ? ? ? 235 ASP A CA 1
+ATOM 1255 C C . ASP A 1 159 ? 1.352 27.700 -0.531 1.00 54.57 ? ? ? ? ? ? 235 ASP A C 1
+ATOM 1256 O O . ASP A 1 159 ? 0.360 27.529 0.178 1.00 54.88 ? ? ? ? ? ? 235 ASP A O 1
+ATOM 1257 C CB . ASP A 1 159 ? 1.184 25.255 -1.017 1.00 52.75 ? ? ? ? ? ? 235 ASP A CB 1
+ATOM 1258 C CG . ASP A 1 159 ? -0.306 25.370 -1.336 1.00 54.23 ? ? ? ? ? ? 235 ASP A CG 1
+ATOM 1259 O OD1 . ASP A 1 159 ? -1.051 24.406 -1.069 1.00 52.92 ? ? ? ? ? ? 235 ASP A OD1 1
+ATOM 1260 O OD2 . ASP A 1 159 ? -0.740 26.421 -1.858 1.00 52.56 ? ? ? ? ? ? 235 ASP A OD2 1
+ATOM 1261 N N . GLY A 1 160 ? 1.960 28.875 -0.640 1.00 55.21 ? ? ? ? ? ? 236 GLY A N 1
+ATOM 1262 C CA . GLY A 1 160 ? 1.443 30.025 0.076 1.00 57.27 ? ? ? ? ? ? 236 GLY A CA 1
+ATOM 1263 C C . GLY A 1 160 ? 2.206 30.381 1.337 1.00 58.00 ? ? ? ? ? ? 236 GLY A C 1
+ATOM 1264 O O . GLY A 1 160 ? 2.402 31.563 1.625 1.00 60.57 ? ? ? ? ? ? 236 GLY A O 1
+ATOM 1265 N N . LEU A 1 161 ? 2.629 29.375 2.098 1.00 56.48 ? ? ? ? ? ? 237 LEU A N 1
+ATOM 1266 C CA . LEU A 1 161 ? 3.372 29.634 3.326 1.00 55.72 ? ? ? ? ? ? 237 LEU A CA 1
+ATOM 1267 C C . LEU A 1 161 ? 4.612 30.453 3.018 1.00 54.44 ? ? ? ? ? ? 237 LEU A C 1
+ATOM 1268 O O . LEU A 1 161 ? 5.185 30.340 1.934 1.00 55.59 ? ? ? ? ? ? 237 LEU A O 1
+ATOM 1269 C CB . LEU A 1 161 ? 3.778 28.325 4.012 1.00 54.80 ? ? ? ? ? ? 237 LEU A CB 1
+ATOM 1270 C CG . LEU A 1 161 ? 2.665 27.451 4.594 1.00 54.35 ? ? ? ? ? ? 237 LEU A CG 1
+ATOM 1271 C CD1 . LEU A 1 161 ? 3.288 26.255 5.300 1.00 54.40 ? ? ? ? ? ? 237 LEU A CD1 1
+ATOM 1272 C CD2 . LEU A 1 161 ? 1.828 28.260 5.577 1.00 53.82 ? ? ? ? ? ? 237 LEU A CD2 1
+ATOM 1273 N N . CYS A 1 162 ? 5.024 31.277 3.976 1.00 52.26 ? ? ? ? ? ? 238 CYS A N 1
+ATOM 1274 C CA . CYS A 1 162 ? 6.194 32.125 3.799 1.00 50.38 ? ? ? ? ? ? 238 CYS A CA 1
+ATOM 1275 C C . CYS A 1 162 ? 7.374 31.289 3.348 1.00 48.27 ? ? ? ? ? ? 238 CYS A C 1
+ATOM 1276 O O . CYS A 1 162 ? 8.340 31.814 2.799 1.00 48.50 ? ? ? ? ? ? 238 CYS A O 1
+ATOM 1277 C CB . CYS A 1 162 ? 6.565 32.823 5.110 1.00 51.59 ? ? ? ? ? ? 238 CYS A CB 1
+ATOM 1278 S SG . CYS A 1 162 ? 7.276 31.720 6.359 1.00 50.45 ? ? ? ? ? ? 238 CYS A SG 1
+ATOM 1279 N N . GLN A 1 163 ? 7.296 29.982 3.573 1.00 49.00 ? ? ? ? ? ? 239 GLN A N 1
+ATOM 1280 C CA . GLN A 1 163 ? 8.398 29.115 3.197 1.00 48.97 ? ? ? ? ? ? 239 GLN A CA 1
+ATOM 1281 C C . GLN A 1 163 ? 8.002 27.652 3.047 1.00 47.61 ? ? ? ? ? ? 239 GLN A C 1
+ATOM 1282 O O . GLN A 1 163 ? 6.926 27.234 3.467 1.00 46.89 ? ? ? ? ? ? 239 GLN A O 1
+ATOM 1283 C CB . GLN A 1 163 ? 9.500 29.222 4.248 1.00 51.54 ? ? ? ? ? ? 239 GLN A CB 1
+ATOM 1284 C CG . GLN A 1 163 ? 10.883 29.158 3.677 1.00 55.86 ? ? ? ? ? ? 239 GLN A CG 1
+ATOM 1285 C CD . GLN A 1 163 ? 11.198 30.369 2.819 1.00 57.66 ? ? ? ? ? ? 239 GLN A CD 1
+ATOM 1286 O OE1 . GLN A 1 163 ? 10.498 30.657 1.849 1.00 60.62 ? ? ? ? ? ? 239 GLN A OE1 1
+ATOM 1287 N NE2 . GLN A 1 163 ? 12.254 31.088 3.176 1.00 59.22 ? ? ? ? ? ? 239 GLN A NE2 1
+ATOM 1288 N N . LYS A 1 164 ? 8.893 26.882 2.435 1.00 47.16 ? ? ? ? ? ? 240 LYS A N 1
+ATOM 1289 C CA . LYS A 1 164 ? 8.690 25.454 2.233 1.00 47.86 ? ? ? ? ? ? 240 LYS A CA 1
+ATOM 1290 C C . LYS A 1 164 ? 9.221 24.751 3.476 1.00 45.74 ? ? ? ? ? ? 240 LYS A C 1
+ATOM 1291 O O . LYS A 1 164 ? 10.380 24.944 3.843 1.00 45.47 ? ? ? ? ? ? 240 LYS A O 1
+ATOM 1292 C CB . LYS A 1 164 ? 9.480 24.989 1.011 1.00 51.04 ? ? ? ? ? ? 240 LYS A CB 1
+ATOM 1293 C CG . LYS A 1 164 ? 9.554 23.485 0.847 1.00 53.15 ? ? ? ? ? ? 240 LYS A CG 1
+ATOM 1294 C CD . LYS A 1 164 ? 10.496 23.113 -0.285 1.00 55.40 ? ? ? ? ? ? 240 LYS A CD 1
+ATOM 1295 C CE . LYS A 1 164 ? 10.644 21.608 -0.392 1.00 57.96 ? ? ? ? ? ? 240 LYS A CE 1
+ATOM 1296 N NZ . LYS A 1 164 ? 9.329 20.961 -0.630 1.00 60.86 ? ? ? ? ? ? 240 LYS A NZ 1
+ATOM 1297 N N . LEU A 1 165 ? 8.386 23.941 4.121 1.00 43.25 ? ? ? ? ? ? 241 LEU A N 1
+ATOM 1298 C CA . LEU A 1 165 ? 8.816 23.238 5.326 1.00 42.95 ? ? ? ? ? ? 241 LEU A CA 1
+ATOM 1299 C C . LEU A 1 165 ? 9.997 22.321 5.029 1.00 42.78 ? ? ? ? ? ? 241 LEU A C 1
+ATOM 1300 O O . LEU A 1 165 ? 9.955 21.538 4.080 1.00 44.52 ? ? ? ? ? ? 241 LEU A O 1
+ATOM 1301 C CB . LEU A 1 165 ? 7.672 22.401 5.909 1.00 38.01 ? ? ? ? ? ? 241 LEU A CB 1
+ATOM 1302 C CG . LEU A 1 165 ? 6.354 23.087 6.271 1.00 36.96 ? ? ? ? ? ? 241 LEU A CG 1
+ATOM 1303 C CD1 . LEU A 1 165 ? 5.434 22.054 6.895 1.00 38.53 ? ? ? ? ? ? 241 LEU A CD1 1
+ATOM 1304 C CD2 . LEU A 1 165 ? 6.585 24.239 7.241 1.00 38.51 ? ? ? ? ? ? 241 LEU A CD2 1
+ATOM 1305 N N . SER A 1 166 ? 11.051 22.427 5.833 1.00 42.48 ? ? ? ? ? ? 242 SER A N 1
+ATOM 1306 C CA . SER A 1 166 ? 12.226 21.581 5.655 1.00 40.84 ? ? ? ? ? ? 242 SER A CA 1
+ATOM 1307 C C . SER A 1 166 ? 12.225 20.458 6.693 1.00 40.23 ? ? ? ? ? ? 242 SER A C 1
+ATOM 1308 O O . SER A 1 166 ? 11.720 19.368 6.425 1.00 40.69 ? ? ? ? ? ? 242 SER A O 1
+ATOM 1309 C CB . SER A 1 166 ? 13.511 22.410 5.769 1.00 42.74 ? ? ? ? ? ? 242 SER A CB 1
+ATOM 1310 O OG . SER A 1 166 ? 13.596 23.078 7.016 1.00 45.46 ? ? ? ? ? ? 242 SER A OG 1
+ATOM 1311 N N . VAL A 1 167 ? 12.780 20.727 7.873 1.00 37.04 ? ? ? ? ? ? 243 VAL A N 1
+ATOM 1312 C CA . VAL A 1 167 ? 12.838 19.737 8.946 1.00 34.02 ? ? ? ? ? ? 243 VAL A CA 1
+ATOM 1313 C C . VAL A 1 167 ? 12.389 20.319 10.285 1.00 33.84 ? ? ? ? ? ? 243 VAL A C 1
+ATOM 1314 O O . VAL A 1 167 ? 12.412 21.536 10.488 1.00 29.41 ? ? ? ? ? ? 243 VAL A O 1
+ATOM 1315 C CB . VAL A 1 167 ? 14.269 19.171 9.128 1.00 33.00 ? ? ? ? ? ? 243 VAL A CB 1
+ATOM 1316 C CG1 . VAL A 1 167 ? 14.724 18.467 7.853 1.00 36.56 ? ? ? ? ? ? 243 VAL A CG1 1
+ATOM 1317 C CG2 . VAL A 1 167 ? 15.225 20.293 9.506 1.00 32.27 ? ? ? ? ? ? 243 VAL A CG2 1
+ATOM 1318 N N . PRO A 1 168 ? 11.984 19.447 11.224 1.00 32.48 ? ? ? ? ? ? 244 PRO A N 1
+ATOM 1319 C CA . PRO A 1 168 ? 11.527 19.852 12.554 1.00 29.31 ? ? ? ? ? ? 244 PRO A CA 1
+ATOM 1320 C C . PRO A 1 168 ? 12.607 20.631 13.291 1.00 28.34 ? ? ? ? ? ? 244 PRO A C 1
+ATOM 1321 O O . PRO A 1 168 ? 13.797 20.401 13.076 1.00 29.43 ? ? ? ? ? ? 244 PRO A O 1
+ATOM 1322 C CB . PRO A 1 168 ? 11.237 18.510 13.230 1.00 31.74 ? ? ? ? ? ? 244 PRO A CB 1
+ATOM 1323 C CG . PRO A 1 168 ? 10.822 17.636 12.053 1.00 34.45 ? ? ? ? ? ? 244 PRO A CG 1
+ATOM 1324 C CD . PRO A 1 168 ? 11.952 17.977 11.115 1.00 34.56 ? ? ? ? ? ? 244 PRO A CD 1
+ATOM 1325 N N . CYS A 1 169 ? 12.189 21.547 14.159 1.00 28.55 ? ? ? ? ? ? 245 CYS A N 1
+ATOM 1326 C CA . CYS A 1 169 ? 13.129 22.340 14.938 1.00 27.95 ? ? ? ? ? ? 245 CYS A CA 1
+ATOM 1327 C C . CYS A 1 169 ? 14.078 21.414 15.686 1.00 30.29 ? ? ? ? ? ? 245 CYS A C 1
+ATOM 1328 O O . CYS A 1 169 ? 13.684 20.328 16.117 1.00 25.53 ? ? ? ? ? ? 245 CYS A O 1
+ATOM 1329 C CB . CYS A 1 169 ? 12.384 23.211 15.950 1.00 25.75 ? ? ? ? ? ? 245 CYS A CB 1
+ATOM 1330 S SG . CYS A 1 169 ? 13.481 24.191 16.988 1.00 27.82 ? ? ? ? ? ? 245 CYS A SG 1
+ATOM 1331 N N . MET A 1 170 ? 15.328 21.837 15.832 1.00 32.93 ? ? ? ? ? ? 246 MET A N 1
+ATOM 1332 C CA . MET A 1 170 ? 16.307 21.032 16.547 1.00 39.36 ? ? ? ? ? ? 246 MET A CA 1
+ATOM 1333 C C . MET A 1 170 ? 15.956 20.996 18.029 1.00 42.45 ? ? ? ? ? ? 246 MET A C 1
+ATOM 1334 O O . MET A 1 170 ? 15.562 22.010 18.612 1.00 43.59 ? ? ? ? ? ? 246 MET A O 1
+ATOM 1335 C CB . MET A 1 170 ? 17.713 21.609 16.372 1.00 42.56 ? ? ? ? ? ? 246 MET A CB 1
+ATOM 1336 C CG . MET A 1 170 ? 18.238 21.598 14.943 1.00 49.98 ? ? ? ? ? ? 246 MET A CG 1
+ATOM 1337 S SD . MET A 1 170 ? 18.511 19.945 14.256 1.00 55.26 ? ? ? ? ? ? 246 MET A SD 1
+ATOM 1338 C CE . MET A 1 170 ? 16.840 19.296 14.099 1.00 53.10 ? ? ? ? ? ? 246 MET A CE 1
+ATOM 1339 N N . SER A 1 171 ? 16.090 19.822 18.631 1.00 44.50 ? ? ? ? ? ? 247 SER A N 1
+ATOM 1340 C CA . SER A 1 171 ? 15.804 19.658 20.049 1.00 47.23 ? ? ? ? ? ? 247 SER A CA 1
+ATOM 1341 C C . SER A 1 171 ? 16.765 18.624 20.615 1.00 49.46 ? ? ? ? ? ? 247 SER A C 1
+ATOM 1342 O O . SER A 1 171 ? 17.104 17.644 19.948 1.00 48.97 ? ? ? ? ? ? 247 SER A O 1
+ATOM 1343 C CB . SER A 1 171 ? 14.369 19.179 20.256 1.00 45.97 ? ? ? ? ? ? 247 SER A CB 1
+ATOM 1344 O OG . SER A 1 171 ? 14.205 17.881 19.719 1.00 48.40 ? ? ? ? ? ? 247 SER A OG 1
+ATOM 1345 N N . SER A 1 172 ? 17.211 18.849 21.843 1.00 52.14 ? ? ? ? ? ? 248 SER A N 1
+ATOM 1346 C CA . SER A 1 172 ? 18.126 17.921 22.486 1.00 54.27 ? ? ? ? ? ? 248 SER A CA 1
+ATOM 1347 C C . SER A 1 172 ? 17.354 17.064 23.480 1.00 52.91 ? ? ? ? ? ? 248 SER A C 1
+ATOM 1348 O O . SER A 1 172 ? 16.419 17.538 24.130 1.00 52.11 ? ? ? ? ? ? 248 SER A O 1
+ATOM 1349 C CB . SER A 1 172 ? 19.244 18.688 23.197 1.00 54.71 ? ? ? ? ? ? 248 SER A CB 1
+ATOM 1350 O OG . SER A 1 172 ? 18.717 19.586 24.160 1.00 61.09 ? ? ? ? ? ? 248 SER A OG 1
+ATOM 1351 N N . LYS A 1 173 ? 17.740 15.796 23.576 1.00 53.01 ? ? ? ? ? ? 249 LYS A N 1
+ATOM 1352 C CA . LYS A 1 173 ? 17.103 14.855 24.491 1.00 52.66 ? ? ? ? ? ? 249 LYS A CA 1
+ATOM 1353 C C . LYS A 1 173 ? 16.991 15.489 25.872 1.00 51.40 ? ? ? ? ? ? 249 LYS A C 1
+ATOM 1354 O O . LYS A 1 173 ? 17.965 16.036 26.386 1.00 51.72 ? ? ? ? ? ? 249 LYS A O 1
+ATOM 1355 C CB . LYS A 1 173 ? 17.940 13.579 24.571 1.00 52.77 ? ? ? ? ? ? 249 LYS A CB 1
+ATOM 1356 C CG . LYS A 1 173 ? 17.381 12.495 25.475 1.00 53.76 ? ? ? ? ? ? 249 LYS A CG 1
+ATOM 1357 C CD . LYS A 1 173 ? 18.292 11.279 25.425 1.00 54.78 ? ? ? ? ? ? 249 LYS A CD 1
+ATOM 1358 C CE . LYS A 1 173 ? 17.753 10.118 26.234 1.00 56.11 ? ? ? ? ? ? 249 LYS A CE 1
+ATOM 1359 N NZ . LYS A 1 173 ? 18.658 8.941 26.118 1.00 55.17 ? ? ? ? ? ? 249 LYS A NZ 1
+ATOM 1360 N N . PRO A 1 174 ? 15.800 15.422 26.492 1.00 50.80 ? ? ? ? ? ? 250 PRO A N 1
+ATOM 1361 C CA . PRO A 1 174 ? 15.592 16.005 27.820 1.00 50.11 ? ? ? ? ? ? 250 PRO A CA 1
+ATOM 1362 C C . PRO A 1 174 ? 16.567 15.424 28.830 1.00 47.53 ? ? ? ? ? ? 250 PRO A C 1
+ATOM 1363 O O . PRO A 1 174 ? 16.855 14.228 28.807 1.00 47.79 ? ? ? ? ? ? 250 PRO A O 1
+ATOM 1364 C CB . PRO A 1 174 ? 14.139 15.638 28.123 1.00 52.05 ? ? ? ? ? ? 250 PRO A CB 1
+ATOM 1365 C CG . PRO A 1 174 ? 13.520 15.635 26.735 1.00 52.20 ? ? ? ? ? ? 250 PRO A CG 1
+ATOM 1366 C CD . PRO A 1 174 ? 14.557 14.783 26.035 1.00 51.76 ? ? ? ? ? ? 250 PRO A CD 1
+ATOM 1367 N N . GLN A 1 175 ? 17.085 16.271 29.708 1.00 46.37 ? ? ? ? ? ? 251 GLN A N 1
+ATOM 1368 C CA . GLN A 1 175 ? 18.027 15.805 30.712 1.00 45.68 ? ? ? ? ? ? 251 GLN A CA 1
+ATOM 1369 C C . GLN A 1 175 ? 17.293 14.894 31.677 1.00 42.35 ? ? ? ? ? ? 251 GLN A C 1
+ATOM 1370 O O . GLN A 1 175 ? 16.097 15.068 31.918 1.00 37.76 ? ? ? ? ? ? 251 GLN A O 1
+ATOM 1371 C CB . GLN A 1 175 ? 18.631 16.985 31.473 1.00 50.50 ? ? ? ? ? ? 251 GLN A CB 1
+ATOM 1372 C CG . GLN A 1 175 ? 19.310 18.000 30.580 1.00 55.31 ? ? ? ? ? ? 251 GLN A CG 1
+ATOM 1373 C CD . GLN A 1 175 ? 19.962 19.111 31.369 1.00 59.71 ? ? ? ? ? ? 251 GLN A CD 1
+ATOM 1374 O OE1 . GLN A 1 175 ? 20.955 18.895 32.066 1.00 63.09 ? ? ? ? ? ? 251 GLN A OE1 1
+ATOM 1375 N NE2 . GLN A 1 175 ? 19.396 20.309 31.276 1.00 61.26 ? ? ? ? ? ? 251 GLN A NE2 1
+ATOM 1376 N N . LYS A 1 176 ? 18.009 13.911 32.209 1.00 41.57 ? ? ? ? ? ? 252 LYS A N 1
+ATOM 1377 C CA . LYS A 1 176 ? 17.425 12.979 33.157 1.00 42.57 ? ? ? ? ? ? 252 LYS A CA 1
+ATOM 1378 C C . LYS A 1 176 ? 16.960 13.774 34.363 1.00 40.21 ? ? ? ? ? ? 252 LYS A C 1
+ATOM 1379 O O . LYS A 1 176 ? 17.597 14.753 34.751 1.00 39.99 ? ? ? ? ? ? 252 LYS A O 1
+ATOM 1380 C CB . LYS A 1 176 ? 18.462 11.945 33.603 1.00 46.81 ? ? ? ? ? ? 252 LYS A CB 1
+ATOM 1381 C CG . LYS A 1 176 ? 19.026 11.100 32.473 1.00 51.59 ? ? ? ? ? ? 252 LYS A CG 1
+ATOM 1382 C CD . LYS A 1 176 ? 19.968 10.017 32.993 1.00 54.94 ? ? ? ? ? ? 252 LYS A CD 1
+ATOM 1383 C CE . LYS A 1 176 ? 20.473 9.136 31.857 1.00 56.53 ? ? ? ? ? ? 252 LYS A CE 1
+ATOM 1384 N NZ . LYS A 1 176 ? 21.363 8.038 32.336 1.00 59.73 ? ? ? ? ? ? 252 LYS A NZ 1
+ATOM 1385 N N . PRO A 1 177 ? 15.820 13.393 34.950 1.00 37.70 ? ? ? ? ? ? 253 PRO A N 1
+ATOM 1386 C CA . PRO A 1 177 ? 15.359 14.139 36.118 1.00 37.07 ? ? ? ? ? ? 253 PRO A CA 1
+ATOM 1387 C C . PRO A 1 177 ? 16.321 13.859 37.270 1.00 34.53 ? ? ? ? ? ? 253 PRO A C 1
+ATOM 1388 O O . PRO A 1 177 ? 17.158 12.955 37.189 1.00 34.20 ? ? ? ? ? ? 253 PRO A O 1
+ATOM 1389 C CB . PRO A 1 177 ? 13.971 13.556 36.354 1.00 39.54 ? ? ? ? ? ? 253 PRO A CB 1
+ATOM 1390 C CG . PRO A 1 177 ? 14.176 12.117 35.945 1.00 40.52 ? ? ? ? ? ? 253 PRO A CG 1
+ATOM 1391 C CD . PRO A 1 177 ? 14.853 12.337 34.610 1.00 39.72 ? ? ? ? ? ? 253 PRO A CD 1
+ATOM 1392 N N . TRP A 1 178 ? 16.210 14.641 38.333 1.00 31.40 ? ? ? ? ? ? 254 TRP A N 1
+ATOM 1393 C CA . TRP A 1 178 ? 17.073 14.455 39.486 1.00 27.94 ? ? ? ? ? ? 254 TRP A CA 1
+ATOM 1394 C C . TRP A 1 178 ? 16.656 13.155 40.169 1.00 28.57 ? ? ? ? ? ? 254 TRP A C 1
+ATOM 1395 O O . TRP A 1 178 ? 15.485 12.773 40.128 1.00 25.12 ? ? ? ? ? ? 254 TRP A O 1
+ATOM 1396 C CB . TRP A 1 178 ? 16.917 15.645 40.433 1.00 25.91 ? ? ? ? ? ? 254 TRP A CB 1
+ATOM 1397 C CG . TRP A 1 178 ? 17.856 15.638 41.585 1.00 26.14 ? ? ? ? ? ? 254 TRP A CG 1
+ATOM 1398 C CD1 . TRP A 1 178 ? 17.571 15.317 42.880 1.00 24.52 ? ? ? ? ? ? 254 TRP A CD1 1
+ATOM 1399 C CD2 . TRP A 1 178 ? 19.247 15.962 41.546 1.00 20.84 ? ? ? ? ? ? 254 TRP A CD2 1
+ATOM 1400 N NE1 . TRP A 1 178 ? 18.702 15.424 43.653 1.00 24.50 ? ? ? ? ? ? 254 TRP A NE1 1
+ATOM 1401 C CE2 . TRP A 1 178 ? 19.746 15.820 42.858 1.00 19.78 ? ? ? ? ? ? 254 TRP A CE2 1
+ATOM 1402 C CE3 . TRP A 1 178 ? 20.122 16.362 40.527 1.00 19.86 ? ? ? ? ? ? 254 TRP A CE3 1
+ATOM 1403 C CZ2 . TRP A 1 178 ? 21.079 16.061 43.181 1.00 21.84 ? ? ? ? ? ? 254 TRP A CZ2 1
+ATOM 1404 C CZ3 . TRP A 1 178 ? 21.458 16.603 40.851 1.00 17.94 ? ? ? ? ? ? 254 TRP A CZ3 1
+ATOM 1405 C CH2 . TRP A 1 178 ? 21.919 16.451 42.166 1.00 18.25 ? ? ? ? ? ? 254 TRP A CH2 1
+ATOM 1406 N N . GLU A 1 179 ? 17.621 12.467 40.770 1.00 28.53 ? ? ? ? ? ? 255 GLU A N 1
+ATOM 1407 C CA . GLU A 1 179 ? 17.359 11.211 41.470 1.00 26.90 ? ? ? ? ? ? 255 GLU A CA 1
+ATOM 1408 C C . GLU A 1 179 ? 16.109 11.287 42.340 1.00 27.77 ? ? ? ? ? ? 255 GLU A C 1
+ATOM 1409 O O . GLU A 1 179 ? 15.870 12.284 43.019 1.00 23.72 ? ? ? ? ? ? 255 GLU A O 1
+ATOM 1410 C CB . GLU A 1 179 ? 18.556 10.847 42.346 1.00 30.79 ? ? ? ? ? ? 255 GLU A CB 1
+ATOM 1411 C CG . GLU A 1 179 ? 18.400 9.542 43.104 1.00 34.55 ? ? ? ? ? ? 255 GLU A CG 1
+ATOM 1412 C CD . GLU A 1 179 ? 19.616 9.213 43.942 1.00 41.24 ? ? ? ? ? ? 255 GLU A CD 1
+ATOM 1413 O OE1 . GLU A 1 179 ? 19.625 8.128 44.560 1.00 46.57 ? ? ? ? ? ? 255 GLU A OE1 1
+ATOM 1414 O OE2 . GLU A 1 179 ? 20.560 10.036 43.984 1.00 40.18 ? ? ? ? ? ? 255 GLU A OE2 1
+ATOM 1415 N N . LYS A 1 180 ? 15.324 10.217 42.331 1.00 28.01 ? ? ? ? ? ? 257 LYS A N 1
+ATOM 1416 C CA . LYS A 1 180 ? 14.095 10.165 43.112 1.00 30.22 ? ? ? ? ? ? 257 LYS A CA 1
+ATOM 1417 C C . LYS A 1 180 ? 14.365 10.297 44.610 1.00 28.06 ? ? ? ? ? ? 257 LYS A C 1
+ATOM 1418 O O . LYS A 1 180 ? 15.308 9.710 45.131 1.00 25.31 ? ? ? ? ? ? 257 LYS A O 1
+ATOM 1419 C CB . LYS A 1 180 ? 13.356 8.848 42.860 1.00 35.46 ? ? ? ? ? ? 257 LYS A CB 1
+ATOM 1420 C CG . LYS A 1 180 ? 11.998 8.785 43.550 1.00 44.74 ? ? ? ? ? ? 257 LYS A CG 1
+ATOM 1421 C CD . LYS A 1 180 ? 11.384 7.387 43.554 1.00 51.67 ? ? ? ? ? ? 257 LYS A CD 1
+ATOM 1422 C CE . LYS A 1 180 ? 11.218 6.818 42.160 1.00 55.78 ? ? ? ? ? ? 257 LYS A CE 1
+ATOM 1423 N NZ . LYS A 1 180 ? 12.518 6.508 41.500 1.00 58.30 ? ? ? ? ? ? 257 LYS A NZ 1
+ATOM 1424 N N . ASP A 1 181 ? 13.516 11.064 45.289 1.00 29.07 ? ? ? ? ? ? 258 ASP A N 1
+ATOM 1425 C CA . ASP A 1 181 ? 13.619 11.288 46.730 1.00 32.27 ? ? ? ? ? ? 258 ASP A CA 1
+ATOM 1426 C C . ASP A 1 181 ? 15.009 11.714 47.193 1.00 31.41 ? ? ? ? ? ? 258 ASP A C 1
+ATOM 1427 O O . ASP A 1 181 ? 15.436 11.350 48.287 1.00 33.44 ? ? ? ? ? ? 258 ASP A O 1
+ATOM 1428 C CB . ASP A 1 181 ? 13.200 10.027 47.495 1.00 32.83 ? ? ? ? ? ? 258 ASP A CB 1
+ATOM 1429 C CG . ASP A 1 181 ? 11.816 9.537 47.102 1.00 37.59 ? ? ? ? ? ? 258 ASP A CG 1
+ATOM 1430 O OD1 . ASP A 1 181 ? 10.864 10.348 47.133 1.00 38.05 ? ? ? ? ? ? 258 ASP A OD1 1
+ATOM 1431 O OD2 . ASP A 1 181 ? 11.682 8.338 46.769 1.00 40.37 ? ? ? ? ? ? 258 ASP A OD2 1
+ATOM 1432 N N . ALA A 1 182 ? 15.711 12.486 46.370 1.00 28.54 ? ? ? ? ? ? 259 ALA A N 1
+ATOM 1433 C CA . ALA A 1 182 ? 17.047 12.953 46.726 1.00 27.48 ? ? ? ? ? ? 259 ALA A CA 1
+ATOM 1434 C C . ALA A 1 182 ? 17.029 14.459 46.979 1.00 25.31 ? ? ? ? ? ? 259 ALA A C 1
+ATOM 1435 O O . ALA A 1 182 ? 17.787 15.207 46.367 1.00 25.19 ? ? ? ? ? ? 259 ALA A O 1
+ATOM 1436 C CB . ALA A 1 182 ? 18.035 12.617 45.610 1.00 25.32 ? ? ? ? ? ? 259 ALA A CB 1
+ATOM 1437 N N . TRP A 1 183 ? 16.149 14.897 47.875 1.00 23.61 ? ? ? ? ? ? 260 TRP A N 1
+ATOM 1438 C CA . TRP A 1 183 ? 16.033 16.312 48.210 1.00 21.03 ? ? ? ? ? ? 260 TRP A CA 1
+ATOM 1439 C C . TRP A 1 183 ? 17.121 16.700 49.211 1.00 20.94 ? ? ? ? ? ? 260 TRP A C 1
+ATOM 1440 O O . TRP A 1 183 ? 17.917 17.601 48.957 1.00 19.84 ? ? ? ? ? ? 260 TRP A O 1
+ATOM 1441 C CB . TRP A 1 183 ? 14.648 16.595 48.794 1.00 20.11 ? ? ? ? ? ? 260 TRP A CB 1
+ATOM 1442 C CG . TRP A 1 183 ? 14.478 17.996 49.306 1.00 19.28 ? ? ? ? ? ? 260 TRP A CG 1
+ATOM 1443 C CD1 . TRP A 1 183 ? 14.048 18.355 50.546 1.00 18.54 ? ? ? ? ? ? 260 TRP A CD1 1
+ATOM 1444 C CD2 . TRP A 1 183 ? 14.751 19.217 48.606 1.00 15.81 ? ? ? ? ? ? 260 TRP A CD2 1
+ATOM 1445 N NE1 . TRP A 1 183 ? 14.039 19.717 50.670 1.00 16.64 ? ? ? ? ? ? 260 TRP A NE1 1
+ATOM 1446 C CE2 . TRP A 1 183 ? 14.467 20.276 49.493 1.00 15.54 ? ? ? ? ? ? 260 TRP A CE2 1
+ATOM 1447 C CE3 . TRP A 1 183 ? 15.212 19.522 47.317 1.00 16.86 ? ? ? ? ? ? 260 TRP A CE3 1
+ATOM 1448 C CZ2 . TRP A 1 183 ? 14.625 21.622 49.140 1.00 16.38 ? ? ? ? ? ? 260 TRP A CZ2 1
+ATOM 1449 C CZ3 . TRP A 1 183 ? 15.371 20.865 46.961 1.00 17.40 ? ? ? ? ? ? 260 TRP A CZ3 1
+ATOM 1450 C CH2 . TRP A 1 183 ? 15.078 21.897 47.875 1.00 13.59 ? ? ? ? ? ? 260 TRP A CH2 1
+ATOM 1451 N N . GLU A 1 184 ? 17.144 16.033 50.358 1.00 19.45 ? ? ? ? ? ? 261 GLU A N 1
+ATOM 1452 C CA . GLU A 1 184 ? 18.173 16.305 51.353 1.00 20.11 ? ? ? ? ? ? 261 GLU A CA 1
+ATOM 1453 C C . GLU A 1 184 ? 19.212 15.232 51.081 1.00 21.20 ? ? ? ? ? ? 261 GLU A C 1
+ATOM 1454 O O . GLU A 1 184 ? 18.934 14.043 51.252 1.00 22.36 ? ? ? ? ? ? 261 GLU A O 1
+ATOM 1455 C CB . GLU A 1 184 ? 17.630 16.155 52.771 1.00 20.94 ? ? ? ? ? ? 261 GLU A CB 1
+ATOM 1456 C CG . GLU A 1 184 ? 16.451 17.054 53.091 1.00 27.68 ? ? ? ? ? ? 261 GLU A CG 1
+ATOM 1457 C CD . GLU A 1 184 ? 16.050 16.974 54.556 1.00 30.79 ? ? ? ? ? ? 261 GLU A CD 1
+ATOM 1458 O OE1 . GLU A 1 184 ? 14.990 17.522 54.909 1.00 31.60 ? ? ? ? ? ? 261 GLU A OE1 1
+ATOM 1459 O OE2 . GLU A 1 184 ? 16.802 16.374 55.356 1.00 35.78 ? ? ? ? ? ? 261 GLU A OE2 1
+ATOM 1460 N N . ILE A 1 185 ? 20.394 15.651 50.640 1.00 19.78 ? ? ? ? ? ? 262 ILE A N 1
+ATOM 1461 C CA . ILE A 1 185 ? 21.458 14.719 50.302 1.00 15.57 ? ? ? ? ? ? 262 ILE A CA 1
+ATOM 1462 C C . ILE A 1 185 ? 22.695 14.851 51.178 1.00 16.43 ? ? ? ? ? ? 262 ILE A C 1
+ATOM 1463 O O . ILE A 1 185 ? 22.989 15.919 51.709 1.00 16.70 ? ? ? ? ? ? 262 ILE A O 1
+ATOM 1464 C CB . ILE A 1 185 ? 21.910 14.914 48.842 1.00 17.47 ? ? ? ? ? ? 262 ILE A CB 1
+ATOM 1465 C CG1 . ILE A 1 185 ? 22.487 16.326 48.674 1.00 18.88 ? ? ? ? ? ? 262 ILE A CG1 1
+ATOM 1466 C CG2 . ILE A 1 185 ? 20.730 14.684 47.893 1.00 14.05 ? ? ? ? ? ? 262 ILE A CG2 1
+ATOM 1467 C CD1 . ILE A 1 185 ? 22.970 16.643 47.278 1.00 17.07 ? ? ? ? ? ? 262 ILE A CD1 1
+ATOM 1468 N N . PRO A 1 186 ? 23.451 13.756 51.321 1.00 15.11 ? ? ? ? ? ? 263 PRO A N 1
+ATOM 1469 C CA . PRO A 1 186 ? 24.667 13.754 52.132 1.00 16.94 ? ? ? ? ? ? 263 PRO A CA 1
+ATOM 1470 C C . PRO A 1 186 ? 25.689 14.685 51.485 1.00 15.79 ? ? ? ? ? ? 263 PRO A C 1
+ATOM 1471 O O . PRO A 1 186 ? 25.792 14.746 50.260 1.00 17.33 ? ? ? ? ? ? 263 PRO A O 1
+ATOM 1472 C CB . PRO A 1 186 ? 25.109 12.284 52.074 1.00 17.73 ? ? ? ? ? ? 263 PRO A CB 1
+ATOM 1473 C CG . PRO A 1 186 ? 23.789 11.532 51.822 1.00 18.76 ? ? ? ? ? ? 263 PRO A CG 1
+ATOM 1474 C CD . PRO A 1 186 ? 23.237 12.425 50.728 1.00 14.60 ? ? ? ? ? ? 263 PRO A CD 1
+ATOM 1475 N N . ARG A 1 187 ? 26.446 15.410 52.299 1.00 13.29 ? ? ? ? ? ? 264 ARG A N 1
+ATOM 1476 C CA . ARG A 1 187 ? 27.462 16.306 51.765 1.00 14.83 ? ? ? ? ? ? 264 ARG A CA 1
+ATOM 1477 C C . ARG A 1 187 ? 28.451 15.520 50.885 1.00 13.57 ? ? ? ? ? ? 264 ARG A C 1
+ATOM 1478 O O . ARG A 1 187 ? 28.885 16.003 49.833 1.00 11.65 ? ? ? ? ? ? 264 ARG A O 1
+ATOM 1479 C CB . ARG A 1 187 ? 28.220 16.987 52.916 1.00 14.81 ? ? ? ? ? ? 264 ARG A CB 1
+ATOM 1480 C CG . ARG A 1 187 ? 29.153 18.124 52.492 1.00 16.29 ? ? ? ? ? ? 264 ARG A CG 1
+ATOM 1481 C CD . ARG A 1 187 ? 29.955 18.615 53.691 1.00 20.65 ? ? ? ? ? ? 264 ARG A CD 1
+ATOM 1482 N NE . ARG A 1 187 ? 29.085 19.007 54.799 1.00 18.13 ? ? ? ? ? ? 264 ARG A NE 1
+ATOM 1483 C CZ . ARG A 1 187 ? 28.305 20.087 54.799 1.00 18.59 ? ? ? ? ? ? 264 ARG A CZ 1
+ATOM 1484 N NH1 . ARG A 1 187 ? 28.274 20.900 53.752 1.00 18.53 ? ? ? ? ? ? 264 ARG A NH1 1
+ATOM 1485 N NH2 . ARG A 1 187 ? 27.537 20.346 55.846 1.00 22.95 ? ? ? ? ? ? 264 ARG A NH2 1
+ATOM 1486 N N . GLU A 1 188 ? 28.802 14.304 51.300 1.00 16.78 ? ? ? ? ? ? 265 GLU A N 1
+ATOM 1487 C CA . GLU A 1 188 ? 29.764 13.512 50.528 1.00 15.97 ? ? ? ? ? ? 265 GLU A CA 1
+ATOM 1488 C C . GLU A 1 188 ? 29.312 13.099 49.121 1.00 14.55 ? ? ? ? ? ? 265 GLU A C 1
+ATOM 1489 O O . GLU A 1 188 ? 30.133 12.656 48.322 1.00 16.12 ? ? ? ? ? ? 265 GLU A O 1
+ATOM 1490 C CB . GLU A 1 188 ? 30.220 12.252 51.304 1.00 15.32 ? ? ? ? ? ? 265 GLU A CB 1
+ATOM 1491 C CG . GLU A 1 188 ? 29.113 11.266 51.663 1.00 14.95 ? ? ? ? ? ? 265 GLU A CG 1
+ATOM 1492 C CD . GLU A 1 188 ? 28.493 11.550 53.009 1.00 13.55 ? ? ? ? ? ? 265 GLU A CD 1
+ATOM 1493 O OE1 . GLU A 1 188 ? 28.400 12.739 53.381 1.00 17.65 ? ? ? ? ? ? 265 GLU A OE1 1
+ATOM 1494 O OE2 . GLU A 1 188 ? 28.076 10.583 53.683 1.00 16.72 ? ? ? ? ? ? 265 GLU A OE2 1
+ATOM 1495 N N . SER A 1 189 ? 28.023 13.231 48.810 1.00 14.81 ? ? ? ? ? ? 266 SER A N 1
+ATOM 1496 C CA . SER A 1 189 ? 27.533 12.861 47.481 1.00 15.35 ? ? ? ? ? ? 266 SER A CA 1
+ATOM 1497 C C . SER A 1 189 ? 28.021 13.850 46.431 1.00 15.51 ? ? ? ? ? ? 266 SER A C 1
+ATOM 1498 O O . SER A 1 189 ? 28.011 13.562 45.229 1.00 15.61 ? ? ? ? ? ? 266 SER A O 1
+ATOM 1499 C CB . SER A 1 189 ? 26.002 12.831 47.452 1.00 14.20 ? ? ? ? ? ? 266 SER A CB 1
+ATOM 1500 O OG . SER A 1 189 ? 25.476 14.125 47.679 1.00 13.59 ? ? ? ? ? ? 266 SER A OG 1
+ATOM 1501 N N . LEU A 1 190 ? 28.428 15.027 46.891 1.00 15.77 ? ? ? ? ? ? 267 LEU A N 1
+ATOM 1502 C CA . LEU A 1 190 ? 28.924 16.066 46.005 1.00 16.22 ? ? ? ? ? ? 267 LEU A CA 1
+ATOM 1503 C C . LEU A 1 190 ? 30.445 16.153 45.997 1.00 18.24 ? ? ? ? ? ? 267 LEU A C 1
+ATOM 1504 O O . LEU A 1 190 ? 31.084 16.042 47.039 1.00 18.76 ? ? ? ? ? ? 267 LEU A O 1
+ATOM 1505 C CB . LEU A 1 190 ? 28.365 17.424 46.432 1.00 18.89 ? ? ? ? ? ? 267 LEU A CB 1
+ATOM 1506 C CG . LEU A 1 190 ? 26.854 17.598 46.307 1.00 18.02 ? ? ? ? ? ? 267 LEU A CG 1
+ATOM 1507 C CD1 . LEU A 1 190 ? 26.424 18.841 47.036 1.00 16.14 ? ? ? ? ? ? 267 LEU A CD1 1
+ATOM 1508 C CD2 . LEU A 1 190 ? 26.482 17.670 44.825 1.00 17.76 ? ? ? ? ? ? 267 LEU A CD2 1
+ATOM 1509 N N . LYS A 1 191 ? 31.013 16.357 44.812 1.00 16.16 ? ? ? ? ? ? 268 LYS A N 1
+ATOM 1510 C CA . LYS A 1 191 ? 32.453 16.535 44.654 1.00 19.39 ? ? ? ? ? ? 268 LYS A CA 1
+ATOM 1511 C C . LYS A 1 191 ? 32.648 17.952 44.104 1.00 16.23 ? ? ? ? ? ? 268 LYS A C 1
+ATOM 1512 O O . LYS A 1 191 ? 32.431 18.184 42.911 1.00 18.30 ? ? ? ? ? ? 268 LYS A O 1
+ATOM 1513 C CB . LYS A 1 191 ? 33.021 15.513 43.662 1.00 20.21 ? ? ? ? ? ? 268 LYS A CB 1
+ATOM 1514 C CG . LYS A 1 191 ? 34.508 15.711 43.338 1.00 19.55 ? ? ? ? ? ? 268 LYS A CG 1
+ATOM 1515 C CD . LYS A 1 191 ? 35.369 15.539 44.573 1.00 25.85 ? ? ? ? ? ? 268 LYS A CD 1
+ATOM 1516 C CE . LYS A 1 191 ? 36.862 15.674 44.260 1.00 30.68 ? ? ? ? ? ? 268 LYS A CE 1
+ATOM 1517 N NZ . LYS A 1 191 ? 37.669 15.441 45.489 1.00 27.22 ? ? ? ? ? ? 268 LYS A NZ 1
+ATOM 1518 N N . LEU A 1 192 ? 33.032 18.899 44.967 1.00 17.89 ? ? ? ? ? ? 269 LEU A N 1
+ATOM 1519 C CA . LEU A 1 192 ? 33.245 20.288 44.541 1.00 17.75 ? ? ? ? ? ? 269 LEU A CA 1
+ATOM 1520 C C . LEU A 1 192 ? 34.570 20.389 43.796 1.00 22.11 ? ? ? ? ? ? 269 LEU A C 1
+ATOM 1521 O O . LEU A 1 192 ? 35.626 20.044 44.329 1.00 21.06 ? ? ? ? ? ? 269 LEU A O 1
+ATOM 1522 C CB . LEU A 1 192 ? 33.196 21.252 45.742 1.00 19.52 ? ? ? ? ? ? 269 LEU A CB 1
+ATOM 1523 C CG . LEU A 1 192 ? 31.778 21.664 46.193 1.00 19.50 ? ? ? ? ? ? 269 LEU A CG 1
+ATOM 1524 C CD1 . LEU A 1 192 ? 30.961 20.436 46.535 1.00 20.13 ? ? ? ? ? ? 269 LEU A CD1 1
+ATOM 1525 C CD2 . LEU A 1 192 ? 31.851 22.604 47.386 1.00 23.13 ? ? ? ? ? ? 269 LEU A CD2 1
+ATOM 1526 N N . GLU A 1 193 ? 34.500 20.885 42.563 1.00 22.96 ? ? ? ? ? ? 270 GLU A N 1
+ATOM 1527 C CA . GLU A 1 193 ? 35.660 20.951 41.681 1.00 26.05 ? ? ? ? ? ? 270 GLU A CA 1
+ATOM 1528 C C . GLU A 1 193 ? 36.372 22.292 41.495 1.00 27.96 ? ? ? ? ? ? 270 GLU A C 1
+ATOM 1529 O O . GLU A 1 193 ? 37.578 22.383 41.715 1.00 27.83 ? ? ? ? ? ? 270 GLU A O 1
+ATOM 1530 C CB . GLU A 1 193 ? 35.231 20.404 40.321 1.00 25.67 ? ? ? ? ? ? 270 GLU A CB 1
+ATOM 1531 C CG . GLU A 1 193 ? 34.460 19.099 40.455 1.00 30.03 ? ? ? ? ? ? 270 GLU A CG 1
+ATOM 1532 C CD . GLU A 1 193 ? 33.713 18.706 39.193 1.00 29.93 ? ? ? ? ? ? 270 GLU A CD 1
+ATOM 1533 O OE1 . GLU A 1 193 ? 33.133 19.598 38.537 1.00 28.32 ? ? ? ? ? ? 270 GLU A OE1 1
+ATOM 1534 O OE2 . GLU A 1 193 ? 33.674 17.500 38.878 1.00 33.98 ? ? ? ? ? ? 270 GLU A OE2 1
+ATOM 1535 N N . LYS A 1 194 ? 35.640 23.318 41.062 1.00 30.80 ? ? ? ? ? ? 271 LYS A N 1
+ATOM 1536 C CA . LYS A 1 194 ? 36.230 24.641 40.837 1.00 29.56 ? ? ? ? ? ? 271 LYS A CA 1
+ATOM 1537 C C . LYS A 1 194 ? 35.264 25.738 41.257 1.00 30.67 ? ? ? ? ? ? 271 LYS A C 1
+ATOM 1538 O O . LYS A 1 194 ? 34.049 25.580 41.159 1.00 26.47 ? ? ? ? ? ? 271 LYS A O 1
+ATOM 1539 C CB . LYS A 1 194 ? 36.587 24.834 39.361 1.00 33.28 ? ? ? ? ? ? 271 LYS A CB 1
+ATOM 1540 C CG . LYS A 1 194 ? 35.393 24.843 38.424 1.00 37.28 ? ? ? ? ? ? 271 LYS A CG 1
+ATOM 1541 C CD . LYS A 1 194 ? 35.795 25.116 36.974 1.00 42.29 ? ? ? ? ? ? 271 LYS A CD 1
+ATOM 1542 C CE . LYS A 1 194 ? 34.567 25.114 36.061 1.00 44.20 ? ? ? ? ? ? 271 LYS A CE 1
+ATOM 1543 N NZ . LYS A 1 194 ? 34.888 25.332 34.621 1.00 46.47 ? ? ? ? ? ? 271 LYS A NZ 1
+ATOM 1544 N N . LYS A 1 195 ? 35.813 26.855 41.718 1.00 27.86 ? ? ? ? ? ? 272 LYS A N 1
+ATOM 1545 C CA . LYS A 1 195 ? 35.006 27.977 42.171 1.00 28.05 ? ? ? ? ? ? 272 LYS A CA 1
+ATOM 1546 C C . LYS A 1 195 ? 34.495 28.782 40.980 1.00 26.73 ? ? ? ? ? ? 272 LYS A C 1
+ATOM 1547 O O . LYS A 1 195 ? 35.279 29.232 40.147 1.00 23.84 ? ? ? ? ? ? 272 LYS A O 1
+ATOM 1548 C CB . LYS A 1 195 ? 35.848 28.852 43.108 1.00 29.50 ? ? ? ? ? ? 272 LYS A CB 1
+ATOM 1549 C CG . LYS A 1 195 ? 35.107 29.997 43.763 1.00 34.51 ? ? ? ? ? ? 272 LYS A CG 1
+ATOM 1550 C CD . LYS A 1 195 ? 36.015 30.736 44.731 1.00 33.91 ? ? ? ? ? ? 272 LYS A CD 1
+ATOM 1551 C CE . LYS A 1 195 ? 35.330 31.955 45.319 1.00 34.28 ? ? ? ? ? ? 272 LYS A CE 1
+ATOM 1552 N NZ . LYS A 1 195 ? 36.233 32.680 46.258 1.00 42.03 ? ? ? ? ? ? 272 LYS A NZ 1
+ATOM 1553 N N . LEU A 1 196 ? 33.176 28.949 40.898 1.00 24.01 ? ? ? ? ? ? 273 LEU A N 1
+ATOM 1554 C CA . LEU A 1 196 ? 32.558 29.694 39.802 1.00 23.10 ? ? ? ? ? ? 273 LEU A CA 1
+ATOM 1555 C C . LEU A 1 196 ? 32.368 31.171 40.123 1.00 24.28 ? ? ? ? ? ? 273 LEU A C 1
+ATOM 1556 O O . LEU A 1 196 ? 32.458 32.015 39.239 1.00 27.10 ? ? ? ? ? ? 273 LEU A O 1
+ATOM 1557 C CB . LEU A 1 196 ? 31.196 29.085 39.441 1.00 21.71 ? ? ? ? ? ? 273 LEU A CB 1
+ATOM 1558 C CG . LEU A 1 196 ? 31.220 27.655 38.908 1.00 23.39 ? ? ? ? ? ? 273 LEU A CG 1
+ATOM 1559 C CD1 . LEU A 1 196 ? 29.803 27.143 38.708 1.00 20.84 ? ? ? ? ? ? 273 LEU A CD1 1
+ATOM 1560 C CD2 . LEU A 1 196 ? 31.995 27.625 37.595 1.00 26.77 ? ? ? ? ? ? 273 LEU A CD2 1
+ATOM 1561 N N . GLY A 1 197 ? 32.092 31.483 41.383 1.00 25.25 ? ? ? ? ? ? 274 GLY A N 1
+ATOM 1562 C CA . GLY A 1 197 ? 31.882 32.869 41.753 1.00 28.97 ? ? ? ? ? ? 274 GLY A CA 1
+ATOM 1563 C C . GLY A 1 197 ? 31.738 33.041 43.249 1.00 34.27 ? ? ? ? ? ? 274 GLY A C 1
+ATOM 1564 O O . GLY A 1 197 ? 31.606 32.064 43.987 1.00 30.90 ? ? ? ? ? ? 274 GLY A O 1
+ATOM 1565 N N . ALA A 1 198 ? 31.771 34.285 43.708 1.00 35.74 ? ? ? ? ? ? 275 ALA A N 1
+ATOM 1566 C CA . ALA A 1 198 ? 31.642 34.549 45.131 1.00 39.92 ? ? ? ? ? ? 275 ALA A CA 1
+ATOM 1567 C C . ALA A 1 198 ? 30.370 35.323 45.427 1.00 42.67 ? ? ? ? ? ? 275 ALA A C 1
+ATOM 1568 O O . ALA A 1 198 ? 29.594 35.641 44.527 1.00 46.66 ? ? ? ? ? ? 275 ALA A O 1
+ATOM 1569 C CB . ALA A 1 198 ? 32.851 35.319 45.631 1.00 40.80 ? ? ? ? ? ? 275 ALA A CB 1
+ATOM 1570 N N . GLY A 1 199 ? 30.164 35.615 46.704 1.00 44.32 ? ? ? ? ? ? 276 GLY A N 1
+ATOM 1571 C CA . GLY A 1 199 ? 28.991 36.353 47.129 1.00 45.46 ? ? ? ? ? ? 276 GLY A CA 1
+ATOM 1572 C C . GLY A 1 199 ? 29.203 36.804 48.558 1.00 45.72 ? ? ? ? ? ? 276 GLY A C 1
+ATOM 1573 O O . GLY A 1 199 ? 30.140 36.350 49.213 1.00 47.06 ? ? ? ? ? ? 276 GLY A O 1
+ATOM 1574 N N . GLN A 1 200 ? 28.340 37.683 49.053 1.00 47.71 ? ? ? ? ? ? 277 GLN A N 1
+ATOM 1575 C CA . GLN A 1 200 ? 28.481 38.179 50.414 1.00 47.23 ? ? ? ? ? ? 277 GLN A CA 1
+ATOM 1576 C C . GLN A 1 200 ? 28.039 37.198 51.492 1.00 43.90 ? ? ? ? ? ? 277 GLN A C 1
+ATOM 1577 O O . GLN A 1 200 ? 28.413 37.347 52.655 1.00 43.95 ? ? ? ? ? ? 277 GLN A O 1
+ATOM 1578 C CB . GLN A 1 200 ? 27.722 39.490 50.568 1.00 52.57 ? ? ? ? ? ? 277 GLN A CB 1
+ATOM 1579 C CG . GLN A 1 200 ? 28.331 40.634 49.783 1.00 60.66 ? ? ? ? ? ? 277 GLN A CG 1
+ATOM 1580 C CD . GLN A 1 200 ? 27.492 41.888 49.866 1.00 65.22 ? ? ? ? ? ? 277 GLN A CD 1
+ATOM 1581 O OE1 . GLN A 1 200 ? 27.912 42.963 49.436 1.00 67.89 ? ? ? ? ? ? 277 GLN A OE1 1
+ATOM 1582 N NE2 . GLN A 1 200 ? 26.288 41.753 50.411 1.00 67.38 ? ? ? ? ? ? 277 GLN A NE2 1
+ATOM 1583 N N . PHE A 1 201 ? 27.247 36.199 51.119 1.00 40.10 ? ? ? ? ? ? 278 PHE A N 1
+ATOM 1584 C CA . PHE A 1 201 ? 26.791 35.216 52.097 1.00 35.61 ? ? ? ? ? ? 278 PHE A CA 1
+ATOM 1585 C C . PHE A 1 201 ? 27.155 33.786 51.723 1.00 35.34 ? ? ? ? ? ? 278 PHE A C 1
+ATOM 1586 O O . PHE A 1 201 ? 26.760 32.842 52.402 1.00 34.32 ? ? ? ? ? ? 278 PHE A O 1
+ATOM 1587 C CB . PHE A 1 201 ? 25.279 35.319 52.302 1.00 33.89 ? ? ? ? ? ? 278 PHE A CB 1
+ATOM 1588 C CG . PHE A 1 201 ? 24.837 36.636 52.856 1.00 30.71 ? ? ? ? ? ? 278 PHE A CG 1
+ATOM 1589 C CD1 . PHE A 1 201 ? 24.193 37.562 52.051 1.00 29.64 ? ? ? ? ? ? 278 PHE A CD1 1
+ATOM 1590 C CD2 . PHE A 1 201 ? 25.107 36.968 54.176 1.00 33.59 ? ? ? ? ? ? 278 PHE A CD2 1
+ATOM 1591 C CE1 . PHE A 1 201 ? 23.824 38.799 52.551 1.00 31.20 ? ? ? ? ? ? 278 PHE A CE1 1
+ATOM 1592 C CE2 . PHE A 1 201 ? 24.743 38.207 54.689 1.00 31.15 ? ? ? ? ? ? 278 PHE A CE2 1
+ATOM 1593 C CZ . PHE A 1 201 ? 24.102 39.123 53.877 1.00 31.75 ? ? ? ? ? ? 278 PHE A CZ 1
+ATOM 1594 N N . GLY A 1 202 ? 27.916 33.630 50.650 1.00 35.45 ? ? ? ? ? ? 279 GLY A N 1
+ATOM 1595 C CA . GLY A 1 202 ? 28.304 32.301 50.220 1.00 36.35 ? ? ? ? ? ? 279 GLY A CA 1
+ATOM 1596 C C . GLY A 1 202 ? 28.969 32.308 48.861 1.00 34.23 ? ? ? ? ? ? 279 GLY A C 1
+ATOM 1597 O O . GLY A 1 202 ? 28.911 33.301 48.134 1.00 37.46 ? ? ? ? ? ? 279 GLY A O 1
+ATOM 1598 N N . GLU A 1 203 ? 29.610 31.199 48.516 1.00 28.03 ? ? ? ? ? ? 280 GLU A N 1
+ATOM 1599 C CA . GLU A 1 203 ? 30.287 31.089 47.235 1.00 24.95 ? ? ? ? ? ? 280 GLU A CA 1
+ATOM 1600 C C . GLU A 1 203 ? 29.544 30.091 46.354 1.00 21.60 ? ? ? ? ? ? 280 GLU A C 1
+ATOM 1601 O O . GLU A 1 203 ? 28.675 29.356 46.825 1.00 21.98 ? ? ? ? ? ? 280 GLU A O 1
+ATOM 1602 C CB . GLU A 1 203 ? 31.716 30.592 47.431 1.00 27.29 ? ? ? ? ? ? 280 GLU A CB 1
+ATOM 1603 C CG . GLU A 1 203 ? 32.529 31.331 48.475 1.00 33.13 ? ? ? ? ? ? 280 GLU A CG 1
+ATOM 1604 C CD . GLU A 1 203 ? 34.007 30.992 48.366 1.00 37.03 ? ? ? ? ? ? 280 GLU A CD 1
+ATOM 1605 O OE1 . GLU A 1 203 ? 34.331 29.794 48.222 1.00 35.83 ? ? ? ? ? ? 280 GLU A OE1 1
+ATOM 1606 O OE2 . GLU A 1 203 ? 34.844 31.918 48.426 1.00 41.20 ? ? ? ? ? ? 280 GLU A OE2 1
+ATOM 1607 N N . VAL A 1 204 ? 29.895 30.059 45.077 1.00 20.09 ? ? ? ? ? ? 281 VAL A N 1
+ATOM 1608 C CA . VAL A 1 204 ? 29.265 29.130 44.150 1.00 21.15 ? ? ? ? ? ? 281 VAL A CA 1
+ATOM 1609 C C . VAL A 1 204 ? 30.351 28.292 43.501 1.00 21.80 ? ? ? ? ? ? 281 VAL A C 1
+ATOM 1610 O O . VAL A 1 204 ? 31.351 28.828 43.015 1.00 20.72 ? ? ? ? ? ? 281 VAL A O 1
+ATOM 1611 C CB . VAL A 1 204 ? 28.455 29.876 43.071 1.00 20.56 ? ? ? ? ? ? 281 VAL A CB 1
+ATOM 1612 C CG1 . VAL A 1 204 ? 27.849 28.880 42.090 1.00 19.19 ? ? ? ? ? ? 281 VAL A CG1 1
+ATOM 1613 C CG2 . VAL A 1 204 ? 27.343 30.681 43.740 1.00 20.18 ? ? ? ? ? ? 281 VAL A CG2 1
+ATOM 1614 N N . TRP A 1 205 ? 30.143 26.977 43.505 1.00 16.61 ? ? ? ? ? ? 282 TRP A N 1
+ATOM 1615 C CA . TRP A 1 205 ? 31.099 26.027 42.949 1.00 18.89 ? ? ? ? ? ? 282 TRP A CA 1
+ATOM 1616 C C . TRP A 1 205 ? 30.508 25.075 41.922 1.00 20.29 ? ? ? ? ? ? 282 TRP A C 1
+ATOM 1617 O O . TRP A 1 205 ? 29.321 24.754 41.964 1.00 17.22 ? ? ? ? ? ? 282 TRP A O 1
+ATOM 1618 C CB . TRP A 1 205 ? 31.709 25.163 44.063 1.00 18.56 ? ? ? ? ? ? 282 TRP A CB 1
+ATOM 1619 C CG . TRP A 1 205 ? 32.612 25.894 44.986 1.00 26.18 ? ? ? ? ? ? 282 TRP A CG 1
+ATOM 1620 C CD1 . TRP A 1 205 ? 32.258 26.788 45.953 1.00 28.48 ? ? ? ? ? ? 282 TRP A CD1 1
+ATOM 1621 C CD2 . TRP A 1 205 ? 34.039 25.833 44.995 1.00 26.22 ? ? ? ? ? ? 282 TRP A CD2 1
+ATOM 1622 N NE1 . TRP A 1 205 ? 33.381 27.293 46.563 1.00 29.55 ? ? ? ? ? ? 282 TRP A NE1 1
+ATOM 1623 C CE2 . TRP A 1 205 ? 34.491 26.721 45.990 1.00 28.26 ? ? ? ? ? ? 282 TRP A CE2 1
+ATOM 1624 C CE3 . TRP A 1 205 ? 34.988 25.114 44.250 1.00 33.53 ? ? ? ? ? ? 282 TRP A CE3 1
+ATOM 1625 C CZ2 . TRP A 1 205 ? 35.844 26.911 46.267 1.00 24.43 ? ? ? ? ? ? 282 TRP A CZ2 1
+ATOM 1626 C CZ3 . TRP A 1 205 ? 36.341 25.302 44.525 1.00 30.87 ? ? ? ? ? ? 282 TRP A CZ3 1
+ATOM 1627 C CH2 . TRP A 1 205 ? 36.753 26.196 45.525 1.00 30.88 ? ? ? ? ? ? 282 TRP A CH2 1
+ATOM 1628 N N . MET A 1 206 ? 31.364 24.623 41.011 1.00 17.89 ? ? ? ? ? ? 283 MET A N 1
+ATOM 1629 C CA . MET A 1 206 ? 31.004 23.646 39.989 1.00 19.38 ? ? ? ? ? ? 283 MET A CA 1
+ATOM 1630 C C . MET A 1 206 ? 31.231 22.326 40.719 1.00 19.61 ? ? ? ? ? ? 283 MET A C 1
+ATOM 1631 O O . MET A 1 206 ? 32.210 22.208 41.459 1.00 19.82 ? ? ? ? ? ? 283 MET A O 1
+ATOM 1632 C CB . MET A 1 206 ? 31.981 23.729 38.814 1.00 24.49 ? ? ? ? ? ? 283 MET A CB 1
+ATOM 1633 C CG . MET A 1 206 ? 31.689 22.806 37.639 1.00 34.44 ? ? ? ? ? ? 283 MET A CG 1
+ATOM 1634 S SD . MET A 1 206 ? 30.316 23.395 36.627 1.00 47.43 ? ? ? ? ? ? 283 MET A SD 1
+ATOM 1635 C CE . MET A 1 206 ? 28.982 23.144 37.693 1.00 44.86 ? ? ? ? ? ? 283 MET A CE 1
+ATOM 1636 N N . ALA A 1 207 ? 30.354 21.342 40.526 1.00 15.62 ? ? ? ? ? ? 284 ALA A N 1
+ATOM 1637 C CA . ALA A 1 207 ? 30.523 20.056 41.201 1.00 16.55 ? ? ? ? ? ? 284 ALA A CA 1
+ATOM 1638 C C . ALA A 1 207 ? 29.831 18.914 40.476 1.00 15.37 ? ? ? ? ? ? 284 ALA A C 1
+ATOM 1639 O O . ALA A 1 207 ? 29.069 19.128 39.526 1.00 16.93 ? ? ? ? ? ? 284 ALA A O 1
+ATOM 1640 C CB . ALA A 1 207 ? 29.990 20.139 42.628 1.00 17.36 ? ? ? ? ? ? 284 ALA A CB 1
+ATOM 1641 N N . THR A 1 208 ? 30.111 17.700 40.937 1.00 15.46 ? ? ? ? ? ? 285 THR A N 1
+ATOM 1642 C CA . THR A 1 208 ? 29.501 16.505 40.383 1.00 17.26 ? ? ? ? ? ? 285 THR A CA 1
+ATOM 1643 C C . THR A 1 208 ? 28.832 15.725 41.506 1.00 19.09 ? ? ? ? ? ? 285 THR A C 1
+ATOM 1644 O O . THR A 1 208 ? 29.442 15.450 42.546 1.00 16.62 ? ? ? ? ? ? 285 THR A O 1
+ATOM 1645 C CB . THR A 1 208 ? 30.532 15.606 39.701 1.00 19.54 ? ? ? ? ? ? 285 THR A CB 1
+ATOM 1646 O OG1 . THR A 1 208 ? 31.145 16.322 38.623 1.00 21.75 ? ? ? ? ? ? 285 THR A OG1 1
+ATOM 1647 C CG2 . THR A 1 208 ? 29.866 14.353 39.163 1.00 21.75 ? ? ? ? ? ? 285 THR A CG2 1
+ATOM 1648 N N . TYR A 1 209 ? 27.564 15.397 41.286 1.00 15.80 ? ? ? ? ? ? 286 TYR A N 1
+ATOM 1649 C CA . TYR A 1 209 ? 26.756 14.638 42.230 1.00 17.32 ? ? ? ? ? ? 286 TYR A CA 1
+ATOM 1650 C C . TYR A 1 209 ? 26.873 13.146 41.912 1.00 20.10 ? ? ? ? ? ? 286 TYR A C 1
+ATOM 1651 O O . TYR A 1 209 ? 26.578 12.723 40.792 1.00 18.25 ? ? ? ? ? ? 286 TYR A O 1
+ATOM 1652 C CB . TYR A 1 209 ? 25.291 15.073 42.115 1.00 16.09 ? ? ? ? ? ? 286 TYR A CB 1
+ATOM 1653 C CG . TYR A 1 209 ? 24.333 14.251 42.941 1.00 16.93 ? ? ? ? ? ? 286 TYR A CG 1
+ATOM 1654 C CD1 . TYR A 1 209 ? 24.341 14.316 44.333 1.00 17.13 ? ? ? ? ? ? 286 TYR A CD1 1
+ATOM 1655 C CD2 . TYR A 1 209 ? 23.415 13.399 42.327 1.00 15.98 ? ? ? ? ? ? 286 TYR A CD2 1
+ATOM 1656 C CE1 . TYR A 1 209 ? 23.450 13.555 45.093 1.00 20.89 ? ? ? ? ? ? 286 TYR A CE1 1
+ATOM 1657 C CE2 . TYR A 1 209 ? 22.525 12.636 43.075 1.00 19.52 ? ? ? ? ? ? 286 TYR A CE2 1
+ATOM 1658 C CZ . TYR A 1 209 ? 22.546 12.718 44.453 1.00 20.36 ? ? ? ? ? ? 286 TYR A CZ 1
+ATOM 1659 O OH . TYR A 1 209 ? 21.665 11.960 45.187 1.00 20.35 ? ? ? ? ? ? 286 TYR A OH 1
+ATOM 1660 N N . ASN A 1 210 ? 27.282 12.362 42.909 1.00 20.84 ? ? ? ? ? ? 287 ASN A N 1
+ATOM 1661 C CA . ASN A 1 210 ? 27.462 10.915 42.780 1.00 19.92 ? ? ? ? ? ? 287 ASN A CA 1
+ATOM 1662 C C . ASN A 1 210 ? 28.086 10.449 41.473 1.00 21.39 ? ? ? ? ? ? 287 ASN A C 1
+ATOM 1663 O O . ASN A 1 210 ? 27.630 9.486 40.852 1.00 19.31 ? ? ? ? ? ? 287 ASN A O 1
+ATOM 1664 C CB . ASN A 1 210 ? 26.149 10.156 43.032 1.00 17.29 ? ? ? ? ? ? 287 ASN A CB 1
+ATOM 1665 C CG . ASN A 1 210 ? 25.775 10.111 44.510 1.00 21.43 ? ? ? ? ? ? 287 ASN A CG 1
+ATOM 1666 O OD1 . ASN A 1 210 ? 26.646 10.137 45.380 1.00 19.80 ? ? ? ? ? ? 287 ASN A OD1 1
+ATOM 1667 N ND2 . ASN A 1 210 ? 24.484 10.005 44.798 1.00 22.22 ? ? ? ? ? ? 287 ASN A ND2 1
+ATOM 1668 N N . LYS A 1 211 ? 29.137 11.152 41.073 1.00 21.94 ? ? ? ? ? ? 288 LYS A N 1
+ATOM 1669 C CA . LYS A 1 211 ? 29.891 10.837 39.871 1.00 24.12 ? ? ? ? ? ? 288 LYS A CA 1
+ATOM 1670 C C . LYS A 1 211 ? 29.096 10.749 38.571 1.00 26.01 ? ? ? ? ? ? 288 LYS A C 1
+ATOM 1671 O O . LYS A 1 211 ? 29.623 10.268 37.568 1.00 25.01 ? ? ? ? ? ? 288 LYS A O 1
+ATOM 1672 C CB . LYS A 1 211 ? 30.662 9.528 40.093 1.00 28.88 ? ? ? ? ? ? 288 LYS A CB 1
+ATOM 1673 C CG . LYS A 1 211 ? 31.693 9.611 41.226 1.00 33.29 ? ? ? ? ? ? 288 LYS A CG 1
+ATOM 1674 C CD . LYS A 1 211 ? 32.405 8.274 41.488 1.00 38.07 ? ? ? ? ? ? 288 LYS A CD 1
+ATOM 1675 C CE . LYS A 1 211 ? 31.457 7.234 42.084 1.00 43.57 ? ? ? ? ? ? 288 LYS A CE 1
+ATOM 1676 N NZ . LYS A 1 211 ? 32.132 5.926 42.376 1.00 47.13 ? ? ? ? ? ? 288 LYS A NZ 1
+ATOM 1677 N N . HIS A 1 212 ? 27.846 11.210 38.559 1.00 23.86 ? ? ? ? ? ? 289 HIS A N 1
+ATOM 1678 C CA . HIS A 1 212 ? 27.074 11.126 37.320 1.00 25.46 ? ? ? ? ? ? 289 HIS A CA 1
+ATOM 1679 C C . HIS A 1 212 ? 26.414 12.416 36.829 1.00 26.03 ? ? ? ? ? ? 289 HIS A C 1
+ATOM 1680 O O . HIS A 1 212 ? 26.077 12.528 35.648 1.00 23.25 ? ? ? ? ? ? 289 HIS A O 1
+ATOM 1681 C CB . HIS A 1 212 ? 26.023 10.002 37.412 1.00 23.38 ? ? ? ? ? ? 289 HIS A CB 1
+ATOM 1682 C CG . HIS A 1 212 ? 24.984 10.207 38.470 1.00 22.09 ? ? ? ? ? ? 289 HIS A CG 1
+ATOM 1683 N ND1 . HIS A 1 212 ? 24.111 11.273 38.463 1.00 24.27 ? ? ? ? ? ? 289 HIS A ND1 1
+ATOM 1684 C CD2 . HIS A 1 212 ? 24.666 9.470 39.561 1.00 23.52 ? ? ? ? ? ? 289 HIS A CD2 1
+ATOM 1685 C CE1 . HIS A 1 212 ? 23.300 11.185 39.504 1.00 21.80 ? ? ? ? ? ? 289 HIS A CE1 1
+ATOM 1686 N NE2 . HIS A 1 212 ? 23.618 10.100 40.186 1.00 22.01 ? ? ? ? ? ? 289 HIS A NE2 1
+ATOM 1687 N N . THR A 1 213 ? 26.239 13.396 37.709 1.00 21.29 ? ? ? ? ? ? 290 THR A N 1
+ATOM 1688 C CA . THR A 1 213 ? 25.600 14.639 37.291 1.00 19.67 ? ? ? ? ? ? 290 THR A CA 1
+ATOM 1689 C C . THR A 1 213 ? 26.317 15.926 37.682 1.00 21.48 ? ? ? ? ? ? 290 THR A C 1
+ATOM 1690 O O . THR A 1 213 ? 26.592 16.169 38.855 1.00 16.42 ? ? ? ? ? ? 290 THR A O 1
+ATOM 1691 C CB . THR A 1 213 ? 24.166 14.733 37.835 1.00 18.66 ? ? ? ? ? ? 290 THR A CB 1
+ATOM 1692 O OG1 . THR A 1 213 ? 23.423 13.582 37.421 1.00 19.98 ? ? ? ? ? ? 290 THR A OG1 1
+ATOM 1693 C CG2 . THR A 1 213 ? 23.478 15.997 37.313 1.00 21.70 ? ? ? ? ? ? 290 THR A CG2 1
+ATOM 1694 N N . LYS A 1 214 ? 26.583 16.756 36.677 1.00 21.81 ? ? ? ? ? ? 291 LYS A N 1
+ATOM 1695 C CA . LYS A 1 214 ? 27.230 18.052 36.859 1.00 23.05 ? ? ? ? ? ? 291 LYS A CA 1
+ATOM 1696 C C . LYS A 1 214 ? 26.191 19.055 37.381 1.00 22.70 ? ? ? ? ? ? 291 LYS A C 1
+ATOM 1697 O O . LYS A 1 214 ? 25.098 19.178 36.821 1.00 18.70 ? ? ? ? ? ? 291 LYS A O 1
+ATOM 1698 C CB . LYS A 1 214 ? 27.796 18.521 35.518 1.00 27.63 ? ? ? ? ? ? 291 LYS A CB 1
+ATOM 1699 C CG . LYS A 1 214 ? 28.440 19.894 35.521 1.00 36.74 ? ? ? ? ? ? 291 LYS A CG 1
+ATOM 1700 C CD . LYS A 1 214 ? 29.124 20.142 34.182 1.00 41.65 ? ? ? ? ? ? 291 LYS A CD 1
+ATOM 1701 C CE . LYS A 1 214 ? 29.847 21.473 34.142 1.00 41.56 ? ? ? ? ? ? 291 LYS A CE 1
+ATOM 1702 N NZ . LYS A 1 214 ? 30.616 21.637 32.872 1.00 45.80 ? ? ? ? ? ? 291 LYS A NZ 1
+ATOM 1703 N N . VAL A 1 215 ? 26.539 19.761 38.454 1.00 16.95 ? ? ? ? ? ? 292 VAL A N 1
+ATOM 1704 C CA . VAL A 1 215 ? 25.638 20.732 39.067 1.00 15.95 ? ? ? ? ? ? 292 VAL A CA 1
+ATOM 1705 C C . VAL A 1 215 ? 26.424 21.923 39.592 1.00 16.92 ? ? ? ? ? ? 292 VAL A C 1
+ATOM 1706 O O . VAL A 1 215 ? 27.656 21.915 39.601 1.00 16.75 ? ? ? ? ? ? 292 VAL A O 1
+ATOM 1707 C CB . VAL A 1 215 ? 24.892 20.105 40.273 1.00 17.22 ? ? ? ? ? ? 292 VAL A CB 1
+ATOM 1708 C CG1 . VAL A 1 215 ? 24.088 18.892 39.826 1.00 12.92 ? ? ? ? ? ? 292 VAL A CG1 1
+ATOM 1709 C CG2 . VAL A 1 215 ? 25.903 19.677 41.340 1.00 15.42 ? ? ? ? ? ? 292 VAL A CG2 1
+ATOM 1710 N N . ALA A 1 216 ? 25.704 22.959 40.003 1.00 16.84 ? ? ? ? ? ? 293 ALA A N 1
+ATOM 1711 C CA . ALA A 1 216 ? 26.329 24.131 40.595 1.00 15.61 ? ? ? ? ? ? 293 ALA A CA 1
+ATOM 1712 C C . ALA A 1 216 ? 25.932 23.999 42.060 1.00 17.91 ? ? ? ? ? ? 293 ALA A C 1
+ATOM 1713 O O . ALA A 1 216 ? 24.859 23.482 42.366 1.00 18.91 ? ? ? ? ? ? 293 ALA A O 1
+ATOM 1714 C CB . ALA A 1 216 ? 25.754 25.408 40.006 1.00 22.40 ? ? ? ? ? ? 293 ALA A CB 1
+ATOM 1715 N N . VAL A 1 217 ? 26.794 24.443 42.962 1.00 15.28 ? ? ? ? ? ? 294 VAL A N 1
+ATOM 1716 C CA . VAL A 1 217 ? 26.491 24.345 44.379 1.00 15.17 ? ? ? ? ? ? 294 VAL A CA 1
+ATOM 1717 C C . VAL A 1 217 ? 26.783 25.671 45.050 1.00 18.56 ? ? ? ? ? ? 294 VAL A C 1
+ATOM 1718 O O . VAL A 1 217 ? 27.906 26.178 44.972 1.00 19.42 ? ? ? ? ? ? 294 VAL A O 1
+ATOM 1719 C CB . VAL A 1 217 ? 27.353 23.256 45.080 1.00 19.83 ? ? ? ? ? ? 294 VAL A CB 1
+ATOM 1720 C CG1 . VAL A 1 217 ? 26.989 23.171 46.570 1.00 10.68 ? ? ? ? ? ? 294 VAL A CG1 1
+ATOM 1721 C CG2 . VAL A 1 217 ? 27.152 21.905 44.403 1.00 17.98 ? ? ? ? ? ? 294 VAL A CG2 1
+ATOM 1722 N N . LYS A 1 218 ? 25.770 26.247 45.687 1.00 16.57 ? ? ? ? ? ? 295 LYS A N 1
+ATOM 1723 C CA . LYS A 1 218 ? 25.976 27.482 46.410 1.00 14.09 ? ? ? ? ? ? 295 LYS A CA 1
+ATOM 1724 C C . LYS A 1 218 ? 26.196 27.074 47.855 1.00 16.40 ? ? ? ? ? ? 295 LYS A C 1
+ATOM 1725 O O . LYS A 1 218 ? 25.386 26.345 48.428 1.00 17.56 ? ? ? ? ? ? 295 LYS A O 1
+ATOM 1726 C CB . LYS A 1 218 ? 24.766 28.423 46.312 1.00 15.69 ? ? ? ? ? ? 295 LYS A CB 1
+ATOM 1727 C CG . LYS A 1 218 ? 24.929 29.650 47.214 1.00 15.70 ? ? ? ? ? ? 295 LYS A CG 1
+ATOM 1728 C CD . LYS A 1 218 ? 23.906 30.761 46.954 1.00 21.40 ? ? ? ? ? ? 295 LYS A CD 1
+ATOM 1729 C CE . LYS A 1 218 ? 24.187 31.474 45.642 1.00 19.58 ? ? ? ? ? ? 295 LYS A CE 1
+ATOM 1730 N NZ . LYS A 1 218 ? 23.423 32.757 45.496 1.00 21.14 ? ? ? ? ? ? 295 LYS A NZ 1
+ATOM 1731 N N . THR A 1 219 ? 27.309 27.523 48.425 1.00 16.56 ? ? ? ? ? ? 296 THR A N 1
+ATOM 1732 C CA . THR A 1 219 ? 27.661 27.224 49.811 1.00 17.12 ? ? ? ? ? ? 296 THR A CA 1
+ATOM 1733 C C . THR A 1 219 ? 27.437 28.495 50.633 1.00 19.27 ? ? ? ? ? ? 296 THR A C 1
+ATOM 1734 O O . THR A 1 219 ? 28.008 29.535 50.325 1.00 24.33 ? ? ? ? ? ? 296 THR A O 1
+ATOM 1735 C CB . THR A 1 219 ? 29.148 26.854 49.934 1.00 19.19 ? ? ? ? ? ? 296 THR A CB 1
+ATOM 1736 O OG1 . THR A 1 219 ? 29.940 27.991 49.581 1.00 20.93 ? ? ? ? ? ? 296 THR A OG1 1
+ATOM 1737 C CG2 . THR A 1 219 ? 29.504 25.711 48.993 1.00 18.01 ? ? ? ? ? ? 296 THR A CG2 1
+ATOM 1738 N N . MET A 1 220 ? 26.619 28.413 51.676 1.00 21.45 ? ? ? ? ? ? 297 MET A N 1
+ATOM 1739 C CA . MET A 1 220 ? 26.330 29.575 52.519 1.00 20.71 ? ? ? ? ? ? 297 MET A CA 1
+ATOM 1740 C C . MET A 1 220 ? 27.244 29.550 53.743 1.00 22.11 ? ? ? ? ? ? 297 MET A C 1
+ATOM 1741 O O . MET A 1 220 ? 27.444 28.496 54.342 1.00 17.88 ? ? ? ? ? ? 297 MET A O 1
+ATOM 1742 C CB . MET A 1 220 ? 24.872 29.526 52.975 1.00 22.26 ? ? ? ? ? ? 297 MET A CB 1
+ATOM 1743 C CG . MET A 1 220 ? 23.869 29.459 51.837 1.00 25.98 ? ? ? ? ? ? 297 MET A CG 1
+ATOM 1744 S SD . MET A 1 220 ? 23.930 30.915 50.811 1.00 27.90 ? ? ? ? ? ? 297 MET A SD 1
+ATOM 1745 C CE . MET A 1 220 ? 23.350 32.176 51.937 1.00 29.86 ? ? ? ? ? ? 297 MET A CE 1
+ATOM 1746 N N . LYS A 1 221 ? 27.796 30.697 54.123 1.00 23.01 ? ? ? ? ? ? 298 LYS A N 1
+ATOM 1747 C CA . LYS A 1 221 ? 28.672 30.734 55.290 1.00 25.03 ? ? ? ? ? ? 298 LYS A CA 1
+ATOM 1748 C C . LYS A 1 221 ? 27.878 30.422 56.552 1.00 23.38 ? ? ? ? ? ? 298 LYS A C 1
+ATOM 1749 O O . LYS A 1 221 ? 26.708 30.788 56.675 1.00 19.30 ? ? ? ? ? ? 298 LYS A O 1
+ATOM 1750 C CB . LYS A 1 221 ? 29.365 32.098 55.407 1.00 29.74 ? ? ? ? ? ? 298 LYS A CB 1
+ATOM 1751 C CG . LYS A 1 221 ? 30.232 32.429 54.186 1.00 38.20 ? ? ? ? ? ? 298 LYS A CG 1
+ATOM 1752 C CD . LYS A 1 221 ? 31.126 33.663 54.367 1.00 44.02 ? ? ? ? ? ? 298 LYS A CD 1
+ATOM 1753 C CE . LYS A 1 221 ? 30.350 34.927 54.715 1.00 46.23 ? ? ? ? ? ? 298 LYS A CE 1
+ATOM 1754 N NZ . LYS A 1 221 ? 29.801 34.895 56.103 1.00 48.02 ? ? ? ? ? ? 298 LYS A NZ 1
+ATOM 1755 N N . PRO A 1 222 ? 28.507 29.731 57.513 1.00 24.20 ? ? ? ? ? ? 299 PRO A N 1
+ATOM 1756 C CA . PRO A 1 222 ? 27.826 29.378 58.760 1.00 23.08 ? ? ? ? ? ? 299 PRO A CA 1
+ATOM 1757 C C . PRO A 1 222 ? 27.273 30.618 59.438 1.00 22.15 ? ? ? ? ? ? 299 PRO A C 1
+ATOM 1758 O O . PRO A 1 222 ? 27.930 31.658 59.459 1.00 18.21 ? ? ? ? ? ? 299 PRO A O 1
+ATOM 1759 C CB . PRO A 1 222 ? 28.938 28.711 59.568 1.00 26.84 ? ? ? ? ? ? 299 PRO A CB 1
+ATOM 1760 C CG . PRO A 1 222 ? 29.768 28.067 58.473 1.00 24.26 ? ? ? ? ? ? 299 PRO A CG 1
+ATOM 1761 C CD . PRO A 1 222 ? 29.899 29.255 57.553 1.00 24.19 ? ? ? ? ? ? 299 PRO A CD 1
+ATOM 1762 N N . GLY A 1 223 ? 26.064 30.504 59.979 1.00 21.02 ? ? ? ? ? ? 300 GLY A N 1
+ATOM 1763 C CA . GLY A 1 223 ? 25.441 31.631 60.651 1.00 26.81 ? ? ? ? ? ? 300 GLY A CA 1
+ATOM 1764 C C . GLY A 1 223 ? 24.791 32.647 59.723 1.00 27.28 ? ? ? ? ? ? 300 GLY A C 1
+ATOM 1765 O O . GLY A 1 223 ? 24.178 33.602 60.193 1.00 29.47 ? ? ? ? ? ? 300 GLY A O 1
+ATOM 1766 N N . SER A 1 224 ? 24.910 32.445 58.412 1.00 28.40 ? ? ? ? ? ? 301 SER A N 1
+ATOM 1767 C CA . SER A 1 224 ? 24.334 33.373 57.434 1.00 28.18 ? ? ? ? ? ? 301 SER A CA 1
+ATOM 1768 C C . SER A 1 224 ? 22.823 33.256 57.361 1.00 30.06 ? ? ? ? ? ? 301 SER A C 1
+ATOM 1769 O O . SER A 1 224 ? 22.147 34.151 56.857 1.00 28.89 ? ? ? ? ? ? 301 SER A O 1
+ATOM 1770 C CB . SER A 1 224 ? 24.900 33.112 56.042 1.00 27.74 ? ? ? ? ? ? 301 SER A CB 1
+ATOM 1771 O OG . SER A 1 224 ? 24.522 31.821 55.602 1.00 24.01 ? ? ? ? ? ? 301 SER A OG 1
+ATOM 1772 N N . MET A 1 225 ? 22.290 32.139 57.832 1.00 29.67 ? ? ? ? ? ? 302 MET A N 1
+ATOM 1773 C CA . MET A 1 225 ? 20.851 31.967 57.818 1.00 32.30 ? ? ? ? ? ? 302 MET A CA 1
+ATOM 1774 C C . MET A 1 225 ? 20.357 30.968 58.836 1.00 30.22 ? ? ? ? ? ? 302 MET A C 1
+ATOM 1775 O O . MET A 1 225 ? 21.128 30.156 59.340 1.00 26.15 ? ? ? ? ? ? 302 MET A O 1
+ATOM 1776 C CB . MET A 1 225 ? 20.355 31.597 56.403 1.00 35.66 ? ? ? ? ? ? 302 MET A CB 1
+ATOM 1777 C CG . MET A 1 225 ? 21.072 30.480 55.665 1.00 34.39 ? ? ? ? ? ? 302 MET A CG 1
+ATOM 1778 S SD . MET A 1 225 ? 20.332 30.204 53.995 1.00 30.34 ? ? ? ? ? ? 302 MET A SD 1
+ATOM 1779 C CE . MET A 1 225 ? 20.425 31.833 53.336 1.00 36.64 ? ? ? ? ? ? 302 MET A CE 1
+ATOM 1780 N N . SER A 1 226 ? 19.073 31.065 59.170 1.00 32.27 ? ? ? ? ? ? 303 SER A N 1
+ATOM 1781 C CA . SER A 1 226 ? 18.451 30.139 60.113 1.00 32.44 ? ? ? ? ? ? 303 SER A CA 1
+ATOM 1782 C C . SER A 1 226 ? 18.314 28.820 59.372 1.00 33.44 ? ? ? ? ? ? 303 SER A C 1
+ATOM 1783 O O . SER A 1 226 ? 17.629 28.750 58.351 1.00 34.50 ? ? ? ? ? ? 303 SER A O 1
+ATOM 1784 C CB . SER A 1 226 ? 17.058 30.630 60.534 1.00 35.82 ? ? ? ? ? ? 303 SER A CB 1
+ATOM 1785 O OG . SER A 1 226 ? 16.374 29.649 61.310 1.00 36.23 ? ? ? ? ? ? 303 SER A OG 1
+ATOM 1786 N N . VAL A 1 227 ? 18.960 27.778 59.878 1.00 29.97 ? ? ? ? ? ? 304 VAL A N 1
+ATOM 1787 C CA . VAL A 1 227 ? 18.898 26.483 59.223 1.00 30.05 ? ? ? ? ? ? 304 VAL A CA 1
+ATOM 1788 C C . VAL A 1 227 ? 17.470 25.967 59.092 1.00 31.04 ? ? ? ? ? ? 304 VAL A C 1
+ATOM 1789 O O . VAL A 1 227 ? 17.069 25.503 58.024 1.00 27.91 ? ? ? ? ? ? 304 VAL A O 1
+ATOM 1790 C CB . VAL A 1 227 ? 19.740 25.441 59.972 1.00 28.52 ? ? ? ? ? ? 304 VAL A CB 1
+ATOM 1791 C CG1 . VAL A 1 227 ? 19.599 24.092 59.306 1.00 30.66 ? ? ? ? ? ? 304 VAL A CG1 1
+ATOM 1792 C CG2 . VAL A 1 227 ? 21.198 25.872 59.986 1.00 33.44 ? ? ? ? ? ? 304 VAL A CG2 1
+ATOM 1793 N N . GLU A 1 228 ? 16.699 26.053 60.170 1.00 28.84 ? ? ? ? ? ? 305 GLU A N 1
+ATOM 1794 C CA . GLU A 1 228 ? 15.324 25.575 60.138 1.00 28.78 ? ? ? ? ? ? 305 GLU A CA 1
+ATOM 1795 C C . GLU A 1 228 ? 14.471 26.385 59.168 1.00 22.78 ? ? ? ? ? ? 305 GLU A C 1
+ATOM 1796 O O . GLU A 1 228 ? 13.735 25.821 58.362 1.00 23.91 ? ? ? ? ? ? 305 GLU A O 1
+ATOM 1797 C CB . GLU A 1 228 ? 14.704 25.641 61.535 1.00 36.24 ? ? ? ? ? ? 305 GLU A CB 1
+ATOM 1798 C CG . GLU A 1 228 ? 15.481 24.887 62.598 1.00 46.60 ? ? ? ? ? ? 305 GLU A CG 1
+ATOM 1799 C CD . GLU A 1 228 ? 14.789 24.921 63.949 1.00 53.26 ? ? ? ? ? ? 305 GLU A CD 1
+ATOM 1800 O OE1 . GLU A 1 228 ? 14.510 26.032 64.456 1.00 57.10 ? ? ? ? ? ? 305 GLU A OE1 1
+ATOM 1801 O OE2 . GLU A 1 228 ? 14.524 23.833 64.503 1.00 57.88 ? ? ? ? ? ? 305 GLU A OE2 1
+ATOM 1802 N N . ALA A 1 229 ? 14.576 27.707 59.242 1.00 18.60 ? ? ? ? ? ? 306 ALA A N 1
+ATOM 1803 C CA . ALA A 1 229 ? 13.794 28.572 58.374 1.00 18.36 ? ? ? ? ? ? 306 ALA A CA 1
+ATOM 1804 C C . ALA A 1 229 ? 14.191 28.385 56.913 1.00 19.43 ? ? ? ? ? ? 306 ALA A C 1
+ATOM 1805 O O . ALA A 1 229 ? 13.336 28.392 56.030 1.00 15.23 ? ? ? ? ? ? 306 ALA A O 1
+ATOM 1806 C CB . ALA A 1 229 ? 13.962 30.022 58.795 1.00 19.81 ? ? ? ? ? ? 306 ALA A CB 1
+ATOM 1807 N N . PHE A 1 230 ? 15.485 28.218 56.659 1.00 18.17 ? ? ? ? ? ? 307 PHE A N 1
+ATOM 1808 C CA . PHE A 1 230 ? 15.952 28.006 55.293 1.00 17.62 ? ? ? ? ? ? 307 PHE A CA 1
+ATOM 1809 C C . PHE A 1 230 ? 15.246 26.798 54.693 1.00 19.11 ? ? ? ? ? ? 307 PHE A C 1
+ATOM 1810 O O . PHE A 1 230 ? 14.660 26.885 53.619 1.00 19.63 ? ? ? ? ? ? 307 PHE A O 1
+ATOM 1811 C CB . PHE A 1 230 ? 17.462 27.751 55.250 1.00 17.22 ? ? ? ? ? ? 307 PHE A CB 1
+ATOM 1812 C CG . PHE A 1 230 ? 17.922 27.144 53.954 1.00 17.07 ? ? ? ? ? ? 307 PHE A CG 1
+ATOM 1813 C CD1 . PHE A 1 230 ? 17.917 27.886 52.783 1.00 17.22 ? ? ? ? ? ? 307 PHE A CD1 1
+ATOM 1814 C CD2 . PHE A 1 230 ? 18.274 25.800 53.893 1.00 18.01 ? ? ? ? ? ? 307 PHE A CD2 1
+ATOM 1815 C CE1 . PHE A 1 230 ? 18.254 27.291 51.558 1.00 19.22 ? ? ? ? ? ? 307 PHE A CE1 1
+ATOM 1816 C CE2 . PHE A 1 230 ? 18.610 25.195 52.683 1.00 14.62 ? ? ? ? ? ? 307 PHE A CE2 1
+ATOM 1817 C CZ . PHE A 1 230 ? 18.599 25.946 51.513 1.00 19.18 ? ? ? ? ? ? 307 PHE A CZ 1
+ATOM 1818 N N . LEU A 1 231 ? 15.303 25.673 55.400 1.00 17.92 ? ? ? ? ? ? 308 LEU A N 1
+ATOM 1819 C CA . LEU A 1 231 ? 14.686 24.435 54.928 1.00 19.22 ? ? ? ? ? ? 308 LEU A CA 1
+ATOM 1820 C C . LEU A 1 231 ? 13.220 24.603 54.554 1.00 20.42 ? ? ? ? ? ? 308 LEU A C 1
+ATOM 1821 O O . LEU A 1 231 ? 12.774 24.102 53.523 1.00 19.64 ? ? ? ? ? ? 308 LEU A O 1
+ATOM 1822 C CB . LEU A 1 231 ? 14.821 23.342 55.990 1.00 24.73 ? ? ? ? ? ? 308 LEU A CB 1
+ATOM 1823 C CG . LEU A 1 231 ? 16.264 22.992 56.383 1.00 32.54 ? ? ? ? ? ? 308 LEU A CG 1
+ATOM 1824 C CD1 . LEU A 1 231 ? 16.269 22.001 57.548 1.00 32.15 ? ? ? ? ? ? 308 LEU A CD1 1
+ATOM 1825 C CD2 . LEU A 1 231 ? 16.998 22.423 55.177 1.00 31.29 ? ? ? ? ? ? 308 LEU A CD2 1
+ATOM 1826 N N . ALA A 1 232 ? 12.471 25.302 55.396 1.00 18.53 ? ? ? ? ? ? 309 ALA A N 1
+ATOM 1827 C CA . ALA A 1 232 ? 11.055 25.529 55.132 1.00 20.29 ? ? ? ? ? ? 309 ALA A CA 1
+ATOM 1828 C C . ALA A 1 232 ? 10.871 26.314 53.831 1.00 19.53 ? ? ? ? ? ? 309 ALA A C 1
+ATOM 1829 O O . ALA A 1 232 ? 10.014 25.995 53.005 1.00 21.32 ? ? ? ? ? ? 309 ALA A O 1
+ATOM 1830 C CB . ALA A 1 232 ? 10.425 26.289 56.307 1.00 19.54 ? ? ? ? ? ? 309 ALA A CB 1
+ATOM 1831 N N . GLU A 1 233 ? 11.695 27.337 53.649 1.00 18.24 ? ? ? ? ? ? 310 GLU A N 1
+ATOM 1832 C CA . GLU A 1 233 ? 11.630 28.189 52.465 1.00 18.02 ? ? ? ? ? ? 310 GLU A CA 1
+ATOM 1833 C C . GLU A 1 233 ? 12.096 27.417 51.223 1.00 18.17 ? ? ? ? ? ? 310 GLU A C 1
+ATOM 1834 O O . GLU A 1 233 ? 11.519 27.538 50.139 1.00 15.81 ? ? ? ? ? ? 310 GLU A O 1
+ATOM 1835 C CB . GLU A 1 233 ? 12.511 29.415 52.697 1.00 24.52 ? ? ? ? ? ? 310 GLU A CB 1
+ATOM 1836 C CG . GLU A 1 233 ? 12.165 30.620 51.866 1.00 27.69 ? ? ? ? ? ? 310 GLU A CG 1
+ATOM 1837 C CD . GLU A 1 233 ? 10.782 31.153 52.188 1.00 27.72 ? ? ? ? ? ? 310 GLU A CD 1
+ATOM 1838 O OE1 . GLU A 1 233 ? 10.435 31.199 53.386 1.00 30.28 ? ? ? ? ? ? 310 GLU A OE1 1
+ATOM 1839 O OE2 . GLU A 1 233 ? 10.056 31.547 51.255 1.00 23.72 ? ? ? ? ? ? 310 GLU A OE2 1
+ATOM 1840 N N . ALA A 1 234 ? 13.148 26.620 51.382 1.00 16.54 ? ? ? ? ? ? 311 ALA A N 1
+ATOM 1841 C CA . ALA A 1 234 ? 13.649 25.817 50.272 1.00 18.36 ? ? ? ? ? ? 311 ALA A CA 1
+ATOM 1842 C C . ALA A 1 234 ? 12.563 24.834 49.811 1.00 18.05 ? ? ? ? ? ? 311 ALA A C 1
+ATOM 1843 O O . ALA A 1 234 ? 12.512 24.473 48.634 1.00 14.94 ? ? ? ? ? ? 311 ALA A O 1
+ATOM 1844 C CB . ALA A 1 234 ? 14.910 25.062 50.691 1.00 18.22 ? ? ? ? ? ? 311 ALA A CB 1
+ATOM 1845 N N . ASN A 1 235 ? 11.693 24.391 50.720 1.00 17.59 ? ? ? ? ? ? 312 ASN A N 1
+ATOM 1846 C CA . ASN A 1 235 ? 10.634 23.472 50.286 1.00 21.41 ? ? ? ? ? ? 312 ASN A CA 1
+ATOM 1847 C C . ASN A 1 235 ? 9.595 24.143 49.383 1.00 19.83 ? ? ? ? ? ? 312 ASN A C 1
+ATOM 1848 O O . ASN A 1 235 ? 8.833 23.463 48.692 1.00 21.12 ? ? ? ? ? ? 312 ASN A O 1
+ATOM 1849 C CB . ASN A 1 235 ? 9.935 22.806 51.471 1.00 25.12 ? ? ? ? ? ? 312 ASN A CB 1
+ATOM 1850 C CG . ASN A 1 235 ? 10.748 21.657 52.057 1.00 31.64 ? ? ? ? ? ? 312 ASN A CG 1
+ATOM 1851 O OD1 . ASN A 1 235 ? 11.223 20.769 51.329 1.00 21.02 ? ? ? ? ? ? 312 ASN A OD1 1
+ATOM 1852 N ND2 . ASN A 1 235 ? 10.890 21.653 53.376 1.00 28.64 ? ? ? ? ? ? 312 ASN A ND2 1
+ATOM 1853 N N . VAL A 1 236 ? 9.555 25.472 49.393 1.00 17.61 ? ? ? ? ? ? 313 VAL A N 1
+ATOM 1854 C CA . VAL A 1 236 ? 8.634 26.201 48.527 1.00 17.75 ? ? ? ? ? ? 313 VAL A CA 1
+ATOM 1855 C C . VAL A 1 236 ? 9.384 26.450 47.232 1.00 16.80 ? ? ? ? ? ? 313 VAL A C 1
+ATOM 1856 O O . VAL A 1 236 ? 8.874 26.195 46.141 1.00 17.19 ? ? ? ? ? ? 313 VAL A O 1
+ATOM 1857 C CB . VAL A 1 236 ? 8.205 27.560 49.143 1.00 21.55 ? ? ? ? ? ? 313 VAL A CB 1
+ATOM 1858 C CG1 . VAL A 1 236 ? 7.275 28.306 48.189 1.00 17.70 ? ? ? ? ? ? 313 VAL A CG1 1
+ATOM 1859 C CG2 . VAL A 1 236 ? 7.493 27.320 50.458 1.00 23.28 ? ? ? ? ? ? 313 VAL A CG2 1
+ATOM 1860 N N . MET A 1 237 ? 10.621 26.923 47.368 1.00 18.04 ? ? ? ? ? ? 314 MET A N 1
+ATOM 1861 C CA . MET A 1 237 ? 11.480 27.214 46.222 1.00 18.68 ? ? ? ? ? ? 314 MET A CA 1
+ATOM 1862 C C . MET A 1 237 ? 11.503 26.087 45.207 1.00 20.46 ? ? ? ? ? ? 314 MET A C 1
+ATOM 1863 O O . MET A 1 237 ? 11.305 26.310 44.010 1.00 20.56 ? ? ? ? ? ? 314 MET A O 1
+ATOM 1864 C CB . MET A 1 237 ? 12.930 27.457 46.672 1.00 15.46 ? ? ? ? ? ? 314 MET A CB 1
+ATOM 1865 C CG . MET A 1 237 ? 13.138 28.682 47.532 1.00 17.78 ? ? ? ? ? ? 314 MET A CG 1
+ATOM 1866 S SD . MET A 1 237 ? 14.850 28.795 48.104 1.00 18.85 ? ? ? ? ? ? 314 MET A SD 1
+ATOM 1867 C CE . MET A 1 237 ? 14.719 30.236 49.097 1.00 18.47 ? ? ? ? ? ? 314 MET A CE 1
+ATOM 1868 N N . LYS A 1 238 ? 11.762 24.878 45.700 1.00 18.47 ? ? ? ? ? ? 315 LYS A N 1
+ATOM 1869 C CA . LYS A 1 238 ? 11.873 23.715 44.836 1.00 16.63 ? ? ? ? ? ? 315 LYS A CA 1
+ATOM 1870 C C . LYS A 1 238 ? 10.637 23.450 43.982 1.00 17.57 ? ? ? ? ? ? 315 LYS A C 1
+ATOM 1871 O O . LYS A 1 238 ? 10.749 22.863 42.907 1.00 15.37 ? ? ? ? ? ? 315 LYS A O 1
+ATOM 1872 C CB . LYS A 1 238 ? 12.217 22.463 45.660 1.00 17.24 ? ? ? ? ? ? 315 LYS A CB 1
+ATOM 1873 C CG . LYS A 1 238 ? 11.118 21.964 46.604 1.00 13.83 ? ? ? ? ? ? 315 LYS A CG 1
+ATOM 1874 C CD . LYS A 1 238 ? 11.591 20.696 47.325 1.00 20.29 ? ? ? ? ? ? 315 LYS A CD 1
+ATOM 1875 C CE . LYS A 1 238 ? 10.528 20.120 48.254 1.00 20.68 ? ? ? ? ? ? 315 LYS A CE 1
+ATOM 1876 N NZ . LYS A 1 238 ? 11.002 18.902 48.975 1.00 21.23 ? ? ? ? ? ? 315 LYS A NZ 1
+ATOM 1877 N N . THR A 1 239 ? 9.471 23.897 44.443 1.00 15.07 ? ? ? ? ? ? 316 THR A N 1
+ATOM 1878 C CA . THR A 1 239 ? 8.230 23.669 43.704 1.00 14.10 ? ? ? ? ? ? 316 THR A CA 1
+ATOM 1879 C C . THR A 1 239 ? 7.994 24.686 42.595 1.00 16.62 ? ? ? ? ? ? 316 THR A C 1
+ATOM 1880 O O . THR A 1 239 ? 7.054 24.538 41.804 1.00 15.89 ? ? ? ? ? ? 316 THR A O 1
+ATOM 1881 C CB . THR A 1 239 ? 6.999 23.758 44.614 1.00 15.95 ? ? ? ? ? ? 316 THR A CB 1
+ATOM 1882 O OG1 . THR A 1 239 ? 6.789 25.128 44.976 1.00 13.19 ? ? ? ? ? ? 316 THR A OG1 1
+ATOM 1883 C CG2 . THR A 1 239 ? 7.190 22.918 45.878 1.00 16.07 ? ? ? ? ? ? 316 THR A CG2 1
+ATOM 1884 N N . LEU A 1 240 ? 8.824 25.724 42.543 1.00 13.11 ? ? ? ? ? ? 317 LEU A N 1
+ATOM 1885 C CA . LEU A 1 240 ? 8.653 26.766 41.539 1.00 15.78 ? ? ? ? ? ? 317 LEU A CA 1
+ATOM 1886 C C . LEU A 1 240 ? 9.430 26.387 40.292 1.00 16.96 ? ? ? ? ? ? 317 LEU A C 1
+ATOM 1887 O O . LEU A 1 240 ? 10.494 26.923 40.003 1.00 19.00 ? ? ? ? ? ? 317 LEU A O 1
+ATOM 1888 C CB . LEU A 1 240 ? 9.105 28.115 42.108 1.00 15.26 ? ? ? ? ? ? 317 LEU A CB 1
+ATOM 1889 C CG . LEU A 1 240 ? 8.276 28.559 43.323 1.00 17.24 ? ? ? ? ? ? 317 LEU A CG 1
+ATOM 1890 C CD1 . LEU A 1 240 ? 8.942 29.722 44.036 1.00 17.59 ? ? ? ? ? ? 317 LEU A CD1 1
+ATOM 1891 C CD2 . LEU A 1 240 ? 6.865 28.940 42.872 1.00 16.70 ? ? ? ? ? ? 317 LEU A CD2 1
+ATOM 1892 N N . GLN A 1 241 ? 8.871 25.429 39.566 1.00 16.55 ? ? ? ? ? ? 318 GLN A N 1
+ATOM 1893 C CA . GLN A 1 241 ? 9.475 24.913 38.355 1.00 16.18 ? ? ? ? ? ? 318 GLN A CA 1
+ATOM 1894 C C . GLN A 1 241 ? 8.886 25.577 37.128 1.00 18.61 ? ? ? ? ? ? 318 GLN A C 1
+ATOM 1895 O O . GLN A 1 241 ? 7.683 25.496 36.888 1.00 15.96 ? ? ? ? ? ? 318 GLN A O 1
+ATOM 1896 C CB . GLN A 1 241 ? 9.287 23.395 38.318 1.00 16.71 ? ? ? ? ? ? 318 GLN A CB 1
+ATOM 1897 C CG . GLN A 1 241 ? 10.088 22.708 39.418 1.00 20.71 ? ? ? ? ? ? 318 GLN A CG 1
+ATOM 1898 C CD . GLN A 1 241 ? 9.785 21.234 39.555 1.00 25.18 ? ? ? ? ? ? 318 GLN A CD 1
+ATOM 1899 O OE1 . GLN A 1 241 ? 9.697 20.512 38.568 1.00 30.99 ? ? ? ? ? ? 318 GLN A OE1 1
+ATOM 1900 N NE2 . GLN A 1 241 ? 9.654 20.776 40.788 1.00 27.99 ? ? ? ? ? ? 318 GLN A NE2 1
+ATOM 1901 N N . HIS A 1 242 ? 9.758 26.234 36.365 1.00 18.10 ? ? ? ? ? ? 319 HIS A N 1
+ATOM 1902 C CA . HIS A 1 242 ? 9.384 26.961 35.155 1.00 16.65 ? ? ? ? ? ? 319 HIS A CA 1
+ATOM 1903 C C . HIS A 1 242 ? 10.649 27.111 34.309 1.00 19.02 ? ? ? ? ? ? 319 HIS A C 1
+ATOM 1904 O O . HIS A 1 242 ? 11.763 27.132 34.841 1.00 15.68 ? ? ? ? ? ? 319 HIS A O 1
+ATOM 1905 C CB . HIS A 1 242 ? 8.813 28.330 35.551 1.00 16.05 ? ? ? ? ? ? 319 HIS A CB 1
+ATOM 1906 C CG . HIS A 1 242 ? 8.300 29.141 34.402 1.00 14.40 ? ? ? ? ? ? 319 HIS A CG 1
+ATOM 1907 N ND1 . HIS A 1 242 ? 9.128 29.819 33.535 1.00 15.01 ? ? ? ? ? ? 319 HIS A ND1 1
+ATOM 1908 C CD2 . HIS A 1 242 ? 7.036 29.359 33.964 1.00 15.99 ? ? ? ? ? ? 319 HIS A CD2 1
+ATOM 1909 C CE1 . HIS A 1 242 ? 8.397 30.421 32.612 1.00 14.70 ? ? ? ? ? ? 319 HIS A CE1 1
+ATOM 1910 N NE2 . HIS A 1 242 ? 7.125 30.158 32.850 1.00 14.71 ? ? ? ? ? ? 319 HIS A NE2 1
+ATOM 1911 N N . ASP A 1 243 ? 10.481 27.198 32.994 1.00 17.74 ? ? ? ? ? ? 320 ASP A N 1
+ATOM 1912 C CA . ASP A 1 243 ? 11.622 27.315 32.091 1.00 17.58 ? ? ? ? ? ? 320 ASP A CA 1
+ATOM 1913 C C . ASP A 1 243 ? 12.471 28.550 32.379 1.00 15.62 ? ? ? ? ? ? 320 ASP A C 1
+ATOM 1914 O O . ASP A 1 243 ? 13.663 28.570 32.080 1.00 14.58 ? ? ? ? ? ? 320 ASP A O 1
+ATOM 1915 C CB . ASP A 1 243 ? 11.143 27.360 30.637 1.00 18.00 ? ? ? ? ? ? 320 ASP A CB 1
+ATOM 1916 C CG . ASP A 1 243 ? 12.287 27.302 29.647 1.00 19.92 ? ? ? ? ? ? 320 ASP A CG 1
+ATOM 1917 O OD1 . ASP A 1 243 ? 12.985 26.273 29.623 1.00 24.25 ? ? ? ? ? ? 320 ASP A OD1 1
+ATOM 1918 O OD2 . ASP A 1 243 ? 12.505 28.281 28.903 1.00 20.55 ? ? ? ? ? ? 320 ASP A OD2 1
+ATOM 1919 N N . LYS A 1 244 ? 11.870 29.580 32.964 1.00 14.85 ? ? ? ? ? ? 321 LYS A N 1
+ATOM 1920 C CA . LYS A 1 244 ? 12.633 30.789 33.239 1.00 13.49 ? ? ? ? ? ? 321 LYS A CA 1
+ATOM 1921 C C . LYS A 1 244 ? 13.135 30.929 34.685 1.00 13.33 ? ? ? ? ? ? 321 LYS A C 1
+ATOM 1922 O O . LYS A 1 244 ? 13.540 32.013 35.106 1.00 11.88 ? ? ? ? ? ? 321 LYS A O 1
+ATOM 1923 C CB . LYS A 1 244 ? 11.821 32.019 32.811 1.00 17.25 ? ? ? ? ? ? 321 LYS A CB 1
+ATOM 1924 C CG . LYS A 1 244 ? 11.384 31.983 31.323 1.00 15.29 ? ? ? ? ? ? 321 LYS A CG 1
+ATOM 1925 C CD . LYS A 1 244 ? 12.585 31.725 30.394 1.00 18.62 ? ? ? ? ? ? 321 LYS A CD 1
+ATOM 1926 C CE . LYS A 1 244 ? 12.200 31.747 28.913 1.00 16.22 ? ? ? ? ? ? 321 LYS A CE 1
+ATOM 1927 N NZ . LYS A 1 244 ? 11.175 30.715 28.577 1.00 19.77 ? ? ? ? ? ? 321 LYS A NZ 1
+ATOM 1928 N N . LEU A 1 245 ? 13.107 29.831 35.438 1.00 13.13 ? ? ? ? ? ? 322 LEU A N 1
+ATOM 1929 C CA . LEU A 1 245 ? 13.611 29.811 36.817 1.00 13.45 ? ? ? ? ? ? 322 LEU A CA 1
+ATOM 1930 C C . LEU A 1 245 ? 14.647 28.691 36.920 1.00 12.10 ? ? ? ? ? ? 322 LEU A C 1
+ATOM 1931 O O . LEU A 1 245 ? 14.430 27.594 36.408 1.00 10.81 ? ? ? ? ? ? 322 LEU A O 1
+ATOM 1932 C CB . LEU A 1 245 ? 12.507 29.521 37.842 1.00 12.32 ? ? ? ? ? ? 322 LEU A CB 1
+ATOM 1933 C CG . LEU A 1 245 ? 11.250 30.385 37.994 1.00 23.08 ? ? ? ? ? ? 322 LEU A CG 1
+ATOM 1934 C CD1 . LEU A 1 245 ? 10.857 30.386 39.477 1.00 15.28 ? ? ? ? ? ? 322 LEU A CD1 1
+ATOM 1935 C CD2 . LEU A 1 245 ? 11.483 31.802 37.524 1.00 14.60 ? ? ? ? ? ? 322 LEU A CD2 1
+ATOM 1936 N N . VAL A 1 246 ? 15.768 28.949 37.583 1.00 14.70 ? ? ? ? ? ? 323 VAL A N 1
+ATOM 1937 C CA . VAL A 1 246 ? 16.778 27.908 37.706 1.00 14.93 ? ? ? ? ? ? 323 VAL A CA 1
+ATOM 1938 C C . VAL A 1 246 ? 16.204 26.788 38.562 1.00 13.52 ? ? ? ? ? ? 323 VAL A C 1
+ATOM 1939 O O . VAL A 1 246 ? 15.516 27.046 39.551 1.00 14.82 ? ? ? ? ? ? 323 VAL A O 1
+ATOM 1940 C CB . VAL A 1 246 ? 18.077 28.443 38.360 1.00 17.27 ? ? ? ? ? ? 323 VAL A CB 1
+ATOM 1941 C CG1 . VAL A 1 246 ? 17.822 28.817 39.817 1.00 18.14 ? ? ? ? ? ? 323 VAL A CG1 1
+ATOM 1942 C CG2 . VAL A 1 246 ? 19.185 27.387 38.253 1.00 20.32 ? ? ? ? ? ? 323 VAL A CG2 1
+ATOM 1943 N N . LYS A 1 247 ? 16.464 25.547 38.168 1.00 12.64 ? ? ? ? ? ? 324 LYS A N 1
+ATOM 1944 C CA . LYS A 1 247 ? 15.982 24.400 38.922 1.00 14.11 ? ? ? ? ? ? 324 LYS A CA 1
+ATOM 1945 C C . LYS A 1 247 ? 16.808 24.204 40.179 1.00 16.16 ? ? ? ? ? ? 324 LYS A C 1
+ATOM 1946 O O . LYS A 1 247 ? 18.038 24.276 40.142 1.00 14.98 ? ? ? ? ? ? 324 LYS A O 1
+ATOM 1947 C CB . LYS A 1 247 ? 16.072 23.113 38.101 1.00 21.41 ? ? ? ? ? ? 324 LYS A CB 1
+ATOM 1948 C CG . LYS A 1 247 ? 15.115 23.009 36.943 1.00 25.02 ? ? ? ? ? ? 324 LYS A CG 1
+ATOM 1949 C CD . LYS A 1 247 ? 15.326 21.677 36.241 1.00 32.39 ? ? ? ? ? ? 324 LYS A CD 1
+ATOM 1950 C CE . LYS A 1 247 ? 14.437 21.549 35.023 1.00 33.81 ? ? ? ? ? ? 324 LYS A CE 1
+ATOM 1951 N NZ . LYS A 1 247 ? 14.717 20.280 34.303 1.00 45.18 ? ? ? ? ? ? 324 LYS A NZ 1
+ATOM 1952 N N . LEU A 1 248 ? 16.114 23.937 41.279 1.00 16.03 ? ? ? ? ? ? 325 LEU A N 1
+ATOM 1953 C CA . LEU A 1 248 ? 16.736 23.686 42.571 1.00 19.27 ? ? ? ? ? ? 325 LEU A CA 1
+ATOM 1954 C C . LEU A 1 248 ? 16.613 22.177 42.830 1.00 23.60 ? ? ? ? ? ? 325 LEU A C 1
+ATOM 1955 O O . LEU A 1 248 ? 15.532 21.682 43.158 1.00 26.38 ? ? ? ? ? ? 325 LEU A O 1
+ATOM 1956 C CB . LEU A 1 248 ? 16.013 24.500 43.652 1.00 21.46 ? ? ? ? ? ? 325 LEU A CB 1
+ATOM 1957 C CG . LEU A 1 248 ? 16.439 24.321 45.108 1.00 28.39 ? ? ? ? ? ? 325 LEU A CG 1
+ATOM 1958 C CD1 . LEU A 1 248 ? 17.948 24.305 45.210 1.00 31.26 ? ? ? ? ? ? 325 LEU A CD1 1
+ATOM 1959 C CD2 . LEU A 1 248 ? 15.847 25.444 45.949 1.00 30.33 ? ? ? ? ? ? 325 LEU A CD2 1
+ATOM 1960 N N . HIS A 1 249 ? 17.721 21.453 42.671 1.00 17.38 ? ? ? ? ? ? 326 HIS A N 1
+ATOM 1961 C CA . HIS A 1 249 ? 17.740 19.996 42.843 1.00 18.99 ? ? ? ? ? ? 326 HIS A CA 1
+ATOM 1962 C C . HIS A 1 249 ? 17.739 19.438 44.265 1.00 19.18 ? ? ? ? ? ? 326 HIS A C 1
+ATOM 1963 O O . HIS A 1 249 ? 17.030 18.475 44.573 1.00 20.29 ? ? ? ? ? ? 326 HIS A O 1
+ATOM 1964 C CB . HIS A 1 249 ? 18.966 19.384 42.167 1.00 17.18 ? ? ? ? ? ? 326 HIS A CB 1
+ATOM 1965 C CG . HIS A 1 249 ? 19.064 19.640 40.699 1.00 18.26 ? ? ? ? ? ? 326 HIS A CG 1
+ATOM 1966 N ND1 . HIS A 1 249 ? 18.037 19.369 39.819 1.00 20.27 ? ? ? ? ? ? 326 HIS A ND1 1
+ATOM 1967 C CD2 . HIS A 1 249 ? 20.113 20.039 39.939 1.00 17.74 ? ? ? ? ? ? 326 HIS A CD2 1
+ATOM 1968 C CE1 . HIS A 1 249 ? 18.451 19.586 38.584 1.00 21.97 ? ? ? ? ? ? 326 HIS A CE1 1
+ATOM 1969 N NE2 . HIS A 1 249 ? 19.706 19.993 38.628 1.00 18.61 ? ? ? ? ? ? 326 HIS A NE2 1
+ATOM 1970 N N . ALA A 1 250 ? 18.561 20.017 45.129 1.00 14.51 ? ? ? ? ? ? 327 ALA A N 1
+ATOM 1971 C CA . ALA A 1 250 ? 18.678 19.481 46.473 1.00 14.10 ? ? ? ? ? ? 327 ALA A CA 1
+ATOM 1972 C C . ALA A 1 250 ? 19.393 20.444 47.400 1.00 9.97 ? ? ? ? ? ? 327 ALA A C 1
+ATOM 1973 O O . ALA A 1 250 ? 19.811 21.524 46.985 1.00 12.97 ? ? ? ? ? ? 327 ALA A O 1
+ATOM 1974 C CB . ALA A 1 250 ? 19.449 18.162 46.409 1.00 14.09 ? ? ? ? ? ? 327 ALA A CB 1
+ATOM 1975 N N . VAL A 1 251 ? 19.529 20.033 48.657 1.00 13.67 ? ? ? ? ? ? 328 VAL A N 1
+ATOM 1976 C CA . VAL A 1 251 ? 20.206 20.832 49.671 1.00 13.56 ? ? ? ? ? ? 328 VAL A CA 1
+ATOM 1977 C C . VAL A 1 251 ? 20.965 19.926 50.640 1.00 14.33 ? ? ? ? ? ? 328 VAL A C 1
+ATOM 1978 O O . VAL A 1 251 ? 20.641 18.750 50.777 1.00 15.51 ? ? ? ? ? ? 328 VAL A O 1
+ATOM 1979 C CB . VAL A 1 251 ? 19.194 21.653 50.521 1.00 14.43 ? ? ? ? ? ? 328 VAL A CB 1
+ATOM 1980 C CG1 . VAL A 1 251 ? 18.439 22.638 49.650 1.00 15.37 ? ? ? ? ? ? 328 VAL A CG1 1
+ATOM 1981 C CG2 . VAL A 1 251 ? 18.215 20.703 51.230 1.00 9.80 ? ? ? ? ? ? 328 VAL A CG2 1
+ATOM 1982 N N . VAL A 1 252 ? 21.992 20.474 51.285 1.00 16.08 ? ? ? ? ? ? 329 VAL A N 1
+ATOM 1983 C CA . VAL A 1 252 ? 22.726 19.748 52.320 1.00 14.33 ? ? ? ? ? ? 329 VAL A CA 1
+ATOM 1984 C C . VAL A 1 252 ? 22.300 20.587 53.508 1.00 14.35 ? ? ? ? ? ? 329 VAL A C 1
+ATOM 1985 O O . VAL A 1 252 ? 22.592 21.774 53.552 1.00 13.72 ? ? ? ? ? ? 329 VAL A O 1
+ATOM 1986 C CB . VAL A 1 252 ? 24.259 19.801 52.145 1.00 14.11 ? ? ? ? ? ? 329 VAL A CB 1
+ATOM 1987 C CG1 . VAL A 1 252 ? 24.947 19.198 53.396 1.00 14.01 ? ? ? ? ? ? 329 VAL A CG1 1
+ATOM 1988 C CG2 . VAL A 1 252 ? 24.660 18.999 50.928 1.00 12.76 ? ? ? ? ? ? 329 VAL A CG2 1
+ATOM 1989 N N . THR A 1 253 ? 21.586 19.965 54.447 1.00 16.89 ? ? ? ? ? ? 330 THR A N 1
+ATOM 1990 C CA . THR A 1 253 ? 21.005 20.639 55.617 1.00 21.91 ? ? ? ? ? ? 330 THR A CA 1
+ATOM 1991 C C . THR A 1 253 ? 21.876 21.059 56.809 1.00 25.35 ? ? ? ? ? ? 330 THR A C 1
+ATOM 1992 O O . THR A 1 253 ? 21.403 21.802 57.674 1.00 25.25 ? ? ? ? ? ? 330 THR A O 1
+ATOM 1993 C CB . THR A 1 253 ? 19.849 19.791 56.192 1.00 21.06 ? ? ? ? ? ? 330 THR A CB 1
+ATOM 1994 O OG1 . THR A 1 253 ? 20.368 18.545 56.670 1.00 25.52 ? ? ? ? ? ? 330 THR A OG1 1
+ATOM 1995 C CG2 . THR A 1 253 ? 18.822 19.489 55.125 1.00 23.97 ? ? ? ? ? ? 330 THR A CG2 1
+ATOM 1996 N N . LYS A 1 254 ? 23.121 20.594 56.876 1.00 20.91 ? ? ? ? ? ? 331 LYS A N 1
+ATOM 1997 C CA . LYS A 1 254 ? 24.000 20.955 57.998 1.00 20.86 ? ? ? ? ? ? 331 LYS A CA 1
+ATOM 1998 C C . LYS A 1 254 ? 24.982 22.042 57.569 1.00 21.05 ? ? ? ? ? ? 331 LYS A C 1
+ATOM 1999 O O . LYS A 1 254 ? 25.442 22.043 56.434 1.00 19.74 ? ? ? ? ? ? 331 LYS A O 1
+ATOM 2000 C CB . LYS A 1 254 ? 24.775 19.727 58.480 1.00 17.91 ? ? ? ? ? ? 331 LYS A CB 1
+ATOM 2001 C CG . LYS A 1 254 ? 23.899 18.553 58.897 1.00 20.30 ? ? ? ? ? ? 331 LYS A CG 1
+ATOM 2002 C CD . LYS A 1 254 ? 23.017 18.883 60.091 1.00 24.96 ? ? ? ? ? ? 331 LYS A CD 1
+ATOM 2003 C CE . LYS A 1 254 ? 22.121 17.699 60.417 1.00 30.86 ? ? ? ? ? ? 331 LYS A CE 1
+ATOM 2004 N NZ . LYS A 1 254 ? 21.263 17.936 61.609 1.00 38.75 ? ? ? ? ? ? 331 LYS A NZ 1
+ATOM 2005 N N . GLU A 1 255 ? 25.320 22.963 58.467 1.00 17.36 ? ? ? ? ? ? 332 GLU A N 1
+ATOM 2006 C CA . GLU A 1 255 ? 26.241 24.031 58.099 1.00 18.95 ? ? ? ? ? ? 332 GLU A CA 1
+ATOM 2007 C C . GLU A 1 255 ? 27.626 23.474 57.776 1.00 15.37 ? ? ? ? ? ? 332 GLU A C 1
+ATOM 2008 O O . GLU A 1 255 ? 28.109 22.562 58.436 1.00 16.86 ? ? ? ? ? ? 332 GLU A O 1
+ATOM 2009 C CB . GLU A 1 255 ? 26.336 25.085 59.214 1.00 20.65 ? ? ? ? ? ? 332 GLU A CB 1
+ATOM 2010 C CG . GLU A 1 255 ? 25.023 25.801 59.503 1.00 23.30 ? ? ? ? ? ? 332 GLU A CG 1
+ATOM 2011 C CD . GLU A 1 255 ? 25.179 26.955 60.483 1.00 29.74 ? ? ? ? ? ? 332 GLU A CD 1
+ATOM 2012 O OE1 . GLU A 1 255 ? 25.741 26.737 61.577 1.00 29.11 ? ? ? ? ? ? 332 GLU A OE1 1
+ATOM 2013 O OE2 . GLU A 1 255 ? 24.733 28.079 60.162 1.00 27.22 ? ? ? ? ? ? 332 GLU A OE2 1
+ATOM 2014 N N . PRO A 1 256 ? 28.274 24.010 56.736 1.00 16.32 ? ? ? ? ? ? 333 PRO A N 1
+ATOM 2015 C CA . PRO A 1 256 ? 27.774 25.084 55.875 1.00 15.48 ? ? ? ? ? ? 333 PRO A CA 1
+ATOM 2016 C C . PRO A 1 256 ? 26.707 24.546 54.909 1.00 16.58 ? ? ? ? ? ? 333 PRO A C 1
+ATOM 2017 O O . PRO A 1 256 ? 26.911 23.531 54.246 1.00 15.81 ? ? ? ? ? ? 333 PRO A O 1
+ATOM 2018 C CB . PRO A 1 256 ? 29.045 25.546 55.170 1.00 15.00 ? ? ? ? ? ? 333 PRO A CB 1
+ATOM 2019 C CG . PRO A 1 256 ? 29.733 24.233 54.938 1.00 13.90 ? ? ? ? ? ? 333 PRO A CG 1
+ATOM 2020 C CD . PRO A 1 256 ? 29.632 23.614 56.319 1.00 18.41 ? ? ? ? ? ? 333 PRO A CD 1
+ATOM 2021 N N . ILE A 1 257 ? 25.572 25.236 54.836 1.00 16.66 ? ? ? ? ? ? 334 ILE A N 1
+ATOM 2022 C CA . ILE A 1 257 ? 24.465 24.819 53.978 1.00 16.79 ? ? ? ? ? ? 334 ILE A CA 1
+ATOM 2023 C C . ILE A 1 257 ? 24.818 24.847 52.490 1.00 13.40 ? ? ? ? ? ? 334 ILE A C 1
+ATOM 2024 O O . ILE A 1 257 ? 25.486 25.761 52.030 1.00 17.71 ? ? ? ? ? ? 334 ILE A O 1
+ATOM 2025 C CB . ILE A 1 257 ? 23.212 25.721 54.212 1.00 18.98 ? ? ? ? ? ? 334 ILE A CB 1
+ATOM 2026 C CG1 . ILE A 1 257 ? 22.719 25.579 55.658 1.00 20.00 ? ? ? ? ? ? 334 ILE A CG1 1
+ATOM 2027 C CG2 . ILE A 1 257 ? 22.105 25.380 53.203 1.00 18.44 ? ? ? ? ? ? 334 ILE A CG2 1
+ATOM 2028 C CD1 . ILE A 1 257 ? 22.442 24.177 56.085 1.00 24.45 ? ? ? ? ? ? 334 ILE A CD1 1
+ATOM 2029 N N . TYR A 1 258 ? 24.380 23.824 51.755 1.00 14.15 ? ? ? ? ? ? 335 TYR A N 1
+ATOM 2030 C CA . TYR A 1 258 ? 24.594 23.732 50.308 1.00 16.78 ? ? ? ? ? ? 335 TYR A CA 1
+ATOM 2031 C C . TYR A 1 258 ? 23.245 23.769 49.589 1.00 16.48 ? ? ? ? ? ? 335 TYR A C 1
+ATOM 2032 O O . TYR A 1 258 ? 22.311 23.075 49.994 1.00 14.65 ? ? ? ? ? ? 335 TYR A O 1
+ATOM 2033 C CB . TYR A 1 258 ? 25.283 22.414 49.917 1.00 17.87 ? ? ? ? ? ? 335 TYR A CB 1
+ATOM 2034 C CG . TYR A 1 258 ? 26.768 22.336 50.193 1.00 19.62 ? ? ? ? ? ? 335 TYR A CG 1
+ATOM 2035 C CD1 . TYR A 1 258 ? 27.463 23.422 50.730 1.00 21.36 ? ? ? ? ? ? 335 TYR A CD1 1
+ATOM 2036 C CD2 . TYR A 1 258 ? 27.490 21.182 49.882 1.00 23.68 ? ? ? ? ? ? 335 TYR A CD2 1
+ATOM 2037 C CE1 . TYR A 1 258 ? 28.844 23.362 50.947 1.00 26.88 ? ? ? ? ? ? 335 TYR A CE1 1
+ATOM 2038 C CE2 . TYR A 1 258 ? 28.877 21.113 50.096 1.00 26.23 ? ? ? ? ? ? 335 TYR A CE2 1
+ATOM 2039 C CZ . TYR A 1 258 ? 29.541 22.207 50.626 1.00 26.30 ? ? ? ? ? ? 335 TYR A CZ 1
+ATOM 2040 O OH . TYR A 1 258 ? 30.903 22.159 50.820 1.00 30.70 ? ? ? ? ? ? 335 TYR A OH 1
+ATOM 2041 N N . ILE A 1 259 ? 23.156 24.580 48.536 1.00 15.82 ? ? ? ? ? ? 336 ILE A N 1
+ATOM 2042 C CA . ILE A 1 259 ? 21.956 24.684 47.713 1.00 15.43 ? ? ? ? ? ? 336 ILE A CA 1
+ATOM 2043 C C . ILE A 1 259 ? 22.412 24.210 46.333 1.00 15.22 ? ? ? ? ? ? 336 ILE A C 1
+ATOM 2044 O O . ILE A 1 259 ? 23.196 24.898 45.662 1.00 14.91 ? ? ? ? ? ? 336 ILE A O 1
+ATOM 2045 C CB . ILE A 1 259 ? 21.462 26.136 47.589 1.00 18.57 ? ? ? ? ? ? 336 ILE A CB 1
+ATOM 2046 C CG1 . ILE A 1 259 ? 21.295 26.756 48.975 1.00 21.01 ? ? ? ? ? ? 336 ILE A CG1 1
+ATOM 2047 C CG2 . ILE A 1 259 ? 20.125 26.154 46.859 1.00 19.38 ? ? ? ? ? ? 336 ILE A CG2 1
+ATOM 2048 C CD1 . ILE A 1 259 ? 20.873 28.225 48.956 1.00 21.72 ? ? ? ? ? ? 336 ILE A CD1 1
+ATOM 2049 N N . ILE A 1 260 ? 21.936 23.036 45.921 1.00 11.75 ? ? ? ? ? ? 337 ILE A N 1
+ATOM 2050 C CA . ILE A 1 260 ? 22.332 22.464 44.645 1.00 11.57 ? ? ? ? ? ? 337 ILE A CA 1
+ATOM 2051 C C . ILE A 1 260 ? 21.340 22.778 43.527 1.00 13.31 ? ? ? ? ? ? 337 ILE A C 1
+ATOM 2052 O O . ILE A 1 260 ? 20.151 22.481 43.639 1.00 12.17 ? ? ? ? ? ? 337 ILE A O 1
+ATOM 2053 C CB . ILE A 1 260 ? 22.512 20.919 44.741 1.00 11.70 ? ? ? ? ? ? 337 ILE A CB 1
+ATOM 2054 C CG1 . ILE A 1 260 ? 23.574 20.555 45.799 1.00 11.90 ? ? ? ? ? ? 337 ILE A CG1 1
+ATOM 2055 C CG2 . ILE A 1 260 ? 22.970 20.364 43.378 1.00 13.51 ? ? ? ? ? ? 337 ILE A CG2 1
+ATOM 2056 C CD1 . ILE A 1 260 ? 23.040 20.495 47.246 1.00 13.64 ? ? ? ? ? ? 337 ILE A CD1 1
+ATOM 2057 N N . THR A 1 261 ? 21.833 23.380 42.450 1.00 12.31 ? ? ? ? ? ? 338 THR A N 1
+ATOM 2058 C CA . THR A 1 261 ? 20.973 23.725 41.324 1.00 13.77 ? ? ? ? ? ? 338 THR A CA 1
+ATOM 2059 C C . THR A 1 261 ? 21.597 23.262 40.025 1.00 16.68 ? ? ? ? ? ? 338 THR A C 1
+ATOM 2060 O O . THR A 1 261 ? 22.712 22.723 40.003 1.00 13.07 ? ? ? ? ? ? 338 THR A O 1
+ATOM 2061 C CB . THR A 1 261 ? 20.760 25.248 41.197 1.00 15.11 ? ? ? ? ? ? 338 THR A CB 1
+ATOM 2062 O OG1 . THR A 1 261 ? 21.973 25.864 40.747 1.00 17.45 ? ? ? ? ? ? 338 THR A OG1 1
+ATOM 2063 C CG2 . THR A 1 261 ? 20.365 25.852 42.540 1.00 16.61 ? ? ? ? ? ? 338 THR A CG2 1
+ATOM 2064 N N . GLU A 1 262 ? 20.873 23.472 38.934 1.00 17.77 ? ? ? ? ? ? 339 GLU A N 1
+ATOM 2065 C CA . GLU A 1 262 ? 21.397 23.102 37.633 1.00 16.28 ? ? ? ? ? ? 339 GLU A CA 1
+ATOM 2066 C C . GLU A 1 262 ? 22.510 24.107 37.329 1.00 17.39 ? ? ? ? ? ? 339 GLU A C 1
+ATOM 2067 O O . GLU A 1 262 ? 22.509 25.218 37.858 1.00 15.68 ? ? ? ? ? ? 339 GLU A O 1
+ATOM 2068 C CB . GLU A 1 262 ? 20.286 23.167 36.573 1.00 20.60 ? ? ? ? ? ? 339 GLU A CB 1
+ATOM 2069 C CG . GLU A 1 262 ? 19.679 24.546 36.348 1.00 19.80 ? ? ? ? ? ? 339 GLU A CG 1
+ATOM 2070 C CD . GLU A 1 262 ? 18.532 24.504 35.353 1.00 23.99 ? ? ? ? ? ? 339 GLU A CD 1
+ATOM 2071 O OE1 . GLU A 1 262 ? 18.700 23.867 34.288 1.00 23.85 ? ? ? ? ? ? 339 GLU A OE1 1
+ATOM 2072 O OE2 . GLU A 1 262 ? 17.475 25.112 35.630 1.00 16.41 ? ? ? ? ? ? 339 GLU A OE2 1
+ATOM 2073 N N . PHE A 1 263 ? 23.468 23.706 36.502 1.00 17.92 ? ? ? ? ? ? 340 PHE A N 1
+ATOM 2074 C CA . PHE A 1 263 ? 24.586 24.570 36.132 1.00 17.78 ? ? ? ? ? ? 340 PHE A CA 1
+ATOM 2075 C C . PHE A 1 263 ? 24.275 25.358 34.860 1.00 18.48 ? ? ? ? ? ? 340 PHE A C 1
+ATOM 2076 O O . PHE A 1 263 ? 23.824 24.791 33.869 1.00 17.53 ? ? ? ? ? ? 340 PHE A O 1
+ATOM 2077 C CB . PHE A 1 263 ? 25.834 23.717 35.912 1.00 17.42 ? ? ? ? ? ? 340 PHE A CB 1
+ATOM 2078 C CG . PHE A 1 263 ? 26.961 24.457 35.281 1.00 19.75 ? ? ? ? ? ? 340 PHE A CG 1
+ATOM 2079 C CD1 . PHE A 1 263 ? 27.610 25.478 35.962 1.00 19.92 ? ? ? ? ? ? 340 PHE A CD1 1
+ATOM 2080 C CD2 . PHE A 1 263 ? 27.346 24.167 33.979 1.00 18.46 ? ? ? ? ? ? 340 PHE A CD2 1
+ATOM 2081 C CE1 . PHE A 1 263 ? 28.626 26.203 35.358 1.00 20.94 ? ? ? ? ? ? 340 PHE A CE1 1
+ATOM 2082 C CE2 . PHE A 1 263 ? 28.366 24.890 33.361 1.00 23.96 ? ? ? ? ? ? 340 PHE A CE2 1
+ATOM 2083 C CZ . PHE A 1 263 ? 29.004 25.911 34.056 1.00 20.30 ? ? ? ? ? ? 340 PHE A CZ 1
+ATOM 2084 N N . MET A 1 264 ? 24.523 26.664 34.891 1.00 18.66 ? ? ? ? ? ? 341 MET A N 1
+ATOM 2085 C CA . MET A 1 264 ? 24.271 27.523 33.736 1.00 20.97 ? ? ? ? ? ? 341 MET A CA 1
+ATOM 2086 C C . MET A 1 264 ? 25.602 27.965 33.124 1.00 21.27 ? ? ? ? ? ? 341 MET A C 1
+ATOM 2087 O O . MET A 1 264 ? 26.352 28.750 33.709 1.00 19.04 ? ? ? ? ? ? 341 MET A O 1
+ATOM 2088 C CB . MET A 1 264 ? 23.418 28.720 34.162 1.00 21.30 ? ? ? ? ? ? 341 MET A CB 1
+ATOM 2089 C CG . MET A 1 264 ? 22.003 28.312 34.559 1.00 25.04 ? ? ? ? ? ? 341 MET A CG 1
+ATOM 2090 S SD . MET A 1 264 ? 21.047 27.703 33.147 1.00 29.08 ? ? ? ? ? ? 341 MET A SD 1
+ATOM 2091 C CE . MET A 1 264 ? 19.614 27.114 33.960 1.00 35.21 ? ? ? ? ? ? 341 MET A CE 1
+ATOM 2092 N N . ALA A 1 265 ? 25.879 27.435 31.937 1.00 20.33 ? ? ? ? ? ? 342 ALA A N 1
+ATOM 2093 C CA . ALA A 1 265 ? 27.125 27.675 31.219 1.00 22.34 ? ? ? ? ? ? 342 ALA A CA 1
+ATOM 2094 C C . ALA A 1 265 ? 27.597 29.113 31.063 1.00 22.58 ? ? ? ? ? ? 342 ALA A C 1
+ATOM 2095 O O . ALA A 1 265 ? 28.796 29.373 31.129 1.00 23.85 ? ? ? ? ? ? 342 ALA A O 1
+ATOM 2096 C CB . ALA A 1 265 ? 27.058 26.994 29.836 1.00 22.89 ? ? ? ? ? ? 342 ALA A CB 1
+ATOM 2097 N N . LYS A 1 266 ? 26.680 30.056 30.876 1.00 22.00 ? ? ? ? ? ? 343 LYS A N 1
+ATOM 2098 C CA . LYS A 1 266 ? 27.108 31.437 30.685 1.00 23.86 ? ? ? ? ? ? 343 LYS A CA 1
+ATOM 2099 C C . LYS A 1 266 ? 27.078 32.400 31.867 1.00 23.05 ? ? ? ? ? ? 343 LYS A C 1
+ATOM 2100 O O . LYS A 1 266 ? 27.114 33.609 31.674 1.00 23.00 ? ? ? ? ? ? 343 LYS A O 1
+ATOM 2101 C CB . LYS A 1 266 ? 26.362 32.041 29.498 1.00 26.46 ? ? ? ? ? ? 343 LYS A CB 1
+ATOM 2102 C CG . LYS A 1 266 ? 26.722 31.358 28.186 1.00 33.46 ? ? ? ? ? ? 343 LYS A CG 1
+ATOM 2103 C CD . LYS A 1 266 ? 26.003 31.979 27.009 1.00 36.60 ? ? ? ? ? ? 343 LYS A CD 1
+ATOM 2104 C CE . LYS A 1 266 ? 26.340 31.246 25.724 1.00 39.07 ? ? ? ? ? ? 343 LYS A CE 1
+ATOM 2105 N NZ . LYS A 1 266 ? 27.796 31.297 25.444 1.00 41.33 ? ? ? ? ? ? 343 LYS A NZ 1
+ATOM 2106 N N . GLY A 1 267 ? 27.021 31.866 33.083 1.00 23.98 ? ? ? ? ? ? 344 GLY A N 1
+ATOM 2107 C CA . GLY A 1 267 ? 27.037 32.706 34.270 1.00 19.79 ? ? ? ? ? ? 344 GLY A CA 1
+ATOM 2108 C C . GLY A 1 267 ? 25.865 33.643 34.478 1.00 16.74 ? ? ? ? ? ? 344 GLY A C 1
+ATOM 2109 O O . GLY A 1 267 ? 24.763 33.381 34.005 1.00 19.56 ? ? ? ? ? ? 344 GLY A O 1
+ATOM 2110 N N . SER A 1 268 ? 26.097 34.733 35.205 1.00 17.29 ? ? ? ? ? ? 345 SER A N 1
+ATOM 2111 C CA . SER A 1 268 ? 25.033 35.697 35.470 1.00 20.81 ? ? ? ? ? ? 345 SER A CA 1
+ATOM 2112 C C . SER A 1 268 ? 24.841 36.605 34.269 1.00 22.11 ? ? ? ? ? ? 345 SER A C 1
+ATOM 2113 O O . SER A 1 268 ? 25.773 36.842 33.492 1.00 21.87 ? ? ? ? ? ? 345 SER A O 1
+ATOM 2114 C CB . SER A 1 268 ? 25.357 36.558 36.690 1.00 18.24 ? ? ? ? ? ? 345 SER A CB 1
+ATOM 2115 O OG . SER A 1 268 ? 26.481 37.380 36.440 1.00 26.65 ? ? ? ? ? ? 345 SER A OG 1
+ATOM 2116 N N . LEU A 1 269 ? 23.624 37.111 34.122 1.00 21.12 ? ? ? ? ? ? 346 LEU A N 1
+ATOM 2117 C CA . LEU A 1 269 ? 23.298 38.006 33.022 1.00 18.63 ? ? ? ? ? ? 346 LEU A CA 1
+ATOM 2118 C C . LEU A 1 269 ? 24.206 39.221 33.124 1.00 19.00 ? ? ? ? ? ? 346 LEU A C 1
+ATOM 2119 O O . LEU A 1 269 ? 24.618 39.798 32.119 1.00 16.47 ? ? ? ? ? ? 346 LEU A O 1
+ATOM 2120 C CB . LEU A 1 269 ? 21.835 38.436 33.118 1.00 15.56 ? ? ? ? ? ? 346 LEU A CB 1
+ATOM 2121 C CG . LEU A 1 269 ? 21.323 39.424 32.068 1.00 15.10 ? ? ? ? ? ? 346 LEU A CG 1
+ATOM 2122 C CD1 . LEU A 1 269 ? 21.512 38.843 30.688 1.00 13.80 ? ? ? ? ? ? 346 LEU A CD1 1
+ATOM 2123 C CD2 . LEU A 1 269 ? 19.850 39.722 32.321 1.00 20.80 ? ? ? ? ? ? 346 LEU A CD2 1
+ATOM 2124 N N . LEU A 1 270 ? 24.521 39.601 34.353 1.00 19.15 ? ? ? ? ? ? 347 LEU A N 1
+ATOM 2125 C CA . LEU A 1 270 ? 25.383 40.743 34.581 1.00 25.59 ? ? ? ? ? ? 347 LEU A CA 1
+ATOM 2126 C C . LEU A 1 270 ? 26.747 40.512 33.923 1.00 27.21 ? ? ? ? ? ? 347 LEU A C 1
+ATOM 2127 O O . LEU A 1 270 ? 27.177 41.306 33.091 1.00 30.86 ? ? ? ? ? ? 347 LEU A O 1
+ATOM 2128 C CB . LEU A 1 270 ? 25.535 40.985 36.083 1.00 25.16 ? ? ? ? ? ? 347 LEU A CB 1
+ATOM 2129 C CG . LEU A 1 270 ? 26.338 42.224 36.468 1.00 29.44 ? ? ? ? ? ? 347 LEU A CG 1
+ATOM 2130 C CD1 . LEU A 1 270 ? 25.701 43.460 35.837 1.00 25.05 ? ? ? ? ? ? 347 LEU A CD1 1
+ATOM 2131 C CD2 . LEU A 1 270 ? 26.395 42.347 37.979 1.00 29.42 ? ? ? ? ? ? 347 LEU A CD2 1
+ATOM 2132 N N . ASP A 1 271 ? 27.422 39.421 34.271 1.00 30.77 ? ? ? ? ? ? 348 ASP A N 1
+ATOM 2133 C CA . ASP A 1 271 ? 28.725 39.146 33.670 1.00 31.67 ? ? ? ? ? ? 348 ASP A CA 1
+ATOM 2134 C C . ASP A 1 271 ? 28.598 38.970 32.163 1.00 31.26 ? ? ? ? ? ? 348 ASP A C 1
+ATOM 2135 O O . ASP A 1 271 ? 29.439 39.450 31.400 1.00 31.04 ? ? ? ? ? ? 348 ASP A O 1
+ATOM 2136 C CB . ASP A 1 271 ? 29.361 37.880 34.248 1.00 32.75 ? ? ? ? ? ? 348 ASP A CB 1
+ATOM 2137 C CG . ASP A 1 271 ? 29.588 37.964 35.740 1.00 35.56 ? ? ? ? ? ? 348 ASP A CG 1
+ATOM 2138 O OD1 . ASP A 1 271 ? 29.991 39.039 36.246 1.00 36.10 ? ? ? ? ? ? 348 ASP A OD1 1
+ATOM 2139 O OD2 . ASP A 1 271 ? 29.390 36.927 36.402 1.00 38.06 ? ? ? ? ? ? 348 ASP A OD2 1
+ATOM 2140 N N . PHE A 1 272 ? 27.547 38.274 31.738 1.00 26.76 ? ? ? ? ? ? 349 PHE A N 1
+ATOM 2141 C CA . PHE A 1 272 ? 27.320 38.036 30.318 1.00 26.10 ? ? ? ? ? ? 349 PHE A CA 1
+ATOM 2142 C C . PHE A 1 272 ? 27.177 39.330 29.524 1.00 26.54 ? ? ? ? ? ? 349 PHE A C 1
+ATOM 2143 O O . PHE A 1 272 ? 27.744 39.469 28.444 1.00 27.64 ? ? ? ? ? ? 349 PHE A O 1
+ATOM 2144 C CB . PHE A 1 272 ? 26.069 37.183 30.108 1.00 26.31 ? ? ? ? ? ? 349 PHE A CB 1
+ATOM 2145 C CG . PHE A 1 272 ? 25.718 36.979 28.665 1.00 27.32 ? ? ? ? ? ? 349 PHE A CG 1
+ATOM 2146 C CD1 . PHE A 1 272 ? 26.569 36.273 27.823 1.00 27.28 ? ? ? ? ? ? 349 PHE A CD1 1
+ATOM 2147 C CD2 . PHE A 1 272 ? 24.555 37.528 28.135 1.00 28.35 ? ? ? ? ? ? 349 PHE A CD2 1
+ATOM 2148 C CE1 . PHE A 1 272 ? 26.268 36.118 26.474 1.00 30.42 ? ? ? ? ? ? 349 PHE A CE1 1
+ATOM 2149 C CE2 . PHE A 1 272 ? 24.243 37.382 26.792 1.00 27.67 ? ? ? ? ? ? 349 PHE A CE2 1
+ATOM 2150 C CZ . PHE A 1 272 ? 25.101 36.675 25.956 1.00 32.35 ? ? ? ? ? ? 349 PHE A CZ 1
+ATOM 2151 N N . LEU A 1 273 ? 26.420 40.284 30.051 1.00 27.29 ? ? ? ? ? ? 350 LEU A N 1
+ATOM 2152 C CA . LEU A 1 273 ? 26.230 41.542 29.337 1.00 27.47 ? ? ? ? ? ? 350 LEU A CA 1
+ATOM 2153 C C . LEU A 1 273 ? 27.496 42.389 29.252 1.00 30.80 ? ? ? ? ? ? 350 LEU A C 1
+ATOM 2154 O O . LEU A 1 273 ? 27.680 43.143 28.295 1.00 25.94 ? ? ? ? ? ? 350 LEU A O 1
+ATOM 2155 C CB . LEU A 1 273 ? 25.109 42.357 29.982 1.00 25.12 ? ? ? ? ? ? 350 LEU A CB 1
+ATOM 2156 C CG . LEU A 1 273 ? 23.712 41.739 29.865 1.00 26.95 ? ? ? ? ? ? 350 LEU A CG 1
+ATOM 2157 C CD1 . LEU A 1 273 ? 22.701 42.626 30.565 1.00 24.57 ? ? ? ? ? ? 350 LEU A CD1 1
+ATOM 2158 C CD2 . LEU A 1 273 ? 23.352 41.567 28.399 1.00 24.89 ? ? ? ? ? ? 350 LEU A CD2 1
+ATOM 2159 N N . LYS A 1 274 ? 28.365 42.259 30.250 1.00 32.08 ? ? ? ? ? ? 351 LYS A N 1
+ATOM 2160 C CA . LYS A 1 274 ? 29.605 43.026 30.288 1.00 32.65 ? ? ? ? ? ? 351 LYS A CA 1
+ATOM 2161 C C . LYS A 1 274 ? 30.722 42.326 29.513 1.00 33.49 ? ? ? ? ? ? 351 LYS A C 1
+ATOM 2162 O O . LYS A 1 274 ? 31.806 42.884 29.332 1.00 33.40 ? ? ? ? ? ? 351 LYS A O 1
+ATOM 2163 C CB . LYS A 1 274 ? 30.028 43.255 31.747 1.00 33.97 ? ? ? ? ? ? 351 LYS A CB 1
+ATOM 2164 C CG . LYS A 1 274 ? 28.988 44.030 32.582 1.00 33.62 ? ? ? ? ? ? 351 LYS A CG 1
+ATOM 2165 C CD . LYS A 1 274 ? 29.295 44.027 34.088 1.00 32.98 ? ? ? ? ? ? 351 LYS A CD 1
+ATOM 2166 C CE . LYS A 1 274 ? 30.617 44.699 34.424 1.00 40.12 ? ? ? ? ? ? 351 LYS A CE 1
+ATOM 2167 N NZ . LYS A 1 274 ? 30.638 46.137 34.023 1.00 44.71 ? ? ? ? ? ? 351 LYS A NZ 1
+ATOM 2168 N N . SER A 1 275 ? 30.451 41.108 29.052 1.00 33.22 ? ? ? ? ? ? 352 SER A N 1
+ATOM 2169 C CA . SER A 1 275 ? 31.438 40.348 28.296 1.00 33.96 ? ? ? ? ? ? 352 SER A CA 1
+ATOM 2170 C C . SER A 1 275 ? 31.370 40.741 26.827 1.00 36.28 ? ? ? ? ? ? 352 SER A C 1
+ATOM 2171 O O . SER A 1 275 ? 30.516 41.532 26.424 1.00 34.02 ? ? ? ? ? ? 352 SER A O 1
+ATOM 2172 C CB . SER A 1 275 ? 31.178 38.849 28.411 1.00 33.05 ? ? ? ? ? ? 352 SER A CB 1
+ATOM 2173 O OG . SER A 1 275 ? 30.075 38.463 27.610 1.00 31.80 ? ? ? ? ? ? 352 SER A OG 1
+ATOM 2174 N N . ASP A 1 276 ? 32.258 40.157 26.028 1.00 37.43 ? ? ? ? ? ? 353 ASP A N 1
+ATOM 2175 C CA . ASP A 1 276 ? 32.322 40.452 24.600 1.00 38.14 ? ? ? ? ? ? 353 ASP A CA 1
+ATOM 2176 C C . ASP A 1 276 ? 31.059 40.007 23.862 1.00 36.66 ? ? ? ? ? ? 353 ASP A C 1
+ATOM 2177 O O . ASP A 1 276 ? 30.425 40.802 23.162 1.00 35.51 ? ? ? ? ? ? 353 ASP A O 1
+ATOM 2178 C CB . ASP A 1 276 ? 33.557 39.783 23.983 1.00 38.45 ? ? ? ? ? ? 353 ASP A CB 1
+ATOM 2179 C CG . ASP A 1 276 ? 33.795 40.211 22.546 1.00 41.95 ? ? ? ? ? ? 353 ASP A CG 1
+ATOM 2180 O OD1 . ASP A 1 276 ? 33.969 41.426 22.310 1.00 37.79 ? ? ? ? ? ? 353 ASP A OD1 1
+ATOM 2181 O OD2 . ASP A 1 276 ? 33.809 39.336 21.653 1.00 45.21 ? ? ? ? ? ? 353 ASP A OD2 1
+ATOM 2182 N N . GLU A 1 277 ? 30.694 38.738 24.011 1.00 35.14 ? ? ? ? ? ? 354 GLU A N 1
+ATOM 2183 C CA . GLU A 1 277 ? 29.497 38.228 23.352 1.00 35.63 ? ? ? ? ? ? 354 GLU A CA 1
+ATOM 2184 C C . GLU A 1 277 ? 28.272 39.015 23.798 1.00 34.76 ? ? ? ? ? ? 354 GLU A C 1
+ATOM 2185 O O . GLU A 1 277 ? 27.299 39.144 23.054 1.00 35.50 ? ? ? ? ? ? 354 GLU A O 1
+ATOM 2186 C CB . GLU A 1 277 ? 29.297 36.746 23.666 1.00 36.91 ? ? ? ? ? ? 354 GLU A CB 1
+ATOM 2187 C CG . GLU A 1 277 ? 27.926 36.221 23.275 1.00 40.58 ? ? ? ? ? ? 354 GLU A CG 1
+ATOM 2188 C CD . GLU A 1 277 ? 27.744 34.761 23.620 1.00 42.30 ? ? ? ? ? ? 354 GLU A CD 1
+ATOM 2189 O OE1 . GLU A 1 277 ? 28.203 34.357 24.707 1.00 45.83 ? ? ? ? ? ? 354 GLU A OE1 1
+ATOM 2190 O OE2 . GLU A 1 277 ? 27.124 34.023 22.826 1.00 43.84 ? ? ? ? ? ? 354 GLU A OE2 1
+ATOM 2191 N N . GLY A 1 278 ? 28.326 39.543 25.015 1.00 33.88 ? ? ? ? ? ? 355 GLY A N 1
+ATOM 2192 C CA . GLY A 1 278 ? 27.208 40.313 25.529 1.00 35.31 ? ? ? ? ? ? 355 GLY A CA 1
+ATOM 2193 C C . GLY A 1 278 ? 27.081 41.682 24.885 1.00 33.69 ? ? ? ? ? ? 355 GLY A C 1
+ATOM 2194 O O . GLY A 1 278 ? 25.974 42.148 24.610 1.00 33.05 ? ? ? ? ? ? 355 GLY A O 1
+ATOM 2195 N N . SER A 1 279 ? 28.215 42.332 24.640 1.00 33.69 ? ? ? ? ? ? 356 SER A N 1
+ATOM 2196 C CA . SER A 1 279 ? 28.210 43.656 24.030 1.00 34.85 ? ? ? ? ? ? 356 SER A CA 1
+ATOM 2197 C C . SER A 1 279 ? 27.623 43.596 22.622 1.00 34.90 ? ? ? ? ? ? 356 SER A C 1
+ATOM 2198 O O . SER A 1 279 ? 27.107 44.590 22.116 1.00 35.64 ? ? ? ? ? ? 356 SER A O 1
+ATOM 2199 C CB . SER A 1 279 ? 29.635 44.222 23.970 1.00 35.14 ? ? ? ? ? ? 356 SER A CB 1
+ATOM 2200 O OG . SER A 1 279 ? 30.459 43.436 23.124 1.00 37.58 ? ? ? ? ? ? 356 SER A OG 1
+ATOM 2201 N N . LYS A 1 280 ? 27.692 42.428 21.995 1.00 33.23 ? ? ? ? ? ? 357 LYS A N 1
+ATOM 2202 C CA . LYS A 1 280 ? 27.178 42.267 20.638 1.00 35.36 ? ? ? ? ? ? 357 LYS A CA 1
+ATOM 2203 C C . LYS A 1 280 ? 25.682 41.948 20.553 1.00 34.05 ? ? ? ? ? ? 357 LYS A C 1
+ATOM 2204 O O . LYS A 1 280 ? 25.147 41.766 19.457 1.00 32.78 ? ? ? ? ? ? 357 LYS A O 1
+ATOM 2205 C CB . LYS A 1 280 ? 27.966 41.180 19.906 1.00 36.98 ? ? ? ? ? ? 357 LYS A CB 1
+ATOM 2206 C CG . LYS A 1 280 ? 29.453 41.469 19.755 1.00 41.65 ? ? ? ? ? ? 357 LYS A CG 1
+ATOM 2207 C CD . LYS A 1 280 ? 30.141 40.330 19.014 1.00 45.86 ? ? ? ? ? ? 357 LYS A CD 1
+ATOM 2208 C CE . LYS A 1 280 ? 31.635 40.572 18.847 1.00 47.52 ? ? ? ? ? ? 357 LYS A CE 1
+ATOM 2209 N NZ . LYS A 1 280 ? 32.259 39.451 18.087 1.00 48.88 ? ? ? ? ? ? 357 LYS A NZ 1
+ATOM 2210 N N . GLN A 1 281 ? 25.012 41.867 21.696 1.00 31.52 ? ? ? ? ? ? 358 GLN A N 1
+ATOM 2211 C CA . GLN A 1 281 ? 23.581 41.577 21.701 1.00 31.01 ? ? ? ? ? ? 358 GLN A CA 1
+ATOM 2212 C C . GLN A 1 281 ? 22.817 42.855 21.362 1.00 30.49 ? ? ? ? ? ? 358 GLN A C 1
+ATOM 2213 O O . GLN A 1 281 ? 22.917 43.848 22.079 1.00 31.21 ? ? ? ? ? ? 358 GLN A O 1
+ATOM 2214 C CB . GLN A 1 281 ? 23.129 41.070 23.079 1.00 30.82 ? ? ? ? ? ? 358 GLN A CB 1
+ATOM 2215 C CG . GLN A 1 281 ? 23.859 39.832 23.581 1.00 29.67 ? ? ? ? ? ? 358 GLN A CG 1
+ATOM 2216 C CD . GLN A 1 281 ? 23.771 38.655 22.621 1.00 31.98 ? ? ? ? ? ? 358 GLN A CD 1
+ATOM 2217 O OE1 . GLN A 1 281 ? 22.686 38.142 22.333 1.00 31.27 ? ? ? ? ? ? 358 GLN A OE1 1
+ATOM 2218 N NE2 . GLN A 1 281 ? 24.922 38.221 22.121 1.00 31.56 ? ? ? ? ? ? 358 GLN A NE2 1
+ATOM 2219 N N . PRO A 1 282 ? 22.059 42.853 20.253 1.00 31.12 ? ? ? ? ? ? 359 PRO A N 1
+ATOM 2220 C CA . PRO A 1 282 ? 21.267 44.004 19.808 1.00 31.81 ? ? ? ? ? ? 359 PRO A CA 1
+ATOM 2221 C C . PRO A 1 282 ? 20.101 44.318 20.755 1.00 32.80 ? ? ? ? ? ? 359 PRO A C 1
+ATOM 2222 O O . PRO A 1 282 ? 19.622 43.441 21.475 1.00 30.98 ? ? ? ? ? ? 359 PRO A O 1
+ATOM 2223 C CB . PRO A 1 282 ? 20.790 43.560 18.428 1.00 33.21 ? ? ? ? ? ? 359 PRO A CB 1
+ATOM 2224 C CG . PRO A 1 282 ? 20.592 42.086 18.643 1.00 33.82 ? ? ? ? ? ? 359 PRO A CG 1
+ATOM 2225 C CD . PRO A 1 282 ? 21.926 41.756 19.281 1.00 30.97 ? ? ? ? ? ? 359 PRO A CD 1
+ATOM 2226 N N . LEU A 1 283 ? 19.642 45.566 20.740 1.00 31.85 ? ? ? ? ? ? 360 LEU A N 1
+ATOM 2227 C CA . LEU A 1 283 ? 18.544 45.997 21.604 1.00 31.30 ? ? ? ? ? ? 360 LEU A CA 1
+ATOM 2228 C C . LEU A 1 283 ? 17.344 45.043 21.610 1.00 28.87 ? ? ? ? ? ? 360 LEU A C 1
+ATOM 2229 O O . LEU A 1 283 ? 16.766 44.779 22.662 1.00 30.11 ? ? ? ? ? ? 360 LEU A O 1
+ATOM 2230 C CB . LEU A 1 283 ? 18.091 47.405 21.209 1.00 32.24 ? ? ? ? ? ? 360 LEU A CB 1
+ATOM 2231 C CG . LEU A 1 283 ? 16.956 48.034 22.021 1.00 34.57 ? ? ? ? ? ? 360 LEU A CG 1
+ATOM 2232 C CD1 . LEU A 1 283 ? 17.328 48.103 23.500 1.00 33.69 ? ? ? ? ? ? 360 LEU A CD1 1
+ATOM 2233 C CD2 . LEU A 1 283 ? 16.676 49.427 21.476 1.00 34.87 ? ? ? ? ? ? 360 LEU A CD2 1
+ATOM 2234 N N . PRO A 1 284 ? 16.929 44.545 20.432 1.00 26.37 ? ? ? ? ? ? 361 PRO A N 1
+ATOM 2235 C CA . PRO A 1 284 ? 15.792 43.621 20.376 1.00 26.15 ? ? ? ? ? ? 361 PRO A CA 1
+ATOM 2236 C C . PRO A 1 284 ? 16.066 42.360 21.206 1.00 25.71 ? ? ? ? ? ? 361 PRO A C 1
+ATOM 2237 O O . PRO A 1 284 ? 15.153 41.778 21.804 1.00 19.80 ? ? ? ? ? ? 361 PRO A O 1
+ATOM 2238 C CB . PRO A 1 284 ? 15.684 43.319 18.880 1.00 26.77 ? ? ? ? ? ? 361 PRO A CB 1
+ATOM 2239 C CG . PRO A 1 284 ? 16.149 44.621 18.262 1.00 25.09 ? ? ? ? ? ? 361 PRO A CG 1
+ATOM 2240 C CD . PRO A 1 284 ? 17.418 44.809 19.070 1.00 28.73 ? ? ? ? ? ? 361 PRO A CD 1
+ATOM 2241 N N . LYS A 1 285 ? 17.329 41.943 21.234 1.00 23.81 ? ? ? ? ? ? 362 LYS A N 1
+ATOM 2242 C CA . LYS A 1 285 ? 17.704 40.758 21.993 1.00 26.32 ? ? ? ? ? ? 362 LYS A CA 1
+ATOM 2243 C C . LYS A 1 285 ? 17.665 41.076 23.475 1.00 23.24 ? ? ? ? ? ? 362 LYS A C 1
+ATOM 2244 O O . LYS A 1 285 ? 17.257 40.244 24.277 1.00 24.59 ? ? ? ? ? ? 362 LYS A O 1
+ATOM 2245 C CB . LYS A 1 285 ? 19.104 40.277 21.619 1.00 28.79 ? ? ? ? ? ? 362 LYS A CB 1
+ATOM 2246 C CG . LYS A 1 285 ? 19.150 38.810 21.220 1.00 36.45 ? ? ? ? ? ? 362 LYS A CG 1
+ATOM 2247 C CD . LYS A 1 285 ? 18.507 37.908 22.259 1.00 36.15 ? ? ? ? ? ? 362 LYS A CD 1
+ATOM 2248 C CE . LYS A 1 285 ? 18.428 36.480 21.746 1.00 42.18 ? ? ? ? ? ? 362 LYS A CE 1
+ATOM 2249 N NZ . LYS A 1 285 ? 17.665 35.586 22.654 1.00 40.93 ? ? ? ? ? ? 362 LYS A NZ 1
+ATOM 2250 N N . LEU A 1 286 ? 18.101 42.277 23.841 1.00 19.76 ? ? ? ? ? ? 363 LEU A N 1
+ATOM 2251 C CA . LEU A 1 286 ? 18.082 42.680 25.243 1.00 19.85 ? ? ? ? ? ? 363 LEU A CA 1
+ATOM 2252 C C . LEU A 1 286 ? 16.631 42.748 25.720 1.00 20.85 ? ? ? ? ? ? 363 LEU A C 1
+ATOM 2253 O O . LEU A 1 286 ? 16.320 42.416 26.862 1.00 20.47 ? ? ? ? ? ? 363 LEU A O 1
+ATOM 2254 C CB . LEU A 1 286 ? 18.752 44.043 25.415 1.00 20.58 ? ? ? ? ? ? 363 LEU A CB 1
+ATOM 2255 C CG . LEU A 1 286 ? 20.228 44.145 25.014 1.00 21.75 ? ? ? ? ? ? 363 LEU A CG 1
+ATOM 2256 C CD1 . LEU A 1 286 ? 20.690 45.584 25.188 1.00 22.46 ? ? ? ? ? ? 363 LEU A CD1 1
+ATOM 2257 C CD2 . LEU A 1 286 ? 21.071 43.203 25.852 1.00 16.66 ? ? ? ? ? ? 363 LEU A CD2 1
+ATOM 2258 N N . ILE A 1 287 ? 15.741 43.186 24.836 1.00 19.92 ? ? ? ? ? ? 364 ILE A N 1
+ATOM 2259 C CA . ILE A 1 287 ? 14.333 43.264 25.175 1.00 21.25 ? ? ? ? ? ? 364 ILE A CA 1
+ATOM 2260 C C . ILE A 1 287 ? 13.800 41.848 25.366 1.00 20.67 ? ? ? ? ? ? 364 ILE A C 1
+ATOM 2261 O O . ILE A 1 287 ? 12.989 41.609 26.257 1.00 19.87 ? ? ? ? ? ? 364 ILE A O 1
+ATOM 2262 C CB . ILE A 1 287 ? 13.513 43.962 24.061 1.00 24.30 ? ? ? ? ? ? 364 ILE A CB 1
+ATOM 2263 C CG1 . ILE A 1 287 ? 13.983 45.411 23.891 1.00 24.42 ? ? ? ? ? ? 364 ILE A CG1 1
+ATOM 2264 C CG2 . ILE A 1 287 ? 12.036 43.913 24.395 1.00 21.93 ? ? ? ? ? ? 364 ILE A CG2 1
+ATOM 2265 C CD1 . ILE A 1 287 ? 13.853 46.247 25.130 1.00 25.22 ? ? ? ? ? ? 364 ILE A CD1 1
+ATOM 2266 N N . ASP A 1 288 ? 14.252 40.907 24.535 1.00 18.64 ? ? ? ? ? ? 365 ASP A N 1
+ATOM 2267 C CA . ASP A 1 288 ? 13.774 39.538 24.672 1.00 16.40 ? ? ? ? ? ? 365 ASP A CA 1
+ATOM 2268 C C . ASP A 1 288 ? 14.245 38.955 26.000 1.00 16.52 ? ? ? ? ? ? 365 ASP A C 1
+ATOM 2269 O O . ASP A 1 288 ? 13.514 38.194 26.637 1.00 13.93 ? ? ? ? ? ? 365 ASP A O 1
+ATOM 2270 C CB . ASP A 1 288 ? 14.238 38.646 23.523 1.00 17.71 ? ? ? ? ? ? 365 ASP A CB 1
+ATOM 2271 C CG . ASP A 1 288 ? 13.586 37.276 23.573 1.00 18.82 ? ? ? ? ? ? 365 ASP A CG 1
+ATOM 2272 O OD1 . ASP A 1 288 ? 12.342 37.215 23.542 1.00 20.31 ? ? ? ? ? ? 365 ASP A OD1 1
+ATOM 2273 O OD2 . ASP A 1 288 ? 14.302 36.263 23.662 1.00 22.60 ? ? ? ? ? ? 365 ASP A OD2 1
+ATOM 2274 N N . PHE A 1 289 ? 15.463 39.300 26.414 1.00 15.95 ? ? ? ? ? ? 366 PHE A N 1
+ATOM 2275 C CA . PHE A 1 289 ? 15.963 38.835 27.706 1.00 18.95 ? ? ? ? ? ? 366 PHE A CA 1
+ATOM 2276 C C . PHE A 1 289 ? 15.025 39.382 28.790 1.00 17.56 ? ? ? ? ? ? 366 PHE A C 1
+ATOM 2277 O O . PHE A 1 289 ? 14.646 38.675 29.725 1.00 17.73 ? ? ? ? ? ? 366 PHE A O 1
+ATOM 2278 C CB . PHE A 1 289 ? 17.382 39.348 27.991 1.00 16.89 ? ? ? ? ? ? 366 PHE A CB 1
+ATOM 2279 C CG . PHE A 1 289 ? 18.453 38.751 27.114 1.00 18.95 ? ? ? ? ? ? 366 PHE A CG 1
+ATOM 2280 C CD1 . PHE A 1 289 ? 18.434 37.405 26.780 1.00 20.19 ? ? ? ? ? ? 366 PHE A CD1 1
+ATOM 2281 C CD2 . PHE A 1 289 ? 19.535 39.524 26.696 1.00 19.58 ? ? ? ? ? ? 366 PHE A CD2 1
+ATOM 2282 C CE1 . PHE A 1 289 ? 19.481 36.832 26.043 1.00 24.03 ? ? ? ? ? ? 366 PHE A CE1 1
+ATOM 2283 C CE2 . PHE A 1 289 ? 20.589 38.958 25.960 1.00 22.29 ? ? ? ? ? ? 366 PHE A CE2 1
+ATOM 2284 C CZ . PHE A 1 289 ? 20.559 37.611 25.635 1.00 23.27 ? ? ? ? ? ? 366 PHE A CZ 1
+ATOM 2285 N N . SER A 1 290 ? 14.658 40.653 28.663 1.00 18.26 ? ? ? ? ? ? 367 SER A N 1
+ATOM 2286 C CA . SER A 1 290 ? 13.759 41.282 29.629 1.00 17.05 ? ? ? ? ? ? 367 SER A CA 1
+ATOM 2287 C C . SER A 1 290 ? 12.401 40.590 29.657 1.00 15.36 ? ? ? ? ? ? 367 SER A C 1
+ATOM 2288 O O . SER A 1 290 ? 11.797 40.426 30.721 1.00 16.67 ? ? ? ? ? ? 367 SER A O 1
+ATOM 2289 C CB . SER A 1 290 ? 13.568 42.760 29.285 1.00 20.54 ? ? ? ? ? ? 367 SER A CB 1
+ATOM 2290 O OG . SER A 1 290 ? 14.791 43.455 29.410 1.00 22.25 ? ? ? ? ? ? 367 SER A OG 1
+ATOM 2291 N N . ALA A 1 291 ? 11.919 40.189 28.484 1.00 14.82 ? ? ? ? ? ? 368 ALA A N 1
+ATOM 2292 C CA . ALA A 1 291 ? 10.627 39.511 28.372 1.00 13.78 ? ? ? ? ? ? 368 ALA A CA 1
+ATOM 2293 C C . ALA A 1 291 ? 10.685 38.130 29.025 1.00 16.62 ? ? ? ? ? ? 368 ALA A C 1
+ATOM 2294 O O . ALA A 1 291 ? 9.718 37.675 29.648 1.00 14.75 ? ? ? ? ? ? 368 ALA A O 1
+ATOM 2295 C CB . ALA A 1 291 ? 10.223 39.379 26.893 1.00 15.33 ? ? ? ? ? ? 368 ALA A CB 1
+ATOM 2296 N N . GLN A 1 292 ? 11.817 37.451 28.870 1.00 16.05 ? ? ? ? ? ? 369 GLN A N 1
+ATOM 2297 C CA . GLN A 1 292 ? 11.978 36.130 29.478 1.00 15.17 ? ? ? ? ? ? 369 GLN A CA 1
+ATOM 2298 C C . GLN A 1 292 ? 11.916 36.224 30.997 1.00 15.20 ? ? ? ? ? ? 369 GLN A C 1
+ATOM 2299 O O . GLN A 1 292 ? 11.254 35.420 31.664 1.00 16.41 ? ? ? ? ? ? 369 GLN A O 1
+ATOM 2300 C CB . GLN A 1 292 ? 13.317 35.520 29.078 1.00 15.07 ? ? ? ? ? ? 369 GLN A CB 1
+ATOM 2301 C CG . GLN A 1 292 ? 13.385 35.023 27.658 1.00 17.98 ? ? ? ? ? ? 369 GLN A CG 1
+ATOM 2302 C CD . GLN A 1 292 ? 14.743 34.446 27.344 1.00 19.59 ? ? ? ? ? ? 369 GLN A CD 1
+ATOM 2303 O OE1 . GLN A 1 292 ? 15.293 33.656 28.119 1.00 20.13 ? ? ? ? ? ? 369 GLN A OE1 1
+ATOM 2304 N NE2 . GLN A 1 292 ? 15.291 34.821 26.200 1.00 18.20 ? ? ? ? ? ? 369 GLN A NE2 1
+ATOM 2305 N N . ILE A 1 293 ? 12.616 37.212 31.541 1.00 13.79 ? ? ? ? ? ? 370 ILE A N 1
+ATOM 2306 C CA . ILE A 1 293 ? 12.655 37.405 32.983 1.00 14.39 ? ? ? ? ? ? 370 ILE A CA 1
+ATOM 2307 C C . ILE A 1 293 ? 11.261 37.784 33.488 1.00 13.69 ? ? ? ? ? ? 370 ILE A C 1
+ATOM 2308 O O . ILE A 1 293 ? 10.794 37.277 34.511 1.00 16.05 ? ? ? ? ? ? 370 ILE A O 1
+ATOM 2309 C CB . ILE A 1 293 ? 13.687 38.497 33.335 1.00 11.90 ? ? ? ? ? ? 370 ILE A CB 1
+ATOM 2310 C CG1 . ILE A 1 293 ? 15.078 38.044 32.851 1.00 13.41 ? ? ? ? ? ? 370 ILE A CG1 1
+ATOM 2311 C CG2 . ILE A 1 293 ? 13.661 38.778 34.846 1.00 11.91 ? ? ? ? ? ? 370 ILE A CG2 1
+ATOM 2312 C CD1 . ILE A 1 293 ? 16.179 39.093 32.952 1.00 12.55 ? ? ? ? ? ? 370 ILE A CD1 1
+ATOM 2313 N N . ALA A 1 294 ? 10.595 38.671 32.756 1.00 13.16 ? ? ? ? ? ? 371 ALA A N 1
+ATOM 2314 C CA . ALA A 1 294 ? 9.252 39.105 33.121 1.00 13.95 ? ? ? ? ? ? 371 ALA A CA 1
+ATOM 2315 C C . ALA A 1 294 ? 8.342 37.888 33.125 1.00 16.39 ? ? ? ? ? ? 371 ALA A C 1
+ATOM 2316 O O . ALA A 1 294 ? 7.434 37.778 33.952 1.00 16.80 ? ? ? ? ? ? 371 ALA A O 1
+ATOM 2317 C CB . ALA A 1 294 ? 8.736 40.152 32.117 1.00 15.39 ? ? ? ? ? ? 371 ALA A CB 1
+ATOM 2318 N N . GLU A 1 295 ? 8.600 36.969 32.200 1.00 16.29 ? ? ? ? ? ? 372 GLU A N 1
+ATOM 2319 C CA . GLU A 1 295 ? 7.809 35.750 32.093 1.00 16.17 ? ? ? ? ? ? 372 GLU A CA 1
+ATOM 2320 C C . GLU A 1 295 ? 8.023 34.904 33.346 1.00 16.52 ? ? ? ? ? ? 372 GLU A C 1
+ATOM 2321 O O . GLU A 1 295 ? 7.077 34.343 33.912 1.00 14.28 ? ? ? ? ? ? 372 GLU A O 1
+ATOM 2322 C CB . GLU A 1 295 ? 8.242 34.952 30.864 1.00 14.52 ? ? ? ? ? ? 372 GLU A CB 1
+ATOM 2323 C CG . GLU A 1 295 ? 7.388 33.743 30.592 1.00 18.99 ? ? ? ? ? ? 372 GLU A CG 1
+ATOM 2324 C CD . GLU A 1 295 ? 7.962 32.876 29.493 1.00 25.72 ? ? ? ? ? ? 372 GLU A CD 1
+ATOM 2325 O OE1 . GLU A 1 295 ? 8.592 33.431 28.563 1.00 29.13 ? ? ? ? ? ? 372 GLU A OE1 1
+ATOM 2326 O OE2 . GLU A 1 295 ? 7.759 31.648 29.548 1.00 23.99 ? ? ? ? ? ? 372 GLU A OE2 1
+ATOM 2327 N N . GLY A 1 296 ? 9.282 34.808 33.762 1.00 13.85 ? ? ? ? ? ? 373 GLY A N 1
+ATOM 2328 C CA . GLY A 1 296 ? 9.610 34.056 34.959 1.00 13.42 ? ? ? ? ? ? 373 GLY A CA 1
+ATOM 2329 C C . GLY A 1 296 ? 8.966 34.722 36.162 1.00 13.50 ? ? ? ? ? ? 373 GLY A C 1
+ATOM 2330 O O . GLY A 1 296 ? 8.442 34.041 37.040 1.00 14.72 ? ? ? ? ? ? 373 GLY A O 1
+ATOM 2331 N N . MET A 1 297 ? 9.004 36.053 36.211 1.00 13.49 ? ? ? ? ? ? 374 MET A N 1
+ATOM 2332 C CA . MET A 1 297 ? 8.397 36.769 37.333 1.00 13.38 ? ? ? ? ? ? 374 MET A CA 1
+ATOM 2333 C C . MET A 1 297 ? 6.872 36.678 37.319 1.00 12.31 ? ? ? ? ? ? 374 MET A C 1
+ATOM 2334 O O . MET A 1 297 ? 6.238 36.701 38.375 1.00 12.70 ? ? ? ? ? ? 374 MET A O 1
+ATOM 2335 C CB . MET A 1 297 ? 8.849 38.239 37.362 1.00 12.80 ? ? ? ? ? ? 374 MET A CB 1
+ATOM 2336 C CG . MET A 1 297 ? 10.338 38.439 37.711 1.00 12.11 ? ? ? ? ? ? 374 MET A CG 1
+ATOM 2337 S SD . MET A 1 297 ? 10.789 37.654 39.278 1.00 14.35 ? ? ? ? ? ? 374 MET A SD 1
+ATOM 2338 C CE . MET A 1 297 ? 9.528 38.434 40.393 1.00 9.47 ? ? ? ? ? ? 374 MET A CE 1
+ATOM 2339 N N . ALA A 1 298 ? 6.273 36.577 36.135 1.00 12.63 ? ? ? ? ? ? 375 ALA A N 1
+ATOM 2340 C CA . ALA A 1 298 ? 4.819 36.435 36.061 1.00 11.25 ? ? ? ? ? ? 375 ALA A CA 1
+ATOM 2341 C C . ALA A 1 298 ? 4.442 35.078 36.662 1.00 10.57 ? ? ? ? ? ? 375 ALA A C 1
+ATOM 2342 O O . ALA A 1 298 ? 3.392 34.933 37.286 1.00 13.22 ? ? ? ? ? ? 375 ALA A O 1
+ATOM 2343 C CB . ALA A 1 298 ? 4.341 36.528 34.609 1.00 11.31 ? ? ? ? ? ? 375 ALA A CB 1
+ATOM 2344 N N . PHE A 1 299 ? 5.299 34.080 36.468 1.00 10.92 ? ? ? ? ? ? 376 PHE A N 1
+ATOM 2345 C CA . PHE A 1 299 ? 5.060 32.747 37.036 1.00 11.52 ? ? ? ? ? ? 376 PHE A CA 1
+ATOM 2346 C C . PHE A 1 299 ? 5.121 32.853 38.572 1.00 14.01 ? ? ? ? ? ? 376 PHE A C 1
+ATOM 2347 O O . PHE A 1 299 ? 4.273 32.316 39.284 1.00 13.29 ? ? ? ? ? ? 376 PHE A O 1
+ATOM 2348 C CB . PHE A 1 299 ? 6.134 31.765 36.543 1.00 16.20 ? ? ? ? ? ? 376 PHE A CB 1
+ATOM 2349 C CG . PHE A 1 299 ? 6.113 30.431 37.240 1.00 14.99 ? ? ? ? ? ? 376 PHE A CG 1
+ATOM 2350 C CD1 . PHE A 1 299 ? 5.070 29.534 37.038 1.00 14.80 ? ? ? ? ? ? 376 PHE A CD1 1
+ATOM 2351 C CD2 . PHE A 1 299 ? 7.138 30.080 38.117 1.00 13.65 ? ? ? ? ? ? 376 PHE A CD2 1
+ATOM 2352 C CE1 . PHE A 1 299 ? 5.042 28.297 37.700 1.00 14.65 ? ? ? ? ? ? 376 PHE A CE1 1
+ATOM 2353 C CE2 . PHE A 1 299 ? 7.122 28.850 38.783 1.00 13.50 ? ? ? ? ? ? 376 PHE A CE2 1
+ATOM 2354 C CZ . PHE A 1 299 ? 6.074 27.958 38.574 1.00 15.54 ? ? ? ? ? ? 376 PHE A CZ 1
+ATOM 2355 N N . ILE A 1 300 ? 6.140 33.544 39.075 1.00 14.26 ? ? ? ? ? ? 377 ILE A N 1
+ATOM 2356 C CA . ILE A 1 300 ? 6.311 33.738 40.519 1.00 13.38 ? ? ? ? ? ? 377 ILE A CA 1
+ATOM 2357 C C . ILE A 1 300 ? 5.096 34.493 41.075 1.00 12.93 ? ? ? ? ? ? 377 ILE A C 1
+ATOM 2358 O O . ILE A 1 300 ? 4.583 34.178 42.154 1.00 13.57 ? ? ? ? ? ? 377 ILE A O 1
+ATOM 2359 C CB . ILE A 1 300 ? 7.635 34.505 40.795 1.00 12.29 ? ? ? ? ? ? 377 ILE A CB 1
+ATOM 2360 C CG1 . ILE A 1 300 ? 8.815 33.576 40.462 1.00 12.23 ? ? ? ? ? ? 377 ILE A CG1 1
+ATOM 2361 C CG2 . ILE A 1 300 ? 7.691 35.006 42.250 1.00 15.11 ? ? ? ? ? ? 377 ILE A CG2 1
+ATOM 2362 C CD1 . ILE A 1 300 ? 10.191 34.211 40.577 1.00 9.13 ? ? ? ? ? ? 377 ILE A CD1 1
+ATOM 2363 N N . GLU A 1 301 ? 4.636 35.478 40.312 1.00 14.62 ? ? ? ? ? ? 378 GLU A N 1
+ATOM 2364 C CA . GLU A 1 301 ? 3.466 36.271 40.672 1.00 16.13 ? ? ? ? ? ? 378 GLU A CA 1
+ATOM 2365 C C . GLU A 1 301 ? 2.245 35.341 40.790 1.00 16.19 ? ? ? ? ? ? 378 GLU A C 1
+ATOM 2366 O O . GLU A 1 301 ? 1.488 35.403 41.767 1.00 14.64 ? ? ? ? ? ? 378 GLU A O 1
+ATOM 2367 C CB . GLU A 1 301 ? 3.237 37.332 39.586 1.00 15.81 ? ? ? ? ? ? 378 GLU A CB 1
+ATOM 2368 C CG . GLU A 1 301 ? 2.102 38.309 39.855 1.00 15.77 ? ? ? ? ? ? 378 GLU A CG 1
+ATOM 2369 C CD . GLU A 1 301 ? 2.001 39.372 38.783 1.00 15.89 ? ? ? ? ? ? 378 GLU A CD 1
+ATOM 2370 O OE1 . GLU A 1 301 ? 1.483 39.081 37.678 1.00 13.44 ? ? ? ? ? ? 378 GLU A OE1 1
+ATOM 2371 O OE2 . GLU A 1 301 ? 2.469 40.499 39.041 1.00 16.56 ? ? ? ? ? ? 378 GLU A OE2 1
+ATOM 2372 N N . GLN A 1 302 ? 2.058 34.473 39.797 1.00 14.95 ? ? ? ? ? ? 379 GLN A N 1
+ATOM 2373 C CA . GLN A 1 302 ? 0.931 33.538 39.807 1.00 16.33 ? ? ? ? ? ? 379 GLN A CA 1
+ATOM 2374 C C . GLN A 1 302 ? 0.954 32.564 40.965 1.00 17.32 ? ? ? ? ? ? 379 GLN A C 1
+ATOM 2375 O O . GLN A 1 302 ? -0.101 32.180 41.473 1.00 15.68 ? ? ? ? ? ? 379 GLN A O 1
+ATOM 2376 C CB . GLN A 1 302 ? 0.855 32.733 38.501 1.00 19.31 ? ? ? ? ? ? 379 GLN A CB 1
+ATOM 2377 C CG . GLN A 1 302 ? 0.359 33.552 37.345 1.00 27.32 ? ? ? ? ? ? 379 GLN A CG 1
+ATOM 2378 C CD . GLN A 1 302 ? -1.024 34.133 37.607 1.00 34.26 ? ? ? ? ? ? 379 GLN A CD 1
+ATOM 2379 O OE1 . GLN A 1 302 ? -1.336 35.241 37.161 1.00 37.20 ? ? ? ? ? ? 379 GLN A OE1 1
+ATOM 2380 N NE2 . GLN A 1 302 ? -1.865 33.380 38.316 1.00 30.52 ? ? ? ? ? ? 379 GLN A NE2 1
+ATOM 2381 N N . ARG A 1 303 ? 2.151 32.158 41.376 1.00 14.97 ? ? ? ? ? ? 380 ARG A N 1
+ATOM 2382 C CA . ARG A 1 303 ? 2.301 31.210 42.474 1.00 15.36 ? ? ? ? ? ? 380 ARG A CA 1
+ATOM 2383 C C . ARG A 1 303 ? 2.355 31.878 43.853 1.00 13.62 ? ? ? ? ? ? 380 ARG A C 1
+ATOM 2384 O O . ARG A 1 303 ? 2.548 31.209 44.862 1.00 14.41 ? ? ? ? ? ? 380 ARG A O 1
+ATOM 2385 C CB . ARG A 1 303 ? 3.555 30.348 42.245 1.00 19.87 ? ? ? ? ? ? 380 ARG A CB 1
+ATOM 2386 C CG . ARG A 1 303 ? 3.486 29.450 40.980 1.00 21.47 ? ? ? ? ? ? 380 ARG A CG 1
+ATOM 2387 C CD . ARG A 1 303 ? 2.501 28.291 41.167 1.00 20.19 ? ? ? ? ? ? 380 ARG A CD 1
+ATOM 2388 N NE . ARG A 1 303 ? 3.010 27.405 42.205 1.00 23.74 ? ? ? ? ? ? 380 ARG A NE 1
+ATOM 2389 C CZ . ARG A 1 303 ? 3.924 26.462 41.998 1.00 24.65 ? ? ? ? ? ? 380 ARG A CZ 1
+ATOM 2390 N NH1 . ARG A 1 303 ? 4.427 26.264 40.786 1.00 20.41 ? ? ? ? ? ? 380 ARG A NH1 1
+ATOM 2391 N NH2 . ARG A 1 303 ? 4.395 25.764 43.019 1.00 29.65 ? ? ? ? ? ? 380 ARG A NH2 1
+ATOM 2392 N N . ASN A 1 304 ? 2.156 33.191 43.899 1.00 12.05 ? ? ? ? ? ? 381 ASN A N 1
+ATOM 2393 C CA . ASN A 1 304 ? 2.196 33.939 45.165 1.00 17.55 ? ? ? ? ? ? 381 ASN A CA 1
+ATOM 2394 C C . ASN A 1 304 ? 3.528 33.783 45.897 1.00 15.93 ? ? ? ? ? ? 381 ASN A C 1
+ATOM 2395 O O . ASN A 1 304 ? 3.555 33.434 47.080 1.00 16.13 ? ? ? ? ? ? 381 ASN A O 1
+ATOM 2396 C CB . ASN A 1 304 ? 1.056 33.509 46.112 1.00 14.64 ? ? ? ? ? ? 381 ASN A CB 1
+ATOM 2397 C CG . ASN A 1 304 ? 0.953 34.386 47.384 1.00 19.79 ? ? ? ? ? ? 381 ASN A CG 1
+ATOM 2398 O OD1 . ASN A 1 304 ? 0.258 34.022 48.339 1.00 19.13 ? ? ? ? ? ? 381 ASN A OD1 1
+ATOM 2399 N ND2 . ASN A 1 304 ? 1.624 35.538 47.388 1.00 15.35 ? ? ? ? ? ? 381 ASN A ND2 1
+ATOM 2400 N N . TYR A 1 305 ? 4.635 33.992 45.192 1.00 16.03 ? ? ? ? ? ? 382 TYR A N 1
+ATOM 2401 C CA . TYR A 1 305 ? 5.935 33.954 45.853 1.00 12.73 ? ? ? ? ? ? 382 TYR A CA 1
+ATOM 2402 C C . TYR A 1 305 ? 6.541 35.328 45.595 1.00 11.71 ? ? ? ? ? ? 382 TYR A C 1
+ATOM 2403 O O . TYR A 1 305 ? 5.923 36.170 44.937 1.00 11.61 ? ? ? ? ? ? 382 TYR A O 1
+ATOM 2404 C CB . TYR A 1 305 ? 6.845 32.835 45.310 1.00 11.84 ? ? ? ? ? ? 382 TYR A CB 1
+ATOM 2405 C CG . TYR A 1 305 ? 7.960 32.467 46.282 1.00 14.16 ? ? ? ? ? ? 382 TYR A CG 1
+ATOM 2406 C CD1 . TYR A 1 305 ? 7.661 32.077 47.595 1.00 14.96 ? ? ? ? ? ? 382 TYR A CD1 1
+ATOM 2407 C CD2 . TYR A 1 305 ? 9.301 32.492 45.894 1.00 12.80 ? ? ? ? ? ? 382 TYR A CD2 1
+ATOM 2408 C CE1 . TYR A 1 305 ? 8.673 31.718 48.497 1.00 14.14 ? ? ? ? ? ? 382 TYR A CE1 1
+ATOM 2409 C CE2 . TYR A 1 305 ? 10.321 32.133 46.790 1.00 13.96 ? ? ? ? ? ? 382 TYR A CE2 1
+ATOM 2410 C CZ . TYR A 1 305 ? 9.996 31.745 48.086 1.00 14.40 ? ? ? ? ? ? 382 TYR A CZ 1
+ATOM 2411 O OH . TYR A 1 305 ? 10.988 31.367 48.968 1.00 16.69 ? ? ? ? ? ? 382 TYR A OH 1
+ATOM 2412 N N . ILE A 1 306 ? 7.732 35.574 46.126 1.00 10.35 ? ? ? ? ? ? 383 ILE A N 1
+ATOM 2413 C CA . ILE A 1 306 ? 8.377 36.867 45.952 1.00 9.38 ? ? ? ? ? ? 383 ILE A CA 1
+ATOM 2414 C C . ILE A 1 306 ? 9.864 36.604 45.791 1.00 10.29 ? ? ? ? ? ? 383 ILE A C 1
+ATOM 2415 O O . ILE A 1 306 ? 10.428 35.784 46.511 1.00 10.25 ? ? ? ? ? ? 383 ILE A O 1
+ATOM 2416 C CB . ILE A 1 306 ? 8.176 37.755 47.205 1.00 11.81 ? ? ? ? ? ? 383 ILE A CB 1
+ATOM 2417 C CG1 . ILE A 1 306 ? 6.685 37.893 47.512 1.00 8.97 ? ? ? ? ? ? 383 ILE A CG1 1
+ATOM 2418 C CG2 . ILE A 1 306 ? 8.786 39.140 46.978 1.00 12.52 ? ? ? ? ? ? 383 ILE A CG2 1
+ATOM 2419 C CD1 . ILE A 1 306 ? 6.393 38.601 48.809 1.00 7.93 ? ? ? ? ? ? 383 ILE A CD1 1
+ATOM 2420 N N . HIS A 1 307 ? 10.504 37.288 44.854 1.00 10.25 ? ? ? ? ? ? 384 HIS A N 1
+ATOM 2421 C CA . HIS A 1 307 ? 11.937 37.082 44.667 1.00 13.95 ? ? ? ? ? ? 384 HIS A CA 1
+ATOM 2422 C C . HIS A 1 307 ? 12.730 37.683 45.830 1.00 13.59 ? ? ? ? ? ? 384 HIS A C 1
+ATOM 2423 O O . HIS A 1 307 ? 13.514 36.990 46.472 1.00 16.31 ? ? ? ? ? ? 384 HIS A O 1
+ATOM 2424 C CB . HIS A 1 307 ? 12.417 37.691 43.354 1.00 12.11 ? ? ? ? ? ? 384 HIS A CB 1
+ATOM 2425 C CG . HIS A 1 307 ? 13.816 37.294 43.010 1.00 9.86 ? ? ? ? ? ? 384 HIS A CG 1
+ATOM 2426 N ND1 . HIS A 1 307 ? 14.895 37.640 43.792 1.00 13.78 ? ? ? ? ? ? 384 HIS A ND1 1
+ATOM 2427 C CD2 . HIS A 1 307 ? 14.294 36.460 42.058 1.00 10.47 ? ? ? ? ? ? 384 HIS A CD2 1
+ATOM 2428 C CE1 . HIS A 1 307 ? 15.978 37.031 43.343 1.00 12.35 ? ? ? ? ? ? 384 HIS A CE1 1
+ATOM 2429 N NE2 . HIS A 1 307 ? 15.640 36.308 42.290 1.00 14.64 ? ? ? ? ? ? 384 HIS A NE2 1
+ATOM 2430 N N . ARG A 1 308 ? 12.515 38.975 46.076 1.00 12.61 ? ? ? ? ? ? 385 ARG A N 1
+ATOM 2431 C CA . ARG A 1 308 ? 13.147 39.728 47.162 1.00 11.92 ? ? ? ? ? ? 385 ARG A CA 1
+ATOM 2432 C C . ARG A 1 308 ? 14.540 40.277 46.874 1.00 14.06 ? ? ? ? ? ? 385 ARG A C 1
+ATOM 2433 O O . ARG A 1 308 ? 15.013 41.153 47.596 1.00 15.13 ? ? ? ? ? ? 385 ARG A O 1
+ATOM 2434 C CB . ARG A 1 308 ? 13.150 38.905 48.464 1.00 14.89 ? ? ? ? ? ? 385 ARG A CB 1
+ATOM 2435 C CG . ARG A 1 308 ? 11.734 38.620 49.007 1.00 13.17 ? ? ? ? ? ? 385 ARG A CG 1
+ATOM 2436 C CD . ARG A 1 308 ? 11.724 37.752 50.275 1.00 16.96 ? ? ? ? ? ? 385 ARG A CD 1
+ATOM 2437 N NE . ARG A 1 308 ? 10.360 37.377 50.664 1.00 16.67 ? ? ? ? ? ? 385 ARG A NE 1
+ATOM 2438 C CZ . ARG A 1 308 ? 9.683 37.899 51.684 1.00 17.13 ? ? ? ? ? ? 385 ARG A CZ 1
+ATOM 2439 N NH1 . ARG A 1 308 ? 10.231 38.838 52.447 1.00 17.17 ? ? ? ? ? ? 385 ARG A NH1 1
+ATOM 2440 N NH2 . ARG A 1 308 ? 8.458 37.465 51.956 1.00 16.35 ? ? ? ? ? ? 385 ARG A NH2 1
+ATOM 2441 N N . ASP A 1 309 ? 15.190 39.789 45.822 1.00 12.88 ? ? ? ? ? ? 386 ASP A N 1
+ATOM 2442 C CA . ASP A 1 309 ? 16.516 40.300 45.464 1.00 16.02 ? ? ? ? ? ? 386 ASP A CA 1
+ATOM 2443 C C . ASP A 1 309 ? 16.716 40.186 43.959 1.00 16.99 ? ? ? ? ? ? 386 ASP A C 1
+ATOM 2444 O O . ASP A 1 309 ? 17.702 39.625 43.477 1.00 17.13 ? ? ? ? ? ? 386 ASP A O 1
+ATOM 2445 C CB . ASP A 1 309 ? 17.603 39.541 46.247 1.00 17.00 ? ? ? ? ? ? 386 ASP A CB 1
+ATOM 2446 C CG . ASP A 1 309 ? 18.997 40.131 46.055 1.00 19.96 ? ? ? ? ? ? 386 ASP A CG 1
+ATOM 2447 O OD1 . ASP A 1 309 ? 19.114 41.365 45.879 1.00 21.44 ? ? ? ? ? ? 386 ASP A OD1 1
+ATOM 2448 O OD2 . ASP A 1 309 ? 19.979 39.358 46.116 1.00 20.68 ? ? ? ? ? ? 386 ASP A OD2 1
+ATOM 2449 N N . LEU A 1 310 ? 15.760 40.735 43.215 1.00 16.57 ? ? ? ? ? ? 387 LEU A N 1
+ATOM 2450 C CA . LEU A 1 310 ? 15.816 40.685 41.766 1.00 15.50 ? ? ? ? ? ? 387 LEU A CA 1
+ATOM 2451 C C . LEU A 1 310 ? 16.802 41.710 41.213 1.00 15.14 ? ? ? ? ? ? 387 LEU A C 1
+ATOM 2452 O O . LEU A 1 310 ? 16.697 42.893 41.495 1.00 17.19 ? ? ? ? ? ? 387 LEU A O 1
+ATOM 2453 C CB . LEU A 1 310 ? 14.418 40.926 41.183 1.00 16.94 ? ? ? ? ? ? 387 LEU A CB 1
+ATOM 2454 C CG . LEU A 1 310 ? 14.247 40.766 39.669 1.00 18.98 ? ? ? ? ? ? 387 LEU A CG 1
+ATOM 2455 C CD1 . LEU A 1 310 ? 14.575 39.332 39.267 1.00 14.63 ? ? ? ? ? ? 387 LEU A CD1 1
+ATOM 2456 C CD2 . LEU A 1 310 ? 12.794 41.112 39.282 1.00 16.73 ? ? ? ? ? ? 387 LEU A CD2 1
+ATOM 2457 N N . ARG A 1 311 ? 17.768 41.235 40.439 1.00 14.79 ? ? ? ? ? ? 388 ARG A N 1
+ATOM 2458 C CA . ARG A 1 311 ? 18.786 42.082 39.826 1.00 16.03 ? ? ? ? ? ? 388 ARG A CA 1
+ATOM 2459 C C . ARG A 1 311 ? 19.565 41.216 38.833 1.00 17.06 ? ? ? ? ? ? 388 ARG A C 1
+ATOM 2460 O O . ARG A 1 311 ? 19.514 39.978 38.911 1.00 11.95 ? ? ? ? ? ? 388 ARG A O 1
+ATOM 2461 C CB . ARG A 1 311 ? 19.698 42.734 40.907 1.00 16.39 ? ? ? ? ? ? 388 ARG A CB 1
+ATOM 2462 C CG . ARG A 1 311 ? 20.347 41.804 41.941 1.00 21.57 ? ? ? ? ? ? 388 ARG A CG 1
+ATOM 2463 C CD . ARG A 1 311 ? 21.095 42.592 43.067 1.00 16.56 ? ? ? ? ? ? 388 ARG A CD 1
+ATOM 2464 N NE . ARG A 1 311 ? 21.437 41.719 44.197 1.00 21.69 ? ? ? ? ? ? 388 ARG A NE 1
+ATOM 2465 C CZ . ARG A 1 311 ? 22.551 40.995 44.303 1.00 22.73 ? ? ? ? ? ? 388 ARG A CZ 1
+ATOM 2466 N NH1 . ARG A 1 311 ? 23.471 41.030 43.349 1.00 24.89 ? ? ? ? ? ? 388 ARG A NH1 1
+ATOM 2467 N NH2 . ARG A 1 311 ? 22.714 40.177 45.336 1.00 19.39 ? ? ? ? ? ? 388 ARG A NH2 1
+ATOM 2468 N N . ALA A 1 312 ? 20.265 41.854 37.892 1.00 15.85 ? ? ? ? ? ? 389 ALA A N 1
+ATOM 2469 C CA . ALA A 1 312 ? 21.005 41.123 36.861 1.00 17.36 ? ? ? ? ? ? 389 ALA A CA 1
+ATOM 2470 C C . ALA A 1 312 ? 21.995 40.095 37.402 1.00 17.79 ? ? ? ? ? ? 389 ALA A C 1
+ATOM 2471 O O . ALA A 1 312 ? 22.280 39.100 36.740 1.00 17.27 ? ? ? ? ? ? 389 ALA A O 1
+ATOM 2472 C CB . ALA A 1 312 ? 21.722 42.103 35.925 1.00 16.70 ? ? ? ? ? ? 389 ALA A CB 1
+ATOM 2473 N N . ALA A 1 313 ? 22.527 40.332 38.595 1.00 19.64 ? ? ? ? ? ? 390 ALA A N 1
+ATOM 2474 C CA . ALA A 1 313 ? 23.469 39.386 39.183 1.00 18.97 ? ? ? ? ? ? 390 ALA A CA 1
+ATOM 2475 C C . ALA A 1 313 ? 22.748 38.082 39.517 1.00 19.99 ? ? ? ? ? ? 390 ALA A C 1
+ATOM 2476 O O . ALA A 1 313 ? 23.371 37.019 39.574 1.00 16.95 ? ? ? ? ? ? 390 ALA A O 1
+ATOM 2477 C CB . ALA A 1 313 ? 24.090 39.972 40.446 1.00 20.67 ? ? ? ? ? ? 390 ALA A CB 1
+ATOM 2478 N N . ASN A 1 314 ? 21.435 38.170 39.739 1.00 18.17 ? ? ? ? ? ? 391 ASN A N 1
+ATOM 2479 C CA . ASN A 1 314 ? 20.646 36.992 40.081 1.00 17.78 ? ? ? ? ? ? 391 ASN A CA 1
+ATOM 2480 C C . ASN A 1 314 ? 19.850 36.382 38.940 1.00 17.24 ? ? ? ? ? ? 391 ASN A C 1
+ATOM 2481 O O . ASN A 1 314 ? 18.868 35.658 39.154 1.00 15.04 ? ? ? ? ? ? 391 ASN A O 1
+ATOM 2482 C CB . ASN A 1 314 ? 19.735 37.270 41.283 1.00 18.02 ? ? ? ? ? ? 391 ASN A CB 1
+ATOM 2483 C CG . ASN A 1 314 ? 20.528 37.472 42.576 1.00 22.85 ? ? ? ? ? ? 391 ASN A CG 1
+ATOM 2484 O OD1 . ASN A 1 314 ? 21.618 36.918 42.737 1.00 21.93 ? ? ? ? ? ? 391 ASN A OD1 1
+ATOM 2485 N ND2 . ASN A 1 314 ? 19.970 38.235 43.507 1.00 16.19 ? ? ? ? ? ? 391 ASN A ND2 1
+ATOM 2486 N N . ILE A 1 315 ? 20.274 36.691 37.722 1.00 16.53 ? ? ? ? ? ? 392 ILE A N 1
+ATOM 2487 C CA . ILE A 1 315 ? 19.666 36.103 36.542 1.00 14.82 ? ? ? ? ? ? 392 ILE A CA 1
+ATOM 2488 C C . ILE A 1 315 ? 20.817 35.294 35.929 1.00 11.41 ? ? ? ? ? ? 392 ILE A C 1
+ATOM 2489 O O . ILE A 1 315 ? 21.919 35.814 35.803 1.00 11.96 ? ? ? ? ? ? 392 ILE A O 1
+ATOM 2490 C CB . ILE A 1 315 ? 19.205 37.159 35.515 1.00 13.06 ? ? ? ? ? ? 392 ILE A CB 1
+ATOM 2491 C CG1 . ILE A 1 315 ? 18.214 38.143 36.151 1.00 11.78 ? ? ? ? ? ? 392 ILE A CG1 1
+ATOM 2492 C CG2 . ILE A 1 315 ? 18.532 36.447 34.342 1.00 13.93 ? ? ? ? ? ? 392 ILE A CG2 1
+ATOM 2493 C CD1 . ILE A 1 315 ? 16.946 37.477 36.686 1.00 12.95 ? ? ? ? ? ? 392 ILE A CD1 1
+ATOM 2494 N N . LEU A 1 316 ? 20.580 34.029 35.586 1.00 15.22 ? ? ? ? ? ? 393 LEU A N 1
+ATOM 2495 C CA . LEU A 1 316 ? 21.621 33.198 34.987 1.00 14.11 ? ? ? ? ? ? 393 LEU A CA 1
+ATOM 2496 C C . LEU A 1 316 ? 21.311 33.010 33.509 1.00 18.43 ? ? ? ? ? ? 393 LEU A C 1
+ATOM 2497 O O . LEU A 1 316 ? 20.158 33.120 33.095 1.00 17.19 ? ? ? ? ? ? 393 LEU A O 1
+ATOM 2498 C CB . LEU A 1 316 ? 21.686 31.835 35.676 1.00 14.71 ? ? ? ? ? ? 393 LEU A CB 1
+ATOM 2499 C CG . LEU A 1 316 ? 21.955 31.885 37.186 1.00 18.10 ? ? ? ? ? ? 393 LEU A CG 1
+ATOM 2500 C CD1 . LEU A 1 316 ? 21.960 30.471 37.742 1.00 17.40 ? ? ? ? ? ? 393 LEU A CD1 1
+ATOM 2501 C CD2 . LEU A 1 316 ? 23.286 32.565 37.463 1.00 19.55 ? ? ? ? ? ? 393 LEU A CD2 1
+ATOM 2502 N N . VAL A 1 317 ? 22.339 32.704 32.724 1.00 18.42 ? ? ? ? ? ? 394 VAL A N 1
+ATOM 2503 C CA . VAL A 1 317 ? 22.182 32.525 31.281 1.00 17.15 ? ? ? ? ? ? 394 VAL A CA 1
+ATOM 2504 C C . VAL A 1 317 ? 22.680 31.162 30.841 1.00 17.05 ? ? ? ? ? ? 394 VAL A C 1
+ATOM 2505 O O . VAL A 1 317 ? 23.835 30.834 31.078 1.00 19.72 ? ? ? ? ? ? 394 VAL A O 1
+ATOM 2506 C CB . VAL A 1 317 ? 22.988 33.599 30.512 1.00 17.67 ? ? ? ? ? ? 394 VAL A CB 1
+ATOM 2507 C CG1 . VAL A 1 317 ? 22.710 33.501 29.023 1.00 17.23 ? ? ? ? ? ? 394 VAL A CG1 1
+ATOM 2508 C CG2 . VAL A 1 317 ? 22.654 34.978 31.048 1.00 17.35 ? ? ? ? ? ? 394 VAL A CG2 1
+ATOM 2509 N N . SER A 1 318 ? 21.821 30.376 30.194 1.00 17.31 ? ? ? ? ? ? 395 SER A N 1
+ATOM 2510 C CA . SER A 1 318 ? 22.209 29.043 29.726 1.00 22.88 ? ? ? ? ? ? 395 SER A CA 1
+ATOM 2511 C C . SER A 1 318 ? 23.064 29.145 28.464 1.00 21.22 ? ? ? ? ? ? 395 SER A C 1
+ATOM 2512 O O . SER A 1 318 ? 23.265 30.231 27.922 1.00 22.27 ? ? ? ? ? ? 395 SER A O 1
+ATOM 2513 C CB . SER A 1 318 ? 20.976 28.193 29.410 1.00 19.14 ? ? ? ? ? ? 395 SER A CB 1
+ATOM 2514 O OG . SER A 1 318 ? 20.342 28.655 28.230 1.00 25.24 ? ? ? ? ? ? 395 SER A OG 1
+ATOM 2515 N N . ALA A 1 319 ? 23.560 28.006 27.995 1.00 22.22 ? ? ? ? ? ? 396 ALA A N 1
+ATOM 2516 C CA . ALA A 1 319 ? 24.388 27.983 26.795 1.00 24.53 ? ? ? ? ? ? 396 ALA A CA 1
+ATOM 2517 C C . ALA A 1 319 ? 23.619 28.487 25.572 1.00 24.77 ? ? ? ? ? ? 396 ALA A C 1
+ATOM 2518 O O . ALA A 1 319 ? 24.213 29.040 24.652 1.00 24.40 ? ? ? ? ? ? 396 ALA A O 1
+ATOM 2519 C CB . ALA A 1 319 ? 24.912 26.573 26.545 1.00 24.39 ? ? ? ? ? ? 396 ALA A CB 1
+ATOM 2520 N N . SER A 1 320 ? 22.300 28.310 25.569 1.00 23.70 ? ? ? ? ? ? 397 SER A N 1
+ATOM 2521 C CA . SER A 1 320 ? 21.470 28.758 24.447 1.00 23.28 ? ? ? ? ? ? 397 SER A CA 1
+ATOM 2522 C C . SER A 1 320 ? 20.924 30.177 24.646 1.00 23.69 ? ? ? ? ? ? 397 SER A C 1
+ATOM 2523 O O . SER A 1 320 ? 20.033 30.623 23.916 1.00 24.71 ? ? ? ? ? ? 397 SER A O 1
+ATOM 2524 C CB . SER A 1 320 ? 20.311 27.782 24.238 1.00 26.09 ? ? ? ? ? ? 397 SER A CB 1
+ATOM 2525 O OG . SER A 1 320 ? 19.534 27.644 25.419 1.00 31.46 ? ? ? ? ? ? 397 SER A OG 1
+ATOM 2526 N N . LEU A 1 321 ? 21.463 30.874 25.642 1.00 21.31 ? ? ? ? ? ? 398 LEU A N 1
+ATOM 2527 C CA . LEU A 1 321 ? 21.066 32.242 25.966 1.00 24.23 ? ? ? ? ? ? 398 LEU A CA 1
+ATOM 2528 C C . LEU A 1 321 ? 19.680 32.391 26.594 1.00 22.19 ? ? ? ? ? ? 398 LEU A C 1
+ATOM 2529 O O . LEU A 1 321 ? 19.042 33.428 26.449 1.00 25.17 ? ? ? ? ? ? 398 LEU A O 1
+ATOM 2530 C CB . LEU A 1 321 ? 21.161 33.142 24.723 1.00 25.89 ? ? ? ? ? ? 398 LEU A CB 1
+ATOM 2531 C CG . LEU A 1 321 ? 22.546 33.242 24.074 1.00 29.74 ? ? ? ? ? ? 398 LEU A CG 1
+ATOM 2532 C CD1 . LEU A 1 321 ? 22.503 34.240 22.920 1.00 31.29 ? ? ? ? ? ? 398 LEU A CD1 1
+ATOM 2533 C CD2 . LEU A 1 321 ? 23.569 33.682 25.110 1.00 29.28 ? ? ? ? ? ? 398 LEU A CD2 1
+ATOM 2534 N N . VAL A 1 322 ? 19.207 31.361 27.285 1.00 22.88 ? ? ? ? ? ? 399 VAL A N 1
+ATOM 2535 C CA . VAL A 1 322 ? 17.910 31.449 27.949 1.00 20.20 ? ? ? ? ? ? 399 VAL A CA 1
+ATOM 2536 C C . VAL A 1 322 ? 18.130 31.955 29.377 1.00 22.58 ? ? ? ? ? ? 399 VAL A C 1
+ATOM 2537 O O . VAL A 1 322 ? 19.037 31.500 30.081 1.00 21.05 ? ? ? ? ? ? 399 VAL A O 1
+ATOM 2538 C CB . VAL A 1 322 ? 17.196 30.081 27.986 1.00 21.62 ? ? ? ? ? ? 399 VAL A CB 1
+ATOM 2539 C CG1 . VAL A 1 322 ? 15.912 30.172 28.820 1.00 16.21 ? ? ? ? ? ? 399 VAL A CG1 1
+ATOM 2540 C CG2 . VAL A 1 322 ? 16.855 29.645 26.562 1.00 21.47 ? ? ? ? ? ? 399 VAL A CG2 1
+ATOM 2541 N N . CYS A 1 323 ? 17.311 32.912 29.794 1.00 18.51 ? ? ? ? ? ? 400 CYS A N 1
+ATOM 2542 C CA . CYS A 1 323 ? 17.427 33.478 31.133 1.00 19.40 ? ? ? ? ? ? 400 CYS A CA 1
+ATOM 2543 C C . CYS A 1 323 ? 16.721 32.649 32.181 1.00 18.25 ? ? ? ? ? ? 400 CYS A C 1
+ATOM 2544 O O . CYS A 1 323 ? 15.593 32.204 31.983 1.00 18.34 ? ? ? ? ? ? 400 CYS A O 1
+ATOM 2545 C CB . CYS A 1 323 ? 16.872 34.898 31.161 1.00 18.41 ? ? ? ? ? ? 400 CYS A CB 1
+ATOM 2546 S SG . CYS A 1 323 ? 17.856 36.038 30.208 1.00 25.24 ? ? ? ? ? ? 400 CYS A SG 1
+ATOM 2547 N N . LYS A 1 324 ? 17.409 32.432 33.293 1.00 15.06 ? ? ? ? ? ? 401 LYS A N 1
+ATOM 2548 C CA . LYS A 1 324 ? 16.855 31.668 34.393 1.00 18.46 ? ? ? ? ? ? 401 LYS A CA 1
+ATOM 2549 C C . LYS A 1 324 ? 17.016 32.474 35.674 1.00 18.07 ? ? ? ? ? ? 401 LYS A C 1
+ATOM 2550 O O . LYS A 1 324 ? 18.134 32.770 36.104 1.00 17.56 ? ? ? ? ? ? 401 LYS A O 1
+ATOM 2551 C CB . LYS A 1 324 ? 17.564 30.315 34.559 1.00 22.38 ? ? ? ? ? ? 401 LYS A CB 1
+ATOM 2552 C CG . LYS A 1 324 ? 17.005 29.113 33.772 1.00 24.36 ? ? ? ? ? ? 401 LYS A CG 1
+ATOM 2553 C CD . LYS A 1 324 ? 17.198 29.218 32.280 1.00 28.23 ? ? ? ? ? ? 401 LYS A CD 1
+ATOM 2554 C CE . LYS A 1 324 ? 17.124 27.840 31.620 1.00 22.22 ? ? ? ? ? ? 401 LYS A CE 1
+ATOM 2555 N NZ . LYS A 1 324 ? 15.868 27.095 31.872 1.00 18.93 ? ? ? ? ? ? 401 LYS A NZ 1
+ATOM 2556 N N . ILE A 1 325 ? 15.889 32.823 36.277 1.00 15.12 ? ? ? ? ? ? 402 ILE A N 1
+ATOM 2557 C CA . ILE A 1 325 ? 15.887 33.581 37.516 1.00 14.49 ? ? ? ? ? ? 402 ILE A CA 1
+ATOM 2558 C C . ILE A 1 325 ? 16.415 32.690 38.643 1.00 13.53 ? ? ? ? ? ? 402 ILE A C 1
+ATOM 2559 O O . ILE A 1 325 ? 15.962 31.546 38.814 1.00 13.24 ? ? ? ? ? ? 402 ILE A O 1
+ATOM 2560 C CB . ILE A 1 325 ? 14.464 34.053 37.831 1.00 15.75 ? ? ? ? ? ? 402 ILE A CB 1
+ATOM 2561 C CG1 . ILE A 1 325 ? 13.947 34.915 36.671 1.00 13.84 ? ? ? ? ? ? 402 ILE A CG1 1
+ATOM 2562 C CG2 . ILE A 1 325 ? 14.448 34.838 39.120 1.00 12.38 ? ? ? ? ? ? 402 ILE A CG2 1
+ATOM 2563 C CD1 . ILE A 1 325 ? 12.512 35.353 36.835 1.00 11.62 ? ? ? ? ? ? 402 ILE A CD1 1
+ATOM 2564 N N . ALA A 1 326 ? 17.378 33.217 39.399 1.00 13.65 ? ? ? ? ? ? 403 ALA A N 1
+ATOM 2565 C CA . ALA A 1 326 ? 17.994 32.499 40.510 1.00 12.46 ? ? ? ? ? ? 403 ALA A CA 1
+ATOM 2566 C C . ALA A 1 326 ? 17.867 33.235 41.841 1.00 15.27 ? ? ? ? ? ? 403 ALA A C 1
+ATOM 2567 O O . ALA A 1 326 ? 17.598 34.439 41.873 1.00 16.11 ? ? ? ? ? ? 403 ALA A O 1
+ATOM 2568 C CB . ALA A 1 326 ? 19.469 32.258 40.209 1.00 15.73 ? ? ? ? ? ? 403 ALA A CB 1
+ATOM 2569 N N . ASP A 1 327 ? 18.074 32.503 42.938 1.00 14.25 ? ? ? ? ? ? 404 ASP A N 1
+ATOM 2570 C CA . ASP A 1 327 ? 18.020 33.085 44.283 1.00 16.29 ? ? ? ? ? ? 404 ASP A CA 1
+ATOM 2571 C C . ASP A 1 327 ? 16.646 33.588 44.719 1.00 14.02 ? ? ? ? ? ? 404 ASP A C 1
+ATOM 2572 O O . ASP A 1 327 ? 16.548 34.324 45.692 1.00 13.60 ? ? ? ? ? ? 404 ASP A O 1
+ATOM 2573 C CB . ASP A 1 327 ? 19.030 34.243 44.388 1.00 14.64 ? ? ? ? ? ? 404 ASP A CB 1
+ATOM 2574 C CG . ASP A 1 327 ? 20.308 33.855 45.124 1.00 23.19 ? ? ? ? ? ? 404 ASP A CG 1
+ATOM 2575 O OD1 . ASP A 1 327 ? 20.786 32.717 44.952 1.00 22.90 ? ? ? ? ? ? 404 ASP A OD1 1
+ATOM 2576 O OD2 . ASP A 1 327 ? 20.848 34.708 45.863 1.00 26.78 ? ? ? ? ? ? 404 ASP A OD2 1
+ATOM 2577 N N . PHE A 1 328 ? 15.584 33.211 44.016 1.00 14.00 ? ? ? ? ? ? 405 PHE A N 1
+ATOM 2578 C CA . PHE A 1 328 ? 14.262 33.684 44.418 1.00 13.02 ? ? ? ? ? ? 405 PHE A CA 1
+ATOM 2579 C C . PHE A 1 328 ? 13.900 33.283 45.841 1.00 11.92 ? ? ? ? ? ? 405 PHE A C 1
+ATOM 2580 O O . PHE A 1 328 ? 13.974 32.108 46.199 1.00 13.04 ? ? ? ? ? ? 405 PHE A O 1
+ATOM 2581 C CB . PHE A 1 328 ? 13.164 33.190 43.453 1.00 12.37 ? ? ? ? ? ? 405 PHE A CB 1
+ATOM 2582 C CG . PHE A 1 328 ? 13.324 31.759 43.000 1.00 12.03 ? ? ? ? ? ? 405 PHE A CG 1
+ATOM 2583 C CD1 . PHE A 1 328 ? 14.113 31.448 41.892 1.00 12.98 ? ? ? ? ? ? 405 PHE A CD1 1
+ATOM 2584 C CD2 . PHE A 1 328 ? 12.671 30.728 43.662 1.00 12.16 ? ? ? ? ? ? 405 PHE A CD2 1
+ATOM 2585 C CE1 . PHE A 1 328 ? 14.241 30.118 41.447 1.00 14.91 ? ? ? ? ? ? 405 PHE A CE1 1
+ATOM 2586 C CE2 . PHE A 1 328 ? 12.792 29.410 43.233 1.00 14.16 ? ? ? ? ? ? 405 PHE A CE2 1
+ATOM 2587 C CZ . PHE A 1 328 ? 13.579 29.103 42.119 1.00 16.71 ? ? ? ? ? ? 405 PHE A CZ 1
+ATOM 2588 N N . GLY A 1 329 ? 13.532 34.285 46.640 1.00 13.40 ? ? ? ? ? ? 406 GLY A N 1
+ATOM 2589 C CA . GLY A 1 329 ? 13.126 34.085 48.023 1.00 14.03 ? ? ? ? ? ? 406 GLY A CA 1
+ATOM 2590 C C . GLY A 1 329 ? 14.210 33.874 49.071 1.00 16.48 ? ? ? ? ? ? 406 GLY A C 1
+ATOM 2591 O O . GLY A 1 329 ? 13.942 33.931 50.275 1.00 11.17 ? ? ? ? ? ? 406 GLY A O 1
+ATOM 2592 N N . LEU A 1 330 ? 15.438 33.646 48.629 1.00 16.79 ? ? ? ? ? ? 407 LEU A N 1
+ATOM 2593 C CA . LEU A 1 330 ? 16.528 33.381 49.561 1.00 17.97 ? ? ? ? ? ? 407 LEU A CA 1
+ATOM 2594 C C . LEU A 1 330 ? 16.790 34.483 50.590 1.00 17.49 ? ? ? ? ? ? 407 LEU A C 1
+ATOM 2595 O O . LEU A 1 330 ? 17.138 34.194 51.737 1.00 18.06 ? ? ? ? ? ? 407 LEU A O 1
+ATOM 2596 C CB . LEU A 1 330 ? 17.815 33.095 48.785 1.00 16.97 ? ? ? ? ? ? 407 LEU A CB 1
+ATOM 2597 C CG . LEU A 1 330 ? 19.000 32.625 49.629 1.00 20.18 ? ? ? ? ? ? 407 LEU A CG 1
+ATOM 2598 C CD1 . LEU A 1 330 ? 18.649 31.282 50.261 1.00 21.40 ? ? ? ? ? ? 407 LEU A CD1 1
+ATOM 2599 C CD2 . LEU A 1 330 ? 20.239 32.484 48.751 1.00 23.76 ? ? ? ? ? ? 407 LEU A CD2 1
+ATOM 2600 N N . ALA A 1 331 ? 16.623 35.738 50.181 1.00 16.43 ? ? ? ? ? ? 408 ALA A N 1
+ATOM 2601 C CA . ALA A 1 331 ? 16.871 36.873 51.067 1.00 16.32 ? ? ? ? ? ? 408 ALA A CA 1
+ATOM 2602 C C . ALA A 1 331 ? 16.074 36.838 52.354 1.00 19.31 ? ? ? ? ? ? 408 ALA A C 1
+ATOM 2603 O O . ALA A 1 331 ? 16.537 37.341 53.378 1.00 17.67 ? ? ? ? ? ? 408 ALA A O 1
+ATOM 2604 C CB . ALA A 1 331 ? 16.601 38.191 50.338 1.00 17.61 ? ? ? ? ? ? 408 ALA A CB 1
+ATOM 2605 N N . ARG A 1 332 ? 14.883 36.249 52.322 1.00 18.55 ? ? ? ? ? ? 409 ARG A N 1
+ATOM 2606 C CA . ARG A 1 332 ? 14.067 36.216 53.529 1.00 19.25 ? ? ? ? ? ? 409 ARG A CA 1
+ATOM 2607 C C . ARG A 1 332 ? 14.688 35.434 54.694 1.00 20.62 ? ? ? ? ? ? 409 ARG A C 1
+ATOM 2608 O O . ARG A 1 332 ? 14.365 35.691 55.855 1.00 19.33 ? ? ? ? ? ? 409 ARG A O 1
+ATOM 2609 C CB . ARG A 1 332 ? 12.676 35.656 53.237 1.00 19.41 ? ? ? ? ? ? 409 ARG A CB 1
+ATOM 2610 C CG . ARG A 1 332 ? 11.703 35.963 54.365 1.00 24.00 ? ? ? ? ? ? 409 ARG A CG 1
+ATOM 2611 C CD . ARG A 1 332 ? 10.318 35.402 54.128 1.00 24.74 ? ? ? ? ? ? 409 ARG A CD 1
+ATOM 2612 N NE . ARG A 1 332 ? 9.401 35.876 55.160 1.00 29.03 ? ? ? ? ? ? 409 ARG A NE 1
+ATOM 2613 C CZ . ARG A 1 332 ? 8.144 35.472 55.298 1.00 31.16 ? ? ? ? ? ? 409 ARG A CZ 1
+ATOM 2614 N NH1 . ARG A 1 332 ? 7.633 34.578 54.466 1.00 27.98 ? ? ? ? ? ? 409 ARG A NH1 1
+ATOM 2615 N NH2 . ARG A 1 332 ? 7.391 35.981 56.264 1.00 34.05 ? ? ? ? ? ? 409 ARG A NH2 1
+ATOM 2616 N N . VAL A 1 333 ? 15.571 34.483 54.408 1.00 18.62 ? ? ? ? ? ? 410 VAL A N 1
+ATOM 2617 C CA . VAL A 1 333 ? 16.169 33.733 55.506 1.00 18.07 ? ? ? ? ? ? 410 VAL A CA 1
+ATOM 2618 C C . VAL A 1 333 ? 17.604 34.122 55.903 1.00 20.76 ? ? ? ? ? ? 410 VAL A C 1
+ATOM 2619 O O . VAL A 1 333 ? 18.258 33.402 56.653 1.00 22.74 ? ? ? ? ? ? 410 VAL A O 1
+ATOM 2620 C CB . VAL A 1 333 ? 16.068 32.204 55.256 1.00 15.16 ? ? ? ? ? ? 410 VAL A CB 1
+ATOM 2621 C CG1 . VAL A 1 333 ? 14.599 31.774 55.312 1.00 19.11 ? ? ? ? ? ? 410 VAL A CG1 1
+ATOM 2622 C CG2 . VAL A 1 333 ? 16.656 31.845 53.897 1.00 20.45 ? ? ? ? ? ? 410 VAL A CG2 1
+ATOM 2623 N N . ILE A 1 334 ? 18.091 35.262 55.411 1.00 22.92 ? ? ? ? ? ? 411 ILE A N 1
+ATOM 2624 C CA . ILE A 1 334 ? 19.427 35.744 55.778 1.00 23.87 ? ? ? ? ? ? 411 ILE A CA 1
+ATOM 2625 C C . ILE A 1 334 ? 19.320 36.282 57.208 1.00 25.13 ? ? ? ? ? ? 411 ILE A C 1
+ATOM 2626 O O . ILE A 1 334 ? 18.374 36.993 57.527 1.00 24.11 ? ? ? ? ? ? 411 ILE A O 1
+ATOM 2627 C CB . ILE A 1 334 ? 19.887 36.900 54.865 1.00 25.85 ? ? ? ? ? ? 411 ILE A CB 1
+ATOM 2628 C CG1 . ILE A 1 334 ? 20.095 36.400 53.432 1.00 23.36 ? ? ? ? ? ? 411 ILE A CG1 1
+ATOM 2629 C CG2 . ILE A 1 334 ? 21.170 37.521 55.420 1.00 27.35 ? ? ? ? ? ? 411 ILE A CG2 1
+ATOM 2630 C CD1 . ILE A 1 334 ? 21.220 35.389 53.281 1.00 25.33 ? ? ? ? ? ? 411 ILE A CD1 1
+ATOM 2631 N N . GLU A 1 335 ? 20.280 35.963 58.070 1.00 29.37 ? ? ? ? ? ? 412 GLU A N 1
+ATOM 2632 C CA . GLU A 1 335 ? 20.216 36.427 59.461 1.00 35.38 ? ? ? ? ? ? 412 GLU A CA 1
+ATOM 2633 C C . GLU A 1 335 ? 20.735 37.839 59.738 1.00 37.86 ? ? ? ? ? ? 412 GLU A C 1
+ATOM 2634 O O . GLU A 1 335 ? 20.116 38.601 60.481 1.00 42.03 ? ? ? ? ? ? 412 GLU A O 1
+ATOM 2635 C CB . GLU A 1 335 ? 20.940 35.434 60.371 1.00 38.97 ? ? ? ? ? ? 412 GLU A CB 1
+ATOM 2636 C CG . GLU A 1 335 ? 20.176 34.145 60.600 1.00 41.87 ? ? ? ? ? ? 412 GLU A CG 1
+ATOM 2637 C CD . GLU A 1 335 ? 18.910 34.372 61.408 1.00 46.16 ? ? ? ? ? ? 412 GLU A CD 1
+ATOM 2638 O OE1 . GLU A 1 335 ? 19.025 34.838 62.559 1.00 48.75 ? ? ? ? ? ? 412 GLU A OE1 1
+ATOM 2639 O OE2 . GLU A 1 335 ? 17.806 34.092 60.896 1.00 48.05 ? ? ? ? ? ? 412 GLU A OE2 1
+ATOM 2640 N N . ASP A 1 336 ? 21.876 38.169 59.143 1.00 40.07 ? ? ? ? ? ? 413 ASP A N 1
+ATOM 2641 C CA . ASP A 1 336 ? 22.529 39.468 59.296 1.00 41.13 ? ? ? ? ? ? 413 ASP A CA 1
+ATOM 2642 C C . ASP A 1 336 ? 21.628 40.616 59.784 1.00 42.17 ? ? ? ? ? ? 413 ASP A C 1
+ATOM 2643 O O . ASP A 1 336 ? 20.727 41.069 59.072 1.00 39.42 ? ? ? ? ? ? 413 ASP A O 1
+ATOM 2644 C CB . ASP A 1 336 ? 23.191 39.837 57.967 1.00 40.97 ? ? ? ? ? ? 413 ASP A CB 1
+ATOM 2645 C CG . ASP A 1 336 ? 23.976 41.125 58.042 1.00 43.94 ? ? ? ? ? ? 413 ASP A CG 1
+ATOM 2646 O OD1 . ASP A 1 336 ? 23.363 42.187 58.280 1.00 39.53 ? ? ? ? ? ? 413 ASP A OD1 1
+ATOM 2647 O OD2 . ASP A 1 336 ? 25.213 41.069 57.861 1.00 46.75 ? ? ? ? ? ? 413 ASP A OD2 1
+ATOM 2648 N N . ASN A 1 337 ? 21.892 41.085 61.003 1.00 42.32 ? ? ? ? ? ? 414 ASN A N 1
+ATOM 2649 C CA . ASN A 1 337 ? 21.122 42.170 61.613 1.00 44.01 ? ? ? ? ? ? 414 ASN A CA 1
+ATOM 2650 C C . ASN A 1 337 ? 20.919 43.391 60.712 1.00 40.94 ? ? ? ? ? ? 414 ASN A C 1
+ATOM 2651 O O . ASN A 1 337 ? 19.818 43.930 60.638 1.00 40.95 ? ? ? ? ? ? 414 ASN A O 1
+ATOM 2652 C CB . ASN A 1 337 ? 21.773 42.601 62.938 1.00 46.42 ? ? ? ? ? ? 414 ASN A CB 1
+ATOM 2653 C CG . ASN A 1 337 ? 21.588 41.572 64.052 1.00 51.39 ? ? ? ? ? ? 414 ASN A CG 1
+ATOM 2654 O OD1 . ASN A 1 337 ? 22.131 41.722 65.150 1.00 54.20 ? ? ? ? ? ? 414 ASN A OD1 1
+ATOM 2655 N ND2 . ASN A 1 337 ? 20.807 40.531 63.778 1.00 50.96 ? ? ? ? ? ? 414 ASN A ND2 1
+ATOM 2656 N N . GLU A 1 338 ? 21.971 43.832 60.030 1.00 38.83 ? ? ? ? ? ? 415 GLU A N 1
+ATOM 2657 C CA . GLU A 1 338 ? 21.855 44.987 59.144 1.00 36.62 ? ? ? ? ? ? 415 GLU A CA 1
+ATOM 2658 C C . GLU A 1 338 ? 20.979 44.659 57.937 1.00 36.39 ? ? ? ? ? ? 415 GLU A C 1
+ATOM 2659 O O . GLU A 1 338 ? 20.108 45.445 57.555 1.00 35.34 ? ? ? ? ? ? 415 GLU A O 1
+ATOM 2660 C CB . GLU A 1 338 ? 23.236 45.431 58.657 1.00 39.78 ? ? ? ? ? ? 415 GLU A CB 1
+ATOM 2661 C CG . GLU A 1 338 ? 24.186 45.865 59.762 1.00 42.87 ? ? ? ? ? ? 415 GLU A CG 1
+ATOM 2662 C CD . GLU A 1 338 ? 25.550 46.266 59.228 1.00 45.27 ? ? ? ? ? ? 415 GLU A CD 1
+ATOM 2663 O OE1 . GLU A 1 338 ? 25.633 47.251 58.459 1.00 41.52 ? ? ? ? ? ? 415 GLU A OE1 1
+ATOM 2664 O OE2 . GLU A 1 338 ? 26.539 45.586 59.576 1.00 48.31 ? ? ? ? ? ? 415 GLU A OE2 1
+ATOM 2665 N N . TYR A 1 339 ? 21.216 43.494 57.339 1.00 33.98 ? ? ? ? ? ? 416 TYR A N 1
+ATOM 2666 C CA . TYR A 1 339 ? 20.458 43.066 56.166 1.00 32.45 ? ? ? ? ? ? 416 TYR A CA 1
+ATOM 2667 C C . TYR A 1 339 ? 18.968 42.990 56.509 1.00 33.22 ? ? ? ? ? ? 416 TYR A C 1
+ATOM 2668 O O . TYR A 1 339 ? 18.114 43.421 55.725 1.00 31.71 ? ? ? ? ? ? 416 TYR A O 1
+ATOM 2669 C CB . TYR A 1 339 ? 20.937 41.692 55.692 1.00 30.75 ? ? ? ? ? ? 416 TYR A CB 1
+ATOM 2670 C CG . TYR A 1 339 ? 20.505 41.348 54.282 1.00 31.10 ? ? ? ? ? ? 416 TYR A CG 1
+ATOM 2671 C CD1 . TYR A 1 339 ? 21.251 41.777 53.182 1.00 29.62 ? ? ? ? ? ? 416 TYR A CD1 1
+ATOM 2672 C CD2 . TYR A 1 339 ? 19.332 40.635 54.044 1.00 29.81 ? ? ? ? ? ? 416 TYR A CD2 1
+ATOM 2673 C CE1 . TYR A 1 339 ? 20.842 41.505 51.878 1.00 27.62 ? ? ? ? ? ? 416 TYR A CE1 1
+ATOM 2674 C CE2 . TYR A 1 339 ? 18.909 40.358 52.739 1.00 29.02 ? ? ? ? ? ? 416 TYR A CE2 1
+ATOM 2675 C CZ . TYR A 1 339 ? 19.668 40.798 51.663 1.00 28.42 ? ? ? ? ? ? 416 TYR A CZ 1
+ATOM 2676 O OH . TYR A 1 339 ? 19.255 40.542 50.372 1.00 28.54 ? ? ? ? ? ? 416 TYR A OH 1
+ATOM 2677 N N . THR A 1 340 ? 18.655 42.443 57.681 1.00 32.73 ? ? ? ? ? ? 417 THR A N 1
+ATOM 2678 C CA . THR A 1 340 ? 17.264 42.327 58.105 1.00 39.13 ? ? ? ? ? ? 417 THR A CA 1
+ATOM 2679 C C . THR A 1 340 ? 16.600 43.698 58.206 1.00 38.25 ? ? ? ? ? ? 417 THR A C 1
+ATOM 2680 O O . THR A 1 340 ? 15.395 43.828 57.993 1.00 39.75 ? ? ? ? ? ? 417 THR A O 1
+ATOM 2681 C CB . THR A 1 340 ? 17.144 41.613 59.465 1.00 38.98 ? ? ? ? ? ? 417 THR A CB 1
+ATOM 2682 O OG1 . THR A 1 340 ? 17.660 40.282 59.347 1.00 44.66 ? ? ? ? ? ? 417 THR A OG1 1
+ATOM 2683 C CG2 . THR A 1 340 ? 15.681 41.542 59.905 1.00 42.32 ? ? ? ? ? ? 417 THR A CG2 1
+ATOM 2684 N N . ALA A 1 341 ? 17.388 44.720 58.523 1.00 37.24 ? ? ? ? ? ? 418 ALA A N 1
+ATOM 2685 C CA . ALA A 1 341 ? 16.857 46.075 58.636 1.00 38.66 ? ? ? ? ? ? 418 ALA A CA 1
+ATOM 2686 C C . ALA A 1 341 ? 17.033 46.856 57.335 1.00 37.08 ? ? ? ? ? ? 418 ALA A C 1
+ATOM 2687 O O . ALA A 1 341 ? 16.915 48.080 57.321 1.00 38.42 ? ? ? ? ? ? 418 ALA A O 1
+ATOM 2688 C CB . ALA A 1 341 ? 17.544 46.815 59.787 1.00 39.58 ? ? ? ? ? ? 418 ALA A CB 1
+ATOM 2689 N N . ARG A 1 342 ? 17.311 46.147 56.245 1.00 36.49 ? ? ? ? ? ? 419 ARG A N 1
+ATOM 2690 C CA . ARG A 1 342 ? 17.511 46.781 54.943 1.00 36.36 ? ? ? ? ? ? 419 ARG A CA 1
+ATOM 2691 C C . ARG A 1 342 ? 18.547 47.902 55.036 1.00 37.07 ? ? ? ? ? ? 419 ARG A C 1
+ATOM 2692 O O . ARG A 1 342 ? 18.342 48.990 54.500 1.00 34.75 ? ? ? ? ? ? 419 ARG A O 1
+ATOM 2693 C CB . ARG A 1 342 ? 16.190 47.361 54.400 1.00 36.99 ? ? ? ? ? ? 419 ARG A CB 1
+ATOM 2694 C CG . ARG A 1 342 ? 15.055 46.349 54.204 1.00 33.96 ? ? ? ? ? ? 419 ARG A CG 1
+ATOM 2695 C CD . ARG A 1 342 ? 14.420 45.941 55.523 1.00 34.55 ? ? ? ? ? ? 419 ARG A CD 1
+ATOM 2696 N NE . ARG A 1 342 ? 13.684 47.051 56.126 1.00 39.41 ? ? ? ? ? ? 419 ARG A NE 1
+ATOM 2697 C CZ . ARG A 1 342 ? 13.097 47.003 57.319 1.00 41.97 ? ? ? ? ? ? 419 ARG A CZ 1
+ATOM 2698 N NH1 . ARG A 1 342 ? 13.156 45.898 58.051 1.00 44.12 ? ? ? ? ? ? 419 ARG A NH1 1
+ATOM 2699 N NH2 . ARG A 1 342 ? 12.434 48.056 57.773 1.00 44.07 ? ? ? ? ? ? 419 ARG A NH2 1
+ATOM 2700 N N . GLU A 1 343 ? 19.655 47.633 55.723 1.00 39.82 ? ? ? ? ? ? 420 GLU A N 1
+ATOM 2701 C CA . GLU A 1 343 ? 20.725 48.622 55.889 1.00 41.39 ? ? ? ? ? ? 420 GLU A CA 1
+ATOM 2702 C C . GLU A 1 343 ? 22.084 47.958 55.678 1.00 41.06 ? ? ? ? ? ? 420 GLU A C 1
+ATOM 2703 O O . GLU A 1 343 ? 22.204 46.739 55.768 1.00 39.91 ? ? ? ? ? ? 420 GLU A O 1
+ATOM 2704 C CB . GLU A 1 343 ? 20.674 49.231 57.299 1.00 42.09 ? ? ? ? ? ? 420 GLU A CB 1
+ATOM 2705 C CG . GLU A 1 343 ? 19.337 49.867 57.656 1.00 47.68 ? ? ? ? ? ? 420 GLU A CG 1
+ATOM 2706 C CD . GLU A 1 343 ? 19.304 50.446 59.061 1.00 49.43 ? ? ? ? ? ? 420 GLU A CD 1
+ATOM 2707 O OE1 . GLU A 1 343 ? 19.568 49.696 60.025 1.00 51.92 ? ? ? ? ? ? 420 GLU A OE1 1
+ATOM 2708 O OE2 . GLU A 1 343 ? 19.002 51.652 59.202 1.00 50.28 ? ? ? ? ? ? 420 GLU A OE2 1
+ATOM 2709 N N . GLY A 1 344 ? 23.106 48.758 55.393 1.00 40.97 ? ? ? ? ? ? 421 GLY A N 1
+ATOM 2710 C CA . GLY A 1 344 ? 24.431 48.193 55.201 1.00 42.21 ? ? ? ? ? ? 421 GLY A CA 1
+ATOM 2711 C C . GLY A 1 344 ? 24.897 48.049 53.766 1.00 41.74 ? ? ? ? ? ? 421 GLY A C 1
+ATOM 2712 O O . GLY A 1 344 ? 24.118 48.196 52.824 1.00 43.72 ? ? ? ? ? ? 421 GLY A O 1
+ATOM 2713 N N . ALA A 1 345 ? 26.181 47.744 53.606 1.00 42.01 ? ? ? ? ? ? 422 ALA A N 1
+ATOM 2714 C CA . ALA A 1 345 ? 26.790 47.585 52.291 1.00 41.99 ? ? ? ? ? ? 422 ALA A CA 1
+ATOM 2715 C C . ALA A 1 345 ? 26.477 46.231 51.666 1.00 41.83 ? ? ? ? ? ? 422 ALA A C 1
+ATOM 2716 O O . ALA A 1 345 ? 26.884 45.950 50.538 1.00 43.67 ? ? ? ? ? ? 422 ALA A O 1
+ATOM 2717 C CB . ALA A 1 345 ? 28.305 47.771 52.396 1.00 43.63 ? ? ? ? ? ? 422 ALA A CB 1
+ATOM 2718 N N . LYS A 1 346 ? 25.765 45.386 52.400 1.00 40.18 ? ? ? ? ? ? 423 LYS A N 1
+ATOM 2719 C CA . LYS A 1 346 ? 25.416 44.078 51.874 1.00 39.16 ? ? ? ? ? ? 423 LYS A CA 1
+ATOM 2720 C C . LYS A 1 346 ? 24.013 44.082 51.268 1.00 36.80 ? ? ? ? ? ? 423 LYS A C 1
+ATOM 2721 O O . LYS A 1 346 ? 23.714 43.273 50.388 1.00 37.20 ? ? ? ? ? ? 423 LYS A O 1
+ATOM 2722 C CB . LYS A 1 346 ? 25.510 43.014 52.975 1.00 39.68 ? ? ? ? ? ? 423 LYS A CB 1
+ATOM 2723 C CG . LYS A 1 346 ? 26.896 42.886 53.594 1.00 44.53 ? ? ? ? ? ? 423 LYS A CG 1
+ATOM 2724 C CD . LYS A 1 346 ? 26.967 41.745 54.603 1.00 45.84 ? ? ? ? ? ? 423 LYS A CD 1
+ATOM 2725 C CE . LYS A 1 346 ? 28.372 41.608 55.186 1.00 46.02 ? ? ? ? ? ? 423 LYS A CE 1
+ATOM 2726 N NZ . LYS A 1 346 ? 28.479 40.474 56.151 1.00 47.25 ? ? ? ? ? ? 423 LYS A NZ 1
+ATOM 2727 N N . PHE A 1 347 ? 23.167 45.005 51.724 1.00 33.14 ? ? ? ? ? ? 424 PHE A N 1
+ATOM 2728 C CA . PHE A 1 347 ? 21.787 45.092 51.241 1.00 29.28 ? ? ? ? ? ? 424 PHE A CA 1
+ATOM 2729 C C . PHE A 1 347 ? 21.659 45.822 49.903 1.00 30.33 ? ? ? ? ? ? 424 PHE A C 1
+ATOM 2730 O O . PHE A 1 347 ? 22.255 46.885 49.709 1.00 28.30 ? ? ? ? ? ? 424 PHE A O 1
+ATOM 2731 C CB . PHE A 1 347 ? 20.905 45.800 52.269 1.00 31.31 ? ? ? ? ? ? 424 PHE A CB 1
+ATOM 2732 C CG . PHE A 1 347 ? 19.440 45.627 52.013 1.00 32.64 ? ? ? ? ? ? 424 PHE A CG 1
+ATOM 2733 C CD1 . PHE A 1 347 ? 18.807 44.426 52.325 1.00 31.02 ? ? ? ? ? ? 424 PHE A CD1 1
+ATOM 2734 C CD2 . PHE A 1 347 ? 18.704 46.633 51.395 1.00 33.26 ? ? ? ? ? ? 424 PHE A CD2 1
+ATOM 2735 C CE1 . PHE A 1 347 ? 17.459 44.229 52.025 1.00 31.52 ? ? ? ? ? ? 424 PHE A CE1 1
+ATOM 2736 C CE2 . PHE A 1 347 ? 17.357 46.446 51.088 1.00 35.85 ? ? ? ? ? ? 424 PHE A CE2 1
+ATOM 2737 C CZ . PHE A 1 347 ? 16.734 45.237 51.404 1.00 33.91 ? ? ? ? ? ? 424 PHE A CZ 1
+ATOM 2738 N N . PRO A 1 348 ? 20.864 45.260 48.968 1.00 26.93 ? ? ? ? ? ? 425 PRO A N 1
+ATOM 2739 C CA . PRO A 1 348 ? 20.600 45.780 47.621 1.00 25.89 ? ? ? ? ? ? 425 PRO A CA 1
+ATOM 2740 C C . PRO A 1 348 ? 19.698 47.015 47.563 1.00 26.00 ? ? ? ? ? ? 425 PRO A C 1
+ATOM 2741 O O . PRO A 1 348 ? 18.710 47.022 46.822 1.00 22.59 ? ? ? ? ? ? 425 PRO A O 1
+ATOM 2742 C CB . PRO A 1 348 ? 19.957 44.580 46.928 1.00 25.41 ? ? ? ? ? ? 425 PRO A CB 1
+ATOM 2743 C CG . PRO A 1 348 ? 19.107 44.030 48.048 1.00 27.80 ? ? ? ? ? ? 425 PRO A CG 1
+ATOM 2744 C CD . PRO A 1 348 ? 20.167 43.969 49.142 1.00 25.81 ? ? ? ? ? ? 425 PRO A CD 1
+ATOM 2745 N N . ILE A 1 349 ? 20.050 48.053 48.321 1.00 23.69 ? ? ? ? ? ? 426 ILE A N 1
+ATOM 2746 C CA . ILE A 1 349 ? 19.275 49.297 48.369 1.00 22.91 ? ? ? ? ? ? 426 ILE A CA 1
+ATOM 2747 C C . ILE A 1 349 ? 18.852 49.865 47.020 1.00 22.18 ? ? ? ? ? ? 426 ILE A C 1
+ATOM 2748 O O . ILE A 1 349 ? 17.694 50.227 46.822 1.00 22.87 ? ? ? ? ? ? 426 ILE A O 1
+ATOM 2749 C CB . ILE A 1 349 ? 20.054 50.424 49.112 1.00 25.41 ? ? ? ? ? ? 426 ILE A CB 1
+ATOM 2750 C CG1 . ILE A 1 349 ? 20.181 50.082 50.596 1.00 23.08 ? ? ? ? ? ? 426 ILE A CG1 1
+ATOM 2751 C CG2 . ILE A 1 349 ? 19.344 51.770 48.931 1.00 23.30 ? ? ? ? ? ? 426 ILE A CG2 1
+ATOM 2752 C CD1 . ILE A 1 349 ? 18.851 50.009 51.328 1.00 26.69 ? ? ? ? ? ? 426 ILE A CD1 1
+ATOM 2753 N N . LYS A 1 350 ? 19.790 49.952 46.089 1.00 24.50 ? ? ? ? ? ? 427 LYS A N 1
+ATOM 2754 C CA . LYS A 1 350 ? 19.479 50.527 44.792 1.00 24.12 ? ? ? ? ? ? 427 LYS A CA 1
+ATOM 2755 C C . LYS A 1 350 ? 18.393 49.821 43.972 1.00 24.03 ? ? ? ? ? ? 427 LYS A C 1
+ATOM 2756 O O . LYS A 1 350 ? 17.799 50.434 43.089 1.00 23.50 ? ? ? ? ? ? 427 LYS A O 1
+ATOM 2757 C CB . LYS A 1 350 ? 20.770 50.666 43.979 1.00 25.80 ? ? ? ? ? ? 427 LYS A CB 1
+ATOM 2758 C CG . LYS A 1 350 ? 21.758 51.668 44.597 1.00 26.83 ? ? ? ? ? ? 427 LYS A CG 1
+ATOM 2759 C CD . LYS A 1 350 ? 22.967 51.877 43.700 1.00 26.42 ? ? ? ? ? ? 427 LYS A CD 1
+ATOM 2760 C CE . LYS A 1 350 ? 23.920 52.923 44.263 1.00 26.91 ? ? ? ? ? ? 427 LYS A CE 1
+ATOM 2761 N NZ . LYS A 1 350 ? 25.044 53.183 43.311 1.00 28.92 ? ? ? ? ? ? 427 LYS A NZ 1
+ATOM 2762 N N . TRP A 1 351 ? 18.125 48.552 44.277 1.00 25.59 ? ? ? ? ? ? 428 TRP A N 1
+ATOM 2763 C CA . TRP A 1 351 ? 17.112 47.751 43.565 1.00 21.07 ? ? ? ? ? ? 428 TRP A CA 1
+ATOM 2764 C C . TRP A 1 351 ? 15.832 47.570 44.374 1.00 21.51 ? ? ? ? ? ? 428 TRP A C 1
+ATOM 2765 O O . TRP A 1 351 ? 14.843 47.040 43.870 1.00 21.86 ? ? ? ? ? ? 428 TRP A O 1
+ATOM 2766 C CB . TRP A 1 351 ? 17.658 46.343 43.278 1.00 20.63 ? ? ? ? ? ? 428 TRP A CB 1
+ATOM 2767 C CG . TRP A 1 351 ? 18.713 46.245 42.225 1.00 21.62 ? ? ? ? ? ? 428 TRP A CG 1
+ATOM 2768 C CD1 . TRP A 1 351 ? 18.524 45.976 40.897 1.00 22.18 ? ? ? ? ? ? 428 TRP A CD1 1
+ATOM 2769 C CD2 . TRP A 1 351 ? 20.124 46.415 42.403 1.00 22.24 ? ? ? ? ? ? 428 TRP A CD2 1
+ATOM 2770 N NE1 . TRP A 1 351 ? 19.729 45.965 40.239 1.00 22.45 ? ? ? ? ? ? 428 TRP A NE1 1
+ATOM 2771 C CE2 . TRP A 1 351 ? 20.729 46.232 41.139 1.00 23.52 ? ? ? ? ? ? 428 TRP A CE2 1
+ATOM 2772 C CE3 . TRP A 1 351 ? 20.937 46.703 43.507 1.00 21.30 ? ? ? ? ? ? 428 TRP A CE3 1
+ATOM 2773 C CZ2 . TRP A 1 351 ? 22.115 46.327 40.948 1.00 21.03 ? ? ? ? ? ? 428 TRP A CZ2 1
+ATOM 2774 C CZ3 . TRP A 1 351 ? 22.318 46.800 43.316 1.00 23.77 ? ? ? ? ? ? 428 TRP A CZ3 1
+ATOM 2775 C CH2 . TRP A 1 351 ? 22.889 46.610 42.045 1.00 21.34 ? ? ? ? ? ? 428 TRP A CH2 1
+ATOM 2776 N N . THR A 1 352 ? 15.847 48.016 45.622 1.00 20.31 ? ? ? ? ? ? 429 THR A N 1
+ATOM 2777 C CA . THR A 1 352 ? 14.710 47.802 46.503 1.00 19.80 ? ? ? ? ? ? 429 THR A CA 1
+ATOM 2778 C C . THR A 1 352 ? 13.666 48.900 46.596 1.00 21.31 ? ? ? ? ? ? 429 THR A C 1
+ATOM 2779 O O . THR A 1 352 ? 13.993 50.076 46.702 1.00 22.72 ? ? ? ? ? ? 429 THR A O 1
+ATOM 2780 C CB . THR A 1 352 ? 15.224 47.474 47.903 1.00 20.16 ? ? ? ? ? ? 429 THR A CB 1
+ATOM 2781 O OG1 . THR A 1 352 ? 16.147 46.381 47.808 1.00 17.74 ? ? ? ? ? ? 429 THR A OG1 1
+ATOM 2782 C CG2 . THR A 1 352 ? 14.084 47.092 48.818 1.00 20.59 ? ? ? ? ? ? 429 THR A CG2 1
+ATOM 2783 N N . ALA A 1 353 ? 12.400 48.489 46.558 1.00 19.67 ? ? ? ? ? ? 430 ALA A N 1
+ATOM 2784 C CA . ALA A 1 353 ? 11.270 49.414 46.641 1.00 22.31 ? ? ? ? ? ? 430 ALA A CA 1
+ATOM 2785 C C . ALA A 1 353 ? 11.273 50.161 47.970 1.00 22.20 ? ? ? ? ? ? 430 ALA A C 1
+ATOM 2786 O O . ALA A 1 353 ? 11.544 49.577 49.022 1.00 21.16 ? ? ? ? ? ? 430 ALA A O 1
+ATOM 2787 C CB . ALA A 1 353 ? 9.960 48.651 46.489 1.00 17.38 ? ? ? ? ? ? 430 ALA A CB 1
+ATOM 2788 N N . PRO A 1 354 ? 10.937 51.458 47.943 1.00 22.73 ? ? ? ? ? ? 431 PRO A N 1
+ATOM 2789 C CA . PRO A 1 354 ? 10.904 52.283 49.150 1.00 22.67 ? ? ? ? ? ? 431 PRO A CA 1
+ATOM 2790 C C . PRO A 1 354 ? 10.149 51.677 50.332 1.00 25.28 ? ? ? ? ? ? 431 PRO A C 1
+ATOM 2791 O O . PRO A 1 354 ? 10.616 51.763 51.469 1.00 27.15 ? ? ? ? ? ? 431 PRO A O 1
+ATOM 2792 C CB . PRO A 1 354 ? 10.275 53.581 48.647 1.00 24.02 ? ? ? ? ? ? 431 PRO A CB 1
+ATOM 2793 C CG . PRO A 1 354 ? 10.847 53.676 47.259 1.00 25.48 ? ? ? ? ? ? 431 PRO A CG 1
+ATOM 2794 C CD . PRO A 1 354 ? 10.538 52.265 46.776 1.00 26.05 ? ? ? ? ? ? 431 PRO A CD 1
+ATOM 2795 N N . GLU A 1 355 ? 8.992 51.063 50.083 1.00 21.52 ? ? ? ? ? ? 432 GLU A N 1
+ATOM 2796 C CA . GLU A 1 355 ? 8.243 50.487 51.192 1.00 22.84 ? ? ? ? ? ? 432 GLU A CA 1
+ATOM 2797 C C . GLU A 1 355 ? 8.910 49.223 51.747 1.00 20.87 ? ? ? ? ? ? 432 GLU A C 1
+ATOM 2798 O O . GLU A 1 355 ? 8.698 48.862 52.903 1.00 21.85 ? ? ? ? ? ? 432 GLU A O 1
+ATOM 2799 C CB . GLU A 1 355 ? 6.786 50.174 50.797 1.00 23.61 ? ? ? ? ? ? 432 GLU A CB 1
+ATOM 2800 C CG . GLU A 1 355 ? 6.605 48.974 49.856 1.00 21.11 ? ? ? ? ? ? 432 GLU A CG 1
+ATOM 2801 C CD . GLU A 1 355 ? 6.879 49.293 48.392 1.00 17.79 ? ? ? ? ? ? 432 GLU A CD 1
+ATOM 2802 O OE1 . GLU A 1 355 ? 7.406 50.384 48.089 1.00 16.50 ? ? ? ? ? ? 432 GLU A OE1 1
+ATOM 2803 O OE2 . GLU A 1 355 ? 6.570 48.433 47.542 1.00 18.83 ? ? ? ? ? ? 432 GLU A OE2 1
+ATOM 2804 N N . ALA A 1 356 ? 9.716 48.551 50.932 1.00 20.31 ? ? ? ? ? ? 433 ALA A N 1
+ATOM 2805 C CA . ALA A 1 356 ? 10.392 47.344 51.394 1.00 20.87 ? ? ? ? ? ? 433 ALA A CA 1
+ATOM 2806 C C . ALA A 1 356 ? 11.569 47.755 52.264 1.00 22.06 ? ? ? ? ? ? 433 ALA A C 1
+ATOM 2807 O O . ALA A 1 356 ? 11.854 47.124 53.279 1.00 25.32 ? ? ? ? ? ? 433 ALA A O 1
+ATOM 2808 C CB . ALA A 1 356 ? 10.874 46.510 50.211 1.00 23.69 ? ? ? ? ? ? 433 ALA A CB 1
+ATOM 2809 N N . ILE A 1 357 ? 12.253 48.818 51.860 1.00 24.22 ? ? ? ? ? ? 434 ILE A N 1
+ATOM 2810 C CA . ILE A 1 357 ? 13.386 49.321 52.627 1.00 29.10 ? ? ? ? ? ? 434 ILE A CA 1
+ATOM 2811 C C . ILE A 1 357 ? 12.906 49.917 53.949 1.00 29.08 ? ? ? ? ? ? 434 ILE A C 1
+ATOM 2812 O O . ILE A 1 357 ? 13.468 49.633 55.005 1.00 32.09 ? ? ? ? ? ? 434 ILE A O 1
+ATOM 2813 C CB . ILE A 1 357 ? 14.144 50.434 51.871 1.00 28.04 ? ? ? ? ? ? 434 ILE A CB 1
+ATOM 2814 C CG1 . ILE A 1 357 ? 14.793 49.874 50.609 1.00 29.51 ? ? ? ? ? ? 434 ILE A CG1 1
+ATOM 2815 C CG2 . ILE A 1 357 ? 15.214 51.043 52.774 1.00 30.64 ? ? ? ? ? ? 434 ILE A CG2 1
+ATOM 2816 C CD1 . ILE A 1 357 ? 15.513 50.931 49.786 1.00 29.19 ? ? ? ? ? ? 434 ILE A CD1 1
+ATOM 2817 N N . ASN A 1 358 ? 11.859 50.736 53.885 1.00 30.35 ? ? ? ? ? ? 435 ASN A N 1
+ATOM 2818 C CA . ASN A 1 358 ? 11.339 51.403 55.079 1.00 30.46 ? ? ? ? ? ? 435 ASN A CA 1
+ATOM 2819 C C . ASN A 1 358 ? 10.555 50.563 56.072 1.00 31.08 ? ? ? ? ? ? 435 ASN A C 1
+ATOM 2820 O O . ASN A 1 358 ? 10.710 50.741 57.280 1.00 28.38 ? ? ? ? ? ? 435 ASN A O 1
+ATOM 2821 C CB . ASN A 1 358 ? 10.493 52.621 54.689 1.00 28.53 ? ? ? ? ? ? 435 ASN A CB 1
+ATOM 2822 C CG . ASN A 1 358 ? 11.271 53.621 53.871 1.00 28.90 ? ? ? ? ? ? 435 ASN A CG 1
+ATOM 2823 O OD1 . ASN A 1 358 ? 12.474 53.794 54.076 1.00 29.25 ? ? ? ? ? ? 435 ASN A OD1 1
+ATOM 2824 N ND2 . ASN A 1 358 ? 10.589 54.308 52.954 1.00 24.14 ? ? ? ? ? ? 435 ASN A ND2 1
+ATOM 2825 N N . PHE A 1 359 ? 9.712 49.655 55.594 1.00 28.38 ? ? ? ? ? ? 436 PHE A N 1
+ATOM 2826 C CA . PHE A 1 359 ? 8.938 48.853 56.531 1.00 31.21 ? ? ? ? ? ? 436 PHE A CA 1
+ATOM 2827 C C . PHE A 1 359 ? 9.099 47.358 56.341 1.00 31.26 ? ? ? ? ? ? 436 PHE A C 1
+ATOM 2828 O O . PHE A 1 359 ? 8.407 46.571 56.993 1.00 30.57 ? ? ? ? ? ? 436 PHE A O 1
+ATOM 2829 C CB . PHE A 1 359 ? 7.450 49.209 56.440 1.00 33.86 ? ? ? ? ? ? 436 PHE A CB 1
+ATOM 2830 C CG . PHE A 1 359 ? 7.181 50.682 56.464 1.00 38.94 ? ? ? ? ? ? 436 PHE A CG 1
+ATOM 2831 C CD1 . PHE A 1 359 ? 7.147 51.413 55.284 1.00 40.78 ? ? ? ? ? ? 436 PHE A CD1 1
+ATOM 2832 C CD2 . PHE A 1 359 ? 7.016 51.353 57.671 1.00 40.53 ? ? ? ? ? ? 436 PHE A CD2 1
+ATOM 2833 C CE1 . PHE A 1 359 ? 6.951 52.796 55.303 1.00 42.75 ? ? ? ? ? ? 436 PHE A CE1 1
+ATOM 2834 C CE2 . PHE A 1 359 ? 6.822 52.735 57.699 1.00 39.71 ? ? ? ? ? ? 436 PHE A CE2 1
+ATOM 2835 C CZ . PHE A 1 359 ? 6.790 53.455 56.512 1.00 39.15 ? ? ? ? ? ? 436 PHE A CZ 1
+ATOM 2836 N N . GLY A 1 360 ? 10.013 46.963 55.463 1.00 27.70 ? ? ? ? ? ? 437 GLY A N 1
+ATOM 2837 C CA . GLY A 1 360 ? 10.197 45.547 55.214 1.00 26.94 ? ? ? ? ? ? 437 GLY A CA 1
+ATOM 2838 C C . GLY A 1 360 ? 8.934 44.970 54.591 1.00 25.34 ? ? ? ? ? ? 437 GLY A C 1
+ATOM 2839 O O . GLY A 1 360 ? 8.592 43.806 54.815 1.00 23.40 ? ? ? ? ? ? 437 GLY A O 1
+ATOM 2840 N N . SER A 1 361 ? 8.235 45.795 53.812 1.00 23.83 ? ? ? ? ? ? 438 SER A N 1
+ATOM 2841 C CA . SER A 1 361 ? 7.000 45.382 53.151 1.00 24.94 ? ? ? ? ? ? 438 SER A CA 1
+ATOM 2842 C C . SER A 1 361 ? 7.290 44.744 51.795 1.00 24.04 ? ? ? ? ? ? 438 SER A C 1
+ATOM 2843 O O . SER A 1 361 ? 7.081 45.366 50.749 1.00 23.49 ? ? ? ? ? ? 438 SER A O 1
+ATOM 2844 C CB . SER A 1 361 ? 6.084 46.589 52.944 1.00 24.53 ? ? ? ? ? ? 438 SER A CB 1
+ATOM 2845 O OG . SER A 1 361 ? 5.802 47.222 54.175 1.00 31.48 ? ? ? ? ? ? 438 SER A OG 1
+ATOM 2846 N N . PHE A 1 362 ? 7.786 43.512 51.814 1.00 22.25 ? ? ? ? ? ? 439 PHE A N 1
+ATOM 2847 C CA . PHE A 1 362 ? 8.086 42.813 50.573 1.00 21.56 ? ? ? ? ? ? 439 PHE A CA 1
+ATOM 2848 C C . PHE A 1 362 ? 6.832 42.166 49.998 1.00 18.23 ? ? ? ? ? ? 439 PHE A C 1
+ATOM 2849 O O . PHE A 1 362 ? 6.093 41.475 50.704 1.00 16.28 ? ? ? ? ? ? 439 PHE A O 1
+ATOM 2850 C CB . PHE A 1 362 ? 9.163 41.735 50.787 1.00 22.76 ? ? ? ? ? ? 439 PHE A CB 1
+ATOM 2851 C CG . PHE A 1 362 ? 10.516 42.284 51.177 1.00 22.60 ? ? ? ? ? ? 439 PHE A CG 1
+ATOM 2852 C CD1 . PHE A 1 362 ? 10.862 42.454 52.514 1.00 21.51 ? ? ? ? ? ? 439 PHE A CD1 1
+ATOM 2853 C CD2 . PHE A 1 362 ? 11.435 42.653 50.200 1.00 23.24 ? ? ? ? ? ? 439 PHE A CD2 1
+ATOM 2854 C CE1 . PHE A 1 362 ? 12.101 42.982 52.871 1.00 19.05 ? ? ? ? ? ? 439 PHE A CE1 1
+ATOM 2855 C CE2 . PHE A 1 362 ? 12.677 43.185 50.549 1.00 23.01 ? ? ? ? ? ? 439 PHE A CE2 1
+ATOM 2856 C CZ . PHE A 1 362 ? 13.009 43.349 51.886 1.00 19.04 ? ? ? ? ? ? 439 PHE A CZ 1
+ATOM 2857 N N . THR A 1 363 ? 6.579 42.419 48.717 1.00 18.69 ? ? ? ? ? ? 440 THR A N 1
+ATOM 2858 C CA . THR A 1 363 ? 5.431 41.835 48.026 1.00 15.30 ? ? ? ? ? ? 440 THR A CA 1
+ATOM 2859 C C . THR A 1 363 ? 5.829 41.706 46.566 1.00 16.33 ? ? ? ? ? ? 440 THR A C 1
+ATOM 2860 O O . THR A 1 363 ? 6.915 42.127 46.171 1.00 16.60 ? ? ? ? ? ? 440 THR A O 1
+ATOM 2861 C CB . THR A 1 363 ? 4.174 42.738 48.066 1.00 18.01 ? ? ? ? ? ? 440 THR A CB 1
+ATOM 2862 O OG1 . THR A 1 363 ? 4.415 43.909 47.281 1.00 17.95 ? ? ? ? ? ? 440 THR A OG1 1
+ATOM 2863 C CG2 . THR A 1 363 ? 3.825 43.149 49.504 1.00 18.60 ? ? ? ? ? ? 440 THR A CG2 1
+ATOM 2864 N N . ILE A 1 364 ? 4.952 41.134 45.754 1.00 14.76 ? ? ? ? ? ? 441 ILE A N 1
+ATOM 2865 C CA . ILE A 1 364 ? 5.274 41.011 44.347 1.00 14.26 ? ? ? ? ? ? 441 ILE A CA 1
+ATOM 2866 C C . ILE A 1 364 ? 5.433 42.421 43.750 1.00 14.48 ? ? ? ? ? ? 441 ILE A C 1
+ATOM 2867 O O . ILE A 1 364 ? 6.120 42.599 42.746 1.00 14.64 ? ? ? ? ? ? 441 ILE A O 1
+ATOM 2868 C CB . ILE A 1 364 ? 4.189 40.178 43.590 1.00 13.07 ? ? ? ? ? ? 441 ILE A CB 1
+ATOM 2869 C CG1 . ILE A 1 364 ? 4.662 39.884 42.165 1.00 12.44 ? ? ? ? ? ? 441 ILE A CG1 1
+ATOM 2870 C CG2 . ILE A 1 364 ? 2.851 40.892 43.600 1.00 14.53 ? ? ? ? ? ? 441 ILE A CG2 1
+ATOM 2871 C CD1 . ILE A 1 364 ? 5.856 38.929 42.116 1.00 15.06 ? ? ? ? ? ? 441 ILE A CD1 1
+ATOM 2872 N N . LYS A 1 365 ? 4.827 43.431 44.380 1.00 12.33 ? ? ? ? ? ? 442 LYS A N 1
+ATOM 2873 C CA . LYS A 1 365 ? 4.961 44.797 43.879 1.00 14.56 ? ? ? ? ? ? 442 LYS A CA 1
+ATOM 2874 C C . LYS A 1 365 ? 6.343 45.398 44.144 1.00 15.80 ? ? ? ? ? ? 442 LYS A C 1
+ATOM 2875 O O . LYS A 1 365 ? 6.793 46.248 43.379 1.00 12.31 ? ? ? ? ? ? 442 LYS A O 1
+ATOM 2876 C CB . LYS A 1 365 ? 3.878 45.713 44.460 1.00 14.99 ? ? ? ? ? ? 442 LYS A CB 1
+ATOM 2877 C CG . LYS A 1 365 ? 2.465 45.391 43.965 1.00 17.40 ? ? ? ? ? ? 442 LYS A CG 1
+ATOM 2878 C CD . LYS A 1 365 ? 2.344 45.445 42.440 1.00 13.82 ? ? ? ? ? ? 442 LYS A CD 1
+ATOM 2879 C CE . LYS A 1 365 ? 0.888 45.242 42.003 1.00 18.53 ? ? ? ? ? ? 442 LYS A CE 1
+ATOM 2880 N NZ . LYS A 1 365 ? 0.717 45.115 40.523 1.00 17.10 ? ? ? ? ? ? 442 LYS A NZ 1
+ATOM 2881 N N . SER A 1 366 ? 7.006 44.993 45.230 1.00 12.78 ? ? ? ? ? ? 443 SER A N 1
+ATOM 2882 C CA . SER A 1 366 ? 8.346 45.510 45.479 1.00 14.07 ? ? ? ? ? ? 443 SER A CA 1
+ATOM 2883 C C . SER A 1 366 ? 9.282 44.875 44.443 1.00 11.28 ? ? ? ? ? ? 443 SER A C 1
+ATOM 2884 O O . SER A 1 366 ? 10.263 45.489 44.050 1.00 15.49 ? ? ? ? ? ? 443 SER A O 1
+ATOM 2885 C CB . SER A 1 366 ? 8.805 45.257 46.936 1.00 11.37 ? ? ? ? ? ? 443 SER A CB 1
+ATOM 2886 O OG . SER A 1 366 ? 8.705 43.906 47.353 1.00 15.99 ? ? ? ? ? ? 443 SER A OG 1
+ATOM 2887 N N . ASP A 1 367 ? 8.977 43.652 43.997 1.00 11.90 ? ? ? ? ? ? 444 ASP A N 1
+ATOM 2888 C CA . ASP A 1 367 ? 9.771 43.010 42.941 1.00 10.36 ? ? ? ? ? ? 444 ASP A CA 1
+ATOM 2889 C C . ASP A 1 367 ? 9.584 43.786 41.626 1.00 14.26 ? ? ? ? ? ? 444 ASP A C 1
+ATOM 2890 O O . ASP A 1 367 ? 10.524 43.936 40.846 1.00 12.13 ? ? ? ? ? ? 444 ASP A O 1
+ATOM 2891 C CB . ASP A 1 367 ? 9.347 41.553 42.682 1.00 11.64 ? ? ? ? ? ? 444 ASP A CB 1
+ATOM 2892 C CG . ASP A 1 367 ? 9.926 40.572 43.681 1.00 13.49 ? ? ? ? ? ? 444 ASP A CG 1
+ATOM 2893 O OD1 . ASP A 1 367 ? 10.924 40.905 44.362 1.00 13.08 ? ? ? ? ? ? 444 ASP A OD1 1
+ATOM 2894 O OD2 . ASP A 1 367 ? 9.398 39.443 43.753 1.00 15.37 ? ? ? ? ? ? 444 ASP A OD2 1
+ATOM 2895 N N . VAL A 1 368 ? 8.367 44.258 41.368 1.00 13.71 ? ? ? ? ? ? 445 VAL A N 1
+ATOM 2896 C CA . VAL A 1 368 ? 8.121 45.013 40.144 1.00 13.87 ? ? ? ? ? ? 445 VAL A CA 1
+ATOM 2897 C C . VAL A 1 368 ? 9.056 46.209 40.121 1.00 16.19 ? ? ? ? ? ? 445 VAL A C 1
+ATOM 2898 O O . VAL A 1 368 ? 9.655 46.509 39.091 1.00 15.78 ? ? ? ? ? ? 445 VAL A O 1
+ATOM 2899 C CB . VAL A 1 368 ? 6.665 45.502 40.044 1.00 16.53 ? ? ? ? ? ? 445 VAL A CB 1
+ATOM 2900 C CG1 . VAL A 1 368 ? 6.533 46.486 38.882 1.00 15.96 ? ? ? ? ? ? 445 VAL A CG1 1
+ATOM 2901 C CG2 . VAL A 1 368 ? 5.735 44.315 39.810 1.00 12.87 ? ? ? ? ? ? 445 VAL A CG2 1
+ATOM 2902 N N . TRP A 1 369 ? 9.180 46.899 41.252 1.00 17.86 ? ? ? ? ? ? 446 TRP A N 1
+ATOM 2903 C CA . TRP A 1 369 ? 10.103 48.026 41.320 1.00 19.73 ? ? ? ? ? ? 446 TRP A CA 1
+ATOM 2904 C C . TRP A 1 369 ? 11.496 47.522 40.923 1.00 20.03 ? ? ? ? ? ? 446 TRP A C 1
+ATOM 2905 O O . TRP A 1 369 ? 12.163 48.121 40.081 1.00 17.71 ? ? ? ? ? ? 446 TRP A O 1
+ATOM 2906 C CB . TRP A 1 369 ? 10.129 48.615 42.741 1.00 19.58 ? ? ? ? ? ? 446 TRP A CB 1
+ATOM 2907 C CG . TRP A 1 369 ? 11.129 49.725 42.937 1.00 20.31 ? ? ? ? ? ? 446 TRP A CG 1
+ATOM 2908 C CD1 . TRP A 1 369 ? 12.492 49.617 42.922 1.00 18.89 ? ? ? ? ? ? 446 TRP A CD1 1
+ATOM 2909 C CD2 . TRP A 1 369 ? 10.840 51.112 43.164 1.00 21.56 ? ? ? ? ? ? 446 TRP A CD2 1
+ATOM 2910 N NE1 . TRP A 1 369 ? 13.069 50.849 43.123 1.00 19.88 ? ? ? ? ? ? 446 TRP A NE1 1
+ATOM 2911 C CE2 . TRP A 1 369 ? 12.081 51.782 43.275 1.00 23.02 ? ? ? ? ? ? 446 TRP A CE2 1
+ATOM 2912 C CE3 . TRP A 1 369 ? 9.657 51.853 43.282 1.00 22.75 ? ? ? ? ? ? 446 TRP A CE3 1
+ATOM 2913 C CZ2 . TRP A 1 369 ? 12.169 53.163 43.499 1.00 22.56 ? ? ? ? ? ? 446 TRP A CZ2 1
+ATOM 2914 C CZ3 . TRP A 1 369 ? 9.748 53.229 43.508 1.00 23.65 ? ? ? ? ? ? 446 TRP A CZ3 1
+ATOM 2915 C CH2 . TRP A 1 369 ? 10.997 53.865 43.612 1.00 23.16 ? ? ? ? ? ? 446 TRP A CH2 1
+ATOM 2916 N N . SER A 1 370 ? 11.923 46.415 41.526 1.00 17.71 ? ? ? ? ? ? 447 SER A N 1
+ATOM 2917 C CA . SER A 1 370 ? 13.233 45.833 41.229 1.00 16.14 ? ? ? ? ? ? 447 SER A CA 1
+ATOM 2918 C C . SER A 1 370 ? 13.413 45.520 39.742 1.00 16.38 ? ? ? ? ? ? 447 SER A C 1
+ATOM 2919 O O . SER A 1 370 ? 14.482 45.755 39.178 1.00 16.10 ? ? ? ? ? ? 447 SER A O 1
+ATOM 2920 C CB . SER A 1 370 ? 13.446 44.549 42.040 1.00 16.45 ? ? ? ? ? ? 447 SER A CB 1
+ATOM 2921 O OG . SER A 1 370 ? 13.430 44.801 43.432 1.00 16.54 ? ? ? ? ? ? 447 SER A OG 1
+ATOM 2922 N N . PHE A 1 371 ? 12.368 44.989 39.111 1.00 15.72 ? ? ? ? ? ? 448 PHE A N 1
+ATOM 2923 C CA . PHE A 1 371 ? 12.428 44.653 37.689 1.00 15.55 ? ? ? ? ? ? 448 PHE A CA 1
+ATOM 2924 C C . PHE A 1 371 ? 12.729 45.910 36.867 1.00 17.05 ? ? ? ? ? ? 448 PHE A C 1
+ATOM 2925 O O . PHE A 1 371 ? 13.415 45.852 35.844 1.00 18.10 ? ? ? ? ? ? 448 PHE A O 1
+ATOM 2926 C CB . PHE A 1 371 ? 11.096 44.057 37.230 1.00 14.93 ? ? ? ? ? ? 448 PHE A CB 1
+ATOM 2927 C CG . PHE A 1 371 ? 11.095 43.624 35.794 1.00 14.38 ? ? ? ? ? ? 448 PHE A CG 1
+ATOM 2928 C CD1 . PHE A 1 371 ? 11.678 42.420 35.416 1.00 18.31 ? ? ? ? ? ? 448 PHE A CD1 1
+ATOM 2929 C CD2 . PHE A 1 371 ? 10.555 44.449 34.809 1.00 12.15 ? ? ? ? ? ? 448 PHE A CD2 1
+ATOM 2930 C CE1 . PHE A 1 371 ? 11.728 42.035 34.075 1.00 17.49 ? ? ? ? ? ? 448 PHE A CE1 1
+ATOM 2931 C CE2 . PHE A 1 371 ? 10.596 44.081 33.464 1.00 17.64 ? ? ? ? ? ? 448 PHE A CE2 1
+ATOM 2932 C CZ . PHE A 1 371 ? 11.183 42.871 33.092 1.00 16.35 ? ? ? ? ? ? 448 PHE A CZ 1
+ATOM 2933 N N . GLY A 1 372 ? 12.197 47.044 37.315 1.00 18.53 ? ? ? ? ? ? 449 GLY A N 1
+ATOM 2934 C CA . GLY A 1 372 ? 12.439 48.295 36.617 1.00 19.65 ? ? ? ? ? ? 449 GLY A CA 1
+ATOM 2935 C C . GLY A 1 372 ? 13.914 48.641 36.668 1.00 18.25 ? ? ? ? ? ? 449 GLY A C 1
+ATOM 2936 O O . GLY A 1 372 ? 14.498 49.051 35.673 1.00 18.33 ? ? ? ? ? ? 449 GLY A O 1
+ATOM 2937 N N . ILE A 1 373 ? 14.524 48.486 37.837 1.00 17.24 ? ? ? ? ? ? 450 ILE A N 1
+ATOM 2938 C CA . ILE A 1 373 ? 15.950 48.770 37.970 1.00 15.92 ? ? ? ? ? ? 450 ILE A CA 1
+ATOM 2939 C C . ILE A 1 373 ? 16.693 47.767 37.077 1.00 18.60 ? ? ? ? ? ? 450 ILE A C 1
+ATOM 2940 O O . ILE A 1 373 ? 17.633 48.129 36.373 1.00 21.10 ? ? ? ? ? ? 450 ILE A O 1
+ATOM 2941 C CB . ILE A 1 373 ? 16.413 48.632 39.453 1.00 16.33 ? ? ? ? ? ? 450 ILE A CB 1
+ATOM 2942 C CG1 . ILE A 1 373 ? 15.558 49.534 40.355 1.00 15.37 ? ? ? ? ? ? 450 ILE A CG1 1
+ATOM 2943 C CG2 . ILE A 1 373 ? 17.881 49.040 39.600 1.00 15.03 ? ? ? ? ? ? 450 ILE A CG2 1
+ATOM 2944 C CD1 . ILE A 1 373 ? 15.702 51.047 40.084 1.00 16.18 ? ? ? ? ? ? 450 ILE A CD1 1
+ATOM 2945 N N . LEU A 1 374 ? 16.246 46.510 37.089 1.00 18.58 ? ? ? ? ? ? 451 LEU A N 1
+ATOM 2946 C CA . LEU A 1 374 ? 16.856 45.457 36.275 1.00 19.13 ? ? ? ? ? ? 451 LEU A CA 1
+ATOM 2947 C C . LEU A 1 374 ? 16.784 45.810 34.793 1.00 19.64 ? ? ? ? ? ? 451 LEU A C 1
+ATOM 2948 O O . LEU A 1 374 ? 17.728 45.550 34.040 1.00 18.43 ? ? ? ? ? ? 451 LEU A O 1
+ATOM 2949 C CB . LEU A 1 374 ? 16.155 44.108 36.514 1.00 14.91 ? ? ? ? ? ? 451 LEU A CB 1
+ATOM 2950 C CG . LEU A 1 374 ? 16.570 42.915 35.634 1.00 17.89 ? ? ? ? ? ? 451 LEU A CG 1
+ATOM 2951 C CD1 . LEU A 1 374 ? 18.087 42.711 35.656 1.00 17.50 ? ? ? ? ? ? 451 LEU A CD1 1
+ATOM 2952 C CD2 . LEU A 1 374 ? 15.850 41.656 36.131 1.00 19.89 ? ? ? ? ? ? 451 LEU A CD2 1
+ATOM 2953 N N . LEU A 1 375 ? 15.658 46.383 34.372 1.00 19.10 ? ? ? ? ? ? 452 LEU A N 1
+ATOM 2954 C CA . LEU A 1 375 ? 15.494 46.774 32.974 1.00 21.07 ? ? ? ? ? ? 452 LEU A CA 1
+ATOM 2955 C C . LEU A 1 375 ? 16.601 47.732 32.575 1.00 19.48 ? ? ? ? ? ? 452 LEU A C 1
+ATOM 2956 O O . LEU A 1 375 ? 17.168 47.613 31.489 1.00 22.06 ? ? ? ? ? ? 452 LEU A O 1
+ATOM 2957 C CB . LEU A 1 375 ? 14.138 47.451 32.737 1.00 20.73 ? ? ? ? ? ? 452 LEU A CB 1
+ATOM 2958 C CG . LEU A 1 375 ? 12.902 46.558 32.663 1.00 26.36 ? ? ? ? ? ? 452 LEU A CG 1
+ATOM 2959 C CD1 . LEU A 1 375 ? 11.673 47.409 32.338 1.00 26.27 ? ? ? ? ? ? 452 LEU A CD1 1
+ATOM 2960 C CD2 . LEU A 1 375 ? 13.110 45.504 31.572 1.00 29.02 ? ? ? ? ? ? 452 LEU A CD2 1
+ATOM 2961 N N . MET A 1 376 ? 16.902 48.676 33.465 1.00 20.04 ? ? ? ? ? ? 453 MET A N 1
+ATOM 2962 C CA . MET A 1 376 ? 17.944 49.666 33.218 1.00 22.89 ? ? ? ? ? ? 453 MET A CA 1
+ATOM 2963 C C . MET A 1 376 ? 19.310 48.991 33.173 1.00 22.51 ? ? ? ? ? ? 453 MET A C 1
+ATOM 2964 O O . MET A 1 376 ? 20.141 49.345 32.342 1.00 26.46 ? ? ? ? ? ? 453 MET A O 1
+ATOM 2965 C CB . MET A 1 376 ? 17.928 50.758 34.298 1.00 22.50 ? ? ? ? ? ? 453 MET A CB 1
+ATOM 2966 C CG . MET A 1 376 ? 18.936 51.884 34.046 1.00 25.83 ? ? ? ? ? ? 453 MET A CG 1
+ATOM 2967 S SD . MET A 1 376 ? 18.512 52.908 32.608 1.00 26.90 ? ? ? ? ? ? 453 MET A SD 1
+ATOM 2968 C CE . MET A 1 376 ? 17.117 53.775 33.285 1.00 27.04 ? ? ? ? ? ? 453 MET A CE 1
+ATOM 2969 N N . GLU A 1 377 ? 19.559 48.023 34.053 1.00 22.34 ? ? ? ? ? ? 454 GLU A N 1
+ATOM 2970 C CA . GLU A 1 377 ? 20.850 47.339 34.004 1.00 21.66 ? ? ? ? ? ? 454 GLU A CA 1
+ATOM 2971 C C . GLU A 1 377 ? 21.021 46.690 32.641 1.00 21.19 ? ? ? ? ? ? 454 GLU A C 1
+ATOM 2972 O O . GLU A 1 377 ? 22.086 46.764 32.034 1.00 24.50 ? ? ? ? ? ? 454 GLU A O 1
+ATOM 2973 C CB . GLU A 1 377 ? 20.965 46.208 35.029 1.00 22.27 ? ? ? ? ? ? 454 GLU A CB 1
+ATOM 2974 C CG . GLU A 1 377 ? 21.012 46.587 36.467 1.00 25.39 ? ? ? ? ? ? 454 GLU A CG 1
+ATOM 2975 C CD . GLU A 1 377 ? 21.270 45.368 37.342 1.00 24.68 ? ? ? ? ? ? 454 GLU A CD 1
+ATOM 2976 O OE1 . GLU A 1 377 ? 22.447 45.000 37.565 1.00 23.93 ? ? ? ? ? ? 454 GLU A OE1 1
+ATOM 2977 O OE2 . GLU A 1 377 ? 20.280 44.759 37.781 1.00 22.23 ? ? ? ? ? ? 454 GLU A OE2 1
+ATOM 2978 N N . ILE A 1 378 ? 19.967 46.025 32.180 1.00 20.14 ? ? ? ? ? ? 455 ILE A N 1
+ATOM 2979 C CA . ILE A 1 378 ? 20.004 45.328 30.903 1.00 19.71 ? ? ? ? ? ? 455 ILE A CA 1
+ATOM 2980 C C . ILE A 1 378 ? 20.234 46.241 29.701 1.00 22.93 ? ? ? ? ? ? 455 ILE A C 1
+ATOM 2981 O O . ILE A 1 378 ? 21.128 45.989 28.882 1.00 21.96 ? ? ? ? ? ? 455 ILE A O 1
+ATOM 2982 C CB . ILE A 1 378 ? 18.707 44.512 30.691 1.00 21.77 ? ? ? ? ? ? 455 ILE A CB 1
+ATOM 2983 C CG1 . ILE A 1 378 ? 18.613 43.410 31.759 1.00 19.96 ? ? ? ? ? ? 455 ILE A CG1 1
+ATOM 2984 C CG2 . ILE A 1 378 ? 18.678 43.932 29.289 1.00 19.38 ? ? ? ? ? ? 455 ILE A CG2 1
+ATOM 2985 C CD1 . ILE A 1 378 ? 17.365 42.550 31.682 1.00 21.23 ? ? ? ? ? ? 455 ILE A CD1 1
+ATOM 2986 N N . VAL A 1 379 ? 19.439 47.302 29.598 1.00 19.10 ? ? ? ? ? ? 456 VAL A N 1
+ATOM 2987 C CA . VAL A 1 379 ? 19.563 48.223 28.474 1.00 22.08 ? ? ? ? ? ? 456 VAL A CA 1
+ATOM 2988 C C . VAL A 1 379 ? 20.890 48.984 28.496 1.00 24.41 ? ? ? ? ? ? 456 VAL A C 1
+ATOM 2989 O O . VAL A 1 379 ? 21.291 49.567 27.491 1.00 25.90 ? ? ? ? ? ? 456 VAL A O 1
+ATOM 2990 C CB . VAL A 1 379 ? 18.366 49.226 28.429 1.00 24.63 ? ? ? ? ? ? 456 VAL A CB 1
+ATOM 2991 C CG1 . VAL A 1 379 ? 18.394 50.150 29.629 1.00 27.16 ? ? ? ? ? ? 456 VAL A CG1 1
+ATOM 2992 C CG2 . VAL A 1 379 ? 18.395 50.019 27.138 1.00 31.09 ? ? ? ? ? ? 456 VAL A CG2 1
+ATOM 2993 N N . THR A 1 380 ? 21.581 48.965 29.632 1.00 26.20 ? ? ? ? ? ? 457 THR A N 1
+ATOM 2994 C CA . THR A 1 380 ? 22.868 49.648 29.732 1.00 29.03 ? ? ? ? ? ? 457 THR A CA 1
+ATOM 2995 C C . THR A 1 380 ? 24.024 48.656 29.793 1.00 27.81 ? ? ? ? ? ? 457 THR A C 1
+ATOM 2996 O O . THR A 1 380 ? 25.152 49.020 30.131 1.00 25.73 ? ? ? ? ? ? 457 THR A O 1
+ATOM 2997 C CB . THR A 1 380 ? 22.945 50.540 30.976 1.00 29.04 ? ? ? ? ? ? 457 THR A CB 1
+ATOM 2998 O OG1 . THR A 1 380 ? 22.803 49.733 32.150 1.00 30.85 ? ? ? ? ? ? 457 THR A OG1 1
+ATOM 2999 C CG2 . THR A 1 380 ? 21.852 51.595 30.940 1.00 26.78 ? ? ? ? ? ? 457 THR A CG2 1
+ATOM 3000 N N . TYR A 1 381 ? 23.735 47.399 29.479 1.00 25.59 ? ? ? ? ? ? 458 TYR A N 1
+ATOM 3001 C CA . TYR A 1 381 ? 24.758 46.362 29.481 1.00 26.23 ? ? ? ? ? ? 458 TYR A CA 1
+ATOM 3002 C C . TYR A 1 381 ? 25.435 46.095 30.832 1.00 25.04 ? ? ? ? ? ? 458 TYR A C 1
+ATOM 3003 O O . TYR A 1 381 ? 26.643 45.869 30.902 1.00 24.97 ? ? ? ? ? ? 458 TYR A O 1
+ATOM 3004 C CB . TYR A 1 381 ? 25.798 46.700 28.407 1.00 26.83 ? ? ? ? ? ? 458 TYR A CB 1
+ATOM 3005 C CG . TYR A 1 381 ? 25.247 46.574 27.002 1.00 26.82 ? ? ? ? ? ? 458 TYR A CG 1
+ATOM 3006 C CD1 . TYR A 1 381 ? 25.244 45.343 26.345 1.00 25.82 ? ? ? ? ? ? 458 TYR A CD1 1
+ATOM 3007 C CD2 . TYR A 1 381 ? 24.672 47.672 26.350 1.00 27.42 ? ? ? ? ? ? 458 TYR A CD2 1
+ATOM 3008 C CE1 . TYR A 1 381 ? 24.687 45.201 25.076 1.00 25.54 ? ? ? ? ? ? 458 TYR A CE1 1
+ATOM 3009 C CE2 . TYR A 1 381 ? 24.107 47.539 25.074 1.00 29.08 ? ? ? ? ? ? 458 TYR A CE2 1
+ATOM 3010 C CZ . TYR A 1 381 ? 24.118 46.300 24.446 1.00 27.66 ? ? ? ? ? ? 458 TYR A CZ 1
+ATOM 3011 O OH . TYR A 1 381 ? 23.565 46.154 23.192 1.00 31.80 ? ? ? ? ? ? 458 TYR A OH 1
+ATOM 3012 N N . GLY A 1 382 ? 24.654 46.123 31.905 1.00 25.10 ? ? ? ? ? ? 459 GLY A N 1
+ATOM 3013 C CA . GLY A 1 382 ? 25.207 45.841 33.219 1.00 26.23 ? ? ? ? ? ? 459 GLY A CA 1
+ATOM 3014 C C . GLY A 1 382 ? 25.737 47.001 34.036 1.00 27.75 ? ? ? ? ? ? 459 GLY A C 1
+ATOM 3015 O O . GLY A 1 382 ? 26.350 46.782 35.081 1.00 27.13 ? ? ? ? ? ? 459 GLY A O 1
+ATOM 3016 N N . ARG A 1 383 ? 25.518 48.231 33.581 1.00 29.79 ? ? ? ? ? ? 460 ARG A N 1
+ATOM 3017 C CA . ARG A 1 383 ? 25.999 49.387 34.332 1.00 31.34 ? ? ? ? ? ? 460 ARG A CA 1
+ATOM 3018 C C . ARG A 1 383 ? 25.339 49.390 35.700 1.00 31.24 ? ? ? ? ? ? 460 ARG A C 1
+ATOM 3019 O O . ARG A 1 383 ? 24.207 48.941 35.852 1.00 31.10 ? ? ? ? ? ? 460 ARG A O 1
+ATOM 3020 C CB . ARG A 1 383 ? 25.640 50.695 33.626 1.00 35.29 ? ? ? ? ? ? 460 ARG A CB 1
+ATOM 3021 C CG . ARG A 1 383 ? 26.153 51.944 34.352 1.00 41.46 ? ? ? ? ? ? 460 ARG A CG 1
+ATOM 3022 C CD . ARG A 1 383 ? 25.369 53.183 33.940 1.00 44.88 ? ? ? ? ? ? 460 ARG A CD 1
+ATOM 3023 N NE . ARG A 1 383 ? 23.980 53.085 34.385 1.00 49.46 ? ? ? ? ? ? 460 ARG A NE 1
+ATOM 3024 C CZ . ARG A 1 383 ? 23.029 53.964 34.088 1.00 52.12 ? ? ? ? ? ? 460 ARG A CZ 1
+ATOM 3025 N NH1 . ARG A 1 383 ? 23.304 55.024 33.339 1.00 51.07 ? ? ? ? ? ? 460 ARG A NH1 1
+ATOM 3026 N NH2 . ARG A 1 383 ? 21.796 53.780 34.542 1.00 52.21 ? ? ? ? ? ? 460 ARG A NH2 1
+ATOM 3027 N N . ILE A 1 384 ? 26.046 49.913 36.690 1.00 32.11 ? ? ? ? ? ? 461 ILE A N 1
+ATOM 3028 C CA . ILE A 1 384 ? 25.520 49.984 38.045 1.00 33.49 ? ? ? ? ? ? 461 ILE A CA 1
+ATOM 3029 C C . ILE A 1 384 ? 24.395 51.029 38.093 1.00 32.55 ? ? ? ? ? ? 461 ILE A C 1
+ATOM 3030 O O . ILE A 1 384 ? 24.449 52.031 37.382 1.00 30.83 ? ? ? ? ? ? 461 ILE A O 1
+ATOM 3031 C CB . ILE A 1 384 ? 26.627 50.423 39.029 1.00 36.39 ? ? ? ? ? ? 461 ILE A CB 1
+ATOM 3032 C CG1 . ILE A 1 384 ? 27.870 49.539 38.866 1.00 36.98 ? ? ? ? ? ? 461 ILE A CG1 1
+ATOM 3033 C CG2 . ILE A 1 384 ? 26.107 50.377 40.455 1.00 36.51 ? ? ? ? ? ? 461 ILE A CG2 1
+ATOM 3034 C CD1 . ILE A 1 384 ? 27.643 48.074 39.128 1.00 40.95 ? ? ? ? ? ? 461 ILE A CD1 1
+ATOM 3035 N N . PRO A 1 385 ? 23.344 50.788 38.902 1.00 30.46 ? ? ? ? ? ? 462 PRO A N 1
+ATOM 3036 C CA . PRO A 1 385 ? 22.225 51.731 39.032 1.00 28.48 ? ? ? ? ? ? 462 PRO A CA 1
+ATOM 3037 C C . PRO A 1 385 ? 22.698 52.985 39.791 1.00 28.11 ? ? ? ? ? ? 462 PRO A C 1
+ATOM 3038 O O . PRO A 1 385 ? 23.634 52.910 40.582 1.00 24.43 ? ? ? ? ? ? 462 PRO A O 1
+ATOM 3039 C CB . PRO A 1 385 ? 21.204 50.931 39.842 1.00 28.65 ? ? ? ? ? ? 462 PRO A CB 1
+ATOM 3040 C CG . PRO A 1 385 ? 21.586 49.471 39.541 1.00 33.34 ? ? ? ? ? ? 462 PRO A CG 1
+ATOM 3041 C CD . PRO A 1 385 ? 23.072 49.595 39.718 1.00 32.01 ? ? ? ? ? ? 462 PRO A CD 1
+ATOM 3042 N N . TYR A 1 386 ? 22.035 54.118 39.572 1.00 29.61 ? ? ? ? ? ? 463 TYR A N 1
+ATOM 3043 C CA . TYR A 1 386 ? 22.404 55.378 40.224 1.00 28.23 ? ? ? ? ? ? 463 TYR A CA 1
+ATOM 3044 C C . TYR A 1 386 ? 23.923 55.525 40.332 1.00 31.07 ? ? ? ? ? ? 463 TYR A C 1
+ATOM 3045 O O . TYR A 1 386 ? 24.471 55.637 41.433 1.00 27.74 ? ? ? ? ? ? 463 TYR A O 1
+ATOM 3046 C CB . TYR A 1 386 ? 21.803 55.464 41.627 1.00 29.02 ? ? ? ? ? ? 463 TYR A CB 1
+ATOM 3047 C CG . TYR A 1 386 ? 20.333 55.141 41.682 1.00 29.15 ? ? ? ? ? ? 463 TYR A CG 1
+ATOM 3048 C CD1 . TYR A 1 386 ? 19.897 53.823 41.800 1.00 27.04 ? ? ? ? ? ? 463 TYR A CD1 1
+ATOM 3049 C CD2 . TYR A 1 386 ? 19.374 56.147 41.553 1.00 27.52 ? ? ? ? ? ? 463 TYR A CD2 1
+ATOM 3050 C CE1 . TYR A 1 386 ? 18.542 53.512 41.789 1.00 27.03 ? ? ? ? ? ? 463 TYR A CE1 1
+ATOM 3051 C CE2 . TYR A 1 386 ? 18.009 55.846 41.538 1.00 28.52 ? ? ? ? ? ? 463 TYR A CE2 1
+ATOM 3052 C CZ . TYR A 1 386 ? 17.603 54.528 41.657 1.00 26.91 ? ? ? ? ? ? 463 TYR A CZ 1
+ATOM 3053 O OH . TYR A 1 386 ? 16.265 54.221 41.660 1.00 23.35 ? ? ? ? ? ? 463 TYR A OH 1
+ATOM 3054 N N . PRO A 1 387 ? 24.617 55.545 39.187 1.00 32.79 ? ? ? ? ? ? 464 PRO A N 1
+ATOM 3055 C CA . PRO A 1 387 ? 26.076 55.673 39.137 1.00 36.62 ? ? ? ? ? ? 464 PRO A CA 1
+ATOM 3056 C C . PRO A 1 387 ? 26.618 56.885 39.885 1.00 39.25 ? ? ? ? ? ? 464 PRO A C 1
+ATOM 3057 O O . PRO A 1 387 ? 26.271 58.024 39.573 1.00 41.96 ? ? ? ? ? ? 464 PRO A O 1
+ATOM 3058 C CB . PRO A 1 387 ? 26.356 55.733 37.634 1.00 39.08 ? ? ? ? ? ? 464 PRO A CB 1
+ATOM 3059 C CG . PRO A 1 387 ? 25.064 56.350 37.081 1.00 39.06 ? ? ? ? ? ? 464 PRO A CG 1
+ATOM 3060 C CD . PRO A 1 387 ? 24.073 55.483 37.821 1.00 35.59 ? ? ? ? ? ? 464 PRO A CD 1
+ATOM 3061 N N . GLY A 1 388 ? 27.461 56.627 40.880 1.00 38.99 ? ? ? ? ? ? 465 GLY A N 1
+ATOM 3062 C CA . GLY A 1 388 ? 28.056 57.705 41.650 1.00 41.00 ? ? ? ? ? ? 465 GLY A CA 1
+ATOM 3063 C C . GLY A 1 388 ? 27.303 58.111 42.901 1.00 41.57 ? ? ? ? ? ? 465 GLY A C 1
+ATOM 3064 O O . GLY A 1 388 ? 27.826 58.863 43.722 1.00 41.21 ? ? ? ? ? ? 465 GLY A O 1
+ATOM 3065 N N . MET A 1 389 ? 26.079 57.623 43.057 1.00 41.31 ? ? ? ? ? ? 466 MET A N 1
+ATOM 3066 C CA . MET A 1 389 ? 25.279 57.966 44.229 1.00 41.51 ? ? ? ? ? ? 466 MET A CA 1
+ATOM 3067 C C . MET A 1 389 ? 25.439 56.934 45.333 1.00 42.25 ? ? ? ? ? ? 466 MET A C 1
+ATOM 3068 O O . MET A 1 389 ? 25.686 55.756 45.062 1.00 42.84 ? ? ? ? ? ? 466 MET A O 1
+ATOM 3069 C CB . MET A 1 389 ? 23.800 58.067 43.850 1.00 40.62 ? ? ? ? ? ? 466 MET A CB 1
+ATOM 3070 C CG . MET A 1 389 ? 23.512 59.071 42.750 1.00 38.99 ? ? ? ? ? ? 466 MET A CG 1
+ATOM 3071 S SD . MET A 1 389 ? 21.751 59.203 42.365 1.00 36.04 ? ? ? ? ? ? 466 MET A SD 1
+ATOM 3072 C CE . MET A 1 389 ? 21.098 59.755 43.904 1.00 33.29 ? ? ? ? ? ? 466 MET A CE 1
+ATOM 3073 N N . SER A 1 390 ? 25.299 57.378 46.579 1.00 42.53 ? ? ? ? ? ? 467 SER A N 1
+ATOM 3074 C CA . SER A 1 390 ? 25.413 56.466 47.709 1.00 43.45 ? ? ? ? ? ? 467 SER A CA 1
+ATOM 3075 C C . SER A 1 390 ? 24.009 56.038 48.111 1.00 42.81 ? ? ? ? ? ? 467 SER A C 1
+ATOM 3076 O O . SER A 1 390 ? 23.022 56.655 47.709 1.00 42.83 ? ? ? ? ? ? 467 SER A O 1
+ATOM 3077 C CB . SER A 1 390 ? 26.108 57.139 48.899 1.00 43.57 ? ? ? ? ? ? 467 SER A CB 1
+ATOM 3078 O OG . SER A 1 390 ? 25.283 58.124 49.500 1.00 46.68 ? ? ? ? ? ? 467 SER A OG 1
+ATOM 3079 N N . ASN A 1 391 ? 23.919 54.979 48.903 1.00 42.01 ? ? ? ? ? ? 468 ASN A N 1
+ATOM 3080 C CA . ASN A 1 391 ? 22.624 54.480 49.342 1.00 42.13 ? ? ? ? ? ? 468 ASN A CA 1
+ATOM 3081 C C . ASN A 1 391 ? 21.772 55.556 50.014 1.00 39.20 ? ? ? ? ? ? 468 ASN A C 1
+ATOM 3082 O O . ASN A 1 391 ? 20.579 55.667 49.746 1.00 35.85 ? ? ? ? ? ? 468 ASN A O 1
+ATOM 3083 C CB . ASN A 1 391 ? 22.817 53.290 50.286 1.00 40.67 ? ? ? ? ? ? 468 ASN A CB 1
+ATOM 3084 C CG . ASN A 1 391 ? 23.394 52.075 49.583 1.00 42.59 ? ? ? ? ? ? 468 ASN A CG 1
+ATOM 3085 O OD1 . ASN A 1 391 ? 23.756 51.089 50.225 1.00 44.96 ? ? ? ? ? ? 468 ASN A OD1 1
+ATOM 3086 N ND2 . ASN A 1 391 ? 23.467 52.134 48.256 1.00 39.82 ? ? ? ? ? ? 468 ASN A ND2 1
+ATOM 3087 N N . PRO A 1 392 ? 22.371 56.361 50.902 1.00 38.04 ? ? ? ? ? ? 469 PRO A N 1
+ATOM 3088 C CA . PRO A 1 392 ? 21.604 57.410 51.578 1.00 37.26 ? ? ? ? ? ? 469 PRO A CA 1
+ATOM 3089 C C . PRO A 1 392 ? 21.068 58.455 50.602 1.00 34.79 ? ? ? ? ? ? 469 PRO A C 1
+ATOM 3090 O O . PRO A 1 392 ? 19.955 58.957 50.761 1.00 35.50 ? ? ? ? ? ? 469 PRO A O 1
+ATOM 3091 C CB . PRO A 1 392 ? 22.628 57.990 52.556 1.00 38.86 ? ? ? ? ? ? 469 PRO A CB 1
+ATOM 3092 C CG . PRO A 1 392 ? 23.548 56.795 52.814 1.00 38.95 ? ? ? ? ? ? 469 PRO A CG 1
+ATOM 3093 C CD . PRO A 1 392 ? 23.759 56.377 51.387 1.00 39.03 ? ? ? ? ? ? 469 PRO A CD 1
+ATOM 3094 N N . GLU A 1 393 ? 21.870 58.774 49.592 1.00 29.96 ? ? ? ? ? ? 470 GLU A N 1
+ATOM 3095 C CA . GLU A 1 393 ? 21.492 59.758 48.590 1.00 31.75 ? ? ? ? ? ? 470 GLU A CA 1
+ATOM 3096 C C . GLU A 1 393 ? 20.380 59.242 47.685 1.00 30.49 ? ? ? ? ? ? 470 GLU A C 1
+ATOM 3097 O O . GLU A 1 393 ? 19.504 60.004 47.271 1.00 25.72 ? ? ? ? ? ? 470 GLU A O 1
+ATOM 3098 C CB . GLU A 1 393 ? 22.710 60.131 47.746 1.00 34.07 ? ? ? ? ? ? 470 GLU A CB 1
+ATOM 3099 C CG . GLU A 1 393 ? 23.871 60.661 48.564 1.00 36.61 ? ? ? ? ? ? 470 GLU A CG 1
+ATOM 3100 C CD . GLU A 1 393 ? 25.064 61.023 47.710 1.00 38.33 ? ? ? ? ? ? 470 GLU A CD 1
+ATOM 3101 O OE1 . GLU A 1 393 ? 25.531 60.149 46.949 1.00 38.17 ? ? ? ? ? ? 470 GLU A OE1 1
+ATOM 3102 O OE2 . GLU A 1 393 ? 25.537 62.178 47.804 1.00 39.96 ? ? ? ? ? ? 470 GLU A OE2 1
+ATOM 3103 N N . VAL A 1 394 ? 20.421 57.949 47.372 1.00 29.01 ? ? ? ? ? ? 471 VAL A N 1
+ATOM 3104 C CA . VAL A 1 394 ? 19.405 57.352 46.514 1.00 25.22 ? ? ? ? ? ? 471 VAL A CA 1
+ATOM 3105 C C . VAL A 1 394 ? 18.072 57.355 47.245 1.00 26.94 ? ? ? ? ? ? 471 VAL A C 1
+ATOM 3106 O O . VAL A 1 394 ? 17.045 57.752 46.684 1.00 25.08 ? ? ? ? ? ? 471 VAL A O 1
+ATOM 3107 C CB . VAL A 1 394 ? 19.773 55.897 46.124 1.00 27.10 ? ? ? ? ? ? 471 VAL A CB 1
+ATOM 3108 C CG1 . VAL A 1 394 ? 18.682 55.291 45.249 1.00 23.32 ? ? ? ? ? ? 471 VAL A CG1 1
+ATOM 3109 C CG2 . VAL A 1 394 ? 21.081 55.886 45.370 1.00 25.71 ? ? ? ? ? ? 471 VAL A CG2 1
+ATOM 3110 N N . ILE A 1 395 ? 18.097 56.922 48.504 1.00 25.02 ? ? ? ? ? ? 472 ILE A N 1
+ATOM 3111 C CA . ILE A 1 395 ? 16.892 56.868 49.320 1.00 27.85 ? ? ? ? ? ? 472 ILE A CA 1
+ATOM 3112 C C . ILE A 1 395 ? 16.264 58.255 49.428 1.00 30.73 ? ? ? ? ? ? 472 ILE A C 1
+ATOM 3113 O O . ILE A 1 395 ? 15.042 58.401 49.333 1.00 31.59 ? ? ? ? ? ? 472 ILE A O 1
+ATOM 3114 C CB . ILE A 1 395 ? 17.200 56.317 50.732 1.00 27.62 ? ? ? ? ? ? 472 ILE A CB 1
+ATOM 3115 C CG1 . ILE A 1 395 ? 17.703 54.873 50.616 1.00 29.41 ? ? ? ? ? ? 472 ILE A CG1 1
+ATOM 3116 C CG2 . ILE A 1 395 ? 15.953 56.388 51.608 1.00 31.42 ? ? ? ? ? ? 472 ILE A CG2 1
+ATOM 3117 C CD1 . ILE A 1 395 ? 18.044 54.209 51.940 1.00 30.58 ? ? ? ? ? ? 472 ILE A CD1 1
+ATOM 3118 N N . ARG A 1 396 ? 17.108 59.268 49.616 1.00 30.36 ? ? ? ? ? ? 473 ARG A N 1
+ATOM 3119 C CA . ARG A 1 396 ? 16.647 60.649 49.717 1.00 31.50 ? ? ? ? ? ? 473 ARG A CA 1
+ATOM 3120 C C . ARG A 1 396 ? 16.104 61.195 48.404 1.00 29.87 ? ? ? ? ? ? 473 ARG A C 1
+ATOM 3121 O O . ARG A 1 396 ? 15.048 61.827 48.379 1.00 28.22 ? ? ? ? ? ? 473 ARG A O 1
+ATOM 3122 C CB . ARG A 1 396 ? 17.780 61.553 50.212 1.00 32.82 ? ? ? ? ? ? 473 ARG A CB 1
+ATOM 3123 C CG . ARG A 1 396 ? 17.770 61.731 51.707 1.00 42.81 ? ? ? ? ? ? 473 ARG A CG 1
+ATOM 3124 C CD . ARG A 1 396 ? 16.499 62.466 52.101 1.00 47.83 ? ? ? ? ? ? 473 ARG A CD 1
+ATOM 3125 N NE . ARG A 1 396 ? 16.312 62.522 53.544 1.00 53.65 ? ? ? ? ? ? 473 ARG A NE 1
+ATOM 3126 C CZ . ARG A 1 396 ? 15.294 63.134 54.139 1.00 53.53 ? ? ? ? ? ? 473 ARG A CZ 1
+ATOM 3127 N NH1 . ARG A 1 396 ? 14.368 63.747 53.415 1.00 54.45 ? ? ? ? ? ? 473 ARG A NH1 1
+ATOM 3128 N NH2 . ARG A 1 396 ? 15.195 63.119 55.459 1.00 54.57 ? ? ? ? ? ? 473 ARG A NH2 1
+ATOM 3129 N N . ALA A 1 397 ? 16.836 60.960 47.320 1.00 27.24 ? ? ? ? ? ? 474 ALA A N 1
+ATOM 3130 C CA . ALA A 1 397 ? 16.424 61.430 46.008 1.00 29.09 ? ? ? ? ? ? 474 ALA A CA 1
+ATOM 3131 C C . ALA A 1 397 ? 15.072 60.846 45.594 1.00 28.85 ? ? ? ? ? ? 474 ALA A C 1
+ATOM 3132 O O . ALA A 1 397 ? 14.204 61.571 45.116 1.00 28.15 ? ? ? ? ? ? 474 ALA A O 1
+ATOM 3133 C CB . ALA A 1 397 ? 17.488 61.079 44.975 1.00 27.64 ? ? ? ? ? ? 474 ALA A CB 1
+ATOM 3134 N N . LEU A 1 398 ? 14.895 59.539 45.780 1.00 29.49 ? ? ? ? ? ? 475 LEU A N 1
+ATOM 3135 C CA . LEU A 1 398 ? 13.643 58.876 45.415 1.00 27.57 ? ? ? ? ? ? 475 LEU A CA 1
+ATOM 3136 C C . LEU A 1 398 ? 12.464 59.468 46.177 1.00 29.89 ? ? ? ? ? ? 475 LEU A C 1
+ATOM 3137 O O . LEU A 1 398 ? 11.368 59.612 45.631 1.00 28.32 ? ? ? ? ? ? 475 LEU A O 1
+ATOM 3138 C CB . LEU A 1 398 ? 13.737 57.369 45.685 1.00 23.49 ? ? ? ? ? ? 475 LEU A CB 1
+ATOM 3139 C CG . LEU A 1 398 ? 14.756 56.590 44.839 1.00 22.50 ? ? ? ? ? ? 475 LEU A CG 1
+ATOM 3140 C CD1 . LEU A 1 398 ? 14.879 55.133 45.336 1.00 19.28 ? ? ? ? ? ? 475 LEU A CD1 1
+ATOM 3141 C CD2 . LEU A 1 398 ? 14.319 56.626 43.382 1.00 19.45 ? ? ? ? ? ? 475 LEU A CD2 1
+ATOM 3142 N N . GLU A 1 399 ? 12.691 59.804 47.444 1.00 29.44 ? ? ? ? ? ? 476 GLU A N 1
+ATOM 3143 C CA . GLU A 1 399 ? 11.648 60.401 48.267 1.00 31.06 ? ? ? ? ? ? 476 GLU A CA 1
+ATOM 3144 C C . GLU A 1 399 ? 11.302 61.783 47.712 1.00 28.79 ? ? ? ? ? ? 476 GLU A C 1
+ATOM 3145 O O . GLU A 1 399 ? 10.165 62.236 47.833 1.00 27.67 ? ? ? ? ? ? 476 GLU A O 1
+ATOM 3146 C CB . GLU A 1 399 ? 12.116 60.501 49.733 1.00 33.63 ? ? ? ? ? ? 476 GLU A CB 1
+ATOM 3147 C CG . GLU A 1 399 ? 12.211 59.143 50.440 1.00 38.16 ? ? ? ? ? ? 476 GLU A CG 1
+ATOM 3148 C CD . GLU A 1 399 ? 12.923 59.187 51.798 1.00 41.97 ? ? ? ? ? ? 476 GLU A CD 1
+ATOM 3149 O OE1 . GLU A 1 399 ? 12.869 58.168 52.523 1.00 40.84 ? ? ? ? ? ? 476 GLU A OE1 1
+ATOM 3150 O OE2 . GLU A 1 399 ? 13.547 60.217 52.138 1.00 39.13 ? ? ? ? ? ? 476 GLU A OE2 1
+ATOM 3151 N N . ARG A 1 400 ? 12.285 62.430 47.085 1.00 27.70 ? ? ? ? ? ? 477 ARG A N 1
+ATOM 3152 C CA . ARG A 1 400 ? 12.110 63.762 46.508 1.00 30.68 ? ? ? ? ? ? 477 ARG A CA 1
+ATOM 3153 C C . ARG A 1 400 ? 11.399 63.719 45.159 1.00 31.73 ? ? ? ? ? ? 477 ARG A C 1
+ATOM 3154 O O . ARG A 1 400 ? 10.817 64.710 44.727 1.00 31.88 ? ? ? ? ? ? 477 ARG A O 1
+ATOM 3155 C CB . ARG A 1 400 ? 13.461 64.442 46.353 1.00 33.75 ? ? ? ? ? ? 477 ARG A CB 1
+ATOM 3156 N N . GLY A 1 401 ? 11.452 62.570 44.495 1.00 31.20 ? ? ? ? ? ? 478 GLY A N 1
+ATOM 3157 C CA . GLY A 1 401 ? 10.794 62.436 43.208 1.00 28.77 ? ? ? ? ? ? 478 GLY A CA 1
+ATOM 3158 C C . GLY A 1 401 ? 11.764 62.095 42.096 1.00 27.78 ? ? ? ? ? ? 478 GLY A C 1
+ATOM 3159 O O . GLY A 1 401 ? 11.365 61.887 40.951 1.00 27.00 ? ? ? ? ? ? 478 GLY A O 1
+ATOM 3160 N N . TYR A 1 402 ? 13.047 62.050 42.433 1.00 23.87 ? ? ? ? ? ? 479 TYR A N 1
+ATOM 3161 C CA . TYR A 1 402 ? 14.077 61.720 41.461 1.00 24.61 ? ? ? ? ? ? 479 TYR A CA 1
+ATOM 3162 C C . TYR A 1 402 ? 13.920 60.295 40.941 1.00 26.17 ? ? ? ? ? ? 479 TYR A C 1
+ATOM 3163 O O . TYR A 1 402 ? 13.462 59.402 41.654 1.00 28.42 ? ? ? ? ? ? 479 TYR A O 1
+ATOM 3164 C CB . TYR A 1 402 ? 15.460 61.838 42.099 1.00 26.25 ? ? ? ? ? ? 479 TYR A CB 1
+ATOM 3165 C CG . TYR A 1 402 ? 16.598 61.453 41.178 1.00 24.44 ? ? ? ? ? ? 479 TYR A CG 1
+ATOM 3166 C CD1 . TYR A 1 402 ? 17.013 62.301 40.153 1.00 28.10 ? ? ? ? ? ? 479 TYR A CD1 1
+ATOM 3167 C CD2 . TYR A 1 402 ? 17.240 60.223 41.315 1.00 26.32 ? ? ? ? ? ? 479 TYR A CD2 1
+ATOM 3168 C CE1 . TYR A 1 402 ? 18.042 61.932 39.286 1.00 27.67 ? ? ? ? ? ? 479 TYR A CE1 1
+ATOM 3169 C CE2 . TYR A 1 402 ? 18.264 59.845 40.456 1.00 24.23 ? ? ? ? ? ? 479 TYR A CE2 1
+ATOM 3170 C CZ . TYR A 1 402 ? 18.660 60.702 39.445 1.00 25.73 ? ? ? ? ? ? 479 TYR A CZ 1
+ATOM 3171 O OH . TYR A 1 402 ? 19.667 60.320 38.594 1.00 27.67 ? ? ? ? ? ? 479 TYR A OH 1
+ATOM 3172 N N . ARG A 1 403 ? 14.321 60.096 39.693 1.00 26.79 ? ? ? ? ? ? 480 ARG A N 1
+ATOM 3173 C CA . ARG A 1 403 ? 14.293 58.791 39.048 1.00 28.17 ? ? ? ? ? ? 480 ARG A CA 1
+ATOM 3174 C C . ARG A 1 403 ? 15.425 58.830 38.032 1.00 29.15 ? ? ? ? ? ? 480 ARG A C 1
+ATOM 3175 O O . ARG A 1 403 ? 15.653 59.868 37.408 1.00 28.31 ? ? ? ? ? ? 480 ARG A O 1
+ATOM 3176 C CB . ARG A 1 403 ? 12.957 58.563 38.339 1.00 23.89 ? ? ? ? ? ? 480 ARG A CB 1
+ATOM 3177 C CG . ARG A 1 403 ? 11.759 58.439 39.280 1.00 28.89 ? ? ? ? ? ? 480 ARG A CG 1
+ATOM 3178 C CD . ARG A 1 403 ? 11.823 57.154 40.084 1.00 28.09 ? ? ? ? ? ? 480 ARG A CD 1
+ATOM 3179 N NE . ARG A 1 403 ? 10.638 56.937 40.915 1.00 28.31 ? ? ? ? ? ? 480 ARG A NE 1
+ATOM 3180 C CZ . ARG A 1 403 ? 10.379 57.573 42.054 1.00 29.91 ? ? ? ? ? ? 480 ARG A CZ 1
+ATOM 3181 N NH1 . ARG A 1 403 ? 11.225 58.483 42.520 1.00 30.64 ? ? ? ? ? ? 480 ARG A NH1 1
+ATOM 3182 N NH2 . ARG A 1 403 ? 9.274 57.287 42.733 1.00 26.68 ? ? ? ? ? ? 480 ARG A NH2 1
+ATOM 3183 N N . MET A 1 404 ? 16.157 57.729 37.883 1.00 28.37 ? ? ? ? ? ? 481 MET A N 1
+ATOM 3184 C CA . MET A 1 404 ? 17.246 57.708 36.913 1.00 29.52 ? ? ? ? ? ? 481 MET A CA 1
+ATOM 3185 C C . MET A 1 404 ? 16.718 58.132 35.553 1.00 29.34 ? ? ? ? ? ? 481 MET A C 1
+ATOM 3186 O O . MET A 1 404 ? 15.651 57.687 35.129 1.00 31.02 ? ? ? ? ? ? 481 MET A O 1
+ATOM 3187 C CB . MET A 1 404 ? 17.856 56.313 36.777 1.00 31.15 ? ? ? ? ? ? 481 MET A CB 1
+ATOM 3188 C CG . MET A 1 404 ? 18.677 55.835 37.962 1.00 31.92 ? ? ? ? ? ? 481 MET A CG 1
+ATOM 3189 S SD . MET A 1 404 ? 19.363 54.198 37.612 1.00 33.13 ? ? ? ? ? ? 481 MET A SD 1
+ATOM 3190 C CE . MET A 1 404 ? 17.848 53.223 37.505 1.00 28.87 ? ? ? ? ? ? 481 MET A CE 1
+ATOM 3191 N N . PRO A 1 405 ? 17.448 59.024 34.866 1.00 30.83 ? ? ? ? ? ? 482 PRO A N 1
+ATOM 3192 C CA . PRO A 1 405 ? 17.080 59.526 33.539 1.00 30.42 ? ? ? ? ? ? 482 PRO A CA 1
+ATOM 3193 C C . PRO A 1 405 ? 17.203 58.427 32.483 1.00 31.87 ? ? ? ? ? ? 482 PRO A C 1
+ATOM 3194 O O . PRO A 1 405 ? 17.863 57.413 32.711 1.00 31.44 ? ? ? ? ? ? 482 PRO A O 1
+ATOM 3195 C CB . PRO A 1 405 ? 18.091 60.650 33.322 1.00 32.23 ? ? ? ? ? ? 482 PRO A CB 1
+ATOM 3196 C CG . PRO A 1 405 ? 19.322 60.096 34.026 1.00 31.33 ? ? ? ? ? ? 482 PRO A CG 1
+ATOM 3197 C CD . PRO A 1 405 ? 18.673 59.698 35.336 1.00 27.89 ? ? ? ? ? ? 482 PRO A CD 1
+ATOM 3198 N N . ARG A 1 406 ? 16.571 58.631 31.331 1.00 31.14 ? ? ? ? ? ? 483 ARG A N 1
+ATOM 3199 C CA . ARG A 1 406 ? 16.622 57.656 30.246 1.00 31.28 ? ? ? ? ? ? 483 ARG A CA 1
+ATOM 3200 C C . ARG A 1 406 ? 17.925 57.729 29.456 1.00 33.21 ? ? ? ? ? ? 483 ARG A C 1
+ATOM 3201 O O . ARG A 1 406 ? 18.302 58.790 28.968 1.00 32.15 ? ? ? ? ? ? 483 ARG A O 1
+ATOM 3202 C CB . ARG A 1 406 ? 15.450 57.868 29.281 1.00 31.52 ? ? ? ? ? ? 483 ARG A CB 1
+ATOM 3203 C CG . ARG A 1 406 ? 15.455 56.910 28.081 1.00 31.95 ? ? ? ? ? ? 483 ARG A CG 1
+ATOM 3204 C CD . ARG A 1 406 ? 14.208 57.053 27.205 1.00 32.59 ? ? ? ? ? ? 483 ARG A CD 1
+ATOM 3205 N NE . ARG A 1 406 ? 14.135 58.322 26.484 1.00 36.70 ? ? ? ? ? ? 483 ARG A NE 1
+ATOM 3206 C CZ . ARG A 1 406 ? 14.919 58.657 25.463 1.00 37.29 ? ? ? ? ? ? 483 ARG A CZ 1
+ATOM 3207 N NH1 . ARG A 1 406 ? 15.849 57.820 25.028 1.00 41.18 ? ? ? ? ? ? 483 ARG A NH1 1
+ATOM 3208 N NH2 . ARG A 1 406 ? 14.779 59.838 24.878 1.00 38.85 ? ? ? ? ? ? 483 ARG A NH2 1
+ATOM 3209 N N . PRO A 1 407 ? 18.630 56.595 29.317 1.00 35.54 ? ? ? ? ? ? 484 PRO A N 1
+ATOM 3210 C CA . PRO A 1 407 ? 19.895 56.526 28.575 1.00 36.23 ? ? ? ? ? ? 484 PRO A CA 1
+ATOM 3211 C C . PRO A 1 407 ? 19.646 56.738 27.080 1.00 38.94 ? ? ? ? ? ? 484 PRO A C 1
+ATOM 3212 O O . PRO A 1 407 ? 18.535 56.521 26.598 1.00 38.73 ? ? ? ? ? ? 484 PRO A O 1
+ATOM 3213 C CB . PRO A 1 407 ? 20.388 55.109 28.880 1.00 37.04 ? ? ? ? ? ? 484 PRO A CB 1
+ATOM 3214 C CG . PRO A 1 407 ? 19.715 54.793 30.214 1.00 36.28 ? ? ? ? ? ? 484 PRO A CG 1
+ATOM 3215 C CD . PRO A 1 407 ? 18.323 55.273 29.882 1.00 34.21 ? ? ? ? ? ? 484 PRO A CD 1
+ATOM 3216 N N . GLU A 1 408 ? 20.680 57.146 26.351 1.00 42.50 ? ? ? ? ? ? 485 GLU A N 1
+ATOM 3217 C CA . GLU A 1 408 ? 20.562 57.397 24.912 1.00 45.38 ? ? ? ? ? ? 485 GLU A CA 1
+ATOM 3218 C C . GLU A 1 408 ? 20.060 56.212 24.088 1.00 45.15 ? ? ? ? ? ? 485 GLU A C 1
+ATOM 3219 O O . GLU A 1 408 ? 19.209 56.373 23.213 1.00 44.84 ? ? ? ? ? ? 485 GLU A O 1
+ATOM 3220 C CB . GLU A 1 408 ? 21.910 57.850 24.340 1.00 51.03 ? ? ? ? ? ? 485 GLU A CB 1
+ATOM 3221 C CG . GLU A 1 408 ? 21.906 58.044 22.820 1.00 56.34 ? ? ? ? ? ? 485 GLU A CG 1
+ATOM 3222 C CD . GLU A 1 408 ? 23.284 58.380 22.261 1.00 60.17 ? ? ? ? ? ? 485 GLU A CD 1
+ATOM 3223 O OE1 . GLU A 1 408 ? 23.856 59.415 22.666 1.00 60.71 ? ? ? ? ? ? 485 GLU A OE1 1
+ATOM 3224 O OE2 . GLU A 1 408 ? 23.793 57.607 21.417 1.00 61.52 ? ? ? ? ? ? 485 GLU A OE2 1
+ATOM 3225 N N . ASN A 1 409 ? 20.596 55.027 24.352 1.00 43.77 ? ? ? ? ? ? 486 ASN A N 1
+ATOM 3226 C CA . ASN A 1 409 ? 20.193 53.845 23.601 1.00 44.80 ? ? ? ? ? ? 486 ASN A CA 1
+ATOM 3227 C C . ASN A 1 409 ? 18.974 53.131 24.173 1.00 42.81 ? ? ? ? ? ? 486 ASN A C 1
+ATOM 3228 O O . ASN A 1 409 ? 18.763 51.946 23.919 1.00 43.81 ? ? ? ? ? ? 486 ASN A O 1
+ATOM 3229 C CB . ASN A 1 409 ? 21.363 52.867 23.499 1.00 46.89 ? ? ? ? ? ? 486 ASN A CB 1
+ATOM 3230 C CG . ASN A 1 409 ? 22.507 53.421 22.675 1.00 52.48 ? ? ? ? ? ? 486 ASN A CG 1
+ATOM 3231 O OD1 . ASN A 1 409 ? 22.315 53.828 21.527 1.00 55.33 ? ? ? ? ? ? 486 ASN A OD1 1
+ATOM 3232 N ND2 . ASN A 1 409 ? 23.706 53.436 23.252 1.00 52.18 ? ? ? ? ? ? 486 ASN A ND2 1
+ATOM 3233 N N . CYS A 1 410 ? 18.170 53.857 24.942 1.00 39.76 ? ? ? ? ? ? 487 CYS A N 1
+ATOM 3234 C CA . CYS A 1 410 ? 16.973 53.279 25.538 1.00 34.85 ? ? ? ? ? ? 487 CYS A CA 1
+ATOM 3235 C C . CYS A 1 410 ? 15.716 53.914 24.958 1.00 33.82 ? ? ? ? ? ? 487 CYS A C 1
+ATOM 3236 O O . CYS A 1 410 ? 15.435 55.086 25.196 1.00 32.07 ? ? ? ? ? ? 487 CYS A O 1
+ATOM 3237 C CB . CYS A 1 410 ? 16.986 53.471 27.055 1.00 33.25 ? ? ? ? ? ? 487 CYS A CB 1
+ATOM 3238 S SG . CYS A 1 410 ? 15.500 52.846 27.878 1.00 30.26 ? ? ? ? ? ? 487 CYS A SG 1
+ATOM 3239 N N . PRO A 1 411 ? 14.939 53.141 24.189 1.00 33.05 ? ? ? ? ? ? 488 PRO A N 1
+ATOM 3240 C CA . PRO A 1 411 ? 13.710 53.661 23.589 1.00 34.02 ? ? ? ? ? ? 488 PRO A CA 1
+ATOM 3241 C C . PRO A 1 411 ? 12.779 54.218 24.664 1.00 33.17 ? ? ? ? ? ? 488 PRO A C 1
+ATOM 3242 O O . PRO A 1 411 ? 12.735 53.704 25.788 1.00 30.98 ? ? ? ? ? ? 488 PRO A O 1
+ATOM 3243 C CB . PRO A 1 411 ? 13.137 52.430 22.881 1.00 33.67 ? ? ? ? ? ? 488 PRO A CB 1
+ATOM 3244 C CG . PRO A 1 411 ? 13.677 51.285 23.738 1.00 34.41 ? ? ? ? ? ? 488 PRO A CG 1
+ATOM 3245 C CD . PRO A 1 411 ? 15.111 51.724 23.836 1.00 31.59 ? ? ? ? ? ? 488 PRO A CD 1
+ATOM 3246 N N . GLU A 1 412 ? 12.048 55.274 24.322 1.00 28.83 ? ? ? ? ? ? 489 GLU A N 1
+ATOM 3247 C CA . GLU A 1 412 ? 11.120 55.893 25.264 1.00 31.07 ? ? ? ? ? ? 489 GLU A CA 1
+ATOM 3248 C C . GLU A 1 412 ? 10.076 54.920 25.784 1.00 26.34 ? ? ? ? ? ? 489 GLU A C 1
+ATOM 3249 O O . GLU A 1 412 ? 9.717 54.966 26.959 1.00 27.48 ? ? ? ? ? ? 489 GLU A O 1
+ATOM 3250 C CB . GLU A 1 412 ? 10.408 57.092 24.625 1.00 32.75 ? ? ? ? ? ? 489 GLU A CB 1
+ATOM 3251 C CG . GLU A 1 412 ? 11.300 58.291 24.378 1.00 43.54 ? ? ? ? ? ? 489 GLU A CG 1
+ATOM 3252 C CD . GLU A 1 412 ? 10.547 59.447 23.744 1.00 51.63 ? ? ? ? ? ? 489 GLU A CD 1
+ATOM 3253 O OE1 . GLU A 1 412 ? 10.118 59.308 22.576 1.00 52.92 ? ? ? ? ? ? 489 GLU A OE1 1
+ATOM 3254 O OE2 . GLU A 1 412 ? 10.374 60.488 24.418 1.00 54.00 ? ? ? ? ? ? 489 GLU A OE2 1
+ATOM 3255 N N . GLU A 1 413 ? 9.579 54.047 24.915 1.00 27.44 ? ? ? ? ? ? 490 GLU A N 1
+ATOM 3256 C CA . GLU A 1 413 ? 8.568 53.083 25.330 1.00 28.74 ? ? ? ? ? ? 490 GLU A CA 1
+ATOM 3257 C C . GLU A 1 413 ? 9.108 52.159 26.415 1.00 28.88 ? ? ? ? ? ? 490 GLU A C 1
+ATOM 3258 O O . GLU A 1 413 ? 8.378 51.775 27.326 1.00 28.60 ? ? ? ? ? ? 490 GLU A O 1
+ATOM 3259 C CB . GLU A 1 413 ? 8.090 52.233 24.148 1.00 31.96 ? ? ? ? ? ? 490 GLU A CB 1
+ATOM 3260 C CG . GLU A 1 413 ? 7.399 52.996 23.030 1.00 39.86 ? ? ? ? ? ? 490 GLU A CG 1
+ATOM 3261 C CD . GLU A 1 413 ? 8.333 53.936 22.297 1.00 44.73 ? ? ? ? ? ? 490 GLU A CD 1
+ATOM 3262 O OE1 . GLU A 1 413 ? 9.383 53.469 21.807 1.00 45.96 ? ? ? ? ? ? 490 GLU A OE1 1
+ATOM 3263 O OE2 . GLU A 1 413 ? 8.013 55.139 22.201 1.00 51.63 ? ? ? ? ? ? 490 GLU A OE2 1
+ATOM 3264 N N . LEU A 1 414 ? 10.383 51.794 26.317 1.00 27.16 ? ? ? ? ? ? 491 LEU A N 1
+ATOM 3265 C CA . LEU A 1 414 ? 10.974 50.910 27.311 1.00 26.59 ? ? ? ? ? ? 491 LEU A CA 1
+ATOM 3266 C C . LEU A 1 414 ? 11.162 51.689 28.607 1.00 26.78 ? ? ? ? ? ? 491 LEU A C 1
+ATOM 3267 O O . LEU A 1 414 ? 10.962 51.160 29.703 1.00 24.69 ? ? ? ? ? ? 491 LEU A O 1
+ATOM 3268 C CB . LEU A 1 414 ? 12.317 50.364 26.818 1.00 27.57 ? ? ? ? ? ? 491 LEU A CB 1
+ATOM 3269 C CG . LEU A 1 414 ? 12.990 49.374 27.775 1.00 31.18 ? ? ? ? ? ? 491 LEU A CG 1
+ATOM 3270 C CD1 . LEU A 1 414 ? 12.088 48.161 27.973 1.00 28.40 ? ? ? ? ? ? 491 LEU A CD1 1
+ATOM 3271 C CD2 . LEU A 1 414 ? 14.341 48.942 27.205 1.00 28.87 ? ? ? ? ? ? 491 LEU A CD2 1
+ATOM 3272 N N . TYR A 1 415 ? 11.535 52.956 28.476 1.00 25.28 ? ? ? ? ? ? 492 TYR A N 1
+ATOM 3273 C CA . TYR A 1 415 ? 11.727 53.809 29.638 1.00 22.47 ? ? ? ? ? ? 492 TYR A CA 1
+ATOM 3274 C C . TYR A 1 415 ? 10.383 54.028 30.341 1.00 23.62 ? ? ? ? ? ? 492 TYR A C 1
+ATOM 3275 O O . TYR A 1 415 ? 10.307 54.043 31.580 1.00 22.28 ? ? ? ? ? ? 492 TYR A O 1
+ATOM 3276 C CB . TYR A 1 415 ? 12.326 55.153 29.215 1.00 24.63 ? ? ? ? ? ? 492 TYR A CB 1
+ATOM 3277 C CG . TYR A 1 415 ? 12.676 56.059 30.377 1.00 25.60 ? ? ? ? ? ? 492 TYR A CG 1
+ATOM 3278 C CD1 . TYR A 1 415 ? 13.656 55.696 31.301 1.00 27.79 ? ? ? ? ? ? 492 TYR A CD1 1
+ATOM 3279 C CD2 . TYR A 1 415 ? 12.017 57.272 30.562 1.00 26.10 ? ? ? ? ? ? 492 TYR A CD2 1
+ATOM 3280 C CE1 . TYR A 1 415 ? 13.968 56.516 32.376 1.00 23.59 ? ? ? ? ? ? 492 TYR A CE1 1
+ATOM 3281 C CE2 . TYR A 1 415 ? 12.321 58.099 31.632 1.00 25.41 ? ? ? ? ? ? 492 TYR A CE2 1
+ATOM 3282 C CZ . TYR A 1 415 ? 13.296 57.717 32.534 1.00 26.95 ? ? ? ? ? ? 492 TYR A CZ 1
+ATOM 3283 O OH . TYR A 1 415 ? 13.601 58.542 33.586 1.00 26.10 ? ? ? ? ? ? 492 TYR A OH 1
+ATOM 3284 N N . ASN A 1 416 ? 9.318 54.186 29.557 1.00 20.75 ? ? ? ? ? ? 493 ASN A N 1
+ATOM 3285 C CA . ASN A 1 416 ? 8.000 54.392 30.147 1.00 22.36 ? ? ? ? ? ? 493 ASN A CA 1
+ATOM 3286 C C . ASN A 1 416 ? 7.622 53.238 31.065 1.00 20.69 ? ? ? ? ? ? 493 ASN A C 1
+ATOM 3287 O O . ASN A 1 416 ? 7.020 53.449 32.115 1.00 24.16 ? ? ? ? ? ? 493 ASN A O 1
+ATOM 3288 C CB . ASN A 1 416 ? 6.922 54.569 29.074 1.00 24.15 ? ? ? ? ? ? 493 ASN A CB 1
+ATOM 3289 C CG . ASN A 1 416 ? 7.032 55.900 28.354 1.00 32.80 ? ? ? ? ? ? 493 ASN A CG 1
+ATOM 3290 O OD1 . ASN A 1 416 ? 7.342 56.924 28.969 1.00 34.75 ? ? ? ? ? ? 493 ASN A OD1 1
+ATOM 3291 N ND2 . ASN A 1 416 ? 6.749 55.901 27.054 1.00 34.19 ? ? ? ? ? ? 493 ASN A ND2 1
+ATOM 3292 N N . ILE A 1 417 ? 7.973 52.021 30.669 1.00 20.38 ? ? ? ? ? ? 494 ILE A N 1
+ATOM 3293 C CA . ILE A 1 417 ? 7.675 50.856 31.494 1.00 22.01 ? ? ? ? ? ? 494 ILE A CA 1
+ATOM 3294 C C . ILE A 1 417 ? 8.461 50.959 32.801 1.00 21.18 ? ? ? ? ? ? 494 ILE A C 1
+ATOM 3295 O O . ILE A 1 417 ? 7.918 50.733 33.878 1.00 23.78 ? ? ? ? ? ? 494 ILE A O 1
+ATOM 3296 C CB . ILE A 1 417 ? 8.022 49.553 30.747 1.00 23.61 ? ? ? ? ? ? 494 ILE A CB 1
+ATOM 3297 C CG1 . ILE A 1 417 ? 7.145 49.448 29.494 1.00 26.42 ? ? ? ? ? ? 494 ILE A CG1 1
+ATOM 3298 C CG2 . ILE A 1 417 ? 7.810 48.345 31.657 1.00 25.67 ? ? ? ? ? ? 494 ILE A CG2 1
+ATOM 3299 C CD1 . ILE A 1 417 ? 7.410 48.231 28.641 1.00 28.36 ? ? ? ? ? ? 494 ILE A CD1 1
+ATOM 3300 N N . MET A 1 418 ? 9.739 51.312 32.709 1.00 21.59 ? ? ? ? ? ? 495 MET A N 1
+ATOM 3301 C CA . MET A 1 418 ? 10.558 51.471 33.908 1.00 23.60 ? ? ? ? ? ? 495 MET A CA 1
+ATOM 3302 C C . MET A 1 418 ? 9.862 52.445 34.863 1.00 20.98 ? ? ? ? ? ? 495 MET A C 1
+ATOM 3303 O O . MET A 1 418 ? 9.679 52.153 36.047 1.00 19.81 ? ? ? ? ? ? 495 MET A O 1
+ATOM 3304 C CB . MET A 1 418 ? 11.937 52.041 33.559 1.00 20.97 ? ? ? ? ? ? 495 MET A CB 1
+ATOM 3305 C CG . MET A 1 418 ? 12.785 51.188 32.627 1.00 25.61 ? ? ? ? ? ? 495 MET A CG 1
+ATOM 3306 S SD . MET A 1 418 ? 14.400 51.963 32.345 1.00 22.34 ? ? ? ? ? ? 495 MET A SD 1
+ATOM 3307 C CE . MET A 1 418 ? 15.086 50.913 31.091 1.00 21.47 ? ? ? ? ? ? 495 MET A CE 1
+ATOM 3308 N N . MET A 1 419 ? 9.470 53.604 34.335 1.00 18.66 ? ? ? ? ? ? 496 MET A N 1
+ATOM 3309 C CA . MET A 1 419 ? 8.824 54.626 35.152 1.00 20.90 ? ? ? ? ? ? 496 MET A CA 1
+ATOM 3310 C C . MET A 1 419 ? 7.581 54.120 35.860 1.00 19.18 ? ? ? ? ? ? 496 MET A C 1
+ATOM 3311 O O . MET A 1 419 ? 7.307 54.522 36.986 1.00 20.91 ? ? ? ? ? ? 496 MET A O 1
+ATOM 3312 C CB . MET A 1 419 ? 8.498 55.874 34.312 1.00 20.32 ? ? ? ? ? ? 496 MET A CB 1
+ATOM 3313 C CG . MET A 1 419 ? 9.736 56.674 33.929 1.00 23.42 ? ? ? ? ? ? 496 MET A CG 1
+ATOM 3314 S SD . MET A 1 419 ? 10.586 57.431 35.367 1.00 27.24 ? ? ? ? ? ? 496 MET A SD 1
+ATOM 3315 C CE . MET A 1 419 ? 9.402 58.679 35.862 1.00 30.44 ? ? ? ? ? ? 496 MET A CE 1
+ATOM 3316 N N . ARG A 1 420 ? 6.830 53.234 35.212 1.00 19.91 ? ? ? ? ? ? 497 ARG A N 1
+ATOM 3317 C CA . ARG A 1 420 ? 5.636 52.691 35.843 1.00 22.22 ? ? ? ? ? ? 497 ARG A CA 1
+ATOM 3318 C C . ARG A 1 420 ? 6.035 51.733 36.961 1.00 23.43 ? ? ? ? ? ? 497 ARG A C 1
+ATOM 3319 O O . ARG A 1 420 ? 5.341 51.629 37.977 1.00 22.27 ? ? ? ? ? ? 497 ARG A O 1
+ATOM 3320 C CB . ARG A 1 420 ? 4.752 51.986 34.813 1.00 24.12 ? ? ? ? ? ? 497 ARG A CB 1
+ATOM 3321 C CG . ARG A 1 420 ? 4.137 52.927 33.769 1.00 26.85 ? ? ? ? ? ? 497 ARG A CG 1
+ATOM 3322 C CD . ARG A 1 420 ? 3.083 52.194 32.959 1.00 29.59 ? ? ? ? ? ? 497 ARG A CD 1
+ATOM 3323 N NE . ARG A 1 420 ? 2.048 51.671 33.848 1.00 37.25 ? ? ? ? ? ? 497 ARG A NE 1
+ATOM 3324 C CZ . ARG A 1 420 ? 1.034 50.904 33.465 1.00 40.41 ? ? ? ? ? ? 497 ARG A CZ 1
+ATOM 3325 N NH1 . ARG A 1 420 ? 0.898 50.558 32.192 1.00 38.41 ? ? ? ? ? ? 497 ARG A NH1 1
+ATOM 3326 N NH2 . ARG A 1 420 ? 0.157 50.473 34.364 1.00 41.82 ? ? ? ? ? ? 497 ARG A NH2 1
+ATOM 3327 N N . CYS A 1 421 ? 7.154 51.038 36.777 1.00 21.20 ? ? ? ? ? ? 498 CYS A N 1
+ATOM 3328 C CA . CYS A 1 421 ? 7.639 50.123 37.804 1.00 20.68 ? ? ? ? ? ? 498 CYS A CA 1
+ATOM 3329 C C . CYS A 1 421 ? 8.075 50.888 39.044 1.00 20.43 ? ? ? ? ? ? 498 CYS A C 1
+ATOM 3330 O O . CYS A 1 421 ? 7.969 50.376 40.161 1.00 20.84 ? ? ? ? ? ? 498 CYS A O 1
+ATOM 3331 C CB . CYS A 1 421 ? 8.828 49.304 37.299 1.00 19.75 ? ? ? ? ? ? 498 CYS A CB 1
+ATOM 3332 S SG . CYS A 1 421 ? 8.381 48.072 36.084 1.00 19.34 ? ? ? ? ? ? 498 CYS A SG 1
+ATOM 3333 N N . TRP A 1 422 ? 8.560 52.112 38.845 1.00 20.79 ? ? ? ? ? ? 499 TRP A N 1
+ATOM 3334 C CA . TRP A 1 422 ? 9.041 52.927 39.958 1.00 22.26 ? ? ? ? ? ? 499 TRP A CA 1
+ATOM 3335 C C . TRP A 1 422 ? 8.028 53.886 40.574 1.00 23.52 ? ? ? ? ? ? 499 TRP A C 1
+ATOM 3336 O O . TRP A 1 422 ? 8.403 54.964 41.039 1.00 25.98 ? ? ? ? ? ? 499 TRP A O 1
+ATOM 3337 C CB . TRP A 1 422 ? 10.280 53.732 39.551 1.00 21.99 ? ? ? ? ? ? 499 TRP A CB 1
+ATOM 3338 C CG . TRP A 1 422 ? 11.388 52.909 38.981 1.00 21.07 ? ? ? ? ? ? 499 TRP A CG 1
+ATOM 3339 C CD1 . TRP A 1 422 ? 11.777 51.659 39.376 1.00 20.79 ? ? ? ? ? ? 499 TRP A CD1 1
+ATOM 3340 C CD2 . TRP A 1 422 ? 12.293 53.303 37.946 1.00 20.27 ? ? ? ? ? ? 499 TRP A CD2 1
+ATOM 3341 N NE1 . TRP A 1 422 ? 12.872 51.250 38.647 1.00 19.82 ? ? ? ? ? ? 499 TRP A NE1 1
+ATOM 3342 C CE2 . TRP A 1 422 ? 13.208 52.242 37.762 1.00 19.99 ? ? ? ? ? ? 499 TRP A CE2 1
+ATOM 3343 C CE3 . TRP A 1 422 ? 12.420 54.453 37.154 1.00 20.76 ? ? ? ? ? ? 499 TRP A CE3 1
+ATOM 3344 C CZ2 . TRP A 1 422 ? 14.238 52.298 36.821 1.00 22.05 ? ? ? ? ? ? 499 TRP A CZ2 1
+ATOM 3345 C CZ3 . TRP A 1 422 ? 13.440 54.509 36.219 1.00 19.77 ? ? ? ? ? ? 499 TRP A CZ3 1
+ATOM 3346 C CH2 . TRP A 1 422 ? 14.338 53.437 36.060 1.00 23.72 ? ? ? ? ? ? 499 TRP A CH2 1
+ATOM 3347 N N . LYS A 1 423 ? 6.754 53.512 40.575 1.00 22.20 ? ? ? ? ? ? 500 LYS A N 1
+ATOM 3348 C CA . LYS A 1 423 ? 5.743 54.361 41.189 1.00 23.61 ? ? ? ? ? ? 500 LYS A CA 1
+ATOM 3349 C C . LYS A 1 423 ? 5.910 54.237 42.687 1.00 25.33 ? ? ? ? ? ? 500 LYS A C 1
+ATOM 3350 O O . LYS A 1 423 ? 6.157 53.144 43.203 1.00 20.53 ? ? ? ? ? ? 500 LYS A O 1
+ATOM 3351 C CB . LYS A 1 423 ? 4.330 53.922 40.797 1.00 24.99 ? ? ? ? ? ? 500 LYS A CB 1
+ATOM 3352 C CG . LYS A 1 423 ? 3.936 54.323 39.393 1.00 26.30 ? ? ? ? ? ? 500 LYS A CG 1
+ATOM 3353 C CD . LYS A 1 423 ? 4.028 55.841 39.240 1.00 30.76 ? ? ? ? ? ? 500 LYS A CD 1
+ATOM 3354 C CE . LYS A 1 423 ? 3.441 56.312 37.924 1.00 37.05 ? ? ? ? ? ? 500 LYS A CE 1
+ATOM 3355 N NZ . LYS A 1 423 ? 1.995 55.948 37.849 1.00 44.39 ? ? ? ? ? ? 500 LYS A NZ 1
+ATOM 3356 N N . ASN A 1 424 ? 5.780 55.354 43.387 1.00 23.08 ? ? ? ? ? ? 501 ASN A N 1
+ATOM 3357 C CA . ASN A 1 424 ? 5.923 55.333 44.827 1.00 25.92 ? ? ? ? ? ? 501 ASN A CA 1
+ATOM 3358 C C . ASN A 1 424 ? 4.854 54.448 45.454 1.00 26.50 ? ? ? ? ? ? 501 ASN A C 1
+ATOM 3359 O O . ASN A 1 424 ? 5.129 53.708 46.399 1.00 28.08 ? ? ? ? ? ? 501 ASN A O 1
+ATOM 3360 C CB . ASN A 1 424 ? 5.825 56.743 45.401 1.00 31.54 ? ? ? ? ? ? 501 ASN A CB 1
+ATOM 3361 C CG . ASN A 1 424 ? 6.041 56.763 46.886 1.00 37.29 ? ? ? ? ? ? 501 ASN A CG 1
+ATOM 3362 O OD1 . ASN A 1 424 ? 7.114 56.397 47.368 1.00 41.79 ? ? ? ? ? ? 501 ASN A OD1 1
+ATOM 3363 N ND2 . ASN A 1 424 ? 5.019 57.169 47.631 1.00 44.96 ? ? ? ? ? ? 501 ASN A ND2 1
+ATOM 3364 N N . ARG A 1 425 ? 3.632 54.519 44.939 1.00 26.56 ? ? ? ? ? ? 502 ARG A N 1
+ATOM 3365 C CA . ARG A 1 425 ? 2.559 53.690 45.487 1.00 28.34 ? ? ? ? ? ? 502 ARG A CA 1
+ATOM 3366 C C . ARG A 1 425 ? 2.618 52.302 44.852 1.00 26.80 ? ? ? ? ? ? 502 ARG A C 1
+ATOM 3367 O O . ARG A 1 425 ? 2.416 52.156 43.645 1.00 25.54 ? ? ? ? ? ? 502 ARG A O 1
+ATOM 3368 C CB . ARG A 1 425 ? 1.196 54.325 45.224 1.00 33.15 ? ? ? ? ? ? 502 ARG A CB 1
+ATOM 3369 C CG . ARG A 1 425 ? 1.087 55.757 45.714 1.00 40.31 ? ? ? ? ? ? 502 ARG A CG 1
+ATOM 3370 C CD . ARG A 1 425 ? -0.340 56.119 46.090 1.00 46.61 ? ? ? ? ? ? 502 ARG A CD 1
+ATOM 3371 N NE . ARG A 1 425 ? -0.788 55.332 47.239 1.00 52.18 ? ? ? ? ? ? 502 ARG A NE 1
+ATOM 3372 C CZ . ARG A 1 425 ? -1.881 55.590 47.952 1.00 54.72 ? ? ? ? ? ? 502 ARG A CZ 1
+ATOM 3373 N NH1 . ARG A 1 425 ? -2.654 56.623 47.641 1.00 56.43 ? ? ? ? ? ? 502 ARG A NH1 1
+ATOM 3374 N NH2 . ARG A 1 425 ? -2.195 54.824 48.988 1.00 56.63 ? ? ? ? ? ? 502 ARG A NH2 1
+ATOM 3375 N N . PRO A 1 426 ? 2.894 51.261 45.655 1.00 25.04 ? ? ? ? ? ? 503 PRO A N 1
+ATOM 3376 C CA . PRO A 1 426 ? 2.967 49.918 45.078 1.00 24.64 ? ? ? ? ? ? 503 PRO A CA 1
+ATOM 3377 C C . PRO A 1 426 ? 1.770 49.475 44.249 1.00 25.19 ? ? ? ? ? ? 503 PRO A C 1
+ATOM 3378 O O . PRO A 1 426 ? 1.954 48.836 43.213 1.00 21.04 ? ? ? ? ? ? 503 PRO A O 1
+ATOM 3379 C CB . PRO A 1 426 ? 3.225 49.031 46.305 1.00 27.14 ? ? ? ? ? ? 503 PRO A CB 1
+ATOM 3380 C CG . PRO A 1 426 ? 2.623 49.844 47.446 1.00 30.86 ? ? ? ? ? ? 503 PRO A CG 1
+ATOM 3381 C CD . PRO A 1 426 ? 3.175 51.203 47.098 1.00 28.00 ? ? ? ? ? ? 503 PRO A CD 1
+ATOM 3382 N N . GLU A 1 427 ? 0.553 49.819 44.670 1.00 23.56 ? ? ? ? ? ? 504 GLU A N 1
+ATOM 3383 C CA . GLU A 1 427 ? -0.615 49.394 43.907 1.00 25.01 ? ? ? ? ? ? 504 GLU A CA 1
+ATOM 3384 C C . GLU A 1 427 ? -0.719 50.044 42.538 1.00 25.45 ? ? ? ? ? ? 504 GLU A C 1
+ATOM 3385 O O . GLU A 1 427 ? -1.507 49.612 41.695 1.00 29.73 ? ? ? ? ? ? 504 GLU A O 1
+ATOM 3386 C CB . GLU A 1 427 ? -1.919 49.603 44.698 1.00 26.26 ? ? ? ? ? ? 504 GLU A CB 1
+ATOM 3387 C CG . GLU A 1 427 ? -2.335 51.027 45.048 1.00 28.24 ? ? ? ? ? ? 504 GLU A CG 1
+ATOM 3388 C CD . GLU A 1 427 ? -1.340 51.758 45.922 1.00 31.17 ? ? ? ? ? ? 504 GLU A CD 1
+ATOM 3389 O OE1 . GLU A 1 427 ? -0.677 51.120 46.769 1.00 30.73 ? ? ? ? ? ? 504 GLU A OE1 1
+ATOM 3390 O OE2 . GLU A 1 427 ? -1.245 52.991 45.776 1.00 37.76 ? ? ? ? ? ? 504 GLU A OE2 1
+ATOM 3391 N N . GLU A 1 428 ? 0.089 51.070 42.300 1.00 25.74 ? ? ? ? ? ? 505 GLU A N 1
+ATOM 3392 C CA . GLU A 1 428 ? 0.064 51.740 41.010 1.00 24.59 ? ? ? ? ? ? 505 GLU A CA 1
+ATOM 3393 C C . GLU A 1 428 ? 1.079 51.185 40.016 1.00 25.43 ? ? ? ? ? ? 505 GLU A C 1
+ATOM 3394 O O . GLU A 1 428 ? 1.144 51.636 38.872 1.00 22.81 ? ? ? ? ? ? 505 GLU A O 1
+ATOM 3395 C CB . GLU A 1 428 ? 0.252 53.244 41.192 1.00 27.30 ? ? ? ? ? ? 505 GLU A CB 1
+ATOM 3396 C CG . GLU A 1 428 ? -1.026 53.925 41.653 1.00 34.13 ? ? ? ? ? ? 505 GLU A CG 1
+ATOM 3397 C CD . GLU A 1 428 ? -0.848 55.400 41.912 1.00 37.07 ? ? ? ? ? ? 505 GLU A CD 1
+ATOM 3398 O OE1 . GLU A 1 428 ? -0.309 56.102 41.029 1.00 40.66 ? ? ? ? ? ? 505 GLU A OE1 1
+ATOM 3399 O OE2 . GLU A 1 428 ? -1.261 55.858 42.998 1.00 44.13 ? ? ? ? ? ? 505 GLU A OE2 1
+ATOM 3400 N N . ARG A 1 429 ? 1.869 50.209 40.456 1.00 21.14 ? ? ? ? ? ? 506 ARG A N 1
+ATOM 3401 C CA . ARG A 1 429 ? 2.849 49.558 39.583 1.00 20.17 ? ? ? ? ? ? 506 ARG A CA 1
+ATOM 3402 C C . ARG A 1 429 ? 2.101 48.441 38.837 1.00 18.37 ? ? ? ? ? ? 506 ARG A C 1
+ATOM 3403 O O . ARG A 1 429 ? 1.189 47.820 39.382 1.00 19.32 ? ? ? ? ? ? 506 ARG A O 1
+ATOM 3404 C CB . ARG A 1 429 ? 3.986 48.953 40.418 1.00 19.24 ? ? ? ? ? ? 506 ARG A CB 1
+ATOM 3405 C CG . ARG A 1 429 ? 4.749 49.977 41.247 1.00 20.70 ? ? ? ? ? ? 506 ARG A CG 1
+ATOM 3406 C CD . ARG A 1 429 ? 5.681 49.338 42.275 1.00 22.92 ? ? ? ? ? ? 506 ARG A CD 1
+ATOM 3407 N NE . ARG A 1 429 ? 6.139 50.352 43.224 1.00 19.81 ? ? ? ? ? ? 506 ARG A NE 1
+ATOM 3408 C CZ . ARG A 1 429 ? 6.626 50.088 44.429 1.00 19.17 ? ? ? ? ? ? 506 ARG A CZ 1
+ATOM 3409 N NH1 . ARG A 1 429 ? 6.730 48.829 44.848 1.00 14.79 ? ? ? ? ? ? 506 ARG A NH1 1
+ATOM 3410 N NH2 . ARG A 1 429 ? 6.960 51.087 45.235 1.00 16.78 ? ? ? ? ? ? 506 ARG A NH2 1
+ATOM 3411 N N . PRO A 1 430 ? 2.463 48.183 37.577 1.00 18.24 ? ? ? ? ? ? 507 PRO A N 1
+ATOM 3412 C CA . PRO A 1 430 ? 1.783 47.126 36.820 1.00 19.67 ? ? ? ? ? ? 507 PRO A CA 1
+ATOM 3413 C C . PRO A 1 430 ? 2.107 45.730 37.346 1.00 18.96 ? ? ? ? ? ? 507 PRO A C 1
+ATOM 3414 O O . PRO A 1 430 ? 3.012 45.556 38.162 1.00 19.78 ? ? ? ? ? ? 507 PRO A O 1
+ATOM 3415 C CB . PRO A 1 430 ? 2.314 47.341 35.409 1.00 20.23 ? ? ? ? ? ? 507 PRO A CB 1
+ATOM 3416 C CG . PRO A 1 430 ? 3.740 47.788 35.693 1.00 22.95 ? ? ? ? ? ? 507 PRO A CG 1
+ATOM 3417 C CD . PRO A 1 430 ? 3.474 48.847 36.736 1.00 19.14 ? ? ? ? ? ? 507 PRO A CD 1
+ATOM 3418 N N . THR A 1 431 ? 1.352 44.735 36.895 1.00 17.77 ? ? ? ? ? ? 508 THR A N 1
+ATOM 3419 C CA . THR A 1 431 ? 1.617 43.357 37.304 1.00 16.80 ? ? ? ? ? ? 508 THR A CA 1
+ATOM 3420 C C . THR A 1 431 ? 2.670 42.818 36.330 1.00 16.66 ? ? ? ? ? ? 508 THR A C 1
+ATOM 3421 O O . THR A 1 431 ? 2.890 43.403 35.262 1.00 13.81 ? ? ? ? ? ? 508 THR A O 1
+ATOM 3422 C CB . THR A 1 431 ? 0.369 42.487 37.167 1.00 16.28 ? ? ? ? ? ? 508 THR A CB 1
+ATOM 3423 O OG1 . THR A 1 431 ? -0.025 42.466 35.790 1.00 19.56 ? ? ? ? ? ? 508 THR A OG1 1
+ATOM 3424 C CG2 . THR A 1 431 ? -0.780 43.042 38.026 1.00 17.66 ? ? ? ? ? ? 508 THR A CG2 1
+ATOM 3425 N N . PHE A 1 432 ? 3.326 41.718 36.693 1.00 15.87 ? ? ? ? ? ? 509 PHE A N 1
+ATOM 3426 C CA . PHE A 1 432 ? 4.317 41.120 35.804 1.00 15.68 ? ? ? ? ? ? 509 PHE A CA 1
+ATOM 3427 C C . PHE A 1 432 ? 3.598 40.513 34.611 1.00 14.23 ? ? ? ? ? ? 509 PHE A C 1
+ATOM 3428 O O . PHE A 1 432 ? 4.161 40.410 33.517 1.00 15.95 ? ? ? ? ? ? 509 PHE A O 1
+ATOM 3429 C CB . PHE A 1 432 ? 5.135 40.051 36.531 1.00 13.92 ? ? ? ? ? ? 509 PHE A CB 1
+ATOM 3430 C CG . PHE A 1 432 ? 6.252 40.616 37.361 1.00 11.94 ? ? ? ? ? ? 509 PHE A CG 1
+ATOM 3431 C CD1 . PHE A 1 432 ? 7.313 41.272 36.745 1.00 15.42 ? ? ? ? ? ? 509 PHE A CD1 1
+ATOM 3432 C CD2 . PHE A 1 432 ? 6.246 40.507 38.747 1.00 13.14 ? ? ? ? ? ? 509 PHE A CD2 1
+ATOM 3433 C CE1 . PHE A 1 432 ? 8.362 41.818 37.492 1.00 11.42 ? ? ? ? ? ? 509 PHE A CE1 1
+ATOM 3434 C CE2 . PHE A 1 432 ? 7.295 41.052 39.504 1.00 12.08 ? ? ? ? ? ? 509 PHE A CE2 1
+ATOM 3435 C CZ . PHE A 1 432 ? 8.355 41.710 38.859 1.00 7.43 ? ? ? ? ? ? 509 PHE A CZ 1
+ATOM 3436 N N . GLU A 1 433 ? 2.348 40.108 34.821 1.00 16.01 ? ? ? ? ? ? 510 GLU A N 1
+ATOM 3437 C CA . GLU A 1 433 ? 1.565 39.553 33.723 1.00 19.09 ? ? ? ? ? ? 510 GLU A CA 1
+ATOM 3438 C C . GLU A 1 433 ? 1.459 40.614 32.626 1.00 16.88 ? ? ? ? ? ? 510 GLU A C 1
+ATOM 3439 O O . GLU A 1 433 ? 1.616 40.315 31.448 1.00 18.25 ? ? ? ? ? ? 510 GLU A O 1
+ATOM 3440 C CB . GLU A 1 433 ? 0.160 39.149 34.191 1.00 21.91 ? ? ? ? ? ? 510 GLU A CB 1
+ATOM 3441 C CG . GLU A 1 433 ? -0.791 38.878 33.022 1.00 27.70 ? ? ? ? ? ? 510 GLU A CG 1
+ATOM 3442 C CD . GLU A 1 433 ? -2.158 38.385 33.448 1.00 33.90 ? ? ? ? ? ? 510 GLU A CD 1
+ATOM 3443 O OE1 . GLU A 1 433 ? -2.749 38.980 34.373 1.00 37.85 ? ? ? ? ? ? 510 GLU A OE1 1
+ATOM 3444 O OE2 . GLU A 1 433 ? -2.651 37.411 32.841 1.00 38.39 ? ? ? ? ? ? 510 GLU A OE2 1
+ATOM 3445 N N . TYR A 1 434 ? 1.198 41.856 33.022 1.00 18.56 ? ? ? ? ? ? 511 TYR A N 1
+ATOM 3446 C CA . TYR A 1 434 ? 1.084 42.958 32.065 1.00 18.75 ? ? ? ? ? ? 511 TYR A CA 1
+ATOM 3447 C C . TYR A 1 434 ? 2.441 43.241 31.429 1.00 16.10 ? ? ? ? ? ? 511 TYR A C 1
+ATOM 3448 O O . TYR A 1 434 ? 2.565 43.321 30.211 1.00 17.03 ? ? ? ? ? ? 511 TYR A O 1
+ATOM 3449 C CB . TYR A 1 434 ? 0.603 44.231 32.763 1.00 21.50 ? ? ? ? ? ? 511 TYR A CB 1
+ATOM 3450 C CG . TYR A 1 434 ? 0.392 45.388 31.813 1.00 26.89 ? ? ? ? ? ? 511 TYR A CG 1
+ATOM 3451 C CD1 . TYR A 1 434 ? -0.726 45.429 30.980 1.00 28.62 ? ? ? ? ? ? 511 TYR A CD1 1
+ATOM 3452 C CD2 . TYR A 1 434 ? 1.320 46.426 31.727 1.00 27.38 ? ? ? ? ? ? 511 TYR A CD2 1
+ATOM 3453 C CE1 . TYR A 1 434 ? -0.920 46.476 30.084 1.00 30.42 ? ? ? ? ? ? 511 TYR A CE1 1
+ATOM 3454 C CE2 . TYR A 1 434 ? 1.136 47.482 30.829 1.00 30.15 ? ? ? ? ? ? 511 TYR A CE2 1
+ATOM 3455 C CZ . TYR A 1 434 ? 0.011 47.497 30.012 1.00 32.49 ? ? ? ? ? ? 511 TYR A CZ 1
+ATOM 3456 O OH . TYR A 1 434 ? -0.187 48.524 29.117 1.00 36.29 ? ? ? ? ? ? 511 TYR A OH 1
+ATOM 3457 N N . ILE A 1 435 ? 3.454 43.416 32.273 1.00 17.39 ? ? ? ? ? ? 512 ILE A N 1
+ATOM 3458 C CA . ILE A 1 435 ? 4.813 43.687 31.818 1.00 15.54 ? ? ? ? ? ? 512 ILE A CA 1
+ATOM 3459 C C . ILE A 1 435 ? 5.278 42.657 30.787 1.00 17.33 ? ? ? ? ? ? 512 ILE A C 1
+ATOM 3460 O O . ILE A 1 435 ? 5.886 43.004 29.768 1.00 19.34 ? ? ? ? ? ? 512 ILE A O 1
+ATOM 3461 C CB . ILE A 1 435 ? 5.792 43.707 33.031 1.00 17.60 ? ? ? ? ? ? 512 ILE A CB 1
+ATOM 3462 C CG1 . ILE A 1 435 ? 5.518 44.952 33.880 1.00 16.09 ? ? ? ? ? ? 512 ILE A CG1 1
+ATOM 3463 C CG2 . ILE A 1 435 ? 7.248 43.669 32.553 1.00 15.66 ? ? ? ? ? ? 512 ILE A CG2 1
+ATOM 3464 C CD1 . ILE A 1 435 ? 6.199 44.966 35.243 1.00 15.70 ? ? ? ? ? ? 512 ILE A CD1 1
+ATOM 3465 N N . GLN A 1 436 ? 4.993 41.387 31.051 1.00 18.07 ? ? ? ? ? ? 513 GLN A N 1
+ATOM 3466 C CA . GLN A 1 436 ? 5.385 40.331 30.125 1.00 16.25 ? ? ? ? ? ? 513 GLN A CA 1
+ATOM 3467 C C . GLN A 1 436 ? 4.664 40.537 28.798 1.00 17.96 ? ? ? ? ? ? 513 GLN A C 1
+ATOM 3468 O O . GLN A 1 436 ? 5.271 40.435 27.735 1.00 20.35 ? ? ? ? ? ? 513 GLN A O 1
+ATOM 3469 C CB . GLN A 1 436 ? 5.005 38.955 30.656 1.00 14.36 ? ? ? ? ? ? 513 GLN A CB 1
+ATOM 3470 C CG . GLN A 1 436 ? 5.571 37.824 29.816 1.00 15.83 ? ? ? ? ? ? 513 GLN A CG 1
+ATOM 3471 C CD . GLN A 1 436 ? 4.857 36.517 30.039 1.00 18.51 ? ? ? ? ? ? 513 GLN A CD 1
+ATOM 3472 O OE1 . GLN A 1 436 ? 4.501 36.175 31.163 1.00 21.39 ? ? ? ? ? ? 513 GLN A OE1 1
+ATOM 3473 N NE2 . GLN A 1 436 ? 4.660 35.763 28.964 1.00 22.51 ? ? ? ? ? ? 513 GLN A NE2 1
+ATOM 3474 N N . SER A 1 437 ? 3.366 40.826 28.864 1.00 18.99 ? ? ? ? ? ? 514 SER A N 1
+ATOM 3475 C CA . SER A 1 437 ? 2.592 41.029 27.644 1.00 21.86 ? ? ? ? ? ? 514 SER A CA 1
+ATOM 3476 C C . SER A 1 437 ? 3.199 42.173 26.833 1.00 21.31 ? ? ? ? ? ? 514 SER A C 1
+ATOM 3477 O O . SER A 1 437 ? 3.396 42.046 25.630 1.00 24.36 ? ? ? ? ? ? 514 SER A O 1
+ATOM 3478 C CB . SER A 1 437 ? 1.125 41.349 27.961 1.00 21.27 ? ? ? ? ? ? 514 SER A CB 1
+ATOM 3479 O OG . SER A 1 437 ? 0.959 42.701 28.366 1.00 23.54 ? ? ? ? ? ? 514 SER A OG 1
+ATOM 3480 N N . VAL A 1 438 ? 3.512 43.289 27.484 1.00 21.41 ? ? ? ? ? ? 515 VAL A N 1
+ATOM 3481 C CA . VAL A 1 438 ? 4.090 44.417 26.756 1.00 24.31 ? ? ? ? ? ? 515 VAL A CA 1
+ATOM 3482 C C . VAL A 1 438 ? 5.469 44.111 26.162 1.00 24.63 ? ? ? ? ? ? 515 VAL A C 1
+ATOM 3483 O O . VAL A 1 438 ? 5.769 44.520 25.039 1.00 24.57 ? ? ? ? ? ? 515 VAL A O 1
+ATOM 3484 C CB . VAL A 1 438 ? 4.191 45.678 27.646 1.00 24.13 ? ? ? ? ? ? 515 VAL A CB 1
+ATOM 3485 C CG1 . VAL A 1 438 ? 4.955 46.773 26.909 1.00 27.37 ? ? ? ? ? ? 515 VAL A CG1 1
+ATOM 3486 C CG2 . VAL A 1 438 ? 2.790 46.185 27.986 1.00 29.28 ? ? ? ? ? ? 515 VAL A CG2 1
+ATOM 3487 N N . LEU A 1 439 ? 6.312 43.395 26.900 1.00 20.42 ? ? ? ? ? ? 516 LEU A N 1
+ATOM 3488 C CA . LEU A 1 439 ? 7.638 43.074 26.382 1.00 20.92 ? ? ? ? ? ? 516 LEU A CA 1
+ATOM 3489 C C . LEU A 1 439 ? 7.641 41.969 25.327 1.00 19.75 ? ? ? ? ? ? 516 LEU A C 1
+ATOM 3490 O O . LEU A 1 439 ? 8.419 42.041 24.381 1.00 19.83 ? ? ? ? ? ? 516 LEU A O 1
+ATOM 3491 C CB . LEU A 1 439 ? 8.596 42.708 27.520 1.00 19.70 ? ? ? ? ? ? 516 LEU A CB 1
+ATOM 3492 C CG . LEU A 1 439 ? 8.853 43.830 28.531 1.00 19.54 ? ? ? ? ? ? 516 LEU A CG 1
+ATOM 3493 C CD1 . LEU A 1 439 ? 9.763 43.305 29.646 1.00 19.43 ? ? ? ? ? ? 516 LEU A CD1 1
+ATOM 3494 C CD2 . LEU A 1 439 ? 9.481 45.033 27.835 1.00 20.18 ? ? ? ? ? ? 516 LEU A CD2 1
+ATOM 3495 N N . ASP A 1 440 ? 6.799 40.945 25.470 1.00 20.48 ? ? ? ? ? ? 517 ASP A N 1
+ATOM 3496 C CA . ASP A 1 440 ? 6.785 39.886 24.453 1.00 22.93 ? ? ? ? ? ? 517 ASP A CA 1
+ATOM 3497 C C . ASP A 1 440 ? 6.443 40.466 23.089 1.00 23.12 ? ? ? ? ? ? 517 ASP A C 1
+ATOM 3498 O O . ASP A 1 440 ? 7.003 40.055 22.075 1.00 22.50 ? ? ? ? ? ? 517 ASP A O 1
+ATOM 3499 C CB . ASP A 1 440 ? 5.755 38.782 24.745 1.00 19.36 ? ? ? ? ? ? 517 ASP A CB 1
+ATOM 3500 C CG . ASP A 1 440 ? 6.182 37.848 25.853 1.00 22.39 ? ? ? ? ? ? 517 ASP A CG 1
+ATOM 3501 O OD1 . ASP A 1 440 ? 7.394 37.779 26.138 1.00 20.05 ? ? ? ? ? ? 517 ASP A OD1 1
+ATOM 3502 O OD2 . ASP A 1 440 ? 5.301 37.154 26.410 1.00 19.89 ? ? ? ? ? ? 517 ASP A OD2 1
+ATOM 3503 N N . ASP A 1 441 ? 5.519 41.420 23.066 1.00 24.53 ? ? ? ? ? ? 518 ASP A N 1
+ATOM 3504 C CA . ASP A 1 441 ? 5.095 42.010 21.802 1.00 26.35 ? ? ? ? ? ? 518 ASP A CA 1
+ATOM 3505 C C . ASP A 1 441 ? 5.552 43.450 21.613 1.00 26.17 ? ? ? ? ? ? 518 ASP A C 1
+ATOM 3506 O O . ASP A 1 441 ? 4.895 44.237 20.932 1.00 24.80 ? ? ? ? ? ? 518 ASP A O 1
+ATOM 3507 C CB . ASP A 1 441 ? 3.568 41.930 21.674 1.00 26.18 ? ? ? ? ? ? 518 ASP A CB 1
+ATOM 3508 C CG . ASP A 1 441 ? 3.050 40.493 21.686 1.00 29.09 ? ? ? ? ? ? 518 ASP A CG 1
+ATOM 3509 O OD1 . ASP A 1 441 ? 3.637 39.649 20.980 1.00 32.40 ? ? ? ? ? ? 518 ASP A OD1 1
+ATOM 3510 O OD2 . ASP A 1 441 ? 2.048 40.214 22.382 1.00 29.76 ? ? ? ? ? ? 518 ASP A OD2 1
+ATOM 3511 N N . PHE A 1 442 ? 6.696 43.779 22.199 1.00 25.04 ? ? ? ? ? ? 519 PHE A N 1
+ATOM 3512 C CA . PHE A 1 442 ? 7.242 45.127 22.125 1.00 25.75 ? ? ? ? ? ? 519 PHE A CA 1
+ATOM 3513 C C . PHE A 1 442 ? 7.462 45.585 20.680 1.00 29.76 ? ? ? ? ? ? 519 PHE A C 1
+ATOM 3514 O O . PHE A 1 442 ? 7.297 46.769 20.374 1.00 26.90 ? ? ? ? ? ? 519 PHE A O 1
+ATOM 3515 C CB . PHE A 1 442 ? 8.569 45.177 22.888 1.00 24.73 ? ? ? ? ? ? 519 PHE A CB 1
+ATOM 3516 C CG . PHE A 1 442 ? 9.065 46.567 23.176 1.00 24.90 ? ? ? ? ? ? 519 PHE A CG 1
+ATOM 3517 C CD1 . PHE A 1 442 ? 8.427 47.365 24.116 1.00 23.67 ? ? ? ? ? ? 519 PHE A CD1 1
+ATOM 3518 C CD2 . PHE A 1 442 ? 10.185 47.068 22.525 1.00 25.57 ? ? ? ? ? ? 519 PHE A CD2 1
+ATOM 3519 C CE1 . PHE A 1 442 ? 8.905 48.640 24.409 1.00 22.79 ? ? ? ? ? ? 519 PHE A CE1 1
+ATOM 3520 C CE2 . PHE A 1 442 ? 10.668 48.343 22.811 1.00 28.42 ? ? ? ? ? ? 519 PHE A CE2 1
+ATOM 3521 C CZ . PHE A 1 442 ? 10.027 49.130 23.756 1.00 24.58 ? ? ? ? ? ? 519 PHE A CZ 1
+ATOM 3522 N N . TYR A 1 443 ? 7.830 44.649 19.804 1.00 30.82 ? ? ? ? ? ? 520 TYR A N 1
+ATOM 3523 C CA . TYR A 1 443 ? 8.095 44.959 18.398 1.00 38.37 ? ? ? ? ? ? 520 TYR A CA 1
+ATOM 3524 C C . TYR A 1 443 ? 7.106 44.464 17.356 1.00 43.79 ? ? ? ? ? ? 520 TYR A C 1
+ATOM 3525 O O . TYR A 1 443 ? 6.006 44.019 17.664 1.00 45.21 ? ? ? ? ? ? 520 TYR A O 1
+ATOM 3526 C CB . TYR A 1 443 ? 9.471 44.453 17.968 1.00 34.60 ? ? ? ? ? ? 520 TYR A CB 1
+ATOM 3527 C CG . TYR A 1 443 ? 10.636 45.155 18.606 1.00 35.96 ? ? ? ? ? ? 520 TYR A CG 1
+ATOM 3528 C CD1 . TYR A 1 443 ? 11.266 44.624 19.726 1.00 33.58 ? ? ? ? ? ? 520 TYR A CD1 1
+ATOM 3529 C CD2 . TYR A 1 443 ? 11.123 46.344 18.074 1.00 32.77 ? ? ? ? ? ? 520 TYR A CD2 1
+ATOM 3530 C CE1 . TYR A 1 443 ? 12.360 45.256 20.298 1.00 30.98 ? ? ? ? ? ? 520 TYR A CE1 1
+ATOM 3531 C CE2 . TYR A 1 443 ? 12.215 46.988 18.636 1.00 34.22 ? ? ? ? ? ? 520 TYR A CE2 1
+ATOM 3532 C CZ . TYR A 1 443 ? 12.832 46.434 19.748 1.00 32.73 ? ? ? ? ? ? 520 TYR A CZ 1
+ATOM 3533 O OH . TYR A 1 443 ? 13.934 47.040 20.297 1.00 31.24 ? ? ? ? ? ? 520 TYR A OH 1
+ATOM 3534 N N . THR A 1 444 ? 7.556 44.532 16.105 1.00 54.70 ? ? ? ? ? ? 521 THR A N 1
+ATOM 3535 C CA . THR A 1 444 ? 6.763 44.137 14.954 1.00 61.02 ? ? ? ? ? ? 521 THR A CA 1
+ATOM 3536 C C . THR A 1 444 ? 5.504 45.009 15.074 1.00 64.35 ? ? ? ? ? ? 521 THR A C 1
+ATOM 3537 O O . THR A 1 444 ? 4.384 44.512 15.056 1.00 64.43 ? ? ? ? ? ? 521 THR A O 1
+ATOM 3538 C CB . THR A 1 444 ? 6.424 42.618 15.001 1.00 63.98 ? ? ? ? ? ? 521 THR A CB 1
+ATOM 3539 O OG1 . THR A 1 444 ? 7.420 41.925 15.768 1.00 66.95 ? ? ? ? ? ? 521 THR A OG1 1
+ATOM 3540 C CG2 . THR A 1 444 ? 6.449 42.023 13.592 1.00 64.24 ? ? ? ? ? ? 521 THR A CG2 1
+ATOM 3541 N N . ALA A 1 445 ? 5.752 46.314 15.224 1.00 67.71 ? ? ? ? ? ? 522 ALA A N 1
+ATOM 3542 C CA . ALA A 1 445 ? 4.758 47.393 15.369 1.00 70.38 ? ? ? ? ? ? 522 ALA A CA 1
+ATOM 3543 C C . ALA A 1 445 ? 3.268 47.022 15.350 1.00 73.25 ? ? ? ? ? ? 522 ALA A C 1
+ATOM 3544 O O . ALA A 1 445 ? 2.718 46.565 16.357 1.00 74.15 ? ? ? ? ? ? 522 ALA A O 1
+ATOM 3545 C CB . ALA A 1 445 ? 5.036 48.459 14.316 1.00 70.79 ? ? ? ? ? ? 522 ALA A CB 1
+ATOM 3546 N N . THR A 1 446 ? 2.609 47.270 14.219 1.00 75.85 ? ? ? ? ? ? 523 THR A N 1
+ATOM 3547 C CA . THR A 1 446 ? 1.194 46.923 14.036 1.00 78.14 ? ? ? ? ? ? 523 THR A CA 1
+ATOM 3548 C C . THR A 1 446 ? 1.278 45.394 14.181 1.00 80.27 ? ? ? ? ? ? 523 THR A C 1
+ATOM 3549 O O . THR A 1 446 ? 2.326 44.915 14.585 1.00 82.13 ? ? ? ? ? ? 523 THR A O 1
+ATOM 3550 C CB . THR A 1 446 ? 0.726 47.333 12.612 1.00 78.07 ? ? ? ? ? ? 523 THR A CB 1
+ATOM 3551 O OG1 . THR A 1 446 ? 1.116 48.691 12.361 1.00 77.25 ? ? ? ? ? ? 523 THR A OG1 1
+ATOM 3552 C CG2 . THR A 1 446 ? -0.790 47.240 12.480 1.00 79.07 ? ? ? ? ? ? 523 THR A CG2 1
+ATOM 3553 N N . GLU A 1 447 ? 0.222 44.628 13.874 1.00 81.42 ? ? ? ? ? ? 524 GLU A N 1
+ATOM 3554 C CA . GLU A 1 447 ? 0.300 43.155 14.007 1.00 82.73 ? ? ? ? ? ? 524 GLU A CA 1
+ATOM 3555 C C . GLU A 1 447 ? -0.819 42.499 14.779 1.00 83.66 ? ? ? ? ? ? 524 GLU A C 1
+ATOM 3556 O O . GLU A 1 447 ? -1.396 43.085 15.675 1.00 85.56 ? ? ? ? ? ? 524 GLU A O 1
+ATOM 3557 C CB . GLU A 1 447 ? 1.544 42.691 14.759 1.00 82.14 ? ? ? ? ? ? 524 GLU A CB 1
+ATOM 3558 C CG . GLU A 1 447 ? 1.398 42.843 16.278 1.00 82.43 ? ? ? ? ? ? 524 GLU A CG 1
+ATOM 3559 C CD . GLU A 1 447 ? 2.516 42.197 17.051 1.00 83.12 ? ? ? ? ? ? 524 GLU A CD 1
+ATOM 3560 O OE1 . GLU A 1 447 ? 3.618 42.771 17.069 1.00 83.34 ? ? ? ? ? ? 524 GLU A OE1 1
+ATOM 3561 O OE2 . GLU A 1 447 ? 2.298 41.113 17.632 1.00 83.77 ? ? ? ? ? ? 524 GLU A OE2 1
+ATOM 3562 N N . SER A 1 448 ? -1.018 41.232 14.476 1.00 82.93 ? ? ? ? ? ? 525 SER A N 1
+ATOM 3563 C CA . SER A 1 448 ? -1.987 40.384 15.139 1.00 81.67 ? ? ? ? ? ? 525 SER A CA 1
+ATOM 3564 C C . SER A 1 448 ? -1.223 39.078 14.900 1.00 80.25 ? ? ? ? ? ? 525 SER A C 1
+ATOM 3565 O O . SER A 1 448 ? -1.775 38.086 14.428 1.00 80.93 ? ? ? ? ? ? 525 SER A O 1
+ATOM 3566 C CB . SER A 1 448 ? -3.322 40.418 14.383 1.00 82.54 ? ? ? ? ? ? 525 SER A CB 1
+ATOM 3567 O OG . SER A 1 448 ? -4.448 40.227 15.231 1.00 83.65 ? ? ? ? ? ? 525 SER A OG 1
+ATOM 3568 N N . GLN A 1 449 ? 0.079 39.144 15.185 1.00 76.67 ? ? ? ? ? ? 526 GLN A N 1
+ATOM 3569 C CA . GLN A 1 449 ? 1.029 38.042 15.039 1.00 72.79 ? ? ? ? ? ? 526 GLN A CA 1
+ATOM 3570 C C . GLN A 1 449 ? 0.384 36.698 14.751 1.00 70.74 ? ? ? ? ? ? 526 GLN A C 1
+ATOM 3571 O O . GLN A 1 449 ? 0.169 35.891 15.646 1.00 72.78 ? ? ? ? ? ? 526 GLN A O 1
+ATOM 3572 C CB . GLN A 1 449 ? 1.879 37.950 16.301 1.00 70.94 ? ? ? ? ? ? 526 GLN A CB 1
+ATOM 3573 C CG . GLN A 1 449 ? 1.030 37.824 17.545 1.00 66.13 ? ? ? ? ? ? 526 GLN A CG 1
+ATOM 3574 C CD . GLN A 1 449 ? 1.823 37.939 18.823 1.00 65.38 ? ? ? ? ? ? 526 GLN A CD 1
+ATOM 3575 O OE1 . GLN A 1 449 ? 1.274 37.791 19.914 1.00 64.80 ? ? ? ? ? ? 526 GLN A OE1 1
+ATOM 3576 N NE2 . GLN A 1 449 ? 3.118 38.212 18.702 1.00 64.22 ? ? ? ? ? ? 526 GLN A NE2 1
+ATOM 3577 N N . PTR A 1 450 ? 0.080 36.471 13.486 1.00 67.65 ? ? ? ? ? ? 527 PTR A N 1
+ATOM 3578 C CA . PTR A 1 450 ? -0.539 35.238 13.033 1.00 65.18 ? ? ? ? ? ? 527 PTR A CA 1
+ATOM 3579 C C . PTR A 1 450 ? -0.721 35.426 11.552 1.00 66.59 ? ? ? ? ? ? 527 PTR A C 1
+ATOM 3580 O O . PTR A 1 450 ? -1.790 35.835 11.100 1.00 66.62 ? ? ? ? ? ? 527 PTR A O 1
+ATOM 3581 C CB . PTR A 1 450 ? -1.899 35.015 13.707 1.00 60.91 ? ? ? ? ? ? 527 PTR A CB 1
+ATOM 3582 C CG . PTR A 1 450 ? -1.857 33.919 14.773 1.00 55.97 ? ? ? ? ? ? 527 PTR A CG 1
+ATOM 3583 C CD1 . PTR A 1 450 ? -2.790 33.911 15.849 1.00 55.70 ? ? ? ? ? ? 527 PTR A CD1 1
+ATOM 3584 C CD2 . PTR A 1 450 ? -0.881 32.884 14.695 1.00 52.68 ? ? ? ? ? ? 527 PTR A CD2 1
+ATOM 3585 C CE1 . PTR A 1 450 ? -2.710 32.873 16.819 1.00 52.26 ? ? ? ? ? ? 527 PTR A CE1 1
+ATOM 3586 C CE2 . PTR A 1 450 ? -0.791 31.850 15.648 1.00 47.70 ? ? ? ? ? ? 527 PTR A CE2 1
+ATOM 3587 C CZ . PTR A 1 450 ? -1.713 31.870 16.700 1.00 48.24 ? ? ? ? ? ? 527 PTR A CZ 1
+ATOM 3588 O OH . PTR A 1 450 ? -1.590 30.803 17.660 1.00 44.43 ? ? ? ? ? ? 527 PTR A OH 1
+ATOM 3589 P P . PTR A 1 450 ? -0.531 30.988 18.896 1.00 41.75 ? ? ? ? ? ? 527 PTR A P 1
+ATOM 3590 O O1P . PTR A 1 450 ? -1.078 31.998 19.812 1.00 40.80 ? ? ? ? ? ? 527 PTR A O1P 1
+ATOM 3591 O O2P . PTR A 1 450 ? 0.778 31.450 18.390 1.00 40.71 ? ? ? ? ? ? 527 PTR A O2P 1
+ATOM 3592 O O3P . PTR A 1 450 ? -0.365 29.723 19.661 1.00 42.33 ? ? ? ? ? ? 527 PTR A O3P 1
+ATOM 3593 N N . GLU A 1 451 ? 0.351 35.181 10.815 1.00 68.30 ? ? ? ? ? ? 528 GLU A N 1
+ATOM 3594 C CA . GLU A 1 451 ? 0.317 35.312 9.367 1.00 70.89 ? ? ? ? ? ? 528 GLU A CA 1
+ATOM 3595 C C . GLU A 1 451 ? -0.980 34.660 8.939 1.00 72.96 ? ? ? ? ? ? 528 GLU A C 1
+ATOM 3596 O O . GLU A 1 451 ? -1.293 33.560 9.385 1.00 74.16 ? ? ? ? ? ? 528 GLU A O 1
+ATOM 3597 C CB . GLU A 1 451 ? 1.469 34.543 8.718 1.00 69.66 ? ? ? ? ? ? 528 GLU A CB 1
+ATOM 3598 C CG . GLU A 1 451 ? 2.831 34.803 9.312 1.00 71.00 ? ? ? ? ? ? 528 GLU A CG 1
+ATOM 3599 C CD . GLU A 1 451 ? 3.227 36.253 9.236 1.00 71.74 ? ? ? ? ? ? 528 GLU A CD 1
+ATOM 3600 O OE1 . GLU A 1 451 ? 3.322 36.777 8.109 1.00 72.06 ? ? ? ? ? ? 528 GLU A OE1 1
+ATOM 3601 O OE2 . GLU A 1 451 ? 3.442 36.868 10.301 1.00 71.33 ? ? ? ? ? ? 528 GLU A OE2 1
+ATOM 3602 N N . GLU A 1 452 ? -1.753 35.334 8.103 1.00 75.36 ? ? ? ? ? ? 529 GLU A N 1
+ATOM 3603 C CA . GLU A 1 452 ? -2.987 34.727 7.641 1.00 77.37 ? ? ? ? ? ? 529 GLU A CA 1
+ATOM 3604 C C . GLU A 1 452 ? -2.609 34.158 6.273 1.00 77.80 ? ? ? ? ? ? 529 GLU A C 1
+ATOM 3605 O O . GLU A 1 452 ? -1.786 34.751 5.559 1.00 76.93 ? ? ? ? ? ? 529 GLU A O 1
+ATOM 3606 C CB . GLU A 1 452 ? -4.100 35.773 7.524 1.00 78.67 ? ? ? ? ? ? 529 GLU A CB 1
+ATOM 3607 C CG . GLU A 1 452 ? -5.469 35.225 7.919 1.00 81.63 ? ? ? ? ? ? 529 GLU A CG 1
+ATOM 3608 C CD . GLU A 1 452 ? -5.935 35.703 9.291 1.00 83.95 ? ? ? ? ? ? 529 GLU A CD 1
+ATOM 3609 O OE1 . GLU A 1 452 ? -5.173 35.592 10.279 1.00 85.36 ? ? ? ? ? ? 529 GLU A OE1 1
+ATOM 3610 O OE2 . GLU A 1 452 ? -7.084 36.185 9.377 1.00 85.21 ? ? ? ? ? ? 529 GLU A OE2 1
+ATOM 3611 N N . ILE A 1 453 ? -3.167 33.004 5.908 1.00 78.47 ? ? ? ? ? ? 530 ILE A N 1
+ATOM 3612 C CA . ILE A 1 453 ? -2.808 32.420 4.619 1.00 78.94 ? ? ? ? ? ? 530 ILE A CA 1
+ATOM 3613 C C . ILE A 1 453 ? -3.930 32.437 3.593 1.00 80.35 ? ? ? ? ? ? 530 ILE A C 1
+ATOM 3614 O O . ILE A 1 453 ? -4.985 31.838 3.784 1.00 80.42 ? ? ? ? ? ? 530 ILE A O 1
+ATOM 3615 C CB . ILE A 1 453 ? -2.312 30.937 4.754 1.00 78.26 ? ? ? ? ? ? 530 ILE A CB 1
+ATOM 3616 C CG1 . ILE A 1 453 ? -1.420 30.566 3.569 1.00 76.94 ? ? ? ? ? ? 530 ILE A CG1 1
+ATOM 3617 C CG2 . ILE A 1 453 ? -3.470 29.981 4.813 1.00 77.33 ? ? ? ? ? ? 530 ILE A CG2 1
+ATOM 3618 C CD1 . ILE A 1 453 ? -0.019 31.082 3.719 1.00 76.11 ? ? ? ? ? ? 530 ILE A CD1 1
+ATOM 3619 N N . PRO A 1 454 ? -3.715 33.115 2.467 1.00 81.09 ? ? ? ? ? ? 531 PRO A N 1
+ATOM 3620 C CA . PRO A 1 454 ? -2.869 33.964 1.624 1.00 81.63 ? ? ? ? ? ? 531 PRO A CA 1
+ATOM 3621 C C . PRO A 1 454 ? -3.550 35.248 1.131 1.00 82.32 ? ? ? ? ? ? 531 PRO A C 1
+ATOM 3622 O O . PRO A 1 454 ? -3.909 35.278 -0.063 1.00 82.96 ? ? ? ? ? ? 531 PRO A O 1
+ATOM 3623 C CB . PRO A 1 454 ? -2.532 33.025 0.449 1.00 80.93 ? ? ? ? ? ? 531 PRO A CB 1
+ATOM 3624 C CG . PRO A 1 454 ? -3.181 31.637 0.875 1.00 80.28 ? ? ? ? ? ? 531 PRO A CG 1
+ATOM 3625 C CD . PRO A 1 454 ? -4.391 32.182 1.571 1.00 81.00 ? ? ? ? ? ? 531 PRO A CD 1
+ATOM 3626 O OXT . PRO A 1 454 ? -3.724 36.207 1.914 1.00 83.32 ? ? ? ? ? ? 531 PRO A OXT 1
+HETATM 3627 N N1 . PP1 B 2 . ? 26.428 31.461 39.668 1.00 16.92 ? ? ? ? ? ? 532 PP1 A N1 1
+HETATM 3628 C C2 . PP1 B 2 . ? 26.466 28.964 36.863 1.00 15.69 ? ? ? ? ? ? 532 PP1 A C2 1
+HETATM 3629 N N3 . PP1 B 2 . ? 26.860 30.084 37.584 1.00 14.95 ? ? ? ? ? ? 532 PP1 A N3 1
+HETATM 3630 C C4 . PP1 B 2 . ? 26.227 30.417 38.776 1.00 19.51 ? ? ? ? ? ? 532 PP1 A C4 1
+HETATM 3631 C C5 . PP1 B 2 . ? 25.186 29.632 39.257 1.00 18.34 ? ? ? ? ? ? 532 PP1 A C5 1
+HETATM 3632 C C6 . PP1 B 2 . ? 24.789 28.506 38.521 1.00 18.09 ? ? ? ? ? ? 532 PP1 A C6 1
+HETATM 3633 N N7 . PP1 B 2 . ? 25.428 28.183 37.336 1.00 16.77 ? ? ? ? ? ? 532 PP1 A N7 1
+HETATM 3634 N N8 . PP1 B 2 . ? 25.520 31.311 40.699 1.00 19.06 ? ? ? ? ? ? 532 PP1 A N8 1
+HETATM 3635 C C9 . PP1 B 2 . ? 24.754 30.187 40.454 1.00 16.67 ? ? ? ? ? ? 532 PP1 A C9 1
+HETATM 3636 N N10 . PP1 B 2 . ? 23.776 27.724 38.945 1.00 15.37 ? ? ? ? ? ? 532 PP1 A N10 1
+HETATM 3637 C C11 . PP1 B 2 . ? 23.750 29.898 41.485 1.00 16.81 ? ? ? ? ? ? 532 PP1 A C11 1
+HETATM 3638 C C12 . PP1 B 2 . ? 23.784 28.645 42.127 1.00 17.35 ? ? ? ? ? ? 532 PP1 A C12 1
+HETATM 3639 C C13 . PP1 B 2 . ? 22.852 28.331 43.124 1.00 19.29 ? ? ? ? ? ? 532 PP1 A C13 1
+HETATM 3640 C C14 . PP1 B 2 . ? 21.875 29.265 43.494 1.00 18.96 ? ? ? ? ? ? 532 PP1 A C14 1
+HETATM 3641 C C15 . PP1 B 2 . ? 21.827 30.527 42.857 1.00 17.02 ? ? ? ? ? ? 532 PP1 A C15 1
+HETATM 3642 C C16 . PP1 B 2 . ? 22.769 30.846 41.847 1.00 15.16 ? ? ? ? ? ? 532 PP1 A C16 1
+HETATM 3643 C C24 . PP1 B 2 . ? 20.882 28.910 44.572 1.00 16.99 ? ? ? ? ? ? 532 PP1 A C24 1
+HETATM 3644 C C28 . PP1 B 2 . ? 27.365 32.599 39.461 1.00 22.83 ? ? ? ? ? ? 532 PP1 A C28 1
+HETATM 3645 C C29 . PP1 B 2 . ? 27.189 33.701 40.509 1.00 25.14 ? ? ? ? ? ? 532 PP1 A C29 1
+HETATM 3646 C C33 . PP1 B 2 . ? 27.183 33.293 38.111 1.00 24.71 ? ? ? ? ? ? 532 PP1 A C33 1
+HETATM 3647 C C37 . PP1 B 2 . ? 28.837 32.170 39.535 1.00 27.58 ? ? ? ? ? ? 532 PP1 A C37 1
+HETATM 3648 O O . HOH C 3 . ? 8.538 6.785 20.622 1.00 39.10 ? ? ? ? ? ? 533 HOH A O 1
+HETATM 3649 O O . HOH C 3 . ? 20.508 13.121 40.419 1.00 18.50 ? ? ? ? ? ? 534 HOH A O 1
+HETATM 3650 O O . HOH C 3 . ? 2.133 12.250 37.545 1.00 45.12 ? ? ? ? ? ? 535 HOH A O 1
+HETATM 3651 O O . HOH C 3 . ? 7.164 27.373 26.428 1.00 21.01 ? ? ? ? ? ? 536 HOH A O 1
+HETATM 3652 O O . HOH C 3 . ? 3.610 35.361 12.519 1.00 28.62 ? ? ? ? ? ? 537 HOH A O 1
+HETATM 3653 O O . HOH C 3 . ? 17.195 31.681 20.260 1.00 28.18 ? ? ? ? ? ? 538 HOH A O 1
+HETATM 3654 O O . HOH C 3 . ? 9.799 39.319 2.337 1.00 38.02 ? ? ? ? ? ? 539 HOH A O 1
+HETATM 3655 O O . HOH C 3 . ? -3.822 14.608 12.815 1.00 28.95 ? ? ? ? ? ? 540 HOH A O 1
+HETATM 3656 O O . HOH C 3 . ? 20.669 13.477 37.895 1.00 18.36 ? ? ? ? ? ? 541 HOH A O 1
+HETATM 3657 O O . HOH C 3 . ? 26.903 8.837 51.932 1.00 23.15 ? ? ? ? ? ? 542 HOH A O 1
+HETATM 3658 O O . HOH C 3 . ? 26.378 10.051 49.506 1.00 21.15 ? ? ? ? ? ? 543 HOH A O 1
+HETATM 3659 O O . HOH C 3 . ? 30.668 13.118 42.446 1.00 19.59 ? ? ? ? ? ? 544 HOH A O 1
+HETATM 3660 O O . HOH C 3 . ? 32.135 28.148 33.924 1.00 32.09 ? ? ? ? ? ? 545 HOH A O 1
+HETATM 3661 O O . HOH C 3 . ? 7.455 25.098 52.971 1.00 28.40 ? ? ? ? ? ? 546 HOH A O 1
+HETATM 3662 O O . HOH C 3 . ? 14.631 21.477 53.253 1.00 40.49 ? ? ? ? ? ? 547 HOH A O 1
+HETATM 3663 O O . HOH C 3 . ? 11.220 33.940 50.906 1.00 18.11 ? ? ? ? ? ? 548 HOH A O 1
+HETATM 3664 O O . HOH C 3 . ? 9.679 35.187 49.107 1.00 13.63 ? ? ? ? ? ? 549 HOH A O 1
+HETATM 3665 O O . HOH C 3 . ? 12.978 23.656 41.467 1.00 19.13 ? ? ? ? ? ? 550 HOH A O 1
+HETATM 3666 O O . HOH C 3 . ? 13.403 21.065 39.767 1.00 31.10 ? ? ? ? ? ? 551 HOH A O 1
+HETATM 3667 O O . HOH C 3 . ? 13.137 20.226 42.769 1.00 36.77 ? ? ? ? ? ? 552 HOH A O 1
+HETATM 3668 O O . HOH C 3 . ? 5.867 24.478 38.739 1.00 15.41 ? ? ? ? ? ? 553 HOH A O 1
+HETATM 3669 O O . HOH C 3 . ? 12.686 25.631 37.215 1.00 14.46 ? ? ? ? ? ? 554 HOH A O 1
+HETATM 3670 O O . HOH C 3 . ? 9.598 23.668 34.183 1.00 32.36 ? ? ? ? ? ? 555 HOH A O 1
+HETATM 3671 O O . HOH C 3 . ? 15.329 25.647 29.196 1.00 27.97 ? ? ? ? ? ? 556 HOH A O 1
+HETATM 3672 O O . HOH C 3 . ? 8.055 26.908 31.369 1.00 30.64 ? ? ? ? ? ? 557 HOH A O 1
+HETATM 3673 O O . HOH C 3 . ? 15.265 18.981 40.138 1.00 21.83 ? ? ? ? ? ? 558 HOH A O 1
+HETATM 3674 O O . HOH C 3 . ? 2.565 33.132 34.297 1.00 26.31 ? ? ? ? ? ? 559 HOH A O 1
+HETATM 3675 O O . HOH C 3 . ? 0.680 35.457 34.317 1.00 26.09 ? ? ? ? ? ? 560 HOH A O 1
+HETATM 3676 O O . HOH C 3 . ? 4.783 33.670 32.644 1.00 27.71 ? ? ? ? ? ? 561 HOH A O 1
+HETATM 3677 O O . HOH C 3 . ? 2.981 39.407 47.063 1.00 12.85 ? ? ? ? ? ? 562 HOH A O 1
+HETATM 3678 O O . HOH C 3 . ? 28.036 27.530 26.347 1.00 32.09 ? ? ? ? ? ? 563 HOH A O 1
+HETATM 3679 O O . HOH C 3 . ? 5.595 45.931 48.723 1.00 15.38 ? ? ? ? ? ? 564 HOH A O 1
+HETATM 3680 O O . HOH C 3 . ? 10.848 42.521 46.656 1.00 13.86 ? ? ? ? ? ? 565 HOH A O 1
+HETATM 3681 O O . HOH C 3 . ? 11.959 56.210 51.149 1.00 30.46 ? ? ? ? ? ? 566 HOH A O 1
+HETATM 3682 O O . HOH C 3 . ? 2.652 56.245 42.937 1.00 36.04 ? ? ? ? ? ? 567 HOH A O 1
+HETATM 3683 O O . HOH C 3 . ? -2.637 47.161 41.999 1.00 24.95 ? ? ? ? ? ? 568 HOH A O 1
+HETATM 3684 O O . HOH C 3 . ? -1.933 46.031 44.244 1.00 23.10 ? ? ? ? ? ? 569 HOH A O 1
+HETATM 3685 O O . HOH C 3 . ? 0.108 47.071 46.158 1.00 33.24 ? ? ? ? ? ? 570 HOH A O 1
+HETATM 3686 O O . HOH C 3 . ? -1.003 43.270 44.358 1.00 28.25 ? ? ? ? ? ? 571 HOH A O 1
+HETATM 3687 O O . HOH C 3 . ? 1.008 43.132 45.997 1.00 28.96 ? ? ? ? ? ? 572 HOH A O 1
+HETATM 3688 O O . HOH C 3 . ? -0.815 45.913 35.424 1.00 21.50 ? ? ? ? ? ? 573 HOH A O 1
+HETATM 3689 O O . HOH C 3 . ? -2.409 46.586 37.542 1.00 26.75 ? ? ? ? ? ? 574 HOH A O 1
+HETATM 3690 O O . HOH C 3 . ? 1.618 42.653 40.550 1.00 15.14 ? ? ? ? ? ? 575 HOH A O 1
+HETATM 3691 O O . HOH C 3 . ? -0.543 41.646 42.136 1.00 27.59 ? ? ? ? ? ? 576 HOH A O 1
+HETATM 3692 O O . HOH C 3 . ? -2.388 41.835 35.140 1.00 33.54 ? ? ? ? ? ? 577 HOH A O 1
+HETATM 3693 O O . HOH C 3 . ? 12.445 42.135 21.189 1.00 28.92 ? ? ? ? ? ? 578 HOH A O 1
+HETATM 3694 O O . HOH C 3 . ? -2.628 31.464 9.998 1.00 49.57 ? ? ? ? ? ? 579 HOH A O 1
+HETATM 3695 O O . HOH C 3 . ? -3.562 51.223 39.974 1.00 43.26 ? ? ? ? ? ? 580 HOH A O 1
+HETATM 3696 O O . HOH C 3 . ? -5.692 23.044 14.793 1.00 36.96 ? ? ? ? ? ? 581 HOH A O 1
+HETATM 3697 O O . HOH C 3 . ? 24.713 33.372 42.779 1.00 13.92 ? ? ? ? ? ? 582 HOH A O 1
+HETATM 3698 O O . HOH C 3 . ? 22.627 8.922 42.811 1.00 33.50 ? ? ? ? ? ? 583 HOH A O 1
+HETATM 3699 O O . HOH C 3 . ? 15.355 25.604 34.286 1.00 16.83 ? ? ? ? ? ? 584 HOH A O 1
+HETATM 3700 O O . HOH C 3 . ? 8.745 29.415 29.287 1.00 24.76 ? ? ? ? ? ? 585 HOH A O 1
+HETATM 3701 O O . HOH C 3 . ? 5.660 34.155 26.053 1.00 25.20 ? ? ? ? ? ? 586 HOH A O 1
+HETATM 3702 O O . HOH C 3 . ? 15.667 52.027 46.369 1.00 24.43 ? ? ? ? ? ? 587 HOH A O 1
+HETATM 3703 O O . HOH C 3 . ? 3.397 37.125 45.563 1.00 9.67 ? ? ? ? ? ? 588 HOH A O 1
+HETATM 3704 O O . HOH C 3 . ? 24.594 46.480 37.707 1.00 20.24 ? ? ? ? ? ? 589 HOH A O 1
+HETATM 3705 O O . HOH C 3 . ? 16.619 41.647 49.954 1.00 22.16 ? ? ? ? ? ? 590 HOH A O 1
+HETATM 3706 O O . HOH C 3 . ? -1.320 35.517 42.237 1.00 24.67 ? ? ? ? ? ? 591 HOH A O 1
+HETATM 3707 O O . HOH C 3 . ? 1.668 37.402 43.531 1.00 15.49 ? ? ? ? ? ? 592 HOH A O 1
+HETATM 3708 O O . HOH C 3 . ? 17.707 43.297 44.274 1.00 25.88 ? ? ? ? ? ? 593 HOH A O 1
+HETATM 3709 O O . HOH C 3 . ? 15.604 52.058 43.372 1.00 17.35 ? ? ? ? ? ? 594 HOH A O 1
+HETATM 3710 O O . HOH C 3 . ? 13.576 23.828 33.304 1.00 24.36 ? ? ? ? ? ? 595 HOH A O 1
+HETATM 3711 O O . HOH C 3 . ? 13.402 42.111 44.341 1.00 14.72 ? ? ? ? ? ? 596 HOH A O 1
+HETATM 3712 O O . HOH C 3 . ? 25.537 27.625 56.453 1.00 15.39 ? ? ? ? ? ? 597 HOH A O 1
+HETATM 3713 O O . HOH C 3 . ? 21.081 25.340 26.683 1.00 29.13 ? ? ? ? ? ? 598 HOH A O 1
+HETATM 3714 O O . HOH C 3 . ? 18.507 26.717 28.023 1.00 26.28 ? ? ? ? ? ? 599 HOH A O 1
+HETATM 3715 O O . HOH C 3 . ? 15.233 44.228 45.753 1.00 22.02 ? ? ? ? ? ? 600 HOH A O 1
+HETATM 3716 O O . HOH C 3 . ? 30.382 14.477 54.424 1.00 13.46 ? ? ? ? ? ? 601 HOH A O 1
+HETATM 3717 O O . HOH C 3 . ? -1.917 32.631 47.501 1.00 17.89 ? ? ? ? ? ? 602 HOH A O 1
+HETATM 3718 O O . HOH C 3 . ? 16.412 36.624 47.382 1.00 15.80 ? ? ? ? ? ? 603 HOH A O 1
+HETATM 3719 O O . HOH C 3 . ? 10.572 57.082 47.743 1.00 27.85 ? ? ? ? ? ? 604 HOH A O 1
+HETATM 3720 O O . HOH C 3 . ? 4.242 33.024 24.052 1.00 24.09 ? ? ? ? ? ? 605 HOH A O 1
+HETATM 3721 O O . HOH C 3 . ? 32.177 19.908 50.320 1.00 30.81 ? ? ? ? ? ? 606 HOH A O 1
+HETATM 3722 O O . HOH C 3 . ? 25.821 24.130 63.208 1.00 33.87 ? ? ? ? ? ? 607 HOH A O 1
+HETATM 3723 O O . HOH C 3 . ? -0.384 39.362 43.833 1.00 19.16 ? ? ? ? ? ? 608 HOH A O 1
+HETATM 3724 O O . HOH C 3 . ? 21.616 17.000 54.048 1.00 16.19 ? ? ? ? ? ? 609 HOH A O 1
+HETATM 3725 O O . HOH C 3 . ? 1.213 36.688 36.689 1.00 12.15 ? ? ? ? ? ? 610 HOH A O 1
+HETATM 3726 O O . HOH C 3 . ? 17.229 24.335 31.963 1.00 22.11 ? ? ? ? ? ? 611 HOH A O 1
+HETATM 3727 O O . HOH C 3 . ? 17.107 33.368 24.123 1.00 26.67 ? ? ? ? ? ? 612 HOH A O 1
+HETATM 3728 O O . HOH C 3 . ? 22.907 42.964 39.537 1.00 18.23 ? ? ? ? ? ? 613 HOH A O 1
+HETATM 3729 O O . HOH C 3 . ? 33.701 18.019 47.667 1.00 22.44 ? ? ? ? ? ? 614 HOH A O 1
+HETATM 3730 O O . HOH C 3 . ? 31.380 17.671 49.569 1.00 25.24 ? ? ? ? ? ? 615 HOH A O 1
+HETATM 3731 O O . HOH C 3 . ? 11.899 23.525 35.715 1.00 21.98 ? ? ? ? ? ? 616 HOH A O 1
+HETATM 3732 O O . HOH C 3 . ? 8.828 35.663 27.039 1.00 23.23 ? ? ? ? ? ? 617 HOH A O 1
+HETATM 3733 O O . HOH C 3 . ? 0.602 40.204 46.308 1.00 27.66 ? ? ? ? ? ? 618 HOH A O 1
+HETATM 3734 O O . HOH C 3 . ? 31.776 27.801 54.194 1.00 43.62 ? ? ? ? ? ? 619 HOH A O 1
+HETATM 3735 O O . HOH C 3 . ? -1.869 45.484 40.096 1.00 21.04 ? ? ? ? ? ? 620 HOH A O 1
+HETATM 3736 O O . HOH C 3 . ? 12.977 25.999 39.801 1.00 14.56 ? ? ? ? ? ? 621 HOH A O 1
+HETATM 3737 O O . HOH C 3 . ? 7.329 35.033 50.247 1.00 11.88 ? ? ? ? ? ? 622 HOH A O 1
+HETATM 3738 O O . HOH C 3 . ? 12.036 45.546 46.139 1.00 17.98 ? ? ? ? ? ? 623 HOH A O 1
+HETATM 3739 O O . HOH C 3 . ? 16.026 30.409 45.404 1.00 17.74 ? ? ? ? ? ? 624 HOH A O 1
+HETATM 3740 O O . HOH C 3 . ? 10.145 41.343 22.267 1.00 33.16 ? ? ? ? ? ? 625 HOH A O 1
+HETATM 3741 O O . HOH C 3 . ? 12.895 39.404 53.100 1.00 23.25 ? ? ? ? ? ? 626 HOH A O 1
+HETATM 3742 O O . HOH C 3 . ? 17.585 29.784 43.307 1.00 26.56 ? ? ? ? ? ? 627 HOH A O 1
+HETATM 3743 O O . HOH C 3 . ? 25.093 43.462 41.252 1.00 20.06 ? ? ? ? ? ? 628 HOH A O 1
+HETATM 3744 O O . HOH C 3 . ? 13.283 43.415 47.010 1.00 32.27 ? ? ? ? ? ? 629 HOH A O 1
+HETATM 3745 O O . HOH C 3 . ? 15.201 40.978 52.357 1.00 23.06 ? ? ? ? ? ? 630 HOH A O 1
+HETATM 3746 O O . HOH C 3 . ? 21.153 40.845 48.452 1.00 34.61 ? ? ? ? ? ? 631 HOH A O 1
+HETATM 3747 O O . HOH C 3 . ? -1.323 39.103 37.705 1.00 25.81 ? ? ? ? ? ? 632 HOH A O 1
+HETATM 3748 O O . HOH C 3 . ? 10.671 38.750 21.925 1.00 37.57 ? ? ? ? ? ? 633 HOH A O 1
+HETATM 3749 O O . HOH C 3 . ? 7.741 33.012 52.174 1.00 20.89 ? ? ? ? ? ? 634 HOH A O 1
+HETATM 3750 O O . HOH C 3 . ? 14.082 13.397 49.707 1.00 35.42 ? ? ? ? ? ? 635 HOH A O 1
+HETATM 3751 O O . HOH C 3 . ? 5.807 22.276 41.683 1.00 26.93 ? ? ? ? ? ? 636 HOH A O 1
+HETATM 3752 O O . HOH C 3 . ? 4.798 31.059 31.573 1.00 25.23 ? ? ? ? ? ? 637 HOH A O 1
+HETATM 3753 O O . HOH C 3 . ? 4.429 52.010 29.571 1.00 42.43 ? ? ? ? ? ? 638 HOH A O 1
+HETATM 3754 O O . HOH C 3 . ? 24.002 9.672 48.364 1.00 27.06 ? ? ? ? ? ? 639 HOH A O 1
+HETATM 3755 O O . HOH C 3 . ? 15.004 61.143 31.528 1.00 33.22 ? ? ? ? ? ? 640 HOH A O 1
+HETATM 3756 O O . HOH C 3 . ? 4.827 44.981 56.140 1.00 31.53 ? ? ? ? ? ? 641 HOH A O 1
+HETATM 3757 O O . HOH C 3 . ? 13.335 56.332 48.810 1.00 27.49 ? ? ? ? ? ? 642 HOH A O 1
+HETATM 3758 O O . HOH C 3 . ? 18.947 24.871 30.066 1.00 25.42 ? ? ? ? ? ? 643 HOH A O 1
+HETATM 3759 O O . HOH C 3 . ? -3.548 22.339 21.403 1.00 38.66 ? ? ? ? ? ? 644 HOH A O 1
+HETATM 3760 O O . HOH C 3 . ? 21.998 50.447 35.178 1.00 25.96 ? ? ? ? ? ? 645 HOH A O 1
+HETATM 3761 O O . HOH C 3 . ? 15.157 55.429 39.317 1.00 24.42 ? ? ? ? ? ? 646 HOH A O 1
+HETATM 3762 O O . HOH C 3 . ? -2.529 34.018 45.595 1.00 35.06 ? ? ? ? ? ? 647 HOH A O 1
+HETATM 3763 O O . HOH C 3 . ? 22.093 11.286 47.780 1.00 26.18 ? ? ? ? ? ? 648 HOH A O 1
+HETATM 3764 O O . HOH C 3 . ? 26.801 28.926 62.954 1.00 31.43 ? ? ? ? ? ? 649 HOH A O 1
+HETATM 3765 O O . HOH C 3 . ? 22.581 49.509 46.504 1.00 27.21 ? ? ? ? ? ? 650 HOH A O 1
+HETATM 3766 O O . HOH C 3 . ? 17.913 44.066 62.407 1.00 40.66 ? ? ? ? ? ? 651 HOH A O 1
+HETATM 3767 O O . HOH C 3 . ? 23.454 21.101 35.626 1.00 33.39 ? ? ? ? ? ? 652 HOH A O 1
+HETATM 3768 O O . HOH C 3 . ? 15.783 22.248 12.294 1.00 34.00 ? ? ? ? ? ? 653 HOH A O 1
+HETATM 3769 O O . HOH C 3 . ? 17.460 31.013 23.014 1.00 26.56 ? ? ? ? ? ? 654 HOH A O 1
+HETATM 3770 O O . HOH C 3 . ? -8.044 20.579 -0.110 1.00 35.01 ? ? ? ? ? ? 655 HOH A O 1
+HETATM 3771 O O . HOH C 3 . ? 28.060 9.122 47.947 1.00 24.96 ? ? ? ? ? ? 656 HOH A O 1
+HETATM 3772 O O . HOH C 3 . ? 26.576 47.333 42.162 1.00 31.02 ? ? ? ? ? ? 657 HOH A O 1
+HETATM 3773 O O . HOH C 3 . ? 12.073 60.860 34.675 1.00 31.52 ? ? ? ? ? ? 658 HOH A O 1
+HETATM 3774 O O . HOH C 3 . ? 6.528 0.992 20.098 1.00 36.25 ? ? ? ? ? ? 659 HOH A O 1
+HETATM 3775 O O . HOH C 3 . ? 19.122 36.834 47.411 1.00 21.29 ? ? ? ? ? ? 660 HOH A O 1
+HETATM 3776 O O . HOH C 3 . ? 6.846 19.834 42.404 1.00 32.91 ? ? ? ? ? ? 661 HOH A O 1
+HETATM 3777 O O . HOH C 3 . ? 20.313 31.022 20.399 1.00 57.06 ? ? ? ? ? ? 662 HOH A O 1
+HETATM 3778 O O . HOH C 3 . ? 28.861 50.781 36.179 1.00 34.96 ? ? ? ? ? ? 663 HOH A O 1
+HETATM 3779 O O . HOH C 3 . ? 14.655 17.258 38.096 1.00 20.21 ? ? ? ? ? ? 664 HOH A O 1
+HETATM 3780 O O . HOH C 3 . ? 8.599 24.824 26.837 1.00 33.63 ? ? ? ? ? ? 665 HOH A O 1
+HETATM 3781 O O . HOH C 3 . ? 13.342 36.808 1.406 1.00 39.19 ? ? ? ? ? ? 666 HOH A O 1
+HETATM 3782 O O . HOH C 3 . ? 19.557 50.397 36.953 1.00 28.09 ? ? ? ? ? ? 667 HOH A O 1
+HETATM 3783 O O . HOH C 3 . ? 24.341 22.467 61.358 1.00 25.34 ? ? ? ? ? ? 668 HOH A O 1
+HETATM 3784 O O . HOH C 3 . ? 8.486 20.269 44.415 1.00 32.07 ? ? ? ? ? ? 669 HOH A O 1
+HETATM 3785 O O . HOH C 3 . ? -4.130 24.596 23.007 1.00 31.44 ? ? ? ? ? ? 670 HOH A O 1
+HETATM 3786 O O . HOH C 3 . ? 4.087 49.247 53.736 1.00 34.04 ? ? ? ? ? ? 671 HOH A O 1
+HETATM 3787 O O . HOH C 3 . ? 1.110 45.223 47.580 1.00 34.50 ? ? ? ? ? ? 672 HOH A O 1
+HETATM 3788 O O . HOH C 3 . ? 19.758 11.043 49.038 1.00 29.26 ? ? ? ? ? ? 673 HOH A O 1
+HETATM 3789 O O . HOH C 3 . ? -4.197 24.641 4.660 1.00 36.31 ? ? ? ? ? ? 674 HOH A O 1
+HETATM 3790 O O . HOH C 3 . ? 5.119 27.093 28.220 1.00 43.37 ? ? ? ? ? ? 675 HOH A O 1
+HETATM 3791 O O . HOH C 3 . ? 31.128 32.385 36.222 1.00 31.45 ? ? ? ? ? ? 676 HOH A O 1
+HETATM 3792 O O . HOH C 3 . ? 1.160 38.035 30.077 1.00 24.74 ? ? ? ? ? ? 677 HOH A O 1
+HETATM 3793 O O . HOH C 3 . ? -1.498 49.011 38.880 1.00 33.11 ? ? ? ? ? ? 678 HOH A O 1
+HETATM 3794 O O . HOH C 3 . ? 16.018 12.909 55.048 1.00 46.02 ? ? ? ? ? ? 679 HOH A O 1
+HETATM 3795 O O . HOH C 3 . ? 3.662 29.113 32.921 1.00 32.81 ? ? ? ? ? ? 680 HOH A O 1
+HETATM 3796 O O . HOH C 3 . ? 17.268 26.958 24.113 1.00 28.83 ? ? ? ? ? ? 681 HOH A O 1
+HETATM 3797 O O . HOH C 3 . ? 13.572 29.321 62.311 1.00 35.65 ? ? ? ? ? ? 682 HOH A O 1
+HETATM 3798 O O . HOH C 3 . ? 23.904 58.996 39.091 1.00 25.06 ? ? ? ? ? ? 683 HOH A O 1
+HETATM 3799 O O . HOH C 3 . ? 32.908 13.054 41.220 1.00 19.88 ? ? ? ? ? ? 684 HOH A O 1
+HETATM 3800 O O . HOH C 3 . ? 3.012 46.706 49.668 1.00 25.61 ? ? ? ? ? ? 685 HOH A O 1
+HETATM 3801 O O . HOH C 3 . ? -1.644 0.571 34.683 1.00 26.02 ? ? ? ? ? ? 686 HOH A O 1
+HETATM 3802 O O . HOH C 3 . ? -1.056 48.307 33.534 1.00 30.78 ? ? ? ? ? ? 687 HOH A O 1
+HETATM 3803 O O . HOH C 3 . ? 2.586 50.441 30.391 1.00 29.98 ? ? ? ? ? ? 688 HOH A O 1
+HETATM 3804 O O . HOH C 3 . ? 3.733 49.895 25.854 1.00 27.71 ? ? ? ? ? ? 689 HOH A O 1
+HETATM 3805 O O . HOH C 3 . ? 26.171 45.583 39.967 1.00 35.88 ? ? ? ? ? ? 690 HOH A O 1
+HETATM 3806 O O . HOH C 3 . ? 19.124 21.337 33.925 1.00 39.28 ? ? ? ? ? ? 691 HOH A O 1
+HETATM 3807 O O . HOH C 3 . ? 25.572 43.357 56.592 1.00 36.91 ? ? ? ? ? ? 692 HOH A O 1
+HETATM 3808 O O . HOH C 3 . ? 5.315 51.733 27.091 1.00 31.86 ? ? ? ? ? ? 693 HOH A O 1
+HETATM 3809 O O . HOH C 3 . ? 27.152 41.691 41.744 1.00 30.42 ? ? ? ? ? ? 694 HOH A O 1
+HETATM 3810 O O . HOH C 3 . ? 1.961 36.086 31.859 1.00 33.10 ? ? ? ? ? ? 695 HOH A O 1
+HETATM 3811 O O . HOH C 3 . ? 18.436 42.411 11.307 1.00 41.81 ? ? ? ? ? ? 696 HOH A O 1
+HETATM 3812 O O . HOH C 3 . ? 32.199 44.371 26.404 1.00 40.93 ? ? ? ? ? ? 697 HOH A O 1
+HETATM 3813 O O . HOH C 3 . ? 20.431 37.088 49.544 1.00 33.71 ? ? ? ? ? ? 698 HOH A O 1
+HETATM 3814 O O . HOH C 3 . ? 8.847 46.028 3.578 1.00 32.97 ? ? ? ? ? ? 699 HOH A O 1
+HETATM 3815 O O . HOH C 3 . ? 12.944 28.805 24.638 1.00 38.37 ? ? ? ? ? ? 700 HOH A O 1
+HETATM 3816 O O . HOH C 3 . ? 5.908 57.891 42.240 1.00 26.17 ? ? ? ? ? ? 701 HOH A O 1
+HETATM 3817 O O . HOH C 3 . ? 6.647 23.097 51.450 1.00 35.27 ? ? ? ? ? ? 702 HOH A O 1
+HETATM 3818 O O . HOH C 3 . ? 5.598 56.222 21.969 1.00 36.08 ? ? ? ? ? ? 703 HOH A O 1
+HETATM 3819 O O . HOH C 3 . ? 10.353 13.398 34.474 1.00 33.56 ? ? ? ? ? ? 704 HOH A O 1
+HETATM 3820 O O . HOH C 3 . ? 14.521 53.787 48.819 1.00 29.29 ? ? ? ? ? ? 705 HOH A O 1
+HETATM 3821 O O . HOH C 3 . ? -14.407 0.072 32.859 1.00 42.00 ? ? ? ? ? ? 706 HOH A O 1
+HETATM 3822 O O . HOH C 3 . ? 14.790 16.948 44.236 1.00 31.76 ? ? ? ? ? ? 707 HOH A O 1
+HETATM 3823 O O . HOH C 3 . ? 15.592 28.915 23.232 1.00 36.49 ? ? ? ? ? ? 708 HOH A O 1
+HETATM 3824 O O . HOH C 3 . ? 7.140 38.375 54.236 1.00 35.85 ? ? ? ? ? ? 709 HOH A O 1
+HETATM 3825 O O . HOH C 3 . ? 26.052 15.950 33.920 1.00 39.31 ? ? ? ? ? ? 710 HOH A O 1
+HETATM 3826 O O . HOH C 3 . ? 14.276 14.128 44.555 1.00 40.73 ? ? ? ? ? ? 711 HOH A O 1
+HETATM 3827 O O . HOH C 3 . ? 7.367 54.628 50.764 1.00 34.29 ? ? ? ? ? ? 712 HOH A O 1
+HETATM 3828 O O . HOH C 3 . ? 0.616 58.938 41.965 1.00 39.15 ? ? ? ? ? ? 713 HOH A O 1
+HETATM 3829 O O . HOH C 3 . ? 21.861 36.431 20.411 1.00 43.46 ? ? ? ? ? ? 714 HOH A O 1
+HETATM 3830 O O . HOH C 3 . ? -3.368 2.240 28.249 1.00 40.81 ? ? ? ? ? ? 715 HOH A O 1
+HETATM 3831 O O . HOH C 3 . ? 23.917 40.346 62.520 1.00 43.52 ? ? ? ? ? ? 716 HOH A O 1
+HETATM 3832 O O . HOH C 3 . ? -3.112 44.585 33.954 1.00 35.89 ? ? ? ? ? ? 717 HOH A O 1
+HETATM 3833 O O . HOH C 3 . ? 25.491 44.722 44.317 1.00 45.77 ? ? ? ? ? ? 718 HOH A O 1
+HETATM 3834 O O . HOH C 3 . ? 24.278 45.080 54.544 1.00 42.84 ? ? ? ? ? ? 719 HOH A O 1
+HETATM 3835 O O . HOH C 3 . ? 15.697 62.632 36.182 1.00 42.62 ? ? ? ? ? ? 720 HOH A O 1
+HETATM 3836 O O . HOH C 3 . ? 15.432 42.651 54.676 1.00 33.95 ? ? ? ? ? ? 721 HOH A O 1
+HETATM 3837 O O . HOH C 3 . ? 36.705 17.642 47.363 1.00 39.51 ? ? ? ? ? ? 722 HOH A O 1
+HETATM 3838 O O . HOH C 3 . ? 14.375 62.256 33.752 1.00 33.89 ? ? ? ? ? ? 723 HOH A O 1
+HETATM 3839 O O . HOH C 3 . ? 25.850 35.626 21.216 1.00 45.67 ? ? ? ? ? ? 724 HOH A O 1
+HETATM 3840 O O . HOH C 3 . ? 12.135 59.827 27.536 1.00 41.89 ? ? ? ? ? ? 725 HOH A O 1
+HETATM 3841 O O . HOH C 3 . ? 13.913 62.894 38.162 1.00 42.93 ? ? ? ? ? ? 726 HOH A O 1
+HETATM 3842 O O . HOH C 3 . ? 7.803 18.625 51.210 1.00 34.42 ? ? ? ? ? ? 727 HOH A O 1
+HETATM 3843 O O . HOH C 3 . ? 20.229 12.147 52.899 1.00 40.53 ? ? ? ? ? ? 728 HOH A O 1
+HETATM 3844 O O . HOH C 3 . ? 6.177 21.540 38.552 1.00 41.02 ? ? ? ? ? ? 729 HOH A O 1
+HETATM 3845 O O . HOH C 3 . ? 26.640 34.612 44.166 1.00 38.11 ? ? ? ? ? ? 730 HOH A O 1
+HETATM 3846 O O . HOH C 3 . ? 18.674 51.686 54.639 1.00 38.60 ? ? ? ? ? ? 731 HOH A O 1
+HETATM 3847 O O . HOH C 3 . ? 17.034 24.579 18.637 1.00 34.00 ? ? ? ? ? ? 732 HOH A O 1
+HETATM 3848 O O . HOH C 3 . ? 5.299 55.660 32.246 1.00 27.21 ? ? ? ? ? ? 733 HOH A O 1
+HETATM 3849 O O . HOH C 3 . ? 10.769 36.306 14.942 1.00 44.40 ? ? ? ? ? ? 734 HOH A O 1
+HETATM 3850 O O . HOH C 3 . ? 13.424 39.512 55.608 1.00 42.03 ? ? ? ? ? ? 735 HOH A O 1
+HETATM 3851 O O . HOH C 3 . ? -5.045 15.220 15.336 1.00 51.90 ? ? ? ? ? ? 736 HOH A O 1
+HETATM 3852 O O . HOH C 3 . ? 28.618 7.391 43.699 1.00 43.86 ? ? ? ? ? ? 737 HOH A O 1
+HETATM 3853 O O . HOH C 3 . ? 2.076 3.100 47.155 1.00 38.22 ? ? ? ? ? ? 738 HOH A O 1
+HETATM 3854 O O . HOH C 3 . ? 13.620 27.240 26.596 1.00 33.48 ? ? ? ? ? ? 739 HOH A O 1
+HETATM 3855 O O . HOH C 3 . ? 23.032 13.187 34.129 1.00 44.64 ? ? ? ? ? ? 740 HOH A O 1
+HETATM 3856 O O . HOH C 3 . ? -2.384 40.368 39.677 1.00 41.85 ? ? ? ? ? ? 741 HOH A O 1
+HETATM 3857 O O . HOH C 3 . ? 4.504 53.148 50.224 1.00 42.20 ? ? ? ? ? ? 742 HOH A O 1
+HETATM 3858 O O . HOH C 3 . ? 10.048 61.312 32.810 1.00 37.44 ? ? ? ? ? ? 743 HOH A O 1
+HETATM 3859 O O . HOH C 3 . ? -6.247 5.942 34.270 1.00 49.98 ? ? ? ? ? ? 744 HOH A O 1
+HETATM 3860 O O . HOH C 3 . ? 34.513 39.617 27.581 1.00 43.68 ? ? ? ? ? ? 745 HOH A O 1
+HETATM 3861 O O . HOH C 3 . ? 30.892 31.605 29.285 1.00 52.12 ? ? ? ? ? ? 746 HOH A O 1
+HETATM 3862 O O . HOH C 3 . ? 22.996 50.959 52.839 1.00 43.52 ? ? ? ? ? ? 747 HOH A O 1
+HETATM 3863 O O . HOH C 3 . ? -6.210 15.144 3.020 1.00 44.30 ? ? ? ? ? ? 748 HOH A O 1
+HETATM 3864 O O . HOH C 3 . ? 7.737 32.127 26.532 1.00 43.55 ? ? ? ? ? ? 749 HOH A O 1
+HETATM 3865 O O . HOH C 3 . ? 34.090 48.369 34.333 1.00 47.77 ? ? ? ? ? ? 750 HOH A O 1
+HETATM 3866 O O . HOH C 3 . ? 23.093 34.772 48.707 1.00 34.63 ? ? ? ? ? ? 751 HOH A O 1
+HETATM 3867 O O . HOH C 3 . ? 29.324 13.566 35.101 1.00 56.81 ? ? ? ? ? ? 752 HOH A O 1
+HETATM 3868 O O . HOH C 3 . ? 2.781 10.569 11.433 1.00 31.41 ? ? ? ? ? ? 753 HOH A O 1
+HETATM 3869 O O . HOH C 3 . ? 39.058 32.283 46.442 1.00 42.07 ? ? ? ? ? ? 754 HOH A O 1
+HETATM 3870 O O . HOH C 3 . ? 27.393 38.611 38.510 1.00 41.75 ? ? ? ? ? ? 755 HOH A O 1
+HETATM 3871 O O . HOH C 3 . ? 23.776 12.520 55.591 1.00 31.10 ? ? ? ? ? ? 756 HOH A O 1
+HETATM 3872 O O . HOH C 3 . ? 23.261 36.351 57.952 1.00 53.24 ? ? ? ? ? ? 757 HOH A O 1
+HETATM 3873 O O . HOH C 3 . ? 9.280 56.903 49.923 1.00 39.62 ? ? ? ? ? ? 758 HOH A O 1
+HETATM 3874 O O . HOH C 3 . ? 6.542 17.218 21.802 1.00 38.78 ? ? ? ? ? ? 759 HOH A O 1
+HETATM 3875 O O . HOH C 3 . ? -1.313 17.242 28.604 1.00 53.99 ? ? ? ? ? ? 760 HOH A O 1
+HETATM 3876 O O . HOH C 3 . ? 3.056 33.145 29.301 1.00 43.60 ? ? ? ? ? ? 761 HOH A O 1
+HETATM 3877 O O . HOH C 3 . ? 37.316 12.396 42.666 1.00 39.00 ? ? ? ? ? ? 762 HOH A O 1
+HETATM 3878 O O . HOH C 3 . ? -0.942 13.086 12.056 1.00 37.42 ? ? ? ? ? ? 763 HOH A O 1
+HETATM 3879 O O . HOH C 3 . ? 20.476 17.550 35.339 1.00 27.16 ? ? ? ? ? ? 764 HOH A O 1
+HETATM 3880 O O . HOH C 3 . ? -8.132 17.961 16.818 1.00 37.13 ? ? ? ? ? ? 765 HOH A O 1
+HETATM 3881 O O . HOH C 3 . ? 17.662 37.958 12.839 1.00 56.12 ? ? ? ? ? ? 766 HOH A O 1
+HETATM 3882 O O . HOH C 3 . ? 8.893 15.841 9.655 1.00 35.94 ? ? ? ? ? ? 767 HOH A O 1
+HETATM 3883 O O . HOH C 3 . ? 16.937 8.720 21.935 1.00 46.32 ? ? ? ? ? ? 768 HOH A O 1
+HETATM 3884 O O . HOH C 3 . ? 14.629 44.554 61.958 1.00 57.08 ? ? ? ? ? ? 769 HOH A O 1
+HETATM 3885 O O . HOH C 3 . ? 20.260 42.727 5.436 1.00 41.70 ? ? ? ? ? ? 770 HOH A O 1
+HETATM 3886 O O . HOH C 3 . ? -4.475 1.425 36.545 1.00 51.90 ? ? ? ? ? ? 771 HOH A O 1
+HETATM 3887 O O . HOH C 3 . ? 12.017 15.392 34.354 1.00 54.18 ? ? ? ? ? ? 772 HOH A O 1
+HETATM 3888 O O . HOH C 3 . ? -4.889 33.583 37.222 1.00 52.47 ? ? ? ? ? ? 773 HOH A O 1
+HETATM 3889 O O . HOH C 3 . ? 29.208 30.315 36.175 1.00 27.43 ? ? ? ? ? ? 774 HOH A O 1
+HETATM 3890 O O . HOH C 3 . ? 10.291 42.109 56.286 1.00 30.42 ? ? ? ? ? ? 775 HOH A O 1
+HETATM 3891 O O . HOH C 3 . ? 24.485 48.493 49.776 1.00 52.97 ? ? ? ? ? ? 776 HOH A O 1
+HETATM 3892 O O . HOH C 3 . ? 16.725 15.091 20.214 1.00 55.30 ? ? ? ? ? ? 777 HOH A O 1
+HETATM 3893 O O . HOH C 3 . ? 7.089 58.361 39.843 1.00 38.04 ? ? ? ? ? ? 778 HOH A O 1
+HETATM 3894 O O . HOH C 3 . ? 2.068 52.703 36.797 1.00 42.49 ? ? ? ? ? ? 779 HOH A O 1
+HETATM 3895 O O . HOH C 3 . ? 3.174 49.501 50.677 1.00 45.70 ? ? ? ? ? ? 780 HOH A O 1
+HETATM 3896 O O . HOH C 3 . ? 16.826 18.566 58.409 1.00 48.87 ? ? ? ? ? ? 781 HOH A O 1
+HETATM 3897 O O . HOH C 3 . ? 11.906 41.088 18.503 1.00 34.98 ? ? ? ? ? ? 782 HOH A O 1
+HETATM 3898 O O . HOH C 3 . ? 23.055 36.354 44.925 1.00 31.75 ? ? ? ? ? ? 783 HOH A O 1
+HETATM 3899 O O . HOH C 3 . ? 14.297 24.750 2.159 1.00 42.76 ? ? ? ? ? ? 784 HOH A O 1
+HETATM 3900 O O . HOH C 3 . ? -11.182 24.647 3.892 1.00 52.94 ? ? ? ? ? ? 785 HOH A O 1
+HETATM 3901 O O . HOH C 3 . ? -15.434 16.221 14.663 1.00 51.70 ? ? ? ? ? ? 786 HOH A O 1
+HETATM 3902 O O . HOH C 3 . ? -10.669 26.264 23.480 1.00 46.53 ? ? ? ? ? ? 787 HOH A O 1
+HETATM 3903 O O . HOH C 3 . ? 4.918 54.258 25.759 1.00 41.26 ? ? ? ? ? ? 788 HOH A O 1
+HETATM 3904 O O . HOH C 3 . ? 20.700 32.042 9.279 1.00 44.20 ? ? ? ? ? ? 789 HOH A O 1
+HETATM 3905 O O . HOH C 3 . ? 27.514 34.516 58.919 1.00 41.59 ? ? ? ? ? ? 790 HOH A O 1
+HETATM 3906 O O . HOH C 3 . ? 22.478 24.660 24.422 1.00 34.19 ? ? ? ? ? ? 791 HOH A O 1
+HETATM 3907 O O . HOH C 3 . ? 21.233 8.200 46.441 1.00 36.05 ? ? ? ? ? ? 792 HOH A O 1
+HETATM 3908 O O . HOH C 3 . ? 35.913 32.234 40.913 1.00 39.06 ? ? ? ? ? ? 793 HOH A O 1
+HETATM 3909 O O . HOH C 3 . ? 22.938 34.662 41.850 1.00 41.92 ? ? ? ? ? ? 794 HOH A O 1
+HETATM 3910 O O . HOH C 3 . ? 5.765 25.584 34.918 1.00 41.27 ? ? ? ? ? ? 795 HOH A O 1
+HETATM 3911 O O . HOH C 3 . ? 18.162 63.440 35.454 1.00 34.17 ? ? ? ? ? ? 796 HOH A O 1
+HETATM 3912 O O . HOH C 3 . ? 6.615 14.881 25.048 1.00 44.10 ? ? ? ? ? ? 797 HOH A O 1
+HETATM 3913 O O . HOH C 3 . ? 28.285 15.969 32.625 1.00 55.38 ? ? ? ? ? ? 798 HOH A O 1
+HETATM 3914 O O . HOH C 3 . ? -3.305 5.072 22.803 1.00 43.26 ? ? ? ? ? ? 799 HOH A O 1
+HETATM 3915 O O . HOH C 3 . ? 9.542 21.690 27.424 1.00 53.30 ? ? ? ? ? ? 800 HOH A O 1
+HETATM 3916 O O . HOH C 3 . ? 11.403 -1.770 28.423 1.00 50.42 ? ? ? ? ? ? 801 HOH A O 1
+HETATM 3917 O O . HOH C 3 . ? 9.665 38.895 55.851 1.00 38.71 ? ? ? ? ? ? 802 HOH A O 1
+HETATM 3918 O O . HOH C 3 . ? 3.121 -2.282 19.447 1.00 56.50 ? ? ? ? ? ? 803 HOH A O 1
+HETATM 3919 O O . HOH C 3 . ? 11.943 5.541 45.649 1.00 60.37 ? ? ? ? ? ? 804 HOH A O 1
+HETATM 3920 O O . HOH C 3 . ? 0.520 38.070 25.139 1.00 40.62 ? ? ? ? ? ? 805 HOH A O 1
+HETATM 3921 O O . HOH C 3 . ? 16.120 34.272 20.016 1.00 34.95 ? ? ? ? ? ? 806 HOH A O 1
+HETATM 3922 O O . HOH C 3 . ? -7.210 40.419 41.636 1.00 49.81 ? ? ? ? ? ? 807 HOH A O 1
+HETATM 3923 O O . HOH C 3 . ? 2.956 59.236 40.694 1.00 53.41 ? ? ? ? ? ? 808 HOH A O 1
+HETATM 3924 O O . HOH C 3 . ? 24.019 50.079 58.629 1.00 42.95 ? ? ? ? ? ? 809 HOH A O 1
+HETATM 3925 O O . HOH C 3 . ? 8.467 24.971 29.756 1.00 30.24 ? ? ? ? ? ? 810 HOH A O 1
+HETATM 3926 O O . HOH C 3 . ? 8.901 41.258 4.699 1.00 43.21 ? ? ? ? ? ? 811 HOH A O 1
+HETATM 3927 O O . HOH C 3 . ? 16.546 17.538 16.820 1.00 47.55 ? ? ? ? ? ? 812 HOH A O 1
+HETATM 3928 O O . HOH C 3 . ? 9.399 40.813 17.522 1.00 31.20 ? ? ? ? ? ? 813 HOH A O 1
+HETATM 3929 O O . HOH C 3 . ? 37.472 20.920 36.812 1.00 44.24 ? ? ? ? ? ? 814 HOH A O 1
+HETATM 3930 O O . HOH C 3 . ? 19.514 20.018 59.682 1.00 48.20 ? ? ? ? ? ? 815 HOH A O 1
+HETATM 3931 O O . HOH C 3 . ? 12.416 24.140 31.040 1.00 21.99 ? ? ? ? ? ? 816 HOH A O 1
+HETATM 3932 O O . HOH C 3 . ? 28.984 47.254 30.890 1.00 53.94 ? ? ? ? ? ? 817 HOH A O 1
+HETATM 3933 O O . HOH C 3 . ? 26.261 21.049 32.479 1.00 40.15 ? ? ? ? ? ? 818 HOH A O 1
+HETATM 3934 O O . HOH C 3 . ? -1.160 4.529 38.052 1.00 52.63 ? ? ? ? ? ? 819 HOH A O 1
+HETATM 3935 O O . HOH C 3 . ? 32.486 30.153 55.780 1.00 38.79 ? ? ? ? ? ? 820 HOH A O 1
+HETATM 3936 O O . HOH C 3 . ? 6.621 7.205 45.903 1.00 40.63 ? ? ? ? ? ? 821 HOH A O 1
+HETATM 3937 O O . HOH C 3 . ? 12.003 32.739 0.191 1.00 47.05 ? ? ? ? ? ? 822 HOH A O 1
+HETATM 3938 O O . HOH C 3 . ? 29.652 9.414 34.130 1.00 55.26 ? ? ? ? ? ? 823 HOH A O 1
+HETATM 3939 O O . HOH C 3 . ? 1.953 37.545 27.203 1.00 50.72 ? ? ? ? ? ? 824 HOH A O 1
+HETATM 3940 O O . HOH C 3 . ? -3.539 36.988 36.532 1.00 44.59 ? ? ? ? ? ? 825 HOH A O 1
+HETATM 3941 O O . HOH C 3 . ? 37.282 12.429 45.414 1.00 39.36 ? ? ? ? ? ? 826 HOH A O 1
+HETATM 3942 O O . HOH C 3 . ? -7.366 40.298 7.981 1.00 49.91 ? ? ? ? ? ? 827 HOH A O 1
+HETATM 3943 O O . HOH C 3 . ? 10.889 19.164 43.282 1.00 35.29 ? ? ? ? ? ? 828 HOH A O 1
+HETATM 3944 O O . HOH C 3 . ? 8.996 32.523 -0.083 1.00 49.87 ? ? ? ? ? ? 829 HOH A O 1
+HETATM 3945 O O . HOH C 3 . ? 28.258 42.343 58.771 1.00 45.18 ? ? ? ? ? ? 830 HOH A O 1
+HETATM 3946 O O . HOH C 3 . ? 30.350 33.296 20.403 1.00 63.69 ? ? ? ? ? ? 831 HOH A O 1
+HETATM 3947 O O . HOH C 3 . ? 3.755 14.001 36.126 1.00 63.63 ? ? ? ? ? ? 832 HOH A O 1
+HETATM 3948 O O . HOH C 3 . ? 4.928 15.828 -5.356 1.00 46.39 ? ? ? ? ? ? 833 HOH A O 1
+HETATM 3949 O O . HOH C 3 . ? 7.494 -4.251 24.019 1.00 50.04 ? ? ? ? ? ? 834 HOH A O 1
+HETATM 3950 O O . HOH C 3 . ? 19.318 21.643 20.211 1.00 42.29 ? ? ? ? ? ? 835 HOH A O 1
+HETATM 3951 O O . HOH C 3 . ? 8.136 20.658 35.398 1.00 50.22 ? ? ? ? ? ? 836 HOH A O 1
+HETATM 3952 O O . HOH C 3 . ? -5.620 49.525 47.259 1.00 64.36 ? ? ? ? ? ? 837 HOH A O 1
+HETATM 3953 O O . HOH C 3 . ? 12.458 61.822 25.714 1.00 51.75 ? ? ? ? ? ? 838 HOH A O 1
+HETATM 3954 O O . HOH C 3 . ? -1.517 39.009 26.597 1.00 43.83 ? ? ? ? ? ? 839 HOH A O 1
+HETATM 3955 O O . HOH C 3 . ? -2.836 9.430 6.110 1.00 34.54 ? ? ? ? ? ? 840 HOH A O 1
+HETATM 3956 O O . HOH C 3 . ? 0.539 20.288 -4.532 1.00 39.94 ? ? ? ? ? ? 841 HOH A O 1
+HETATM 3957 O O . HOH C 3 . ? 30.924 18.835 36.853 1.00 47.22 ? ? ? ? ? ? 842 HOH A O 1
+HETATM 3958 O O . HOH C 3 . ? 30.580 48.798 37.028 1.00 52.91 ? ? ? ? ? ? 843 HOH A O 1
+HETATM 3959 O O . HOH C 3 . ? -5.173 37.188 33.420 1.00 64.07 ? ? ? ? ? ? 844 HOH A O 1
+#
+loop_
+_pdbx_poly_seq_scheme.asym_id
+_pdbx_poly_seq_scheme.entity_id
+_pdbx_poly_seq_scheme.seq_id
+_pdbx_poly_seq_scheme.mon_id
+_pdbx_poly_seq_scheme.ndb_seq_num
+_pdbx_poly_seq_scheme.pdb_seq_num
+_pdbx_poly_seq_scheme.auth_seq_num
+_pdbx_poly_seq_scheme.pdb_mon_id
+_pdbx_poly_seq_scheme.auth_mon_id
+_pdbx_poly_seq_scheme.pdb_strand_id
+_pdbx_poly_seq_scheme.pdb_ins_code
+_pdbx_poly_seq_scheme.hetero
+A 1 1 GLY 1 76 ? ? ? A . n
+A 1 2 ALA 2 77 ? ? ? A . n
+A 1 3 MET 3 78 ? ? ? A . n
+A 1 4 GLY 4 79 ? ? ? A . n
+A 1 5 SER 5 80 80 SER SER A . n
+A 1 6 GLY 6 81 81 GLY GLY A . n
+A 1 7 ILE 7 82 82 ILE ILE A . n
+A 1 8 ARG 8 83 83 ARG ARG A . n
+A 1 9 ILE 9 84 84 ILE ILE A . n
+A 1 10 ILE 10 85 85 ILE ILE A . n
+A 1 11 VAL 11 86 86 VAL VAL A . n
+A 1 12 VAL 12 87 87 VAL VAL A . n
+A 1 13 ALA 13 88 88 ALA ALA A . n
+A 1 14 LEU 14 89 89 LEU LEU A . n
+A 1 15 TYR 15 90 90 TYR TYR A . n
+A 1 16 ASP 16 91 91 ASP ASP A . n
+A 1 17 TYR 17 92 92 TYR TYR A . n
+A 1 18 GLU 18 93 93 GLU GLU A . n
+A 1 19 ALA 19 94 94 ALA ALA A . n
+A 1 20 ILE 20 95 95 ILE ILE A . n
+A 1 21 HIS 21 96 96 HIS HIS A . n
+A 1 22 HIS 22 97 97 HIS HIS A . n
+A 1 23 GLU 23 98 98 GLU GLU A . n
+A 1 24 ASP 24 99 99 ASP ASP A . n
+A 1 25 LEU 25 100 100 LEU LEU A . n
+A 1 26 SER 26 101 101 SER SER A . n
+A 1 27 PHE 27 102 102 PHE PHE A . n
+A 1 28 GLN 28 103 103 GLN GLN A . n
+A 1 29 LYS 29 104 104 LYS LYS A . n
+A 1 30 GLY 30 105 105 GLY GLY A . n
+A 1 31 ASP 31 106 106 ASP ASP A . n
+A 1 32 GLN 32 107 107 GLN GLN A . n
+A 1 33 MET 33 108 108 MET MET A . n
+A 1 34 VAL 34 109 109 VAL VAL A . n
+A 1 35 VAL 35 110 110 VAL VAL A . n
+A 1 36 LEU 36 111 111 LEU LEU A . n
+A 1 37 GLU 37 112 112 GLU GLU A . n
+A 1 38 GLU 38 113 113 GLU GLU A . n
+A 1 39 SER 39 114 114 SER SER A . n
+A 1 40 GLY 40 116 116 GLY GLY A . n
+A 1 41 GLU 41 117 117 GLU GLU A . n
+A 1 42 TRP 42 118 118 TRP TRP A . n
+A 1 43 TRP 43 119 119 TRP TRP A . n
+A 1 44 LYS 44 120 120 LYS LYS A . n
+A 1 45 ALA 45 121 121 ALA ALA A . n
+A 1 46 ARG 46 122 122 ARG ARG A . n
+A 1 47 SER 47 123 123 SER SER A . n
+A 1 48 LEU 48 124 124 LEU LEU A . n
+A 1 49 ALA 49 125 125 ALA ALA A . n
+A 1 50 THR 50 126 126 THR THR A . n
+A 1 51 ARG 51 127 127 ARG ARG A . n
+A 1 52 LYS 52 128 128 LYS LYS A . n
+A 1 53 GLU 53 129 129 GLU GLU A . n
+A 1 54 GLY 54 130 130 GLY GLY A . n
+A 1 55 TYR 55 131 131 TYR TYR A . n
+A 1 56 ILE 56 132 132 ILE ILE A . n
+A 1 57 PRO 57 133 133 PRO PRO A . n
+A 1 58 SER 58 134 134 SER SER A . n
+A 1 59 ASN 59 135 135 ASN ASN A . n
+A 1 60 TYR 60 136 136 TYR TYR A . n
+A 1 61 VAL 61 137 137 VAL VAL A . n
+A 1 62 ALA 62 138 138 ALA ALA A . n
+A 1 63 ARG 63 139 139 ARG ARG A . n
+A 1 64 VAL 64 140 140 VAL VAL A . n
+A 1 65 ASP 65 141 141 ASP ASP A . n
+A 1 66 SER 66 142 142 SER SER A . n
+A 1 67 LEU 67 143 143 LEU LEU A . n
+A 1 68 GLU 68 144 144 GLU GLU A . n
+A 1 69 THR 69 145 145 THR THR A . n
+A 1 70 GLU 70 146 146 GLU GLU A . n
+A 1 71 GLU 71 147 147 GLU GLU A . n
+A 1 72 TRP 72 148 148 TRP TRP A . n
+A 1 73 PHE 73 149 149 PHE PHE A . n
+A 1 74 PHE 74 150 150 PHE PHE A . n
+A 1 75 LYS 75 151 151 LYS LYS A . n
+A 1 76 GLY 76 152 152 GLY GLY A . n
+A 1 77 ILE 77 153 153 ILE ILE A . n
+A 1 78 SER 78 154 154 SER SER A . n
+A 1 79 ARG 79 155 155 ARG ARG A . n
+A 1 80 LYS 80 156 156 LYS LYS A . n
+A 1 81 ASP 81 157 157 ASP ASP A . n
+A 1 82 ALA 82 158 158 ALA ALA A . n
+A 1 83 GLU 83 159 159 GLU GLU A . n
+A 1 84 ARG 84 160 160 ARG ARG A . n
+A 1 85 GLN 85 161 161 GLN GLN A . n
+A 1 86 LEU 86 162 162 LEU LEU A . n
+A 1 87 LEU 87 163 163 LEU LEU A . n
+A 1 88 ALA 88 164 164 ALA ALA A . n
+A 1 89 PRO 89 165 165 PRO PRO A . n
+A 1 90 GLY 90 166 166 GLY GLY A . n
+A 1 91 ASN 91 167 167 ASN ASN A . n
+A 1 92 MET 92 168 168 MET MET A . n
+A 1 93 LEU 93 169 169 LEU LEU A . n
+A 1 94 GLY 94 170 170 GLY GLY A . n
+A 1 95 SER 95 171 171 SER SER A . n
+A 1 96 PHE 96 172 172 PHE PHE A . n
+A 1 97 MET 97 173 173 MET MET A . n
+A 1 98 ILE 98 174 174 ILE ILE A . n
+A 1 99 ARG 99 175 175 ARG ARG A . n
+A 1 100 ASP 100 176 176 ASP ASP A . n
+A 1 101 SER 101 177 177 SER SER A . n
+A 1 102 GLU 102 178 178 GLU GLU A . n
+A 1 103 THR 103 179 179 THR THR A . n
+A 1 104 THR 104 180 180 THR THR A . n
+A 1 105 LYS 105 181 181 LYS LYS A . n
+A 1 106 GLY 106 182 182 GLY GLY A . n
+A 1 107 SER 107 183 183 SER SER A . n
+A 1 108 TYR 108 184 184 TYR TYR A . n
+A 1 109 SER 109 185 185 SER SER A . n
+A 1 110 LEU 110 186 186 LEU LEU A . n
+A 1 111 SER 111 187 187 SER SER A . n
+A 1 112 VAL 112 188 188 VAL VAL A . n
+A 1 113 ARG 113 189 189 ARG ARG A . n
+A 1 114 ASP 114 190 190 ASP ASP A . n
+A 1 115 TYR 115 191 191 TYR TYR A . n
+A 1 116 ASP 116 192 192 ASP ASP A . n
+A 1 117 PRO 117 193 193 PRO PRO A . n
+A 1 118 ARG 118 194 194 ARG ARG A . n
+A 1 119 GLN 119 195 195 GLN GLN A . n
+A 1 120 GLY 120 196 196 GLY GLY A . n
+A 1 121 ASP 121 197 197 ASP ASP A . n
+A 1 122 THR 122 198 198 THR THR A . n
+A 1 123 VAL 123 199 199 VAL VAL A . n
+A 1 124 LYS 124 200 200 LYS LYS A . n
+A 1 125 HIS 125 201 201 HIS HIS A . n
+A 1 126 TYR 126 202 202 TYR TYR A . n
+A 1 127 LYS 127 203 203 LYS LYS A . n
+A 1 128 ILE 128 204 204 ILE ILE A . n
+A 1 129 ARG 129 205 205 ARG ARG A . n
+A 1 130 THR 130 206 206 THR THR A . n
+A 1 131 LEU 131 207 207 LEU LEU A . n
+A 1 132 ASP 132 208 208 ASP ASP A . n
+A 1 133 ASN 133 209 209 ASN ASN A . n
+A 1 134 GLY 134 210 210 GLY GLY A . n
+A 1 135 GLY 135 211 211 GLY GLY A . n
+A 1 136 PHE 136 212 212 PHE PHE A . n
+A 1 137 TYR 137 213 213 TYR TYR A . n
+A 1 138 ILE 138 214 214 ILE ILE A . n
+A 1 139 SER 139 215 215 SER SER A . n
+A 1 140 PRO 140 216 216 PRO PRO A . n
+A 1 141 ARG 141 217 217 ARG ARG A . n
+A 1 142 SER 142 218 218 SER SER A . n
+A 1 143 THR 143 219 219 THR THR A . n
+A 1 144 PHE 144 220 220 PHE PHE A . n
+A 1 145 SER 145 221 221 SER SER A . n
+A 1 146 THR 146 222 222 THR THR A . n
+A 1 147 LEU 147 223 223 LEU LEU A . n
+A 1 148 GLN 148 224 224 GLN GLN A . n
+A 1 149 GLU 149 225 225 GLU GLU A . n
+A 1 150 LEU 150 226 226 LEU LEU A . n
+A 1 151 VAL 151 227 227 VAL VAL A . n
+A 1 152 ASP 152 228 228 ASP ASP A . n
+A 1 153 HIS 153 229 229 HIS HIS A . n
+A 1 154 TYR 154 230 230 TYR TYR A . n
+A 1 155 LYS 155 231 231 LYS LYS A . n
+A 1 156 LYS 156 232 232 LYS LYS A . n
+A 1 157 GLY 157 233 233 GLY GLY A . n
+A 1 158 ASN 158 234 234 ASN ASN A . n
+A 1 159 ASP 159 235 235 ASP ASP A . n
+A 1 160 GLY 160 236 236 GLY GLY A . n
+A 1 161 LEU 161 237 237 LEU LEU A . n
+A 1 162 CYS 162 238 238 CYS CYS A . n
+A 1 163 GLN 163 239 239 GLN GLN A . n
+A 1 164 LYS 164 240 240 LYS LYS A . n
+A 1 165 LEU 165 241 241 LEU LEU A . n
+A 1 166 SER 166 242 242 SER SER A . n
+A 1 167 VAL 167 243 243 VAL VAL A . n
+A 1 168 PRO 168 244 244 PRO PRO A . n
+A 1 169 CYS 169 245 245 CYS CYS A . n
+A 1 170 MET 170 246 246 MET MET A . n
+A 1 171 SER 171 247 247 SER SER A . n
+A 1 172 SER 172 248 248 SER SER A . n
+A 1 173 LYS 173 249 249 LYS LYS A . n
+A 1 174 PRO 174 250 250 PRO PRO A . n
+A 1 175 GLN 175 251 251 GLN GLN A . n
+A 1 176 LYS 176 252 252 LYS LYS A . n
+A 1 177 PRO 177 253 253 PRO PRO A . n
+A 1 178 TRP 178 254 254 TRP TRP A . n
+A 1 179 GLU 179 255 255 GLU GLU A . n
+A 1 180 LYS 180 257 257 LYS LYS A . n
+A 1 181 ASP 181 258 258 ASP ASP A . n
+A 1 182 ALA 182 259 259 ALA ALA A . n
+A 1 183 TRP 183 260 260 TRP TRP A . n
+A 1 184 GLU 184 261 261 GLU GLU A . n
+A 1 185 ILE 185 262 262 ILE ILE A . n
+A 1 186 PRO 186 263 263 PRO PRO A . n
+A 1 187 ARG 187 264 264 ARG ARG A . n
+A 1 188 GLU 188 265 265 GLU GLU A . n
+A 1 189 SER 189 266 266 SER SER A . n
+A 1 190 LEU 190 267 267 LEU LEU A . n
+A 1 191 LYS 191 268 268 LYS LYS A . n
+A 1 192 LEU 192 269 269 LEU LEU A . n
+A 1 193 GLU 193 270 270 GLU GLU A . n
+A 1 194 LYS 194 271 271 LYS LYS A . n
+A 1 195 LYS 195 272 272 LYS LYS A . n
+A 1 196 LEU 196 273 273 LEU LEU A . n
+A 1 197 GLY 197 274 274 GLY GLY A . n
+A 1 198 ALA 198 275 275 ALA ALA A . n
+A 1 199 GLY 199 276 276 GLY GLY A . n
+A 1 200 GLN 200 277 277 GLN GLN A . n
+A 1 201 PHE 201 278 278 PHE PHE A . n
+A 1 202 GLY 202 279 279 GLY GLY A . n
+A 1 203 GLU 203 280 280 GLU GLU A . n
+A 1 204 VAL 204 281 281 VAL VAL A . n
+A 1 205 TRP 205 282 282 TRP TRP A . n
+A 1 206 MET 206 283 283 MET MET A . n
+A 1 207 ALA 207 284 284 ALA ALA A . n
+A 1 208 THR 208 285 285 THR THR A . n
+A 1 209 TYR 209 286 286 TYR TYR A . n
+A 1 210 ASN 210 287 287 ASN ASN A . n
+A 1 211 LYS 211 288 288 LYS LYS A . n
+A 1 212 HIS 212 289 289 HIS HIS A . n
+A 1 213 THR 213 290 290 THR THR A . n
+A 1 214 LYS 214 291 291 LYS LYS A . n
+A 1 215 VAL 215 292 292 VAL VAL A . n
+A 1 216 ALA 216 293 293 ALA ALA A . n
+A 1 217 VAL 217 294 294 VAL VAL A . n
+A 1 218 LYS 218 295 295 LYS LYS A . n
+A 1 219 THR 219 296 296 THR THR A . n
+A 1 220 MET 220 297 297 MET MET A . n
+A 1 221 LYS 221 298 298 LYS LYS A . n
+A 1 222 PRO 222 299 299 PRO PRO A . n
+A 1 223 GLY 223 300 300 GLY GLY A . n
+A 1 224 SER 224 301 301 SER SER A . n
+A 1 225 MET 225 302 302 MET MET A . n
+A 1 226 SER 226 303 303 SER SER A . n
+A 1 227 VAL 227 304 304 VAL VAL A . n
+A 1 228 GLU 228 305 305 GLU GLU A . n
+A 1 229 ALA 229 306 306 ALA ALA A . n
+A 1 230 PHE 230 307 307 PHE PHE A . n
+A 1 231 LEU 231 308 308 LEU LEU A . n
+A 1 232 ALA 232 309 309 ALA ALA A . n
+A 1 233 GLU 233 310 310 GLU GLU A . n
+A 1 234 ALA 234 311 311 ALA ALA A . n
+A 1 235 ASN 235 312 312 ASN ASN A . n
+A 1 236 VAL 236 313 313 VAL VAL A . n
+A 1 237 MET 237 314 314 MET MET A . n
+A 1 238 LYS 238 315 315 LYS LYS A . n
+A 1 239 THR 239 316 316 THR THR A . n
+A 1 240 LEU 240 317 317 LEU LEU A . n
+A 1 241 GLN 241 318 318 GLN GLN A . n
+A 1 242 HIS 242 319 319 HIS HIS A . n
+A 1 243 ASP 243 320 320 ASP ASP A . n
+A 1 244 LYS 244 321 321 LYS LYS A . n
+A 1 245 LEU 245 322 322 LEU LEU A . n
+A 1 246 VAL 246 323 323 VAL VAL A . n
+A 1 247 LYS 247 324 324 LYS LYS A . n
+A 1 248 LEU 248 325 325 LEU LEU A . n
+A 1 249 HIS 249 326 326 HIS HIS A . n
+A 1 250 ALA 250 327 327 ALA ALA A . n
+A 1 251 VAL 251 328 328 VAL VAL A . n
+A 1 252 VAL 252 329 329 VAL VAL A . n
+A 1 253 THR 253 330 330 THR THR A . n
+A 1 254 LYS 254 331 331 LYS LYS A . n
+A 1 255 GLU 255 332 332 GLU GLU A . n
+A 1 256 PRO 256 333 333 PRO PRO A . n
+A 1 257 ILE 257 334 334 ILE ILE A . n
+A 1 258 TYR 258 335 335 TYR TYR A . n
+A 1 259 ILE 259 336 336 ILE ILE A . n
+A 1 260 ILE 260 337 337 ILE ILE A . n
+A 1 261 THR 261 338 338 THR THR A . n
+A 1 262 GLU 262 339 339 GLU GLU A . n
+A 1 263 PHE 263 340 340 PHE PHE A . n
+A 1 264 MET 264 341 341 MET MET A . n
+A 1 265 ALA 265 342 342 ALA ALA A . n
+A 1 266 LYS 266 343 343 LYS LYS A . n
+A 1 267 GLY 267 344 344 GLY GLY A . n
+A 1 268 SER 268 345 345 SER SER A . n
+A 1 269 LEU 269 346 346 LEU LEU A . n
+A 1 270 LEU 270 347 347 LEU LEU A . n
+A 1 271 ASP 271 348 348 ASP ASP A . n
+A 1 272 PHE 272 349 349 PHE PHE A . n
+A 1 273 LEU 273 350 350 LEU LEU A . n
+A 1 274 LYS 274 351 351 LYS LYS A . n
+A 1 275 SER 275 352 352 SER SER A . n
+A 1 276 ASP 276 353 353 ASP ASP A . n
+A 1 277 GLU 277 354 354 GLU GLU A . n
+A 1 278 GLY 278 355 355 GLY GLY A . n
+A 1 279 SER 279 356 356 SER SER A . n
+A 1 280 LYS 280 357 357 LYS LYS A . n
+A 1 281 GLN 281 358 358 GLN GLN A . n
+A 1 282 PRO 282 359 359 PRO PRO A . n
+A 1 283 LEU 283 360 360 LEU LEU A . n
+A 1 284 PRO 284 361 361 PRO PRO A . n
+A 1 285 LYS 285 362 362 LYS LYS A . n
+A 1 286 LEU 286 363 363 LEU LEU A . n
+A 1 287 ILE 287 364 364 ILE ILE A . n
+A 1 288 ASP 288 365 365 ASP ASP A . n
+A 1 289 PHE 289 366 366 PHE PHE A . n
+A 1 290 SER 290 367 367 SER SER A . n
+A 1 291 ALA 291 368 368 ALA ALA A . n
+A 1 292 GLN 292 369 369 GLN GLN A . n
+A 1 293 ILE 293 370 370 ILE ILE A . n
+A 1 294 ALA 294 371 371 ALA ALA A . n
+A 1 295 GLU 295 372 372 GLU GLU A . n
+A 1 296 GLY 296 373 373 GLY GLY A . n
+A 1 297 MET 297 374 374 MET MET A . n
+A 1 298 ALA 298 375 375 ALA ALA A . n
+A 1 299 PHE 299 376 376 PHE PHE A . n
+A 1 300 ILE 300 377 377 ILE ILE A . n
+A 1 301 GLU 301 378 378 GLU GLU A . n
+A 1 302 GLN 302 379 379 GLN GLN A . n
+A 1 303 ARG 303 380 380 ARG ARG A . n
+A 1 304 ASN 304 381 381 ASN ASN A . n
+A 1 305 TYR 305 382 382 TYR TYR A . n
+A 1 306 ILE 306 383 383 ILE ILE A . n
+A 1 307 HIS 307 384 384 HIS HIS A . n
+A 1 308 ARG 308 385 385 ARG ARG A . n
+A 1 309 ASP 309 386 386 ASP ASP A . n
+A 1 310 LEU 310 387 387 LEU LEU A . n
+A 1 311 ARG 311 388 388 ARG ARG A . n
+A 1 312 ALA 312 389 389 ALA ALA A . n
+A 1 313 ALA 313 390 390 ALA ALA A . n
+A 1 314 ASN 314 391 391 ASN ASN A . n
+A 1 315 ILE 315 392 392 ILE ILE A . n
+A 1 316 LEU 316 393 393 LEU LEU A . n
+A 1 317 VAL 317 394 394 VAL VAL A . n
+A 1 318 SER 318 395 395 SER SER A . n
+A 1 319 ALA 319 396 396 ALA ALA A . n
+A 1 320 SER 320 397 397 SER SER A . n
+A 1 321 LEU 321 398 398 LEU LEU A . n
+A 1 322 VAL 322 399 399 VAL VAL A . n
+A 1 323 CYS 323 400 400 CYS CYS A . n
+A 1 324 LYS 324 401 401 LYS LYS A . n
+A 1 325 ILE 325 402 402 ILE ILE A . n
+A 1 326 ALA 326 403 403 ALA ALA A . n
+A 1 327 ASP 327 404 404 ASP ASP A . n
+A 1 328 PHE 328 405 405 PHE PHE A . n
+A 1 329 GLY 329 406 406 GLY GLY A . n
+A 1 330 LEU 330 407 407 LEU LEU A . n
+A 1 331 ALA 331 408 408 ALA ALA A . n
+A 1 332 ARG 332 409 409 ARG ARG A . n
+A 1 333 VAL 333 410 410 VAL VAL A . n
+A 1 334 ILE 334 411 411 ILE ILE A . n
+A 1 335 GLU 335 412 412 GLU GLU A . n
+A 1 336 ASP 336 413 413 ASP ASP A . n
+A 1 337 ASN 337 414 414 ASN ASN A . n
+A 1 338 GLU 338 415 415 GLU GLU A . n
+A 1 339 TYR 339 416 416 TYR TYR A . n
+A 1 340 THR 340 417 417 THR THR A . n
+A 1 341 ALA 341 418 418 ALA ALA A . n
+A 1 342 ARG 342 419 419 ARG ARG A . n
+A 1 343 GLU 343 420 420 GLU GLU A . n
+A 1 344 GLY 344 421 421 GLY GLY A . n
+A 1 345 ALA 345 422 422 ALA ALA A . n
+A 1 346 LYS 346 423 423 LYS LYS A . n
+A 1 347 PHE 347 424 424 PHE PHE A . n
+A 1 348 PRO 348 425 425 PRO PRO A . n
+A 1 349 ILE 349 426 426 ILE ILE A . n
+A 1 350 LYS 350 427 427 LYS LYS A . n
+A 1 351 TRP 351 428 428 TRP TRP A . n
+A 1 352 THR 352 429 429 THR THR A . n
+A 1 353 ALA 353 430 430 ALA ALA A . n
+A 1 354 PRO 354 431 431 PRO PRO A . n
+A 1 355 GLU 355 432 432 GLU GLU A . n
+A 1 356 ALA 356 433 433 ALA ALA A . n
+A 1 357 ILE 357 434 434 ILE ILE A . n
+A 1 358 ASN 358 435 435 ASN ASN A . n
+A 1 359 PHE 359 436 436 PHE PHE A . n
+A 1 360 GLY 360 437 437 GLY GLY A . n
+A 1 361 SER 361 438 438 SER SER A . n
+A 1 362 PHE 362 439 439 PHE PHE A . n
+A 1 363 THR 363 440 440 THR THR A . n
+A 1 364 ILE 364 441 441 ILE ILE A . n
+A 1 365 LYS 365 442 442 LYS LYS A . n
+A 1 366 SER 366 443 443 SER SER A . n
+A 1 367 ASP 367 444 444 ASP ASP A . n
+A 1 368 VAL 368 445 445 VAL VAL A . n
+A 1 369 TRP 369 446 446 TRP TRP A . n
+A 1 370 SER 370 447 447 SER SER A . n
+A 1 371 PHE 371 448 448 PHE PHE A . n
+A 1 372 GLY 372 449 449 GLY GLY A . n
+A 1 373 ILE 373 450 450 ILE ILE A . n
+A 1 374 LEU 374 451 451 LEU LEU A . n
+A 1 375 LEU 375 452 452 LEU LEU A . n
+A 1 376 MET 376 453 453 MET MET A . n
+A 1 377 GLU 377 454 454 GLU GLU A . n
+A 1 378 ILE 378 455 455 ILE ILE A . n
+A 1 379 VAL 379 456 456 VAL VAL A . n
+A 1 380 THR 380 457 457 THR THR A . n
+A 1 381 TYR 381 458 458 TYR TYR A . n
+A 1 382 GLY 382 459 459 GLY GLY A . n
+A 1 383 ARG 383 460 460 ARG ARG A . n
+A 1 384 ILE 384 461 461 ILE ILE A . n
+A 1 385 PRO 385 462 462 PRO PRO A . n
+A 1 386 TYR 386 463 463 TYR TYR A . n
+A 1 387 PRO 387 464 464 PRO PRO A . n
+A 1 388 GLY 388 465 465 GLY GLY A . n
+A 1 389 MET 389 466 466 MET MET A . n
+A 1 390 SER 390 467 467 SER SER A . n
+A 1 391 ASN 391 468 468 ASN ASN A . n
+A 1 392 PRO 392 469 469 PRO PRO A . n
+A 1 393 GLU 393 470 470 GLU GLU A . n
+A 1 394 VAL 394 471 471 VAL VAL A . n
+A 1 395 ILE 395 472 472 ILE ILE A . n
+A 1 396 ARG 396 473 473 ARG ARG A . n
+A 1 397 ALA 397 474 474 ALA ALA A . n
+A 1 398 LEU 398 475 475 LEU LEU A . n
+A 1 399 GLU 399 476 476 GLU GLU A . n
+A 1 400 ARG 400 477 477 ARG ALA A . n
+A 1 401 GLY 401 478 478 GLY GLY A . n
+A 1 402 TYR 402 479 479 TYR TYR A . n
+A 1 403 ARG 403 480 480 ARG ARG A . n
+A 1 404 MET 404 481 481 MET MET A . n
+A 1 405 PRO 405 482 482 PRO PRO A . n
+A 1 406 ARG 406 483 483 ARG ARG A . n
+A 1 407 PRO 407 484 484 PRO PRO A . n
+A 1 408 GLU 408 485 485 GLU GLU A . n
+A 1 409 ASN 409 486 486 ASN ASN A . n
+A 1 410 CYS 410 487 487 CYS CYS A . n
+A 1 411 PRO 411 488 488 PRO PRO A . n
+A 1 412 GLU 412 489 489 GLU GLU A . n
+A 1 413 GLU 413 490 490 GLU GLU A . n
+A 1 414 LEU 414 491 491 LEU LEU A . n
+A 1 415 TYR 415 492 492 TYR TYR A . n
+A 1 416 ASN 416 493 493 ASN ASN A . n
+A 1 417 ILE 417 494 494 ILE ILE A . n
+A 1 418 MET 418 495 495 MET MET A . n
+A 1 419 MET 419 496 496 MET MET A . n
+A 1 420 ARG 420 497 497 ARG ARG A . n
+A 1 421 CYS 421 498 498 CYS CYS A . n
+A 1 422 TRP 422 499 499 TRP TRP A . n
+A 1 423 LYS 423 500 500 LYS LYS A . n
+A 1 424 ASN 424 501 501 ASN ASN A . n
+A 1 425 ARG 425 502 502 ARG ARG A . n
+A 1 426 PRO 426 503 503 PRO PRO A . n
+A 1 427 GLU 427 504 504 GLU GLU A . n
+A 1 428 GLU 428 505 505 GLU GLU A . n
+A 1 429 ARG 429 506 506 ARG ARG A . n
+A 1 430 PRO 430 507 507 PRO PRO A . n
+A 1 431 THR 431 508 508 THR THR A . n
+A 1 432 PHE 432 509 509 PHE PHE A . n
+A 1 433 GLU 433 510 510 GLU GLU A . n
+A 1 434 TYR 434 511 511 TYR TYR A . n
+A 1 435 ILE 435 512 512 ILE ILE A . n
+A 1 436 GLN 436 513 513 GLN GLN A . n
+A 1 437 SER 437 514 514 SER SER A . n
+A 1 438 VAL 438 515 515 VAL VAL A . n
+A 1 439 LEU 439 516 516 LEU LEU A . n
+A 1 440 ASP 440 517 517 ASP ASP A . n
+A 1 441 ASP 441 518 518 ASP ASP A . n
+A 1 442 PHE 442 519 519 PHE PHE A . n
+A 1 443 TYR 443 520 520 TYR TYR A . n
+A 1 444 THR 444 521 521 THR THR A . n
+A 1 445 ALA 445 522 522 ALA ALA A . n
+A 1 446 THR 446 523 523 THR THR A . n
+A 1 447 GLU 447 524 524 GLU GLU A . n
+A 1 448 SER 448 525 525 SER SER A . n
+A 1 449 GLN 449 526 526 GLN GLN A . n
+A 1 450 PTR 450 527 527 PTR PTR A . n
+A 1 451 GLU 451 528 528 GLU GLU A . n
+A 1 452 GLU 452 529 529 GLU GLU A . n
+A 1 453 ILE 453 530 530 ILE ILE A . n
+A 1 454 PRO 454 531 531 PRO PRO A . n
+#
+loop_
+_software.name
+_software.classification
+_software.version
+_software.citation_id
+_software.pdbx_ordinal
+AMORE 'model building' . ? 1
+CNS refinement . ? 2
+#
+loop_
+_pdbx_version.entry_id
+_pdbx_version.revision_date
+_pdbx_version.major_version
+_pdbx_version.minor_version
+_pdbx_version.revision_type
+_pdbx_version.details
+1QCF 2008-04-27 3 2 'Version format compliance' 'compliance with PDB format V.3.15'
+1QCF 2011-07-13 4 0000 'Version format compliance' 'compliance with PDB Exchange Dictionary V4'
+#
+loop_
+_pdbx_unobs_or_zero_occ_residues.id
+_pdbx_unobs_or_zero_occ_residues.polymer_flag
+_pdbx_unobs_or_zero_occ_residues.occupancy_flag
+_pdbx_unobs_or_zero_occ_residues.PDB_model_num
+_pdbx_unobs_or_zero_occ_residues.auth_asym_id
+_pdbx_unobs_or_zero_occ_residues.auth_comp_id
+_pdbx_unobs_or_zero_occ_residues.auth_seq_id
+_pdbx_unobs_or_zero_occ_residues.PDB_ins_code
+1 Y 1 1 A GLY 76 ?
+2 Y 1 1 A ALA 77 ?
+3 Y 1 1 A MET 78 ?
+4 Y 1 1 A GLY 79 ?
+#
+loop_
+_pdbx_unobs_or_zero_occ_atoms.id
+_pdbx_unobs_or_zero_occ_atoms.polymer_flag
+_pdbx_unobs_or_zero_occ_atoms.occupancy_flag
+_pdbx_unobs_or_zero_occ_atoms.PDB_model_num
+_pdbx_unobs_or_zero_occ_atoms.auth_asym_id
+_pdbx_unobs_or_zero_occ_atoms.auth_comp_id
+_pdbx_unobs_or_zero_occ_atoms.auth_seq_id
+_pdbx_unobs_or_zero_occ_atoms.PDB_ins_code
+_pdbx_unobs_or_zero_occ_atoms.auth_atom_id
+_pdbx_unobs_or_zero_occ_atoms.label_alt_id
+1 Y 1 1 A ARG 477 ? CG ?
+2 Y 1 1 A ARG 477 ? CD ?
+3 Y 1 1 A ARG 477 ? NE ?
+4 Y 1 1 A ARG 477 ? CZ ?
+5 Y 1 1 A ARG 477 ? NH1 ?
+6 Y 1 1 A ARG 477 ? NH2 ?
+#
+_pdbx_struct_assembly.id 1
+_pdbx_struct_assembly.details author_defined_assembly
+_pdbx_struct_assembly.method_details ?
+_pdbx_struct_assembly.oligomeric_details monomeric
+_pdbx_struct_assembly.oligomeric_count 1
+#
+_pdbx_struct_assembly_gen.assembly_id 1
+_pdbx_struct_assembly_gen.oper_expression 1
+_pdbx_struct_assembly_gen.asym_id_list A,B,C
+#
+_pdbx_struct_oper_list.id 1
+_pdbx_struct_oper_list.type 'identity operation'
+_pdbx_struct_oper_list.name 1_555
+_pdbx_struct_oper_list.symmetry_operation x,y,z
+_pdbx_struct_oper_list.matrix[1][1] 1.0000000000
+_pdbx_struct_oper_list.matrix[1][2] 0.0000000000
+_pdbx_struct_oper_list.matrix[1][3] 0.0000000000
+_pdbx_struct_oper_list.vector[1] 0.0000000000
+_pdbx_struct_oper_list.matrix[2][1] 0.0000000000
+_pdbx_struct_oper_list.matrix[2][2] 1.0000000000
+_pdbx_struct_oper_list.matrix[2][3] 0.0000000000
+_pdbx_struct_oper_list.vector[2] 0.0000000000
+_pdbx_struct_oper_list.matrix[3][1] 0.0000000000
+_pdbx_struct_oper_list.matrix[3][2] 0.0000000000
+_pdbx_struct_oper_list.matrix[3][3] 1.0000000000
+_pdbx_struct_oper_list.vector[3] 0.0000000000
+#
+loop_
+_pdbx_nonpoly_scheme.asym_id
+_pdbx_nonpoly_scheme.entity_id
+_pdbx_nonpoly_scheme.mon_id
+_pdbx_nonpoly_scheme.ndb_seq_num
+_pdbx_nonpoly_scheme.pdb_seq_num
+_pdbx_nonpoly_scheme.auth_seq_num
+_pdbx_nonpoly_scheme.pdb_mon_id
+_pdbx_nonpoly_scheme.auth_mon_id
+_pdbx_nonpoly_scheme.pdb_strand_id
+_pdbx_nonpoly_scheme.pdb_ins_code
+B 2 PP1 1 532 1 PP1 TS A .
+C 3 HOH 1 533 1 HOH HOH A .
+C 3 HOH 2 534 2 HOH HOH A .
+C 3 HOH 3 535 3 HOH HOH A .
+C 3 HOH 4 536 4 HOH HOH A .
+C 3 HOH 5 537 5 HOH HOH A .
+C 3 HOH 6 538 6 HOH HOH A .
+C 3 HOH 7 539 7 HOH HOH A .
+C 3 HOH 8 540 8 HOH HOH A .
+C 3 HOH 9 541 9 HOH HOH A .
+C 3 HOH 10 542 10 HOH HOH A .
+C 3 HOH 11 543 11 HOH HOH A .
+C 3 HOH 12 544 12 HOH HOH A .
+C 3 HOH 13 545 13 HOH HOH A .
+C 3 HOH 14 546 14 HOH HOH A .
+C 3 HOH 15 547 15 HOH HOH A .
+C 3 HOH 16 548 16 HOH HOH A .
+C 3 HOH 17 549 17 HOH HOH A .
+C 3 HOH 18 550 18 HOH HOH A .
+C 3 HOH 19 551 19 HOH HOH A .
+C 3 HOH 20 552 20 HOH HOH A .
+C 3 HOH 21 553 21 HOH HOH A .
+C 3 HOH 22 554 22 HOH HOH A .
+C 3 HOH 23 555 23 HOH HOH A .
+C 3 HOH 24 556 24 HOH HOH A .
+C 3 HOH 25 557 25 HOH HOH A .
+C 3 HOH 26 558 26 HOH HOH A .
+C 3 HOH 27 559 27 HOH HOH A .
+C 3 HOH 28 560 28 HOH HOH A .
+C 3 HOH 29 561 29 HOH HOH A .
+C 3 HOH 30 562 30 HOH HOH A .
+C 3 HOH 31 563 31 HOH HOH A .
+C 3 HOH 32 564 32 HOH HOH A .
+C 3 HOH 33 565 33 HOH HOH A .
+C 3 HOH 34 566 34 HOH HOH A .
+C 3 HOH 35 567 35 HOH HOH A .
+C 3 HOH 36 568 36 HOH HOH A .
+C 3 HOH 37 569 37 HOH HOH A .
+C 3 HOH 38 570 38 HOH HOH A .
+C 3 HOH 39 571 39 HOH HOH A .
+C 3 HOH 40 572 40 HOH HOH A .
+C 3 HOH 41 573 41 HOH HOH A .
+C 3 HOH 42 574 42 HOH HOH A .
+C 3 HOH 43 575 43 HOH HOH A .
+C 3 HOH 44 576 44 HOH HOH A .
+C 3 HOH 45 577 45 HOH HOH A .
+C 3 HOH 46 578 46 HOH HOH A .
+C 3 HOH 47 579 47 HOH HOH A .
+C 3 HOH 48 580 48 HOH HOH A .
+C 3 HOH 49 581 49 HOH HOH A .
+C 3 HOH 50 582 50 HOH HOH A .
+C 3 HOH 51 583 51 HOH HOH A .
+C 3 HOH 52 584 52 HOH HOH A .
+C 3 HOH 53 585 53 HOH HOH A .
+C 3 HOH 54 586 54 HOH HOH A .
+C 3 HOH 55 587 55 HOH HOH A .
+C 3 HOH 56 588 56 HOH HOH A .
+C 3 HOH 57 589 57 HOH HOH A .
+C 3 HOH 58 590 58 HOH HOH A .
+C 3 HOH 59 591 59 HOH HOH A .
+C 3 HOH 60 592 60 HOH HOH A .
+C 3 HOH 61 593 61 HOH HOH A .
+C 3 HOH 62 594 62 HOH HOH A .
+C 3 HOH 63 595 63 HOH HOH A .
+C 3 HOH 64 596 64 HOH HOH A .
+C 3 HOH 65 597 65 HOH HOH A .
+C 3 HOH 66 598 66 HOH HOH A .
+C 3 HOH 67 599 67 HOH HOH A .
+C 3 HOH 68 600 68 HOH HOH A .
+C 3 HOH 69 601 69 HOH HOH A .
+C 3 HOH 70 602 70 HOH HOH A .
+C 3 HOH 71 603 71 HOH HOH A .
+C 3 HOH 72 604 72 HOH HOH A .
+C 3 HOH 73 605 73 HOH HOH A .
+C 3 HOH 74 606 74 HOH HOH A .
+C 3 HOH 75 607 75 HOH HOH A .
+C 3 HOH 76 608 76 HOH HOH A .
+C 3 HOH 77 609 77 HOH HOH A .
+C 3 HOH 78 610 78 HOH HOH A .
+C 3 HOH 79 611 79 HOH HOH A .
+C 3 HOH 80 612 80 HOH HOH A .
+C 3 HOH 81 613 81 HOH HOH A .
+C 3 HOH 82 614 82 HOH HOH A .
+C 3 HOH 83 615 83 HOH HOH A .
+C 3 HOH 84 616 84 HOH HOH A .
+C 3 HOH 85 617 85 HOH HOH A .
+C 3 HOH 86 618 86 HOH HOH A .
+C 3 HOH 87 619 87 HOH HOH A .
+C 3 HOH 88 620 88 HOH HOH A .
+C 3 HOH 89 621 89 HOH HOH A .
+C 3 HOH 90 622 90 HOH HOH A .
+C 3 HOH 91 623 91 HOH HOH A .
+C 3 HOH 92 624 92 HOH HOH A .
+C 3 HOH 93 625 93 HOH HOH A .
+C 3 HOH 94 626 94 HOH HOH A .
+C 3 HOH 95 627 95 HOH HOH A .
+C 3 HOH 96 628 96 HOH HOH A .
+C 3 HOH 97 629 97 HOH HOH A .
+C 3 HOH 98 630 98 HOH HOH A .
+C 3 HOH 99 631 99 HOH HOH A .
+C 3 HOH 100 632 100 HOH HOH A .
+C 3 HOH 101 633 101 HOH HOH A .
+C 3 HOH 102 634 102 HOH HOH A .
+C 3 HOH 103 635 103 HOH HOH A .
+C 3 HOH 104 636 104 HOH HOH A .
+C 3 HOH 105 637 105 HOH HOH A .
+C 3 HOH 106 638 106 HOH HOH A .
+C 3 HOH 107 639 107 HOH HOH A .
+C 3 HOH 108 640 108 HOH HOH A .
+C 3 HOH 109 641 109 HOH HOH A .
+C 3 HOH 110 642 110 HOH HOH A .
+C 3 HOH 111 643 111 HOH HOH A .
+C 3 HOH 112 644 112 HOH HOH A .
+C 3 HOH 113 645 113 HOH HOH A .
+C 3 HOH 114 646 114 HOH HOH A .
+C 3 HOH 115 647 115 HOH HOH A .
+C 3 HOH 116 648 116 HOH HOH A .
+C 3 HOH 117 649 117 HOH HOH A .
+C 3 HOH 118 650 118 HOH HOH A .
+C 3 HOH 119 651 119 HOH HOH A .
+C 3 HOH 120 652 120 HOH HOH A .
+C 3 HOH 121 653 121 HOH HOH A .
+C 3 HOH 122 654 122 HOH HOH A .
+C 3 HOH 123 655 123 HOH HOH A .
+C 3 HOH 124 656 124 HOH HOH A .
+C 3 HOH 125 657 125 HOH HOH A .
+C 3 HOH 126 658 126 HOH HOH A .
+C 3 HOH 127 659 127 HOH HOH A .
+C 3 HOH 128 660 128 HOH HOH A .
+C 3 HOH 129 661 129 HOH HOH A .
+C 3 HOH 130 662 130 HOH HOH A .
+C 3 HOH 131 663 131 HOH HOH A .
+C 3 HOH 132 664 132 HOH HOH A .
+C 3 HOH 133 665 133 HOH HOH A .
+C 3 HOH 134 666 134 HOH HOH A .
+C 3 HOH 135 667 135 HOH HOH A .
+C 3 HOH 136 668 136 HOH HOH A .
+C 3 HOH 137 669 137 HOH HOH A .
+C 3 HOH 138 670 138 HOH HOH A .
+C 3 HOH 139 671 139 HOH HOH A .
+C 3 HOH 140 672 140 HOH HOH A .
+C 3 HOH 141 673 141 HOH HOH A .
+C 3 HOH 142 674 142 HOH HOH A .
+C 3 HOH 143 675 143 HOH HOH A .
+C 3 HOH 144 676 144 HOH HOH A .
+C 3 HOH 145 677 145 HOH HOH A .
+C 3 HOH 146 678 146 HOH HOH A .
+C 3 HOH 147 679 147 HOH HOH A .
+C 3 HOH 148 680 148 HOH HOH A .
+C 3 HOH 149 681 149 HOH HOH A .
+C 3 HOH 150 682 150 HOH HOH A .
+C 3 HOH 151 683 151 HOH HOH A .
+C 3 HOH 152 684 152 HOH HOH A .
+C 3 HOH 153 685 153 HOH HOH A .
+C 3 HOH 154 686 154 HOH HOH A .
+C 3 HOH 155 687 155 HOH HOH A .
+C 3 HOH 156 688 156 HOH HOH A .
+C 3 HOH 157 689 157 HOH HOH A .
+C 3 HOH 158 690 158 HOH HOH A .
+C 3 HOH 159 691 159 HOH HOH A .
+C 3 HOH 160 692 160 HOH HOH A .
+C 3 HOH 161 693 161 HOH HOH A .
+C 3 HOH 162 694 162 HOH HOH A .
+C 3 HOH 163 695 163 HOH HOH A .
+C 3 HOH 164 696 164 HOH HOH A .
+C 3 HOH 165 697 165 HOH HOH A .
+C 3 HOH 166 698 166 HOH HOH A .
+C 3 HOH 167 699 167 HOH HOH A .
+C 3 HOH 168 700 168 HOH HOH A .
+C 3 HOH 169 701 169 HOH HOH A .
+C 3 HOH 170 702 170 HOH HOH A .
+C 3 HOH 171 703 171 HOH HOH A .
+C 3 HOH 172 704 172 HOH HOH A .
+C 3 HOH 173 705 173 HOH HOH A .
+C 3 HOH 174 706 174 HOH HOH A .
+C 3 HOH 175 707 175 HOH HOH A .
+C 3 HOH 176 708 176 HOH HOH A .
+C 3 HOH 177 709 177 HOH HOH A .
+C 3 HOH 178 710 178 HOH HOH A .
+C 3 HOH 179 711 179 HOH HOH A .
+C 3 HOH 180 712 180 HOH HOH A .
+C 3 HOH 181 713 181 HOH HOH A .
+C 3 HOH 182 714 182 HOH HOH A .
+C 3 HOH 183 715 183 HOH HOH A .
+C 3 HOH 184 716 184 HOH HOH A .
+C 3 HOH 185 717 185 HOH HOH A .
+C 3 HOH 186 718 186 HOH HOH A .
+C 3 HOH 187 719 187 HOH HOH A .
+C 3 HOH 188 720 188 HOH HOH A .
+C 3 HOH 189 721 189 HOH HOH A .
+C 3 HOH 190 722 190 HOH HOH A .
+C 3 HOH 191 723 191 HOH HOH A .
+C 3 HOH 192 724 192 HOH HOH A .
+C 3 HOH 193 725 193 HOH HOH A .
+C 3 HOH 194 726 194 HOH HOH A .
+C 3 HOH 195 727 195 HOH HOH A .
+C 3 HOH 196 728 196 HOH HOH A .
+C 3 HOH 197 729 197 HOH HOH A .
+C 3 HOH 198 730 198 HOH HOH A .
+C 3 HOH 199 731 199 HOH HOH A .
+C 3 HOH 200 732 200 HOH HOH A .
+C 3 HOH 201 733 201 HOH HOH A .
+C 3 HOH 202 734 202 HOH HOH A .
+C 3 HOH 203 735 203 HOH HOH A .
+C 3 HOH 204 736 204 HOH HOH A .
+C 3 HOH 205 737 205 HOH HOH A .
+C 3 HOH 206 738 206 HOH HOH A .
+C 3 HOH 207 739 207 HOH HOH A .
+C 3 HOH 208 740 208 HOH HOH A .
+C 3 HOH 209 741 209 HOH HOH A .
+C 3 HOH 210 742 210 HOH HOH A .
+C 3 HOH 211 743 211 HOH HOH A .
+C 3 HOH 212 744 212 HOH HOH A .
+C 3 HOH 213 745 213 HOH HOH A .
+C 3 HOH 214 746 214 HOH HOH A .
+C 3 HOH 215 747 215 HOH HOH A .
+C 3 HOH 216 748 216 HOH HOH A .
+C 3 HOH 217 749 217 HOH HOH A .
+C 3 HOH 218 750 218 HOH HOH A .
+C 3 HOH 219 751 219 HOH HOH A .
+C 3 HOH 220 752 220 HOH HOH A .
+C 3 HOH 221 753 221 HOH HOH A .
+C 3 HOH 222 754 222 HOH HOH A .
+C 3 HOH 223 755 223 HOH HOH A .
+C 3 HOH 224 756 224 HOH HOH A .
+C 3 HOH 225 757 225 HOH HOH A .
+C 3 HOH 226 758 226 HOH HOH A .
+C 3 HOH 227 759 227 HOH HOH A .
+C 3 HOH 228 760 228 HOH HOH A .
+C 3 HOH 229 761 229 HOH HOH A .
+C 3 HOH 230 762 230 HOH HOH A .
+C 3 HOH 231 763 231 HOH HOH A .
+C 3 HOH 232 764 232 HOH HOH A .
+C 3 HOH 233 765 233 HOH HOH A .
+C 3 HOH 234 766 234 HOH HOH A .
+C 3 HOH 235 767 235 HOH HOH A .
+C 3 HOH 236 768 236 HOH HOH A .
+C 3 HOH 237 769 237 HOH HOH A .
+C 3 HOH 238 770 238 HOH HOH A .
+C 3 HOH 239 771 239 HOH HOH A .
+C 3 HOH 240 772 240 HOH HOH A .
+C 3 HOH 241 773 241 HOH HOH A .
+C 3 HOH 242 774 242 HOH HOH A .
+C 3 HOH 243 775 243 HOH HOH A .
+C 3 HOH 244 776 244 HOH HOH A .
+C 3 HOH 245 777 245 HOH HOH A .
+C 3 HOH 246 778 246 HOH HOH A .
+C 3 HOH 247 779 247 HOH HOH A .
+C 3 HOH 248 780 248 HOH HOH A .
+C 3 HOH 249 781 249 HOH HOH A .
+C 3 HOH 250 782 250 HOH HOH A .
+C 3 HOH 251 783 251 HOH HOH A .
+C 3 HOH 252 784 252 HOH HOH A .
+C 3 HOH 253 785 253 HOH HOH A .
+C 3 HOH 254 786 254 HOH HOH A .
+C 3 HOH 255 787 255 HOH HOH A .
+C 3 HOH 256 788 256 HOH HOH A .
+C 3 HOH 257 789 257 HOH HOH A .
+C 3 HOH 258 790 258 HOH HOH A .
+C 3 HOH 259 791 259 HOH HOH A .
+C 3 HOH 260 792 260 HOH HOH A .
+C 3 HOH 261 793 261 HOH HOH A .
+C 3 HOH 262 794 262 HOH HOH A .
+C 3 HOH 263 795 263 HOH HOH A .
+C 3 HOH 264 796 264 HOH HOH A .
+C 3 HOH 265 797 265 HOH HOH A .
+C 3 HOH 266 798 266 HOH HOH A .
+C 3 HOH 267 799 267 HOH HOH A .
+C 3 HOH 268 800 268 HOH HOH A .
+C 3 HOH 269 801 269 HOH HOH A .
+C 3 HOH 270 802 270 HOH HOH A .
+C 3 HOH 271 803 271 HOH HOH A .
+C 3 HOH 272 804 272 HOH HOH A .
+C 3 HOH 273 805 273 HOH HOH A .
+C 3 HOH 274 806 274 HOH HOH A .
+C 3 HOH 275 807 275 HOH HOH A .
+C 3 HOH 276 808 276 HOH HOH A .
+C 3 HOH 277 809 277 HOH HOH A .
+C 3 HOH 278 810 278 HOH HOH A .
+C 3 HOH 279 811 279 HOH HOH A .
+C 3 HOH 280 812 280 HOH HOH A .
+C 3 HOH 281 813 281 HOH HOH A .
+C 3 HOH 282 814 282 HOH HOH A .
+C 3 HOH 283 815 283 HOH HOH A .
+C 3 HOH 284 816 284 HOH HOH A .
+C 3 HOH 285 817 285 HOH HOH A .
+C 3 HOH 286 818 286 HOH HOH A .
+C 3 HOH 287 819 287 HOH HOH A .
+C 3 HOH 288 820 288 HOH HOH A .
+C 3 HOH 289 821 289 HOH HOH A .
+C 3 HOH 290 822 290 HOH HOH A .
+C 3 HOH 291 823 291 HOH HOH A .
+C 3 HOH 292 824 292 HOH HOH A .
+C 3 HOH 293 825 293 HOH HOH A .
+C 3 HOH 294 826 294 HOH HOH A .
+C 3 HOH 295 827 295 HOH HOH A .
+C 3 HOH 296 828 296 HOH HOH A .
+C 3 HOH 297 829 297 HOH HOH A .
+C 3 HOH 298 830 298 HOH HOH A .
+C 3 HOH 299 831 299 HOH HOH A .
+C 3 HOH 300 832 300 HOH HOH A .
+C 3 HOH 301 833 301 HOH HOH A .
+C 3 HOH 302 834 302 HOH HOH A .
+C 3 HOH 303 835 303 HOH HOH A .
+C 3 HOH 304 836 304 HOH HOH A .
+C 3 HOH 305 837 305 HOH HOH A .
+C 3 HOH 306 838 306 HOH HOH A .
+C 3 HOH 307 839 307 HOH HOH A .
+C 3 HOH 308 840 308 HOH HOH A .
+C 3 HOH 309 841 309 HOH HOH A .
+C 3 HOH 310 842 310 HOH HOH A .
+C 3 HOH 311 843 311 HOH HOH A .
+C 3 HOH 312 844 312 HOH HOH A .
+#
+_pdbx_struct_mod_residue.id 1
+_pdbx_struct_mod_residue.label_asym_id A
+_pdbx_struct_mod_residue.label_seq_id 450
+_pdbx_struct_mod_residue.label_comp_id PTR
+_pdbx_struct_mod_residue.auth_asym_id A
+_pdbx_struct_mod_residue.auth_seq_id 527
+_pdbx_struct_mod_residue.auth_comp_id PTR
+_pdbx_struct_mod_residue.PDB_ins_code ?
+_pdbx_struct_mod_residue.parent_comp_id TYR
+_pdbx_struct_mod_residue.details O-PHOSPHOTYROSINE
+#
+_pdbx_validate_close_contact.id 1
+_pdbx_validate_close_contact.PDB_model_num 1
+_pdbx_validate_close_contact.auth_atom_id_1 O
+_pdbx_validate_close_contact.auth_asym_id_1 A
+_pdbx_validate_close_contact.auth_comp_id_1 THR
+_pdbx_validate_close_contact.auth_seq_id_1 521
+_pdbx_validate_close_contact.PDB_ins_code_1 ?
+_pdbx_validate_close_contact.label_alt_id_1 ?
+_pdbx_validate_close_contact.auth_atom_id_2 O
+_pdbx_validate_close_contact.auth_asym_id_2 A
+_pdbx_validate_close_contact.auth_comp_id_2 THR
+_pdbx_validate_close_contact.auth_seq_id_2 523
+_pdbx_validate_close_contact.PDB_ins_code_2 ?
+_pdbx_validate_close_contact.label_alt_id_2 ?
+_pdbx_validate_close_contact.dist 2.15
+#
+loop_
+_pdbx_validate_rmsd_angle.id
+_pdbx_validate_rmsd_angle.PDB_model_num
+_pdbx_validate_rmsd_angle.auth_atom_id_1
+_pdbx_validate_rmsd_angle.auth_asym_id_1
+_pdbx_validate_rmsd_angle.auth_comp_id_1
+_pdbx_validate_rmsd_angle.auth_seq_id_1
+_pdbx_validate_rmsd_angle.PDB_ins_code_1
+_pdbx_validate_rmsd_angle.label_alt_id_1
+_pdbx_validate_rmsd_angle.auth_atom_id_2
+_pdbx_validate_rmsd_angle.auth_asym_id_2
+_pdbx_validate_rmsd_angle.auth_comp_id_2
+_pdbx_validate_rmsd_angle.auth_seq_id_2
+_pdbx_validate_rmsd_angle.PDB_ins_code_2
+_pdbx_validate_rmsd_angle.label_alt_id_2
+_pdbx_validate_rmsd_angle.auth_atom_id_3
+_pdbx_validate_rmsd_angle.auth_asym_id_3
+_pdbx_validate_rmsd_angle.auth_comp_id_3
+_pdbx_validate_rmsd_angle.auth_seq_id_3
+_pdbx_validate_rmsd_angle.PDB_ins_code_3
+_pdbx_validate_rmsd_angle.label_alt_id_3
+_pdbx_validate_rmsd_angle.angle_deviation
+1 1 C A ILE 530 ? ? N A PRO 531 ? ? CA A PRO 531 ? ? 24.0
+2 1 C A ILE 530 ? ? N A PRO 531 ? ? CD A PRO 531 ? ? -23.8
+#
+loop_
+_pdbx_validate_torsion.id
+_pdbx_validate_torsion.PDB_model_num
+_pdbx_validate_torsion.auth_comp_id
+_pdbx_validate_torsion.auth_asym_id
+_pdbx_validate_torsion.auth_seq_id
+_pdbx_validate_torsion.PDB_ins_code
+_pdbx_validate_torsion.phi
+_pdbx_validate_torsion.psi
+1 1 GLU A 113 ? -109.04 64.07
+2 1 ALA A 125 ? -87.40 -79.28
+3 1 ARG A 127 ? 55.46 14.67
+4 1 ASP A 141 ? 53.98 11.04
+5 1 ASN A 209 ? 75.81 32.97
+6 1 PRO A 216 ? -59.13 -6.39
+7 1 TYR A 230 ? -57.61 -8.49
+8 1 ASP A 235 ? 36.77 53.62
+9 1 SER A 242 ? -102.49 -86.94
+10 1 ALA A 259 ? -110.81 54.42
+11 1 LYS A 288 ? 54.99 12.84
+12 1 ARG A 385 ? 83.68 -15.14
+13 1 ASP A 386 ? -150.15 53.00
+14 1 ASP A 413 ? -20.16 112.28
+15 1 TYR A 463 ? 38.29 60.93
+16 1 TRP A 499 ? -93.55 32.13
+17 1 TYR A 520 ? -109.43 -166.30
+18 1 ALA A 522 ? -0.05 -102.78
+19 1 THR A 523 ? -62.46 -169.49
+20 1 GLU A 524 ? 129.52 155.80
+21 1 SER A 525 ? -151.80 46.68
+22 1 GLN A 526 ? -10.02 82.92
+23 1 PTR A 527 ? 179.04 81.97
+#
+loop_
+_pdbx_entity_nonpoly.entity_id
+_pdbx_entity_nonpoly.name
+_pdbx_entity_nonpoly.comp_id
+2 '1-TER-BUTYL-3-P-TOLYL-1H-PYRAZOLO[3,4-D]PYRIMIDIN-4-YLAMINE' PP1
+3 water HOH
+#
+# (exonerate delimits GFF with [START|END] OF GFF DUMP)
+# --- START OF GFF DUMP ---
+#
+#
##gff-version 2
##source-version exonerate:protein2genome:local 2.2.0
##date 2015-01-16
contig_1146 exonerate:protein2genome:local gene 8534 11269 3652 - . gene_id 0 ; sequence DDB_G0269124 ; gene_orientation .
contig_1146 exonerate:protein2genome:local cds 8534 11269 . - .
contig_1146 exonerate:protein2genome:local exon 8534 11269 . - . insertions 3 ; deletions 6
+#TODO need to understand why GFF features is from 11269 but Align is from 11270
contig_1146 exonerate:protein2genome:local similarity 8534 11269 3652 - . alignment_id 0 ; Query DDB_G0269124 ; Align 11270 143 120 ; Align 11150 187 282 ; Align 10865 281 888 ; Align 9977 578 1068 ; Align 8909 935 375
+# and a made-up alignment to a sequence in exonerateseqs.fa
+contig_1146 exonerate:protein2genome:local similarity 8534 11269 3652 - . alignment_id 0 ; Query DDB_G0280897 ; Align 11270 143 120
# --- END OF GFF DUMP ---
--- /dev/null
+##gff-version 2
+# exonerate output in gff2 format; not gff3 because
+# - 'similarity' is not a Sequence Ontology term
+# - attributes' name/values are separated by space ' ' not equals '='
+##source-version exonerate:protein2genome:local 2.2.0
+##date 2015-01-16
+##type DNA
+#
+# exonerate run with --showtargetgff generates 'features on the target' i.e. mappings to the query
+# tab-delimited
+# seqname source feature start end score strand frame attributes
+#
+seq1 exonerate:protein2genome:local gene 8 11 3652 - . gene_id 0 ; sequence seq2 ; gene_orientation .
+seq1 exonerate:protein2genome:local cds 9 11 . - .
+seq1 exonerate:protein2genome:local exon 9 11 . - . insertions 3 ; deletions 6
+#seq1 exonerate:protein2genome:local similarity 8 11 3652 - . alignment_id 0 ; Query seq2 ; Align 11 1 3
+seq1 exonerate:protein2genome:local similarity 9 11 3652 - . alignment_id 0 ; Query seq2 ; Align 11 1 3
+#
+# appending FASTA sequences is strictly a GFF3 format feature
+# but Jalview is able to handle this mixture of GFF2 / GFF3 :-)
+#
+##FASTA
+>seq1
+ACTACGACACGACGACGACGACG
+>seq2
+CDEQEATGTQDAQEQAQC
+++ /dev/null
-##gff-version 2
-##source-version exonerate:protein2genome:local 2.2.0
-##date 2015-01-16
-##type DNA
-#
-#
-# seqname source feature start end score strand frame attributes
-#
-seq1 exonerate:protein2genome:local gene 8 11 3652 - . gene_id 0 ; sequence seq2 ; gene_orientation .
-seq1 exonerate:protein2genome:local cds 9 11 . - .
-seq1 exonerate:protein2genome:local exon 9 11 . - . insertions 3 ; deletions 6
-seq1 exonerate:protein2genome:local similarity 8 11 3652 - . alignment_id 0 ; Query seq2 ; Align 11 1 3
-##FASTA
->seq1
-ACTACGACACGACGACGACGACG
->seq2
-CDEQEATGTQDAQEQAQC
-
-
--- /dev/null
+data_1XYZ
+#
+_entry.id 1XYZ
+#
+_audit_conform.dict_name mmcif_pdbx.dic
+_audit_conform.dict_version 4.007
+_audit_conform.dict_location http://mmcif.pdb.org/dictionaries/ascii/mmcif_pdbx.dic
+#
+_database_2.database_id PDB
+_database_2.database_code 1XYZ
+#
+loop_
+_database_PDB_rev.num
+_database_PDB_rev.date
+_database_PDB_rev.date_original
+_database_PDB_rev.status
+_database_PDB_rev.replaces
+_database_PDB_rev.mod_type
+1 1996-01-29 1995-06-07 ? 1XYZ 0
+2 2009-02-24 ? ? 1XYZ 1
+#
+_database_PDB_rev_record.rev_num 2
+_database_PDB_rev_record.type VERSN
+_database_PDB_rev_record.details ?
+#
+_pdbx_database_status.status_code REL
+_pdbx_database_status.entry_id 1XYZ
+_pdbx_database_status.deposit_site ?
+_pdbx_database_status.process_site ?
+_pdbx_database_status.SG_entry .
+#
+loop_
+_audit_author.name
+_audit_author.pdbx_ordinal
+'Alzari, P.M.' 1
+'Spinelli, S.' 2
+'Dominguez, R.' 3
+#
+loop_
+_citation.id
+_citation.title
+_citation.journal_abbrev
+_citation.journal_volume
+_citation.page_first
+_citation.page_last
+_citation.year
+_citation.journal_id_ASTM
+_citation.country
+_citation.journal_id_ISSN
+_citation.journal_id_CSD
+_citation.book_publisher
+_citation.pdbx_database_id_PubMed
+_citation.pdbx_database_id_DOI
+primary 'A common protein fold and similar active site in two distinct families of beta-glycanases.'
+Nat.Struct.Biol. 2 569 576 1995 NSBIEW US 1072-8368 2024 ? 7664125 10.1038/nsb0795-569
+1 'Crystallization and Preliminary Diffraction Analysis of the Catalytic Domain of Xylanase Z from Clostridium Thermocellum'
+J.Mol.Biol. 235 1348 ? 1994 JMOBAK UK 0022-2836 0070 ? ? ?
+#
+loop_
+_citation_author.citation_id
+_citation_author.name
+_citation_author.ordinal
+primary 'Dominguez, R.' 1
+primary 'Souchon, H.' 2
+primary 'Spinelli, S.' 3
+primary 'Dauter, Z.' 4
+primary 'Wilson, K.S.' 5
+primary 'Chauvaux, S.' 6
+primary 'Beguin, P.' 7
+primary 'Alzari, P.M.' 8
+1 'Souchon, H.' 9
+1 'Spinelli, S.' 10
+1 'Beguin, P.' 11
+1 'Alzari, P.M.' 12
+#
+_cell.entry_id 1XYZ
+_cell.length_a 47.100
+_cell.length_b 51.100
+_cell.length_c 70.740
+_cell.angle_alpha 100.54
+_cell.angle_beta 83.79
+_cell.angle_gamma 101.64
+_cell.Z_PDB 2
+_cell.pdbx_unique_axis ?
+#
+_symmetry.entry_id 1XYZ
+_symmetry.space_group_name_H-M 'P 1'
+_symmetry.pdbx_full_space_group_name_H-M ?
+_symmetry.cell_setting ?
+_symmetry.Int_Tables_number ?
+#
+loop_
+_entity.id
+_entity.type
+_entity.src_method
+_entity.pdbx_description
+_entity.formula_weight
+_entity.pdbx_number_of_molecules
+_entity.details
+_entity.pdbx_mutation
+_entity.pdbx_fragment
+_entity.pdbx_ec
+1 polymer man 1,4-BETA-D-XYLAN-XYLANOHYDROLASE 39434.574 2 ? ? ? 3.2.1.8
+2 water nat water 18.015 457 ? ? ? ?
+#
+loop_
+_entity_keywords.entity_id
+_entity_keywords.text
+1 ?
+2 ?
+#
+loop_
+_entity_name_com.entity_id
+_entity_name_com.name
+1 'ENDO-1\,4-BETA-XYLANASE Z, XYLANASE XYNZ'
+2 ?
+#
+_entity_poly.entity_id 1
+_entity_poly.type 'polypeptide(L)'
+_entity_poly.nstd_linkage no
+_entity_poly.nstd_monomer no
+_entity_poly.pdbx_seq_one_letter_code
+;PGQGDVQTPNPSVTPTQTPIPTISGNALRDYAEARGIKIGTCVNYPFYNNSDPTYNSILQREFSMVVCENEMKFDALQPR
+QNVFDFSKGDQLLAFAERNGMQMRGHTLIWHNQNPSWLTNGNWNRDSLLAVMKNHITTVMTHYKGKIVEWDVANECMDDS
+GNGLRSSIWRNVIGQDYLDYAFRYAREADPDALLFYNDYNIEDLGPKSNAVFNMIKSMKERGVPIDGVGFQCHFINGMSP
+EYLASIDQNIKRYAEIGVIVSFTEIDIRIPQSENPATAFQVQANNYKELMKICLANPNCNTFVMWGFTDKYTWIPGTFPG
+YGNPLIYDSNYNPKPAYNAIKEALMGY
+;
+_entity_poly.pdbx_seq_one_letter_code_can
+;PGQGDVQTPNPSVTPTQTPIPTISGNALRDYAEARGIKIGTCVNYPFYNNSDPTYNSILQREFSMVVCENEMKFDALQPR
+QNVFDFSKGDQLLAFAERNGMQMRGHTLIWHNQNPSWLTNGNWNRDSLLAVMKNHITTVMTHYKGKIVEWDVANECMDDS
+GNGLRSSIWRNVIGQDYLDYAFRYAREADPDALLFYNDYNIEDLGPKSNAVFNMIKSMKERGVPIDGVGFQCHFINGMSP
+EYLASIDQNIKRYAEIGVIVSFTEIDIRIPQSENPATAFQVQANNYKELMKICLANPNCNTFVMWGFTDKYTWIPGTFPG
+YGNPLIYDSNYNPKPAYNAIKEALMGY
+;
+_entity_poly.pdbx_strand_id A,B
+#
+loop_
+_entity_poly_seq.entity_id
+_entity_poly_seq.num
+_entity_poly_seq.mon_id
+_entity_poly_seq.hetero
+1 1 PRO n
+1 2 GLY n
+1 3 GLN n
+1 4 GLY n
+1 5 ASP n
+1 6 VAL n
+1 7 GLN n
+1 8 THR n
+1 9 PRO n
+1 10 ASN n
+1 11 PRO n
+1 12 SER n
+1 13 VAL n
+1 14 THR n
+1 15 PRO n
+1 16 THR n
+1 17 GLN n
+1 18 THR n
+1 19 PRO n
+1 20 ILE n
+1 21 PRO n
+1 22 THR n
+1 23 ILE n
+1 24 SER n
+1 25 GLY n
+1 26 ASN n
+1 27 ALA n
+1 28 LEU n
+1 29 ARG n
+1 30 ASP n
+1 31 TYR n
+1 32 ALA n
+1 33 GLU n
+1 34 ALA n
+1 35 ARG n
+1 36 GLY n
+1 37 ILE n
+1 38 LYS n
+1 39 ILE n
+1 40 GLY n
+1 41 THR n
+1 42 CYS n
+1 43 VAL n
+1 44 ASN n
+1 45 TYR n
+1 46 PRO n
+1 47 PHE n
+1 48 TYR n
+1 49 ASN n
+1 50 ASN n
+1 51 SER n
+1 52 ASP n
+1 53 PRO n
+1 54 THR n
+1 55 TYR n
+1 56 ASN n
+1 57 SER n
+1 58 ILE n
+1 59 LEU n
+1 60 GLN n
+1 61 ARG n
+1 62 GLU n
+1 63 PHE n
+1 64 SER n
+1 65 MET n
+1 66 VAL n
+1 67 VAL n
+1 68 CYS n
+1 69 GLU n
+1 70 ASN n
+1 71 GLU n
+1 72 MET n
+1 73 LYS n
+1 74 PHE n
+1 75 ASP n
+1 76 ALA n
+1 77 LEU n
+1 78 GLN n
+1 79 PRO n
+1 80 ARG n
+1 81 GLN n
+1 82 ASN n
+1 83 VAL n
+1 84 PHE n
+1 85 ASP n
+1 86 PHE n
+1 87 SER n
+1 88 LYS n
+1 89 GLY n
+1 90 ASP n
+1 91 GLN n
+1 92 LEU n
+1 93 LEU n
+1 94 ALA n
+1 95 PHE n
+1 96 ALA n
+1 97 GLU n
+1 98 ARG n
+1 99 ASN n
+1 100 GLY n
+1 101 MET n
+1 102 GLN n
+1 103 MET n
+1 104 ARG n
+1 105 GLY n
+1 106 HIS n
+1 107 THR n
+1 108 LEU n
+1 109 ILE n
+1 110 TRP n
+1 111 HIS n
+1 112 ASN n
+1 113 GLN n
+1 114 ASN n
+1 115 PRO n
+1 116 SER n
+1 117 TRP n
+1 118 LEU n
+1 119 THR n
+1 120 ASN n
+1 121 GLY n
+1 122 ASN n
+1 123 TRP n
+1 124 ASN n
+1 125 ARG n
+1 126 ASP n
+1 127 SER n
+1 128 LEU n
+1 129 LEU n
+1 130 ALA n
+1 131 VAL n
+1 132 MET n
+1 133 LYS n
+1 134 ASN n
+1 135 HIS n
+1 136 ILE n
+1 137 THR n
+1 138 THR n
+1 139 VAL n
+1 140 MET n
+1 141 THR n
+1 142 HIS n
+1 143 TYR n
+1 144 LYS n
+1 145 GLY n
+1 146 LYS n
+1 147 ILE n
+1 148 VAL n
+1 149 GLU n
+1 150 TRP n
+1 151 ASP n
+1 152 VAL n
+1 153 ALA n
+1 154 ASN n
+1 155 GLU n
+1 156 CYS n
+1 157 MET n
+1 158 ASP n
+1 159 ASP n
+1 160 SER n
+1 161 GLY n
+1 162 ASN n
+1 163 GLY n
+1 164 LEU n
+1 165 ARG n
+1 166 SER n
+1 167 SER n
+1 168 ILE n
+1 169 TRP n
+1 170 ARG n
+1 171 ASN n
+1 172 VAL n
+1 173 ILE n
+1 174 GLY n
+1 175 GLN n
+1 176 ASP n
+1 177 TYR n
+1 178 LEU n
+1 179 ASP n
+1 180 TYR n
+1 181 ALA n
+1 182 PHE n
+1 183 ARG n
+1 184 TYR n
+1 185 ALA n
+1 186 ARG n
+1 187 GLU n
+1 188 ALA n
+1 189 ASP n
+1 190 PRO n
+1 191 ASP n
+1 192 ALA n
+1 193 LEU n
+1 194 LEU n
+1 195 PHE n
+1 196 TYR n
+1 197 ASN n
+1 198 ASP n
+1 199 TYR n
+1 200 ASN n
+1 201 ILE n
+1 202 GLU n
+1 203 ASP n
+1 204 LEU n
+1 205 GLY n
+1 206 PRO n
+1 207 LYS n
+1 208 SER n
+1 209 ASN n
+1 210 ALA n
+1 211 VAL n
+1 212 PHE n
+1 213 ASN n
+1 214 MET n
+1 215 ILE n
+1 216 LYS n
+1 217 SER n
+1 218 MET n
+1 219 LYS n
+1 220 GLU n
+1 221 ARG n
+1 222 GLY n
+1 223 VAL n
+1 224 PRO n
+1 225 ILE n
+1 226 ASP n
+1 227 GLY n
+1 228 VAL n
+1 229 GLY n
+1 230 PHE n
+1 231 GLN n
+1 232 CYS n
+1 233 HIS n
+1 234 PHE n
+1 235 ILE n
+1 236 ASN n
+1 237 GLY n
+1 238 MET n
+1 239 SER n
+1 240 PRO n
+1 241 GLU n
+1 242 TYR n
+1 243 LEU n
+1 244 ALA n
+1 245 SER n
+1 246 ILE n
+1 247 ASP n
+1 248 GLN n
+1 249 ASN n
+1 250 ILE n
+1 251 LYS n
+1 252 ARG n
+1 253 TYR n
+1 254 ALA n
+1 255 GLU n
+1 256 ILE n
+1 257 GLY n
+1 258 VAL n
+1 259 ILE n
+1 260 VAL n
+1 261 SER n
+1 262 PHE n
+1 263 THR n
+1 264 GLU n
+1 265 ILE n
+1 266 ASP n
+1 267 ILE n
+1 268 ARG n
+1 269 ILE n
+1 270 PRO n
+1 271 GLN n
+1 272 SER n
+1 273 GLU n
+1 274 ASN n
+1 275 PRO n
+1 276 ALA n
+1 277 THR n
+1 278 ALA n
+1 279 PHE n
+1 280 GLN n
+1 281 VAL n
+1 282 GLN n
+1 283 ALA n
+1 284 ASN n
+1 285 ASN n
+1 286 TYR n
+1 287 LYS n
+1 288 GLU n
+1 289 LEU n
+1 290 MET n
+1 291 LYS n
+1 292 ILE n
+1 293 CYS n
+1 294 LEU n
+1 295 ALA n
+1 296 ASN n
+1 297 PRO n
+1 298 ASN n
+1 299 CYS n
+1 300 ASN n
+1 301 THR n
+1 302 PHE n
+1 303 VAL n
+1 304 MET n
+1 305 TRP n
+1 306 GLY n
+1 307 PHE n
+1 308 THR n
+1 309 ASP n
+1 310 LYS n
+1 311 TYR n
+1 312 THR n
+1 313 TRP n
+1 314 ILE n
+1 315 PRO n
+1 316 GLY n
+1 317 THR n
+1 318 PHE n
+1 319 PRO n
+1 320 GLY n
+1 321 TYR n
+1 322 GLY n
+1 323 ASN n
+1 324 PRO n
+1 325 LEU n
+1 326 ILE n
+1 327 TYR n
+1 328 ASP n
+1 329 SER n
+1 330 ASN n
+1 331 TYR n
+1 332 ASN n
+1 333 PRO n
+1 334 LYS n
+1 335 PRO n
+1 336 ALA n
+1 337 TYR n
+1 338 ASN n
+1 339 ALA n
+1 340 ILE n
+1 341 LYS n
+1 342 GLU n
+1 343 ALA n
+1 344 LEU n
+1 345 MET n
+1 346 GLY n
+1 347 TYR n
+#
+_entity_src_gen.entity_id 1
+_entity_src_gen.gene_src_common_name ?
+_entity_src_gen.gene_src_genus Clostridium
+_entity_src_gen.pdbx_gene_src_gene ?
+_entity_src_gen.gene_src_species ?
+_entity_src_gen.gene_src_strain 'NCIB 10682'
+_entity_src_gen.gene_src_tissue ?
+_entity_src_gen.gene_src_tissue_fraction ?
+_entity_src_gen.gene_src_details ?
+_entity_src_gen.pdbx_gene_src_fragment ?
+_entity_src_gen.pdbx_gene_src_scientific_name 'Clostridium thermocellum'
+_entity_src_gen.pdbx_gene_src_ncbi_taxonomy_id 1515
+_entity_src_gen.pdbx_gene_src_variant ?
+_entity_src_gen.pdbx_gene_src_cell_line ?
+_entity_src_gen.pdbx_gene_src_atcc ?
+_entity_src_gen.pdbx_gene_src_organ ?
+_entity_src_gen.pdbx_gene_src_organelle ?
+_entity_src_gen.pdbx_gene_src_cell ?
+_entity_src_gen.pdbx_gene_src_cellular_location ?
+_entity_src_gen.host_org_common_name ?
+_entity_src_gen.pdbx_host_org_scientific_name 'Escherichia coli'
+_entity_src_gen.pdbx_host_org_ncbi_taxonomy_id 562
+_entity_src_gen.host_org_genus Escherichia
+_entity_src_gen.pdbx_host_org_gene ?
+_entity_src_gen.pdbx_host_org_organ ?
+_entity_src_gen.host_org_species ?
+_entity_src_gen.pdbx_host_org_tissue ?
+_entity_src_gen.pdbx_host_org_tissue_fraction ?
+_entity_src_gen.pdbx_host_org_strain ?
+_entity_src_gen.pdbx_host_org_variant ?
+_entity_src_gen.pdbx_host_org_cell_line ?
+_entity_src_gen.pdbx_host_org_atcc ?
+_entity_src_gen.pdbx_host_org_culture_collection ?
+_entity_src_gen.pdbx_host_org_cell ?
+_entity_src_gen.pdbx_host_org_organelle ?
+_entity_src_gen.pdbx_host_org_cellular_location ?
+_entity_src_gen.pdbx_host_org_vector_type ?
+_entity_src_gen.pdbx_host_org_vector ?
+_entity_src_gen.plasmid_name 'PCT1214 (PUC8)'
+_entity_src_gen.plasmid_details ?
+_entity_src_gen.pdbx_description ?
+#
+_struct_ref.id 1
+_struct_ref.db_name UNP
+_struct_ref.db_code XYNZ_CLOTM
+_struct_ref.entity_id 1
+_struct_ref.pdbx_db_accession P10478
+_struct_ref.pdbx_align_begin 1
+_struct_ref.pdbx_seq_one_letter_code
+;MSRKLFSVLLVGLMLMTSLLVTISSTSAASLPTMPPSGYDQVRNGVPRGQVVNISYFSTA
+TNSTRPARVYLPPGYSKDKKYSVLYLLHGIGGSENDWFEGGGRANVIADNLIAEGKIKPL
+IIVTPNTNAAGPGIADGYENFTKDLLNSLIPYIESNYSVYTDREHRAIAGLSMGGGQSFN
+IGLTNLDKFAYIGPISAAPNTYPNERLFPDGGKAAREKLKLLFIACGTNDSLIGFGQRVH
+EYCVANNINHVYWLIQGGGHDFNVWKPGLWNFLQMADEAGLTRDGNTPVPTPSPKPANTR
+IEAEDYDGINSSSIEIIGVPPEGGRGIGYITSGDYLVYKSIDFGNGATSFKAKVANANTS
+NIELRLNGPNGTLIGTLSVKSTGDWNTYEEQTCSISKVTGINDLYLVFKGPVNIDWFTFG
+VESSSTGLGDLNGDGNINSSDLQALKRHLLGISPLTGEALLRADVNRSGKVDSTDYSVLK
+RYILRIITEFPGQGDVQTPNPSVTPTQTPIPTISGNALRDYAEARGIKIGTCVNYPFYNN
+SDPTYNSILQREFSMVVCENEMKFDALQPRQNVFDFSKGDQLLAFAERNGMQMRGHTLIW
+HNQNPSWLTNGNWNRDSLLAVMKNHITTVMTHYKGKIVEWDVANECMDDSGNGLRSSIWR
+NVIGQDYLDYAFRYAREADPDALLFYNDYNIEDLGPKSNAVFNMIKSMKERGVPIDGVGF
+QCHFINGMSPEYLASIDQNIKRYAEIGVIVSFTEIDIRIPQSENPATAFQVQANNYKELM
+KICLANPNCNTFVMWGFTDKYTWIPGTFPGYGNPLIYDSNYNPKPAYNAIKEALMGY
+
+;
+_struct_ref.biol_id .
+#
+loop_
+_struct_ref_seq.align_id
+_struct_ref_seq.ref_id
+_struct_ref_seq.pdbx_PDB_id_code
+_struct_ref_seq.pdbx_strand_id
+_struct_ref_seq.seq_align_beg
+_struct_ref_seq.pdbx_seq_align_beg_ins_code
+_struct_ref_seq.seq_align_end
+_struct_ref_seq.pdbx_seq_align_end_ins_code
+_struct_ref_seq.pdbx_db_accession
+_struct_ref_seq.db_align_beg
+_struct_ref_seq.pdbx_db_align_beg_ins_code
+_struct_ref_seq.db_align_end
+_struct_ref_seq.pdbx_db_align_end_ins_code
+_struct_ref_seq.pdbx_auth_seq_align_beg
+_struct_ref_seq.pdbx_auth_seq_align_end
+1 1 1XYZ A 1 ? 347 ? P10478 491 ? 837 ? 491 837
+2 1 1XYZ B 1 ? 347 ? P10478 491 ? 837 ? 491 837
+#
+loop_
+_chem_comp.id
+_chem_comp.type
+_chem_comp.mon_nstd_flag
+_chem_comp.name
+_chem_comp.pdbx_synonyms
+_chem_comp.formula
+_chem_comp.formula_weight
+ASN 'L-peptide linking' y ASPARAGINE ? 'C4 H8 N2 O3' 132.119
+ALA 'L-peptide linking' y ALANINE ? 'C3 H7 N O2' 89.094
+LEU 'L-peptide linking' y LEUCINE ? 'C6 H13 N O2' 131.174
+ARG 'L-peptide linking' y ARGININE ? 'C6 H15 N4 O2 1' 175.210
+ASP 'L-peptide linking' y 'ASPARTIC ACID' ? 'C4 H7 N O4' 133.104
+TYR 'L-peptide linking' y TYROSINE ? 'C9 H11 N O3' 181.191
+GLU 'L-peptide linking' y 'GLUTAMIC ACID' ? 'C5 H9 N O4' 147.130
+GLY 'PEPTIDE LINKING' y GLYCINE ? 'C2 H5 N O2' 75.067
+ILE 'L-peptide linking' y ISOLEUCINE ? 'C6 H13 N O2' 131.174
+LYS 'L-peptide linking' y LYSINE ? 'C6 H15 N2 O2 1' 147.197
+THR 'L-peptide linking' y THREONINE ? 'C4 H9 N O3' 119.120
+CYS 'L-peptide linking' y CYSTEINE ? 'C3 H7 N O2 S' 121.154
+VAL 'L-peptide linking' y VALINE ? 'C5 H11 N O2' 117.147
+PRO 'L-peptide linking' y PROLINE ? 'C5 H9 N O2' 115.132
+PHE 'L-peptide linking' y PHENYLALANINE ? 'C9 H11 N O2' 165.191
+SER 'L-peptide linking' y SERINE ? 'C3 H7 N O3' 105.093
+GLN 'L-peptide linking' y GLUTAMINE ? 'C5 H10 N2 O3' 146.146
+MET 'L-peptide linking' y METHIONINE ? 'C5 H11 N O2 S' 149.207
+HIS 'L-peptide linking' y HISTIDINE ? 'C6 H10 N3 O2 1' 156.164
+TRP 'L-peptide linking' y TRYPTOPHAN ? 'C11 H12 N2 O2' 204.228
+HOH NON-POLYMER . WATER ? 'H2 O' 18.015
+#
+_exptl.entry_id 1XYZ
+_exptl.method 'X-RAY DIFFRACTION'
+_exptl.crystals_number 1
+#
+_exptl_crystal.id 1
+_exptl_crystal.density_meas ?
+_exptl_crystal.density_Matthews 2.07
+_exptl_crystal.density_percent_sol 40.63
+_exptl_crystal.description ?
+#
+_diffrn.id 1
+_diffrn.ambient_temp ?
+_diffrn.ambient_temp_details ?
+_diffrn.crystal_id 1
+#
+_diffrn_detector.diffrn_id 1
+_diffrn_detector.detector 'IMAGE PLATE'
+_diffrn_detector.type MARRESEARCH
+_diffrn_detector.pdbx_collection_date 1993-11
+_diffrn_detector.details ?
+#
+_diffrn_radiation.diffrn_id 1
+_diffrn_radiation.wavelength_id 1
+_diffrn_radiation.pdbx_monochromatic_or_laue_m_l M
+_diffrn_radiation.monochromator ?
+_diffrn_radiation.pdbx_diffrn_protocol ?
+_diffrn_radiation.pdbx_scattering_type x-ray
+#
+_diffrn_radiation_wavelength.id 1
+_diffrn_radiation_wavelength.wavelength 0.92
+_diffrn_radiation_wavelength.wt 1.0
+#
+_diffrn_source.diffrn_id 1
+_diffrn_source.source SYNCHROTRON
+_diffrn_source.type 'EMBL/DESY, HAMBURG BEAMLINE X31'
+_diffrn_source.pdbx_synchrotron_site 'EMBL/DESY, HAMBURG'
+_diffrn_source.pdbx_synchrotron_beamline X31
+_diffrn_source.pdbx_wavelength ?
+_diffrn_source.pdbx_wavelength_list 0.92
+#
+_reflns.entry_id 1XYZ
+_reflns.observed_criterion_sigma_I ?
+_reflns.observed_criterion_sigma_F ?
+_reflns.d_resolution_low ?
+_reflns.d_resolution_high ?
+_reflns.number_obs 11704
+_reflns.number_all ?
+_reflns.percent_possible_obs 96.4
+_reflns.pdbx_Rmerge_I_obs 0.083
+_reflns.pdbx_Rsym_value ?
+_reflns.pdbx_netI_over_sigmaI ?
+_reflns.B_iso_Wilson_estimate ?
+_reflns.pdbx_redundancy 2.9
+_reflns.pdbx_ordinal 1
+_reflns.pdbx_diffrn_id 1
+#
+_computing.entry_id 1XYZ
+_computing.pdbx_data_reduction_ii DENZO
+_computing.pdbx_data_reduction_ds ?
+_computing.data_collection ?
+_computing.structure_solution 'ARP/WARP, X-PLOR'
+_computing.structure_refinement 'ARP/WARP, X-PLOR'
+_computing.pdbx_structure_refinement_method ?
+#
+_refine.entry_id 1XYZ
+_refine.ls_number_reflns_obs 117046
+_refine.ls_number_reflns_all ?
+_refine.pdbx_ls_sigma_I ?
+_refine.pdbx_ls_sigma_F 0.0
+_refine.pdbx_data_cutoff_high_absF ?
+_refine.pdbx_data_cutoff_low_absF ?
+_refine.pdbx_data_cutoff_high_rms_absF ?
+_refine.ls_d_res_low 10.0
+_refine.ls_d_res_high 1.4
+_refine.ls_percent_reflns_obs ?
+_refine.ls_R_factor_obs 0.183
+_refine.ls_R_factor_all ?
+_refine.ls_R_factor_R_work 0.183
+_refine.ls_R_factor_R_free 0.221
+_refine.ls_R_factor_R_free_error ?
+_refine.ls_R_factor_R_free_error_details ?
+_refine.ls_percent_reflns_R_free ?
+_refine.ls_number_reflns_R_free ?
+_refine.ls_number_parameters ?
+_refine.ls_number_restraints ?
+_refine.occupancy_min ?
+_refine.occupancy_max ?
+_refine.B_iso_mean ?
+_refine.aniso_B[1][1] ?
+_refine.aniso_B[2][2] ?
+_refine.aniso_B[3][3] ?
+_refine.aniso_B[1][2] ?
+_refine.aniso_B[1][3] ?
+_refine.aniso_B[2][3] ?
+_refine.solvent_model_details ?
+_refine.solvent_model_param_ksol ?
+_refine.solvent_model_param_bsol ?
+_refine.pdbx_ls_cross_valid_method ?
+_refine.details ?
+_refine.pdbx_starting_model ?
+_refine.pdbx_method_to_determine_struct ?
+_refine.pdbx_isotropic_thermal_model ?
+_refine.pdbx_stereochemistry_target_values ?
+_refine.pdbx_stereochem_target_val_spec_case ?
+_refine.pdbx_R_Free_selection_details ?
+_refine.pdbx_overall_ESU_R ?
+_refine.pdbx_overall_ESU_R_Free ?
+_refine.overall_SU_ML ?
+_refine.overall_SU_B ?
+_refine.pdbx_refine_id 'X-RAY DIFFRACTION'
+_refine.pdbx_diffrn_id 1
+#
+_refine_hist.pdbx_refine_id 'X-RAY DIFFRACTION'
+_refine_hist.cycle_id LAST
+_refine_hist.pdbx_number_atoms_protein 5164
+_refine_hist.pdbx_number_atoms_nucleic_acid 0
+_refine_hist.pdbx_number_atoms_ligand 0
+_refine_hist.number_atoms_solvent 457
+_refine_hist.number_atoms_total 5621
+_refine_hist.d_res_high 1.4
+_refine_hist.d_res_low 10.0
+#
+loop_
+_refine_ls_restr.type
+_refine_ls_restr.dev_ideal
+_refine_ls_restr.dev_ideal_target
+_refine_ls_restr.weight
+_refine_ls_restr.number
+_refine_ls_restr.pdbx_refine_id
+x_bond_d 0.015 ? ? ? 'X-RAY DIFFRACTION'
+x_bond_d_na ? ? ? ? 'X-RAY DIFFRACTION'
+x_bond_d_prot ? ? ? ? 'X-RAY DIFFRACTION'
+x_angle_d ? ? ? ? 'X-RAY DIFFRACTION'
+x_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION'
+x_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION'
+x_angle_deg 1.61 ? ? ? 'X-RAY DIFFRACTION'
+x_angle_deg_na ? ? ? ? 'X-RAY DIFFRACTION'
+x_angle_deg_prot ? ? ? ? 'X-RAY DIFFRACTION'
+x_dihedral_angle_d 23.2 ? ? ? 'X-RAY DIFFRACTION'
+x_dihedral_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION'
+x_dihedral_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION'
+x_improper_angle_d 1.58 ? ? ? 'X-RAY DIFFRACTION'
+x_improper_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION'
+x_improper_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION'
+x_mcbond_it ? ? ? ? 'X-RAY DIFFRACTION'
+x_mcangle_it ? ? ? ? 'X-RAY DIFFRACTION'
+x_scbond_it ? ? ? ? 'X-RAY DIFFRACTION'
+x_scangle_it ? ? ? ? 'X-RAY DIFFRACTION'
+#
+_struct_ncs_oper.id 1
+_struct_ncs_oper.code given
+_struct_ncs_oper.details ?
+_struct_ncs_oper.matrix[1][1] -0.999970
+_struct_ncs_oper.matrix[1][2] 0.003570
+_struct_ncs_oper.matrix[1][3] 0.006220
+_struct_ncs_oper.matrix[2][1] 0.006340
+_struct_ncs_oper.matrix[2][2] 0.034090
+_struct_ncs_oper.matrix[2][3] 0.999400
+_struct_ncs_oper.matrix[3][1] 0.003360
+_struct_ncs_oper.matrix[3][2] 0.999410
+_struct_ncs_oper.matrix[3][3] -0.034110
+_struct_ncs_oper.vector[1] 23.67979
+_struct_ncs_oper.vector[2] -4.45463
+_struct_ncs_oper.vector[3] 56.27028
+#
+_struct.entry_id 1XYZ
+_struct.title 'A COMMON PROTEIN FOLD AND SIMILAR ACTIVE SITE IN TWO DISTINCT FAMILIES OF BETA-GLYCANASES'
+_struct.pdbx_descriptor 1,4-BETA-D-XYLAN-XYLANOHYDROLASE
+_struct.pdbx_model_details ?
+_struct.pdbx_CASP_flag ?
+_struct.pdbx_model_type_details ?
+#
+_struct_keywords.entry_id 1XYZ
+_struct_keywords.pdbx_keywords GLYCOSYLTRANSFERASE
+_struct_keywords.text
+'GLYCOSYL HYDROLASE, XYLANASE, FAMILY F/10 OF GLYCOSYL HYDROLASES, CLOSTRIDIUM THERMOCELLUM, GLYCOSYLTRANSFERASE'
+#
+loop_
+_struct_asym.id
+_struct_asym.pdbx_blank_PDB_chainid_flag
+_struct_asym.pdbx_modified
+_struct_asym.entity_id
+_struct_asym.details
+A N N 1 ?
+B N N 1 ?
+C N N 2 ?
+D N N 2 ?
+#
+loop_
+_struct_biol.id
+_struct_biol.details
+_struct_biol.pdbx_parent_biol_id
+1
+;MTRIX
+ THE TRANSFORMATIONS PRESENTED ON MTRIX RECORDS BELOW
+ DESCRIBE NON-CRYSTALLOGRAPHIC RELATIONSHIPS AMONG THE
+ VARIOUS DOMAINS IN THIS ENTRY. APPLYING THE APPROPRIATE
+ MTRIX TRANSFORMATION TO THE RESIDUES LISTED FIRST WILL
+ YIELD APPROXIMATE COORDINATES FOR THE RESIDUES LISTED
+ SECOND.
+
+ APPLIED TO TRANSFORMED TO
+ MTRIX RESIDUES RESIDUES RMSD
+ M1 A 516 .. A 835 B 516 .. B 835 0.287
+;
+?
+2 ? ?
+#
+loop_
+_struct_conf.conf_type_id
+_struct_conf.id
+_struct_conf.pdbx_PDB_helix_id
+_struct_conf.beg_label_comp_id
+_struct_conf.beg_label_asym_id
+_struct_conf.beg_label_seq_id
+_struct_conf.pdbx_beg_PDB_ins_code
+_struct_conf.end_label_comp_id
+_struct_conf.end_label_asym_id
+_struct_conf.end_label_seq_id
+_struct_conf.pdbx_end_PDB_ins_code
+_struct_conf.beg_auth_comp_id
+_struct_conf.beg_auth_asym_id
+_struct_conf.beg_auth_seq_id
+_struct_conf.end_auth_comp_id
+_struct_conf.end_auth_asym_id
+_struct_conf.end_auth_seq_id
+_struct_conf.pdbx_PDB_helix_class
+_struct_conf.details
+_struct_conf.pdbx_PDB_helix_length
+HELX_P HELX_P1 1 LEU A 28 ? ARG A 35 ? LEU A 518 ARG A 525 1 ? 8
+HELX_P HELX_P2 2 TYR A 45 ? ASN A 49 ? TYR A 535 ASN A 539 5 ? 5
+HELX_P HELX_P3 3 PRO A 53 ? GLU A 62 ? PRO A 543 GLU A 552 1 ? 10
+HELX_P HELX_P4 4 PHE A 74 ? LEU A 77 ? PHE A 564 LEU A 567 1 ? 4
+HELX_P HELX_P5 5 SER A 87 ? ASN A 99 ? SER A 577 ASN A 589 1 ? 13
+HELX_P HELX_P6 6 SER A 116 ? THR A 119 ? SER A 606 THR A 609 1 ? 4
+HELX_P HELX_P7 7 ARG A 125 ? HIS A 142 ? ARG A 615 HIS A 632 1 ? 18
+HELX_P HELX_P8 8 ILE A 168 ? ILE A 173 ? ILE A 658 ILE A 663 1 ? 6
+HELX_P HELX_P9 9 TYR A 177 ? ALA A 188 ? TYR A 667 ALA A 678 1 ? 12
+HELX_P HELX_P10 10 PRO A 206 ? ARG A 221 ? PRO A 696 ARG A 711 1 ? 16
+HELX_P HELX_P11 11 PRO A 240 ? ILE A 256 ? PRO A 730 ILE A 746 1 ? 17
+HELX_P HELX_P12 12 PRO A 275 ? ALA A 295 ? PRO A 765 ALA A 785 1 ? 21
+HELX_P HELX_P13 13 ILE A 314 ? THR A 317 ? ILE A 804 THR A 807 1 ? 4
+HELX_P HELX_P14 14 PRO A 335 ? LEU A 344 ? PRO A 825 LEU A 834 1 ? 10
+HELX_P HELX_P15 15 LEU B 28 ? ARG B 35 ? LEU B 518 ARG B 525 1 ? 8
+HELX_P HELX_P16 16 TYR B 45 ? ASN B 49 ? TYR B 535 ASN B 539 5 ? 5
+HELX_P HELX_P17 17 PRO B 53 ? GLU B 62 ? PRO B 543 GLU B 552 1 ? 10
+HELX_P HELX_P18 18 PHE B 74 ? LEU B 77 ? PHE B 564 LEU B 567 1 ? 4
+HELX_P HELX_P19 19 SER B 87 ? ASN B 99 ? SER B 577 ASN B 589 1 ? 13
+HELX_P HELX_P20 20 SER B 116 ? THR B 119 ? SER B 606 THR B 609 1 ? 4
+HELX_P HELX_P21 21 ARG B 125 ? HIS B 142 ? ARG B 615 HIS B 632 1 ? 18
+HELX_P HELX_P22 22 ILE B 168 ? ILE B 173 ? ILE B 658 ILE B 663 1 ? 6
+HELX_P HELX_P23 23 TYR B 177 ? ALA B 188 ? TYR B 667 ALA B 678 1 ? 12
+HELX_P HELX_P24 24 PRO B 206 ? GLU B 220 ? PRO B 696 GLU B 710 1 ? 15
+HELX_P HELX_P25 25 PRO B 240 ? ILE B 256 ? PRO B 730 ILE B 746 1 ? 17
+HELX_P HELX_P26 26 PRO B 275 ? ALA B 295 ? PRO B 765 ALA B 785 1 ? 21
+HELX_P HELX_P27 27 ILE B 314 ? THR B 317 ? ILE B 804 THR B 807 1 ? 4
+HELX_P HELX_P28 28 PRO B 335 ? ALA B 343 ? PRO B 825 ALA B 833 1 ? 9
+#
+_struct_conf_type.id HELX_P
+_struct_conf_type.criteria ?
+_struct_conf_type.reference ?
+#
+loop_
+_struct_mon_prot_cis.pdbx_id
+_struct_mon_prot_cis.label_comp_id
+_struct_mon_prot_cis.label_seq_id
+_struct_mon_prot_cis.label_asym_id
+_struct_mon_prot_cis.label_alt_id
+_struct_mon_prot_cis.pdbx_PDB_ins_code
+_struct_mon_prot_cis.auth_comp_id
+_struct_mon_prot_cis.auth_seq_id
+_struct_mon_prot_cis.auth_asym_id
+_struct_mon_prot_cis.pdbx_label_comp_id_2
+_struct_mon_prot_cis.pdbx_label_seq_id_2
+_struct_mon_prot_cis.pdbx_label_asym_id_2
+_struct_mon_prot_cis.pdbx_PDB_ins_code_2
+_struct_mon_prot_cis.pdbx_auth_comp_id_2
+_struct_mon_prot_cis.pdbx_auth_seq_id_2
+_struct_mon_prot_cis.pdbx_auth_asym_id_2
+_struct_mon_prot_cis.pdbx_PDB_model_num
+_struct_mon_prot_cis.pdbx_omega_angle
+1 HIS 106 A . ? HIS 596 A THR 107 A ? THR 597 A 1 0.11
+2 HIS 106 B . ? HIS 596 B THR 107 B ? THR 597 B 1 0.29
+#
+loop_
+_struct_sheet.id
+_struct_sheet.type
+_struct_sheet.number_strands
+_struct_sheet.details
+A ? 8 ?
+B ? 2 ?
+C ? 8 ?
+D ? 2 ?
+#
+loop_
+_struct_sheet_order.sheet_id
+_struct_sheet_order.range_id_1
+_struct_sheet_order.range_id_2
+_struct_sheet_order.offset
+_struct_sheet_order.sense
+A 1 2 ? parallel
+A 2 3 ? parallel
+A 3 4 ? parallel
+A 4 5 ? parallel
+A 5 6 ? parallel
+A 6 7 ? parallel
+A 7 8 ? parallel
+B 1 2 ? parallel
+C 1 2 ? parallel
+C 2 3 ? parallel
+C 3 4 ? parallel
+C 4 5 ? parallel
+C 5 6 ? parallel
+C 6 7 ? parallel
+C 7 8 ? parallel
+D 1 2 ? parallel
+#
+loop_
+_struct_sheet_range.sheet_id
+_struct_sheet_range.id
+_struct_sheet_range.beg_label_comp_id
+_struct_sheet_range.beg_label_asym_id
+_struct_sheet_range.beg_label_seq_id
+_struct_sheet_range.pdbx_beg_PDB_ins_code
+_struct_sheet_range.end_label_comp_id
+_struct_sheet_range.end_label_asym_id
+_struct_sheet_range.end_label_seq_id
+_struct_sheet_range.pdbx_end_PDB_ins_code
+_struct_sheet_range.symmetry
+_struct_sheet_range.beg_auth_comp_id
+_struct_sheet_range.beg_auth_asym_id
+_struct_sheet_range.beg_auth_seq_id
+_struct_sheet_range.end_auth_comp_id
+_struct_sheet_range.end_auth_asym_id
+_struct_sheet_range.end_auth_seq_id
+A 1 GLN A 102 ? ARG A 104 ? ? GLN A 592 ARG A 594
+A 2 MET A 65 ? CYS A 68 ? ? MET A 555 CYS A 558
+A 3 LYS A 38 ? VAL A 43 ? ? LYS A 528 VAL A 533
+A 4 CYS A 299 ? MET A 304 ? ? CYS A 789 MET A 794
+A 5 ILE A 259 ? PHE A 262 ? ? ILE A 749 PHE A 752
+A 6 GLY A 227 ? PHE A 230 ? ? GLY A 717 PHE A 720
+A 7 LEU A 193 ? ASP A 198 ? ? LEU A 683 ASP A 688
+A 8 GLU A 149 ? ASN A 154 ? ? GLU A 639 ASN A 644
+B 1 HIS A 233 ? ILE A 235 ? ? HIS A 723 ILE A 725
+B 2 ASP A 266 ? ARG A 268 ? ? ASP A 756 ARG A 758
+C 1 GLN B 102 ? ARG B 104 ? ? GLN B 592 ARG B 594
+C 2 MET B 65 ? CYS B 68 ? ? MET B 555 CYS B 558
+C 3 LYS B 38 ? VAL B 43 ? ? LYS B 528 VAL B 533
+C 4 CYS B 299 ? MET B 304 ? ? CYS B 789 MET B 794
+C 5 ILE B 259 ? PHE B 262 ? ? ILE B 749 PHE B 752
+C 6 GLY B 227 ? PHE B 230 ? ? GLY B 717 PHE B 720
+C 7 LEU B 193 ? ASP B 198 ? ? LEU B 683 ASP B 688
+C 8 GLU B 149 ? ASN B 154 ? ? GLU B 639 ASN B 644
+D 1 HIS B 233 ? ILE B 235 ? ? HIS B 723 ILE B 725
+D 2 ASP B 266 ? ARG B 268 ? ? ASP B 756 ARG B 758
+#
+loop_
+_pdbx_struct_sheet_hbond.sheet_id
+_pdbx_struct_sheet_hbond.range_id_1
+_pdbx_struct_sheet_hbond.range_id_2
+_pdbx_struct_sheet_hbond.range_1_label_atom_id
+_pdbx_struct_sheet_hbond.range_1_label_comp_id
+_pdbx_struct_sheet_hbond.range_1_label_asym_id
+_pdbx_struct_sheet_hbond.range_1_label_seq_id
+_pdbx_struct_sheet_hbond.range_1_PDB_ins_code
+_pdbx_struct_sheet_hbond.range_1_auth_atom_id
+_pdbx_struct_sheet_hbond.range_1_auth_comp_id
+_pdbx_struct_sheet_hbond.range_1_auth_asym_id
+_pdbx_struct_sheet_hbond.range_1_auth_seq_id
+_pdbx_struct_sheet_hbond.range_2_label_atom_id
+_pdbx_struct_sheet_hbond.range_2_label_comp_id
+_pdbx_struct_sheet_hbond.range_2_label_asym_id
+_pdbx_struct_sheet_hbond.range_2_label_seq_id
+_pdbx_struct_sheet_hbond.range_2_PDB_ins_code
+_pdbx_struct_sheet_hbond.range_2_auth_atom_id
+_pdbx_struct_sheet_hbond.range_2_auth_comp_id
+_pdbx_struct_sheet_hbond.range_2_auth_asym_id
+_pdbx_struct_sheet_hbond.range_2_auth_seq_id
+A 1 2 O GLN A 102 ? O GLN A 592 N VAL A 66 ? N VAL A 556
+A 2 3 O MET A 65 ? O MET A 555 N THR A 41 ? N THR A 531
+A 3 4 O LYS A 38 ? O LYS A 528 N PHE A 302 ? N PHE A 792
+A 4 5 O ASN A 300 ? O ASN A 790 N VAL A 260 ? N VAL A 750
+A 5 6 O ILE A 259 ? O ILE A 749 N VAL A 228 ? N VAL A 718
+A 6 7 O GLY A 227 ? O GLY A 717 N TYR A 196 ? N TYR A 686
+A 7 8 O LEU A 193 ? O LEU A 683 N TRP A 150 ? N TRP A 640
+B 1 2 O PHE A 234 ? O PHE A 724 N ASP A 266 ? N ASP A 756
+C 1 2 O GLN B 102 ? O GLN B 592 N VAL B 66 ? N VAL B 556
+C 2 3 O MET B 65 ? O MET B 555 N THR B 41 ? N THR B 531
+C 3 4 O LYS B 38 ? O LYS B 528 N PHE B 302 ? N PHE B 792
+C 4 5 O ASN B 300 ? O ASN B 790 N VAL B 260 ? N VAL B 750
+C 5 6 O ILE B 259 ? O ILE B 749 N VAL B 228 ? N VAL B 718
+C 6 7 O GLY B 227 ? O GLY B 717 N TYR B 196 ? N TYR B 686
+C 7 8 O LEU B 193 ? O LEU B 683 N TRP B 150 ? N TRP B 640
+D 1 2 O PHE B 234 ? O PHE B 724 N ASP B 266 ? N ASP B 756
+#
+_database_PDB_matrix.entry_id 1XYZ
+_database_PDB_matrix.origx[1][1] 1.000000
+_database_PDB_matrix.origx[1][2] 0.000000
+_database_PDB_matrix.origx[1][3] 0.000000
+_database_PDB_matrix.origx[2][1] 0.000000
+_database_PDB_matrix.origx[2][2] 1.000000
+_database_PDB_matrix.origx[2][3] 0.000000
+_database_PDB_matrix.origx[3][1] 0.000000
+_database_PDB_matrix.origx[3][2] 0.000000
+_database_PDB_matrix.origx[3][3] 1.000000
+_database_PDB_matrix.origx_vector[1] 0.00000
+_database_PDB_matrix.origx_vector[2] 0.00000
+_database_PDB_matrix.origx_vector[3] 0.00000
+#
+_atom_sites.entry_id 1XYZ
+_atom_sites.Cartn_transform_axes ?
+_atom_sites.fract_transf_matrix[1][1] 0.021231
+_atom_sites.fract_transf_matrix[1][2] 0.004374
+_atom_sites.fract_transf_matrix[1][3] -0.001609
+_atom_sites.fract_transf_matrix[2][1] 0.000000
+_atom_sites.fract_transf_matrix[2][2] 0.019980
+_atom_sites.fract_transf_matrix[2][3] 0.003352
+_atom_sites.fract_transf_matrix[3][1] 0.000000
+_atom_sites.fract_transf_matrix[3][2] 0.000000
+_atom_sites.fract_transf_matrix[3][3] 0.014418
+_atom_sites.fract_transf_vector[1] 0.00000
+_atom_sites.fract_transf_vector[2] 0.00000
+_atom_sites.fract_transf_vector[3] 0.00000
+#
+loop_
+_atom_sites_footnote.id
+_atom_sites_footnote.text
+1 'HIS A 596 - THR A 597 OMEGA = 0.11 PEPTIDE BOND DEVIATES SIGNIFICANTLY FROM TRANS CONFORMATION'
+2 'HIS B 596 - THR B 597 OMEGA = 0.29 PEPTIDE BOND DEVIATES SIGNIFICANTLY FROM TRANS CONFORMATION'
+#
+loop_
+_atom_type.symbol
+N
+C
+O
+S
+#
+loop_
+_atom_site.group_PDB
+_atom_site.id
+_atom_site.type_symbol
+_atom_site.label_atom_id
+_atom_site.label_alt_id
+_atom_site.label_comp_id
+_atom_site.label_asym_id
+_atom_site.label_entity_id
+_atom_site.label_seq_id
+_atom_site.pdbx_PDB_ins_code
+_atom_site.Cartn_x
+_atom_site.Cartn_y
+_atom_site.Cartn_z
+_atom_site.occupancy
+_atom_site.B_iso_or_equiv
+_atom_site.Cartn_x_esd
+_atom_site.Cartn_y_esd
+_atom_site.Cartn_z_esd
+_atom_site.occupancy_esd
+_atom_site.B_iso_or_equiv_esd
+_atom_site.pdbx_formal_charge
+_atom_site.auth_seq_id
+_atom_site.auth_comp_id
+_atom_site.auth_asym_id
+_atom_site.auth_atom_id
+_atom_site.pdbx_PDB_model_num
+ATOM 1 N N . ASN A 1 26 ? 41.511 25.152 36.876 1.00 22.29 ? ? ? ? ? ? 516 ASN A N 1
+ATOM 2 C CA . ASN A 1 26 ? 40.907 25.555 35.563 1.00 21.77 ? ? ? ? ? ? 516 ASN A CA 1
+ATOM 3 C C . ASN A 1 26 ? 39.684 24.707 35.106 1.00 19.45 ? ? ? ? ? ? 516 ASN A C 1
+ATOM 4 O O . ASN A 1 26 ? 39.191 24.916 34.001 1.00 18.37 ? ? ? ? ? ? 516 ASN A O 1
+ATOM 5 C CB . ASN A 1 26 ? 41.970 25.570 34.422 1.00 25.18 ? ? ? ? ? ? 516 ASN A CB 1
+ATOM 6 C CG . ASN A 1 26 ? 43.166 26.528 34.694 1.00 28.53 ? ? ? ? ? ? 516 ASN A CG 1
+ATOM 7 O OD1 . ASN A 1 26 ? 43.247 27.183 35.761 1.00 31.23 ? ? ? ? ? ? 516 ASN A OD1 1
+ATOM 8 N ND2 . ASN A 1 26 ? 44.122 26.565 33.756 1.00 28.63 ? ? ? ? ? ? 516 ASN A ND2 1
+ATOM 9 N N . ALA A 1 27 ? 39.186 23.778 35.939 1.00 15.70 ? ? ? ? ? ? 517 ALA A N 1
+ATOM 10 C CA . ALA A 1 27 ? 38.027 22.952 35.538 1.00 14.27 ? ? ? ? ? ? 517 ALA A CA 1
+ATOM 11 C C . ALA A 1 27 ? 36.730 23.719 35.746 1.00 12.59 ? ? ? ? ? ? 517 ALA A C 1
+ATOM 12 O O . ALA A 1 27 ? 36.707 24.699 36.480 1.00 12.14 ? ? ? ? ? ? 517 ALA A O 1
+ATOM 13 C CB . ALA A 1 27 ? 37.986 21.654 36.326 1.00 14.12 ? ? ? ? ? ? 517 ALA A CB 1
+ATOM 14 N N . LEU A 1 28 ? 35.647 23.273 35.115 1.00 11.39 ? ? ? ? ? ? 518 LEU A N 1
+ATOM 15 C CA . LEU A 1 28 ? 34.366 23.944 35.280 1.00 11.22 ? ? ? ? ? ? 518 LEU A CA 1
+ATOM 16 C C . LEU A 1 28 ? 33.984 24.033 36.768 1.00 10.88 ? ? ? ? ? ? 518 LEU A C 1
+ATOM 17 O O . LEU A 1 28 ? 33.537 25.080 37.228 1.00 11.47 ? ? ? ? ? ? 518 LEU A O 1
+ATOM 18 C CB . LEU A 1 28 ? 33.276 23.197 34.525 1.00 11.98 ? ? ? ? ? ? 518 LEU A CB 1
+ATOM 19 C CG . LEU A 1 28 ? 33.253 23.288 33.007 1.00 12.97 ? ? ? ? ? ? 518 LEU A CG 1
+ATOM 20 C CD1 . LEU A 1 28 ? 32.199 22.294 32.471 1.00 13.61 ? ? ? ? ? ? 518 LEU A CD1 1
+ATOM 21 C CD2 . LEU A 1 28 ? 32.943 24.720 32.590 1.00 13.01 ? ? ? ? ? ? 518 LEU A CD2 1
+ATOM 22 N N . ARG A 1 29 ? 34.201 22.959 37.533 1.00 10.76 ? ? ? ? ? ? 519 ARG A N 1
+ATOM 23 C CA . ARG A 1 29 ? 33.856 22.980 38.959 1.00 11.30 ? ? ? ? ? ? 519 ARG A CA 1
+ATOM 24 C C . ARG A 1 29 ? 34.623 24.033 39.770 1.00 13.05 ? ? ? ? ? ? 519 ARG A C 1
+ATOM 25 O O . ARG A 1 29 ? 34.129 24.518 40.770 1.00 13.26 ? ? ? ? ? ? 519 ARG A O 1
+ATOM 26 C CB . ARG A 1 29 ? 34.047 21.612 39.610 1.00 11.25 ? ? ? ? ? ? 519 ARG A CB 1
+ATOM 27 C CG . ARG A 1 29 ? 35.464 21.144 39.631 1.00 12.52 ? ? ? ? ? ? 519 ARG A CG 1
+ATOM 28 C CD . ARG A 1 29 ? 35.624 19.805 40.289 1.00 15.25 ? ? ? ? ? ? 519 ARG A CD 1
+ATOM 29 N NE . ARG A 1 29 ? 35.222 19.856 41.678 1.00 17.64 ? ? ? ? ? ? 519 ARG A NE 1
+ATOM 30 C CZ . ARG A 1 29 ? 35.125 18.774 42.447 1.00 19.57 ? ? ? ? ? ? 519 ARG A CZ 1
+ATOM 31 N NH1 . ARG A 1 29 ? 35.403 17.566 41.943 1.00 20.77 ? ? ? ? ? ? 519 ARG A NH1 1
+ATOM 32 N NH2 . ARG A 1 29 ? 34.757 18.903 43.707 1.00 20.67 ? ? ? ? ? ? 519 ARG A NH2 1
+ATOM 33 N N . ASP A 1 30 ? 35.818 24.409 39.330 1.00 13.66 ? ? ? ? ? ? 520 ASP A N 1
+ATOM 34 C CA . ASP A 1 30 ? 36.605 25.420 40.057 1.00 15.27 ? ? ? ? ? ? 520 ASP A CA 1
+ATOM 35 C C . ASP A 1 30 ? 35.994 26.819 39.900 1.00 15.32 ? ? ? ? ? ? 520 ASP A C 1
+ATOM 36 O O . ASP A 1 30 ? 35.875 27.572 40.864 1.00 16.59 ? ? ? ? ? ? 520 ASP A O 1
+ATOM 37 C CB . ASP A 1 30 ? 38.056 25.409 39.563 1.00 16.63 ? ? ? ? ? ? 520 ASP A CB 1
+ATOM 38 C CG . ASP A 1 30 ? 38.717 24.070 39.771 1.00 18.58 ? ? ? ? ? ? 520 ASP A CG 1
+ATOM 39 O OD1 . ASP A 1 30 ? 38.507 23.499 40.860 1.00 20.36 ? ? ? ? ? ? 520 ASP A OD1 1
+ATOM 40 O OD2 . ASP A 1 30 ? 39.409 23.562 38.864 1.00 18.95 ? ? ? ? ? ? 520 ASP A OD2 1
+ATOM 41 N N . TYR A 1 31 ? 35.607 27.159 38.680 1.00 14.43 ? ? ? ? ? ? 521 TYR A N 1
+ATOM 42 C CA . TYR A 1 31 ? 34.999 28.446 38.424 1.00 15.53 ? ? ? ? ? ? 521 TYR A CA 1
+ATOM 43 C C . TYR A 1 31 ? 33.606 28.496 39.035 1.00 15.66 ? ? ? ? ? ? 521 TYR A C 1
+ATOM 44 O O . TYR A 1 31 ? 33.161 29.542 39.518 1.00 15.87 ? ? ? ? ? ? 521 TYR A O 1
+ATOM 45 C CB . TYR A 1 31 ? 34.936 28.692 36.930 1.00 17.67 ? ? ? ? ? ? 521 TYR A CB 1
+ATOM 46 C CG . TYR A 1 31 ? 36.303 28.908 36.363 1.00 21.57 ? ? ? ? ? ? 521 TYR A CG 1
+ATOM 47 C CD1 . TYR A 1 31 ? 37.054 30.035 36.730 1.00 23.83 ? ? ? ? ? ? 521 TYR A CD1 1
+ATOM 48 C CD2 . TYR A 1 31 ? 36.873 27.984 35.504 1.00 22.47 ? ? ? ? ? ? 521 TYR A CD2 1
+ATOM 49 C CE1 . TYR A 1 31 ? 38.347 30.235 36.255 1.00 24.99 ? ? ? ? ? ? 521 TYR A CE1 1
+ATOM 50 C CE2 . TYR A 1 31 ? 38.169 28.171 35.016 1.00 24.67 ? ? ? ? ? ? 521 TYR A CE2 1
+ATOM 51 C CZ . TYR A 1 31 ? 38.896 29.302 35.398 1.00 25.79 ? ? ? ? ? ? 521 TYR A CZ 1
+ATOM 52 O OH . TYR A 1 31 ? 40.165 29.509 34.903 1.00 27.89 ? ? ? ? ? ? 521 TYR A OH 1
+ATOM 53 N N . ALA A 1 32 ? 32.906 27.366 38.988 1.00 13.96 ? ? ? ? ? ? 522 ALA A N 1
+ATOM 54 C CA . ALA A 1 32 ? 31.570 27.312 39.556 1.00 14.62 ? ? ? ? ? ? 522 ALA A CA 1
+ATOM 55 C C . ALA A 1 32 ? 31.654 27.491 41.058 1.00 14.50 ? ? ? ? ? ? 522 ALA A C 1
+ATOM 56 O O . ALA A 1 32 ? 30.933 28.297 41.615 1.00 15.27 ? ? ? ? ? ? 522 ALA A O 1
+ATOM 57 C CB . ALA A 1 32 ? 30.907 25.982 39.213 1.00 14.67 ? ? ? ? ? ? 522 ALA A CB 1
+ATOM 58 N N . GLU A 1 33 ? 32.534 26.739 41.706 1.00 15.66 ? ? ? ? ? ? 523 GLU A N 1
+ATOM 59 C CA . GLU A 1 33 ? 32.718 26.826 43.155 1.00 20.86 ? ? ? ? ? ? 523 GLU A CA 1
+ATOM 60 C C . GLU A 1 33 ? 32.995 28.282 43.575 1.00 20.93 ? ? ? ? ? ? 523 GLU A C 1
+ATOM 61 O O . GLU A 1 33 ? 32.429 28.775 44.549 1.00 20.13 ? ? ? ? ? ? 523 GLU A O 1
+ATOM 62 C CB . GLU A 1 33 ? 33.873 25.912 43.621 1.00 24.74 ? ? ? ? ? ? 523 GLU A CB 1
+ATOM 63 C CG . GLU A 1 33 ? 33.507 24.407 43.599 1.00 32.08 ? ? ? ? ? ? 523 GLU A CG 1
+ATOM 64 C CD . GLU A 1 33 ? 34.707 23.414 43.527 1.00 35.74 ? ? ? ? ? ? 523 GLU A CD 1
+ATOM 65 O OE1 . GLU A 1 33 ? 35.852 23.761 43.957 1.00 38.51 ? ? ? ? ? ? 523 GLU A OE1 1
+ATOM 66 O OE2 . GLU A 1 33 ? 34.482 22.266 43.040 1.00 36.79 ? ? ? ? ? ? 523 GLU A OE2 1
+ATOM 67 N N . ALA A 1 34 ? 33.810 28.981 42.794 1.00 20.38 ? ? ? ? ? ? 524 ALA A N 1
+ATOM 68 C CA . ALA A 1 34 ? 34.166 30.364 43.086 1.00 20.61 ? ? ? ? ? ? 524 ALA A CA 1
+ATOM 69 C C . ALA A 1 34 ? 32.939 31.280 43.078 1.00 20.43 ? ? ? ? ? ? 524 ALA A C 1
+ATOM 70 O O . ALA A 1 34 ? 32.920 32.354 43.707 1.00 21.31 ? ? ? ? ? ? 524 ALA A O 1
+ATOM 71 C CB . ALA A 1 34 ? 35.213 30.848 42.069 1.00 21.00 ? ? ? ? ? ? 524 ALA A CB 1
+ATOM 72 N N . ARG A 1 35 ? 31.911 30.857 42.361 1.00 18.97 ? ? ? ? ? ? 525 ARG A N 1
+ATOM 73 C CA . ARG A 1 35 ? 30.701 31.641 42.259 1.00 18.39 ? ? ? ? ? ? 525 ARG A CA 1
+ATOM 74 C C . ARG A 1 35 ? 29.567 31.127 43.152 1.00 17.82 ? ? ? ? ? ? 525 ARG A C 1
+ATOM 75 O O . ARG A 1 35 ? 28.486 31.697 43.136 1.00 18.38 ? ? ? ? ? ? 525 ARG A O 1
+ATOM 76 C CB . ARG A 1 35 ? 30.249 31.690 40.800 1.00 19.29 ? ? ? ? ? ? 525 ARG A CB 1
+ATOM 77 C CG . ARG A 1 35 ? 31.317 32.203 39.823 1.00 21.17 ? ? ? ? ? ? 525 ARG A CG 1
+ATOM 78 C CD . ARG A 1 35 ? 31.730 33.670 40.097 1.00 22.80 ? ? ? ? ? ? 525 ARG A CD 1
+ATOM 79 N NE . ARG A 1 35 ? 30.630 34.606 39.879 1.00 25.15 ? ? ? ? ? ? 525 ARG A NE 1
+ATOM 80 C CZ . ARG A 1 35 ? 30.277 35.123 38.699 1.00 26.64 ? ? ? ? ? ? 525 ARG A CZ 1
+ATOM 81 N NH1 . ARG A 1 35 ? 30.939 34.819 37.588 1.00 27.98 ? ? ? ? ? ? 525 ARG A NH1 1
+ATOM 82 N NH2 . ARG A 1 35 ? 29.212 35.914 38.623 1.00 27.62 ? ? ? ? ? ? 525 ARG A NH2 1
+ATOM 83 N N . GLY A 1 36 ? 29.815 30.071 43.932 1.00 17.65 ? ? ? ? ? ? 526 GLY A N 1
+ATOM 84 C CA . GLY A 1 36 ? 28.786 29.496 44.809 1.00 17.76 ? ? ? ? ? ? 526 GLY A CA 1
+ATOM 85 C C . GLY A 1 36 ? 27.692 28.668 44.122 1.00 17.76 ? ? ? ? ? ? 526 GLY A C 1
+ATOM 86 O O . GLY A 1 36 ? 26.561 28.562 44.629 1.00 18.64 ? ? ? ? ? ? 526 GLY A O 1
+ATOM 87 N N . ILE A 1 37 ? 28.044 28.082 42.977 1.00 16.77 ? ? ? ? ? ? 527 ILE A N 1
+ATOM 88 C CA . ILE A 1 37 ? 27.163 27.268 42.111 1.00 16.84 ? ? ? ? ? ? 527 ILE A CA 1
+ATOM 89 C C . ILE A 1 37 ? 27.736 25.832 42.085 1.00 15.99 ? ? ? ? ? ? 527 ILE A C 1
+ATOM 90 O O . ILE A 1 37 ? 28.970 25.640 42.148 1.00 17.08 ? ? ? ? ? ? 527 ILE A O 1
+ATOM 91 C CB . ILE A 1 37 ? 27.235 27.828 40.595 1.00 17.70 ? ? ? ? ? ? 527 ILE A CB 1
+ATOM 92 C CG1 . ILE A 1 37 ? 26.668 29.250 40.491 1.00 19.09 ? ? ? ? ? ? 527 ILE A CG1 1
+ATOM 93 C CG2 . ILE A 1 37 ? 26.559 26.927 39.590 1.00 18.76 ? ? ? ? ? ? 527 ILE A CG2 1
+ATOM 94 C CD1 . ILE A 1 37 ? 25.392 29.465 41.200 1.00 19.73 ? ? ? ? ? ? 527 ILE A CD1 1
+ATOM 95 N N . LYS A 1 38 ? 26.858 24.832 42.063 1.00 13.16 ? ? ? ? ? ? 528 LYS A N 1
+ATOM 96 C CA . LYS A 1 38 ? 27.275 23.429 41.914 1.00 12.08 ? ? ? ? ? ? 528 LYS A CA 1
+ATOM 97 C C . LYS A 1 38 ? 26.965 23.107 40.441 1.00 11.04 ? ? ? ? ? ? 528 LYS A C 1
+ATOM 98 O O . LYS A 1 38 ? 25.882 23.449 39.946 1.00 10.17 ? ? ? ? ? ? 528 LYS A O 1
+ATOM 99 C CB . LYS A 1 38 ? 26.446 22.489 42.803 1.00 14.13 ? ? ? ? ? ? 528 LYS A CB 1
+ATOM 100 C CG . LYS A 1 38 ? 26.720 22.606 44.314 1.00 16.62 ? ? ? ? ? ? 528 LYS A CG 1
+ATOM 101 C CD . LYS A 1 38 ? 28.184 22.310 44.610 1.00 18.95 ? ? ? ? ? ? 528 LYS A CD 1
+ATOM 102 C CE . LYS A 1 38 ? 28.533 22.576 46.083 1.00 20.80 ? ? ? ? ? ? 528 LYS A CE 1
+ATOM 103 N NZ . LYS A 1 38 ? 29.986 22.331 46.352 1.00 22.40 ? ? ? ? ? ? 528 LYS A NZ 1
+ATOM 104 N N . ILE A 1 39 ? 27.922 22.502 39.741 1.00 9.53 ? ? ? ? ? ? 529 ILE A N 1
+ATOM 105 C CA . ILE A 1 39 ? 27.746 22.147 38.339 1.00 8.79 ? ? ? ? ? ? 529 ILE A CA 1
+ATOM 106 C C . ILE A 1 39 ? 27.829 20.640 38.243 1.00 8.34 ? ? ? ? ? ? 529 ILE A C 1
+ATOM 107 O O . ILE A 1 39 ? 28.763 20.039 38.759 1.00 9.37 ? ? ? ? ? ? 529 ILE A O 1
+ATOM 108 C CB . ILE A 1 39 ? 28.764 22.903 37.420 1.00 8.92 ? ? ? ? ? ? 529 ILE A CB 1
+ATOM 109 C CG1 . ILE A 1 39 ? 28.477 22.605 35.948 1.00 10.81 ? ? ? ? ? ? 529 ILE A CG1 1
+ATOM 110 C CG2 . ILE A 1 39 ? 30.192 22.593 37.789 1.00 10.32 ? ? ? ? ? ? 529 ILE A CG2 1
+ATOM 111 C CD1 . ILE A 1 39 ? 28.954 23.747 34.990 1.00 10.65 ? ? ? ? ? ? 529 ILE A CD1 1
+ATOM 112 N N . GLY A 1 40 ? 26.832 20.017 37.624 1.00 7.55 ? ? ? ? ? ? 530 GLY A N 1
+ATOM 113 C CA . GLY A 1 40 ? 26.842 18.575 37.593 1.00 7.77 ? ? ? ? ? ? 530 GLY A CA 1
+ATOM 114 C C . GLY A 1 40 ? 26.306 17.919 36.347 1.00 8.70 ? ? ? ? ? ? 530 GLY A C 1
+ATOM 115 O O . GLY A 1 40 ? 25.993 18.600 35.347 1.00 8.22 ? ? ? ? ? ? 530 GLY A O 1
+ATOM 116 N N . THR A 1 41 ? 26.199 16.591 36.408 1.00 7.71 ? ? ? ? ? ? 531 THR A N 1
+ATOM 117 C CA . THR A 1 41 ? 25.701 15.803 35.293 1.00 7.60 ? ? ? ? ? ? 531 THR A CA 1
+ATOM 118 C C . THR A 1 41 ? 25.117 14.481 35.807 1.00 8.27 ? ? ? ? ? ? 531 THR A C 1
+ATOM 119 O O . THR A 1 41 ? 25.453 14.039 36.921 1.00 7.43 ? ? ? ? ? ? 531 THR A O 1
+ATOM 120 C CB . THR A 1 41 ? 26.891 15.442 34.308 1.00 8.06 ? ? ? ? ? ? 531 THR A CB 1
+ATOM 121 O OG1 . THR A 1 41 ? 26.428 14.629 33.211 1.00 8.12 ? ? ? ? ? ? 531 THR A OG1 1
+ATOM 122 C CG2 . THR A 1 41 ? 28.020 14.705 35.058 1.00 8.56 ? ? ? ? ? ? 531 THR A CG2 1
+ATOM 123 N N . CYS A 1 42 ? 24.221 13.880 35.022 1.00 8.23 ? ? ? ? ? ? 532 CYS A N 1
+ATOM 124 C CA . CYS A 1 42 ? 23.762 12.537 35.353 1.00 8.73 ? ? ? ? ? ? 532 CYS A CA 1
+ATOM 125 C C . CYS A 1 42 ? 24.913 11.621 34.905 1.00 10.18 ? ? ? ? ? ? 532 CYS A C 1
+ATOM 126 O O . CYS A 1 42 ? 25.752 11.977 34.032 1.00 9.35 ? ? ? ? ? ? 532 CYS A O 1
+ATOM 127 C CB . CYS A 1 42 ? 22.480 12.149 34.632 1.00 10.51 ? ? ? ? ? ? 532 CYS A CB 1
+ATOM 128 S SG . CYS A 1 42 ? 22.666 11.919 32.869 1.00 13.95 ? ? ? ? ? ? 532 CYS A SG 1
+ATOM 129 N N . VAL A 1 43 ? 25.010 10.461 35.547 1.00 9.17 ? ? ? ? ? ? 533 VAL A N 1
+ATOM 130 C CA . VAL A 1 43 ? 26.080 9.512 35.258 1.00 9.39 ? ? ? ? ? ? 533 VAL A CA 1
+ATOM 131 C C . VAL A 1 43 ? 25.530 8.375 34.410 1.00 10.48 ? ? ? ? ? ? 533 VAL A C 1
+ATOM 132 O O . VAL A 1 43 ? 24.571 7.708 34.807 1.00 11.48 ? ? ? ? ? ? 533 VAL A O 1
+ATOM 133 C CB . VAL A 1 43 ? 26.668 9.022 36.593 1.00 10.22 ? ? ? ? ? ? 533 VAL A CB 1
+ATOM 134 C CG1 . VAL A 1 43 ? 27.668 7.870 36.385 1.00 10.75 ? ? ? ? ? ? 533 VAL A CG1 1
+ATOM 135 C CG2 . VAL A 1 43 ? 27.340 10.205 37.316 1.00 10.21 ? ? ? ? ? ? 533 VAL A CG2 1
+ATOM 136 N N . ASN A 1 44 ? 26.061 8.234 33.198 1.00 10.57 ? ? ? ? ? ? 534 ASN A N 1
+ATOM 137 C CA . ASN A 1 44 ? 25.600 7.214 32.239 1.00 11.85 ? ? ? ? ? ? 534 ASN A CA 1
+ATOM 138 C C . ASN A 1 44 ? 26.157 5.835 32.584 1.00 12.89 ? ? ? ? ? ? 534 ASN A C 1
+ATOM 139 O O . ASN A 1 44 ? 27.197 5.714 33.260 1.00 12.77 ? ? ? ? ? ? 534 ASN A O 1
+ATOM 140 C CB . ASN A 1 44 ? 25.942 7.627 30.776 1.00 11.73 ? ? ? ? ? ? 534 ASN A CB 1
+ATOM 141 C CG . ASN A 1 44 ? 25.416 9.039 30.425 1.00 11.50 ? ? ? ? ? ? 534 ASN A CG 1
+ATOM 142 O OD1 . ASN A 1 44 ? 24.198 9.256 30.321 1.00 13.65 ? ? ? ? ? ? 534 ASN A OD1 1
+ATOM 143 N ND2 . ASN A 1 44 ? 26.317 10.010 30.361 1.00 9.07 ? ? ? ? ? ? 534 ASN A ND2 1
+ATOM 144 N N . TYR A 1 45 ? 25.544 4.808 32.020 1.00 14.86 ? ? ? ? ? ? 535 TYR A N 1
+ATOM 145 C CA . TYR A 1 45 ? 25.946 3.450 32.338 1.00 17.34 ? ? ? ? ? ? 535 TYR A CA 1
+ATOM 146 C C . TYR A 1 45 ? 27.413 2.986 32.289 1.00 17.31 ? ? ? ? ? ? 535 TYR A C 1
+ATOM 147 O O . TYR A 1 45 ? 27.845 2.227 33.169 1.00 16.66 ? ? ? ? ? ? 535 TYR A O 1
+ATOM 148 C CB . TYR A 1 45 ? 25.039 2.424 31.658 1.00 22.46 ? ? ? ? ? ? 535 TYR A CB 1
+ATOM 149 C CG . TYR A 1 45 ? 25.159 1.083 32.366 1.00 27.41 ? ? ? ? ? ? 535 TYR A CG 1
+ATOM 150 C CD1 . TYR A 1 45 ? 24.839 0.963 33.729 1.00 28.84 ? ? ? ? ? ? 535 TYR A CD1 1
+ATOM 151 C CD2 . TYR A 1 45 ? 25.721 -0.023 31.721 1.00 30.41 ? ? ? ? ? ? 535 TYR A CD2 1
+ATOM 152 C CE1 . TYR A 1 45 ? 25.092 -0.212 34.425 1.00 31.23 ? ? ? ? ? ? 535 TYR A CE1 1
+ATOM 153 C CE2 . TYR A 1 45 ? 25.974 -1.220 32.416 1.00 32.19 ? ? ? ? ? ? 535 TYR A CE2 1
+ATOM 154 C CZ . TYR A 1 45 ? 25.654 -1.302 33.772 1.00 32.33 ? ? ? ? ? ? 535 TYR A CZ 1
+ATOM 155 O OH . TYR A 1 45 ? 25.872 -2.491 34.453 1.00 34.01 ? ? ? ? ? ? 535 TYR A OH 1
+ATOM 156 N N . PRO A 1 46 ? 28.210 3.450 31.307 1.00 16.94 ? ? ? ? ? ? 536 PRO A N 1
+ATOM 157 C CA . PRO A 1 46 ? 29.611 3.020 31.238 1.00 16.86 ? ? ? ? ? ? 536 PRO A CA 1
+ATOM 158 C C . PRO A 1 46 ? 30.393 3.246 32.508 1.00 16.28 ? ? ? ? ? ? 536 PRO A C 1
+ATOM 159 O O . PRO A 1 46 ? 31.401 2.592 32.724 1.00 16.65 ? ? ? ? ? ? 536 PRO A O 1
+ATOM 160 C CB . PRO A 1 46 ? 30.171 3.865 30.092 1.00 18.10 ? ? ? ? ? ? 536 PRO A CB 1
+ATOM 161 C CG . PRO A 1 46 ? 28.981 3.989 29.178 1.00 18.10 ? ? ? ? ? ? 536 PRO A CG 1
+ATOM 162 C CD . PRO A 1 46 ? 27.894 4.346 30.178 1.00 17.57 ? ? ? ? ? ? 536 PRO A CD 1
+ATOM 163 N N . PHE A 1 47 ? 29.973 4.202 33.330 1.00 15.77 ? ? ? ? ? ? 537 PHE A N 1
+ATOM 164 C CA . PHE A 1 47 ? 30.667 4.473 34.593 1.00 15.60 ? ? ? ? ? ? 537 PHE A CA 1
+ATOM 165 C C . PHE A 1 47 ? 30.785 3.211 35.456 1.00 17.03 ? ? ? ? ? ? 537 PHE A C 1
+ATOM 166 O O . PHE A 1 47 ? 31.860 2.888 35.955 1.00 17.37 ? ? ? ? ? ? 537 PHE A O 1
+ATOM 167 C CB . PHE A 1 47 ? 29.919 5.546 35.402 1.00 14.84 ? ? ? ? ? ? 537 PHE A CB 1
+ATOM 168 C CG . PHE A 1 47 ? 30.336 5.630 36.854 1.00 15.54 ? ? ? ? ? ? 537 PHE A CG 1
+ATOM 169 C CD1 . PHE A 1 47 ? 31.464 6.345 37.235 1.00 15.77 ? ? ? ? ? ? 537 PHE A CD1 1
+ATOM 170 C CD2 . PHE A 1 47 ? 29.592 4.979 37.851 1.00 16.19 ? ? ? ? ? ? 537 PHE A CD2 1
+ATOM 171 C CE1 . PHE A 1 47 ? 31.849 6.415 38.594 1.00 16.61 ? ? ? ? ? ? 537 PHE A CE1 1
+ATOM 172 C CE2 . PHE A 1 47 ? 29.971 5.038 39.219 1.00 16.26 ? ? ? ? ? ? 537 PHE A CE2 1
+ATOM 173 C CZ . PHE A 1 47 ? 31.092 5.754 39.588 1.00 16.41 ? ? ? ? ? ? 537 PHE A CZ 1
+ATOM 174 N N . TYR A 1 48 ? 29.680 2.496 35.587 1.00 17.95 ? ? ? ? ? ? 538 TYR A N 1
+ATOM 175 C CA . TYR A 1 48 ? 29.633 1.314 36.426 1.00 21.33 ? ? ? ? ? ? 538 TYR A CA 1
+ATOM 176 C C . TYR A 1 48 ? 30.512 0.138 36.019 1.00 25.76 ? ? ? ? ? ? 538 TYR A C 1
+ATOM 177 O O . TYR A 1 48 ? 31.203 -0.436 36.869 1.00 28.22 ? ? ? ? ? ? 538 TYR A O 1
+ATOM 178 C CB . TYR A 1 48 ? 28.191 0.879 36.606 1.00 17.95 ? ? ? ? ? ? 538 TYR A CB 1
+ATOM 179 C CG . TYR A 1 48 ? 27.377 1.952 37.275 1.00 16.62 ? ? ? ? ? ? 538 TYR A CG 1
+ATOM 180 C CD1 . TYR A 1 48 ? 27.425 2.128 38.667 1.00 15.56 ? ? ? ? ? ? 538 TYR A CD1 1
+ATOM 181 C CD2 . TYR A 1 48 ? 26.607 2.830 36.521 1.00 16.28 ? ? ? ? ? ? 538 TYR A CD2 1
+ATOM 182 C CE1 . TYR A 1 48 ? 26.734 3.152 39.283 1.00 15.35 ? ? ? ? ? ? 538 TYR A CE1 1
+ATOM 183 C CE2 . TYR A 1 48 ? 25.913 3.858 37.124 1.00 15.96 ? ? ? ? ? ? 538 TYR A CE2 1
+ATOM 184 C CZ . TYR A 1 48 ? 25.979 4.015 38.513 1.00 15.58 ? ? ? ? ? ? 538 TYR A CZ 1
+ATOM 185 O OH . TYR A 1 48 ? 25.276 5.041 39.101 1.00 16.96 ? ? ? ? ? ? 538 TYR A OH 1
+ATOM 186 N N . ASN A 1 49 ? 30.517 -0.218 34.741 1.00 29.62 ? ? ? ? ? ? 539 ASN A N 1
+ATOM 187 C CA . ASN A 1 49 ? 31.343 -1.340 34.323 1.00 33.13 ? ? ? ? ? ? 539 ASN A CA 1
+ATOM 188 C C . ASN A 1 49 ? 32.742 -0.968 33.816 1.00 34.74 ? ? ? ? ? ? 539 ASN A C 1
+ATOM 189 O O . ASN A 1 49 ? 33.485 -1.836 33.344 1.00 35.85 ? ? ? ? ? ? 539 ASN A O 1
+ATOM 190 C CB . ASN A 1 49 ? 30.602 -2.215 33.319 1.00 34.61 ? ? ? ? ? ? 539 ASN A CB 1
+ATOM 191 C CG . ASN A 1 49 ? 30.452 -1.566 31.967 1.00 35.75 ? ? ? ? ? ? 539 ASN A CG 1
+ATOM 192 O OD1 . ASN A 1 49 ? 31.045 -0.521 31.694 1.00 36.15 ? ? ? ? ? ? 539 ASN A OD1 1
+ATOM 193 N ND2 . ASN A 1 49 ? 29.657 -2.190 31.099 1.00 36.19 ? ? ? ? ? ? 539 ASN A ND2 1
+ATOM 194 N N . ASN A 1 50 ? 33.102 0.312 33.916 1.00 35.84 ? ? ? ? ? ? 540 ASN A N 1
+ATOM 195 C CA . ASN A 1 50 ? 34.428 0.798 33.502 1.00 37.55 ? ? ? ? ? ? 540 ASN A CA 1
+ATOM 196 C C . ASN A 1 50 ? 34.806 0.597 32.037 1.00 36.41 ? ? ? ? ? ? 540 ASN A C 1
+ATOM 197 O O . ASN A 1 50 ? 35.994 0.528 31.695 1.00 36.29 ? ? ? ? ? ? 540 ASN A O 1
+ATOM 198 C CB . ASN A 1 50 ? 35.511 0.171 34.374 1.00 40.91 ? ? ? ? ? ? 540 ASN A CB 1
+ATOM 199 C CG . ASN A 1 50 ? 35.365 0.552 35.825 1.00 44.11 ? ? ? ? ? ? 540 ASN A CG 1
+ATOM 200 O OD1 . ASN A 1 50 ? 35.737 1.671 36.230 1.00 45.52 ? ? ? ? ? ? 540 ASN A OD1 1
+ATOM 201 N ND2 . ASN A 1 50 ? 34.790 -0.362 36.629 1.00 45.76 ? ? ? ? ? ? 540 ASN A ND2 1
+ATOM 202 N N . SER A 1 51 ? 33.802 0.550 31.171 1.00 34.36 ? ? ? ? ? ? 541 SER A N 1
+ATOM 203 C CA . SER A 1 51 ? 34.030 0.351 29.754 1.00 31.80 ? ? ? ? ? ? 541 SER A CA 1
+ATOM 204 C C . SER A 1 51 ? 34.543 1.595 29.027 1.00 29.83 ? ? ? ? ? ? 541 SER A C 1
+ATOM 205 O O . SER A 1 51 ? 34.963 1.496 27.870 1.00 30.50 ? ? ? ? ? ? 541 SER A O 1
+ATOM 206 C CB . SER A 1 51 ? 32.739 -0.130 29.077 1.00 33.07 ? ? ? ? ? ? 541 SER A CB 1
+ATOM 207 O OG . SER A 1 51 ? 31.694 0.833 29.179 1.00 34.29 ? ? ? ? ? ? 541 SER A OG 1
+ATOM 208 N N . ASP A 1 52 ? 34.488 2.762 29.668 1.00 26.01 ? ? ? ? ? ? 542 ASP A N 1
+ATOM 209 C CA . ASP A 1 52 ? 34.931 3.991 29.015 1.00 23.12 ? ? ? ? ? ? 542 ASP A CA 1
+ATOM 210 C C . ASP A 1 52 ? 35.764 4.833 29.994 1.00 22.05 ? ? ? ? ? ? 542 ASP A C 1
+ATOM 211 O O . ASP A 1 52 ? 35.234 5.671 30.724 1.00 20.76 ? ? ? ? ? ? 542 ASP A O 1
+ATOM 212 C CB . ASP A 1 52 ? 33.693 4.752 28.470 1.00 21.88 ? ? ? ? ? ? 542 ASP A CB 1
+ATOM 213 C CG . ASP A 1 52 ? 34.040 5.793 27.416 1.00 20.64 ? ? ? ? ? ? 542 ASP A CG 1
+ATOM 214 O OD1 . ASP A 1 52 ? 35.203 6.238 27.350 1.00 21.37 ? ? ? ? ? ? 542 ASP A OD1 1
+ATOM 215 O OD2 . ASP A 1 52 ? 33.132 6.203 26.659 1.00 19.67 ? ? ? ? ? ? 542 ASP A OD2 1
+ATOM 216 N N . PRO A 1 53 ? 37.096 4.580 30.043 1.00 22.07 ? ? ? ? ? ? 543 PRO A N 1
+ATOM 217 C CA . PRO A 1 53 ? 38.045 5.286 30.922 1.00 20.53 ? ? ? ? ? ? 543 PRO A CA 1
+ATOM 218 C C . PRO A 1 53 ? 38.063 6.795 30.726 1.00 19.04 ? ? ? ? ? ? 543 PRO A C 1
+ATOM 219 O O . PRO A 1 53 ? 38.220 7.541 31.696 1.00 18.90 ? ? ? ? ? ? 543 PRO A O 1
+ATOM 220 C CB . PRO A 1 53 ? 39.403 4.677 30.541 1.00 21.59 ? ? ? ? ? ? 543 PRO A CB 1
+ATOM 221 C CG . PRO A 1 53 ? 39.064 3.311 30.059 1.00 22.37 ? ? ? ? ? ? 543 PRO A CG 1
+ATOM 222 C CD . PRO A 1 53 ? 37.797 3.543 29.253 1.00 22.48 ? ? ? ? ? ? 543 PRO A CD 1
+ATOM 223 N N . THR A 1 54 ? 37.932 7.244 29.475 1.00 16.88 ? ? ? ? ? ? 544 THR A N 1
+ATOM 224 C CA . THR A 1 54 ? 37.937 8.680 29.187 1.00 16.62 ? ? ? ? ? ? 544 THR A CA 1
+ATOM 225 C C . THR A 1 54 ? 36.699 9.327 29.839 1.00 14.37 ? ? ? ? ? ? 544 THR A C 1
+ATOM 226 O O . THR A 1 54 ? 36.789 10.421 30.394 1.00 13.61 ? ? ? ? ? ? 544 THR A O 1
+ATOM 227 C CB . THR A 1 54 ? 37.933 8.970 27.657 1.00 16.62 ? ? ? ? ? ? 544 THR A CB 1
+ATOM 228 O OG1 . THR A 1 54 ? 39.048 8.320 27.045 1.00 18.82 ? ? ? ? ? ? 544 THR A OG1 1
+ATOM 229 C CG2 . THR A 1 54 ? 38.037 10.438 27.393 1.00 16.77 ? ? ? ? ? ? 544 THR A CG2 1
+ATOM 230 N N . TYR A 1 55 ? 35.560 8.631 29.778 1.00 13.73 ? ? ? ? ? ? 545 TYR A N 1
+ATOM 231 C CA . TYR A 1 55 ? 34.316 9.135 30.392 1.00 12.39 ? ? ? ? ? ? 545 TYR A CA 1
+ATOM 232 C C . TYR A 1 55 ? 34.578 9.414 31.874 1.00 12.05 ? ? ? ? ? ? 545 TYR A C 1
+ATOM 233 O O . TYR A 1 55 ? 34.347 10.531 32.366 1.00 11.61 ? ? ? ? ? ? 545 TYR A O 1
+ATOM 234 C CB . TYR A 1 55 ? 33.191 8.097 30.257 1.00 11.92 ? ? ? ? ? ? 545 TYR A CB 1
+ATOM 235 C CG . TYR A 1 55 ? 31.861 8.538 30.805 1.00 11.56 ? ? ? ? ? ? 545 TYR A CG 1
+ATOM 236 C CD1 . TYR A 1 55 ? 31.536 8.341 32.146 1.00 12.07 ? ? ? ? ? ? 545 TYR A CD1 1
+ATOM 237 C CD2 . TYR A 1 55 ? 30.932 9.177 29.997 1.00 11.46 ? ? ? ? ? ? 545 TYR A CD2 1
+ATOM 238 C CE1 . TYR A 1 55 ? 30.333 8.771 32.649 1.00 11.58 ? ? ? ? ? ? 545 TYR A CE1 1
+ATOM 239 C CE2 . TYR A 1 55 ? 29.733 9.607 30.494 1.00 10.57 ? ? ? ? ? ? 545 TYR A CE2 1
+ATOM 240 C CZ . TYR A 1 55 ? 29.441 9.402 31.828 1.00 10.93 ? ? ? ? ? ? 545 TYR A CZ 1
+ATOM 241 O OH . TYR A 1 55 ? 28.249 9.887 32.338 1.00 11.97 ? ? ? ? ? ? 545 TYR A OH 1
+ATOM 242 N N . ASN A 1 56 ? 35.089 8.397 32.571 1.00 13.21 ? ? ? ? ? ? 546 ASN A N 1
+ATOM 243 C CA . ASN A 1 56 ? 35.370 8.505 34.004 1.00 14.05 ? ? ? ? ? ? 546 ASN A CA 1
+ATOM 244 C C . ASN A 1 56 ? 36.404 9.572 34.355 1.00 13.17 ? ? ? ? ? ? 546 ASN A C 1
+ATOM 245 O O . ASN A 1 56 ? 36.268 10.254 35.376 1.00 12.33 ? ? ? ? ? ? 546 ASN A O 1
+ATOM 246 C CB . ASN A 1 56 ? 35.799 7.146 34.568 1.00 15.55 ? ? ? ? ? ? 546 ASN A CB 1
+ATOM 247 C CG . ASN A 1 56 ? 34.674 6.126 34.556 1.00 17.40 ? ? ? ? ? ? 546 ASN A CG 1
+ATOM 248 O OD1 . ASN A 1 56 ? 33.706 6.261 33.818 1.00 19.28 ? ? ? ? ? ? 546 ASN A OD1 1
+ATOM 249 N ND2 . ASN A 1 56 ? 34.798 5.097 35.381 1.00 19.39 ? ? ? ? ? ? 546 ASN A ND2 1
+ATOM 250 N N . SER A 1 57 ? 37.412 9.757 33.507 1.00 13.12 ? ? ? ? ? ? 547 SER A N 1
+ATOM 251 C CA . SER A 1 57 ? 38.427 10.757 33.806 1.00 14.48 ? ? ? ? ? ? 547 SER A CA 1
+ATOM 252 C C . SER A 1 57 ? 37.903 12.207 33.694 1.00 13.07 ? ? ? ? ? ? 547 SER A C 1
+ATOM 253 O O . SER A 1 57 ? 38.269 13.073 34.488 1.00 14.04 ? ? ? ? ? ? 547 SER A O 1
+ATOM 254 C CB . SER A 1 57 ? 39.680 10.528 32.979 1.00 16.98 ? ? ? ? ? ? 547 SER A CB 1
+ATOM 255 O OG . SER A 1 57 ? 39.406 10.728 31.622 1.00 23.00 ? ? ? ? ? ? 547 SER A OG 1
+ATOM 256 N N . ILE A 1 58 ? 37.018 12.464 32.732 1.00 12.03 ? ? ? ? ? ? 548 ILE A N 1
+ATOM 257 C CA . ILE A 1 58 ? 36.437 13.801 32.611 1.00 11.90 ? ? ? ? ? ? 548 ILE A CA 1
+ATOM 258 C C . ILE A 1 58 ? 35.424 14.000 33.755 1.00 10.12 ? ? ? ? ? ? 548 ILE A C 1
+ATOM 259 O O . ILE A 1 58 ? 35.368 15.070 34.354 1.00 9.55 ? ? ? ? ? ? 548 ILE A O 1
+ATOM 260 C CB . ILE A 1 58 ? 35.740 14.013 31.228 1.00 13.31 ? ? ? ? ? ? 548 ILE A CB 1
+ATOM 261 C CG1 . ILE A 1 58 ? 36.811 14.026 30.132 1.00 14.52 ? ? ? ? ? ? 548 ILE A CG1 1
+ATOM 262 C CG2 . ILE A 1 58 ? 34.891 15.310 31.215 1.00 12.01 ? ? ? ? ? ? 548 ILE A CG2 1
+ATOM 263 C CD1 . ILE A 1 58 ? 36.241 13.934 28.751 1.00 17.19 ? ? ? ? ? ? 548 ILE A CD1 1
+ATOM 264 N N . LEU A 1 59 ? 34.614 12.973 34.025 1.00 10.09 ? ? ? ? ? ? 549 LEU A N 1
+ATOM 265 C CA . LEU A 1 59 ? 33.611 13.030 35.100 1.00 10.02 ? ? ? ? ? ? 549 LEU A CA 1
+ATOM 266 C C . LEU A 1 59 ? 34.207 13.450 36.454 1.00 10.24 ? ? ? ? ? ? 549 LEU A C 1
+ATOM 267 O O . LEU A 1 59 ? 33.718 14.398 37.071 1.00 10.79 ? ? ? ? ? ? 549 LEU A O 1
+ATOM 268 C CB . LEU A 1 59 ? 32.871 11.684 35.239 1.00 10.01 ? ? ? ? ? ? 549 LEU A CB 1
+ATOM 269 C CG . LEU A 1 59 ? 31.792 11.590 36.336 1.00 10.66 ? ? ? ? ? ? 549 LEU A CG 1
+ATOM 270 C CD1 . LEU A 1 59 ? 30.634 12.512 36.049 1.00 11.62 ? ? ? ? ? ? 549 LEU A CD1 1
+ATOM 271 C CD2 . LEU A 1 59 ? 31.319 10.172 36.478 1.00 11.31 ? ? ? ? ? ? 549 LEU A CD2 1
+ATOM 272 N N . GLN A 1 60 ? 35.270 12.773 36.892 1.00 10.53 ? ? ? ? ? ? 550 GLN A N 1
+ATOM 273 C CA . GLN A 1 60 ? 35.891 13.086 38.199 1.00 12.97 ? ? ? ? ? ? 550 GLN A CA 1
+ATOM 274 C C . GLN A 1 60 ? 36.646 14.442 38.266 1.00 12.79 ? ? ? ? ? ? 550 GLN A C 1
+ATOM 275 O O . GLN A 1 60 ? 36.896 14.981 39.351 1.00 14.16 ? ? ? ? ? ? 550 GLN A O 1
+ATOM 276 C CB . GLN A 1 60 ? 36.828 11.933 38.655 1.00 13.64 ? ? ? ? ? ? 550 GLN A CB 1
+ATOM 277 C CG . GLN A 1 60 ? 38.002 11.671 37.690 1.00 14.91 ? ? ? ? ? ? 550 GLN A CG 1
+ATOM 278 C CD . GLN A 1 60 ? 38.912 10.491 38.067 1.00 15.57 ? ? ? ? ? ? 550 GLN A CD 1
+ATOM 279 O OE1 . GLN A 1 60 ? 40.030 10.389 37.562 1.00 16.54 ? ? ? ? ? ? 550 GLN A OE1 1
+ATOM 280 N NE2 . GLN A 1 60 ? 38.413 9.576 38.871 1.00 13.98 ? ? ? ? ? ? 550 GLN A NE2 1
+ATOM 281 N N . ARG A 1 61 ? 36.967 14.994 37.097 1.00 12.31 ? ? ? ? ? ? 551 ARG A N 1
+ATOM 282 C CA . ARG A 1 61 ? 37.710 16.247 36.999 1.00 12.09 ? ? ? ? ? ? 551 ARG A CA 1
+ATOM 283 C C . ARG A 1 61 ? 36.885 17.548 36.907 1.00 10.73 ? ? ? ? ? ? 551 ARG A C 1
+ATOM 284 O O . ARG A 1 61 ? 37.173 18.522 37.583 1.00 11.07 ? ? ? ? ? ? 551 ARG A O 1
+ATOM 285 C CB . ARG A 1 61 ? 38.628 16.157 35.768 1.00 13.98 ? ? ? ? ? ? 551 ARG A CB 1
+ATOM 286 C CG . ARG A 1 61 ? 39.639 17.262 35.656 1.00 17.53 ? ? ? ? ? ? 551 ARG A CG 1
+ATOM 287 C CD . ARG A 1 61 ? 40.464 17.120 34.362 1.00 19.06 ? ? ? ? ? ? 551 ARG A CD 1
+ATOM 288 N NE . ARG A 1 61 ? 39.697 17.540 33.184 1.00 20.88 ? ? ? ? ? ? 551 ARG A NE 1
+ATOM 289 C CZ . ARG A 1 61 ? 39.705 16.902 32.017 1.00 21.80 ? ? ? ? ? ? 551 ARG A CZ 1
+ATOM 290 N NH1 . ARG A 1 61 ? 40.437 15.805 31.864 1.00 21.59 ? ? ? ? ? ? 551 ARG A NH1 1
+ATOM 291 N NH2 . ARG A 1 61 ? 38.974 17.359 31.002 1.00 22.47 ? ? ? ? ? ? 551 ARG A NH2 1
+ATOM 292 N N . GLU A 1 62 ? 35.838 17.539 36.090 1.00 9.49 ? ? ? ? ? ? 552 GLU A N 1
+ATOM 293 C CA . GLU A 1 62 ? 35.075 18.748 35.807 1.00 9.31 ? ? ? ? ? ? 552 GLU A CA 1
+ATOM 294 C C . GLU A 1 62 ? 33.845 19.080 36.637 1.00 8.60 ? ? ? ? ? ? 552 GLU A C 1
+ATOM 295 O O . GLU A 1 62 ? 33.454 20.230 36.697 1.00 9.32 ? ? ? ? ? ? 552 GLU A O 1
+ATOM 296 C CB . GLU A 1 62 ? 34.624 18.710 34.326 1.00 9.93 ? ? ? ? ? ? 552 GLU A CB 1
+ATOM 297 C CG . GLU A 1 62 ? 35.727 18.576 33.262 1.00 11.83 ? ? ? ? ? ? 552 GLU A CG 1
+ATOM 298 C CD . GLU A 1 62 ? 36.499 19.865 33.040 1.00 12.44 ? ? ? ? ? ? 552 GLU A CD 1
+ATOM 299 O OE1 . GLU A 1 62 ? 36.002 20.950 33.359 1.00 12.96 ? ? ? ? ? ? 552 GLU A OE1 1
+ATOM 300 O OE2 . GLU A 1 62 ? 37.630 19.793 32.551 1.00 16.81 ? ? ? ? ? ? 552 GLU A OE2 1
+ATOM 301 N N . PHE A 1 63 ? 33.242 18.088 37.283 1.00 8.90 ? ? ? ? ? ? 553 PHE A N 1
+ATOM 302 C CA . PHE A 1 63 ? 31.979 18.320 37.974 1.00 8.57 ? ? ? ? ? ? 553 PHE A CA 1
+ATOM 303 C C . PHE A 1 63 ? 32.023 18.289 39.476 1.00 8.77 ? ? ? ? ? ? 553 PHE A C 1
+ATOM 304 O O . PHE A 1 63 ? 32.858 17.590 40.060 1.00 10.39 ? ? ? ? ? ? 553 PHE A O 1
+ATOM 305 C CB . PHE A 1 63 ? 30.937 17.325 37.448 1.00 9.45 ? ? ? ? ? ? 553 PHE A CB 1
+ATOM 306 C CG . PHE A 1 63 ? 30.752 17.397 35.954 1.00 10.03 ? ? ? ? ? ? 553 PHE A CG 1
+ATOM 307 C CD1 . PHE A 1 63 ? 30.083 18.485 35.380 1.00 11.05 ? ? ? ? ? ? 553 PHE A CD1 1
+ATOM 308 C CD2 . PHE A 1 63 ? 31.328 16.441 35.109 1.00 10.75 ? ? ? ? ? ? 553 PHE A CD2 1
+ATOM 309 C CE1 . PHE A 1 63 ? 30.002 18.619 33.953 1.00 12.27 ? ? ? ? ? ? 553 PHE A CE1 1
+ATOM 310 C CE2 . PHE A 1 63 ? 31.250 16.570 33.697 1.00 10.90 ? ? ? ? ? ? 553 PHE A CE2 1
+ATOM 311 C CZ . PHE A 1 63 ? 30.590 17.655 33.137 1.00 10.88 ? ? ? ? ? ? 553 PHE A CZ 1
+ATOM 312 N N . SER A 1 64 ? 31.130 19.050 40.105 1.00 8.54 ? ? ? ? ? ? 554 SER A N 1
+ATOM 313 C CA . SER A 1 64 ? 31.039 19.070 41.570 1.00 9.08 ? ? ? ? ? ? 554 SER A CA 1
+ATOM 314 C C . SER A 1 64 ? 29.733 18.417 42.085 1.00 8.65 ? ? ? ? ? ? 554 SER A C 1
+ATOM 315 O O . SER A 1 64 ? 29.484 18.395 43.285 1.00 9.71 ? ? ? ? ? ? 554 SER A O 1
+ATOM 316 C CB . SER A 1 64 ? 31.189 20.489 42.106 1.00 9.55 ? ? ? ? ? ? 554 SER A CB 1
+ATOM 317 O OG . SER A 1 64 ? 30.243 21.362 41.524 1.00 10.33 ? ? ? ? ? ? 554 SER A OG 1
+ATOM 318 N N . MET A 1 65 ? 28.932 17.853 41.181 1.00 8.52 ? ? ? ? ? ? 555 MET A N 1
+ATOM 319 C CA . MET A 1 65 ? 27.663 17.207 41.528 1.00 8.20 ? ? ? ? ? ? 555 MET A CA 1
+ATOM 320 C C . MET A 1 65 ? 27.328 16.086 40.506 1.00 9.98 ? ? ? ? ? ? 555 MET A C 1
+ATOM 321 O O . MET A 1 65 ? 27.616 16.202 39.303 1.00 9.39 ? ? ? ? ? ? 555 MET A O 1
+ATOM 322 C CB . MET A 1 65 ? 26.541 18.271 41.580 1.00 8.93 ? ? ? ? ? ? 555 MET A CB 1
+ATOM 323 C CG . MET A 1 65 ? 25.157 17.749 41.903 1.00 10.17 ? ? ? ? ? ? 555 MET A CG 1
+ATOM 324 S SD . MET A 1 65 ? 23.988 19.061 42.174 1.00 12.03 ? ? ? ? ? ? 555 MET A SD 1
+ATOM 325 C CE . MET A 1 65 ? 24.160 19.365 43.943 1.00 11.88 ? ? ? ? ? ? 555 MET A CE 1
+ATOM 326 N N . VAL A 1 66 ? 26.771 14.975 41.002 1.00 8.37 ? ? ? ? ? ? 556 VAL A N 1
+ATOM 327 C CA . VAL A 1 66 ? 26.363 13.847 40.160 1.00 8.94 ? ? ? ? ? ? 556 VAL A CA 1
+ATOM 328 C C . VAL A 1 66 ? 24.917 13.399 40.532 1.00 9.51 ? ? ? ? ? ? 556 VAL A C 1
+ATOM 329 O O . VAL A 1 66 ? 24.407 13.709 41.636 1.00 8.72 ? ? ? ? ? ? 556 VAL A O 1
+ATOM 330 C CB . VAL A 1 66 ? 27.335 12.615 40.253 1.00 9.90 ? ? ? ? ? ? 556 VAL A CB 1
+ATOM 331 C CG1 . VAL A 1 66 ? 28.651 12.901 39.530 1.00 11.18 ? ? ? ? ? ? 556 VAL A CG1 1
+ATOM 332 C CG2 . VAL A 1 66 ? 27.584 12.188 41.741 1.00 9.70 ? ? ? ? ? ? 556 VAL A CG2 1
+ATOM 333 N N . VAL A 1 67 ? 24.247 12.754 39.576 1.00 8.11 ? ? ? ? ? ? 557 VAL A N 1
+ATOM 334 C CA . VAL A 1 67 ? 22.883 12.262 39.750 1.00 9.04 ? ? ? ? ? ? 557 VAL A CA 1
+ATOM 335 C C . VAL A 1 67 ? 22.835 10.937 38.996 1.00 8.99 ? ? ? ? ? ? 557 VAL A C 1
+ATOM 336 O O . VAL A 1 67 ? 23.484 10.787 37.965 1.00 9.56 ? ? ? ? ? ? 557 VAL A O 1
+ATOM 337 C CB . VAL A 1 67 ? 21.822 13.227 39.094 1.00 10.16 ? ? ? ? ? ? 557 VAL A CB 1
+ATOM 338 C CG1 . VAL A 1 67 ? 20.390 12.873 39.539 1.00 10.54 ? ? ? ? ? ? 557 VAL A CG1 1
+ATOM 339 C CG2 . VAL A 1 67 ? 22.111 14.637 39.425 1.00 13.14 ? ? ? ? ? ? 557 VAL A CG2 1
+ATOM 340 N N . CYS A 1 68 ? 22.082 9.968 39.514 1.00 9.81 ? ? ? ? ? ? 558 CYS A N 1
+ATOM 341 C CA . CYS A 1 68 ? 21.909 8.666 38.868 1.00 12.43 ? ? ? ? ? ? 558 CYS A CA 1
+ATOM 342 C C . CYS A 1 68 ? 20.946 8.793 37.693 1.00 12.01 ? ? ? ? ? ? 558 CYS A C 1
+ATOM 343 O O . CYS A 1 68 ? 19.841 9.283 37.855 1.00 12.77 ? ? ? ? ? ? 558 CYS A O 1
+ATOM 344 C CB . CYS A 1 68 ? 21.281 7.668 39.856 1.00 13.77 ? ? ? ? ? ? 558 CYS A CB 1
+ATOM 345 S SG . CYS A 1 68 ? 22.436 6.991 41.064 1.00 18.71 ? ? ? ? ? ? 558 CYS A SG 1
+ATOM 346 N N . GLU A 1 69 ? 21.329 8.326 36.517 1.00 12.71 ? ? ? ? ? ? 559 GLU A N 1
+ATOM 347 C CA . GLU A 1 69 ? 20.405 8.462 35.395 1.00 13.52 ? ? ? ? ? ? 559 GLU A CA 1
+ATOM 348 C C . GLU A 1 69 ? 19.197 7.547 35.561 1.00 13.28 ? ? ? ? ? ? 559 GLU A C 1
+ATOM 349 O O . GLU A 1 69 ? 18.062 7.989 35.407 1.00 13.92 ? ? ? ? ? ? 559 GLU A O 1
+ATOM 350 C CB . GLU A 1 69 ? 21.107 8.152 34.069 1.00 14.74 ? ? ? ? ? ? 559 GLU A CB 1
+ATOM 351 C CG . GLU A 1 69 ? 20.216 8.400 32.865 1.00 16.84 ? ? ? ? ? ? 559 GLU A CG 1
+ATOM 352 C CD . GLU A 1 69 ? 20.884 8.073 31.529 1.00 19.09 ? ? ? ? ? ? 559 GLU A CD 1
+ATOM 353 O OE1 . GLU A 1 69 ? 22.051 7.611 31.523 1.00 19.16 ? ? ? ? ? ? 559 GLU A OE1 1
+ATOM 354 O OE2 . GLU A 1 69 ? 20.229 8.295 30.478 1.00 21.50 ? ? ? ? ? ? 559 GLU A OE2 1
+ATOM 355 N N . ASN A 1 70 ? 19.445 6.292 35.930 1.00 12.97 ? ? ? ? ? ? 560 ASN A N 1
+ATOM 356 C CA . ASN A 1 70 ? 18.355 5.306 36.052 1.00 15.58 ? ? ? ? ? ? 560 ASN A CA 1
+ATOM 357 C C . ASN A 1 70 ? 18.400 4.427 37.280 1.00 15.17 ? ? ? ? ? ? 560 ASN A C 1
+ATOM 358 O O . ASN A 1 70 ? 17.418 3.778 37.599 1.00 15.41 ? ? ? ? ? ? 560 ASN A O 1
+ATOM 359 C CB . ASN A 1 70 ? 18.425 4.317 34.883 1.00 17.86 ? ? ? ? ? ? 560 ASN A CB 1
+ATOM 360 C CG . ASN A 1 70 ? 18.156 4.963 33.549 1.00 20.52 ? ? ? ? ? ? 560 ASN A CG 1
+ATOM 361 O OD1 . ASN A 1 70 ? 17.068 5.493 33.305 1.00 23.03 ? ? ? ? ? ? 560 ASN A OD1 1
+ATOM 362 N ND2 . ASN A 1 70 ? 19.144 4.923 32.668 1.00 21.96 ? ? ? ? ? ? 560 ASN A ND2 1
+ATOM 363 N N . GLU A 1 71 ? 19.540 4.415 37.958 1.00 14.85 ? ? ? ? ? ? 561 GLU A N 1
+ATOM 364 C CA . GLU A 1 71 ? 19.774 3.522 39.081 1.00 14.96 ? ? ? ? ? ? 561 GLU A CA 1
+ATOM 365 C C . GLU A 1 71 ? 19.067 3.784 40.417 1.00 15.00 ? ? ? ? ? ? 561 GLU A C 1
+ATOM 366 O O . GLU A 1 71 ? 19.187 2.967 41.354 1.00 14.61 ? ? ? ? ? ? 561 GLU A O 1
+ATOM 367 C CB . GLU A 1 71 ? 21.289 3.331 39.265 1.00 17.32 ? ? ? ? ? ? 561 GLU A CB 1
+ATOM 368 C CG . GLU A 1 71 ? 21.986 2.667 38.070 1.00 18.89 ? ? ? ? ? ? 561 GLU A CG 1
+ATOM 369 C CD . GLU A 1 71 ? 22.133 3.572 36.816 1.00 20.84 ? ? ? ? ? ? 561 GLU A CD 1
+ATOM 370 O OE1 . GLU A 1 71 ? 21.933 4.827 36.888 1.00 20.56 ? ? ? ? ? ? 561 GLU A OE1 1
+ATOM 371 O OE2 . GLU A 1 71 ? 22.467 3.007 35.742 1.00 22.23 ? ? ? ? ? ? 561 GLU A OE2 1
+ATOM 372 N N . MET A 1 72 ? 18.416 4.937 40.554 1.00 12.29 ? ? ? ? ? ? 562 MET A N 1
+ATOM 373 C CA . MET A 1 72 ? 17.674 5.220 41.773 1.00 12.08 ? ? ? ? ? ? 562 MET A CA 1
+ATOM 374 C C . MET A 1 72 ? 16.182 5.404 41.518 1.00 11.74 ? ? ? ? ? ? 562 MET A C 1
+ATOM 375 O O . MET A 1 72 ? 15.473 6.007 42.332 1.00 12.97 ? ? ? ? ? ? 562 MET A O 1
+ATOM 376 C CB . MET A 1 72 ? 18.286 6.356 42.593 1.00 13.30 ? ? ? ? ? ? 562 MET A CB 1
+ATOM 377 C CG . MET A 1 72 ? 19.599 5.949 43.212 1.00 15.93 ? ? ? ? ? ? 562 MET A CG 1
+ATOM 378 S SD . MET A 1 72 ? 20.297 7.204 44.328 1.00 19.08 ? ? ? ? ? ? 562 MET A SD 1
+ATOM 379 C CE . MET A 1 72 ? 19.130 7.075 45.652 1.00 19.63 ? ? ? ? ? ? 562 MET A CE 1
+ATOM 380 N N . LYS A 1 73 ? 15.718 4.910 40.367 1.00 10.88 ? ? ? ? ? ? 563 LYS A N 1
+ATOM 381 C CA . LYS A 1 73 ? 14.290 4.930 40.041 1.00 12.47 ? ? ? ? ? ? 563 LYS A CA 1
+ATOM 382 C C . LYS A 1 73 ? 13.635 3.736 40.799 1.00 12.55 ? ? ? ? ? ? 563 LYS A C 1
+ATOM 383 O O . LYS A 1 73 ? 14.332 2.804 41.194 1.00 11.94 ? ? ? ? ? ? 563 LYS A O 1
+ATOM 384 C CB . LYS A 1 73 ? 14.072 4.843 38.523 1.00 15.12 ? ? ? ? ? ? 563 LYS A CB 1
+ATOM 385 C CG . LYS A 1 73 ? 14.261 6.203 37.872 1.00 17.16 ? ? ? ? ? ? 563 LYS A CG 1
+ATOM 386 C CD . LYS A 1 73 ? 14.413 6.088 36.382 1.00 19.34 ? ? ? ? ? ? 563 LYS A CD 1
+ATOM 387 C CE . LYS A 1 73 ? 14.874 7.463 35.843 1.00 20.42 ? ? ? ? ? ? 563 LYS A CE 1
+ATOM 388 N NZ . LYS A 1 73 ? 15.271 7.408 34.412 1.00 21.61 ? ? ? ? ? ? 563 LYS A NZ 1
+ATOM 389 N N . PHE A 1 74 ? 12.320 3.768 40.989 1.00 12.42 ? ? ? ? ? ? 564 PHE A N 1
+ATOM 390 C CA . PHE A 1 74 ? 11.590 2.731 41.772 1.00 12.98 ? ? ? ? ? ? 564 PHE A CA 1
+ATOM 391 C C . PHE A 1 74 ? 11.858 1.266 41.385 1.00 13.21 ? ? ? ? ? ? 564 PHE A C 1
+ATOM 392 O O . PHE A 1 74 ? 12.119 0.429 42.264 1.00 12.63 ? ? ? ? ? ? 564 PHE A O 1
+ATOM 393 C CB . PHE A 1 74 ? 10.099 3.043 41.741 1.00 12.27 ? ? ? ? ? ? 564 PHE A CB 1
+ATOM 394 C CG . PHE A 1 74 ? 9.322 2.526 42.922 1.00 12.49 ? ? ? ? ? ? 564 PHE A CG 1
+ATOM 395 C CD1 . PHE A 1 74 ? 9.065 1.154 43.070 1.00 13.09 ? ? ? ? ? ? 564 PHE A CD1 1
+ATOM 396 C CD2 . PHE A 1 74 ? 8.727 3.421 43.816 1.00 12.05 ? ? ? ? ? ? 564 PHE A CD2 1
+ATOM 397 C CE1 . PHE A 1 74 ? 8.205 0.694 44.097 1.00 12.00 ? ? ? ? ? ? 564 PHE A CE1 1
+ATOM 398 C CE2 . PHE A 1 74 ? 7.874 2.962 44.838 1.00 12.16 ? ? ? ? ? ? 564 PHE A CE2 1
+ATOM 399 C CZ . PHE A 1 74 ? 7.621 1.600 44.964 1.00 11.41 ? ? ? ? ? ? 564 PHE A CZ 1
+ATOM 400 N N . ASP A 1 75 ? 11.848 0.971 40.092 1.00 13.79 ? ? ? ? ? ? 565 ASP A N 1
+ATOM 401 C CA . ASP A 1 75 ? 12.104 -0.389 39.618 1.00 16.20 ? ? ? ? ? ? 565 ASP A CA 1
+ATOM 402 C C . ASP A 1 75 ? 13.513 -0.883 39.912 1.00 14.58 ? ? ? ? ? ? 565 ASP A C 1
+ATOM 403 O O . ASP A 1 75 ? 13.713 -2.071 40.112 1.00 16.53 ? ? ? ? ? ? 565 ASP A O 1
+ATOM 404 C CB . ASP A 1 75 ? 11.759 -0.556 38.119 1.00 18.42 ? ? ? ? ? ? 565 ASP A CB 1
+ATOM 405 C CG . ASP A 1 75 ? 12.691 0.232 37.166 1.00 21.03 ? ? ? ? ? ? 565 ASP A CG 1
+ATOM 406 O OD1 . ASP A 1 75 ? 13.301 1.279 37.510 1.00 21.94 ? ? ? ? ? ? 565 ASP A OD1 1
+ATOM 407 O OD2 . ASP A 1 75 ? 12.773 -0.193 36.004 1.00 24.30 ? ? ? ? ? ? 565 ASP A OD2 1
+ATOM 408 N N . ALA A 1 76 ? 14.486 0.023 39.952 1.00 13.35 ? ? ? ? ? ? 566 ALA A N 1
+ATOM 409 C CA . ALA A 1 76 ? 15.872 -0.340 40.221 1.00 12.37 ? ? ? ? ? ? 566 ALA A CA 1
+ATOM 410 C C . ALA A 1 76 ? 16.132 -0.557 41.704 1.00 11.90 ? ? ? ? ? ? 566 ALA A C 1
+ATOM 411 O O . ALA A 1 76 ? 16.885 -1.460 42.086 1.00 12.98 ? ? ? ? ? ? 566 ALA A O 1
+ATOM 412 C CB . ALA A 1 76 ? 16.823 0.737 39.684 1.00 13.87 ? ? ? ? ? ? 566 ALA A CB 1
+ATOM 413 N N . LEU A 1 77 ? 15.549 0.302 42.525 1.00 10.41 ? ? ? ? ? ? 567 LEU A N 1
+ATOM 414 C CA . LEU A 1 77 ? 15.731 0.238 43.971 1.00 10.75 ? ? ? ? ? ? 567 LEU A CA 1
+ATOM 415 C C . LEU A 1 77 ? 14.910 -0.831 44.701 1.00 10.05 ? ? ? ? ? ? 567 LEU A C 1
+ATOM 416 O O . LEU A 1 77 ? 15.370 -1.365 45.702 1.00 9.00 ? ? ? ? ? ? 567 LEU A O 1
+ATOM 417 C CB . LEU A 1 77 ? 15.460 1.611 44.615 1.00 11.83 ? ? ? ? ? ? 567 LEU A CB 1
+ATOM 418 C CG . LEU A 1 77 ? 16.651 2.576 44.639 1.00 13.21 ? ? ? ? ? ? 567 LEU A CG 1
+ATOM 419 C CD1 . LEU A 1 77 ? 16.195 3.948 45.141 1.00 13.06 ? ? ? ? ? ? 567 LEU A CD1 1
+ATOM 420 C CD2 . LEU A 1 77 ? 17.759 2.009 45.534 1.00 14.86 ? ? ? ? ? ? 567 LEU A CD2 1
+ATOM 421 N N . GLN A 1 78 ? 13.682 -1.083 44.251 1.00 9.16 ? ? ? ? ? ? 568 GLN A N 1
+ATOM 422 C CA . GLN A 1 78 ? 12.821 -2.086 44.902 1.00 9.03 ? ? ? ? ? ? 568 GLN A CA 1
+ATOM 423 C C . GLN A 1 78 ? 12.257 -2.995 43.804 1.00 9.11 ? ? ? ? ? ? 568 GLN A C 1
+ATOM 424 O O . GLN A 1 78 ? 11.068 -2.958 43.506 1.00 9.32 ? ? ? ? ? ? 568 GLN A O 1
+ATOM 425 C CB . GLN A 1 78 ? 11.698 -1.388 45.681 1.00 9.34 ? ? ? ? ? ? 568 GLN A CB 1
+ATOM 426 C CG . GLN A 1 78 ? 11.042 -2.344 46.681 1.00 9.49 ? ? ? ? ? ? 568 GLN A CG 1
+ATOM 427 C CD . GLN A 1 78 ? 9.925 -1.770 47.515 1.00 9.83 ? ? ? ? ? ? 568 GLN A CD 1
+ATOM 428 O OE1 . GLN A 1 78 ? 9.678 -0.549 47.579 1.00 10.82 ? ? ? ? ? ? 568 GLN A OE1 1
+ATOM 429 N NE2 . GLN A 1 78 ? 9.243 -2.664 48.199 1.00 7.54 ? ? ? ? ? ? 568 GLN A NE2 1
+ATOM 430 N N . PRO A 1 79 ? 13.110 -3.869 43.229 1.00 9.77 ? ? ? ? ? ? 569 PRO A N 1
+ATOM 431 C CA . PRO A 1 79 ? 12.740 -4.788 42.150 1.00 10.77 ? ? ? ? ? ? 569 PRO A CA 1
+ATOM 432 C C . PRO A 1 79 ? 11.710 -5.848 42.482 1.00 11.54 ? ? ? ? ? ? 569 PRO A C 1
+ATOM 433 O O . PRO A 1 79 ? 11.013 -6.334 41.604 1.00 12.27 ? ? ? ? ? ? 569 PRO A O 1
+ATOM 434 C CB . PRO A 1 79 ? 14.089 -5.378 41.720 1.00 11.53 ? ? ? ? ? ? 569 PRO A CB 1
+ATOM 435 C CG . PRO A 1 79 ? 14.891 -5.362 42.988 1.00 11.37 ? ? ? ? ? ? 569 PRO A CG 1
+ATOM 436 C CD . PRO A 1 79 ? 14.536 -4.029 43.588 1.00 10.78 ? ? ? ? ? ? 569 PRO A CD 1
+ATOM 437 N N . ARG A 1 80 ? 11.645 -6.231 43.751 1.00 12.37 ? ? ? ? ? ? 570 ARG A N 1
+ATOM 438 C CA . ARG A 1 80 ? 10.665 -7.217 44.243 1.00 12.40 ? ? ? ? ? ? 570 ARG A CA 1
+ATOM 439 C C . ARG A 1 80 ? 10.108 -6.578 45.493 1.00 11.70 ? ? ? ? ? ? 570 ARG A C 1
+ATOM 440 O O . ARG A 1 80 ? 10.791 -5.753 46.109 1.00 11.68 ? ? ? ? ? ? 570 ARG A O 1
+ATOM 441 C CB . ARG A 1 80 ? 11.335 -8.558 44.581 1.00 15.41 ? ? ? ? ? ? 570 ARG A CB 1
+ATOM 442 C CG . ARG A 1 80 ? 11.819 -9.291 43.327 1.00 19.94 ? ? ? ? ? ? 570 ARG A CG 1
+ATOM 443 C CD . ARG A 1 80 ? 12.279 -10.747 43.584 1.00 23.04 ? ? ? ? ? ? 570 ARG A CD 1
+ATOM 444 N NE . ARG A 1 80 ? 13.616 -10.839 44.185 1.00 25.11 ? ? ? ? ? ? 570 ARG A NE 1
+ATOM 445 C CZ . ARG A 1 80 ? 13.853 -11.332 45.401 1.00 26.45 ? ? ? ? ? ? 570 ARG A CZ 1
+ATOM 446 N NH1 . ARG A 1 80 ? 12.834 -11.768 46.145 1.00 27.52 ? ? ? ? ? ? 570 ARG A NH1 1
+ATOM 447 N NH2 . ARG A 1 80 ? 15.101 -11.382 45.869 1.00 25.90 ? ? ? ? ? ? 570 ARG A NH2 1
+ATOM 448 N N . GLN A 1 81 ? 8.897 -6.930 45.899 1.00 12.35 ? ? ? ? ? ? 571 GLN A N 1
+ATOM 449 C CA . GLN A 1 81 ? 8.314 -6.292 47.075 1.00 12.44 ? ? ? ? ? ? 571 GLN A CA 1
+ATOM 450 C C . GLN A 1 81 ? 9.161 -6.529 48.336 1.00 12.10 ? ? ? ? ? ? 571 GLN A C 1
+ATOM 451 O O . GLN A 1 81 ? 9.433 -7.664 48.726 1.00 11.73 ? ? ? ? ? ? 571 GLN A O 1
+ATOM 452 C CB . GLN A 1 81 ? 6.857 -6.701 47.289 1.00 14.56 ? ? ? ? ? ? 571 GLN A CB 1
+ATOM 453 C CG . GLN A 1 81 ? 6.202 -5.788 48.306 1.00 18.17 ? ? ? ? ? ? 571 GLN A CG 1
+ATOM 454 C CD . GLN A 1 81 ? 4.692 -5.861 48.362 1.00 21.29 ? ? ? ? ? ? 571 GLN A CD 1
+ATOM 455 O OE1 . GLN A 1 81 ? 4.060 -5.116 49.132 1.00 24.04 ? ? ? ? ? ? 571 GLN A OE1 1
+ATOM 456 N NE2 . GLN A 1 81 ? 4.096 -6.733 47.552 1.00 21.88 ? ? ? ? ? ? 571 GLN A NE2 1
+ATOM 457 N N . ASN A 1 82 ? 9.522 -5.426 48.979 1.00 11.04 ? ? ? ? ? ? 572 ASN A N 1
+ATOM 458 C CA . ASN A 1 82 ? 10.381 -5.393 50.160 1.00 12.42 ? ? ? ? ? ? 572 ASN A CA 1
+ATOM 459 C C . ASN A 1 82 ? 11.790 -5.899 50.036 1.00 11.15 ? ? ? ? ? ? 572 ASN A C 1
+ATOM 460 O O . ASN A 1 82 ? 12.384 -6.311 51.033 1.00 11.60 ? ? ? ? ? ? 572 ASN A O 1
+ATOM 461 C CB . ASN A 1 82 ? 9.737 -5.964 51.407 1.00 15.04 ? ? ? ? ? ? 572 ASN A CB 1
+ATOM 462 C CG . ASN A 1 82 ? 9.221 -4.894 52.268 1.00 18.98 ? ? ? ? ? ? 572 ASN A CG 1
+ATOM 463 O OD1 . ASN A 1 82 ? 9.995 -4.059 52.850 1.00 19.98 ? ? ? ? ? ? 572 ASN A OD1 1
+ATOM 464 N ND2 . ASN A 1 82 ? 7.911 -4.742 52.212 1.00 20.80 ? ? ? ? ? ? 572 ASN A ND2 1
+ATOM 465 N N . VAL A 1 83 ? 12.309 -5.873 48.813 1.00 9.96 ? ? ? ? ? ? 573 VAL A N 1
+ATOM 466 C CA . VAL A 1 83 ? 13.685 -6.252 48.509 1.00 10.18 ? ? ? ? ? ? 573 VAL A CA 1
+ATOM 467 C C . VAL A 1 83 ? 14.304 -4.970 47.904 1.00 11.30 ? ? ? ? ? ? 573 VAL A C 1
+ATOM 468 O O . VAL A 1 83 ? 13.812 -4.470 46.875 1.00 11.52 ? ? ? ? ? ? 573 VAL A O 1
+ATOM 469 C CB . VAL A 1 83 ? 13.745 -7.391 47.506 1.00 10.03 ? ? ? ? ? ? 573 VAL A CB 1
+ATOM 470 C CG1 . VAL A 1 83 ? 15.175 -7.687 47.151 1.00 10.66 ? ? ? ? ? ? 573 VAL A CG1 1
+ATOM 471 C CG2 . VAL A 1 83 ? 13.023 -8.657 48.098 1.00 9.74 ? ? ? ? ? ? 573 VAL A CG2 1
+ATOM 472 N N . PHE A 1 84 ? 15.340 -4.434 48.553 1.00 9.70 ? ? ? ? ? ? 574 PHE A N 1
+ATOM 473 C CA . PHE A 1 84 ? 15.965 -3.163 48.128 1.00 9.11 ? ? ? ? ? ? 574 PHE A CA 1
+ATOM 474 C C . PHE A 1 84 ? 17.352 -3.410 47.617 1.00 9.74 ? ? ? ? ? ? 574 PHE A C 1
+ATOM 475 O O . PHE A 1 84 ? 18.152 -4.098 48.268 1.00 11.03 ? ? ? ? ? ? 574 PHE A O 1
+ATOM 476 C CB . PHE A 1 84 ? 15.989 -2.161 49.302 1.00 8.51 ? ? ? ? ? ? 574 PHE A CB 1
+ATOM 477 C CG . PHE A 1 84 ? 14.613 -1.678 49.710 1.00 9.17 ? ? ? ? ? ? 574 PHE A CG 1
+ATOM 478 C CD1 . PHE A 1 84 ? 13.824 -2.414 50.605 1.00 9.18 ? ? ? ? ? ? 574 PHE A CD1 1
+ATOM 479 C CD2 . PHE A 1 84 ? 14.054 -0.524 49.143 1.00 9.56 ? ? ? ? ? ? 574 PHE A CD2 1
+ATOM 480 C CE1 . PHE A 1 84 ? 12.506 -2.021 50.922 1.00 8.61 ? ? ? ? ? ? 574 PHE A CE1 1
+ATOM 481 C CE2 . PHE A 1 84 ? 12.729 -0.132 49.466 1.00 10.00 ? ? ? ? ? ? 574 PHE A CE2 1
+ATOM 482 C CZ . PHE A 1 84 ? 11.961 -0.897 50.358 1.00 9.53 ? ? ? ? ? ? 574 PHE A CZ 1
+ATOM 483 N N . ASP A 1 85 ? 17.660 -2.855 46.457 1.00 8.49 ? ? ? ? ? ? 575 ASP A N 1
+ATOM 484 C CA . ASP A 1 85 ? 18.969 -3.048 45.884 1.00 8.62 ? ? ? ? ? ? 575 ASP A CA 1
+ATOM 485 C C . ASP A 1 85 ? 19.692 -1.703 45.888 1.00 9.81 ? ? ? ? ? ? 575 ASP A C 1
+ATOM 486 O O . ASP A 1 85 ? 19.393 -0.837 45.040 1.00 10.34 ? ? ? ? ? ? 575 ASP A O 1
+ATOM 487 C CB . ASP A 1 85 ? 18.822 -3.593 44.471 1.00 9.82 ? ? ? ? ? ? 575 ASP A CB 1
+ATOM 488 C CG . ASP A 1 85 ? 20.161 -3.860 43.795 1.00 11.13 ? ? ? ? ? ? 575 ASP A CG 1
+ATOM 489 O OD1 . ASP A 1 85 ? 21.230 -3.431 44.288 1.00 11.30 ? ? ? ? ? ? 575 ASP A OD1 1
+ATOM 490 O OD2 . ASP A 1 85 ? 20.149 -4.529 42.744 1.00 14.44 ? ? ? ? ? ? 575 ASP A OD2 1
+ATOM 491 N N . PHE A 1 86 ? 20.655 -1.531 46.805 1.00 8.48 ? ? ? ? ? ? 576 PHE A N 1
+ATOM 492 C CA . PHE A 1 86 ? 21.387 -0.274 46.921 1.00 8.30 ? ? ? ? ? ? 576 PHE A CA 1
+ATOM 493 C C . PHE A 1 86 ? 22.769 -0.330 46.258 1.00 9.49 ? ? ? ? ? ? 576 PHE A C 1
+ATOM 494 O O . PHE A 1 86 ? 23.550 0.625 46.382 1.00 10.33 ? ? ? ? ? ? 576 PHE A O 1
+ATOM 495 C CB . PHE A 1 86 ? 21.615 0.064 48.405 1.00 8.54 ? ? ? ? ? ? 576 PHE A CB 1
+ATOM 496 C CG . PHE A 1 86 ? 20.352 0.324 49.200 1.00 10.29 ? ? ? ? ? ? 576 PHE A CG 1
+ATOM 497 C CD1 . PHE A 1 86 ? 19.448 1.314 48.813 1.00 10.53 ? ? ? ? ? ? 576 PHE A CD1 1
+ATOM 498 C CD2 . PHE A 1 86 ? 20.077 -0.416 50.362 1.00 10.46 ? ? ? ? ? ? 576 PHE A CD2 1
+ATOM 499 C CE1 . PHE A 1 86 ? 18.284 1.570 49.558 1.00 12.42 ? ? ? ? ? ? 576 PHE A CE1 1
+ATOM 500 C CE2 . PHE A 1 86 ? 18.907 -0.164 51.121 1.00 11.16 ? ? ? ? ? ? 576 PHE A CE2 1
+ATOM 501 C CZ . PHE A 1 86 ? 18.011 0.830 50.717 1.00 11.25 ? ? ? ? ? ? 576 PHE A CZ 1
+ATOM 502 N N . SER A 1 87 ? 23.093 -1.429 45.588 1.00 9.04 ? ? ? ? ? ? 577 SER A N 1
+ATOM 503 C CA . SER A 1 87 ? 24.419 -1.578 45.042 1.00 10.38 ? ? ? ? ? ? 577 SER A CA 1
+ATOM 504 C C . SER A 1 87 ? 24.963 -0.440 44.168 1.00 10.38 ? ? ? ? ? ? 577 SER A C 1
+ATOM 505 O O . SER A 1 87 ? 26.034 0.098 44.459 1.00 11.09 ? ? ? ? ? ? 577 SER A O 1
+ATOM 506 C CB . SER A 1 87 ? 24.581 -2.925 44.347 1.00 11.36 ? ? ? ? ? ? 577 SER A CB 1
+ATOM 507 O OG . SER A 1 87 ? 23.678 -3.038 43.273 1.00 15.81 ? ? ? ? ? ? 577 SER A OG 1
+ATOM 508 N N . LYS A 1 88 ? 24.228 -0.074 43.115 1.00 11.96 ? ? ? ? ? ? 578 LYS A N 1
+ATOM 509 C CA . LYS A 1 88 ? 24.687 0.990 42.200 1.00 11.14 ? ? ? ? ? ? 578 LYS A CA 1
+ATOM 510 C C . LYS A 1 88 ? 24.701 2.375 42.810 1.00 10.31 ? ? ? ? ? ? 578 LYS A C 1
+ATOM 511 O O . LYS A 1 88 ? 25.673 3.116 42.661 1.00 11.06 ? ? ? ? ? ? 578 LYS A O 1
+ATOM 512 C CB . LYS A 1 88 ? 23.902 0.935 40.892 1.00 11.44 ? ? ? ? ? ? 578 LYS A CB 1
+ATOM 513 C CG . LYS A 1 88 ? 24.284 -0.299 40.108 1.00 13.23 ? ? ? ? ? ? 578 LYS A CG 1
+ATOM 514 C CD . LYS A 1 88 ? 23.758 -0.276 38.712 1.00 15.30 ? ? ? ? ? ? 578 LYS A CD 1
+ATOM 515 C CE . LYS A 1 88 ? 24.309 -1.457 37.954 1.00 17.76 ? ? ? ? ? ? 578 LYS A CE 1
+ATOM 516 N NZ . LYS A 1 88 ? 23.869 -1.409 36.526 1.00 19.51 ? ? ? ? ? ? 578 LYS A NZ 1
+ATOM 517 N N . GLY A 1 89 ? 23.674 2.686 43.587 1.00 10.04 ? ? ? ? ? ? 579 GLY A N 1
+ATOM 518 C CA . GLY A 1 89 ? 23.612 3.973 44.240 1.00 10.33 ? ? ? ? ? ? 579 GLY A CA 1
+ATOM 519 C C . GLY A 1 89 ? 24.736 4.141 45.244 1.00 9.65 ? ? ? ? ? ? 579 GLY A C 1
+ATOM 520 O O . GLY A 1 89 ? 25.304 5.220 45.337 1.00 11.01 ? ? ? ? ? ? 579 GLY A O 1
+ATOM 521 N N . ASP A 1 90 ? 25.085 3.085 45.986 1.00 10.04 ? ? ? ? ? ? 580 ASP A N 1
+ATOM 522 C CA . ASP A 1 90 ? 26.172 3.174 46.983 1.00 10.22 ? ? ? ? ? ? 580 ASP A CA 1
+ATOM 523 C C . ASP A 1 90 ? 27.527 3.295 46.300 1.00 9.18 ? ? ? ? ? ? 580 ASP A C 1
+ATOM 524 O O . ASP A 1 90 ? 28.437 3.909 46.841 1.00 10.73 ? ? ? ? ? ? 580 ASP A O 1
+ATOM 525 C CB . ASP A 1 90 ? 26.168 1.976 47.972 1.00 12.50 ? ? ? ? ? ? 580 ASP A CB 1
+ATOM 526 C CG . ASP A 1 90 ? 25.057 2.072 49.055 1.00 14.21 ? ? ? ? ? ? 580 ASP A CG 1
+ATOM 527 O OD1 . ASP A 1 90 ? 24.188 2.955 49.004 1.00 13.52 ? ? ? ? ? ? 580 ASP A OD1 1
+ATOM 528 O OD2 . ASP A 1 90 ? 25.049 1.221 49.972 1.00 15.49 ? ? ? ? ? ? 580 ASP A OD2 1
+ATOM 529 N N . GLN A 1 91 ? 27.665 2.652 45.146 1.00 9.92 ? ? ? ? ? ? 581 GLN A N 1
+ATOM 530 C CA . GLN A 1 91 ? 28.883 2.735 44.350 1.00 11.72 ? ? ? ? ? ? 581 GLN A CA 1
+ATOM 531 C C . GLN A 1 91 ? 29.065 4.198 43.854 1.00 11.64 ? ? ? ? ? ? 581 GLN A C 1
+ATOM 532 O O . GLN A 1 91 ? 30.170 4.745 43.924 1.00 12.21 ? ? ? ? ? ? 581 GLN A O 1
+ATOM 533 C CB . GLN A 1 91 ? 28.800 1.804 43.151 1.00 13.55 ? ? ? ? ? ? 581 GLN A CB 1
+ATOM 534 C CG . GLN A 1 91 ? 30.123 1.640 42.471 1.00 18.11 ? ? ? ? ? ? 581 GLN A CG 1
+ATOM 535 C CD . GLN A 1 91 ? 30.041 0.850 41.168 1.00 21.45 ? ? ? ? ? ? 581 GLN A CD 1
+ATOM 536 O OE1 . GLN A 1 91 ? 30.920 0.997 40.298 1.00 24.51 ? ? ? ? ? ? 581 GLN A OE1 1
+ATOM 537 N NE2 . GLN A 1 91 ? 28.996 0.029 41.010 1.00 20.61 ? ? ? ? ? ? 581 GLN A NE2 1
+ATOM 538 N N . LEU A 1 92 ? 27.999 4.837 43.366 1.00 9.96 ? ? ? ? ? ? 582 LEU A N 1
+ATOM 539 C CA . LEU A 1 92 ? 28.132 6.234 42.936 1.00 10.73 ? ? ? ? ? ? 582 LEU A CA 1
+ATOM 540 C C . LEU A 1 92 ? 28.414 7.183 44.116 1.00 10.35 ? ? ? ? ? ? 582 LEU A C 1
+ATOM 541 O O . LEU A 1 92 ? 29.228 8.110 44.014 1.00 10.03 ? ? ? ? ? ? 582 LEU A O 1
+ATOM 542 C CB . LEU A 1 92 ? 26.905 6.695 42.141 1.00 10.29 ? ? ? ? ? ? 582 LEU A CB 1
+ATOM 543 C CG . LEU A 1 92 ? 27.036 8.125 41.589 1.00 10.67 ? ? ? ? ? ? 582 LEU A CG 1
+ATOM 544 C CD1 . LEU A 1 92 ? 28.254 8.259 40.663 1.00 11.85 ? ? ? ? ? ? 582 LEU A CD1 1
+ATOM 545 C CD2 . LEU A 1 92 ? 25.773 8.451 40.815 1.00 11.84 ? ? ? ? ? ? 582 LEU A CD2 1
+ATOM 546 N N . LEU A 1 93 ? 27.768 6.953 45.257 1.00 9.56 ? ? ? ? ? ? 583 LEU A N 1
+ATOM 547 C CA . LEU A 1 93 ? 28.001 7.818 46.403 1.00 9.90 ? ? ? ? ? ? 583 LEU A CA 1
+ATOM 548 C C . LEU A 1 93 ? 29.457 7.722 46.878 1.00 9.16 ? ? ? ? ? ? 583 LEU A C 1
+ATOM 549 O O . LEU A 1 93 ? 30.057 8.721 47.228 1.00 9.96 ? ? ? ? ? ? 583 LEU A O 1
+ATOM 550 C CB . LEU A 1 93 ? 27.023 7.499 47.537 1.00 11.71 ? ? ? ? ? ? 583 LEU A CB 1
+ATOM 551 C CG . LEU A 1 93 ? 27.173 8.321 48.825 1.00 13.57 ? ? ? ? ? ? 583 LEU A CG 1
+ATOM 552 C CD1 . LEU A 1 93 ? 26.782 9.808 48.592 1.00 14.73 ? ? ? ? ? ? 583 LEU A CD1 1
+ATOM 553 C CD2 . LEU A 1 93 ? 26.305 7.695 49.936 1.00 15.24 ? ? ? ? ? ? 583 LEU A CD2 1
+ATOM 554 N N . ALA A 1 94 ? 30.028 6.525 46.885 1.00 9.86 ? ? ? ? ? ? 584 ALA A N 1
+ATOM 555 C CA . ALA A 1 94 ? 31.421 6.362 47.320 1.00 10.89 ? ? ? ? ? ? 584 ALA A CA 1
+ATOM 556 C C . ALA A 1 94 ? 32.378 7.169 46.383 1.00 10.75 ? ? ? ? ? ? 584 ALA A C 1
+ATOM 557 O O . ALA A 1 94 ? 33.355 7.787 46.831 1.00 10.77 ? ? ? ? ? ? 584 ALA A O 1
+ATOM 558 C CB . ALA A 1 94 ? 31.796 4.873 47.341 1.00 10.98 ? ? ? ? ? ? 584 ALA A CB 1
+ATOM 559 N N . PHE A 1 95 ? 32.113 7.111 45.081 1.00 11.30 ? ? ? ? ? ? 585 PHE A N 1
+ATOM 560 C CA . PHE A 1 95 ? 32.899 7.851 44.092 1.00 10.70 ? ? ? ? ? ? 585 PHE A CA 1
+ATOM 561 C C . PHE A 1 95 ? 32.740 9.351 44.358 1.00 10.59 ? ? ? ? ? ? 585 PHE A C 1
+ATOM 562 O O . PHE A 1 95 ? 33.738 10.077 44.384 1.00 10.72 ? ? ? ? ? ? 585 PHE A O 1
+ATOM 563 C CB . PHE A 1 95 ? 32.395 7.487 42.685 1.00 12.01 ? ? ? ? ? ? 585 PHE A CB 1
+ATOM 564 C CG . PHE A 1 95 ? 32.891 8.401 41.579 1.00 13.07 ? ? ? ? ? ? 585 PHE A CG 1
+ATOM 565 C CD1 . PHE A 1 95 ? 34.106 8.154 40.941 1.00 13.99 ? ? ? ? ? ? 585 PHE A CD1 1
+ATOM 566 C CD2 . PHE A 1 95 ? 32.098 9.464 41.132 1.00 13.59 ? ? ? ? ? ? 585 PHE A CD2 1
+ATOM 567 C CE1 . PHE A 1 95 ? 34.528 8.948 39.870 1.00 13.36 ? ? ? ? ? ? 585 PHE A CE1 1
+ATOM 568 C CE2 . PHE A 1 95 ? 32.508 10.254 40.074 1.00 13.44 ? ? ? ? ? ? 585 PHE A CE2 1
+ATOM 569 C CZ . PHE A 1 95 ? 33.725 9.988 39.448 1.00 13.72 ? ? ? ? ? ? 585 PHE A CZ 1
+ATOM 570 N N . ALA A 1 96 ? 31.505 9.812 44.594 1.00 9.66 ? ? ? ? ? ? 586 ALA A N 1
+ATOM 571 C CA . ALA A 1 96 ? 31.236 11.240 44.851 1.00 9.63 ? ? ? ? ? ? 586 ALA A CA 1
+ATOM 572 C C . ALA A 1 96 ? 32.013 11.738 46.051 1.00 11.79 ? ? ? ? ? ? 586 ALA A C 1
+ATOM 573 O O . ALA A 1 96 ? 32.690 12.774 46.000 1.00 11.85 ? ? ? ? ? ? 586 ALA A O 1
+ATOM 574 C CB . ALA A 1 96 ? 29.759 11.485 45.059 1.00 10.04 ? ? ? ? ? ? 586 ALA A CB 1
+ATOM 575 N N . GLU A 1 97 ? 31.984 10.956 47.119 1.00 12.40 ? ? ? ? ? ? 587 GLU A N 1
+ATOM 576 C CA . GLU A 1 97 ? 32.678 11.341 48.335 1.00 15.08 ? ? ? ? ? ? 587 GLU A CA 1
+ATOM 577 C C . GLU A 1 97 ? 34.204 11.446 48.203 1.00 14.23 ? ? ? ? ? ? 587 GLU A C 1
+ATOM 578 O O . GLU A 1 97 ? 34.797 12.386 48.741 1.00 15.23 ? ? ? ? ? ? 587 GLU A O 1
+ATOM 579 C CB . GLU A 1 97 ? 32.265 10.423 49.494 1.00 19.00 ? ? ? ? ? ? 587 GLU A CB 1
+ATOM 580 C CG . GLU A 1 97 ? 30.790 10.633 49.872 1.00 24.24 ? ? ? ? ? ? 587 GLU A CG 1
+ATOM 581 C CD . GLU A 1 97 ? 30.352 9.857 51.101 1.00 27.57 ? ? ? ? ? ? 587 GLU A CD 1
+ATOM 582 O OE1 . GLU A 1 97 ? 30.760 8.676 51.256 1.00 28.92 ? ? ? ? ? ? 587 GLU A OE1 1
+ATOM 583 O OE2 . GLU A 1 97 ? 29.578 10.445 51.901 1.00 30.04 ? ? ? ? ? ? 587 GLU A OE2 1
+ATOM 584 N N . ARG A 1 98 ? 34.842 10.540 47.463 1.00 12.93 ? ? ? ? ? ? 588 ARG A N 1
+ATOM 585 C CA . ARG A 1 98 ? 36.294 10.654 47.341 1.00 13.31 ? ? ? ? ? ? 588 ARG A CA 1
+ATOM 586 C C . ARG A 1 98 ? 36.691 11.716 46.317 1.00 12.35 ? ? ? ? ? ? 588 ARG A C 1
+ATOM 587 O O . ARG A 1 98 ? 37.864 12.059 46.189 1.00 12.04 ? ? ? ? ? ? 588 ARG A O 1
+ATOM 588 C CB . ARG A 1 98 ? 36.983 9.310 47.104 1.00 14.50 ? ? ? ? ? ? 588 ARG A CB 1
+ATOM 589 C CG . ARG A 1 98 ? 36.752 8.664 45.801 1.00 16.91 ? ? ? ? ? ? 588 ARG A CG 1
+ATOM 590 C CD . ARG A 1 98 ? 37.369 7.266 45.836 1.00 19.74 ? ? ? ? ? ? 588 ARG A CD 1
+ATOM 591 N NE . ARG A 1 98 ? 37.339 6.626 44.519 1.00 20.85 ? ? ? ? ? ? 588 ARG A NE 1
+ATOM 592 C CZ . ARG A 1 98 ? 36.405 5.771 44.084 1.00 22.70 ? ? ? ? ? ? 588 ARG A CZ 1
+ATOM 593 N NH1 . ARG A 1 98 ? 35.375 5.405 44.842 1.00 22.75 ? ? ? ? ? ? 588 ARG A NH1 1
+ATOM 594 N NH2 . ARG A 1 98 ? 36.518 5.257 42.864 1.00 24.85 ? ? ? ? ? ? 588 ARG A NH2 1
+ATOM 595 N N . ASN A 1 99 ? 35.699 12.261 45.628 1.00 11.09 ? ? ? ? ? ? 589 ASN A N 1
+ATOM 596 C CA . ASN A 1 99 ? 35.956 13.318 44.652 1.00 11.19 ? ? ? ? ? ? 589 ASN A CA 1
+ATOM 597 C C . ASN A 1 99 ? 35.373 14.675 45.048 1.00 12.23 ? ? ? ? ? ? 589 ASN A C 1
+ATOM 598 O O . ASN A 1 99 ? 35.372 15.611 44.258 1.00 13.60 ? ? ? ? ? ? 589 ASN A O 1
+ATOM 599 C CB . ASN A 1 99 ? 35.512 12.893 43.266 1.00 10.52 ? ? ? ? ? ? 589 ASN A CB 1
+ATOM 600 C CG . ASN A 1 99 ? 36.448 11.891 42.671 1.00 11.20 ? ? ? ? ? ? 589 ASN A CG 1
+ATOM 601 O OD1 . ASN A 1 99 ? 37.617 12.208 42.407 1.00 12.39 ? ? ? ? ? ? 589 ASN A OD1 1
+ATOM 602 N ND2 . ASN A 1 99 ? 35.983 10.663 42.493 1.00 12.35 ? ? ? ? ? ? 589 ASN A ND2 1
+ATOM 603 N N . GLY A 1 100 ? 34.948 14.799 46.303 1.00 11.11 ? ? ? ? ? ? 590 GLY A N 1
+ATOM 604 C CA . GLY A 1 100 ? 34.409 16.046 46.802 1.00 12.54 ? ? ? ? ? ? 590 GLY A CA 1
+ATOM 605 C C . GLY A 1 100 ? 33.187 16.543 46.046 1.00 13.67 ? ? ? ? ? ? 590 GLY A C 1
+ATOM 606 O O . GLY A 1 100 ? 33.016 17.752 45.853 1.00 14.76 ? ? ? ? ? ? 590 GLY A O 1
+ATOM 607 N N . MET A 1 101 ? 32.322 15.611 45.659 1.00 11.86 ? ? ? ? ? ? 591 MET A N 1
+ATOM 608 C CA . MET A 1 101 ? 31.110 15.937 44.929 1.00 11.81 ? ? ? ? ? ? 591 MET A CA 1
+ATOM 609 C C . MET A 1 101 ? 29.856 15.722 45.774 1.00 12.73 ? ? ? ? ? ? 591 MET A C 1
+ATOM 610 O O . MET A 1 101 ? 29.828 14.854 46.660 1.00 13.18 ? ? ? ? ? ? 591 MET A O 1
+ATOM 611 C CB . MET A 1 101 ? 30.974 15.007 43.729 1.00 12.03 ? ? ? ? ? ? 591 MET A CB 1
+ATOM 612 C CG . MET A 1 101 ? 32.109 15.061 42.737 1.00 13.60 ? ? ? ? ? ? 591 MET A CG 1
+ATOM 613 S SD . MET A 1 101 ? 31.837 13.777 41.558 1.00 17.11 ? ? ? ? ? ? 591 MET A SD 1
+ATOM 614 C CE . MET A 1 101 ? 32.965 14.238 40.297 1.00 18.14 ? ? ? ? ? ? 591 MET A CE 1
+ATOM 615 N N . GLN A 1 102 ? 28.814 16.500 45.482 1.00 11.47 ? ? ? ? ? ? 592 GLN A N 1
+ATOM 616 C CA . GLN A 1 102 ? 27.510 16.321 46.126 1.00 11.95 ? ? ? ? ? ? 592 GLN A CA 1
+ATOM 617 C C . GLN A 1 102 ? 26.674 15.444 45.190 1.00 11.52 ? ? ? ? ? ? 592 GLN A C 1
+ATOM 618 O O . GLN A 1 102 ? 27.031 15.254 44.020 1.00 10.61 ? ? ? ? ? ? 592 GLN A O 1
+ATOM 619 C CB . GLN A 1 102 ? 26.801 17.655 46.371 1.00 14.73 ? ? ? ? ? ? 592 GLN A CB 1
+ATOM 620 C CG . GLN A 1 102 ? 27.451 18.487 47.472 1.00 19.63 ? ? ? ? ? ? 592 GLN A CG 1
+ATOM 621 C CD . GLN A 1 102 ? 26.701 19.777 47.758 1.00 23.71 ? ? ? ? ? ? 592 GLN A CD 1
+ATOM 622 O OE1 . GLN A 1 102 ? 26.914 20.393 48.812 1.00 27.70 ? ? ? ? ? ? 592 GLN A OE1 1
+ATOM 623 N NE2 . GLN A 1 102 ? 25.783 20.176 46.858 1.00 24.73 ? ? ? ? ? ? 592 GLN A NE2 1
+ATOM 624 N N . MET A 1 103 ? 25.549 14.932 45.676 1.00 10.95 ? ? ? ? ? ? 593 MET A N 1
+ATOM 625 C CA . MET A 1 103 ? 24.717 14.071 44.856 1.00 11.58 ? ? ? ? ? ? 593 MET A CA 1
+ATOM 626 C C . MET A 1 103 ? 23.246 14.468 44.999 1.00 10.01 ? ? ? ? ? ? 593 MET A C 1
+ATOM 627 O O . MET A 1 103 ? 22.849 14.991 46.052 1.00 12.78 ? ? ? ? ? ? 593 MET A O 1
+ATOM 628 C CB . MET A 1 103 ? 24.948 12.633 45.335 1.00 13.38 ? ? ? ? ? ? 593 MET A CB 1
+ATOM 629 C CG . MET A 1 103 ? 24.256 11.533 44.588 1.00 17.02 ? ? ? ? ? ? 593 MET A CG 1
+ATOM 630 S SD . MET A 1 103 ? 24.938 9.915 45.134 1.00 19.41 ? ? ? ? ? ? 593 MET A SD 1
+ATOM 631 C CE . MET A 1 103 ? 23.635 8.775 44.598 1.00 20.39 ? ? ? ? ? ? 593 MET A CE 1
+ATOM 632 N N . ARG A 1 104 ? 22.490 14.379 43.907 1.00 8.19 ? ? ? ? ? ? 594 ARG A N 1
+ATOM 633 C CA . ARG A 1 104 ? 21.038 14.611 43.945 1.00 8.93 ? ? ? ? ? ? 594 ARG A CA 1
+ATOM 634 C C . ARG A 1 104 ? 20.394 13.207 43.875 1.00 8.31 ? ? ? ? ? ? 594 ARG A C 1
+ATOM 635 O O . ARG A 1 104 ? 20.926 12.302 43.224 1.00 9.88 ? ? ? ? ? ? 594 ARG A O 1
+ATOM 636 C CB . ARG A 1 104 ? 20.502 15.429 42.738 1.00 9.04 ? ? ? ? ? ? 594 ARG A CB 1
+ATOM 637 C CG . ARG A 1 104 ? 21.149 16.806 42.508 1.00 9.14 ? ? ? ? ? ? 594 ARG A CG 1
+ATOM 638 C CD . ARG A 1 104 ? 20.365 17.594 41.462 1.00 7.96 ? ? ? ? ? ? 594 ARG A CD 1
+ATOM 639 N NE . ARG A 1 104 ? 19.123 18.140 42.007 1.00 8.48 ? ? ? ? ? ? 594 ARG A NE 1
+ATOM 640 C CZ . ARG A 1 104 ? 17.885 17.703 41.739 1.00 8.59 ? ? ? ? ? ? 594 ARG A CZ 1
+ATOM 641 N NH1 . ARG A 1 104 ? 17.672 16.701 40.895 1.00 8.09 ? ? ? ? ? ? 594 ARG A NH1 1
+ATOM 642 N NH2 . ARG A 1 104 ? 16.849 18.219 42.394 1.00 7.94 ? ? ? ? ? ? 594 ARG A NH2 1
+ATOM 643 N N . GLY A 1 105 ? 19.254 13.034 44.533 1.00 7.75 ? ? ? ? ? ? 595 GLY A N 1
+ATOM 644 C CA . GLY A 1 105 ? 18.558 11.753 44.490 1.00 8.52 ? ? ? ? ? ? 595 GLY A CA 1
+ATOM 645 C C . GLY A 1 105 ? 17.439 11.843 43.463 1.00 7.86 ? ? ? ? ? ? 595 GLY A C 1
+ATOM 646 O O . GLY A 1 105 ? 16.585 12.699 43.558 1.00 9.47 ? ? ? ? ? ? 595 GLY A O 1
+ATOM 647 N N . HIS A 1 106 ? 17.393 10.910 42.531 1.00 8.73 ? ? ? ? ? ? 596 HIS A N 1
+ATOM 648 C CA . HIS A 1 106 ? 16.406 10.953 41.482 1.00 7.94 ? ? ? ? ? ? 596 HIS A CA 1
+ATOM 649 C C . HIS A 1 106 ? 15.952 9.513 41.226 1.00 8.14 ? ? ? ? ? ? 596 HIS A C 1
+ATOM 650 O O . HIS A 1 106 ? 16.745 8.713 40.778 1.00 9.92 ? ? ? ? ? ? 596 HIS A O 1
+ATOM 651 C CB . HIS A 1 106 ? 17.124 11.553 40.248 1.00 9.36 ? ? ? ? ? ? 596 HIS A CB 1
+ATOM 652 C CG . HIS A 1 106 ? 16.291 11.591 39.006 1.00 10.80 ? ? ? ? ? ? 596 HIS A CG 1
+ATOM 653 N ND1 . HIS A 1 106 ? 15.337 12.559 38.773 1.00 11.73 ? ? ? ? ? ? 596 HIS A ND1 1
+ATOM 654 C CD2 . HIS A 1 106 ? 16.275 10.778 37.920 1.00 12.56 ? ? ? ? ? ? 596 HIS A CD2 1
+ATOM 655 C CE1 . HIS A 1 106 ? 14.769 12.344 37.598 1.00 12.76 ? ? ? ? ? ? 596 HIS A CE1 1
+ATOM 656 N NE2 . HIS A 1 106 ? 15.318 11.267 37.058 1.00 13.02 ? ? ? ? ? ? 596 HIS A NE2 1
+ATOM 657 N N . THR A 1 107 ? 14.684 9.162 41.427 1.00 8.09 ? ? ? ? ? ? 597 THR A N 1
+ATOM 658 C CA . THR A 1 107 ? 13.588 10.015 41.887 1.00 8.14 ? ? ? ? ? ? 597 THR A CA 1
+ATOM 659 C C . THR A 1 107 ? 12.621 9.019 42.554 1.00 8.44 ? ? ? ? ? ? 597 THR A C 1
+ATOM 660 O O . THR A 1 107 ? 12.537 7.863 42.132 1.00 9.27 ? ? ? ? ? ? 597 THR A O 1
+ATOM 661 C CB . THR A 1 107 ? 12.857 10.707 40.697 1.00 8.07 ? ? ? ? ? ? 597 THR A CB 1
+ATOM 662 O OG1 . THR A 1 107 ? 11.738 11.439 41.182 1.00 9.27 ? ? ? ? ? ? 597 THR A OG1 1
+ATOM 663 C CG2 . THR A 1 107 ? 12.392 9.693 39.651 1.00 9.25 ? ? ? ? ? ? 597 THR A CG2 1
+ATOM 664 N N . LEU A 1 108 ? 11.864 9.472 43.545 1.00 8.35 ? ? ? ? ? ? 598 LEU A N 1
+ATOM 665 C CA . LEU A 1 108 ? 10.989 8.568 44.286 1.00 9.50 ? ? ? ? ? ? 598 LEU A CA 1
+ATOM 666 C C . LEU A 1 108 ? 9.645 8.210 43.673 1.00 9.54 ? ? ? ? ? ? 598 LEU A C 1
+ATOM 667 O O . LEU A 1 108 ? 9.377 7.040 43.408 1.00 12.35 ? ? ? ? ? ? 598 LEU A O 1
+ATOM 668 C CB . LEU A 1 108 ? 10.838 9.074 45.734 1.00 9.29 ? ? ? ? ? ? 598 LEU A CB 1
+ATOM 669 C CG . LEU A 1 108 ? 12.154 9.258 46.501 1.00 9.29 ? ? ? ? ? ? 598 LEU A CG 1
+ATOM 670 C CD1 . LEU A 1 108 ? 11.970 10.051 47.740 1.00 10.09 ? ? ? ? ? ? 598 LEU A CD1 1
+ATOM 671 C CD2 . LEU A 1 108 ? 12.786 7.915 46.818 1.00 10.46 ? ? ? ? ? ? 598 LEU A CD2 1
+ATOM 672 N N . ILE A 1 109 ? 8.811 9.206 43.425 1.00 9.46 ? ? ? ? ? ? 599 ILE A N 1
+ATOM 673 C CA . ILE A 1 109 ? 7.468 8.979 42.900 1.00 10.99 ? ? ? ? ? ? 599 ILE A CA 1
+ATOM 674 C C . ILE A 1 109 ? 7.327 9.468 41.450 1.00 10.62 ? ? ? ? ? ? 599 ILE A C 1
+ATOM 675 O O . ILE A 1 109 ? 7.436 10.658 41.173 1.00 11.12 ? ? ? ? ? ? 599 ILE A O 1
+ATOM 676 C CB . ILE A 1 109 ? 6.430 9.675 43.824 1.00 11.60 ? ? ? ? ? ? 599 ILE A CB 1
+ATOM 677 C CG1 . ILE A 1 109 ? 6.578 9.192 45.293 1.00 12.74 ? ? ? ? ? ? 599 ILE A CG1 1
+ATOM 678 C CG2 . ILE A 1 109 ? 5.029 9.453 43.305 1.00 13.24 ? ? ? ? ? ? 599 ILE A CG2 1
+ATOM 679 C CD1 . ILE A 1 109 ? 6.568 7.645 45.498 1.00 13.61 ? ? ? ? ? ? 599 ILE A CD1 1
+ATOM 680 N N . TRP A 1 110 ? 7.038 8.546 40.540 1.00 10.60 ? ? ? ? ? ? 600 TRP A N 1
+ATOM 681 C CA . TRP A 1 110 ? 6.928 8.863 39.113 1.00 12.78 ? ? ? ? ? ? 600 TRP A CA 1
+ATOM 682 C C . TRP A 1 110 ? 5.914 7.883 38.485 1.00 14.21 ? ? ? ? ? ? 600 TRP A C 1
+ATOM 683 O O . TRP A 1 110 ? 5.631 6.822 39.056 1.00 13.85 ? ? ? ? ? ? 600 TRP A O 1
+ATOM 684 C CB . TRP A 1 110 ? 8.323 8.688 38.493 1.00 12.55 ? ? ? ? ? ? 600 TRP A CB 1
+ATOM 685 C CG . TRP A 1 110 ? 8.523 9.123 37.052 1.00 14.25 ? ? ? ? ? ? 600 TRP A CG 1
+ATOM 686 C CD1 . TRP A 1 110 ? 7.865 10.117 36.371 1.00 14.13 ? ? ? ? ? ? 600 TRP A CD1 1
+ATOM 687 C CD2 . TRP A 1 110 ? 9.517 8.620 36.162 1.00 15.59 ? ? ? ? ? ? 600 TRP A CD2 1
+ATOM 688 N NE1 . TRP A 1 110 ? 8.406 10.267 35.102 1.00 13.78 ? ? ? ? ? ? 600 TRP A NE1 1
+ATOM 689 C CE2 . TRP A 1 110 ? 9.420 9.362 34.949 1.00 15.35 ? ? ? ? ? ? 600 TRP A CE2 1
+ATOM 690 C CE3 . TRP A 1 110 ? 10.493 7.612 36.267 1.00 17.01 ? ? ? ? ? ? 600 TRP A CE3 1
+ATOM 691 C CZ2 . TRP A 1 110 ? 10.270 9.124 33.849 1.00 16.96 ? ? ? ? ? ? 600 TRP A CZ2 1
+ATOM 692 C CZ3 . TRP A 1 110 ? 11.334 7.376 35.175 1.00 17.84 ? ? ? ? ? ? 600 TRP A CZ3 1
+ATOM 693 C CH2 . TRP A 1 110 ? 11.216 8.135 33.978 1.00 17.15 ? ? ? ? ? ? 600 TRP A CH2 1
+ATOM 694 N N . HIS A 1 111 ? 5.343 8.230 37.326 1.00 14.33 ? ? ? ? ? ? 601 HIS A N 1
+ATOM 695 C CA . HIS A 1 111 ? 4.372 7.335 36.675 1.00 15.58 ? ? ? ? ? ? 601 HIS A CA 1
+ATOM 696 C C . HIS A 1 111 ? 5.053 6.317 35.755 1.00 17.02 ? ? ? ? ? ? 601 HIS A C 1
+ATOM 697 O O . HIS A 1 111 ? 4.422 5.361 35.307 1.00 18.55 ? ? ? ? ? ? 601 HIS A O 1
+ATOM 698 C CB . HIS A 1 111 ? 3.323 8.140 35.903 1.00 16.18 ? ? ? ? ? ? 601 HIS A CB 1
+ATOM 699 C CG . HIS A 1 111 ? 3.912 9.001 34.841 1.00 16.40 ? ? ? ? ? ? 601 HIS A CG 1
+ATOM 700 N ND1 . HIS A 1 111 ? 4.603 10.157 35.128 1.00 16.72 ? ? ? ? ? ? 601 HIS A ND1 1
+ATOM 701 C CD2 . HIS A 1 111 ? 4.004 8.826 33.501 1.00 17.39 ? ? ? ? ? ? 601 HIS A CD2 1
+ATOM 702 C CE1 . HIS A 1 111 ? 5.110 10.657 34.013 1.00 16.87 ? ? ? ? ? ? 601 HIS A CE1 1
+ATOM 703 N NE2 . HIS A 1 111 ? 4.761 9.870 33.011 1.00 18.08 ? ? ? ? ? ? 601 HIS A NE2 1
+ATOM 704 N N . ASN A 1 112 ? 6.345 6.507 35.506 1.00 18.40 ? ? ? ? ? ? 602 ASN A N 1
+ATOM 705 C CA . ASN A 1 112 ? 7.113 5.610 34.658 1.00 21.87 ? ? ? ? ? ? 602 ASN A CA 1
+ATOM 706 C C . ASN A 1 112 ? 8.127 4.831 35.472 1.00 23.10 ? ? ? ? ? ? 602 ASN A C 1
+ATOM 707 O O . ASN A 1 112 ? 8.551 5.240 36.557 1.00 22.55 ? ? ? ? ? ? 602 ASN A O 1
+ATOM 708 C CB . ASN A 1 112 ? 7.922 6.380 33.613 1.00 24.59 ? ? ? ? ? ? 602 ASN A CB 1
+ATOM 709 C CG . ASN A 1 112 ? 7.121 6.744 32.368 1.00 28.41 ? ? ? ? ? ? 602 ASN A CG 1
+ATOM 710 O OD1 . ASN A 1 112 ? 6.090 6.128 32.041 1.00 29.43 ? ? ? ? ? ? 602 ASN A OD1 1
+ATOM 711 N ND2 . ASN A 1 112 ? 7.605 7.764 31.650 1.00 29.84 ? ? ? ? ? ? 602 ASN A ND2 1
+ATOM 712 N N . GLN A 1 113 ? 8.585 3.750 34.854 1.00 24.98 ? ? ? ? ? ? 603 GLN A N 1
+ATOM 713 C CA . GLN A 1 113 ? 9.599 2.878 35.419 1.00 25.68 ? ? ? ? ? ? 603 GLN A CA 1
+ATOM 714 C C . GLN A 1 113 ? 9.289 2.332 36.803 1.00 23.01 ? ? ? ? ? ? 603 GLN A C 1
+ATOM 715 O O . GLN A 1 113 ? 10.134 2.400 37.714 1.00 23.45 ? ? ? ? ? ? 603 GLN A O 1
+ATOM 716 C CB . GLN A 1 113 ? 10.972 3.562 35.353 1.00 27.56 ? ? ? ? ? ? 603 GLN A CB 1
+ATOM 717 C CG . GLN A 1 113 ? 11.443 3.709 33.899 1.00 30.86 ? ? ? ? ? ? 603 GLN A CG 1
+ATOM 718 C CD . GLN A 1 113 ? 12.862 4.225 33.797 1.00 32.75 ? ? ? ? ? ? 603 GLN A CD 1
+ATOM 719 O OE1 . GLN A 1 113 ? 13.107 5.300 33.228 1.00 33.45 ? ? ? ? ? ? 603 GLN A OE1 1
+ATOM 720 N NE2 . GLN A 1 113 ? 13.814 3.475 34.374 1.00 33.88 ? ? ? ? ? ? 603 GLN A NE2 1
+ATOM 721 N N . ASN A 1 114 ? 8.073 1.798 36.928 1.00 20.85 ? ? ? ? ? ? 604 ASN A N 1
+ATOM 722 C CA . ASN A 1 114 ? 7.592 1.161 38.162 1.00 19.41 ? ? ? ? ? ? 604 ASN A CA 1
+ATOM 723 C C . ASN A 1 114 ? 7.675 -0.357 37.950 1.00 18.99 ? ? ? ? ? ? 604 ASN A C 1
+ATOM 724 O O . ASN A 1 114 ? 7.438 -0.822 36.840 1.00 19.39 ? ? ? ? ? ? 604 ASN A O 1
+ATOM 725 C CB . ASN A 1 114 ? 6.183 1.634 38.504 1.00 18.42 ? ? ? ? ? ? 604 ASN A CB 1
+ATOM 726 C CG . ASN A 1 114 ? 6.193 3.041 39.070 1.00 18.72 ? ? ? ? ? ? 604 ASN A CG 1
+ATOM 727 O OD1 . ASN A 1 114 ? 7.092 3.376 39.851 1.00 18.40 ? ? ? ? ? ? 604 ASN A OD1 1
+ATOM 728 N ND2 . ASN A 1 114 ? 5.267 3.891 38.623 1.00 17.42 ? ? ? ? ? ? 604 ASN A ND2 1
+ATOM 729 N N . PRO A 1 115 ? 8.077 -1.136 38.990 1.00 17.69 ? ? ? ? ? ? 605 PRO A N 1
+ATOM 730 C CA . PRO A 1 115 ? 8.197 -2.601 38.854 1.00 17.36 ? ? ? ? ? ? 605 PRO A CA 1
+ATOM 731 C C . PRO A 1 115 ? 6.858 -3.303 38.643 1.00 17.68 ? ? ? ? ? ? 605 PRO A C 1
+ATOM 732 O O . PRO A 1 115 ? 5.821 -2.823 39.124 1.00 17.77 ? ? ? ? ? ? 605 PRO A O 1
+ATOM 733 C CB . PRO A 1 115 ? 8.899 -3.010 40.157 1.00 16.74 ? ? ? ? ? ? 605 PRO A CB 1
+ATOM 734 C CG . PRO A 1 115 ? 8.427 -2.003 41.135 1.00 16.28 ? ? ? ? ? ? 605 PRO A CG 1
+ATOM 735 C CD . PRO A 1 115 ? 8.381 -0.705 40.370 1.00 16.92 ? ? ? ? ? ? 605 PRO A CD 1
+ATOM 736 N N . SER A 1 116 ? 6.867 -4.445 37.955 1.00 17.92 ? ? ? ? ? ? 606 SER A N 1
+ATOM 737 C CA . SER A 1 116 ? 5.613 -5.143 37.691 1.00 19.48 ? ? ? ? ? ? 606 SER A CA 1
+ATOM 738 C C . SER A 1 116 ? 4.811 -5.506 38.942 1.00 18.07 ? ? ? ? ? ? 606 SER A C 1
+ATOM 739 O O . SER A 1 116 ? 3.588 -5.426 38.920 1.00 18.54 ? ? ? ? ? ? 606 SER A O 1
+ATOM 740 C CB . SER A 1 116 ? 5.811 -6.363 36.769 1.00 21.22 ? ? ? ? ? ? 606 SER A CB 1
+ATOM 741 O OG . SER A 1 116 ? 6.686 -7.328 37.334 1.00 25.84 ? ? ? ? ? ? 606 SER A OG 1
+ATOM 742 N N . TRP A 1 117 ? 5.473 -5.866 40.042 1.00 16.74 ? ? ? ? ? ? 607 TRP A N 1
+ATOM 743 C CA . TRP A 1 117 ? 4.715 -6.191 41.265 1.00 16.33 ? ? ? ? ? ? 607 TRP A CA 1
+ATOM 744 C C . TRP A 1 117 ? 3.825 -5.007 41.731 1.00 16.73 ? ? ? ? ? ? 607 TRP A C 1
+ATOM 745 O O . TRP A 1 117 ? 2.795 -5.204 42.367 1.00 16.73 ? ? ? ? ? ? 607 TRP A O 1
+ATOM 746 C CB . TRP A 1 117 ? 5.643 -6.659 42.420 1.00 15.22 ? ? ? ? ? ? 607 TRP A CB 1
+ATOM 747 C CG . TRP A 1 117 ? 6.618 -5.609 42.981 1.00 14.09 ? ? ? ? ? ? 607 TRP A CG 1
+ATOM 748 C CD1 . TRP A 1 117 ? 7.930 -5.436 42.620 1.00 13.83 ? ? ? ? ? ? 607 TRP A CD1 1
+ATOM 749 C CD2 . TRP A 1 117 ? 6.355 -4.629 43.994 1.00 12.86 ? ? ? ? ? ? 607 TRP A CD2 1
+ATOM 750 N NE1 . TRP A 1 117 ? 8.486 -4.420 43.345 1.00 12.89 ? ? ? ? ? ? 607 TRP A NE1 1
+ATOM 751 C CE2 . TRP A 1 117 ? 7.547 -3.902 44.193 1.00 12.33 ? ? ? ? ? ? 607 TRP A CE2 1
+ATOM 752 C CE3 . TRP A 1 117 ? 5.226 -4.292 44.755 1.00 12.56 ? ? ? ? ? ? 607 TRP A CE3 1
+ATOM 753 C CZ2 . TRP A 1 117 ? 7.644 -2.854 45.125 1.00 12.72 ? ? ? ? ? ? 607 TRP A CZ2 1
+ATOM 754 C CZ3 . TRP A 1 117 ? 5.322 -3.258 45.682 1.00 12.84 ? ? ? ? ? ? 607 TRP A CZ3 1
+ATOM 755 C CH2 . TRP A 1 117 ? 6.524 -2.550 45.859 1.00 12.54 ? ? ? ? ? ? 607 TRP A CH2 1
+ATOM 756 N N . LEU A 1 118 ? 4.234 -3.773 41.426 1.00 17.25 ? ? ? ? ? ? 608 LEU A N 1
+ATOM 757 C CA . LEU A 1 118 ? 3.468 -2.612 41.842 1.00 18.31 ? ? ? ? ? ? 608 LEU A CA 1
+ATOM 758 C C . LEU A 1 118 ? 2.344 -2.347 40.860 1.00 20.96 ? ? ? ? ? ? 608 LEU A C 1
+ATOM 759 O O . LEU A 1 118 ? 1.177 -2.344 41.243 1.00 20.05 ? ? ? ? ? ? 608 LEU A O 1
+ATOM 760 C CB . LEU A 1 118 ? 4.363 -1.370 41.947 1.00 17.68 ? ? ? ? ? ? 608 LEU A CB 1
+ATOM 761 C CG . LEU A 1 118 ? 3.726 -0.083 42.492 1.00 18.22 ? ? ? ? ? ? 608 LEU A CG 1
+ATOM 762 C CD1 . LEU A 1 118 ? 3.524 -0.203 43.987 1.00 18.68 ? ? ? ? ? ? 608 LEU A CD1 1
+ATOM 763 C CD2 . LEU A 1 118 ? 4.595 1.110 42.189 1.00 18.34 ? ? ? ? ? ? 608 LEU A CD2 1
+ATOM 764 N N . THR A 1 119 ? 2.691 -2.187 39.581 1.00 24.00 ? ? ? ? ? ? 609 THR A N 1
+ATOM 765 C CA . THR A 1 119 ? 1.673 -1.864 38.577 1.00 26.97 ? ? ? ? ? ? 609 THR A CA 1
+ATOM 766 C C . THR A 1 119 ? 0.589 -2.934 38.368 1.00 28.56 ? ? ? ? ? ? 609 THR A C 1
+ATOM 767 O O . THR A 1 119 ? -0.521 -2.610 37.943 1.00 29.27 ? ? ? ? ? ? 609 THR A O 1
+ATOM 768 C CB . THR A 1 119 ? 2.294 -1.445 37.231 1.00 27.45 ? ? ? ? ? ? 609 THR A CB 1
+ATOM 769 O OG1 . THR A 1 119 ? 3.005 -2.548 36.659 1.00 28.41 ? ? ? ? ? ? 609 THR A OG1 1
+ATOM 770 C CG2 . THR A 1 119 ? 3.253 -0.285 37.431 1.00 27.49 ? ? ? ? ? ? 609 THR A CG2 1
+ATOM 771 N N . ASN A 1 120 ? 0.901 -4.184 38.700 1.00 30.11 ? ? ? ? ? ? 610 ASN A N 1
+ATOM 772 C CA . ASN A 1 120 ? -0.052 -5.285 38.566 1.00 32.17 ? ? ? ? ? ? 610 ASN A CA 1
+ATOM 773 C C . ASN A 1 120 ? -0.599 -5.744 39.909 1.00 32.33 ? ? ? ? ? ? 610 ASN A C 1
+ATOM 774 O O . ASN A 1 120 ? -1.176 -6.829 39.985 1.00 33.65 ? ? ? ? ? ? 610 ASN A O 1
+ATOM 775 C CB . ASN A 1 120 ? 0.593 -6.510 37.906 1.00 34.50 ? ? ? ? ? ? 610 ASN A CB 1
+ATOM 776 C CG . ASN A 1 120 ? 0.848 -6.323 36.428 1.00 36.74 ? ? ? ? ? ? 610 ASN A CG 1
+ATOM 777 O OD1 . ASN A 1 120 ? 1.843 -6.836 35.895 1.00 37.95 ? ? ? ? ? ? 610 ASN A OD1 1
+ATOM 778 N ND2 . ASN A 1 120 ? -0.050 -5.607 35.744 1.00 37.38 ? ? ? ? ? ? 610 ASN A ND2 1
+ATOM 779 N N . GLY A 1 121 ? -0.369 -4.985 40.976 1.00 31.38 ? ? ? ? ? ? 611 GLY A N 1
+ATOM 780 C CA . GLY A 1 121 ? -0.869 -5.402 42.278 1.00 30.87 ? ? ? ? ? ? 611 GLY A CA 1
+ATOM 781 C C . GLY A 1 121 ? -2.325 -5.010 42.479 1.00 30.76 ? ? ? ? ? ? 611 GLY A C 1
+ATOM 782 O O . GLY A 1 121 ? -2.904 -4.360 41.602 1.00 30.48 ? ? ? ? ? ? 611 GLY A O 1
+ATOM 783 N N . ASN A 1 122 ? -2.928 -5.448 43.589 1.00 30.43 ? ? ? ? ? ? 612 ASN A N 1
+ATOM 784 C CA . ASN A 1 122 ? -4.315 -5.088 43.914 1.00 30.99 ? ? ? ? ? ? 612 ASN A CA 1
+ATOM 785 C C . ASN A 1 122 ? -4.220 -4.106 45.082 1.00 27.51 ? ? ? ? ? ? 612 ASN A C 1
+ATOM 786 O O . ASN A 1 122 ? -3.914 -4.484 46.216 1.00 27.46 ? ? ? ? ? ? 612 ASN A O 1
+ATOM 787 C CB . ASN A 1 122 ? -5.198 -6.327 44.268 1.00 35.14 ? ? ? ? ? ? 612 ASN A CB 1
+ATOM 788 C CG . ASN A 1 122 ? -4.897 -6.918 45.670 1.00 38.55 ? ? ? ? ? ? 612 ASN A CG 1
+ATOM 789 O OD1 . ASN A 1 122 ? -3.799 -7.452 45.918 1.00 40.71 ? ? ? ? ? ? 612 ASN A OD1 1
+ATOM 790 N ND2 . ASN A 1 122 ? -5.879 -6.826 46.586 1.00 39.60 ? ? ? ? ? ? 612 ASN A ND2 1
+ATOM 791 N N . TRP A 1 123 ? -4.403 -2.827 44.776 1.00 23.48 ? ? ? ? ? ? 613 TRP A N 1
+ATOM 792 C CA . TRP A 1 123 ? -4.283 -1.796 45.798 1.00 20.49 ? ? ? ? ? ? 613 TRP A CA 1
+ATOM 793 C C . TRP A 1 123 ? -5.533 -0.978 46.026 1.00 18.93 ? ? ? ? ? ? 613 TRP A C 1
+ATOM 794 O O . TRP A 1 123 ? -6.445 -0.929 45.197 1.00 20.20 ? ? ? ? ? ? 613 TRP A O 1
+ATOM 795 C CB . TRP A 1 123 ? -3.152 -0.794 45.438 1.00 19.01 ? ? ? ? ? ? 613 TRP A CB 1
+ATOM 796 C CG . TRP A 1 123 ? -1.865 -1.396 44.966 1.00 17.06 ? ? ? ? ? ? 613 TRP A CG 1
+ATOM 797 C CD1 . TRP A 1 123 ? -1.404 -1.447 43.670 1.00 16.68 ? ? ? ? ? ? 613 TRP A CD1 1
+ATOM 798 C CD2 . TRP A 1 123 ? -0.909 -2.107 45.764 1.00 16.08 ? ? ? ? ? ? 613 TRP A CD2 1
+ATOM 799 N NE1 . TRP A 1 123 ? -0.231 -2.170 43.619 1.00 17.17 ? ? ? ? ? ? 613 TRP A NE1 1
+ATOM 800 C CE2 . TRP A 1 123 ? 0.097 -2.586 44.886 1.00 16.28 ? ? ? ? ? ? 613 TRP A CE2 1
+ATOM 801 C CE3 . TRP A 1 123 ? -0.807 -2.399 47.134 1.00 15.80 ? ? ? ? ? ? 613 TRP A CE3 1
+ATOM 802 C CZ2 . TRP A 1 123 ? 1.194 -3.349 45.337 1.00 15.62 ? ? ? ? ? ? 613 TRP A CZ2 1
+ATOM 803 C CZ3 . TRP A 1 123 ? 0.283 -3.157 47.578 1.00 15.59 ? ? ? ? ? ? 613 TRP A CZ3 1
+ATOM 804 C CH2 . TRP A 1 123 ? 1.266 -3.621 46.674 1.00 14.65 ? ? ? ? ? ? 613 TRP A CH2 1
+ATOM 805 N N . ASN A 1 124 ? -5.552 -0.333 47.179 1.00 17.76 ? ? ? ? ? ? 614 ASN A N 1
+ATOM 806 C CA . ASN A 1 124 ? -6.587 0.616 47.534 1.00 17.17 ? ? ? ? ? ? 614 ASN A CA 1
+ATOM 807 C C . ASN A 1 124 ? -5.789 1.786 48.132 1.00 16.19 ? ? ? ? ? ? 614 ASN A C 1
+ATOM 808 O O . ASN A 1 124 ? -4.554 1.697 48.284 1.00 15.42 ? ? ? ? ? ? 614 ASN A O 1
+ATOM 809 C CB . ASN A 1 124 ? -7.633 0.044 48.514 1.00 19.14 ? ? ? ? ? ? 614 ASN A CB 1
+ATOM 810 C CG . ASN A 1 124 ? -7.017 -0.612 49.723 1.00 20.31 ? ? ? ? ? ? 614 ASN A CG 1
+ATOM 811 O OD1 . ASN A 1 124 ? -6.364 0.024 50.535 1.00 20.35 ? ? ? ? ? ? 614 ASN A OD1 1
+ATOM 812 N ND2 . ASN A 1 124 ? -7.219 -1.909 49.837 1.00 23.30 ? ? ? ? ? ? 614 ASN A ND2 1
+ATOM 813 N N . ARG A 1 125 ? -6.473 2.886 48.433 1.00 15.45 ? ? ? ? ? ? 615 ARG A N 1
+ATOM 814 C CA . ARG A 1 125 ? -5.807 4.059 48.967 1.00 15.10 ? ? ? ? ? ? 615 ARG A CA 1
+ATOM 815 C C . ARG A 1 125 ? -4.887 3.748 50.147 1.00 16.05 ? ? ? ? ? ? 615 ARG A C 1
+ATOM 816 O O . ARG A 1 125 ? -3.707 4.102 50.141 1.00 14.73 ? ? ? ? ? ? 615 ARG A O 1
+ATOM 817 C CB . ARG A 1 125 ? -6.832 5.118 49.351 1.00 14.82 ? ? ? ? ? ? 615 ARG A CB 1
+ATOM 818 C CG . ARG A 1 125 ? -6.241 6.298 50.074 1.00 14.60 ? ? ? ? ? ? 615 ARG A CG 1
+ATOM 819 C CD . ARG A 1 125 ? -7.312 7.302 50.370 1.00 15.50 ? ? ? ? ? ? 615 ARG A CD 1
+ATOM 820 N NE . ARG A 1 125 ? -6.854 8.349 51.277 1.00 16.81 ? ? ? ? ? ? 615 ARG A NE 1
+ATOM 821 C CZ . ARG A 1 125 ? -6.429 9.551 50.882 1.00 18.20 ? ? ? ? ? ? 615 ARG A CZ 1
+ATOM 822 N NH1 . ARG A 1 125 ? -6.380 9.874 49.590 1.00 17.86 ? ? ? ? ? ? 615 ARG A NH1 1
+ATOM 823 N NH2 . ARG A 1 125 ? -6.152 10.474 51.784 1.00 18.91 ? ? ? ? ? ? 615 ARG A NH2 1
+ATOM 824 N N . ASP A 1 126 ? -5.425 3.057 51.145 1.00 15.90 ? ? ? ? ? ? 616 ASP A N 1
+ATOM 825 C CA . ASP A 1 126 ? -4.655 2.713 52.328 1.00 17.46 ? ? ? ? ? ? 616 ASP A CA 1
+ATOM 826 C C . ASP A 1 126 ? -3.456 1.807 52.102 1.00 15.67 ? ? ? ? ? ? 616 ASP A C 1
+ATOM 827 O O . ASP A 1 126 ? -2.371 2.096 52.629 1.00 15.23 ? ? ? ? ? ? 616 ASP A O 1
+ATOM 828 C CB . ASP A 1 126 ? -5.580 2.127 53.389 1.00 21.46 ? ? ? ? ? ? 616 ASP A CB 1
+ATOM 829 C CG . ASP A 1 126 ? -6.650 3.110 53.802 1.00 25.12 ? ? ? ? ? ? 616 ASP A CG 1
+ATOM 830 O OD1 . ASP A 1 126 ? -6.284 4.218 54.252 1.00 27.38 ? ? ? ? ? ? 616 ASP A OD1 1
+ATOM 831 O OD2 . ASP A 1 126 ? -7.849 2.799 53.633 1.00 28.94 ? ? ? ? ? ? 616 ASP A OD2 1
+ATOM 832 N N . SER A 1 127 ? -3.607 0.752 51.305 1.00 14.18 ? ? ? ? ? ? 617 SER A N 1
+ATOM 833 C CA . SER A 1 127 ? -2.466 -0.129 51.084 1.00 14.14 ? ? ? ? ? ? 617 SER A CA 1
+ATOM 834 C C . SER A 1 127 ? -1.383 0.495 50.188 1.00 12.70 ? ? ? ? ? ? 617 SER A C 1
+ATOM 835 O O . SER A 1 127 ? -0.199 0.236 50.396 1.00 13.67 ? ? ? ? ? ? 617 SER A O 1
+ATOM 836 C CB . SER A 1 127 ? -2.869 -1.517 50.605 1.00 13.73 ? ? ? ? ? ? 617 SER A CB 1
+ATOM 837 O OG . SER A 1 127 ? -3.623 -1.462 49.423 1.00 15.18 ? ? ? ? ? ? 617 SER A OG 1
+ATOM 838 N N . LEU A 1 128 ? -1.774 1.353 49.248 1.00 12.05 ? ? ? ? ? ? 618 LEU A N 1
+ATOM 839 C CA . LEU A 1 128 ? -0.775 1.994 48.379 1.00 10.58 ? ? ? ? ? ? 618 LEU A CA 1
+ATOM 840 C C . LEU A 1 128 ? -0.023 3.086 49.136 1.00 9.82 ? ? ? ? ? ? 618 LEU A C 1
+ATOM 841 O O . LEU A 1 128 ? 1.161 3.272 48.906 1.00 10.65 ? ? ? ? ? ? 618 LEU A O 1
+ATOM 842 C CB . LEU A 1 128 ? -1.393 2.512 47.079 1.00 11.64 ? ? ? ? ? ? 618 LEU A CB 1
+ATOM 843 C CG . LEU A 1 128 ? -0.359 2.827 45.986 1.00 11.43 ? ? ? ? ? ? 618 LEU A CG 1
+ATOM 844 C CD1 . LEU A 1 128 ? 0.495 1.568 45.651 1.00 11.33 ? ? ? ? ? ? 618 LEU A CD1 1
+ATOM 845 C CD2 . LEU A 1 128 ? -1.068 3.369 44.750 1.00 10.85 ? ? ? ? ? ? 618 LEU A CD2 1
+ATOM 846 N N . LEU A 1 129 ? -0.685 3.792 50.056 1.00 9.97 ? ? ? ? ? ? 619 LEU A N 1
+ATOM 847 C CA . LEU A 1 129 ? -0.005 4.792 50.879 1.00 10.83 ? ? ? ? ? ? 619 LEU A CA 1
+ATOM 848 C C . LEU A 1 129 ? 1.065 4.109 51.735 1.00 10.94 ? ? ? ? ? ? 619 LEU A C 1
+ATOM 849 O O . LEU A 1 129 ? 2.139 4.665 51.971 1.00 11.62 ? ? ? ? ? ? 619 LEU A O 1
+ATOM 850 C CB . LEU A 1 129 ? -0.984 5.554 51.796 1.00 11.99 ? ? ? ? ? ? 619 LEU A CB 1
+ATOM 851 C CG . LEU A 1 129 ? -1.709 6.778 51.185 1.00 13.01 ? ? ? ? ? ? 619 LEU A CG 1
+ATOM 852 C CD1 . LEU A 1 129 ? -2.746 7.313 52.179 1.00 13.81 ? ? ? ? ? ? 619 LEU A CD1 1
+ATOM 853 C CD2 . LEU A 1 129 ? -0.688 7.902 50.822 1.00 12.30 ? ? ? ? ? ? 619 LEU A CD2 1
+ATOM 854 N N . ALA A 1 130 ? 0.774 2.892 52.201 1.00 10.98 ? ? ? ? ? ? 620 ALA A N 1
+ATOM 855 C CA . ALA A 1 130 ? 1.741 2.146 53.021 1.00 10.92 ? ? ? ? ? ? 620 ALA A CA 1
+ATOM 856 C C . ALA A 1 130 ? 2.967 1.773 52.195 1.00 9.46 ? ? ? ? ? ? 620 ALA A C 1
+ATOM 857 O O . ALA A 1 130 ? 4.088 1.827 52.704 1.00 10.27 ? ? ? ? ? ? 620 ALA A O 1
+ATOM 858 C CB . ALA A 1 130 ? 1.093 0.874 53.626 1.00 12.09 ? ? ? ? ? ? 620 ALA A CB 1
+ATOM 859 N N . VAL A 1 131 ? 2.751 1.347 50.949 1.00 10.05 ? ? ? ? ? ? 621 VAL A N 1
+ATOM 860 C CA . VAL A 1 131 ? 3.858 1.013 50.040 1.00 10.26 ? ? ? ? ? ? 621 VAL A CA 1
+ATOM 861 C C . VAL A 1 131 ? 4.702 2.284 49.769 1.00 10.57 ? ? ? ? ? ? 621 VAL A C 1
+ATOM 862 O O . VAL A 1 131 ? 5.945 2.240 49.782 1.00 10.12 ? ? ? ? ? ? 621 VAL A O 1
+ATOM 863 C CB . VAL A 1 131 ? 3.352 0.437 48.681 1.00 11.18 ? ? ? ? ? ? 621 VAL A CB 1
+ATOM 864 C CG1 . VAL A 1 131 ? 4.512 0.327 47.670 1.00 11.63 ? ? ? ? ? ? 621 VAL A CG1 1
+ATOM 865 C CG2 . VAL A 1 131 ? 2.735 -0.949 48.901 1.00 12.07 ? ? ? ? ? ? 621 VAL A CG2 1
+ATOM 866 N N . MET A 1 132 ? 4.021 3.408 49.538 1.00 10.55 ? ? ? ? ? ? 622 MET A N 1
+ATOM 867 C CA . MET A 1 132 ? 4.710 4.673 49.282 1.00 10.33 ? ? ? ? ? ? 622 MET A CA 1
+ATOM 868 C C . MET A 1 132 ? 5.591 5.048 50.473 1.00 9.76 ? ? ? ? ? ? 622 MET A C 1
+ATOM 869 O O . MET A 1 132 ? 6.758 5.392 50.327 1.00 9.72 ? ? ? ? ? ? 622 MET A O 1
+ATOM 870 C CB . MET A 1 132 ? 3.692 5.788 49.046 1.00 10.72 ? ? ? ? ? ? 622 MET A CB 1
+ATOM 871 C CG . MET A 1 132 ? 4.362 7.162 48.839 1.00 13.07 ? ? ? ? ? ? 622 MET A CG 1
+ATOM 872 S SD . MET A 1 132 ? 3.254 8.586 48.839 1.00 15.12 ? ? ? ? ? ? 622 MET A SD 1
+ATOM 873 C CE . MET A 1 132 ? 2.703 8.419 47.297 1.00 12.69 ? ? ? ? ? ? 622 MET A CE 1
+ATOM 874 N N . LYS A 1 133 ? 5.024 4.977 51.672 1.00 10.07 ? ? ? ? ? ? 623 LYS A N 1
+ATOM 875 C CA . LYS A 1 133 ? 5.759 5.315 52.890 1.00 10.43 ? ? ? ? ? ? 623 LYS A CA 1
+ATOM 876 C C . LYS A 1 133 ? 6.951 4.396 53.133 1.00 9.10 ? ? ? ? ? ? 623 LYS A C 1
+ATOM 877 O O . LYS A 1 133 ? 8.010 4.862 53.539 1.00 9.69 ? ? ? ? ? ? 623 LYS A O 1
+ATOM 878 C CB . LYS A 1 133 ? 4.825 5.289 54.112 1.00 12.96 ? ? ? ? ? ? 623 LYS A CB 1
+ATOM 879 C CG . LYS A 1 133 ? 5.464 5.848 55.382 1.00 16.43 ? ? ? ? ? ? 623 LYS A CG 1
+ATOM 880 C CD . LYS A 1 133 ? 4.515 5.738 56.577 1.00 20.46 ? ? ? ? ? ? 623 LYS A CD 1
+ATOM 881 C CE . LYS A 1 133 ? 5.240 5.954 57.939 1.00 24.16 ? ? ? ? ? ? 623 LYS A CE 1
+ATOM 882 N NZ . LYS A 1 133 ? 5.820 7.330 58.167 1.00 27.21 ? ? ? ? ? ? 623 LYS A NZ 1
+ATOM 883 N N . ASN A 1 134 ? 6.801 3.098 52.886 1.00 9.04 ? ? ? ? ? ? 624 ASN A N 1
+ATOM 884 C CA . ASN A 1 134 ? 7.911 2.167 53.097 1.00 9.13 ? ? ? ? ? ? 624 ASN A CA 1
+ATOM 885 C C . ASN A 1 134 ? 9.057 2.416 52.100 1.00 9.34 ? ? ? ? ? ? 624 ASN A C 1
+ATOM 886 O O . ASN A 1 134 ? 10.248 2.356 52.464 1.00 9.65 ? ? ? ? ? ? 624 ASN A O 1
+ATOM 887 C CB . ASN A 1 134 ? 7.456 0.716 52.955 1.00 9.98 ? ? ? ? ? ? 624 ASN A CB 1
+ATOM 888 C CG . ASN A 1 134 ? 8.564 -0.261 53.302 1.00 10.67 ? ? ? ? ? ? 624 ASN A CG 1
+ATOM 889 O OD1 . ASN A 1 134 ? 9.196 -0.123 54.333 1.00 12.28 ? ? ? ? ? ? 624 ASN A OD1 1
+ATOM 890 N ND2 . ASN A 1 134 ? 8.817 -1.222 52.438 1.00 12.13 ? ? ? ? ? ? 624 ASN A ND2 1
+ATOM 891 N N . HIS A 1 135 ? 8.696 2.709 50.847 1.00 8.84 ? ? ? ? ? ? 625 HIS A N 1
+ATOM 892 C CA . HIS A 1 135 ? 9.711 2.972 49.813 1.00 8.77 ? ? ? ? ? ? 625 HIS A CA 1
+ATOM 893 C C . HIS A 1 135 ? 10.495 4.245 50.131 1.00 8.46 ? ? ? ? ? ? 625 HIS A C 1
+ATOM 894 O O . HIS A 1 135 ? 11.738 4.238 50.176 1.00 8.85 ? ? ? ? ? ? 625 HIS A O 1
+ATOM 895 C CB . HIS A 1 135 ? 9.087 3.107 48.427 1.00 8.52 ? ? ? ? ? ? 625 HIS A CB 1
+ATOM 896 C CG . HIS A 1 135 ? 10.107 3.225 47.336 1.00 9.38 ? ? ? ? ? ? 625 HIS A CG 1
+ATOM 897 N ND1 . HIS A 1 135 ? 10.784 2.136 46.830 1.00 8.97 ? ? ? ? ? ? 625 HIS A ND1 1
+ATOM 898 C CD2 . HIS A 1 135 ? 10.620 4.313 46.709 1.00 8.92 ? ? ? ? ? ? 625 HIS A CD2 1
+ATOM 899 C CE1 . HIS A 1 135 ? 11.671 2.545 45.939 1.00 10.05 ? ? ? ? ? ? 625 HIS A CE1 1
+ATOM 900 N NE2 . HIS A 1 135 ? 11.588 3.862 45.848 1.00 9.43 ? ? ? ? ? ? 625 HIS A NE2 1
+ATOM 901 N N . ILE A 1 136 ? 9.767 5.331 50.359 1.00 8.47 ? ? ? ? ? ? 626 ILE A N 1
+ATOM 902 C CA . ILE A 1 136 ? 10.391 6.607 50.669 1.00 8.25 ? ? ? ? ? ? 626 ILE A CA 1
+ATOM 903 C C . ILE A 1 136 ? 11.262 6.554 51.939 1.00 8.45 ? ? ? ? ? ? 626 ILE A C 1
+ATOM 904 O O . ILE A 1 136 ? 12.402 7.007 51.934 1.00 9.43 ? ? ? ? ? ? 626 ILE A O 1
+ATOM 905 C CB . ILE A 1 136 ? 9.336 7.715 50.788 1.00 8.46 ? ? ? ? ? ? 626 ILE A CB 1
+ATOM 906 C CG1 . ILE A 1 136 ? 8.700 7.983 49.408 1.00 7.70 ? ? ? ? ? ? 626 ILE A CG1 1
+ATOM 907 C CG2 . ILE A 1 136 ? 9.939 8.990 51.394 1.00 8.27 ? ? ? ? ? ? 626 ILE A CG2 1
+ATOM 908 C CD1 . ILE A 1 136 ? 7.628 9.109 49.417 1.00 7.92 ? ? ? ? ? ? 626 ILE A CD1 1
+ATOM 909 N N . THR A 1 137 ? 10.744 5.987 53.021 1.00 7.57 ? ? ? ? ? ? 627 THR A N 1
+ATOM 910 C CA . THR A 1 137 ? 11.483 5.928 54.281 1.00 8.15 ? ? ? ? ? ? 627 THR A CA 1
+ATOM 911 C C . THR A 1 137 ? 12.722 5.043 54.218 1.00 7.29 ? ? ? ? ? ? 627 THR A C 1
+ATOM 912 O O . THR A 1 137 ? 13.794 5.433 54.695 1.00 8.36 ? ? ? ? ? ? 627 THR A O 1
+ATOM 913 C CB . THR A 1 137 ? 10.571 5.431 55.438 1.00 9.80 ? ? ? ? ? ? 627 THR A CB 1
+ATOM 914 O OG1 . THR A 1 137 ? 9.432 6.305 55.538 1.00 11.76 ? ? ? ? ? ? 627 THR A OG1 1
+ATOM 915 C CG2 . THR A 1 137 ? 11.329 5.422 56.764 1.00 10.40 ? ? ? ? ? ? 627 THR A CG2 1
+ATOM 916 N N . THR A 1 138 ? 12.590 3.860 53.619 1.00 7.73 ? ? ? ? ? ? 628 THR A N 1
+ATOM 917 C CA . THR A 1 138 ? 13.726 2.926 53.512 1.00 8.21 ? ? ? ? ? ? 628 THR A CA 1
+ATOM 918 C C . THR A 1 138 ? 14.868 3.500 52.651 1.00 8.19 ? ? ? ? ? ? 628 THR A C 1
+ATOM 919 O O . THR A 1 138 ? 16.022 3.463 53.044 1.00 9.68 ? ? ? ? ? ? 628 THR A O 1
+ATOM 920 C CB . THR A 1 138 ? 13.274 1.517 52.973 1.00 8.77 ? ? ? ? ? ? 628 THR A CB 1
+ATOM 921 O OG1 . THR A 1 138 ? 12.290 0.966 53.866 1.00 9.58 ? ? ? ? ? ? 628 THR A OG1 1
+ATOM 922 C CG2 . THR A 1 138 ? 14.462 0.544 52.855 1.00 9.50 ? ? ? ? ? ? 628 THR A CG2 1
+ATOM 923 N N . VAL A 1 139 ? 14.537 4.083 51.503 1.00 8.25 ? ? ? ? ? ? 629 VAL A N 1
+ATOM 924 C CA . VAL A 1 139 ? 15.552 4.643 50.615 1.00 7.68 ? ? ? ? ? ? 629 VAL A CA 1
+ATOM 925 C C . VAL A 1 139 ? 16.220 5.899 51.214 1.00 7.02 ? ? ? ? ? ? 629 VAL A C 1
+ATOM 926 O O . VAL A 1 139 ? 17.450 5.990 51.301 1.00 7.73 ? ? ? ? ? ? 629 VAL A O 1
+ATOM 927 C CB . VAL A 1 139 ? 14.916 4.979 49.221 1.00 8.14 ? ? ? ? ? ? 629 VAL A CB 1
+ATOM 928 C CG1 . VAL A 1 139 ? 15.951 5.696 48.345 1.00 8.60 ? ? ? ? ? ? 629 VAL A CG1 1
+ATOM 929 C CG2 . VAL A 1 139 ? 14.451 3.707 48.524 1.00 8.99 ? ? ? ? ? ? 629 VAL A CG2 1
+ATOM 930 N N . MET A 1 140 ? 15.407 6.849 51.687 1.00 7.56 ? ? ? ? ? ? 630 MET A N 1
+ATOM 931 C CA . MET A 1 140 ? 15.976 8.065 52.251 1.00 7.96 ? ? ? ? ? ? 630 MET A CA 1
+ATOM 932 C C . MET A 1 140 ? 16.794 7.865 53.532 1.00 9.50 ? ? ? ? ? ? 630 MET A C 1
+ATOM 933 O O . MET A 1 140 ? 17.769 8.579 53.744 1.00 11.04 ? ? ? ? ? ? 630 MET A O 1
+ATOM 934 C CB . MET A 1 140 ? 14.914 9.151 52.425 1.00 8.46 ? ? ? ? ? ? 630 MET A CB 1
+ATOM 935 C CG . MET A 1 140 ? 14.424 9.705 51.072 1.00 9.69 ? ? ? ? ? ? 630 MET A CG 1
+ATOM 936 S SD . MET A 1 140 ? 13.266 11.064 51.234 1.00 10.77 ? ? ? ? ? ? 630 MET A SD 1
+ATOM 937 C CE . MET A 1 140 ? 14.304 12.370 51.922 1.00 10.43 ? ? ? ? ? ? 630 MET A CE 1
+ATOM 938 N N . THR A 1 141 ? 16.390 6.944 54.408 1.00 9.97 ? ? ? ? ? ? 631 THR A N 1
+ATOM 939 C CA . THR A 1 141 ? 17.172 6.728 55.644 1.00 10.56 ? ? ? ? ? ? 631 THR A CA 1
+ATOM 940 C C . THR A 1 141 ? 18.510 6.048 55.304 1.00 10.31 ? ? ? ? ? ? 631 THR A C 1
+ATOM 941 O O . THR A 1 141 ? 19.515 6.312 55.970 1.00 11.18 ? ? ? ? ? ? 631 THR A O 1
+ATOM 942 C CB . THR A 1 141 ? 16.406 5.899 56.723 1.00 12.53 ? ? ? ? ? ? 631 THR A CB 1
+ATOM 943 O OG1 . THR A 1 141 ? 16.166 4.607 56.214 1.00 15.56 ? ? ? ? ? ? 631 THR A OG1 1
+ATOM 944 C CG2 . THR A 1 141 ? 15.060 6.506 57.065 1.00 12.14 ? ? ? ? ? ? 631 THR A CG2 1
+ATOM 945 N N . HIS A 1 142 ? 18.554 5.221 54.250 1.00 9.45 ? ? ? ? ? ? 632 HIS A N 1
+ATOM 946 C CA . HIS A 1 142 ? 19.835 4.604 53.845 1.00 10.32 ? ? ? ? ? ? 632 HIS A CA 1
+ATOM 947 C C . HIS A 1 142 ? 20.846 5.692 53.435 1.00 10.36 ? ? ? ? ? ? 632 HIS A C 1
+ATOM 948 O O . HIS A 1 142 ? 22.060 5.537 53.611 1.00 11.83 ? ? ? ? ? ? 632 HIS A O 1
+ATOM 949 C CB . HIS A 1 142 ? 19.654 3.618 52.668 1.00 10.64 ? ? ? ? ? ? 632 HIS A CB 1
+ATOM 950 C CG . HIS A 1 142 ? 20.881 2.814 52.356 1.00 10.54 ? ? ? ? ? ? 632 HIS A CG 1
+ATOM 951 N ND1 . HIS A 1 142 ? 21.407 1.890 53.232 1.00 10.21 ? ? ? ? ? ? 632 HIS A ND1 1
+ATOM 952 C CD2 . HIS A 1 142 ? 21.707 2.820 51.279 1.00 10.86 ? ? ? ? ? ? 632 HIS A CD2 1
+ATOM 953 C CE1 . HIS A 1 142 ? 22.504 1.363 52.717 1.00 11.14 ? ? ? ? ? ? 632 HIS A CE1 1
+ATOM 954 N NE2 . HIS A 1 142 ? 22.708 1.911 51.530 1.00 11.38 ? ? ? ? ? ? 632 HIS A NE2 1
+ATOM 955 N N . TYR A 1 143 ? 20.343 6.775 52.844 1.00 11.07 ? ? ? ? ? ? 633 TYR A N 1
+ATOM 956 C CA . TYR A 1 143 ? 21.205 7.900 52.393 1.00 11.33 ? ? ? ? ? ? 633 TYR A CA 1
+ATOM 957 C C . TYR A 1 143 ? 21.062 9.158 53.264 1.00 12.02 ? ? ? ? ? ? 633 TYR A C 1
+ATOM 958 O O . TYR A 1 143 ? 21.485 10.254 52.867 1.00 11.76 ? ? ? ? ? ? 633 TYR A O 1
+ATOM 959 C CB . TYR A 1 143 ? 20.856 8.284 50.927 1.00 10.10 ? ? ? ? ? ? 633 TYR A CB 1
+ATOM 960 C CG . TYR A 1 143 ? 21.159 7.203 49.926 1.00 9.18 ? ? ? ? ? ? 633 TYR A CG 1
+ATOM 961 C CD1 . TYR A 1 143 ? 22.477 6.931 49.559 1.00 9.96 ? ? ? ? ? ? 633 TYR A CD1 1
+ATOM 962 C CD2 . TYR A 1 143 ? 20.147 6.389 49.409 1.00 8.30 ? ? ? ? ? ? 633 TYR A CD2 1
+ATOM 963 C CE1 . TYR A 1 143 ? 22.783 5.867 48.713 1.00 9.63 ? ? ? ? ? ? 633 TYR A CE1 1
+ATOM 964 C CE2 . TYR A 1 143 ? 20.451 5.322 48.559 1.00 8.42 ? ? ? ? ? ? 633 TYR A CE2 1
+ATOM 965 C CZ . TYR A 1 143 ? 21.781 5.062 48.217 1.00 8.06 ? ? ? ? ? ? 633 TYR A CZ 1
+ATOM 966 O OH . TYR A 1 143 ? 22.102 3.985 47.432 1.00 9.73 ? ? ? ? ? ? 633 TYR A OH 1
+ATOM 967 N N . LYS A 1 144 ? 20.561 8.991 54.479 1.00 12.16 ? ? ? ? ? ? 634 LYS A N 1
+ATOM 968 C CA . LYS A 1 144 ? 20.287 10.133 55.342 1.00 12.74 ? ? ? ? ? ? 634 LYS A CA 1
+ATOM 969 C C . LYS A 1 144 ? 21.496 11.034 55.540 1.00 13.36 ? ? ? ? ? ? 634 LYS A C 1
+ATOM 970 O O . LYS A 1 144 ? 22.575 10.566 55.904 1.00 13.93 ? ? ? ? ? ? 634 LYS A O 1
+ATOM 971 C CB . LYS A 1 144 ? 19.724 9.646 56.684 1.00 14.64 ? ? ? ? ? ? 634 LYS A CB 1
+ATOM 972 C CG . LYS A 1 144 ? 19.116 10.726 57.556 1.00 17.90 ? ? ? ? ? ? 634 LYS A CG 1
+ATOM 973 C CD . LYS A 1 144 ? 18.686 10.132 58.901 1.00 19.94 ? ? ? ? ? ? 634 LYS A CD 1
+ATOM 974 C CE . LYS A 1 144 ? 17.912 11.129 59.780 1.00 22.59 ? ? ? ? ? ? 634 LYS A CE 1
+ATOM 975 N NZ . LYS A 1 144 ? 18.737 12.274 60.284 1.00 24.99 ? ? ? ? ? ? 634 LYS A NZ 1
+ATOM 976 N N . GLY A 1 145 ? 21.310 12.328 55.266 1.00 12.79 ? ? ? ? ? ? 635 GLY A N 1
+ATOM 977 C CA . GLY A 1 145 ? 22.365 13.307 55.428 1.00 13.55 ? ? ? ? ? ? 635 GLY A CA 1
+ATOM 978 C C . GLY A 1 145 ? 23.446 13.242 54.364 1.00 15.28 ? ? ? ? ? ? 635 GLY A C 1
+ATOM 979 O O . GLY A 1 145 ? 24.376 14.023 54.404 1.00 17.72 ? ? ? ? ? ? 635 GLY A O 1
+ATOM 980 N N . LYS A 1 146 ? 23.330 12.357 53.387 1.00 15.95 ? ? ? ? ? ? 636 LYS A N 1
+ATOM 981 C CA . LYS A 1 146 ? 24.367 12.258 52.352 1.00 17.83 ? ? ? ? ? ? 636 LYS A CA 1
+ATOM 982 C C . LYS A 1 146 ? 23.952 12.805 50.971 1.00 16.79 ? ? ? ? ? ? 636 LYS A C 1
+ATOM 983 O O . LYS A 1 146 ? 24.806 12.982 50.103 1.00 16.05 ? ? ? ? ? ? 636 LYS A O 1
+ATOM 984 C CB . LYS A 1 146 ? 24.800 10.799 52.200 1.00 21.69 ? ? ? ? ? ? 636 LYS A CB 1
+ATOM 985 C CG . LYS A 1 146 ? 25.283 10.143 53.512 1.00 26.25 ? ? ? ? ? ? 636 LYS A CG 1
+ATOM 986 C CD . LYS A 1 146 ? 25.456 8.628 53.310 1.00 30.78 ? ? ? ? ? ? 636 LYS A CD 1
+ATOM 987 C CE . LYS A 1 146 ? 26.162 7.910 54.490 1.00 32.89 ? ? ? ? ? ? 636 LYS A CE 1
+ATOM 988 N NZ . LYS A 1 146 ? 26.576 6.515 54.054 1.00 34.45 ? ? ? ? ? ? 636 LYS A NZ 1
+ATOM 989 N N . ILE A 1 147 ? 22.645 12.974 50.750 1.00 15.11 ? ? ? ? ? ? 637 ILE A N 1
+ATOM 990 C CA . ILE A 1 147 ? 22.108 13.484 49.479 1.00 14.10 ? ? ? ? ? ? 637 ILE A CA 1
+ATOM 991 C C . ILE A 1 147 ? 21.426 14.839 49.746 1.00 14.57 ? ? ? ? ? ? 637 ILE A C 1
+ATOM 992 O O . ILE A 1 147 ? 20.469 14.934 50.507 1.00 16.15 ? ? ? ? ? ? 637 ILE A O 1
+ATOM 993 C CB . ILE A 1 147 ? 21.204 12.410 48.807 1.00 13.05 ? ? ? ? ? ? 637 ILE A CB 1
+ATOM 994 C CG1 . ILE A 1 147 ? 22.114 11.270 48.326 1.00 12.55 ? ? ? ? ? ? 637 ILE A CG1 1
+ATOM 995 C CG2 . ILE A 1 147 ? 20.310 13.030 47.717 1.00 11.31 ? ? ? ? ? ? 637 ILE A CG2 1
+ATOM 996 C CD1 . ILE A 1 147 ? 21.413 10.105 47.691 1.00 14.16 ? ? ? ? ? ? 637 ILE A CD1 1
+ATOM 997 N N . VAL A 1 148 ? 21.953 15.894 49.122 1.00 14.36 ? ? ? ? ? ? 638 VAL A N 1
+ATOM 998 C CA . VAL A 1 148 ? 21.474 17.254 49.358 1.00 14.86 ? ? ? ? ? ? 638 VAL A CA 1
+ATOM 999 C C . VAL A 1 148 ? 20.144 17.688 48.766 1.00 12.58 ? ? ? ? ? ? 638 VAL A C 1
+ATOM 1000 O O . VAL A 1 148 ? 19.450 18.498 49.364 1.00 14.66 ? ? ? ? ? ? 638 VAL A O 1
+ATOM 1001 C CB . VAL A 1 148 ? 22.581 18.297 49.031 1.00 17.00 ? ? ? ? ? ? 638 VAL A CB 1
+ATOM 1002 C CG1 . VAL A 1 148 ? 23.762 18.086 49.981 1.00 19.19 ? ? ? ? ? ? 638 VAL A CG1 1
+ATOM 1003 C CG2 . VAL A 1 148 ? 23.038 18.178 47.553 1.00 17.19 ? ? ? ? ? ? 638 VAL A CG2 1
+ATOM 1004 N N . GLU A 1 149 ? 19.798 17.177 47.600 1.00 8.63 ? ? ? ? ? ? 639 GLU A N 1
+ATOM 1005 C CA . GLU A 1 149 ? 18.542 17.525 46.970 1.00 8.26 ? ? ? ? ? ? 639 GLU A CA 1
+ATOM 1006 C C . GLU A 1 149 ? 17.908 16.218 46.504 1.00 6.89 ? ? ? ? ? ? 639 GLU A C 1
+ATOM 1007 O O . GLU A 1 149 ? 18.586 15.381 45.914 1.00 7.18 ? ? ? ? ? ? 639 GLU A O 1
+ATOM 1008 C CB . GLU A 1 149 ? 18.788 18.410 45.728 1.00 8.85 ? ? ? ? ? ? 639 GLU A CB 1
+ATOM 1009 C CG . GLU A 1 149 ? 19.502 19.743 46.020 1.00 9.27 ? ? ? ? ? ? 639 GLU A CG 1
+ATOM 1010 C CD . GLU A 1 149 ? 19.635 20.649 44.793 1.00 9.86 ? ? ? ? ? ? 639 GLU A CD 1
+ATOM 1011 O OE1 . GLU A 1 149 ? 19.007 20.376 43.745 1.00 10.05 ? ? ? ? ? ? 639 GLU A OE1 1
+ATOM 1012 O OE2 . GLU A 1 149 ? 20.360 21.643 44.892 1.00 11.30 ? ? ? ? ? ? 639 GLU A OE2 1
+ATOM 1013 N N . TRP A 1 150 ? 16.612 16.067 46.762 1.00 6.79 ? ? ? ? ? ? 640 TRP A N 1
+ATOM 1014 C CA . TRP A 1 150 ? 15.852 14.892 46.353 1.00 6.60 ? ? ? ? ? ? 640 TRP A CA 1
+ATOM 1015 C C . TRP A 1 150 ? 14.703 15.271 45.443 1.00 5.08 ? ? ? ? ? ? 640 TRP A C 1
+ATOM 1016 O O . TRP A 1 150 ? 13.940 16.146 45.806 1.00 6.57 ? ? ? ? ? ? 640 TRP A O 1
+ATOM 1017 C CB . TRP A 1 150 ? 15.208 14.192 47.591 1.00 8.03 ? ? ? ? ? ? 640 TRP A CB 1
+ATOM 1018 C CG . TRP A 1 150 ? 16.067 13.127 48.235 1.00 9.68 ? ? ? ? ? ? 640 TRP A CG 1
+ATOM 1019 C CD1 . TRP A 1 150 ? 16.858 13.255 49.352 1.00 11.36 ? ? ? ? ? ? 640 TRP A CD1 1
+ATOM 1020 C CD2 . TRP A 1 150 ? 16.252 11.789 47.764 1.00 10.30 ? ? ? ? ? ? 640 TRP A CD2 1
+ATOM 1021 N NE1 . TRP A 1 150 ? 17.516 12.076 49.588 1.00 11.42 ? ? ? ? ? ? 640 TRP A NE1 1
+ATOM 1022 C CE2 . TRP A 1 150 ? 17.172 11.163 48.634 1.00 10.88 ? ? ? ? ? ? 640 TRP A CE2 1
+ATOM 1023 C CE3 . TRP A 1 150 ? 15.739 11.064 46.675 1.00 11.57 ? ? ? ? ? ? 640 TRP A CE3 1
+ATOM 1024 C CZ2 . TRP A 1 150 ? 17.597 9.836 48.450 1.00 12.43 ? ? ? ? ? ? 640 TRP A CZ2 1
+ATOM 1025 C CZ3 . TRP A 1 150 ? 16.163 9.745 46.486 1.00 13.72 ? ? ? ? ? ? 640 TRP A CZ3 1
+ATOM 1026 C CH2 . TRP A 1 150 ? 17.081 9.152 47.370 1.00 12.48 ? ? ? ? ? ? 640 TRP A CH2 1
+ATOM 1027 N N . ASP A 1 151 ? 14.581 14.603 44.296 1.00 6.32 ? ? ? ? ? ? 641 ASP A N 1
+ATOM 1028 C CA . ASP A 1 151 ? 13.427 14.793 43.413 1.00 5.74 ? ? ? ? ? ? 641 ASP A CA 1
+ATOM 1029 C C . ASP A 1 151 ? 12.404 13.791 44.017 1.00 6.88 ? ? ? ? ? ? 641 ASP A C 1
+ATOM 1030 O O . ASP A 1 151 ? 12.430 12.580 43.713 1.00 7.88 ? ? ? ? ? ? 641 ASP A O 1
+ATOM 1031 C CB . ASP A 1 151 ? 13.729 14.395 41.970 1.00 6.68 ? ? ? ? ? ? 641 ASP A CB 1
+ATOM 1032 C CG . ASP A 1 151 ? 14.609 15.410 41.234 1.00 8.43 ? ? ? ? ? ? 641 ASP A CG 1
+ATOM 1033 O OD1 . ASP A 1 151 ? 14.662 16.582 41.626 1.00 9.60 ? ? ? ? ? ? 641 ASP A OD1 1
+ATOM 1034 O OD2 . ASP A 1 151 ? 15.230 14.998 40.242 1.00 9.12 ? ? ? ? ? ? 641 ASP A OD2 1
+ATOM 1035 N N . VAL A 1 152 ? 11.570 14.298 44.913 1.00 6.28 ? ? ? ? ? ? 642 VAL A N 1
+ATOM 1036 C CA . VAL A 1 152 ? 10.558 13.467 45.560 1.00 6.92 ? ? ? ? ? ? 642 VAL A CA 1
+ATOM 1037 C C . VAL A 1 152 ? 9.502 12.991 44.579 1.00 8.31 ? ? ? ? ? ? 642 VAL A C 1
+ATOM 1038 O O . VAL A 1 152 ? 9.127 11.813 44.581 1.00 8.14 ? ? ? ? ? ? 642 VAL A O 1
+ATOM 1039 C CB . VAL A 1 152 ? 9.906 14.212 46.732 1.00 7.51 ? ? ? ? ? ? 642 VAL A CB 1
+ATOM 1040 C CG1 . VAL A 1 152 ? 8.736 13.386 47.309 1.00 9.22 ? ? ? ? ? ? 642 VAL A CG1 1
+ATOM 1041 C CG2 . VAL A 1 152 ? 10.958 14.475 47.801 1.00 7.87 ? ? ? ? ? ? 642 VAL A CG2 1
+ATOM 1042 N N . ALA A 1 153 ? 9.044 13.905 43.731 1.00 8.39 ? ? ? ? ? ? 643 ALA A N 1
+ATOM 1043 C CA . ALA A 1 153 ? 8.029 13.599 42.728 1.00 9.29 ? ? ? ? ? ? 643 ALA A CA 1
+ATOM 1044 C C . ALA A 1 153 ? 8.549 14.115 41.393 1.00 9.10 ? ? ? ? ? ? 643 ALA A C 1
+ATOM 1045 O O . ALA A 1 153 ? 9.203 15.156 41.349 1.00 9.25 ? ? ? ? ? ? 643 ALA A O 1
+ATOM 1046 C CB . ALA A 1 153 ? 6.699 14.253 43.081 1.00 10.98 ? ? ? ? ? ? 643 ALA A CB 1
+ATOM 1047 N N . ASN A 1 154 ? 8.216 13.417 40.320 1.00 8.51 ? ? ? ? ? ? 644 ASN A N 1
+ATOM 1048 C CA . ASN A 1 154 ? 8.710 13.747 38.978 1.00 8.61 ? ? ? ? ? ? 644 ASN A CA 1
+ATOM 1049 C C . ASN A 1 154 ? 7.612 13.687 37.913 1.00 10.26 ? ? ? ? ? ? 644 ASN A C 1
+ATOM 1050 O O . ASN A 1 154 ? 6.837 12.724 37.857 1.00 10.20 ? ? ? ? ? ? 644 ASN A O 1
+ATOM 1051 C CB . ASN A 1 154 ? 9.813 12.726 38.645 1.00 9.80 ? ? ? ? ? ? 644 ASN A CB 1
+ATOM 1052 C CG . ASN A 1 154 ? 10.684 13.127 37.456 1.00 11.91 ? ? ? ? ? ? 644 ASN A CG 1
+ATOM 1053 O OD1 . ASN A 1 154 ? 11.150 14.266 37.345 1.00 14.46 ? ? ? ? ? ? 644 ASN A OD1 1
+ATOM 1054 N ND2 . ASN A 1 154 ? 10.944 12.174 36.587 1.00 11.71 ? ? ? ? ? ? 644 ASN A ND2 1
+ATOM 1055 N N . GLU A 1 155 ? 7.487 14.753 37.124 1.00 10.35 ? ? ? ? ? ? 645 GLU A N 1
+ATOM 1056 C CA . GLU A 1 155 ? 6.528 14.812 36.008 1.00 10.79 ? ? ? ? ? ? 645 GLU A CA 1
+ATOM 1057 C C . GLU A 1 155 ? 5.106 14.379 36.329 1.00 10.69 ? ? ? ? ? ? 645 GLU A C 1
+ATOM 1058 O O . GLU A 1 155 ? 4.512 13.605 35.591 1.00 12.21 ? ? ? ? ? ? 645 GLU A O 1
+ATOM 1059 C CB . GLU A 1 155 ? 7.070 13.967 34.868 1.00 11.45 ? ? ? ? ? ? 645 GLU A CB 1
+ATOM 1060 C CG . GLU A 1 155 ? 8.515 14.289 34.543 1.00 12.47 ? ? ? ? ? ? 645 GLU A CG 1
+ATOM 1061 C CD . GLU A 1 155 ? 9.122 13.388 33.479 1.00 15.07 ? ? ? ? ? ? 645 GLU A CD 1
+ATOM 1062 O OE1 . GLU A 1 155 ? 8.430 12.460 32.978 1.00 16.08 ? ? ? ? ? ? 645 GLU A OE1 1
+ATOM 1063 O OE2 . GLU A 1 155 ? 10.323 13.594 33.157 1.00 15.18 ? ? ? ? ? ? 645 GLU A OE2 1
+ATOM 1064 N N . CYS A 1 156 ? 4.541 14.929 37.392 1.00 11.63 ? ? ? ? ? ? 646 CYS A N 1
+ATOM 1065 C CA . CYS A 1 156 ? 3.190 14.566 37.800 1.00 12.46 ? ? ? ? ? ? 646 CYS A CA 1
+ATOM 1066 C C . CYS A 1 156 ? 2.109 15.467 37.211 1.00 13.44 ? ? ? ? ? ? 646 CYS A C 1
+ATOM 1067 O O . CYS A 1 156 ? 0.919 15.167 37.363 1.00 12.98 ? ? ? ? ? ? 646 CYS A O 1
+ATOM 1068 C CB . CYS A 1 156 ? 3.052 14.628 39.322 1.00 14.16 ? ? ? ? ? ? 646 CYS A CB 1
+ATOM 1069 S SG . CYS A 1 156 ? 4.185 13.520 40.280 1.00 17.92 ? ? ? ? ? ? 646 CYS A SG 1
+ATOM 1070 N N . MET A 1 157 ? 2.489 16.591 36.599 1.00 12.91 ? ? ? ? ? ? 647 MET A N 1
+ATOM 1071 C CA . MET A 1 157 ? 1.483 17.510 36.051 1.00 12.39 ? ? ? ? ? ? 647 MET A CA 1
+ATOM 1072 C C . MET A 1 157 ? 1.198 17.166 34.612 1.00 12.89 ? ? ? ? ? ? 647 MET A C 1
+ATOM 1073 O O . MET A 1 157 ? 2.104 16.846 33.855 1.00 11.29 ? ? ? ? ? ? 647 MET A O 1
+ATOM 1074 C CB . MET A 1 157 ? 1.957 18.971 36.140 1.00 13.15 ? ? ? ? ? ? 647 MET A CB 1
+ATOM 1075 C CG . MET A 1 157 ? 0.914 20.014 35.716 1.00 13.35 ? ? ? ? ? ? 647 MET A CG 1
+ATOM 1076 S SD . MET A 1 157 ? -0.530 20.081 36.774 1.00 16.27 ? ? ? ? ? ? 647 MET A SD 1
+ATOM 1077 C CE . MET A 1 157 ? 0.143 20.858 38.208 1.00 15.68 ? ? ? ? ? ? 647 MET A CE 1
+ATOM 1078 N N . ASP A 1 158 ? -0.079 17.190 34.253 1.00 14.26 ? ? ? ? ? ? 648 ASP A N 1
+ATOM 1079 C CA . ASP A 1 158 ? -0.460 16.910 32.874 1.00 16.47 ? ? ? ? ? ? 648 ASP A CA 1
+ATOM 1080 C C . ASP A 1 158 ? 0.135 18.000 31.966 1.00 15.82 ? ? ? ? ? ? 648 ASP A C 1
+ATOM 1081 O O . ASP A 1 158 ? 0.278 19.140 32.375 1.00 14.43 ? ? ? ? ? ? 648 ASP A O 1
+ATOM 1082 C CB . ASP A 1 158 ? -1.976 16.896 32.728 1.00 19.03 ? ? ? ? ? ? 648 ASP A CB 1
+ATOM 1083 C CG . ASP A 1 158 ? -2.401 16.358 31.395 1.00 23.11 ? ? ? ? ? ? 648 ASP A CG 1
+ATOM 1084 O OD1 . ASP A 1 158 ? -2.234 15.131 31.173 1.00 25.41 ? ? ? ? ? ? 648 ASP A OD1 1
+ATOM 1085 O OD2 . ASP A 1 158 ? -2.864 17.145 30.535 1.00 24.25 ? ? ? ? ? ? 648 ASP A OD2 1
+ATOM 1086 N N . ASP A 1 159 ? 0.480 17.641 30.741 1.00 16.50 ? ? ? ? ? ? 649 ASP A N 1
+ATOM 1087 C CA . ASP A 1 159 ? 1.058 18.606 29.805 1.00 20.50 ? ? ? ? ? ? 649 ASP A CA 1
+ATOM 1088 C C . ASP A 1 159 ? 0.217 19.825 29.439 1.00 21.12 ? ? ? ? ? ? 649 ASP A C 1
+ATOM 1089 O O . ASP A 1 159 ? 0.746 20.875 29.033 1.00 21.52 ? ? ? ? ? ? 649 ASP A O 1
+ATOM 1090 C CB . ASP A 1 159 ? 1.545 17.893 28.565 1.00 22.57 ? ? ? ? ? ? 649 ASP A CB 1
+ATOM 1091 C CG . ASP A 1 159 ? 2.906 17.337 28.763 1.00 25.17 ? ? ? ? ? ? 649 ASP A CG 1
+ATOM 1092 O OD1 . ASP A 1 159 ? 3.732 18.045 29.387 1.00 26.56 ? ? ? ? ? ? 649 ASP A OD1 1
+ATOM 1093 O OD2 . ASP A 1 159 ? 3.140 16.200 28.329 1.00 27.90 ? ? ? ? ? ? 649 ASP A OD2 1
+ATOM 1094 N N . SER A 1 160 ? -1.090 19.683 29.621 1.00 21.45 ? ? ? ? ? ? 650 SER A N 1
+ATOM 1095 C CA . SER A 1 160 ? -2.040 20.762 29.363 1.00 21.67 ? ? ? ? ? ? 650 SER A CA 1
+ATOM 1096 C C . SER A 1 160 ? -1.963 21.808 30.491 1.00 21.48 ? ? ? ? ? ? 650 SER A C 1
+ATOM 1097 O O . SER A 1 160 ? -2.315 22.975 30.286 1.00 22.52 ? ? ? ? ? ? 650 SER A O 1
+ATOM 1098 C CB . SER A 1 160 ? -3.470 20.184 29.305 1.00 22.20 ? ? ? ? ? ? 650 SER A CB 1
+ATOM 1099 O OG . SER A 1 160 ? -3.899 19.603 30.554 1.00 24.05 ? ? ? ? ? ? 650 SER A OG 1
+ATOM 1100 N N . GLY A 1 161 ? -1.520 21.372 31.674 1.00 18.65 ? ? ? ? ? ? 651 GLY A N 1
+ATOM 1101 C CA . GLY A 1 161 ? -1.470 22.242 32.821 1.00 17.91 ? ? ? ? ? ? 651 GLY A CA 1
+ATOM 1102 C C . GLY A 1 161 ? -2.824 22.224 33.497 1.00 18.26 ? ? ? ? ? ? 651 GLY A C 1
+ATOM 1103 O O . GLY A 1 161 ? -3.047 22.963 34.438 1.00 19.45 ? ? ? ? ? ? 651 GLY A O 1
+ATOM 1104 N N . ASN A 1 162 ? -3.726 21.346 33.060 1.00 19.18 ? ? ? ? ? ? 652 ASN A N 1
+ATOM 1105 C CA . ASN A 1 162 ? -5.067 21.281 33.651 1.00 21.03 ? ? ? ? ? ? 652 ASN A CA 1
+ATOM 1106 C C . ASN A 1 162 ? -5.198 20.552 34.968 1.00 20.60 ? ? ? ? ? ? 652 ASN A C 1
+ATOM 1107 O O . ASN A 1 162 ? -6.191 20.683 35.646 1.00 23.64 ? ? ? ? ? ? 652 ASN A O 1
+ATOM 1108 C CB . ASN A 1 162 ? -6.096 20.742 32.651 1.00 22.76 ? ? ? ? ? ? 652 ASN A CB 1
+ATOM 1109 C CG . ASN A 1 162 ? -6.361 21.723 31.514 1.00 25.67 ? ? ? ? ? ? 652 ASN A CG 1
+ATOM 1110 O OD1 . ASN A 1 162 ? -6.396 22.941 31.722 1.00 26.40 ? ? ? ? ? ? 652 ASN A OD1 1
+ATOM 1111 N ND2 . ASN A 1 162 ? -6.487 21.206 30.305 1.00 26.40 ? ? ? ? ? ? 652 ASN A ND2 1
+ATOM 1112 N N . GLY A 1 163 ? -4.203 19.780 35.341 1.00 19.49 ? ? ? ? ? ? 653 GLY A N 1
+ATOM 1113 C CA . GLY A 1 163 ? -4.281 19.066 36.593 1.00 16.84 ? ? ? ? ? ? 653 GLY A CA 1
+ATOM 1114 C C . GLY A 1 163 ? -3.288 17.939 36.561 1.00 15.65 ? ? ? ? ? ? 653 GLY A C 1
+ATOM 1115 O O . GLY A 1 163 ? -2.541 17.769 35.604 1.00 15.47 ? ? ? ? ? ? 653 GLY A O 1
+ATOM 1116 N N . LEU A 1 164 ? -3.287 17.154 37.625 1.00 15.82 ? ? ? ? ? ? 654 LEU A N 1
+ATOM 1117 C CA . LEU A 1 164 ? -2.363 16.046 37.749 1.00 15.44 ? ? ? ? ? ? 654 LEU A CA 1
+ATOM 1118 C C . LEU A 1 164 ? -2.632 14.949 36.729 1.00 16.20 ? ? ? ? ? ? 654 LEU A C 1
+ATOM 1119 O O . LEU A 1 164 ? -3.781 14.672 36.349 1.00 17.76 ? ? ? ? ? ? 654 LEU A O 1
+ATOM 1120 C CB . LEU A 1 164 ? -2.404 15.485 39.190 1.00 16.82 ? ? ? ? ? ? 654 LEU A CB 1
+ATOM 1121 C CG . LEU A 1 164 ? -1.999 16.441 40.339 1.00 17.28 ? ? ? ? ? ? 654 LEU A CG 1
+ATOM 1122 C CD1 . LEU A 1 164 ? -2.341 15.847 41.727 1.00 17.10 ? ? ? ? ? ? 654 LEU A CD1 1
+ATOM 1123 C CD2 . LEU A 1 164 ? -0.529 16.707 40.232 1.00 17.49 ? ? ? ? ? ? 654 LEU A CD2 1
+ATOM 1124 N N . ARG A 1 165 ? -1.554 14.332 36.291 1.00 15.11 ? ? ? ? ? ? 655 ARG A N 1
+ATOM 1125 C CA . ARG A 1 165 ? -1.551 13.254 35.321 1.00 15.76 ? ? ? ? ? ? 655 ARG A CA 1
+ATOM 1126 C C . ARG A 1 165 ? -2.132 11.956 35.926 1.00 15.91 ? ? ? ? ? ? 655 ARG A C 1
+ATOM 1127 O O . ARG A 1 165 ? -1.944 11.673 37.124 1.00 15.50 ? ? ? ? ? ? 655 ARG A O 1
+ATOM 1128 C CB . ARG A 1 165 ? -0.080 13.073 34.942 1.00 18.24 ? ? ? ? ? ? 655 ARG A CB 1
+ATOM 1129 C CG . ARG A 1 165 ? 0.258 12.001 34.021 1.00 20.71 ? ? ? ? ? ? 655 ARG A CG 1
+ATOM 1130 C CD . ARG A 1 165 ? 1.743 11.779 34.062 1.00 21.00 ? ? ? ? ? ? 655 ARG A CD 1
+ATOM 1131 N NE . ARG A 1 165 ? 2.529 12.917 33.568 1.00 22.27 ? ? ? ? ? ? 655 ARG A NE 1
+ATOM 1132 C CZ . ARG A 1 165 ? 2.724 13.216 32.279 1.00 23.89 ? ? ? ? ? ? 655 ARG A CZ 1
+ATOM 1133 N NH1 . ARG A 1 165 ? 2.157 12.478 31.324 1.00 24.61 ? ? ? ? ? ? 655 ARG A NH1 1
+ATOM 1134 N NH2 . ARG A 1 165 ? 3.602 14.159 31.927 1.00 23.30 ? ? ? ? ? ? 655 ARG A NH2 1
+ATOM 1135 N N . SER A 1 166 ? -2.848 11.167 35.143 1.00 15.30 ? ? ? ? ? ? 656 SER A N 1
+ATOM 1136 C CA . SER A 1 166 ? -3.339 9.919 35.723 1.00 17.88 ? ? ? ? ? ? 656 SER A CA 1
+ATOM 1137 C C . SER A 1 166 ? -2.115 8.969 35.818 1.00 17.56 ? ? ? ? ? ? 656 SER A C 1
+ATOM 1138 O O . SER A 1 166 ? -1.179 9.044 35.004 1.00 17.81 ? ? ? ? ? ? 656 SER A O 1
+ATOM 1139 C CB . SER A 1 166 ? -4.535 9.341 34.935 1.00 20.25 ? ? ? ? ? ? 656 SER A CB 1
+ATOM 1140 O OG . SER A 1 166 ? -4.134 8.362 34.006 1.00 24.17 ? ? ? ? ? ? 656 SER A OG 1
+ATOM 1141 N N . SER A 1 167 ? -2.042 8.237 36.925 1.00 15.62 ? ? ? ? ? ? 657 SER A N 1
+ATOM 1142 C CA . SER A 1 167 ? -0.958 7.298 37.208 1.00 14.45 ? ? ? ? ? ? 657 SER A CA 1
+ATOM 1143 C C . SER A 1 167 ? -1.453 6.353 38.303 1.00 14.09 ? ? ? ? ? ? 657 SER A C 1
+ATOM 1144 O O . SER A 1 167 ? -2.510 6.607 38.915 1.00 13.28 ? ? ? ? ? ? 657 SER A O 1
+ATOM 1145 C CB . SER A 1 167 ? 0.287 8.049 37.709 1.00 13.71 ? ? ? ? ? ? 657 SER A CB 1
+ATOM 1146 O OG . SER A 1 167 ? 0.100 8.611 38.982 1.00 12.74 ? ? ? ? ? ? 657 SER A OG 1
+ATOM 1147 N N . ILE A 1 168 ? -0.703 5.286 38.586 1.00 13.44 ? ? ? ? ? ? 658 ILE A N 1
+ATOM 1148 C CA . ILE A 1 168 ? -1.144 4.377 39.644 1.00 13.09 ? ? ? ? ? ? 658 ILE A CA 1
+ATOM 1149 C C . ILE A 1 168 ? -1.325 5.135 40.977 1.00 12.37 ? ? ? ? ? ? 658 ILE A C 1
+ATOM 1150 O O . ILE A 1 168 ? -2.355 4.987 41.642 1.00 13.54 ? ? ? ? ? ? 658 ILE A O 1
+ATOM 1151 C CB . ILE A 1 168 ? -0.216 3.135 39.790 1.00 14.48 ? ? ? ? ? ? 658 ILE A CB 1
+ATOM 1152 C CG1 . ILE A 1 168 ? -0.814 2.160 40.805 1.00 16.04 ? ? ? ? ? ? 658 ILE A CG1 1
+ATOM 1153 C CG2 . ILE A 1 168 ? 1.204 3.534 40.192 1.00 15.18 ? ? ? ? ? ? 658 ILE A CG2 1
+ATOM 1154 C CD1 . ILE A 1 168 ? -0.043 0.860 40.917 1.00 18.43 ? ? ? ? ? ? 658 ILE A CD1 1
+ATOM 1155 N N . TRP A 1 169 ? -0.403 6.044 41.307 1.00 11.81 ? ? ? ? ? ? 659 TRP A N 1
+ATOM 1156 C CA . TRP A 1 169 ? -0.477 6.812 42.572 1.00 11.45 ? ? ? ? ? ? 659 TRP A CA 1
+ATOM 1157 C C . TRP A 1 169 ? -1.685 7.733 42.593 1.00 10.79 ? ? ? ? ? ? 659 TRP A C 1
+ATOM 1158 O O . TRP A 1 169 ? -2.440 7.763 43.551 1.00 12.67 ? ? ? ? ? ? 659 TRP A O 1
+ATOM 1159 C CB . TRP A 1 169 ? 0.782 7.668 42.804 1.00 11.39 ? ? ? ? ? ? 659 TRP A CB 1
+ATOM 1160 C CG . TRP A 1 169 ? 2.058 6.924 42.617 1.00 12.46 ? ? ? ? ? ? 659 TRP A CG 1
+ATOM 1161 C CD1 . TRP A 1 169 ? 2.896 6.974 41.529 1.00 12.48 ? ? ? ? ? ? 659 TRP A CD1 1
+ATOM 1162 C CD2 . TRP A 1 169 ? 2.618 5.959 43.518 1.00 12.83 ? ? ? ? ? ? 659 TRP A CD2 1
+ATOM 1163 N NE1 . TRP A 1 169 ? 3.936 6.084 41.700 1.00 14.54 ? ? ? ? ? ? 659 TRP A NE1 1
+ATOM 1164 C CE2 . TRP A 1 169 ? 3.787 5.446 42.912 1.00 13.43 ? ? ? ? ? ? 659 TRP A CE2 1
+ATOM 1165 C CE3 . TRP A 1 169 ? 2.238 5.476 44.777 1.00 12.60 ? ? ? ? ? ? 659 TRP A CE3 1
+ATOM 1166 C CZ2 . TRP A 1 169 ? 4.587 4.459 43.533 1.00 14.15 ? ? ? ? ? ? 659 TRP A CZ2 1
+ATOM 1167 C CZ3 . TRP A 1 169 ? 3.032 4.491 45.401 1.00 12.93 ? ? ? ? ? ? 659 TRP A CZ3 1
+ATOM 1168 C CH2 . TRP A 1 169 ? 4.190 3.998 44.774 1.00 13.84 ? ? ? ? ? ? 659 TRP A CH2 1
+ATOM 1169 N N . ARG A 1 170 ? -1.869 8.482 41.523 1.00 10.87 ? ? ? ? ? ? 660 ARG A N 1
+ATOM 1170 C CA . ARG A 1 170 ? -2.980 9.421 41.439 1.00 10.84 ? ? ? ? ? ? 660 ARG A CA 1
+ATOM 1171 C C . ARG A 1 170 ? -4.355 8.767 41.432 1.00 10.26 ? ? ? ? ? ? 660 ARG A C 1
+ATOM 1172 O O . ARG A 1 170 ? -5.277 9.235 42.104 1.00 10.51 ? ? ? ? ? ? 660 ARG A O 1
+ATOM 1173 C CB . ARG A 1 170 ? -2.816 10.288 40.173 1.00 11.29 ? ? ? ? ? ? 660 ARG A CB 1
+ATOM 1174 C CG . ARG A 1 170 ? -4.019 11.178 39.823 1.00 12.05 ? ? ? ? ? ? 660 ARG A CG 1
+ATOM 1175 C CD . ARG A 1 170 ? -4.251 12.236 40.873 1.00 13.12 ? ? ? ? ? ? 660 ARG A CD 1
+ATOM 1176 N NE . ARG A 1 170 ? -5.450 13.049 40.577 1.00 13.70 ? ? ? ? ? ? 660 ARG A NE 1
+ATOM 1177 C CZ . ARG A 1 170 ? -6.699 12.721 40.913 1.00 12.68 ? ? ? ? ? ? 660 ARG A CZ 1
+ATOM 1178 N NH1 . ARG A 1 170 ? -6.958 11.573 41.550 1.00 11.54 ? ? ? ? ? ? 660 ARG A NH1 1
+ATOM 1179 N NH2 . ARG A 1 170 ? -7.671 13.607 40.725 1.00 11.79 ? ? ? ? ? ? 660 ARG A NH2 1
+ATOM 1180 N N . ASN A 1 171 ? -4.489 7.720 40.632 1.00 10.81 ? ? ? ? ? ? 661 ASN A N 1
+ATOM 1181 C CA . ASN A 1 171 ? -5.774 7.054 40.453 1.00 12.17 ? ? ? ? ? ? 661 ASN A CA 1
+ATOM 1182 C C . ASN A 1 171 ? -6.245 6.292 41.682 1.00 13.13 ? ? ? ? ? ? 661 ASN A C 1
+ATOM 1183 O O . ASN A 1 171 ? -7.432 6.375 42.050 1.00 14.25 ? ? ? ? ? ? 661 ASN A O 1
+ATOM 1184 C CB . ASN A 1 171 ? -5.735 6.111 39.249 1.00 13.42 ? ? ? ? ? ? 661 ASN A CB 1
+ATOM 1185 C CG . ASN A 1 171 ? -5.473 6.837 37.925 1.00 14.23 ? ? ? ? ? ? 661 ASN A CG 1
+ATOM 1186 O OD1 . ASN A 1 171 ? -5.419 8.068 37.861 1.00 14.47 ? ? ? ? ? ? 661 ASN A OD1 1
+ATOM 1187 N ND2 . ASN A 1 171 ? -5.275 6.057 36.862 1.00 15.94 ? ? ? ? ? ? 661 ASN A ND2 1
+ATOM 1188 N N . VAL A 1 172 ? -5.314 5.589 42.333 1.00 11.99 ? ? ? ? ? ? 662 VAL A N 1
+ATOM 1189 C CA . VAL A 1 172 ? -5.639 4.799 43.526 1.00 11.91 ? ? ? ? ? ? 662 VAL A CA 1
+ATOM 1190 C C . VAL A 1 172 ? -5.733 5.601 44.830 1.00 11.64 ? ? ? ? ? ? 662 VAL A C 1
+ATOM 1191 O O . VAL A 1 172 ? -6.685 5.430 45.606 1.00 12.84 ? ? ? ? ? ? 662 VAL A O 1
+ATOM 1192 C CB . VAL A 1 172 ? -4.619 3.610 43.687 1.00 11.78 ? ? ? ? ? ? 662 VAL A CB 1
+ATOM 1193 C CG1 . VAL A 1 172 ? -4.857 2.863 44.987 1.00 12.44 ? ? ? ? ? ? 662 VAL A CG1 1
+ATOM 1194 C CG2 . VAL A 1 172 ? -4.682 2.684 42.481 1.00 11.85 ? ? ? ? ? ? 662 VAL A CG2 1
+ATOM 1195 N N . ILE A 1 173 ? -4.759 6.471 45.086 1.00 9.92 ? ? ? ? ? ? 663 ILE A N 1
+ATOM 1196 C CA . ILE A 1 173 ? -4.764 7.249 46.312 1.00 10.42 ? ? ? ? ? ? 663 ILE A CA 1
+ATOM 1197 C C . ILE A 1 173 ? -5.719 8.432 46.260 1.00 11.77 ? ? ? ? ? ? 663 ILE A C 1
+ATOM 1198 O O . ILE A 1 173 ? -6.465 8.668 47.209 1.00 12.98 ? ? ? ? ? ? 663 ILE A O 1
+ATOM 1199 C CB . ILE A 1 173 ? -3.326 7.695 46.692 1.00 10.15 ? ? ? ? ? ? 663 ILE A CB 1
+ATOM 1200 C CG1 . ILE A 1 173 ? -2.487 6.444 46.996 1.00 10.96 ? ? ? ? ? ? 663 ILE A CG1 1
+ATOM 1201 C CG2 . ILE A 1 173 ? -3.325 8.642 47.852 1.00 9.34 ? ? ? ? ? ? 663 ILE A CG2 1
+ATOM 1202 C CD1 . ILE A 1 173 ? -1.021 6.700 47.074 1.00 11.26 ? ? ? ? ? ? 663 ILE A CD1 1
+ATOM 1203 N N . GLY A 1 174 ? -5.692 9.191 45.163 1.00 12.24 ? ? ? ? ? ? 664 GLY A N 1
+ATOM 1204 C CA . GLY A 1 174 ? -6.573 10.339 45.076 1.00 12.01 ? ? ? ? ? ? 664 GLY A CA 1
+ATOM 1205 C C . GLY A 1 174 ? -5.814 11.621 44.833 1.00 12.95 ? ? ? ? ? ? 664 GLY A C 1
+ATOM 1206 O O . GLY A 1 174 ? -4.576 11.622 44.723 1.00 12.33 ? ? ? ? ? ? 664 GLY A O 1
+ATOM 1207 N N . GLN A 1 175 ? -6.541 12.734 44.871 1.00 13.82 ? ? ? ? ? ? 665 GLN A N 1
+ATOM 1208 C CA . GLN A 1 175 ? -5.946 14.027 44.547 1.00 15.58 ? ? ? ? ? ? 665 GLN A CA 1
+ATOM 1209 C C . GLN A 1 175 ? -4.881 14.577 45.491 1.00 15.36 ? ? ? ? ? ? 665 GLN A C 1
+ATOM 1210 O O . GLN A 1 175 ? -4.077 15.412 45.067 1.00 16.86 ? ? ? ? ? ? 665 GLN A O 1
+ATOM 1211 C CB . GLN A 1 175 ? -7.028 15.074 44.293 1.00 18.52 ? ? ? ? ? ? 665 GLN A CB 1
+ATOM 1212 C CG . GLN A 1 175 ? -7.746 15.528 45.540 1.00 24.51 ? ? ? ? ? ? 665 GLN A CG 1
+ATOM 1213 C CD . GLN A 1 175 ? -8.484 16.875 45.363 1.00 27.85 ? ? ? ? ? ? 665 GLN A CD 1
+ATOM 1214 O OE1 . GLN A 1 175 ? -8.431 17.508 44.299 1.00 30.10 ? ? ? ? ? ? 665 GLN A OE1 1
+ATOM 1215 N NE2 . GLN A 1 175 ? -9.150 17.318 46.422 1.00 29.11 ? ? ? ? ? ? 665 GLN A NE2 1
+ATOM 1216 N N . ASP A 1 176 ? -4.816 14.074 46.724 1.00 13.36 ? ? ? ? ? ? 666 ASP A N 1
+ATOM 1217 C CA . ASP A 1 176 ? -3.841 14.553 47.711 1.00 13.33 ? ? ? ? ? ? 666 ASP A CA 1
+ATOM 1218 C C . ASP A 1 176 ? -2.598 13.662 47.870 1.00 11.79 ? ? ? ? ? ? 666 ASP A C 1
+ATOM 1219 O O . ASP A 1 176 ? -1.857 13.802 48.861 1.00 12.33 ? ? ? ? ? ? 666 ASP A O 1
+ATOM 1220 C CB . ASP A 1 176 ? -4.525 14.684 49.078 1.00 14.83 ? ? ? ? ? ? 666 ASP A CB 1
+ATOM 1221 C CG . ASP A 1 176 ? -5.128 13.362 49.561 1.00 16.96 ? ? ? ? ? ? 666 ASP A CG 1
+ATOM 1222 O OD1 . ASP A 1 176 ? -5.139 12.368 48.804 1.00 16.93 ? ? ? ? ? ? 666 ASP A OD1 1
+ATOM 1223 O OD2 . ASP A 1 176 ? -5.602 13.312 50.715 1.00 18.91 ? ? ? ? ? ? 666 ASP A OD2 1
+ATOM 1224 N N . TYR A 1 177 ? -2.369 12.747 46.933 1.00 10.74 ? ? ? ? ? ? 667 TYR A N 1
+ATOM 1225 C CA . TYR A 1 177 ? -1.232 11.853 47.062 1.00 10.51 ? ? ? ? ? ? 667 TYR A CA 1
+ATOM 1226 C C . TYR A 1 177 ? 0.132 12.545 47.210 1.00 10.39 ? ? ? ? ? ? 667 TYR A C 1
+ATOM 1227 O O . TYR A 1 177 ? 0.994 12.022 47.909 1.00 10.92 ? ? ? ? ? ? 667 TYR A O 1
+ATOM 1228 C CB . TYR A 1 177 ? -1.208 10.808 45.947 1.00 11.00 ? ? ? ? ? ? 667 TYR A CB 1
+ATOM 1229 C CG . TYR A 1 177 ? -0.526 11.236 44.655 1.00 10.72 ? ? ? ? ? ? 667 TYR A CG 1
+ATOM 1230 C CD1 . TYR A 1 177 ? -1.243 11.893 43.645 1.00 11.01 ? ? ? ? ? ? 667 TYR A CD1 1
+ATOM 1231 C CD2 . TYR A 1 177 ? 0.808 10.899 44.406 1.00 11.43 ? ? ? ? ? ? 667 TYR A CD2 1
+ATOM 1232 C CE1 . TYR A 1 177 ? -0.648 12.193 42.414 1.00 10.71 ? ? ? ? ? ? 667 TYR A CE1 1
+ATOM 1233 C CE2 . TYR A 1 177 ? 1.410 11.193 43.171 1.00 11.53 ? ? ? ? ? ? 667 TYR A CE2 1
+ATOM 1234 C CZ . TYR A 1 177 ? 0.667 11.837 42.181 1.00 11.28 ? ? ? ? ? ? 667 TYR A CZ 1
+ATOM 1235 O OH . TYR A 1 177 ? 1.246 12.070 40.944 1.00 12.36 ? ? ? ? ? ? 667 TYR A OH 1
+ATOM 1236 N N . LEU A 1 178 ? 0.348 13.693 46.557 1.00 10.36 ? ? ? ? ? ? 668 LEU A N 1
+ATOM 1237 C CA . LEU A 1 178 ? 1.644 14.385 46.686 1.00 10.31 ? ? ? ? ? ? 668 LEU A CA 1
+ATOM 1238 C C . LEU A 1 178 ? 1.882 14.987 48.065 1.00 9.95 ? ? ? ? ? ? 668 LEU A C 1
+ATOM 1239 O O . LEU A 1 178 ? 3.028 15.071 48.522 1.00 10.72 ? ? ? ? ? ? 668 LEU A O 1
+ATOM 1240 C CB . LEU A 1 178 ? 1.843 15.449 45.600 1.00 12.04 ? ? ? ? ? ? 668 LEU A CB 1
+ATOM 1241 C CG . LEU A 1 178 ? 2.114 14.909 44.192 1.00 13.54 ? ? ? ? ? ? 668 LEU A CG 1
+ATOM 1242 C CD1 . LEU A 1 178 ? 2.257 16.062 43.212 1.00 15.57 ? ? ? ? ? ? 668 LEU A CD1 1
+ATOM 1243 C CD2 . LEU A 1 178 ? 3.375 14.054 44.139 1.00 14.87 ? ? ? ? ? ? 668 LEU A CD2 1
+ATOM 1244 N N . ASP A 1 179 ? 0.812 15.356 48.769 1.00 9.71 ? ? ? ? ? ? 669 ASP A N 1
+ATOM 1245 C CA . ASP A 1 179 ? 0.973 15.914 50.109 1.00 11.40 ? ? ? ? ? ? 669 ASP A CA 1
+ATOM 1246 C C . ASP A 1 179 ? 1.625 14.846 51.021 1.00 10.54 ? ? ? ? ? ? 669 ASP A C 1
+ATOM 1247 O O . ASP A 1 179 ? 2.482 15.158 51.854 1.00 10.79 ? ? ? ? ? ? 669 ASP A O 1
+ATOM 1248 C CB . ASP A 1 179 ? -0.367 16.318 50.711 1.00 12.86 ? ? ? ? ? ? 669 ASP A CB 1
+ATOM 1249 C CG . ASP A 1 179 ? -1.015 17.502 50.002 1.00 15.76 ? ? ? ? ? ? 669 ASP A CG 1
+ATOM 1250 O OD1 . ASP A 1 179 ? -0.452 18.079 49.056 1.00 16.66 ? ? ? ? ? ? 669 ASP A OD1 1
+ATOM 1251 O OD2 . ASP A 1 179 ? -2.120 17.874 50.434 1.00 18.14 ? ? ? ? ? ? 669 ASP A OD2 1
+ATOM 1252 N N . TYR A 1 180 ? 1.205 13.594 50.846 1.00 9.93 ? ? ? ? ? ? 670 TYR A N 1
+ATOM 1253 C CA . TYR A 1 180 ? 1.754 12.476 51.618 1.00 10.41 ? ? ? ? ? ? 670 TYR A CA 1
+ATOM 1254 C C . TYR A 1 180 ? 3.190 12.201 51.248 1.00 8.85 ? ? ? ? ? ? 670 TYR A C 1
+ATOM 1255 O O . TYR A 1 180 ? 4.010 12.033 52.124 1.00 9.28 ? ? ? ? ? ? 670 TYR A O 1
+ATOM 1256 C CB . TYR A 1 180 ? 0.922 11.200 51.415 1.00 11.99 ? ? ? ? ? ? 670 TYR A CB 1
+ATOM 1257 C CG . TYR A 1 180 ? -0.376 11.275 52.154 1.00 15.47 ? ? ? ? ? ? 670 TYR A CG 1
+ATOM 1258 C CD1 . TYR A 1 180 ? -0.437 10.937 53.508 1.00 17.20 ? ? ? ? ? ? 670 TYR A CD1 1
+ATOM 1259 C CD2 . TYR A 1 180 ? -1.530 11.744 51.528 1.00 17.38 ? ? ? ? ? ? 670 TYR A CD2 1
+ATOM 1260 C CE1 . TYR A 1 180 ? -1.608 11.062 54.220 1.00 19.48 ? ? ? ? ? ? 670 TYR A CE1 1
+ATOM 1261 C CE2 . TYR A 1 180 ? -2.709 11.884 52.223 1.00 19.68 ? ? ? ? ? ? 670 TYR A CE2 1
+ATOM 1262 C CZ . TYR A 1 180 ? -2.742 11.540 53.573 1.00 20.46 ? ? ? ? ? ? 670 TYR A CZ 1
+ATOM 1263 O OH . TYR A 1 180 ? -3.909 11.688 54.283 1.00 23.93 ? ? ? ? ? ? 670 TYR A OH 1
+ATOM 1264 N N . ALA A 1 181 ? 3.511 12.205 49.952 1.00 8.46 ? ? ? ? ? ? 671 ALA A N 1
+ATOM 1265 C CA . ALA A 1 181 ? 4.883 11.923 49.522 1.00 7.15 ? ? ? ? ? ? 671 ALA A CA 1
+ATOM 1266 C C . ALA A 1 181 ? 5.856 12.890 50.160 1.00 8.02 ? ? ? ? ? ? 671 ALA A C 1
+ATOM 1267 O O . ALA A 1 181 ? 6.886 12.470 50.708 1.00 8.12 ? ? ? ? ? ? 671 ALA A O 1
+ATOM 1268 C CB . ALA A 1 181 ? 5.012 11.945 48.002 1.00 8.36 ? ? ? ? ? ? 671 ALA A CB 1
+ATOM 1269 N N . PHE A 1 182 ? 5.531 14.186 50.117 1.00 7.83 ? ? ? ? ? ? 672 PHE A N 1
+ATOM 1270 C CA . PHE A 1 182 ? 6.405 15.212 50.717 1.00 8.55 ? ? ? ? ? ? 672 PHE A CA 1
+ATOM 1271 C C . PHE A 1 182 ? 6.507 15.114 52.255 1.00 8.76 ? ? ? ? ? ? 672 PHE A C 1
+ATOM 1272 O O . PHE A 1 182 ? 7.590 15.292 52.812 1.00 9.14 ? ? ? ? ? ? 672 PHE A O 1
+ATOM 1273 C CB . PHE A 1 182 ? 6.022 16.624 50.234 1.00 7.96 ? ? ? ? ? ? 672 PHE A CB 1
+ATOM 1274 C CG . PHE A 1 182 ? 6.538 16.924 48.830 1.00 8.17 ? ? ? ? ? ? 672 PHE A CG 1
+ATOM 1275 C CD1 . PHE A 1 182 ? 7.818 17.444 48.642 1.00 8.70 ? ? ? ? ? ? 672 PHE A CD1 1
+ATOM 1276 C CD2 . PHE A 1 182 ? 5.780 16.604 47.700 1.00 9.12 ? ? ? ? ? ? 672 PHE A CD2 1
+ATOM 1277 C CE1 . PHE A 1 182 ? 8.344 17.629 47.343 1.00 8.63 ? ? ? ? ? ? 672 PHE A CE1 1
+ATOM 1278 C CE2 . PHE A 1 182 ? 6.298 16.786 46.395 1.00 8.84 ? ? ? ? ? ? 672 PHE A CE2 1
+ATOM 1279 C CZ . PHE A 1 182 ? 7.584 17.295 46.231 1.00 8.72 ? ? ? ? ? ? 672 PHE A CZ 1
+ATOM 1280 N N . ARG A 1 183 ? 5.390 14.824 52.927 1.00 10.01 ? ? ? ? ? ? 673 ARG A N 1
+ATOM 1281 C CA . ARG A 1 183 ? 5.403 14.642 54.393 1.00 11.25 ? ? ? ? ? ? 673 ARG A CA 1
+ATOM 1282 C C . ARG A 1 183 ? 6.265 13.446 54.800 1.00 10.14 ? ? ? ? ? ? 673 ARG A C 1
+ATOM 1283 O O . ARG A 1 183 ? 7.131 13.577 55.673 1.00 11.12 ? ? ? ? ? ? 673 ARG A O 1
+ATOM 1284 C CB . ARG A 1 183 ? 3.989 14.462 54.922 1.00 15.64 ? ? ? ? ? ? 673 ARG A CB 1
+ATOM 1285 C CG . ARG A 1 183 ? 3.223 15.749 55.010 1.00 20.81 ? ? ? ? ? ? 673 ARG A CG 1
+ATOM 1286 C CD . ARG A 1 183 ? 1.981 15.528 55.843 1.00 25.86 ? ? ? ? ? ? 673 ARG A CD 1
+ATOM 1287 N NE . ARG A 1 183 ? 0.799 16.007 55.140 1.00 30.63 ? ? ? ? ? ? 673 ARG A NE 1
+ATOM 1288 C CZ . ARG A 1 183 ? 0.418 17.280 55.110 1.00 32.65 ? ? ? ? ? ? 673 ARG A CZ 1
+ATOM 1289 N NH1 . ARG A 1 183 ? 1.138 18.205 55.756 1.00 33.81 ? ? ? ? ? ? 673 ARG A NH1 1
+ATOM 1290 N NH2 . ARG A 1 183 ? -0.681 17.625 54.429 1.00 34.41 ? ? ? ? ? ? 673 ARG A NH2 1
+ATOM 1291 N N . TYR A 1 184 ? 6.108 12.318 54.095 1.00 9.91 ? ? ? ? ? ? 674 TYR A N 1
+ATOM 1292 C CA . TYR A 1 184 ? 6.900 11.109 54.379 1.00 10.14 ? ? ? ? ? ? 674 TYR A CA 1
+ATOM 1293 C C . TYR A 1 184 ? 8.390 11.389 54.172 1.00 9.98 ? ? ? ? ? ? 674 TYR A C 1
+ATOM 1294 O O . TYR A 1 184 ? 9.232 10.950 54.944 1.00 9.86 ? ? ? ? ? ? 674 TYR A O 1
+ATOM 1295 C CB . TYR A 1 184 ? 6.497 9.928 53.473 1.00 10.79 ? ? ? ? ? ? 674 TYR A CB 1
+ATOM 1296 C CG . TYR A 1 184 ? 5.101 9.408 53.667 1.00 11.54 ? ? ? ? ? ? 674 TYR A CG 1
+ATOM 1297 C CD1 . TYR A 1 184 ? 4.442 9.582 54.876 1.00 13.46 ? ? ? ? ? ? 674 TYR A CD1 1
+ATOM 1298 C CD2 . TYR A 1 184 ? 4.448 8.708 52.645 1.00 12.58 ? ? ? ? ? ? 674 TYR A CD2 1
+ATOM 1299 C CE1 . TYR A 1 184 ? 3.151 9.066 55.071 1.00 13.55 ? ? ? ? ? ? 674 TYR A CE1 1
+ATOM 1300 C CE2 . TYR A 1 184 ? 3.166 8.186 52.828 1.00 12.22 ? ? ? ? ? ? 674 TYR A CE2 1
+ATOM 1301 C CZ . TYR A 1 184 ? 2.536 8.371 54.043 1.00 13.30 ? ? ? ? ? ? 674 TYR A CZ 1
+ATOM 1302 O OH . TYR A 1 184 ? 1.288 7.838 54.271 1.00 15.76 ? ? ? ? ? ? 674 TYR A OH 1
+ATOM 1303 N N . ALA A 1 185 ? 8.709 12.141 53.118 1.00 8.57 ? ? ? ? ? ? 675 ALA A N 1
+ATOM 1304 C CA . ALA A 1 185 ? 10.098 12.455 52.803 1.00 9.05 ? ? ? ? ? ? 675 ALA A CA 1
+ATOM 1305 C C . ALA A 1 185 ? 10.729 13.338 53.863 1.00 7.95 ? ? ? ? ? ? 675 ALA A C 1
+ATOM 1306 O O . ALA A 1 185 ? 11.866 13.094 54.271 1.00 9.48 ? ? ? ? ? ? 675 ALA A O 1
+ATOM 1307 C CB . ALA A 1 185 ? 10.177 13.115 51.426 1.00 8.33 ? ? ? ? ? ? 675 ALA A CB 1
+ATOM 1308 N N . ARG A 1 186 ? 9.997 14.356 54.310 1.00 8.97 ? ? ? ? ? ? 676 ARG A N 1
+ATOM 1309 C CA . ARG A 1 186 ? 10.508 15.260 55.338 1.00 10.41 ? ? ? ? ? ? 676 ARG A CA 1
+ATOM 1310 C C . ARG A 1 186 ? 10.768 14.508 56.653 1.00 12.36 ? ? ? ? ? ? 676 ARG A C 1
+ATOM 1311 O O . ARG A 1 186 ? 11.764 14.769 57.328 1.00 13.32 ? ? ? ? ? ? 676 ARG A O 1
+ATOM 1312 C CB . ARG A 1 186 ? 9.548 16.412 55.569 1.00 11.14 ? ? ? ? ? ? 676 ARG A CB 1
+ATOM 1313 C CG . ARG A 1 186 ? 9.974 17.330 56.710 1.00 13.61 ? ? ? ? ? ? 676 ARG A CG 1
+ATOM 1314 C CD . ARG A 1 186 ? 11.221 18.203 56.350 1.00 15.19 ? ? ? ? ? ? 676 ARG A CD 1
+ATOM 1315 N NE . ARG A 1 186 ? 10.812 19.506 55.807 1.00 16.85 ? ? ? ? ? ? 676 ARG A NE 1
+ATOM 1316 C CZ . ARG A 1 186 ? 11.319 20.099 54.716 1.00 17.52 ? ? ? ? ? ? 676 ARG A CZ 1
+ATOM 1317 N NH1 . ARG A 1 186 ? 12.286 19.525 54.017 1.00 15.32 ? ? ? ? ? ? 676 ARG A NH1 1
+ATOM 1318 N NH2 . ARG A 1 186 ? 10.852 21.295 54.340 1.00 17.76 ? ? ? ? ? ? 676 ARG A NH2 1
+ATOM 1319 N N . GLU A 1 187 ? 9.919 13.539 56.979 1.00 13.53 ? ? ? ? ? ? 677 GLU A N 1
+ATOM 1320 C CA . GLU A 1 187 ? 10.125 12.759 58.201 1.00 16.22 ? ? ? ? ? ? 677 GLU A CA 1
+ATOM 1321 C C . GLU A 1 187 ? 11.380 11.872 58.070 1.00 16.73 ? ? ? ? ? ? 677 GLU A C 1
+ATOM 1322 O O . GLU A 1 187 ? 12.154 11.722 59.039 1.00 17.17 ? ? ? ? ? ? 677 GLU A O 1
+ATOM 1323 C CB . GLU A 1 187 ? 8.917 11.865 58.478 1.00 20.24 ? ? ? ? ? ? 677 GLU A CB 1
+ATOM 1324 C CG . GLU A 1 187 ? 7.720 12.553 59.115 1.00 27.80 ? ? ? ? ? ? 677 GLU A CG 1
+ATOM 1325 C CD . GLU A 1 187 ? 6.383 11.760 58.959 1.00 31.77 ? ? ? ? ? ? 677 GLU A CD 1
+ATOM 1326 O OE1 . GLU A 1 187 ? 6.396 10.520 58.692 1.00 34.00 ? ? ? ? ? ? 677 GLU A OE1 1
+ATOM 1327 O OE2 . GLU A 1 187 ? 5.300 12.405 59.089 1.00 34.87 ? ? ? ? ? ? 677 GLU A OE2 1
+ATOM 1328 N N . ALA A 1 188 ? 11.588 11.286 56.884 1.00 13.74 ? ? ? ? ? ? 678 ALA A N 1
+ATOM 1329 C CA . ALA A 1 188 ? 12.717 10.382 56.652 1.00 12.60 ? ? ? ? ? ? 678 ALA A CA 1
+ATOM 1330 C C . ALA A 1 188 ? 14.079 11.049 56.774 1.00 13.19 ? ? ? ? ? ? 678 ALA A C 1
+ATOM 1331 O O . ALA A 1 188 ? 15.025 10.460 57.331 1.00 13.81 ? ? ? ? ? ? 678 ALA A O 1
+ATOM 1332 C CB . ALA A 1 188 ? 12.572 9.676 55.294 1.00 11.91 ? ? ? ? ? ? 678 ALA A CB 1
+ATOM 1333 N N . ASP A 1 189 ? 14.211 12.248 56.208 1.00 12.01 ? ? ? ? ? ? 679 ASP A N 1
+ATOM 1334 C CA . ASP A 1 189 ? 15.480 12.969 56.279 1.00 12.89 ? ? ? ? ? ? 679 ASP A CA 1
+ATOM 1335 C C . ASP A 1 189 ? 15.165 14.463 56.360 1.00 14.91 ? ? ? ? ? ? 679 ASP A C 1
+ATOM 1336 O O . ASP A 1 189 ? 15.082 15.151 55.365 1.00 14.07 ? ? ? ? ? ? 679 ASP A O 1
+ATOM 1337 C CB . ASP A 1 189 ? 16.376 12.642 55.075 1.00 12.70 ? ? ? ? ? ? 679 ASP A CB 1
+ATOM 1338 C CG . ASP A 1 189 ? 17.734 13.333 55.151 1.00 12.64 ? ? ? ? ? ? 679 ASP A CG 1
+ATOM 1339 O OD1 . ASP A 1 189 ? 17.984 14.083 56.108 1.00 13.80 ? ? ? ? ? ? 679 ASP A OD1 1
+ATOM 1340 O OD2 . ASP A 1 189 ? 18.572 13.123 54.261 1.00 13.39 ? ? ? ? ? ? 679 ASP A OD2 1
+ATOM 1341 N N . PRO A 1 190 ? 15.033 14.985 57.576 1.00 16.78 ? ? ? ? ? ? 680 PRO A N 1
+ATOM 1342 C CA . PRO A 1 190 ? 14.720 16.401 57.769 1.00 17.32 ? ? ? ? ? ? 680 PRO A CA 1
+ATOM 1343 C C . PRO A 1 190 ? 15.746 17.403 57.238 1.00 17.31 ? ? ? ? ? ? 680 PRO A C 1
+ATOM 1344 O O . PRO A 1 190 ? 15.457 18.595 57.192 1.00 18.58 ? ? ? ? ? ? 680 PRO A O 1
+ATOM 1345 C CB . PRO A 1 190 ? 14.531 16.502 59.281 1.00 18.70 ? ? ? ? ? ? 680 PRO A CB 1
+ATOM 1346 C CG . PRO A 1 190 ? 15.420 15.418 59.820 1.00 18.51 ? ? ? ? ? ? 680 PRO A CG 1
+ATOM 1347 C CD . PRO A 1 190 ? 15.233 14.286 58.863 1.00 17.07 ? ? ? ? ? ? 680 PRO A CD 1
+ATOM 1348 N N . ASP A 1 191 ? 16.936 16.937 56.866 1.00 16.83 ? ? ? ? ? ? 681 ASP A N 1
+ATOM 1349 C CA . ASP A 1 191 ? 17.977 17.830 56.341 1.00 17.87 ? ? ? ? ? ? 681 ASP A CA 1
+ATOM 1350 C C . ASP A 1 191 ? 18.019 17.920 54.799 1.00 16.11 ? ? ? ? ? ? 681 ASP A C 1
+ATOM 1351 O O . ASP A 1 191 ? 18.700 18.788 54.237 1.00 16.81 ? ? ? ? ? ? 681 ASP A O 1
+ATOM 1352 C CB . ASP A 1 191 ? 19.359 17.445 56.891 1.00 20.24 ? ? ? ? ? ? 681 ASP A CB 1
+ATOM 1353 C CG . ASP A 1 191 ? 19.503 17.731 58.405 1.00 23.69 ? ? ? ? ? ? 681 ASP A CG 1
+ATOM 1354 O OD1 . ASP A 1 191 ? 18.952 18.745 58.903 1.00 24.92 ? ? ? ? ? ? 681 ASP A OD1 1
+ATOM 1355 O OD2 . ASP A 1 191 ? 20.169 16.925 59.093 1.00 25.53 ? ? ? ? ? ? 681 ASP A OD2 1
+ATOM 1356 N N . ALA A 1 192 ? 17.318 17.014 54.132 1.00 13.26 ? ? ? ? ? ? 682 ALA A N 1
+ATOM 1357 C CA . ALA A 1 192 ? 17.284 16.990 52.673 1.00 12.61 ? ? ? ? ? ? 682 ALA A CA 1
+ATOM 1358 C C . ALA A 1 192 ? 16.392 18.116 52.125 1.00 11.78 ? ? ? ? ? ? 682 ALA A C 1
+ATOM 1359 O O . ALA A 1 192 ? 15.383 18.461 52.740 1.00 11.51 ? ? ? ? ? ? 682 ALA A O 1
+ATOM 1360 C CB . ALA A 1 192 ? 16.737 15.648 52.196 1.00 12.16 ? ? ? ? ? ? 682 ALA A CB 1
+ATOM 1361 N N . LEU A 1 193 ? 16.783 18.710 50.994 1.00 10.35 ? ? ? ? ? ? 683 LEU A N 1
+ATOM 1362 C CA . LEU A 1 193 ? 15.939 19.714 50.349 1.00 9.46 ? ? ? ? ? ? 683 LEU A CA 1
+ATOM 1363 C C . LEU A 1 193 ? 15.056 18.890 49.415 1.00 8.12 ? ? ? ? ? ? 683 LEU A C 1
+ATOM 1364 O O . LEU A 1 193 ? 15.547 18.129 48.574 1.00 9.20 ? ? ? ? ? ? 683 LEU A O 1
+ATOM 1365 C CB . LEU A 1 193 ? 16.763 20.702 49.524 1.00 10.77 ? ? ? ? ? ? 683 LEU A CB 1
+ATOM 1366 C CG . LEU A 1 193 ? 17.612 21.595 50.414 1.00 13.17 ? ? ? ? ? ? 683 LEU A CG 1
+ATOM 1367 C CD1 . LEU A 1 193 ? 18.590 22.420 49.536 1.00 13.48 ? ? ? ? ? ? 683 LEU A CD1 1
+ATOM 1368 C CD2 . LEU A 1 193 ? 16.671 22.476 51.285 1.00 14.23 ? ? ? ? ? ? 683 LEU A CD2 1
+ATOM 1369 N N . LEU A 1 194 ? 13.756 19.083 49.534 1.00 6.84 ? ? ? ? ? ? 684 LEU A N 1
+ATOM 1370 C CA . LEU A 1 194 ? 12.775 18.312 48.781 1.00 6.89 ? ? ? ? ? ? 684 LEU A CA 1
+ATOM 1371 C C . LEU A 1 194 ? 12.281 19.076 47.556 1.00 5.32 ? ? ? ? ? ? 684 LEU A C 1
+ATOM 1372 O O . LEU A 1 194 ? 11.767 20.188 47.687 1.00 6.16 ? ? ? ? ? ? 684 LEU A O 1
+ATOM 1373 C CB . LEU A 1 194 ? 11.598 17.963 49.727 1.00 6.91 ? ? ? ? ? ? 684 LEU A CB 1
+ATOM 1374 C CG . LEU A 1 194 ? 12.010 17.349 51.079 1.00 7.28 ? ? ? ? ? ? 684 LEU A CG 1
+ATOM 1375 C CD1 . LEU A 1 194 ? 10.785 17.062 51.844 1.00 8.29 ? ? ? ? ? ? 684 LEU A CD1 1
+ATOM 1376 C CD2 . LEU A 1 194 ? 12.854 16.112 50.873 1.00 7.97 ? ? ? ? ? ? 684 LEU A CD2 1
+ATOM 1377 N N . PHE A 1 195 ? 12.378 18.433 46.400 1.00 5.53 ? ? ? ? ? ? 685 PHE A N 1
+ATOM 1378 C CA . PHE A 1 195 ? 11.986 19.027 45.111 1.00 5.54 ? ? ? ? ? ? 685 PHE A CA 1
+ATOM 1379 C C . PHE A 1 195 ? 10.870 18.310 44.356 1.00 5.42 ? ? ? ? ? ? 685 PHE A C 1
+ATOM 1380 O O . PHE A 1 195 ? 10.746 17.085 44.426 1.00 6.80 ? ? ? ? ? ? 685 PHE A O 1
+ATOM 1381 C CB . PHE A 1 195 ? 13.180 19.007 44.143 1.00 5.66 ? ? ? ? ? ? 685 PHE A CB 1
+ATOM 1382 C CG . PHE A 1 195 ? 14.223 20.039 44.434 1.00 6.45 ? ? ? ? ? ? 685 PHE A CG 1
+ATOM 1383 C CD1 . PHE A 1 195 ? 15.020 19.953 45.571 1.00 7.50 ? ? ? ? ? ? 685 PHE A CD1 1
+ATOM 1384 C CD2 . PHE A 1 195 ? 14.383 21.125 43.586 1.00 7.13 ? ? ? ? ? ? 685 PHE A CD2 1
+ATOM 1385 C CE1 . PHE A 1 195 ? 15.956 20.930 45.876 1.00 8.44 ? ? ? ? ? ? 685 PHE A CE1 1
+ATOM 1386 C CE2 . PHE A 1 195 ? 15.315 22.104 43.887 1.00 9.11 ? ? ? ? ? ? 685 PHE A CE2 1
+ATOM 1387 C CZ . PHE A 1 195 ? 16.104 22.005 45.043 1.00 9.15 ? ? ? ? ? ? 685 PHE A CZ 1
+ATOM 1388 N N . TYR A 1 196 ? 10.107 19.104 43.603 1.00 6.04 ? ? ? ? ? ? 686 TYR A N 1
+ATOM 1389 C CA . TYR A 1 196 ? 9.105 18.643 42.648 1.00 6.20 ? ? ? ? ? ? 686 TYR A CA 1
+ATOM 1390 C C . TYR A 1 196 ? 9.828 18.965 41.315 1.00 6.40 ? ? ? ? ? ? 686 TYR A C 1
+ATOM 1391 O O . TYR A 1 196 ? 10.163 20.125 41.076 1.00 7.61 ? ? ? ? ? ? 686 TYR A O 1
+ATOM 1392 C CB . TYR A 1 196 ? 7.807 19.436 42.729 1.00 6.67 ? ? ? ? ? ? 686 TYR A CB 1
+ATOM 1393 C CG . TYR A 1 196 ? 6.907 19.047 41.599 1.00 8.19 ? ? ? ? ? ? 686 TYR A CG 1
+ATOM 1394 C CD1 . TYR A 1 196 ? 6.213 17.854 41.623 1.00 9.84 ? ? ? ? ? ? 686 TYR A CD1 1
+ATOM 1395 C CD2 . TYR A 1 196 ? 6.846 19.826 40.440 1.00 9.73 ? ? ? ? ? ? 686 TYR A CD2 1
+ATOM 1396 C CE1 . TYR A 1 196 ? 5.481 17.418 40.528 1.00 11.80 ? ? ? ? ? ? 686 TYR A CE1 1
+ATOM 1397 C CE2 . TYR A 1 196 ? 6.116 19.414 39.324 1.00 10.10 ? ? ? ? ? ? 686 TYR A CE2 1
+ATOM 1398 C CZ . TYR A 1 196 ? 5.433 18.199 39.370 1.00 11.40 ? ? ? ? ? ? 686 TYR A CZ 1
+ATOM 1399 O OH . TYR A 1 196 ? 4.745 17.746 38.263 1.00 11.62 ? ? ? ? ? ? 686 TYR A OH 1
+ATOM 1400 N N . ASN A 1 197 ? 9.999 17.970 40.451 1.00 6.16 ? ? ? ? ? ? 687 ASN A N 1
+ATOM 1401 C CA . ASN A 1 197 ? 10.784 18.095 39.209 1.00 6.41 ? ? ? ? ? ? 687 ASN A CA 1
+ATOM 1402 C C . ASN A 1 197 ? 9.897 17.859 37.988 1.00 7.43 ? ? ? ? ? ? 687 ASN A C 1
+ATOM 1403 O O . ASN A 1 197 ? 9.096 16.917 37.981 1.00 8.20 ? ? ? ? ? ? 687 ASN A O 1
+ATOM 1404 C CB . ASN A 1 197 ? 11.911 17.055 39.263 1.00 6.42 ? ? ? ? ? ? 687 ASN A CB 1
+ATOM 1405 C CG . ASN A 1 197 ? 12.938 17.225 38.151 1.00 7.76 ? ? ? ? ? ? 687 ASN A CG 1
+ATOM 1406 O OD1 . ASN A 1 197 ? 13.545 18.277 38.029 1.00 8.53 ? ? ? ? ? ? 687 ASN A OD1 1
+ATOM 1407 N ND2 . ASN A 1 197 ? 13.186 16.165 37.393 1.00 7.31 ? ? ? ? ? ? 687 ASN A ND2 1
+ATOM 1408 N N . ASP A 1 198 ? 10.016 18.704 36.961 1.00 6.72 ? ? ? ? ? ? 688 ASP A N 1
+ATOM 1409 C CA . ASP A 1 198 ? 9.157 18.534 35.774 1.00 6.46 ? ? ? ? ? ? 688 ASP A CA 1
+ATOM 1410 C C . ASP A 1 198 ? 9.748 19.272 34.568 1.00 6.21 ? ? ? ? ? ? 688 ASP A C 1
+ATOM 1411 O O . ASP A 1 198 ? 10.699 20.038 34.716 1.00 6.93 ? ? ? ? ? ? 688 ASP A O 1
+ATOM 1412 C CB . ASP A 1 198 ? 7.750 19.082 36.080 1.00 7.72 ? ? ? ? ? ? 688 ASP A CB 1
+ATOM 1413 C CG . ASP A 1 198 ? 6.619 18.336 35.344 1.00 7.51 ? ? ? ? ? ? 688 ASP A CG 1
+ATOM 1414 O OD1 . ASP A 1 198 ? 6.851 17.709 34.302 1.00 8.37 ? ? ? ? ? ? 688 ASP A OD1 1
+ATOM 1415 O OD2 . ASP A 1 198 ? 5.464 18.379 35.832 1.00 10.71 ? ? ? ? ? ? 688 ASP A OD2 1
+ATOM 1416 N N . TYR A 1 199 ? 9.175 19.030 33.387 1.00 7.40 ? ? ? ? ? ? 689 TYR A N 1
+ATOM 1417 C CA . TYR A 1 199 ? 9.636 19.662 32.136 1.00 8.13 ? ? ? ? ? ? 689 TYR A CA 1
+ATOM 1418 C C . TYR A 1 199 ? 8.551 20.619 31.620 1.00 8.50 ? ? ? ? ? ? 689 TYR A C 1
+ATOM 1419 O O . TYR A 1 199 ? 7.375 20.481 31.967 1.00 8.49 ? ? ? ? ? ? 689 TYR A O 1
+ATOM 1420 C CB . TYR A 1 199 ? 9.998 18.590 31.083 1.00 8.55 ? ? ? ? ? ? 689 TYR A CB 1
+ATOM 1421 C CG . TYR A 1 199 ? 8.839 17.688 30.679 1.00 9.89 ? ? ? ? ? ? 689 TYR A CG 1
+ATOM 1422 C CD1 . TYR A 1 199 ? 7.969 18.061 29.645 1.00 11.80 ? ? ? ? ? ? 689 TYR A CD1 1
+ATOM 1423 C CD2 . TYR A 1 199 ? 8.589 16.478 31.340 1.00 10.35 ? ? ? ? ? ? 689 TYR A CD2 1
+ATOM 1424 C CE1 . TYR A 1 199 ? 6.876 17.253 29.275 1.00 12.45 ? ? ? ? ? ? 689 TYR A CE1 1
+ATOM 1425 C CE2 . TYR A 1 199 ? 7.502 15.672 30.990 1.00 11.81 ? ? ? ? ? ? 689 TYR A CE2 1
+ATOM 1426 C CZ . TYR A 1 199 ? 6.643 16.070 29.944 1.00 13.40 ? ? ? ? ? ? 689 TYR A CZ 1
+ATOM 1427 O OH . TYR A 1 199 ? 5.550 15.310 29.562 1.00 15.47 ? ? ? ? ? ? 689 TYR A OH 1
+ATOM 1428 N N . ASN A 1 200 ? 8.939 21.587 30.778 1.00 9.20 ? ? ? ? ? ? 690 ASN A N 1
+ATOM 1429 C CA . ASN A 1 200 ? 7.984 22.578 30.230 1.00 10.09 ? ? ? ? ? ? 690 ASN A CA 1
+ATOM 1430 C C . ASN A 1 200 ? 7.281 23.415 31.301 1.00 9.15 ? ? ? ? ? ? 690 ASN A C 1
+ATOM 1431 O O . ASN A 1 200 ? 6.119 23.775 31.142 1.00 10.51 ? ? ? ? ? ? 690 ASN A O 1
+ATOM 1432 C CB . ASN A 1 200 ? 6.921 21.943 29.307 1.00 13.59 ? ? ? ? ? ? 690 ASN A CB 1
+ATOM 1433 C CG . ASN A 1 200 ? 7.503 21.349 28.024 1.00 19.88 ? ? ? ? ? ? 690 ASN A CG 1
+ATOM 1434 O OD1 . ASN A 1 200 ? 8.661 21.615 27.662 1.00 24.00 ? ? ? ? ? ? 690 ASN A OD1 1
+ATOM 1435 N ND2 . ASN A 1 200 ? 6.709 20.505 27.331 1.00 21.71 ? ? ? ? ? ? 690 ASN A ND2 1
+ATOM 1436 N N . ILE A 1 201 ? 7.991 23.697 32.399 1.00 7.85 ? ? ? ? ? ? 691 ILE A N 1
+ATOM 1437 C CA . ILE A 1 201 ? 7.501 24.520 33.504 1.00 8.08 ? ? ? ? ? ? 691 ILE A CA 1
+ATOM 1438 C C . ILE A 1 201 ? 8.466 25.706 33.794 1.00 8.74 ? ? ? ? ? ? 691 ILE A C 1
+ATOM 1439 O O . ILE A 1 201 ? 8.333 26.421 34.818 1.00 9.11 ? ? ? ? ? ? 691 ILE A O 1
+ATOM 1440 C CB . ILE A 1 201 ? 7.344 23.698 34.824 1.00 7.49 ? ? ? ? ? ? 691 ILE A CB 1
+ATOM 1441 C CG1 . ILE A 1 201 ? 8.690 23.112 35.262 1.00 7.88 ? ? ? ? ? ? 691 ILE A CG1 1
+ATOM 1442 C CG2 . ILE A 1 201 ? 6.312 22.605 34.640 1.00 8.47 ? ? ? ? ? ? 691 ILE A CG2 1
+ATOM 1443 C CD1 . ILE A 1 201 ? 8.745 22.706 36.749 1.00 9.41 ? ? ? ? ? ? 691 ILE A CD1 1
+ATOM 1444 N N . GLU A 1 202 ? 9.386 25.950 32.848 1.00 8.29 ? ? ? ? ? ? 692 GLU A N 1
+ATOM 1445 C CA . GLU A 1 202 ? 10.415 26.991 33.013 1.00 8.57 ? ? ? ? ? ? 692 GLU A CA 1
+ATOM 1446 C C . GLU A 1 202 ? 9.985 28.416 32.636 1.00 9.36 ? ? ? ? ? ? 692 GLU A C 1
+ATOM 1447 O O . GLU A 1 202 ? 10.504 29.387 33.185 1.00 9.96 ? ? ? ? ? ? 692 GLU A O 1
+ATOM 1448 C CB . GLU A 1 202 ? 11.672 26.632 32.209 1.00 8.11 ? ? ? ? ? ? 692 GLU A CB 1
+ATOM 1449 C CG . GLU A 1 202 ? 12.273 25.273 32.506 1.00 9.28 ? ? ? ? ? ? 692 GLU A CG 1
+ATOM 1450 C CD . GLU A 1 202 ? 11.681 24.106 31.702 1.00 10.09 ? ? ? ? ? ? 692 GLU A CD 1
+ATOM 1451 O OE1 . GLU A 1 202 ? 10.704 24.272 30.918 1.00 9.96 ? ? ? ? ? ? 692 GLU A OE1 1
+ATOM 1452 O OE2 . GLU A 1 202 ? 12.219 22.999 31.846 1.00 10.79 ? ? ? ? ? ? 692 GLU A OE2 1
+ATOM 1453 N N . ASP A 1 203 ? 9.034 28.519 31.699 1.00 10.25 ? ? ? ? ? ? 693 ASP A N 1
+ATOM 1454 C CA . ASP A 1 203 ? 8.544 29.818 31.221 1.00 10.88 ? ? ? ? ? ? 693 ASP A CA 1
+ATOM 1455 C C . ASP A 1 203 ? 7.335 30.306 32.025 1.00 11.44 ? ? ? ? ? ? 693 ASP A C 1
+ATOM 1456 O O . ASP A 1 203 ? 7.231 30.035 33.230 1.00 10.68 ? ? ? ? ? ? 693 ASP A O 1
+ATOM 1457 C CB . ASP A 1 203 ? 8.224 29.741 29.718 1.00 12.00 ? ? ? ? ? ? 693 ASP A CB 1
+ATOM 1458 C CG . ASP A 1 203 ? 7.124 28.713 29.379 1.00 13.76 ? ? ? ? ? ? 693 ASP A CG 1
+ATOM 1459 O OD1 . ASP A 1 203 ? 6.433 28.182 30.277 1.00 13.16 ? ? ? ? ? ? 693 ASP A OD1 1
+ATOM 1460 O OD2 . ASP A 1 203 ? 6.950 28.421 28.175 1.00 15.65 ? ? ? ? ? ? 693 ASP A OD2 1
+ATOM 1461 N N . LEU A 1 204 ? 6.462 31.100 31.392 1.00 11.18 ? ? ? ? ? ? 694 LEU A N 1
+ATOM 1462 C CA . LEU A 1 204 ? 5.266 31.590 32.086 1.00 11.21 ? ? ? ? ? ? 694 LEU A CA 1
+ATOM 1463 C C . LEU A 1 204 ? 4.001 31.085 31.388 1.00 10.70 ? ? ? ? ? ? 694 LEU A C 1
+ATOM 1464 O O . LEU A 1 204 ? 2.966 31.716 31.446 1.00 12.38 ? ? ? ? ? ? 694 LEU A O 1
+ATOM 1465 C CB . LEU A 1 204 ? 5.276 33.117 32.223 1.00 11.87 ? ? ? ? ? ? 694 LEU A CB 1
+ATOM 1466 C CG . LEU A 1 204 ? 6.448 33.728 33.031 1.00 13.21 ? ? ? ? ? ? 694 LEU A CG 1
+ATOM 1467 C CD1 . LEU A 1 204 ? 6.543 35.255 32.797 1.00 13.01 ? ? ? ? ? ? 694 LEU A CD1 1
+ATOM 1468 C CD2 . LEU A 1 204 ? 6.319 33.433 34.547 1.00 13.38 ? ? ? ? ? ? 694 LEU A CD2 1
+ATOM 1469 N N . GLY A 1 205 ? 4.108 29.932 30.742 1.00 11.36 ? ? ? ? ? ? 695 GLY A N 1
+ATOM 1470 C CA . GLY A 1 205 ? 2.988 29.301 30.055 1.00 11.97 ? ? ? ? ? ? 695 GLY A CA 1
+ATOM 1471 C C . GLY A 1 205 ? 2.007 28.563 30.976 1.00 11.95 ? ? ? ? ? ? 695 GLY A C 1
+ATOM 1472 O O . GLY A 1 205 ? 2.250 28.458 32.177 1.00 10.45 ? ? ? ? ? ? 695 GLY A O 1
+ATOM 1473 N N . PRO A 1 206 ? 0.934 27.964 30.427 1.00 12.59 ? ? ? ? ? ? 696 PRO A N 1
+ATOM 1474 C CA . PRO A 1 206 ? -0.049 27.256 31.267 1.00 12.44 ? ? ? ? ? ? 696 PRO A CA 1
+ATOM 1475 C C . PRO A 1 206 ? 0.463 26.147 32.191 1.00 12.07 ? ? ? ? ? ? 696 PRO A C 1
+ATOM 1476 O O . PRO A 1 206 ? 0.079 26.136 33.358 1.00 13.43 ? ? ? ? ? ? 696 PRO A O 1
+ATOM 1477 C CB . PRO A 1 206 ? -1.118 26.773 30.275 1.00 14.05 ? ? ? ? ? ? 696 PRO A CB 1
+ATOM 1478 C CG . PRO A 1 206 ? -0.543 26.986 28.910 1.00 15.40 ? ? ? ? ? ? 696 PRO A CG 1
+ATOM 1479 C CD . PRO A 1 206 ? 0.480 28.082 29.028 1.00 14.21 ? ? ? ? ? ? 696 PRO A CD 1
+ATOM 1480 N N . LYS A 1 207 ? 1.354 25.273 31.728 1.00 10.48 ? ? ? ? ? ? 697 LYS A N 1
+ATOM 1481 C CA . LYS A 1 207 ? 1.850 24.211 32.602 1.00 10.17 ? ? ? ? ? ? 697 LYS A CA 1
+ATOM 1482 C C . LYS A 1 207 ? 2.710 24.814 33.722 1.00 10.26 ? ? ? ? ? ? 697 LYS A C 1
+ATOM 1483 O O . LYS A 1 207 ? 2.646 24.369 34.871 1.00 9.04 ? ? ? ? ? ? 697 LYS A O 1
+ATOM 1484 C CB . LYS A 1 207 ? 2.647 23.189 31.810 1.00 9.61 ? ? ? ? ? ? 697 LYS A CB 1
+ATOM 1485 C CG . LYS A 1 207 ? 2.905 21.906 32.572 1.00 9.66 ? ? ? ? ? ? 697 LYS A CG 1
+ATOM 1486 C CD . LYS A 1 207 ? 3.831 21.005 31.787 1.00 8.50 ? ? ? ? ? ? 697 LYS A CD 1
+ATOM 1487 C CE . LYS A 1 207 ? 4.077 19.644 32.484 1.00 8.97 ? ? ? ? ? ? 697 LYS A CE 1
+ATOM 1488 N NZ . LYS A 1 207 ? 5.049 18.797 31.704 1.00 9.85 ? ? ? ? ? ? 697 LYS A NZ 1
+ATOM 1489 N N . SER A 1 208 ? 3.506 25.839 33.395 1.00 9.18 ? ? ? ? ? ? 698 SER A N 1
+ATOM 1490 C CA . SER A 1 208 ? 4.345 26.512 34.390 1.00 8.89 ? ? ? ? ? ? 698 SER A CA 1
+ATOM 1491 C C . SER A 1 208 ? 3.467 27.158 35.469 1.00 9.65 ? ? ? ? ? ? 698 SER A C 1
+ATOM 1492 O O . SER A 1 208 ? 3.768 27.100 36.676 1.00 9.22 ? ? ? ? ? ? 698 SER A O 1
+ATOM 1493 C CB . SER A 1 208 ? 5.183 27.608 33.731 1.00 9.19 ? ? ? ? ? ? 698 SER A CB 1
+ATOM 1494 O OG . SER A 1 208 ? 5.788 28.397 34.725 1.00 9.94 ? ? ? ? ? ? 698 SER A OG 1
+ATOM 1495 N N . ASN A 1 209 ? 2.399 27.811 35.027 1.00 9.47 ? ? ? ? ? ? 699 ASN A N 1
+ATOM 1496 C CA . ASN A 1 209 ? 1.480 28.458 35.957 1.00 10.75 ? ? ? ? ? ? 699 ASN A CA 1
+ATOM 1497 C C . ASN A 1 209 ? 0.766 27.420 36.847 1.00 10.84 ? ? ? ? ? ? 699 ASN A C 1
+ATOM 1498 O O . ASN A 1 209 ? 0.525 27.677 38.036 1.00 12.28 ? ? ? ? ? ? 699 ASN A O 1
+ATOM 1499 C CB . ASN A 1 209 ? 0.434 29.292 35.208 1.00 11.64 ? ? ? ? ? ? 699 ASN A CB 1
+ATOM 1500 C CG . ASN A 1 209 ? 1.020 30.526 34.549 1.00 13.16 ? ? ? ? ? ? 699 ASN A CG 1
+ATOM 1501 O OD1 . ASN A 1 209 ? 2.094 31.014 34.912 1.00 14.22 ? ? ? ? ? ? 699 ASN A OD1 1
+ATOM 1502 N ND2 . ASN A 1 209 ? 0.305 31.045 33.574 1.00 14.26 ? ? ? ? ? ? 699 ASN A ND2 1
+ATOM 1503 N N . ALA A 1 210 ? 0.418 26.268 36.277 1.00 10.94 ? ? ? ? ? ? 700 ALA A N 1
+ATOM 1504 C CA . ALA A 1 210 ? -0.248 25.201 37.052 1.00 11.45 ? ? ? ? ? ? 700 ALA A CA 1
+ATOM 1505 C C . ALA A 1 210 ? 0.699 24.681 38.147 1.00 10.06 ? ? ? ? ? ? 700 ALA A C 1
+ATOM 1506 O O . ALA A 1 210 ? 0.269 24.489 39.285 1.00 11.58 ? ? ? ? ? ? 700 ALA A O 1
+ATOM 1507 C CB . ALA A 1 210 ? -0.666 24.059 36.141 1.00 11.97 ? ? ? ? ? ? 700 ALA A CB 1
+ATOM 1508 N N . VAL A 1 211 ? 1.978 24.478 37.824 1.00 8.49 ? ? ? ? ? ? 701 VAL A N 1
+ATOM 1509 C CA . VAL A 1 211 ? 2.963 23.995 38.802 1.00 8.74 ? ? ? ? ? ? 701 VAL A CA 1
+ATOM 1510 C C . VAL A 1 211 ? 3.256 25.039 39.882 1.00 8.75 ? ? ? ? ? ? 701 VAL A C 1
+ATOM 1511 O O . VAL A 1 211 ? 3.299 24.709 41.055 1.00 10.08 ? ? ? ? ? ? 701 VAL A O 1
+ATOM 1512 C CB . VAL A 1 211 ? 4.258 23.489 38.132 1.00 7.81 ? ? ? ? ? ? 701 VAL A CB 1
+ATOM 1513 C CG1 . VAL A 1 211 ? 5.328 23.205 39.150 1.00 8.09 ? ? ? ? ? ? 701 VAL A CG1 1
+ATOM 1514 C CG2 . VAL A 1 211 ? 3.981 22.224 37.352 1.00 8.15 ? ? ? ? ? ? 701 VAL A CG2 1
+ATOM 1515 N N . PHE A 1 212 ? 3.402 26.311 39.510 1.00 8.03 ? ? ? ? ? ? 702 PHE A N 1
+ATOM 1516 C CA . PHE A 1 212 ? 3.640 27.371 40.488 1.00 8.25 ? ? ? ? ? ? 702 PHE A CA 1
+ATOM 1517 C C . PHE A 1 212 ? 2.477 27.469 41.499 1.00 8.70 ? ? ? ? ? ? 702 PHE A C 1
+ATOM 1518 O O . PHE A 1 212 ? 2.704 27.552 42.702 1.00 8.94 ? ? ? ? ? ? 702 PHE A O 1
+ATOM 1519 C CB . PHE A 1 212 ? 3.834 28.733 39.770 1.00 8.60 ? ? ? ? ? ? 702 PHE A CB 1
+ATOM 1520 C CG . PHE A 1 212 ? 3.889 29.901 40.702 1.00 9.98 ? ? ? ? ? ? 702 PHE A CG 1
+ATOM 1521 C CD1 . PHE A 1 212 ? 5.054 30.194 41.388 1.00 10.08 ? ? ? ? ? ? 702 PHE A CD1 1
+ATOM 1522 C CD2 . PHE A 1 212 ? 2.748 30.670 40.947 1.00 10.86 ? ? ? ? ? ? 702 PHE A CD2 1
+ATOM 1523 C CE1 . PHE A 1 212 ? 5.077 31.235 42.317 1.00 11.76 ? ? ? ? ? ? 702 PHE A CE1 1
+ATOM 1524 C CE2 . PHE A 1 212 ? 2.766 31.703 41.871 1.00 11.08 ? ? ? ? ? ? 702 PHE A CE2 1
+ATOM 1525 C CZ . PHE A 1 212 ? 3.935 31.983 42.558 1.00 10.61 ? ? ? ? ? ? 702 PHE A CZ 1
+ATOM 1526 N N . ASN A 1 213 ? 1.245 27.475 40.996 1.00 9.83 ? ? ? ? ? ? 703 ASN A N 1
+ATOM 1527 C CA . ASN A 1 213 ? 0.071 27.570 41.868 1.00 12.01 ? ? ? ? ? ? 703 ASN A CA 1
+ATOM 1528 C C . ASN A 1 213 ? -0.052 26.323 42.747 1.00 12.38 ? ? ? ? ? ? 703 ASN A C 1
+ATOM 1529 O O . ASN A 1 213 ? -0.417 26.445 43.915 1.00 13.72 ? ? ? ? ? ? 703 ASN A O 1
+ATOM 1530 C CB . ASN A 1 213 ? -1.204 27.840 41.077 1.00 14.33 ? ? ? ? ? ? 703 ASN A CB 1
+ATOM 1531 C CG . ASN A 1 213 ? -1.307 29.292 40.613 1.00 17.70 ? ? ? ? ? ? 703 ASN A CG 1
+ATOM 1532 O OD1 . ASN A 1 213 ? -1.029 30.237 41.367 1.00 20.02 ? ? ? ? ? ? 703 ASN A OD1 1
+ATOM 1533 N ND2 . ASN A 1 213 ? -1.710 29.476 39.376 1.00 20.46 ? ? ? ? ? ? 703 ASN A ND2 1
+ATOM 1534 N N . MET A 1 214 ? 0.317 25.151 42.212 1.00 11.57 ? ? ? ? ? ? 704 MET A N 1
+ATOM 1535 C CA . MET A 1 214 ? 0.288 23.918 42.988 1.00 11.79 ? ? ? ? ? ? 704 MET A CA 1
+ATOM 1536 C C . MET A 1 214 ? 1.266 24.019 44.172 1.00 10.63 ? ? ? ? ? ? 704 MET A C 1
+ATOM 1537 O O . MET A 1 214 ? 0.914 23.738 45.316 1.00 10.64 ? ? ? ? ? ? 704 MET A O 1
+ATOM 1538 C CB . MET A 1 214 ? 0.661 22.714 42.117 1.00 11.85 ? ? ? ? ? ? 704 MET A CB 1
+ATOM 1539 C CG . MET A 1 214 ? 0.756 21.410 42.921 1.00 14.76 ? ? ? ? ? ? 704 MET A CG 1
+ATOM 1540 S SD . MET A 1 214 ? 1.281 19.965 41.978 1.00 17.19 ? ? ? ? ? ? 704 MET A SD 1
+ATOM 1541 C CE . MET A 1 214 ? 2.907 20.349 41.684 1.00 17.42 ? ? ? ? ? ? 704 MET A CE 1
+ATOM 1542 N N . ILE A 1 215 ? 2.491 24.447 43.894 1.00 9.25 ? ? ? ? ? ? 705 ILE A N 1
+ATOM 1543 C CA . ILE A 1 215 ? 3.506 24.549 44.929 1.00 9.61 ? ? ? ? ? ? 705 ILE A CA 1
+ATOM 1544 C C . ILE A 1 215 ? 3.175 25.629 45.943 1.00 9.98 ? ? ? ? ? ? 705 ILE A C 1
+ATOM 1545 O O . ILE A 1 215 ? 3.331 25.437 47.144 1.00 10.55 ? ? ? ? ? ? 705 ILE A O 1
+ATOM 1546 C CB . ILE A 1 215 ? 4.878 24.757 44.286 1.00 9.69 ? ? ? ? ? ? 705 ILE A CB 1
+ATOM 1547 C CG1 . ILE A 1 215 ? 5.251 23.481 43.525 1.00 9.53 ? ? ? ? ? ? 705 ILE A CG1 1
+ATOM 1548 C CG2 . ILE A 1 215 ? 5.907 25.180 45.330 1.00 9.75 ? ? ? ? ? ? 705 ILE A CG2 1
+ATOM 1549 C CD1 . ILE A 1 215 ? 6.561 23.582 42.784 1.00 9.63 ? ? ? ? ? ? 705 ILE A CD1 1
+ATOM 1550 N N . LYS A 1 216 ? 2.686 26.767 45.462 1.00 10.82 ? ? ? ? ? ? 706 LYS A N 1
+ATOM 1551 C CA . LYS A 1 216 ? 2.286 27.851 46.354 1.00 11.64 ? ? ? ? ? ? 706 LYS A CA 1
+ATOM 1552 C C . LYS A 1 216 ? 1.168 27.356 47.320 1.00 11.68 ? ? ? ? ? ? 706 LYS A C 1
+ATOM 1553 O O . LYS A 1 216 ? 1.230 27.593 48.514 1.00 12.32 ? ? ? ? ? ? 706 LYS A O 1
+ATOM 1554 C CB . LYS A 1 216 ? 1.803 29.026 45.516 1.00 11.74 ? ? ? ? ? ? 706 LYS A CB 1
+ATOM 1555 C CG . LYS A 1 216 ? 1.333 30.215 46.303 1.00 14.97 ? ? ? ? ? ? 706 LYS A CG 1
+ATOM 1556 C CD . LYS A 1 216 ? 0.878 31.242 45.282 1.00 18.19 ? ? ? ? ? ? 706 LYS A CD 1
+ATOM 1557 C CE . LYS A 1 216 ? -0.112 32.194 45.863 1.00 23.05 ? ? ? ? ? ? 706 LYS A CE 1
+ATOM 1558 N NZ . LYS A 1 216 ? 0.573 32.882 46.998 1.00 25.92 ? ? ? ? ? ? 706 LYS A NZ 1
+ATOM 1559 N N . SER A 1 217 ? 0.178 26.648 46.795 1.00 12.04 ? ? ? ? ? ? 707 SER A N 1
+ATOM 1560 C CA . SER A 1 217 ? -0.917 26.122 47.595 1.00 13.99 ? ? ? ? ? ? 707 SER A CA 1
+ATOM 1561 C C . SER A 1 217 ? -0.433 25.071 48.613 1.00 14.05 ? ? ? ? ? ? 707 SER A C 1
+ATOM 1562 O O . SER A 1 217 ? -0.876 25.081 49.771 1.00 14.01 ? ? ? ? ? ? 707 SER A O 1
+ATOM 1563 C CB . SER A 1 217 ? -1.968 25.517 46.679 1.00 16.30 ? ? ? ? ? ? 707 SER A CB 1
+ATOM 1564 O OG . SER A 1 217 ? -3.012 24.929 47.433 1.00 21.95 ? ? ? ? ? ? 707 SER A OG 1
+ATOM 1565 N N . MET A 1 218 ? 0.461 24.171 48.192 1.00 13.32 ? ? ? ? ? ? 708 MET A N 1
+ATOM 1566 C CA . MET A 1 218 ? 1.007 23.146 49.089 1.00 13.90 ? ? ? ? ? ? 708 MET A CA 1
+ATOM 1567 C C . MET A 1 218 ? 1.652 23.828 50.278 1.00 15.20 ? ? ? ? ? ? 708 MET A C 1
+ATOM 1568 O O . MET A 1 218 ? 1.387 23.458 51.427 1.00 15.09 ? ? ? ? ? ? 708 MET A O 1
+ATOM 1569 C CB . MET A 1 218 ? 2.046 22.270 48.385 1.00 15.29 ? ? ? ? ? ? 708 MET A CB 1
+ATOM 1570 C CG . MET A 1 218 ? 1.435 21.182 47.533 1.00 17.98 ? ? ? ? ? ? 708 MET A CG 1
+ATOM 1571 S SD . MET A 1 218 ? 2.658 20.366 46.455 1.00 21.36 ? ? ? ? ? ? 708 MET A SD 1
+ATOM 1572 C CE . MET A 1 218 ? 3.602 19.453 47.631 1.00 20.26 ? ? ? ? ? ? 708 MET A CE 1
+ATOM 1573 N N . LYS A 1 219 ? 2.472 24.849 50.022 1.00 15.53 ? ? ? ? ? ? 709 LYS A N 1
+ATOM 1574 C CA . LYS A 1 219 ? 3.114 25.568 51.122 1.00 17.48 ? ? ? ? ? ? 709 LYS A CA 1
+ATOM 1575 C C . LYS A 1 219 ? 2.109 26.272 52.032 1.00 17.94 ? ? ? ? ? ? 709 LYS A C 1
+ATOM 1576 O O . LYS A 1 219 ? 2.305 26.308 53.256 1.00 19.02 ? ? ? ? ? ? 709 LYS A O 1
+ATOM 1577 C CB . LYS A 1 219 ? 4.148 26.567 50.615 1.00 18.08 ? ? ? ? ? ? 709 LYS A CB 1
+ATOM 1578 C CG . LYS A 1 219 ? 5.314 25.903 49.972 1.00 19.52 ? ? ? ? ? ? 709 LYS A CG 1
+ATOM 1579 C CD . LYS A 1 219 ? 6.443 26.878 49.675 1.00 21.08 ? ? ? ? ? ? 709 LYS A CD 1
+ATOM 1580 C CE . LYS A 1 219 ? 7.261 27.264 50.912 1.00 22.26 ? ? ? ? ? ? 709 LYS A CE 1
+ATOM 1581 N NZ . LYS A 1 219 ? 8.206 26.178 51.397 1.00 22.53 ? ? ? ? ? ? 709 LYS A NZ 1
+ATOM 1582 N N . GLU A 1 220 ? 1.045 26.825 51.464 1.00 17.74 ? ? ? ? ? ? 710 GLU A N 1
+ATOM 1583 C CA . GLU A 1 220 ? 0.037 27.495 52.282 1.00 20.71 ? ? ? ? ? ? 710 GLU A CA 1
+ATOM 1584 C C . GLU A 1 220 ? -0.728 26.526 53.173 1.00 20.14 ? ? ? ? ? ? 710 GLU A C 1
+ATOM 1585 O O . GLU A 1 220 ? -1.434 26.958 54.073 1.00 20.13 ? ? ? ? ? ? 710 GLU A O 1
+ATOM 1586 C CB . GLU A 1 220 ? -0.984 28.224 51.432 1.00 22.49 ? ? ? ? ? ? 710 GLU A CB 1
+ATOM 1587 C CG . GLU A 1 220 ? -0.449 29.431 50.780 1.00 26.82 ? ? ? ? ? ? 710 GLU A CG 1
+ATOM 1588 C CD . GLU A 1 220 ? -1.500 30.127 49.937 1.00 29.66 ? ? ? ? ? ? 710 GLU A CD 1
+ATOM 1589 O OE1 . GLU A 1 220 ? -2.505 29.496 49.509 1.00 30.93 ? ? ? ? ? ? 710 GLU A OE1 1
+ATOM 1590 O OE2 . GLU A 1 220 ? -1.316 31.332 49.715 1.00 32.59 ? ? ? ? ? ? 710 GLU A OE2 1
+ATOM 1591 N N . ARG A 1 221 ? -0.649 25.236 52.861 1.00 19.44 ? ? ? ? ? ? 711 ARG A N 1
+ATOM 1592 C CA . ARG A 1 221 ? -1.330 24.206 53.632 1.00 20.20 ? ? ? ? ? ? 711 ARG A CA 1
+ATOM 1593 C C . ARG A 1 221 ? -0.358 23.443 54.524 1.00 19.06 ? ? ? ? ? ? 711 ARG A C 1
+ATOM 1594 O O . ARG A 1 221 ? -0.668 22.354 54.992 1.00 19.95 ? ? ? ? ? ? 711 ARG A O 1
+ATOM 1595 C CB . ARG A 1 221 ? -2.051 23.252 52.680 1.00 22.22 ? ? ? ? ? ? 711 ARG A CB 1
+ATOM 1596 C CG . ARG A 1 221 ? -2.986 23.996 51.742 1.00 25.57 ? ? ? ? ? ? 711 ARG A CG 1
+ATOM 1597 C CD . ARG A 1 221 ? -3.803 23.092 50.817 1.00 26.84 ? ? ? ? ? ? 711 ARG A CD 1
+ATOM 1598 N NE . ARG A 1 221 ? -3.072 22.501 49.675 1.00 27.16 ? ? ? ? ? ? 711 ARG A NE 1
+ATOM 1599 C CZ . ARG A 1 221 ? -2.594 21.262 49.684 1.00 26.18 ? ? ? ? ? ? 711 ARG A CZ 1
+ATOM 1600 N NH1 . ARG A 1 221 ? -2.713 20.556 50.793 1.00 26.12 ? ? ? ? ? ? 711 ARG A NH1 1
+ATOM 1601 N NH2 . ARG A 1 221 ? -1.963 20.754 48.629 1.00 25.60 ? ? ? ? ? ? 711 ARG A NH2 1
+ATOM 1602 N N . GLY A 1 222 ? 0.844 23.975 54.692 1.00 17.78 ? ? ? ? ? ? 712 GLY A N 1
+ATOM 1603 C CA . GLY A 1 222 ? 1.847 23.325 55.526 1.00 17.90 ? ? ? ? ? ? 712 GLY A CA 1
+ATOM 1604 C C . GLY A 1 222 ? 2.567 22.080 55.000 1.00 17.74 ? ? ? ? ? ? 712 GLY A C 1
+ATOM 1605 O O . GLY A 1 222 ? 3.190 21.354 55.780 1.00 18.91 ? ? ? ? ? ? 712 GLY A O 1
+ATOM 1606 N N . VAL A 1 223 ? 2.474 21.804 53.701 1.00 15.00 ? ? ? ? ? ? 713 VAL A N 1
+ATOM 1607 C CA . VAL A 1 223 ? 3.162 20.654 53.125 1.00 14.56 ? ? ? ? ? ? 713 VAL A CA 1
+ATOM 1608 C C . VAL A 1 223 ? 4.623 21.060 52.938 1.00 14.23 ? ? ? ? ? ? 713 VAL A C 1
+ATOM 1609 O O . VAL A 1 223 ? 4.912 22.100 52.332 1.00 14.84 ? ? ? ? ? ? 713 VAL A O 1
+ATOM 1610 C CB . VAL A 1 223 ? 2.567 20.271 51.748 1.00 13.68 ? ? ? ? ? ? 713 VAL A CB 1
+ATOM 1611 C CG1 . VAL A 1 223 ? 3.349 19.121 51.117 1.00 14.30 ? ? ? ? ? ? 713 VAL A CG1 1
+ATOM 1612 C CG2 . VAL A 1 223 ? 1.119 19.932 51.896 1.00 14.43 ? ? ? ? ? ? 713 VAL A CG2 1
+ATOM 1613 N N . PRO A 1 224 ? 5.568 20.229 53.408 1.00 14.38 ? ? ? ? ? ? 714 PRO A N 1
+ATOM 1614 C CA . PRO A 1 224 ? 7.002 20.553 53.271 1.00 14.68 ? ? ? ? ? ? 714 PRO A CA 1
+ATOM 1615 C C . PRO A 1 224 ? 7.576 20.378 51.865 1.00 15.27 ? ? ? ? ? ? 714 PRO A C 1
+ATOM 1616 O O . PRO A 1 224 ? 7.753 19.259 51.401 1.00 18.74 ? ? ? ? ? ? 714 PRO A O 1
+ATOM 1617 C CB . PRO A 1 224 ? 7.688 19.598 54.269 1.00 15.08 ? ? ? ? ? ? 714 PRO A CB 1
+ATOM 1618 C CG . PRO A 1 224 ? 6.744 18.384 54.259 1.00 14.97 ? ? ? ? ? ? 714 PRO A CG 1
+ATOM 1619 C CD . PRO A 1 224 ? 5.346 18.979 54.174 1.00 14.39 ? ? ? ? ? ? 714 PRO A CD 1
+ATOM 1620 N N . ILE A 1 225 ? 7.764 21.474 51.153 1.00 13.07 ? ? ? ? ? ? 715 ILE A N 1
+ATOM 1621 C CA . ILE A 1 225 ? 8.377 21.410 49.837 1.00 11.14 ? ? ? ? ? ? 715 ILE A CA 1
+ATOM 1622 C C . ILE A 1 225 ? 9.371 22.579 49.796 1.00 10.94 ? ? ? ? ? ? 715 ILE A C 1
+ATOM 1623 O O . ILE A 1 225 ? 9.046 23.710 50.203 1.00 11.71 ? ? ? ? ? ? 715 ILE A O 1
+ATOM 1624 C CB . ILE A 1 225 ? 7.348 21.415 48.674 1.00 11.59 ? ? ? ? ? ? 715 ILE A CB 1
+ATOM 1625 C CG1 . ILE A 1 225 ? 8.103 21.491 47.339 1.00 12.65 ? ? ? ? ? ? 715 ILE A CG1 1
+ATOM 1626 C CG2 . ILE A 1 225 ? 6.326 22.510 48.832 1.00 11.98 ? ? ? ? ? ? 715 ILE A CG2 1
+ATOM 1627 C CD1 . ILE A 1 225 ? 7.287 21.084 46.141 1.00 14.79 ? ? ? ? ? ? 715 ILE A CD1 1
+ATOM 1628 N N . ASP A 1 226 ? 10.607 22.293 49.412 1.00 8.69 ? ? ? ? ? ? 716 ASP A N 1
+ATOM 1629 C CA . ASP A 1 226 ? 11.644 23.324 49.401 1.00 8.51 ? ? ? ? ? ? 716 ASP A CA 1
+ATOM 1630 C C . ASP A 1 226 ? 11.998 23.904 48.026 1.00 8.98 ? ? ? ? ? ? 716 ASP A C 1
+ATOM 1631 O O . ASP A 1 226 ? 12.384 25.075 47.932 1.00 9.98 ? ? ? ? ? ? 716 ASP A O 1
+ATOM 1632 C CB . ASP A 1 226 ? 12.947 22.778 50.008 1.00 8.70 ? ? ? ? ? ? 716 ASP A CB 1
+ATOM 1633 C CG . ASP A 1 226 ? 12.749 22.165 51.399 1.00 9.89 ? ? ? ? ? ? 716 ASP A CG 1
+ATOM 1634 O OD1 . ASP A 1 226 ? 12.381 22.911 52.322 1.00 12.40 ? ? ? ? ? ? 716 ASP A OD1 1
+ATOM 1635 O OD2 . ASP A 1 226 ? 12.971 20.959 51.564 1.00 9.71 ? ? ? ? ? ? 716 ASP A OD2 1
+ATOM 1636 N N . GLY A 1 227 ? 11.941 23.071 46.991 1.00 7.84 ? ? ? ? ? ? 717 GLY A N 1
+ATOM 1637 C CA . GLY A 1 227 ? 12.349 23.542 45.684 1.00 7.82 ? ? ? ? ? ? 717 GLY A CA 1
+ATOM 1638 C C . GLY A 1 227 ? 11.608 22.999 44.490 1.00 8.89 ? ? ? ? ? ? 717 GLY A C 1
+ATOM 1639 O O . GLY A 1 227 ? 10.743 22.106 44.608 1.00 7.90 ? ? ? ? ? ? 717 GLY A O 1
+ATOM 1640 N N . VAL A 1 228 ? 11.851 23.630 43.337 1.00 7.48 ? ? ? ? ? ? 718 VAL A N 1
+ATOM 1641 C CA . VAL A 1 228 ? 11.249 23.190 42.090 1.00 7.38 ? ? ? ? ? ? 718 VAL A CA 1
+ATOM 1642 C C . VAL A 1 228 ? 12.404 22.899 41.125 1.00 6.95 ? ? ? ? ? ? 718 VAL A C 1
+ATOM 1643 O O . VAL A 1 228 ? 13.389 23.641 41.087 1.00 6.87 ? ? ? ? ? ? 718 VAL A O 1
+ATOM 1644 C CB . VAL A 1 228 ? 10.248 24.250 41.482 1.00 8.29 ? ? ? ? ? ? 718 VAL A CB 1
+ATOM 1645 C CG1 . VAL A 1 228 ? 10.941 25.558 41.143 1.00 8.18 ? ? ? ? ? ? 718 VAL A CG1 1
+ATOM 1646 C CG2 . VAL A 1 228 ? 9.553 23.657 40.241 1.00 7.69 ? ? ? ? ? ? 718 VAL A CG2 1
+ATOM 1647 N N . GLY A 1 229 ? 12.335 21.759 40.463 1.00 5.91 ? ? ? ? ? ? 719 GLY A N 1
+ATOM 1648 C CA . GLY A 1 229 ? 13.366 21.375 39.524 1.00 5.41 ? ? ? ? ? ? 719 GLY A CA 1
+ATOM 1649 C C . GLY A 1 229 ? 12.921 21.629 38.101 1.00 5.85 ? ? ? ? ? ? 719 GLY A C 1
+ATOM 1650 O O . GLY A 1 229 ? 11.891 21.110 37.661 1.00 6.86 ? ? ? ? ? ? 719 GLY A O 1
+ATOM 1651 N N . PHE A 1 230 ? 13.635 22.524 37.422 1.00 6.00 ? ? ? ? ? ? 720 PHE A N 1
+ATOM 1652 C CA . PHE A 1 230 ? 13.355 22.836 36.001 1.00 6.51 ? ? ? ? ? ? 720 PHE A CA 1
+ATOM 1653 C C . PHE A 1 230 ? 14.225 21.848 35.184 1.00 5.39 ? ? ? ? ? ? 720 PHE A C 1
+ATOM 1654 O O . PHE A 1 230 ? 15.464 21.978 35.170 1.00 6.21 ? ? ? ? ? ? 720 PHE A O 1
+ATOM 1655 C CB . PHE A 1 230 ? 13.806 24.275 35.649 1.00 7.21 ? ? ? ? ? ? 720 PHE A CB 1
+ATOM 1656 C CG . PHE A 1 230 ? 12.917 25.392 36.162 1.00 7.00 ? ? ? ? ? ? 720 PHE A CG 1
+ATOM 1657 C CD1 . PHE A 1 230 ? 11.830 25.166 37.016 1.00 6.87 ? ? ? ? ? ? 720 PHE A CD1 1
+ATOM 1658 C CD2 . PHE A 1 230 ? 13.211 26.707 35.797 1.00 7.42 ? ? ? ? ? ? 720 PHE A CD2 1
+ATOM 1659 C CE1 . PHE A 1 230 ? 11.071 26.216 37.481 1.00 7.71 ? ? ? ? ? ? 720 PHE A CE1 1
+ATOM 1660 C CE2 . PHE A 1 230 ? 12.454 27.767 36.262 1.00 8.09 ? ? ? ? ? ? 720 PHE A CE2 1
+ATOM 1661 C CZ . PHE A 1 230 ? 11.380 27.532 37.104 1.00 8.65 ? ? ? ? ? ? 720 PHE A CZ 1
+ATOM 1662 N N . GLN A 1 231 ? 13.618 20.896 34.480 1.00 6.48 ? ? ? ? ? ? 721 GLN A N 1
+ATOM 1663 C CA . GLN A 1 231 ? 14.425 19.919 33.719 1.00 6.29 ? ? ? ? ? ? 721 GLN A CA 1
+ATOM 1664 C C . GLN A 1 231 ? 15.273 20.559 32.622 1.00 6.69 ? ? ? ? ? ? 721 GLN A C 1
+ATOM 1665 O O . GLN A 1 231 ? 16.376 20.105 32.364 1.00 7.22 ? ? ? ? ? ? 721 GLN A O 1
+ATOM 1666 C CB . GLN A 1 231 ? 13.573 18.806 33.140 1.00 6.47 ? ? ? ? ? ? 721 GLN A CB 1
+ATOM 1667 C CG . GLN A 1 231 ? 13.098 17.817 34.207 1.00 7.05 ? ? ? ? ? ? 721 GLN A CG 1
+ATOM 1668 C CD . GLN A 1 231 ? 12.237 16.706 33.603 1.00 9.40 ? ? ? ? ? ? 721 GLN A CD 1
+ATOM 1669 O OE1 . GLN A 1 231 ? 12.263 16.467 32.382 1.00 9.61 ? ? ? ? ? ? 721 GLN A OE1 1
+ATOM 1670 N NE2 . GLN A 1 231 ? 11.510 15.984 34.450 1.00 8.66 ? ? ? ? ? ? 721 GLN A NE2 1
+ATOM 1671 N N . CYS A 1 232 ? 14.752 21.614 32.001 1.00 6.63 ? ? ? ? ? ? 722 CYS A N 1
+ATOM 1672 C CA . CYS A 1 232 ? 15.479 22.324 30.946 1.00 7.18 ? ? ? ? ? ? 722 CYS A CA 1
+ATOM 1673 C C . CYS A 1 232 ? 15.826 21.490 29.697 1.00 7.03 ? ? ? ? ? ? 722 CYS A C 1
+ATOM 1674 O O . CYS A 1 232 ? 16.964 21.523 29.229 1.00 7.82 ? ? ? ? ? ? 722 CYS A O 1
+ATOM 1675 C CB . CYS A 1 232 ? 16.737 23.016 31.503 1.00 7.45 ? ? ? ? ? ? 722 CYS A CB 1
+ATOM 1676 S SG . CYS A 1 232 ? 16.407 24.311 32.709 1.00 9.11 ? ? ? ? ? ? 722 CYS A SG 1
+ATOM 1677 N N . HIS A 1 233 ? 14.857 20.733 29.186 1.00 6.91 ? ? ? ? ? ? 723 HIS A N 1
+ATOM 1678 C CA . HIS A 1 233 ? 15.068 19.963 27.945 1.00 7.96 ? ? ? ? ? ? 723 HIS A CA 1
+ATOM 1679 C C . HIS A 1 233 ? 14.607 20.926 26.842 1.00 9.02 ? ? ? ? ? ? 723 HIS A C 1
+ATOM 1680 O O . HIS A 1 233 ? 13.426 20.976 26.492 1.00 10.63 ? ? ? ? ? ? 723 HIS A O 1
+ATOM 1681 C CB . HIS A 1 233 ? 14.247 18.665 27.956 1.00 8.58 ? ? ? ? ? ? 723 HIS A CB 1
+ATOM 1682 C CG . HIS A 1 233 ? 14.747 17.659 28.951 1.00 7.86 ? ? ? ? ? ? 723 HIS A CG 1
+ATOM 1683 N ND1 . HIS A 1 233 ? 16.022 17.139 28.910 1.00 7.88 ? ? ? ? ? ? 723 HIS A ND1 1
+ATOM 1684 C CD2 . HIS A 1 233 ? 14.144 17.085 30.020 1.00 8.64 ? ? ? ? ? ? 723 HIS A CD2 1
+ATOM 1685 C CE1 . HIS A 1 233 ? 16.187 16.286 29.910 1.00 8.80 ? ? ? ? ? ? 723 HIS A CE1 1
+ATOM 1686 N NE2 . HIS A 1 233 ? 15.061 16.238 30.598 1.00 8.02 ? ? ? ? ? ? 723 HIS A NE2 1
+ATOM 1687 N N . PHE A 1 234 ? 15.555 21.739 26.377 1.00 9.16 ? ? ? ? ? ? 724 PHE A N 1
+ATOM 1688 C CA . PHE A 1 234 ? 15.308 22.800 25.394 1.00 9.17 ? ? ? ? ? ? 724 PHE A CA 1
+ATOM 1689 C C . PHE A 1 234 ? 15.734 22.499 23.973 1.00 10.13 ? ? ? ? ? ? 724 PHE A C 1
+ATOM 1690 O O . PHE A 1 234 ? 16.539 21.622 23.731 1.00 9.08 ? ? ? ? ? ? 724 PHE A O 1
+ATOM 1691 C CB . PHE A 1 234 ? 16.047 24.064 25.834 1.00 10.08 ? ? ? ? ? ? 724 PHE A CB 1
+ATOM 1692 C CG . PHE A 1 234 ? 15.597 24.621 27.170 1.00 10.27 ? ? ? ? ? ? 724 PHE A CG 1
+ATOM 1693 C CD1 . PHE A 1 234 ? 14.243 24.799 27.461 1.00 10.77 ? ? ? ? ? ? 724 PHE A CD1 1
+ATOM 1694 C CD2 . PHE A 1 234 ? 16.547 25.040 28.116 1.00 11.48 ? ? ? ? ? ? 724 PHE A CD2 1
+ATOM 1695 C CE1 . PHE A 1 234 ? 13.846 25.395 28.673 1.00 10.84 ? ? ? ? ? ? 724 PHE A CE1 1
+ATOM 1696 C CE2 . PHE A 1 234 ? 16.144 25.640 29.325 1.00 10.76 ? ? ? ? ? ? 724 PHE A CE2 1
+ATOM 1697 C CZ . PHE A 1 234 ? 14.793 25.809 29.587 1.00 10.35 ? ? ? ? ? ? 724 PHE A CZ 1
+ATOM 1698 N N . ILE A 1 235 ? 15.185 23.262 23.026 1.00 10.65 ? ? ? ? ? ? 725 ILE A N 1
+ATOM 1699 C CA . ILE A 1 235 ? 15.577 23.106 21.617 1.00 11.34 ? ? ? ? ? ? 725 ILE A CA 1
+ATOM 1700 C C . ILE A 1 235 ? 16.550 24.246 21.268 1.00 9.92 ? ? ? ? ? ? 725 ILE A C 1
+ATOM 1701 O O . ILE A 1 235 ? 16.368 25.377 21.709 1.00 11.49 ? ? ? ? ? ? 725 ILE A O 1
+ATOM 1702 C CB . ILE A 1 235 ? 14.363 23.170 20.682 1.00 12.48 ? ? ? ? ? ? 725 ILE A CB 1
+ATOM 1703 C CG1 . ILE A 1 235 ? 13.355 22.092 21.084 1.00 12.82 ? ? ? ? ? ? 725 ILE A CG1 1
+ATOM 1704 C CG2 . ILE A 1 235 ? 14.812 22.917 19.222 1.00 14.06 ? ? ? ? ? ? 725 ILE A CG2 1
+ATOM 1705 C CD1 . ILE A 1 235 ? 12.065 22.164 20.322 1.00 15.03 ? ? ? ? ? ? 725 ILE A CD1 1
+ATOM 1706 N N . ASN A 1 236 ? 17.570 23.943 20.484 1.00 10.22 ? ? ? ? ? ? 726 ASN A N 1
+ATOM 1707 C CA . ASN A 1 236 ? 18.577 24.928 20.077 1.00 10.99 ? ? ? ? ? ? 726 ASN A CA 1
+ATOM 1708 C C . ASN A 1 236 ? 17.933 26.161 19.430 1.00 12.01 ? ? ? ? ? ? 726 ASN A C 1
+ATOM 1709 O O . ASN A 1 236 ? 16.992 26.033 18.636 1.00 11.87 ? ? ? ? ? ? 726 ASN A O 1
+ATOM 1710 C CB . ASN A 1 236 ? 19.500 24.282 19.050 1.00 12.13 ? ? ? ? ? ? 726 ASN A CB 1
+ATOM 1711 C CG . ASN A 1 236 ? 20.780 25.037 18.862 1.00 13.79 ? ? ? ? ? ? 726 ASN A CG 1
+ATOM 1712 O OD1 . ASN A 1 236 ? 21.349 25.545 19.824 1.00 15.17 ? ? ? ? ? ? 726 ASN A OD1 1
+ATOM 1713 N ND2 . ASN A 1 236 ? 21.281 25.074 17.634 1.00 14.93 ? ? ? ? ? ? 726 ASN A ND2 1
+ATOM 1714 N N . GLY A 1 237 ? 18.437 27.338 19.792 1.00 12.05 ? ? ? ? ? ? 727 GLY A N 1
+ATOM 1715 C CA . GLY A 1 237 ? 17.932 28.580 19.227 1.00 13.30 ? ? ? ? ? ? 727 GLY A CA 1
+ATOM 1716 C C . GLY A 1 237 ? 16.927 29.341 20.074 1.00 14.89 ? ? ? ? ? ? 727 GLY A C 1
+ATOM 1717 O O . GLY A 1 237 ? 16.031 30.033 19.555 1.00 14.54 ? ? ? ? ? ? 727 GLY A O 1
+ATOM 1718 N N . MET A 1 238 ? 17.073 29.223 21.390 1.00 14.42 ? ? ? ? ? ? 728 MET A N 1
+ATOM 1719 C CA . MET A 1 238 ? 16.201 29.913 22.331 1.00 15.58 ? ? ? ? ? ? 728 MET A CA 1
+ATOM 1720 C C . MET A 1 238 ? 16.256 31.426 22.104 1.00 15.24 ? ? ? ? ? ? 728 MET A C 1
+ATOM 1721 O O . MET A 1 238 ? 17.348 32.004 21.985 1.00 14.97 ? ? ? ? ? ? 728 MET A O 1
+ATOM 1722 C CB . MET A 1 238 ? 16.664 29.604 23.753 1.00 16.45 ? ? ? ? ? ? 728 MET A CB 1
+ATOM 1723 C CG . MET A 1 238 ? 16.601 28.107 24.080 1.00 18.91 ? ? ? ? ? ? 728 MET A CG 1
+ATOM 1724 S SD . MET A 1 238 ? 17.374 27.774 25.678 1.00 22.09 ? ? ? ? ? ? 728 MET A SD 1
+ATOM 1725 C CE . MET A 1 238 ? 16.084 28.274 26.690 1.00 20.27 ? ? ? ? ? ? 728 MET A CE 1
+ATOM 1726 N N . SER A 1 239 ? 15.088 32.061 22.096 1.00 14.74 ? ? ? ? ? ? 729 SER A N 1
+ATOM 1727 C CA . SER A 1 239 ? 14.999 33.503 21.905 1.00 14.15 ? ? ? ? ? ? 729 SER A CA 1
+ATOM 1728 C C . SER A 1 239 ? 15.254 34.291 23.205 1.00 15.12 ? ? ? ? ? ? 729 SER A C 1
+ATOM 1729 O O . SER A 1 239 ? 15.138 33.747 24.321 1.00 14.00 ? ? ? ? ? ? 729 SER A O 1
+ATOM 1730 C CB . SER A 1 239 ? 13.620 33.855 21.353 1.00 15.54 ? ? ? ? ? ? 729 SER A CB 1
+ATOM 1731 O OG . SER A 1 239 ? 12.604 33.702 22.338 1.00 16.55 ? ? ? ? ? ? 729 SER A OG 1
+ATOM 1732 N N . PRO A 1 240 ? 15.612 35.588 23.090 1.00 14.41 ? ? ? ? ? ? 730 PRO A N 1
+ATOM 1733 C CA . PRO A 1 240 ? 15.857 36.381 24.304 1.00 14.54 ? ? ? ? ? ? 730 PRO A CA 1
+ATOM 1734 C C . PRO A 1 240 ? 14.575 36.524 25.128 1.00 13.63 ? ? ? ? ? ? 730 PRO A C 1
+ATOM 1735 O O . PRO A 1 240 ? 14.626 36.617 26.343 1.00 14.91 ? ? ? ? ? ? 730 PRO A O 1
+ATOM 1736 C CB . PRO A 1 240 ? 16.294 37.744 23.753 1.00 14.78 ? ? ? ? ? ? 730 PRO A CB 1
+ATOM 1737 C CG . PRO A 1 240 ? 16.946 37.388 22.469 1.00 15.50 ? ? ? ? ? ? 730 PRO A CG 1
+ATOM 1738 C CD . PRO A 1 240 ? 16.029 36.333 21.885 1.00 15.01 ? ? ? ? ? ? 730 PRO A CD 1
+ATOM 1739 N N . GLU A 1 241 ? 13.424 36.550 24.460 1.00 12.95 ? ? ? ? ? ? 731 GLU A N 1
+ATOM 1740 C CA . GLU A 1 241 ? 12.166 36.704 25.163 1.00 13.41 ? ? ? ? ? ? 731 GLU A CA 1
+ATOM 1741 C C . GLU A 1 241 ? 11.867 35.449 25.969 1.00 13.56 ? ? ? ? ? ? 731 GLU A C 1
+ATOM 1742 O O . GLU A 1 241 ? 11.321 35.555 27.072 1.00 12.86 ? ? ? ? ? ? 731 GLU A O 1
+ATOM 1743 C CB . GLU A 1 241 ? 11.014 36.993 24.197 1.00 14.37 ? ? ? ? ? ? 731 GLU A CB 1
+ATOM 1744 C CG . GLU A 1 241 ? 11.112 38.340 23.514 1.00 16.83 ? ? ? ? ? ? 731 GLU A CG 1
+ATOM 1745 C CD . GLU A 1 241 ? 12.227 38.391 22.486 1.00 17.61 ? ? ? ? ? ? 731 GLU A CD 1
+ATOM 1746 O OE1 . GLU A 1 241 ? 12.365 37.429 21.693 1.00 18.03 ? ? ? ? ? ? 731 GLU A OE1 1
+ATOM 1747 O OE2 . GLU A 1 241 ? 12.977 39.391 22.480 1.00 20.27 ? ? ? ? ? ? 731 GLU A OE2 1
+ATOM 1748 N N . TYR A 1 242 ? 12.209 34.283 25.411 1.00 12.17 ? ? ? ? ? ? 732 TYR A N 1
+ATOM 1749 C CA . TYR A 1 242 ? 11.981 33.014 26.103 1.00 12.92 ? ? ? ? ? ? 732 TYR A CA 1
+ATOM 1750 C C . TYR A 1 242 ? 12.865 33.004 27.343 1.00 12.17 ? ? ? ? ? ? 732 TYR A C 1
+ATOM 1751 O O . TYR A 1 242 ? 12.381 32.765 28.462 1.00 11.37 ? ? ? ? ? ? 732 TYR A O 1
+ATOM 1752 C CB . TYR A 1 242 ? 12.324 31.833 25.209 1.00 14.49 ? ? ? ? ? ? 732 TYR A CB 1
+ATOM 1753 C CG . TYR A 1 242 ? 12.007 30.506 25.844 1.00 17.56 ? ? ? ? ? ? 732 TYR A CG 1
+ATOM 1754 C CD1 . TYR A 1 242 ? 10.685 30.124 26.074 1.00 18.67 ? ? ? ? ? ? 732 TYR A CD1 1
+ATOM 1755 C CD2 . TYR A 1 242 ? 13.014 29.615 26.170 1.00 19.20 ? ? ? ? ? ? 732 TYR A CD2 1
+ATOM 1756 C CE1 . TYR A 1 242 ? 10.364 28.878 26.601 1.00 20.39 ? ? ? ? ? ? 732 TYR A CE1 1
+ATOM 1757 C CE2 . TYR A 1 242 ? 12.706 28.351 26.700 1.00 20.78 ? ? ? ? ? ? 732 TYR A CE2 1
+ATOM 1758 C CZ . TYR A 1 242 ? 11.378 27.992 26.903 1.00 21.47 ? ? ? ? ? ? 732 TYR A CZ 1
+ATOM 1759 O OH . TYR A 1 242 ? 11.058 26.709 27.335 1.00 23.93 ? ? ? ? ? ? 732 TYR A OH 1
+ATOM 1760 N N . LEU A 1 243 ? 14.144 33.316 27.150 1.00 10.29 ? ? ? ? ? ? 733 LEU A N 1
+ATOM 1761 C CA . LEU A 1 243 ? 15.088 33.359 28.252 1.00 10.72 ? ? ? ? ? ? 733 LEU A CA 1
+ATOM 1762 C C . LEU A 1 243 ? 14.633 34.371 29.299 1.00 11.53 ? ? ? ? ? ? 733 LEU A C 1
+ATOM 1763 O O . LEU A 1 243 ? 14.713 34.125 30.501 1.00 10.74 ? ? ? ? ? ? 733 LEU A O 1
+ATOM 1764 C CB . LEU A 1 243 ? 16.506 33.642 27.732 1.00 11.69 ? ? ? ? ? ? 733 LEU A CB 1
+ATOM 1765 C CG . LEU A 1 243 ? 17.125 32.469 26.932 1.00 14.05 ? ? ? ? ? ? 733 LEU A CG 1
+ATOM 1766 C CD1 . LEU A 1 243 ? 18.189 32.972 25.957 1.00 16.04 ? ? ? ? ? ? 733 LEU A CD1 1
+ATOM 1767 C CD2 . LEU A 1 243 ? 17.747 31.412 27.856 1.00 14.26 ? ? ? ? ? ? 733 LEU A CD2 1
+ATOM 1768 N N . ALA A 1 244 ? 14.098 35.502 28.865 1.00 11.51 ? ? ? ? ? ? 734 ALA A N 1
+ATOM 1769 C CA . ALA A 1 244 ? 13.620 36.497 29.813 1.00 11.63 ? ? ? ? ? ? 734 ALA A CA 1
+ATOM 1770 C C . ALA A 1 244 ? 12.457 35.945 30.658 1.00 11.52 ? ? ? ? ? ? 734 ALA A C 1
+ATOM 1771 O O . ALA A 1 244 ? 12.327 36.296 31.846 1.00 12.87 ? ? ? ? ? ? 734 ALA A O 1
+ATOM 1772 C CB . ALA A 1 244 ? 13.171 37.789 29.070 1.00 11.61 ? ? ? ? ? ? 734 ALA A CB 1
+ATOM 1773 N N . SER A 1 245 ? 11.596 35.111 30.064 1.00 11.63 ? ? ? ? ? ? 735 SER A N 1
+ATOM 1774 C CA . SER A 1 245 ? 10.451 34.557 30.813 1.00 10.39 ? ? ? ? ? ? 735 SER A CA 1
+ATOM 1775 C C . SER A 1 245 ? 10.890 33.548 31.896 1.00 9.87 ? ? ? ? ? ? 735 SER A C 1
+ATOM 1776 O O . SER A 1 245 ? 10.290 33.487 32.963 1.00 10.17 ? ? ? ? ? ? 735 SER A O 1
+ATOM 1777 C CB . SER A 1 245 ? 9.376 33.993 29.877 1.00 11.08 ? ? ? ? ? ? 735 SER A CB 1
+ATOM 1778 O OG . SER A 1 245 ? 9.739 32.755 29.333 1.00 14.25 ? ? ? ? ? ? 735 SER A OG 1
+ATOM 1779 N N . ILE A 1 246 ? 11.975 32.833 31.641 1.00 9.66 ? ? ? ? ? ? 736 ILE A N 1
+ATOM 1780 C CA . ILE A 1 246 ? 12.531 31.879 32.616 1.00 9.50 ? ? ? ? ? ? 736 ILE A CA 1
+ATOM 1781 C C . ILE A 1 246 ? 13.033 32.674 33.826 1.00 9.64 ? ? ? ? ? ? 736 ILE A C 1
+ATOM 1782 O O . ILE A 1 246 ? 12.774 32.307 34.967 1.00 9.94 ? ? ? ? ? ? 736 ILE A O 1
+ATOM 1783 C CB . ILE A 1 246 ? 13.686 31.056 32.015 1.00 9.03 ? ? ? ? ? ? 736 ILE A CB 1
+ATOM 1784 C CG1 . ILE A 1 246 ? 13.177 30.219 30.832 1.00 10.43 ? ? ? ? ? ? 736 ILE A CG1 1
+ATOM 1785 C CG2 . ILE A 1 246 ? 14.319 30.135 33.090 1.00 10.72 ? ? ? ? ? ? 736 ILE A CG2 1
+ATOM 1786 C CD1 . ILE A 1 246 ? 14.275 29.454 30.087 1.00 10.09 ? ? ? ? ? ? 736 ILE A CD1 1
+ATOM 1787 N N . ASP A 1 247 ? 13.739 33.780 33.583 1.00 9.65 ? ? ? ? ? ? 737 ASP A N 1
+ATOM 1788 C CA . ASP A 1 247 ? 14.243 34.625 34.685 1.00 10.27 ? ? ? ? ? ? 737 ASP A CA 1
+ATOM 1789 C C . ASP A 1 247 ? 13.081 35.164 35.560 1.00 10.28 ? ? ? ? ? ? 737 ASP A C 1
+ATOM 1790 O O . ASP A 1 247 ? 13.150 35.132 36.789 1.00 10.54 ? ? ? ? ? ? 737 ASP A O 1
+ATOM 1791 C CB . ASP A 1 247 ? 15.073 35.798 34.128 1.00 10.75 ? ? ? ? ? ? 737 ASP A CB 1
+ATOM 1792 C CG . ASP A 1 247 ? 15.670 36.652 35.224 1.00 10.69 ? ? ? ? ? ? 737 ASP A CG 1
+ATOM 1793 O OD1 . ASP A 1 247 ? 16.738 36.291 35.738 1.00 12.30 ? ? ? ? ? ? 737 ASP A OD1 1
+ATOM 1794 O OD2 . ASP A 1 247 ? 15.059 37.670 35.598 1.00 13.00 ? ? ? ? ? ? 737 ASP A OD2 1
+ATOM 1795 N N . GLN A 1 248 ? 12.012 35.650 34.934 1.00 9.97 ? ? ? ? ? ? 738 GLN A N 1
+ATOM 1796 C CA . GLN A 1 248 ? 10.874 36.163 35.677 1.00 11.34 ? ? ? ? ? ? 738 GLN A CA 1
+ATOM 1797 C C . GLN A 1 248 ? 10.212 35.022 36.483 1.00 10.08 ? ? ? ? ? ? 738 GLN A C 1
+ATOM 1798 O O . GLN A 1 248 ? 9.726 35.237 37.586 1.00 10.31 ? ? ? ? ? ? 738 GLN A O 1
+ATOM 1799 C CB . GLN A 1 248 ? 9.842 36.758 34.718 1.00 14.24 ? ? ? ? ? ? 738 GLN A CB 1
+ATOM 1800 C CG . GLN A 1 248 ? 10.231 38.127 34.181 1.00 20.66 ? ? ? ? ? ? 738 GLN A CG 1
+ATOM 1801 C CD . GLN A 1 248 ? 9.590 38.453 32.821 1.00 24.70 ? ? ? ? ? ? 738 GLN A CD 1
+ATOM 1802 O OE1 . GLN A 1 248 ? 8.395 38.203 32.588 1.00 26.26 ? ? ? ? ? ? 738 GLN A OE1 1
+ATOM 1803 N NE2 . GLN A 1 248 ? 10.398 39.024 31.909 1.00 27.40 ? ? ? ? ? ? 738 GLN A NE2 1
+ATOM 1804 N N . ASN A 1 249 ? 10.145 33.836 35.898 1.00 9.32 ? ? ? ? ? ? 739 ASN A N 1
+ATOM 1805 C CA . ASN A 1 249 ? 9.543 32.695 36.597 1.00 8.40 ? ? ? ? ? ? 739 ASN A CA 1
+ATOM 1806 C C . ASN A 1 249 ? 10.381 32.378 37.860 1.00 8.50 ? ? ? ? ? ? 739 ASN A C 1
+ATOM 1807 O O . ASN A 1 249 ? 9.824 32.153 38.945 1.00 9.11 ? ? ? ? ? ? 739 ASN A O 1
+ATOM 1808 C CB . ASN A 1 249 ? 9.478 31.493 35.653 1.00 8.44 ? ? ? ? ? ? 739 ASN A CB 1
+ATOM 1809 C CG . ASN A 1 249 ? 8.581 30.398 36.175 1.00 7.63 ? ? ? ? ? ? 739 ASN A CG 1
+ATOM 1810 O OD1 . ASN A 1 249 ? 7.634 30.661 36.884 1.00 9.79 ? ? ? ? ? ? 739 ASN A OD1 1
+ATOM 1811 N ND2 . ASN A 1 249 ? 8.875 29.165 35.808 1.00 9.40 ? ? ? ? ? ? 739 ASN A ND2 1
+ATOM 1812 N N . ILE A 1 250 ? 11.710 32.437 37.757 1.00 7.69 ? ? ? ? ? ? 740 ILE A N 1
+ATOM 1813 C CA . ILE A 1 250 ? 12.579 32.167 38.913 1.00 8.67 ? ? ? ? ? ? 740 ILE A CA 1
+ATOM 1814 C C . ILE A 1 250 ? 12.304 33.186 40.031 1.00 9.03 ? ? ? ? ? ? 740 ILE A C 1
+ATOM 1815 O O . ILE A 1 250 ? 12.253 32.840 41.224 1.00 8.32 ? ? ? ? ? ? 740 ILE A O 1
+ATOM 1816 C CB . ILE A 1 250 ? 14.093 32.142 38.509 1.00 8.06 ? ? ? ? ? ? 740 ILE A CB 1
+ATOM 1817 C CG1 . ILE A 1 250 ? 14.366 30.959 37.577 1.00 8.35 ? ? ? ? ? ? 740 ILE A CG1 1
+ATOM 1818 C CG2 . ILE A 1 250 ? 15.008 32.055 39.733 1.00 9.48 ? ? ? ? ? ? 740 ILE A CG2 1
+ATOM 1819 C CD1 . ILE A 1 250 ? 15.774 30.946 37.015 1.00 9.87 ? ? ? ? ? ? 740 ILE A CD1 1
+ATOM 1820 N N . LYS A 1 251 ? 12.091 34.444 39.646 1.00 8.37 ? ? ? ? ? ? 741 LYS A N 1
+ATOM 1821 C CA . LYS A 1 251 ? 11.809 35.507 40.604 1.00 9.50 ? ? ? ? ? ? 741 LYS A CA 1
+ATOM 1822 C C . LYS A 1 251 ? 10.488 35.297 41.336 1.00 8.92 ? ? ? ? ? ? 741 LYS A C 1
+ATOM 1823 O O . LYS A 1 251 ? 10.428 35.558 42.540 1.00 9.78 ? ? ? ? ? ? 741 LYS A O 1
+ATOM 1824 C CB . LYS A 1 251 ? 11.887 36.907 39.926 1.00 9.95 ? ? ? ? ? ? 741 LYS A CB 1
+ATOM 1825 C CG . LYS A 1 251 ? 13.357 37.322 39.686 1.00 11.53 ? ? ? ? ? ? 741 LYS A CG 1
+ATOM 1826 C CD . LYS A 1 251 ? 13.500 38.544 38.802 1.00 12.32 ? ? ? ? ? ? 741 LYS A CD 1
+ATOM 1827 C CE . LYS A 1 251 ? 14.943 39.055 38.804 1.00 11.94 ? ? ? ? ? ? 741 LYS A CE 1
+ATOM 1828 N NZ . LYS A 1 251 ? 15.930 38.097 38.264 1.00 12.61 ? ? ? ? ? ? 741 LYS A NZ 1
+ATOM 1829 N N . ARG A 1 252 ? 9.443 34.812 40.656 1.00 9.44 ? ? ? ? ? ? 742 ARG A N 1
+ATOM 1830 C CA . ARG A 1 252 ? 8.182 34.571 41.363 1.00 10.41 ? ? ? ? ? ? 742 ARG A CA 1
+ATOM 1831 C C . ARG A 1 252 ? 8.317 33.402 42.359 1.00 9.74 ? ? ? ? ? ? 742 ARG A C 1
+ATOM 1832 O O . ARG A 1 252 ? 7.667 33.415 43.413 1.00 10.33 ? ? ? ? ? ? 742 ARG A O 1
+ATOM 1833 C CB . ARG A 1 252 ? 6.963 34.450 40.446 1.00 10.94 ? ? ? ? ? ? 742 ARG A CB 1
+ATOM 1834 C CG . ARG A 1 252 ? 6.922 33.285 39.555 1.00 11.90 ? ? ? ? ? ? 742 ARG A CG 1
+ATOM 1835 C CD . ARG A 1 252 ? 5.526 33.180 38.932 1.00 12.49 ? ? ? ? ? ? 742 ARG A CD 1
+ATOM 1836 N NE . ARG A 1 252 ? 5.488 32.060 37.992 1.00 12.11 ? ? ? ? ? ? 742 ARG A NE 1
+ATOM 1837 C CZ . ARG A 1 252 ? 4.447 31.706 37.250 1.00 10.78 ? ? ? ? ? ? 742 ARG A CZ 1
+ATOM 1838 N NH1 . ARG A 1 252 ? 3.314 32.394 37.295 1.00 12.10 ? ? ? ? ? ? 742 ARG A NH1 1
+ATOM 1839 N NH2 . ARG A 1 252 ? 4.559 30.663 36.453 1.00 10.93 ? ? ? ? ? ? 742 ARG A NH2 1
+ATOM 1840 N N . TYR A 1 253 ? 9.172 32.423 42.063 1.00 8.16 ? ? ? ? ? ? 743 TYR A N 1
+ATOM 1841 C CA . TYR A 1 253 ? 9.404 31.335 43.033 1.00 8.67 ? ? ? ? ? ? 743 TYR A CA 1
+ATOM 1842 C C . TYR A 1 253 ? 10.127 31.902 44.265 1.00 8.17 ? ? ? ? ? ? 743 TYR A C 1
+ATOM 1843 O O . TYR A 1 253 ? 9.817 31.545 45.394 1.00 8.53 ? ? ? ? ? ? 743 TYR A O 1
+ATOM 1844 C CB . TYR A 1 253 ? 10.184 30.159 42.409 1.00 7.56 ? ? ? ? ? ? 743 TYR A CB 1
+ATOM 1845 C CG . TYR A 1 253 ? 9.268 29.164 41.708 1.00 7.73 ? ? ? ? ? ? 743 TYR A CG 1
+ATOM 1846 C CD1 . TYR A 1 253 ? 8.431 28.306 42.452 1.00 8.22 ? ? ? ? ? ? 743 TYR A CD1 1
+ATOM 1847 C CD2 . TYR A 1 253 ? 9.228 29.065 40.309 1.00 7.98 ? ? ? ? ? ? 743 TYR A CD2 1
+ATOM 1848 C CE1 . TYR A 1 253 ? 7.584 27.384 41.819 1.00 7.96 ? ? ? ? ? ? 743 TYR A CE1 1
+ATOM 1849 C CE2 . TYR A 1 253 ? 8.388 28.143 39.657 1.00 7.98 ? ? ? ? ? ? 743 TYR A CE2 1
+ATOM 1850 C CZ . TYR A 1 253 ? 7.566 27.307 40.418 1.00 8.03 ? ? ? ? ? ? 743 TYR A CZ 1
+ATOM 1851 O OH . TYR A 1 253 ? 6.721 26.429 39.798 1.00 8.50 ? ? ? ? ? ? 743 TYR A OH 1
+ATOM 1852 N N . ALA A 1 254 ? 11.065 32.830 44.062 1.00 8.89 ? ? ? ? ? ? 744 ALA A N 1
+ATOM 1853 C CA . ALA A 1 254 ? 11.780 33.454 45.197 1.00 9.08 ? ? ? ? ? ? 744 ALA A CA 1
+ATOM 1854 C C . ALA A 1 254 ? 10.778 34.189 46.108 1.00 9.30 ? ? ? ? ? ? 744 ALA A C 1
+ATOM 1855 O O . ALA A 1 254 ? 10.910 34.163 47.335 1.00 10.34 ? ? ? ? ? ? 744 ALA A O 1
+ATOM 1856 C CB . ALA A 1 254 ? 12.856 34.443 44.692 1.00 9.52 ? ? ? ? ? ? 744 ALA A CB 1
+ATOM 1857 N N . GLU A 1 255 ? 9.750 34.795 45.512 1.00 9.74 ? ? ? ? ? ? 745 GLU A N 1
+ATOM 1858 C CA . GLU A 1 255 ? 8.760 35.514 46.313 1.00 12.57 ? ? ? ? ? ? 745 GLU A CA 1
+ATOM 1859 C C . GLU A 1 255 ? 7.935 34.624 47.237 1.00 12.31 ? ? ? ? ? ? 745 GLU A C 1
+ATOM 1860 O O . GLU A 1 255 ? 7.335 35.126 48.185 1.00 13.74 ? ? ? ? ? ? 745 GLU A O 1
+ATOM 1861 C CB . GLU A 1 255 ? 7.857 36.367 45.452 1.00 15.49 ? ? ? ? ? ? 745 GLU A CB 1
+ATOM 1862 C CG . GLU A 1 255 ? 8.595 37.519 44.878 1.00 19.73 ? ? ? ? ? ? 745 GLU A CG 1
+ATOM 1863 C CD . GLU A 1 255 ? 7.738 38.385 43.995 1.00 24.14 ? ? ? ? ? ? 745 GLU A CD 1
+ATOM 1864 O OE1 . GLU A 1 255 ? 6.619 37.956 43.603 1.00 26.03 ? ? ? ? ? ? 745 GLU A OE1 1
+ATOM 1865 O OE2 . GLU A 1 255 ? 8.211 39.497 43.668 1.00 27.16 ? ? ? ? ? ? 745 GLU A OE2 1
+ATOM 1866 N N . ILE A 1 256 ? 7.852 33.331 46.913 1.00 11.37 ? ? ? ? ? ? 746 ILE A N 1
+ATOM 1867 C CA . ILE A 1 256 ? 7.152 32.380 47.764 1.00 12.11 ? ? ? ? ? ? 746 ILE A CA 1
+ATOM 1868 C C . ILE A 1 256 ? 8.157 31.507 48.551 1.00 11.57 ? ? ? ? ? ? 746 ILE A C 1
+ATOM 1869 O O . ILE A 1 256 ? 7.788 30.484 49.128 1.00 12.25 ? ? ? ? ? ? 746 ILE A O 1
+ATOM 1870 C CB . ILE A 1 256 ? 6.091 31.519 47.000 1.00 11.99 ? ? ? ? ? ? 746 ILE A CB 1
+ATOM 1871 C CG1 . ILE A 1 256 ? 6.704 30.659 45.881 1.00 11.66 ? ? ? ? ? ? 746 ILE A CG1 1
+ATOM 1872 C CG2 . ILE A 1 256 ? 5.039 32.431 46.417 1.00 12.97 ? ? ? ? ? ? 746 ILE A CG2 1
+ATOM 1873 C CD1 . ILE A 1 256 ? 5.783 29.522 45.413 1.00 12.87 ? ? ? ? ? ? 746 ILE A CD1 1
+ATOM 1874 N N . GLY A 1 257 ? 9.422 31.918 48.540 1.00 10.61 ? ? ? ? ? ? 747 GLY A N 1
+ATOM 1875 C CA . GLY A 1 257 ? 10.471 31.223 49.273 1.00 10.70 ? ? ? ? ? ? 747 GLY A CA 1
+ATOM 1876 C C . GLY A 1 257 ? 10.912 29.867 48.761 1.00 10.93 ? ? ? ? ? ? 747 GLY A C 1
+ATOM 1877 O O . GLY A 1 257 ? 11.399 29.056 49.533 1.00 12.96 ? ? ? ? ? ? 747 GLY A O 1
+ATOM 1878 N N . VAL A 1 258 ? 10.796 29.633 47.462 1.00 9.21 ? ? ? ? ? ? 748 VAL A N 1
+ATOM 1879 C CA . VAL A 1 258 ? 11.167 28.354 46.876 1.00 8.85 ? ? ? ? ? ? 748 VAL A CA 1
+ATOM 1880 C C . VAL A 1 258 ? 12.458 28.482 46.075 1.00 9.01 ? ? ? ? ? ? 748 VAL A C 1
+ATOM 1881 O O . VAL A 1 258 ? 12.658 29.465 45.373 1.00 10.42 ? ? ? ? ? ? 748 VAL A O 1
+ATOM 1882 C CB . VAL A 1 258 ? 9.987 27.831 45.994 1.00 8.85 ? ? ? ? ? ? 748 VAL A CB 1
+ATOM 1883 C CG1 . VAL A 1 258 ? 10.383 26.626 45.188 1.00 8.99 ? ? ? ? ? ? 748 VAL A CG1 1
+ATOM 1884 C CG2 . VAL A 1 258 ? 8.798 27.486 46.888 1.00 9.07 ? ? ? ? ? ? 748 VAL A CG2 1
+ATOM 1885 N N . ILE A 1 259 ? 13.357 27.520 46.222 1.00 8.82 ? ? ? ? ? ? 749 ILE A N 1
+ATOM 1886 C CA . ILE A 1 259 ? 14.599 27.534 45.471 1.00 9.05 ? ? ? ? ? ? 749 ILE A CA 1
+ATOM 1887 C C . ILE A 1 259 ? 14.389 26.756 44.165 1.00 8.37 ? ? ? ? ? ? 749 ILE A C 1
+ATOM 1888 O O . ILE A 1 259 ? 13.512 25.889 44.052 1.00 7.65 ? ? ? ? ? ? 749 ILE A O 1
+ATOM 1889 C CB . ILE A 1 259 ? 15.763 26.936 46.256 1.00 12.03 ? ? ? ? ? ? 749 ILE A CB 1
+ATOM 1890 C CG1 . ILE A 1 259 ? 15.482 25.511 46.622 1.00 12.82 ? ? ? ? ? ? 749 ILE A CG1 1
+ATOM 1891 C CG2 . ILE A 1 259 ? 16.044 27.765 47.505 1.00 11.65 ? ? ? ? ? ? 749 ILE A CG2 1
+ATOM 1892 C CD1 . ILE A 1 259 ? 16.743 24.794 47.035 1.00 17.15 ? ? ? ? ? ? 749 ILE A CD1 1
+ATOM 1893 N N . VAL A 1 260 ? 15.176 27.114 43.160 1.00 7.77 ? ? ? ? ? ? 750 VAL A N 1
+ATOM 1894 C CA . VAL A 1 260 ? 15.078 26.510 41.841 1.00 7.23 ? ? ? ? ? ? 750 VAL A CA 1
+ATOM 1895 C C . VAL A 1 260 ? 16.383 25.831 41.467 1.00 6.52 ? ? ? ? ? ? 750 VAL A C 1
+ATOM 1896 O O . VAL A 1 260 ? 17.459 26.385 41.704 1.00 8.27 ? ? ? ? ? ? 750 VAL A O 1
+ATOM 1897 C CB . VAL A 1 260 ? 14.802 27.636 40.764 1.00 6.96 ? ? ? ? ? ? 750 VAL A CB 1
+ATOM 1898 C CG1 . VAL A 1 260 ? 14.816 27.041 39.329 1.00 8.40 ? ? ? ? ? ? 750 VAL A CG1 1
+ATOM 1899 C CG2 . VAL A 1 260 ? 13.488 28.351 41.048 1.00 6.84 ? ? ? ? ? ? 750 VAL A CG2 1
+ATOM 1900 N N . SER A 1 261 ? 16.293 24.615 40.930 1.00 6.22 ? ? ? ? ? ? 751 SER A N 1
+ATOM 1901 C CA . SER A 1 261 ? 17.477 23.917 40.406 1.00 5.59 ? ? ? ? ? ? 751 SER A CA 1
+ATOM 1902 C C . SER A 1 261 ? 17.241 23.594 38.934 1.00 6.21 ? ? ? ? ? ? 751 SER A C 1
+ATOM 1903 O O . SER A 1 261 ? 16.122 23.261 38.573 1.00 6.81 ? ? ? ? ? ? 751 SER A O 1
+ATOM 1904 C CB . SER A 1 261 ? 17.750 22.578 41.124 1.00 7.03 ? ? ? ? ? ? 751 SER A CB 1
+ATOM 1905 O OG . SER A 1 261 ? 18.212 22.811 42.441 1.00 7.94 ? ? ? ? ? ? 751 SER A OG 1
+ATOM 1906 N N . PHE A 1 262 ? 18.279 23.742 38.095 1.00 6.21 ? ? ? ? ? ? 752 PHE A N 1
+ATOM 1907 C CA . PHE A 1 262 ? 18.195 23.348 36.677 1.00 7.09 ? ? ? ? ? ? 752 PHE A CA 1
+ATOM 1908 C C . PHE A 1 262 ? 18.702 21.895 36.792 1.00 6.86 ? ? ? ? ? ? 752 PHE A C 1
+ATOM 1909 O O . PHE A 1 262 ? 19.855 21.659 37.111 1.00 6.50 ? ? ? ? ? ? 752 PHE A O 1
+ATOM 1910 C CB . PHE A 1 262 ? 19.137 24.203 35.792 1.00 7.61 ? ? ? ? ? ? 752 PHE A CB 1
+ATOM 1911 C CG . PHE A 1 262 ? 18.696 25.669 35.606 1.00 8.76 ? ? ? ? ? ? 752 PHE A CG 1
+ATOM 1912 C CD1 . PHE A 1 262 ? 17.445 26.127 36.025 1.00 9.00 ? ? ? ? ? ? 752 PHE A CD1 1
+ATOM 1913 C CD2 . PHE A 1 262 ? 19.561 26.581 34.997 1.00 9.90 ? ? ? ? ? ? 752 PHE A CD2 1
+ATOM 1914 C CE1 . PHE A 1 262 ? 17.064 27.462 35.850 1.00 9.69 ? ? ? ? ? ? 752 PHE A CE1 1
+ATOM 1915 C CE2 . PHE A 1 262 ? 19.181 27.929 34.818 1.00 10.82 ? ? ? ? ? ? 752 PHE A CE2 1
+ATOM 1916 C CZ . PHE A 1 262 ? 17.938 28.361 35.243 1.00 10.74 ? ? ? ? ? ? 752 PHE A CZ 1
+ATOM 1917 N N . THR A 1 263 ? 17.848 20.926 36.480 1.00 6.16 ? ? ? ? ? ? 753 THR A N 1
+ATOM 1918 C CA . THR A 1 263 ? 18.166 19.528 36.756 1.00 5.84 ? ? ? ? ? ? 753 THR A CA 1
+ATOM 1919 C C . THR A 1 263 ? 18.536 18.553 35.668 1.00 6.58 ? ? ? ? ? ? 753 THR A C 1
+ATOM 1920 O O . THR A 1 263 ? 19.174 17.548 35.962 1.00 7.31 ? ? ? ? ? ? 753 THR A O 1
+ATOM 1921 C CB . THR A 1 263 ? 16.964 18.878 37.536 1.00 6.41 ? ? ? ? ? ? 753 THR A CB 1
+ATOM 1922 O OG1 . THR A 1 263 ? 15.771 19.004 36.746 1.00 7.44 ? ? ? ? ? ? 753 THR A OG1 1
+ATOM 1923 C CG2 . THR A 1 263 ? 16.726 19.587 38.890 1.00 6.23 ? ? ? ? ? ? 753 THR A CG2 1
+ATOM 1924 N N . GLU A 1 264 ? 18.147 18.810 34.416 1.00 5.61 ? ? ? ? ? ? 754 GLU A N 1
+ATOM 1925 C CA . GLU A 1 264 ? 18.435 17.862 33.360 1.00 5.74 ? ? ? ? ? ? 754 GLU A CA 1
+ATOM 1926 C C . GLU A 1 264 ? 18.690 18.610 32.051 1.00 6.79 ? ? ? ? ? ? 754 GLU A C 1
+ATOM 1927 O O . GLU A 1 264 ? 18.256 18.154 30.979 1.00 7.27 ? ? ? ? ? ? 754 GLU A O 1
+ATOM 1928 C CB . GLU A 1 264 ? 17.229 16.915 33.166 1.00 6.30 ? ? ? ? ? ? 754 GLU A CB 1
+ATOM 1929 C CG . GLU A 1 264 ? 16.721 16.238 34.492 1.00 6.93 ? ? ? ? ? ? 754 GLU A CG 1
+ATOM 1930 C CD . GLU A 1 264 ? 15.569 15.281 34.278 1.00 8.49 ? ? ? ? ? ? 754 GLU A CD 1
+ATOM 1931 O OE1 . GLU A 1 264 ? 15.212 14.988 33.108 1.00 7.83 ? ? ? ? ? ? 754 GLU A OE1 1
+ATOM 1932 O OE2 . GLU A 1 264 ? 15.006 14.805 35.308 1.00 8.93 ? ? ? ? ? ? 754 GLU A OE2 1
+ATOM 1933 N N . ILE A 1 265 ? 19.488 19.664 32.126 1.00 6.12 ? ? ? ? ? ? 755 ILE A N 1
+ATOM 1934 C CA . ILE A 1 265 ? 19.721 20.492 30.942 1.00 6.47 ? ? ? ? ? ? 755 ILE A CA 1
+ATOM 1935 C C . ILE A 1 265 ? 20.317 19.793 29.738 1.00 6.37 ? ? ? ? ? ? 755 ILE A C 1
+ATOM 1936 O O . ILE A 1 265 ? 21.288 19.049 29.835 1.00 6.40 ? ? ? ? ? ? 755 ILE A O 1
+ATOM 1937 C CB . ILE A 1 265 ? 20.709 21.645 31.207 1.00 6.90 ? ? ? ? ? ? 755 ILE A CB 1
+ATOM 1938 C CG1 . ILE A 1 265 ? 20.310 22.480 32.421 1.00 6.34 ? ? ? ? ? ? 755 ILE A CG1 1
+ATOM 1939 C CG2 . ILE A 1 265 ? 20.781 22.545 29.944 1.00 7.30 ? ? ? ? ? ? 755 ILE A CG2 1
+ATOM 1940 C CD1 . ILE A 1 265 ? 21.484 23.255 32.969 1.00 8.29 ? ? ? ? ? ? 755 ILE A CD1 1
+ATOM 1941 N N . ASP A 1 266 ? 19.664 19.993 28.599 1.00 6.80 ? ? ? ? ? ? 756 ASP A N 1
+ATOM 1942 C CA . ASP A 1 266 ? 20.233 19.558 27.313 1.00 7.73 ? ? ? ? ? ? 756 ASP A CA 1
+ATOM 1943 C C . ASP A 1 266 ? 19.607 20.463 26.250 1.00 7.57 ? ? ? ? ? ? 756 ASP A C 1
+ATOM 1944 O O . ASP A 1 266 ? 18.514 21.017 26.457 1.00 7.64 ? ? ? ? ? ? 756 ASP A O 1
+ATOM 1945 C CB . ASP A 1 266 ? 20.215 18.041 27.005 1.00 7.66 ? ? ? ? ? ? 756 ASP A CB 1
+ATOM 1946 C CG . ASP A 1 266 ? 18.854 17.378 27.214 1.00 8.26 ? ? ? ? ? ? 756 ASP A CG 1
+ATOM 1947 O OD1 . ASP A 1 266 ? 17.811 18.006 27.042 1.00 9.13 ? ? ? ? ? ? 756 ASP A OD1 1
+ATOM 1948 O OD2 . ASP A 1 266 ? 18.861 16.169 27.532 1.00 9.17 ? ? ? ? ? ? 756 ASP A OD2 1
+ATOM 1949 N N . ILE A 1 267 ? 20.365 20.735 25.188 1.00 8.31 ? ? ? ? ? ? 757 ILE A N 1
+ATOM 1950 C CA . ILE A 1 267 ? 19.891 21.674 24.130 1.00 9.29 ? ? ? ? ? ? 757 ILE A CA 1
+ATOM 1951 C C . ILE A 1 267 ? 20.022 20.959 22.781 1.00 8.29 ? ? ? ? ? ? 757 ILE A C 1
+ATOM 1952 O O . ILE A 1 267 ? 21.095 20.885 22.202 1.00 8.70 ? ? ? ? ? ? 757 ILE A O 1
+ATOM 1953 C CB . ILE A 1 267 ? 20.680 23.012 24.221 1.00 9.49 ? ? ? ? ? ? 757 ILE A CB 1
+ATOM 1954 C CG1 . ILE A 1 267 ? 20.560 23.592 25.663 1.00 11.33 ? ? ? ? ? ? 757 ILE A CG1 1
+ATOM 1955 C CG2 . ILE A 1 267 ? 20.160 24.006 23.169 1.00 10.97 ? ? ? ? ? ? 757 ILE A CG2 1
+ATOM 1956 C CD1 . ILE A 1 267 ? 21.164 24.998 25.900 1.00 12.95 ? ? ? ? ? ? 757 ILE A CD1 1
+ATOM 1957 N N . ARG A 1 268 ? 18.906 20.384 22.349 1.00 9.24 ? ? ? ? ? ? 758 ARG A N 1
+ATOM 1958 C CA . ARG A 1 268 ? 18.882 19.552 21.174 1.00 9.77 ? ? ? ? ? ? 758 ARG A CA 1
+ATOM 1959 C C . ARG A 1 268 ? 18.886 20.275 19.826 1.00 9.82 ? ? ? ? ? ? 758 ARG A C 1
+ATOM 1960 O O . ARG A 1 268 ? 18.187 21.255 19.629 1.00 9.81 ? ? ? ? ? ? 758 ARG A O 1
+ATOM 1961 C CB . ARG A 1 268 ? 17.753 18.518 21.297 1.00 10.69 ? ? ? ? ? ? 758 ARG A CB 1
+ATOM 1962 C CG . ARG A 1 268 ? 16.328 19.072 21.302 1.00 10.83 ? ? ? ? ? ? 758 ARG A CG 1
+ATOM 1963 C CD . ARG A 1 268 ? 15.340 17.913 21.478 1.00 12.03 ? ? ? ? ? ? 758 ARG A CD 1
+ATOM 1964 N NE . ARG A 1 268 ? 13.947 18.317 21.460 1.00 12.50 ? ? ? ? ? ? 758 ARG A NE 1
+ATOM 1965 C CZ . ARG A 1 268 ? 13.278 18.779 22.503 1.00 13.50 ? ? ? ? ? ? 758 ARG A CZ 1
+ATOM 1966 N NH1 . ARG A 1 268 ? 13.866 18.930 23.683 1.00 13.90 ? ? ? ? ? ? 758 ARG A NH1 1
+ATOM 1967 N NH2 . ARG A 1 268 ? 12.003 19.109 22.361 1.00 15.64 ? ? ? ? ? ? 758 ARG A NH2 1
+ATOM 1968 N N . ILE A 1 269 ? 19.646 19.707 18.900 1.00 11.27 ? ? ? ? ? ? 759 ILE A N 1
+ATOM 1969 C CA . ILE A 1 269 ? 19.841 20.269 17.556 1.00 12.34 ? ? ? ? ? ? 759 ILE A CA 1
+ATOM 1970 C C . ILE A 1 269 ? 19.253 19.384 16.450 1.00 13.72 ? ? ? ? ? ? 759 ILE A C 1
+ATOM 1971 O O . ILE A 1 269 ? 19.518 18.166 16.408 1.00 13.26 ? ? ? ? ? ? 759 ILE A O 1
+ATOM 1972 C CB . ILE A 1 269 ? 21.348 20.432 17.278 1.00 11.56 ? ? ? ? ? ? 759 ILE A CB 1
+ATOM 1973 C CG1 . ILE A 1 269 ? 21.963 21.382 18.305 1.00 11.50 ? ? ? ? ? ? 759 ILE A CG1 1
+ATOM 1974 C CG2 . ILE A 1 269 ? 21.601 20.969 15.831 1.00 12.61 ? ? ? ? ? ? 759 ILE A CG2 1
+ATOM 1975 C CD1 . ILE A 1 269 ? 23.461 21.443 18.265 1.00 11.85 ? ? ? ? ? ? 759 ILE A CD1 1
+ATOM 1976 N N . PRO A 1 270 ? 18.444 19.986 15.542 1.00 16.07 ? ? ? ? ? ? 760 PRO A N 1
+ATOM 1977 C CA . PRO A 1 270 ? 17.818 19.259 14.414 1.00 18.40 ? ? ? ? ? ? 760 PRO A CA 1
+ATOM 1978 C C . PRO A 1 270 ? 18.946 18.648 13.557 1.00 21.21 ? ? ? ? ? ? 760 PRO A C 1
+ATOM 1979 O O . PRO A 1 270 ? 19.933 19.325 13.254 1.00 20.98 ? ? ? ? ? ? 760 PRO A O 1
+ATOM 1980 C CB . PRO A 1 270 ? 17.083 20.367 13.653 1.00 18.23 ? ? ? ? ? ? 760 PRO A CB 1
+ATOM 1981 C CG . PRO A 1 270 ? 16.805 21.415 14.702 1.00 17.98 ? ? ? ? ? ? 760 PRO A CG 1
+ATOM 1982 C CD . PRO A 1 270 ? 18.044 21.409 15.565 1.00 16.19 ? ? ? ? ? ? 760 PRO A CD 1
+ATOM 1983 N N . GLN A 1 271 ? 18.813 17.369 13.212 1.00 24.60 ? ? ? ? ? ? 761 GLN A N 1
+ATOM 1984 C CA . GLN A 1 271 ? 19.809 16.612 12.453 1.00 29.69 ? ? ? ? ? ? 761 GLN A CA 1
+ATOM 1985 C C . GLN A 1 271 ? 20.197 17.247 11.123 1.00 31.87 ? ? ? ? ? ? 761 GLN A C 1
+ATOM 1986 O O . GLN A 1 271 ? 21.278 16.970 10.580 1.00 32.76 ? ? ? ? ? ? 761 GLN A O 1
+ATOM 1987 C CB . GLN A 1 271 ? 19.293 15.193 12.193 1.00 32.52 ? ? ? ? ? ? 761 GLN A CB 1
+ATOM 1988 C CG . GLN A 1 271 ? 20.344 14.090 12.372 1.00 36.55 ? ? ? ? ? ? 761 GLN A CG 1
+ATOM 1989 C CD . GLN A 1 271 ? 20.530 13.666 13.843 1.00 38.84 ? ? ? ? ? ? 761 GLN A CD 1
+ATOM 1990 O OE1 . GLN A 1 271 ? 19.947 12.661 14.293 1.00 38.83 ? ? ? ? ? ? 761 GLN A OE1 1
+ATOM 1991 N NE2 . GLN A 1 271 ? 21.343 14.432 14.596 1.00 39.70 ? ? ? ? ? ? 761 GLN A NE2 1
+ATOM 1992 N N . SER A 1 272 ? 19.289 18.060 10.596 1.00 33.48 ? ? ? ? ? ? 762 SER A N 1
+ATOM 1993 C CA . SER A 1 272 ? 19.478 18.755 9.329 1.00 36.66 ? ? ? ? ? ? 762 SER A CA 1
+ATOM 1994 C C . SER A 1 272 ? 20.221 20.107 9.375 1.00 37.70 ? ? ? ? ? ? 762 SER A C 1
+ATOM 1995 O O . SER A 1 272 ? 20.685 20.571 8.328 1.00 38.59 ? ? ? ? ? ? 762 SER A O 1
+ATOM 1996 C CB . SER A 1 272 ? 18.118 18.936 8.644 1.00 37.76 ? ? ? ? ? ? 762 SER A CB 1
+ATOM 1997 O OG . SER A 1 272 ? 17.144 19.512 9.524 1.00 40.20 ? ? ? ? ? ? 762 SER A OG 1
+ATOM 1998 N N . GLU A 1 273 ? 20.255 20.768 10.543 1.00 37.47 ? ? ? ? ? ? 763 GLU A N 1
+ATOM 1999 C CA . GLU A 1 273 ? 20.940 22.066 10.731 1.00 37.43 ? ? ? ? ? ? 763 GLU A CA 1
+ATOM 2000 C C . GLU A 1 273 ? 22.437 21.825 10.431 1.00 36.05 ? ? ? ? ? ? 763 GLU A C 1
+ATOM 2001 O O . GLU A 1 273 ? 22.909 20.686 10.557 1.00 36.12 ? ? ? ? ? ? 763 GLU A O 1
+ATOM 2002 C CB . GLU A 1 273 ? 20.793 22.558 12.203 1.00 39.14 ? ? ? ? ? ? 763 GLU A CB 1
+ATOM 2003 C CG . GLU A 1 273 ? 19.737 23.671 12.502 1.00 41.40 ? ? ? ? ? ? 763 GLU A CG 1
+ATOM 2004 C CD . GLU A 1 273 ? 19.650 24.099 14.020 1.00 43.76 ? ? ? ? ? ? 763 GLU A CD 1
+ATOM 2005 O OE1 . GLU A 1 273 ? 20.602 23.877 14.808 1.00 44.89 ? ? ? ? ? ? 763 GLU A OE1 1
+ATOM 2006 O OE2 . GLU A 1 273 ? 18.611 24.668 14.451 1.00 44.77 ? ? ? ? ? ? 763 GLU A OE2 1
+ATOM 2007 N N . ASN A 1 274 ? 23.169 22.857 9.982 1.00 34.17 ? ? ? ? ? ? 764 ASN A N 1
+ATOM 2008 C CA . ASN A 1 274 ? 24.617 22.700 9.720 1.00 31.78 ? ? ? ? ? ? 764 ASN A CA 1
+ATOM 2009 C C . ASN A 1 274 ? 25.263 22.665 11.114 1.00 29.18 ? ? ? ? ? ? 764 ASN A C 1
+ATOM 2010 O O . ASN A 1 274 ? 25.092 23.619 11.878 1.00 28.63 ? ? ? ? ? ? 764 ASN A O 1
+ATOM 2011 C CB . ASN A 1 274 ? 25.170 23.885 8.907 1.00 32.94 ? ? ? ? ? ? 764 ASN A CB 1
+ATOM 2012 C CG . ASN A 1 274 ? 26.709 23.948 8.919 1.00 33.58 ? ? ? ? ? ? 764 ASN A CG 1
+ATOM 2013 O OD1 . ASN A 1 274 ? 27.400 22.994 8.539 1.00 34.94 ? ? ? ? ? ? 764 ASN A OD1 1
+ATOM 2014 N ND2 . ASN A 1 274 ? 27.241 25.064 9.387 1.00 33.52 ? ? ? ? ? ? 764 ASN A ND2 1
+ATOM 2015 N N . PRO A 1 275 ? 26.036 21.593 11.441 1.00 26.45 ? ? ? ? ? ? 765 PRO A N 1
+ATOM 2016 C CA . PRO A 1 275 ? 26.706 21.401 12.733 1.00 24.23 ? ? ? ? ? ? 765 PRO A CA 1
+ATOM 2017 C C . PRO A 1 275 ? 27.561 22.541 13.233 1.00 21.88 ? ? ? ? ? ? 765 PRO A C 1
+ATOM 2018 O O . PRO A 1 275 ? 27.385 22.985 14.362 1.00 19.95 ? ? ? ? ? ? 765 PRO A O 1
+ATOM 2019 C CB . PRO A 1 275 ? 27.556 20.148 12.505 1.00 25.21 ? ? ? ? ? ? 765 PRO A CB 1
+ATOM 2020 C CG . PRO A 1 275 ? 26.804 19.404 11.497 1.00 25.28 ? ? ? ? ? ? 765 PRO A CG 1
+ATOM 2021 C CD . PRO A 1 275 ? 26.391 20.486 10.536 1.00 26.28 ? ? ? ? ? ? 765 PRO A CD 1
+ATOM 2022 N N . ALA A 1 276 ? 28.483 23.009 12.390 1.00 19.45 ? ? ? ? ? ? 766 ALA A N 1
+ATOM 2023 C CA . ALA A 1 276 ? 29.414 24.070 12.768 1.00 17.82 ? ? ? ? ? ? 766 ALA A CA 1
+ATOM 2024 C C . ALA A 1 276 ? 28.771 25.355 13.302 1.00 15.92 ? ? ? ? ? ? 766 ALA A C 1
+ATOM 2025 O O . ALA A 1 276 ? 29.150 25.851 14.368 1.00 16.01 ? ? ? ? ? ? 766 ALA A O 1
+ATOM 2026 C CB . ALA A 1 276 ? 30.382 24.357 11.620 1.00 18.46 ? ? ? ? ? ? 766 ALA A CB 1
+ATOM 2027 N N . THR A 1 277 ? 27.760 25.858 12.612 1.00 14.28 ? ? ? ? ? ? 767 THR A N 1
+ATOM 2028 C CA . THR A 1 277 ? 27.074 27.060 13.069 1.00 14.72 ? ? ? ? ? ? 767 THR A CA 1
+ATOM 2029 C C . THR A 1 277 ? 26.005 26.733 14.147 1.00 12.77 ? ? ? ? ? ? 767 THR A C 1
+ATOM 2030 O O . THR A 1 277 ? 25.768 27.537 15.027 1.00 13.61 ? ? ? ? ? ? 767 THR A O 1
+ATOM 2031 C CB . THR A 1 277 ? 26.466 27.874 11.874 1.00 17.10 ? ? ? ? ? ? 767 THR A CB 1
+ATOM 2032 O OG1 . THR A 1 277 ? 25.641 27.013 11.073 1.00 19.71 ? ? ? ? ? ? 767 THR A OG1 1
+ATOM 2033 C CG2 . THR A 1 277 ? 27.602 28.454 10.984 1.00 17.13 ? ? ? ? ? ? 767 THR A CG2 1
+ATOM 2034 N N . ALA A 1 278 ? 25.359 25.574 14.062 1.00 12.75 ? ? ? ? ? ? 768 ALA A N 1
+ATOM 2035 C CA . ALA A 1 278 ? 24.376 25.160 15.085 1.00 12.12 ? ? ? ? ? ? 768 ALA A CA 1
+ATOM 2036 C C . ALA A 1 278 ? 25.099 25.083 16.457 1.00 10.67 ? ? ? ? ? ? 768 ALA A C 1
+ATOM 2037 O O . ALA A 1 278 ? 24.532 25.487 17.464 1.00 11.15 ? ? ? ? ? ? 768 ALA A O 1
+ATOM 2038 C CB . ALA A 1 278 ? 23.778 23.818 14.728 1.00 12.11 ? ? ? ? ? ? 768 ALA A CB 1
+ATOM 2039 N N . PHE A 1 279 ? 26.351 24.631 16.475 1.00 10.85 ? ? ? ? ? ? 769 PHE A N 1
+ATOM 2040 C CA . PHE A 1 279 ? 27.145 24.543 17.725 1.00 11.87 ? ? ? ? ? ? 769 PHE A CA 1
+ATOM 2041 C C . PHE A 1 279 ? 27.425 25.913 18.353 1.00 12.79 ? ? ? ? ? ? 769 PHE A C 1
+ATOM 2042 O O . PHE A 1 279 ? 27.554 26.022 19.580 1.00 12.86 ? ? ? ? ? ? 769 PHE A O 1
+ATOM 2043 C CB . PHE A 1 279 ? 28.470 23.794 17.530 1.00 12.06 ? ? ? ? ? ? 769 PHE A CB 1
+ATOM 2044 C CG . PHE A 1 279 ? 28.319 22.291 17.371 1.00 13.63 ? ? ? ? ? ? 769 PHE A CG 1
+ATOM 2045 C CD1 . PHE A 1 279 ? 27.063 21.690 17.308 1.00 14.14 ? ? ? ? ? ? 769 PHE A CD1 1
+ATOM 2046 C CD2 . PHE A 1 279 ? 29.439 21.487 17.208 1.00 14.70 ? ? ? ? ? ? 769 PHE A CD2 1
+ATOM 2047 C CE1 . PHE A 1 279 ? 26.920 20.310 17.074 1.00 15.21 ? ? ? ? ? ? 769 PHE A CE1 1
+ATOM 2048 C CE2 . PHE A 1 279 ? 29.313 20.086 16.970 1.00 16.17 ? ? ? ? ? ? 769 PHE A CE2 1
+ATOM 2049 C CZ . PHE A 1 279 ? 28.047 19.501 16.902 1.00 14.88 ? ? ? ? ? ? 769 PHE A CZ 1
+ATOM 2050 N N . GLN A 1 280 ? 27.536 26.958 17.530 1.00 10.91 ? ? ? ? ? ? 770 GLN A N 1
+ATOM 2051 C CA . GLN A 1 280 ? 27.759 28.305 18.019 1.00 11.24 ? ? ? ? ? ? 770 GLN A CA 1
+ATOM 2052 C C . GLN A 1 280 ? 26.498 28.859 18.698 1.00 11.07 ? ? ? ? ? ? 770 GLN A C 1
+ATOM 2053 O O . GLN A 1 280 ? 26.572 29.516 19.744 1.00 12.05 ? ? ? ? ? ? 770 GLN A O 1
+ATOM 2054 C CB . GLN A 1 280 ? 28.172 29.214 16.872 1.00 12.81 ? ? ? ? ? ? 770 GLN A CB 1
+ATOM 2055 C CG . GLN A 1 280 ? 29.577 29.025 16.450 1.00 15.21 ? ? ? ? ? ? 770 GLN A CG 1
+ATOM 2056 C CD . GLN A 1 280 ? 29.963 30.063 15.400 1.00 18.23 ? ? ? ? ? ? 770 GLN A CD 1
+ATOM 2057 O OE1 . GLN A 1 280 ? 29.245 30.243 14.395 1.00 19.22 ? ? ? ? ? ? 770 GLN A OE1 1
+ATOM 2058 N NE2 . GLN A 1 280 ? 31.050 30.790 15.650 1.00 18.11 ? ? ? ? ? ? 770 GLN A NE2 1
+ATOM 2059 N N . VAL A 1 281 ? 25.339 28.595 18.099 1.00 10.67 ? ? ? ? ? ? 771 VAL A N 1
+ATOM 2060 C CA . VAL A 1 281 ? 24.056 29.019 18.670 1.00 11.00 ? ? ? ? ? ? 771 VAL A CA 1
+ATOM 2061 C C . VAL A 1 281 ? 23.861 28.281 20.028 1.00 11.27 ? ? ? ? ? ? 771 VAL A C 1
+ATOM 2062 O O . VAL A 1 281 ? 23.481 28.894 21.037 1.00 11.20 ? ? ? ? ? ? 771 VAL A O 1
+ATOM 2063 C CB . VAL A 1 281 ? 22.894 28.627 17.752 1.00 11.38 ? ? ? ? ? ? 771 VAL A CB 1
+ATOM 2064 C CG1 . VAL A 1 281 ? 21.573 28.923 18.421 1.00 11.70 ? ? ? ? ? ? 771 VAL A CG1 1
+ATOM 2065 C CG2 . VAL A 1 281 ? 23.002 29.394 16.405 1.00 13.00 ? ? ? ? ? ? 771 VAL A CG2 1
+ATOM 2066 N N . GLN A 1 282 ? 24.115 26.974 20.016 1.00 10.26 ? ? ? ? ? ? 772 GLN A N 1
+ATOM 2067 C CA . GLN A 1 282 ? 24.000 26.138 21.238 1.00 9.83 ? ? ? ? ? ? 772 GLN A CA 1
+ATOM 2068 C C . GLN A 1 282 ? 24.886 26.697 22.341 1.00 10.09 ? ? ? ? ? ? 772 GLN A C 1
+ATOM 2069 O O . GLN A 1 282 ? 24.445 26.783 23.494 1.00 10.98 ? ? ? ? ? ? 772 GLN A O 1
+ATOM 2070 C CB . GLN A 1 282 ? 24.400 24.697 20.928 1.00 9.45 ? ? ? ? ? ? 772 GLN A CB 1
+ATOM 2071 C CG . GLN A 1 282 ? 24.463 23.772 22.153 1.00 8.95 ? ? ? ? ? ? 772 GLN A CG 1
+ATOM 2072 C CD . GLN A 1 282 ? 24.854 22.368 21.750 1.00 9.15 ? ? ? ? ? ? 772 GLN A CD 1
+ATOM 2073 O OE1 . GLN A 1 282 ? 26.011 22.105 21.399 1.00 9.98 ? ? ? ? ? ? 772 GLN A OE1 1
+ATOM 2074 N NE2 . GLN A 1 282 ? 23.883 21.456 21.763 1.00 9.31 ? ? ? ? ? ? 772 GLN A NE2 1
+ATOM 2075 N N . ALA A 1 283 ? 26.119 27.091 22.003 1.00 9.30 ? ? ? ? ? ? 773 ALA A N 1
+ATOM 2076 C CA . ALA A 1 283 ? 27.046 27.675 22.977 1.00 10.09 ? ? ? ? ? ? 773 ALA A CA 1
+ATOM 2077 C C . ALA A 1 283 ? 26.479 28.953 23.603 1.00 10.89 ? ? ? ? ? ? 773 ALA A C 1
+ATOM 2078 O O . ALA A 1 283 ? 26.584 29.160 24.820 1.00 10.94 ? ? ? ? ? ? 773 ALA A O 1
+ATOM 2079 C CB . ALA A 1 283 ? 28.396 27.953 22.343 1.00 10.56 ? ? ? ? ? ? 773 ALA A CB 1
+ATOM 2080 N N . ASN A 1 284 ? 25.865 29.822 22.793 1.00 11.21 ? ? ? ? ? ? 774 ASN A N 1
+ATOM 2081 C CA . ASN A 1 284 ? 25.277 31.037 23.336 1.00 12.75 ? ? ? ? ? ? 774 ASN A CA 1
+ATOM 2082 C C . ASN A 1 284 ? 24.076 30.746 24.220 1.00 10.52 ? ? ? ? ? ? 774 ASN A C 1
+ATOM 2083 O O . ASN A 1 284 ? 23.840 31.467 25.187 1.00 10.75 ? ? ? ? ? ? 774 ASN A O 1
+ATOM 2084 C CB . ASN A 1 284 ? 24.861 32.005 22.229 1.00 16.52 ? ? ? ? ? ? 774 ASN A CB 1
+ATOM 2085 C CG . ASN A 1 284 ? 26.064 32.636 21.521 1.00 21.29 ? ? ? ? ? ? 774 ASN A CG 1
+ATOM 2086 O OD1 . ASN A 1 284 ? 25.934 33.147 20.395 1.00 24.27 ? ? ? ? ? ? 774 ASN A OD1 1
+ATOM 2087 N ND2 . ASN A 1 284 ? 27.242 32.608 22.175 1.00 23.11 ? ? ? ? ? ? 774 ASN A ND2 1
+ATOM 2088 N N . ASN A 1 285 ? 23.298 29.724 23.864 1.00 10.84 ? ? ? ? ? ? 775 ASN A N 1
+ATOM 2089 C CA . ASN A 1 285 ? 22.120 29.359 24.659 1.00 10.65 ? ? ? ? ? ? 775 ASN A CA 1
+ATOM 2090 C C . ASN A 1 285 ? 22.610 28.848 26.018 1.00 9.82 ? ? ? ? ? ? 775 ASN A C 1
+ATOM 2091 O O . ASN A 1 285 ? 22.058 29.231 27.046 1.00 10.74 ? ? ? ? ? ? 775 ASN A O 1
+ATOM 2092 C CB . ASN A 1 285 ? 21.281 28.281 23.958 1.00 10.95 ? ? ? ? ? ? 775 ASN A CB 1
+ATOM 2093 C CG . ASN A 1 285 ? 20.392 28.821 22.819 1.00 12.94 ? ? ? ? ? ? 775 ASN A CG 1
+ATOM 2094 O OD1 . ASN A 1 285 ? 19.677 28.047 22.190 1.00 13.12 ? ? ? ? ? ? 775 ASN A OD1 1
+ATOM 2095 N ND2 . ASN A 1 285 ? 20.407 30.135 22.578 1.00 14.23 ? ? ? ? ? ? 775 ASN A ND2 1
+ATOM 2096 N N . TYR A 1 286 ? 23.639 27.997 26.023 1.00 9.85 ? ? ? ? ? ? 776 TYR A N 1
+ATOM 2097 C CA . TYR A 1 286 ? 24.193 27.500 27.295 1.00 9.62 ? ? ? ? ? ? 776 TYR A CA 1
+ATOM 2098 C C . TYR A 1 286 ? 24.723 28.673 28.135 1.00 11.08 ? ? ? ? ? ? 776 TYR A C 1
+ATOM 2099 O O . TYR A 1 286 ? 24.512 28.734 29.352 1.00 10.65 ? ? ? ? ? ? 776 TYR A O 1
+ATOM 2100 C CB . TYR A 1 286 ? 25.315 26.481 27.059 1.00 8.96 ? ? ? ? ? ? 776 TYR A CB 1
+ATOM 2101 C CG . TYR A 1 286 ? 24.847 25.033 27.023 1.00 9.40 ? ? ? ? ? ? 776 TYR A CG 1
+ATOM 2102 C CD1 . TYR A 1 286 ? 24.441 24.380 28.197 1.00 9.20 ? ? ? ? ? ? 776 TYR A CD1 1
+ATOM 2103 C CD2 . TYR A 1 286 ? 24.837 24.299 25.831 1.00 8.96 ? ? ? ? ? ? 776 TYR A CD2 1
+ATOM 2104 C CE1 . TYR A 1 286 ? 24.050 23.044 28.173 1.00 8.99 ? ? ? ? ? ? 776 TYR A CE1 1
+ATOM 2105 C CE2 . TYR A 1 286 ? 24.444 22.956 25.797 1.00 8.99 ? ? ? ? ? ? 776 TYR A CE2 1
+ATOM 2106 C CZ . TYR A 1 286 ? 24.055 22.337 26.984 1.00 8.28 ? ? ? ? ? ? 776 TYR A CZ 1
+ATOM 2107 O OH . TYR A 1 286 ? 23.705 21.022 26.977 1.00 9.32 ? ? ? ? ? ? 776 TYR A OH 1
+ATOM 2108 N N . LYS A 1 287 ? 25.409 29.621 27.489 1.00 10.11 ? ? ? ? ? ? 777 LYS A N 1
+ATOM 2109 C CA . LYS A 1 287 ? 25.958 30.770 28.183 1.00 11.54 ? ? ? ? ? ? 777 LYS A CA 1
+ATOM 2110 C C . LYS A 1 287 ? 24.854 31.610 28.851 1.00 10.21 ? ? ? ? ? ? 777 LYS A C 1
+ATOM 2111 O O . LYS A 1 287 ? 24.984 32.031 30.009 1.00 10.63 ? ? ? ? ? ? 777 LYS A O 1
+ATOM 2112 C CB . LYS A 1 287 ? 26.743 31.614 27.170 1.00 13.73 ? ? ? ? ? ? 777 LYS A CB 1
+ATOM 2113 C CG . LYS A 1 287 ? 27.354 32.871 27.756 1.00 18.39 ? ? ? ? ? ? 777 LYS A CG 1
+ATOM 2114 C CD . LYS A 1 287 ? 28.413 33.408 26.800 1.00 22.43 ? ? ? ? ? ? 777 LYS A CD 1
+ATOM 2115 C CE . LYS A 1 287 ? 29.155 34.588 27.413 1.00 26.37 ? ? ? ? ? ? 777 LYS A CE 1
+ATOM 2116 N NZ . LYS A 1 287 ? 30.205 35.077 26.439 1.00 29.09 ? ? ? ? ? ? 777 LYS A NZ 1
+ATOM 2117 N N . GLU A 1 288 ? 23.786 31.888 28.114 1.00 9.53 ? ? ? ? ? ? 778 GLU A N 1
+ATOM 2118 C CA . GLU A 1 288 ? 22.670 32.662 28.645 1.00 11.49 ? ? ? ? ? ? 778 GLU A CA 1
+ATOM 2119 C C . GLU A 1 288 ? 21.989 31.949 29.823 1.00 11.02 ? ? ? ? ? ? 778 GLU A C 1
+ATOM 2120 O O . GLU A 1 288 ? 21.608 32.600 30.784 1.00 11.95 ? ? ? ? ? ? 778 GLU A O 1
+ATOM 2121 C CB . GLU A 1 288 ? 21.649 32.991 27.545 1.00 13.30 ? ? ? ? ? ? 778 GLU A CB 1
+ATOM 2122 C CG . GLU A 1 288 ? 22.182 33.976 26.523 1.00 16.77 ? ? ? ? ? ? 778 GLU A CG 1
+ATOM 2123 C CD . GLU A 1 288 ? 22.744 35.244 27.176 1.00 19.37 ? ? ? ? ? ? 778 GLU A CD 1
+ATOM 2124 O OE1 . GLU A 1 288 ? 22.050 35.842 28.050 1.00 19.89 ? ? ? ? ? ? 778 GLU A OE1 1
+ATOM 2125 O OE2 . GLU A 1 288 ? 23.896 35.632 26.835 1.00 21.64 ? ? ? ? ? ? 778 GLU A OE2 1
+ATOM 2126 N N . LEU A 1 289 ? 21.847 30.628 29.754 1.00 10.84 ? ? ? ? ? ? 779 LEU A N 1
+ATOM 2127 C CA . LEU A 1 289 ? 21.244 29.869 30.862 1.00 11.01 ? ? ? ? ? ? 779 LEU A CA 1
+ATOM 2128 C C . LEU A 1 289 ? 22.108 30.025 32.137 1.00 9.58 ? ? ? ? ? ? 779 LEU A C 1
+ATOM 2129 O O . LEU A 1 289 ? 21.591 30.239 33.256 1.00 9.63 ? ? ? ? ? ? 779 LEU A O 1
+ATOM 2130 C CB . LEU A 1 289 ? 21.142 28.388 30.498 1.00 13.34 ? ? ? ? ? ? 779 LEU A CB 1
+ATOM 2131 C CG . LEU A 1 289 ? 19.865 27.744 29.971 1.00 17.57 ? ? ? ? ? ? 779 LEU A CG 1
+ATOM 2132 C CD1 . LEU A 1 289 ? 19.989 26.215 30.269 1.00 17.70 ? ? ? ? ? ? 779 LEU A CD1 1
+ATOM 2133 C CD2 . LEU A 1 289 ? 18.611 28.281 30.681 1.00 18.13 ? ? ? ? ? ? 779 LEU A CD2 1
+ATOM 2134 N N . MET A 1 290 ? 23.416 29.900 31.982 1.00 9.14 ? ? ? ? ? ? 780 MET A N 1
+ATOM 2135 C CA . MET A 1 290 ? 24.325 30.090 33.122 1.00 9.68 ? ? ? ? ? ? 780 MET A CA 1
+ATOM 2136 C C . MET A 1 290 ? 24.221 31.505 33.690 1.00 10.14 ? ? ? ? ? ? 780 MET A C 1
+ATOM 2137 O O . MET A 1 290 ? 24.249 31.681 34.905 1.00 10.76 ? ? ? ? ? ? 780 MET A O 1
+ATOM 2138 C CB . MET A 1 290 ? 25.762 29.762 32.735 1.00 11.00 ? ? ? ? ? ? 780 MET A CB 1
+ATOM 2139 C CG . MET A 1 290 ? 26.753 29.893 33.884 1.00 12.59 ? ? ? ? ? ? 780 MET A CG 1
+ATOM 2140 S SD . MET A 1 290 ? 26.314 28.933 35.385 1.00 13.42 ? ? ? ? ? ? 780 MET A SD 1
+ATOM 2141 C CE . MET A 1 290 ? 26.988 27.360 34.936 1.00 12.56 ? ? ? ? ? ? 780 MET A CE 1
+ATOM 2142 N N . LYS A 1 291 ? 24.100 32.521 32.834 1.00 9.44 ? ? ? ? ? ? 781 LYS A N 1
+ATOM 2143 C CA . LYS A 1 291 ? 23.945 33.891 33.334 1.00 10.39 ? ? ? ? ? ? 781 LYS A CA 1
+ATOM 2144 C C . LYS A 1 291 ? 22.668 34.053 34.152 1.00 9.21 ? ? ? ? ? ? 781 LYS A C 1
+ATOM 2145 O O . LYS A 1 291 ? 22.643 34.824 35.112 1.00 9.91 ? ? ? ? ? ? 781 LYS A O 1
+ATOM 2146 C CB . LYS A 1 291 ? 23.946 34.907 32.191 1.00 12.88 ? ? ? ? ? ? 781 LYS A CB 1
+ATOM 2147 C CG . LYS A 1 291 ? 25.324 35.094 31.607 1.00 16.54 ? ? ? ? ? ? 781 LYS A CG 1
+ATOM 2148 C CD . LYS A 1 291 ? 25.254 35.743 30.233 1.00 19.89 ? ? ? ? ? ? 781 LYS A CD 1
+ATOM 2149 C CE . LYS A 1 291 ? 24.668 37.148 30.322 1.00 23.51 ? ? ? ? ? ? 781 LYS A CE 1
+ATOM 2150 N NZ . LYS A 1 291 ? 24.540 37.781 28.957 1.00 25.51 ? ? ? ? ? ? 781 LYS A NZ 1
+ATOM 2151 N N . ILE A 1 292 ? 21.606 33.350 33.775 1.00 9.21 ? ? ? ? ? ? 782 ILE A N 1
+ATOM 2152 C CA . ILE A 1 292 ? 20.366 33.425 34.540 1.00 9.91 ? ? ? ? ? ? 782 ILE A CA 1
+ATOM 2153 C C . ILE A 1 292 ? 20.588 32.769 35.919 1.00 10.45 ? ? ? ? ? ? 782 ILE A C 1
+ATOM 2154 O O . ILE A 1 292 ? 20.137 33.292 36.936 1.00 10.45 ? ? ? ? ? ? 782 ILE A O 1
+ATOM 2155 C CB . ILE A 1 292 ? 19.197 32.749 33.789 1.00 11.06 ? ? ? ? ? ? 782 ILE A CB 1
+ATOM 2156 C CG1 . ILE A 1 292 ? 18.809 33.615 32.592 1.00 11.10 ? ? ? ? ? ? 782 ILE A CG1 1
+ATOM 2157 C CG2 . ILE A 1 292 ? 17.965 32.535 34.734 1.00 10.92 ? ? ? ? ? ? 782 ILE A CG2 1
+ATOM 2158 C CD1 . ILE A 1 292 ? 17.815 32.947 31.692 1.00 13.38 ? ? ? ? ? ? 782 ILE A CD1 1
+ATOM 2159 N N . CYS A 1 293 ? 21.317 31.660 35.949 1.00 9.61 ? ? ? ? ? ? 783 CYS A N 1
+ATOM 2160 C CA . CYS A 1 293 ? 21.614 30.994 37.200 1.00 11.23 ? ? ? ? ? ? 783 CYS A CA 1
+ATOM 2161 C C . CYS A 1 293 ? 22.439 31.948 38.107 1.00 12.01 ? ? ? ? ? ? 783 CYS A C 1
+ATOM 2162 O O . CYS A 1 293 ? 22.079 32.204 39.259 1.00 12.32 ? ? ? ? ? ? 783 CYS A O 1
+ATOM 2163 C CB . CYS A 1 293 ? 22.329 29.660 36.899 1.00 11.86 ? ? ? ? ? ? 783 CYS A CB 1
+ATOM 2164 S SG . CYS A 1 293 ? 22.967 28.762 38.349 1.00 16.76 ? ? ? ? ? ? 783 CYS A SG 1
+ATOM 2165 N N . LEU A 1 294 ? 23.471 32.578 37.557 1.00 12.25 ? ? ? ? ? ? 784 LEU A N 1
+ATOM 2166 C CA . LEU A 1 294 ? 24.298 33.497 38.329 1.00 13.07 ? ? ? ? ? ? 784 LEU A CA 1
+ATOM 2167 C C . LEU A 1 294 ? 23.569 34.744 38.847 1.00 13.37 ? ? ? ? ? ? 784 LEU A C 1
+ATOM 2168 O O . LEU A 1 294 ? 23.949 35.306 39.876 1.00 15.02 ? ? ? ? ? ? 784 LEU A O 1
+ATOM 2169 C CB . LEU A 1 294 ? 25.508 33.926 37.491 1.00 13.57 ? ? ? ? ? ? 784 LEU A CB 1
+ATOM 2170 C CG . LEU A 1 294 ? 26.463 32.802 37.101 1.00 13.28 ? ? ? ? ? ? 784 LEU A CG 1
+ATOM 2171 C CD1 . LEU A 1 294 ? 27.409 33.307 36.056 1.00 14.57 ? ? ? ? ? ? 784 LEU A CD1 1
+ATOM 2172 C CD2 . LEU A 1 294 ? 27.252 32.289 38.296 1.00 16.54 ? ? ? ? ? ? 784 LEU A CD2 1
+ATOM 2173 N N . ALA A 1 295 ? 22.522 35.181 38.160 1.00 12.60 ? ? ? ? ? ? 785 ALA A N 1
+ATOM 2174 C CA . ALA A 1 295 ? 21.802 36.392 38.560 1.00 13.07 ? ? ? ? ? ? 785 ALA A CA 1
+ATOM 2175 C C . ALA A 1 295 ? 20.714 36.221 39.611 1.00 13.35 ? ? ? ? ? ? 785 ALA A C 1
+ATOM 2176 O O . ALA A 1 295 ? 20.164 37.223 40.102 1.00 14.40 ? ? ? ? ? ? 785 ALA A O 1
+ATOM 2177 C CB . ALA A 1 295 ? 21.182 37.043 37.338 1.00 14.37 ? ? ? ? ? ? 785 ALA A CB 1
+ATOM 2178 N N . ASN A 1 296 ? 20.346 34.973 39.899 1.00 10.77 ? ? ? ? ? ? 786 ASN A N 1
+ATOM 2179 C CA . ASN A 1 296 ? 19.277 34.706 40.839 1.00 10.43 ? ? ? ? ? ? 786 ASN A CA 1
+ATOM 2180 C C . ASN A 1 296 ? 19.801 33.997 42.088 1.00 10.30 ? ? ? ? ? ? 786 ASN A C 1
+ATOM 2181 O O . ASN A 1 296 ? 20.245 32.853 42.012 1.00 10.02 ? ? ? ? ? ? 786 ASN A O 1
+ATOM 2182 C CB . ASN A 1 296 ? 18.191 33.894 40.144 1.00 10.13 ? ? ? ? ? ? 786 ASN A CB 1
+ATOM 2183 C CG . ASN A 1 296 ? 17.384 34.733 39.189 1.00 9.46 ? ? ? ? ? ? 786 ASN A CG 1
+ATOM 2184 O OD1 . ASN A 1 296 ? 16.538 35.509 39.598 1.00 9.43 ? ? ? ? ? ? 786 ASN A OD1 1
+ATOM 2185 N ND2 . ASN A 1 296 ? 17.674 34.599 37.903 1.00 11.23 ? ? ? ? ? ? 786 ASN A ND2 1
+ATOM 2186 N N . PRO A 1 297 ? 19.706 34.656 43.260 1.00 10.14 ? ? ? ? ? ? 787 PRO A N 1
+ATOM 2187 C CA . PRO A 1 297 ? 20.200 34.069 44.517 1.00 10.14 ? ? ? ? ? ? 787 PRO A CA 1
+ATOM 2188 C C . PRO A 1 297 ? 19.551 32.735 44.956 1.00 9.42 ? ? ? ? ? ? 787 PRO A C 1
+ATOM 2189 O O . PRO A 1 297 ? 20.155 32.025 45.745 1.00 10.32 ? ? ? ? ? ? 787 PRO A O 1
+ATOM 2190 C CB . PRO A 1 297 ? 19.954 35.183 45.556 1.00 10.71 ? ? ? ? ? ? 787 PRO A CB 1
+ATOM 2191 C CG . PRO A 1 297 ? 19.747 36.388 44.798 1.00 12.81 ? ? ? ? ? ? 787 PRO A CG 1
+ATOM 2192 C CD . PRO A 1 297 ? 19.105 35.982 43.491 1.00 10.78 ? ? ? ? ? ? 787 PRO A CD 1
+ATOM 2193 N N . ASN A 1 298 ? 18.313 32.454 44.520 1.00 8.67 ? ? ? ? ? ? 788 ASN A N 1
+ATOM 2194 C CA . ASN A 1 298 ? 17.608 31.198 44.851 1.00 8.43 ? ? ? ? ? ? 788 ASN A CA 1
+ATOM 2195 C C . ASN A 1 298 ? 17.802 30.072 43.817 1.00 9.09 ? ? ? ? ? ? 788 ASN A C 1
+ATOM 2196 O O . ASN A 1 298 ? 17.092 29.067 43.854 1.00 9.45 ? ? ? ? ? ? 788 ASN A O 1
+ATOM 2197 C CB . ASN A 1 298 ? 16.107 31.437 45.050 1.00 8.26 ? ? ? ? ? ? 788 ASN A CB 1
+ATOM 2198 C CG . ASN A 1 298 ? 15.388 31.843 43.753 1.00 9.04 ? ? ? ? ? ? 788 ASN A CG 1
+ATOM 2199 O OD1 . ASN A 1 298 ? 15.906 32.642 42.970 1.00 9.96 ? ? ? ? ? ? 788 ASN A OD1 1
+ATOM 2200 N ND2 . ASN A 1 298 ? 14.193 31.329 43.543 1.00 9.14 ? ? ? ? ? ? 788 ASN A ND2 1
+ATOM 2201 N N . CYS A 1 299 ? 18.758 30.230 42.895 1.00 8.95 ? ? ? ? ? ? 789 CYS A N 1
+ATOM 2202 C CA . CYS A 1 299 ? 19.009 29.200 41.863 1.00 10.21 ? ? ? ? ? ? 789 CYS A CA 1
+ATOM 2203 C C . CYS A 1 299 ? 20.520 28.959 41.830 1.00 12.08 ? ? ? ? ? ? 789 CYS A C 1
+ATOM 2204 O O . CYS A 1 299 ? 21.235 29.768 41.237 1.00 14.16 ? ? ? ? ? ? 789 CYS A O 1
+ATOM 2205 C CB . CYS A 1 299 ? 18.521 29.701 40.495 1.00 10.58 ? ? ? ? ? ? 789 CYS A CB 1
+ATOM 2206 S SG . CYS A 1 299 ? 18.843 28.534 39.168 1.00 14.93 ? ? ? ? ? ? 789 CYS A SG 1
+ATOM 2207 N N . ASN A 1 300 ? 21.012 27.868 42.433 1.00 10.86 ? ? ? ? ? ? 790 ASN A N 1
+ATOM 2208 C CA . ASN A 1 300 ? 22.458 27.624 42.486 1.00 12.32 ? ? ? ? ? ? 790 ASN A CA 1
+ATOM 2209 C C . ASN A 1 300 ? 22.927 26.220 42.100 1.00 11.09 ? ? ? ? ? ? 790 ASN A C 1
+ATOM 2210 O O . ASN A 1 300 ? 24.045 25.805 42.441 1.00 11.40 ? ? ? ? ? ? 790 ASN A O 1
+ATOM 2211 C CB . ASN A 1 300 ? 22.979 27.983 43.884 1.00 15.28 ? ? ? ? ? ? 790 ASN A CB 1
+ATOM 2212 C CG . ASN A 1 300 ? 22.597 29.427 44.308 1.00 18.96 ? ? ? ? ? ? 790 ASN A CG 1
+ATOM 2213 O OD1 . ASN A 1 300 ? 23.163 30.423 43.813 1.00 21.05 ? ? ? ? ? ? 790 ASN A OD1 1
+ATOM 2214 N ND2 . ASN A 1 300 ? 21.627 29.539 45.220 1.00 19.29 ? ? ? ? ? ? 790 ASN A ND2 1
+ATOM 2215 N N . THR A 1 301 ? 22.068 25.484 41.404 1.00 8.83 ? ? ? ? ? ? 791 THR A N 1
+ATOM 2216 C CA . THR A 1 301 ? 22.388 24.124 40.971 1.00 8.04 ? ? ? ? ? ? 791 THR A CA 1
+ATOM 2217 C C . THR A 1 301 ? 22.154 24.092 39.452 1.00 6.90 ? ? ? ? ? ? 791 THR A C 1
+ATOM 2218 O O . THR A 1 301 ? 21.069 24.406 38.979 1.00 7.37 ? ? ? ? ? ? 791 THR A O 1
+ATOM 2219 C CB . THR A 1 301 ? 21.458 23.110 41.681 1.00 9.09 ? ? ? ? ? ? 791 THR A CB 1
+ATOM 2220 O OG1 . THR A 1 301 ? 21.666 23.196 43.091 1.00 10.63 ? ? ? ? ? ? 791 THR A OG1 1
+ATOM 2221 C CG2 . THR A 1 301 ? 21.683 21.687 41.192 1.00 8.85 ? ? ? ? ? ? 791 THR A CG2 1
+ATOM 2222 N N . PHE A 1 302 ? 23.193 23.712 38.720 1.00 7.35 ? ? ? ? ? ? 792 PHE A N 1
+ATOM 2223 C CA . PHE A 1 302 ? 23.182 23.679 37.247 1.00 7.22 ? ? ? ? ? ? 792 PHE A CA 1
+ATOM 2224 C C . PHE A 1 302 ? 23.632 22.268 36.821 1.00 6.18 ? ? ? ? ? ? 792 PHE A C 1
+ATOM 2225 O O . PHE A 1 302 ? 24.831 21.980 36.743 1.00 7.60 ? ? ? ? ? ? 792 PHE A O 1
+ATOM 2226 C CB . PHE A 1 302 ? 24.184 24.752 36.763 1.00 7.55 ? ? ? ? ? ? 792 PHE A CB 1
+ATOM 2227 C CG . PHE A 1 302 ? 24.131 25.044 35.269 1.00 8.86 ? ? ? ? ? ? 792 PHE A CG 1
+ATOM 2228 C CD1 . PHE A 1 302 ? 24.878 24.288 34.353 1.00 9.21 ? ? ? ? ? ? 792 PHE A CD1 1
+ATOM 2229 C CD2 . PHE A 1 302 ? 23.392 26.123 34.795 1.00 9.60 ? ? ? ? ? ? 792 PHE A CD2 1
+ATOM 2230 C CE1 . PHE A 1 302 ? 24.899 24.611 32.981 1.00 8.88 ? ? ? ? ? ? 792 PHE A CE1 1
+ATOM 2231 C CE2 . PHE A 1 302 ? 23.409 26.451 33.404 1.00 9.33 ? ? ? ? ? ? 792 PHE A CE2 1
+ATOM 2232 C CZ . PHE A 1 302 ? 24.163 25.695 32.519 1.00 8.97 ? ? ? ? ? ? 792 PHE A CZ 1
+ATOM 2233 N N . VAL A 1 303 ? 22.672 21.380 36.583 1.00 5.49 ? ? ? ? ? ? 793 VAL A N 1
+ATOM 2234 C CA . VAL A 1 303 ? 22.973 20.006 36.194 1.00 5.94 ? ? ? ? ? ? 793 VAL A CA 1
+ATOM 2235 C C . VAL A 1 303 ? 22.515 19.733 34.768 1.00 6.07 ? ? ? ? ? ? 793 VAL A C 1
+ATOM 2236 O O . VAL A 1 303 ? 21.356 20.010 34.408 1.00 6.80 ? ? ? ? ? ? 793 VAL A O 1
+ATOM 2237 C CB . VAL A 1 303 ? 22.299 18.964 37.184 1.00 6.86 ? ? ? ? ? ? 793 VAL A CB 1
+ATOM 2238 C CG1 . VAL A 1 303 ? 22.601 17.531 36.748 1.00 6.89 ? ? ? ? ? ? 793 VAL A CG1 1
+ATOM 2239 C CG2 . VAL A 1 303 ? 22.796 19.194 38.629 1.00 8.58 ? ? ? ? ? ? 793 VAL A CG2 1
+ATOM 2240 N N . MET A 1 304 ? 23.417 19.174 33.978 1.00 6.34 ? ? ? ? ? ? 794 MET A N 1
+ATOM 2241 C CA . MET A 1 304 ? 23.140 18.811 32.572 1.00 7.49 ? ? ? ? ? ? 794 MET A CA 1
+ATOM 2242 C C . MET A 1 304 ? 22.860 17.301 32.491 1.00 7.70 ? ? ? ? ? ? 794 MET A C 1
+ATOM 2243 O O . MET A 1 304 ? 23.393 16.505 33.301 1.00 7.76 ? ? ? ? ? ? 794 MET A O 1
+ATOM 2244 C CB . MET A 1 304 ? 24.349 19.183 31.682 1.00 8.28 ? ? ? ? ? ? 794 MET A CB 1
+ATOM 2245 C CG . MET A 1 304 ? 24.561 20.683 31.633 1.00 9.87 ? ? ? ? ? ? 794 MET A CG 1
+ATOM 2246 S SD . MET A 1 304 ? 26.189 21.211 31.028 1.00 10.70 ? ? ? ? ? ? 794 MET A SD 1
+ATOM 2247 C CE . MET A 1 304 ? 27.231 20.747 32.296 1.00 13.21 ? ? ? ? ? ? 794 MET A CE 1
+ATOM 2248 N N . TRP A 1 305 ? 22.036 16.888 31.540 1.00 7.39 ? ? ? ? ? ? 795 TRP A N 1
+ATOM 2249 C CA . TRP A 1 305 ? 21.716 15.478 31.421 1.00 7.77 ? ? ? ? ? ? 795 TRP A CA 1
+ATOM 2250 C C . TRP A 1 305 ? 22.749 14.747 30.572 1.00 7.54 ? ? ? ? ? ? 795 TRP A C 1
+ATOM 2251 O O . TRP A 1 305 ? 22.438 14.182 29.511 1.00 8.84 ? ? ? ? ? ? 795 TRP A O 1
+ATOM 2252 C CB . TRP A 1 305 ? 20.294 15.266 30.899 1.00 9.56 ? ? ? ? ? ? 795 TRP A CB 1
+ATOM 2253 C CG . TRP A 1 305 ? 19.617 14.024 31.478 1.00 11.66 ? ? ? ? ? ? 795 TRP A CG 1
+ATOM 2254 C CD1 . TRP A 1 305 ? 19.065 12.987 30.774 1.00 13.21 ? ? ? ? ? ? 795 TRP A CD1 1
+ATOM 2255 C CD2 . TRP A 1 305 ? 19.411 13.716 32.885 1.00 12.73 ? ? ? ? ? ? 795 TRP A CD2 1
+ATOM 2256 N NE1 . TRP A 1 305 ? 18.515 12.066 31.644 1.00 15.19 ? ? ? ? ? ? 795 TRP A NE1 1
+ATOM 2257 C CE2 . TRP A 1 305 ? 18.713 12.484 32.941 1.00 13.84 ? ? ? ? ? ? 795 TRP A CE2 1
+ATOM 2258 C CE3 . TRP A 1 305 ? 19.753 14.363 34.091 1.00 13.15 ? ? ? ? ? ? 795 TRP A CE3 1
+ATOM 2259 C CZ2 . TRP A 1 305 ? 18.340 11.877 34.168 1.00 14.51 ? ? ? ? ? ? 795 TRP A CZ2 1
+ATOM 2260 C CZ3 . TRP A 1 305 ? 19.380 13.756 35.335 1.00 13.66 ? ? ? ? ? ? 795 TRP A CZ3 1
+ATOM 2261 C CH2 . TRP A 1 305 ? 18.684 12.530 35.348 1.00 14.18 ? ? ? ? ? ? 795 TRP A CH2 1
+ATOM 2262 N N . GLY A 1 306 ? 23.972 14.728 31.100 1.00 7.39 ? ? ? ? ? ? 796 GLY A N 1
+ATOM 2263 C CA . GLY A 1 306 ? 25.094 14.097 30.447 1.00 7.06 ? ? ? ? ? ? 796 GLY A CA 1
+ATOM 2264 C C . GLY A 1 306 ? 26.106 15.165 30.072 1.00 8.00 ? ? ? ? ? ? 796 GLY A C 1
+ATOM 2265 O O . GLY A 1 306 ? 25.860 16.352 30.299 1.00 8.37 ? ? ? ? ? ? 796 GLY A O 1
+ATOM 2266 N N . PHE A 1 307 ? 27.270 14.752 29.574 1.00 7.64 ? ? ? ? ? ? 797 PHE A N 1
+ATOM 2267 C CA . PHE A 1 307 ? 28.286 15.716 29.144 1.00 8.99 ? ? ? ? ? ? 797 PHE A CA 1
+ATOM 2268 C C . PHE A 1 307 ? 28.901 15.410 27.768 1.00 9.89 ? ? ? ? ? ? 797 PHE A C 1
+ATOM 2269 O O . PHE A 1 307 ? 29.568 16.269 27.202 1.00 10.65 ? ? ? ? ? ? 797 PHE A O 1
+ATOM 2270 C CB . PHE A 1 307 ? 29.373 15.947 30.209 1.00 9.28 ? ? ? ? ? ? 797 PHE A CB 1
+ATOM 2271 C CG . PHE A 1 307 ? 30.185 14.717 30.562 1.00 9.57 ? ? ? ? ? ? 797 PHE A CG 1
+ATOM 2272 C CD1 . PHE A 1 307 ? 31.348 14.400 29.849 1.00 10.53 ? ? ? ? ? ? 797 PHE A CD1 1
+ATOM 2273 C CD2 . PHE A 1 307 ? 29.796 13.890 31.616 1.00 10.81 ? ? ? ? ? ? 797 PHE A CD2 1
+ATOM 2274 C CE1 . PHE A 1 307 ? 32.115 13.273 30.178 1.00 10.77 ? ? ? ? ? ? 797 PHE A CE1 1
+ATOM 2275 C CE2 . PHE A 1 307 ? 30.549 12.761 31.961 1.00 11.04 ? ? ? ? ? ? 797 PHE A CE2 1
+ATOM 2276 C CZ . PHE A 1 307 ? 31.709 12.449 31.244 1.00 11.41 ? ? ? ? ? ? 797 PHE A CZ 1
+ATOM 2277 N N . THR A 1 308 ? 28.712 14.208 27.236 1.00 8.95 ? ? ? ? ? ? 798 THR A N 1
+ATOM 2278 C CA . THR A 1 308 ? 29.241 13.909 25.905 1.00 9.31 ? ? ? ? ? ? 798 THR A CA 1
+ATOM 2279 C C . THR A 1 308 ? 28.103 13.454 25.007 1.00 10.39 ? ? ? ? ? ? 798 THR A C 1
+ATOM 2280 O O . THR A 1 308 ? 27.234 12.674 25.413 1.00 9.19 ? ? ? ? ? ? 798 THR A O 1
+ATOM 2281 C CB . THR A 1 308 ? 30.376 12.848 25.901 1.00 9.26 ? ? ? ? ? ? 798 THR A CB 1
+ATOM 2282 O OG1 . THR A 1 308 ? 30.632 12.447 24.554 1.00 10.64 ? ? ? ? ? ? 798 THR A OG1 1
+ATOM 2283 C CG2 . THR A 1 308 ? 29.974 11.579 26.668 1.00 10.15 ? ? ? ? ? ? 798 THR A CG2 1
+ATOM 2284 N N . ASP A 1 309 ? 28.084 13.983 23.781 1.00 11.12 ? ? ? ? ? ? 799 ASP A N 1
+ATOM 2285 C CA . ASP A 1 309 ? 27.085 13.622 22.798 1.00 11.10 ? ? ? ? ? ? 799 ASP A CA 1
+ATOM 2286 C C . ASP A 1 309 ? 27.049 12.106 22.529 1.00 11.13 ? ? ? ? ? ? 799 ASP A C 1
+ATOM 2287 O O . ASP A 1 309 ? 26.093 11.601 21.910 1.00 12.20 ? ? ? ? ? ? 799 ASP A O 1
+ATOM 2288 C CB . ASP A 1 309 ? 27.385 14.346 21.487 1.00 11.83 ? ? ? ? ? ? 799 ASP A CB 1
+ATOM 2289 C CG . ASP A 1 309 ? 27.107 15.831 21.552 1.00 13.37 ? ? ? ? ? ? 799 ASP A CG 1
+ATOM 2290 O OD1 . ASP A 1 309 ? 26.357 16.288 22.443 1.00 12.18 ? ? ? ? ? ? 799 ASP A OD1 1
+ATOM 2291 O OD2 . ASP A 1 309 ? 27.618 16.552 20.665 1.00 13.71 ? ? ? ? ? ? 799 ASP A OD2 1
+ATOM 2292 N N . LYS A 1 310 ? 28.093 11.389 22.954 1.00 10.53 ? ? ? ? ? ? 800 LYS A N 1
+ATOM 2293 C CA . LYS A 1 310 ? 28.183 9.933 22.787 1.00 11.86 ? ? ? ? ? ? 800 LYS A CA 1
+ATOM 2294 C C . LYS A 1 310 ? 27.056 9.173 23.521 1.00 12.51 ? ? ? ? ? ? 800 LYS A C 1
+ATOM 2295 O O . LYS A 1 310 ? 26.574 8.134 23.048 1.00 12.74 ? ? ? ? ? ? 800 LYS A O 1
+ATOM 2296 C CB . LYS A 1 310 ? 29.541 9.450 23.312 1.00 13.34 ? ? ? ? ? ? 800 LYS A CB 1
+ATOM 2297 C CG . LYS A 1 310 ? 29.888 8.015 23.000 1.00 14.39 ? ? ? ? ? ? 800 LYS A CG 1
+ATOM 2298 C CD . LYS A 1 310 ? 31.345 7.718 23.383 1.00 14.66 ? ? ? ? ? ? 800 LYS A CD 1
+ATOM 2299 C CE . LYS A 1 310 ? 31.665 6.252 23.133 1.00 16.71 ? ? ? ? ? ? 800 LYS A CE 1
+ATOM 2300 N NZ . LYS A 1 310 ? 33.111 5.946 23.336 1.00 19.37 ? ? ? ? ? ? 800 LYS A NZ 1
+ATOM 2301 N N . TYR A 1 311 ? 26.656 9.693 24.686 1.00 11.82 ? ? ? ? ? ? 801 TYR A N 1
+ATOM 2302 C CA . TYR A 1 311 ? 25.624 9.068 25.527 1.00 11.92 ? ? ? ? ? ? 801 TYR A CA 1
+ATOM 2303 C C . TYR A 1 311 ? 24.503 10.062 25.838 1.00 10.53 ? ? ? ? ? ? 801 TYR A C 1
+ATOM 2304 O O . TYR A 1 311 ? 24.684 10.976 26.653 1.00 11.00 ? ? ? ? ? ? 801 TYR A O 1
+ATOM 2305 C CB . TYR A 1 311 ? 26.250 8.569 26.864 1.00 11.88 ? ? ? ? ? ? 801 TYR A CB 1
+ATOM 2306 C CG . TYR A 1 311 ? 27.460 7.665 26.703 1.00 12.43 ? ? ? ? ? ? 801 TYR A CG 1
+ATOM 2307 C CD1 . TYR A 1 311 ? 27.371 6.447 26.003 1.00 13.47 ? ? ? ? ? ? 801 TYR A CD1 1
+ATOM 2308 C CD2 . TYR A 1 311 ? 28.691 8.015 27.250 1.00 12.35 ? ? ? ? ? ? 801 TYR A CD2 1
+ATOM 2309 C CE1 . TYR A 1 311 ? 28.475 5.604 25.851 1.00 13.61 ? ? ? ? ? ? 801 TYR A CE1 1
+ATOM 2310 C CE2 . TYR A 1 311 ? 29.802 7.182 27.107 1.00 13.56 ? ? ? ? ? ? 801 TYR A CE2 1
+ATOM 2311 C CZ . TYR A 1 311 ? 29.683 5.977 26.403 1.00 14.17 ? ? ? ? ? ? 801 TYR A CZ 1
+ATOM 2312 O OH . TYR A 1 311 ? 30.767 5.161 26.257 1.00 14.68 ? ? ? ? ? ? 801 TYR A OH 1
+ATOM 2313 N N . THR A 1 312 ? 23.353 9.883 25.191 1.00 10.49 ? ? ? ? ? ? 802 THR A N 1
+ATOM 2314 C CA . THR A 1 312 ? 22.216 10.763 25.418 1.00 10.35 ? ? ? ? ? ? 802 THR A CA 1
+ATOM 2315 C C . THR A 1 312 ? 20.893 10.119 25.030 1.00 9.86 ? ? ? ? ? ? 802 THR A C 1
+ATOM 2316 O O . THR A 1 312 ? 20.807 9.411 24.034 1.00 10.95 ? ? ? ? ? ? 802 THR A O 1
+ATOM 2317 C CB . THR A 1 312 ? 22.375 12.131 24.677 1.00 10.50 ? ? ? ? ? ? 802 THR A CB 1
+ATOM 2318 O OG1 . THR A 1 312 ? 21.154 12.890 24.786 1.00 10.71 ? ? ? ? ? ? 802 THR A OG1 1
+ATOM 2319 C CG2 . THR A 1 312 ? 22.761 11.926 23.190 1.00 9.80 ? ? ? ? ? ? 802 THR A CG2 1
+ATOM 2320 N N . TRP A 1 313 ? 19.864 10.380 25.828 1.00 9.97 ? ? ? ? ? ? 803 TRP A N 1
+ATOM 2321 C CA . TRP A 1 313 ? 18.526 9.865 25.574 1.00 11.28 ? ? ? ? ? ? 803 TRP A CA 1
+ATOM 2322 C C . TRP A 1 313 ? 17.800 10.641 24.460 1.00 10.83 ? ? ? ? ? ? 803 TRP A C 1
+ATOM 2323 O O . TRP A 1 313 ? 16.716 10.221 24.013 1.00 12.09 ? ? ? ? ? ? 803 TRP A O 1
+ATOM 2324 C CB . TRP A 1 313 ? 17.663 10.000 26.854 1.00 11.75 ? ? ? ? ? ? 803 TRP A CB 1
+ATOM 2325 C CG . TRP A 1 313 ? 17.221 11.450 27.176 1.00 12.56 ? ? ? ? ? ? 803 TRP A CG 1
+ATOM 2326 C CD1 . TRP A 1 313 ? 18.033 12.565 27.259 1.00 12.22 ? ? ? ? ? ? 803 TRP A CD1 1
+ATOM 2327 C CD2 . TRP A 1 313 ? 15.885 11.921 27.412 1.00 13.47 ? ? ? ? ? ? 803 TRP A CD2 1
+ATOM 2328 N NE1 . TRP A 1 313 ? 17.281 13.678 27.513 1.00 12.19 ? ? ? ? ? ? 803 TRP A NE1 1
+ATOM 2329 C CE2 . TRP A 1 313 ? 15.961 13.323 27.609 1.00 13.80 ? ? ? ? ? ? 803 TRP A CE2 1
+ATOM 2330 C CE3 . TRP A 1 313 ? 14.627 11.294 27.468 1.00 15.15 ? ? ? ? ? ? 803 TRP A CE3 1
+ATOM 2331 C CZ2 . TRP A 1 313 ? 14.817 14.122 27.856 1.00 14.95 ? ? ? ? ? ? 803 TRP A CZ2 1
+ATOM 2332 C CZ3 . TRP A 1 313 ? 13.491 12.080 27.715 1.00 16.35 ? ? ? ? ? ? 803 TRP A CZ3 1
+ATOM 2333 C CH2 . TRP A 1 313 ? 13.599 13.490 27.905 1.00 16.48 ? ? ? ? ? ? 803 TRP A CH2 1
+ATOM 2334 N N . ILE A 1 314 ? 18.366 11.771 24.033 1.00 9.90 ? ? ? ? ? ? 804 ILE A N 1
+ATOM 2335 C CA . ILE A 1 314 ? 17.674 12.633 23.065 1.00 11.91 ? ? ? ? ? ? 804 ILE A CA 1
+ATOM 2336 C C . ILE A 1 314 ? 17.155 12.015 21.760 1.00 12.44 ? ? ? ? ? ? 804 ILE A C 1
+ATOM 2337 O O . ILE A 1 314 ? 15.965 12.137 21.465 1.00 13.19 ? ? ? ? ? ? 804 ILE A O 1
+ATOM 2338 C CB . ILE A 1 314 ? 18.445 13.979 22.817 1.00 11.48 ? ? ? ? ? ? 804 ILE A CB 1
+ATOM 2339 C CG1 . ILE A 1 314 ? 18.355 14.855 24.073 1.00 10.60 ? ? ? ? ? ? 804 ILE A CG1 1
+ATOM 2340 C CG2 . ILE A 1 314 ? 17.871 14.726 21.603 1.00 12.27 ? ? ? ? ? ? 804 ILE A CG2 1
+ATOM 2341 C CD1 . ILE A 1 314 ? 16.946 15.332 24.401 1.00 11.47 ? ? ? ? ? ? 804 ILE A CD1 1
+ATOM 2342 N N . PRO A 1 315 ? 18.017 11.307 21.007 1.00 14.23 ? ? ? ? ? ? 805 PRO A N 1
+ATOM 2343 C CA . PRO A 1 315 ? 17.589 10.685 19.740 1.00 16.11 ? ? ? ? ? ? 805 PRO A CA 1
+ATOM 2344 C C . PRO A 1 315 ? 16.423 9.699 19.855 1.00 17.14 ? ? ? ? ? ? 805 PRO A C 1
+ATOM 2345 O O . PRO A 1 315 ? 15.598 9.584 18.948 1.00 18.92 ? ? ? ? ? ? 805 PRO A O 1
+ATOM 2346 C CB . PRO A 1 315 ? 18.863 9.991 19.260 1.00 16.16 ? ? ? ? ? ? 805 PRO A CB 1
+ATOM 2347 C CG . PRO A 1 315 ? 19.966 10.905 19.769 1.00 15.92 ? ? ? ? ? ? 805 PRO A CG 1
+ATOM 2348 C CD . PRO A 1 315 ? 19.480 11.182 21.185 1.00 14.19 ? ? ? ? ? ? 805 PRO A CD 1
+ATOM 2349 N N . GLY A 1 316 ? 16.338 9.007 20.979 1.00 18.02 ? ? ? ? ? ? 806 GLY A N 1
+ATOM 2350 C CA . GLY A 1 316 ? 15.274 8.040 21.177 1.00 19.00 ? ? ? ? ? ? 806 GLY A CA 1
+ATOM 2351 C C . GLY A 1 316 ? 13.931 8.660 21.504 1.00 20.58 ? ? ? ? ? ? 806 GLY A C 1
+ATOM 2352 O O . GLY A 1 316 ? 12.874 8.053 21.292 1.00 22.29 ? ? ? ? ? ? 806 GLY A O 1
+ATOM 2353 N N . THR A 1 317 ? 13.945 9.857 22.063 1.00 19.90 ? ? ? ? ? ? 807 THR A N 1
+ATOM 2354 C CA . THR A 1 317 ? 12.688 10.477 22.408 1.00 20.86 ? ? ? ? ? ? 807 THR A CA 1
+ATOM 2355 C C . THR A 1 317 ? 12.282 11.526 21.391 1.00 20.03 ? ? ? ? ? ? 807 THR A C 1
+ATOM 2356 O O . THR A 1 317 ? 11.091 11.746 21.139 1.00 20.37 ? ? ? ? ? ? 807 THR A O 1
+ATOM 2357 C CB . THR A 1 317 ? 12.754 11.060 23.818 1.00 23.13 ? ? ? ? ? ? 807 THR A CB 1
+ATOM 2358 O OG1 . THR A 1 317 ? 12.976 9.990 24.753 1.00 26.29 ? ? ? ? ? ? 807 THR A OG1 1
+ATOM 2359 C CG2 . THR A 1 317 ? 11.468 11.776 24.170 1.00 24.19 ? ? ? ? ? ? 807 THR A CG2 1
+ATOM 2360 N N . PHE A 1 318 ? 13.271 12.167 20.790 1.00 18.29 ? ? ? ? ? ? 808 PHE A N 1
+ATOM 2361 C CA . PHE A 1 318 ? 12.987 13.170 19.789 1.00 17.71 ? ? ? ? ? ? 808 PHE A CA 1
+ATOM 2362 C C . PHE A 1 318 ? 13.743 12.731 18.536 1.00 17.75 ? ? ? ? ? ? 808 PHE A C 1
+ATOM 2363 O O . PHE A 1 318 ? 14.864 13.194 18.294 1.00 17.78 ? ? ? ? ? ? 808 PHE A O 1
+ATOM 2364 C CB . PHE A 1 318 ? 13.477 14.550 20.263 1.00 17.58 ? ? ? ? ? ? 808 PHE A CB 1
+ATOM 2365 C CG . PHE A 1 318 ? 12.984 14.937 21.621 1.00 18.68 ? ? ? ? ? ? 808 PHE A CG 1
+ATOM 2366 C CD1 . PHE A 1 318 ? 11.747 15.558 21.781 1.00 19.72 ? ? ? ? ? ? 808 PHE A CD1 1
+ATOM 2367 C CD2 . PHE A 1 318 ? 13.738 14.651 22.756 1.00 19.53 ? ? ? ? ? ? 808 PHE A CD2 1
+ATOM 2368 C CE1 . PHE A 1 318 ? 11.253 15.894 23.075 1.00 19.96 ? ? ? ? ? ? 808 PHE A CE1 1
+ATOM 2369 C CE2 . PHE A 1 318 ? 13.255 14.981 24.061 1.00 21.13 ? ? ? ? ? ? 808 PHE A CE2 1
+ATOM 2370 C CZ . PHE A 1 318 ? 12.011 15.602 24.215 1.00 20.56 ? ? ? ? ? ? 808 PHE A CZ 1
+ATOM 2371 N N . PRO A 1 319 ? 13.202 11.756 17.776 1.00 18.08 ? ? ? ? ? ? 809 PRO A N 1
+ATOM 2372 C CA . PRO A 1 319 ? 13.927 11.336 16.566 1.00 19.03 ? ? ? ? ? ? 809 PRO A CA 1
+ATOM 2373 C C . PRO A 1 319 ? 14.093 12.542 15.617 1.00 19.40 ? ? ? ? ? ? 809 PRO A C 1
+ATOM 2374 O O . PRO A 1 319 ? 13.196 13.393 15.484 1.00 20.53 ? ? ? ? ? ? 809 PRO A O 1
+ATOM 2375 C CB . PRO A 1 319 ? 13.060 10.199 15.993 1.00 19.57 ? ? ? ? ? ? 809 PRO A CB 1
+ATOM 2376 C CG . PRO A 1 319 ? 11.709 10.448 16.576 1.00 19.39 ? ? ? ? ? ? 809 PRO A CG 1
+ATOM 2377 C CD . PRO A 1 319 ? 11.986 10.954 17.974 1.00 18.78 ? ? ? ? ? ? 809 PRO A CD 1
+ATOM 2378 N N . GLY A 1 320 ? 15.277 12.654 15.037 1.00 18.26 ? ? ? ? ? ? 810 GLY A N 1
+ATOM 2379 C CA . GLY A 1 320 ? 15.567 13.793 14.189 1.00 18.03 ? ? ? ? ? ? 810 GLY A CA 1
+ATOM 2380 C C . GLY A 1 320 ? 16.421 14.849 14.905 1.00 18.33 ? ? ? ? ? ? 810 GLY A C 1
+ATOM 2381 O O . GLY A 1 320 ? 16.886 15.780 14.250 1.00 19.07 ? ? ? ? ? ? 810 GLY A O 1
+ATOM 2382 N N . TYR A 1 321 ? 16.627 14.725 16.227 1.00 16.62 ? ? ? ? ? ? 811 TYR A N 1
+ATOM 2383 C CA . TYR A 1 321 ? 17.431 15.667 17.029 1.00 15.26 ? ? ? ? ? ? 811 TYR A CA 1
+ATOM 2384 C C . TYR A 1 321 ? 18.615 14.952 17.647 1.00 14.35 ? ? ? ? ? ? 811 TYR A C 1
+ATOM 2385 O O . TYR A 1 321 ? 18.583 13.744 17.807 1.00 14.62 ? ? ? ? ? ? 811 TYR A O 1
+ATOM 2386 C CB . TYR A 1 321 ? 16.583 16.278 18.147 1.00 15.39 ? ? ? ? ? ? 811 TYR A CB 1
+ATOM 2387 C CG . TYR A 1 321 ? 15.597 17.277 17.633 1.00 17.20 ? ? ? ? ? ? 811 TYR A CG 1
+ATOM 2388 C CD1 . TYR A 1 321 ? 14.356 16.874 17.133 1.00 18.54 ? ? ? ? ? ? 811 TYR A CD1 1
+ATOM 2389 C CD2 . TYR A 1 321 ? 15.917 18.630 17.602 1.00 17.75 ? ? ? ? ? ? 811 TYR A CD2 1
+ATOM 2390 C CE1 . TYR A 1 321 ? 13.457 17.810 16.609 1.00 20.31 ? ? ? ? ? ? 811 TYR A CE1 1
+ATOM 2391 C CE2 . TYR A 1 321 ? 15.046 19.561 17.095 1.00 19.62 ? ? ? ? ? ? 811 TYR A CE2 1
+ATOM 2392 C CZ . TYR A 1 321 ? 13.820 19.153 16.600 1.00 21.15 ? ? ? ? ? ? 811 TYR A CZ 1
+ATOM 2393 O OH . TYR A 1 321 ? 12.973 20.113 16.105 1.00 24.01 ? ? ? ? ? ? 811 TYR A OH 1
+ATOM 2394 N N . GLY A 1 322 ? 19.651 15.700 18.024 1.00 13.61 ? ? ? ? ? ? 812 GLY A N 1
+ATOM 2395 C CA . GLY A 1 322 ? 20.821 15.091 18.628 1.00 12.10 ? ? ? ? ? ? 812 GLY A CA 1
+ATOM 2396 C C . GLY A 1 322 ? 21.836 16.126 19.066 1.00 10.88 ? ? ? ? ? ? 812 GLY A C 1
+ATOM 2397 O O . GLY A 1 322 ? 21.477 17.297 19.255 1.00 11.82 ? ? ? ? ? ? 812 GLY A O 1
+ATOM 2398 N N . ASN A 1 323 ? 23.074 15.673 19.287 1.00 11.36 ? ? ? ? ? ? 813 ASN A N 1
+ATOM 2399 C CA . ASN A 1 323 ? 24.233 16.506 19.700 1.00 12.67 ? ? ? ? ? ? 813 ASN A CA 1
+ATOM 2400 C C . ASN A 1 323 ? 23.823 17.600 20.705 1.00 11.40 ? ? ? ? ? ? 813 ASN A C 1
+ATOM 2401 O O . ASN A 1 323 ? 24.161 18.779 20.534 1.00 10.15 ? ? ? ? ? ? 813 ASN A O 1
+ATOM 2402 C CB . ASN A 1 323 ? 24.856 17.148 18.437 1.00 15.20 ? ? ? ? ? ? 813 ASN A CB 1
+ATOM 2403 C CG . ASN A 1 323 ? 25.318 16.101 17.399 1.00 18.69 ? ? ? ? ? ? 813 ASN A CG 1
+ATOM 2404 O OD1 . ASN A 1 323 ? 24.891 16.132 16.232 1.00 22.50 ? ? ? ? ? ? 813 ASN A OD1 1
+ATOM 2405 N ND2 . ASN A 1 323 ? 26.166 15.165 17.824 1.00 19.74 ? ? ? ? ? ? 813 ASN A ND2 1
+ATOM 2406 N N . PRO A 1 324 ? 23.275 17.182 21.863 1.00 9.84 ? ? ? ? ? ? 814 PRO A N 1
+ATOM 2407 C CA . PRO A 1 324 ? 22.803 18.139 22.861 1.00 9.16 ? ? ? ? ? ? 814 PRO A CA 1
+ATOM 2408 C C . PRO A 1 324 ? 23.707 18.607 23.971 1.00 7.36 ? ? ? ? ? ? 814 PRO A C 1
+ATOM 2409 O O . PRO A 1 324 ? 23.285 19.485 24.727 1.00 8.08 ? ? ? ? ? ? 814 PRO A O 1
+ATOM 2410 C CB . PRO A 1 324 ? 21.614 17.368 23.516 1.00 8.69 ? ? ? ? ? ? 814 PRO A CB 1
+ATOM 2411 C CG . PRO A 1 324 ? 21.648 15.943 22.916 1.00 9.66 ? ? ? ? ? ? 814 PRO A CG 1
+ATOM 2412 C CD . PRO A 1 324 ? 23.039 15.809 22.346 1.00 10.13 ? ? ? ? ? ? 814 PRO A CD 1
+ATOM 2413 N N . LEU A 1 325 ? 24.928 18.080 24.020 1.00 8.09 ? ? ? ? ? ? 815 LEU A N 1
+ATOM 2414 C CA . LEU A 1 325 ? 25.825 18.289 25.163 1.00 9.26 ? ? ? ? ? ? 815 LEU A CA 1
+ATOM 2415 C C . LEU A 1 325 ? 27.119 19.089 24.945 1.00 9.98 ? ? ? ? ? ? 815 LEU A C 1
+ATOM 2416 O O . LEU A 1 325 ? 27.347 19.571 23.857 1.00 10.44 ? ? ? ? ? ? 815 LEU A O 1
+ATOM 2417 C CB . LEU A 1 325 ? 26.051 16.923 25.847 1.00 8.58 ? ? ? ? ? ? 815 LEU A CB 1
+ATOM 2418 C CG . LEU A 1 325 ? 24.724 16.170 26.141 1.00 9.21 ? ? ? ? ? ? 815 LEU A CG 1
+ATOM 2419 C CD1 . LEU A 1 325 ? 24.955 14.714 26.526 1.00 9.54 ? ? ? ? ? ? 815 LEU A CD1 1
+ATOM 2420 C CD2 . LEU A 1 325 ? 23.891 16.923 27.190 1.00 10.37 ? ? ? ? ? ? 815 LEU A CD2 1
+ATOM 2421 N N . ILE A 1 326 ? 27.980 19.197 25.955 1.00 9.94 ? ? ? ? ? ? 816 ILE A N 1
+ATOM 2422 C CA . ILE A 1 326 ? 29.161 20.059 25.845 1.00 10.42 ? ? ? ? ? ? 816 ILE A CA 1
+ATOM 2423 C C . ILE A 1 326 ? 30.452 19.489 25.311 1.00 11.62 ? ? ? ? ? ? 816 ILE A C 1
+ATOM 2424 O O . ILE A 1 326 ? 31.414 20.262 25.072 1.00 12.59 ? ? ? ? ? ? 816 ILE A O 1
+ATOM 2425 C CB . ILE A 1 326 ? 29.409 20.894 27.130 1.00 10.43 ? ? ? ? ? ? 816 ILE A CB 1
+ATOM 2426 C CG1 . ILE A 1 326 ? 29.907 20.004 28.273 1.00 10.94 ? ? ? ? ? ? 816 ILE A CG1 1
+ATOM 2427 C CG2 . ILE A 1 326 ? 28.127 21.700 27.517 1.00 10.20 ? ? ? ? ? ? 816 ILE A CG2 1
+ATOM 2428 C CD1 . ILE A 1 326 ? 30.164 20.813 29.562 1.00 12.17 ? ? ? ? ? ? 816 ILE A CD1 1
+ATOM 2429 N N . TYR A 1 327 ? 30.515 18.160 25.194 1.00 10.91 ? ? ? ? ? ? 817 TYR A N 1
+ATOM 2430 C CA . TYR A 1 327 ? 31.657 17.467 24.584 1.00 11.73 ? ? ? ? ? ? 817 TYR A CA 1
+ATOM 2431 C C . TYR A 1 327 ? 31.057 16.658 23.438 1.00 13.04 ? ? ? ? ? ? 817 TYR A C 1
+ATOM 2432 O O . TYR A 1 327 ? 29.930 16.125 23.546 1.00 11.41 ? ? ? ? ? ? 817 TYR A O 1
+ATOM 2433 C CB . TYR A 1 327 ? 32.340 16.456 25.519 1.00 11.17 ? ? ? ? ? ? 817 TYR A CB 1
+ATOM 2434 C CG . TYR A 1 327 ? 33.184 17.068 26.592 1.00 11.22 ? ? ? ? ? ? 817 TYR A CG 1
+ATOM 2435 C CD1 . TYR A 1 327 ? 32.616 17.477 27.793 1.00 10.70 ? ? ? ? ? ? 817 TYR A CD1 1
+ATOM 2436 C CD2 . TYR A 1 327 ? 34.559 17.207 26.429 1.00 12.19 ? ? ? ? ? ? 817 TYR A CD2 1
+ATOM 2437 C CE1 . TYR A 1 327 ? 33.380 17.999 28.807 1.00 12.01 ? ? ? ? ? ? 817 TYR A CE1 1
+ATOM 2438 C CE2 . TYR A 1 327 ? 35.349 17.737 27.451 1.00 12.70 ? ? ? ? ? ? 817 TYR A CE2 1
+ATOM 2439 C CZ . TYR A 1 327 ? 34.741 18.127 28.644 1.00 13.25 ? ? ? ? ? ? 817 TYR A CZ 1
+ATOM 2440 O OH . TYR A 1 327 ? 35.498 18.620 29.690 1.00 15.87 ? ? ? ? ? ? 817 TYR A OH 1
+ATOM 2441 N N . ASP A 1 328 ? 31.819 16.542 22.349 1.00 13.44 ? ? ? ? ? ? 818 ASP A N 1
+ATOM 2442 C CA . ASP A 1 328 ? 31.338 15.771 21.236 1.00 14.99 ? ? ? ? ? ? 818 ASP A CA 1
+ATOM 2443 C C . ASP A 1 328 ? 31.576 14.300 21.542 1.00 15.86 ? ? ? ? ? ? 818 ASP A C 1
+ATOM 2444 O O . ASP A 1 328 ? 32.012 13.962 22.647 1.00 14.85 ? ? ? ? ? ? 818 ASP A O 1
+ATOM 2445 C CB . ASP A 1 328 ? 31.922 16.260 19.887 1.00 16.12 ? ? ? ? ? ? 818 ASP A CB 1
+ATOM 2446 C CG . ASP A 1 328 ? 33.417 15.981 19.714 1.00 17.99 ? ? ? ? ? ? 818 ASP A CG 1
+ATOM 2447 O OD1 . ASP A 1 328 ? 34.032 15.182 20.450 1.00 16.77 ? ? ? ? ? ? 818 ASP A OD1 1
+ATOM 2448 O OD2 . ASP A 1 328 ? 33.993 16.585 18.780 1.00 19.79 ? ? ? ? ? ? 818 ASP A OD2 1
+ATOM 2449 N N . SER A 1 329 ? 31.243 13.431 20.589 1.00 17.08 ? ? ? ? ? ? 819 SER A N 1
+ATOM 2450 C CA . SER A 1 329 ? 31.396 11.984 20.748 1.00 19.29 ? ? ? ? ? ? 819 SER A CA 1
+ATOM 2451 C C . SER A 1 329 ? 32.800 11.488 20.891 1.00 20.46 ? ? ? ? ? ? 819 SER A C 1
+ATOM 2452 O O . SER A 1 329 ? 32.987 10.334 21.280 1.00 21.54 ? ? ? ? ? ? 819 SER A O 1
+ATOM 2453 C CB . SER A 1 329 ? 30.744 11.235 19.598 1.00 21.26 ? ? ? ? ? ? 819 SER A CB 1
+ATOM 2454 O OG . SER A 1 329 ? 29.363 11.525 19.575 1.00 25.86 ? ? ? ? ? ? 819 SER A OG 1
+ATOM 2455 N N . ASN A 1 330 ? 33.780 12.318 20.525 1.00 21.11 ? ? ? ? ? ? 820 ASN A N 1
+ATOM 2456 C CA . ASN A 1 330 ? 35.206 11.968 20.642 1.00 22.86 ? ? ? ? ? ? 820 ASN A CA 1
+ATOM 2457 C C . ASN A 1 330 ? 35.869 12.641 21.825 1.00 21.96 ? ? ? ? ? ? 820 ASN A C 1
+ATOM 2458 O O . ASN A 1 330 ? 37.100 12.669 21.934 1.00 22.33 ? ? ? ? ? ? 820 ASN A O 1
+ATOM 2459 C CB . ASN A 1 330 ? 35.972 12.374 19.384 1.00 26.07 ? ? ? ? ? ? 820 ASN A CB 1
+ATOM 2460 C CG . ASN A 1 330 ? 35.385 11.767 18.155 1.00 29.63 ? ? ? ? ? ? 820 ASN A CG 1
+ATOM 2461 O OD1 . ASN A 1 330 ? 34.908 12.482 17.258 1.00 32.36 ? ? ? ? ? ? 820 ASN A OD1 1
+ATOM 2462 N ND2 . ASN A 1 330 ? 35.322 10.433 18.130 1.00 31.13 ? ? ? ? ? ? 820 ASN A ND2 1
+ATOM 2463 N N . TYR A 1 331 ? 35.041 13.214 22.694 1.00 19.84 ? ? ? ? ? ? 821 TYR A N 1
+ATOM 2464 C CA . TYR A 1 331 ? 35.495 13.919 23.881 1.00 18.97 ? ? ? ? ? ? 821 TYR A CA 1
+ATOM 2465 C C . TYR A 1 331 ? 36.243 15.233 23.622 1.00 18.33 ? ? ? ? ? ? 821 TYR A C 1
+ATOM 2466 O O . TYR A 1 331 ? 37.013 15.715 24.459 1.00 18.20 ? ? ? ? ? ? 821 TYR A O 1
+ATOM 2467 C CB . TYR A 1 331 ? 36.231 12.981 24.861 1.00 18.34 ? ? ? ? ? ? 821 TYR A CB 1
+ATOM 2468 C CG . TYR A 1 331 ? 35.330 11.886 25.421 1.00 17.65 ? ? ? ? ? ? 821 TYR A CG 1
+ATOM 2469 C CD1 . TYR A 1 331 ? 34.399 12.168 26.423 1.00 16.97 ? ? ? ? ? ? 821 TYR A CD1 1
+ATOM 2470 C CD2 . TYR A 1 331 ? 35.387 10.578 24.920 1.00 17.21 ? ? ? ? ? ? 821 TYR A CD2 1
+ATOM 2471 C CE1 . TYR A 1 331 ? 33.546 11.174 26.919 1.00 16.81 ? ? ? ? ? ? 821 TYR A CE1 1
+ATOM 2472 C CE2 . TYR A 1 331 ? 34.537 9.579 25.406 1.00 17.65 ? ? ? ? ? ? 821 TYR A CE2 1
+ATOM 2473 C CZ . TYR A 1 331 ? 33.619 9.891 26.414 1.00 17.12 ? ? ? ? ? ? 821 TYR A CZ 1
+ATOM 2474 O OH . TYR A 1 331 ? 32.809 8.913 26.946 1.00 15.77 ? ? ? ? ? ? 821 TYR A OH 1
+ATOM 2475 N N . ASN A 1 332 ? 35.971 15.840 22.473 1.00 18.49 ? ? ? ? ? ? 822 ASN A N 1
+ATOM 2476 C CA . ASN A 1 332 ? 36.562 17.139 22.189 1.00 18.20 ? ? ? ? ? ? 822 ASN A CA 1
+ATOM 2477 C C . ASN A 1 332 ? 35.553 18.103 22.727 1.00 16.51 ? ? ? ? ? ? 822 ASN A C 1
+ATOM 2478 O O . ASN A 1 332 ? 34.369 17.969 22.437 1.00 17.16 ? ? ? ? ? ? 822 ASN A O 1
+ATOM 2479 C CB . ASN A 1 332 ? 36.668 17.429 20.696 1.00 21.02 ? ? ? ? ? ? 822 ASN A CB 1
+ATOM 2480 C CG . ASN A 1 332 ? 37.546 16.452 19.969 1.00 23.10 ? ? ? ? ? ? 822 ASN A CG 1
+ATOM 2481 O OD1 . ASN A 1 332 ? 38.703 16.259 20.326 1.00 25.21 ? ? ? ? ? ? 822 ASN A OD1 1
+ATOM 2482 N ND2 . ASN A 1 332 ? 36.994 15.819 18.932 1.00 24.58 ? ? ? ? ? ? 822 ASN A ND2 1
+ATOM 2483 N N . PRO A 1 333 ? 35.995 19.099 23.496 1.00 16.71 ? ? ? ? ? ? 823 PRO A N 1
+ATOM 2484 C CA . PRO A 1 333 ? 35.042 20.082 24.040 1.00 16.17 ? ? ? ? ? ? 823 PRO A CA 1
+ATOM 2485 C C . PRO A 1 333 ? 34.444 20.875 22.865 1.00 15.63 ? ? ? ? ? ? 823 PRO A C 1
+ATOM 2486 O O . PRO A 1 333 ? 35.152 21.224 21.910 1.00 15.91 ? ? ? ? ? ? 823 PRO A O 1
+ATOM 2487 C CB . PRO A 1 333 ? 35.924 21.012 24.897 1.00 17.17 ? ? ? ? ? ? 823 PRO A CB 1
+ATOM 2488 C CG . PRO A 1 333 ? 37.258 20.275 25.053 1.00 17.76 ? ? ? ? ? ? 823 PRO A CG 1
+ATOM 2489 C CD . PRO A 1 333 ? 37.396 19.453 23.810 1.00 16.99 ? ? ? ? ? ? 823 PRO A CD 1
+ATOM 2490 N N . LYS A 1 334 ? 33.139 21.085 22.909 1.00 13.57 ? ? ? ? ? ? 824 LYS A N 1
+ATOM 2491 C CA . LYS A 1 334 ? 32.423 21.863 21.889 1.00 12.32 ? ? ? ? ? ? 824 LYS A CA 1
+ATOM 2492 C C . LYS A 1 334 ? 32.449 23.355 22.309 1.00 12.09 ? ? ? ? ? ? 824 LYS A C 1
+ATOM 2493 O O . LYS A 1 334 ? 32.884 23.693 23.427 1.00 12.30 ? ? ? ? ? ? 824 LYS A O 1
+ATOM 2494 C CB . LYS A 1 334 ? 30.979 21.342 21.770 1.00 11.52 ? ? ? ? ? ? 824 LYS A CB 1
+ATOM 2495 C CG . LYS A 1 334 ? 30.916 19.968 21.123 1.00 11.54 ? ? ? ? ? ? 824 LYS A CG 1
+ATOM 2496 C CD . LYS A 1 334 ? 29.569 19.254 21.306 1.00 11.61 ? ? ? ? ? ? 824 LYS A CD 1
+ATOM 2497 C CE . LYS A 1 334 ? 28.399 20.006 20.747 1.00 11.08 ? ? ? ? ? ? 824 LYS A CE 1
+ATOM 2498 N NZ . LYS A 1 334 ? 27.131 19.256 21.001 1.00 10.96 ? ? ? ? ? ? 824 LYS A NZ 1
+ATOM 2499 N N . PRO A 1 335 ? 31.969 24.270 21.444 1.00 11.81 ? ? ? ? ? ? 825 PRO A N 1
+ATOM 2500 C CA . PRO A 1 335 ? 31.984 25.692 21.821 1.00 11.31 ? ? ? ? ? ? 825 PRO A CA 1
+ATOM 2501 C C . PRO A 1 335 ? 31.261 25.964 23.155 1.00 10.16 ? ? ? ? ? ? 825 PRO A C 1
+ATOM 2502 O O . PRO A 1 335 ? 31.646 26.858 23.906 1.00 11.32 ? ? ? ? ? ? 825 PRO A O 1
+ATOM 2503 C CB . PRO A 1 335 ? 31.265 26.355 20.648 1.00 12.10 ? ? ? ? ? ? 825 PRO A CB 1
+ATOM 2504 C CG . PRO A 1 335 ? 31.716 25.493 19.463 1.00 12.71 ? ? ? ? ? ? 825 PRO A CG 1
+ATOM 2505 C CD . PRO A 1 335 ? 31.585 24.086 20.026 1.00 12.89 ? ? ? ? ? ? 825 PRO A CD 1
+ATOM 2506 N N . ALA A 1 336 ? 30.235 25.160 23.438 1.00 10.41 ? ? ? ? ? ? 826 ALA A N 1
+ATOM 2507 C CA . ALA A 1 336 ? 29.444 25.299 24.663 1.00 10.86 ? ? ? ? ? ? 826 ALA A CA 1
+ATOM 2508 C C . ALA A 1 336 ? 30.273 25.212 25.961 1.00 10.74 ? ? ? ? ? ? 826 ALA A C 1
+ATOM 2509 O O . ALA A 1 336 ? 30.002 25.940 26.927 1.00 11.82 ? ? ? ? ? ? 826 ALA A O 1
+ATOM 2510 C CB . ALA A 1 336 ? 28.311 24.265 24.656 1.00 11.12 ? ? ? ? ? ? 826 ALA A CB 1
+ATOM 2511 N N . TYR A 1 337 ? 31.287 24.357 25.968 1.00 10.86 ? ? ? ? ? ? 827 TYR A N 1
+ATOM 2512 C CA . TYR A 1 337 ? 32.144 24.207 27.139 1.00 12.08 ? ? ? ? ? ? 827 TYR A CA 1
+ATOM 2513 C C . TYR A 1 337 ? 32.858 25.519 27.469 1.00 12.40 ? ? ? ? ? ? 827 TYR A C 1
+ATOM 2514 O O . TYR A 1 337 ? 32.833 25.997 28.592 1.00 12.25 ? ? ? ? ? ? 827 TYR A O 1
+ATOM 2515 C CB . TYR A 1 337 ? 33.134 23.065 26.907 1.00 13.27 ? ? ? ? ? ? 827 TYR A CB 1
+ATOM 2516 C CG . TYR A 1 337 ? 34.136 22.880 28.009 1.00 14.69 ? ? ? ? ? ? 827 TYR A CG 1
+ATOM 2517 C CD1 . TYR A 1 337 ? 35.315 23.617 28.011 1.00 14.93 ? ? ? ? ? ? 827 TYR A CD1 1
+ATOM 2518 C CD2 . TYR A 1 337 ? 33.916 21.961 29.055 1.00 15.06 ? ? ? ? ? ? 827 TYR A CD2 1
+ATOM 2519 C CE1 . TYR A 1 337 ? 36.276 23.464 29.019 1.00 16.48 ? ? ? ? ? ? 827 TYR A CE1 1
+ATOM 2520 C CE2 . TYR A 1 337 ? 34.870 21.790 30.081 1.00 15.81 ? ? ? ? ? ? 827 TYR A CE2 1
+ATOM 2521 C CZ . TYR A 1 337 ? 36.060 22.556 30.059 1.00 16.30 ? ? ? ? ? ? 827 TYR A CZ 1
+ATOM 2522 O OH . TYR A 1 337 ? 37.025 22.471 31.056 1.00 16.23 ? ? ? ? ? ? 827 TYR A OH 1
+ATOM 2523 N N . ASN A 1 338 ? 33.457 26.145 26.470 1.00 13.95 ? ? ? ? ? ? 828 ASN A N 1
+ATOM 2524 C CA . ASN A 1 338 ? 34.135 27.419 26.727 1.00 15.71 ? ? ? ? ? ? 828 ASN A CA 1
+ATOM 2525 C C . ASN A 1 338 ? 33.162 28.523 27.054 1.00 13.12 ? ? ? ? ? ? 828 ASN A C 1
+ATOM 2526 O O . ASN A 1 338 ? 33.484 29.422 27.802 1.00 13.33 ? ? ? ? ? ? 828 ASN A O 1
+ATOM 2527 C CB . ASN A 1 338 ? 34.946 27.853 25.515 1.00 19.94 ? ? ? ? ? ? 828 ASN A CB 1
+ATOM 2528 C CG . ASN A 1 338 ? 36.112 26.926 25.242 1.00 24.62 ? ? ? ? ? ? 828 ASN A CG 1
+ATOM 2529 O OD1 . ASN A 1 338 ? 36.814 26.484 26.176 1.00 26.55 ? ? ? ? ? ? 828 ASN A OD1 1
+ATOM 2530 N ND2 . ASN A 1 338 ? 36.338 26.623 23.956 1.00 26.63 ? ? ? ? ? ? 828 ASN A ND2 1
+ATOM 2531 N N . ALA A 1 339 ? 31.987 28.482 26.436 1.00 12.35 ? ? ? ? ? ? 829 ALA A N 1
+ATOM 2532 C CA . ALA A 1 339 ? 30.975 29.497 26.676 1.00 12.74 ? ? ? ? ? ? 829 ALA A CA 1
+ATOM 2533 C C . ALA A 1 339 ? 30.515 29.486 28.143 1.00 12.84 ? ? ? ? ? ? 829 ALA A C 1
+ATOM 2534 O O . ALA A 1 339 ? 30.348 30.537 28.752 1.00 13.18 ? ? ? ? ? ? 829 ALA A O 1
+ATOM 2535 C CB . ALA A 1 339 ? 29.797 29.326 25.734 1.00 11.32 ? ? ? ? ? ? 829 ALA A CB 1
+ATOM 2536 N N . ILE A 1 340 ? 30.328 28.295 28.707 1.00 12.98 ? ? ? ? ? ? 830 ILE A N 1
+ATOM 2537 C CA . ILE A 1 340 ? 29.935 28.187 30.113 1.00 12.88 ? ? ? ? ? ? 830 ILE A CA 1
+ATOM 2538 C C . ILE A 1 340 ? 31.096 28.728 31.003 1.00 12.50 ? ? ? ? ? ? 830 ILE A C 1
+ATOM 2539 O O . ILE A 1 340 ? 30.866 29.487 31.954 1.00 11.19 ? ? ? ? ? ? 830 ILE A O 1
+ATOM 2540 C CB . ILE A 1 340 ? 29.587 26.694 30.459 1.00 12.33 ? ? ? ? ? ? 830 ILE A CB 1
+ATOM 2541 C CG1 . ILE A 1 340 ? 28.313 26.272 29.725 1.00 12.18 ? ? ? ? ? ? 830 ILE A CG1 1
+ATOM 2542 C CG2 . ILE A 1 340 ? 29.430 26.500 31.959 1.00 12.90 ? ? ? ? ? ? 830 ILE A CG2 1
+ATOM 2543 C CD1 . ILE A 1 340 ? 27.983 24.836 29.935 1.00 12.56 ? ? ? ? ? ? 830 ILE A CD1 1
+ATOM 2544 N N . LYS A 1 341 ? 32.329 28.328 30.681 1.00 14.33 ? ? ? ? ? ? 831 LYS A N 1
+ATOM 2545 C CA . LYS A 1 341 ? 33.497 28.783 31.419 1.00 16.26 ? ? ? ? ? ? 831 LYS A CA 1
+ATOM 2546 C C . LYS A 1 341 ? 33.576 30.330 31.376 1.00 17.49 ? ? ? ? ? ? 831 LYS A C 1
+ATOM 2547 O O . LYS A 1 341 ? 33.779 30.972 32.416 1.00 18.07 ? ? ? ? ? ? 831 LYS A O 1
+ATOM 2548 C CB . LYS A 1 341 ? 34.765 28.111 30.886 1.00 17.18 ? ? ? ? ? ? 831 LYS A CB 1
+ATOM 2549 C CG . LYS A 1 341 ? 35.903 28.130 31.896 1.00 19.97 ? ? ? ? ? ? 831 LYS A CG 1
+ATOM 2550 C CD . LYS A 1 341 ? 37.109 27.261 31.499 1.00 20.31 ? ? ? ? ? ? 831 LYS A CD 1
+ATOM 2551 C CE . LYS A 1 341 ? 36.844 25.775 31.738 1.00 19.79 ? ? ? ? ? ? 831 LYS A CE 1
+ATOM 2552 N NZ . LYS A 1 341 ? 38.059 24.922 31.507 1.00 19.41 ? ? ? ? ? ? 831 LYS A NZ 1
+ATOM 2553 N N . GLU A 1 342 ? 33.303 30.938 30.222 1.00 17.44 ? ? ? ? ? ? 832 GLU A N 1
+ATOM 2554 C CA . GLU A 1 342 ? 33.295 32.405 30.127 1.00 18.98 ? ? ? ? ? ? 832 GLU A CA 1
+ATOM 2555 C C . GLU A 1 342 ? 32.231 33.087 30.986 1.00 17.60 ? ? ? ? ? ? 832 GLU A C 1
+ATOM 2556 O O . GLU A 1 342 ? 32.498 34.129 31.574 1.00 17.32 ? ? ? ? ? ? 832 GLU A O 1
+ATOM 2557 C CB . GLU A 1 342 ? 33.127 32.852 28.693 1.00 22.28 ? ? ? ? ? ? 832 GLU A CB 1
+ATOM 2558 C CG . GLU A 1 342 ? 34.407 32.709 27.894 1.00 27.15 ? ? ? ? ? ? 832 GLU A CG 1
+ATOM 2559 C CD . GLU A 1 342 ? 34.180 32.833 26.396 1.00 30.33 ? ? ? ? ? ? 832 GLU A CD 1
+ATOM 2560 O OE1 . GLU A 1 342 ? 33.091 33.325 25.985 1.00 31.78 ? ? ? ? ? ? 832 GLU A OE1 1
+ATOM 2561 O OE2 . GLU A 1 342 ? 35.075 32.397 25.624 1.00 32.82 ? ? ? ? ? ? 832 GLU A OE2 1
+ATOM 2562 N N . ALA A 1 343 ? 31.013 32.542 31.016 1.00 15.16 ? ? ? ? ? ? 833 ALA A N 1
+ATOM 2563 C CA . ALA A 1 343 ? 29.951 33.107 31.855 1.00 15.95 ? ? ? ? ? ? 833 ALA A CA 1
+ATOM 2564 C C . ALA A 1 343 ? 30.378 33.076 33.332 1.00 16.66 ? ? ? ? ? ? 833 ALA A C 1
+ATOM 2565 O O . ALA A 1 343 ? 30.089 34.016 34.063 1.00 17.35 ? ? ? ? ? ? 833 ALA A O 1
+ATOM 2566 C CB . ALA A 1 343 ? 28.649 32.343 31.684 1.00 14.48 ? ? ? ? ? ? 833 ALA A CB 1
+ATOM 2567 N N . LEU A 1 344 ? 31.038 31.990 33.754 1.00 17.48 ? ? ? ? ? ? 834 LEU A N 1
+ATOM 2568 C CA . LEU A 1 344 ? 31.506 31.815 35.139 1.00 18.98 ? ? ? ? ? ? 834 LEU A CA 1
+ATOM 2569 C C . LEU A 1 344 ? 32.620 32.783 35.520 1.00 22.12 ? ? ? ? ? ? 834 LEU A C 1
+ATOM 2570 O O . LEU A 1 344 ? 32.789 33.094 36.693 1.00 21.51 ? ? ? ? ? ? 834 LEU A O 1
+ATOM 2571 C CB . LEU A 1 344 ? 31.962 30.369 35.383 1.00 17.15 ? ? ? ? ? ? 834 LEU A CB 1
+ATOM 2572 C CG . LEU A 1 344 ? 30.825 29.329 35.442 1.00 16.47 ? ? ? ? ? ? 834 LEU A CG 1
+ATOM 2573 C CD1 . LEU A 1 344 ? 31.362 27.896 35.381 1.00 14.97 ? ? ? ? ? ? 834 LEU A CD1 1
+ATOM 2574 C CD2 . LEU A 1 344 ? 29.996 29.568 36.720 1.00 16.96 ? ? ? ? ? ? 834 LEU A CD2 1
+ATOM 2575 N N . MET A 1 345 ? 33.385 33.232 34.527 1.00 25.70 ? ? ? ? ? ? 835 MET A N 1
+ATOM 2576 C CA . MET A 1 345 ? 34.472 34.201 34.735 1.00 29.43 ? ? ? ? ? ? 835 MET A CA 1
+ATOM 2577 C C . MET A 1 345 ? 33.964 35.671 34.705 1.00 31.58 ? ? ? ? ? ? 835 MET A C 1
+ATOM 2578 O O . MET A 1 345 ? 34.552 36.495 35.446 1.00 33.91 ? ? ? ? ? ? 835 MET A O 1
+ATOM 2579 C CB . MET A 1 345 ? 35.604 34.002 33.705 1.00 30.09 ? ? ? ? ? ? 835 MET A CB 1
+ATOM 2580 C CG . MET A 1 345 ? 36.360 32.687 33.847 1.00 32.15 ? ? ? ? ? ? 835 MET A CG 1
+ATOM 2581 S SD . MET A 1 345 ? 37.580 32.273 32.506 1.00 36.39 ? ? ? ? ? ? 835 MET A SD 1
+ATOM 2582 C CE . MET A 1 345 ? 36.817 33.081 31.002 1.00 34.53 ? ? ? ? ? ? 835 MET A CE 1
+ATOM 2583 N N . ASN B 1 26 ? -17.198 33.606 80.565 1.00 24.19 ? ? ? ? ? ? 516 ASN B N 1
+ATOM 2584 C CA . ASN B 1 26 ? -16.794 32.177 80.713 1.00 23.59 ? ? ? ? ? ? 516 ASN B CA 1
+ATOM 2585 C C . ASN B 1 26 ? -15.613 31.709 79.850 1.00 21.65 ? ? ? ? ? ? 516 ASN B C 1
+ATOM 2586 O O . ASN B 1 26 ? -15.120 30.608 80.069 1.00 21.50 ? ? ? ? ? ? 516 ASN B O 1
+ATOM 2587 C CB . ASN B 1 26 ? -17.983 31.225 80.484 1.00 26.32 ? ? ? ? ? ? 516 ASN B CB 1
+ATOM 2588 C CG . ASN B 1 26 ? -19.046 31.318 81.581 1.00 28.84 ? ? ? ? ? ? 516 ASN B CG 1
+ATOM 2589 O OD1 . ASN B 1 26 ? -18.869 32.032 82.589 1.00 30.47 ? ? ? ? ? ? 516 ASN B OD1 1
+ATOM 2590 N ND2 . ASN B 1 26 ? -20.172 30.620 81.377 1.00 28.93 ? ? ? ? ? ? 516 ASN B ND2 1
+ATOM 2591 N N . ALA B 1 27 ? -15.194 32.482 78.843 1.00 18.62 ? ? ? ? ? ? 517 ALA B N 1
+ATOM 2592 C CA . ALA B 1 27 ? -14.041 32.076 78.017 1.00 17.01 ? ? ? ? ? ? 517 ALA B CA 1
+ATOM 2593 C C . ALA B 1 27 ? -12.742 32.290 78.814 1.00 16.34 ? ? ? ? ? ? 517 ALA B C 1
+ATOM 2594 O O . ALA B 1 27 ? -12.721 33.058 79.778 1.00 16.04 ? ? ? ? ? ? 517 ALA B O 1
+ATOM 2595 C CB . ALA B 1 27 ? -13.986 32.900 76.733 1.00 15.63 ? ? ? ? ? ? 517 ALA B CB 1
+ATOM 2596 N N . LEU B 1 28 ? -11.666 31.614 78.431 1.00 15.12 ? ? ? ? ? ? 518 LEU B N 1
+ATOM 2597 C CA . LEU B 1 28 ? -10.394 31.800 79.111 1.00 14.72 ? ? ? ? ? ? 518 LEU B CA 1
+ATOM 2598 C C . LEU B 1 28 ? -10.003 33.282 79.170 1.00 14.77 ? ? ? ? ? ? 518 LEU B C 1
+ATOM 2599 O O . LEU B 1 28 ? -9.486 33.756 80.210 1.00 14.43 ? ? ? ? ? ? 518 LEU B O 1
+ATOM 2600 C CB . LEU B 1 28 ? -9.284 31.034 78.384 1.00 15.61 ? ? ? ? ? ? 518 LEU B CB 1
+ATOM 2601 C CG . LEU B 1 28 ? -9.208 29.516 78.486 1.00 16.40 ? ? ? ? ? ? 518 LEU B CG 1
+ATOM 2602 C CD1 . LEU B 1 28 ? -8.025 28.999 77.638 1.00 16.60 ? ? ? ? ? ? 518 LEU B CD1 1
+ATOM 2603 C CD2 . LEU B 1 28 ? -9.044 29.134 79.964 1.00 16.46 ? ? ? ? ? ? 518 LEU B CD2 1
+ATOM 2604 N N . ARG B 1 29 ? -10.239 34.020 78.070 1.00 14.30 ? ? ? ? ? ? 519 ARG B N 1
+ATOM 2605 C CA . ARG B 1 29 ? -9.887 35.444 78.016 1.00 15.23 ? ? ? ? ? ? 519 ARG B CA 1
+ATOM 2606 C C . ARG B 1 29 ? -10.591 36.325 79.069 1.00 15.90 ? ? ? ? ? ? 519 ARG B C 1
+ATOM 2607 O O . ARG B 1 29 ? -10.002 37.305 79.554 1.00 15.46 ? ? ? ? ? ? 519 ARG B O 1
+ATOM 2608 C CB . ARG B 1 29 ? -10.104 36.032 76.612 1.00 15.27 ? ? ? ? ? ? 519 ARG B CB 1
+ATOM 2609 C CG . ARG B 1 29 ? -11.539 36.053 76.163 1.00 16.66 ? ? ? ? ? ? 519 ARG B CG 1
+ATOM 2610 C CD . ARG B 1 29 ? -11.648 36.598 74.766 1.00 19.19 ? ? ? ? ? ? 519 ARG B CD 1
+ATOM 2611 N NE . ARG B 1 29 ? -11.233 37.996 74.670 1.00 22.45 ? ? ? ? ? ? 519 ARG B NE 1
+ATOM 2612 C CZ . ARG B 1 29 ? -11.153 38.675 73.516 1.00 24.43 ? ? ? ? ? ? 519 ARG B CZ 1
+ATOM 2613 N NH1 . ARG B 1 29 ? -11.454 38.088 72.337 1.00 25.11 ? ? ? ? ? ? 519 ARG B NH1 1
+ATOM 2614 N NH2 . ARG B 1 29 ? -10.786 39.940 73.549 1.00 24.68 ? ? ? ? ? ? 519 ARG B NH2 1
+ATOM 2615 N N . ASP B 1 30 ? -11.829 35.965 79.433 1.00 16.87 ? ? ? ? ? ? 520 ASP B N 1
+ATOM 2616 C CA . ASP B 1 30 ? -12.589 36.726 80.454 1.00 18.63 ? ? ? ? ? ? 520 ASP B CA 1
+ATOM 2617 C C . ASP B 1 30 ? -11.969 36.598 81.863 1.00 19.37 ? ? ? ? ? ? 520 ASP B C 1
+ATOM 2618 O O . ASP B 1 30 ? -11.858 37.585 82.602 1.00 20.45 ? ? ? ? ? ? 520 ASP B O 1
+ATOM 2619 C CB . ASP B 1 30 ? -14.049 36.289 80.461 1.00 19.16 ? ? ? ? ? ? 520 ASP B CB 1
+ATOM 2620 C CG . ASP B 1 30 ? -14.698 36.424 79.090 1.00 20.40 ? ? ? ? ? ? 520 ASP B CG 1
+ATOM 2621 O OD1 . ASP B 1 30 ? -14.551 37.491 78.455 1.00 21.51 ? ? ? ? ? ? 520 ASP B OD1 1
+ATOM 2622 O OD2 . ASP B 1 30 ? -15.334 35.456 78.629 1.00 21.42 ? ? ? ? ? ? 520 ASP B OD2 1
+ATOM 2623 N N . TYR B 1 31 ? -11.549 35.393 82.225 1.00 19.60 ? ? ? ? ? ? 521 TYR B N 1
+ATOM 2624 C CA . TYR B 1 31 ? -10.895 35.196 83.521 1.00 21.30 ? ? ? ? ? ? 521 TYR B CA 1
+ATOM 2625 C C . TYR B 1 31 ? -9.501 35.805 83.525 1.00 21.32 ? ? ? ? ? ? 521 TYR B C 1
+ATOM 2626 O O . TYR B 1 31 ? -9.049 36.322 84.544 1.00 21.83 ? ? ? ? ? ? 521 TYR B O 1
+ATOM 2627 C CB . TYR B 1 31 ? -10.787 33.715 83.852 1.00 23.03 ? ? ? ? ? ? 521 TYR B CB 1
+ATOM 2628 C CG . TYR B 1 31 ? -12.125 33.102 84.122 1.00 26.74 ? ? ? ? ? ? 521 TYR B CG 1
+ATOM 2629 C CD1 . TYR B 1 31 ? -12.868 33.476 85.259 1.00 28.38 ? ? ? ? ? ? 521 TYR B CD1 1
+ATOM 2630 C CD2 . TYR B 1 31 ? -12.684 32.180 83.234 1.00 28.39 ? ? ? ? ? ? 521 TYR B CD2 1
+ATOM 2631 C CE1 . TYR B 1 31 ? -14.142 32.948 85.499 1.00 29.52 ? ? ? ? ? ? 521 TYR B CE1 1
+ATOM 2632 C CE2 . TYR B 1 31 ? -13.963 31.644 83.462 1.00 30.27 ? ? ? ? ? ? 521 TYR B CE2 1
+ATOM 2633 C CZ . TYR B 1 31 ? -14.682 32.038 84.596 1.00 30.65 ? ? ? ? ? ? 521 TYR B CZ 1
+ATOM 2634 O OH . TYR B 1 31 ? -15.951 31.538 84.797 1.00 32.07 ? ? ? ? ? ? 521 TYR B OH 1
+ATOM 2635 N N . ALA B 1 32 ? -8.816 35.726 82.380 1.00 19.75 ? ? ? ? ? ? 522 ALA B N 1
+ATOM 2636 C CA . ALA B 1 32 ? -7.463 36.263 82.250 1.00 18.98 ? ? ? ? ? ? 522 ALA B CA 1
+ATOM 2637 C C . ALA B 1 32 ? -7.493 37.764 82.397 1.00 18.24 ? ? ? ? ? ? 522 ALA B C 1
+ATOM 2638 O O . ALA B 1 32 ? -6.710 38.344 83.129 1.00 17.99 ? ? ? ? ? ? 522 ALA B O 1
+ATOM 2639 C CB . ALA B 1 32 ? -6.854 35.863 80.863 1.00 18.58 ? ? ? ? ? ? 522 ALA B CB 1
+ATOM 2640 N N . GLU B 1 33 ? -8.431 38.389 81.714 1.00 19.66 ? ? ? ? ? ? 523 GLU B N 1
+ATOM 2641 C CA . GLU B 1 33 ? -8.574 39.833 81.773 1.00 23.96 ? ? ? ? ? ? 523 GLU B CA 1
+ATOM 2642 C C . GLU B 1 33 ? -8.827 40.320 83.202 1.00 23.53 ? ? ? ? ? ? 523 GLU B C 1
+ATOM 2643 O O . GLU B 1 33 ? -8.287 41.351 83.625 1.00 22.86 ? ? ? ? ? ? 523 GLU B O 1
+ATOM 2644 C CB . GLU B 1 33 ? -9.728 40.285 80.877 1.00 27.38 ? ? ? ? ? ? 523 GLU B CB 1
+ATOM 2645 C CG . GLU B 1 33 ? -9.706 41.770 80.603 1.00 32.86 ? ? ? ? ? ? 523 GLU B CG 1
+ATOM 2646 C CD . GLU B 1 33 ? -8.328 42.238 80.121 1.00 36.70 ? ? ? ? ? ? 523 GLU B CD 1
+ATOM 2647 O OE1 . GLU B 1 33 ? -7.908 41.815 79.003 1.00 37.99 ? ? ? ? ? ? 523 GLU B OE1 1
+ATOM 2648 O OE2 . GLU B 1 33 ? -7.656 43.004 80.872 1.00 38.64 ? ? ? ? ? ? 523 GLU B OE2 1
+ATOM 2649 N N . ALA B 1 34 ? -9.657 39.570 83.924 1.00 23.28 ? ? ? ? ? ? 524 ALA B N 1
+ATOM 2650 C CA . ALA B 1 34 ? -10.023 39.869 85.314 1.00 23.19 ? ? ? ? ? ? 524 ALA B CA 1
+ATOM 2651 C C . ALA B 1 34 ? -8.781 39.888 86.211 1.00 22.77 ? ? ? ? ? ? 524 ALA B C 1
+ATOM 2652 O O . ALA B 1 34 ? -8.730 40.622 87.216 1.00 23.22 ? ? ? ? ? ? 524 ALA B O 1
+ATOM 2653 C CB . ALA B 1 34 ? -11.038 38.818 85.825 1.00 22.59 ? ? ? ? ? ? 524 ALA B CB 1
+ATOM 2654 N N . ARG B 1 35 ? -7.770 39.115 85.823 1.00 21.90 ? ? ? ? ? ? 525 ARG B N 1
+ATOM 2655 C CA . ARG B 1 35 ? -6.529 39.022 86.590 1.00 21.65 ? ? ? ? ? ? 525 ARG B CA 1
+ATOM 2656 C C . ARG B 1 35 ? -5.394 39.897 86.033 1.00 21.56 ? ? ? ? ? ? 525 ARG B C 1
+ATOM 2657 O O . ARG B 1 35 ? -4.266 39.838 86.524 1.00 22.44 ? ? ? ? ? ? 525 ARG B O 1
+ATOM 2658 C CB . ARG B 1 35 ? -6.087 37.558 86.673 1.00 23.09 ? ? ? ? ? ? 525 ARG B CB 1
+ATOM 2659 C CG . ARG B 1 35 ? -7.188 36.569 87.116 1.00 25.12 ? ? ? ? ? ? 525 ARG B CG 1
+ATOM 2660 C CD . ARG B 1 35 ? -7.754 36.897 88.502 1.00 27.14 ? ? ? ? ? ? 525 ARG B CD 1
+ATOM 2661 N NE . ARG B 1 35 ? -6.700 36.901 89.516 1.00 29.34 ? ? ? ? ? ? 525 ARG B NE 1
+ATOM 2662 C CZ . ARG B 1 35 ? -6.201 35.814 90.111 1.00 30.54 ? ? ? ? ? ? 525 ARG B CZ 1
+ATOM 2663 N NH1 . ARG B 1 35 ? -6.666 34.605 89.819 1.00 31.71 ? ? ? ? ? ? 525 ARG B NH1 1
+ATOM 2664 N NH2 . ARG B 1 35 ? -5.158 35.922 90.932 1.00 31.22 ? ? ? ? ? ? 525 ARG B NH2 1
+ATOM 2665 N N . GLY B 1 36 ? -5.689 40.689 85.002 1.00 20.68 ? ? ? ? ? ? 526 GLY B N 1
+ATOM 2666 C CA . GLY B 1 36 ? -4.689 41.565 84.402 1.00 21.01 ? ? ? ? ? ? 526 GLY B CA 1
+ATOM 2667 C C . GLY B 1 36 ? -3.658 40.900 83.487 1.00 21.39 ? ? ? ? ? ? 526 GLY B C 1
+ATOM 2668 O O . GLY B 1 36 ? -2.560 41.417 83.260 1.00 20.72 ? ? ? ? ? ? 526 GLY B O 1
+ATOM 2669 N N . ILE B 1 37 ? -3.996 39.745 82.945 1.00 20.68 ? ? ? ? ? ? 527 ILE B N 1
+ATOM 2670 C CA . ILE B 1 37 ? -3.049 39.085 82.075 1.00 20.61 ? ? ? ? ? ? 527 ILE B CA 1
+ATOM 2671 C C . ILE B 1 37 ? -3.669 38.813 80.691 1.00 18.91 ? ? ? ? ? ? 527 ILE B C 1
+ATOM 2672 O O . ILE B 1 37 ? -4.906 38.825 80.535 1.00 18.67 ? ? ? ? ? ? 527 ILE B O 1
+ATOM 2673 C CB . ILE B 1 37 ? -2.482 37.761 82.717 1.00 23.03 ? ? ? ? ? ? 527 ILE B CB 1
+ATOM 2674 C CG1 . ILE B 1 37 ? -3.555 36.686 82.784 1.00 23.34 ? ? ? ? ? ? 527 ILE B CG1 1
+ATOM 2675 C CG2 . ILE B 1 37 ? -1.876 38.002 84.142 1.00 22.85 ? ? ? ? ? ? 527 ILE B CG2 1
+ATOM 2676 C CD1 . ILE B 1 37 ? -3.003 35.329 82.359 1.00 24.94 ? ? ? ? ? ? 527 ILE B CD1 1
+ATOM 2677 N N . LYS B 1 38 ? -2.793 38.662 79.692 1.00 15.53 ? ? ? ? ? ? 528 LYS B N 1
+ATOM 2678 C CA . LYS B 1 38 ? -3.181 38.384 78.312 1.00 14.72 ? ? ? ? ? ? 528 LYS B CA 1
+ATOM 2679 C C . LYS B 1 38 ? -2.870 36.926 78.056 1.00 13.09 ? ? ? ? ? ? 528 LYS B C 1
+ATOM 2680 O O . LYS B 1 38 ? -1.785 36.449 78.397 1.00 14.18 ? ? ? ? ? ? 528 LYS B O 1
+ATOM 2681 C CB . LYS B 1 38 ? -2.378 39.266 77.328 1.00 15.94 ? ? ? ? ? ? 528 LYS B CB 1
+ATOM 2682 C CG . LYS B 1 38 ? -2.692 40.775 77.453 1.00 17.24 ? ? ? ? ? ? 528 LYS B CG 1
+ATOM 2683 C CD . LYS B 1 38 ? -4.198 41.041 77.218 1.00 18.91 ? ? ? ? ? ? 528 LYS B CD 1
+ATOM 2684 C CE . LYS B 1 38 ? -4.576 42.501 77.532 1.00 20.63 ? ? ? ? ? ? 528 LYS B CE 1
+ATOM 2685 N NZ . LYS B 1 38 ? -5.935 42.849 77.028 1.00 21.53 ? ? ? ? ? ? 528 LYS B NZ 1
+ATOM 2686 N N . ILE B 1 39 ? -3.824 36.213 77.474 1.00 11.29 ? ? ? ? ? ? 529 ILE B N 1
+ATOM 2687 C CA . ILE B 1 39 ? -3.649 34.804 77.182 1.00 11.08 ? ? ? ? ? ? 529 ILE B CA 1
+ATOM 2688 C C . ILE B 1 39 ? -3.780 34.648 75.656 1.00 10.68 ? ? ? ? ? ? 529 ILE B C 1
+ATOM 2689 O O . ILE B 1 39 ? -4.732 35.152 75.041 1.00 12.67 ? ? ? ? ? ? 529 ILE B O 1
+ATOM 2690 C CB . ILE B 1 39 ? -4.659 33.903 78.025 1.00 12.21 ? ? ? ? ? ? 529 ILE B CB 1
+ATOM 2691 C CG1 . ILE B 1 39 ? -4.401 32.421 77.740 1.00 14.10 ? ? ? ? ? ? 529 ILE B CG1 1
+ATOM 2692 C CG2 . ILE B 1 39 ? -6.112 34.294 77.795 1.00 12.98 ? ? ? ? ? ? 529 ILE B CG2 1
+ATOM 2693 C CD1 . ILE B 1 39 ? -4.851 31.482 78.882 1.00 15.18 ? ? ? ? ? ? 529 ILE B CD1 1
+ATOM 2694 N N . GLY B 1 40 ? -2.813 33.995 75.034 1.00 10.16 ? ? ? ? ? ? 530 GLY B N 1
+ATOM 2695 C CA . GLY B 1 40 ? -2.864 33.888 73.590 1.00 9.94 ? ? ? ? ? ? 530 GLY B CA 1
+ATOM 2696 C C . GLY B 1 40 ? -2.346 32.606 72.996 1.00 9.84 ? ? ? ? ? ? 530 GLY B C 1
+ATOM 2697 O O . GLY B 1 40 ? -2.031 31.631 73.689 1.00 9.14 ? ? ? ? ? ? 530 GLY B O 1
+ATOM 2698 N N . THR B 1 41 ? -2.215 32.636 71.673 1.00 9.09 ? ? ? ? ? ? 531 THR B N 1
+ATOM 2699 C CA . THR B 1 41 ? -1.760 31.497 70.920 1.00 8.33 ? ? ? ? ? ? 531 THR B CA 1
+ATOM 2700 C C . THR B 1 41 ? -1.186 31.951 69.571 1.00 8.59 ? ? ? ? ? ? 531 THR B C 1
+ATOM 2701 O O . THR B 1 41 ? -1.491 33.040 69.103 1.00 9.34 ? ? ? ? ? ? 531 THR B O 1
+ATOM 2702 C CB . THR B 1 41 ? -2.964 30.567 70.613 1.00 8.75 ? ? ? ? ? ? 531 THR B CB 1
+ATOM 2703 O OG1 . THR B 1 41 ? -2.529 29.436 69.850 1.00 9.28 ? ? ? ? ? ? 531 THR B OG1 1
+ATOM 2704 C CG2 . THR B 1 41 ? -4.066 31.336 69.841 1.00 9.03 ? ? ? ? ? ? 531 THR B CG2 1
+ATOM 2705 N N . CYS B 1 42 ? -0.325 31.134 68.988 1.00 8.86 ? ? ? ? ? ? 532 CYS B N 1
+ATOM 2706 C CA . CYS B 1 42 ? 0.166 31.443 67.652 1.00 10.06 ? ? ? ? ? ? 532 CYS B CA 1
+ATOM 2707 C C . CYS B 1 42 ? -0.975 30.982 66.730 1.00 11.85 ? ? ? ? ? ? 532 CYS B C 1
+ATOM 2708 O O . CYS B 1 42 ? -1.819 30.115 67.117 1.00 11.33 ? ? ? ? ? ? 532 CYS B O 1
+ATOM 2709 C CB . CYS B 1 42 ? 1.455 30.694 67.321 1.00 12.87 ? ? ? ? ? ? 532 CYS B CB 1
+ATOM 2710 S SG . CYS B 1 42 ? 1.297 28.919 67.163 1.00 15.38 ? ? ? ? ? ? 532 CYS B SG 1
+ATOM 2711 N N . VAL B 1 43 ? -1.043 31.573 65.538 1.00 9.92 ? ? ? ? ? ? 533 VAL B N 1
+ATOM 2712 C CA . VAL B 1 43 ? -2.088 31.249 64.568 1.00 10.61 ? ? ? ? ? ? 533 VAL B CA 1
+ATOM 2713 C C . VAL B 1 43 ? -1.512 30.355 63.453 1.00 12.36 ? ? ? ? ? ? 533 VAL B C 1
+ATOM 2714 O O . VAL B 1 43 ? -0.493 30.678 62.822 1.00 13.27 ? ? ? ? ? ? 533 VAL B O 1
+ATOM 2715 C CB . VAL B 1 43 ? -2.756 32.551 64.048 1.00 11.29 ? ? ? ? ? ? 533 VAL B CB 1
+ATOM 2716 C CG1 . VAL B 1 43 ? -3.845 32.259 62.989 1.00 11.55 ? ? ? ? ? ? 533 VAL B CG1 1
+ATOM 2717 C CG2 . VAL B 1 43 ? -3.362 33.303 65.241 1.00 11.30 ? ? ? ? ? ? 533 VAL B CG2 1
+ATOM 2718 N N . ASN B 1 44 ? -2.112 29.172 63.339 1.00 12.50 ? ? ? ? ? ? 534 ASN B N 1
+ATOM 2719 C CA . ASN B 1 44 ? -1.720 28.125 62.391 1.00 13.59 ? ? ? ? ? ? 534 ASN B CA 1
+ATOM 2720 C C . ASN B 1 44 ? -2.298 28.406 60.978 1.00 13.85 ? ? ? ? ? ? 534 ASN B C 1
+ATOM 2721 O O . ASN B 1 44 ? -3.255 29.187 60.815 1.00 13.79 ? ? ? ? ? ? 534 ASN B O 1
+ATOM 2722 C CB . ASN B 1 44 ? -2.159 26.726 62.940 1.00 13.37 ? ? ? ? ? ? 534 ASN B CB 1
+ATOM 2723 C CG . ASN B 1 44 ? -1.602 26.434 64.371 1.00 14.66 ? ? ? ? ? ? 534 ASN B CG 1
+ATOM 2724 O OD1 . ASN B 1 44 ? -0.390 26.258 64.542 1.00 16.83 ? ? ? ? ? ? 534 ASN B OD1 1
+ATOM 2725 N ND2 . ASN B 1 44 ? -2.472 26.456 65.393 1.00 11.93 ? ? ? ? ? ? 534 ASN B ND2 1
+ATOM 2726 N N . TYR B 1 45 ? -1.774 27.704 59.976 1.00 14.14 ? ? ? ? ? ? 535 TYR B N 1
+ATOM 2727 C CA . TYR B 1 45 ? -2.199 27.914 58.586 1.00 13.82 ? ? ? ? ? ? 535 TYR B CA 1
+ATOM 2728 C C . TYR B 1 45 ? -3.694 27.910 58.232 1.00 14.13 ? ? ? ? ? ? 535 TYR B C 1
+ATOM 2729 O O . TYR B 1 45 ? -4.100 28.646 57.326 1.00 14.06 ? ? ? ? ? ? 535 TYR B O 1
+ATOM 2730 C CB . TYR B 1 45 ? -1.420 26.969 57.635 1.00 16.23 ? ? ? ? ? ? 535 TYR B CB 1
+ATOM 2731 C CG . TYR B 1 45 ? -1.819 25.487 57.670 1.00 17.27 ? ? ? ? ? ? 535 TYR B CG 1
+ATOM 2732 C CD1 . TYR B 1 45 ? -2.972 25.039 57.003 1.00 18.80 ? ? ? ? ? ? 535 TYR B CD1 1
+ATOM 2733 C CD2 . TYR B 1 45 ? -1.082 24.556 58.410 1.00 18.96 ? ? ? ? ? ? 535 TYR B CD2 1
+ATOM 2734 C CE1 . TYR B 1 45 ? -3.394 23.699 57.079 1.00 20.20 ? ? ? ? ? ? 535 TYR B CE1 1
+ATOM 2735 C CE2 . TYR B 1 45 ? -1.491 23.209 58.502 1.00 19.71 ? ? ? ? ? ? 535 TYR B CE2 1
+ATOM 2736 C CZ . TYR B 1 45 ? -2.651 22.789 57.838 1.00 21.42 ? ? ? ? ? ? 535 TYR B CZ 1
+ATOM 2737 O OH . TYR B 1 45 ? -3.104 21.473 57.953 1.00 23.97 ? ? ? ? ? ? 535 TYR B OH 1
+ATOM 2738 N N . PRO B 1 46 ? -4.545 27.103 58.933 1.00 14.36 ? ? ? ? ? ? 536 PRO B N 1
+ATOM 2739 C CA . PRO B 1 46 ? -5.977 27.096 58.575 1.00 14.60 ? ? ? ? ? ? 536 PRO B CA 1
+ATOM 2740 C C . PRO B 1 46 ? -6.645 28.458 58.615 1.00 15.24 ? ? ? ? ? ? 536 PRO B C 1
+ATOM 2741 O O . PRO B 1 46 ? -7.628 28.691 57.902 1.00 15.74 ? ? ? ? ? ? 536 PRO B O 1
+ATOM 2742 C CB . PRO B 1 46 ? -6.603 26.178 59.635 1.00 15.96 ? ? ? ? ? ? 536 PRO B CB 1
+ATOM 2743 C CG . PRO B 1 46 ? -5.504 25.297 60.026 1.00 16.03 ? ? ? ? ? ? 536 PRO B CG 1
+ATOM 2744 C CD . PRO B 1 46 ? -4.304 26.202 60.083 1.00 14.64 ? ? ? ? ? ? 536 PRO B CD 1
+ATOM 2745 N N . PHE B 1 47 ? -6.157 29.339 59.490 1.00 14.57 ? ? ? ? ? ? 537 PHE B N 1
+ATOM 2746 C CA . PHE B 1 47 ? -6.708 30.682 59.591 1.00 16.35 ? ? ? ? ? ? 537 PHE B CA 1
+ATOM 2747 C C . PHE B 1 47 ? -6.652 31.442 58.241 1.00 18.09 ? ? ? ? ? ? 537 PHE B C 1
+ATOM 2748 O O . PHE B 1 47 ? -7.584 32.148 57.880 1.00 18.37 ? ? ? ? ? ? 537 PHE B O 1
+ATOM 2749 C CB . PHE B 1 47 ? -5.937 31.500 60.630 1.00 15.99 ? ? ? ? ? ? 537 PHE B CB 1
+ATOM 2750 C CG . PHE B 1 47 ? -6.288 32.961 60.618 1.00 16.06 ? ? ? ? ? ? 537 PHE B CG 1
+ATOM 2751 C CD1 . PHE B 1 47 ? -7.435 33.424 61.273 1.00 16.49 ? ? ? ? ? ? 537 PHE B CD1 1
+ATOM 2752 C CD2 . PHE B 1 47 ? -5.508 33.870 59.906 1.00 16.14 ? ? ? ? ? ? 537 PHE B CD2 1
+ATOM 2753 C CE1 . PHE B 1 47 ? -7.791 34.780 61.208 1.00 17.50 ? ? ? ? ? ? 537 PHE B CE1 1
+ATOM 2754 C CE2 . PHE B 1 47 ? -5.856 35.229 59.834 1.00 16.02 ? ? ? ? ? ? 537 PHE B CE2 1
+ATOM 2755 C CZ . PHE B 1 47 ? -6.987 35.684 60.477 1.00 16.62 ? ? ? ? ? ? 537 PHE B CZ 1
+ATOM 2756 N N . TYR B 1 48 ? -5.528 31.313 57.540 1.00 20.47 ? ? ? ? ? ? 538 TYR B N 1
+ATOM 2757 C CA . TYR B 1 48 ? -5.301 31.997 56.267 1.00 22.81 ? ? ? ? ? ? 538 TYR B CA 1
+ATOM 2758 C C . TYR B 1 48 ? -6.036 31.464 55.042 1.00 26.14 ? ? ? ? ? ? 538 TYR B C 1
+ATOM 2759 O O . TYR B 1 48 ? -6.329 32.233 54.140 1.00 27.49 ? ? ? ? ? ? 538 TYR B O 1
+ATOM 2760 C CB . TYR B 1 48 ? -3.809 32.080 55.999 1.00 20.96 ? ? ? ? ? ? 538 TYR B CB 1
+ATOM 2761 C CG . TYR B 1 48 ? -3.090 32.832 57.083 1.00 20.46 ? ? ? ? ? ? 538 TYR B CG 1
+ATOM 2762 C CD1 . TYR B 1 48 ? -3.161 34.236 57.154 1.00 20.07 ? ? ? ? ? ? 538 TYR B CD1 1
+ATOM 2763 C CD2 . TYR B 1 48 ? -2.356 32.148 58.058 1.00 20.31 ? ? ? ? ? ? 538 TYR B CD2 1
+ATOM 2764 C CE1 . TYR B 1 48 ? -2.514 34.932 58.173 1.00 20.01 ? ? ? ? ? ? 538 TYR B CE1 1
+ATOM 2765 C CE2 . TYR B 1 48 ? -1.711 32.827 59.076 1.00 20.38 ? ? ? ? ? ? 538 TYR B CE2 1
+ATOM 2766 C CZ . TYR B 1 48 ? -1.793 34.228 59.126 1.00 21.06 ? ? ? ? ? ? 538 TYR B CZ 1
+ATOM 2767 O OH . TYR B 1 48 ? -1.145 34.912 60.129 1.00 23.04 ? ? ? ? ? ? 538 TYR B OH 1
+ATOM 2768 N N . ASN B 1 49 ? -6.263 30.159 54.950 1.00 29.19 ? ? ? ? ? ? 539 ASN B N 1
+ATOM 2769 C CA . ASN B 1 49 ? -7.000 29.658 53.792 1.00 33.11 ? ? ? ? ? ? 539 ASN B CA 1
+ATOM 2770 C C . ASN B 1 49 ? -8.424 29.182 54.100 1.00 33.40 ? ? ? ? ? ? 539 ASN B C 1
+ATOM 2771 O O . ASN B 1 49 ? -9.110 28.625 53.243 1.00 33.76 ? ? ? ? ? ? 539 ASN B O 1
+ATOM 2772 C CB . ASN B 1 49 ? -6.193 28.622 53.001 1.00 35.99 ? ? ? ? ? ? 539 ASN B CB 1
+ATOM 2773 C CG . ASN B 1 49 ? -5.560 27.571 53.873 1.00 38.65 ? ? ? ? ? ? 539 ASN B CG 1
+ATOM 2774 O OD1 . ASN B 1 49 ? -4.461 27.086 53.566 1.00 40.04 ? ? ? ? ? ? 539 ASN B OD1 1
+ATOM 2775 N ND2 . ASN B 1 49 ? -6.246 27.190 54.963 1.00 39.00 ? ? ? ? ? ? 539 ASN B ND2 1
+ATOM 2776 N N . ASN B 1 50 ? -8.877 29.489 55.311 1.00 34.01 ? ? ? ? ? ? 540 ASN B N 1
+ATOM 2777 C CA . ASN B 1 50 ? -10.213 29.149 55.808 1.00 34.78 ? ? ? ? ? ? 540 ASN B CA 1
+ATOM 2778 C C . ASN B 1 50 ? -10.744 27.728 55.539 1.00 32.59 ? ? ? ? ? ? 540 ASN B C 1
+ATOM 2779 O O . ASN B 1 50 ? -11.890 27.533 55.146 1.00 33.15 ? ? ? ? ? ? 540 ASN B O 1
+ATOM 2780 C CB . ASN B 1 50 ? -11.235 30.225 55.394 1.00 38.41 ? ? ? ? ? ? 540 ASN B CB 1
+ATOM 2781 C CG . ASN B 1 50 ? -11.623 31.146 56.570 1.00 41.06 ? ? ? ? ? ? 540 ASN B CG 1
+ATOM 2782 O OD1 . ASN B 1 50 ? -10.752 31.716 57.248 1.00 42.46 ? ? ? ? ? ? 540 ASN B OD1 1
+ATOM 2783 N ND2 . ASN B 1 50 ? -12.931 31.263 56.837 1.00 42.07 ? ? ? ? ? ? 540 ASN B ND2 1
+ATOM 2784 N N . SER B 1 51 ? -9.934 26.741 55.884 1.00 29.11 ? ? ? ? ? ? 541 SER B N 1
+ATOM 2785 C CA . SER B 1 51 ? -10.267 25.349 55.676 1.00 26.26 ? ? ? ? ? ? 541 SER B CA 1
+ATOM 2786 C C . SER B 1 51 ? -10.792 24.648 56.919 1.00 24.42 ? ? ? ? ? ? 541 SER B C 1
+ATOM 2787 O O . SER B 1 51 ? -11.088 23.460 56.847 1.00 24.37 ? ? ? ? ? ? 541 SER B O 1
+ATOM 2788 C CB . SER B 1 51 ? -9.014 24.603 55.202 1.00 27.33 ? ? ? ? ? ? 541 SER B CB 1
+ATOM 2789 O OG . SER B 1 51 ? -7.904 24.819 56.084 1.00 28.76 ? ? ? ? ? ? 541 SER B OG 1
+ATOM 2790 N N . ASP B 1 52 ? -10.835 25.346 58.058 1.00 21.69 ? ? ? ? ? ? 542 ASP B N 1
+ATOM 2791 C CA . ASP B 1 52 ? -11.289 24.745 59.322 1.00 20.28 ? ? ? ? ? ? 542 ASP B CA 1
+ATOM 2792 C C . ASP B 1 52 ? -12.075 25.780 60.126 1.00 20.58 ? ? ? ? ? ? 542 ASP B C 1
+ATOM 2793 O O . ASP B 1 52 ? -11.529 26.487 60.997 1.00 20.10 ? ? ? ? ? ? 542 ASP B O 1
+ATOM 2794 C CB . ASP B 1 52 ? -10.085 24.238 60.155 1.00 19.19 ? ? ? ? ? ? 542 ASP B CB 1
+ATOM 2795 C CG . ASP B 1 52 ? -10.507 23.354 61.336 1.00 18.81 ? ? ? ? ? ? 542 ASP B CG 1
+ATOM 2796 O OD1 . ASP B 1 52 ? -11.668 23.468 61.800 1.00 18.76 ? ? ? ? ? ? 542 ASP B OD1 1
+ATOM 2797 O OD2 . ASP B 1 52 ? -9.677 22.541 61.799 1.00 17.51 ? ? ? ? ? ? 542 ASP B OD2 1
+ATOM 2798 N N . PRO B 1 53 ? -13.384 25.858 59.870 1.00 20.18 ? ? ? ? ? ? 543 PRO B N 1
+ATOM 2799 C CA . PRO B 1 53 ? -14.262 26.806 60.559 1.00 18.95 ? ? ? ? ? ? 543 PRO B CA 1
+ATOM 2800 C C . PRO B 1 53 ? -14.278 26.650 62.078 1.00 17.86 ? ? ? ? ? ? 543 PRO B C 1
+ATOM 2801 O O . PRO B 1 53 ? -14.426 27.643 62.796 1.00 17.77 ? ? ? ? ? ? 543 PRO B O 1
+ATOM 2802 C CB . PRO B 1 53 ? -15.630 26.563 59.907 1.00 20.68 ? ? ? ? ? ? 543 PRO B CB 1
+ATOM 2803 C CG . PRO B 1 53 ? -15.549 25.141 59.423 1.00 22.15 ? ? ? ? ? ? 543 PRO B CG 1
+ATOM 2804 C CD . PRO B 1 53 ? -14.126 24.992 58.930 1.00 21.42 ? ? ? ? ? ? 543 PRO B CD 1
+ATOM 2805 N N . THR B 1 54 ? -14.085 25.435 62.579 1.00 16.90 ? ? ? ? ? ? 544 THR B N 1
+ATOM 2806 C CA . THR B 1 54 ? -14.080 25.233 64.027 1.00 16.81 ? ? ? ? ? ? 544 THR B CA 1
+ATOM 2807 C C . THR B 1 54 ? -12.856 25.911 64.633 1.00 15.30 ? ? ? ? ? ? 544 THR B C 1
+ATOM 2808 O O . THR B 1 54 ? -12.952 26.539 65.686 1.00 14.64 ? ? ? ? ? ? 544 THR B O 1
+ATOM 2809 C CB . THR B 1 54 ? -14.055 23.764 64.395 1.00 18.44 ? ? ? ? ? ? 544 THR B CB 1
+ATOM 2810 O OG1 . THR B 1 54 ? -15.117 23.094 63.710 1.00 21.32 ? ? ? ? ? ? 544 THR B OG1 1
+ATOM 2811 C CG2 . THR B 1 54 ? -14.243 23.590 65.918 1.00 18.61 ? ? ? ? ? ? 544 THR B CG2 1
+ATOM 2812 N N . TYR B 1 55 ? -11.715 25.784 63.952 1.00 13.89 ? ? ? ? ? ? 545 TYR B N 1
+ATOM 2813 C CA . TYR B 1 55 ? -10.473 26.415 64.404 1.00 13.17 ? ? ? ? ? ? 545 TYR B CA 1
+ATOM 2814 C C . TYR B 1 55 ? -10.724 27.927 64.635 1.00 13.84 ? ? ? ? ? ? 545 TYR B C 1
+ATOM 2815 O O . TYR B 1 55 ? -10.448 28.464 65.715 1.00 13.05 ? ? ? ? ? ? 545 TYR B O 1
+ATOM 2816 C CB . TYR B 1 55 ? -9.374 26.207 63.354 1.00 12.36 ? ? ? ? ? ? 545 TYR B CB 1
+ATOM 2817 C CG . TYR B 1 55 ? -8.039 26.777 63.739 1.00 11.78 ? ? ? ? ? ? 545 TYR B CG 1
+ATOM 2818 C CD1 . TYR B 1 55 ? -7.126 26.017 64.458 1.00 12.10 ? ? ? ? ? ? 545 TYR B CD1 1
+ATOM 2819 C CD2 . TYR B 1 55 ? -7.700 28.078 63.407 1.00 11.46 ? ? ? ? ? ? 545 TYR B CD2 1
+ATOM 2820 C CE1 . TYR B 1 55 ? -5.906 26.542 64.852 1.00 12.58 ? ? ? ? ? ? 545 TYR B CE1 1
+ATOM 2821 C CE2 . TYR B 1 55 ? -6.488 28.612 63.782 1.00 12.30 ? ? ? ? ? ? 545 TYR B CE2 1
+ATOM 2822 C CZ . TYR B 1 55 ? -5.596 27.843 64.514 1.00 12.47 ? ? ? ? ? ? 545 TYR B CZ 1
+ATOM 2823 O OH . TYR B 1 55 ? -4.421 28.393 64.980 1.00 13.17 ? ? ? ? ? ? 545 TYR B OH 1
+ATOM 2824 N N . ASN B 1 56 ? -11.306 28.590 63.637 1.00 14.02 ? ? ? ? ? ? 546 ASN B N 1
+ATOM 2825 C CA . ASN B 1 56 ? -11.576 30.021 63.725 1.00 14.83 ? ? ? ? ? ? 546 ASN B CA 1
+ATOM 2826 C C . ASN B 1 56 ? -12.537 30.404 64.826 1.00 14.45 ? ? ? ? ? ? 546 ASN B C 1
+ATOM 2827 O O . ASN B 1 56 ? -12.362 31.448 65.475 1.00 14.54 ? ? ? ? ? ? 546 ASN B O 1
+ATOM 2828 C CB . ASN B 1 56 ? -12.152 30.556 62.413 1.00 16.88 ? ? ? ? ? ? 546 ASN B CB 1
+ATOM 2829 C CG . ASN B 1 56 ? -11.111 30.700 61.323 1.00 19.84 ? ? ? ? ? ? 546 ASN B CG 1
+ATOM 2830 O OD1 . ASN B 1 56 ? -10.162 29.924 61.244 1.00 21.24 ? ? ? ? ? ? 546 ASN B OD1 1
+ATOM 2831 N ND2 . ASN B 1 56 ? -11.298 31.691 60.455 1.00 21.17 ? ? ? ? ? ? 546 ASN B ND2 1
+ATOM 2832 N N . SER B 1 57 ? -13.576 29.609 65.038 1.00 14.71 ? ? ? ? ? ? 547 SER B N 1
+ATOM 2833 C CA . SER B 1 57 ? -14.528 30.017 66.070 1.00 16.25 ? ? ? ? ? ? 547 SER B CA 1
+ATOM 2834 C C . SER B 1 57 ? -13.994 29.936 67.504 1.00 14.53 ? ? ? ? ? ? 547 SER B C 1
+ATOM 2835 O O . SER B 1 57 ? -14.283 30.811 68.310 1.00 14.51 ? ? ? ? ? ? 547 SER B O 1
+ATOM 2836 C CB . SER B 1 57 ? -15.873 29.328 65.917 1.00 20.24 ? ? ? ? ? ? 547 SER B CB 1
+ATOM 2837 O OG . SER B 1 57 ? -15.771 27.954 66.169 1.00 25.46 ? ? ? ? ? ? 547 SER B OG 1
+ATOM 2838 N N . ILE B 1 58 ? -13.124 28.958 67.773 1.00 13.39 ? ? ? ? ? ? 548 ILE B N 1
+ATOM 2839 C CA . ILE B 1 58 ? -12.511 28.821 69.102 1.00 13.57 ? ? ? ? ? ? 548 ILE B CA 1
+ATOM 2840 C C . ILE B 1 58 ? -11.490 29.964 69.283 1.00 12.60 ? ? ? ? ? ? 548 ILE B C 1
+ATOM 2841 O O . ILE B 1 58 ? -11.486 30.649 70.299 1.00 12.28 ? ? ? ? ? ? 548 ILE B O 1
+ATOM 2842 C CB . ILE B 1 58 ? -11.860 27.419 69.269 1.00 14.10 ? ? ? ? ? ? 548 ILE B CB 1
+ATOM 2843 C CG1 . ILE B 1 58 ? -12.949 26.354 69.360 1.00 16.45 ? ? ? ? ? ? 548 ILE B CG1 1
+ATOM 2844 C CG2 . ILE B 1 58 ? -10.973 27.356 70.495 1.00 14.34 ? ? ? ? ? ? 548 ILE B CG2 1
+ATOM 2845 C CD1 . ILE B 1 58 ? -12.404 24.942 69.294 1.00 18.07 ? ? ? ? ? ? 548 ILE B CD1 1
+ATOM 2846 N N . LEU B 1 59 ? -10.677 30.201 68.249 1.00 12.20 ? ? ? ? ? ? 549 LEU B N 1
+ATOM 2847 C CA . LEU B 1 59 ? -9.655 31.258 68.240 1.00 11.29 ? ? ? ? ? ? 549 LEU B CA 1
+ATOM 2848 C C . LEU B 1 59 ? -10.229 32.614 68.587 1.00 11.08 ? ? ? ? ? ? 549 LEU B C 1
+ATOM 2849 O O . LEU B 1 59 ? -9.733 33.275 69.499 1.00 12.34 ? ? ? ? ? ? 549 LEU B O 1
+ATOM 2850 C CB . LEU B 1 59 ? -8.969 31.340 66.847 1.00 11.37 ? ? ? ? ? ? 549 LEU B CB 1
+ATOM 2851 C CG . LEU B 1 59 ? -7.936 32.465 66.583 1.00 12.11 ? ? ? ? ? ? 549 LEU B CG 1
+ATOM 2852 C CD1 . LEU B 1 59 ? -6.718 32.351 67.545 1.00 12.34 ? ? ? ? ? ? 549 LEU B CD1 1
+ATOM 2853 C CD2 . LEU B 1 59 ? -7.472 32.403 65.127 1.00 10.94 ? ? ? ? ? ? 549 LEU B CD2 1
+ATOM 2854 N N . GLN B 1 60 ? -11.313 33.005 67.905 1.00 11.40 ? ? ? ? ? ? 550 GLN B N 1
+ATOM 2855 C CA . GLN B 1 60 ? -11.904 34.336 68.122 1.00 12.26 ? ? ? ? ? ? 550 GLN B CA 1
+ATOM 2856 C C . GLN B 1 60 ? -12.632 34.511 69.454 1.00 12.99 ? ? ? ? ? ? 550 GLN B C 1
+ATOM 2857 O O . GLN B 1 60 ? -12.853 35.624 69.928 1.00 13.63 ? ? ? ? ? ? 550 GLN B O 1
+ATOM 2858 C CB . GLN B 1 60 ? -12.830 34.721 66.950 1.00 11.53 ? ? ? ? ? ? 550 GLN B CB 1
+ATOM 2859 C CG . GLN B 1 60 ? -14.103 33.905 66.851 1.00 13.51 ? ? ? ? ? ? 550 GLN B CG 1
+ATOM 2860 C CD . GLN B 1 60 ? -14.877 34.133 65.538 1.00 14.34 ? ? ? ? ? ? 550 GLN B CD 1
+ATOM 2861 O OE1 . GLN B 1 60 ? -14.377 34.741 64.598 1.00 14.73 ? ? ? ? ? ? 550 GLN B OE1 1
+ATOM 2862 N NE2 . GLN B 1 60 ? -16.082 33.603 65.469 1.00 13.65 ? ? ? ? ? ? 550 GLN B NE2 1
+ATOM 2863 N N . ARG B 1 61 ? -12.946 33.384 70.066 1.00 14.27 ? ? ? ? ? ? 551 ARG B N 1
+ATOM 2864 C CA . ARG B 1 61 ? -13.673 33.355 71.317 1.00 15.63 ? ? ? ? ? ? 551 ARG B CA 1
+ATOM 2865 C C . ARG B 1 61 ? -12.839 33.276 72.615 1.00 13.74 ? ? ? ? ? ? 551 ARG B C 1
+ATOM 2866 O O . ARG B 1 61 ? -13.121 33.968 73.587 1.00 12.92 ? ? ? ? ? ? 551 ARG B O 1
+ATOM 2867 C CB . ARG B 1 61 ? -14.585 32.131 71.264 1.00 18.02 ? ? ? ? ? ? 551 ARG B CB 1
+ATOM 2868 C CG . ARG B 1 61 ? -15.848 32.272 72.048 1.00 23.47 ? ? ? ? ? ? 551 ARG B CG 1
+ATOM 2869 C CD . ARG B 1 61 ? -16.653 30.982 72.015 1.00 25.47 ? ? ? ? ? ? 551 ARG B CD 1
+ATOM 2870 N NE . ARG B 1 61 ? -15.916 29.913 72.676 1.00 27.78 ? ? ? ? ? ? 551 ARG B NE 1
+ATOM 2871 C CZ . ARG B 1 61 ? -15.831 28.679 72.202 1.00 28.83 ? ? ? ? ? ? 551 ARG B CZ 1
+ATOM 2872 N NH1 . ARG B 1 61 ? -16.440 28.378 71.058 1.00 28.88 ? ? ? ? ? ? 551 ARG B NH1 1
+ATOM 2873 N NH2 . ARG B 1 61 ? -15.180 27.741 72.883 1.00 29.71 ? ? ? ? ? ? 551 ARG B NH2 1
+ATOM 2874 N N . GLU B 1 62 ? -11.833 32.416 72.625 1.00 12.53 ? ? ? ? ? ? 552 GLU B N 1
+ATOM 2875 C CA . GLU B 1 62 ? -11.065 32.144 73.847 1.00 12.14 ? ? ? ? ? ? 552 GLU B CA 1
+ATOM 2876 C C . GLU B 1 62 ? -9.830 32.951 74.191 1.00 13.21 ? ? ? ? ? ? 552 GLU B C 1
+ATOM 2877 O O . GLU B 1 62 ? -9.421 32.979 75.362 1.00 13.19 ? ? ? ? ? ? 552 GLU B O 1
+ATOM 2878 C CB . GLU B 1 62 ? -10.662 30.665 73.888 1.00 13.36 ? ? ? ? ? ? 552 GLU B CB 1
+ATOM 2879 C CG . GLU B 1 62 ? -11.797 29.648 73.798 1.00 15.35 ? ? ? ? ? ? 552 GLU B CG 1
+ATOM 2880 C CD . GLU B 1 62 ? -12.562 29.482 75.111 1.00 17.31 ? ? ? ? ? ? 552 GLU B CD 1
+ATOM 2881 O OE1 . GLU B 1 62 ? -11.996 29.771 76.196 1.00 16.92 ? ? ? ? ? ? 552 GLU B OE1 1
+ATOM 2882 O OE2 . GLU B 1 62 ? -13.744 29.071 75.042 1.00 19.91 ? ? ? ? ? ? 552 GLU B OE2 1
+ATOM 2883 N N . PHE B 1 63 ? -9.232 33.608 73.195 1.00 12.38 ? ? ? ? ? ? 553 PHE B N 1
+ATOM 2884 C CA . PHE B 1 63 ? -7.974 34.337 73.414 1.00 11.49 ? ? ? ? ? ? 553 PHE B CA 1
+ATOM 2885 C C . PHE B 1 63 ? -7.987 35.856 73.301 1.00 11.64 ? ? ? ? ? ? 553 PHE B C 1
+ATOM 2886 O O . PHE B 1 63 ? -8.808 36.435 72.568 1.00 11.89 ? ? ? ? ? ? 553 PHE B O 1
+ATOM 2887 C CB . PHE B 1 63 ? -6.927 33.762 72.474 1.00 11.66 ? ? ? ? ? ? 553 PHE B CB 1
+ATOM 2888 C CG . PHE B 1 63 ? -6.784 32.283 72.597 1.00 11.81 ? ? ? ? ? ? 553 PHE B CG 1
+ATOM 2889 C CD1 . PHE B 1 63 ? -6.033 31.741 73.638 1.00 11.96 ? ? ? ? ? ? 553 PHE B CD1 1
+ATOM 2890 C CD2 . PHE B 1 63 ? -7.466 31.421 71.730 1.00 12.24 ? ? ? ? ? ? 553 PHE B CD2 1
+ATOM 2891 C CE1 . PHE B 1 63 ? -5.960 30.352 73.827 1.00 12.42 ? ? ? ? ? ? 553 PHE B CE1 1
+ATOM 2892 C CE2 . PHE B 1 63 ? -7.403 30.026 71.914 1.00 13.25 ? ? ? ? ? ? 553 PHE B CE2 1
+ATOM 2893 C CZ . PHE B 1 63 ? -6.644 29.497 72.971 1.00 12.69 ? ? ? ? ? ? 553 PHE B CZ 1
+ATOM 2894 N N . SER B 1 64 ? -7.073 36.497 74.023 1.00 10.11 ? ? ? ? ? ? 554 SER B N 1
+ATOM 2895 C CA . SER B 1 64 ? -6.981 37.943 73.970 1.00 10.94 ? ? ? ? ? ? 554 SER B CA 1
+ATOM 2896 C C . SER B 1 64 ? -5.690 38.406 73.288 1.00 10.22 ? ? ? ? ? ? 554 SER B C 1
+ATOM 2897 O O . SER B 1 64 ? -5.438 39.596 73.208 1.00 10.74 ? ? ? ? ? ? 554 SER B O 1
+ATOM 2898 C CB . SER B 1 64 ? -7.118 38.550 75.382 1.00 12.22 ? ? ? ? ? ? 554 SER B CB 1
+ATOM 2899 O OG . SER B 1 64 ? -6.208 37.951 76.292 1.00 13.10 ? ? ? ? ? ? 554 SER B OG 1
+ATOM 2900 N N . MET B 1 65 ? -4.909 37.467 72.764 1.00 10.01 ? ? ? ? ? ? 555 MET B N 1
+ATOM 2901 C CA . MET B 1 65 ? -3.636 37.804 72.113 1.00 10.06 ? ? ? ? ? ? 555 MET B CA 1
+ATOM 2902 C C . MET B 1 65 ? -3.291 36.748 71.063 1.00 9.95 ? ? ? ? ? ? 555 MET B C 1
+ATOM 2903 O O . MET B 1 65 ? -3.576 35.567 71.239 1.00 9.76 ? ? ? ? ? ? 555 MET B O 1
+ATOM 2904 C CB . MET B 1 65 ? -2.526 37.882 73.162 1.00 10.43 ? ? ? ? ? ? 555 MET B CB 1
+ATOM 2905 C CG . MET B 1 65 ? -1.166 38.266 72.622 1.00 11.85 ? ? ? ? ? ? 555 MET B CG 1
+ATOM 2906 S SD . MET B 1 65 ? 0.055 38.483 73.930 1.00 13.08 ? ? ? ? ? ? 555 MET B SD 1
+ATOM 2907 C CE . MET B 1 65 ? -0.013 40.126 74.164 1.00 12.92 ? ? ? ? ? ? 555 MET B CE 1
+ATOM 2908 N N . VAL B 1 66 ? -2.768 37.200 69.926 1.00 8.47 ? ? ? ? ? ? 556 VAL B N 1
+ATOM 2909 C CA . VAL B 1 66 ? -2.363 36.316 68.843 1.00 9.25 ? ? ? ? ? ? 556 VAL B CA 1
+ATOM 2910 C C . VAL B 1 66 ? -0.925 36.658 68.374 1.00 9.32 ? ? ? ? ? ? 556 VAL B C 1
+ATOM 2911 O O . VAL B 1 66 ? -0.420 37.768 68.612 1.00 9.93 ? ? ? ? ? ? 556 VAL B O 1
+ATOM 2912 C CB . VAL B 1 66 ? -3.314 36.399 67.600 1.00 10.90 ? ? ? ? ? ? 556 VAL B CB 1
+ATOM 2913 C CG1 . VAL B 1 66 ? -4.637 35.710 67.890 1.00 12.49 ? ? ? ? ? ? 556 VAL B CG1 1
+ATOM 2914 C CG2 . VAL B 1 66 ? -3.535 37.866 67.174 1.00 11.45 ? ? ? ? ? ? 556 VAL B CG2 1
+ATOM 2915 N N . VAL B 1 67 ? -0.285 35.691 67.722 1.00 9.40 ? ? ? ? ? ? 557 VAL B N 1
+ATOM 2916 C CA . VAL B 1 67 ? 1.076 35.821 67.204 1.00 10.46 ? ? ? ? ? ? 557 VAL B CA 1
+ATOM 2917 C C . VAL B 1 67 ? 1.117 35.026 65.891 1.00 10.79 ? ? ? ? ? ? 557 VAL B C 1
+ATOM 2918 O O . VAL B 1 67 ? 0.472 33.995 65.774 1.00 9.49 ? ? ? ? ? ? 557 VAL B O 1
+ATOM 2919 C CB . VAL B 1 67 ? 2.107 35.140 68.156 1.00 10.96 ? ? ? ? ? ? 557 VAL B CB 1
+ATOM 2920 C CG1 . VAL B 1 67 ? 3.560 35.527 67.742 1.00 11.24 ? ? ? ? ? ? 557 VAL B CG1 1
+ATOM 2921 C CG2 . VAL B 1 67 ? 1.824 35.487 69.575 1.00 13.25 ? ? ? ? ? ? 557 VAL B CG2 1
+ATOM 2922 N N . CYS B 1 68 ? 1.885 35.494 64.910 1.00 11.82 ? ? ? ? ? ? 558 CYS B N 1
+ATOM 2923 C CA . CYS B 1 68 ? 2.032 34.781 63.627 1.00 13.00 ? ? ? ? ? ? 558 CYS B CA 1
+ATOM 2924 C C . CYS B 1 68 ? 3.027 33.645 63.828 1.00 12.84 ? ? ? ? ? ? 558 CYS B C 1
+ATOM 2925 O O . CYS B 1 68 ? 4.154 33.871 64.251 1.00 13.31 ? ? ? ? ? ? 558 CYS B O 1
+ATOM 2926 C CB . CYS B 1 68 ? 2.636 35.705 62.560 1.00 14.60 ? ? ? ? ? ? 558 CYS B CB 1
+ATOM 2927 S SG . CYS B 1 68 ? 1.548 36.926 61.859 1.00 20.47 ? ? ? ? ? ? 558 CYS B SG 1
+ATOM 2928 N N . GLU B 1 69 ? 2.648 32.426 63.486 1.00 13.37 ? ? ? ? ? ? 559 GLU B N 1
+ATOM 2929 C CA . GLU B 1 69 ? 3.572 31.310 63.645 1.00 14.15 ? ? ? ? ? ? 559 GLU B CA 1
+ATOM 2930 C C . GLU B 1 69 ? 4.805 31.412 62.718 1.00 14.08 ? ? ? ? ? ? 559 GLU B C 1
+ATOM 2931 O O . GLU B 1 69 ? 5.940 31.205 63.160 1.00 14.45 ? ? ? ? ? ? 559 GLU B O 1
+ATOM 2932 C CB . GLU B 1 69 ? 2.845 29.973 63.388 1.00 16.24 ? ? ? ? ? ? 559 GLU B CB 1
+ATOM 2933 C CG . GLU B 1 69 ? 3.696 28.729 63.771 1.00 18.01 ? ? ? ? ? ? 559 GLU B CG 1
+ATOM 2934 C CD . GLU B 1 69 ? 3.053 27.406 63.371 1.00 19.86 ? ? ? ? ? ? 559 GLU B CD 1
+ATOM 2935 O OE1 . GLU B 1 69 ? 1.914 27.422 62.847 1.00 20.95 ? ? ? ? ? ? 559 GLU B OE1 1
+ATOM 2936 O OE2 . GLU B 1 69 ? 3.699 26.355 63.553 1.00 20.80 ? ? ? ? ? ? 559 GLU B OE2 1
+ATOM 2937 N N . ASN B 1 70 ? 4.577 31.821 61.467 1.00 14.12 ? ? ? ? ? ? 560 ASN B N 1
+ATOM 2938 C CA . ASN B 1 70 ? 5.644 31.880 60.458 1.00 14.73 ? ? ? ? ? ? 560 ASN B CA 1
+ATOM 2939 C C . ASN B 1 70 ? 5.604 33.063 59.516 1.00 15.16 ? ? ? ? ? ? 560 ASN B C 1
+ATOM 2940 O O . ASN B 1 70 ? 6.581 33.331 58.817 1.00 15.53 ? ? ? ? ? ? 560 ASN B O 1
+ATOM 2941 C CB . ASN B 1 70 ? 5.482 30.697 59.486 1.00 18.06 ? ? ? ? ? ? 560 ASN B CB 1
+ATOM 2942 C CG . ASN B 1 70 ? 5.708 29.359 60.128 1.00 20.15 ? ? ? ? ? ? 560 ASN B CG 1
+ATOM 2943 O OD1 . ASN B 1 70 ? 6.808 29.066 60.594 1.00 22.68 ? ? ? ? ? ? 560 ASN B OD1 1
+ATOM 2944 N ND2 . ASN B 1 70 ? 4.674 28.517 60.134 1.00 21.39 ? ? ? ? ? ? 560 ASN B ND2 1
+ATOM 2945 N N . GLU B 1 71 ? 4.460 33.720 59.436 1.00 14.16 ? ? ? ? ? ? 561 GLU B N 1
+ATOM 2946 C CA . GLU B 1 71 ? 4.251 34.790 58.472 1.00 15.25 ? ? ? ? ? ? 561 GLU B CA 1
+ATOM 2947 C C . GLU B 1 71 ? 4.968 36.116 58.669 1.00 14.54 ? ? ? ? ? ? 561 GLU B C 1
+ATOM 2948 O O . GLU B 1 71 ? 4.843 37.015 57.826 1.00 14.50 ? ? ? ? ? ? 561 GLU B O 1
+ATOM 2949 C CB . GLU B 1 71 ? 2.741 35.022 58.285 1.00 18.09 ? ? ? ? ? ? 561 GLU B CB 1
+ATOM 2950 C CG . GLU B 1 71 ? 1.944 33.776 57.826 1.00 22.17 ? ? ? ? ? ? 561 GLU B CG 1
+ATOM 2951 C CD . GLU B 1 71 ? 1.848 32.629 58.884 1.00 25.43 ? ? ? ? ? ? 561 GLU B CD 1
+ATOM 2952 O OE1 . GLU B 1 71 ? 2.054 32.868 60.119 1.00 24.90 ? ? ? ? ? ? 561 GLU B OE1 1
+ATOM 2953 O OE2 . GLU B 1 71 ? 1.552 31.469 58.455 1.00 27.43 ? ? ? ? ? ? 561 GLU B OE2 1
+ATOM 2954 N N . MET B 1 72 ? 5.605 36.295 59.823 1.00 13.22 ? ? ? ? ? ? 562 MET B N 1
+ATOM 2955 C CA . MET B 1 72 ? 6.331 37.531 60.099 1.00 12.76 ? ? ? ? ? ? 562 MET B CA 1
+ATOM 2956 C C . MET B 1 72 ? 7.826 37.273 60.310 1.00 12.32 ? ? ? ? ? ? 562 MET B C 1
+ATOM 2957 O O . MET B 1 72 ? 8.553 38.139 60.835 1.00 12.93 ? ? ? ? ? ? 562 MET B O 1
+ATOM 2958 C CB . MET B 1 72 ? 5.694 38.338 61.240 1.00 14.10 ? ? ? ? ? ? 562 MET B CB 1
+ATOM 2959 C CG . MET B 1 72 ? 4.468 39.090 60.774 1.00 16.38 ? ? ? ? ? ? 562 MET B CG 1
+ATOM 2960 S SD . MET B 1 72 ? 3.634 40.076 62.003 1.00 21.73 ? ? ? ? ? ? 562 MET B SD 1
+ATOM 2961 C CE . MET B 1 72 ? 4.774 40.161 63.216 1.00 21.55 ? ? ? ? ? ? 562 MET B CE 1
+ATOM 2962 N N . LYS B 1 73 ? 8.286 36.092 59.874 1.00 11.06 ? ? ? ? ? ? 563 LYS B N 1
+ATOM 2963 C CA . LYS B 1 73 ? 9.704 35.788 59.912 1.00 11.74 ? ? ? ? ? ? 563 LYS B CA 1
+ATOM 2964 C C . LYS B 1 73 ? 10.358 36.575 58.747 1.00 11.75 ? ? ? ? ? ? 563 LYS B C 1
+ATOM 2965 O O . LYS B 1 73 ? 9.656 37.021 57.842 1.00 11.81 ? ? ? ? ? ? 563 LYS B O 1
+ATOM 2966 C CB . LYS B 1 73 ? 9.935 34.291 59.791 1.00 13.77 ? ? ? ? ? ? 563 LYS B CB 1
+ATOM 2967 C CG . LYS B 1 73 ? 9.915 33.706 61.175 1.00 17.63 ? ? ? ? ? ? 563 LYS B CG 1
+ATOM 2968 C CD . LYS B 1 73 ? 9.609 32.258 61.163 1.00 20.97 ? ? ? ? ? ? 563 LYS B CD 1
+ATOM 2969 C CE . LYS B 1 73 ? 9.216 31.875 62.600 1.00 23.47 ? ? ? ? ? ? 563 LYS B CE 1
+ATOM 2970 N NZ . LYS B 1 73 ? 8.728 30.478 62.708 1.00 26.02 ? ? ? ? ? ? 563 LYS B NZ 1
+ATOM 2971 N N . PHE B 1 74 ? 11.679 36.700 58.755 1.00 11.12 ? ? ? ? ? ? 564 PHE B N 1
+ATOM 2972 C CA . PHE B 1 74 ? 12.421 37.472 57.747 1.00 11.52 ? ? ? ? ? ? 564 PHE B CA 1
+ATOM 2973 C C . PHE B 1 74 ? 12.156 37.049 56.297 1.00 11.68 ? ? ? ? ? ? 564 PHE B C 1
+ATOM 2974 O O . PHE B 1 74 ? 11.898 37.920 55.440 1.00 12.27 ? ? ? ? ? ? 564 PHE B O 1
+ATOM 2975 C CB . PHE B 1 74 ? 13.919 37.430 58.054 1.00 10.62 ? ? ? ? ? ? 564 PHE B CB 1
+ATOM 2976 C CG . PHE B 1 74 ? 14.709 38.570 57.454 1.00 10.64 ? ? ? ? ? ? 564 PHE B CG 1
+ATOM 2977 C CD1 . PHE B 1 74 ? 14.909 38.655 56.069 1.00 11.39 ? ? ? ? ? ? 564 PHE B CD1 1
+ATOM 2978 C CD2 . PHE B 1 74 ? 15.313 39.517 58.283 1.00 11.17 ? ? ? ? ? ? 564 PHE B CD2 1
+ATOM 2979 C CE1 . PHE B 1 74 ? 15.702 39.656 55.529 1.00 11.38 ? ? ? ? ? ? 564 PHE B CE1 1
+ATOM 2980 C CE2 . PHE B 1 74 ? 16.115 40.529 57.752 1.00 11.49 ? ? ? ? ? ? 564 PHE B CE2 1
+ATOM 2981 C CZ . PHE B 1 74 ? 16.311 40.598 56.366 1.00 11.33 ? ? ? ? ? ? 564 PHE B CZ 1
+ATOM 2982 N N . ASP B 1 75 ? 12.218 35.755 56.014 1.00 11.55 ? ? ? ? ? ? 565 ASP B N 1
+ATOM 2983 C CA . ASP B 1 75 ? 11.968 35.244 54.659 1.00 12.73 ? ? ? ? ? ? 565 ASP B CA 1
+ATOM 2984 C C . ASP B 1 75 ? 10.545 35.489 54.113 1.00 13.10 ? ? ? ? ? ? 565 ASP B C 1
+ATOM 2985 O O . ASP B 1 75 ? 10.365 35.649 52.913 1.00 15.50 ? ? ? ? ? ? 565 ASP B O 1
+ATOM 2986 C CB . ASP B 1 75 ? 12.366 33.753 54.538 1.00 14.97 ? ? ? ? ? ? 565 ASP B CB 1
+ATOM 2987 C CG . ASP B 1 75 ? 11.423 32.776 55.309 1.00 16.45 ? ? ? ? ? ? 565 ASP B CG 1
+ATOM 2988 O OD1 . ASP B 1 75 ? 10.766 33.139 56.310 1.00 16.77 ? ? ? ? ? ? 565 ASP B OD1 1
+ATOM 2989 O OD2 . ASP B 1 75 ? 11.370 31.604 54.897 1.00 19.43 ? ? ? ? ? ? 565 ASP B OD2 1
+ATOM 2990 N N . ALA B 1 76 ? 9.547 35.561 54.996 1.00 11.81 ? ? ? ? ? ? 566 ALA B N 1
+ATOM 2991 C CA . ALA B 1 76 ? 8.159 35.796 54.618 1.00 10.67 ? ? ? ? ? ? 566 ALA B CA 1
+ATOM 2992 C C . ALA B 1 76 ? 7.906 37.292 54.388 1.00 10.01 ? ? ? ? ? ? 566 ALA B C 1
+ATOM 2993 O O . ALA B 1 76 ? 7.121 37.668 53.512 1.00 10.90 ? ? ? ? ? ? 566 ALA B O 1
+ATOM 2994 C CB . ALA B 1 76 ? 7.213 35.268 55.752 1.00 10.89 ? ? ? ? ? ? 566 ALA B CB 1
+ATOM 2995 N N . LEU B 1 77 ? 8.529 38.140 55.208 1.00 8.45 ? ? ? ? ? ? 567 LEU B N 1
+ATOM 2996 C CA . LEU B 1 77 ? 8.330 39.591 55.111 1.00 9.12 ? ? ? ? ? ? 567 LEU B CA 1
+ATOM 2997 C C . LEU B 1 77 ? 9.139 40.304 54.028 1.00 8.52 ? ? ? ? ? ? 567 LEU B C 1
+ATOM 2998 O O . LEU B 1 77 ? 8.656 41.300 53.493 1.00 8.71 ? ? ? ? ? ? 567 LEU B O 1
+ATOM 2999 C CB . LEU B 1 77 ? 8.548 40.295 56.465 1.00 9.88 ? ? ? ? ? ? 567 LEU B CB 1
+ATOM 3000 C CG . LEU B 1 77 ? 7.349 40.360 57.410 1.00 12.51 ? ? ? ? ? ? 567 LEU B CG 1
+ATOM 3001 C CD1 . LEU B 1 77 ? 7.834 40.833 58.777 1.00 13.75 ? ? ? ? ? ? 567 LEU B CD1 1
+ATOM 3002 C CD2 . LEU B 1 77 ? 6.291 41.317 56.872 1.00 14.56 ? ? ? ? ? ? 567 LEU B CD2 1
+ATOM 3003 N N . GLN B 1 78 ? 10.368 39.859 53.777 1.00 7.45 ? ? ? ? ? ? 568 GLN B N 1
+ATOM 3004 C CA . GLN B 1 78 ? 11.220 40.479 52.735 1.00 7.04 ? ? ? ? ? ? 568 GLN B CA 1
+ATOM 3005 C C . GLN B 1 78 ? 11.800 39.332 51.909 1.00 6.71 ? ? ? ? ? ? 568 GLN B C 1
+ATOM 3006 O O . GLN B 1 78 ? 13.005 39.075 51.943 1.00 7.62 ? ? ? ? ? ? 568 GLN B O 1
+ATOM 3007 C CB . GLN B 1 78 ? 12.331 41.347 53.370 1.00 7.67 ? ? ? ? ? ? 568 GLN B CB 1
+ATOM 3008 C CG . GLN B 1 78 ? 12.966 42.303 52.347 1.00 7.80 ? ? ? ? ? ? 568 GLN B CG 1
+ATOM 3009 C CD . GLN B 1 78 ? 14.152 43.161 52.824 1.00 8.64 ? ? ? ? ? ? 568 GLN B CD 1
+ATOM 3010 O OE1 . GLN B 1 78 ? 14.828 43.778 51.998 1.00 9.16 ? ? ? ? ? ? 568 GLN B OE1 1
+ATOM 3011 N NE2 . GLN B 1 78 ? 14.400 43.217 54.130 1.00 8.06 ? ? ? ? ? ? 568 GLN B NE2 1
+ATOM 3012 N N . PRO B 1 79 ? 10.960 38.662 51.087 1.00 6.84 ? ? ? ? ? ? 569 PRO B N 1
+ATOM 3013 C CA . PRO B 1 79 ? 11.409 37.523 50.275 1.00 7.43 ? ? ? ? ? ? 569 PRO B CA 1
+ATOM 3014 C C . PRO B 1 79 ? 12.441 37.802 49.204 1.00 7.86 ? ? ? ? ? ? 569 PRO B C 1
+ATOM 3015 O O . PRO B 1 79 ? 13.167 36.915 48.783 1.00 9.41 ? ? ? ? ? ? 569 PRO B O 1
+ATOM 3016 C CB . PRO B 1 79 ? 10.110 36.933 49.742 1.00 8.23 ? ? ? ? ? ? 569 PRO B CB 1
+ATOM 3017 C CG . PRO B 1 79 ? 9.247 38.107 49.620 1.00 9.59 ? ? ? ? ? ? 569 PRO B CG 1
+ATOM 3018 C CD . PRO B 1 79 ? 9.541 38.964 50.846 1.00 7.95 ? ? ? ? ? ? 569 PRO B CD 1
+ATOM 3019 N N . ARG B 1 80 ? 12.468 39.040 48.737 1.00 8.43 ? ? ? ? ? ? 570 ARG B N 1
+ATOM 3020 C CA . ARG B 1 80 ? 13.453 39.494 47.755 1.00 8.17 ? ? ? ? ? ? 570 ARG B CA 1
+ATOM 3021 C C . ARG B 1 80 ? 13.958 40.818 48.329 1.00 6.99 ? ? ? ? ? ? 570 ARG B C 1
+ATOM 3022 O O . ARG B 1 80 ? 13.230 41.501 49.043 1.00 7.01 ? ? ? ? ? ? 570 ARG B O 1
+ATOM 3023 C CB . ARG B 1 80 ? 12.807 39.684 46.374 1.00 9.96 ? ? ? ? ? ? 570 ARG B CB 1
+ATOM 3024 C CG . ARG B 1 80 ? 12.437 38.338 45.710 1.00 12.31 ? ? ? ? ? ? 570 ARG B CG 1
+ATOM 3025 C CD . ARG B 1 80 ? 11.778 38.518 44.346 1.00 17.09 ? ? ? ? ? ? 570 ARG B CD 1
+ATOM 3026 N NE . ARG B 1 80 ? 12.655 39.227 43.423 1.00 20.57 ? ? ? ? ? ? 570 ARG B NE 1
+ATOM 3027 C CZ . ARG B 1 80 ? 12.301 40.311 42.736 1.00 21.54 ? ? ? ? ? ? 570 ARG B CZ 1
+ATOM 3028 N NH1 . ARG B 1 80 ? 11.081 40.827 42.842 1.00 22.34 ? ? ? ? ? ? 570 ARG B NH1 1
+ATOM 3029 N NH2 . ARG B 1 80 ? 13.190 40.872 41.952 1.00 23.62 ? ? ? ? ? ? 570 ARG B NH2 1
+ATOM 3030 N N . GLN B 1 81 ? 15.192 41.196 48.013 1.00 8.40 ? ? ? ? ? ? 571 GLN B N 1
+ATOM 3031 C CA . GLN B 1 81 ? 15.737 42.421 48.565 1.00 8.87 ? ? ? ? ? ? 571 GLN B CA 1
+ATOM 3032 C C . GLN B 1 81 ? 14.886 43.660 48.234 1.00 9.46 ? ? ? ? ? ? 571 GLN B C 1
+ATOM 3033 O O . GLN B 1 81 ? 14.588 43.945 47.082 1.00 9.78 ? ? ? ? ? ? 571 GLN B O 1
+ATOM 3034 C CB . GLN B 1 81 ? 17.213 42.610 48.190 1.00 10.77 ? ? ? ? ? ? 571 GLN B CB 1
+ATOM 3035 C CG . GLN B 1 81 ? 17.843 43.731 49.034 1.00 12.60 ? ? ? ? ? ? 571 GLN B CG 1
+ATOM 3036 C CD . GLN B 1 81 ? 19.333 43.820 48.908 1.00 14.97 ? ? ? ? ? ? 571 GLN B CD 1
+ATOM 3037 O OE1 . GLN B 1 81 ? 19.949 43.108 48.114 1.00 16.06 ? ? ? ? ? ? 571 GLN B OE1 1
+ATOM 3038 N NE2 . GLN B 1 81 ? 19.932 44.711 49.692 1.00 16.52 ? ? ? ? ? ? 571 GLN B NE2 1
+ATOM 3039 N N . ASN B 1 82 ? 14.463 44.349 49.282 1.00 8.71 ? ? ? ? ? ? 572 ASN B N 1
+ATOM 3040 C CA . ASN B 1 82 ? 13.599 45.517 49.214 1.00 10.61 ? ? ? ? ? ? 572 ASN B CA 1
+ATOM 3041 C C . ASN B 1 82 ? 12.204 45.345 48.679 1.00 10.21 ? ? ? ? ? ? 572 ASN B C 1
+ATOM 3042 O O . ASN B 1 82 ? 11.580 46.328 48.247 1.00 10.44 ? ? ? ? ? ? 572 ASN B O 1
+ATOM 3043 C CB . ASN B 1 82 ? 14.263 46.736 48.605 1.00 13.96 ? ? ? ? ? ? 572 ASN B CB 1
+ATOM 3044 C CG . ASN B 1 82 ? 14.777 47.635 49.666 1.00 18.48 ? ? ? ? ? ? 572 ASN B CG 1
+ATOM 3045 O OD1 . ASN B 1 82 ? 13.999 48.267 50.476 1.00 17.05 ? ? ? ? ? ? 572 ASN B OD1 1
+ATOM 3046 N ND2 . ASN B 1 82 ? 16.092 47.598 49.805 1.00 20.45 ? ? ? ? ? ? 572 ASN B ND2 1
+ATOM 3047 N N . VAL B 1 83 ? 11.710 44.103 48.733 1.00 8.14 ? ? ? ? ? ? 573 VAL B N 1
+ATOM 3048 C CA . VAL B 1 83 ? 10.345 43.789 48.355 1.00 8.34 ? ? ? ? ? ? 573 VAL B CA 1
+ATOM 3049 C C . VAL B 1 83 ? 9.712 43.275 49.674 1.00 8.90 ? ? ? ? ? ? 573 VAL B C 1
+ATOM 3050 O O . VAL B 1 83 ? 10.162 42.252 50.220 1.00 10.21 ? ? ? ? ? ? 573 VAL B O 1
+ATOM 3051 C CB . VAL B 1 83 ? 10.286 42.725 47.262 1.00 8.79 ? ? ? ? ? ? 573 VAL B CB 1
+ATOM 3052 C CG1 . VAL B 1 83 ? 8.842 42.353 46.995 1.00 9.66 ? ? ? ? ? ? 573 VAL B CG1 1
+ATOM 3053 C CG2 . VAL B 1 83 ? 10.942 43.267 45.982 1.00 9.16 ? ? ? ? ? ? 573 VAL B CG2 1
+ATOM 3054 N N . PHE B 1 84 ? 8.736 44.006 50.205 1.00 7.99 ? ? ? ? ? ? 574 PHE B N 1
+ATOM 3055 C CA . PHE B 1 84 ? 8.078 43.659 51.493 1.00 6.77 ? ? ? ? ? ? 574 PHE B CA 1
+ATOM 3056 C C . PHE B 1 84 ? 6.664 43.132 51.313 1.00 7.99 ? ? ? ? ? ? 574 PHE B C 1
+ATOM 3057 O O . PHE B 1 84 ? 5.846 43.745 50.636 1.00 10.09 ? ? ? ? ? ? 574 PHE B O 1
+ATOM 3058 C CB . PHE B 1 84 ? 8.070 44.878 52.422 1.00 7.32 ? ? ? ? ? ? 574 PHE B CB 1
+ATOM 3059 C CG . PHE B 1 84 ? 9.440 45.270 52.920 1.00 7.71 ? ? ? ? ? ? 574 PHE B CG 1
+ATOM 3060 C CD1 . PHE B 1 84 ? 10.249 46.123 52.170 1.00 8.33 ? ? ? ? ? ? 574 PHE B CD1 1
+ATOM 3061 C CD2 . PHE B 1 84 ? 9.933 44.754 54.126 1.00 8.83 ? ? ? ? ? ? 574 PHE B CD2 1
+ATOM 3062 C CE1 . PHE B 1 84 ? 11.550 46.477 52.589 1.00 8.99 ? ? ? ? ? ? 574 PHE B CE1 1
+ATOM 3063 C CE2 . PHE B 1 84 ? 11.232 45.083 54.579 1.00 9.25 ? ? ? ? ? ? 574 PHE B CE2 1
+ATOM 3064 C CZ . PHE B 1 84 ? 12.060 45.960 53.800 1.00 9.67 ? ? ? ? ? ? 574 PHE B CZ 1
+ATOM 3065 N N . ASP B 1 85 ? 6.364 41.984 51.898 1.00 7.27 ? ? ? ? ? ? 575 ASP B N 1
+ATOM 3066 C CA . ASP B 1 85 ? 5.046 41.391 51.762 1.00 7.41 ? ? ? ? ? ? 575 ASP B CA 1
+ATOM 3067 C C . ASP B 1 85 ? 4.323 41.467 53.118 1.00 8.04 ? ? ? ? ? ? 575 ASP B C 1
+ATOM 3068 O O . ASP B 1 85 ? 4.613 40.664 54.011 1.00 8.93 ? ? ? ? ? ? 575 ASP B O 1
+ATOM 3069 C CB . ASP B 1 85 ? 5.204 39.935 51.308 1.00 8.17 ? ? ? ? ? ? 575 ASP B CB 1
+ATOM 3070 C CG . ASP B 1 85 ? 3.875 39.256 51.045 1.00 8.54 ? ? ? ? ? ? 575 ASP B CG 1
+ATOM 3071 O OD1 . ASP B 1 85 ? 2.824 39.801 51.413 1.00 9.09 ? ? ? ? ? ? 575 ASP B OD1 1
+ATOM 3072 O OD2 . ASP B 1 85 ? 3.891 38.159 50.463 1.00 11.68 ? ? ? ? ? ? 575 ASP B OD2 1
+ATOM 3073 N N . PHE B 1 86 ? 3.390 42.406 53.259 1.00 7.44 ? ? ? ? ? ? 576 PHE B N 1
+ATOM 3074 C CA . PHE B 1 86 ? 2.646 42.581 54.501 1.00 7.81 ? ? ? ? ? ? 576 PHE B CA 1
+ATOM 3075 C C . PHE B 1 86 ? 1.264 41.928 54.434 1.00 9.90 ? ? ? ? ? ? 576 PHE B C 1
+ATOM 3076 O O . PHE B 1 86 ? 0.487 42.032 55.381 1.00 10.71 ? ? ? ? ? ? 576 PHE B O 1
+ATOM 3077 C CB . PHE B 1 86 ? 2.434 44.076 54.772 1.00 8.64 ? ? ? ? ? ? 576 PHE B CB 1
+ATOM 3078 C CG . PHE B 1 86 ? 3.718 44.856 54.952 1.00 10.17 ? ? ? ? ? ? 576 PHE B CG 1
+ATOM 3079 C CD1 . PHE B 1 86 ? 4.638 44.507 55.958 1.00 11.36 ? ? ? ? ? ? 576 PHE B CD1 1
+ATOM 3080 C CD2 . PHE B 1 86 ? 3.997 45.964 54.144 1.00 11.08 ? ? ? ? ? ? 576 PHE B CD2 1
+ATOM 3081 C CE1 . PHE B 1 86 ? 5.829 45.259 56.155 1.00 12.42 ? ? ? ? ? ? 576 PHE B CE1 1
+ATOM 3082 C CE2 . PHE B 1 86 ? 5.180 46.721 54.337 1.00 12.19 ? ? ? ? ? ? 576 PHE B CE2 1
+ATOM 3083 C CZ . PHE B 1 86 ? 6.095 46.364 55.343 1.00 11.83 ? ? ? ? ? ? 576 PHE B CZ 1
+ATOM 3084 N N . SER B 1 87 ? 0.969 41.214 53.359 1.00 9.74 ? ? ? ? ? ? 577 SER B N 1
+ATOM 3085 C CA . SER B 1 87 ? -0.359 40.662 53.194 1.00 10.63 ? ? ? ? ? ? 577 SER B CA 1
+ATOM 3086 C C . SER B 1 87 ? -0.943 39.814 54.338 1.00 11.47 ? ? ? ? ? ? 577 SER B C 1
+ATOM 3087 O O . SER B 1 87 ? -2.049 40.109 54.818 1.00 13.05 ? ? ? ? ? ? 577 SER B O 1
+ATOM 3088 C CB . SER B 1 87 ? -0.484 39.954 51.843 1.00 11.30 ? ? ? ? ? ? 577 SER B CB 1
+ATOM 3089 O OG . SER B 1 87 ? 0.321 38.793 51.767 1.00 14.01 ? ? ? ? ? ? 577 SER B OG 1
+ATOM 3090 N N . LYS B 1 88 ? -0.216 38.783 54.764 1.00 11.88 ? ? ? ? ? ? 578 LYS B N 1
+ATOM 3091 C CA . LYS B 1 88 ? -0.707 37.894 55.824 1.00 11.46 ? ? ? ? ? ? 578 LYS B CA 1
+ATOM 3092 C C . LYS B 1 88 ? -0.687 38.548 57.179 1.00 11.71 ? ? ? ? ? ? 578 LYS B C 1
+ATOM 3093 O O . LYS B 1 88 ? -1.656 38.438 57.940 1.00 11.54 ? ? ? ? ? ? 578 LYS B O 1
+ATOM 3094 C CB . LYS B 1 88 ? 0.067 36.588 55.810 1.00 14.38 ? ? ? ? ? ? 578 LYS B CB 1
+ATOM 3095 C CG . LYS B 1 88 ? -0.262 35.755 54.558 1.00 17.98 ? ? ? ? ? ? 578 LYS B CG 1
+ATOM 3096 C CD . LYS B 1 88 ? 0.303 34.338 54.636 1.00 22.93 ? ? ? ? ? ? 578 LYS B CD 1
+ATOM 3097 C CE . LYS B 1 88 ? 0.232 33.567 53.281 1.00 26.31 ? ? ? ? ? ? 578 LYS B CE 1
+ATOM 3098 N NZ . LYS B 1 88 ? 1.154 32.333 53.220 1.00 28.72 ? ? ? ? ? ? 578 LYS B NZ 1
+ATOM 3099 N N . GLY B 1 89 ? 0.365 39.309 57.469 1.00 9.63 ? ? ? ? ? ? 579 GLY B N 1
+ATOM 3100 C CA . GLY B 1 89 ? 0.427 39.986 58.751 1.00 10.41 ? ? ? ? ? ? 579 GLY B CA 1
+ATOM 3101 C C . GLY B 1 89 ? -0.703 40.993 58.913 1.00 10.41 ? ? ? ? ? ? 579 GLY B C 1
+ATOM 3102 O O . GLY B 1 89 ? -1.264 41.143 59.997 1.00 11.53 ? ? ? ? ? ? 579 GLY B O 1
+ATOM 3103 N N . ASP B 1 90 ? -1.014 41.738 57.851 1.00 9.62 ? ? ? ? ? ? 580 ASP B N 1
+ATOM 3104 C CA . ASP B 1 90 ? -2.084 42.742 57.908 1.00 9.52 ? ? ? ? ? ? 580 ASP B CA 1
+ATOM 3105 C C . ASP B 1 90 ? -3.462 42.061 58.028 1.00 8.94 ? ? ? ? ? ? 580 ASP B C 1
+ATOM 3106 O O . ASP B 1 90 ? -4.379 42.627 58.619 1.00 10.29 ? ? ? ? ? ? 580 ASP B O 1
+ATOM 3107 C CB . ASP B 1 90 ? -2.034 43.661 56.679 1.00 10.90 ? ? ? ? ? ? 580 ASP B CB 1
+ATOM 3108 C CG . ASP B 1 90 ? -0.930 44.722 56.760 1.00 12.19 ? ? ? ? ? ? 580 ASP B CG 1
+ATOM 3109 O OD1 . ASP B 1 90 ? -0.092 44.715 57.671 1.00 12.06 ? ? ? ? ? ? 580 ASP B OD1 1
+ATOM 3110 O OD2 . ASP B 1 90 ? -0.908 45.591 55.866 1.00 14.11 ? ? ? ? ? ? 580 ASP B OD2 1
+ATOM 3111 N N . GLN B 1 91 ? -3.583 40.858 57.469 1.00 9.79 ? ? ? ? ? ? 581 GLN B N 1
+ATOM 3112 C CA . GLN B 1 91 ? -4.826 40.093 57.558 1.00 11.60 ? ? ? ? ? ? 581 GLN B CA 1
+ATOM 3113 C C . GLN B 1 91 ? -5.055 39.674 59.029 1.00 10.85 ? ? ? ? ? ? 581 GLN B C 1
+ATOM 3114 O O . GLN B 1 91 ? -6.171 39.828 59.557 1.00 10.57 ? ? ? ? ? ? 581 GLN B O 1
+ATOM 3115 C CB . GLN B 1 91 ? -4.735 38.863 56.681 1.00 14.32 ? ? ? ? ? ? 581 GLN B CB 1
+ATOM 3116 C CG . GLN B 1 91 ? -5.973 38.027 56.774 1.00 20.03 ? ? ? ? ? ? 581 GLN B CG 1
+ATOM 3117 C CD . GLN B 1 91 ? -5.952 36.833 55.852 1.00 22.59 ? ? ? ? ? ? 581 GLN B CD 1
+ATOM 3118 O OE1 . GLN B 1 91 ? -5.033 36.672 55.031 1.00 25.07 ? ? ? ? ? ? 581 GLN B OE1 1
+ATOM 3119 N NE2 . GLN B 1 91 ? -6.973 35.971 55.979 1.00 24.78 ? ? ? ? ? ? 581 GLN B NE2 1
+ATOM 3120 N N . LEU B 1 92 ? -3.999 39.188 59.688 1.00 9.78 ? ? ? ? ? ? 582 LEU B N 1
+ATOM 3121 C CA . LEU B 1 92 ? -4.127 38.808 61.096 1.00 10.85 ? ? ? ? ? ? 582 LEU B CA 1
+ATOM 3122 C C . LEU B 1 92 ? -4.407 40.028 61.970 1.00 10.87 ? ? ? ? ? ? 582 LEU B C 1
+ATOM 3123 O O . LEU B 1 92 ? -5.257 39.979 62.868 1.00 10.16 ? ? ? ? ? ? 582 LEU B O 1
+ATOM 3124 C CB . LEU B 1 92 ? -2.906 38.030 61.611 1.00 11.35 ? ? ? ? ? ? 582 LEU B CB 1
+ATOM 3125 C CG . LEU B 1 92 ? -3.056 37.500 63.053 1.00 11.80 ? ? ? ? ? ? 582 LEU B CG 1
+ATOM 3126 C CD1 . LEU B 1 92 ? -4.244 36.573 63.182 1.00 12.94 ? ? ? ? ? ? 582 LEU B CD1 1
+ATOM 3127 C CD2 . LEU B 1 92 ? -1.809 36.733 63.432 1.00 13.21 ? ? ? ? ? ? 582 LEU B CD2 1
+ATOM 3128 N N . LEU B 1 93 ? -3.749 41.148 61.690 1.00 9.95 ? ? ? ? ? ? 583 LEU B N 1
+ATOM 3129 C CA . LEU B 1 93 ? -3.992 42.353 62.470 1.00 11.41 ? ? ? ? ? ? 583 LEU B CA 1
+ATOM 3130 C C . LEU B 1 93 ? -5.455 42.825 62.407 1.00 11.58 ? ? ? ? ? ? 583 LEU B C 1
+ATOM 3131 O O . LEU B 1 93 ? -6.012 43.218 63.422 1.00 12.02 ? ? ? ? ? ? 583 LEU B O 1
+ATOM 3132 C CB . LEU B 1 93 ? -3.036 43.488 62.065 1.00 12.50 ? ? ? ? ? ? 583 LEU B CB 1
+ATOM 3133 C CG . LEU B 1 93 ? -3.218 44.792 62.859 1.00 15.13 ? ? ? ? ? ? 583 LEU B CG 1
+ATOM 3134 C CD1 . LEU B 1 93 ? -3.073 44.577 64.361 1.00 17.01 ? ? ? ? ? ? 583 LEU B CD1 1
+ATOM 3135 C CD2 . LEU B 1 93 ? -2.199 45.836 62.404 1.00 16.30 ? ? ? ? ? ? 583 LEU B CD2 1
+ATOM 3136 N N . ALA B 1 94 ? -6.058 42.826 61.223 1.00 10.22 ? ? ? ? ? ? 584 ALA B N 1
+ATOM 3137 C CA . ALA B 1 94 ? -7.444 43.257 61.084 1.00 10.59 ? ? ? ? ? ? 584 ALA B CA 1
+ATOM 3138 C C . ALA B 1 94 ? -8.355 42.357 61.926 1.00 9.92 ? ? ? ? ? ? 584 ALA B C 1
+ATOM 3139 O O . ALA B 1 94 ? -9.291 42.849 62.563 1.00 10.24 ? ? ? ? ? ? 584 ALA B O 1
+ATOM 3140 C CB . ALA B 1 94 ? -7.879 43.213 59.633 1.00 10.82 ? ? ? ? ? ? 584 ALA B CB 1
+ATOM 3141 N N . PHE B 1 95 ? -8.091 41.049 61.886 1.00 9.55 ? ? ? ? ? ? 585 PHE B N 1
+ATOM 3142 C CA . PHE B 1 95 ? -8.855 40.065 62.666 1.00 10.43 ? ? ? ? ? ? 585 PHE B CA 1
+ATOM 3143 C C . PHE B 1 95 ? -8.709 40.367 64.174 1.00 10.92 ? ? ? ? ? ? 585 PHE B C 1
+ATOM 3144 O O . PHE B 1 95 ? -9.720 40.415 64.901 1.00 10.36 ? ? ? ? ? ? 585 PHE B O 1
+ATOM 3145 C CB . PHE B 1 95 ? -8.371 38.657 62.318 1.00 10.60 ? ? ? ? ? ? 585 PHE B CB 1
+ATOM 3146 C CG . PHE B 1 95 ? -8.915 37.569 63.208 1.00 11.63 ? ? ? ? ? ? 585 PHE B CG 1
+ATOM 3147 C CD1 . PHE B 1 95 ? -10.128 36.952 62.926 1.00 12.20 ? ? ? ? ? ? 585 PHE B CD1 1
+ATOM 3148 C CD2 . PHE B 1 95 ? -8.183 37.122 64.306 1.00 13.33 ? ? ? ? ? ? 585 PHE B CD2 1
+ATOM 3149 C CE1 . PHE B 1 95 ? -10.609 35.897 63.733 1.00 12.06 ? ? ? ? ? ? 585 PHE B CE1 1
+ATOM 3150 C CE2 . PHE B 1 95 ? -8.668 36.065 65.111 1.00 12.97 ? ? ? ? ? ? 585 PHE B CE2 1
+ATOM 3151 C CZ . PHE B 1 95 ? -9.874 35.473 64.810 1.00 11.81 ? ? ? ? ? ? 585 PHE B CZ 1
+ATOM 3152 N N . ALA B 1 96 ? -7.467 40.631 64.620 1.00 10.74 ? ? ? ? ? ? 586 ALA B N 1
+ATOM 3153 C CA . ALA B 1 96 ? -7.161 40.952 66.032 1.00 11.28 ? ? ? ? ? ? 586 ALA B CA 1
+ATOM 3154 C C . ALA B 1 96 ? -7.943 42.190 66.455 1.00 12.87 ? ? ? ? ? ? 586 ALA B C 1
+ATOM 3155 O O . ALA B 1 96 ? -8.618 42.198 67.494 1.00 12.68 ? ? ? ? ? ? 586 ALA B O 1
+ATOM 3156 C CB . ALA B 1 96 ? -5.675 41.195 66.227 1.00 10.15 ? ? ? ? ? ? 586 ALA B CB 1
+ATOM 3157 N N . GLU B 1 97 ? -7.955 43.193 65.588 1.00 13.10 ? ? ? ? ? ? 587 GLU B N 1
+ATOM 3158 C CA . GLU B 1 97 ? -8.655 44.411 65.884 1.00 15.27 ? ? ? ? ? ? 587 GLU B CA 1
+ATOM 3159 C C . GLU B 1 97 ? -10.167 44.269 66.008 1.00 14.49 ? ? ? ? ? ? 587 GLU B C 1
+ATOM 3160 O O . GLU B 1 97 ? -10.742 44.837 66.924 1.00 15.69 ? ? ? ? ? ? 587 GLU B O 1
+ATOM 3161 C CB . GLU B 1 97 ? -8.245 45.495 64.893 1.00 19.03 ? ? ? ? ? ? 587 GLU B CB 1
+ATOM 3162 C CG . GLU B 1 97 ? -6.757 45.847 65.079 1.00 24.09 ? ? ? ? ? ? 587 GLU B CG 1
+ATOM 3163 C CD . GLU B 1 97 ? -6.309 47.080 64.310 1.00 27.46 ? ? ? ? ? ? 587 GLU B CD 1
+ATOM 3164 O OE1 . GLU B 1 97 ? -6.821 47.329 63.191 1.00 29.14 ? ? ? ? ? ? 587 GLU B OE1 1
+ATOM 3165 O OE2 . GLU B 1 97 ? -5.407 47.781 64.827 1.00 30.35 ? ? ? ? ? ? 587 GLU B OE2 1
+ATOM 3166 N N . ARG B 1 98 ? -10.829 43.502 65.151 1.00 13.75 ? ? ? ? ? ? 588 ARG B N 1
+ATOM 3167 C CA . ARG B 1 98 ? -12.291 43.382 65.310 1.00 15.26 ? ? ? ? ? ? 588 ARG B CA 1
+ATOM 3168 C C . ARG B 1 98 ? -12.698 42.413 66.457 1.00 14.57 ? ? ? ? ? ? 588 ARG B C 1
+ATOM 3169 O O . ARG B 1 98 ? -13.887 42.309 66.814 1.00 13.80 ? ? ? ? ? ? 588 ARG B O 1
+ATOM 3170 C CB . ARG B 1 98 ? -12.978 43.011 63.975 1.00 17.60 ? ? ? ? ? ? 588 ARG B CB 1
+ATOM 3171 C CG . ARG B 1 98 ? -13.005 41.557 63.616 1.00 19.93 ? ? ? ? ? ? 588 ARG B CG 1
+ATOM 3172 C CD . ARG B 1 98 ? -13.743 41.335 62.278 1.00 23.51 ? ? ? ? ? ? 588 ARG B CD 1
+ATOM 3173 N NE . ARG B 1 98 ? -12.777 41.482 61.201 1.00 27.19 ? ? ? ? ? ? 588 ARG B NE 1
+ATOM 3174 C CZ . ARG B 1 98 ? -12.258 40.475 60.494 1.00 27.07 ? ? ? ? ? ? 588 ARG B CZ 1
+ATOM 3175 N NH1 . ARG B 1 98 ? -12.650 39.225 60.691 1.00 27.91 ? ? ? ? ? ? 588 ARG B NH1 1
+ATOM 3176 N NH2 . ARG B 1 98 ? -11.164 40.685 59.781 1.00 27.30 ? ? ? ? ? ? 588 ARG B NH2 1
+ATOM 3177 N N . ASN B 1 99 ? -11.705 41.730 67.042 1.00 13.38 ? ? ? ? ? ? 589 ASN B N 1
+ATOM 3178 C CA . ASN B 1 99 ? -11.946 40.795 68.147 1.00 12.25 ? ? ? ? ? ? 589 ASN B CA 1
+ATOM 3179 C C . ASN B 1 99 ? -11.363 41.226 69.480 1.00 12.64 ? ? ? ? ? ? 589 ASN B C 1
+ATOM 3180 O O . ASN B 1 99 ? -11.353 40.456 70.436 1.00 13.35 ? ? ? ? ? ? 589 ASN B O 1
+ATOM 3181 C CB . ASN B 1 99 ? -11.505 39.389 67.768 1.00 11.07 ? ? ? ? ? ? 589 ASN B CB 1
+ATOM 3182 C CG . ASN B 1 99 ? -12.458 38.761 66.796 1.00 12.80 ? ? ? ? ? ? 589 ASN B CG 1
+ATOM 3183 O OD1 . ASN B 1 99 ? -13.597 38.486 67.156 1.00 14.86 ? ? ? ? ? ? 589 ASN B OD1 1
+ATOM 3184 N ND2 . ASN B 1 99 ? -12.041 38.599 65.539 1.00 12.82 ? ? ? ? ? ? 589 ASN B ND2 1
+ATOM 3185 N N . GLY B 1 100 ? -10.959 42.489 69.552 1.00 12.24 ? ? ? ? ? ? 590 GLY B N 1
+ATOM 3186 C CA . GLY B 1 100 ? -10.402 43.037 70.769 1.00 13.06 ? ? ? ? ? ? 590 GLY B CA 1
+ATOM 3187 C C . GLY B 1 100 ? -9.165 42.323 71.280 1.00 14.24 ? ? ? ? ? ? 590 GLY B C 1
+ATOM 3188 O O . GLY B 1 100 ? -8.971 42.228 72.499 1.00 16.23 ? ? ? ? ? ? 590 GLY B O 1
+ATOM 3189 N N . MET B 1 101 ? -8.317 41.850 70.370 1.00 12.92 ? ? ? ? ? ? 591 MET B N 1
+ATOM 3190 C CA . MET B 1 101 ? -7.096 41.155 70.737 1.00 12.23 ? ? ? ? ? ? 591 MET B CA 1
+ATOM 3191 C C . MET B 1 101 ? -5.851 42.000 70.511 1.00 12.53 ? ? ? ? ? ? 591 MET B C 1
+ATOM 3192 O O . MET B 1 101 ? -5.845 42.905 69.680 1.00 13.18 ? ? ? ? ? ? 591 MET B O 1
+ATOM 3193 C CB . MET B 1 101 ? -6.951 39.900 69.896 1.00 13.10 ? ? ? ? ? ? 591 MET B CB 1
+ATOM 3194 C CG . MET B 1 101 ? -8.140 38.974 69.927 1.00 13.60 ? ? ? ? ? ? 591 MET B CG 1
+ATOM 3195 S SD . MET B 1 101 ? -7.858 37.701 68.741 1.00 17.58 ? ? ? ? ? ? 591 MET B SD 1
+ATOM 3196 C CE . MET B 1 101 ? -9.104 36.592 69.158 1.00 18.39 ? ? ? ? ? ? 591 MET B CE 1
+ATOM 3197 N N . GLN B 1 102 ? -4.795 41.684 71.251 1.00 12.34 ? ? ? ? ? ? 592 GLN B N 1
+ATOM 3198 C CA . GLN B 1 102 ? -3.506 42.340 71.095 1.00 13.25 ? ? ? ? ? ? 592 GLN B CA 1
+ATOM 3199 C C . GLN B 1 102 ? -2.660 41.381 70.277 1.00 12.33 ? ? ? ? ? ? 592 GLN B C 1
+ATOM 3200 O O . GLN B 1 102 ? -3.027 40.226 70.102 1.00 11.66 ? ? ? ? ? ? 592 GLN B O 1
+ATOM 3201 C CB . GLN B 1 102 ? -2.848 42.633 72.445 1.00 15.63 ? ? ? ? ? ? 592 GLN B CB 1
+ATOM 3202 C CG . GLN B 1 102 ? -3.569 43.731 73.231 1.00 19.61 ? ? ? ? ? ? 592 GLN B CG 1
+ATOM 3203 C CD . GLN B 1 102 ? -2.866 44.121 74.522 1.00 23.55 ? ? ? ? ? ? 592 GLN B CD 1
+ATOM 3204 O OE1 . GLN B 1 102 ? -2.036 43.369 75.062 1.00 26.20 ? ? ? ? ? ? 592 GLN B OE1 1
+ATOM 3205 N NE2 . GLN B 1 102 ? -3.182 45.312 75.021 1.00 25.51 ? ? ? ? ? ? 592 GLN B NE2 1
+ATOM 3206 N N . MET B 1 103 ? -1.548 41.879 69.743 1.00 12.73 ? ? ? ? ? ? 593 MET B N 1
+ATOM 3207 C CA . MET B 1 103 ? -0.678 41.082 68.892 1.00 13.26 ? ? ? ? ? ? 593 MET B CA 1
+ATOM 3208 C C . MET B 1 103 ? 0.787 41.200 69.262 1.00 11.84 ? ? ? ? ? ? 593 MET B C 1
+ATOM 3209 O O . MET B 1 103 ? 1.217 42.265 69.673 1.00 13.73 ? ? ? ? ? ? 593 MET B O 1
+ATOM 3210 C CB . MET B 1 103 ? -0.876 41.574 67.445 1.00 15.33 ? ? ? ? ? ? 593 MET B CB 1
+ATOM 3211 C CG . MET B 1 103 ? -0.193 40.760 66.367 1.00 18.86 ? ? ? ? ? ? 593 MET B CG 1
+ATOM 3212 S SD . MET B 1 103 ? -0.944 41.203 64.777 1.00 21.56 ? ? ? ? ? ? 593 MET B SD 1
+ATOM 3213 C CE . MET B 1 103 ? 0.054 40.297 63.672 1.00 23.32 ? ? ? ? ? ? 593 MET B CE 1
+ATOM 3214 N N . ARG B 1 104 ? 1.526 40.091 69.192 1.00 10.21 ? ? ? ? ? ? 594 ARG B N 1
+ATOM 3215 C CA . ARG B 1 104 ? 2.981 40.114 69.413 1.00 10.05 ? ? ? ? ? ? 594 ARG B CA 1
+ATOM 3216 C C . ARG B 1 104 ? 3.608 39.971 68.005 1.00 10.64 ? ? ? ? ? ? 594 ARG B C 1
+ATOM 3217 O O . ARG B 1 104 ? 3.061 39.263 67.153 1.00 11.00 ? ? ? ? ? ? 594 ARG B O 1
+ATOM 3218 C CB . ARG B 1 104 ? 3.468 38.924 70.269 1.00 10.64 ? ? ? ? ? ? 594 ARG B CB 1
+ATOM 3219 C CG . ARG B 1 104 ? 2.907 38.829 71.701 1.00 9.93 ? ? ? ? ? ? 594 ARG B CG 1
+ATOM 3220 C CD . ARG B 1 104 ? 3.654 37.749 72.492 1.00 9.45 ? ? ? ? ? ? 594 ARG B CD 1
+ATOM 3221 N NE . ARG B 1 104 ? 4.915 38.253 73.044 1.00 9.36 ? ? ? ? ? ? 594 ARG B NE 1
+ATOM 3222 C CZ . ARG B 1 104 ? 6.136 37.919 72.616 1.00 9.01 ? ? ? ? ? ? 594 ARG B CZ 1
+ATOM 3223 N NH1 . ARG B 1 104 ? 6.313 37.046 71.612 1.00 8.26 ? ? ? ? ? ? 594 ARG B NH1 1
+ATOM 3224 N NH2 . ARG B 1 104 ? 7.204 38.532 73.149 1.00 10.25 ? ? ? ? ? ? 594 ARG B NH2 1
+ATOM 3225 N N . GLY B 1 105 ? 4.760 40.610 67.784 1.00 8.77 ? ? ? ? ? ? 595 GLY B N 1
+ATOM 3226 C CA . GLY B 1 105 ? 5.445 40.517 66.503 1.00 8.49 ? ? ? ? ? ? 595 GLY B CA 1
+ATOM 3227 C C . GLY B 1 105 ? 6.554 39.488 66.648 1.00 8.79 ? ? ? ? ? ? 595 GLY B C 1
+ATOM 3228 O O . GLY B 1 105 ? 7.393 39.586 67.532 1.00 10.49 ? ? ? ? ? ? 595 GLY B O 1
+ATOM 3229 N N . HIS B 1 106 ? 6.600 38.516 65.762 1.00 9.22 ? ? ? ? ? ? 596 HIS B N 1
+ATOM 3230 C CA . HIS B 1 106 ? 7.590 37.453 65.843 1.00 9.60 ? ? ? ? ? ? 596 HIS B CA 1
+ATOM 3231 C C . HIS B 1 106 ? 8.020 37.154 64.396 1.00 9.76 ? ? ? ? ? ? 596 HIS B C 1
+ATOM 3232 O O . HIS B 1 106 ? 7.191 36.683 63.601 1.00 10.71 ? ? ? ? ? ? 596 HIS B O 1
+ATOM 3233 C CB . HIS B 1 106 ? 6.889 36.233 66.489 1.00 10.63 ? ? ? ? ? ? 596 HIS B CB 1
+ATOM 3234 C CG . HIS B 1 106 ? 7.743 35.013 66.588 1.00 11.00 ? ? ? ? ? ? 596 HIS B CG 1
+ATOM 3235 N ND1 . HIS B 1 106 ? 8.725 34.866 67.545 1.00 12.07 ? ? ? ? ? ? 596 HIS B ND1 1
+ATOM 3236 C CD2 . HIS B 1 106 ? 7.785 33.893 65.832 1.00 12.33 ? ? ? ? ? ? 596 HIS B CD2 1
+ATOM 3237 C CE1 . HIS B 1 106 ? 9.340 33.712 67.370 1.00 11.28 ? ? ? ? ? ? 596 HIS B CE1 1
+ATOM 3238 N NE2 . HIS B 1 106 ? 8.791 33.101 66.336 1.00 12.31 ? ? ? ? ? ? 596 HIS B NE2 1
+ATOM 3239 N N . THR B 1 107 ? 9.289 37.366 64.029 1.00 9.09 ? ? ? ? ? ? 597 THR B N 1
+ATOM 3240 C CA . THR B 1 107 ? 10.404 37.870 64.862 1.00 8.20 ? ? ? ? ? ? 597 THR B CA 1
+ATOM 3241 C C . THR B 1 107 ? 11.358 38.515 63.828 1.00 8.37 ? ? ? ? ? ? 597 THR B C 1
+ATOM 3242 O O . THR B 1 107 ? 11.420 38.064 62.681 1.00 8.84 ? ? ? ? ? ? 597 THR B O 1
+ATOM 3243 C CB . THR B 1 107 ? 11.150 36.695 65.612 1.00 8.91 ? ? ? ? ? ? 597 THR B CB 1
+ATOM 3244 O OG1 . THR B 1 107 ? 12.288 37.196 66.322 1.00 8.90 ? ? ? ? ? ? 597 THR B OG1 1
+ATOM 3245 C CG2 . THR B 1 107 ? 11.614 35.573 64.618 1.00 10.72 ? ? ? ? ? ? 597 THR B CG2 1
+ATOM 3246 N N . LEU B 1 108 ? 12.155 39.484 64.252 1.00 8.20 ? ? ? ? ? ? 598 LEU B N 1
+ATOM 3247 C CA . LEU B 1 108 ? 13.022 40.201 63.320 1.00 8.51 ? ? ? ? ? ? 598 LEU B CA 1
+ATOM 3248 C C . LEU B 1 108 ? 14.347 39.561 62.955 1.00 9.00 ? ? ? ? ? ? 598 LEU B C 1
+ATOM 3249 O O . LEU B 1 108 ? 14.584 39.230 61.790 1.00 11.01 ? ? ? ? ? ? 598 LEU B O 1
+ATOM 3250 C CB . LEU B 1 108 ? 13.205 41.658 63.808 1.00 8.63 ? ? ? ? ? ? 598 LEU B CB 1
+ATOM 3251 C CG . LEU B 1 108 ? 11.890 42.447 63.943 1.00 9.80 ? ? ? ? ? ? 598 LEU B CG 1
+ATOM 3252 C CD1 . LEU B 1 108 ? 12.060 43.724 64.758 1.00 10.76 ? ? ? ? ? ? 598 LEU B CD1 1
+ATOM 3253 C CD2 . LEU B 1 108 ? 11.312 42.770 62.537 1.00 11.66 ? ? ? ? ? ? 598 LEU B CD2 1
+ATOM 3254 N N . ILE B 1 109 ? 15.186 39.324 63.951 1.00 8.83 ? ? ? ? ? ? 599 ILE B N 1
+ATOM 3255 C CA . ILE B 1 109 ? 16.526 38.802 63.730 1.00 10.11 ? ? ? ? ? ? 599 ILE B CA 1
+ATOM 3256 C C . ILE B 1 109 ? 16.640 37.380 64.287 1.00 11.26 ? ? ? ? ? ? 599 ILE B C 1
+ATOM 3257 O O . ILE B 1 109 ? 16.536 37.181 65.510 1.00 11.64 ? ? ? ? ? ? 599 ILE B O 1
+ATOM 3258 C CB . ILE B 1 109 ? 17.560 39.752 64.443 1.00 11.43 ? ? ? ? ? ? 599 ILE B CB 1
+ATOM 3259 C CG1 . ILE B 1 109 ? 17.374 41.210 63.985 1.00 12.37 ? ? ? ? ? ? 599 ILE B CG1 1
+ATOM 3260 C CG2 . ILE B 1 109 ? 18.978 39.250 64.287 1.00 12.44 ? ? ? ? ? ? 599 ILE B CG2 1
+ATOM 3261 C CD1 . ILE B 1 109 ? 17.391 41.424 62.477 1.00 14.29 ? ? ? ? ? ? 599 ILE B CD1 1
+ATOM 3262 N N . TRP B 1 110 ? 16.924 36.423 63.410 1.00 10.90 ? ? ? ? ? ? 600 TRP B N 1
+ATOM 3263 C CA . TRP B 1 110 ? 17.030 35.023 63.794 1.00 12.03 ? ? ? ? ? ? 600 TRP B CA 1
+ATOM 3264 C C . TRP B 1 110 ? 18.036 34.365 62.829 1.00 14.26 ? ? ? ? ? ? 600 TRP B C 1
+ATOM 3265 O O . TRP B 1 110 ? 18.325 34.905 61.741 1.00 13.38 ? ? ? ? ? ? 600 TRP B O 1
+ATOM 3266 C CB . TRP B 1 110 ? 15.651 34.422 63.642 1.00 12.38 ? ? ? ? ? ? 600 TRP B CB 1
+ATOM 3267 C CG . TRP B 1 110 ? 15.472 33.058 64.149 1.00 14.20 ? ? ? ? ? ? 600 TRP B CG 1
+ATOM 3268 C CD1 . TRP B 1 110 ? 16.160 32.425 65.163 1.00 13.82 ? ? ? ? ? ? 600 TRP B CD1 1
+ATOM 3269 C CD2 . TRP B 1 110 ? 14.463 32.156 63.721 1.00 14.94 ? ? ? ? ? ? 600 TRP B CD2 1
+ATOM 3270 N NE1 . TRP B 1 110 ? 15.614 31.172 65.392 1.00 13.80 ? ? ? ? ? ? 600 TRP B NE1 1
+ATOM 3271 C CE2 . TRP B 1 110 ? 14.572 30.985 64.519 1.00 14.98 ? ? ? ? ? ? 600 TRP B CE2 1
+ATOM 3272 C CE3 . TRP B 1 110 ? 13.465 32.223 62.740 1.00 16.49 ? ? ? ? ? ? 600 TRP B CE3 1
+ATOM 3273 C CZ2 . TRP B 1 110 ? 13.711 29.894 64.356 1.00 16.58 ? ? ? ? ? ? 600 TRP B CZ2 1
+ATOM 3274 C CZ3 . TRP B 1 110 ? 12.611 31.142 62.581 1.00 17.30 ? ? ? ? ? ? 600 TRP B CZ3 1
+ATOM 3275 C CH2 . TRP B 1 110 ? 12.738 29.989 63.387 1.00 17.23 ? ? ? ? ? ? 600 TRP B CH2 1
+ATOM 3276 N N . HIS B 1 111 ? 18.620 33.235 63.237 1.00 14.82 ? ? ? ? ? ? 601 HIS B N 1
+ATOM 3277 C CA . HIS B 1 111 ? 19.606 32.537 62.392 1.00 15.97 ? ? ? ? ? ? 601 HIS B CA 1
+ATOM 3278 C C . HIS B 1 111 ? 18.939 31.582 61.413 1.00 16.70 ? ? ? ? ? ? 601 HIS B C 1
+ATOM 3279 O O . HIS B 1 111 ? 19.577 31.100 60.485 1.00 18.39 ? ? ? ? ? ? 601 HIS B O 1
+ATOM 3280 C CB . HIS B 1 111 ? 20.634 31.790 63.260 1.00 16.03 ? ? ? ? ? ? 601 HIS B CB 1
+ATOM 3281 C CG . HIS B 1 111 ? 20.015 30.812 64.207 1.00 16.82 ? ? ? ? ? ? 601 HIS B CG 1
+ATOM 3282 N ND1 . HIS B 1 111 ? 20.014 29.449 63.982 1.00 18.27 ? ? ? ? ? ? 601 HIS B ND1 1
+ATOM 3283 C CD2 . HIS B 1 111 ? 19.322 31.006 65.358 1.00 16.42 ? ? ? ? ? ? 601 HIS B CD2 1
+ATOM 3284 C CE1 . HIS B 1 111 ? 19.340 28.849 64.953 1.00 16.48 ? ? ? ? ? ? 601 HIS B CE1 1
+ATOM 3285 N NE2 . HIS B 1 111 ? 18.913 29.770 65.799 1.00 17.05 ? ? ? ? ? ? 601 HIS B NE2 1
+ATOM 3286 N N . ASN B 1 112 ? 17.654 31.322 61.605 1.00 18.55 ? ? ? ? ? ? 602 ASN B N 1
+ATOM 3287 C CA . ASN B 1 112 ? 16.904 30.424 60.719 1.00 22.20 ? ? ? ? ? ? 602 ASN B CA 1
+ATOM 3288 C C . ASN B 1 112 ? 15.886 31.201 59.871 1.00 21.73 ? ? ? ? ? ? 602 ASN B C 1
+ATOM 3289 O O . ASN B 1 112 ? 15.471 32.314 60.226 1.00 20.04 ? ? ? ? ? ? 602 ASN B O 1
+ATOM 3290 C CB . ASN B 1 112 ? 16.079 29.421 61.532 1.00 25.77 ? ? ? ? ? ? 602 ASN B CB 1
+ATOM 3291 C CG . ASN B 1 112 ? 16.830 28.157 61.879 1.00 30.10 ? ? ? ? ? ? 602 ASN B CG 1
+ATOM 3292 O OD1 . ASN B 1 112 ? 17.846 27.806 61.256 1.00 32.36 ? ? ? ? ? ? 602 ASN B OD1 1
+ATOM 3293 N ND2 . ASN B 1 112 ? 16.314 27.437 62.890 1.00 31.87 ? ? ? ? ? ? 602 ASN B ND2 1
+ATOM 3294 N N . GLN B 1 113 ? 15.406 30.534 58.826 1.00 22.42 ? ? ? ? ? ? 603 GLN B N 1
+ATOM 3295 C CA . GLN B 1 113 ? 14.395 31.091 57.944 1.00 24.17 ? ? ? ? ? ? 603 GLN B CA 1
+ATOM 3296 C C . GLN B 1 113 ? 14.753 32.450 57.347 1.00 21.86 ? ? ? ? ? ? 603 GLN B C 1
+ATOM 3297 O O . GLN B 1 113 ? 13.963 33.410 57.412 1.00 23.34 ? ? ? ? ? ? 603 GLN B O 1
+ATOM 3298 C CB . GLN B 1 113 ? 13.018 31.109 58.659 1.00 28.06 ? ? ? ? ? ? 603 GLN B CB 1
+ATOM 3299 C CG . GLN B 1 113 ? 12.457 29.672 58.897 1.00 32.58 ? ? ? ? ? ? 603 GLN B CG 1
+ATOM 3300 C CD . GLN B 1 113 ? 11.058 29.628 59.532 1.00 35.43 ? ? ? ? ? ? 603 GLN B CD 1
+ATOM 3301 O OE1 . GLN B 1 113 ? 10.906 29.290 60.723 1.00 36.62 ? ? ? ? ? ? 603 GLN B OE1 1
+ATOM 3302 N NE2 . GLN B 1 113 ? 10.024 29.934 58.731 1.00 36.92 ? ? ? ? ? ? 603 GLN B NE2 1
+ATOM 3303 N N . ASN B 1 114 ? 15.982 32.544 56.846 1.00 18.56 ? ? ? ? ? ? 604 ASN B N 1
+ATOM 3304 C CA . ASN B 1 114 ? 16.452 33.767 56.189 1.00 16.23 ? ? ? ? ? ? 604 ASN B CA 1
+ATOM 3305 C C . ASN B 1 114 ? 16.356 33.489 54.692 1.00 14.27 ? ? ? ? ? ? 604 ASN B C 1
+ATOM 3306 O O . ASN B 1 114 ? 16.548 32.356 54.255 1.00 14.07 ? ? ? ? ? ? 604 ASN B O 1
+ATOM 3307 C CB . ASN B 1 114 ? 17.868 34.124 56.631 1.00 14.66 ? ? ? ? ? ? 604 ASN B CB 1
+ATOM 3308 C CG . ASN B 1 114 ? 17.877 34.696 58.022 1.00 14.54 ? ? ? ? ? ? 604 ASN B CG 1
+ATOM 3309 O OD1 . ASN B 1 114 ? 16.996 35.459 58.373 1.00 15.26 ? ? ? ? ? ? 604 ASN B OD1 1
+ATOM 3310 N ND2 . ASN B 1 114 ? 18.835 34.312 58.817 1.00 13.65 ? ? ? ? ? ? 604 ASN B ND2 1
+ATOM 3311 N N . PRO B 1 115 ? 15.978 34.498 53.902 1.00 12.62 ? ? ? ? ? ? 605 PRO B N 1
+ATOM 3312 C CA . PRO B 1 115 ? 15.847 34.294 52.449 1.00 12.43 ? ? ? ? ? ? 605 PRO B CA 1
+ATOM 3313 C C . PRO B 1 115 ? 17.184 34.127 51.686 1.00 11.59 ? ? ? ? ? ? 605 PRO B C 1
+ATOM 3314 O O . PRO B 1 115 ? 18.258 34.534 52.179 1.00 11.15 ? ? ? ? ? ? 605 PRO B O 1
+ATOM 3315 C CB . PRO B 1 115 ? 15.009 35.500 52.017 1.00 11.99 ? ? ? ? ? ? 605 PRO B CB 1
+ATOM 3316 C CG . PRO B 1 115 ? 15.452 36.579 52.968 1.00 12.18 ? ? ? ? ? ? 605 PRO B CG 1
+ATOM 3317 C CD . PRO B 1 115 ? 15.597 35.862 54.304 1.00 12.49 ? ? ? ? ? ? 605 PRO B CD 1
+ATOM 3318 N N . SER B 1 116 ? 17.127 33.458 50.529 1.00 11.63 ? ? ? ? ? ? 606 SER B N 1
+ATOM 3319 C CA . SER B 1 116 ? 18.337 33.195 49.724 1.00 13.09 ? ? ? ? ? ? 606 SER B CA 1
+ATOM 3320 C C . SER B 1 116 ? 19.207 34.435 49.438 1.00 11.53 ? ? ? ? ? ? 606 SER B C 1
+ATOM 3321 O O . SER B 1 116 ? 20.438 34.342 49.427 1.00 11.82 ? ? ? ? ? ? 606 SER B O 1
+ATOM 3322 C CB . SER B 1 116 ? 17.971 32.541 48.371 1.00 14.79 ? ? ? ? ? ? 606 SER B CB 1
+ATOM 3323 O OG . SER B 1 116 ? 17.408 31.259 48.555 1.00 19.63 ? ? ? ? ? ? 606 SER B OG 1
+ATOM 3324 N N . TRP B 1 117 ? 18.571 35.580 49.169 1.00 10.84 ? ? ? ? ? ? 607 TRP B N 1
+ATOM 3325 C CA . TRP B 1 117 ? 19.337 36.792 48.860 1.00 10.78 ? ? ? ? ? ? 607 TRP B CA 1
+ATOM 3326 C C . TRP B 1 117 ? 20.232 37.238 50.018 1.00 11.36 ? ? ? ? ? ? 607 TRP B C 1
+ATOM 3327 O O . TRP B 1 117 ? 21.290 37.820 49.807 1.00 11.47 ? ? ? ? ? ? 607 TRP B O 1
+ATOM 3328 C CB . TRP B 1 117 ? 18.422 37.947 48.393 1.00 10.08 ? ? ? ? ? ? 607 TRP B CB 1
+ATOM 3329 C CG . TRP B 1 117 ? 17.477 38.512 49.407 1.00 8.88 ? ? ? ? ? ? 607 TRP B CG 1
+ATOM 3330 C CD1 . TRP B 1 117 ? 16.163 38.150 49.602 1.00 9.55 ? ? ? ? ? ? 607 TRP B CD1 1
+ATOM 3331 C CD2 . TRP B 1 117 ? 17.740 39.576 50.337 1.00 8.90 ? ? ? ? ? ? 607 TRP B CD2 1
+ATOM 3332 N NE1 . TRP B 1 117 ? 15.608 38.932 50.585 1.00 9.12 ? ? ? ? ? ? 607 TRP B NE1 1
+ATOM 3333 C CE2 . TRP B 1 117 ? 16.547 39.810 51.054 1.00 8.32 ? ? ? ? ? ? 607 TRP B CE2 1
+ATOM 3334 C CE3 . TRP B 1 117 ? 18.876 40.353 50.636 1.00 8.99 ? ? ? ? ? ? 607 TRP B CE3 1
+ATOM 3335 C CZ2 . TRP B 1 117 ? 16.453 40.785 52.045 1.00 9.61 ? ? ? ? ? ? 607 TRP B CZ2 1
+ATOM 3336 C CZ3 . TRP B 1 117 ? 18.784 41.323 51.624 1.00 9.37 ? ? ? ? ? ? 607 TRP B CZ3 1
+ATOM 3337 C CH2 . TRP B 1 117 ? 17.579 41.532 52.316 1.00 9.92 ? ? ? ? ? ? 607 TRP B CH2 1
+ATOM 3338 N N . LEU B 1 118 ? 19.802 36.940 51.241 1.00 10.63 ? ? ? ? ? ? 608 LEU B N 1
+ATOM 3339 C CA . LEU B 1 118 ? 20.568 37.315 52.421 1.00 11.95 ? ? ? ? ? ? 608 LEU B CA 1
+ATOM 3340 C C . LEU B 1 118 ? 21.662 36.276 52.695 1.00 13.48 ? ? ? ? ? ? 608 LEU B C 1
+ATOM 3341 O O . LEU B 1 118 ? 22.845 36.608 52.782 1.00 14.42 ? ? ? ? ? ? 608 LEU B O 1
+ATOM 3342 C CB . LEU B 1 118 ? 19.651 37.405 53.645 1.00 13.18 ? ? ? ? ? ? 608 LEU B CB 1
+ATOM 3343 C CG . LEU B 1 118 ? 20.318 37.931 54.908 1.00 14.66 ? ? ? ? ? ? 608 LEU B CG 1
+ATOM 3344 C CD1 . LEU B 1 118 ? 20.522 39.419 54.731 1.00 15.22 ? ? ? ? ? ? 608 LEU B CD1 1
+ATOM 3345 C CD2 . LEU B 1 118 ? 19.417 37.670 56.097 1.00 15.06 ? ? ? ? ? ? 608 LEU B CD2 1
+ATOM 3346 N N . THR B 1 119 ? 21.281 35.012 52.809 1.00 14.31 ? ? ? ? ? ? 609 THR B N 1
+ATOM 3347 C CA . THR B 1 119 ? 22.273 33.999 53.110 1.00 16.90 ? ? ? ? ? ? 609 THR B CA 1
+ATOM 3348 C C . THR B 1 119 ? 23.336 33.796 52.003 1.00 18.62 ? ? ? ? ? ? 609 THR B C 1
+ATOM 3349 O O . THR B 1 119 ? 24.489 33.476 52.328 1.00 20.10 ? ? ? ? ? ? 609 THR B O 1
+ATOM 3350 C CB . THR B 1 119 ? 21.598 32.684 53.478 1.00 17.54 ? ? ? ? ? ? 609 THR B CB 1
+ATOM 3351 O OG1 . THR B 1 119 ? 20.902 32.169 52.341 1.00 20.42 ? ? ? ? ? ? 609 THR B OG1 1
+ATOM 3352 C CG2 . THR B 1 119 ? 20.595 32.916 54.564 1.00 17.40 ? ? ? ? ? ? 609 THR B CG2 1
+ATOM 3353 N N . ASN B 1 120 ? 22.956 33.995 50.728 1.00 19.14 ? ? ? ? ? ? 610 ASN B N 1
+ATOM 3354 C CA . ASN B 1 120 ? 23.870 33.844 49.586 1.00 20.57 ? ? ? ? ? ? 610 ASN B CA 1
+ATOM 3355 C C . ASN B 1 120 ? 24.534 35.168 49.153 1.00 21.37 ? ? ? ? ? ? 610 ASN B C 1
+ATOM 3356 O O . ASN B 1 120 ? 25.362 35.178 48.236 1.00 21.86 ? ? ? ? ? ? 610 ASN B O 1
+ATOM 3357 C CB . ASN B 1 120 ? 23.144 33.229 48.375 1.00 22.27 ? ? ? ? ? ? 610 ASN B CB 1
+ATOM 3358 C CG . ASN B 1 120 ? 22.830 31.750 48.562 1.00 24.14 ? ? ? ? ? ? 610 ASN B CG 1
+ATOM 3359 O OD1 . ASN B 1 120 ? 23.452 31.068 49.365 1.00 27.27 ? ? ? ? ? ? 610 ASN B OD1 1
+ATOM 3360 N ND2 . ASN B 1 120 ? 21.861 31.254 47.825 1.00 25.02 ? ? ? ? ? ? 610 ASN B ND2 1
+ATOM 3361 N N . GLY B 1 121 ? 24.217 36.259 49.850 1.00 20.88 ? ? ? ? ? ? 611 GLY B N 1
+ATOM 3362 C CA . GLY B 1 121 ? 24.757 37.566 49.522 1.00 21.33 ? ? ? ? ? ? 611 GLY B CA 1
+ATOM 3363 C C . GLY B 1 121 ? 26.205 37.781 49.886 1.00 22.66 ? ? ? ? ? ? 611 GLY B C 1
+ATOM 3364 O O . GLY B 1 121 ? 26.801 36.991 50.600 1.00 23.60 ? ? ? ? ? ? 611 GLY B O 1
+ATOM 3365 N N . ASN B 1 122 ? 26.759 38.889 49.417 1.00 24.10 ? ? ? ? ? ? 612 ASN B N 1
+ATOM 3366 C CA . ASN B 1 122 ? 28.155 39.252 49.663 1.00 26.44 ? ? ? ? ? ? 612 ASN B CA 1
+ATOM 3367 C C . ASN B 1 122 ? 28.138 40.470 50.617 1.00 23.91 ? ? ? ? ? ? 612 ASN B C 1
+ATOM 3368 O O . ASN B 1 122 ? 27.817 41.585 50.189 1.00 24.46 ? ? ? ? ? ? 612 ASN B O 1
+ATOM 3369 C CB . ASN B 1 122 ? 28.787 39.595 48.306 1.00 31.28 ? ? ? ? ? ? 612 ASN B CB 1
+ATOM 3370 C CG . ASN B 1 122 ? 30.264 39.882 48.408 1.00 35.70 ? ? ? ? ? ? 612 ASN B CG 1
+ATOM 3371 O OD1 . ASN B 1 122 ? 30.945 39.434 49.353 1.00 37.71 ? ? ? ? ? ? 612 ASN B OD1 1
+ATOM 3372 N ND2 . ASN B 1 122 ? 30.783 40.643 47.435 1.00 37.58 ? ? ? ? ? ? 612 ASN B ND2 1
+ATOM 3373 N N . TRP B 1 123 ? 28.448 40.246 51.902 1.00 20.26 ? ? ? ? ? ? 613 TRP B N 1
+ATOM 3374 C CA . TRP B 1 123 ? 28.356 41.304 52.911 1.00 17.27 ? ? ? ? ? ? 613 TRP B CA 1
+ATOM 3375 C C . TRP B 1 123 ? 29.598 41.588 53.751 1.00 17.04 ? ? ? ? ? ? 613 TRP B C 1
+ATOM 3376 O O . TRP B 1 123 ? 30.480 40.742 53.907 1.00 17.35 ? ? ? ? ? ? 613 TRP B O 1
+ATOM 3377 C CB . TRP B 1 123 ? 27.250 40.943 53.944 1.00 15.42 ? ? ? ? ? ? 613 TRP B CB 1
+ATOM 3378 C CG . TRP B 1 123 ? 25.958 40.450 53.374 1.00 13.60 ? ? ? ? ? ? 613 TRP B CG 1
+ATOM 3379 C CD1 . TRP B 1 123 ? 25.508 39.167 53.381 1.00 13.57 ? ? ? ? ? ? 613 TRP B CD1 1
+ATOM 3380 C CD2 . TRP B 1 123 ? 24.971 41.218 52.671 1.00 12.63 ? ? ? ? ? ? 613 TRP B CD2 1
+ATOM 3381 N NE1 . TRP B 1 123 ? 24.310 39.079 52.720 1.00 13.40 ? ? ? ? ? ? 613 TRP B NE1 1
+ATOM 3382 C CE2 . TRP B 1 123 ? 23.955 40.322 52.269 1.00 13.31 ? ? ? ? ? ? 613 TRP B CE2 1
+ATOM 3383 C CE3 . TRP B 1 123 ? 24.850 42.564 52.341 1.00 12.34 ? ? ? ? ? ? 613 TRP B CE3 1
+ATOM 3384 C CZ2 . TRP B 1 123 ? 22.833 40.730 51.549 1.00 12.48 ? ? ? ? ? ? 613 TRP B CZ2 1
+ATOM 3385 C CZ3 . TRP B 1 123 ? 23.726 42.975 51.620 1.00 13.38 ? ? ? ? ? ? 613 TRP B CZ3 1
+ATOM 3386 C CH2 . TRP B 1 123 ? 22.735 42.056 51.234 1.00 12.79 ? ? ? ? ? ? 613 TRP B CH2 1
+ATOM 3387 N N . ASN B 1 124 ? 29.600 42.777 54.346 1.00 15.75 ? ? ? ? ? ? 614 ASN B N 1
+ATOM 3388 C CA . ASN B 1 124 ? 30.625 43.164 55.306 1.00 15.68 ? ? ? ? ? ? 614 ASN B CA 1
+ATOM 3389 C C . ASN B 1 124 ? 29.832 43.798 56.451 1.00 14.27 ? ? ? ? ? ? 614 ASN B C 1
+ATOM 3390 O O . ASN B 1 124 ? 28.601 43.897 56.373 1.00 13.48 ? ? ? ? ? ? 614 ASN B O 1
+ATOM 3391 C CB . ASN B 1 124 ? 31.694 44.108 54.720 1.00 17.65 ? ? ? ? ? ? 614 ASN B CB 1
+ATOM 3392 C CG . ASN B 1 124 ? 31.102 45.367 54.114 1.00 19.42 ? ? ? ? ? ? 614 ASN B CG 1
+ATOM 3393 O OD1 . ASN B 1 124 ? 30.322 46.077 54.731 1.00 19.22 ? ? ? ? ? ? 614 ASN B OD1 1
+ATOM 3394 N ND2 . ASN B 1 124 ? 31.475 45.641 52.875 1.00 22.85 ? ? ? ? ? ? 614 ASN B ND2 1
+ATOM 3395 N N . ARG B 1 125 ? 30.510 44.167 57.531 1.00 13.37 ? ? ? ? ? ? 615 ARG B N 1
+ATOM 3396 C CA . ARG B 1 125 ? 29.841 44.752 58.691 1.00 13.48 ? ? ? ? ? ? 615 ARG B CA 1
+ATOM 3397 C C . ARG B 1 125 ? 28.903 45.944 58.381 1.00 13.87 ? ? ? ? ? ? 615 ARG B C 1
+ATOM 3398 O O . ARG B 1 125 ? 27.722 45.943 58.751 1.00 12.60 ? ? ? ? ? ? 615 ARG B O 1
+ATOM 3399 C CB . ARG B 1 125 ? 30.895 45.115 59.768 1.00 13.89 ? ? ? ? ? ? 615 ARG B CB 1
+ATOM 3400 C CG . ARG B 1 125 ? 30.379 45.998 60.894 1.00 14.47 ? ? ? ? ? ? 615 ARG B CG 1
+ATOM 3401 C CD . ARG B 1 125 ? 31.430 46.264 61.969 1.00 14.01 ? ? ? ? ? ? 615 ARG B CD 1
+ATOM 3402 N NE . ARG B 1 125 ? 30.941 47.232 62.945 1.00 15.48 ? ? ? ? ? ? 615 ARG B NE 1
+ATOM 3403 C CZ . ARG B 1 125 ? 30.514 46.915 64.168 1.00 17.02 ? ? ? ? ? ? 615 ARG B CZ 1
+ATOM 3404 N NH1 . ARG B 1 125 ? 30.514 45.640 64.590 1.00 17.20 ? ? ? ? ? ? 615 ARG B NH1 1
+ATOM 3405 N NH2 . ARG B 1 125 ? 30.081 47.868 64.976 1.00 18.41 ? ? ? ? ? ? 615 ARG B NH2 1
+ATOM 3406 N N . ASP B 1 126 ? 29.396 46.926 57.631 1.00 13.92 ? ? ? ? ? ? 616 ASP B N 1
+ATOM 3407 C CA . ASP B 1 126 ? 28.585 48.107 57.328 1.00 15.04 ? ? ? ? ? ? 616 ASP B CA 1
+ATOM 3408 C C . ASP B 1 126 ? 27.403 47.845 56.429 1.00 12.93 ? ? ? ? ? ? 616 ASP B C 1
+ATOM 3409 O O . ASP B 1 126 ? 26.339 48.419 56.655 1.00 13.21 ? ? ? ? ? ? 616 ASP B O 1
+ATOM 3410 C CB . ASP B 1 126 ? 29.436 49.209 56.704 1.00 19.09 ? ? ? ? ? ? 616 ASP B CB 1
+ATOM 3411 C CG . ASP B 1 126 ? 30.622 49.587 57.578 1.00 23.81 ? ? ? ? ? ? 616 ASP B CG 1
+ATOM 3412 O OD1 . ASP B 1 126 ? 30.442 49.857 58.793 1.00 25.80 ? ? ? ? ? ? 616 ASP B OD1 1
+ATOM 3413 O OD2 . ASP B 1 126 ? 31.753 49.576 57.048 1.00 27.22 ? ? ? ? ? ? 616 ASP B OD2 1
+ATOM 3414 N N . SER B 1 127 ? 27.583 46.993 55.423 1.00 11.41 ? ? ? ? ? ? 617 SER B N 1
+ATOM 3415 C CA . SER B 1 127 ? 26.497 46.723 54.507 1.00 11.55 ? ? ? ? ? ? 617 SER B CA 1
+ATOM 3416 C C . SER B 1 127 ? 25.436 45.844 55.151 1.00 10.98 ? ? ? ? ? ? 617 SER B C 1
+ATOM 3417 O O . SER B 1 127 ? 24.257 46.035 54.874 1.00 11.96 ? ? ? ? ? ? 617 SER B O 1
+ATOM 3418 C CB . SER B 1 127 ? 26.955 46.149 53.161 1.00 10.89 ? ? ? ? ? ? 617 SER B CB 1
+ATOM 3419 O OG . SER B 1 127 ? 27.612 44.905 53.274 1.00 12.49 ? ? ? ? ? ? 617 SER B OG 1
+ATOM 3420 N N . LEU B 1 128 ? 25.839 44.899 56.002 1.00 10.51 ? ? ? ? ? ? 618 LEU B N 1
+ATOM 3421 C CA . LEU B 1 128 ? 24.835 44.054 56.669 1.00 9.68 ? ? ? ? ? ? 618 LEU B CA 1
+ATOM 3422 C C . LEU B 1 128 ? 24.091 44.854 57.742 1.00 8.95 ? ? ? ? ? ? 618 LEU B C 1
+ATOM 3423 O O . LEU B 1 128 ? 22.899 44.644 57.934 1.00 9.53 ? ? ? ? ? ? 618 LEU B O 1
+ATOM 3424 C CB . LEU B 1 128 ? 25.422 42.745 57.199 1.00 10.44 ? ? ? ? ? ? 618 LEU B CB 1
+ATOM 3425 C CG . LEU B 1 128 ? 24.398 41.681 57.617 1.00 10.22 ? ? ? ? ? ? 618 LEU B CG 1
+ATOM 3426 C CD1 . LEU B 1 128 ? 23.532 41.244 56.428 1.00 11.19 ? ? ? ? ? ? 618 LEU B CD1 1
+ATOM 3427 C CD2 . LEU B 1 128 ? 25.167 40.501 58.111 1.00 10.39 ? ? ? ? ? ? 618 LEU B CD2 1
+ATOM 3428 N N . LEU B 1 129 ? 24.754 45.803 58.407 1.00 9.27 ? ? ? ? ? ? 619 LEU B N 1
+ATOM 3429 C CA . LEU B 1 129 ? 24.065 46.654 59.384 1.00 9.59 ? ? ? ? ? ? 619 LEU B CA 1
+ATOM 3430 C C . LEU B 1 129 ? 22.971 47.497 58.695 1.00 9.15 ? ? ? ? ? ? 619 LEU B C 1
+ATOM 3431 O O . LEU B 1 129 ? 21.900 47.715 59.254 1.00 9.16 ? ? ? ? ? ? 619 LEU B O 1
+ATOM 3432 C CB . LEU B 1 129 ? 25.054 47.576 60.132 1.00 11.47 ? ? ? ? ? ? 619 LEU B CB 1
+ATOM 3433 C CG . LEU B 1 129 ? 25.765 47.000 61.370 1.00 12.11 ? ? ? ? ? ? 619 LEU B CG 1
+ATOM 3434 C CD1 . LEU B 1 129 ? 26.820 48.006 61.875 1.00 13.58 ? ? ? ? ? ? 619 LEU B CD1 1
+ATOM 3435 C CD2 . LEU B 1 129 ? 24.754 46.731 62.471 1.00 11.52 ? ? ? ? ? ? 619 LEU B CD2 1
+ATOM 3436 N N . ALA B 1 130 ? 23.265 47.995 57.481 1.00 10.27 ? ? ? ? ? ? 620 ALA B N 1
+ATOM 3437 C CA . ALA B 1 130 ? 22.294 48.791 56.709 1.00 10.21 ? ? ? ? ? ? 620 ALA B CA 1
+ATOM 3438 C C . ALA B 1 130 ? 21.080 47.922 56.332 1.00 8.39 ? ? ? ? ? ? 620 ALA B C 1
+ATOM 3439 O O . ALA B 1 130 ? 19.964 48.397 56.343 1.00 9.50 ? ? ? ? ? ? 620 ALA B O 1
+ATOM 3440 C CB . ALA B 1 130 ? 22.945 49.357 55.454 1.00 10.01 ? ? ? ? ? ? 620 ALA B CB 1
+ATOM 3441 N N . VAL B 1 131 ? 21.303 46.665 55.959 1.00 8.16 ? ? ? ? ? ? 621 VAL B N 1
+ATOM 3442 C CA . VAL B 1 131 ? 20.194 45.733 55.662 1.00 8.80 ? ? ? ? ? ? 621 VAL B CA 1
+ATOM 3443 C C . VAL B 1 131 ? 19.343 45.512 56.946 1.00 9.06 ? ? ? ? ? ? 621 VAL B C 1
+ATOM 3444 O O . VAL B 1 131 ? 18.107 45.519 56.886 1.00 8.64 ? ? ? ? ? ? 621 VAL B O 1
+ATOM 3445 C CB . VAL B 1 131 ? 20.728 44.378 55.152 1.00 9.89 ? ? ? ? ? ? 621 VAL B CB 1
+ATOM 3446 C CG1 . VAL B 1 131 ? 19.649 43.294 55.224 1.00 11.35 ? ? ? ? ? ? 621 VAL B CG1 1
+ATOM 3447 C CG2 . VAL B 1 131 ? 21.225 44.536 53.712 1.00 11.09 ? ? ? ? ? ? 621 VAL B CG2 1
+ATOM 3448 N N . MET B 1 132 ? 20.017 45.330 58.090 1.00 8.81 ? ? ? ? ? ? 622 MET B N 1
+ATOM 3449 C CA . MET B 1 132 ? 19.328 45.132 59.363 1.00 9.41 ? ? ? ? ? ? 622 MET B CA 1
+ATOM 3450 C C . MET B 1 132 ? 18.439 46.329 59.694 1.00 9.19 ? ? ? ? ? ? 622 MET B C 1
+ATOM 3451 O O . MET B 1 132 ? 17.255 46.195 60.063 1.00 8.80 ? ? ? ? ? ? 622 MET B O 1
+ATOM 3452 C CB . MET B 1 132 ? 20.355 44.923 60.486 1.00 10.30 ? ? ? ? ? ? 622 MET B CB 1
+ATOM 3453 C CG . MET B 1 132 ? 19.699 44.714 61.863 1.00 12.65 ? ? ? ? ? ? 622 MET B CG 1
+ATOM 3454 S SD . MET B 1 132 ? 20.870 44.771 63.228 1.00 14.79 ? ? ? ? ? ? 622 MET B SD 1
+ATOM 3455 C CE . MET B 1 132 ? 21.458 43.241 63.000 1.00 11.02 ? ? ? ? ? ? 622 MET B CE 1
+ATOM 3456 N N . LYS B 1 133 ? 19.016 47.517 59.565 1.00 8.91 ? ? ? ? ? ? 623 LYS B N 1
+ATOM 3457 C CA . LYS B 1 133 ? 18.293 48.736 59.848 1.00 8.78 ? ? ? ? ? ? 623 LYS B CA 1
+ATOM 3458 C C . LYS B 1 133 ? 17.055 48.897 58.951 1.00 7.64 ? ? ? ? ? ? 623 LYS B C 1
+ATOM 3459 O O . LYS B 1 133 ? 15.992 49.272 59.414 1.00 9.24 ? ? ? ? ? ? 623 LYS B O 1
+ATOM 3460 C CB . LYS B 1 133 ? 19.221 49.939 59.680 1.00 11.10 ? ? ? ? ? ? 623 LYS B CB 1
+ATOM 3461 C CG . LYS B 1 133 ? 18.596 51.191 60.201 1.00 15.22 ? ? ? ? ? ? 623 LYS B CG 1
+ATOM 3462 C CD . LYS B 1 133 ? 19.573 52.344 60.182 1.00 20.02 ? ? ? ? ? ? 623 LYS B CD 1
+ATOM 3463 C CE . LYS B 1 133 ? 19.089 53.456 61.133 1.00 24.04 ? ? ? ? ? ? 623 LYS B CE 1
+ATOM 3464 N NZ . LYS B 1 133 ? 17.591 53.702 61.073 1.00 27.21 ? ? ? ? ? ? 623 LYS B NZ 1
+ATOM 3465 N N . ASN B 1 134 ? 17.220 48.659 57.659 1.00 7.98 ? ? ? ? ? ? 624 ASN B N 1
+ATOM 3466 C CA . ASN B 1 134 ? 16.105 48.809 56.705 1.00 8.10 ? ? ? ? ? ? 624 ASN B CA 1
+ATOM 3467 C C . ASN B 1 134 ? 14.957 47.813 57.004 1.00 7.59 ? ? ? ? ? ? 624 ASN B C 1
+ATOM 3468 O O . ASN B 1 134 ? 13.769 48.174 56.982 1.00 7.91 ? ? ? ? ? ? 624 ASN B O 1
+ATOM 3469 C CB . ASN B 1 134 ? 16.599 48.640 55.251 1.00 9.28 ? ? ? ? ? ? 624 ASN B CB 1
+ATOM 3470 C CG . ASN B 1 134 ? 15.500 48.920 54.234 1.00 9.66 ? ? ? ? ? ? 624 ASN B CG 1
+ATOM 3471 O OD1 . ASN B 1 134 ? 14.875 49.978 54.290 1.00 12.84 ? ? ? ? ? ? 624 ASN B OD1 1
+ATOM 3472 N ND2 . ASN B 1 134 ? 15.246 47.978 53.319 1.00 10.71 ? ? ? ? ? ? 624 ASN B ND2 1
+ATOM 3473 N N . HIS B 1 135 ? 15.317 46.565 57.307 1.00 7.44 ? ? ? ? ? ? 625 HIS B N 1
+ATOM 3474 C CA . HIS B 1 135 ? 14.289 45.579 57.609 1.00 7.09 ? ? ? ? ? ? 625 HIS B CA 1
+ATOM 3475 C C . HIS B 1 135 ? 13.530 45.945 58.884 1.00 7.40 ? ? ? ? ? ? 625 HIS B C 1
+ATOM 3476 O O . HIS B 1 135 ? 12.292 46.024 58.890 1.00 7.62 ? ? ? ? ? ? 625 HIS B O 1
+ATOM 3477 C CB . HIS B 1 135 ? 14.881 44.187 57.762 1.00 6.77 ? ? ? ? ? ? 625 HIS B CB 1
+ATOM 3478 C CG . HIS B 1 135 ? 13.843 43.125 57.935 1.00 7.67 ? ? ? ? ? ? 625 HIS B CG 1
+ATOM 3479 N ND1 . HIS B 1 135 ? 13.170 42.557 56.875 1.00 7.14 ? ? ? ? ? ? 625 HIS B ND1 1
+ATOM 3480 C CD2 . HIS B 1 135 ? 13.347 42.531 59.053 1.00 8.18 ? ? ? ? ? ? 625 HIS B CD2 1
+ATOM 3481 C CE1 . HIS B 1 135 ? 12.321 41.650 57.325 1.00 7.89 ? ? ? ? ? ? 625 HIS B CE1 1
+ATOM 3482 N NE2 . HIS B 1 135 ? 12.411 41.616 58.643 1.00 7.36 ? ? ? ? ? ? 625 HIS B NE2 1
+ATOM 3483 N N . ILE B 1 136 ? 14.272 46.208 59.951 1.00 7.76 ? ? ? ? ? ? 626 ILE B N 1
+ATOM 3484 C CA . ILE B 1 136 ? 13.629 46.529 61.223 1.00 8.23 ? ? ? ? ? ? 626 ILE B CA 1
+ATOM 3485 C C . ILE B 1 136 ? 12.755 47.793 61.122 1.00 8.20 ? ? ? ? ? ? 626 ILE B C 1
+ATOM 3486 O O . ILE B 1 136 ? 11.598 47.806 61.544 1.00 8.15 ? ? ? ? ? ? 626 ILE B O 1
+ATOM 3487 C CB . ILE B 1 136 ? 14.676 46.672 62.347 1.00 7.96 ? ? ? ? ? ? 626 ILE B CB 1
+ATOM 3488 C CG1 . ILE B 1 136 ? 15.334 45.311 62.625 1.00 7.85 ? ? ? ? ? ? 626 ILE B CG1 1
+ATOM 3489 C CG2 . ILE B 1 136 ? 14.020 47.292 63.613 1.00 7.56 ? ? ? ? ? ? 626 ILE B CG2 1
+ATOM 3490 C CD1 . ILE B 1 136 ? 16.495 45.372 63.638 1.00 9.00 ? ? ? ? ? ? 626 ILE B CD1 1
+ATOM 3491 N N . THR B 1 137 ? 13.300 48.845 60.512 1.00 8.83 ? ? ? ? ? ? 627 THR B N 1
+ATOM 3492 C CA . THR B 1 137 ? 12.569 50.096 60.386 1.00 8.99 ? ? ? ? ? ? 627 THR B CA 1
+ATOM 3493 C C . THR B 1 137 ? 11.324 49.968 59.475 1.00 8.25 ? ? ? ? ? ? 627 THR B C 1
+ATOM 3494 O O . THR B 1 137 ? 10.229 50.445 59.838 1.00 9.27 ? ? ? ? ? ? 627 THR B O 1
+ATOM 3495 C CB . THR B 1 137 ? 13.517 51.253 59.886 1.00 10.23 ? ? ? ? ? ? 627 THR B CB 1
+ATOM 3496 O OG1 . THR B 1 137 ? 14.685 51.314 60.737 1.00 11.95 ? ? ? ? ? ? 627 THR B OG1 1
+ATOM 3497 C CG2 . THR B 1 137 ? 12.801 52.614 59.955 1.00 10.44 ? ? ? ? ? ? 627 THR B CG2 1
+ATOM 3498 N N . THR B 1 138 ? 11.476 49.343 58.307 1.00 7.56 ? ? ? ? ? ? 628 THR B N 1
+ATOM 3499 C CA . THR B 1 138 ? 10.338 49.226 57.385 1.00 7.60 ? ? ? ? ? ? 628 THR B CA 1
+ATOM 3500 C C . THR B 1 138 ? 9.200 48.401 57.996 1.00 8.35 ? ? ? ? ? ? 628 THR B C 1
+ATOM 3501 O O . THR B 1 138 ? 8.036 48.837 57.987 1.00 10.18 ? ? ? ? ? ? 628 THR B O 1
+ATOM 3502 C CB . THR B 1 138 ? 10.757 48.642 56.030 1.00 8.26 ? ? ? ? ? ? 628 THR B CB 1
+ATOM 3503 O OG1 . THR B 1 138 ? 11.742 49.510 55.423 1.00 8.68 ? ? ? ? ? ? 628 THR B OG1 1
+ATOM 3504 C CG2 . THR B 1 138 ? 9.549 48.530 55.110 1.00 9.08 ? ? ? ? ? ? 628 THR B CG2 1
+ATOM 3505 N N . VAL B 1 139 ? 9.546 47.266 58.605 1.00 7.12 ? ? ? ? ? ? 629 VAL B N 1
+ATOM 3506 C CA . VAL B 1 139 ? 8.541 46.404 59.222 1.00 7.87 ? ? ? ? ? ? 629 VAL B CA 1
+ATOM 3507 C C . VAL B 1 139 ? 7.859 47.062 60.441 1.00 7.48 ? ? ? ? ? ? 629 VAL B C 1
+ATOM 3508 O O . VAL B 1 139 ? 6.631 47.124 60.520 1.00 7.41 ? ? ? ? ? ? 629 VAL B O 1
+ATOM 3509 C CB . VAL B 1 139 ? 9.170 45.042 59.625 1.00 7.57 ? ? ? ? ? ? 629 VAL B CB 1
+ATOM 3510 C CG1 . VAL B 1 139 ? 8.162 44.191 60.450 1.00 8.52 ? ? ? ? ? ? 629 VAL B CG1 1
+ATOM 3511 C CG2 . VAL B 1 139 ? 9.588 44.281 58.365 1.00 8.60 ? ? ? ? ? ? 629 VAL B CG2 1
+ATOM 3512 N N . MET B 1 140 ? 8.647 47.576 61.386 1.00 8.63 ? ? ? ? ? ? 630 MET B N 1
+ATOM 3513 C CA . MET B 1 140 ? 8.055 48.171 62.587 1.00 8.49 ? ? ? ? ? ? 630 MET B CA 1
+ATOM 3514 C C . MET B 1 140 ? 7.254 49.442 62.338 1.00 9.67 ? ? ? ? ? ? 630 MET B C 1
+ATOM 3515 O O . MET B 1 140 ? 6.261 49.691 63.012 1.00 9.87 ? ? ? ? ? ? 630 MET B O 1
+ATOM 3516 C CB . MET B 1 140 ? 9.100 48.378 63.688 1.00 9.55 ? ? ? ? ? ? 630 MET B CB 1
+ATOM 3517 C CG . MET B 1 140 ? 9.647 47.053 64.236 1.00 9.29 ? ? ? ? ? ? 630 MET B CG 1
+ATOM 3518 S SD . MET B 1 140 ? 10.804 47.271 65.614 1.00 11.18 ? ? ? ? ? ? 630 MET B SD 1
+ATOM 3519 C CE . MET B 1 140 ? 9.753 47.851 66.974 1.00 9.23 ? ? ? ? ? ? 630 MET B CE 1
+ATOM 3520 N N . THR B 1 141 ? 7.665 50.248 61.362 1.00 9.87 ? ? ? ? ? ? 631 THR B N 1
+ATOM 3521 C CA . THR B 1 141 ? 6.895 51.458 61.078 1.00 11.08 ? ? ? ? ? ? 631 THR B CA 1
+ATOM 3522 C C . THR B 1 141 ? 5.546 51.109 60.434 1.00 9.97 ? ? ? ? ? ? 631 THR B C 1
+ATOM 3523 O O . THR B 1 141 ? 4.566 51.776 60.689 1.00 10.25 ? ? ? ? ? ? 631 THR B O 1
+ATOM 3524 C CB . THR B 1 141 ? 7.656 52.490 60.213 1.00 13.52 ? ? ? ? ? ? 631 THR B CB 1
+ATOM 3525 O OG1 . THR B 1 141 ? 7.964 51.919 58.963 1.00 16.64 ? ? ? ? ? ? 631 THR B OG1 1
+ATOM 3526 C CG2 . THR B 1 141 ? 8.941 52.908 60.873 1.00 13.66 ? ? ? ? ? ? 631 THR B CG2 1
+ATOM 3527 N N . HIS B 1 142 ? 5.477 50.042 59.643 1.00 9.98 ? ? ? ? ? ? 632 HIS B N 1
+ATOM 3528 C CA . HIS B 1 142 ? 4.197 49.631 59.046 1.00 9.75 ? ? ? ? ? ? 632 HIS B CA 1
+ATOM 3529 C C . HIS B 1 142 ? 3.209 49.237 60.158 1.00 10.02 ? ? ? ? ? ? 632 HIS B C 1
+ATOM 3530 O O . HIS B 1 142 ? 2.001 49.388 60.021 1.00 11.14 ? ? ? ? ? ? 632 HIS B O 1
+ATOM 3531 C CB . HIS B 1 142 ? 4.380 48.458 58.061 1.00 10.06 ? ? ? ? ? ? 632 HIS B CB 1
+ATOM 3532 C CG . HIS B 1 142 ? 3.132 48.085 57.313 1.00 10.10 ? ? ? ? ? ? 632 HIS B CG 1
+ATOM 3533 N ND1 . HIS B 1 142 ? 2.594 48.874 56.313 1.00 9.73 ? ? ? ? ? ? 632 HIS B ND1 1
+ATOM 3534 C CD2 . HIS B 1 142 ? 2.319 47.007 57.415 1.00 9.51 ? ? ? ? ? ? 632 HIS B CD2 1
+ATOM 3535 C CE1 . HIS B 1 142 ? 1.507 48.296 55.835 1.00 10.02 ? ? ? ? ? ? 632 HIS B CE1 1
+ATOM 3536 N NE2 . HIS B 1 142 ? 1.321 47.163 56.487 1.00 10.05 ? ? ? ? ? ? 632 HIS B NE2 1
+ATOM 3537 N N . TYR B 1 143 ? 3.722 48.716 61.264 1.00 11.46 ? ? ? ? ? ? 633 TYR B N 1
+ATOM 3538 C CA . TYR B 1 143 ? 2.846 48.310 62.383 1.00 11.94 ? ? ? ? ? ? 633 TYR B CA 1
+ATOM 3539 C C . TYR B 1 143 ? 2.988 49.243 63.585 1.00 12.64 ? ? ? ? ? ? 633 TYR B C 1
+ATOM 3540 O O . TYR B 1 143 ? 2.601 48.889 64.692 1.00 13.10 ? ? ? ? ? ? 633 TYR B O 1
+ATOM 3541 C CB . TYR B 1 143 ? 3.189 46.867 62.816 1.00 10.96 ? ? ? ? ? ? 633 TYR B CB 1
+ATOM 3542 C CG . TYR B 1 143 ? 2.867 45.831 61.756 1.00 10.54 ? ? ? ? ? ? 633 TYR B CG 1
+ATOM 3543 C CD1 . TYR B 1 143 ? 1.532 45.483 61.481 1.00 10.96 ? ? ? ? ? ? 633 TYR B CD1 1
+ATOM 3544 C CD2 . TYR B 1 143 ? 3.879 45.255 60.968 1.00 9.61 ? ? ? ? ? ? 633 TYR B CD2 1
+ATOM 3545 C CE1 . TYR B 1 143 ? 1.220 44.606 60.440 1.00 9.87 ? ? ? ? ? ? 633 TYR B CE1 1
+ATOM 3546 C CE2 . TYR B 1 143 ? 3.574 44.370 59.930 1.00 9.41 ? ? ? ? ? ? 633 TYR B CE2 1
+ATOM 3547 C CZ . TYR B 1 143 ? 2.237 44.056 59.669 1.00 9.18 ? ? ? ? ? ? 633 TYR B CZ 1
+ATOM 3548 O OH . TYR B 1 143 ? 1.940 43.208 58.628 1.00 11.15 ? ? ? ? ? ? 633 TYR B OH 1
+ATOM 3549 N N . LYS B 1 144 ? 3.487 50.447 63.360 1.00 12.54 ? ? ? ? ? ? 634 LYS B N 1
+ATOM 3550 C CA . LYS B 1 144 ? 3.720 51.370 64.455 1.00 13.74 ? ? ? ? ? ? 634 LYS B CA 1
+ATOM 3551 C C . LYS B 1 144 ? 2.498 51.586 65.358 1.00 14.58 ? ? ? ? ? ? 634 LYS B C 1
+ATOM 3552 O O . LYS B 1 144 ? 1.401 51.921 64.887 1.00 15.20 ? ? ? ? ? ? 634 LYS B O 1
+ATOM 3553 C CB . LYS B 1 144 ? 4.265 52.695 63.916 1.00 14.53 ? ? ? ? ? ? 634 LYS B CB 1
+ATOM 3554 C CG . LYS B 1 144 ? 4.770 53.594 65.021 1.00 17.70 ? ? ? ? ? ? 634 LYS B CG 1
+ATOM 3555 C CD . LYS B 1 144 ? 5.368 54.888 64.483 1.00 20.50 ? ? ? ? ? ? 634 LYS B CD 1
+ATOM 3556 C CE . LYS B 1 144 ? 5.751 55.821 65.628 1.00 22.65 ? ? ? ? ? ? 634 LYS B CE 1
+ATOM 3557 N NZ . LYS B 1 144 ? 6.239 57.119 65.113 1.00 25.30 ? ? ? ? ? ? 634 LYS B NZ 1
+ATOM 3558 N N . GLY B 1 145 ? 2.702 51.355 66.657 1.00 14.21 ? ? ? ? ? ? 635 GLY B N 1
+ATOM 3559 C CA . GLY B 1 145 ? 1.643 51.518 67.637 1.00 15.59 ? ? ? ? ? ? 635 GLY B CA 1
+ATOM 3560 C C . GLY B 1 145 ? 0.550 50.446 67.630 1.00 17.77 ? ? ? ? ? ? 635 GLY B C 1
+ATOM 3561 O O . GLY B 1 145 ? -0.410 50.565 68.394 1.00 18.94 ? ? ? ? ? ? 635 GLY B O 1
+ATOM 3562 N N . LYS B 1 146 ? 0.703 49.391 66.821 1.00 17.44 ? ? ? ? ? ? 636 LYS B N 1
+ATOM 3563 C CA . LYS B 1 146 ? -0.293 48.301 66.710 1.00 17.63 ? ? ? ? ? ? 636 LYS B CA 1
+ATOM 3564 C C . LYS B 1 146 ? 0.141 46.974 67.356 1.00 16.27 ? ? ? ? ? ? 636 LYS B C 1
+ATOM 3565 O O . LYS B 1 146 ? -0.689 46.104 67.568 1.00 15.91 ? ? ? ? ? ? 636 LYS B O 1
+ATOM 3566 C CB . LYS B 1 146 ? -0.566 47.979 65.238 1.00 20.09 ? ? ? ? ? ? 636 LYS B CB 1
+ATOM 3567 C CG . LYS B 1 146 ? -0.862 49.160 64.368 1.00 23.71 ? ? ? ? ? ? 636 LYS B CG 1
+ATOM 3568 C CD . LYS B 1 146 ? -2.204 49.747 64.676 1.00 26.97 ? ? ? ? ? ? 636 LYS B CD 1
+ATOM 3569 C CE . LYS B 1 146 ? -2.486 50.907 63.708 1.00 30.07 ? ? ? ? ? ? 636 LYS B CE 1
+ATOM 3570 N NZ . LYS B 1 146 ? -2.237 50.542 62.248 1.00 32.17 ? ? ? ? ? ? 636 LYS B NZ 1
+ATOM 3571 N N . ILE B 1 147 ? 1.443 46.796 67.575 1.00 15.08 ? ? ? ? ? ? 637 ILE B N 1
+ATOM 3572 C CA . ILE B 1 147 ? 1.994 45.569 68.137 1.00 14.58 ? ? ? ? ? ? 637 ILE B CA 1
+ATOM 3573 C C . ILE B 1 147 ? 2.654 45.873 69.471 1.00 15.23 ? ? ? ? ? ? 637 ILE B C 1
+ATOM 3574 O O . ILE B 1 147 ? 3.605 46.632 69.560 1.00 17.04 ? ? ? ? ? ? 637 ILE B O 1
+ATOM 3575 C CB . ILE B 1 147 ? 2.917 44.883 67.106 1.00 14.19 ? ? ? ? ? ? 637 ILE B CB 1
+ATOM 3576 C CG1 . ILE B 1 147 ? 2.042 44.422 65.924 1.00 13.98 ? ? ? ? ? ? 637 ILE B CG1 1
+ATOM 3577 C CG2 . ILE B 1 147 ? 3.725 43.744 67.753 1.00 13.23 ? ? ? ? ? ? 637 ILE B CG2 1
+ATOM 3578 C CD1 . ILE B 1 147 ? 2.714 43.582 64.868 1.00 16.19 ? ? ? ? ? ? 637 ILE B CD1 1
+ATOM 3579 N N . VAL B 1 148 ? 2.068 45.318 70.523 1.00 14.15 ? ? ? ? ? ? 638 VAL B N 1
+ATOM 3580 C CA . VAL B 1 148 ? 2.503 45.574 71.879 1.00 15.59 ? ? ? ? ? ? 638 VAL B CA 1
+ATOM 3581 C C . VAL B 1 148 ? 3.874 45.019 72.298 1.00 13.94 ? ? ? ? ? ? 638 VAL B C 1
+ATOM 3582 O O . VAL B 1 148 ? 4.617 45.682 73.028 1.00 14.93 ? ? ? ? ? ? 638 VAL B O 1
+ATOM 3583 C CB . VAL B 1 148 ? 1.358 45.157 72.885 1.00 16.85 ? ? ? ? ? ? 638 VAL B CB 1
+ATOM 3584 C CG1 . VAL B 1 148 ? 1.152 43.645 72.902 1.00 16.67 ? ? ? ? ? ? 638 VAL B CG1 1
+ATOM 3585 C CG2 . VAL B 1 148 ? 1.615 45.719 74.271 1.00 20.26 ? ? ? ? ? ? 638 VAL B CG2 1
+ATOM 3586 N N . GLU B 1 149 ? 4.216 43.827 71.830 1.00 10.99 ? ? ? ? ? ? 639 GLU B N 1
+ATOM 3587 C CA . GLU B 1 149 ? 5.493 43.218 72.183 1.00 9.19 ? ? ? ? ? ? 639 GLU B CA 1
+ATOM 3588 C C . GLU B 1 149 ? 6.145 42.704 70.915 1.00 7.39 ? ? ? ? ? ? 639 GLU B C 1
+ATOM 3589 O O . GLU B 1 149 ? 5.485 42.046 70.125 1.00 8.96 ? ? ? ? ? ? 639 GLU B O 1
+ATOM 3590 C CB . GLU B 1 149 ? 5.270 42.005 73.127 1.00 10.04 ? ? ? ? ? ? 639 GLU B CB 1
+ATOM 3591 C CG . GLU B 1 149 ? 4.608 42.341 74.474 1.00 11.02 ? ? ? ? ? ? 639 GLU B CG 1
+ATOM 3592 C CD . GLU B 1 149 ? 4.485 41.144 75.435 1.00 11.32 ? ? ? ? ? ? 639 GLU B CD 1
+ATOM 3593 O OE1 . GLU B 1 149 ? 5.109 40.077 75.221 1.00 10.22 ? ? ? ? ? ? 639 GLU B OE1 1
+ATOM 3594 O OE2 . GLU B 1 149 ? 3.733 41.303 76.421 1.00 13.42 ? ? ? ? ? ? 639 GLU B OE2 1
+ATOM 3595 N N . TRP B 1 150 ? 7.433 42.958 70.761 1.00 7.03 ? ? ? ? ? ? 640 TRP B N 1
+ATOM 3596 C CA . TRP B 1 150 ? 8.187 42.512 69.602 1.00 6.78 ? ? ? ? ? ? 640 TRP B CA 1
+ATOM 3597 C C . TRP B 1 150 ? 9.332 41.607 69.998 1.00 6.26 ? ? ? ? ? ? 640 TRP B C 1
+ATOM 3598 O O . TRP B 1 150 ? 10.123 41.961 70.873 1.00 7.34 ? ? ? ? ? ? 640 TRP B O 1
+ATOM 3599 C CB . TRP B 1 150 ? 8.808 43.721 68.837 1.00 8.02 ? ? ? ? ? ? 640 TRP B CB 1
+ATOM 3600 C CG . TRP B 1 150 ? 7.951 44.265 67.716 1.00 9.48 ? ? ? ? ? ? 640 TRP B CG 1
+ATOM 3601 C CD1 . TRP B 1 150 ? 7.138 45.365 67.747 1.00 11.27 ? ? ? ? ? ? 640 TRP B CD1 1
+ATOM 3602 C CD2 . TRP B 1 150 ? 7.829 43.715 66.400 1.00 10.06 ? ? ? ? ? ? 640 TRP B CD2 1
+ATOM 3603 N NE1 . TRP B 1 150 ? 6.517 45.527 66.525 1.00 11.62 ? ? ? ? ? ? 640 TRP B NE1 1
+ATOM 3604 C CE2 . TRP B 1 150 ? 6.927 44.532 65.683 1.00 11.50 ? ? ? ? ? ? 640 TRP B CE2 1
+ATOM 3605 C CE3 . TRP B 1 150 ? 8.394 42.598 65.755 1.00 11.75 ? ? ? ? ? ? 640 TRP B CE3 1
+ATOM 3606 C CZ2 . TRP B 1 150 ? 6.580 44.268 64.344 1.00 12.19 ? ? ? ? ? ? 640 TRP B CZ2 1
+ATOM 3607 C CZ3 . TRP B 1 150 ? 8.044 42.329 64.414 1.00 12.95 ? ? ? ? ? ? 640 TRP B CZ3 1
+ATOM 3608 C CH2 . TRP B 1 150 ? 7.150 43.166 63.737 1.00 12.41 ? ? ? ? ? ? 640 TRP B CH2 1
+ATOM 3609 N N . ASP B 1 151 ? 9.424 40.444 69.366 1.00 5.84 ? ? ? ? ? ? 641 ASP B N 1
+ATOM 3610 C CA . ASP B 1 151 ? 10.581 39.593 69.569 1.00 6.75 ? ? ? ? ? ? 641 ASP B CA 1
+ATOM 3611 C C . ASP B 1 151 ? 11.604 40.154 68.555 1.00 7.38 ? ? ? ? ? ? 641 ASP B C 1
+ATOM 3612 O O . ASP B 1 151 ? 11.605 39.768 67.365 1.00 7.36 ? ? ? ? ? ? 641 ASP B O 1
+ATOM 3613 C CB . ASP B 1 151 ? 10.300 38.115 69.238 1.00 7.66 ? ? ? ? ? ? 641 ASP B CB 1
+ATOM 3614 C CG . ASP B 1 151 ? 9.412 37.430 70.286 1.00 9.03 ? ? ? ? ? ? 641 ASP B CG 1
+ATOM 3615 O OD1 . ASP B 1 151 ? 9.347 37.899 71.436 1.00 8.74 ? ? ? ? ? ? 641 ASP B OD1 1
+ATOM 3616 O OD2 . ASP B 1 151 ? 8.782 36.425 69.898 1.00 11.85 ? ? ? ? ? ? 641 ASP B OD2 1
+ATOM 3617 N N . VAL B 1 152 ? 12.431 41.083 69.021 1.00 6.96 ? ? ? ? ? ? 642 VAL B N 1
+ATOM 3618 C CA . VAL B 1 152 ? 13.455 41.679 68.165 1.00 7.28 ? ? ? ? ? ? 642 VAL B CA 1
+ATOM 3619 C C . VAL B 1 152 ? 14.501 40.657 67.739 1.00 8.76 ? ? ? ? ? ? 642 VAL B C 1
+ATOM 3620 O O . VAL B 1 152 ? 14.906 40.619 66.562 1.00 9.49 ? ? ? ? ? ? 642 VAL B O 1
+ATOM 3621 C CB . VAL B 1 152 ? 14.148 42.853 68.875 1.00 8.35 ? ? ? ? ? ? 642 VAL B CB 1
+ATOM 3622 C CG1 . VAL B 1 152 ? 15.314 43.405 68.006 1.00 9.46 ? ? ? ? ? ? 642 VAL B CG1 1
+ATOM 3623 C CG2 . VAL B 1 152 ? 13.129 43.942 69.196 1.00 8.98 ? ? ? ? ? ? 642 VAL B CG2 1
+ATOM 3624 N N . ALA B 1 153 ? 14.953 39.838 68.684 1.00 8.52 ? ? ? ? ? ? 643 ALA B N 1
+ATOM 3625 C CA . ALA B 1 153 ? 15.969 38.834 68.427 1.00 8.77 ? ? ? ? ? ? 643 ALA B CA 1
+ATOM 3626 C C . ALA B 1 153 ? 15.422 37.524 68.976 1.00 9.34 ? ? ? ? ? ? 643 ALA B C 1
+ATOM 3627 O O . ALA B 1 153 ? 14.751 37.516 70.019 1.00 9.96 ? ? ? ? ? ? 643 ALA B O 1
+ATOM 3628 C CB . ALA B 1 153 ? 17.257 39.205 69.133 1.00 10.13 ? ? ? ? ? ? 643 ALA B CB 1
+ATOM 3629 N N . ASN B 1 154 ? 15.791 36.429 68.320 1.00 8.94 ? ? ? ? ? ? 644 ASN B N 1
+ATOM 3630 C CA . ASN B 1 154 ? 15.297 35.085 68.653 1.00 10.05 ? ? ? ? ? ? 644 ASN B CA 1
+ATOM 3631 C C . ASN B 1 154 ? 16.406 34.034 68.604 1.00 11.74 ? ? ? ? ? ? 644 ASN B C 1
+ATOM 3632 O O . ASN B 1 154 ? 17.149 33.959 67.607 1.00 11.91 ? ? ? ? ? ? 644 ASN B O 1
+ATOM 3633 C CB . ASN B 1 154 ? 14.268 34.719 67.579 1.00 12.30 ? ? ? ? ? ? 644 ASN B CB 1
+ATOM 3634 C CG . ASN B 1 154 ? 13.331 33.618 67.992 1.00 13.65 ? ? ? ? ? ? 644 ASN B CG 1
+ATOM 3635 O OD1 . ASN B 1 154 ? 13.058 32.697 67.217 1.00 15.12 ? ? ? ? ? ? 644 ASN B OD1 1
+ATOM 3636 N ND2 . ASN B 1 154 ? 12.771 33.736 69.169 1.00 14.52 ? ? ? ? ? ? 644 ASN B ND2 1
+ATOM 3637 N N . GLU B 1 155 ? 16.598 33.305 69.711 1.00 10.75 ? ? ? ? ? ? 645 GLU B N 1
+ATOM 3638 C CA . GLU B 1 155 ? 17.563 32.187 69.752 1.00 12.26 ? ? ? ? ? ? 645 GLU B CA 1
+ATOM 3639 C C . GLU B 1 155 ? 19.009 32.502 69.352 1.00 11.99 ? ? ? ? ? ? 645 GLU B C 1
+ATOM 3640 O O . GLU B 1 155 ? 19.642 31.737 68.624 1.00 14.14 ? ? ? ? ? ? 645 GLU B O 1
+ATOM 3641 C CB . GLU B 1 155 ? 17.017 31.041 68.886 1.00 11.27 ? ? ? ? ? ? 645 GLU B CB 1
+ATOM 3642 C CG . GLU B 1 155 ? 15.603 30.637 69.311 1.00 11.77 ? ? ? ? ? ? 645 GLU B CG 1
+ATOM 3643 C CD . GLU B 1 155 ? 14.979 29.570 68.454 1.00 13.15 ? ? ? ? ? ? 645 GLU B CD 1
+ATOM 3644 O OE1 . GLU B 1 155 ? 15.652 29.035 67.553 1.00 14.08 ? ? ? ? ? ? 645 GLU B OE1 1
+ATOM 3645 O OE2 . GLU B 1 155 ? 13.787 29.264 68.664 1.00 14.59 ? ? ? ? ? ? 645 GLU B OE2 1
+ATOM 3646 N N . CYS B 1 156 ? 19.534 33.594 69.882 1.00 13.29 ? ? ? ? ? ? 646 CYS B N 1
+ATOM 3647 C CA . CYS B 1 156 ? 20.886 34.027 69.571 1.00 13.72 ? ? ? ? ? ? 646 CYS B CA 1
+ATOM 3648 C C . CYS B 1 156 ? 21.974 33.454 70.470 1.00 14.86 ? ? ? ? ? ? 646 CYS B C 1
+ATOM 3649 O O . CYS B 1 156 ? 23.148 33.580 70.144 1.00 15.20 ? ? ? ? ? ? 646 CYS B O 1
+ATOM 3650 C CB . CYS B 1 156 ? 20.955 35.555 69.630 1.00 14.57 ? ? ? ? ? ? 646 CYS B CB 1
+ATOM 3651 S SG . CYS B 1 156 ? 19.801 36.353 68.463 1.00 17.06 ? ? ? ? ? ? 646 CYS B SG 1
+ATOM 3652 N N . MET B 1 157 ? 21.612 32.890 71.625 1.00 14.53 ? ? ? ? ? ? 647 MET B N 1
+ATOM 3653 C CA . MET B 1 157 ? 22.622 32.331 72.553 1.00 14.16 ? ? ? ? ? ? 647 MET B CA 1
+ATOM 3654 C C . MET B 1 157 ? 22.906 30.869 72.217 1.00 14.56 ? ? ? ? ? ? 647 MET B C 1
+ATOM 3655 O O . MET B 1 157 ? 21.986 30.092 71.900 1.00 13.03 ? ? ? ? ? ? 647 MET B O 1
+ATOM 3656 C CB . MET B 1 157 ? 22.130 32.439 74.007 1.00 14.22 ? ? ? ? ? ? 647 MET B CB 1
+ATOM 3657 C CG . MET B 1 157 ? 23.179 32.072 75.069 1.00 14.45 ? ? ? ? ? ? 647 MET B CG 1
+ATOM 3658 S SD . MET B 1 157 ? 24.552 33.214 75.111 1.00 16.57 ? ? ? ? ? ? 647 MET B SD 1
+ATOM 3659 C CE . MET B 1 157 ? 23.781 34.619 75.913 1.00 15.93 ? ? ? ? ? ? 647 MET B CE 1
+ATOM 3660 N N . ASP B 1 158 ? 24.179 30.488 72.278 1.00 16.24 ? ? ? ? ? ? 648 ASP B N 1
+ATOM 3661 C CA . ASP B 1 158 ? 24.542 29.100 71.997 1.00 17.62 ? ? ? ? ? ? 648 ASP B CA 1
+ATOM 3662 C C . ASP B 1 158 ? 23.982 28.235 73.141 1.00 18.40 ? ? ? ? ? ? 648 ASP B C 1
+ATOM 3663 O O . ASP B 1 158 ? 23.885 28.701 74.267 1.00 17.29 ? ? ? ? ? ? 648 ASP B O 1
+ATOM 3664 C CB . ASP B 1 158 ? 26.062 28.949 71.916 1.00 19.79 ? ? ? ? ? ? 648 ASP B CB 1
+ATOM 3665 C CG . ASP B 1 158 ? 26.490 27.579 71.399 1.00 23.40 ? ? ? ? ? ? 648 ASP B CG 1
+ATOM 3666 O OD1 . ASP B 1 158 ? 26.476 27.347 70.148 1.00 24.87 ? ? ? ? ? ? 648 ASP B OD1 1
+ATOM 3667 O OD2 . ASP B 1 158 ? 26.843 26.722 72.250 1.00 24.88 ? ? ? ? ? ? 648 ASP B OD2 1
+ATOM 3668 N N . ASP B 1 159 ? 23.611 26.992 72.858 1.00 19.25 ? ? ? ? ? ? 649 ASP B N 1
+ATOM 3669 C CA . ASP B 1 159 ? 23.072 26.111 73.908 1.00 22.35 ? ? ? ? ? ? 649 ASP B CA 1
+ATOM 3670 C C . ASP B 1 159 ? 24.013 25.799 75.086 1.00 22.41 ? ? ? ? ? ? 649 ASP B C 1
+ATOM 3671 O O . ASP B 1 159 ? 23.561 25.446 76.183 1.00 22.93 ? ? ? ? ? ? 649 ASP B O 1
+ATOM 3672 C CB . ASP B 1 159 ? 22.516 24.842 73.288 1.00 24.41 ? ? ? ? ? ? 649 ASP B CB 1
+ATOM 3673 C CG . ASP B 1 159 ? 21.257 25.116 72.526 1.00 27.13 ? ? ? ? ? ? 649 ASP B CG 1
+ATOM 3674 O OD1 . ASP B 1 159 ? 20.400 25.824 73.094 1.00 29.09 ? ? ? ? ? ? 649 ASP B OD1 1
+ATOM 3675 O OD2 . ASP B 1 159 ? 21.134 24.678 71.367 1.00 28.55 ? ? ? ? ? ? 649 ASP B OD2 1
+ATOM 3676 N N . SER B 1 160 ? 25.311 25.949 74.839 1.00 21.60 ? ? ? ? ? ? 650 SER B N 1
+ATOM 3677 C CA . SER B 1 160 ? 26.330 25.748 75.856 1.00 22.16 ? ? ? ? ? ? 650 SER B CA 1
+ATOM 3678 C C . SER B 1 160 ? 26.197 26.838 76.924 1.00 22.12 ? ? ? ? ? ? 650 SER B C 1
+ATOM 3679 O O . SER B 1 160 ? 26.574 26.629 78.072 1.00 24.22 ? ? ? ? ? ? 650 SER B O 1
+ATOM 3680 C CB . SER B 1 160 ? 27.741 25.855 75.225 1.00 22.18 ? ? ? ? ? ? 650 SER B CB 1
+ATOM 3681 O OG . SER B 1 160 ? 28.036 27.181 74.743 1.00 22.55 ? ? ? ? ? ? 650 SER B OG 1
+ATOM 3682 N N . GLY B 1 161 ? 25.680 28.000 76.533 1.00 20.55 ? ? ? ? ? ? 651 GLY B N 1
+ATOM 3683 C CA . GLY B 1 161 ? 25.575 29.116 77.439 1.00 19.81 ? ? ? ? ? ? 651 GLY B CA 1
+ATOM 3684 C C . GLY B 1 161 ? 26.911 29.848 77.450 1.00 21.34 ? ? ? ? ? ? 651 GLY B C 1
+ATOM 3685 O O . GLY B 1 161 ? 27.095 30.797 78.216 1.00 21.10 ? ? ? ? ? ? 651 GLY B O 1
+ATOM 3686 N N . ASN B 1 162 ? 27.839 29.451 76.572 1.00 21.82 ? ? ? ? ? ? 652 ASN B N 1
+ATOM 3687 C CA . ASN B 1 162 ? 29.151 30.087 76.539 1.00 23.47 ? ? ? ? ? ? 652 ASN B CA 1
+ATOM 3688 C C . ASN B 1 162 ? 29.213 31.411 75.825 1.00 23.65 ? ? ? ? ? ? 652 ASN B C 1
+ATOM 3689 O O . ASN B 1 162 ? 30.099 32.216 76.089 1.00 25.89 ? ? ? ? ? ? 652 ASN B O 1
+ATOM 3690 C CB . ASN B 1 162 ? 30.218 29.151 75.970 1.00 24.73 ? ? ? ? ? ? 652 ASN B CB 1
+ATOM 3691 C CG . ASN B 1 162 ? 30.722 28.164 77.000 1.00 26.90 ? ? ? ? ? ? 652 ASN B CG 1
+ATOM 3692 O OD1 . ASN B 1 162 ? 31.175 27.075 76.660 1.00 28.53 ? ? ? ? ? ? 652 ASN B OD1 1
+ATOM 3693 N ND2 . ASN B 1 162 ? 30.626 28.532 78.269 1.00 26.97 ? ? ? ? ? ? 652 ASN B ND2 1
+ATOM 3694 N N . GLY B 1 163 ? 28.292 31.644 74.912 1.00 22.21 ? ? ? ? ? ? 653 GLY B N 1
+ATOM 3695 C CA . GLY B 1 163 ? 28.302 32.898 74.192 1.00 20.01 ? ? ? ? ? ? 653 GLY B CA 1
+ATOM 3696 C C . GLY B 1 163 ? 27.305 32.838 73.057 1.00 18.18 ? ? ? ? ? ? 653 GLY B C 1
+ATOM 3697 O O . GLY B 1 163 ? 26.560 31.869 72.918 1.00 17.45 ? ? ? ? ? ? 653 GLY B O 1
+ATOM 3698 N N . LEU B 1 164 ? 27.313 33.867 72.212 1.00 18.11 ? ? ? ? ? ? 654 LEU B N 1
+ATOM 3699 C CA . LEU B 1 164 ? 26.372 33.943 71.095 1.00 16.71 ? ? ? ? ? ? 654 LEU B CA 1
+ATOM 3700 C C . LEU B 1 164 ? 26.649 32.891 70.040 1.00 16.22 ? ? ? ? ? ? 654 LEU B C 1
+ATOM 3701 O O . LEU B 1 164 ? 27.809 32.553 69.755 1.00 16.77 ? ? ? ? ? ? 654 LEU B O 1
+ATOM 3702 C CB . LEU B 1 164 ? 26.395 35.343 70.470 1.00 17.30 ? ? ? ? ? ? 654 LEU B CB 1
+ATOM 3703 C CG . LEU B 1 164 ? 25.900 36.425 71.432 1.00 17.68 ? ? ? ? ? ? 654 LEU B CG 1
+ATOM 3704 C CD1 . LEU B 1 164 ? 26.097 37.812 70.832 1.00 18.63 ? ? ? ? ? ? 654 LEU B CD1 1
+ATOM 3705 C CD2 . LEU B 1 164 ? 24.447 36.163 71.737 1.00 17.10 ? ? ? ? ? ? 654 LEU B CD2 1
+ATOM 3706 N N . ARG B 1 165 ? 25.591 32.386 69.433 1.00 14.24 ? ? ? ? ? ? 655 ARG B N 1
+ATOM 3707 C CA . ARG B 1 165 ? 25.787 31.381 68.436 1.00 15.57 ? ? ? ? ? ? 655 ARG B CA 1
+ATOM 3708 C C . ARG B 1 165 ? 26.223 31.986 67.102 1.00 15.43 ? ? ? ? ? ? 655 ARG B C 1
+ATOM 3709 O O . ARG B 1 165 ? 25.984 33.165 66.795 1.00 15.03 ? ? ? ? ? ? 655 ARG B O 1
+ATOM 3710 C CB . ARG B 1 165 ? 24.529 30.531 68.275 1.00 18.23 ? ? ? ? ? ? 655 ARG B CB 1
+ATOM 3711 C CG . ARG B 1 165 ? 23.440 31.174 67.495 1.00 19.93 ? ? ? ? ? ? 655 ARG B CG 1
+ATOM 3712 C CD . ARG B 1 165 ? 22.447 30.101 67.039 1.00 20.87 ? ? ? ? ? ? 655 ARG B CD 1
+ATOM 3713 N NE . ARG B 1 165 ? 21.558 29.642 68.103 1.00 20.64 ? ? ? ? ? ? 655 ARG B NE 1
+ATOM 3714 C CZ . ARG B 1 165 ? 21.242 28.371 68.321 1.00 23.03 ? ? ? ? ? ? 655 ARG B CZ 1
+ATOM 3715 N NH1 . ARG B 1 165 ? 21.768 27.413 67.561 1.00 23.81 ? ? ? ? ? ? 655 ARG B NH1 1
+ATOM 3716 N NH2 . ARG B 1 165 ? 20.299 28.060 69.206 1.00 22.45 ? ? ? ? ? ? 655 ARG B NH2 1
+ATOM 3717 N N . SER B 1 166 ? 26.894 31.150 66.337 1.00 15.72 ? ? ? ? ? ? 656 SER B N 1
+ATOM 3718 C CA . SER B 1 166 ? 27.361 31.503 65.023 1.00 17.68 ? ? ? ? ? ? 656 SER B CA 1
+ATOM 3719 C C . SER B 1 166 ? 26.119 31.677 64.126 1.00 17.44 ? ? ? ? ? ? 656 SER B C 1
+ATOM 3720 O O . SER B 1 166 ? 25.168 30.895 64.211 1.00 18.38 ? ? ? ? ? ? 656 SER B O 1
+ATOM 3721 C CB . SER B 1 166 ? 28.254 30.349 64.532 1.00 20.26 ? ? ? ? ? ? 656 SER B CB 1
+ATOM 3722 O OG . SER B 1 166 ? 28.464 30.398 63.138 1.00 23.88 ? ? ? ? ? ? 656 SER B OG 1
+ATOM 3723 N N . SER B 1 167 ? 26.095 32.739 63.332 1.00 15.21 ? ? ? ? ? ? 657 SER B N 1
+ATOM 3724 C CA . SER B 1 167 ? 24.997 33.009 62.406 1.00 13.99 ? ? ? ? ? ? 657 SER B CA 1
+ATOM 3725 C C . SER B 1 167 ? 25.482 34.089 61.450 1.00 13.43 ? ? ? ? ? ? 657 SER B C 1
+ATOM 3726 O O . SER B 1 167 ? 26.530 34.680 61.676 1.00 13.32 ? ? ? ? ? ? 657 SER B O 1
+ATOM 3727 C CB . SER B 1 167 ? 23.740 33.482 63.123 1.00 13.24 ? ? ? ? ? ? 657 SER B CB 1
+ATOM 3728 O OG . SER B 1 167 ? 23.880 34.802 63.594 1.00 14.00 ? ? ? ? ? ? 657 SER B OG 1
+ATOM 3729 N N . ILE B 1 168 ? 24.719 34.373 60.399 1.00 13.79 ? ? ? ? ? ? 658 ILE B N 1
+ATOM 3730 C CA . ILE B 1 168 ? 25.143 35.386 59.434 1.00 13.30 ? ? ? ? ? ? 658 ILE B CA 1
+ATOM 3731 C C . ILE B 1 168 ? 25.302 36.752 60.092 1.00 12.53 ? ? ? ? ? ? 658 ILE B C 1
+ATOM 3732 O O . ILE B 1 168 ? 26.301 37.419 59.860 1.00 12.51 ? ? ? ? ? ? 658 ILE B O 1
+ATOM 3733 C CB . ILE B 1 168 ? 24.220 35.420 58.167 1.00 14.46 ? ? ? ? ? ? 658 ILE B CB 1
+ATOM 3734 C CG1 . ILE B 1 168 ? 24.839 36.303 57.092 1.00 16.14 ? ? ? ? ? ? 658 ILE B CG1 1
+ATOM 3735 C CG2 . ILE B 1 168 ? 22.797 35.874 58.500 1.00 14.70 ? ? ? ? ? ? 658 ILE B CG2 1
+ATOM 3736 C CD1 . ILE B 1 168 ? 23.978 36.392 55.872 1.00 18.29 ? ? ? ? ? ? 658 ILE B CD1 1
+ATOM 3737 N N . TRP B 1 169 ? 24.402 37.105 61.013 1.00 10.81 ? ? ? ? ? ? 659 TRP B N 1
+ATOM 3738 C CA . TRP B 1 169 ? 24.474 38.393 61.717 1.00 11.08 ? ? ? ? ? ? 659 TRP B CA 1
+ATOM 3739 C C . TRP B 1 169 ? 25.700 38.487 62.653 1.00 11.08 ? ? ? ? ? ? 659 TRP B C 1
+ATOM 3740 O O . TRP B 1 169 ? 26.455 39.474 62.648 1.00 11.25 ? ? ? ? ? ? 659 TRP B O 1
+ATOM 3741 C CB . TRP B 1 169 ? 23.194 38.640 62.546 1.00 11.06 ? ? ? ? ? ? 659 TRP B CB 1
+ATOM 3742 C CG . TRP B 1 169 ? 21.916 38.444 61.783 1.00 10.91 ? ? ? ? ? ? 659 TRP B CG 1
+ATOM 3743 C CD1 . TRP B 1 169 ? 21.052 37.388 61.874 1.00 10.47 ? ? ? ? ? ? 659 TRP B CD1 1
+ATOM 3744 C CD2 . TRP B 1 169 ? 21.374 39.327 60.797 1.00 10.96 ? ? ? ? ? ? 659 TRP B CD2 1
+ATOM 3745 N NE1 . TRP B 1 169 ? 20.002 37.559 61.007 1.00 11.17 ? ? ? ? ? ? 659 TRP B NE1 1
+ATOM 3746 C CE2 . TRP B 1 169 ? 20.174 38.743 60.328 1.00 11.36 ? ? ? ? ? ? 659 TRP B CE2 1
+ATOM 3747 C CE3 . TRP B 1 169 ? 21.787 40.554 60.261 1.00 11.25 ? ? ? ? ? ? 659 TRP B CE3 1
+ATOM 3748 C CZ2 . TRP B 1 169 ? 19.378 39.360 59.332 1.00 11.65 ? ? ? ? ? ? 659 TRP B CZ2 1
+ATOM 3749 C CZ3 . TRP B 1 169 ? 20.996 41.167 59.273 1.00 11.31 ? ? ? ? ? ? 659 TRP B CZ3 1
+ATOM 3750 C CH2 . TRP B 1 169 ? 19.806 40.565 58.823 1.00 10.83 ? ? ? ? ? ? 659 TRP B CH2 1
+ATOM 3751 N N . ARG B 1 170 ? 25.889 37.445 63.456 1.00 11.66 ? ? ? ? ? ? 660 ARG B N 1
+ATOM 3752 C CA . ARG B 1 170 ? 26.990 37.408 64.418 1.00 11.69 ? ? ? ? ? ? 660 ARG B CA 1
+ATOM 3753 C C . ARG B 1 170 ? 28.372 37.384 63.748 1.00 11.69 ? ? ? ? ? ? 660 ARG B C 1
+ATOM 3754 O O . ARG B 1 170 ? 29.288 38.083 64.177 1.00 11.78 ? ? ? ? ? ? 660 ARG B O 1
+ATOM 3755 C CB . ARG B 1 170 ? 26.825 36.176 65.336 1.00 11.13 ? ? ? ? ? ? 660 ARG B CB 1
+ATOM 3756 C CG . ARG B 1 170 ? 28.048 35.879 66.226 1.00 11.48 ? ? ? ? ? ? 660 ARG B CG 1
+ATOM 3757 C CD . ARG B 1 170 ? 28.285 36.967 67.234 1.00 11.67 ? ? ? ? ? ? 660 ARG B CD 1
+ATOM 3758 N NE . ARG B 1 170 ? 29.482 36.710 68.068 1.00 13.33 ? ? ? ? ? ? 660 ARG B NE 1
+ATOM 3759 C CZ . ARG B 1 170 ? 30.735 37.084 67.763 1.00 12.99 ? ? ? ? ? ? 660 ARG B CZ 1
+ATOM 3760 N NH1 . ARG B 1 170 ? 30.987 37.720 66.621 1.00 12.36 ? ? ? ? ? ? 660 ARG B NH1 1
+ATOM 3761 N NH2 . ARG B 1 170 ? 31.718 36.930 68.642 1.00 11.79 ? ? ? ? ? ? 660 ARG B NH2 1
+ATOM 3762 N N . ASN B 1 171 ? 28.504 36.577 62.696 1.00 11.73 ? ? ? ? ? ? 661 ASN B N 1
+ATOM 3763 C CA . ASN B 1 171 ? 29.795 36.389 62.027 1.00 12.88 ? ? ? ? ? ? 661 ASN B CA 1
+ATOM 3764 C C . ASN B 1 171 ? 30.263 37.596 61.230 1.00 13.43 ? ? ? ? ? ? 661 ASN B C 1
+ATOM 3765 O O . ASN B 1 171 ? 31.425 38.015 61.338 1.00 13.79 ? ? ? ? ? ? 661 ASN B O 1
+ATOM 3766 C CB . ASN B 1 171 ? 29.781 35.146 61.119 1.00 14.10 ? ? ? ? ? ? 661 ASN B CB 1
+ATOM 3767 C CG . ASN B 1 171 ? 29.537 33.842 61.880 1.00 14.86 ? ? ? ? ? ? 661 ASN B CG 1
+ATOM 3768 O OD1 . ASN B 1 171 ? 29.510 33.816 63.108 1.00 15.44 ? ? ? ? ? ? 661 ASN B OD1 1
+ATOM 3769 N ND2 . ASN B 1 171 ? 29.315 32.761 61.139 1.00 17.33 ? ? ? ? ? ? 661 ASN B ND2 1
+ATOM 3770 N N . VAL B 1 172 ? 29.351 38.160 60.440 1.00 12.43 ? ? ? ? ? ? 662 VAL B N 1
+ATOM 3771 C CA . VAL B 1 172 ? 29.676 39.325 59.607 1.00 11.46 ? ? ? ? ? ? 662 VAL B CA 1
+ATOM 3772 C C . VAL B 1 172 ? 29.799 40.665 60.374 1.00 11.03 ? ? ? ? ? ? 662 VAL B C 1
+ATOM 3773 O O . VAL B 1 172 ? 30.749 41.419 60.178 1.00 12.14 ? ? ? ? ? ? 662 VAL B O 1
+ATOM 3774 C CB . VAL B 1 172 ? 28.634 39.432 58.447 1.00 11.68 ? ? ? ? ? ? 662 VAL B CB 1
+ATOM 3775 C CG1 . VAL B 1 172 ? 28.854 40.710 57.624 1.00 12.45 ? ? ? ? ? ? 662 VAL B CG1 1
+ATOM 3776 C CG2 . VAL B 1 172 ? 28.723 38.213 57.554 1.00 11.85 ? ? ? ? ? ? 662 VAL B CG2 1
+ATOM 3777 N N . ILE B 1 173 ? 28.838 40.966 61.243 1.00 10.07 ? ? ? ? ? ? 663 ILE B N 1
+ATOM 3778 C CA . ILE B 1 173 ? 28.844 42.214 61.984 1.00 9.48 ? ? ? ? ? ? 663 ILE B CA 1
+ATOM 3779 C C . ILE B 1 173 ? 29.800 42.201 63.167 1.00 11.93 ? ? ? ? ? ? 663 ILE B C 1
+ATOM 3780 O O . ILE B 1 173 ? 30.590 43.125 63.330 1.00 12.90 ? ? ? ? ? ? 663 ILE B O 1
+ATOM 3781 C CB . ILE B 1 173 ? 27.411 42.600 62.442 1.00 9.16 ? ? ? ? ? ? 663 ILE B CB 1
+ATOM 3782 C CG1 . ILE B 1 173 ? 26.531 42.885 61.210 1.00 10.24 ? ? ? ? ? ? 663 ILE B CG1 1
+ATOM 3783 C CG2 . ILE B 1 173 ? 27.436 43.793 63.339 1.00 8.82 ? ? ? ? ? ? 663 ILE B CG2 1
+ATOM 3784 C CD1 . ILE B 1 173 ? 25.063 42.981 61.542 1.00 11.32 ? ? ? ? ? ? 663 ILE B CD1 1
+ATOM 3785 N N . GLY B 1 174 ? 29.708 41.177 64.018 1.00 11.83 ? ? ? ? ? ? 664 GLY B N 1
+ATOM 3786 C CA . GLY B 1 174 ? 30.593 41.127 65.164 1.00 11.31 ? ? ? ? ? ? 664 GLY B CA 1
+ATOM 3787 C C . GLY B 1 174 ? 29.832 40.877 66.436 1.00 12.32 ? ? ? ? ? ? 664 GLY B C 1
+ATOM 3788 O O . GLY B 1 174 ? 28.593 40.756 66.450 1.00 12.20 ? ? ? ? ? ? 664 GLY B O 1
+ATOM 3789 N N . GLN B 1 175 ? 30.567 40.944 67.534 1.00 12.40 ? ? ? ? ? ? 665 GLN B N 1
+ATOM 3790 C CA . GLN B 1 175 ? 29.965 40.643 68.816 1.00 14.96 ? ? ? ? ? ? 665 GLN B CA 1
+ATOM 3791 C C . GLN B 1 175 ? 28.862 41.572 69.319 1.00 13.96 ? ? ? ? ? ? 665 GLN B C 1
+ATOM 3792 O O . GLN B 1 175 ? 28.044 41.146 70.142 1.00 15.64 ? ? ? ? ? ? 665 GLN B O 1
+ATOM 3793 C CB . GLN B 1 175 ? 31.048 40.498 69.869 1.00 18.67 ? ? ? ? ? ? 665 GLN B CB 1
+ATOM 3794 C CG . GLN B 1 175 ? 31.843 41.760 70.044 1.00 24.40 ? ? ? ? ? ? 665 GLN B CG 1
+ATOM 3795 C CD . GLN B 1 175 ? 32.538 41.800 71.376 1.00 28.62 ? ? ? ? ? ? 665 GLN B CD 1
+ATOM 3796 O OE1 . GLN B 1 175 ? 33.054 42.853 71.780 1.00 31.12 ? ? ? ? ? ? 665 GLN B OE1 1
+ATOM 3797 N NE2 . GLN B 1 175 ? 32.555 40.654 72.086 1.00 30.07 ? ? ? ? ? ? 665 GLN B NE2 1
+ATOM 3798 N N . ASP B 1 176 ? 28.803 42.799 68.809 1.00 12.47 ? ? ? ? ? ? 666 ASP B N 1
+ATOM 3799 C CA . ASP B 1 176 ? 27.822 43.789 69.226 1.00 12.19 ? ? ? ? ? ? 666 ASP B CA 1
+ATOM 3800 C C . ASP B 1 176 ? 26.601 43.922 68.343 1.00 11.12 ? ? ? ? ? ? 666 ASP B C 1
+ATOM 3801 O O . ASP B 1 176 ? 25.861 44.892 68.485 1.00 12.04 ? ? ? ? ? ? 666 ASP B O 1
+ATOM 3802 C CB . ASP B 1 176 ? 28.480 45.176 69.299 1.00 14.72 ? ? ? ? ? ? 666 ASP B CB 1
+ATOM 3803 C CG . ASP B 1 176 ? 29.092 45.617 67.962 1.00 16.50 ? ? ? ? ? ? 666 ASP B CG 1
+ATOM 3804 O OD1 . ASP B 1 176 ? 29.129 44.821 66.990 1.00 17.17 ? ? ? ? ? ? 666 ASP B OD1 1
+ATOM 3805 O OD2 . ASP B 1 176 ? 29.551 46.783 67.890 1.00 18.36 ? ? ? ? ? ? 666 ASP B OD2 1
+ATOM 3806 N N . TYR B 1 177 ? 26.352 42.962 67.469 1.00 10.69 ? ? ? ? ? ? 667 TYR B N 1
+ATOM 3807 C CA . TYR B 1 177 ? 25.217 43.094 66.563 1.00 9.88 ? ? ? ? ? ? 667 TYR B CA 1
+ATOM 3808 C C . TYR B 1 177 ? 23.862 43.290 67.237 1.00 10.08 ? ? ? ? ? ? 667 TYR B C 1
+ATOM 3809 O O . TYR B 1 177 ? 23.039 44.043 66.735 1.00 10.33 ? ? ? ? ? ? 667 TYR B O 1
+ATOM 3810 C CB . TYR B 1 177 ? 25.203 41.945 65.560 1.00 10.20 ? ? ? ? ? ? 667 TYR B CB 1
+ATOM 3811 C CG . TYR B 1 177 ? 24.550 40.665 66.033 1.00 10.07 ? ? ? ? ? ? 667 TYR B CG 1
+ATOM 3812 C CD1 . TYR B 1 177 ? 25.260 39.712 66.767 1.00 10.11 ? ? ? ? ? ? 667 TYR B CD1 1
+ATOM 3813 C CD2 . TYR B 1 177 ? 23.229 40.375 65.676 1.00 10.82 ? ? ? ? ? ? 667 TYR B CD2 1
+ATOM 3814 C CE1 . TYR B 1 177 ? 24.661 38.503 67.118 1.00 10.19 ? ? ? ? ? ? 667 TYR B CE1 1
+ATOM 3815 C CE2 . TYR B 1 177 ? 22.634 39.174 66.015 1.00 10.04 ? ? ? ? ? ? 667 TYR B CE2 1
+ATOM 3816 C CZ . TYR B 1 177 ? 23.352 38.249 66.729 1.00 10.53 ? ? ? ? ? ? 667 TYR B CZ 1
+ATOM 3817 O OH . TYR B 1 177 ? 22.738 37.052 67.017 1.00 12.33 ? ? ? ? ? ? 667 TYR B OH 1
+ATOM 3818 N N . LEU B 1 178 ? 23.653 42.679 68.414 1.00 9.75 ? ? ? ? ? ? 668 LEU B N 1
+ATOM 3819 C CA . LEU B 1 178 ? 22.369 42.811 69.126 1.00 9.70 ? ? ? ? ? ? 668 LEU B CA 1
+ATOM 3820 C C . LEU B 1 178 ? 22.126 44.212 69.708 1.00 10.27 ? ? ? ? ? ? 668 LEU B C 1
+ATOM 3821 O O . LEU B 1 178 ? 20.966 44.675 69.781 1.00 10.06 ? ? ? ? ? ? 668 LEU B O 1
+ATOM 3822 C CB . LEU B 1 178 ? 22.178 41.711 70.208 1.00 12.22 ? ? ? ? ? ? 668 LEU B CB 1
+ATOM 3823 C CG . LEU B 1 178 ? 21.806 40.262 69.820 1.00 12.76 ? ? ? ? ? ? 668 LEU B CG 1
+ATOM 3824 C CD1 . LEU B 1 178 ? 21.511 39.436 71.082 1.00 13.67 ? ? ? ? ? ? 668 LEU B CD1 1
+ATOM 3825 C CD2 . LEU B 1 178 ? 20.573 40.239 68.953 1.00 13.16 ? ? ? ? ? ? 668 LEU B CD2 1
+ATOM 3826 N N . ASP B 1 179 ? 23.202 44.906 70.111 1.00 10.21 ? ? ? ? ? ? 669 ASP B N 1
+ATOM 3827 C CA . ASP B 1 179 ? 23.038 46.280 70.613 1.00 11.23 ? ? ? ? ? ? 669 ASP B CA 1
+ATOM 3828 C C . ASP B 1 179 ? 22.387 47.147 69.507 1.00 10.26 ? ? ? ? ? ? 669 ASP B C 1
+ATOM 3829 O O . ASP B 1 179 ? 21.503 47.953 69.782 1.00 10.52 ? ? ? ? ? ? 669 ASP B O 1
+ATOM 3830 C CB . ASP B 1 179 ? 24.379 46.906 71.018 1.00 13.16 ? ? ? ? ? ? 669 ASP B CB 1
+ATOM 3831 C CG . ASP B 1 179 ? 24.997 46.258 72.258 1.00 15.42 ? ? ? ? ? ? 669 ASP B CG 1
+ATOM 3832 O OD1 . ASP B 1 179 ? 24.367 45.385 72.887 1.00 16.23 ? ? ? ? ? ? 669 ASP B OD1 1
+ATOM 3833 O OD2 . ASP B 1 179 ? 26.144 46.616 72.574 1.00 17.42 ? ? ? ? ? ? 669 ASP B OD2 1
+ATOM 3834 N N . TYR B 1 180 ? 22.812 46.937 68.257 1.00 10.27 ? ? ? ? ? ? 670 TYR B N 1
+ATOM 3835 C CA . TYR B 1 180 ? 22.260 47.673 67.096 1.00 10.00 ? ? ? ? ? ? 670 TYR B CA 1
+ATOM 3836 C C . TYR B 1 180 ? 20.797 47.301 66.786 1.00 8.66 ? ? ? ? ? ? 670 TYR B C 1
+ATOM 3837 O O . TYR B 1 180 ? 19.973 48.169 66.555 1.00 9.29 ? ? ? ? ? ? 670 TYR B O 1
+ATOM 3838 C CB . TYR B 1 180 ? 23.111 47.429 65.850 1.00 11.85 ? ? ? ? ? ? 670 TYR B CB 1
+ATOM 3839 C CG . TYR B 1 180 ? 24.428 48.165 65.903 1.00 15.11 ? ? ? ? ? ? 670 TYR B CG 1
+ATOM 3840 C CD1 . TYR B 1 180 ? 24.505 49.495 65.488 1.00 17.50 ? ? ? ? ? ? 670 TYR B CD1 1
+ATOM 3841 C CD2 . TYR B 1 180 ? 25.576 47.560 66.425 1.00 16.66 ? ? ? ? ? ? 670 TYR B CD2 1
+ATOM 3842 C CE1 . TYR B 1 180 ? 25.697 50.216 65.597 1.00 20.33 ? ? ? ? ? ? 670 TYR B CE1 1
+ATOM 3843 C CE2 . TYR B 1 180 ? 26.779 48.276 66.541 1.00 19.78 ? ? ? ? ? ? 670 TYR B CE2 1
+ATOM 3844 C CZ . TYR B 1 180 ? 26.829 49.604 66.126 1.00 21.26 ? ? ? ? ? ? 670 TYR B CZ 1
+ATOM 3845 O OH . TYR B 1 180 ? 27.994 50.349 66.252 1.00 23.68 ? ? ? ? ? ? 670 TYR B OH 1
+ATOM 3846 N N . ALA B 1 181 ? 20.478 46.004 66.798 1.00 8.48 ? ? ? ? ? ? 671 ALA B N 1
+ATOM 3847 C CA . ALA B 1 181 ? 19.109 45.542 66.528 1.00 7.62 ? ? ? ? ? ? 671 ALA B CA 1
+ATOM 3848 C C . ALA B 1 181 ? 18.139 46.232 67.476 1.00 7.76 ? ? ? ? ? ? 671 ALA B C 1
+ATOM 3849 O O . ALA B 1 181 ? 17.111 46.742 67.057 1.00 8.09 ? ? ? ? ? ? 671 ALA B O 1
+ATOM 3850 C CB . ALA B 1 181 ? 19.019 44.032 66.671 1.00 7.55 ? ? ? ? ? ? 671 ALA B CB 1
+ATOM 3851 N N . PHE B 1 182 ? 18.462 46.228 68.775 1.00 7.93 ? ? ? ? ? ? 672 PHE B N 1
+ATOM 3852 C CA . PHE B 1 182 ? 17.602 46.860 69.762 1.00 8.10 ? ? ? ? ? ? 672 PHE B CA 1
+ATOM 3853 C C . PHE B 1 182 ? 17.533 48.389 69.640 1.00 8.52 ? ? ? ? ? ? 672 PHE B C 1
+ATOM 3854 O O . PHE B 1 182 ? 16.459 48.966 69.801 1.00 9.28 ? ? ? ? ? ? 672 PHE B O 1
+ATOM 3855 C CB . PHE B 1 182 ? 17.966 46.400 71.182 1.00 8.38 ? ? ? ? ? ? 672 PHE B CB 1
+ATOM 3856 C CG . PHE B 1 182 ? 17.426 45.022 71.517 1.00 8.10 ? ? ? ? ? ? 672 PHE B CG 1
+ATOM 3857 C CD1 . PHE B 1 182 ? 16.140 44.868 72.047 1.00 8.55 ? ? ? ? ? ? 672 PHE B CD1 1
+ATOM 3858 C CD2 . PHE B 1 182 ? 18.180 43.867 71.249 1.00 9.00 ? ? ? ? ? ? 672 PHE B CD2 1
+ATOM 3859 C CE1 . PHE B 1 182 ? 15.616 43.580 72.298 1.00 8.19 ? ? ? ? ? ? 672 PHE B CE1 1
+ATOM 3860 C CE2 . PHE B 1 182 ? 17.651 42.570 71.500 1.00 8.79 ? ? ? ? ? ? 672 PHE B CE2 1
+ATOM 3861 C CZ . PHE B 1 182 ? 16.366 42.449 72.021 1.00 8.26 ? ? ? ? ? ? 672 PHE B CZ 1
+ATOM 3862 N N . ARG B 1 183 ? 18.666 49.042 69.351 1.00 9.58 ? ? ? ? ? ? 673 ARG B N 1
+ATOM 3863 C CA . ARG B 1 183 ? 18.657 50.508 69.159 1.00 11.70 ? ? ? ? ? ? 673 ARG B CA 1
+ATOM 3864 C C . ARG B 1 183 ? 17.779 50.892 67.945 1.00 9.95 ? ? ? ? ? ? 673 ARG B C 1
+ATOM 3865 O O . ARG B 1 183 ? 16.962 51.812 68.027 1.00 11.11 ? ? ? ? ? ? 673 ARG B O 1
+ATOM 3866 C CB . ARG B 1 183 ? 20.077 51.067 68.987 1.00 13.66 ? ? ? ? ? ? 673 ARG B CB 1
+ATOM 3867 C CG . ARG B 1 183 ? 20.870 51.100 70.281 1.00 19.60 ? ? ? ? ? ? 673 ARG B CG 1
+ATOM 3868 C CD . ARG B 1 183 ? 22.151 51.928 70.161 1.00 23.96 ? ? ? ? ? ? 673 ARG B CD 1
+ATOM 3869 N NE . ARG B 1 183 ? 23.360 51.175 70.526 1.00 29.34 ? ? ? ? ? ? 673 ARG B NE 1
+ATOM 3870 C CZ . ARG B 1 183 ? 23.883 51.093 71.757 1.00 31.65 ? ? ? ? ? ? 673 ARG B CZ 1
+ATOM 3871 N NH1 . ARG B 1 183 ? 23.300 51.712 72.796 1.00 33.06 ? ? ? ? ? ? 673 ARG B NH1 1
+ATOM 3872 N NH2 . ARG B 1 183 ? 25.058 50.476 71.937 1.00 32.22 ? ? ? ? ? ? 673 ARG B NH2 1
+ATOM 3873 N N . TYR B 1 184 ? 17.911 50.144 66.849 1.00 9.56 ? ? ? ? ? ? 674 TYR B N 1
+ATOM 3874 C CA . TYR B 1 184 ? 17.117 50.401 65.636 1.00 10.17 ? ? ? ? ? ? 674 TYR B CA 1
+ATOM 3875 C C . TYR B 1 184 ? 15.637 50.216 65.910 1.00 10.03 ? ? ? ? ? ? 674 TYR B C 1
+ATOM 3876 O O . TYR B 1 184 ? 14.807 50.997 65.440 1.00 10.31 ? ? ? ? ? ? 674 TYR B O 1
+ATOM 3877 C CB . TYR B 1 184 ? 17.519 49.480 64.480 1.00 10.16 ? ? ? ? ? ? 674 TYR B CB 1
+ATOM 3878 C CG . TYR B 1 184 ? 18.921 49.672 63.980 1.00 10.56 ? ? ? ? ? ? 674 TYR B CG 1
+ATOM 3879 C CD1 . TYR B 1 184 ? 19.576 50.889 64.126 1.00 11.90 ? ? ? ? ? ? 674 TYR B CD1 1
+ATOM 3880 C CD2 . TYR B 1 184 ? 19.575 48.639 63.318 1.00 10.39 ? ? ? ? ? ? 674 TYR B CD2 1
+ATOM 3881 C CE1 . TYR B 1 184 ? 20.874 51.071 63.609 1.00 12.59 ? ? ? ? ? ? 674 TYR B CE1 1
+ATOM 3882 C CE2 . TYR B 1 184 ? 20.841 48.803 62.792 1.00 12.01 ? ? ? ? ? ? 674 TYR B CE2 1
+ATOM 3883 C CZ . TYR B 1 184 ? 21.493 50.022 62.935 1.00 12.37 ? ? ? ? ? ? 674 TYR B CZ 1
+ATOM 3884 O OH . TYR B 1 184 ? 22.745 50.188 62.363 1.00 13.88 ? ? ? ? ? ? 674 TYR B OH 1
+ATOM 3885 N N . ALA B 1 185 ? 15.303 49.178 66.680 1.00 9.09 ? ? ? ? ? ? 675 ALA B N 1
+ATOM 3886 C CA . ALA B 1 185 ? 13.903 48.911 67.009 1.00 8.90 ? ? ? ? ? ? 675 ALA B CA 1
+ATOM 3887 C C . ALA B 1 185 ? 13.275 49.994 67.871 1.00 8.27 ? ? ? ? ? ? 675 ALA B C 1
+ATOM 3888 O O . ALA B 1 185 ? 12.118 50.383 67.657 1.00 9.81 ? ? ? ? ? ? 675 ALA B O 1
+ATOM 3889 C CB . ALA B 1 185 ? 13.776 47.547 67.700 1.00 8.30 ? ? ? ? ? ? 675 ALA B CB 1
+ATOM 3890 N N . ARG B 1 186 ? 14.032 50.473 68.848 1.00 8.88 ? ? ? ? ? ? 676 ARG B N 1
+ATOM 3891 C CA . ARG B 1 186 ? 13.541 51.504 69.740 1.00 10.75 ? ? ? ? ? ? 676 ARG B CA 1
+ATOM 3892 C C . ARG B 1 186 ? 13.240 52.772 68.934 1.00 12.58 ? ? ? ? ? ? 676 ARG B C 1
+ATOM 3893 O O . ARG B 1 186 ? 12.203 53.409 69.145 1.00 13.93 ? ? ? ? ? ? 676 ARG B O 1
+ATOM 3894 C CB . ARG B 1 186 ? 14.544 51.796 70.874 1.00 10.88 ? ? ? ? ? ? 676 ARG B CB 1
+ATOM 3895 C CG . ARG B 1 186 ? 14.094 52.972 71.760 1.00 11.56 ? ? ? ? ? ? 676 ARG B CG 1
+ATOM 3896 C CD . ARG B 1 186 ? 12.809 52.660 72.561 1.00 13.67 ? ? ? ? ? ? 676 ARG B CD 1
+ATOM 3897 N NE . ARG B 1 186 ? 13.175 52.159 73.886 1.00 15.94 ? ? ? ? ? ? 676 ARG B NE 1
+ATOM 3898 C CZ . ARG B 1 186 ? 12.643 51.098 74.499 1.00 17.18 ? ? ? ? ? ? 676 ARG B CZ 1
+ATOM 3899 N NH1 . ARG B 1 186 ? 11.669 50.379 73.929 1.00 15.82 ? ? ? ? ? ? 676 ARG B NH1 1
+ATOM 3900 N NH2 . ARG B 1 186 ? 13.148 50.722 75.687 1.00 17.84 ? ? ? ? ? ? 676 ARG B NH2 1
+ATOM 3901 N N . GLU B 1 187 ? 14.098 53.098 67.974 1.00 14.35 ? ? ? ? ? ? 677 GLU B N 1
+ATOM 3902 C CA . GLU B 1 187 ? 13.864 54.303 67.154 1.00 17.65 ? ? ? ? ? ? 677 GLU B CA 1
+ATOM 3903 C C . GLU B 1 187 ? 12.631 54.157 66.237 1.00 16.14 ? ? ? ? ? ? 677 GLU B C 1
+ATOM 3904 O O . GLU B 1 187 ? 11.896 55.131 66.017 1.00 16.57 ? ? ? ? ? ? 677 GLU B O 1
+ATOM 3905 C CB . GLU B 1 187 ? 15.080 54.615 66.269 1.00 21.71 ? ? ? ? ? ? 677 GLU B CB 1
+ATOM 3906 C CG . GLU B 1 187 ? 16.348 55.060 66.984 1.00 28.77 ? ? ? ? ? ? 677 GLU B CG 1
+ATOM 3907 C CD . GLU B 1 187 ? 17.641 54.817 66.129 1.00 33.03 ? ? ? ? ? ? 677 GLU B CD 1
+ATOM 3908 O OE1 . GLU B 1 187 ? 17.570 54.865 64.862 1.00 35.20 ? ? ? ? ? ? 677 GLU B OE1 1
+ATOM 3909 O OE2 . GLU B 1 187 ? 18.724 54.551 66.732 1.00 35.50 ? ? ? ? ? ? 677 GLU B OE2 1
+ATOM 3910 N N . ALA B 1 188 ? 12.403 52.955 65.708 1.00 13.53 ? ? ? ? ? ? 678 ALA B N 1
+ATOM 3911 C CA . ALA B 1 188 ? 11.284 52.732 64.789 1.00 12.75 ? ? ? ? ? ? 678 ALA B CA 1
+ATOM 3912 C C . ALA B 1 188 ? 9.926 52.833 65.448 1.00 13.57 ? ? ? ? ? ? 678 ALA B C 1
+ATOM 3913 O O . ALA B 1 188 ? 8.974 53.340 64.846 1.00 13.94 ? ? ? ? ? ? 678 ALA B O 1
+ATOM 3914 C CB . ALA B 1 188 ? 11.430 51.394 64.071 1.00 12.51 ? ? ? ? ? ? 678 ALA B CB 1
+ATOM 3915 N N . ASP B 1 189 ? 9.803 52.288 66.652 1.00 12.44 ? ? ? ? ? ? 679 ASP B N 1
+ATOM 3916 C CA . ASP B 1 189 ? 8.544 52.375 67.349 1.00 12.87 ? ? ? ? ? ? 679 ASP B CA 1
+ATOM 3917 C C . ASP B 1 189 ? 8.856 52.459 68.831 1.00 15.16 ? ? ? ? ? ? 679 ASP B C 1
+ATOM 3918 O O . ASP B 1 189 ? 9.030 51.457 69.502 1.00 13.57 ? ? ? ? ? ? 679 ASP B O 1
+ATOM 3919 C CB . ASP B 1 189 ? 7.629 51.188 67.030 1.00 12.46 ? ? ? ? ? ? 679 ASP B CB 1
+ATOM 3920 C CG . ASP B 1 189 ? 6.274 51.280 67.730 1.00 12.88 ? ? ? ? ? ? 679 ASP B CG 1
+ATOM 3921 O OD1 . ASP B 1 189 ? 6.028 52.240 68.509 1.00 13.38 ? ? ? ? ? ? 679 ASP B OD1 1
+ATOM 3922 O OD2 . ASP B 1 189 ? 5.440 50.378 67.478 1.00 13.76 ? ? ? ? ? ? 679 ASP B OD2 1
+ATOM 3923 N N . PRO B 1 190 ? 8.880 53.680 69.365 1.00 17.05 ? ? ? ? ? ? 680 PRO B N 1
+ATOM 3924 C CA . PRO B 1 190 ? 9.165 53.962 70.776 1.00 17.95 ? ? ? ? ? ? 680 PRO B CA 1
+ATOM 3925 C C . PRO B 1 190 ? 8.141 53.373 71.753 1.00 17.24 ? ? ? ? ? ? 680 PRO B C 1
+ATOM 3926 O O . PRO B 1 190 ? 8.430 53.252 72.936 1.00 18.25 ? ? ? ? ? ? 680 PRO B O 1
+ATOM 3927 C CB . PRO B 1 190 ? 9.126 55.490 70.834 1.00 18.71 ? ? ? ? ? ? 680 PRO B CB 1
+ATOM 3928 C CG . PRO B 1 190 ? 9.440 55.913 69.428 1.00 20.37 ? ? ? ? ? ? 680 PRO B CG 1
+ATOM 3929 C CD . PRO B 1 190 ? 8.648 54.924 68.617 1.00 18.67 ? ? ? ? ? ? 680 PRO B CD 1
+ATOM 3930 N N . ASP B 1 191 ? 6.946 53.040 71.267 1.00 17.74 ? ? ? ? ? ? 681 ASP B N 1
+ATOM 3931 C CA . ASP B 1 191 ? 5.887 52.490 72.129 1.00 18.45 ? ? ? ? ? ? 681 ASP B CA 1
+ATOM 3932 C C . ASP B 1 191 ? 5.852 50.968 72.283 1.00 17.23 ? ? ? ? ? ? 681 ASP B C 1
+ATOM 3933 O O . ASP B 1 191 ? 5.142 50.464 73.158 1.00 16.95 ? ? ? ? ? ? 681 ASP B O 1
+ATOM 3934 C CB . ASP B 1 191 ? 4.513 52.997 71.687 1.00 21.21 ? ? ? ? ? ? 681 ASP B CB 1
+ATOM 3935 C CG . ASP B 1 191 ? 4.408 54.540 71.729 1.00 25.17 ? ? ? ? ? ? 681 ASP B CG 1
+ATOM 3936 O OD1 . ASP B 1 191 ? 4.975 55.167 72.660 1.00 26.58 ? ? ? ? ? ? 681 ASP B OD1 1
+ATOM 3937 O OD2 . ASP B 1 191 ? 3.762 55.125 70.824 1.00 27.13 ? ? ? ? ? ? 681 ASP B OD2 1
+ATOM 3938 N N . ALA B 1 192 ? 6.612 50.248 71.454 1.00 13.98 ? ? ? ? ? ? 682 ALA B N 1
+ATOM 3939 C CA . ALA B 1 192 ? 6.659 48.789 71.513 1.00 12.50 ? ? ? ? ? ? 682 ALA B CA 1
+ATOM 3940 C C . ALA B 1 192 ? 7.575 48.310 72.631 1.00 12.91 ? ? ? ? ? ? 682 ALA B C 1
+ATOM 3941 O O . ALA B 1 192 ? 8.613 48.941 72.910 1.00 12.82 ? ? ? ? ? ? 682 ALA B O 1
+ATOM 3942 C CB . ALA B 1 192 ? 7.158 48.228 70.204 1.00 12.34 ? ? ? ? ? ? 682 ALA B CB 1
+ATOM 3943 N N . LEU B 1 193 ? 7.199 47.204 73.283 1.00 11.28 ? ? ? ? ? ? 683 LEU B N 1
+ATOM 3944 C CA . LEU B 1 193 ? 8.067 46.610 74.314 1.00 10.10 ? ? ? ? ? ? 683 LEU B CA 1
+ATOM 3945 C C . LEU B 1 193 ? 8.967 45.681 73.511 1.00 9.22 ? ? ? ? ? ? 683 LEU B C 1
+ATOM 3946 O O . LEU B 1 193 ? 8.477 44.869 72.723 1.00 10.13 ? ? ? ? ? ? 683 LEU B O 1
+ATOM 3947 C CB . LEU B 1 193 ? 7.256 45.818 75.342 1.00 10.61 ? ? ? ? ? ? 683 LEU B CB 1
+ATOM 3948 C CG . LEU B 1 193 ? 6.375 46.738 76.175 1.00 12.04 ? ? ? ? ? ? 683 LEU B CG 1
+ATOM 3949 C CD1 . LEU B 1 193 ? 5.394 45.872 76.989 1.00 13.23 ? ? ? ? ? ? 683 LEU B CD1 1
+ATOM 3950 C CD2 . LEU B 1 193 ? 7.240 47.665 77.047 1.00 13.96 ? ? ? ? ? ? 683 LEU B CD2 1
+ATOM 3951 N N . LEU B 1 194 ? 10.274 45.798 73.700 1.00 8.11 ? ? ? ? ? ? 684 LEU B N 1
+ATOM 3952 C CA . LEU B 1 194 ? 11.256 45.028 72.945 1.00 7.87 ? ? ? ? ? ? 684 LEU B CA 1
+ATOM 3953 C C . LEU B 1 194 ? 11.744 43.823 73.730 1.00 7.93 ? ? ? ? ? ? 684 LEU B C 1
+ATOM 3954 O O . LEU B 1 194 ? 12.244 43.990 74.839 1.00 8.95 ? ? ? ? ? ? 684 LEU B O 1
+ATOM 3955 C CB . LEU B 1 194 ? 12.452 45.934 72.572 1.00 7.86 ? ? ? ? ? ? 684 LEU B CB 1
+ATOM 3956 C CG . LEU B 1 194 ? 12.090 47.261 71.873 1.00 8.50 ? ? ? ? ? ? 684 LEU B CG 1
+ATOM 3957 C CD1 . LEU B 1 194 ? 13.356 47.992 71.512 1.00 9.99 ? ? ? ? ? ? 684 LEU B CD1 1
+ATOM 3958 C CD2 . LEU B 1 194 ? 11.201 46.970 70.640 1.00 7.93 ? ? ? ? ? ? 684 LEU B CD2 1
+ATOM 3959 N N . PHE B 1 195 ? 11.701 42.645 73.105 1.00 7.56 ? ? ? ? ? ? 685 PHE B N 1
+ATOM 3960 C CA . PHE B 1 195 ? 12.086 41.366 73.746 1.00 7.46 ? ? ? ? ? ? 685 PHE B CA 1
+ATOM 3961 C C . PHE B 1 195 ? 13.190 40.579 73.066 1.00 8.44 ? ? ? ? ? ? 685 PHE B C 1
+ATOM 3962 O O . PHE B 1 195 ? 13.348 40.607 71.829 1.00 8.27 ? ? ? ? ? ? 685 PHE B O 1
+ATOM 3963 C CB . PHE B 1 195 ? 10.868 40.403 73.755 1.00 8.01 ? ? ? ? ? ? 685 PHE B CB 1
+ATOM 3964 C CG . PHE B 1 195 ? 9.815 40.730 74.786 1.00 8.44 ? ? ? ? ? ? 685 PHE B CG 1
+ATOM 3965 C CD1 . PHE B 1 195 ? 8.981 41.839 74.637 1.00 9.16 ? ? ? ? ? ? 685 PHE B CD1 1
+ATOM 3966 C CD2 . PHE B 1 195 ? 9.698 39.953 75.944 1.00 9.56 ? ? ? ? ? ? 685 PHE B CD2 1
+ATOM 3967 C CE1 . PHE B 1 195 ? 8.057 42.188 75.619 1.00 10.18 ? ? ? ? ? ? 685 PHE B CE1 1
+ATOM 3968 C CE2 . PHE B 1 195 ? 8.767 40.298 76.946 1.00 10.55 ? ? ? ? ? ? 685 PHE B CE2 1
+ATOM 3969 C CZ . PHE B 1 195 ? 7.952 41.416 76.787 1.00 10.25 ? ? ? ? ? ? 685 PHE B CZ 1
+ATOM 3970 N N . TYR B 1 196 ? 13.940 39.865 73.887 1.00 7.46 ? ? ? ? ? ? 686 TYR B N 1
+ATOM 3971 C CA . TYR B 1 196 ? 14.928 38.897 73.437 1.00 7.95 ? ? ? ? ? ? 686 TYR B CA 1
+ATOM 3972 C C . TYR B 1 196 ? 14.172 37.582 73.782 1.00 8.47 ? ? ? ? ? ? 686 TYR B C 1
+ATOM 3973 O O . TYR B 1 196 ? 13.762 37.401 74.939 1.00 9.09 ? ? ? ? ? ? 686 TYR B O 1
+ATOM 3974 C CB . TYR B 1 196 ? 16.220 38.986 74.236 1.00 7.80 ? ? ? ? ? ? 686 TYR B CB 1
+ATOM 3975 C CG . TYR B 1 196 ? 17.156 37.848 73.919 1.00 9.32 ? ? ? ? ? ? 686 TYR B CG 1
+ATOM 3976 C CD1 . TYR B 1 196 ? 17.921 37.843 72.751 1.00 10.49 ? ? ? ? ? ? 686 TYR B CD1 1
+ATOM 3977 C CD2 . TYR B 1 196 ? 17.181 36.696 74.722 1.00 9.33 ? ? ? ? ? ? 686 TYR B CD2 1
+ATOM 3978 C CE1 . TYR B 1 196 ? 18.663 36.721 72.384 1.00 11.33 ? ? ? ? ? ? 686 TYR B CE1 1
+ATOM 3979 C CE2 . TYR B 1 196 ? 17.920 35.587 74.365 1.00 9.79 ? ? ? ? ? ? 686 TYR B CE2 1
+ATOM 3980 C CZ . TYR B 1 196 ? 18.650 35.600 73.196 1.00 11.43 ? ? ? ? ? ? 686 TYR B CZ 1
+ATOM 3981 O OH . TYR B 1 196 ? 19.318 34.474 72.808 1.00 12.88 ? ? ? ? ? ? 686 TYR B OH 1
+ATOM 3982 N N . ASN B 1 197 ? 13.990 36.688 72.809 1.00 7.37 ? ? ? ? ? ? 687 ASN B N 1
+ATOM 3983 C CA . ASN B 1 197 ? 13.208 35.452 72.982 1.00 7.43 ? ? ? ? ? ? 687 ASN B CA 1
+ATOM 3984 C C . ASN B 1 197 ? 14.121 34.216 72.796 1.00 8.97 ? ? ? ? ? ? 687 ASN B C 1
+ATOM 3985 O O . ASN B 1 197 ? 14.928 34.173 71.854 1.00 9.40 ? ? ? ? ? ? 687 ASN B O 1
+ATOM 3986 C CB . ASN B 1 197 ? 12.056 35.478 71.936 1.00 7.96 ? ? ? ? ? ? 687 ASN B CB 1
+ATOM 3987 C CG . ASN B 1 197 ? 11.060 34.315 72.085 1.00 9.11 ? ? ? ? ? ? 687 ASN B CG 1
+ATOM 3988 O OD1 . ASN B 1 197 ? 10.861 33.506 71.161 1.00 10.19 ? ? ? ? ? ? 687 ASN B OD1 1
+ATOM 3989 N ND2 . ASN B 1 197 ? 10.405 34.260 73.220 1.00 8.05 ? ? ? ? ? ? 687 ASN B ND2 1
+ATOM 3990 N N . ASP B 1 198 ? 13.999 33.204 73.666 1.00 8.15 ? ? ? ? ? ? 688 ASP B N 1
+ATOM 3991 C CA . ASP B 1 198 ? 14.862 32.014 73.554 1.00 8.37 ? ? ? ? ? ? 688 ASP B CA 1
+ATOM 3992 C C . ASP B 1 198 ? 14.244 30.810 74.325 1.00 8.87 ? ? ? ? ? ? 688 ASP B C 1
+ATOM 3993 O O . ASP B 1 198 ? 13.250 30.964 75.056 1.00 8.64 ? ? ? ? ? ? 688 ASP B O 1
+ATOM 3994 C CB . ASP B 1 198 ? 16.275 32.319 74.126 1.00 8.61 ? ? ? ? ? ? 688 ASP B CB 1
+ATOM 3995 C CG . ASP B 1 198 ? 17.407 31.617 73.369 1.00 8.78 ? ? ? ? ? ? 688 ASP B CG 1
+ATOM 3996 O OD1 . ASP B 1 198 ? 17.213 30.572 72.733 1.00 9.86 ? ? ? ? ? ? 688 ASP B OD1 1
+ATOM 3997 O OD2 . ASP B 1 198 ? 18.541 32.124 73.395 1.00 11.65 ? ? ? ? ? ? 688 ASP B OD2 1
+ATOM 3998 N N . TYR B 1 199 ? 14.787 29.621 74.048 1.00 9.44 ? ? ? ? ? ? 689 TYR B N 1
+ATOM 3999 C CA . TYR B 1 199 ? 14.363 28.385 74.703 1.00 10.15 ? ? ? ? ? ? 689 TYR B CA 1
+ATOM 4000 C C . TYR B 1 199 ? 15.478 27.899 75.670 1.00 10.54 ? ? ? ? ? ? 689 TYR B C 1
+ATOM 4001 O O . TYR B 1 199 ? 16.660 28.237 75.537 1.00 9.98 ? ? ? ? ? ? 689 TYR B O 1
+ATOM 4002 C CB . TYR B 1 199 ? 14.011 27.298 73.686 1.00 10.64 ? ? ? ? ? ? 689 TYR B CB 1
+ATOM 4003 C CG . TYR B 1 199 ? 15.154 26.863 72.807 1.00 12.46 ? ? ? ? ? ? 689 TYR B CG 1
+ATOM 4004 C CD1 . TYR B 1 199 ? 16.035 25.850 73.213 1.00 13.22 ? ? ? ? ? ? 689 TYR B CD1 1
+ATOM 4005 C CD2 . TYR B 1 199 ? 15.402 27.498 71.582 1.00 13.29 ? ? ? ? ? ? 689 TYR B CD2 1
+ATOM 4006 C CE1 . TYR B 1 199 ? 17.144 25.491 72.430 1.00 14.11 ? ? ? ? ? ? 689 TYR B CE1 1
+ATOM 4007 C CE2 . TYR B 1 199 ? 16.491 27.145 70.796 1.00 14.28 ? ? ? ? ? ? 689 TYR B CE2 1
+ATOM 4008 C CZ . TYR B 1 199 ? 17.367 26.146 71.224 1.00 15.76 ? ? ? ? ? ? 689 TYR B CZ 1
+ATOM 4009 O OH . TYR B 1 199 ? 18.484 25.840 70.457 1.00 17.07 ? ? ? ? ? ? 689 TYR B OH 1
+ATOM 4010 N N . ASN B 1 200 ? 15.072 27.086 76.638 1.00 12.08 ? ? ? ? ? ? 690 ASN B N 1
+ATOM 4011 C CA . ASN B 1 200 ? 15.973 26.562 77.647 1.00 12.91 ? ? ? ? ? ? 690 ASN B CA 1
+ATOM 4012 C C . ASN B 1 200 ? 16.693 27.651 78.431 1.00 12.35 ? ? ? ? ? ? 690 ASN B C 1
+ATOM 4013 O O . ASN B 1 200 ? 17.846 27.479 78.828 1.00 12.87 ? ? ? ? ? ? 690 ASN B O 1
+ATOM 4014 C CB . ASN B 1 200 ? 16.957 25.543 77.075 1.00 16.85 ? ? ? ? ? ? 690 ASN B CB 1
+ATOM 4015 C CG . ASN B 1 200 ? 17.572 24.662 78.168 1.00 22.48 ? ? ? ? ? ? 690 ASN B CG 1
+ATOM 4016 O OD1 . ASN B 1 200 ? 16.922 24.382 79.210 1.00 25.36 ? ? ? ? ? ? 690 ASN B OD1 1
+ATOM 4017 N ND2 . ASN B 1 200 ? 18.827 24.240 77.964 1.00 24.04 ? ? ? ? ? ? 690 ASN B ND2 1
+ATOM 4018 N N . ILE B 1 201 ? 15.990 28.761 78.686 1.00 10.98 ? ? ? ? ? ? 691 ILE B N 1
+ATOM 4019 C CA . ILE B 1 201 ? 16.533 29.882 79.485 1.00 9.94 ? ? ? ? ? ? 691 ILE B CA 1
+ATOM 4020 C C . ILE B 1 201 ? 15.580 30.184 80.661 1.00 10.20 ? ? ? ? ? ? 691 ILE B C 1
+ATOM 4021 O O . ILE B 1 201 ? 15.709 31.199 81.332 1.00 11.07 ? ? ? ? ? ? 691 ILE B O 1
+ATOM 4022 C CB . ILE B 1 201 ? 16.708 31.182 78.638 1.00 9.80 ? ? ? ? ? ? 691 ILE B CB 1
+ATOM 4023 C CG1 . ILE B 1 201 ? 15.350 31.632 78.076 1.00 9.14 ? ? ? ? ? ? 691 ILE B CG1 1
+ATOM 4024 C CG2 . ILE B 1 201 ? 17.779 30.953 77.536 1.00 10.15 ? ? ? ? ? ? 691 ILE B CG2 1
+ATOM 4025 C CD1 . ILE B 1 201 ? 15.337 33.064 77.621 1.00 10.14 ? ? ? ? ? ? 691 ILE B CD1 1
+ATOM 4026 N N . GLU B 1 202 ? 14.644 29.270 80.920 1.00 9.37 ? ? ? ? ? ? 692 GLU B N 1
+ATOM 4027 C CA . GLU B 1 202 ? 13.645 29.459 81.974 1.00 10.91 ? ? ? ? ? ? 692 GLU B CA 1
+ATOM 4028 C C . GLU B 1 202 ? 14.082 29.116 83.401 1.00 10.68 ? ? ? ? ? ? 692 GLU B C 1
+ATOM 4029 O O . GLU B 1 202 ? 13.560 29.692 84.352 1.00 11.85 ? ? ? ? ? ? 692 GLU B O 1
+ATOM 4030 C CB . GLU B 1 202 ? 12.388 28.646 81.657 1.00 11.61 ? ? ? ? ? ? 692 GLU B CB 1
+ATOM 4031 C CG . GLU B 1 202 ? 11.754 28.957 80.292 1.00 11.88 ? ? ? ? ? ? 692 GLU B CG 1
+ATOM 4032 C CD . GLU B 1 202 ? 12.297 28.116 79.150 1.00 12.28 ? ? ? ? ? ? 692 GLU B CD 1
+ATOM 4033 O OE1 . GLU B 1 202 ? 13.223 27.287 79.338 1.00 12.71 ? ? ? ? ? ? 692 GLU B OE1 1
+ATOM 4034 O OE2 . GLU B 1 202 ? 11.770 28.272 78.030 1.00 13.89 ? ? ? ? ? ? 692 GLU B OE2 1
+ATOM 4035 N N . ASP B 1 203 ? 15.022 28.189 83.531 1.00 11.68 ? ? ? ? ? ? 693 ASP B N 1
+ATOM 4036 C CA . ASP B 1 203 ? 15.489 27.731 84.863 1.00 12.97 ? ? ? ? ? ? 693 ASP B CA 1
+ATOM 4037 C C . ASP B 1 203 ? 16.680 28.550 85.359 1.00 12.88 ? ? ? ? ? ? 693 ASP B C 1
+ATOM 4038 O O . ASP B 1 203 ? 16.764 29.757 85.077 1.00 12.52 ? ? ? ? ? ? 693 ASP B O 1
+ATOM 4039 C CB . ASP B 1 203 ? 15.807 26.224 84.805 1.00 14.04 ? ? ? ? ? ? 693 ASP B CB 1
+ATOM 4040 C CG . ASP B 1 203 ? 16.938 25.870 83.809 1.00 15.65 ? ? ? ? ? ? 693 ASP B CG 1
+ATOM 4041 O OD1 . ASP B 1 203 ? 17.634 26.765 83.283 1.00 15.60 ? ? ? ? ? ? 693 ASP B OD1 1
+ATOM 4042 O OD2 . ASP B 1 203 ? 17.135 24.660 83.529 1.00 17.74 ? ? ? ? ? ? 693 ASP B OD2 1
+ATOM 4043 N N . LEU B 1 204 ? 17.552 27.929 86.159 1.00 12.21 ? ? ? ? ? ? 694 LEU B N 1
+ATOM 4044 C CA . LEU B 1 204 ? 18.758 28.618 86.636 1.00 12.19 ? ? ? ? ? ? 694 LEU B CA 1
+ATOM 4045 C C . LEU B 1 204 ? 20.037 27.912 86.112 1.00 12.27 ? ? ? ? ? ? 694 LEU B C 1
+ATOM 4046 O O . LEU B 1 204 ? 21.113 27.988 86.707 1.00 13.93 ? ? ? ? ? ? 694 LEU B O 1
+ATOM 4047 C CB . LEU B 1 204 ? 18.749 28.752 88.170 1.00 11.38 ? ? ? ? ? ? 694 LEU B CB 1
+ATOM 4048 C CG . LEU B 1 204 ? 17.626 29.604 88.766 1.00 12.07 ? ? ? ? ? ? 694 LEU B CG 1
+ATOM 4049 C CD1 . LEU B 1 204 ? 17.505 29.368 90.298 1.00 13.14 ? ? ? ? ? ? 694 LEU B CD1 1
+ATOM 4050 C CD2 . LEU B 1 204 ? 17.836 31.097 88.431 1.00 12.37 ? ? ? ? ? ? 694 LEU B CD2 1
+ATOM 4051 N N . GLY B 1 205 ? 19.920 27.255 84.968 1.00 12.16 ? ? ? ? ? ? 695 GLY B N 1
+ATOM 4052 C CA . GLY B 1 205 ? 21.049 26.557 84.380 1.00 12.78 ? ? ? ? ? ? 695 GLY B CA 1
+ATOM 4053 C C . GLY B 1 205 ? 22.040 27.450 83.626 1.00 13.66 ? ? ? ? ? ? 695 GLY B C 1
+ATOM 4054 O O . GLY B 1 205 ? 21.825 28.661 83.500 1.00 13.73 ? ? ? ? ? ? 695 GLY B O 1
+ATOM 4055 N N . PRO B 1 206 ? 23.069 26.857 82.998 1.00 14.68 ? ? ? ? ? ? 696 PRO B N 1
+ATOM 4056 C CA . PRO B 1 206 ? 24.088 27.627 82.249 1.00 15.00 ? ? ? ? ? ? 696 PRO B CA 1
+ATOM 4057 C C . PRO B 1 206 ? 23.554 28.590 81.163 1.00 13.65 ? ? ? ? ? ? 696 PRO B C 1
+ATOM 4058 O O . PRO B 1 206 ? 23.955 29.755 81.131 1.00 13.72 ? ? ? ? ? ? 696 PRO B O 1
+ATOM 4059 C CB . PRO B 1 206 ? 24.993 26.531 81.655 1.00 15.71 ? ? ? ? ? ? 696 PRO B CB 1
+ATOM 4060 C CG . PRO B 1 206 ? 24.823 25.369 82.628 1.00 17.35 ? ? ? ? ? ? 696 PRO B CG 1
+ATOM 4061 C CD . PRO B 1 206 ? 23.361 25.405 82.979 1.00 15.69 ? ? ? ? ? ? 696 PRO B CD 1
+ATOM 4062 N N . LYS B 1 207 ? 22.676 28.105 80.285 1.00 12.21 ? ? ? ? ? ? 697 LYS B N 1
+ATOM 4063 C CA . LYS B 1 207 ? 22.130 28.957 79.229 1.00 11.52 ? ? ? ? ? ? 697 LYS B CA 1
+ATOM 4064 C C . LYS B 1 207 ? 21.305 30.094 79.822 1.00 12.02 ? ? ? ? ? ? 697 LYS B C 1
+ATOM 4065 O O . LYS B 1 207 ? 21.386 31.229 79.353 1.00 12.65 ? ? ? ? ? ? 697 LYS B O 1
+ATOM 4066 C CB . LYS B 1 207 ? 21.280 28.157 78.257 1.00 10.45 ? ? ? ? ? ? 697 LYS B CB 1
+ATOM 4067 C CG . LYS B 1 207 ? 21.049 28.902 76.920 1.00 11.25 ? ? ? ? ? ? 697 LYS B CG 1
+ATOM 4068 C CD . LYS B 1 207 ? 20.106 28.129 76.033 1.00 10.63 ? ? ? ? ? ? 697 LYS B CD 1
+ATOM 4069 C CE . LYS B 1 207 ? 19.905 28.803 74.657 1.00 11.19 ? ? ? ? ? ? 697 LYS B CE 1
+ATOM 4070 N NZ . LYS B 1 207 ? 18.918 28.046 73.852 1.00 10.42 ? ? ? ? ? ? 697 LYS B NZ 1
+ATOM 4071 N N . SER B 1 208 ? 20.481 29.799 80.831 1.00 11.81 ? ? ? ? ? ? 698 SER B N 1
+ATOM 4072 C CA . SER B 1 208 ? 19.683 30.833 81.494 1.00 10.89 ? ? ? ? ? ? 698 SER B CA 1
+ATOM 4073 C C . SER B 1 208 ? 20.570 31.938 82.137 1.00 11.77 ? ? ? ? ? ? 698 SER B C 1
+ATOM 4074 O O . SER B 1 208 ? 20.271 33.152 82.040 1.00 11.16 ? ? ? ? ? ? 698 SER B O 1
+ATOM 4075 C CB . SER B 1 208 ? 18.777 30.216 82.574 1.00 10.87 ? ? ? ? ? ? 698 SER B CB 1
+ATOM 4076 O OG . SER B 1 208 ? 18.252 31.229 83.410 1.00 10.80 ? ? ? ? ? ? 698 SER B OG 1
+ATOM 4077 N N . ASN B 1 209 ? 21.647 31.522 82.810 1.00 11.27 ? ? ? ? ? ? 699 ASN B N 1
+ATOM 4078 C CA . ASN B 1 209 ? 22.543 32.500 83.440 1.00 12.24 ? ? ? ? ? ? 699 ASN B CA 1
+ATOM 4079 C C . ASN B 1 209 ? 23.243 33.368 82.400 1.00 12.28 ? ? ? ? ? ? 699 ASN B C 1
+ATOM 4080 O O . ASN B 1 209 ? 23.464 34.555 82.639 1.00 13.18 ? ? ? ? ? ? 699 ASN B O 1
+ATOM 4081 C CB . ASN B 1 209 ? 23.588 31.818 84.325 1.00 13.86 ? ? ? ? ? ? 699 ASN B CB 1
+ATOM 4082 C CG . ASN B 1 209 ? 22.960 31.051 85.484 1.00 15.00 ? ? ? ? ? ? 699 ASN B CG 1
+ATOM 4083 O OD1 . ASN B 1 209 ? 21.883 31.399 85.979 1.00 14.79 ? ? ? ? ? ? 699 ASN B OD1 1
+ATOM 4084 N ND2 . ASN B 1 209 ? 23.614 29.967 85.880 1.00 16.53 ? ? ? ? ? ? 699 ASN B ND2 1
+ATOM 4085 N N . ALA B 1 210 ? 23.632 32.761 81.276 1.00 12.63 ? ? ? ? ? ? 700 ALA B N 1
+ATOM 4086 C CA . ALA B 1 210 ? 24.295 33.498 80.165 1.00 13.10 ? ? ? ? ? ? 700 ALA B CA 1
+ATOM 4087 C C . ALA B 1 210 ? 23.346 34.582 79.607 1.00 12.50 ? ? ? ? ? ? 700 ALA B C 1
+ATOM 4088 O O . ALA B 1 210 ? 23.754 35.725 79.417 1.00 12.67 ? ? ? ? ? ? 700 ALA B O 1
+ATOM 4089 C CB . ALA B 1 210 ? 24.736 32.529 79.050 1.00 12.51 ? ? ? ? ? ? 700 ALA B CB 1
+ATOM 4090 N N . VAL B 1 211 ? 22.076 34.247 79.389 1.00 11.96 ? ? ? ? ? ? 701 VAL B N 1
+ATOM 4091 C CA . VAL B 1 211 ? 21.106 35.224 78.886 1.00 11.40 ? ? ? ? ? ? 701 VAL B CA 1
+ATOM 4092 C C . VAL B 1 211 ? 20.800 36.307 79.927 1.00 11.83 ? ? ? ? ? ? 701 VAL B C 1
+ATOM 4093 O O . VAL B 1 211 ? 20.739 37.499 79.604 1.00 12.54 ? ? ? ? ? ? 701 VAL B O 1
+ATOM 4094 C CB . VAL B 1 211 ? 19.824 34.532 78.356 1.00 11.59 ? ? ? ? ? ? 701 VAL B CB 1
+ATOM 4095 C CG1 . VAL B 1 211 ? 18.707 35.541 78.109 1.00 10.70 ? ? ? ? ? ? 701 VAL B CG1 1
+ATOM 4096 C CG2 . VAL B 1 211 ? 20.159 33.727 77.090 1.00 10.92 ? ? ? ? ? ? 701 VAL B CG2 1
+ATOM 4097 N N . PHE B 1 212 ? 20.667 35.921 81.195 1.00 10.74 ? ? ? ? ? ? 702 PHE B N 1
+ATOM 4098 C CA . PHE B 1 212 ? 20.424 36.914 82.233 1.00 11.38 ? ? ? ? ? ? 702 PHE B CA 1
+ATOM 4099 C C . PHE B 1 212 ? 21.606 37.927 82.291 1.00 11.37 ? ? ? ? ? ? 702 PHE B C 1
+ATOM 4100 O O . PHE B 1 212 ? 21.395 39.133 82.342 1.00 11.85 ? ? ? ? ? ? 702 PHE B O 1
+ATOM 4101 C CB . PHE B 1 212 ? 20.204 36.233 83.605 1.00 11.28 ? ? ? ? ? ? 702 PHE B CB 1
+ATOM 4102 C CG . PHE B 1 212 ? 20.147 37.200 84.744 1.00 10.78 ? ? ? ? ? ? 702 PHE B CG 1
+ATOM 4103 C CD1 . PHE B 1 212 ? 18.998 37.917 85.000 1.00 11.62 ? ? ? ? ? ? 702 PHE B CD1 1
+ATOM 4104 C CD2 . PHE B 1 212 ? 21.272 37.441 85.514 1.00 11.35 ? ? ? ? ? ? 702 PHE B CD2 1
+ATOM 4105 C CE1 . PHE B 1 212 ? 18.957 38.877 86.013 1.00 12.29 ? ? ? ? ? ? 702 PHE B CE1 1
+ATOM 4106 C CE2 . PHE B 1 212 ? 21.236 38.399 86.523 1.00 12.56 ? ? ? ? ? ? 702 PHE B CE2 1
+ATOM 4107 C CZ . PHE B 1 212 ? 20.076 39.115 86.769 1.00 12.23 ? ? ? ? ? ? 702 PHE B CZ 1
+ATOM 4108 N N . ASN B 1 213 ? 22.837 37.426 82.321 1.00 13.04 ? ? ? ? ? ? 703 ASN B N 1
+ATOM 4109 C CA . ASN B 1 213 ? 24.022 38.306 82.368 1.00 14.48 ? ? ? ? ? ? 703 ASN B CA 1
+ATOM 4110 C C . ASN B 1 213 ? 24.059 39.228 81.126 1.00 14.60 ? ? ? ? ? ? 703 ASN B C 1
+ATOM 4111 O O . ASN B 1 213 ? 24.353 40.416 81.250 1.00 14.54 ? ? ? ? ? ? 703 ASN B O 1
+ATOM 4112 C CB . ASN B 1 213 ? 25.334 37.494 82.476 1.00 17.09 ? ? ? ? ? ? 703 ASN B CB 1
+ATOM 4113 C CG . ASN B 1 213 ? 25.473 36.744 83.821 1.00 20.04 ? ? ? ? ? ? 703 ASN B CG 1
+ATOM 4114 O OD1 . ASN B 1 213 ? 25.000 37.207 84.850 1.00 20.78 ? ? ? ? ? ? 703 ASN B OD1 1
+ATOM 4115 N ND2 . ASN B 1 213 ? 26.149 35.587 83.797 1.00 22.33 ? ? ? ? ? ? 703 ASN B ND2 1
+ATOM 4116 N N . MET B 1 214 ? 23.767 38.673 79.944 1.00 14.23 ? ? ? ? ? ? 704 MET B N 1
+ATOM 4117 C CA . MET B 1 214 ? 23.755 39.457 78.710 1.00 14.02 ? ? ? ? ? ? 704 MET B CA 1
+ATOM 4118 C C . MET B 1 214 ? 22.765 40.604 78.831 1.00 13.16 ? ? ? ? ? ? 704 MET B C 1
+ATOM 4119 O O . MET B 1 214 ? 23.086 41.760 78.548 1.00 13.49 ? ? ? ? ? ? 704 MET B O 1
+ATOM 4120 C CB . MET B 1 214 ? 23.352 38.594 77.516 1.00 14.46 ? ? ? ? ? ? 704 MET B CB 1
+ATOM 4121 C CG . MET B 1 214 ? 23.258 39.411 76.217 1.00 15.96 ? ? ? ? ? ? 704 MET B CG 1
+ATOM 4122 S SD . MET B 1 214 ? 22.794 38.421 74.800 1.00 18.48 ? ? ? ? ? ? 704 MET B SD 1
+ATOM 4123 C CE . MET B 1 214 ? 21.079 38.288 75.044 1.00 17.01 ? ? ? ? ? ? 704 MET B CE 1
+ATOM 4124 N N . ILE B 1 215 ? 21.555 40.287 79.274 1.00 11.75 ? ? ? ? ? ? 705 ILE B N 1
+ATOM 4125 C CA . ILE B 1 215 ? 20.519 41.286 79.406 1.00 12.82 ? ? ? ? ? ? 705 ILE B CA 1
+ATOM 4126 C C . ILE B 1 215 ? 20.848 42.303 80.496 1.00 13.76 ? ? ? ? ? ? 705 ILE B C 1
+ATOM 4127 O O . ILE B 1 215 ? 20.622 43.502 80.325 1.00 14.33 ? ? ? ? ? ? 705 ILE B O 1
+ATOM 4128 C CB . ILE B 1 215 ? 19.129 40.630 79.599 1.00 11.77 ? ? ? ? ? ? 705 ILE B CB 1
+ATOM 4129 C CG1 . ILE B 1 215 ? 18.767 39.854 78.317 1.00 11.57 ? ? ? ? ? ? 705 ILE B CG1 1
+ATOM 4130 C CG2 . ILE B 1 215 ? 18.108 41.683 79.994 1.00 11.98 ? ? ? ? ? ? 705 ILE B CG2 1
+ATOM 4131 C CD1 . ILE B 1 215 ? 17.448 39.162 78.358 1.00 12.17 ? ? ? ? ? ? 705 ILE B CD1 1
+ATOM 4132 N N . LYS B 1 216 ? 21.443 41.826 81.589 1.00 14.31 ? ? ? ? ? ? 706 LYS B N 1
+ATOM 4133 C CA . LYS B 1 216 ? 21.827 42.716 82.671 1.00 15.58 ? ? ? ? ? ? 706 LYS B CA 1
+ATOM 4134 C C . LYS B 1 216 ? 22.849 43.726 82.163 1.00 14.92 ? ? ? ? ? ? 706 LYS B C 1
+ATOM 4135 O O . LYS B 1 216 ? 22.726 44.905 82.414 1.00 15.58 ? ? ? ? ? ? 706 LYS B O 1
+ATOM 4136 C CB . LYS B 1 216 ? 22.422 41.918 83.821 1.00 16.08 ? ? ? ? ? ? 706 LYS B CB 1
+ATOM 4137 C CG . LYS B 1 216 ? 22.738 42.768 85.015 1.00 18.75 ? ? ? ? ? ? 706 LYS B CG 1
+ATOM 4138 C CD . LYS B 1 216 ? 23.272 41.889 86.122 1.00 22.23 ? ? ? ? ? ? 706 LYS B CD 1
+ATOM 4139 C CE . LYS B 1 216 ? 23.824 42.740 87.258 1.00 25.37 ? ? ? ? ? ? 706 LYS B CE 1
+ATOM 4140 N NZ . LYS B 1 216 ? 22.818 43.732 87.779 1.00 26.98 ? ? ? ? ? ? 706 LYS B NZ 1
+ATOM 4141 N N . SER B 1 217 ? 23.825 43.251 81.410 1.00 15.08 ? ? ? ? ? ? 707 SER B N 1
+ATOM 4142 C CA . SER B 1 217 ? 24.865 44.096 80.868 1.00 16.51 ? ? ? ? ? ? 707 SER B CA 1
+ATOM 4143 C C . SER B 1 217 ? 24.305 45.113 79.880 1.00 17.16 ? ? ? ? ? ? 707 SER B C 1
+ATOM 4144 O O . SER B 1 217 ? 24.687 46.289 79.918 1.00 17.21 ? ? ? ? ? ? 707 SER B O 1
+ATOM 4145 C CB . SER B 1 217 ? 25.924 43.239 80.195 1.00 17.56 ? ? ? ? ? ? 707 SER B CB 1
+ATOM 4146 O OG . SER B 1 217 ? 26.993 44.040 79.724 1.00 21.02 ? ? ? ? ? ? 707 SER B OG 1
+ATOM 4147 N N . MET B 1 218 ? 23.405 44.668 79.008 1.00 16.82 ? ? ? ? ? ? 708 MET B N 1
+ATOM 4148 C CA . MET B 1 218 ? 22.788 45.564 78.034 1.00 18.53 ? ? ? ? ? ? 708 MET B CA 1
+ATOM 4149 C C . MET B 1 218 ? 22.071 46.692 78.758 1.00 19.86 ? ? ? ? ? ? 708 MET B C 1
+ATOM 4150 O O . MET B 1 218 ? 22.191 47.859 78.371 1.00 20.74 ? ? ? ? ? ? 708 MET B O 1
+ATOM 4151 C CB . MET B 1 218 ? 21.798 44.816 77.146 1.00 18.75 ? ? ? ? ? ? 708 MET B CB 1
+ATOM 4152 C CG . MET B 1 218 ? 22.433 43.926 76.078 1.00 20.22 ? ? ? ? ? ? 708 MET B CG 1
+ATOM 4153 S SD . MET B 1 218 ? 21.141 42.885 75.241 1.00 22.08 ? ? ? ? ? ? 708 MET B SD 1
+ATOM 4154 C CE . MET B 1 218 ? 20.147 44.077 74.481 1.00 23.05 ? ? ? ? ? ? 708 MET B CE 1
+ATOM 4155 N N . LYS B 1 219 ? 21.321 46.356 79.805 1.00 20.98 ? ? ? ? ? ? 709 LYS B N 1
+ATOM 4156 C CA . LYS B 1 219 ? 20.605 47.359 80.601 1.00 23.83 ? ? ? ? ? ? 709 LYS B CA 1
+ATOM 4157 C C . LYS B 1 219 ? 21.615 48.358 81.215 1.00 24.74 ? ? ? ? ? ? 709 LYS B C 1
+ATOM 4158 O O . LYS B 1 219 ? 21.373 49.579 81.201 1.00 26.11 ? ? ? ? ? ? 709 LYS B O 1
+ATOM 4159 C CB . LYS B 1 219 ? 19.787 46.687 81.735 1.00 24.85 ? ? ? ? ? ? 709 LYS B CB 1
+ATOM 4160 C CG . LYS B 1 219 ? 18.375 46.248 81.389 1.00 24.93 ? ? ? ? ? ? 709 LYS B CG 1
+ATOM 4161 C CD . LYS B 1 219 ? 17.486 47.456 81.329 1.00 25.73 ? ? ? ? ? ? 709 LYS B CD 1
+ATOM 4162 C CE . LYS B 1 219 ? 16.055 47.090 81.096 1.00 26.19 ? ? ? ? ? ? 709 LYS B CE 1
+ATOM 4163 N NZ . LYS B 1 219 ? 15.243 48.254 80.665 1.00 27.07 ? ? ? ? ? ? 709 LYS B NZ 1
+ATOM 4164 N N . GLU B 1 220 ? 22.736 47.846 81.728 1.00 24.72 ? ? ? ? ? ? 710 GLU B N 1
+ATOM 4165 C CA . GLU B 1 220 ? 23.773 48.682 82.357 1.00 26.83 ? ? ? ? ? ? 710 GLU B CA 1
+ATOM 4166 C C . GLU B 1 220 ? 24.438 49.651 81.368 1.00 26.23 ? ? ? ? ? ? 710 GLU B C 1
+ATOM 4167 O O . GLU B 1 220 ? 24.886 50.728 81.773 1.00 26.73 ? ? ? ? ? ? 710 GLU B O 1
+ATOM 4168 C CB . GLU B 1 220 ? 24.881 47.828 82.994 1.00 28.59 ? ? ? ? ? ? 710 GLU B CB 1
+ATOM 4169 C CG . GLU B 1 220 ? 24.546 47.057 84.258 1.00 31.62 ? ? ? ? ? ? 710 GLU B CG 1
+ATOM 4170 C CD . GLU B 1 220 ? 25.799 46.373 84.825 1.00 34.03 ? ? ? ? ? ? 710 GLU B CD 1
+ATOM 4171 O OE1 . GLU B 1 220 ? 26.276 45.376 84.226 1.00 34.95 ? ? ? ? ? ? 710 GLU B OE1 1
+ATOM 4172 O OE2 . GLU B 1 220 ? 26.345 46.867 85.843 1.00 36.16 ? ? ? ? ? ? 710 GLU B OE2 1
+ATOM 4173 N N . ARG B 1 221 ? 24.577 49.225 80.108 1.00 24.14 ? ? ? ? ? ? 711 ARG B N 1
+ATOM 4174 C CA . ARG B 1 221 ? 25.176 50.036 79.043 1.00 22.55 ? ? ? ? ? ? 711 ARG B CA 1
+ATOM 4175 C C . ARG B 1 221 ? 24.196 50.922 78.262 1.00 21.80 ? ? ? ? ? ? 711 ARG B C 1
+ATOM 4176 O O . ARG B 1 221 ? 24.581 51.482 77.239 1.00 23.59 ? ? ? ? ? ? 711 ARG B O 1
+ATOM 4177 C CB . ARG B 1 221 ? 25.918 49.136 78.065 1.00 22.61 ? ? ? ? ? ? 711 ARG B CB 1
+ATOM 4178 C CG . ARG B 1 221 ? 26.950 48.323 78.775 1.00 23.96 ? ? ? ? ? ? 711 ARG B CG 1
+ATOM 4179 C CD . ARG B 1 221 ? 27.713 47.452 77.851 1.00 24.34 ? ? ? ? ? ? 711 ARG B CD 1
+ATOM 4180 N NE . ARG B 1 221 ? 26.933 46.313 77.378 1.00 24.68 ? ? ? ? ? ? 711 ARG B NE 1
+ATOM 4181 C CZ . ARG B 1 221 ? 26.481 46.218 76.140 1.00 23.77 ? ? ? ? ? ? 711 ARG B CZ 1
+ATOM 4182 N NH1 . ARG B 1 221 ? 26.698 47.220 75.300 1.00 22.90 ? ? ? ? ? ? 711 ARG B NH1 1
+ATOM 4183 N NH2 . ARG B 1 221 ? 25.794 45.150 75.760 1.00 23.53 ? ? ? ? ? ? 711 ARG B NH2 1
+ATOM 4184 N N . GLY B 1 222 ? 22.947 51.020 78.723 1.00 19.74 ? ? ? ? ? ? 712 GLY B N 1
+ATOM 4185 C CA . GLY B 1 222 ? 21.926 51.830 78.068 1.00 19.21 ? ? ? ? ? ? 712 GLY B CA 1
+ATOM 4186 C C . GLY B 1 222 ? 21.272 51.285 76.794 1.00 17.80 ? ? ? ? ? ? 712 GLY B C 1
+ATOM 4187 O O . GLY B 1 222 ? 20.629 52.036 76.066 1.00 19.05 ? ? ? ? ? ? 712 GLY B O 1
+ATOM 4188 N N . VAL B 1 223 ? 21.456 50.005 76.491 1.00 15.82 ? ? ? ? ? ? 713 VAL B N 1
+ATOM 4189 C CA . VAL B 1 223 ? 20.839 49.421 75.305 1.00 15.17 ? ? ? ? ? ? 713 VAL B CA 1
+ATOM 4190 C C . VAL B 1 223 ? 19.358 49.233 75.627 1.00 14.59 ? ? ? ? ? ? 713 VAL B C 1
+ATOM 4191 O O . VAL B 1 223 ? 19.023 48.677 76.670 1.00 14.63 ? ? ? ? ? ? 713 VAL B O 1
+ATOM 4192 C CB . VAL B 1 223 ? 21.474 48.081 74.950 1.00 14.56 ? ? ? ? ? ? 713 VAL B CB 1
+ATOM 4193 C CG1 . VAL B 1 223 ? 20.737 47.441 73.782 1.00 15.20 ? ? ? ? ? ? 713 VAL B CG1 1
+ATOM 4194 C CG2 . VAL B 1 223 ? 22.921 48.284 74.627 1.00 14.74 ? ? ? ? ? ? 713 VAL B CG2 1
+ATOM 4195 N N . PRO B 1 224 ? 18.452 49.700 74.747 1.00 14.03 ? ? ? ? ? ? 714 PRO B N 1
+ATOM 4196 C CA . PRO B 1 224 ? 17.018 49.563 74.999 1.00 14.49 ? ? ? ? ? ? 714 PRO B CA 1
+ATOM 4197 C C . PRO B 1 224 ? 16.390 48.170 74.854 1.00 15.74 ? ? ? ? ? ? 714 PRO B C 1
+ATOM 4198 O O . PRO B 1 224 ? 15.975 47.787 73.763 1.00 19.20 ? ? ? ? ? ? 714 PRO B O 1
+ATOM 4199 C CB . PRO B 1 224 ? 16.399 50.564 74.002 1.00 15.01 ? ? ? ? ? ? 714 PRO B CB 1
+ATOM 4200 C CG . PRO B 1 224 ? 17.340 50.505 72.858 1.00 13.42 ? ? ? ? ? ? 714 PRO B CG 1
+ATOM 4201 C CD . PRO B 1 224 ? 18.691 50.486 73.515 1.00 13.20 ? ? ? ? ? ? 714 PRO B CD 1
+ATOM 4202 N N . ILE B 1 225 ? 16.305 47.430 75.957 1.00 14.09 ? ? ? ? ? ? 715 ILE B N 1
+ATOM 4203 C CA . ILE B 1 225 ? 15.667 46.114 75.970 1.00 12.23 ? ? ? ? ? ? 715 ILE B CA 1
+ATOM 4204 C C . ILE B 1 225 ? 14.677 46.138 77.145 1.00 11.74 ? ? ? ? ? ? 715 ILE B C 1
+ATOM 4205 O O . ILE B 1 225 ? 15.018 46.584 78.249 1.00 13.13 ? ? ? ? ? ? 715 ILE B O 1
+ATOM 4206 C CB . ILE B 1 225 ? 16.690 44.954 76.058 1.00 12.79 ? ? ? ? ? ? 715 ILE B CB 1
+ATOM 4207 C CG1 . ILE B 1 225 ? 15.952 43.623 76.070 1.00 13.06 ? ? ? ? ? ? 715 ILE B CG1 1
+ATOM 4208 C CG2 . ILE B 1 225 ? 17.611 45.101 77.259 1.00 12.52 ? ? ? ? ? ? 715 ILE B CG2 1
+ATOM 4209 C CD1 . ILE B 1 225 ? 16.844 42.447 75.886 1.00 14.53 ? ? ? ? ? ? 715 ILE B CD1 1
+ATOM 4210 N N . ASP B 1 226 ? 13.439 45.729 76.888 1.00 10.20 ? ? ? ? ? ? 716 ASP B N 1
+ATOM 4211 C CA . ASP B 1 226 ? 12.355 45.759 77.892 1.00 9.90 ? ? ? ? ? ? 716 ASP B CA 1
+ATOM 4212 C C . ASP B 1 226 ? 11.990 44.430 78.527 1.00 9.81 ? ? ? ? ? ? 716 ASP B C 1
+ATOM 4213 O O . ASP B 1 226 ? 11.608 44.385 79.697 1.00 10.42 ? ? ? ? ? ? 716 ASP B O 1
+ATOM 4214 C CB . ASP B 1 226 ? 11.058 46.338 77.283 1.00 9.93 ? ? ? ? ? ? 716 ASP B CB 1
+ATOM 4215 C CG . ASP B 1 226 ? 11.262 47.717 76.674 1.00 11.02 ? ? ? ? ? ? 716 ASP B CG 1
+ATOM 4216 O OD1 . ASP B 1 226 ? 11.666 48.645 77.411 1.00 11.62 ? ? ? ? ? ? 716 ASP B OD1 1
+ATOM 4217 O OD2 . ASP B 1 226 ? 11.041 47.866 75.463 1.00 10.52 ? ? ? ? ? ? 716 ASP B OD2 1
+ATOM 4218 N N . GLY B 1 227 ? 12.097 43.352 77.767 1.00 8.75 ? ? ? ? ? ? 717 GLY B N 1
+ATOM 4219 C CA . GLY B 1 227 ? 11.681 42.078 78.307 1.00 8.61 ? ? ? ? ? ? 717 GLY B CA 1
+ATOM 4220 C C . GLY B 1 227 ? 12.405 40.880 77.766 1.00 9.65 ? ? ? ? ? ? 717 GLY B C 1
+ATOM 4221 O O . GLY B 1 227 ? 13.219 40.971 76.817 1.00 8.64 ? ? ? ? ? ? 717 GLY B O 1
+ATOM 4222 N N . VAL B 1 228 ? 12.169 39.747 78.424 1.00 7.81 ? ? ? ? ? ? 718 VAL B N 1
+ATOM 4223 C CA . VAL B 1 228 ? 12.753 38.502 78.004 1.00 8.03 ? ? ? ? ? ? 718 VAL B CA 1
+ATOM 4224 C C . VAL B 1 228 ? 11.608 37.526 77.733 1.00 7.73 ? ? ? ? ? ? 718 VAL B C 1
+ATOM 4225 O O . VAL B 1 228 ? 10.618 37.491 78.469 1.00 8.36 ? ? ? ? ? ? 718 VAL B O 1
+ATOM 4226 C CB . VAL B 1 228 ? 13.781 37.948 79.060 1.00 9.61 ? ? ? ? ? ? 718 VAL B CB 1
+ATOM 4227 C CG1 . VAL B 1 228 ? 13.081 37.695 80.435 1.00 10.03 ? ? ? ? ? ? 718 VAL B CG1 1
+ATOM 4228 C CG2 . VAL B 1 228 ? 14.463 36.673 78.526 1.00 9.16 ? ? ? ? ? ? 718 VAL B CG2 1
+ATOM 4229 N N . GLY B 1 229 ? 11.709 36.824 76.615 1.00 7.49 ? ? ? ? ? ? 719 GLY B N 1
+ATOM 4230 C CA . GLY B 1 229 ? 10.699 35.862 76.238 1.00 7.79 ? ? ? ? ? ? 719 GLY B CA 1
+ATOM 4231 C C . GLY B 1 229 ? 11.161 34.430 76.516 1.00 8.67 ? ? ? ? ? ? 719 GLY B C 1
+ATOM 4232 O O . GLY B 1 229 ? 12.174 33.962 75.969 1.00 8.57 ? ? ? ? ? ? 719 GLY B O 1
+ATOM 4233 N N . PHE B 1 230 ? 10.403 33.750 77.400 1.00 8.62 ? ? ? ? ? ? 720 PHE B N 1
+ATOM 4234 C CA . PHE B 1 230 ? 10.666 32.349 77.769 1.00 8.70 ? ? ? ? ? ? 720 PHE B CA 1
+ATOM 4235 C C . PHE B 1 230 ? 9.768 31.521 76.839 1.00 8.33 ? ? ? ? ? ? 720 PHE B C 1
+ATOM 4236 O O . PHE B 1 230 ? 8.536 31.540 76.984 1.00 8.72 ? ? ? ? ? ? 720 PHE B O 1
+ATOM 4237 C CB . PHE B 1 230 ? 10.212 32.050 79.215 1.00 9.47 ? ? ? ? ? ? 720 PHE B CB 1
+ATOM 4238 C CG . PHE B 1 230 ? 11.107 32.617 80.327 1.00 10.07 ? ? ? ? ? ? 720 PHE B CG 1
+ATOM 4239 C CD1 . PHE B 1 230 ? 12.230 33.403 80.069 1.00 9.90 ? ? ? ? ? ? 720 PHE B CD1 1
+ATOM 4240 C CD2 . PHE B 1 230 ? 10.796 32.337 81.654 1.00 10.52 ? ? ? ? ? ? 720 PHE B CD2 1
+ATOM 4241 C CE1 . PHE B 1 230 ? 13.007 33.886 81.091 1.00 10.06 ? ? ? ? ? ? 720 PHE B CE1 1
+ATOM 4242 C CE2 . PHE B 1 230 ? 11.578 32.821 82.695 1.00 10.20 ? ? ? ? ? ? 720 PHE B CE2 1
+ATOM 4243 C CZ . PHE B 1 230 ? 12.683 33.598 82.411 1.00 10.50 ? ? ? ? ? ? 720 PHE B CZ 1
+ATOM 4244 N N . GLN B 1 231 ? 10.365 30.797 75.898 1.00 8.47 ? ? ? ? ? ? 721 GLN B N 1
+ATOM 4245 C CA . GLN B 1 231 ? 9.579 29.977 74.967 1.00 8.45 ? ? ? ? ? ? 721 GLN B CA 1
+ATOM 4246 C C . GLN B 1 231 ? 8.713 28.912 75.672 1.00 9.00 ? ? ? ? ? ? 721 GLN B C 1
+ATOM 4247 O O . GLN B 1 231 ? 7.574 28.717 75.302 1.00 10.44 ? ? ? ? ? ? 721 GLN B O 1
+ATOM 4248 C CB . GLN B 1 231 ? 10.465 29.337 73.904 1.00 8.10 ? ? ? ? ? ? 721 GLN B CB 1
+ATOM 4249 C CG . GLN B 1 231 ? 10.888 30.337 72.778 1.00 9.08 ? ? ? ? ? ? 721 GLN B CG 1
+ATOM 4250 C CD . GLN B 1 231 ? 11.731 29.676 71.711 1.00 10.02 ? ? ? ? ? ? 721 GLN B CD 1
+ATOM 4251 O OE1 . GLN B 1 231 ? 11.681 28.459 71.519 1.00 10.19 ? ? ? ? ? ? 721 GLN B OE1 1
+ATOM 4252 N NE2 . GLN B 1 231 ? 12.516 30.472 71.001 1.00 10.74 ? ? ? ? ? ? 721 GLN B NE2 1
+ATOM 4253 N N . CYS B 1 232 ? 9.242 28.268 76.708 1.00 9.73 ? ? ? ? ? ? 722 CYS B N 1
+ATOM 4254 C CA . CYS B 1 232 ? 8.506 27.254 77.465 1.00 10.36 ? ? ? ? ? ? 722 CYS B CA 1
+ATOM 4255 C C . CYS B 1 232 ? 8.119 25.989 76.688 1.00 9.67 ? ? ? ? ? ? 722 CYS B C 1
+ATOM 4256 O O . CYS B 1 232 ? 6.976 25.508 76.777 1.00 10.50 ? ? ? ? ? ? 722 CYS B O 1
+ATOM 4257 C CB . CYS B 1 232 ? 7.289 27.856 78.187 1.00 10.38 ? ? ? ? ? ? 722 CYS B CB 1
+ATOM 4258 S SG . CYS B 1 232 ? 7.655 29.113 79.456 1.00 11.84 ? ? ? ? ? ? 722 CYS B SG 1
+ATOM 4259 N N . HIS B 1 233 ? 9.059 25.465 75.900 1.00 10.10 ? ? ? ? ? ? 723 HIS B N 1
+ATOM 4260 C CA . HIS B 1 233 ? 8.835 24.201 75.172 1.00 11.99 ? ? ? ? ? ? 723 HIS B CA 1
+ATOM 4261 C C . HIS B 1 233 ? 9.298 23.099 76.157 1.00 12.75 ? ? ? ? ? ? 723 HIS B C 1
+ATOM 4262 O O . HIS B 1 233 ? 10.476 22.692 76.187 1.00 12.33 ? ? ? ? ? ? 723 HIS B O 1
+ATOM 4263 C CB . HIS B 1 233 ? 9.609 24.169 73.847 1.00 11.83 ? ? ? ? ? ? 723 HIS B CB 1
+ATOM 4264 C CG . HIS B 1 233 ? 9.084 25.147 72.838 1.00 11.48 ? ? ? ? ? ? 723 HIS B CG 1
+ATOM 4265 N ND1 . HIS B 1 233 ? 7.805 25.076 72.312 1.00 11.45 ? ? ? ? ? ? 723 HIS B ND1 1
+ATOM 4266 C CD2 . HIS B 1 233 ? 9.664 26.229 72.266 1.00 10.97 ? ? ? ? ? ? 723 HIS B CD2 1
+ATOM 4267 C CE1 . HIS B 1 233 ? 7.622 26.070 71.462 1.00 10.99 ? ? ? ? ? ? 723 HIS B CE1 1
+ATOM 4268 N NE2 . HIS B 1 233 ? 8.736 26.781 71.416 1.00 10.15 ? ? ? ? ? ? 723 HIS B NE2 1
+ATOM 4269 N N . PHE B 1 234 ? 8.351 22.728 77.027 1.00 12.96 ? ? ? ? ? ? 724 PHE B N 1
+ATOM 4270 C CA . PHE B 1 234 ? 8.580 21.774 78.120 1.00 13.75 ? ? ? ? ? ? 724 PHE B CA 1
+ATOM 4271 C C . PHE B 1 234 ? 8.136 20.327 77.857 1.00 15.38 ? ? ? ? ? ? 724 PHE B C 1
+ATOM 4272 O O . PHE B 1 234 ? 7.333 20.054 76.950 1.00 15.22 ? ? ? ? ? ? 724 PHE B O 1
+ATOM 4273 C CB . PHE B 1 234 ? 7.874 22.282 79.390 1.00 12.93 ? ? ? ? ? ? 724 PHE B CB 1
+ATOM 4274 C CG . PHE B 1 234 ? 8.346 23.645 79.875 1.00 12.99 ? ? ? ? ? ? 724 PHE B CG 1
+ATOM 4275 C CD1 . PHE B 1 234 ? 9.706 23.920 80.042 1.00 13.45 ? ? ? ? ? ? 724 PHE B CD1 1
+ATOM 4276 C CD2 . PHE B 1 234 ? 7.421 24.621 80.254 1.00 12.67 ? ? ? ? ? ? 724 PHE B CD2 1
+ATOM 4277 C CE1 . PHE B 1 234 ? 10.121 25.139 80.591 1.00 12.89 ? ? ? ? ? ? 724 PHE B CE1 1
+ATOM 4278 C CE2 . PHE B 1 234 ? 7.839 25.829 80.799 1.00 12.22 ? ? ? ? ? ? 724 PHE B CE2 1
+ATOM 4279 C CZ . PHE B 1 234 ? 9.193 26.077 80.968 1.00 12.61 ? ? ? ? ? ? 724 PHE B CZ 1
+ATOM 4280 N N . ILE B 1 235 ? 8.699 19.405 78.657 1.00 17.09 ? ? ? ? ? ? 725 ILE B N 1
+ATOM 4281 C CA . ILE B 1 235 ? 8.365 17.978 78.601 1.00 17.43 ? ? ? ? ? ? 725 ILE B CA 1
+ATOM 4282 C C . ILE B 1 235 ? 7.435 17.702 79.796 1.00 16.95 ? ? ? ? ? ? 725 ILE B C 1
+ATOM 4283 O O . ILE B 1 235 ? 7.683 18.179 80.913 1.00 17.04 ? ? ? ? ? ? 725 ILE B O 1
+ATOM 4284 C CB . ILE B 1 235 ? 9.626 17.069 78.716 1.00 18.98 ? ? ? ? ? ? 725 ILE B CB 1
+ATOM 4285 C CG1 . ILE B 1 235 ? 10.620 17.371 77.581 1.00 20.07 ? ? ? ? ? ? 725 ILE B CG1 1
+ATOM 4286 C CG2 . ILE B 1 235 ? 9.195 15.581 78.659 1.00 19.55 ? ? ? ? ? ? 725 ILE B CG2 1
+ATOM 4287 C CD1 . ILE B 1 235 ? 11.921 16.514 77.605 1.00 21.31 ? ? ? ? ? ? 725 ILE B CD1 1
+ATOM 4288 N N . ASN B 1 236 ? 6.380 16.932 79.550 1.00 15.42 ? ? ? ? ? ? 726 ASN B N 1
+ATOM 4289 C CA . ASN B 1 236 ? 5.386 16.599 80.565 1.00 16.02 ? ? ? ? ? ? 726 ASN B CA 1
+ATOM 4290 C C . ASN B 1 236 ? 6.039 16.008 81.821 1.00 16.11 ? ? ? ? ? ? 726 ASN B C 1
+ATOM 4291 O O . ASN B 1 236 ? 7.022 15.290 81.729 1.00 16.34 ? ? ? ? ? ? 726 ASN B O 1
+ATOM 4292 C CB . ASN B 1 236 ? 4.418 15.581 79.962 1.00 17.03 ? ? ? ? ? ? 726 ASN B CB 1
+ATOM 4293 C CG . ASN B 1 236 ? 3.137 15.472 80.724 1.00 17.60 ? ? ? ? ? ? 726 ASN B CG 1
+ATOM 4294 O OD1 . ASN B 1 236 ? 2.565 16.468 81.158 1.00 18.65 ? ? ? ? ? ? 726 ASN B OD1 1
+ATOM 4295 N ND2 . ASN B 1 236 ? 2.644 14.255 80.852 1.00 18.82 ? ? ? ? ? ? 726 ASN B ND2 1
+ATOM 4296 N N . GLY B 1 237 ? 5.498 16.321 82.989 1.00 16.88 ? ? ? ? ? ? 727 GLY B N 1
+ATOM 4297 C CA . GLY B 1 237 ? 6.055 15.771 84.219 1.00 18.66 ? ? ? ? ? ? 727 GLY B CA 1
+ATOM 4298 C C . GLY B 1 237 ? 7.124 16.626 84.875 1.00 19.96 ? ? ? ? ? ? 727 GLY B C 1
+ATOM 4299 O O . GLY B 1 237 ? 8.087 16.116 85.462 1.00 19.43 ? ? ? ? ? ? 727 GLY B O 1
+ATOM 4300 N N . MET B 1 238 ? 6.951 17.939 84.769 1.00 20.59 ? ? ? ? ? ? 728 MET B N 1
+ATOM 4301 C CA . MET B 1 238 ? 7.889 18.902 85.339 1.00 21.97 ? ? ? ? ? ? 728 MET B CA 1
+ATOM 4302 C C . MET B 1 238 ? 7.908 18.768 86.859 1.00 21.72 ? ? ? ? ? ? 728 MET B C 1
+ATOM 4303 O O . MET B 1 238 ? 6.850 18.773 87.503 1.00 20.51 ? ? ? ? ? ? 728 MET B O 1
+ATOM 4304 C CB . MET B 1 238 ? 7.475 20.336 84.966 1.00 23.48 ? ? ? ? ? ? 728 MET B CB 1
+ATOM 4305 C CG . MET B 1 238 ? 7.326 20.587 83.466 1.00 25.37 ? ? ? ? ? ? 728 MET B CG 1
+ATOM 4306 S SD . MET B 1 238 ? 7.157 22.331 83.114 1.00 27.80 ? ? ? ? ? ? 728 MET B SD 1
+ATOM 4307 C CE . MET B 1 238 ? 5.541 22.633 83.391 1.00 26.98 ? ? ? ? ? ? 728 MET B CE 1
+ATOM 4308 N N . SER B 1 239 ? 9.112 18.706 87.417 1.00 22.11 ? ? ? ? ? ? 729 SER B N 1
+ATOM 4309 C CA . SER B 1 239 ? 9.307 18.570 88.858 1.00 22.52 ? ? ? ? ? ? 729 SER B CA 1
+ATOM 4310 C C . SER B 1 239 ? 9.060 19.887 89.612 1.00 23.65 ? ? ? ? ? ? 729 SER B C 1
+ATOM 4311 O O . SER B 1 239 ? 9.118 20.970 89.019 1.00 23.37 ? ? ? ? ? ? 729 SER B O 1
+ATOM 4312 C CB . SER B 1 239 ? 10.728 18.083 89.123 1.00 21.40 ? ? ? ? ? ? 729 SER B CB 1
+ATOM 4313 O OG . SER B 1 239 ? 11.654 19.140 88.973 1.00 22.89 ? ? ? ? ? ? 729 SER B OG 1
+ATOM 4314 N N . PRO B 1 240 ? 8.773 19.816 90.937 1.00 24.11 ? ? ? ? ? ? 730 PRO B N 1
+ATOM 4315 C CA . PRO B 1 240 ? 8.522 21.006 91.771 1.00 23.92 ? ? ? ? ? ? 730 PRO B CA 1
+ATOM 4316 C C . PRO B 1 240 ? 9.768 21.900 91.858 1.00 23.61 ? ? ? ? ? ? 730 PRO B C 1
+ATOM 4317 O O . PRO B 1 240 ? 9.670 23.116 92.015 1.00 23.74 ? ? ? ? ? ? 730 PRO B O 1
+ATOM 4318 C CB . PRO B 1 240 ? 8.206 20.399 93.147 1.00 24.83 ? ? ? ? ? ? 730 PRO B CB 1
+ATOM 4319 C CG . PRO B 1 240 ? 7.609 19.072 92.797 1.00 25.23 ? ? ? ? ? ? 730 PRO B CG 1
+ATOM 4320 C CD . PRO B 1 240 ? 8.511 18.579 91.708 1.00 24.67 ? ? ? ? ? ? 730 PRO B CD 1
+ATOM 4321 N N . GLU B 1 241 ? 10.931 21.266 91.802 1.00 23.67 ? ? ? ? ? ? 731 GLU B N 1
+ATOM 4322 C CA . GLU B 1 241 ? 12.207 21.960 91.860 1.00 24.84 ? ? ? ? ? ? 731 GLU B CA 1
+ATOM 4323 C C . GLU B 1 241 ? 12.417 22.715 90.556 1.00 22.71 ? ? ? ? ? ? 731 GLU B C 1
+ATOM 4324 O O . GLU B 1 241 ? 12.968 23.807 90.558 1.00 21.75 ? ? ? ? ? ? 731 GLU B O 1
+ATOM 4325 C CB . GLU B 1 241 ? 13.347 20.963 92.075 1.00 27.68 ? ? ? ? ? ? 731 GLU B CB 1
+ATOM 4326 C CG . GLU B 1 241 ? 13.350 20.313 93.474 1.00 32.72 ? ? ? ? ? ? 731 GLU B CG 1
+ATOM 4327 C CD . GLU B 1 241 ? 12.149 19.358 93.752 1.00 35.58 ? ? ? ? ? ? 731 GLU B CD 1
+ATOM 4328 O OE1 . GLU B 1 241 ? 11.834 18.478 92.889 1.00 35.97 ? ? ? ? ? ? 731 GLU B OE1 1
+ATOM 4329 O OE2 . GLU B 1 241 ? 11.534 19.491 94.858 1.00 38.04 ? ? ? ? ? ? 731 GLU B OE2 1
+ATOM 4330 N N . TYR B 1 242 ? 11.989 22.126 89.442 1.00 20.86 ? ? ? ? ? ? 732 TYR B N 1
+ATOM 4331 C CA . TYR B 1 242 ? 12.136 22.793 88.149 1.00 20.30 ? ? ? ? ? ? 732 TYR B CA 1
+ATOM 4332 C C . TYR B 1 242 ? 11.243 24.030 88.155 1.00 17.89 ? ? ? ? ? ? 732 TYR B C 1
+ATOM 4333 O O . TYR B 1 242 ? 11.718 25.125 87.896 1.00 16.35 ? ? ? ? ? ? 732 TYR B O 1
+ATOM 4334 C CB . TYR B 1 242 ? 11.768 21.861 86.995 1.00 22.05 ? ? ? ? ? ? 732 TYR B CB 1
+ATOM 4335 C CG . TYR B 1 242 ? 12.081 22.424 85.621 1.00 24.55 ? ? ? ? ? ? 732 TYR B CG 1
+ATOM 4336 C CD1 . TYR B 1 242 ? 13.382 22.790 85.264 1.00 25.89 ? ? ? ? ? ? 732 TYR B CD1 1
+ATOM 4337 C CD2 . TYR B 1 242 ? 11.086 22.531 84.651 1.00 26.21 ? ? ? ? ? ? 732 TYR B CD2 1
+ATOM 4338 C CE1 . TYR B 1 242 ? 13.682 23.241 83.956 1.00 26.45 ? ? ? ? ? ? 732 TYR B CE1 1
+ATOM 4339 C CE2 . TYR B 1 242 ? 11.377 22.974 83.350 1.00 26.88 ? ? ? ? ? ? 732 TYR B CE2 1
+ATOM 4340 C CZ . TYR B 1 242 ? 12.674 23.318 83.010 1.00 26.78 ? ? ? ? ? ? 732 TYR B CZ 1
+ATOM 4341 O OH . TYR B 1 242 ? 12.953 23.661 81.702 1.00 28.02 ? ? ? ? ? ? 732 TYR B OH 1
+ATOM 4342 N N . LEU B 1 243 ? 9.973 23.861 88.519 1.00 16.12 ? ? ? ? ? ? 733 LEU B N 1
+ATOM 4343 C CA . LEU B 1 243 ? 9.027 24.973 88.585 1.00 16.44 ? ? ? ? ? ? 733 LEU B CA 1
+ATOM 4344 C C . LEU B 1 243 ? 9.496 26.062 89.548 1.00 16.28 ? ? ? ? ? ? 733 LEU B C 1
+ATOM 4345 O O . LEU B 1 243 ? 9.299 27.260 89.303 1.00 16.59 ? ? ? ? ? ? 733 LEU B O 1
+ATOM 4346 C CB . LEU B 1 243 ? 7.626 24.488 88.974 1.00 17.11 ? ? ? ? ? ? 733 LEU B CB 1
+ATOM 4347 C CG . LEU B 1 243 ? 6.921 23.629 87.922 1.00 19.01 ? ? ? ? ? ? 733 LEU B CG 1
+ATOM 4348 C CD1 . LEU B 1 243 ? 5.753 22.864 88.575 1.00 19.91 ? ? ? ? ? ? 733 LEU B CD1 1
+ATOM 4349 C CD2 . LEU B 1 243 ? 6.416 24.510 86.779 1.00 19.38 ? ? ? ? ? ? 733 LEU B CD2 1
+ATOM 4350 N N . ALA B 1 244 ? 10.120 25.654 90.649 1.00 16.27 ? ? ? ? ? ? 734 ALA B N 1
+ATOM 4351 C CA . ALA B 1 244 ? 10.634 26.618 91.619 1.00 15.29 ? ? ? ? ? ? 734 ALA B CA 1
+ATOM 4352 C C . ALA B 1 244 ? 11.773 27.467 91.024 1.00 13.95 ? ? ? ? ? ? 734 ALA B C 1
+ATOM 4353 O O . ALA B 1 244 ? 11.872 28.661 91.313 1.00 14.58 ? ? ? ? ? ? 734 ALA B O 1
+ATOM 4354 C CB . ALA B 1 244 ? 11.142 25.891 92.851 1.00 15.36 ? ? ? ? ? ? 734 ALA B CB 1
+ATOM 4355 N N . SER B 1 245 ? 12.660 26.833 90.259 1.00 14.34 ? ? ? ? ? ? 735 SER B N 1
+ATOM 4356 C CA . SER B 1 245 ? 13.778 27.537 89.636 1.00 13.64 ? ? ? ? ? ? 735 SER B CA 1
+ATOM 4357 C C . SER B 1 245 ? 13.249 28.538 88.600 1.00 13.09 ? ? ? ? ? ? 735 SER B C 1
+ATOM 4358 O O . SER B 1 245 ? 13.823 29.605 88.423 1.00 13.53 ? ? ? ? ? ? 735 SER B O 1
+ATOM 4359 C CB . SER B 1 245 ? 14.760 26.576 88.999 1.00 14.48 ? ? ? ? ? ? 735 SER B CB 1
+ATOM 4360 O OG . SER B 1 245 ? 14.227 26.021 87.819 1.00 18.32 ? ? ? ? ? ? 735 SER B OG 1
+ATOM 4361 N N . ILE B 1 246 ? 12.149 28.206 87.938 1.00 11.82 ? ? ? ? ? ? 736 ILE B N 1
+ATOM 4362 C CA . ILE B 1 246 ? 11.559 29.146 86.983 1.00 12.18 ? ? ? ? ? ? 736 ILE B CA 1
+ATOM 4363 C C . ILE B 1 246 ? 11.088 30.397 87.728 1.00 12.46 ? ? ? ? ? ? 736 ILE B C 1
+ATOM 4364 O O . ILE B 1 246 ? 11.385 31.530 87.323 1.00 12.79 ? ? ? ? ? ? 736 ILE B O 1
+ATOM 4365 C CB . ILE B 1 246 ? 10.368 28.530 86.215 1.00 11.88 ? ? ? ? ? ? 736 ILE B CB 1
+ATOM 4366 C CG1 . ILE B 1 246 ? 10.858 27.366 85.341 1.00 12.27 ? ? ? ? ? ? 736 ILE B CG1 1
+ATOM 4367 C CG2 . ILE B 1 246 ? 9.678 29.612 85.373 1.00 12.60 ? ? ? ? ? ? 736 ILE B CG2 1
+ATOM 4368 C CD1 . ILE B 1 246 ? 9.759 26.639 84.562 1.00 11.49 ? ? ? ? ? ? 736 ILE B CD1 1
+ATOM 4369 N N . ASP B 1 247 ? 10.357 30.208 88.831 1.00 12.55 ? ? ? ? ? ? 737 ASP B N 1
+ATOM 4370 C CA . ASP B 1 247 ? 9.858 31.334 89.601 1.00 12.73 ? ? ? ? ? ? 737 ASP B CA 1
+ATOM 4371 C C . ASP B 1 247 ? 11.013 32.197 90.123 1.00 12.95 ? ? ? ? ? ? 737 ASP B C 1
+ATOM 4372 O O . ASP B 1 247 ? 10.939 33.420 90.105 1.00 13.25 ? ? ? ? ? ? 737 ASP B O 1
+ATOM 4373 C CB . ASP B 1 247 ? 8.990 30.831 90.758 1.00 13.88 ? ? ? ? ? ? 737 ASP B CB 1
+ATOM 4374 C CG . ASP B 1 247 ? 8.468 31.945 91.599 1.00 14.78 ? ? ? ? ? ? 737 ASP B CG 1
+ATOM 4375 O OD1 . ASP B 1 247 ? 7.429 32.537 91.254 1.00 15.90 ? ? ? ? ? ? 737 ASP B OD1 1
+ATOM 4376 O OD2 . ASP B 1 247 ? 9.113 32.257 92.615 1.00 17.61 ? ? ? ? ? ? 737 ASP B OD2 1
+ATOM 4377 N N . GLN B 1 248 ? 12.088 31.567 90.564 1.00 13.12 ? ? ? ? ? ? 738 GLN B N 1
+ATOM 4378 C CA . GLN B 1 248 ? 13.221 32.326 91.066 1.00 16.23 ? ? ? ? ? ? 738 GLN B CA 1
+ATOM 4379 C C . GLN B 1 248 ? 13.880 33.104 89.930 1.00 13.76 ? ? ? ? ? ? 738 GLN B C 1
+ATOM 4380 O O . GLN B 1 248 ? 14.309 34.235 90.123 1.00 13.44 ? ? ? ? ? ? 738 GLN B O 1
+ATOM 4381 C CB . GLN B 1 248 ? 14.233 31.391 91.730 1.00 21.24 ? ? ? ? ? ? 738 GLN B CB 1
+ATOM 4382 C CG . GLN B 1 248 ? 14.024 31.223 93.239 1.00 29.40 ? ? ? ? ? ? 738 GLN B CG 1
+ATOM 4383 C CD . GLN B 1 248 ? 12.521 31.196 93.677 1.00 34.29 ? ? ? ? ? ? 738 GLN B CD 1
+ATOM 4384 O OE1 . GLN B 1 248 ? 11.929 32.257 94.025 1.00 37.48 ? ? ? ? ? ? 738 GLN B OE1 1
+ATOM 4385 N NE2 . GLN B 1 248 ? 11.920 29.983 93.711 1.00 35.58 ? ? ? ? ? ? 738 GLN B NE2 1
+ATOM 4386 N N . ASN B 1 249 ? 13.936 32.495 88.749 1.00 12.61 ? ? ? ? ? ? 739 ASN B N 1
+ATOM 4387 C CA . ASN B 1 249 ? 14.527 33.155 87.578 1.00 12.62 ? ? ? ? ? ? 739 ASN B CA 1
+ATOM 4388 C C . ASN B 1 249 ? 13.695 34.407 87.228 1.00 12.16 ? ? ? ? ? ? 739 ASN B C 1
+ATOM 4389 O O . ASN B 1 249 ? 14.252 35.490 87.001 1.00 12.27 ? ? ? ? ? ? 739 ASN B O 1
+ATOM 4390 C CB . ASN B 1 249 ? 14.602 32.181 86.392 1.00 12.27 ? ? ? ? ? ? 739 ASN B CB 1
+ATOM 4391 C CG . ASN B 1 249 ? 15.510 32.690 85.271 1.00 12.20 ? ? ? ? ? ? 739 ASN B CG 1
+ATOM 4392 O OD1 . ASN B 1 249 ? 16.447 33.444 85.515 1.00 13.21 ? ? ? ? ? ? 739 ASN B OD1 1
+ATOM 4393 N ND2 . ASN B 1 249 ? 15.237 32.270 84.048 1.00 11.53 ? ? ? ? ? ? 739 ASN B ND2 1
+ATOM 4394 N N . ILE B 1 250 ? 12.366 34.295 87.251 1.00 10.28 ? ? ? ? ? ? 740 ILE B N 1
+ATOM 4395 C CA . ILE B 1 250 ? 11.516 35.455 86.966 1.00 11.01 ? ? ? ? ? ? 740 ILE B CA 1
+ATOM 4396 C C . ILE B 1 250 ? 11.789 36.593 87.959 1.00 11.58 ? ? ? ? ? ? 740 ILE B C 1
+ATOM 4397 O O . ILE B 1 250 ? 11.835 37.764 87.565 1.00 11.38 ? ? ? ? ? ? 740 ILE B O 1
+ATOM 4398 C CB . ILE B 1 250 ? 10.002 35.074 86.977 1.00 10.74 ? ? ? ? ? ? 740 ILE B CB 1
+ATOM 4399 C CG1 . ILE B 1 250 ? 9.718 34.091 85.837 1.00 11.67 ? ? ? ? ? ? 740 ILE B CG1 1
+ATOM 4400 C CG2 . ILE B 1 250 ? 9.086 36.301 86.885 1.00 10.84 ? ? ? ? ? ? 740 ILE B CG2 1
+ATOM 4401 C CD1 . ILE B 1 250 ? 8.283 33.560 85.831 1.00 12.09 ? ? ? ? ? ? 740 ILE B CD1 1
+ATOM 4402 N N . LYS B 1 251 ? 12.022 36.242 89.234 1.00 11.07 ? ? ? ? ? ? 741 LYS B N 1
+ATOM 4403 C CA . LYS B 1 251 ? 12.303 37.245 90.266 1.00 12.06 ? ? ? ? ? ? 741 LYS B CA 1
+ATOM 4404 C C . LYS B 1 251 ? 13.625 37.982 90.073 1.00 10.68 ? ? ? ? ? ? 741 LYS B C 1
+ATOM 4405 O O . LYS B 1 251 ? 13.700 39.169 90.314 1.00 11.90 ? ? ? ? ? ? 741 LYS B O 1
+ATOM 4406 C CB . LYS B 1 251 ? 12.199 36.615 91.658 1.00 12.80 ? ? ? ? ? ? 741 LYS B CB 1
+ATOM 4407 C CG . LYS B 1 251 ? 10.772 36.384 92.038 1.00 13.98 ? ? ? ? ? ? 741 LYS B CG 1
+ATOM 4408 C CD . LYS B 1 251 ? 10.651 35.683 93.363 1.00 15.71 ? ? ? ? ? ? 741 LYS B CD 1
+ATOM 4409 C CE . LYS B 1 251 ? 9.178 35.737 93.849 1.00 16.67 ? ? ? ? ? ? 741 LYS B CE 1
+ATOM 4410 N NZ . LYS B 1 251 ? 8.178 34.989 93.003 1.00 16.44 ? ? ? ? ? ? 741 LYS B NZ 1
+ATOM 4411 N N . ARG B 1 252 ? 14.659 37.301 89.597 1.00 11.44 ? ? ? ? ? ? 742 ARG B N 1
+ATOM 4412 C CA . ARG B 1 252 ? 15.914 38.011 89.370 1.00 12.02 ? ? ? ? ? ? 742 ARG B CA 1
+ATOM 4413 C C . ARG B 1 252 ? 15.772 38.991 88.193 1.00 11.76 ? ? ? ? ? ? 742 ARG B C 1
+ATOM 4414 O O . ARG B 1 252 ? 16.357 40.051 88.223 1.00 11.82 ? ? ? ? ? ? 742 ARG B O 1
+ATOM 4415 C CB . ARG B 1 252 ? 17.135 37.095 89.287 1.00 12.71 ? ? ? ? ? ? 742 ARG B CB 1
+ATOM 4416 C CG . ARG B 1 252 ? 17.246 36.196 88.085 1.00 13.57 ? ? ? ? ? ? 742 ARG B CG 1
+ATOM 4417 C CD . ARG B 1 252 ? 18.590 35.459 88.077 1.00 13.12 ? ? ? ? ? ? 742 ARG B CD 1
+ATOM 4418 N NE . ARG B 1 252 ? 18.631 34.540 86.952 1.00 12.95 ? ? ? ? ? ? 742 ARG B NE 1
+ATOM 4419 C CZ . ARG B 1 252 ? 19.688 33.843 86.566 1.00 13.35 ? ? ? ? ? ? 742 ARG B CZ 1
+ATOM 4420 N NH1 . ARG B 1 252 ? 20.827 33.923 87.232 1.00 15.24 ? ? ? ? ? ? 742 ARG B NH1 1
+ATOM 4421 N NH2 . ARG B 1 252 ? 19.607 33.040 85.517 1.00 13.30 ? ? ? ? ? ? 742 ARG B NH2 1
+ATOM 4422 N N . TYR B 1 253 ? 14.951 38.667 87.190 1.00 11.44 ? ? ? ? ? ? 743 TYR B N 1
+ATOM 4423 C CA . TYR B 1 253 ? 14.682 39.611 86.091 1.00 11.20 ? ? ? ? ? ? 743 TYR B CA 1
+ATOM 4424 C C . TYR B 1 253 ? 13.912 40.812 86.631 1.00 11.07 ? ? ? ? ? ? 743 TYR B C 1
+ATOM 4425 O O . TYR B 1 253 ? 14.167 41.942 86.235 1.00 10.84 ? ? ? ? ? ? 743 TYR B O 1
+ATOM 4426 C CB . TYR B 1 253 ? 13.891 38.953 84.951 1.00 9.15 ? ? ? ? ? ? 743 TYR B CB 1
+ATOM 4427 C CG . TYR B 1 253 ? 14.791 38.242 83.960 1.00 9.10 ? ? ? ? ? ? 743 TYR B CG 1
+ATOM 4428 C CD1 . TYR B 1 253 ? 15.606 38.969 83.074 1.00 9.20 ? ? ? ? ? ? 743 TYR B CD1 1
+ATOM 4429 C CD2 . TYR B 1 253 ? 14.866 36.843 83.923 1.00 9.34 ? ? ? ? ? ? 743 TYR B CD2 1
+ATOM 4430 C CE1 . TYR B 1 253 ? 16.468 38.320 82.197 1.00 9.22 ? ? ? ? ? ? 743 TYR B CE1 1
+ATOM 4431 C CE2 . TYR B 1 253 ? 15.719 36.180 83.041 1.00 8.94 ? ? ? ? ? ? 743 TYR B CE2 1
+ATOM 4432 C CZ . TYR B 1 253 ? 16.519 36.926 82.181 1.00 9.19 ? ? ? ? ? ? 743 TYR B CZ 1
+ATOM 4433 O OH . TYR B 1 253 ? 17.346 36.270 81.311 1.00 10.26 ? ? ? ? ? ? 743 TYR B OH 1
+ATOM 4434 N N . ALA B 1 254 ? 12.988 40.583 87.573 1.00 11.82 ? ? ? ? ? ? 744 ALA B N 1
+ATOM 4435 C CA . ALA B 1 254 ? 12.223 41.700 88.150 1.00 12.25 ? ? ? ? ? ? 744 ALA B CA 1
+ATOM 4436 C C . ALA B 1 254 ? 13.164 42.662 88.844 1.00 12.70 ? ? ? ? ? ? 744 ALA B C 1
+ATOM 4437 O O . ALA B 1 254 ? 12.972 43.870 88.760 1.00 13.31 ? ? ? ? ? ? 744 ALA B O 1
+ATOM 4438 C CB . ALA B 1 254 ? 11.134 41.214 89.127 1.00 11.58 ? ? ? ? ? ? 744 ALA B CB 1
+ATOM 4439 N N . GLU B 1 255 ? 14.222 42.136 89.462 1.00 13.93 ? ? ? ? ? ? 745 GLU B N 1
+ATOM 4440 C CA . GLU B 1 255 ? 15.184 42.992 90.172 1.00 17.54 ? ? ? ? ? ? 745 GLU B CA 1
+ATOM 4441 C C . GLU B 1 255 ? 15.967 43.942 89.249 1.00 17.48 ? ? ? ? ? ? 745 GLU B C 1
+ATOM 4442 O O . GLU B 1 255 ? 16.493 44.971 89.715 1.00 17.16 ? ? ? ? ? ? 745 GLU B O 1
+ATOM 4443 C CB . GLU B 1 255 ? 16.163 42.165 91.004 1.00 20.52 ? ? ? ? ? ? 745 GLU B CB 1
+ATOM 4444 C CG . GLU B 1 255 ? 15.561 41.537 92.240 1.00 26.59 ? ? ? ? ? ? 745 GLU B CG 1
+ATOM 4445 C CD . GLU B 1 255 ? 16.448 40.429 92.793 1.00 30.86 ? ? ? ? ? ? 745 GLU B CD 1
+ATOM 4446 O OE1 . GLU B 1 255 ? 17.698 40.640 92.823 1.00 32.41 ? ? ? ? ? ? 745 GLU B OE1 1
+ATOM 4447 O OE2 . GLU B 1 255 ? 15.898 39.337 93.155 1.00 34.10 ? ? ? ? ? ? 745 GLU B OE2 1
+ATOM 4448 N N . ILE B 1 256 ? 16.099 43.580 87.969 1.00 15.40 ? ? ? ? ? ? 746 ILE B N 1
+ATOM 4449 C CA . ILE B 1 256 ? 16.788 44.441 87.024 1.00 15.27 ? ? ? ? ? ? 746 ILE B CA 1
+ATOM 4450 C C . ILE B 1 256 ? 15.819 45.225 86.111 1.00 14.60 ? ? ? ? ? ? 746 ILE B C 1
+ATOM 4451 O O . ILE B 1 256 ? 16.255 45.848 85.151 1.00 15.33 ? ? ? ? ? ? 746 ILE B O 1
+ATOM 4452 C CB . ILE B 1 256 ? 17.884 43.703 86.198 1.00 14.95 ? ? ? ? ? ? 746 ILE B CB 1
+ATOM 4453 C CG1 . ILE B 1 256 ? 17.284 42.583 85.358 1.00 14.09 ? ? ? ? ? ? 746 ILE B CG1 1
+ATOM 4454 C CG2 . ILE B 1 256 ? 18.975 43.198 87.130 1.00 15.28 ? ? ? ? ? ? 746 ILE B CG2 1
+ATOM 4455 C CD1 . ILE B 1 256 ? 18.214 42.087 84.270 1.00 14.48 ? ? ? ? ? ? 746 ILE B CD1 1
+ATOM 4456 N N . GLY B 1 257 ? 14.530 45.232 86.477 1.00 13.85 ? ? ? ? ? ? 747 GLY B N 1
+ATOM 4457 C CA . GLY B 1 257 ? 13.495 45.971 85.770 1.00 14.02 ? ? ? ? ? ? 747 GLY B CA 1
+ATOM 4458 C C . GLY B 1 257 ? 13.072 45.408 84.428 1.00 14.60 ? ? ? ? ? ? 747 GLY B C 1
+ATOM 4459 O O . GLY B 1 257 ? 12.550 46.144 83.601 1.00 16.93 ? ? ? ? ? ? 747 GLY B O 1
+ATOM 4460 N N . VAL B 1 258 ? 13.173 44.097 84.267 1.00 13.32 ? ? ? ? ? ? 748 VAL B N 1
+ATOM 4461 C CA . VAL B 1 258 ? 12.840 43.434 83.008 1.00 12.70 ? ? ? ? ? ? 748 VAL B CA 1
+ATOM 4462 C C . VAL B 1 258 ? 11.552 42.606 83.126 1.00 13.76 ? ? ? ? ? ? 748 VAL B C 1
+ATOM 4463 O O . VAL B 1 258 ? 11.341 41.888 84.111 1.00 13.51 ? ? ? ? ? ? 748 VAL B O 1
+ATOM 4464 C CB . VAL B 1 258 ? 14.035 42.538 82.567 1.00 12.42 ? ? ? ? ? ? 748 VAL B CB 1
+ATOM 4465 C CG1 . VAL B 1 258 ? 13.669 41.653 81.392 1.00 13.27 ? ? ? ? ? ? 748 VAL B CG1 1
+ATOM 4466 C CG2 . VAL B 1 258 ? 15.233 43.385 82.214 1.00 12.18 ? ? ? ? ? ? 748 VAL B CG2 1
+ATOM 4467 N N . ILE B 1 259 ? 10.677 42.754 82.137 1.00 12.55 ? ? ? ? ? ? 749 ILE B N 1
+ATOM 4468 C CA . ILE B 1 259 ? 9.418 42.030 82.044 1.00 12.80 ? ? ? ? ? ? 749 ILE B CA 1
+ATOM 4469 C C . ILE B 1 259 ? 9.704 40.608 81.503 1.00 11.83 ? ? ? ? ? ? 749 ILE B C 1
+ATOM 4470 O O . ILE B 1 259 ? 10.644 40.391 80.732 1.00 11.00 ? ? ? ? ? ? 749 ILE B O 1
+ATOM 4471 C CB . ILE B 1 259 ? 8.492 42.730 80.994 1.00 15.78 ? ? ? ? ? ? 749 ILE B CB 1
+ATOM 4472 C CG1 . ILE B 1 259 ? 8.234 44.184 81.367 1.00 18.81 ? ? ? ? ? ? 749 ILE B CG1 1
+ATOM 4473 C CG2 . ILE B 1 259 ? 7.179 41.992 80.819 1.00 17.05 ? ? ? ? ? ? 749 ILE B CG2 1
+ATOM 4474 C CD1 . ILE B 1 259 ? 7.621 44.370 82.718 1.00 20.74 ? ? ? ? ? ? 749 ILE B CD1 1
+ATOM 4475 N N . VAL B 1 260 ? 8.855 39.654 81.867 1.00 10.40 ? ? ? ? ? ? 750 VAL B N 1
+ATOM 4476 C CA . VAL B 1 260 ? 8.974 38.284 81.378 1.00 10.33 ? ? ? ? ? ? 750 VAL B CA 1
+ATOM 4477 C C . VAL B 1 260 ? 7.656 37.861 80.707 1.00 9.86 ? ? ? ? ? ? 750 VAL B C 1
+ATOM 4478 O O . VAL B 1 260 ? 6.576 38.100 81.250 1.00 11.49 ? ? ? ? ? ? 750 VAL B O 1
+ATOM 4479 C CB . VAL B 1 260 ? 9.251 37.295 82.544 1.00 10.64 ? ? ? ? ? ? 750 VAL B CB 1
+ATOM 4480 C CG1 . VAL B 1 260 ? 9.186 35.849 82.042 1.00 11.68 ? ? ? ? ? ? 750 VAL B CG1 1
+ATOM 4481 C CG2 . VAL B 1 260 ? 10.601 37.614 83.180 1.00 10.22 ? ? ? ? ? ? 750 VAL B CG2 1
+ATOM 4482 N N . SER B 1 261 ? 7.738 37.325 79.497 1.00 8.47 ? ? ? ? ? ? 751 SER B N 1
+ATOM 4483 C CA . SER B 1 261 ? 6.548 36.805 78.828 1.00 8.18 ? ? ? ? ? ? 751 SER B CA 1
+ATOM 4484 C C . SER B 1 261 ? 6.761 35.318 78.537 1.00 8.82 ? ? ? ? ? ? 751 SER B C 1
+ATOM 4485 O O . SER B 1 261 ? 7.898 34.913 78.189 1.00 9.45 ? ? ? ? ? ? 751 SER B O 1
+ATOM 4486 C CB . SER B 1 261 ? 6.297 37.529 77.490 1.00 9.10 ? ? ? ? ? ? 751 SER B CB 1
+ATOM 4487 O OG . SER B 1 261 ? 5.838 38.839 77.714 1.00 9.79 ? ? ? ? ? ? 751 SER B OG 1
+ATOM 4488 N N . PHE B 1 262 ? 5.715 34.490 78.713 1.00 7.78 ? ? ? ? ? ? 752 PHE B N 1
+ATOM 4489 C CA . PHE B 1 262 ? 5.819 33.077 78.329 1.00 8.95 ? ? ? ? ? ? 752 PHE B CA 1
+ATOM 4490 C C . PHE B 1 262 ? 5.320 33.172 76.882 1.00 8.52 ? ? ? ? ? ? 752 PHE B C 1
+ATOM 4491 O O . PHE B 1 262 ? 4.166 33.485 76.649 1.00 8.94 ? ? ? ? ? ? 752 PHE B O 1
+ATOM 4492 C CB . PHE B 1 262 ? 4.905 32.170 79.190 1.00 11.03 ? ? ? ? ? ? 752 PHE B CB 1
+ATOM 4493 C CG . PHE B 1 262 ? 5.323 32.071 80.636 1.00 12.89 ? ? ? ? ? ? 752 PHE B CG 1
+ATOM 4494 C CD1 . PHE B 1 262 ? 6.602 32.457 81.055 1.00 14.37 ? ? ? ? ? ? 752 PHE B CD1 1
+ATOM 4495 C CD2 . PHE B 1 262 ? 4.422 31.585 81.591 1.00 15.38 ? ? ? ? ? ? 752 PHE B CD2 1
+ATOM 4496 C CE1 . PHE B 1 262 ? 6.983 32.361 82.418 1.00 16.19 ? ? ? ? ? ? 752 PHE B CE1 1
+ATOM 4497 C CE2 . PHE B 1 262 ? 4.783 31.483 82.966 1.00 15.58 ? ? ? ? ? ? 752 PHE B CE2 1
+ATOM 4498 C CZ . PHE B 1 262 ? 6.062 31.870 83.375 1.00 16.18 ? ? ? ? ? ? 752 PHE B CZ 1
+ATOM 4499 N N . THR B 1 263 ? 6.176 32.846 75.923 1.00 8.05 ? ? ? ? ? ? 753 THR B N 1
+ATOM 4500 C CA . THR B 1 263 ? 5.840 33.077 74.517 1.00 8.09 ? ? ? ? ? ? 753 THR B CA 1
+ATOM 4501 C C . THR B 1 263 ? 5.413 31.937 73.600 1.00 8.55 ? ? ? ? ? ? 753 THR B C 1
+ATOM 4502 O O . THR B 1 263 ? 4.706 32.188 72.606 1.00 9.14 ? ? ? ? ? ? 753 THR B O 1
+ATOM 4503 C CB . THR B 1 263 ? 7.048 33.766 73.794 1.00 8.43 ? ? ? ? ? ? 753 THR B CB 1
+ATOM 4504 O OG1 . THR B 1 263 ? 8.201 32.923 73.925 1.00 9.37 ? ? ? ? ? ? 753 THR B OG1 1
+ATOM 4505 C CG2 . THR B 1 263 ? 7.358 35.168 74.382 1.00 9.01 ? ? ? ? ? ? 753 THR B CG2 1
+ATOM 4506 N N . GLU B 1 264 ? 5.848 30.712 73.867 1.00 7.13 ? ? ? ? ? ? 754 GLU B N 1
+ATOM 4507 C CA . GLU B 1 264 ? 5.535 29.613 72.972 1.00 8.03 ? ? ? ? ? ? 754 GLU B CA 1
+ATOM 4508 C C . GLU B 1 264 ? 5.264 28.325 73.740 1.00 8.68 ? ? ? ? ? ? 754 GLU B C 1
+ATOM 4509 O O . GLU B 1 264 ? 5.714 27.248 73.314 1.00 8.71 ? ? ? ? ? ? 754 GLU B O 1
+ATOM 4510 C CB . GLU B 1 264 ? 6.744 29.367 72.041 1.00 9.32 ? ? ? ? ? ? 754 GLU B CB 1
+ATOM 4511 C CG . GLU B 1 264 ? 7.294 30.669 71.376 1.00 9.63 ? ? ? ? ? ? 754 GLU B CG 1
+ATOM 4512 C CD . GLU B 1 264 ? 8.411 30.421 70.386 1.00 9.79 ? ? ? ? ? ? 754 GLU B CD 1
+ATOM 4513 O OE1 . GLU B 1 264 ? 8.742 29.250 70.094 1.00 9.53 ? ? ? ? ? ? 754 GLU B OE1 1
+ATOM 4514 O OE2 . GLU B 1 264 ? 8.978 31.425 69.902 1.00 10.55 ? ? ? ? ? ? 754 GLU B OE2 1
+ATOM 4515 N N . ILE B 1 265 ? 4.452 28.423 74.787 1.00 9.06 ? ? ? ? ? ? 755 ILE B N 1
+ATOM 4516 C CA . ILE B 1 265 ? 4.211 27.256 75.638 1.00 9.77 ? ? ? ? ? ? 755 ILE B CA 1
+ATOM 4517 C C . ILE B 1 265 ? 3.594 26.046 74.981 1.00 9.16 ? ? ? ? ? ? 755 ILE B C 1
+ATOM 4518 O O . ILE B 1 265 ? 2.610 26.147 74.280 1.00 9.12 ? ? ? ? ? ? 755 ILE B O 1
+ATOM 4519 C CB . ILE B 1 265 ? 3.289 27.574 76.834 1.00 9.61 ? ? ? ? ? ? 755 ILE B CB 1
+ATOM 4520 C CG1 . ILE B 1 265 ? 3.800 28.782 77.616 1.00 9.39 ? ? ? ? ? ? 755 ILE B CG1 1
+ATOM 4521 C CG2 . ILE B 1 265 ? 3.171 26.329 77.763 1.00 10.33 ? ? ? ? ? ? 755 ILE B CG2 1
+ATOM 4522 C CD1 . ILE B 1 265 ? 2.705 29.437 78.473 1.00 10.97 ? ? ? ? ? ? 755 ILE B CD1 1
+ATOM 4523 N N . ASP B 1 266 ? 4.226 24.902 75.226 1.00 11.27 ? ? ? ? ? ? 756 ASP B N 1
+ATOM 4524 C CA . ASP B 1 266 ? 3.693 23.583 74.867 1.00 11.75 ? ? ? ? ? ? 756 ASP B CA 1
+ATOM 4525 C C . ASP B 1 266 ? 4.331 22.530 75.815 1.00 12.16 ? ? ? ? ? ? 756 ASP B C 1
+ATOM 4526 O O . ASP B 1 266 ? 5.456 22.720 76.298 1.00 10.54 ? ? ? ? ? ? 756 ASP B O 1
+ATOM 4527 C CB . ASP B 1 266 ? 3.674 23.216 73.363 1.00 12.55 ? ? ? ? ? ? 756 ASP B CB 1
+ATOM 4528 C CG . ASP B 1 266 ? 4.978 23.436 72.667 1.00 13.13 ? ? ? ? ? ? 756 ASP B CG 1
+ATOM 4529 O OD1 . ASP B 1 266 ? 6.040 23.308 73.286 1.00 12.24 ? ? ? ? ? ? 756 ASP B OD1 1
+ATOM 4530 O OD2 . ASP B 1 266 ? 4.919 23.702 71.453 1.00 13.93 ? ? ? ? ? ? 756 ASP B OD2 1
+ATOM 4531 N N . ILE B 1 267 ? 3.527 21.534 76.211 1.00 12.16 ? ? ? ? ? ? 757 ILE B N 1
+ATOM 4532 C CA . ILE B 1 267 ? 3.987 20.499 77.156 1.00 12.97 ? ? ? ? ? ? 757 ILE B CA 1
+ATOM 4533 C C . ILE B 1 267 ? 3.793 19.129 76.482 1.00 12.86 ? ? ? ? ? ? 757 ILE B C 1
+ATOM 4534 O O . ILE B 1 267 ? 2.687 18.579 76.468 1.00 11.90 ? ? ? ? ? ? 757 ILE B O 1
+ATOM 4535 C CB . ILE B 1 267 ? 3.240 20.639 78.510 1.00 13.23 ? ? ? ? ? ? 757 ILE B CB 1
+ATOM 4536 C CG1 . ILE B 1 267 ? 3.386 22.081 79.034 1.00 12.89 ? ? ? ? ? ? 757 ILE B CG1 1
+ATOM 4537 C CG2 . ILE B 1 267 ? 3.799 19.621 79.528 1.00 13.62 ? ? ? ? ? ? 757 ILE B CG2 1
+ATOM 4538 C CD1 . ILE B 1 267 ? 2.873 22.336 80.436 1.00 14.34 ? ? ? ? ? ? 757 ILE B CD1 1
+ATOM 4539 N N . ARG B 1 268 ? 4.875 18.646 75.863 1.00 13.17 ? ? ? ? ? ? 758 ARG B N 1
+ATOM 4540 C CA . ARG B 1 268 ? 4.859 17.413 75.080 1.00 14.61 ? ? ? ? ? ? 758 ARG B CA 1
+ATOM 4541 C C . ARG B 1 268 ? 4.885 16.126 75.885 1.00 14.48 ? ? ? ? ? ? 758 ARG B C 1
+ATOM 4542 O O . ARG B 1 268 ? 5.654 15.979 76.831 1.00 14.28 ? ? ? ? ? ? 758 ARG B O 1
+ATOM 4543 C CB . ARG B 1 268 ? 5.951 17.430 73.998 1.00 14.64 ? ? ? ? ? ? 758 ARG B CB 1
+ATOM 4544 C CG . ARG B 1 268 ? 7.386 17.421 74.482 1.00 16.53 ? ? ? ? ? ? 758 ARG B CG 1
+ATOM 4545 C CD . ARG B 1 268 ? 8.321 17.662 73.290 1.00 16.65 ? ? ? ? ? ? 758 ARG B CD 1
+ATOM 4546 N NE . ARG B 1 268 ? 9.726 17.572 73.651 1.00 18.67 ? ? ? ? ? ? 758 ARG B NE 1
+ATOM 4547 C CZ . ARG B 1 268 ? 10.480 18.602 74.031 1.00 19.31 ? ? ? ? ? ? 758 ARG B CZ 1
+ATOM 4548 N NH1 . ARG B 1 268 ? 9.967 19.823 74.115 1.00 19.80 ? ? ? ? ? ? 758 ARG B NH1 1
+ATOM 4549 N NH2 . ARG B 1 268 ? 11.757 18.409 74.336 1.00 20.42 ? ? ? ? ? ? 758 ARG B NH2 1
+ATOM 4550 N N . ILE B 1 269 ? 4.017 15.211 75.475 1.00 16.39 ? ? ? ? ? ? 759 ILE B N 1
+ATOM 4551 C CA . ILE B 1 269 ? 3.817 13.915 76.129 1.00 18.18 ? ? ? ? ? ? 759 ILE B CA 1
+ATOM 4552 C C . ILE B 1 269 ? 4.444 12.758 75.372 1.00 21.26 ? ? ? ? ? ? 759 ILE B C 1
+ATOM 4553 O O . ILE B 1 269 ? 4.183 12.570 74.184 1.00 20.83 ? ? ? ? ? ? 759 ILE B O 1
+ATOM 4554 C CB . ILE B 1 269 ? 2.309 13.616 76.264 1.00 17.34 ? ? ? ? ? ? 759 ILE B CB 1
+ATOM 4555 C CG1 . ILE B 1 269 ? 1.641 14.677 77.125 1.00 16.21 ? ? ? ? ? ? 759 ILE B CG1 1
+ATOM 4556 C CG2 . ILE B 1 269 ? 2.094 12.242 76.875 1.00 18.07 ? ? ? ? ? ? 759 ILE B CG2 1
+ATOM 4557 C CD1 . ILE B 1 269 ? 0.192 14.502 77.226 1.00 15.54 ? ? ? ? ? ? 759 ILE B CD1 1
+ATOM 4558 N N . PRO B 1 270 ? 5.274 11.953 76.054 1.00 24.72 ? ? ? ? ? ? 760 PRO B N 1
+ATOM 4559 C CA . PRO B 1 270 ? 5.931 10.802 75.428 1.00 28.37 ? ? ? ? ? ? 760 PRO B CA 1
+ATOM 4560 C C . PRO B 1 270 ? 4.848 9.853 74.935 1.00 32.38 ? ? ? ? ? ? 760 PRO B C 1
+ATOM 4561 O O . PRO B 1 270 ? 3.864 9.603 75.626 1.00 31.63 ? ? ? ? ? ? 760 PRO B O 1
+ATOM 4562 C CB . PRO B 1 270 ? 6.726 10.204 76.584 1.00 27.79 ? ? ? ? ? ? 760 PRO B CB 1
+ATOM 4563 C CG . PRO B 1 270 ? 7.056 11.420 77.431 1.00 27.34 ? ? ? ? ? ? 760 PRO B CG 1
+ATOM 4564 C CD . PRO B 1 270 ? 5.717 12.115 77.448 1.00 25.62 ? ? ? ? ? ? 760 PRO B CD 1
+ATOM 4565 N N . GLN B 1 271 ? 5.030 9.354 73.726 1.00 38.35 ? ? ? ? ? ? 761 GLN B N 1
+ATOM 4566 C CA . GLN B 1 271 ? 4.074 8.468 73.067 1.00 45.19 ? ? ? ? ? ? 761 GLN B CA 1
+ATOM 4567 C C . GLN B 1 271 ? 3.734 7.138 73.763 1.00 47.15 ? ? ? ? ? ? 761 GLN B C 1
+ATOM 4568 O O . GLN B 1 271 ? 4.488 6.613 74.600 1.00 47.14 ? ? ? ? ? ? 761 GLN B O 1
+ATOM 4569 C CB . GLN B 1 271 ? 4.549 8.214 71.625 1.00 48.30 ? ? ? ? ? ? 761 GLN B CB 1
+ATOM 4570 C CG . GLN B 1 271 ? 3.638 7.354 70.757 1.00 52.30 ? ? ? ? ? ? 761 GLN B CG 1
+ATOM 4571 C CD . GLN B 1 271 ? 4.324 6.907 69.453 1.00 54.85 ? ? ? ? ? ? 761 GLN B CD 1
+ATOM 4572 O OE1 . GLN B 1 271 ? 4.493 5.694 69.200 1.00 55.99 ? ? ? ? ? ? 761 GLN B OE1 1
+ATOM 4573 N NE2 . GLN B 1 271 ? 4.727 7.885 68.621 1.00 55.44 ? ? ? ? ? ? 761 GLN B NE2 1
+ATOM 4574 N N . SER B 1 272 ? 2.570 6.610 73.394 1.00 49.80 ? ? ? ? ? ? 762 SER B N 1
+ATOM 4575 C CA . SER B 1 272 ? 2.056 5.354 73.926 1.00 52.87 ? ? ? ? ? ? 762 SER B CA 1
+ATOM 4576 C C . SER B 1 272 ? 2.028 5.194 75.454 1.00 54.47 ? ? ? ? ? ? 762 SER B C 1
+ATOM 4577 O O . SER B 1 272 ? 1.681 4.116 75.970 1.00 54.98 ? ? ? ? ? ? 762 SER B O 1
+ATOM 4578 C CB . SER B 1 272 ? 2.682 4.143 73.221 1.00 53.26 ? ? ? ? ? ? 762 SER B CB 1
+ATOM 4579 O OG . SER B 1 272 ? 1.813 3.671 72.190 1.00 54.16 ? ? ? ? ? ? 762 SER B OG 1
+ATOM 4580 N N . GLU B 1 273 ? 2.397 6.256 76.177 1.00 55.86 ? ? ? ? ? ? 763 GLU B N 1
+ATOM 4581 C CA . GLU B 1 273 ? 2.296 6.241 77.629 1.00 56.40 ? ? ? ? ? ? 763 GLU B CA 1
+ATOM 4582 C C . GLU B 1 273 ? 0.781 6.507 77.805 1.00 55.89 ? ? ? ? ? ? 763 GLU B C 1
+ATOM 4583 O O . GLU B 1 273 ? 0.125 7.082 76.908 1.00 55.54 ? ? ? ? ? ? 763 GLU B O 1
+ATOM 4584 C CB . GLU B 1 273 ? 3.137 7.352 78.288 1.00 57.68 ? ? ? ? ? ? 763 GLU B CB 1
+ATOM 4585 C CG . GLU B 1 273 ? 2.451 8.728 78.372 1.00 59.42 ? ? ? ? ? ? 763 GLU B CG 1
+ATOM 4586 C CD . GLU B 1 273 ? 3.033 9.632 79.454 1.00 60.72 ? ? ? ? ? ? 763 GLU B CD 1
+ATOM 4587 O OE1 . GLU B 1 273 ? 3.672 9.119 80.404 1.00 61.37 ? ? ? ? ? ? 763 GLU B OE1 1
+ATOM 4588 O OE2 . GLU B 1 273 ? 2.837 10.868 79.360 1.00 61.91 ? ? ? ? ? ? 763 GLU B OE2 1
+ATOM 4589 N N . ASN B 1 274 ? 0.224 6.058 78.925 1.00 55.04 ? ? ? ? ? ? 764 ASN B N 1
+ATOM 4590 C CA . ASN B 1 274 ? -1.203 6.212 79.197 1.00 53.96 ? ? ? ? ? ? 764 ASN B CA 1
+ATOM 4591 C C . ASN B 1 274 ? -1.719 7.648 79.052 1.00 52.97 ? ? ? ? ? ? 764 ASN B C 1
+ATOM 4592 O O . ASN B 1 274 ? -1.371 8.519 79.863 1.00 53.14 ? ? ? ? ? ? 764 ASN B O 1
+ATOM 4593 C CB . ASN B 1 274 ? -1.508 5.688 80.606 1.00 54.70 ? ? ? ? ? ? 764 ASN B CB 1
+ATOM 4594 C CG . ASN B 1 274 ? -2.999 5.633 80.902 1.00 55.04 ? ? ? ? ? ? 764 ASN B CG 1
+ATOM 4595 O OD1 . ASN B 1 274 ? -3.810 5.341 80.014 1.00 55.45 ? ? ? ? ? ? 764 ASN B OD1 1
+ATOM 4596 N ND2 . ASN B 1 274 ? -3.369 5.919 82.156 1.00 55.03 ? ? ? ? ? ? 764 ASN B ND2 1
+ATOM 4597 N N . PRO B 1 275 ? -2.556 7.913 78.021 1.00 51.91 ? ? ? ? ? ? 765 PRO B N 1
+ATOM 4598 C CA . PRO B 1 275 ? -3.135 9.245 77.763 1.00 50.40 ? ? ? ? ? ? 765 PRO B CA 1
+ATOM 4599 C C . PRO B 1 275 ? -3.956 9.737 78.954 1.00 49.00 ? ? ? ? ? ? 765 PRO B C 1
+ATOM 4600 O O . PRO B 1 275 ? -4.058 10.942 79.190 1.00 49.31 ? ? ? ? ? ? 765 PRO B O 1
+ATOM 4601 C CB . PRO B 1 275 ? -4.028 8.998 76.550 1.00 50.63 ? ? ? ? ? ? 765 PRO B CB 1
+ATOM 4602 C CG . PRO B 1 275 ? -3.266 7.936 75.804 1.00 51.31 ? ? ? ? ? ? 765 PRO B CG 1
+ATOM 4603 C CD . PRO B 1 275 ? -2.910 6.982 76.933 1.00 51.55 ? ? ? ? ? ? 765 PRO B CD 1
+ATOM 4604 N N . ALA B 1 276 ? -4.510 8.794 79.717 1.00 46.61 ? ? ? ? ? ? 766 ALA B N 1
+ATOM 4605 C CA . ALA B 1 276 ? -5.320 9.109 80.901 1.00 44.46 ? ? ? ? ? ? 766 ALA B CA 1
+ATOM 4606 C C . ALA B 1 276 ? -4.562 9.852 82.015 1.00 42.12 ? ? ? ? ? ? 766 ALA B C 1
+ATOM 4607 O O . ALA B 1 276 ? -4.892 11.008 82.307 1.00 42.15 ? ? ? ? ? ? 766 ALA B O 1
+ATOM 4608 C CB . ALA B 1 276 ? -5.943 7.843 81.455 1.00 45.41 ? ? ? ? ? ? 766 ALA B CB 1
+ATOM 4609 N N . THR B 1 277 ? -3.591 9.180 82.660 1.00 38.97 ? ? ? ? ? ? 767 THR B N 1
+ATOM 4610 C CA . THR B 1 277 ? -2.790 9.800 83.734 1.00 35.17 ? ? ? ? ? ? 767 THR B CA 1
+ATOM 4611 C C . THR B 1 277 ? -1.850 10.875 83.180 1.00 30.96 ? ? ? ? ? ? 767 THR B C 1
+ATOM 4612 O O . THR B 1 277 ? -1.616 11.878 83.844 1.00 28.79 ? ? ? ? ? ? 767 THR B O 1
+ATOM 4613 C CB . THR B 1 277 ? -2.002 8.766 84.608 1.00 35.84 ? ? ? ? ? ? 767 THR B CB 1
+ATOM 4614 O OG1 . THR B 1 277 ? -1.064 8.031 83.810 1.00 36.68 ? ? ? ? ? ? 767 THR B OG1 1
+ATOM 4615 C CG2 . THR B 1 277 ? -2.970 7.797 85.268 1.00 36.27 ? ? ? ? ? ? 767 THR B CG2 1
+ATOM 4616 N N . ALA B 1 278 ? -1.342 10.655 81.963 1.00 27.74 ? ? ? ? ? ? 768 ALA B N 1
+ATOM 4617 C CA . ALA B 1 278 ? -0.483 11.629 81.279 1.00 24.83 ? ? ? ? ? ? 768 ALA B CA 1
+ATOM 4618 C C . ALA B 1 278 ? -1.229 12.984 81.152 1.00 23.22 ? ? ? ? ? ? 768 ALA B C 1
+ATOM 4619 O O . ALA B 1 278 ? -0.654 14.026 81.471 1.00 22.86 ? ? ? ? ? ? 768 ALA B O 1
+ATOM 4620 C CB . ALA B 1 278 ? -0.092 11.116 79.913 1.00 24.23 ? ? ? ? ? ? 768 ALA B CB 1
+ATOM 4621 N N . PHE B 1 279 ? -2.493 12.975 80.713 1.00 20.89 ? ? ? ? ? ? 769 PHE B N 1
+ATOM 4622 C CA . PHE B 1 279 ? -3.283 14.211 80.600 1.00 19.93 ? ? ? ? ? ? 769 PHE B CA 1
+ATOM 4623 C C . PHE B 1 279 ? -3.511 14.913 81.935 1.00 18.70 ? ? ? ? ? ? 769 PHE B C 1
+ATOM 4624 O O . PHE B 1 279 ? -3.710 16.121 81.964 1.00 17.80 ? ? ? ? ? ? 769 PHE B O 1
+ATOM 4625 C CB . PHE B 1 279 ? -4.645 13.959 79.949 1.00 21.55 ? ? ? ? ? ? 769 PHE B CB 1
+ATOM 4626 C CG . PHE B 1 279 ? -4.586 13.753 78.466 1.00 22.97 ? ? ? ? ? ? 769 PHE B CG 1
+ATOM 4627 C CD1 . PHE B 1 279 ? -3.371 13.691 77.801 1.00 23.39 ? ? ? ? ? ? 769 PHE B CD1 1
+ATOM 4628 C CD2 . PHE B 1 279 ? -5.756 13.604 77.735 1.00 24.57 ? ? ? ? ? ? 769 PHE B CD2 1
+ATOM 4629 C CE1 . PHE B 1 279 ? -3.301 13.481 76.429 1.00 24.28 ? ? ? ? ? ? 769 PHE B CE1 1
+ATOM 4630 C CE2 . PHE B 1 279 ? -5.705 13.392 76.346 1.00 26.20 ? ? ? ? ? ? 769 PHE B CE2 1
+ATOM 4631 C CZ . PHE B 1 279 ? -4.461 13.330 75.697 1.00 25.58 ? ? ? ? ? ? 769 PHE B CZ 1
+ATOM 4632 N N . GLN B 1 280 ? -3.542 14.163 83.042 1.00 18.31 ? ? ? ? ? ? 770 GLN B N 1
+ATOM 4633 C CA . GLN B 1 280 ? -3.711 14.808 84.345 1.00 18.14 ? ? ? ? ? ? 770 GLN B CA 1
+ATOM 4634 C C . GLN B 1 280 ? -2.418 15.494 84.784 1.00 16.17 ? ? ? ? ? ? 770 GLN B C 1
+ATOM 4635 O O . GLN B 1 280 ? -2.445 16.564 85.351 1.00 16.35 ? ? ? ? ? ? 770 GLN B O 1
+ATOM 4636 C CB . GLN B 1 280 ? -4.135 13.818 85.431 1.00 19.86 ? ? ? ? ? ? 770 GLN B CB 1
+ATOM 4637 C CG . GLN B 1 280 ? -5.498 13.158 85.189 1.00 22.96 ? ? ? ? ? ? 770 GLN B CG 1
+ATOM 4638 C CD . GLN B 1 280 ? -6.679 14.133 85.178 1.00 23.79 ? ? ? ? ? ? 770 GLN B CD 1
+ATOM 4639 O OE1 . GLN B 1 280 ? -6.592 15.292 85.660 1.00 24.20 ? ? ? ? ? ? 770 GLN B OE1 1
+ATOM 4640 N NE2 . GLN B 1 280 ? -7.807 13.655 84.659 1.00 24.09 ? ? ? ? ? ? 770 GLN B NE2 1
+ATOM 4641 N N . VAL B 1 281 ? -1.283 14.861 84.558 1.00 15.93 ? ? ? ? ? ? 771 VAL B N 1
+ATOM 4642 C CA . VAL B 1 281 ? -0.002 15.461 84.942 1.00 16.39 ? ? ? ? ? ? 771 VAL B CA 1
+ATOM 4643 C C . VAL B 1 281 ? 0.194 16.752 84.117 1.00 16.18 ? ? ? ? ? ? 771 VAL B C 1
+ATOM 4644 O O . VAL B 1 281 ? 0.602 17.774 84.647 1.00 15.18 ? ? ? ? ? ? 771 VAL B O 1
+ATOM 4645 C CB . VAL B 1 281 ? 1.174 14.486 84.658 1.00 18.42 ? ? ? ? ? ? 771 VAL B CB 1
+ATOM 4646 C CG1 . VAL B 1 281 ? 2.521 15.208 84.859 1.00 18.28 ? ? ? ? ? ? 771 VAL B CG1 1
+ATOM 4647 C CG2 . VAL B 1 281 ? 1.072 13.234 85.564 1.00 18.63 ? ? ? ? ? ? 771 VAL B CG2 1
+ATOM 4648 N N . GLN B 1 282 ? -0.159 16.687 82.833 1.00 15.51 ? ? ? ? ? ? 772 GLN B N 1
+ATOM 4649 C CA . GLN B 1 282 ? -0.038 17.843 81.940 1.00 15.01 ? ? ? ? ? ? 772 GLN B CA 1
+ATOM 4650 C C . GLN B 1 282 ? -0.901 18.981 82.469 1.00 14.06 ? ? ? ? ? ? 772 GLN B C 1
+ATOM 4651 O O . GLN B 1 282 ? -0.460 20.137 82.508 1.00 14.18 ? ? ? ? ? ? 772 GLN B O 1
+ATOM 4652 C CB . GLN B 1 282 ? -0.442 17.445 80.515 1.00 13.63 ? ? ? ? ? ? 772 GLN B CB 1
+ATOM 4653 C CG . GLN B 1 282 ? -0.514 18.615 79.542 1.00 13.41 ? ? ? ? ? ? 772 GLN B CG 1
+ATOM 4654 C CD . GLN B 1 282 ? -0.966 18.177 78.169 1.00 13.57 ? ? ? ? ? ? 772 GLN B CD 1
+ATOM 4655 O OE1 . GLN B 1 282 ? -2.134 17.838 77.973 1.00 13.87 ? ? ? ? ? ? 772 GLN B OE1 1
+ATOM 4656 N NE2 . GLN B 1 282 ? -0.042 18.167 77.208 1.00 13.14 ? ? ? ? ? ? 772 GLN B NE2 1
+ATOM 4657 N N . ALA B 1 283 ? -2.121 18.660 82.910 1.00 13.77 ? ? ? ? ? ? 773 ALA B N 1
+ATOM 4658 C CA . ALA B 1 283 ? -3.019 19.673 83.470 1.00 12.95 ? ? ? ? ? ? 773 ALA B CA 1
+ATOM 4659 C C . ALA B 1 283 ? -2.393 20.344 84.688 1.00 13.59 ? ? ? ? ? ? 773 ALA B C 1
+ATOM 4660 O O . ALA B 1 283 ? -2.486 21.565 84.851 1.00 13.84 ? ? ? ? ? ? 773 ALA B O 1
+ATOM 4661 C CB . ALA B 1 283 ? -4.358 19.051 83.860 1.00 13.73 ? ? ? ? ? ? 773 ALA B CB 1
+ATOM 4662 N N . ASN B 1 284 ? -1.794 19.536 85.570 1.00 15.01 ? ? ? ? ? ? 774 ASN B N 1
+ATOM 4663 C CA . ASN B 1 284 ? -1.145 20.053 86.784 1.00 16.44 ? ? ? ? ? ? 774 ASN B CA 1
+ATOM 4664 C C . ASN B 1 284 ? 0.021 20.956 86.398 1.00 15.21 ? ? ? ? ? ? 774 ASN B C 1
+ATOM 4665 O O . ASN B 1 284 ? 0.223 22.001 87.019 1.00 14.48 ? ? ? ? ? ? 774 ASN B O 1
+ATOM 4666 C CB . ASN B 1 284 ? -0.611 18.929 87.680 1.00 19.87 ? ? ? ? ? ? 774 ASN B CB 1
+ATOM 4667 C CG . ASN B 1 284 ? -1.725 18.053 88.277 1.00 24.16 ? ? ? ? ? ? 774 ASN B CG 1
+ATOM 4668 O OD1 . ASN B 1 284 ? -2.867 18.508 88.523 1.00 25.82 ? ? ? ? ? ? 774 ASN B OD1 1
+ATOM 4669 N ND2 . ASN B 1 284 ? -1.388 16.782 88.528 1.00 25.88 ? ? ? ? ? ? 774 ASN B ND2 1
+ATOM 4670 N N . ASN B 1 285 ? 0.778 20.536 85.371 1.00 15.53 ? ? ? ? ? ? 775 ASN B N 1
+ATOM 4671 C CA . ASN B 1 285 ? 1.931 21.311 84.850 1.00 14.59 ? ? ? ? ? ? 775 ASN B CA 1
+ATOM 4672 C C . ASN B 1 285 ? 1.465 22.679 84.282 1.00 13.48 ? ? ? ? ? ? 775 ASN B C 1
+ATOM 4673 O O . ASN B 1 285 ? 2.056 23.706 84.611 1.00 13.68 ? ? ? ? ? ? 775 ASN B O 1
+ATOM 4674 C CB . ASN B 1 285 ? 2.706 20.498 83.797 1.00 14.91 ? ? ? ? ? ? 775 ASN B CB 1
+ATOM 4675 C CG . ASN B 1 285 ? 3.640 19.443 84.402 1.00 15.08 ? ? ? ? ? ? 775 ASN B CG 1
+ATOM 4676 O OD1 . ASN B 1 285 ? 4.377 18.800 83.675 1.00 16.43 ? ? ? ? ? ? 775 ASN B OD1 1
+ATOM 4677 N ND2 . ASN B 1 285 ? 3.637 19.288 85.723 1.00 16.45 ? ? ? ? ? ? 775 ASN B ND2 1
+ATOM 4678 N N . TYR B 1 286 ? 0.390 22.711 83.493 1.00 12.69 ? ? ? ? ? ? 776 TYR B N 1
+ATOM 4679 C CA . TYR B 1 286 ? -0.140 23.990 82.966 1.00 12.56 ? ? ? ? ? ? 776 TYR B CA 1
+ATOM 4680 C C . TYR B 1 286 ? -0.643 24.866 84.099 1.00 12.94 ? ? ? ? ? ? 776 TYR B C 1
+ATOM 4681 O O . TYR B 1 286 ? -0.454 26.078 84.095 1.00 12.66 ? ? ? ? ? ? 776 TYR B O 1
+ATOM 4682 C CB . TYR B 1 286 ? -1.299 23.768 81.973 1.00 12.26 ? ? ? ? ? ? 776 TYR B CB 1
+ATOM 4683 C CG . TYR B 1 286 ? -0.868 23.649 80.523 1.00 13.33 ? ? ? ? ? ? 776 TYR B CG 1
+ATOM 4684 C CD1 . TYR B 1 286 ? -0.477 24.783 79.793 1.00 13.73 ? ? ? ? ? ? 776 TYR B CD1 1
+ATOM 4685 C CD2 . TYR B 1 286 ? -0.861 22.408 79.871 1.00 12.42 ? ? ? ? ? ? 776 TYR B CD2 1
+ATOM 4686 C CE1 . TYR B 1 286 ? -0.088 24.674 78.441 1.00 13.59 ? ? ? ? ? ? 776 TYR B CE1 1
+ATOM 4687 C CE2 . TYR B 1 286 ? -0.479 22.282 78.515 1.00 13.95 ? ? ? ? ? ? 776 TYR B CE2 1
+ATOM 4688 C CZ . TYR B 1 286 ? -0.093 23.433 77.805 1.00 13.89 ? ? ? ? ? ? 776 TYR B CZ 1
+ATOM 4689 O OH . TYR B 1 286 ? 0.254 23.340 76.473 1.00 13.64 ? ? ? ? ? ? 776 TYR B OH 1
+ATOM 4690 N N . LYS B 1 287 ? -1.341 24.247 85.061 1.00 13.98 ? ? ? ? ? ? 777 LYS B N 1
+ATOM 4691 C CA . LYS B 1 287 ? -1.865 24.971 86.211 1.00 14.22 ? ? ? ? ? ? 777 LYS B CA 1
+ATOM 4692 C C . LYS B 1 287 ? -0.728 25.615 87.024 1.00 13.19 ? ? ? ? ? ? 777 LYS B C 1
+ATOM 4693 O O . LYS B 1 287 ? -0.839 26.763 87.402 1.00 13.79 ? ? ? ? ? ? 777 LYS B O 1
+ATOM 4694 C CB . LYS B 1 287 ? -2.699 24.035 87.101 1.00 15.67 ? ? ? ? ? ? 777 LYS B CB 1
+ATOM 4695 C CG . LYS B 1 287 ? -3.333 24.755 88.254 1.00 18.09 ? ? ? ? ? ? 777 LYS B CG 1
+ATOM 4696 C CD . LYS B 1 287 ? -4.344 23.878 88.932 1.00 20.55 ? ? ? ? ? ? 777 LYS B CD 1
+ATOM 4697 C CE . LYS B 1 287 ? -5.259 24.737 89.777 1.00 23.88 ? ? ? ? ? ? 777 LYS B CE 1
+ATOM 4698 N NZ . LYS B 1 287 ? -6.266 23.903 90.503 1.00 25.60 ? ? ? ? ? ? 777 LYS B NZ 1
+ATOM 4699 N N . GLU B 1 288 ? 0.371 24.899 87.262 1.00 14.09 ? ? ? ? ? ? 778 GLU B N 1
+ATOM 4700 C CA . GLU B 1 288 ? 1.480 25.468 88.036 1.00 16.38 ? ? ? ? ? ? 778 GLU B CA 1
+ATOM 4701 C C . GLU B 1 288 ? 2.127 26.642 87.278 1.00 16.22 ? ? ? ? ? ? 778 GLU B C 1
+ATOM 4702 O O . GLU B 1 288 ? 2.487 27.666 87.878 1.00 15.46 ? ? ? ? ? ? 778 GLU B O 1
+ATOM 4703 C CB . GLU B 1 288 ? 2.539 24.410 88.367 1.00 18.97 ? ? ? ? ? ? 778 GLU B CB 1
+ATOM 4704 C CG . GLU B 1 288 ? 2.114 23.359 89.398 1.00 22.95 ? ? ? ? ? ? 778 GLU B CG 1
+ATOM 4705 C CD . GLU B 1 288 ? 1.516 23.959 90.657 1.00 25.33 ? ? ? ? ? ? 778 GLU B CD 1
+ATOM 4706 O OE1 . GLU B 1 288 ? 2.165 24.850 91.267 1.00 25.33 ? ? ? ? ? ? 778 GLU B OE1 1
+ATOM 4707 O OE2 . GLU B 1 288 ? 0.375 23.553 91.020 1.00 28.22 ? ? ? ? ? ? 778 GLU B OE2 1
+ATOM 4708 N N . LEU B 1 289 ? 2.240 26.498 85.955 1.00 14.80 ? ? ? ? ? ? 779 LEU B N 1
+ATOM 4709 C CA . LEU B 1 289 ? 2.808 27.559 85.113 1.00 15.27 ? ? ? ? ? ? 779 LEU B CA 1
+ATOM 4710 C C . LEU B 1 289 ? 1.961 28.840 85.213 1.00 13.72 ? ? ? ? ? ? 779 LEU B C 1
+ATOM 4711 O O . LEU B 1 289 ? 2.506 29.945 85.360 1.00 13.17 ? ? ? ? ? ? 779 LEU B O 1
+ATOM 4712 C CB . LEU B 1 289 ? 2.859 27.054 83.672 1.00 17.27 ? ? ? ? ? ? 779 LEU B CB 1
+ATOM 4713 C CG . LEU B 1 289 ? 4.069 27.298 82.786 1.00 19.73 ? ? ? ? ? ? 779 LEU B CG 1
+ATOM 4714 C CD1 . LEU B 1 289 ? 5.385 26.983 83.511 1.00 20.00 ? ? ? ? ? ? 779 LEU B CD1 1
+ATOM 4715 C CD2 . LEU B 1 289 ? 3.884 26.430 81.564 1.00 20.09 ? ? ? ? ? ? 779 LEU B CD2 1
+ATOM 4716 N N . MET B 1 290 ? 0.633 28.702 85.131 1.00 12.38 ? ? ? ? ? ? 780 MET B N 1
+ATOM 4717 C CA . MET B 1 290 ? -0.266 29.853 85.258 1.00 13.07 ? ? ? ? ? ? 780 MET B CA 1
+ATOM 4718 C C . MET B 1 290 ? -0.180 30.489 86.663 1.00 14.32 ? ? ? ? ? ? 780 MET B C 1
+ATOM 4719 O O . MET B 1 290 ? -0.276 31.707 86.796 1.00 14.53 ? ? ? ? ? ? 780 MET B O 1
+ATOM 4720 C CB . MET B 1 290 ? -1.717 29.487 84.937 1.00 13.50 ? ? ? ? ? ? 780 MET B CB 1
+ATOM 4721 C CG . MET B 1 290 ? -2.683 30.659 85.072 1.00 13.47 ? ? ? ? ? ? 780 MET B CG 1
+ATOM 4722 S SD . MET B 1 290 ? -2.258 32.124 84.052 1.00 15.61 ? ? ? ? ? ? 780 MET B SD 1
+ATOM 4723 C CE . MET B 1 290 ? -2.951 31.613 82.548 1.00 14.16 ? ? ? ? ? ? 780 MET B CE 1
+ATOM 4724 N N . LYS B 1 291 ? -0.032 29.669 87.708 1.00 14.75 ? ? ? ? ? ? 781 LYS B N 1
+ATOM 4725 C CA . LYS B 1 291 ? 0.124 30.197 89.067 1.00 15.67 ? ? ? ? ? ? 781 LYS B CA 1
+ATOM 4726 C C . LYS B 1 291 ? 1.414 31.042 89.209 1.00 14.34 ? ? ? ? ? ? 781 LYS B C 1
+ATOM 4727 O O . LYS B 1 291 ? 1.419 32.091 89.868 1.00 14.63 ? ? ? ? ? ? 781 LYS B O 1
+ATOM 4728 C CB . LYS B 1 291 ? 0.058 29.049 90.087 1.00 18.22 ? ? ? ? ? ? 781 LYS B CB 1
+ATOM 4729 C CG . LYS B 1 291 ? -1.392 28.764 90.547 1.00 20.69 ? ? ? ? ? ? 781 LYS B CG 1
+ATOM 4730 C CD . LYS B 1 291 ? -1.642 27.309 90.944 1.00 24.31 ? ? ? ? ? ? 781 LYS B CD 1
+ATOM 4731 C CE . LYS B 1 291 ? -0.798 26.833 92.129 1.00 26.56 ? ? ? ? ? ? 781 LYS B CE 1
+ATOM 4732 N NZ . LYS B 1 291 ? -1.228 27.442 93.425 1.00 28.92 ? ? ? ? ? ? 781 LYS B NZ 1
+ATOM 4733 N N . ILE B 1 292 ? 2.490 30.602 88.564 1.00 14.47 ? ? ? ? ? ? 782 ILE B N 1
+ATOM 4734 C CA . ILE B 1 292 ? 3.763 31.342 88.569 1.00 14.49 ? ? ? ? ? ? 782 ILE B CA 1
+ATOM 4735 C C . ILE B 1 292 ? 3.540 32.706 87.871 1.00 14.67 ? ? ? ? ? ? 782 ILE B C 1
+ATOM 4736 O O . ILE B 1 292 ? 4.006 33.736 88.352 1.00 14.51 ? ? ? ? ? ? 782 ILE B O 1
+ATOM 4737 C CB . ILE B 1 292 ? 4.873 30.528 87.836 1.00 15.03 ? ? ? ? ? ? 782 ILE B CB 1
+ATOM 4738 C CG1 . ILE B 1 292 ? 5.274 29.330 88.702 1.00 15.13 ? ? ? ? ? ? 782 ILE B CG1 1
+ATOM 4739 C CG2 . ILE B 1 292 ? 6.083 31.412 87.513 1.00 14.48 ? ? ? ? ? ? 782 ILE B CG2 1
+ATOM 4740 C CD1 . ILE B 1 292 ? 6.159 28.336 87.999 1.00 16.57 ? ? ? ? ? ? 782 ILE B CD1 1
+ATOM 4741 N N . CYS B 1 293 ? 2.822 32.701 86.747 1.00 14.34 ? ? ? ? ? ? 783 CYS B N 1
+ATOM 4742 C CA . CYS B 1 293 ? 2.509 33.931 86.019 1.00 15.33 ? ? ? ? ? ? 783 CYS B CA 1
+ATOM 4743 C C . CYS B 1 293 ? 1.722 34.895 86.913 1.00 16.01 ? ? ? ? ? ? 783 CYS B C 1
+ATOM 4744 O O . CYS B 1 293 ? 2.095 36.053 87.071 1.00 16.32 ? ? ? ? ? ? 783 CYS B O 1
+ATOM 4745 C CB . CYS B 1 293 ? 1.714 33.586 84.753 1.00 15.91 ? ? ? ? ? ? 783 CYS B CB 1
+ATOM 4746 S SG . CYS B 1 293 ? 1.194 34.967 83.726 1.00 20.16 ? ? ? ? ? ? 783 CYS B SG 1
+ATOM 4747 N N . LEU B 1 294 ? 0.706 34.374 87.594 1.00 16.28 ? ? ? ? ? ? 784 LEU B N 1
+ATOM 4748 C CA . LEU B 1 294 ? -0.127 35.183 88.482 1.00 17.40 ? ? ? ? ? ? 784 LEU B CA 1
+ATOM 4749 C C . LEU B 1 294 ? 0.607 35.727 89.700 1.00 17.91 ? ? ? ? ? ? 784 LEU B C 1
+ATOM 4750 O O . LEU B 1 294 ? 0.273 36.809 90.198 1.00 19.36 ? ? ? ? ? ? 784 LEU B O 1
+ATOM 4751 C CB . LEU B 1 294 ? -1.339 34.373 88.954 1.00 17.52 ? ? ? ? ? ? 784 LEU B CB 1
+ATOM 4752 C CG . LEU B 1 294 ? -2.382 34.063 87.874 1.00 17.20 ? ? ? ? ? ? 784 LEU B CG 1
+ATOM 4753 C CD1 . LEU B 1 294 ? -3.386 33.093 88.432 1.00 18.30 ? ? ? ? ? ? 784 LEU B CD1 1
+ATOM 4754 C CD2 . LEU B 1 294 ? -3.062 35.331 87.397 1.00 17.96 ? ? ? ? ? ? 784 LEU B CD2 1
+ATOM 4755 N N . ALA B 1 295 ? 1.584 34.969 90.192 1.00 18.24 ? ? ? ? ? ? 785 ALA B N 1
+ATOM 4756 C CA . ALA B 1 295 ? 2.361 35.352 91.372 1.00 17.84 ? ? ? ? ? ? 785 ALA B CA 1
+ATOM 4757 C C . ALA B 1 295 ? 3.404 36.442 91.155 1.00 19.56 ? ? ? ? ? ? 785 ALA B C 1
+ATOM 4758 O O . ALA B 1 295 ? 3.809 37.103 92.116 1.00 20.73 ? ? ? ? ? ? 785 ALA B O 1
+ATOM 4759 C CB . ALA B 1 295 ? 3.071 34.119 91.948 1.00 18.50 ? ? ? ? ? ? 785 ALA B CB 1
+ATOM 4760 N N . ASN B 1 296 ? 3.885 36.597 89.916 1.00 17.87 ? ? ? ? ? ? 786 ASN B N 1
+ATOM 4761 C CA . ASN B 1 296 ? 4.939 37.564 89.618 1.00 17.02 ? ? ? ? ? ? 786 ASN B CA 1
+ATOM 4762 C C . ASN B 1 296 ? 4.407 38.787 88.887 1.00 17.01 ? ? ? ? ? ? 786 ASN B C 1
+ATOM 4763 O O . ASN B 1 296 ? 3.885 38.692 87.772 1.00 18.13 ? ? ? ? ? ? 786 ASN B O 1
+ATOM 4764 C CB . ASN B 1 296 ? 6.060 36.869 88.840 1.00 15.09 ? ? ? ? ? ? 786 ASN B CB 1
+ATOM 4765 C CG . ASN B 1 296 ? 6.839 35.870 89.704 1.00 14.64 ? ? ? ? ? ? 786 ASN B CG 1
+ATOM 4766 O OD1 . ASN B 1 296 ? 7.671 36.274 90.506 1.00 14.93 ? ? ? ? ? ? 786 ASN B OD1 1
+ATOM 4767 N ND2 . ASN B 1 296 ? 6.571 34.577 89.536 1.00 13.68 ? ? ? ? ? ? 786 ASN B ND2 1
+ATOM 4768 N N . PRO B 1 297 ? 4.564 39.967 89.488 1.00 17.46 ? ? ? ? ? ? 787 PRO B N 1
+ATOM 4769 C CA . PRO B 1 297 ? 4.077 41.213 88.877 1.00 17.30 ? ? ? ? ? ? 787 PRO B CA 1
+ATOM 4770 C C . PRO B 1 297 ? 4.686 41.629 87.527 1.00 16.47 ? ? ? ? ? ? 787 PRO B C 1
+ATOM 4771 O O . PRO B 1 297 ? 4.074 42.400 86.808 1.00 16.34 ? ? ? ? ? ? 787 PRO B O 1
+ATOM 4772 C CB . PRO B 1 297 ? 4.312 42.259 89.971 1.00 18.37 ? ? ? ? ? ? 787 PRO B CB 1
+ATOM 4773 C CG . PRO B 1 297 ? 5.471 41.698 90.760 1.00 19.15 ? ? ? ? ? ? 787 PRO B CG 1
+ATOM 4774 C CD . PRO B 1 297 ? 5.183 40.214 90.809 1.00 18.17 ? ? ? ? ? ? 787 PRO B CD 1
+ATOM 4775 N N . ASN B 1 298 ? 5.884 41.134 87.213 1.00 15.02 ? ? ? ? ? ? 788 ASN B N 1
+ATOM 4776 C CA . ASN B 1 298 ? 6.555 41.449 85.943 1.00 14.29 ? ? ? ? ? ? 788 ASN B CA 1
+ATOM 4777 C C . ASN B 1 298 ? 6.289 40.392 84.867 1.00 14.27 ? ? ? ? ? ? 788 ASN B C 1
+ATOM 4778 O O . ASN B 1 298 ? 6.941 40.414 83.846 1.00 13.45 ? ? ? ? ? ? 788 ASN B O 1
+ATOM 4779 C CB . ASN B 1 298 ? 8.071 41.592 86.147 1.00 12.55 ? ? ? ? ? ? 788 ASN B CB 1
+ATOM 4780 C CG . ASN B 1 298 ? 8.729 40.298 86.555 1.00 12.66 ? ? ? ? ? ? 788 ASN B CG 1
+ATOM 4781 O OD1 . ASN B 1 298 ? 8.180 39.549 87.361 1.00 13.26 ? ? ? ? ? ? 788 ASN B OD1 1
+ATOM 4782 N ND2 . ASN B 1 298 ? 9.901 40.026 86.022 1.00 12.71 ? ? ? ? ? ? 788 ASN B ND2 1
+ATOM 4783 N N . CYS B 1 299 ? 5.326 39.494 85.075 1.00 15.09 ? ? ? ? ? ? 789 CYS B N 1
+ATOM 4784 C CA . CYS B 1 299 ? 5.045 38.444 84.104 1.00 16.88 ? ? ? ? ? ? 789 CYS B CA 1
+ATOM 4785 C C . CYS B 1 299 ? 3.561 38.501 83.863 1.00 18.35 ? ? ? ? ? ? 789 CYS B C 1
+ATOM 4786 O O . CYS B 1 299 ? 2.783 38.098 84.715 1.00 20.01 ? ? ? ? ? ? 789 CYS B O 1
+ATOM 4787 C CB . CYS B 1 299 ? 5.467 37.079 84.661 1.00 17.51 ? ? ? ? ? ? 789 CYS B CB 1
+ATOM 4788 S SG . CYS B 1 299 ? 5.184 35.693 83.514 1.00 22.69 ? ? ? ? ? ? 789 CYS B SG 1
+ATOM 4789 N N . ASN B 1 300 ? 3.155 39.013 82.707 1.00 18.24 ? ? ? ? ? ? 790 ASN B N 1
+ATOM 4790 C CA . ASN B 1 300 ? 1.736 39.164 82.417 1.00 19.40 ? ? ? ? ? ? 790 ASN B CA 1
+ATOM 4791 C C . ASN B 1 300 ? 1.251 38.738 81.029 1.00 16.05 ? ? ? ? ? ? 790 ASN B C 1
+ATOM 4792 O O . ASN B 1 300 ? 0.138 39.080 80.630 1.00 14.67 ? ? ? ? ? ? 790 ASN B O 1
+ATOM 4793 C CB . ASN B 1 300 ? 1.338 40.609 82.672 1.00 24.02 ? ? ? ? ? ? 790 ASN B CB 1
+ATOM 4794 C CG . ASN B 1 300 ? 1.751 41.085 84.074 1.00 28.09 ? ? ? ? ? ? 790 ASN B CG 1
+ATOM 4795 O OD1 . ASN B 1 300 ? 2.754 41.800 84.220 1.00 30.79 ? ? ? ? ? ? 790 ASN B OD1 1
+ATOM 4796 N ND2 . ASN B 1 300 ? 0.993 40.677 85.110 1.00 29.63 ? ? ? ? ? ? 790 ASN B ND2 1
+ATOM 4797 N N . THR B 1 301 ? 2.042 37.914 80.359 1.00 12.89 ? ? ? ? ? ? 791 THR B N 1
+ATOM 4798 C CA . THR B 1 301 ? 1.730 37.442 79.023 1.00 11.55 ? ? ? ? ? ? 791 THR B CA 1
+ATOM 4799 C C . THR B 1 301 ? 1.925 35.935 79.031 1.00 10.00 ? ? ? ? ? ? 791 THR B C 1
+ATOM 4800 O O . THR B 1 301 ? 3.018 35.451 79.343 1.00 10.08 ? ? ? ? ? ? 791 THR B O 1
+ATOM 4801 C CB . THR B 1 301 ? 2.699 38.112 78.054 1.00 12.18 ? ? ? ? ? ? 791 THR B CB 1
+ATOM 4802 O OG1 . THR B 1 301 ? 2.437 39.513 78.077 1.00 14.27 ? ? ? ? ? ? 791 THR B OG1 1
+ATOM 4803 C CG2 . THR B 1 301 ? 2.568 37.563 76.635 1.00 12.32 ? ? ? ? ? ? 791 THR B CG2 1
+ATOM 4804 N N . PHE B 1 302 ? 0.854 35.216 78.685 1.00 9.31 ? ? ? ? ? ? 792 PHE B N 1
+ATOM 4805 C CA . PHE B 1 302 ? 0.834 33.757 78.696 1.00 9.88 ? ? ? ? ? ? 792 PHE B CA 1
+ATOM 4806 C C . PHE B 1 302 ? 0.400 33.268 77.303 1.00 9.81 ? ? ? ? ? ? 792 PHE B C 1
+ATOM 4807 O O . PHE B 1 302 ? -0.806 33.196 77.009 1.00 10.08 ? ? ? ? ? ? 792 PHE B O 1
+ATOM 4808 C CB . PHE B 1 302 ? -0.182 33.314 79.781 1.00 10.18 ? ? ? ? ? ? 792 PHE B CB 1
+ATOM 4809 C CG . PHE B 1 302 ? -0.103 31.855 80.152 1.00 11.69 ? ? ? ? ? ? 792 PHE B CG 1
+ATOM 4810 C CD1 . PHE B 1 302 ? 0.732 31.434 81.198 1.00 12.53 ? ? ? ? ? ? 792 PHE B CD1 1
+ATOM 4811 C CD2 . PHE B 1 302 ? -0.904 30.900 79.495 1.00 12.16 ? ? ? ? ? ? 792 PHE B CD2 1
+ATOM 4812 C CE1 . PHE B 1 302 ? 0.767 30.072 81.593 1.00 13.77 ? ? ? ? ? ? 792 PHE B CE1 1
+ATOM 4813 C CE2 . PHE B 1 302 ? -0.883 29.538 79.873 1.00 13.10 ? ? ? ? ? ? 792 PHE B CE2 1
+ATOM 4814 C CZ . PHE B 1 302 ? -0.045 29.121 80.927 1.00 13.08 ? ? ? ? ? ? 792 PHE B CZ 1
+ATOM 4815 N N . VAL B 1 303 ? 1.367 32.961 76.437 1.00 9.05 ? ? ? ? ? ? 793 VAL B N 1
+ATOM 4816 C CA . VAL B 1 303 ? 1.070 32.516 75.061 1.00 9.67 ? ? ? ? ? ? 793 VAL B CA 1
+ATOM 4817 C C . VAL B 1 303 ? 1.502 31.066 74.783 1.00 8.71 ? ? ? ? ? ? 793 VAL B C 1
+ATOM 4818 O O . VAL B 1 303 ? 2.639 30.678 75.046 1.00 9.22 ? ? ? ? ? ? 793 VAL B O 1
+ATOM 4819 C CB . VAL B 1 303 ? 1.732 33.489 73.960 1.00 9.67 ? ? ? ? ? ? 793 VAL B CB 1
+ATOM 4820 C CG1 . VAL B 1 303 ? 1.468 32.975 72.511 1.00 9.09 ? ? ? ? ? ? 793 VAL B CG1 1
+ATOM 4821 C CG2 . VAL B 1 303 ? 1.180 34.905 74.121 1.00 10.35 ? ? ? ? ? ? 793 VAL B CG2 1
+ATOM 4822 N N . MET B 1 304 ? 0.567 30.274 74.293 1.00 8.06 ? ? ? ? ? ? 794 MET B N 1
+ATOM 4823 C CA . MET B 1 304 ? 0.821 28.882 73.971 1.00 9.34 ? ? ? ? ? ? 794 MET B CA 1
+ATOM 4824 C C . MET B 1 304 ? 1.089 28.759 72.463 1.00 9.84 ? ? ? ? ? ? 794 MET B C 1
+ATOM 4825 O O . MET B 1 304 ? 0.570 29.570 71.672 1.00 9.87 ? ? ? ? ? ? 794 MET B O 1
+ATOM 4826 C CB . MET B 1 304 ? -0.392 28.023 74.394 1.00 9.85 ? ? ? ? ? ? 794 MET B CB 1
+ATOM 4827 C CG . MET B 1 304 ? -0.589 28.029 75.939 1.00 12.49 ? ? ? ? ? ? 794 MET B CG 1
+ATOM 4828 S SD . MET B 1 304 ? -2.232 27.531 76.502 1.00 13.56 ? ? ? ? ? ? 794 MET B SD 1
+ATOM 4829 C CE . MET B 1 304 ? -3.162 28.921 75.976 1.00 14.10 ? ? ? ? ? ? 794 MET B CE 1
+ATOM 4830 N N . TRP B 1 305 ? 1.885 27.768 72.068 1.00 9.89 ? ? ? ? ? ? 795 TRP B N 1
+ATOM 4831 C CA . TRP B 1 305 ? 2.209 27.588 70.653 1.00 10.89 ? ? ? ? ? ? 795 TRP B CA 1
+ATOM 4832 C C . TRP B 1 305 ? 1.152 26.732 69.977 1.00 9.07 ? ? ? ? ? ? 795 TRP B C 1
+ATOM 4833 O O . TRP B 1 305 ? 1.444 25.661 69.459 1.00 11.22 ? ? ? ? ? ? 795 TRP B O 1
+ATOM 4834 C CB . TRP B 1 305 ? 3.620 27.004 70.465 1.00 12.28 ? ? ? ? ? ? 795 TRP B CB 1
+ATOM 4835 C CG . TRP B 1 305 ? 4.347 27.586 69.250 1.00 14.30 ? ? ? ? ? ? 795 TRP B CG 1
+ATOM 4836 C CD1 . TRP B 1 305 ? 4.950 26.885 68.240 1.00 15.74 ? ? ? ? ? ? 795 TRP B CD1 1
+ATOM 4837 C CD2 . TRP B 1 305 ? 4.512 28.994 68.922 1.00 14.78 ? ? ? ? ? ? 795 TRP B CD2 1
+ATOM 4838 N NE1 . TRP B 1 305 ? 5.480 27.769 67.300 1.00 17.03 ? ? ? ? ? ? 795 TRP B NE1 1
+ATOM 4839 C CE2 . TRP B 1 305 ? 5.230 29.060 67.699 1.00 16.49 ? ? ? ? ? ? 795 TRP B CE2 1
+ATOM 4840 C CE3 . TRP B 1 305 ? 4.117 30.200 69.545 1.00 14.93 ? ? ? ? ? ? 795 TRP B CE3 1
+ATOM 4841 C CZ2 . TRP B 1 305 ? 5.569 30.296 67.087 1.00 16.88 ? ? ? ? ? ? 795 TRP B CZ2 1
+ATOM 4842 C CZ3 . TRP B 1 305 ? 4.450 31.428 68.936 1.00 16.14 ? ? ? ? ? ? 795 TRP B CZ3 1
+ATOM 4843 C CH2 . TRP B 1 305 ? 5.170 31.461 67.723 1.00 16.14 ? ? ? ? ? ? 795 TRP B CH2 1
+ATOM 4844 N N . GLY B 1 306 ? -0.078 27.236 69.991 1.00 10.65 ? ? ? ? ? ? 796 GLY B N 1
+ATOM 4845 C CA . GLY B 1 306 ? -1.222 26.550 69.410 1.00 9.77 ? ? ? ? ? ? 796 GLY B CA 1
+ATOM 4846 C C . GLY B 1 306 ? -2.243 26.275 70.511 1.00 10.78 ? ? ? ? ? ? 796 GLY B C 1
+ATOM 4847 O O . GLY B 1 306 ? -1.986 26.544 71.688 1.00 11.56 ? ? ? ? ? ? 796 GLY B O 1
+ATOM 4848 N N . PHE B 1 307 ? -3.427 25.802 70.143 1.00 10.22 ? ? ? ? ? ? 797 PHE B N 1
+ATOM 4849 C CA . PHE B 1 307 ? -4.438 25.471 71.152 1.00 10.47 ? ? ? ? ? ? 797 PHE B CA 1
+ATOM 4850 C C . PHE B 1 307 ? -5.055 24.081 70.936 1.00 11.11 ? ? ? ? ? ? 797 PHE B C 1
+ATOM 4851 O O . PHE B 1 307 ? -5.619 23.506 71.865 1.00 12.17 ? ? ? ? ? ? 797 PHE B O 1
+ATOM 4852 C CB . PHE B 1 307 ? -5.500 26.558 71.296 1.00 10.07 ? ? ? ? ? ? 797 PHE B CB 1
+ATOM 4853 C CG . PHE B 1 307 ? -6.307 26.813 70.056 1.00 11.57 ? ? ? ? ? ? 797 PHE B CG 1
+ATOM 4854 C CD1 . PHE B 1 307 ? -5.892 27.778 69.134 1.00 12.54 ? ? ? ? ? ? 797 PHE B CD1 1
+ATOM 4855 C CD2 . PHE B 1 307 ? -7.500 26.127 69.824 1.00 12.64 ? ? ? ? ? ? 797 PHE B CD2 1
+ATOM 4856 C CE1 . PHE B 1 307 ? -6.656 28.063 67.996 1.00 12.91 ? ? ? ? ? ? 797 PHE B CE1 1
+ATOM 4857 C CE2 . PHE B 1 307 ? -8.278 26.405 68.677 1.00 13.41 ? ? ? ? ? ? 797 PHE B CE2 1
+ATOM 4858 C CZ . PHE B 1 307 ? -7.839 27.383 67.768 1.00 13.02 ? ? ? ? ? ? 797 PHE B CZ 1
+ATOM 4859 N N . THR B 1 308 ? -4.929 23.524 69.735 1.00 10.30 ? ? ? ? ? ? 798 THR B N 1
+ATOM 4860 C CA . THR B 1 308 ? -5.455 22.184 69.458 1.00 11.03 ? ? ? ? ? ? 798 THR B CA 1
+ATOM 4861 C C . THR B 1 308 ? -4.378 21.200 69.012 1.00 11.46 ? ? ? ? ? ? 798 THR B C 1
+ATOM 4862 O O . THR B 1 308 ? -3.500 21.535 68.210 1.00 11.08 ? ? ? ? ? ? 798 THR B O 1
+ATOM 4863 C CB . THR B 1 308 ? -6.627 22.199 68.425 1.00 10.50 ? ? ? ? ? ? 798 THR B CB 1
+ATOM 4864 O OG1 . THR B 1 308 ? -6.972 20.858 68.104 1.00 11.94 ? ? ? ? ? ? 798 THR B OG1 1
+ATOM 4865 C CG2 . THR B 1 308 ? -6.234 22.921 67.103 1.00 11.96 ? ? ? ? ? ? 798 THR B CG2 1
+ATOM 4866 N N . ASP B 1 309 ? -4.416 19.989 69.559 1.00 12.04 ? ? ? ? ? ? 799 ASP B N 1
+ATOM 4867 C CA . ASP B 1 309 ? -3.458 18.941 69.197 1.00 13.36 ? ? ? ? ? ? 799 ASP B CA 1
+ATOM 4868 C C . ASP B 1 309 ? -3.493 18.599 67.710 1.00 13.69 ? ? ? ? ? ? 799 ASP B C 1
+ATOM 4869 O O . ASP B 1 309 ? -2.619 17.874 67.223 1.00 14.84 ? ? ? ? ? ? 799 ASP B O 1
+ATOM 4870 C CB . ASP B 1 309 ? -3.707 17.653 70.003 1.00 13.03 ? ? ? ? ? ? 799 ASP B CB 1
+ATOM 4871 C CG . ASP B 1 309 ? -3.376 17.808 71.476 1.00 14.37 ? ? ? ? ? ? 799 ASP B CG 1
+ATOM 4872 O OD1 . ASP B 1 309 ? -2.672 18.771 71.858 1.00 13.46 ? ? ? ? ? ? 799 ASP B OD1 1
+ATOM 4873 O OD2 . ASP B 1 309 ? -3.821 16.937 72.258 1.00 15.05 ? ? ? ? ? ? 799 ASP B OD2 1
+ATOM 4874 N N . LYS B 1 310 ? -4.535 19.051 67.012 1.00 14.32 ? ? ? ? ? ? 800 LYS B N 1
+ATOM 4875 C CA . LYS B 1 310 ? -4.644 18.827 65.563 1.00 15.02 ? ? ? ? ? ? 800 LYS B CA 1
+ATOM 4876 C C . LYS B 1 310 ? -3.525 19.581 64.774 1.00 15.94 ? ? ? ? ? ? 800 LYS B C 1
+ATOM 4877 O O . LYS B 1 310 ? -3.046 19.098 63.744 1.00 16.72 ? ? ? ? ? ? 800 LYS B O 1
+ATOM 4878 C CB . LYS B 1 310 ? -6.006 19.305 65.085 1.00 16.19 ? ? ? ? ? ? 800 LYS B CB 1
+ATOM 4879 C CG . LYS B 1 310 ? -6.331 18.996 63.633 1.00 17.38 ? ? ? ? ? ? 800 LYS B CG 1
+ATOM 4880 C CD . LYS B 1 310 ? -7.754 19.402 63.360 1.00 18.95 ? ? ? ? ? ? 800 LYS B CD 1
+ATOM 4881 C CE . LYS B 1 310 ? -8.214 18.922 62.004 1.00 21.14 ? ? ? ? ? ? 800 LYS B CE 1
+ATOM 4882 N NZ . LYS B 1 310 ? -9.547 19.507 61.636 1.00 23.77 ? ? ? ? ? ? 800 LYS B NZ 1
+ATOM 4883 N N . TYR B 1 311 ? -3.087 20.737 65.274 1.00 15.47 ? ? ? ? ? ? 801 TYR B N 1
+ATOM 4884 C CA . TYR B 1 311 ? -2.051 21.529 64.590 1.00 14.06 ? ? ? ? ? ? 801 TYR B CA 1
+ATOM 4885 C C . TYR B 1 311 ? -0.923 21.860 65.546 1.00 14.12 ? ? ? ? ? ? 801 TYR B C 1
+ATOM 4886 O O . TYR B 1 311 ? -1.091 22.710 66.440 1.00 13.84 ? ? ? ? ? ? 801 TYR B O 1
+ATOM 4887 C CB . TYR B 1 311 ? -2.638 22.832 64.043 1.00 13.16 ? ? ? ? ? ? 801 TYR B CB 1
+ATOM 4888 C CG . TYR B 1 311 ? -3.825 22.640 63.127 1.00 12.66 ? ? ? ? ? ? 801 TYR B CG 1
+ATOM 4889 C CD1 . TYR B 1 311 ? -3.677 22.070 61.858 1.00 13.56 ? ? ? ? ? ? 801 TYR B CD1 1
+ATOM 4890 C CD2 . TYR B 1 311 ? -5.089 23.007 63.538 1.00 12.59 ? ? ? ? ? ? 801 TYR B CD2 1
+ATOM 4891 C CE1 . TYR B 1 311 ? -4.797 21.872 61.019 1.00 13.37 ? ? ? ? ? ? 801 TYR B CE1 1
+ATOM 4892 C CE2 . TYR B 1 311 ? -6.194 22.823 62.730 1.00 13.14 ? ? ? ? ? ? 801 TYR B CE2 1
+ATOM 4893 C CZ . TYR B 1 311 ? -6.052 22.256 61.471 1.00 12.89 ? ? ? ? ? ? 801 TYR B CZ 1
+ATOM 4894 O OH . TYR B 1 311 ? -7.176 22.107 60.697 1.00 13.83 ? ? ? ? ? ? 801 TYR B OH 1
+ATOM 4895 N N . THR B 1 312 ? 0.211 21.177 65.374 1.00 14.89 ? ? ? ? ? ? 802 THR B N 1
+ATOM 4896 C CA . THR B 1 312 ? 1.389 21.405 66.214 1.00 15.78 ? ? ? ? ? ? 802 THR B CA 1
+ATOM 4897 C C . THR B 1 312 ? 2.699 20.926 65.585 1.00 16.56 ? ? ? ? ? ? 802 THR B C 1
+ATOM 4898 O O . THR B 1 312 ? 2.750 19.895 64.927 1.00 16.66 ? ? ? ? ? ? 802 THR B O 1
+ATOM 4899 C CB . THR B 1 312 ? 1.233 20.786 67.650 1.00 15.47 ? ? ? ? ? ? 802 THR B CB 1
+ATOM 4900 O OG1 . THR B 1 312 ? 2.484 20.925 68.351 1.00 15.40 ? ? ? ? ? ? 802 THR B OG1 1
+ATOM 4901 C CG2 . THR B 1 312 ? 0.827 19.306 67.583 1.00 14.22 ? ? ? ? ? ? 802 THR B CG2 1
+ATOM 4902 N N . TRP B 1 313 ? 3.760 21.688 65.818 1.00 17.57 ? ? ? ? ? ? 803 TRP B N 1
+ATOM 4903 C CA . TRP B 1 313 ? 5.082 21.363 65.286 1.00 19.37 ? ? ? ? ? ? 803 TRP B CA 1
+ATOM 4904 C C . TRP B 1 313 ? 5.791 20.230 66.063 1.00 20.30 ? ? ? ? ? ? 803 TRP B C 1
+ATOM 4905 O O . TRP B 1 313 ? 6.753 19.645 65.565 1.00 20.42 ? ? ? ? ? ? 803 TRP B O 1
+ATOM 4906 C CB . TRP B 1 313 ? 5.982 22.614 65.333 1.00 19.81 ? ? ? ? ? ? 803 TRP B CB 1
+ATOM 4907 C CG . TRP B 1 313 ? 6.433 22.992 66.735 1.00 20.80 ? ? ? ? ? ? 803 TRP B CG 1
+ATOM 4908 C CD1 . TRP B 1 313 ? 5.634 23.220 67.837 1.00 20.26 ? ? ? ? ? ? 803 TRP B CD1 1
+ATOM 4909 C CD2 . TRP B 1 313 ? 7.782 23.167 67.183 1.00 22.32 ? ? ? ? ? ? 803 TRP B CD2 1
+ATOM 4910 N NE1 . TRP B 1 313 ? 6.409 23.519 68.929 1.00 20.02 ? ? ? ? ? ? 803 TRP B NE1 1
+ATOM 4911 C CE2 . TRP B 1 313 ? 7.728 23.494 68.564 1.00 22.08 ? ? ? ? ? ? 803 TRP B CE2 1
+ATOM 4912 C CE3 . TRP B 1 313 ? 9.039 23.086 66.553 1.00 23.62 ? ? ? ? ? ? 803 TRP B CE3 1
+ATOM 4913 C CZ2 . TRP B 1 313 ? 8.891 23.735 69.333 1.00 23.52 ? ? ? ? ? ? 803 TRP B CZ2 1
+ATOM 4914 C CZ3 . TRP B 1 313 ? 10.195 23.333 67.316 1.00 24.55 ? ? ? ? ? ? 803 TRP B CZ3 1
+ATOM 4915 C CH2 . TRP B 1 313 ? 10.108 23.652 68.697 1.00 24.30 ? ? ? ? ? ? 803 TRP B CH2 1
+ATOM 4916 N N . ILE B 1 314 ? 5.318 19.923 67.273 1.00 21.12 ? ? ? ? ? ? 804 ILE B N 1
+ATOM 4917 C CA . ILE B 1 314 ? 5.970 18.921 68.134 1.00 20.98 ? ? ? ? ? ? 804 ILE B CA 1
+ATOM 4918 C C . ILE B 1 314 ? 6.266 17.526 67.566 1.00 22.84 ? ? ? ? ? ? 804 ILE B C 1
+ATOM 4919 O O . ILE B 1 314 ? 7.415 17.116 67.555 1.00 23.13 ? ? ? ? ? ? 804 ILE B O 1
+ATOM 4920 C CB . ILE B 1 314 ? 5.247 18.809 69.507 1.00 19.92 ? ? ? ? ? ? 804 ILE B CB 1
+ATOM 4921 C CG1 . ILE B 1 314 ? 5.380 20.128 70.275 1.00 18.56 ? ? ? ? ? ? 804 ILE B CG1 1
+ATOM 4922 C CG2 . ILE B 1 314 ? 5.813 17.651 70.324 1.00 19.45 ? ? ? ? ? ? 804 ILE B CG2 1
+ATOM 4923 C CD1 . ILE B 1 314 ? 6.790 20.518 70.613 1.00 18.51 ? ? ? ? ? ? 804 ILE B CD1 1
+ATOM 4924 N N . PRO B 1 315 ? 5.248 16.788 67.082 1.00 25.30 ? ? ? ? ? ? 805 PRO B N 1
+ATOM 4925 C CA . PRO B 1 315 ? 5.444 15.437 66.525 1.00 27.68 ? ? ? ? ? ? 805 PRO B CA 1
+ATOM 4926 C C . PRO B 1 315 ? 6.494 15.284 65.399 1.00 29.75 ? ? ? ? ? ? 805 PRO B C 1
+ATOM 4927 O O . PRO B 1 315 ? 7.156 14.236 65.288 1.00 30.66 ? ? ? ? ? ? 805 PRO B O 1
+ATOM 4928 C CB . PRO B 1 315 ? 4.046 15.080 65.997 1.00 27.28 ? ? ? ? ? ? 805 PRO B CB 1
+ATOM 4929 C CG . PRO B 1 315 ? 3.126 15.841 66.888 1.00 27.38 ? ? ? ? ? ? 805 PRO B CG 1
+ATOM 4930 C CD . PRO B 1 315 ? 3.822 17.171 67.012 1.00 26.60 ? ? ? ? ? ? 805 PRO B CD 1
+ATOM 4931 N N . GLY B 1 316 ? 6.596 16.306 64.548 1.00 31.03 ? ? ? ? ? ? 806 GLY B N 1
+ATOM 4932 C CA . GLY B 1 316 ? 7.527 16.275 63.434 1.00 32.01 ? ? ? ? ? ? 806 GLY B CA 1
+ATOM 4933 C C . GLY B 1 316 ? 8.925 16.603 63.871 1.00 32.94 ? ? ? ? ? ? 806 GLY B C 1
+ATOM 4934 O O . GLY B 1 316 ? 9.890 16.026 63.361 1.00 34.39 ? ? ? ? ? ? 806 GLY B O 1
+ATOM 4935 N N . THR B 1 317 ? 9.028 17.481 64.862 1.00 32.98 ? ? ? ? ? ? 807 THR B N 1
+ATOM 4936 C CA . THR B 1 317 ? 10.317 17.915 65.374 1.00 33.29 ? ? ? ? ? ? 807 THR B CA 1
+ATOM 4937 C C . THR B 1 317 ? 10.863 17.024 66.486 1.00 32.68 ? ? ? ? ? ? 807 THR B C 1
+ATOM 4938 O O . THR B 1 317 ? 12.078 16.842 66.573 1.00 32.75 ? ? ? ? ? ? 807 THR B O 1
+ATOM 4939 C CB . THR B 1 317 ? 10.235 19.380 65.855 1.00 34.33 ? ? ? ? ? ? 807 THR B CB 1
+ATOM 4940 O OG1 . THR B 1 317 ? 9.711 20.191 64.794 1.00 35.43 ? ? ? ? ? ? 807 THR B OG1 1
+ATOM 4941 C CG2 . THR B 1 317 ? 11.613 19.913 66.263 1.00 34.66 ? ? ? ? ? ? 807 THR B CG2 1
+ATOM 4942 N N . PHE B 1 318 ? 9.971 16.483 67.324 1.00 31.92 ? ? ? ? ? ? 808 PHE B N 1
+ATOM 4943 C CA . PHE B 1 318 ? 10.337 15.587 68.444 1.00 31.68 ? ? ? ? ? ? 808 PHE B CA 1
+ATOM 4944 C C . PHE B 1 318 ? 9.609 14.276 68.259 1.00 31.40 ? ? ? ? ? ? 808 PHE B C 1
+ATOM 4945 O O . PHE B 1 318 ? 8.563 14.043 68.865 1.00 30.57 ? ? ? ? ? ? 808 PHE B O 1
+ATOM 4946 C CB . PHE B 1 318 ? 9.911 16.149 69.811 1.00 31.77 ? ? ? ? ? ? 808 PHE B CB 1
+ATOM 4947 C CG . PHE B 1 318 ? 10.411 17.514 70.081 1.00 31.96 ? ? ? ? ? ? 808 PHE B CG 1
+ATOM 4948 C CD1 . PHE B 1 318 ? 11.698 17.707 70.552 1.00 31.92 ? ? ? ? ? ? 808 PHE B CD1 1
+ATOM 4949 C CD2 . PHE B 1 318 ? 9.605 18.621 69.827 1.00 32.32 ? ? ? ? ? ? 808 PHE B CD2 1
+ATOM 4950 C CE1 . PHE B 1 318 ? 12.182 18.994 70.765 1.00 32.91 ? ? ? ? ? ? 808 PHE B CE1 1
+ATOM 4951 C CE2 . PHE B 1 318 ? 10.077 19.905 70.037 1.00 32.92 ? ? ? ? ? ? 808 PHE B CE2 1
+ATOM 4952 C CZ . PHE B 1 318 ? 11.370 20.099 70.506 1.00 32.77 ? ? ? ? ? ? 808 PHE B CZ 1
+ATOM 4953 N N . PRO B 1 319 ? 10.136 13.403 67.398 1.00 32.31 ? ? ? ? ? ? 809 PRO B N 1
+ATOM 4954 C CA . PRO B 1 319 ? 9.504 12.104 67.148 1.00 32.09 ? ? ? ? ? ? 809 PRO B CA 1
+ATOM 4955 C C . PRO B 1 319 ? 9.267 11.323 68.451 1.00 31.24 ? ? ? ? ? ? 809 PRO B C 1
+ATOM 4956 O O . PRO B 1 319 ? 10.145 11.253 69.324 1.00 31.30 ? ? ? ? ? ? 809 PRO B O 1
+ATOM 4957 C CB . PRO B 1 319 ? 10.522 11.407 66.239 1.00 32.94 ? ? ? ? ? ? 809 PRO B CB 1
+ATOM 4958 C CG . PRO B 1 319 ? 11.161 12.560 65.492 1.00 33.18 ? ? ? ? ? ? 809 PRO B CG 1
+ATOM 4959 C CD . PRO B 1 319 ? 11.362 13.569 66.591 1.00 32.99 ? ? ? ? ? ? 809 PRO B CD 1
+ATOM 4960 N N . GLY B 1 320 ? 8.071 10.755 68.576 1.00 30.21 ? ? ? ? ? ? 810 GLY B N 1
+ATOM 4961 C CA . GLY B 1 320 ? 7.739 10.007 69.771 1.00 29.70 ? ? ? ? ? ? 810 GLY B CA 1
+ATOM 4962 C C . GLY B 1 320 ? 7.009 10.834 70.821 1.00 29.12 ? ? ? ? ? ? 810 GLY B C 1
+ATOM 4963 O O . GLY B 1 320 ? 6.656 10.304 71.874 1.00 29.39 ? ? ? ? ? ? 810 GLY B O 1
+ATOM 4964 N N . TYR B 1 321 ? 6.803 12.125 70.553 1.00 26.89 ? ? ? ? ? ? 811 TYR B N 1
+ATOM 4965 C CA . TYR B 1 321 ? 6.101 13.017 71.467 1.00 24.69 ? ? ? ? ? ? 811 TYR B CA 1
+ATOM 4966 C C . TYR B 1 321 ? 4.884 13.623 70.765 1.00 23.98 ? ? ? ? ? ? 811 TYR B C 1
+ATOM 4967 O O . TYR B 1 321 ? 4.852 13.732 69.541 1.00 24.55 ? ? ? ? ? ? 811 TYR B O 1
+ATOM 4968 C CB . TYR B 1 321 ? 7.022 14.139 71.912 1.00 24.94 ? ? ? ? ? ? 811 TYR B CB 1
+ATOM 4969 C CG . TYR B 1 321 ? 8.024 13.720 72.937 1.00 26.32 ? ? ? ? ? ? 811 TYR B CG 1
+ATOM 4970 C CD1 . TYR B 1 321 ? 9.213 13.124 72.558 1.00 28.16 ? ? ? ? ? ? 811 TYR B CD1 1
+ATOM 4971 C CD2 . TYR B 1 321 ? 7.788 13.912 74.287 1.00 26.95 ? ? ? ? ? ? 811 TYR B CD2 1
+ATOM 4972 C CE1 . TYR B 1 321 ? 10.151 12.721 73.500 1.00 29.23 ? ? ? ? ? ? 811 TYR B CE1 1
+ATOM 4973 C CE2 . TYR B 1 321 ? 8.716 13.515 75.237 1.00 28.37 ? ? ? ? ? ? 811 TYR B CE2 1
+ATOM 4974 C CZ . TYR B 1 321 ? 9.898 12.916 74.841 1.00 29.23 ? ? ? ? ? ? 811 TYR B CZ 1
+ATOM 4975 O OH . TYR B 1 321 ? 10.828 12.478 75.774 1.00 31.35 ? ? ? ? ? ? 811 TYR B OH 1
+ATOM 4976 N N . GLY B 1 322 ? 3.895 14.043 71.541 1.00 21.75 ? ? ? ? ? ? 812 GLY B N 1
+ATOM 4977 C CA . GLY B 1 322 ? 2.717 14.635 70.956 1.00 19.68 ? ? ? ? ? ? 812 GLY B CA 1
+ATOM 4978 C C . GLY B 1 322 ? 1.759 15.171 71.995 1.00 17.54 ? ? ? ? ? ? 812 GLY B C 1
+ATOM 4979 O O . GLY B 1 322 ? 2.151 15.426 73.141 1.00 16.68 ? ? ? ? ? ? 812 GLY B O 1
+ATOM 4980 N N . ASN B 1 323 ? 0.522 15.408 71.552 1.00 17.30 ? ? ? ? ? ? 813 ASN B N 1
+ATOM 4981 C CA . ASN B 1 323 ? -0.588 15.922 72.373 1.00 17.61 ? ? ? ? ? ? 813 ASN B CA 1
+ATOM 4982 C C . ASN B 1 323 ? -0.136 16.941 73.398 1.00 16.29 ? ? ? ? ? ? 813 ASN B C 1
+ATOM 4983 O O . ASN B 1 323 ? -0.463 16.823 74.577 1.00 15.44 ? ? ? ? ? ? 813 ASN B O 1
+ATOM 4984 C CB . ASN B 1 323 ? -1.273 14.747 73.061 1.00 20.42 ? ? ? ? ? ? 813 ASN B CB 1
+ATOM 4985 C CG . ASN B 1 323 ? -1.817 13.734 72.059 1.00 23.17 ? ? ? ? ? ? 813 ASN B CG 1
+ATOM 4986 O OD1 . ASN B 1 323 ? -1.592 12.535 72.201 1.00 26.16 ? ? ? ? ? ? 813 ASN B OD1 1
+ATOM 4987 N ND2 . ASN B 1 323 ? -2.488 14.218 71.012 1.00 24.03 ? ? ? ? ? ? 813 ASN B ND2 1
+ATOM 4988 N N . PRO B 1 324 ? 0.433 18.070 72.921 1.00 14.90 ? ? ? ? ? ? 814 PRO B N 1
+ATOM 4989 C CA . PRO B 1 324 ? 0.954 19.122 73.798 1.00 13.23 ? ? ? ? ? ? 814 PRO B CA 1
+ATOM 4990 C C . PRO B 1 324 ? 0.083 20.288 74.245 1.00 11.85 ? ? ? ? ? ? 814 PRO B C 1
+ATOM 4991 O O . PRO B 1 324 ? 0.526 21.079 75.081 1.00 11.52 ? ? ? ? ? ? 814 PRO B O 1
+ATOM 4992 C CB . PRO B 1 324 ? 2.133 19.685 72.965 1.00 13.04 ? ? ? ? ? ? 814 PRO B CB 1
+ATOM 4993 C CG . PRO B 1 324 ? 2.069 18.949 71.596 1.00 13.90 ? ? ? ? ? ? 814 PRO B CG 1
+ATOM 4994 C CD . PRO B 1 324 ? 0.665 18.434 71.511 1.00 14.00 ? ? ? ? ? ? 814 PRO B CD 1
+ATOM 4995 N N . LEU B 1 325 ? -1.148 20.360 73.735 1.00 11.48 ? ? ? ? ? ? 815 LEU B N 1
+ATOM 4996 C CA . LEU B 1 325 ? -2.004 21.525 73.935 1.00 11.95 ? ? ? ? ? ? 815 LEU B CA 1
+ATOM 4997 C C . LEU B 1 325 ? -3.287 21.353 74.752 1.00 12.39 ? ? ? ? ? ? 815 LEU B C 1
+ATOM 4998 O O . LEU B 1 325 ? -3.541 20.290 75.290 1.00 12.46 ? ? ? ? ? ? 815 LEU B O 1
+ATOM 4999 C CB . LEU B 1 325 ? -2.255 22.173 72.539 1.00 12.42 ? ? ? ? ? ? 815 LEU B CB 1
+ATOM 5000 C CG . LEU B 1 325 ? -0.948 22.398 71.733 1.00 12.81 ? ? ? ? ? ? 815 LEU B CG 1
+ATOM 5001 C CD1 . LEU B 1 325 ? -1.218 22.657 70.227 1.00 12.19 ? ? ? ? ? ? 815 LEU B CD1 1
+ATOM 5002 C CD2 . LEU B 1 325 ? -0.123 23.501 72.377 1.00 12.72 ? ? ? ? ? ? 815 LEU B CD2 1
+ATOM 5003 N N . ILE B 1 326 ? -4.102 22.399 74.830 1.00 12.45 ? ? ? ? ? ? 816 ILE B N 1
+ATOM 5004 C CA . ILE B 1 326 ? -5.288 22.344 75.700 1.00 12.32 ? ? ? ? ? ? 816 ILE B CA 1
+ATOM 5005 C C . ILE B 1 326 ? -6.593 21.766 75.170 1.00 13.12 ? ? ? ? ? ? 816 ILE B C 1
+ATOM 5006 O O . ILE B 1 326 ? -7.504 21.516 75.958 1.00 12.16 ? ? ? ? ? ? 816 ILE B O 1
+ATOM 5007 C CB . ILE B 1 326 ? -5.505 23.674 76.426 1.00 11.35 ? ? ? ? ? ? 816 ILE B CB 1
+ATOM 5008 C CG1 . ILE B 1 326 ? -5.921 24.777 75.442 1.00 11.75 ? ? ? ? ? ? 816 ILE B CG1 1
+ATOM 5009 C CG2 . ILE B 1 326 ? -4.204 24.049 77.156 1.00 11.91 ? ? ? ? ? ? 816 ILE B CG2 1
+ATOM 5010 C CD1 . ILE B 1 326 ? -6.129 26.135 76.091 1.00 11.96 ? ? ? ? ? ? 816 ILE B CD1 1
+ATOM 5011 N N . TYR B 1 327 ? -6.705 21.629 73.845 1.00 12.59 ? ? ? ? ? ? 817 TYR B N 1
+ATOM 5012 C CA . TYR B 1 327 ? -7.879 21.021 73.200 1.00 13.02 ? ? ? ? ? ? 817 TYR B CA 1
+ATOM 5013 C C . TYR B 1 327 ? -7.342 19.823 72.445 1.00 13.70 ? ? ? ? ? ? 817 TYR B C 1
+ATOM 5014 O O . TYR B 1 327 ? -6.225 19.879 71.917 1.00 13.00 ? ? ? ? ? ? 817 TYR B O 1
+ATOM 5015 C CB . TYR B 1 327 ? -8.554 21.954 72.183 1.00 11.95 ? ? ? ? ? ? 817 TYR B CB 1
+ATOM 5016 C CG . TYR B 1 327 ? -9.378 23.065 72.777 1.00 12.46 ? ? ? ? ? ? 817 TYR B CG 1
+ATOM 5017 C CD1 . TYR B 1 327 ? -8.806 24.283 73.106 1.00 12.87 ? ? ? ? ? ? 817 TYR B CD1 1
+ATOM 5018 C CD2 . TYR B 1 327 ? -10.738 22.916 72.975 1.00 13.28 ? ? ? ? ? ? 817 TYR B CD2 1
+ATOM 5019 C CE1 . TYR B 1 327 ? -9.566 25.330 73.613 1.00 14.08 ? ? ? ? ? ? 817 TYR B CE1 1
+ATOM 5020 C CE2 . TYR B 1 327 ? -11.519 23.965 73.485 1.00 14.49 ? ? ? ? ? ? 817 TYR B CE2 1
+ATOM 5021 C CZ . TYR B 1 327 ? -10.922 25.169 73.800 1.00 14.41 ? ? ? ? ? ? 817 TYR B CZ 1
+ATOM 5022 O OH . TYR B 1 327 ? -11.678 26.214 74.293 1.00 17.30 ? ? ? ? ? ? 817 TYR B OH 1
+ATOM 5023 N N . ASP B 1 328 ? -8.104 18.728 72.381 1.00 14.85 ? ? ? ? ? ? 818 ASP B N 1
+ATOM 5024 C CA . ASP B 1 328 ? -7.616 17.563 71.643 1.00 16.43 ? ? ? ? ? ? 818 ASP B CA 1
+ATOM 5025 C C . ASP B 1 328 ? -7.846 17.760 70.130 1.00 16.31 ? ? ? ? ? ? 818 ASP B C 1
+ATOM 5026 O O . ASP B 1 328 ? -8.350 18.805 69.716 1.00 15.53 ? ? ? ? ? ? 818 ASP B O 1
+ATOM 5027 C CB . ASP B 1 328 ? -8.186 16.235 72.200 1.00 18.38 ? ? ? ? ? ? 818 ASP B CB 1
+ATOM 5028 C CG . ASP B 1 328 ? -9.694 16.070 71.981 1.00 21.65 ? ? ? ? ? ? 818 ASP B CG 1
+ATOM 5029 O OD1 . ASP B 1 328 ? -10.273 16.729 71.090 1.00 21.34 ? ? ? ? ? ? 818 ASP B OD1 1
+ATOM 5030 O OD2 . ASP B 1 328 ? -10.320 15.247 72.704 1.00 22.85 ? ? ? ? ? ? 818 ASP B OD2 1
+ATOM 5031 N N . SER B 1 329 ? -7.494 16.775 69.314 1.00 17.84 ? ? ? ? ? ? 819 SER B N 1
+ATOM 5032 C CA . SER B 1 329 ? -7.662 16.894 67.858 1.00 20.05 ? ? ? ? ? ? 819 SER B CA 1
+ATOM 5033 C C . SER B 1 329 ? -9.087 16.963 67.328 1.00 19.93 ? ? ? ? ? ? 819 SER B C 1
+ATOM 5034 O O . SER B 1 329 ? -9.294 17.194 66.153 1.00 20.99 ? ? ? ? ? ? 819 SER B O 1
+ATOM 5035 C CB . SER B 1 329 ? -6.882 15.795 67.147 1.00 21.39 ? ? ? ? ? ? 819 SER B CB 1
+ATOM 5036 O OG . SER B 1 329 ? -7.140 14.537 67.749 1.00 24.71 ? ? ? ? ? ? 819 SER B OG 1
+ATOM 5037 N N . ASN B 1 330 ? -10.069 16.758 68.197 1.00 21.12 ? ? ? ? ? ? 820 ASN B N 1
+ATOM 5038 C CA . ASN B 1 330 ? -11.488 16.839 67.829 1.00 22.22 ? ? ? ? ? ? 820 ASN B CA 1
+ATOM 5039 C C . ASN B 1 330 ? -12.129 18.084 68.452 1.00 21.08 ? ? ? ? ? ? 820 ASN B C 1
+ATOM 5040 O O . ASN B 1 330 ? -13.359 18.221 68.466 1.00 22.16 ? ? ? ? ? ? 820 ASN B O 1
+ATOM 5041 C CB . ASN B 1 330 ? -12.253 15.598 68.320 1.00 25.06 ? ? ? ? ? ? 820 ASN B CB 1
+ATOM 5042 C CG . ASN B 1 330 ? -11.766 14.302 67.670 1.00 27.40 ? ? ? ? ? ? 820 ASN B CG 1
+ATOM 5043 O OD1 . ASN B 1 330 ? -11.707 14.190 66.445 1.00 29.11 ? ? ? ? ? ? 820 ASN B OD1 1
+ATOM 5044 N ND2 . ASN B 1 330 ? -11.420 13.310 68.499 1.00 29.44 ? ? ? ? ? ? 820 ASN B ND2 1
+ATOM 5045 N N . TYR B 1 331 ? -11.291 18.988 68.967 1.00 19.08 ? ? ? ? ? ? 821 TYR B N 1
+ATOM 5046 C CA . TYR B 1 331 ? -11.729 20.226 69.622 1.00 18.23 ? ? ? ? ? ? 821 TYR B CA 1
+ATOM 5047 C C . TYR B 1 331 ? -12.476 20.047 70.959 1.00 18.48 ? ? ? ? ? ? 821 TYR B C 1
+ATOM 5048 O O . TYR B 1 331 ? -13.281 20.892 71.362 1.00 17.31 ? ? ? ? ? ? 821 TYR B O 1
+ATOM 5049 C CB . TYR B 1 331 ? -12.497 21.139 68.654 1.00 17.94 ? ? ? ? ? ? 821 TYR B CB 1
+ATOM 5050 C CG . TYR B 1 331 ? -11.631 21.643 67.517 1.00 18.24 ? ? ? ? ? ? 821 TYR B CG 1
+ATOM 5051 C CD1 . TYR B 1 331 ? -10.721 22.692 67.716 1.00 17.86 ? ? ? ? ? ? 821 TYR B CD1 1
+ATOM 5052 C CD2 . TYR B 1 331 ? -11.696 21.053 66.242 1.00 18.01 ? ? ? ? ? ? 821 TYR B CD2 1
+ATOM 5053 C CE1 . TYR B 1 331 ? -9.897 23.143 66.667 1.00 17.54 ? ? ? ? ? ? 821 TYR B CE1 1
+ATOM 5054 C CE2 . TYR B 1 331 ? -10.872 21.493 65.193 1.00 17.47 ? ? ? ? ? ? 821 TYR B CE2 1
+ATOM 5055 C CZ . TYR B 1 331 ? -9.982 22.540 65.427 1.00 17.99 ? ? ? ? ? ? 821 TYR B CZ 1
+ATOM 5056 O OH . TYR B 1 331 ? -9.181 22.995 64.420 1.00 18.19 ? ? ? ? ? ? 821 TYR B OH 1
+ATOM 5057 N N . ASN B 1 332 ? -12.185 18.943 71.650 1.00 18.75 ? ? ? ? ? ? 822 ASN B N 1
+ATOM 5058 C CA . ASN B 1 332 ? -12.779 18.709 72.975 1.00 19.28 ? ? ? ? ? ? 822 ASN B CA 1
+ATOM 5059 C C . ASN B 1 332 ? -11.754 19.255 73.981 1.00 17.43 ? ? ? ? ? ? 822 ASN B C 1
+ATOM 5060 O O . ASN B 1 332 ? -10.556 18.973 73.854 1.00 17.13 ? ? ? ? ? ? 822 ASN B O 1
+ATOM 5061 C CB . ASN B 1 332 ? -12.917 17.200 73.285 1.00 21.82 ? ? ? ? ? ? 822 ASN B CB 1
+ATOM 5062 C CG . ASN B 1 332 ? -13.819 16.452 72.315 1.00 24.37 ? ? ? ? ? ? 822 ASN B CG 1
+ATOM 5063 O OD1 . ASN B 1 332 ? -14.943 16.859 72.065 1.00 25.89 ? ? ? ? ? ? 822 ASN B OD1 1
+ATOM 5064 N ND2 . ASN B 1 332 ? -13.328 15.324 71.792 1.00 26.55 ? ? ? ? ? ? 822 ASN B ND2 1
+ATOM 5065 N N . PRO B 1 333 ? -12.198 20.026 74.996 1.00 17.57 ? ? ? ? ? ? 823 PRO B N 1
+ATOM 5066 C CA . PRO B 1 333 ? -11.224 20.539 75.982 1.00 17.11 ? ? ? ? ? ? 823 PRO B CA 1
+ATOM 5067 C C . PRO B 1 333 ? -10.587 19.365 76.757 1.00 17.01 ? ? ? ? ? ? 823 PRO B C 1
+ATOM 5068 O O . PRO B 1 333 ? -11.275 18.399 77.153 1.00 17.73 ? ? ? ? ? ? 823 PRO B O 1
+ATOM 5069 C CB . PRO B 1 333 ? -12.087 21.355 76.953 1.00 17.95 ? ? ? ? ? ? 823 PRO B CB 1
+ATOM 5070 C CG . PRO B 1 333 ? -13.306 21.729 76.149 1.00 19.34 ? ? ? ? ? ? 823 PRO B CG 1
+ATOM 5071 C CD . PRO B 1 333 ? -13.566 20.505 75.288 1.00 18.84 ? ? ? ? ? ? 823 PRO B CD 1
+ATOM 5072 N N . LYS B 1 334 ? -9.278 19.426 76.925 1.00 14.87 ? ? ? ? ? ? 824 LYS B N 1
+ATOM 5073 C CA . LYS B 1 334 ? -8.536 18.431 77.675 1.00 13.87 ? ? ? ? ? ? 824 LYS B CA 1
+ATOM 5074 C C . LYS B 1 334 ? -8.486 18.897 79.151 1.00 13.32 ? ? ? ? ? ? 824 LYS B C 1
+ATOM 5075 O O . LYS B 1 334 ? -8.876 20.028 79.486 1.00 12.53 ? ? ? ? ? ? 824 LYS B O 1
+ATOM 5076 C CB . LYS B 1 334 ? -7.120 18.347 77.084 1.00 13.22 ? ? ? ? ? ? 824 LYS B CB 1
+ATOM 5077 C CG . LYS B 1 334 ? -7.124 17.753 75.712 1.00 14.11 ? ? ? ? ? ? 824 LYS B CG 1
+ATOM 5078 C CD . LYS B 1 334 ? -5.809 17.909 74.982 1.00 14.34 ? ? ? ? ? ? 824 LYS B CD 1
+ATOM 5079 C CE . LYS B 1 334 ? -4.653 17.378 75.786 1.00 14.18 ? ? ? ? ? ? 824 LYS B CE 1
+ATOM 5080 N NZ . LYS B 1 334 ? -3.327 17.574 75.095 1.00 13.36 ? ? ? ? ? ? 824 LYS B NZ 1
+ATOM 5081 N N . PRO B 1 335 ? -8.014 18.030 80.058 1.00 13.35 ? ? ? ? ? ? 825 PRO B N 1
+ATOM 5082 C CA . PRO B 1 335 ? -7.949 18.467 81.461 1.00 13.21 ? ? ? ? ? ? 825 PRO B CA 1
+ATOM 5083 C C . PRO B 1 335 ? -7.157 19.795 81.597 1.00 13.10 ? ? ? ? ? ? 825 PRO B C 1
+ATOM 5084 O O . PRO B 1 335 ? -7.528 20.660 82.400 1.00 13.72 ? ? ? ? ? ? 825 PRO B O 1
+ATOM 5085 C CB . PRO B 1 335 ? -7.209 17.306 82.143 1.00 13.95 ? ? ? ? ? ? 825 PRO B CB 1
+ATOM 5086 C CG . PRO B 1 335 ? -7.699 16.129 81.392 1.00 14.41 ? ? ? ? ? ? 825 PRO B CG 1
+ATOM 5087 C CD . PRO B 1 335 ? -7.685 16.600 79.929 1.00 13.57 ? ? ? ? ? ? 825 PRO B CD 1
+ATOM 5088 N N . ALA B 1 336 ? -6.107 19.974 80.787 1.00 11.95 ? ? ? ? ? ? 826 ALA B N 1
+ATOM 5089 C CA . ALA B 1 336 ? -5.297 21.194 80.843 1.00 12.05 ? ? ? ? ? ? 826 ALA B CA 1
+ATOM 5090 C C . ALA B 1 336 ? -6.130 22.475 80.691 1.00 12.16 ? ? ? ? ? ? 826 ALA B C 1
+ATOM 5091 O O . ALA B 1 336 ? -5.827 23.490 81.340 1.00 12.66 ? ? ? ? ? ? 826 ALA B O 1
+ATOM 5092 C CB . ALA B 1 336 ? -4.196 21.147 79.793 1.00 10.96 ? ? ? ? ? ? 826 ALA B CB 1
+ATOM 5093 N N . TYR B 1 337 ? -7.173 22.434 79.847 1.00 11.91 ? ? ? ? ? ? 827 TYR B N 1
+ATOM 5094 C CA . TYR B 1 337 ? -8.040 23.605 79.645 1.00 12.80 ? ? ? ? ? ? 827 TYR B CA 1
+ATOM 5095 C C . TYR B 1 337 ? -8.729 24.038 80.954 1.00 13.40 ? ? ? ? ? ? 827 TYR B C 1
+ATOM 5096 O O . TYR B 1 337 ? -8.669 25.208 81.352 1.00 13.91 ? ? ? ? ? ? 827 TYR B O 1
+ATOM 5097 C CB . TYR B 1 337 ? -9.085 23.324 78.544 1.00 12.99 ? ? ? ? ? ? 827 TYR B CB 1
+ATOM 5098 C CG . TYR B 1 337 ? -10.097 24.434 78.341 1.00 13.59 ? ? ? ? ? ? 827 TYR B CG 1
+ATOM 5099 C CD1 . TYR B 1 337 ? -11.264 24.495 79.111 1.00 13.68 ? ? ? ? ? ? 827 TYR B CD1 1
+ATOM 5100 C CD2 . TYR B 1 337 ? -9.880 25.455 77.390 1.00 13.71 ? ? ? ? ? ? 827 TYR B CD2 1
+ATOM 5101 C CE1 . TYR B 1 337 ? -12.182 25.538 78.953 1.00 14.46 ? ? ? ? ? ? 827 TYR B CE1 1
+ATOM 5102 C CE2 . TYR B 1 337 ? -10.809 26.517 77.223 1.00 13.60 ? ? ? ? ? ? 827 TYR B CE2 1
+ATOM 5103 C CZ . TYR B 1 337 ? -11.953 26.557 78.005 1.00 14.52 ? ? ? ? ? ? 827 TYR B CZ 1
+ATOM 5104 O OH . TYR B 1 337 ? -12.855 27.601 77.862 1.00 14.77 ? ? ? ? ? ? 827 TYR B OH 1
+ATOM 5105 N N . ASN B 1 338 ? -9.349 23.065 81.633 1.00 14.50 ? ? ? ? ? ? 828 ASN B N 1
+ATOM 5106 C CA . ASN B 1 338 ? -10.047 23.304 82.893 1.00 15.11 ? ? ? ? ? ? 828 ASN B CA 1
+ATOM 5107 C C . ASN B 1 338 ? -9.089 23.745 83.996 1.00 13.45 ? ? ? ? ? ? 828 ASN B C 1
+ATOM 5108 O O . ASN B 1 338 ? -9.409 24.659 84.776 1.00 15.04 ? ? ? ? ? ? 828 ASN B O 1
+ATOM 5109 C CB . ASN B 1 338 ? -10.786 22.026 83.327 1.00 16.82 ? ? ? ? ? ? 828 ASN B CB 1
+ATOM 5110 C CG . ASN B 1 338 ? -11.837 21.582 82.301 1.00 18.57 ? ? ? ? ? ? 828 ASN B CG 1
+ATOM 5111 O OD1 . ASN B 1 338 ? -12.602 22.410 81.802 1.00 20.27 ? ? ? ? ? ? 828 ASN B OD1 1
+ATOM 5112 N ND2 . ASN B 1 338 ? -11.851 20.293 81.961 1.00 18.96 ? ? ? ? ? ? 828 ASN B ND2 1
+ATOM 5113 N N . ALA B 1 339 ? -7.907 23.126 84.028 1.00 13.06 ? ? ? ? ? ? 829 ALA B N 1
+ATOM 5114 C CA . ALA B 1 339 ? -6.880 23.438 85.023 1.00 13.63 ? ? ? ? ? ? 829 ALA B CA 1
+ATOM 5115 C C . ALA B 1 339 ? -6.400 24.920 84.955 1.00 15.02 ? ? ? ? ? ? 829 ALA B C 1
+ATOM 5116 O O . ALA B 1 339 ? -6.244 25.590 85.985 1.00 15.49 ? ? ? ? ? ? 829 ALA B O 1
+ATOM 5117 C CB . ALA B 1 339 ? -5.733 22.492 84.885 1.00 13.76 ? ? ? ? ? ? 829 ALA B CB 1
+ATOM 5118 N N . ILE B 1 340 ? -6.211 25.446 83.740 1.00 14.74 ? ? ? ? ? ? 830 ILE B N 1
+ATOM 5119 C CA . ILE B 1 340 ? -5.801 26.835 83.573 1.00 14.70 ? ? ? ? ? ? 830 ILE B CA 1
+ATOM 5120 C C . ILE B 1 340 ? -6.945 27.727 84.041 1.00 14.57 ? ? ? ? ? ? 830 ILE B C 1
+ATOM 5121 O O . ILE B 1 340 ? -6.729 28.709 84.761 1.00 15.31 ? ? ? ? ? ? 830 ILE B O 1
+ATOM 5122 C CB . ILE B 1 340 ? -5.508 27.167 82.097 1.00 14.89 ? ? ? ? ? ? 830 ILE B CB 1
+ATOM 5123 C CG1 . ILE B 1 340 ? -4.290 26.391 81.605 1.00 15.56 ? ? ? ? ? ? 830 ILE B CG1 1
+ATOM 5124 C CG2 . ILE B 1 340 ? -5.310 28.682 81.932 1.00 15.58 ? ? ? ? ? ? 830 ILE B CG2 1
+ATOM 5125 C CD1 . ILE B 1 340 ? -4.022 26.563 80.130 1.00 14.61 ? ? ? ? ? ? 830 ILE B CD1 1
+ATOM 5126 N N . LYS B 1 341 ? -8.166 27.375 83.634 1.00 16.73 ? ? ? ? ? ? 831 LYS B N 1
+ATOM 5127 C CA . LYS B 1 341 ? -9.343 28.131 84.025 1.00 19.33 ? ? ? ? ? ? 831 LYS B CA 1
+ATOM 5128 C C . LYS B 1 341 ? -9.486 28.174 85.547 1.00 20.65 ? ? ? ? ? ? 831 LYS B C 1
+ATOM 5129 O O . LYS B 1 341 ? -9.744 29.232 86.119 1.00 20.20 ? ? ? ? ? ? 831 LYS B O 1
+ATOM 5130 C CB . LYS B 1 341 ? -10.602 27.569 83.374 1.00 20.56 ? ? ? ? ? ? 831 LYS B CB 1
+ATOM 5131 C CG . LYS B 1 341 ? -11.751 28.543 83.488 1.00 23.03 ? ? ? ? ? ? 831 LYS B CG 1
+ATOM 5132 C CD . LYS B 1 341 ? -12.956 28.188 82.609 1.00 24.21 ? ? ? ? ? ? 831 LYS B CD 1
+ATOM 5133 C CE . LYS B 1 341 ? -12.799 28.652 81.144 1.00 24.55 ? ? ? ? ? ? 831 LYS B CE 1
+ATOM 5134 N NZ . LYS B 1 341 ? -14.046 28.359 80.388 1.00 23.63 ? ? ? ? ? ? 831 LYS B NZ 1
+ATOM 5135 N N . GLU B 1 342 ? -9.266 27.049 86.220 1.00 22.27 ? ? ? ? ? ? 832 GLU B N 1
+ATOM 5136 C CA . GLU B 1 342 ? -9.357 27.087 87.670 1.00 25.20 ? ? ? ? ? ? 832 GLU B CA 1
+ATOM 5137 C C . GLU B 1 342 ? -8.202 27.859 88.319 1.00 24.81 ? ? ? ? ? ? 832 GLU B C 1
+ATOM 5138 O O . GLU B 1 342 ? -8.416 28.507 89.341 1.00 25.44 ? ? ? ? ? ? 832 GLU B O 1
+ATOM 5139 C CB . GLU B 1 342 ? -9.578 25.711 88.288 1.00 29.12 ? ? ? ? ? ? 832 GLU B CB 1
+ATOM 5140 C CG . GLU B 1 342 ? -8.550 24.666 87.997 1.00 33.16 ? ? ? ? ? ? 832 GLU B CG 1
+ATOM 5141 C CD . GLU B 1 342 ? -9.028 23.279 88.451 1.00 36.14 ? ? ? ? ? ? 832 GLU B CD 1
+ATOM 5142 O OE1 . GLU B 1 342 ? -10.268 23.039 88.437 1.00 38.01 ? ? ? ? ? ? 832 GLU B OE1 1
+ATOM 5143 O OE2 . GLU B 1 342 ? -8.171 22.431 88.805 1.00 36.98 ? ? ? ? ? ? 832 GLU B OE2 1
+ATOM 5144 N N . ALA B 1 343 ? -7.001 27.842 87.729 1.00 22.57 ? ? ? ? ? ? 833 ALA B N 1
+ATOM 5145 C CA . ALA B 1 343 ? -5.900 28.642 88.277 1.00 22.13 ? ? ? ? ? ? 833 ALA B CA 1
+ATOM 5146 C C . ALA B 1 343 ? -6.281 30.149 88.190 1.00 22.23 ? ? ? ? ? ? 833 ALA B C 1
+ATOM 5147 O O . ALA B 1 343 ? -5.885 30.949 89.044 1.00 22.19 ? ? ? ? ? ? 833 ALA B O 1
+ATOM 5148 C CB . ALA B 1 343 ? -4.587 28.366 87.522 1.00 21.19 ? ? ? ? ? ? 833 ALA B CB 1
+ATOM 5149 N N . LEU B 1 344 ? -7.082 30.520 87.192 1.00 22.57 ? ? ? ? ? ? 834 LEU B N 1
+ATOM 5150 C CA . LEU B 1 344 ? -7.511 31.913 87.012 1.00 24.54 ? ? ? ? ? ? 834 LEU B CA 1
+ATOM 5151 C C . LEU B 1 344 ? -8.666 32.376 87.908 1.00 27.15 ? ? ? ? ? ? 834 LEU B C 1
+ATOM 5152 O O . LEU B 1 344 ? -8.841 33.574 88.111 1.00 26.87 ? ? ? ? ? ? 834 LEU B O 1
+ATOM 5153 C CB . LEU B 1 344 ? -7.858 32.195 85.544 1.00 23.15 ? ? ? ? ? ? 834 LEU B CB 1
+ATOM 5154 C CG . LEU B 1 344 ? -6.680 32.214 84.554 1.00 22.56 ? ? ? ? ? ? 834 LEU B CG 1
+ATOM 5155 C CD1 . LEU B 1 344 ? -7.187 32.233 83.106 1.00 22.53 ? ? ? ? ? ? 834 LEU B CD1 1
+ATOM 5156 C CD2 . LEU B 1 344 ? -5.782 33.414 84.863 1.00 22.42 ? ? ? ? ? ? 834 LEU B CD2 1
+ATOM 5157 N N . MET B 1 345 ? -9.470 31.439 88.403 1.00 30.86 ? ? ? ? ? ? 835 MET B N 1
+ATOM 5158 C CA . MET B 1 345 ? -10.607 31.776 89.272 1.00 35.01 ? ? ? ? ? ? 835 MET B CA 1
+ATOM 5159 C C . MET B 1 345 ? -10.230 31.951 90.757 1.00 37.17 ? ? ? ? ? ? 835 MET B C 1
+ATOM 5160 O O . MET B 1 345 ? -10.838 32.844 91.390 1.00 40.31 ? ? ? ? ? ? 835 MET B O 1
+ATOM 5161 C CB . MET B 1 345 ? -11.737 30.736 89.140 1.00 35.66 ? ? ? ? ? ? 835 MET B CB 1
+ATOM 5162 C CG . MET B 1 345 ? -12.433 30.741 87.801 1.00 37.03 ? ? ? ? ? ? 835 MET B CG 1
+ATOM 5163 S SD . MET B 1 345 ? -13.730 29.495 87.637 1.00 40.25 ? ? ? ? ? ? 835 MET B SD 1
+ATOM 5164 C CE . MET B 1 345 ? -12.842 27.973 87.858 1.00 39.14 ? ? ? ? ? ? 835 MET B CE 1
+HETATM 5165 O O . HOH C 2 . ? 19.092 16.066 38.353 1.00 8.41 ? ? ? ? ? ? 1 HOH A O 1
+HETATM 5166 O O . HOH C 2 . ? 16.547 15.324 37.747 1.00 10.99 ? ? ? ? ? ? 2 HOH A O 1
+HETATM 5167 O O . HOH C 2 . ? 6.695 26.587 37.079 1.00 10.88 ? ? ? ? ? ? 3 HOH A O 1
+HETATM 5168 O O . HOH C 2 . ? 21.016 14.368 27.070 1.00 9.39 ? ? ? ? ? ? 4 HOH A O 1
+HETATM 5169 O O . HOH C 2 . ? 26.848 12.043 28.407 1.00 11.87 ? ? ? ? ? ? 5 HOH A O 1
+HETATM 5170 O O . HOH C 2 . ? 16.554 18.864 24.735 1.00 10.02 ? ? ? ? ? ? 6 HOH A O 1
+HETATM 5171 O O . HOH C 2 . ? 17.849 7.210 38.783 1.00 11.25 ? ? ? ? ? ? 7 HOH A O 1
+HETATM 5172 O O . HOH C 2 . ? 22.442 31.746 41.652 1.00 10.49 ? ? ? ? ? ? 8 HOH A O 1
+HETATM 5173 O O . HOH C 2 . ? 12.873 5.300 43.714 1.00 13.36 ? ? ? ? ? ? 9 HOH A O 1
+HETATM 5174 O O . HOH C 2 . ? 28.212 23.884 21.381 1.00 12.39 ? ? ? ? ? ? 10 HOH A O 1
+HETATM 5175 O O . HOH C 2 . ? 26.566 18.819 28.818 1.00 12.51 ? ? ? ? ? ? 11 HOH A O 1
+HETATM 5176 O O . HOH C 2 . ? 12.060 21.152 29.865 1.00 11.47 ? ? ? ? ? ? 12 HOH A O 1
+HETATM 5177 O O . HOH C 2 . ? 23.092 11.560 28.962 1.00 11.17 ? ? ? ? ? ? 13 HOH A O 1
+HETATM 5178 O O . HOH C 2 . ? 4.780 26.137 30.520 1.00 13.73 ? ? ? ? ? ? 14 HOH A O 1
+HETATM 5179 O O . HOH C 2 . ? 20.446 10.150 41.932 1.00 12.80 ? ? ? ? ? ? 15 HOH A O 1
+HETATM 5180 O O . HOH C 2 . ? 4.726 16.351 33.332 1.00 13.00 ? ? ? ? ? ? 16 HOH A O 1
+HETATM 5181 O O . HOH C 2 . ? 4.136 11.222 37.765 1.00 16.90 ? ? ? ? ? ? 17 HOH A O 1
+HETATM 5182 O O . HOH C 2 . ? 15.499 20.594 54.780 1.00 24.58 ? ? ? ? ? ? 18 HOH A O 1
+HETATM 5183 O O . HOH C 2 . ? 7.268 -9.116 44.308 1.00 29.35 ? ? ? ? ? ? 19 HOH A O 1
+HETATM 5184 O O . HOH C 2 . ? 7.544 5.719 41.181 1.00 15.25 ? ? ? ? ? ? 20 HOH A O 1
+HETATM 5185 O O . HOH C 2 . ? 13.538 17.088 54.162 1.00 14.09 ? ? ? ? ? ? 21 HOH A O 1
+HETATM 5186 O O . HOH C 2 . ? 13.111 12.935 34.616 1.00 14.25 ? ? ? ? ? ? 22 HOH A O 1
+HETATM 5187 O O . HOH C 2 . ? 20.604 10.554 28.677 1.00 14.46 ? ? ? ? ? ? 23 HOH A O 1
+HETATM 5188 O O . HOH C 2 . ? 19.507 25.637 43.636 1.00 15.05 ? ? ? ? ? ? 24 HOH A O 1
+HETATM 5189 O O . HOH C 2 . ? 15.385 35.310 42.122 1.00 14.26 ? ? ? ? ? ? 25 HOH A O 1
+HETATM 5190 O O . HOH C 2 . ? 2.601 10.075 39.424 1.00 21.42 ? ? ? ? ? ? 26 HOH A O 1
+HETATM 5191 O O . HOH C 2 . ? -0.118 12.637 38.816 1.00 21.59 ? ? ? ? ? ? 27 HOH A O 1
+HETATM 5192 O O . HOH C 2 . ? 15.716 -12.816 48.256 1.00 20.09 ? ? ? ? ? ? 28 HOH A O 1
+HETATM 5193 O O . HOH C 2 . ? 10.776 6.101 39.875 1.00 23.05 ? ? ? ? ? ? 29 HOH A O 1
+HETATM 5194 O O . HOH C 2 . ? 8.907 8.721 56.594 1.00 18.76 ? ? ? ? ? ? 30 HOH A O 1
+HETATM 5195 O O . HOH C 2 . ? 23.742 6.677 37.172 1.00 18.33 ? ? ? ? ? ? 31 HOH A O 1
+HETATM 5196 O O . HOH C 2 . ? 18.178 11.281 52.509 1.00 21.24 ? ? ? ? ? ? 32 HOH A O 1
+HETATM 5197 O O . HOH C 2 . ? 25.243 15.395 48.630 1.00 18.18 ? ? ? ? ? ? 33 HOH A O 1
+HETATM 5198 O O . HOH C 2 . ? 20.716 35.408 30.200 1.00 19.39 ? ? ? ? ? ? 34 HOH A O 1
+HETATM 5199 O O . HOH C 2 . ? -1.257 17.902 46.345 1.00 38.64 ? ? ? ? ? ? 35 HOH A O 1
+HETATM 5200 O O . HOH C 2 . ? -1.323 15.788 45.629 1.00 17.53 ? ? ? ? ? ? 36 HOH A O 1
+HETATM 5201 O O . HOH C 2 . ? 38.194 8.865 41.568 1.00 19.01 ? ? ? ? ? ? 37 HOH A O 1
+HETATM 5202 O O . HOH C 2 . ? 39.358 19.261 39.040 1.00 18.54 ? ? ? ? ? ? 38 HOH A O 1
+HETATM 5203 O O . HOH C 2 . ? 8.252 -7.125 39.541 1.00 37.34 ? ? ? ? ? ? 39 HOH A O 1
+HETATM 5204 O O . HOH C 2 . ? 0.596 -2.149 51.896 1.00 20.47 ? ? ? ? ? ? 40 HOH A O 1
+HETATM 5205 O O . HOH C 2 . ? 5.058 35.215 43.457 1.00 19.05 ? ? ? ? ? ? 41 HOH A O 1
+HETATM 5206 O O . HOH C 2 . ? 32.964 3.818 43.801 1.00 20.97 ? ? ? ? ? ? 42 HOH A O 1
+HETATM 5207 O O . HOH C 2 . ? 13.187 26.786 50.046 1.00 22.21 ? ? ? ? ? ? 43 HOH A O 1
+HETATM 5208 O O . HOH C 2 . ? 21.565 -1.196 42.342 1.00 37.73 ? ? ? ? ? ? 44 HOH A O 1
+HETATM 5209 O O . HOH C 2 . ? 20.869 1.321 43.607 1.00 20.34 ? ? ? ? ? ? 45 HOH A O 1
+HETATM 5210 O O . HOH C 2 . ? 19.833 2.013 55.684 1.00 22.80 ? ? ? ? ? ? 46 HOH A O 1
+HETATM 5211 O O . HOH C 2 . ? 20.435 14.846 53.291 1.00 20.43 ? ? ? ? ? ? 47 HOH A O 1
+HETATM 5212 O O . HOH C 2 . ? 17.879 -3.555 40.884 1.00 20.82 ? ? ? ? ? ? 48 HOH A O 1
+HETATM 5213 O O . HOH C 2 . ? 20.177 -0.969 39.757 1.00 40.33 ? ? ? ? ? ? 49 HOH A O 1
+HETATM 5214 O O . HOH C 2 . ? 40.921 12.713 36.021 1.00 22.72 ? ? ? ? ? ? 50 HOH A O 1
+HETATM 5215 O O . HOH C 2 . ? -6.127 14.921 38.193 1.00 22.03 ? ? ? ? ? ? 51 HOH A O 1
+HETATM 5216 O O . HOH C 2 . ? 5.904 32.134 28.591 1.00 20.98 ? ? ? ? ? ? 52 HOH A O 1
+HETATM 5217 O O . HOH C 2 . ? 19.425 31.579 20.062 1.00 20.63 ? ? ? ? ? ? 53 HOH A O 1
+HETATM 5218 O O . HOH C 2 . ? -2.387 29.470 46.859 1.00 46.67 ? ? ? ? ? ? 54 HOH A O 1
+HETATM 5219 O O . HOH C 2 . ? 3.159 29.874 49.502 1.00 36.83 ? ? ? ? ? ? 55 HOH A O 1
+HETATM 5220 O O . HOH C 2 . ? 27.217 12.578 17.477 1.00 54.14 ? ? ? ? ? ? 56 HOH A O 1
+HETATM 5221 O O . HOH C 2 . ? 7.481 -0.149 49.531 1.00 24.25 ? ? ? ? ? ? 57 HOH A O 1
+HETATM 5222 O O . HOH C 2 . ? 28.883 15.229 18.637 1.00 23.58 ? ? ? ? ? ? 58 HOH A O 1
+HETATM 5223 O O . HOH C 2 . ? 14.787 10.400 34.262 1.00 30.92 ? ? ? ? ? ? 59 HOH A O 1
+HETATM 5224 O O . HOH C 2 . ? 2.668 25.328 28.877 1.00 20.67 ? ? ? ? ? ? 60 HOH A O 1
+HETATM 5225 O O . HOH C 2 . ? -1.920 3.649 55.031 1.00 29.89 ? ? ? ? ? ? 61 HOH A O 1
+HETATM 5226 O O . HOH C 2 . ? 13.056 34.213 48.924 1.00 20.61 ? ? ? ? ? ? 62 HOH A O 1
+HETATM 5227 O O . HOH C 2 . ? 30.555 19.691 45.878 1.00 23.31 ? ? ? ? ? ? 63 HOH A O 1
+HETATM 5228 O O . HOH C 2 . ? 9.726 -12.345 45.837 1.00 52.60 ? ? ? ? ? ? 64 HOH A O 1
+HETATM 5229 O O . HOH C 2 . ? 11.462 14.594 30.550 1.00 20.10 ? ? ? ? ? ? 65 HOH A O 1
+HETATM 5230 O O . HOH C 2 . ? 31.017 23.755 42.397 1.00 20.53 ? ? ? ? ? ? 66 HOH A O 1
+HETATM 5231 O O . HOH C 2 . ? 34.275 20.969 45.124 1.00 62.40 ? ? ? ? ? ? 67 HOH A O 1
+HETATM 5232 O O . HOH C 2 . ? -3.557 12.117 32.379 1.00 26.80 ? ? ? ? ? ? 68 HOH A O 1
+HETATM 5233 O O . HOH C 2 . ? 24.422 37.005 35.363 1.00 24.42 ? ? ? ? ? ? 69 HOH A O 1
+HETATM 5234 O O . HOH C 2 . ? 19.422 14.148 58.502 1.00 24.64 ? ? ? ? ? ? 70 HOH A O 1
+HETATM 5235 O O . HOH C 2 . ? 28.709 4.427 49.649 1.00 31.62 ? ? ? ? ? ? 71 HOH A O 1
+HETATM 5236 O O . HOH C 2 . ? -8.556 3.438 45.752 1.00 26.90 ? ? ? ? ? ? 72 HOH A O 1
+HETATM 5237 O O . HOH C 2 . ? 8.436 37.602 38.187 1.00 24.69 ? ? ? ? ? ? 73 HOH A O 1
+HETATM 5238 O O . HOH C 2 . ? 14.202 22.999 54.415 1.00 27.61 ? ? ? ? ? ? 74 HOH A O 1
+HETATM 5239 O O . HOH C 2 . ? 22.776 5.728 39.031 1.00 33.26 ? ? ? ? ? ? 75 HOH A O 1
+HETATM 5240 O O . HOH C 2 . ? 1.523 4.744 36.455 1.00 23.96 ? ? ? ? ? ? 76 HOH A O 1
+HETATM 5241 O O . HOH C 2 . ? -1.746 21.683 45.895 1.00 48.37 ? ? ? ? ? ? 77 HOH A O 1
+HETATM 5242 O O . HOH C 2 . ? 23.407 5.406 30.290 1.00 25.76 ? ? ? ? ? ? 78 HOH A O 1
+HETATM 5243 O O . HOH C 2 . ? 7.093 -2.281 50.146 1.00 32.64 ? ? ? ? ? ? 79 HOH A O 1
+HETATM 5244 O O . HOH C 2 . ? 33.930 3.884 32.329 1.00 30.08 ? ? ? ? ? ? 80 HOH A O 1
+HETATM 5245 O O . HOH C 2 . ? 2.010 33.839 34.492 1.00 34.48 ? ? ? ? ? ? 81 HOH A O 1
+HETATM 5246 O O . HOH C 2 . ? 29.362 32.016 23.290 1.00 47.11 ? ? ? ? ? ? 82 HOH A O 1
+HETATM 5247 O O . HOH C 2 . ? 23.676 24.045 45.153 1.00 27.85 ? ? ? ? ? ? 83 HOH A O 1
+HETATM 5248 O O . HOH C 2 . ? 21.703 16.882 15.491 1.00 26.92 ? ? ? ? ? ? 84 HOH A O 1
+HETATM 5249 O O . HOH C 2 . ? 9.152 -10.205 47.883 1.00 26.01 ? ? ? ? ? ? 85 HOH A O 1
+HETATM 5250 O O . HOH C 2 . ? 15.592 -2.231 36.166 1.00 53.96 ? ? ? ? ? ? 86 HOH A O 1
+HETATM 5251 O O . HOH C 2 . ? 15.498 1.987 36.271 1.00 23.00 ? ? ? ? ? ? 87 HOH A O 1
+HETATM 5252 O O . HOH C 2 . ? 39.603 6.631 33.944 1.00 27.66 ? ? ? ? ? ? 88 HOH A O 1
+HETATM 5253 O O . HOH C 2 . ? 40.914 21.324 38.776 1.00 27.64 ? ? ? ? ? ? 89 HOH A O 1
+HETATM 5254 O O . HOH C 2 . ? 12.162 25.478 52.725 1.00 44.31 ? ? ? ? ? ? 90 HOH A O 1
+HETATM 5255 O O . HOH C 2 . ? 19.220 34.017 22.750 1.00 27.31 ? ? ? ? ? ? 91 HOH A O 1
+HETATM 5256 O O . HOH C 2 . ? 6.912 30.644 26.694 1.00 35.20 ? ? ? ? ? ? 92 HOH A O 1
+HETATM 5257 O O . HOH C 2 . ? 18.358 39.492 38.732 1.00 34.32 ? ? ? ? ? ? 93 HOH A O 1
+HETATM 5258 O O . HOH C 2 . ? 9.309 37.483 27.619 1.00 25.77 ? ? ? ? ? ? 94 HOH A O 1
+HETATM 5259 O O . HOH C 2 . ? 21.599 32.959 23.298 1.00 30.21 ? ? ? ? ? ? 95 HOH A O 1
+HETATM 5260 O O . HOH C 2 . ? 9.265 26.009 29.284 1.00 26.25 ? ? ? ? ? ? 96 HOH A O 1
+HETATM 5261 O O . HOH C 2 . ? 6.409 24.377 53.507 1.00 27.94 ? ? ? ? ? ? 97 HOH A O 1
+HETATM 5262 O O . HOH C 2 . ? 16.490 0.624 25.160 1.00 45.41 ? ? ? ? ? ? 98 HOH A O 1
+HETATM 5263 O O . HOH C 2 . ? 12.294 24.586 24.024 1.00 31.39 ? ? ? ? ? ? 99 HOH A O 1
+HETATM 5264 O O . HOH C 2 . ? -0.558 35.651 23.290 1.00 40.90 ? ? ? ? ? ? 100 HOH A O 1
+HETATM 5265 O O . HOH C 2 . ? 10.378 36.004 20.806 1.00 29.72 ? ? ? ? ? ? 101 HOH A O 1
+HETATM 5266 O O . HOH C 2 . ? 0.820 4.907 55.236 1.00 26.94 ? ? ? ? ? ? 102 HOH A O 1
+HETATM 5267 O O . HOH C 2 . ? 10.929 23.202 27.909 1.00 29.96 ? ? ? ? ? ? 103 HOH A O 1
+HETATM 5268 O O . HOH C 2 . ? 34.869 25.034 23.866 1.00 34.46 ? ? ? ? ? ? 104 HOH A O 1
+HETATM 5269 O O . HOH C 2 . ? 29.015 31.319 20.245 1.00 27.16 ? ? ? ? ? ? 105 HOH A O 1
+HETATM 5270 O O . HOH C 2 . ? -5.686 17.155 39.523 1.00 33.77 ? ? ? ? ? ? 106 HOH A O 1
+HETATM 5271 O O . HOH C 2 . ? 32.869 28.993 22.367 1.00 36.40 ? ? ? ? ? ? 107 HOH A O 1
+HETATM 5272 O O . HOH C 2 . ? 34.677 32.045 38.500 1.00 30.03 ? ? ? ? ? ? 108 HOH A O 1
+HETATM 5273 O O . HOH C 2 . ? 13.198 -15.131 44.935 1.00 29.68 ? ? ? ? ? ? 109 HOH A O 1
+HETATM 5274 O O . HOH C 2 . ? 12.591 29.994 21.864 1.00 33.35 ? ? ? ? ? ? 110 HOH A O 1
+HETATM 5275 O O . HOH C 2 . ? 16.700 24.364 16.393 1.00 29.43 ? ? ? ? ? ? 111 HOH A O 1
+HETATM 5276 O O . HOH C 2 . ? -8.993 0.342 53.572 1.00 32.01 ? ? ? ? ? ? 112 HOH A O 1
+HETATM 5277 O O . HOH C 2 . ? 14.714 8.182 24.960 1.00 27.93 ? ? ? ? ? ? 113 HOH A O 1
+HETATM 5278 O O . HOH C 2 . ? -6.406 -1.567 52.940 1.00 27.23 ? ? ? ? ? ? 114 HOH A O 1
+HETATM 5279 O O . HOH C 2 . ? 11.896 -12.296 48.647 1.00 31.24 ? ? ? ? ? ? 115 HOH A O 1
+HETATM 5280 O O . HOH C 2 . ? 16.646 37.574 27.637 1.00 30.21 ? ? ? ? ? ? 117 HOH A O 1
+HETATM 5281 O O . HOH C 2 . ? 1.849 -7.405 43.658 1.00 41.55 ? ? ? ? ? ? 118 HOH A O 1
+HETATM 5282 O O . HOH C 2 . ? 20.364 19.716 51.572 1.00 36.09 ? ? ? ? ? ? 119 HOH A O 1
+HETATM 5283 O O . HOH C 2 . ? 34.702 7.045 49.332 1.00 34.10 ? ? ? ? ? ? 120 HOH A O 1
+HETATM 5284 O O . HOH C 2 . ? 4.499 1.315 55.561 1.00 27.33 ? ? ? ? ? ? 121 HOH A O 1
+HETATM 5285 O O . HOH C 2 . ? 23.272 7.551 23.076 1.00 36.91 ? ? ? ? ? ? 122 HOH A O 1
+HETATM 5286 O O . HOH C 2 . ? 13.808 37.251 19.174 1.00 30.43 ? ? ? ? ? ? 123 HOH A O 1
+HETATM 5287 O O . HOH C 2 . ? 6.198 1.801 34.892 1.00 41.36 ? ? ? ? ? ? 124 HOH A O 1
+HETATM 5288 O O . HOH C 2 . ? 17.488 2.333 55.180 1.00 29.71 ? ? ? ? ? ? 125 HOH A O 1
+HETATM 5289 O O . HOH C 2 . ? 10.819 16.363 28.058 1.00 26.83 ? ? ? ? ? ? 126 HOH A O 1
+HETATM 5290 O O . HOH C 2 . ? 6.489 16.464 58.027 1.00 50.52 ? ? ? ? ? ? 127 HOH A O 1
+HETATM 5291 O O . HOH C 2 . ? 0.685 14.739 29.910 1.00 34.22 ? ? ? ? ? ? 128 HOH A O 1
+HETATM 5292 O O . HOH C 2 . ? 2.169 34.573 39.079 1.00 42.85 ? ? ? ? ? ? 129 HOH A O 1
+HETATM 5293 O O . HOH C 2 . ? 22.765 -5.966 42.543 1.00 36.13 ? ? ? ? ? ? 130 HOH A O 1
+HETATM 5294 O O . HOH C 2 . ? -0.127 8.255 56.541 1.00 26.47 ? ? ? ? ? ? 131 HOH A O 1
+HETATM 5295 O O . HOH C 2 . ? 23.050 4.084 55.966 1.00 29.27 ? ? ? ? ? ? 132 HOH A O 1
+HETATM 5296 O O . HOH C 2 . ? 20.862 3.875 57.453 1.00 34.13 ? ? ? ? ? ? 133 HOH A O 1
+HETATM 5297 O O . HOH C 2 . ? 18.761 37.433 34.517 1.00 29.60 ? ? ? ? ? ? 134 HOH A O 1
+HETATM 5298 O O . HOH C 2 . ? 23.871 18.365 14.972 1.00 32.09 ? ? ? ? ? ? 135 HOH A O 1
+HETATM 5299 O O . HOH C 2 . ? 5.399 -3.221 51.305 1.00 39.04 ? ? ? ? ? ? 136 HOH A O 1
+HETATM 5300 O O . HOH C 2 . ? 7.119 2.455 56.866 1.00 36.07 ? ? ? ? ? ? 137 HOH A O 1
+HETATM 5301 O O . HOH C 2 . ? 27.506 0.575 51.281 1.00 36.84 ? ? ? ? ? ? 138 HOH A O 1
+HETATM 5302 O O . HOH C 2 . ? -3.543 -4.594 48.767 1.00 36.17 ? ? ? ? ? ? 139 HOH A O 1
+HETATM 5303 O O . HOH C 2 . ? 3.503 2.815 36.219 1.00 33.83 ? ? ? ? ? ? 140 HOH A O 1
+HETATM 5304 O O . HOH C 2 . ? 23.587 12.725 19.741 1.00 37.32 ? ? ? ? ? ? 141 HOH A O 1
+HETATM 5305 O O . HOH C 2 . ? 8.989 20.839 58.051 1.00 45.44 ? ? ? ? ? ? 142 HOH A O 1
+HETATM 5306 O O . HOH C 2 . ? -2.534 29.744 33.113 1.00 32.75 ? ? ? ? ? ? 143 HOH A O 1
+HETATM 5307 O O . HOH C 2 . ? 42.125 14.677 33.630 1.00 32.27 ? ? ? ? ? ? 144 HOH A O 1
+HETATM 5308 O O . HOH C 2 . ? -4.053 24.702 31.413 1.00 35.35 ? ? ? ? ? ? 145 HOH A O 1
+HETATM 5309 O O . HOH C 2 . ? 14.122 11.847 31.761 1.00 49.01 ? ? ? ? ? ? 146 HOH A O 1
+HETATM 5310 O O . HOH C 2 . ? 38.926 20.684 41.620 1.00 35.01 ? ? ? ? ? ? 147 HOH A O 1
+HETATM 5311 O O . HOH C 2 . ? -2.189 28.843 44.760 1.00 34.22 ? ? ? ? ? ? 148 HOH A O 1
+HETATM 5312 O O . HOH C 2 . ? 11.249 -5.769 38.861 1.00 33.94 ? ? ? ? ? ? 149 HOH A O 1
+HETATM 5313 O O . HOH C 2 . ? 5.649 32.761 53.301 1.00 58.68 ? ? ? ? ? ? 150 HOH A O 1
+HETATM 5314 O O . HOH C 2 . ? 34.260 19.510 18.932 1.00 45.80 ? ? ? ? ? ? 151 HOH A O 1
+HETATM 5315 O O . HOH C 2 . ? 14.769 17.390 12.522 1.00 43.82 ? ? ? ? ? ? 152 HOH A O 1
+HETATM 5316 O O . HOH C 2 . ? 17.932 38.737 41.838 1.00 39.87 ? ? ? ? ? ? 153 HOH A O 1
+HETATM 5317 O O . HOH C 2 . ? 25.739 26.223 45.840 1.00 37.55 ? ? ? ? ? ? 154 HOH A O 1
+HETATM 5318 O O . HOH C 2 . ? -2.117 29.274 55.092 1.00 30.50 ? ? ? ? ? ? 155 HOH A O 1
+HETATM 5319 O O . HOH C 2 . ? 20.094 27.178 46.240 1.00 36.06 ? ? ? ? ? ? 156 HOH A O 1
+HETATM 5320 O O . HOH C 2 . ? 9.113 1.258 56.545 1.00 40.12 ? ? ? ? ? ? 157 HOH A O 1
+HETATM 5321 O O . HOH C 2 . ? 6.571 -10.608 50.078 1.00 67.84 ? ? ? ? ? ? 158 HOH A O 1
+HETATM 5322 O O . HOH C 2 . ? 21.958 17.171 53.835 1.00 43.16 ? ? ? ? ? ? 159 HOH A O 1
+HETATM 5323 O O . HOH C 2 . ? 21.936 0.334 35.813 1.00 33.02 ? ? ? ? ? ? 160 HOH A O 1
+HETATM 5324 O O . HOH C 2 . ? 30.796 2.327 26.399 1.00 40.57 ? ? ? ? ? ? 161 HOH A O 1
+HETATM 5325 O O . HOH C 2 . ? 27.662 12.787 50.246 1.00 40.50 ? ? ? ? ? ? 162 HOH A O 1
+HETATM 5326 O O . HOH C 2 . ? 24.545 4.927 51.745 1.00 33.99 ? ? ? ? ? ? 163 HOH A O 1
+HETATM 5327 O O . HOH C 2 . ? 16.496 6.307 24.788 1.00 52.52 ? ? ? ? ? ? 164 HOH A O 1
+HETATM 5328 O O . HOH C 2 . ? 10.587 5.893 19.970 1.00 62.37 ? ? ? ? ? ? 165 HOH A O 1
+HETATM 5329 O O . HOH C 2 . ? -4.880 -1.513 41.940 1.00 31.35 ? ? ? ? ? ? 166 HOH A O 1
+HETATM 5330 O O . HOH C 2 . ? 20.024 0.406 37.436 1.00 48.29 ? ? ? ? ? ? 167 HOH A O 1
+HETATM 5331 O O . HOH C 2 . ? 39.002 12.977 48.816 1.00 49.88 ? ? ? ? ? ? 168 HOH A O 1
+HETATM 5332 O O . HOH C 2 . ? 0.794 -5.344 50.407 1.00 58.54 ? ? ? ? ? ? 169 HOH A O 1
+HETATM 5333 O O . HOH C 2 . ? 0.007 31.739 30.043 1.00 46.58 ? ? ? ? ? ? 170 HOH A O 1
+HETATM 5334 O O . HOH C 2 . ? 3.209 -2.131 52.735 1.00 40.23 ? ? ? ? ? ? 172 HOH A O 1
+HETATM 5335 O O . HOH C 2 . ? 0.772 18.965 45.987 1.00 39.51 ? ? ? ? ? ? 173 HOH A O 1
+HETATM 5336 O O . HOH C 2 . ? 21.308 26.731 14.581 1.00 40.41 ? ? ? ? ? ? 174 HOH A O 1
+HETATM 5337 O O . HOH C 2 . ? 13.671 31.289 51.094 1.00 62.43 ? ? ? ? ? ? 175 HOH A O 1
+HETATM 5338 O O . HOH C 2 . ? 19.499 31.838 17.380 1.00 40.40 ? ? ? ? ? ? 176 HOH A O 1
+HETATM 5339 O O . HOH C 2 . ? 11.886 2.295 56.480 1.00 50.97 ? ? ? ? ? ? 177 HOH A O 1
+HETATM 5340 O O . HOH C 2 . ? -4.252 27.303 50.245 1.00 44.66 ? ? ? ? ? ? 178 HOH A O 1
+HETATM 5341 O O . HOH C 2 . ? 33.747 2.693 38.480 1.00 56.68 ? ? ? ? ? ? 179 HOH A O 1
+HETATM 5342 O O . HOH C 2 . ? 3.291 21.885 28.023 1.00 50.12 ? ? ? ? ? ? 180 HOH A O 1
+HETATM 5343 O O . HOH C 2 . ? 3.541 17.959 57.150 1.00 44.20 ? ? ? ? ? ? 181 HOH A O 1
+HETATM 5344 O O . HOH C 2 . ? 8.161 37.710 29.626 1.00 38.49 ? ? ? ? ? ? 182 HOH A O 1
+HETATM 5345 O O . HOH C 2 . ? 36.581 4.951 39.491 1.00 57.60 ? ? ? ? ? ? 183 HOH A O 1
+HETATM 5346 O O . HOH C 2 . ? 23.646 7.936 56.692 1.00 50.35 ? ? ? ? ? ? 184 HOH A O 1
+HETATM 5347 O O . HOH C 2 . ? 20.888 5.996 58.401 1.00 49.14 ? ? ? ? ? ? 185 HOH A O 1
+HETATM 5348 O O . HOH C 2 . ? 12.407 12.817 61.829 1.00 37.44 ? ? ? ? ? ? 186 HOH A O 1
+HETATM 5349 O O . HOH C 2 . ? 10.633 7.767 59.564 1.00 57.80 ? ? ? ? ? ? 187 HOH A O 1
+HETATM 5350 O O . HOH C 2 . ? 17.889 9.445 30.740 1.00 36.98 ? ? ? ? ? ? 188 HOH A O 1
+HETATM 5351 O O . HOH C 2 . ? -0.529 19.933 56.089 1.00 45.89 ? ? ? ? ? ? 189 HOH A O 1
+HETATM 5352 O O . HOH C 2 . ? -9.019 3.505 47.871 1.00 52.05 ? ? ? ? ? ? 190 HOH A O 1
+HETATM 5353 O O . HOH C 2 . ? 11.262 10.043 62.269 1.00 59.72 ? ? ? ? ? ? 191 HOH A O 1
+HETATM 5354 O O . HOH C 2 . ? 39.452 25.983 29.260 1.00 54.32 ? ? ? ? ? ? 192 HOH A O 1
+HETATM 5355 O O . HOH C 2 . ? 19.149 8.933 43.975 1.00 38.24 ? ? ? ? ? ? 193 HOH A O 1
+HETATM 5356 O O . HOH C 2 . ? 8.192 32.808 26.669 1.00 29.09 ? ? ? ? ? ? 194 HOH A O 1
+HETATM 5357 O O . HOH C 2 . ? 37.946 19.507 28.973 1.00 32.28 ? ? ? ? ? ? 195 HOH A O 1
+HETATM 5358 O O . HOH C 2 . ? 17.677 11.123 15.895 1.00 30.03 ? ? ? ? ? ? 196 HOH A O 1
+HETATM 5359 O O . HOH C 2 . ? 11.649 18.259 19.548 1.00 29.78 ? ? ? ? ? ? 197 HOH A O 1
+HETATM 5360 O O . HOH C 2 . ? 22.936 18.625 12.852 1.00 45.21 ? ? ? ? ? ? 198 HOH A O 1
+HETATM 5361 O O . HOH C 2 . ? 4.925 27.501 26.975 1.00 40.52 ? ? ? ? ? ? 199 HOH A O 1
+HETATM 5362 O O . HOH C 2 . ? 27.861 -0.948 46.279 1.00 39.96 ? ? ? ? ? ? 200 HOH A O 1
+HETATM 5363 O O . HOH C 2 . ? 11.237 14.317 16.719 1.00 32.61 ? ? ? ? ? ? 201 HOH A O 1
+HETATM 5364 O O . HOH C 2 . ? 14.389 27.100 17.986 1.00 41.75 ? ? ? ? ? ? 202 HOH A O 1
+HETATM 5365 O O . HOH C 2 . ? 36.932 27.545 43.214 1.00 33.49 ? ? ? ? ? ? 203 HOH A O 1
+HETATM 5366 O O . HOH C 2 . ? 23.782 33.225 42.152 1.00 29.05 ? ? ? ? ? ? 204 HOH A O 1
+HETATM 5367 O O . HOH C 2 . ? -8.578 2.201 51.265 1.00 38.86 ? ? ? ? ? ? 205 HOH A O 1
+HETATM 5368 O O . HOH C 2 . ? 25.560 30.029 46.884 1.00 38.81 ? ? ? ? ? ? 206 HOH A O 1
+HETATM 5369 O O . HOH C 2 . ? 5.702 41.367 43.293 1.00 42.92 ? ? ? ? ? ? 207 HOH A O 1
+HETATM 5370 O O . HOH C 2 . ? -0.142 33.950 43.771 1.00 53.04 ? ? ? ? ? ? 208 HOH A O 1
+HETATM 5371 O O . HOH C 2 . ? 23.466 17.507 9.102 1.00 35.29 ? ? ? ? ? ? 209 HOH A O 1
+HETATM 5372 O O . HOH C 2 . ? 9.336 -5.342 37.057 1.00 38.16 ? ? ? ? ? ? 210 HOH A O 1
+HETATM 5373 O O . HOH C 2 . ? 19.208 35.232 20.240 1.00 42.67 ? ? ? ? ? ? 211 HOH A O 1
+HETATM 5374 O O . HOH C 2 . ? 21.847 22.379 46.946 1.00 47.09 ? ? ? ? ? ? 212 HOH A O 1
+HETATM 5375 O O . HOH C 2 . ? 9.829 6.136 29.064 1.00 65.53 ? ? ? ? ? ? 213 HOH A O 1
+HETATM 5376 O O . HOH C 2 . ? 18.300 -6.924 42.238 1.00 37.37 ? ? ? ? ? ? 214 HOH A O 1
+HETATM 5377 O O . HOH C 2 . ? 33.657 21.753 17.638 1.00 41.06 ? ? ? ? ? ? 215 HOH A O 1
+HETATM 5378 O O . HOH C 2 . ? 24.615 22.655 47.482 1.00 49.77 ? ? ? ? ? ? 216 HOH A O 1
+HETATM 5379 O O . HOH C 2 . ? 13.895 22.801 16.048 1.00 53.98 ? ? ? ? ? ? 218 HOH A O 1
+HETATM 5380 O O . HOH C 2 . ? 39.088 15.547 25.983 1.00 43.98 ? ? ? ? ? ? 219 HOH A O 1
+HETATM 5381 O O . HOH C 2 . ? -11.751 3.015 55.532 1.00 43.41 ? ? ? ? ? ? 220 HOH A O 1
+HETATM 5382 O O . HOH C 2 . ? 22.192 13.305 58.897 1.00 47.00 ? ? ? ? ? ? 221 HOH A O 1
+HETATM 5383 O O . HOH C 2 . ? 7.462 34.947 27.625 1.00 61.29 ? ? ? ? ? ? 222 HOH A O 1
+HETATM 5384 O O . HOH C 2 . ? 18.127 36.940 30.127 1.00 67.74 ? ? ? ? ? ? 223 HOH A O 1
+HETATM 5385 O O . HOH C 2 . ? -10.173 19.602 47.111 1.00 50.12 ? ? ? ? ? ? 224 HOH A O 1
+HETATM 5386 O O . HOH C 2 . ? 4.064 36.393 29.795 1.00 46.94 ? ? ? ? ? ? 225 HOH A O 1
+HETATM 5387 O O . HOH C 2 . ? 25.689 34.637 24.853 1.00 47.62 ? ? ? ? ? ? 226 HOH A O 1
+HETATM 5388 O O . HOH C 2 . ? 0.721 23.404 27.132 1.00 54.99 ? ? ? ? ? ? 227 HOH A O 1
+HETATM 5389 O O . HOH C 2 . ? 2.351 8.980 59.016 1.00 58.70 ? ? ? ? ? ? 228 HOH A O 1
+HETATM 5390 O O . HOH C 2 . ? 31.985 15.324 49.189 1.00 47.31 ? ? ? ? ? ? 229 HOH A O 1
+HETATM 5391 O O . HOH C 2 . ? -2.100 28.189 25.481 1.00 40.69 ? ? ? ? ? ? 230 HOH A O 1
+HETATM 5392 O O . HOH C 2 . ? 32.843 18.552 17.241 1.00 52.37 ? ? ? ? ? ? 231 HOH A O 1
+HETATM 5393 O O . HOH C 2 . ? 29.776 14.554 49.741 1.00 49.91 ? ? ? ? ? ? 233 HOH A O 1
+HETATM 5394 O O . HOH C 2 . ? 7.680 33.949 50.969 1.00 35.24 ? ? ? ? ? ? 281 HOH A O 1
+HETATM 5395 O O . HOH C 2 . ? 8.488 31.677 52.565 1.00 48.35 ? ? ? ? ? ? 320 HOH A O 1
+HETATM 5396 O O . HOH C 2 . ? 11.970 40.004 36.107 1.00 63.40 ? ? ? ? ? ? 381 HOH A O 1
+HETATM 5397 O O . HOH C 2 . ? 3.686 32.305 55.795 1.00 52.51 ? ? ? ? ? ? 393 HOH A O 1
+HETATM 5398 O O . HOH C 2 . ? 8.329 15.693 60.042 1.00 40.55 ? ? ? ? ? ? 397 HOH A O 1
+HETATM 5399 O O . HOH D 2 . ? 14.748 32.161 49.397 1.00 33.95 ? ? ? ? ? ? 116 HOH B O 1
+HETATM 5400 O O . HOH D 2 . ? -13.355 33.644 62.184 1.00 36.78 ? ? ? ? ? ? 171 HOH B O 1
+HETATM 5401 O O . HOH D 2 . ? 2.042 27.943 56.451 1.00 49.17 ? ? ? ? ? ? 217 HOH B O 1
+HETATM 5402 O O . HOH D 2 . ? 23.316 37.776 44.397 1.00 54.35 ? ? ? ? ? ? 232 HOH B O 1
+HETATM 5403 O O . HOH D 2 . ? 7.439 33.931 70.275 1.00 13.96 ? ? ? ? ? ? 234 HOH B O 1
+HETATM 5404 O O . HOH D 2 . ? 4.950 34.580 70.985 1.00 9.48 ? ? ? ? ? ? 235 HOH B O 1
+HETATM 5405 O O . HOH D 2 . ? 17.406 33.585 81.547 1.00 11.47 ? ? ? ? ? ? 236 HOH B O 1
+HETATM 5406 O O . HOH D 2 . ? 2.790 23.259 69.848 1.00 13.63 ? ? ? ? ? ? 237 HOH B O 1
+HETATM 5407 O O . HOH D 2 . ? -3.132 24.633 67.352 1.00 14.12 ? ? ? ? ? ? 238 HOH B O 1
+HETATM 5408 O O . HOH D 2 . ? 7.256 20.906 74.244 1.00 12.97 ? ? ? ? ? ? 239 HOH B O 1
+HETATM 5409 O O . HOH D 2 . ? 6.141 34.693 62.166 1.00 12.01 ? ? ? ? ? ? 240 HOH B O 1
+HETATM 5410 O O . HOH D 2 . ? 1.520 38.468 86.779 1.00 18.06 ? ? ? ? ? ? 241 HOH B O 1
+HETATM 5411 O O . HOH D 2 . ? 11.028 39.577 60.147 1.00 10.91 ? ? ? ? ? ? 242 HOH B O 1
+HETATM 5412 O O . HOH D 2 . ? -4.432 17.839 79.654 1.00 16.15 ? ? ? ? ? ? 243 HOH B O 1
+HETATM 5413 O O . HOH D 2 . ? -2.688 25.067 74.176 1.00 14.23 ? ? ? ? ? ? 244 HOH B O 1
+HETATM 5414 O O . HOH D 2 . ? 11.975 26.111 76.290 1.00 14.46 ? ? ? ? ? ? 245 HOH B O 1
+HETATM 5415 O O . HOH D 2 . ? 0.668 24.848 67.007 1.00 15.74 ? ? ? ? ? ? 246 HOH B O 1
+HETATM 5416 O O . HOH D 2 . ? 19.334 26.853 81.210 1.00 14.18 ? ? ? ? ? ? 247 HOH B O 1
+HETATM 5417 O O . HOH D 2 . ? 3.648 37.842 64.940 1.00 15.53 ? ? ? ? ? ? 248 HOH B O 1
+HETATM 5418 O O . HOH D 2 . ? 19.295 29.547 71.414 1.00 13.45 ? ? ? ? ? ? 249 HOH B O 1
+HETATM 5419 O O . HOH D 2 . ? 19.739 33.736 66.200 1.00 13.96 ? ? ? ? ? ? 250 HOH B O 1
+HETATM 5420 O O . HOH D 2 . ? 10.409 50.429 71.603 1.00 12.57 ? ? ? ? ? ? 251 HOH B O 1
+HETATM 5421 O O . HOH D 2 . ? 16.710 39.734 45.860 1.00 15.46 ? ? ? ? ? ? 252 HOH B O 1
+HETATM 5422 O O . HOH D 2 . ? 16.553 37.176 60.564 1.00 13.25 ? ? ? ? ? ? 253 HOH B O 1
+HETATM 5423 O O . HOH D 2 . ? 8.529 50.879 74.969 1.00 25.19 ? ? ? ? ? ? 254 HOH B O 1
+HETATM 5424 O O . HOH D 2 . ? 10.888 30.771 67.958 1.00 13.04 ? ? ? ? ? ? 255 HOH B O 1
+HETATM 5425 O O . HOH D 2 . ? 3.048 24.482 65.840 1.00 19.01 ? ? ? ? ? ? 256 HOH B O 1
+HETATM 5426 O O . HOH D 2 . ? 4.569 40.198 80.273 1.00 17.08 ? ? ? ? ? ? 257 HOH B O 1
+HETATM 5427 O O . HOH D 2 . ? 8.678 38.807 90.088 1.00 17.50 ? ? ? ? ? ? 258 HOH B O 1
+HETATM 5428 O O . HOH D 2 . ? 21.484 35.524 64.927 1.00 16.89 ? ? ? ? ? ? 259 HOH B O 1
+HETATM 5429 O O . HOH D 2 . ? 24.313 34.995 67.752 1.00 17.87 ? ? ? ? ? ? 260 HOH B O 1
+HETATM 5430 O O . HOH D 2 . ? 16.140 46.312 92.123 1.00 17.48 ? ? ? ? ? ? 261 HOH B O 1
+HETATM 5431 O O . HOH D 2 . ? 13.207 35.833 61.126 1.00 18.17 ? ? ? ? ? ? 262 HOH B O 1
+HETATM 5432 O O . HOH D 2 . ? 15.243 52.558 63.195 1.00 17.75 ? ? ? ? ? ? 263 HOH B O 1
+HETATM 5433 O O . HOH D 2 . ? 0.163 32.984 61.648 1.00 23.96 ? ? ? ? ? ? 264 HOH B O 1
+HETATM 5434 O O . HOH D 2 . ? 5.728 48.294 65.677 1.00 18.54 ? ? ? ? ? ? 265 HOH B O 1
+HETATM 5435 O O . HOH D 2 . ? -1.157 44.752 69.959 1.00 15.58 ? ? ? ? ? ? 266 HOH B O 1
+HETATM 5436 O O . HOH D 2 . ? 3.724 26.851 90.744 1.00 34.21 ? ? ? ? ? ? 267 HOH B O 1
+HETATM 5437 O O . HOH D 2 . ? 25.322 41.822 70.766 1.00 18.87 ? ? ? ? ? ? 268 HOH B O 1
+HETATM 5438 O O . HOH D 2 . ? 22.368 28.479 89.791 1.00 42.69 ? ? ? ? ? ? 269 HOH B O 1
+HETATM 5439 O O . HOH D 2 . ? 33.001 37.560 63.743 1.00 19.24 ? ? ? ? ? ? 270 HOH B O 1
+HETATM 5440 O O . HOH D 2 . ? -15.598 35.487 74.136 1.00 24.16 ? ? ? ? ? ? 271 HOH B O 1
+HETATM 5441 O O . HOH D 2 . ? 15.779 35.134 47.670 1.00 19.08 ? ? ? ? ? ? 272 HOH B O 1
+HETATM 5442 O O . HOH D 2 . ? 23.387 47.303 52.383 1.00 20.94 ? ? ? ? ? ? 273 HOH B O 1
+HETATM 5443 O O . HOH D 2 . ? 18.985 40.119 89.870 1.00 18.71 ? ? ? ? ? ? 274 HOH B O 1
+HETATM 5444 O O . HOH D 2 . ? -8.927 39.704 58.662 1.00 20.35 ? ? ? ? ? ? 275 HOH B O 1
+HETATM 5445 O O . HOH D 2 . ? 11.085 46.543 81.325 1.00 23.40 ? ? ? ? ? ? 276 HOH B O 1
+HETATM 5446 O O . HOH D 2 . ? 3.054 39.302 56.021 1.00 17.08 ? ? ? ? ? ? 277 HOH B O 1
+HETATM 5447 O O . HOH D 2 . ? 3.717 40.980 58.037 1.00 54.48 ? ? ? ? ? ? 278 HOH B O 1
+HETATM 5448 O O . HOH D 2 . ? 4.414 51.406 56.325 1.00 20.95 ? ? ? ? ? ? 279 HOH B O 1
+HETATM 5449 O O . HOH D 2 . ? 3.554 49.374 69.340 1.00 18.98 ? ? ? ? ? ? 280 HOH B O 1
+HETATM 5450 O O . HOH D 2 . ? 5.964 36.269 51.647 1.00 24.09 ? ? ? ? ? ? 282 HOH B O 1
+HETATM 5451 O O . HOH D 2 . ? -16.931 32.157 67.784 1.00 19.86 ? ? ? ? ? ? 283 HOH B O 1
+HETATM 5452 O O . HOH D 2 . ? 30.273 34.109 69.896 1.00 27.55 ? ? ? ? ? ? 284 HOH B O 1
+HETATM 5453 O O . HOH D 2 . ? 17.909 25.368 87.302 1.00 22.41 ? ? ? ? ? ? 285 HOH B O 1
+HETATM 5454 O O . HOH D 2 . ? 4.627 16.633 87.139 1.00 25.53 ? ? ? ? ? ? 286 HOH B O 1
+HETATM 5455 O O . HOH D 2 . ? 26.196 41.503 83.409 1.00 36.02 ? ? ? ? ? ? 287 HOH B O 1
+HETATM 5456 O O . HOH D 2 . ? 21.155 45.378 84.765 1.00 58.15 ? ? ? ? ? ? 288 HOH B O 1
+HETATM 5457 O O . HOH D 2 . ? -5.403 14.908 71.017 1.00 30.95 ? ? ? ? ? ? 289 HOH B O 1
+HETATM 5458 O O . HOH D 2 . ? 16.644 45.051 54.435 1.00 23.77 ? ? ? ? ? ? 290 HOH B O 1
+HETATM 5459 O O . HOH D 2 . ? -6.941 12.973 72.619 1.00 52.40 ? ? ? ? ? ? 291 HOH B O 1
+HETATM 5460 O O . HOH D 2 . ? 9.060 30.383 65.526 1.00 22.62 ? ? ? ? ? ? 292 HOH B O 1
+HETATM 5461 O O . HOH D 2 . ? 21.271 25.064 80.228 1.00 25.31 ? ? ? ? ? ? 293 HOH B O 1
+HETATM 5462 O O . HOH D 2 . ? 25.858 50.682 57.897 1.00 22.54 ? ? ? ? ? ? 294 HOH B O 1
+HETATM 5463 O O . HOH D 2 . ? 10.623 45.024 87.931 1.00 26.40 ? ? ? ? ? ? 295 HOH B O 1
+HETATM 5464 O O . HOH D 2 . ? -6.774 42.107 74.510 1.00 24.24 ? ? ? ? ? ? 296 HOH B O 1
+HETATM 5465 O O . HOH D 2 . ? 15.913 37.013 45.657 1.00 19.18 ? ? ? ? ? ? 297 HOH B O 1
+HETATM 5466 O O . HOH D 2 . ? 12.296 26.556 69.298 1.00 33.13 ? ? ? ? ? ? 298 HOH B O 1
+HETATM 5467 O O . HOH D 2 . ? -11.174 24.972 103.032 1.00 39.27 ? ? ? ? ? ? 299 HOH B O 1
+HETATM 5468 O O . HOH D 2 . ? -6.979 38.806 78.745 1.00 22.20 ? ? ? ? ? ? 300 HOH B O 1
+HETATM 5469 O O . HOH D 2 . ? 27.406 28.484 67.612 1.00 23.66 ? ? ? ? ? ? 301 HOH B O 1
+HETATM 5470 O O . HOH D 2 . ? -0.194 32.304 92.017 1.00 25.56 ? ? ? ? ? ? 302 HOH B O 1
+HETATM 5471 O O . HOH D 2 . ? 4.299 54.492 68.362 1.00 24.64 ? ? ? ? ? ? 303 HOH B O 1
+HETATM 5472 O O . HOH D 2 . ? -4.671 45.393 58.631 1.00 30.42 ? ? ? ? ? ? 304 HOH B O 1
+HETATM 5473 O O . HOH D 2 . ? 32.572 41.587 58.308 1.00 22.61 ? ? ? ? ? ? 305 HOH B O 1
+HETATM 5474 O O . HOH D 2 . ? 15.746 35.199 92.710 1.00 39.94 ? ? ? ? ? ? 306 HOH B O 1
+HETATM 5475 O O . HOH D 2 . ? 9.786 51.023 77.206 1.00 28.25 ? ? ? ? ? ? 307 HOH B O 1
+HETATM 5476 O O . HOH D 2 . ? 1.198 34.868 60.798 1.00 27.56 ? ? ? ? ? ? 308 HOH B O 1
+HETATM 5477 O O . HOH D 2 . ? 22.558 32.369 59.801 1.00 29.00 ? ? ? ? ? ? 309 HOH B O 1
+HETATM 5478 O O . HOH D 2 . ? 25.400 42.476 76.931 1.00 25.48 ? ? ? ? ? ? 310 HOH B O 1
+HETATM 5479 O O . HOH D 2 . ? 0.344 26.020 61.106 1.00 25.50 ? ? ? ? ? ? 311 HOH B O 1
+HETATM 5480 O O . HOH D 2 . ? 16.934 45.332 52.204 1.00 29.10 ? ? ? ? ? ? 312 HOH B O 1
+HETATM 5481 O O . HOH D 2 . ? -9.369 14.371 77.379 1.00 32.14 ? ? ? ? ? ? 313 HOH B O 1
+HETATM 5482 O O . HOH D 2 . ? 22.064 31.046 89.021 1.00 24.06 ? ? ? ? ? ? 314 HOH B O 1
+HETATM 5483 O O . HOH D 2 . ? -8.528 18.349 89.376 1.00 24.13 ? ? ? ? ? ? 315 HOH B O 1
+HETATM 5484 O O . HOH D 2 . ? 0.435 41.693 78.630 1.00 30.11 ? ? ? ? ? ? 316 HOH B O 1
+HETATM 5485 O O . HOH D 2 . ? 1.584 11.798 73.120 1.00 30.98 ? ? ? ? ? ? 317 HOH B O 1
+HETATM 5486 O O . HOH D 2 . ? 15.362 43.173 44.621 1.00 29.60 ? ? ? ? ? ? 318 HOH B O 1
+HETATM 5487 O O . HOH D 2 . ? 8.197 32.118 57.027 1.00 24.67 ? ? ? ? ? ? 319 HOH B O 1
+HETATM 5488 O O . HOH D 2 . ? 31.199 30.185 61.722 1.00 27.44 ? ? ? ? ? ? 321 HOH B O 1
+HETATM 5489 O O . HOH D 2 . ? -17.072 35.205 76.460 1.00 33.00 ? ? ? ? ? ? 322 HOH B O 1
+HETATM 5490 O O . HOH D 2 . ? 12.274 49.073 80.223 1.00 24.99 ? ? ? ? ? ? 323 HOH B O 1
+HETATM 5491 O O . HOH D 2 . ? 5.117 19.230 89.825 1.00 43.15 ? ? ? ? ? ? 324 HOH B O 1
+HETATM 5492 O O . HOH D 2 . ? 15.811 23.228 87.244 1.00 54.03 ? ? ? ? ? ? 325 HOH B O 1
+HETATM 5493 O O . HOH D 2 . ? 6.000 35.770 94.387 1.00 36.90 ? ? ? ? ? ? 326 HOH B O 1
+HETATM 5494 O O . HOH D 2 . ? 15.101 24.717 92.228 1.00 29.30 ? ? ? ? ? ? 327 HOH B O 1
+HETATM 5495 O O . HOH D 2 . ? 2.662 20.353 88.312 1.00 32.78 ? ? ? ? ? ? 328 HOH B O 1
+HETATM 5496 O O . HOH D 2 . ? 14.429 25.585 80.968 1.00 32.30 ? ? ? ? ? ? 329 HOH B O 1
+HETATM 5497 O O . HOH D 2 . ? 18.044 50.215 78.997 1.00 27.16 ? ? ? ? ? ? 330 HOH B O 1
+HETATM 5498 O O . HOH D 2 . ? 19.334 45.805 90.182 1.00 32.88 ? ? ? ? ? ? 331 HOH B O 1
+HETATM 5499 O O . HOH D 2 . ? 11.036 20.470 80.505 1.00 33.35 ? ? ? ? ? ? 332 HOH B O 1
+HETATM 5500 O O . HOH D 2 . ? -19.123 34.039 78.213 1.00 32.04 ? ? ? ? ? ? 333 HOH B O 1
+HETATM 5501 O O . HOH D 2 . ? 14.295 18.329 87.940 1.00 59.00 ? ? ? ? ? ? 334 HOH B O 1
+HETATM 5502 O O . HOH D 2 . ? 23.125 51.158 59.146 1.00 31.00 ? ? ? ? ? ? 335 HOH B O 1
+HETATM 5503 O O . HOH D 2 . ? 13.007 24.411 78.260 1.00 31.11 ? ? ? ? ? ? 336 HOH B O 1
+HETATM 5504 O O . HOH D 2 . ? -15.858 22.514 82.572 1.00 52.70 ? ? ? ? ? ? 337 HOH B O 1
+HETATM 5505 O O . HOH D 2 . ? -5.591 16.928 87.148 1.00 29.28 ? ? ? ? ? ? 338 HOH B O 1
+HETATM 5506 O O . HOH D 2 . ? 29.824 35.939 71.739 1.00 27.30 ? ? ? ? ? ? 339 HOH B O 1
+HETATM 5507 O O . HOH D 2 . ? -4.663 20.149 87.918 1.00 35.03 ? ? ? ? ? ? 340 HOH B O 1
+HETATM 5508 O O . HOH D 2 . ? -10.607 35.253 86.978 1.00 34.60 ? ? ? ? ? ? 341 HOH B O 1
+HETATM 5509 O O . HOH D 2 . ? 21.277 41.352 89.613 1.00 49.69 ? ? ? ? ? ? 342 HOH B O 1
+HETATM 5510 O O . HOH D 2 . ? 11.461 18.437 85.397 1.00 26.10 ? ? ? ? ? ? 343 HOH B O 1
+HETATM 5511 O O . HOH D 2 . ? 4.475 11.775 80.888 1.00 27.10 ? ? ? ? ? ? 344 HOH B O 1
+HETATM 5512 O O . HOH D 2 . ? 32.910 48.668 54.258 1.00 28.47 ? ? ? ? ? ? 345 HOH B O 1
+HETATM 5513 O O . HOH D 2 . ? 4.364 18.122 63.520 1.00 32.48 ? ? ? ? ? ? 346 HOH B O 1
+HETATM 5514 O O . HOH D 2 . ? 32.630 46.727 56.890 1.00 33.74 ? ? ? ? ? ? 347 HOH B O 1
+HETATM 5515 O O . HOH D 2 . ? 16.288 41.179 43.225 1.00 58.25 ? ? ? ? ? ? 348 HOH B O 1
+HETATM 5516 O O . HOH D 2 . ? 9.666 45.043 85.325 1.00 30.90 ? ? ? ? ? ? 349 HOH B O 1
+HETATM 5517 O O . HOH D 2 . ? 11.805 24.177 95.869 1.00 48.75 ? ? ? ? ? ? 350 HOH B O 1
+HETATM 5518 O O . HOH D 2 . ? 22.242 38.779 47.166 1.00 29.13 ? ? ? ? ? ? 351 HOH B O 1
+HETATM 5519 O O . HOH D 2 . ? 3.453 48.208 74.453 1.00 40.58 ? ? ? ? ? ? 352 HOH B O 1
+HETATM 5520 O O . HOH D 2 . ? -11.224 45.171 61.549 1.00 55.91 ? ? ? ? ? ? 353 HOH B O 1
+HETATM 5521 O O . HOH D 2 . ? 19.387 51.335 56.032 1.00 27.93 ? ? ? ? ? ? 354 HOH B O 1
+HETATM 5522 O O . HOH D 2 . ? 2.032 23.410 62.979 1.00 46.81 ? ? ? ? ? ? 355 HOH B O 1
+HETATM 5523 O O . HOH D 2 . ? 7.467 15.700 94.184 1.00 35.08 ? ? ? ? ? ? 356 HOH B O 1
+HETATM 5524 O O . HOH D 2 . ? 18.756 30.581 52.741 1.00 31.41 ? ? ? ? ? ? 357 HOH B O 1
+HETATM 5525 O O . HOH D 2 . ? 6.487 51.054 56.822 1.00 29.31 ? ? ? ? ? ? 358 HOH B O 1
+HETATM 5526 O O . HOH D 2 . ? 13.121 24.203 71.251 1.00 46.50 ? ? ? ? ? ? 359 HOH B O 1
+HETATM 5527 O O . HOH D 2 . ? 17.500 53.923 70.154 1.00 32.36 ? ? ? ? ? ? 360 HOH B O 1
+HETATM 5528 O O . HOH D 2 . ? 23.444 25.786 69.799 1.00 38.24 ? ? ? ? ? ? 361 HOH B O 1
+HETATM 5529 O O . HOH D 2 . ? 22.194 35.799 89.283 1.00 30.53 ? ? ? ? ? ? 362 HOH B O 1
+HETATM 5530 O O . HOH D 2 . ? -1.186 36.601 50.287 1.00 48.92 ? ? ? ? ? ? 363 HOH B O 1
+HETATM 5531 O O . HOH D 2 . ? 24.144 52.464 62.699 1.00 31.31 ? ? ? ? ? ? 364 HOH B O 1
+HETATM 5532 O O . HOH D 2 . ? 2.291 53.667 59.537 1.00 40.22 ? ? ? ? ? ? 365 HOH B O 1
+HETATM 5533 O O . HOH D 2 . ? 0.425 51.643 58.771 1.00 32.98 ? ? ? ? ? ? 366 HOH B O 1
+HETATM 5534 O O . HOH D 2 . ? 5.091 31.699 92.420 1.00 35.57 ? ? ? ? ? ? 367 HOH B O 1
+HETATM 5535 O O . HOH D 2 . ? 32.321 45.942 91.655 1.00 52.87 ? ? ? ? ? ? 368 HOH B O 1
+HETATM 5536 O O . HOH D 2 . ? 18.563 46.577 51.453 1.00 27.08 ? ? ? ? ? ? 369 HOH B O 1
+HETATM 5537 O O . HOH D 2 . ? 17.280 52.655 56.855 1.00 35.97 ? ? ? ? ? ? 370 HOH B O 1
+HETATM 5538 O O . HOH D 2 . ? -3.601 46.622 54.884 1.00 40.65 ? ? ? ? ? ? 371 HOH B O 1
+HETATM 5539 O O . HOH D 2 . ? 28.288 44.309 50.784 1.00 50.16 ? ? ? ? ? ? 372 HOH B O 1
+HETATM 5540 O O . HOH D 2 . ? 21.146 32.821 57.676 1.00 39.27 ? ? ? ? ? ? 373 HOH B O 1
+HETATM 5541 O O . HOH D 2 . ? 0.107 15.141 68.731 1.00 44.32 ? ? ? ? ? ? 374 HOH B O 1
+HETATM 5542 O O . HOH D 2 . ? 15.916 52.384 77.418 1.00 38.73 ? ? ? ? ? ? 375 HOH B O 1
+HETATM 5543 O O . HOH D 2 . ? 26.382 29.240 84.737 1.00 34.99 ? ? ? ? ? ? 376 HOH B O 1
+HETATM 5544 O O . HOH D 2 . ? -18.219 29.808 69.614 1.00 32.85 ? ? ? ? ? ? 377 HOH B O 1
+HETATM 5545 O O . HOH D 2 . ? 28.556 28.222 80.228 1.00 38.74 ? ? ? ? ? ? 378 HOH B O 1
+HETATM 5546 O O . HOH D 2 . ? 9.034 28.051 67.305 1.00 32.99 ? ? ? ? ? ? 379 HOH B O 1
+HETATM 5547 O O . HOH D 2 . ? 26.642 25.242 95.920 1.00 39.74 ? ? ? ? ? ? 380 HOH B O 1
+HETATM 5548 O O . HOH D 2 . ? 10.488 33.782 51.265 1.00 34.16 ? ? ? ? ? ? 382 HOH B O 1
+HETATM 5549 O O . HOH D 2 . ? 18.477 47.625 85.435 1.00 33.25 ? ? ? ? ? ? 383 HOH B O 1
+HETATM 5550 O O . HOH D 2 . ? -10.288 15.489 75.489 1.00 43.76 ? ? ? ? ? ? 384 HOH B O 1
+HETATM 5551 O O . HOH D 2 . ? 6.985 6.114 76.686 1.00 40.24 ? ? ? ? ? ? 385 HOH B O 1
+HETATM 5552 O O . HOH D 2 . ? 9.284 40.209 92.226 1.00 26.97 ? ? ? ? ? ? 386 HOH B O 1
+HETATM 5553 O O . HOH D 2 . ? 2.426 43.260 77.203 1.00 37.48 ? ? ? ? ? ? 387 HOH B O 1
+HETATM 5554 O O . HOH D 2 . ? 21.594 49.319 85.641 1.00 63.27 ? ? ? ? ? ? 388 HOH B O 1
+HETATM 5555 O O . HOH D 2 . ? 3.891 42.665 81.958 1.00 28.85 ? ? ? ? ? ? 389 HOH B O 1
+HETATM 5556 O O . HOH D 2 . ? 14.554 52.382 55.766 1.00 33.31 ? ? ? ? ? ? 390 HOH B O 1
+HETATM 5557 O O . HOH D 2 . ? 19.390 40.711 45.920 1.00 34.09 ? ? ? ? ? ? 391 HOH B O 1
+HETATM 5558 O O . HOH D 2 . ? 1.779 49.905 71.347 1.00 43.27 ? ? ? ? ? ? 392 HOH B O 1
+HETATM 5559 O O . HOH D 2 . ? -7.135 21.945 57.471 1.00 38.93 ? ? ? ? ? ? 394 HOH B O 1
+HETATM 5560 O O . HOH D 2 . ? -4.084 46.475 67.409 1.00 35.80 ? ? ? ? ? ? 395 HOH B O 1
+HETATM 5561 O O . HOH D 2 . ? -0.011 52.405 62.898 1.00 44.36 ? ? ? ? ? ? 396 HOH B O 1
+HETATM 5562 O O . HOH D 2 . ? 11.370 15.515 60.542 1.00 46.65 ? ? ? ? ? ? 398 HOH B O 1
+HETATM 5563 O O . HOH D 2 . ? 28.570 37.378 53.924 1.00 58.86 ? ? ? ? ? ? 399 HOH B O 1
+HETATM 5564 O O . HOH D 2 . ? 0.768 30.031 56.195 1.00 48.36 ? ? ? ? ? ? 400 HOH B O 1
+HETATM 5565 O O . HOH D 2 . ? -12.502 46.812 64.587 1.00 41.50 ? ? ? ? ? ? 401 HOH B O 1
+HETATM 5566 O O . HOH D 2 . ? 25.213 40.882 48.238 1.00 46.86 ? ? ? ? ? ? 402 HOH B O 1
+HETATM 5567 O O . HOH D 2 . ? 25.580 22.893 84.946 1.00 45.70 ? ? ? ? ? ? 403 HOH B O 1
+HETATM 5568 O O . HOH D 2 . ? -2.249 11.540 87.002 1.00 31.82 ? ? ? ? ? ? 404 HOH B O 1
+HETATM 5569 O O . HOH D 2 . ? 25.308 49.851 52.412 1.00 37.89 ? ? ? ? ? ? 405 HOH B O 1
+HETATM 5570 O O . HOH D 2 . ? 24.661 42.533 73.312 1.00 42.30 ? ? ? ? ? ? 406 HOH B O 1
+HETATM 5571 O O . HOH D 2 . ? 2.972 11.241 82.743 1.00 44.00 ? ? ? ? ? ? 407 HOH B O 1
+HETATM 5572 O O . HOH D 2 . ? 13.602 48.749 82.587 1.00 35.11 ? ? ? ? ? ? 408 HOH B O 1
+HETATM 5573 O O . HOH D 2 . ? 27.776 57.429 37.966 1.00 38.85 ? ? ? ? ? ? 409 HOH B O 1
+HETATM 5574 O O . HOH D 2 . ? 12.082 51.920 56.347 1.00 40.47 ? ? ? ? ? ? 410 HOH B O 1
+HETATM 5575 O O . HOH D 2 . ? 27.993 46.209 81.546 1.00 34.53 ? ? ? ? ? ? 411 HOH B O 1
+HETATM 5576 O O . HOH D 2 . ? -12.836 35.702 59.217 1.00 56.62 ? ? ? ? ? ? 412 HOH B O 1
+HETATM 5577 O O . HOH D 2 . ? 14.774 23.856 76.256 1.00 54.46 ? ? ? ? ? ? 413 HOH B O 1
+HETATM 5578 O O . HOH D 2 . ? 17.265 54.862 74.559 1.00 41.62 ? ? ? ? ? ? 414 HOH B O 1
+HETATM 5579 O O . HOH D 2 . ? 14.436 24.254 94.784 1.00 49.31 ? ? ? ? ? ? 415 HOH B O 1
+HETATM 5580 O O . HOH D 2 . ? 31.277 34.474 57.710 1.00 48.63 ? ? ? ? ? ? 416 HOH B O 1
+HETATM 5581 O O . HOH D 2 . ? 3.921 54.887 60.562 1.00 38.97 ? ? ? ? ? ? 417 HOH B O 1
+HETATM 5582 O O . HOH D 2 . ? 7.279 57.053 60.698 1.00 42.99 ? ? ? ? ? ? 418 HOH B O 1
+HETATM 5583 O O . HOH D 2 . ? 12.783 56.454 69.886 1.00 59.67 ? ? ? ? ? ? 419 HOH B O 1
+HETATM 5584 O O . HOH D 2 . ? 9.287 54.924 62.562 1.00 55.31 ? ? ? ? ? ? 420 HOH B O 1
+HETATM 5585 O O . HOH D 2 . ? 6.435 26.733 64.945 1.00 45.61 ? ? ? ? ? ? 421 HOH B O 1
+HETATM 5586 O O . HOH D 2 . ? 27.163 48.475 71.511 1.00 36.69 ? ? ? ? ? ? 422 HOH B O 1
+HETATM 5587 O O . HOH D 2 . ? 32.717 39.475 56.975 1.00 66.63 ? ? ? ? ? ? 423 HOH B O 1
+HETATM 5588 O O . HOH D 2 . ? 13.945 54.932 62.936 1.00 44.37 ? ? ? ? ? ? 424 HOH B O 1
+HETATM 5589 O O . HOH D 2 . ? -16.352 27.758 82.727 1.00 59.88 ? ? ? ? ? ? 425 HOH B O 1
+HETATM 5590 O O . HOH D 2 . ? -10.226 28.273 58.851 1.00 22.92 ? ? ? ? ? ? 426 HOH B O 1
+HETATM 5591 O O . HOH D 2 . ? 15.345 37.556 43.119 1.00 30.79 ? ? ? ? ? ? 427 HOH B O 1
+HETATM 5592 O O . HOH D 2 . ? 14.902 34.782 60.183 1.00 29.59 ? ? ? ? ? ? 428 HOH B O 1
+HETATM 5593 O O . HOH D 2 . ? 12.342 40.180 92.912 1.00 35.70 ? ? ? ? ? ? 429 HOH B O 1
+HETATM 5594 O O . HOH D 2 . ? 18.635 30.601 57.111 1.00 30.88 ? ? ? ? ? ? 430 HOH B O 1
+HETATM 5595 O O . HOH D 2 . ? -7.115 10.825 84.024 1.00 40.05 ? ? ? ? ? ? 431 HOH B O 1
+HETATM 5596 O O . HOH D 2 . ? 22.562 46.248 86.460 1.00 37.42 ? ? ? ? ? ? 432 HOH B O 1
+HETATM 5597 O O . HOH D 2 . ? 14.941 53.849 75.753 1.00 44.97 ? ? ? ? ? ? 433 HOH B O 1
+HETATM 5598 O O . HOH D 2 . ? 6.418 51.509 76.317 1.00 42.82 ? ? ? ? ? ? 434 HOH B O 1
+HETATM 5599 O O . HOH D 2 . ? -3.377 13.540 89.150 1.00 49.63 ? ? ? ? ? ? 435 HOH B O 1
+HETATM 5600 O O . HOH D 2 . ? 17.524 26.763 66.833 1.00 45.16 ? ? ? ? ? ? 436 HOH B O 1
+HETATM 5601 O O . HOH D 2 . ? 14.163 52.054 80.027 1.00 42.40 ? ? ? ? ? ? 437 HOH B O 1
+HETATM 5602 O O . HOH D 2 . ? -14.268 19.606 63.930 1.00 53.29 ? ? ? ? ? ? 438 HOH B O 1
+HETATM 5603 O O . HOH D 2 . ? 24.388 33.353 87.899 1.00 51.55 ? ? ? ? ? ? 439 HOH B O 1
+HETATM 5604 O O . HOH D 2 . ? 26.499 35.132 53.196 1.00 50.30 ? ? ? ? ? ? 440 HOH B O 1
+HETATM 5605 O O . HOH D 2 . ? 20.910 24.375 68.203 1.00 41.47 ? ? ? ? ? ? 441 HOH B O 1
+HETATM 5606 O O . HOH D 2 . ? 12.592 22.023 74.150 1.00 48.62 ? ? ? ? ? ? 442 HOH B O 1
+HETATM 5607 O O . HOH D 2 . ? 27.810 51.436 60.171 1.00 47.01 ? ? ? ? ? ? 443 HOH B O 1
+HETATM 5608 O O . HOH D 2 . ? 20.572 32.850 90.940 1.00 39.22 ? ? ? ? ? ? 444 HOH B O 1
+HETATM 5609 O O . HOH D 2 . ? 7.283 45.036 85.904 1.00 47.83 ? ? ? ? ? ? 445 HOH B O 1
+HETATM 5610 O O . HOH D 2 . ? 19.416 49.282 52.360 1.00 62.10 ? ? ? ? ? ? 446 HOH B O 1
+HETATM 5611 O O . HOH D 2 . ? -6.500 47.108 60.081 1.00 46.04 ? ? ? ? ? ? 447 HOH B O 1
+HETATM 5612 O O . HOH D 2 . ? 29.110 49.027 69.273 1.00 40.84 ? ? ? ? ? ? 448 HOH B O 1
+HETATM 5613 O O . HOH D 2 . ? 23.798 27.669 65.029 1.00 46.57 ? ? ? ? ? ? 449 HOH B O 1
+HETATM 5614 O O . HOH D 2 . ? -15.229 44.157 67.678 1.00 50.74 ? ? ? ? ? ? 450 HOH B O 1
+HETATM 5615 O O . HOH D 2 . ? 18.882 25.750 65.244 1.00 45.94 ? ? ? ? ? ? 451 HOH B O 1
+HETATM 5616 O O . HOH D 2 . ? 16.513 52.748 52.843 1.00 51.82 ? ? ? ? ? ? 452 HOH B O 1
+HETATM 5617 O O . HOH D 2 . ? 30.078 50.954 62.668 1.00 65.77 ? ? ? ? ? ? 453 HOH B O 1
+HETATM 5618 O O . HOH D 2 . ? -13.923 24.553 83.514 1.00 42.38 ? ? ? ? ? ? 454 HOH B O 1
+HETATM 5619 O O . HOH D 2 . ? 11.887 26.977 67.039 1.00 50.06 ? ? ? ? ? ? 455 HOH B O 1
+HETATM 5620 O O . HOH D 2 . ? 4.457 32.773 95.166 1.00 54.07 ? ? ? ? ? ? 456 HOH B O 1
+HETATM 5621 O O . HOH D 2 . ? 22.641 45.784 49.039 1.00 62.26 ? ? ? ? ? ? 457 HOH B O 1
+#
+loop_
+_pdbx_poly_seq_scheme.asym_id
+_pdbx_poly_seq_scheme.entity_id
+_pdbx_poly_seq_scheme.seq_id
+_pdbx_poly_seq_scheme.mon_id
+_pdbx_poly_seq_scheme.ndb_seq_num
+_pdbx_poly_seq_scheme.pdb_seq_num
+_pdbx_poly_seq_scheme.auth_seq_num
+_pdbx_poly_seq_scheme.pdb_mon_id
+_pdbx_poly_seq_scheme.auth_mon_id
+_pdbx_poly_seq_scheme.pdb_strand_id
+_pdbx_poly_seq_scheme.pdb_ins_code
+_pdbx_poly_seq_scheme.hetero
+A 1 1 PRO 1 491 ? ? ? A . n
+A 1 2 GLY 2 492 ? ? ? A . n
+A 1 3 GLN 3 493 ? ? ? A . n
+A 1 4 GLY 4 494 ? ? ? A . n
+A 1 5 ASP 5 495 ? ? ? A . n
+A 1 6 VAL 6 496 ? ? ? A . n
+A 1 7 GLN 7 497 ? ? ? A . n
+A 1 8 THR 8 498 ? ? ? A . n
+A 1 9 PRO 9 499 ? ? ? A . n
+A 1 10 ASN 10 500 ? ? ? A . n
+A 1 11 PRO 11 501 ? ? ? A . n
+A 1 12 SER 12 502 ? ? ? A . n
+A 1 13 VAL 13 503 ? ? ? A . n
+A 1 14 THR 14 504 ? ? ? A . n
+A 1 15 PRO 15 505 ? ? ? A . n
+A 1 16 THR 16 506 ? ? ? A . n
+A 1 17 GLN 17 507 ? ? ? A . n
+A 1 18 THR 18 508 ? ? ? A . n
+A 1 19 PRO 19 509 ? ? ? A . n
+A 1 20 ILE 20 510 ? ? ? A . n
+A 1 21 PRO 21 511 ? ? ? A . n
+A 1 22 THR 22 512 ? ? ? A . n
+A 1 23 ILE 23 513 ? ? ? A . n
+A 1 24 SER 24 514 ? ? ? A . n
+A 1 25 GLY 25 515 ? ? ? A . n
+A 1 26 ASN 26 516 516 ASN ASN A . n
+A 1 27 ALA 27 517 517 ALA ALA A . n
+A 1 28 LEU 28 518 518 LEU LEU A . n
+A 1 29 ARG 29 519 519 ARG ARG A . n
+A 1 30 ASP 30 520 520 ASP ASP A . n
+A 1 31 TYR 31 521 521 TYR TYR A . n
+A 1 32 ALA 32 522 522 ALA ALA A . n
+A 1 33 GLU 33 523 523 GLU GLU A . n
+A 1 34 ALA 34 524 524 ALA ALA A . n
+A 1 35 ARG 35 525 525 ARG ARG A . n
+A 1 36 GLY 36 526 526 GLY GLY A . n
+A 1 37 ILE 37 527 527 ILE ILE A . n
+A 1 38 LYS 38 528 528 LYS LYS A . n
+A 1 39 ILE 39 529 529 ILE ILE A . n
+A 1 40 GLY 40 530 530 GLY GLY A . n
+A 1 41 THR 41 531 531 THR THR A . n
+A 1 42 CYS 42 532 532 CYS CYS A . n
+A 1 43 VAL 43 533 533 VAL VAL A . n
+A 1 44 ASN 44 534 534 ASN ASN A . n
+A 1 45 TYR 45 535 535 TYR TYR A . n
+A 1 46 PRO 46 536 536 PRO PRO A . n
+A 1 47 PHE 47 537 537 PHE PHE A . n
+A 1 48 TYR 48 538 538 TYR TYR A . n
+A 1 49 ASN 49 539 539 ASN ASN A . n
+A 1 50 ASN 50 540 540 ASN ASN A . n
+A 1 51 SER 51 541 541 SER SER A . n
+A 1 52 ASP 52 542 542 ASP ASP A . n
+A 1 53 PRO 53 543 543 PRO PRO A . n
+A 1 54 THR 54 544 544 THR THR A . n
+A 1 55 TYR 55 545 545 TYR TYR A . n
+A 1 56 ASN 56 546 546 ASN ASN A . n
+A 1 57 SER 57 547 547 SER SER A . n
+A 1 58 ILE 58 548 548 ILE ILE A . n
+A 1 59 LEU 59 549 549 LEU LEU A . n
+A 1 60 GLN 60 550 550 GLN GLN A . n
+A 1 61 ARG 61 551 551 ARG ARG A . n
+A 1 62 GLU 62 552 552 GLU GLU A . n
+A 1 63 PHE 63 553 553 PHE PHE A . n
+A 1 64 SER 64 554 554 SER SER A . n
+A 1 65 MET 65 555 555 MET MET A . n
+A 1 66 VAL 66 556 556 VAL VAL A . n
+A 1 67 VAL 67 557 557 VAL VAL A . n
+A 1 68 CYS 68 558 558 CYS CYS A . n
+A 1 69 GLU 69 559 559 GLU GLU A . n
+A 1 70 ASN 70 560 560 ASN ASN A . n
+A 1 71 GLU 71 561 561 GLU GLU A . n
+A 1 72 MET 72 562 562 MET MET A . n
+A 1 73 LYS 73 563 563 LYS LYS A . n
+A 1 74 PHE 74 564 564 PHE PHE A . n
+A 1 75 ASP 75 565 565 ASP ASP A . n
+A 1 76 ALA 76 566 566 ALA ALA A . n
+A 1 77 LEU 77 567 567 LEU LEU A . n
+A 1 78 GLN 78 568 568 GLN GLN A . n
+A 1 79 PRO 79 569 569 PRO PRO A . n
+A 1 80 ARG 80 570 570 ARG ARG A . n
+A 1 81 GLN 81 571 571 GLN GLN A . n
+A 1 82 ASN 82 572 572 ASN ASN A . n
+A 1 83 VAL 83 573 573 VAL VAL A . n
+A 1 84 PHE 84 574 574 PHE PHE A . n
+A 1 85 ASP 85 575 575 ASP ASP A . n
+A 1 86 PHE 86 576 576 PHE PHE A . n
+A 1 87 SER 87 577 577 SER SER A . n
+A 1 88 LYS 88 578 578 LYS LYS A . n
+A 1 89 GLY 89 579 579 GLY GLY A . n
+A 1 90 ASP 90 580 580 ASP ASP A . n
+A 1 91 GLN 91 581 581 GLN GLN A . n
+A 1 92 LEU 92 582 582 LEU LEU A . n
+A 1 93 LEU 93 583 583 LEU LEU A . n
+A 1 94 ALA 94 584 584 ALA ALA A . n
+A 1 95 PHE 95 585 585 PHE PHE A . n
+A 1 96 ALA 96 586 586 ALA ALA A . n
+A 1 97 GLU 97 587 587 GLU GLU A . n
+A 1 98 ARG 98 588 588 ARG ARG A . n
+A 1 99 ASN 99 589 589 ASN ASN A . n
+A 1 100 GLY 100 590 590 GLY GLY A . n
+A 1 101 MET 101 591 591 MET MET A . n
+A 1 102 GLN 102 592 592 GLN GLN A . n
+A 1 103 MET 103 593 593 MET MET A . n
+A 1 104 ARG 104 594 594 ARG ARG A . n
+A 1 105 GLY 105 595 595 GLY GLY A . n
+A 1 106 HIS 106 596 596 HIS HIS A . n
+A 1 107 THR 107 597 597 THR THR A . n
+A 1 108 LEU 108 598 598 LEU LEU A . n
+A 1 109 ILE 109 599 599 ILE ILE A . n
+A 1 110 TRP 110 600 600 TRP TRP A . n
+A 1 111 HIS 111 601 601 HIS HIS A . n
+A 1 112 ASN 112 602 602 ASN ASN A . n
+A 1 113 GLN 113 603 603 GLN GLN A . n
+A 1 114 ASN 114 604 604 ASN ASN A . n
+A 1 115 PRO 115 605 605 PRO PRO A . n
+A 1 116 SER 116 606 606 SER SER A . n
+A 1 117 TRP 117 607 607 TRP TRP A . n
+A 1 118 LEU 118 608 608 LEU LEU A . n
+A 1 119 THR 119 609 609 THR THR A . n
+A 1 120 ASN 120 610 610 ASN ASN A . n
+A 1 121 GLY 121 611 611 GLY GLY A . n
+A 1 122 ASN 122 612 612 ASN ASN A . n
+A 1 123 TRP 123 613 613 TRP TRP A . n
+A 1 124 ASN 124 614 614 ASN ASN A . n
+A 1 125 ARG 125 615 615 ARG ARG A . n
+A 1 126 ASP 126 616 616 ASP ASP A . n
+A 1 127 SER 127 617 617 SER SER A . n
+A 1 128 LEU 128 618 618 LEU LEU A . n
+A 1 129 LEU 129 619 619 LEU LEU A . n
+A 1 130 ALA 130 620 620 ALA ALA A . n
+A 1 131 VAL 131 621 621 VAL VAL A . n
+A 1 132 MET 132 622 622 MET MET A . n
+A 1 133 LYS 133 623 623 LYS LYS A . n
+A 1 134 ASN 134 624 624 ASN ASN A . n
+A 1 135 HIS 135 625 625 HIS HIS A . n
+A 1 136 ILE 136 626 626 ILE ILE A . n
+A 1 137 THR 137 627 627 THR THR A . n
+A 1 138 THR 138 628 628 THR THR A . n
+A 1 139 VAL 139 629 629 VAL VAL A . n
+A 1 140 MET 140 630 630 MET MET A . n
+A 1 141 THR 141 631 631 THR THR A . n
+A 1 142 HIS 142 632 632 HIS HIS A . n
+A 1 143 TYR 143 633 633 TYR TYR A . n
+A 1 144 LYS 144 634 634 LYS LYS A . n
+A 1 145 GLY 145 635 635 GLY GLY A . n
+A 1 146 LYS 146 636 636 LYS LYS A . n
+A 1 147 ILE 147 637 637 ILE ILE A . n
+A 1 148 VAL 148 638 638 VAL VAL A . n
+A 1 149 GLU 149 639 639 GLU GLU A . n
+A 1 150 TRP 150 640 640 TRP TRP A . n
+A 1 151 ASP 151 641 641 ASP ASP A . n
+A 1 152 VAL 152 642 642 VAL VAL A . n
+A 1 153 ALA 153 643 643 ALA ALA A . n
+A 1 154 ASN 154 644 644 ASN ASN A . n
+A 1 155 GLU 155 645 645 GLU GLU A . n
+A 1 156 CYS 156 646 646 CYS CYS A . n
+A 1 157 MET 157 647 647 MET MET A . n
+A 1 158 ASP 158 648 648 ASP ASP A . n
+A 1 159 ASP 159 649 649 ASP ASP A . n
+A 1 160 SER 160 650 650 SER SER A . n
+A 1 161 GLY 161 651 651 GLY GLY A . n
+A 1 162 ASN 162 652 652 ASN ASN A . n
+A 1 163 GLY 163 653 653 GLY GLY A . n
+A 1 164 LEU 164 654 654 LEU LEU A . n
+A 1 165 ARG 165 655 655 ARG ARG A . n
+A 1 166 SER 166 656 656 SER SER A . n
+A 1 167 SER 167 657 657 SER SER A . n
+A 1 168 ILE 168 658 658 ILE ILE A . n
+A 1 169 TRP 169 659 659 TRP TRP A . n
+A 1 170 ARG 170 660 660 ARG ARG A . n
+A 1 171 ASN 171 661 661 ASN ASN A . n
+A 1 172 VAL 172 662 662 VAL VAL A . n
+A 1 173 ILE 173 663 663 ILE ILE A . n
+A 1 174 GLY 174 664 664 GLY GLY A . n
+A 1 175 GLN 175 665 665 GLN GLN A . n
+A 1 176 ASP 176 666 666 ASP ASP A . n
+A 1 177 TYR 177 667 667 TYR TYR A . n
+A 1 178 LEU 178 668 668 LEU LEU A . n
+A 1 179 ASP 179 669 669 ASP ASP A . n
+A 1 180 TYR 180 670 670 TYR TYR A . n
+A 1 181 ALA 181 671 671 ALA ALA A . n
+A 1 182 PHE 182 672 672 PHE PHE A . n
+A 1 183 ARG 183 673 673 ARG ARG A . n
+A 1 184 TYR 184 674 674 TYR TYR A . n
+A 1 185 ALA 185 675 675 ALA ALA A . n
+A 1 186 ARG 186 676 676 ARG ARG A . n
+A 1 187 GLU 187 677 677 GLU GLU A . n
+A 1 188 ALA 188 678 678 ALA ALA A . n
+A 1 189 ASP 189 679 679 ASP ASP A . n
+A 1 190 PRO 190 680 680 PRO PRO A . n
+A 1 191 ASP 191 681 681 ASP ASP A . n
+A 1 192 ALA 192 682 682 ALA ALA A . n
+A 1 193 LEU 193 683 683 LEU LEU A . n
+A 1 194 LEU 194 684 684 LEU LEU A . n
+A 1 195 PHE 195 685 685 PHE PHE A . n
+A 1 196 TYR 196 686 686 TYR TYR A . n
+A 1 197 ASN 197 687 687 ASN ASN A . n
+A 1 198 ASP 198 688 688 ASP ASP A . n
+A 1 199 TYR 199 689 689 TYR TYR A . n
+A 1 200 ASN 200 690 690 ASN ASN A . n
+A 1 201 ILE 201 691 691 ILE ILE A . n
+A 1 202 GLU 202 692 692 GLU GLU A . n
+A 1 203 ASP 203 693 693 ASP ASP A . n
+A 1 204 LEU 204 694 694 LEU LEU A . n
+A 1 205 GLY 205 695 695 GLY GLY A . n
+A 1 206 PRO 206 696 696 PRO PRO A . n
+A 1 207 LYS 207 697 697 LYS LYS A . n
+A 1 208 SER 208 698 698 SER SER A . n
+A 1 209 ASN 209 699 699 ASN ASN A . n
+A 1 210 ALA 210 700 700 ALA ALA A . n
+A 1 211 VAL 211 701 701 VAL VAL A . n
+A 1 212 PHE 212 702 702 PHE PHE A . n
+A 1 213 ASN 213 703 703 ASN ASN A . n
+A 1 214 MET 214 704 704 MET MET A . n
+A 1 215 ILE 215 705 705 ILE ILE A . n
+A 1 216 LYS 216 706 706 LYS LYS A . n
+A 1 217 SER 217 707 707 SER SER A . n
+A 1 218 MET 218 708 708 MET MET A . n
+A 1 219 LYS 219 709 709 LYS LYS A . n
+A 1 220 GLU 220 710 710 GLU GLU A . n
+A 1 221 ARG 221 711 711 ARG ARG A . n
+A 1 222 GLY 222 712 712 GLY GLY A . n
+A 1 223 VAL 223 713 713 VAL VAL A . n
+A 1 224 PRO 224 714 714 PRO PRO A . n
+A 1 225 ILE 225 715 715 ILE ILE A . n
+A 1 226 ASP 226 716 716 ASP ASP A . n
+A 1 227 GLY 227 717 717 GLY GLY A . n
+A 1 228 VAL 228 718 718 VAL VAL A . n
+A 1 229 GLY 229 719 719 GLY GLY A . n
+A 1 230 PHE 230 720 720 PHE PHE A . n
+A 1 231 GLN 231 721 721 GLN GLN A . n
+A 1 232 CYS 232 722 722 CYS CYS A . n
+A 1 233 HIS 233 723 723 HIS HIS A . n
+A 1 234 PHE 234 724 724 PHE PHE A . n
+A 1 235 ILE 235 725 725 ILE ILE A . n
+A 1 236 ASN 236 726 726 ASN ASN A . n
+A 1 237 GLY 237 727 727 GLY GLY A . n
+A 1 238 MET 238 728 728 MET MET A . n
+A 1 239 SER 239 729 729 SER SER A . n
+A 1 240 PRO 240 730 730 PRO PRO A . n
+A 1 241 GLU 241 731 731 GLU GLU A . n
+A 1 242 TYR 242 732 732 TYR TYR A . n
+A 1 243 LEU 243 733 733 LEU LEU A . n
+A 1 244 ALA 244 734 734 ALA ALA A . n
+A 1 245 SER 245 735 735 SER SER A . n
+A 1 246 ILE 246 736 736 ILE ILE A . n
+A 1 247 ASP 247 737 737 ASP ASP A . n
+A 1 248 GLN 248 738 738 GLN GLN A . n
+A 1 249 ASN 249 739 739 ASN ASN A . n
+A 1 250 ILE 250 740 740 ILE ILE A . n
+A 1 251 LYS 251 741 741 LYS LYS A . n
+A 1 252 ARG 252 742 742 ARG ARG A . n
+A 1 253 TYR 253 743 743 TYR TYR A . n
+A 1 254 ALA 254 744 744 ALA ALA A . n
+A 1 255 GLU 255 745 745 GLU GLU A . n
+A 1 256 ILE 256 746 746 ILE ILE A . n
+A 1 257 GLY 257 747 747 GLY GLY A . n
+A 1 258 VAL 258 748 748 VAL VAL A . n
+A 1 259 ILE 259 749 749 ILE ILE A . n
+A 1 260 VAL 260 750 750 VAL VAL A . n
+A 1 261 SER 261 751 751 SER SER A . n
+A 1 262 PHE 262 752 752 PHE PHE A . n
+A 1 263 THR 263 753 753 THR THR A . n
+A 1 264 GLU 264 754 754 GLU GLU A . n
+A 1 265 ILE 265 755 755 ILE ILE A . n
+A 1 266 ASP 266 756 756 ASP ASP A . n
+A 1 267 ILE 267 757 757 ILE ILE A . n
+A 1 268 ARG 268 758 758 ARG ARG A . n
+A 1 269 ILE 269 759 759 ILE ILE A . n
+A 1 270 PRO 270 760 760 PRO PRO A . n
+A 1 271 GLN 271 761 761 GLN GLN A . n
+A 1 272 SER 272 762 762 SER SER A . n
+A 1 273 GLU 273 763 763 GLU GLU A . n
+A 1 274 ASN 274 764 764 ASN ASN A . n
+A 1 275 PRO 275 765 765 PRO PRO A . n
+A 1 276 ALA 276 766 766 ALA ALA A . n
+A 1 277 THR 277 767 767 THR THR A . n
+A 1 278 ALA 278 768 768 ALA ALA A . n
+A 1 279 PHE 279 769 769 PHE PHE A . n
+A 1 280 GLN 280 770 770 GLN GLN A . n
+A 1 281 VAL 281 771 771 VAL VAL A . n
+A 1 282 GLN 282 772 772 GLN GLN A . n
+A 1 283 ALA 283 773 773 ALA ALA A . n
+A 1 284 ASN 284 774 774 ASN ASN A . n
+A 1 285 ASN 285 775 775 ASN ASN A . n
+A 1 286 TYR 286 776 776 TYR TYR A . n
+A 1 287 LYS 287 777 777 LYS LYS A . n
+A 1 288 GLU 288 778 778 GLU GLU A . n
+A 1 289 LEU 289 779 779 LEU LEU A . n
+A 1 290 MET 290 780 780 MET MET A . n
+A 1 291 LYS 291 781 781 LYS LYS A . n
+A 1 292 ILE 292 782 782 ILE ILE A . n
+A 1 293 CYS 293 783 783 CYS CYS A . n
+A 1 294 LEU 294 784 784 LEU LEU A . n
+A 1 295 ALA 295 785 785 ALA ALA A . n
+A 1 296 ASN 296 786 786 ASN ASN A . n
+A 1 297 PRO 297 787 787 PRO PRO A . n
+A 1 298 ASN 298 788 788 ASN ASN A . n
+A 1 299 CYS 299 789 789 CYS CYS A . n
+A 1 300 ASN 300 790 790 ASN ASN A . n
+A 1 301 THR 301 791 791 THR THR A . n
+A 1 302 PHE 302 792 792 PHE PHE A . n
+A 1 303 VAL 303 793 793 VAL VAL A . n
+A 1 304 MET 304 794 794 MET MET A . n
+A 1 305 TRP 305 795 795 TRP TRP A . n
+A 1 306 GLY 306 796 796 GLY GLY A . n
+A 1 307 PHE 307 797 797 PHE PHE A . n
+A 1 308 THR 308 798 798 THR THR A . n
+A 1 309 ASP 309 799 799 ASP ASP A . n
+A 1 310 LYS 310 800 800 LYS LYS A . n
+A 1 311 TYR 311 801 801 TYR TYR A . n
+A 1 312 THR 312 802 802 THR THR A . n
+A 1 313 TRP 313 803 803 TRP TRP A . n
+A 1 314 ILE 314 804 804 ILE ILE A . n
+A 1 315 PRO 315 805 805 PRO PRO A . n
+A 1 316 GLY 316 806 806 GLY GLY A . n
+A 1 317 THR 317 807 807 THR THR A . n
+A 1 318 PHE 318 808 808 PHE PHE A . n
+A 1 319 PRO 319 809 809 PRO PRO A . n
+A 1 320 GLY 320 810 810 GLY GLY A . n
+A 1 321 TYR 321 811 811 TYR TYR A . n
+A 1 322 GLY 322 812 812 GLY GLY A . n
+A 1 323 ASN 323 813 813 ASN ASN A . n
+A 1 324 PRO 324 814 814 PRO PRO A . n
+A 1 325 LEU 325 815 815 LEU LEU A . n
+A 1 326 ILE 326 816 816 ILE ILE A . n
+A 1 327 TYR 327 817 817 TYR TYR A . n
+A 1 328 ASP 328 818 818 ASP ASP A . n
+A 1 329 SER 329 819 819 SER SER A . n
+A 1 330 ASN 330 820 820 ASN ASN A . n
+A 1 331 TYR 331 821 821 TYR TYR A . n
+A 1 332 ASN 332 822 822 ASN ASN A . n
+A 1 333 PRO 333 823 823 PRO PRO A . n
+A 1 334 LYS 334 824 824 LYS LYS A . n
+A 1 335 PRO 335 825 825 PRO PRO A . n
+A 1 336 ALA 336 826 826 ALA ALA A . n
+A 1 337 TYR 337 827 827 TYR TYR A . n
+A 1 338 ASN 338 828 828 ASN ASN A . n
+A 1 339 ALA 339 829 829 ALA ALA A . n
+A 1 340 ILE 340 830 830 ILE ILE A . n
+A 1 341 LYS 341 831 831 LYS LYS A . n
+A 1 342 GLU 342 832 832 GLU GLU A . n
+A 1 343 ALA 343 833 833 ALA ALA A . n
+A 1 344 LEU 344 834 834 LEU LEU A . n
+A 1 345 MET 345 835 835 MET MET A . n
+A 1 346 GLY 346 836 ? ? ? A . n
+A 1 347 TYR 347 837 ? ? ? A . n
+B 1 1 PRO 1 491 ? ? ? B . n
+B 1 2 GLY 2 492 ? ? ? B . n
+B 1 3 GLN 3 493 ? ? ? B . n
+B 1 4 GLY 4 494 ? ? ? B . n
+B 1 5 ASP 5 495 ? ? ? B . n
+B 1 6 VAL 6 496 ? ? ? B . n
+B 1 7 GLN 7 497 ? ? ? B . n
+B 1 8 THR 8 498 ? ? ? B . n
+B 1 9 PRO 9 499 ? ? ? B . n
+B 1 10 ASN 10 500 ? ? ? B . n
+B 1 11 PRO 11 501 ? ? ? B . n
+B 1 12 SER 12 502 ? ? ? B . n
+B 1 13 VAL 13 503 ? ? ? B . n
+B 1 14 THR 14 504 ? ? ? B . n
+B 1 15 PRO 15 505 ? ? ? B . n
+B 1 16 THR 16 506 ? ? ? B . n
+B 1 17 GLN 17 507 ? ? ? B . n
+B 1 18 THR 18 508 ? ? ? B . n
+B 1 19 PRO 19 509 ? ? ? B . n
+B 1 20 ILE 20 510 ? ? ? B . n
+B 1 21 PRO 21 511 ? ? ? B . n
+B 1 22 THR 22 512 ? ? ? B . n
+B 1 23 ILE 23 513 ? ? ? B . n
+B 1 24 SER 24 514 ? ? ? B . n
+B 1 25 GLY 25 515 ? ? ? B . n
+B 1 26 ASN 26 516 516 ASN ASN B . n
+B 1 27 ALA 27 517 517 ALA ALA B . n
+B 1 28 LEU 28 518 518 LEU LEU B . n
+B 1 29 ARG 29 519 519 ARG ARG B . n
+B 1 30 ASP 30 520 520 ASP ASP B . n
+B 1 31 TYR 31 521 521 TYR TYR B . n
+B 1 32 ALA 32 522 522 ALA ALA B . n
+B 1 33 GLU 33 523 523 GLU GLU B . n
+B 1 34 ALA 34 524 524 ALA ALA B . n
+B 1 35 ARG 35 525 525 ARG ARG B . n
+B 1 36 GLY 36 526 526 GLY GLY B . n
+B 1 37 ILE 37 527 527 ILE ILE B . n
+B 1 38 LYS 38 528 528 LYS LYS B . n
+B 1 39 ILE 39 529 529 ILE ILE B . n
+B 1 40 GLY 40 530 530 GLY GLY B . n
+B 1 41 THR 41 531 531 THR THR B . n
+B 1 42 CYS 42 532 532 CYS CYS B . n
+B 1 43 VAL 43 533 533 VAL VAL B . n
+B 1 44 ASN 44 534 534 ASN ASN B . n
+B 1 45 TYR 45 535 535 TYR TYR B . n
+B 1 46 PRO 46 536 536 PRO PRO B . n
+B 1 47 PHE 47 537 537 PHE PHE B . n
+B 1 48 TYR 48 538 538 TYR TYR B . n
+B 1 49 ASN 49 539 539 ASN ASN B . n
+B 1 50 ASN 50 540 540 ASN ASN B . n
+B 1 51 SER 51 541 541 SER SER B . n
+B 1 52 ASP 52 542 542 ASP ASP B . n
+B 1 53 PRO 53 543 543 PRO PRO B . n
+B 1 54 THR 54 544 544 THR THR B . n
+B 1 55 TYR 55 545 545 TYR TYR B . n
+B 1 56 ASN 56 546 546 ASN ASN B . n
+B 1 57 SER 57 547 547 SER SER B . n
+B 1 58 ILE 58 548 548 ILE ILE B . n
+B 1 59 LEU 59 549 549 LEU LEU B . n
+B 1 60 GLN 60 550 550 GLN GLN B . n
+B 1 61 ARG 61 551 551 ARG ARG B . n
+B 1 62 GLU 62 552 552 GLU GLU B . n
+B 1 63 PHE 63 553 553 PHE PHE B . n
+B 1 64 SER 64 554 554 SER SER B . n
+B 1 65 MET 65 555 555 MET MET B . n
+B 1 66 VAL 66 556 556 VAL VAL B . n
+B 1 67 VAL 67 557 557 VAL VAL B . n
+B 1 68 CYS 68 558 558 CYS CYS B . n
+B 1 69 GLU 69 559 559 GLU GLU B . n
+B 1 70 ASN 70 560 560 ASN ASN B . n
+B 1 71 GLU 71 561 561 GLU GLU B . n
+B 1 72 MET 72 562 562 MET MET B . n
+B 1 73 LYS 73 563 563 LYS LYS B . n
+B 1 74 PHE 74 564 564 PHE PHE B . n
+B 1 75 ASP 75 565 565 ASP ASP B . n
+B 1 76 ALA 76 566 566 ALA ALA B . n
+B 1 77 LEU 77 567 567 LEU LEU B . n
+B 1 78 GLN 78 568 568 GLN GLN B . n
+B 1 79 PRO 79 569 569 PRO PRO B . n
+B 1 80 ARG 80 570 570 ARG ARG B . n
+B 1 81 GLN 81 571 571 GLN GLN B . n
+B 1 82 ASN 82 572 572 ASN ASN B . n
+B 1 83 VAL 83 573 573 VAL VAL B . n
+B 1 84 PHE 84 574 574 PHE PHE B . n
+B 1 85 ASP 85 575 575 ASP ASP B . n
+B 1 86 PHE 86 576 576 PHE PHE B . n
+B 1 87 SER 87 577 577 SER SER B . n
+B 1 88 LYS 88 578 578 LYS LYS B . n
+B 1 89 GLY 89 579 579 GLY GLY B . n
+B 1 90 ASP 90 580 580 ASP ASP B . n
+B 1 91 GLN 91 581 581 GLN GLN B . n
+B 1 92 LEU 92 582 582 LEU LEU B . n
+B 1 93 LEU 93 583 583 LEU LEU B . n
+B 1 94 ALA 94 584 584 ALA ALA B . n
+B 1 95 PHE 95 585 585 PHE PHE B . n
+B 1 96 ALA 96 586 586 ALA ALA B . n
+B 1 97 GLU 97 587 587 GLU GLU B . n
+B 1 98 ARG 98 588 588 ARG ARG B . n
+B 1 99 ASN 99 589 589 ASN ASN B . n
+B 1 100 GLY 100 590 590 GLY GLY B . n
+B 1 101 MET 101 591 591 MET MET B . n
+B 1 102 GLN 102 592 592 GLN GLN B . n
+B 1 103 MET 103 593 593 MET MET B . n
+B 1 104 ARG 104 594 594 ARG ARG B . n
+B 1 105 GLY 105 595 595 GLY GLY B . n
+B 1 106 HIS 106 596 596 HIS HIS B . n
+B 1 107 THR 107 597 597 THR THR B . n
+B 1 108 LEU 108 598 598 LEU LEU B . n
+B 1 109 ILE 109 599 599 ILE ILE B . n
+B 1 110 TRP 110 600 600 TRP TRP B . n
+B 1 111 HIS 111 601 601 HIS HIS B . n
+B 1 112 ASN 112 602 602 ASN ASN B . n
+B 1 113 GLN 113 603 603 GLN GLN B . n
+B 1 114 ASN 114 604 604 ASN ASN B . n
+B 1 115 PRO 115 605 605 PRO PRO B . n
+B 1 116 SER 116 606 606 SER SER B . n
+B 1 117 TRP 117 607 607 TRP TRP B . n
+B 1 118 LEU 118 608 608 LEU LEU B . n
+B 1 119 THR 119 609 609 THR THR B . n
+B 1 120 ASN 120 610 610 ASN ASN B . n
+B 1 121 GLY 121 611 611 GLY GLY B . n
+B 1 122 ASN 122 612 612 ASN ASN B . n
+B 1 123 TRP 123 613 613 TRP TRP B . n
+B 1 124 ASN 124 614 614 ASN ASN B . n
+B 1 125 ARG 125 615 615 ARG ARG B . n
+B 1 126 ASP 126 616 616 ASP ASP B . n
+B 1 127 SER 127 617 617 SER SER B . n
+B 1 128 LEU 128 618 618 LEU LEU B . n
+B 1 129 LEU 129 619 619 LEU LEU B . n
+B 1 130 ALA 130 620 620 ALA ALA B . n
+B 1 131 VAL 131 621 621 VAL VAL B . n
+B 1 132 MET 132 622 622 MET MET B . n
+B 1 133 LYS 133 623 623 LYS LYS B . n
+B 1 134 ASN 134 624 624 ASN ASN B . n
+B 1 135 HIS 135 625 625 HIS HIS B . n
+B 1 136 ILE 136 626 626 ILE ILE B . n
+B 1 137 THR 137 627 627 THR THR B . n
+B 1 138 THR 138 628 628 THR THR B . n
+B 1 139 VAL 139 629 629 VAL VAL B . n
+B 1 140 MET 140 630 630 MET MET B . n
+B 1 141 THR 141 631 631 THR THR B . n
+B 1 142 HIS 142 632 632 HIS HIS B . n
+B 1 143 TYR 143 633 633 TYR TYR B . n
+B 1 144 LYS 144 634 634 LYS LYS B . n
+B 1 145 GLY 145 635 635 GLY GLY B . n
+B 1 146 LYS 146 636 636 LYS LYS B . n
+B 1 147 ILE 147 637 637 ILE ILE B . n
+B 1 148 VAL 148 638 638 VAL VAL B . n
+B 1 149 GLU 149 639 639 GLU GLU B . n
+B 1 150 TRP 150 640 640 TRP TRP B . n
+B 1 151 ASP 151 641 641 ASP ASP B . n
+B 1 152 VAL 152 642 642 VAL VAL B . n
+B 1 153 ALA 153 643 643 ALA ALA B . n
+B 1 154 ASN 154 644 644 ASN ASN B . n
+B 1 155 GLU 155 645 645 GLU GLU B . n
+B 1 156 CYS 156 646 646 CYS CYS B . n
+B 1 157 MET 157 647 647 MET MET B . n
+B 1 158 ASP 158 648 648 ASP ASP B . n
+B 1 159 ASP 159 649 649 ASP ASP B . n
+B 1 160 SER 160 650 650 SER SER B . n
+B 1 161 GLY 161 651 651 GLY GLY B . n
+B 1 162 ASN 162 652 652 ASN ASN B . n
+B 1 163 GLY 163 653 653 GLY GLY B . n
+B 1 164 LEU 164 654 654 LEU LEU B . n
+B 1 165 ARG 165 655 655 ARG ARG B . n
+B 1 166 SER 166 656 656 SER SER B . n
+B 1 167 SER 167 657 657 SER SER B . n
+B 1 168 ILE 168 658 658 ILE ILE B . n
+B 1 169 TRP 169 659 659 TRP TRP B . n
+B 1 170 ARG 170 660 660 ARG ARG B . n
+B 1 171 ASN 171 661 661 ASN ASN B . n
+B 1 172 VAL 172 662 662 VAL VAL B . n
+B 1 173 ILE 173 663 663 ILE ILE B . n
+B 1 174 GLY 174 664 664 GLY GLY B . n
+B 1 175 GLN 175 665 665 GLN GLN B . n
+B 1 176 ASP 176 666 666 ASP ASP B . n
+B 1 177 TYR 177 667 667 TYR TYR B . n
+B 1 178 LEU 178 668 668 LEU LEU B . n
+B 1 179 ASP 179 669 669 ASP ASP B . n
+B 1 180 TYR 180 670 670 TYR TYR B . n
+B 1 181 ALA 181 671 671 ALA ALA B . n
+B 1 182 PHE 182 672 672 PHE PHE B . n
+B 1 183 ARG 183 673 673 ARG ARG B . n
+B 1 184 TYR 184 674 674 TYR TYR B . n
+B 1 185 ALA 185 675 675 ALA ALA B . n
+B 1 186 ARG 186 676 676 ARG ARG B . n
+B 1 187 GLU 187 677 677 GLU GLU B . n
+B 1 188 ALA 188 678 678 ALA ALA B . n
+B 1 189 ASP 189 679 679 ASP ASP B . n
+B 1 190 PRO 190 680 680 PRO PRO B . n
+B 1 191 ASP 191 681 681 ASP ASP B . n
+B 1 192 ALA 192 682 682 ALA ALA B . n
+B 1 193 LEU 193 683 683 LEU LEU B . n
+B 1 194 LEU 194 684 684 LEU LEU B . n
+B 1 195 PHE 195 685 685 PHE PHE B . n
+B 1 196 TYR 196 686 686 TYR TYR B . n
+B 1 197 ASN 197 687 687 ASN ASN B . n
+B 1 198 ASP 198 688 688 ASP ASP B . n
+B 1 199 TYR 199 689 689 TYR TYR B . n
+B 1 200 ASN 200 690 690 ASN ASN B . n
+B 1 201 ILE 201 691 691 ILE ILE B . n
+B 1 202 GLU 202 692 692 GLU GLU B . n
+B 1 203 ASP 203 693 693 ASP ASP B . n
+B 1 204 LEU 204 694 694 LEU LEU B . n
+B 1 205 GLY 205 695 695 GLY GLY B . n
+B 1 206 PRO 206 696 696 PRO PRO B . n
+B 1 207 LYS 207 697 697 LYS LYS B . n
+B 1 208 SER 208 698 698 SER SER B . n
+B 1 209 ASN 209 699 699 ASN ASN B . n
+B 1 210 ALA 210 700 700 ALA ALA B . n
+B 1 211 VAL 211 701 701 VAL VAL B . n
+B 1 212 PHE 212 702 702 PHE PHE B . n
+B 1 213 ASN 213 703 703 ASN ASN B . n
+B 1 214 MET 214 704 704 MET MET B . n
+B 1 215 ILE 215 705 705 ILE ILE B . n
+B 1 216 LYS 216 706 706 LYS LYS B . n
+B 1 217 SER 217 707 707 SER SER B . n
+B 1 218 MET 218 708 708 MET MET B . n
+B 1 219 LYS 219 709 709 LYS LYS B . n
+B 1 220 GLU 220 710 710 GLU GLU B . n
+B 1 221 ARG 221 711 711 ARG ARG B . n
+B 1 222 GLY 222 712 712 GLY GLY B . n
+B 1 223 VAL 223 713 713 VAL VAL B . n
+B 1 224 PRO 224 714 714 PRO PRO B . n
+B 1 225 ILE 225 715 715 ILE ILE B . n
+B 1 226 ASP 226 716 716 ASP ASP B . n
+B 1 227 GLY 227 717 717 GLY GLY B . n
+B 1 228 VAL 228 718 718 VAL VAL B . n
+B 1 229 GLY 229 719 719 GLY GLY B . n
+B 1 230 PHE 230 720 720 PHE PHE B . n
+B 1 231 GLN 231 721 721 GLN GLN B . n
+B 1 232 CYS 232 722 722 CYS CYS B . n
+B 1 233 HIS 233 723 723 HIS HIS B . n
+B 1 234 PHE 234 724 724 PHE PHE B . n
+B 1 235 ILE 235 725 725 ILE ILE B . n
+B 1 236 ASN 236 726 726 ASN ASN B . n
+B 1 237 GLY 237 727 727 GLY GLY B . n
+B 1 238 MET 238 728 728 MET MET B . n
+B 1 239 SER 239 729 729 SER SER B . n
+B 1 240 PRO 240 730 730 PRO PRO B . n
+B 1 241 GLU 241 731 731 GLU GLU B . n
+B 1 242 TYR 242 732 732 TYR TYR B . n
+B 1 243 LEU 243 733 733 LEU LEU B . n
+B 1 244 ALA 244 734 734 ALA ALA B . n
+B 1 245 SER 245 735 735 SER SER B . n
+B 1 246 ILE 246 736 736 ILE ILE B . n
+B 1 247 ASP 247 737 737 ASP ASP B . n
+B 1 248 GLN 248 738 738 GLN GLN B . n
+B 1 249 ASN 249 739 739 ASN ASN B . n
+B 1 250 ILE 250 740 740 ILE ILE B . n
+B 1 251 LYS 251 741 741 LYS LYS B . n
+B 1 252 ARG 252 742 742 ARG ARG B . n
+B 1 253 TYR 253 743 743 TYR TYR B . n
+B 1 254 ALA 254 744 744 ALA ALA B . n
+B 1 255 GLU 255 745 745 GLU GLU B . n
+B 1 256 ILE 256 746 746 ILE ILE B . n
+B 1 257 GLY 257 747 747 GLY GLY B . n
+B 1 258 VAL 258 748 748 VAL VAL B . n
+B 1 259 ILE 259 749 749 ILE ILE B . n
+B 1 260 VAL 260 750 750 VAL VAL B . n
+B 1 261 SER 261 751 751 SER SER B . n
+B 1 262 PHE 262 752 752 PHE PHE B . n
+B 1 263 THR 263 753 753 THR THR B . n
+B 1 264 GLU 264 754 754 GLU GLU B . n
+B 1 265 ILE 265 755 755 ILE ILE B . n
+B 1 266 ASP 266 756 756 ASP ASP B . n
+B 1 267 ILE 267 757 757 ILE ILE B . n
+B 1 268 ARG 268 758 758 ARG ARG B . n
+B 1 269 ILE 269 759 759 ILE ILE B . n
+B 1 270 PRO 270 760 760 PRO PRO B . n
+B 1 271 GLN 271 761 761 GLN GLN B . n
+B 1 272 SER 272 762 762 SER SER B . n
+B 1 273 GLU 273 763 763 GLU GLU B . n
+B 1 274 ASN 274 764 764 ASN ASN B . n
+B 1 275 PRO 275 765 765 PRO PRO B . n
+B 1 276 ALA 276 766 766 ALA ALA B . n
+B 1 277 THR 277 767 767 THR THR B . n
+B 1 278 ALA 278 768 768 ALA ALA B . n
+B 1 279 PHE 279 769 769 PHE PHE B . n
+B 1 280 GLN 280 770 770 GLN GLN B . n
+B 1 281 VAL 281 771 771 VAL VAL B . n
+B 1 282 GLN 282 772 772 GLN GLN B . n
+B 1 283 ALA 283 773 773 ALA ALA B . n
+B 1 284 ASN 284 774 774 ASN ASN B . n
+B 1 285 ASN 285 775 775 ASN ASN B . n
+B 1 286 TYR 286 776 776 TYR TYR B . n
+B 1 287 LYS 287 777 777 LYS LYS B . n
+B 1 288 GLU 288 778 778 GLU GLU B . n
+B 1 289 LEU 289 779 779 LEU LEU B . n
+B 1 290 MET 290 780 780 MET MET B . n
+B 1 291 LYS 291 781 781 LYS LYS B . n
+B 1 292 ILE 292 782 782 ILE ILE B . n
+B 1 293 CYS 293 783 783 CYS CYS B . n
+B 1 294 LEU 294 784 784 LEU LEU B . n
+B 1 295 ALA 295 785 785 ALA ALA B . n
+B 1 296 ASN 296 786 786 ASN ASN B . n
+B 1 297 PRO 297 787 787 PRO PRO B . n
+B 1 298 ASN 298 788 788 ASN ASN B . n
+B 1 299 CYS 299 789 789 CYS CYS B . n
+B 1 300 ASN 300 790 790 ASN ASN B . n
+B 1 301 THR 301 791 791 THR THR B . n
+B 1 302 PHE 302 792 792 PHE PHE B . n
+B 1 303 VAL 303 793 793 VAL VAL B . n
+B 1 304 MET 304 794 794 MET MET B . n
+B 1 305 TRP 305 795 795 TRP TRP B . n
+B 1 306 GLY 306 796 796 GLY GLY B . n
+B 1 307 PHE 307 797 797 PHE PHE B . n
+B 1 308 THR 308 798 798 THR THR B . n
+B 1 309 ASP 309 799 799 ASP ASP B . n
+B 1 310 LYS 310 800 800 LYS LYS B . n
+B 1 311 TYR 311 801 801 TYR TYR B . n
+B 1 312 THR 312 802 802 THR THR B . n
+B 1 313 TRP 313 803 803 TRP TRP B . n
+B 1 314 ILE 314 804 804 ILE ILE B . n
+B 1 315 PRO 315 805 805 PRO PRO B . n
+B 1 316 GLY 316 806 806 GLY GLY B . n
+B 1 317 THR 317 807 807 THR THR B . n
+B 1 318 PHE 318 808 808 PHE PHE B . n
+B 1 319 PRO 319 809 809 PRO PRO B . n
+B 1 320 GLY 320 810 810 GLY GLY B . n
+B 1 321 TYR 321 811 811 TYR TYR B . n
+B 1 322 GLY 322 812 812 GLY GLY B . n
+B 1 323 ASN 323 813 813 ASN ASN B . n
+B 1 324 PRO 324 814 814 PRO PRO B . n
+B 1 325 LEU 325 815 815 LEU LEU B . n
+B 1 326 ILE 326 816 816 ILE ILE B . n
+B 1 327 TYR 327 817 817 TYR TYR B . n
+B 1 328 ASP 328 818 818 ASP ASP B . n
+B 1 329 SER 329 819 819 SER SER B . n
+B 1 330 ASN 330 820 820 ASN ASN B . n
+B 1 331 TYR 331 821 821 TYR TYR B . n
+B 1 332 ASN 332 822 822 ASN ASN B . n
+B 1 333 PRO 333 823 823 PRO PRO B . n
+B 1 334 LYS 334 824 824 LYS LYS B . n
+B 1 335 PRO 335 825 825 PRO PRO B . n
+B 1 336 ALA 336 826 826 ALA ALA B . n
+B 1 337 TYR 337 827 827 TYR TYR B . n
+B 1 338 ASN 338 828 828 ASN ASN B . n
+B 1 339 ALA 339 829 829 ALA ALA B . n
+B 1 340 ILE 340 830 830 ILE ILE B . n
+B 1 341 LYS 341 831 831 LYS LYS B . n
+B 1 342 GLU 342 832 832 GLU GLU B . n
+B 1 343 ALA 343 833 833 ALA ALA B . n
+B 1 344 LEU 344 834 834 LEU LEU B . n
+B 1 345 MET 345 835 835 MET MET B . n
+B 1 346 GLY 346 836 ? ? ? B . n
+B 1 347 TYR 347 837 ? ? ? B . n
+#
+loop_
+_pdbx_version.entry_id
+_pdbx_version.revision_date
+_pdbx_version.major_version
+_pdbx_version.minor_version
+_pdbx_version.revision_type
+_pdbx_version.details
+1XYZ 2008-03-24 3 2 'Version format compliance' 'compliance with PDB format V.3.15'
+1XYZ 2011-07-13 4 0000 'Version format compliance' 'compliance with PDB Exchange Dictionary V4'
+#
+loop_
+_software.name
+_software.classification
+_software.version
+_software.citation_id
+_software.pdbx_ordinal
+ARP/wARP 'model building' . ? 1
+X-PLOR 'model building' . ? 2
+ARP/wARP refinement . ? 3
+X-PLOR refinement . ? 4
+#
+loop_
+_pdbx_unobs_or_zero_occ_residues.id
+_pdbx_unobs_or_zero_occ_residues.polymer_flag
+_pdbx_unobs_or_zero_occ_residues.occupancy_flag
+_pdbx_unobs_or_zero_occ_residues.PDB_model_num
+_pdbx_unobs_or_zero_occ_residues.auth_asym_id
+_pdbx_unobs_or_zero_occ_residues.auth_comp_id
+_pdbx_unobs_or_zero_occ_residues.auth_seq_id
+_pdbx_unobs_or_zero_occ_residues.PDB_ins_code
+1 Y 1 1 A PRO 491 ?
+2 Y 1 1 A GLY 492 ?
+3 Y 1 1 A GLN 493 ?
+4 Y 1 1 A GLY 494 ?
+5 Y 1 1 A ASP 495 ?
+6 Y 1 1 A VAL 496 ?
+7 Y 1 1 A GLN 497 ?
+8 Y 1 1 A THR 498 ?
+9 Y 1 1 A PRO 499 ?
+10 Y 1 1 A ASN 500 ?
+11 Y 1 1 A PRO 501 ?
+12 Y 1 1 A SER 502 ?
+13 Y 1 1 A VAL 503 ?
+14 Y 1 1 A THR 504 ?
+15 Y 1 1 A PRO 505 ?
+16 Y 1 1 A THR 506 ?
+17 Y 1 1 A GLN 507 ?
+18 Y 1 1 A THR 508 ?
+19 Y 1 1 A PRO 509 ?
+20 Y 1 1 A ILE 510 ?
+21 Y 1 1 A PRO 511 ?
+22 Y 1 1 A THR 512 ?
+23 Y 1 1 A ILE 513 ?
+24 Y 1 1 A SER 514 ?
+25 Y 1 1 A GLY 515 ?
+26 Y 1 1 A GLY 836 ?
+27 Y 1 1 A TYR 837 ?
+28 Y 1 1 B PRO 491 ?
+29 Y 1 1 B GLY 492 ?
+30 Y 1 1 B GLN 493 ?
+31 Y 1 1 B GLY 494 ?
+32 Y 1 1 B ASP 495 ?
+33 Y 1 1 B VAL 496 ?
+34 Y 1 1 B GLN 497 ?
+35 Y 1 1 B THR 498 ?
+36 Y 1 1 B PRO 499 ?
+37 Y 1 1 B ASN 500 ?
+38 Y 1 1 B PRO 501 ?
+39 Y 1 1 B SER 502 ?
+40 Y 1 1 B VAL 503 ?
+41 Y 1 1 B THR 504 ?
+42 Y 1 1 B PRO 505 ?
+43 Y 1 1 B THR 506 ?
+44 Y 1 1 B GLN 507 ?
+45 Y 1 1 B THR 508 ?
+46 Y 1 1 B PRO 509 ?
+47 Y 1 1 B ILE 510 ?
+48 Y 1 1 B PRO 511 ?
+49 Y 1 1 B THR 512 ?
+50 Y 1 1 B ILE 513 ?
+51 Y 1 1 B SER 514 ?
+52 Y 1 1 B GLY 515 ?
+53 Y 1 1 B GLY 836 ?
+54 Y 1 1 B TYR 837 ?
+#
+loop_
+_pdbx_struct_assembly.id
+_pdbx_struct_assembly.details
+_pdbx_struct_assembly.method_details
+_pdbx_struct_assembly.oligomeric_details
+_pdbx_struct_assembly.oligomeric_count
+1 author_defined_assembly ? monomeric 1
+2 author_defined_assembly ? monomeric 1
+#
+loop_
+_pdbx_struct_assembly_gen.assembly_id
+_pdbx_struct_assembly_gen.oper_expression
+_pdbx_struct_assembly_gen.asym_id_list
+1 1 A,C
+2 1 B,D
+#
+_pdbx_struct_oper_list.id 1
+_pdbx_struct_oper_list.type 'identity operation'
+_pdbx_struct_oper_list.name 1_555
+_pdbx_struct_oper_list.symmetry_operation x,y,z
+_pdbx_struct_oper_list.matrix[1][1] 1.0000000000
+_pdbx_struct_oper_list.matrix[1][2] 0.0000000000
+_pdbx_struct_oper_list.matrix[1][3] 0.0000000000
+_pdbx_struct_oper_list.vector[1] 0.0000000000
+_pdbx_struct_oper_list.matrix[2][1] 0.0000000000
+_pdbx_struct_oper_list.matrix[2][2] 1.0000000000
+_pdbx_struct_oper_list.matrix[2][3] 0.0000000000
+_pdbx_struct_oper_list.vector[2] 0.0000000000
+_pdbx_struct_oper_list.matrix[3][1] 0.0000000000
+_pdbx_struct_oper_list.matrix[3][2] 0.0000000000
+_pdbx_struct_oper_list.matrix[3][3] 1.0000000000
+_pdbx_struct_oper_list.vector[3] 0.0000000000
+#
+loop_
+_pdbx_nonpoly_scheme.asym_id
+_pdbx_nonpoly_scheme.entity_id
+_pdbx_nonpoly_scheme.mon_id
+_pdbx_nonpoly_scheme.ndb_seq_num
+_pdbx_nonpoly_scheme.pdb_seq_num
+_pdbx_nonpoly_scheme.auth_seq_num
+_pdbx_nonpoly_scheme.pdb_mon_id
+_pdbx_nonpoly_scheme.auth_mon_id
+_pdbx_nonpoly_scheme.pdb_strand_id
+_pdbx_nonpoly_scheme.pdb_ins_code
+C 2 HOH 1 1 1 HOH HOH A .
+C 2 HOH 2 2 2 HOH HOH A .
+C 2 HOH 3 3 3 HOH HOH A .
+C 2 HOH 4 4 4 HOH HOH A .
+C 2 HOH 5 5 5 HOH HOH A .
+C 2 HOH 6 6 6 HOH HOH A .
+C 2 HOH 7 7 7 HOH HOH A .
+C 2 HOH 8 8 8 HOH HOH A .
+C 2 HOH 9 9 9 HOH HOH A .
+C 2 HOH 10 10 10 HOH HOH A .
+C 2 HOH 11 11 11 HOH HOH A .
+C 2 HOH 12 12 12 HOH HOH A .
+C 2 HOH 13 13 13 HOH HOH A .
+C 2 HOH 14 14 14 HOH HOH A .
+C 2 HOH 15 15 15 HOH HOH A .
+C 2 HOH 16 16 16 HOH HOH A .
+C 2 HOH 17 17 17 HOH HOH A .
+C 2 HOH 18 18 18 HOH HOH A .
+C 2 HOH 19 19 19 HOH HOH A .
+C 2 HOH 20 20 20 HOH HOH A .
+C 2 HOH 21 21 21 HOH HOH A .
+C 2 HOH 22 22 22 HOH HOH A .
+C 2 HOH 23 23 23 HOH HOH A .
+C 2 HOH 24 24 24 HOH HOH A .
+C 2 HOH 25 25 25 HOH HOH A .
+C 2 HOH 26 26 26 HOH HOH A .
+C 2 HOH 27 27 27 HOH HOH A .
+C 2 HOH 28 28 28 HOH HOH A .
+C 2 HOH 29 29 29 HOH HOH A .
+C 2 HOH 30 30 30 HOH HOH A .
+C 2 HOH 31 31 31 HOH HOH A .
+C 2 HOH 32 32 32 HOH HOH A .
+C 2 HOH 33 33 33 HOH HOH A .
+C 2 HOH 34 34 34 HOH HOH A .
+C 2 HOH 35 35 35 HOH HOH A .
+C 2 HOH 36 36 36 HOH HOH A .
+C 2 HOH 37 37 37 HOH HOH A .
+C 2 HOH 38 38 38 HOH HOH A .
+C 2 HOH 39 39 39 HOH HOH A .
+C 2 HOH 40 40 40 HOH HOH A .
+C 2 HOH 41 41 41 HOH HOH A .
+C 2 HOH 42 42 42 HOH HOH A .
+C 2 HOH 43 43 43 HOH HOH A .
+C 2 HOH 44 44 44 HOH HOH A .
+C 2 HOH 45 45 45 HOH HOH A .
+C 2 HOH 46 46 46 HOH HOH A .
+C 2 HOH 47 47 47 HOH HOH A .
+C 2 HOH 48 48 48 HOH HOH A .
+C 2 HOH 49 49 49 HOH HOH A .
+C 2 HOH 50 50 50 HOH HOH A .
+C 2 HOH 51 51 51 HOH HOH A .
+C 2 HOH 52 52 52 HOH HOH A .
+C 2 HOH 53 53 53 HOH HOH A .
+C 2 HOH 54 54 54 HOH HOH A .
+C 2 HOH 55 55 55 HOH HOH A .
+C 2 HOH 56 56 56 HOH HOH A .
+C 2 HOH 57 57 57 HOH HOH A .
+C 2 HOH 58 58 58 HOH HOH A .
+C 2 HOH 59 59 59 HOH HOH A .
+C 2 HOH 60 60 60 HOH HOH A .
+C 2 HOH 61 61 61 HOH HOH A .
+C 2 HOH 62 62 62 HOH HOH A .
+C 2 HOH 63 63 63 HOH HOH A .
+C 2 HOH 64 64 64 HOH HOH A .
+C 2 HOH 65 65 65 HOH HOH A .
+C 2 HOH 66 66 66 HOH HOH A .
+C 2 HOH 67 67 67 HOH HOH A .
+C 2 HOH 68 68 68 HOH HOH A .
+C 2 HOH 69 69 69 HOH HOH A .
+C 2 HOH 70 70 70 HOH HOH A .
+C 2 HOH 71 71 71 HOH HOH A .
+C 2 HOH 72 72 72 HOH HOH A .
+C 2 HOH 73 73 73 HOH HOH A .
+C 2 HOH 74 74 74 HOH HOH A .
+C 2 HOH 75 75 75 HOH HOH A .
+C 2 HOH 76 76 76 HOH HOH A .
+C 2 HOH 77 77 77 HOH HOH A .
+C 2 HOH 78 78 78 HOH HOH A .
+C 2 HOH 79 79 79 HOH HOH A .
+C 2 HOH 80 80 80 HOH HOH A .
+C 2 HOH 81 81 81 HOH HOH A .
+C 2 HOH 82 82 82 HOH HOH A .
+C 2 HOH 83 83 83 HOH HOH A .
+C 2 HOH 84 84 84 HOH HOH A .
+C 2 HOH 85 85 85 HOH HOH A .
+C 2 HOH 86 86 86 HOH HOH A .
+C 2 HOH 87 87 87 HOH HOH A .
+C 2 HOH 88 88 88 HOH HOH A .
+C 2 HOH 89 89 89 HOH HOH A .
+C 2 HOH 90 90 90 HOH HOH A .
+C 2 HOH 91 91 91 HOH HOH A .
+C 2 HOH 92 92 92 HOH HOH A .
+C 2 HOH 93 93 93 HOH HOH A .
+C 2 HOH 94 94 94 HOH HOH A .
+C 2 HOH 95 95 95 HOH HOH A .
+C 2 HOH 96 96 96 HOH HOH A .
+C 2 HOH 97 97 97 HOH HOH A .
+C 2 HOH 98 98 98 HOH HOH A .
+C 2 HOH 99 99 99 HOH HOH A .
+C 2 HOH 100 100 100 HOH HOH A .
+C 2 HOH 101 101 101 HOH HOH A .
+C 2 HOH 102 102 102 HOH HOH A .
+C 2 HOH 103 103 103 HOH HOH A .
+C 2 HOH 104 104 104 HOH HOH A .
+C 2 HOH 105 105 105 HOH HOH A .
+C 2 HOH 106 106 106 HOH HOH A .
+C 2 HOH 107 107 107 HOH HOH A .
+C 2 HOH 108 108 108 HOH HOH A .
+C 2 HOH 109 109 109 HOH HOH A .
+C 2 HOH 110 110 110 HOH HOH A .
+C 2 HOH 111 111 111 HOH HOH A .
+C 2 HOH 112 112 112 HOH HOH A .
+C 2 HOH 113 113 113 HOH HOH A .
+C 2 HOH 114 114 114 HOH HOH A .
+C 2 HOH 115 115 115 HOH HOH A .
+C 2 HOH 116 117 117 HOH HOH A .
+C 2 HOH 117 118 118 HOH HOH A .
+C 2 HOH 118 119 119 HOH HOH A .
+C 2 HOH 119 120 120 HOH HOH A .
+C 2 HOH 120 121 121 HOH HOH A .
+C 2 HOH 121 122 122 HOH HOH A .
+C 2 HOH 122 123 123 HOH HOH A .
+C 2 HOH 123 124 124 HOH HOH A .
+C 2 HOH 124 125 125 HOH HOH A .
+C 2 HOH 125 126 126 HOH HOH A .
+C 2 HOH 126 127 127 HOH HOH A .
+C 2 HOH 127 128 128 HOH HOH A .
+C 2 HOH 128 129 129 HOH HOH A .
+C 2 HOH 129 130 130 HOH HOH A .
+C 2 HOH 130 131 131 HOH HOH A .
+C 2 HOH 131 132 132 HOH HOH A .
+C 2 HOH 132 133 133 HOH HOH A .
+C 2 HOH 133 134 134 HOH HOH A .
+C 2 HOH 134 135 135 HOH HOH A .
+C 2 HOH 135 136 136 HOH HOH A .
+C 2 HOH 136 137 137 HOH HOH A .
+C 2 HOH 137 138 138 HOH HOH A .
+C 2 HOH 138 139 139 HOH HOH A .
+C 2 HOH 139 140 140 HOH HOH A .
+C 2 HOH 140 141 141 HOH HOH A .
+C 2 HOH 141 142 142 HOH HOH A .
+C 2 HOH 142 143 143 HOH HOH A .
+C 2 HOH 143 144 144 HOH HOH A .
+C 2 HOH 144 145 145 HOH HOH A .
+C 2 HOH 145 146 146 HOH HOH A .
+C 2 HOH 146 147 147 HOH HOH A .
+C 2 HOH 147 148 148 HOH HOH A .
+C 2 HOH 148 149 149 HOH HOH A .
+C 2 HOH 149 150 150 HOH HOH A .
+C 2 HOH 150 151 151 HOH HOH A .
+C 2 HOH 151 152 152 HOH HOH A .
+C 2 HOH 152 153 153 HOH HOH A .
+C 2 HOH 153 154 154 HOH HOH A .
+C 2 HOH 154 155 155 HOH HOH A .
+C 2 HOH 155 156 156 HOH HOH A .
+C 2 HOH 156 157 157 HOH HOH A .
+C 2 HOH 157 158 158 HOH HOH A .
+C 2 HOH 158 159 159 HOH HOH A .
+C 2 HOH 159 160 160 HOH HOH A .
+C 2 HOH 160 161 161 HOH HOH A .
+C 2 HOH 161 162 162 HOH HOH A .
+C 2 HOH 162 163 163 HOH HOH A .
+C 2 HOH 163 164 164 HOH HOH A .
+C 2 HOH 164 165 165 HOH HOH A .
+C 2 HOH 165 166 166 HOH HOH A .
+C 2 HOH 166 167 167 HOH HOH A .
+C 2 HOH 167 168 168 HOH HOH A .
+C 2 HOH 168 169 169 HOH HOH A .
+C 2 HOH 169 170 170 HOH HOH A .
+C 2 HOH 170 172 172 HOH HOH A .
+C 2 HOH 171 173 173 HOH HOH A .
+C 2 HOH 172 174 174 HOH HOH A .
+C 2 HOH 173 175 175 HOH HOH A .
+C 2 HOH 174 176 176 HOH HOH A .
+C 2 HOH 175 177 177 HOH HOH A .
+C 2 HOH 176 178 178 HOH HOH A .
+C 2 HOH 177 179 179 HOH HOH A .
+C 2 HOH 178 180 180 HOH HOH A .
+C 2 HOH 179 181 181 HOH HOH A .
+C 2 HOH 180 182 182 HOH HOH A .
+C 2 HOH 181 183 183 HOH HOH A .
+C 2 HOH 182 184 184 HOH HOH A .
+C 2 HOH 183 185 185 HOH HOH A .
+C 2 HOH 184 186 186 HOH HOH A .
+C 2 HOH 185 187 187 HOH HOH A .
+C 2 HOH 186 188 188 HOH HOH A .
+C 2 HOH 187 189 189 HOH HOH A .
+C 2 HOH 188 190 190 HOH HOH A .
+C 2 HOH 189 191 191 HOH HOH A .
+C 2 HOH 190 192 192 HOH HOH A .
+C 2 HOH 191 193 193 HOH HOH A .
+C 2 HOH 192 194 194 HOH HOH A .
+C 2 HOH 193 195 195 HOH HOH A .
+C 2 HOH 194 196 196 HOH HOH A .
+C 2 HOH 195 197 197 HOH HOH A .
+C 2 HOH 196 198 198 HOH HOH A .
+C 2 HOH 197 199 199 HOH HOH A .
+C 2 HOH 198 200 200 HOH HOH A .
+C 2 HOH 199 201 201 HOH HOH A .
+C 2 HOH 200 202 202 HOH HOH A .
+C 2 HOH 201 203 203 HOH HOH A .
+C 2 HOH 202 204 204 HOH HOH A .
+C 2 HOH 203 205 205 HOH HOH A .
+C 2 HOH 204 206 206 HOH HOH A .
+C 2 HOH 205 207 207 HOH HOH A .
+C 2 HOH 206 208 208 HOH HOH A .
+C 2 HOH 207 209 209 HOH HOH A .
+C 2 HOH 208 210 210 HOH HOH A .
+C 2 HOH 209 211 211 HOH HOH A .
+C 2 HOH 210 212 212 HOH HOH A .
+C 2 HOH 211 213 213 HOH HOH A .
+C 2 HOH 212 214 214 HOH HOH A .
+C 2 HOH 213 215 215 HOH HOH A .
+C 2 HOH 214 216 216 HOH HOH A .
+C 2 HOH 215 218 218 HOH HOH A .
+C 2 HOH 216 219 219 HOH HOH A .
+C 2 HOH 217 220 220 HOH HOH A .
+C 2 HOH 218 221 221 HOH HOH A .
+C 2 HOH 219 222 222 HOH HOH A .
+C 2 HOH 220 223 223 HOH HOH A .
+C 2 HOH 221 224 224 HOH HOH A .
+C 2 HOH 222 225 225 HOH HOH A .
+C 2 HOH 223 226 226 HOH HOH A .
+C 2 HOH 224 227 227 HOH HOH A .
+C 2 HOH 225 228 228 HOH HOH A .
+C 2 HOH 226 229 229 HOH HOH A .
+C 2 HOH 227 230 230 HOH HOH A .
+C 2 HOH 228 231 231 HOH HOH A .
+C 2 HOH 229 233 233 HOH HOH A .
+C 2 HOH 230 281 48 HOH HOH A .
+C 2 HOH 231 320 87 HOH HOH A .
+C 2 HOH 232 381 148 HOH HOH A .
+C 2 HOH 233 393 160 HOH HOH A .
+C 2 HOH 234 397 164 HOH HOH A .
+D 2 HOH 1 116 116 HOH HOH B .
+D 2 HOH 2 171 171 HOH HOH B .
+D 2 HOH 3 217 217 HOH HOH B .
+D 2 HOH 4 232 232 HOH HOH B .
+D 2 HOH 5 234 1 HOH HOH B .
+D 2 HOH 6 235 2 HOH HOH B .
+D 2 HOH 7 236 3 HOH HOH B .
+D 2 HOH 8 237 4 HOH HOH B .
+D 2 HOH 9 238 5 HOH HOH B .
+D 2 HOH 10 239 6 HOH HOH B .
+D 2 HOH 11 240 7 HOH HOH B .
+D 2 HOH 12 241 8 HOH HOH B .
+D 2 HOH 13 242 9 HOH HOH B .
+D 2 HOH 14 243 10 HOH HOH B .
+D 2 HOH 15 244 11 HOH HOH B .
+D 2 HOH 16 245 12 HOH HOH B .
+D 2 HOH 17 246 13 HOH HOH B .
+D 2 HOH 18 247 14 HOH HOH B .
+D 2 HOH 19 248 15 HOH HOH B .
+D 2 HOH 20 249 16 HOH HOH B .
+D 2 HOH 21 250 17 HOH HOH B .
+D 2 HOH 22 251 18 HOH HOH B .
+D 2 HOH 23 252 19 HOH HOH B .
+D 2 HOH 24 253 20 HOH HOH B .
+D 2 HOH 25 254 21 HOH HOH B .
+D 2 HOH 26 255 22 HOH HOH B .
+D 2 HOH 27 256 23 HOH HOH B .
+D 2 HOH 28 257 24 HOH HOH B .
+D 2 HOH 29 258 25 HOH HOH B .
+D 2 HOH 30 259 26 HOH HOH B .
+D 2 HOH 31 260 27 HOH HOH B .
+D 2 HOH 32 261 28 HOH HOH B .
+D 2 HOH 33 262 29 HOH HOH B .
+D 2 HOH 34 263 30 HOH HOH B .
+D 2 HOH 35 264 31 HOH HOH B .
+D 2 HOH 36 265 32 HOH HOH B .
+D 2 HOH 37 266 33 HOH HOH B .
+D 2 HOH 38 267 34 HOH HOH B .
+D 2 HOH 39 268 35 HOH HOH B .
+D 2 HOH 40 269 36 HOH HOH B .
+D 2 HOH 41 270 37 HOH HOH B .
+D 2 HOH 42 271 38 HOH HOH B .
+D 2 HOH 43 272 39 HOH HOH B .
+D 2 HOH 44 273 40 HOH HOH B .
+D 2 HOH 45 274 41 HOH HOH B .
+D 2 HOH 46 275 42 HOH HOH B .
+D 2 HOH 47 276 43 HOH HOH B .
+D 2 HOH 48 277 44 HOH HOH B .
+D 2 HOH 49 278 45 HOH HOH B .
+D 2 HOH 50 279 46 HOH HOH B .
+D 2 HOH 51 280 47 HOH HOH B .
+D 2 HOH 52 282 49 HOH HOH B .
+D 2 HOH 53 283 50 HOH HOH B .
+D 2 HOH 54 284 51 HOH HOH B .
+D 2 HOH 55 285 52 HOH HOH B .
+D 2 HOH 56 286 53 HOH HOH B .
+D 2 HOH 57 287 54 HOH HOH B .
+D 2 HOH 58 288 55 HOH HOH B .
+D 2 HOH 59 289 56 HOH HOH B .
+D 2 HOH 60 290 57 HOH HOH B .
+D 2 HOH 61 291 58 HOH HOH B .
+D 2 HOH 62 292 59 HOH HOH B .
+D 2 HOH 63 293 60 HOH HOH B .
+D 2 HOH 64 294 61 HOH HOH B .
+D 2 HOH 65 295 62 HOH HOH B .
+D 2 HOH 66 296 63 HOH HOH B .
+D 2 HOH 67 297 64 HOH HOH B .
+D 2 HOH 68 298 65 HOH HOH B .
+D 2 HOH 69 299 66 HOH HOH B .
+D 2 HOH 70 300 67 HOH HOH B .
+D 2 HOH 71 301 68 HOH HOH B .
+D 2 HOH 72 302 69 HOH HOH B .
+D 2 HOH 73 303 70 HOH HOH B .
+D 2 HOH 74 304 71 HOH HOH B .
+D 2 HOH 75 305 72 HOH HOH B .
+D 2 HOH 76 306 73 HOH HOH B .
+D 2 HOH 77 307 74 HOH HOH B .
+D 2 HOH 78 308 75 HOH HOH B .
+D 2 HOH 79 309 76 HOH HOH B .
+D 2 HOH 80 310 77 HOH HOH B .
+D 2 HOH 81 311 78 HOH HOH B .
+D 2 HOH 82 312 79 HOH HOH B .
+D 2 HOH 83 313 80 HOH HOH B .
+D 2 HOH 84 314 81 HOH HOH B .
+D 2 HOH 85 315 82 HOH HOH B .
+D 2 HOH 86 316 83 HOH HOH B .
+D 2 HOH 87 317 84 HOH HOH B .
+D 2 HOH 88 318 85 HOH HOH B .
+D 2 HOH 89 319 86 HOH HOH B .
+D 2 HOH 90 321 88 HOH HOH B .
+D 2 HOH 91 322 89 HOH HOH B .
+D 2 HOH 92 323 90 HOH HOH B .
+D 2 HOH 93 324 91 HOH HOH B .
+D 2 HOH 94 325 92 HOH HOH B .
+D 2 HOH 95 326 93 HOH HOH B .
+D 2 HOH 96 327 94 HOH HOH B .
+D 2 HOH 97 328 95 HOH HOH B .
+D 2 HOH 98 329 96 HOH HOH B .
+D 2 HOH 99 330 97 HOH HOH B .
+D 2 HOH 100 331 98 HOH HOH B .
+D 2 HOH 101 332 99 HOH HOH B .
+D 2 HOH 102 333 100 HOH HOH B .
+D 2 HOH 103 334 101 HOH HOH B .
+D 2 HOH 104 335 102 HOH HOH B .
+D 2 HOH 105 336 103 HOH HOH B .
+D 2 HOH 106 337 104 HOH HOH B .
+D 2 HOH 107 338 105 HOH HOH B .
+D 2 HOH 108 339 106 HOH HOH B .
+D 2 HOH 109 340 107 HOH HOH B .
+D 2 HOH 110 341 108 HOH HOH B .
+D 2 HOH 111 342 109 HOH HOH B .
+D 2 HOH 112 343 110 HOH HOH B .
+D 2 HOH 113 344 111 HOH HOH B .
+D 2 HOH 114 345 112 HOH HOH B .
+D 2 HOH 115 346 113 HOH HOH B .
+D 2 HOH 116 347 114 HOH HOH B .
+D 2 HOH 117 348 115 HOH HOH B .
+D 2 HOH 118 349 116 HOH HOH B .
+D 2 HOH 119 350 117 HOH HOH B .
+D 2 HOH 120 351 118 HOH HOH B .
+D 2 HOH 121 352 119 HOH HOH B .
+D 2 HOH 122 353 120 HOH HOH B .
+D 2 HOH 123 354 121 HOH HOH B .
+D 2 HOH 124 355 122 HOH HOH B .
+D 2 HOH 125 356 123 HOH HOH B .
+D 2 HOH 126 357 124 HOH HOH B .
+D 2 HOH 127 358 125 HOH HOH B .
+D 2 HOH 128 359 126 HOH HOH B .
+D 2 HOH 129 360 127 HOH HOH B .
+D 2 HOH 130 361 128 HOH HOH B .
+D 2 HOH 131 362 129 HOH HOH B .
+D 2 HOH 132 363 130 HOH HOH B .
+D 2 HOH 133 364 131 HOH HOH B .
+D 2 HOH 134 365 132 HOH HOH B .
+D 2 HOH 135 366 133 HOH HOH B .
+D 2 HOH 136 367 134 HOH HOH B .
+D 2 HOH 137 368 135 HOH HOH B .
+D 2 HOH 138 369 136 HOH HOH B .
+D 2 HOH 139 370 137 HOH HOH B .
+D 2 HOH 140 371 138 HOH HOH B .
+D 2 HOH 141 372 139 HOH HOH B .
+D 2 HOH 142 373 140 HOH HOH B .
+D 2 HOH 143 374 141 HOH HOH B .
+D 2 HOH 144 375 142 HOH HOH B .
+D 2 HOH 145 376 143 HOH HOH B .
+D 2 HOH 146 377 144 HOH HOH B .
+D 2 HOH 147 378 145 HOH HOH B .
+D 2 HOH 148 379 146 HOH HOH B .
+D 2 HOH 149 380 147 HOH HOH B .
+D 2 HOH 150 382 149 HOH HOH B .
+D 2 HOH 151 383 150 HOH HOH B .
+D 2 HOH 152 384 151 HOH HOH B .
+D 2 HOH 153 385 152 HOH HOH B .
+D 2 HOH 154 386 153 HOH HOH B .
+D 2 HOH 155 387 154 HOH HOH B .
+D 2 HOH 156 388 155 HOH HOH B .
+D 2 HOH 157 389 156 HOH HOH B .
+D 2 HOH 158 390 157 HOH HOH B .
+D 2 HOH 159 391 158 HOH HOH B .
+D 2 HOH 160 392 159 HOH HOH B .
+D 2 HOH 161 394 161 HOH HOH B .
+D 2 HOH 162 395 162 HOH HOH B .
+D 2 HOH 163 396 163 HOH HOH B .
+D 2 HOH 164 398 165 HOH HOH B .
+D 2 HOH 165 399 166 HOH HOH B .
+D 2 HOH 166 400 167 HOH HOH B .
+D 2 HOH 167 401 168 HOH HOH B .
+D 2 HOH 168 402 169 HOH HOH B .
+D 2 HOH 169 403 170 HOH HOH B .
+D 2 HOH 170 404 171 HOH HOH B .
+D 2 HOH 171 405 172 HOH HOH B .
+D 2 HOH 172 406 173 HOH HOH B .
+D 2 HOH 173 407 174 HOH HOH B .
+D 2 HOH 174 408 175 HOH HOH B .
+D 2 HOH 175 409 176 HOH HOH B .
+D 2 HOH 176 410 177 HOH HOH B .
+D 2 HOH 177 411 178 HOH HOH B .
+D 2 HOH 178 412 179 HOH HOH B .
+D 2 HOH 179 413 180 HOH HOH B .
+D 2 HOH 180 414 181 HOH HOH B .
+D 2 HOH 181 415 182 HOH HOH B .
+D 2 HOH 182 416 183 HOH HOH B .
+D 2 HOH 183 417 184 HOH HOH B .
+D 2 HOH 184 418 185 HOH HOH B .
+D 2 HOH 185 419 186 HOH HOH B .
+D 2 HOH 186 420 187 HOH HOH B .
+D 2 HOH 187 421 188 HOH HOH B .
+D 2 HOH 188 422 189 HOH HOH B .
+D 2 HOH 189 423 190 HOH HOH B .
+D 2 HOH 190 424 191 HOH HOH B .
+D 2 HOH 191 425 192 HOH HOH B .
+D 2 HOH 192 426 193 HOH HOH B .
+D 2 HOH 193 427 194 HOH HOH B .
+D 2 HOH 194 428 195 HOH HOH B .
+D 2 HOH 195 429 196 HOH HOH B .
+D 2 HOH 196 430 197 HOH HOH B .
+D 2 HOH 197 431 198 HOH HOH B .
+D 2 HOH 198 432 199 HOH HOH B .
+D 2 HOH 199 433 200 HOH HOH B .
+D 2 HOH 200 434 201 HOH HOH B .
+D 2 HOH 201 435 202 HOH HOH B .
+D 2 HOH 202 436 203 HOH HOH B .
+D 2 HOH 203 437 204 HOH HOH B .
+D 2 HOH 204 438 205 HOH HOH B .
+D 2 HOH 205 439 206 HOH HOH B .
+D 2 HOH 206 440 207 HOH HOH B .
+D 2 HOH 207 441 208 HOH HOH B .
+D 2 HOH 208 442 209 HOH HOH B .
+D 2 HOH 209 443 210 HOH HOH B .
+D 2 HOH 210 444 211 HOH HOH B .
+D 2 HOH 211 445 212 HOH HOH B .
+D 2 HOH 212 446 213 HOH HOH B .
+D 2 HOH 213 447 214 HOH HOH B .
+D 2 HOH 214 448 215 HOH HOH B .
+D 2 HOH 215 449 216 HOH HOH B .
+D 2 HOH 216 450 217 HOH HOH B .
+D 2 HOH 217 451 218 HOH HOH B .
+D 2 HOH 218 452 219 HOH HOH B .
+D 2 HOH 219 453 220 HOH HOH B .
+D 2 HOH 220 454 221 HOH HOH B .
+D 2 HOH 221 455 222 HOH HOH B .
+D 2 HOH 222 456 223 HOH HOH B .
+D 2 HOH 223 457 224 HOH HOH B .
+#
+loop_
+_pdbx_validate_close_contact.id
+_pdbx_validate_close_contact.PDB_model_num
+_pdbx_validate_close_contact.auth_atom_id_1
+_pdbx_validate_close_contact.auth_asym_id_1
+_pdbx_validate_close_contact.auth_comp_id_1
+_pdbx_validate_close_contact.auth_seq_id_1
+_pdbx_validate_close_contact.PDB_ins_code_1
+_pdbx_validate_close_contact.label_alt_id_1
+_pdbx_validate_close_contact.auth_atom_id_2
+_pdbx_validate_close_contact.auth_asym_id_2
+_pdbx_validate_close_contact.auth_comp_id_2
+_pdbx_validate_close_contact.auth_seq_id_2
+_pdbx_validate_close_contact.PDB_ins_code_2
+_pdbx_validate_close_contact.label_alt_id_2
+_pdbx_validate_close_contact.dist
+1 1 O A HOH 8 ? ? O A HOH 204 ? ? 2.06
+2 1 SD A MET 562 ? ? O A HOH 193 ? ? 2.11
+3 1 O B HOH 279 ? ? O B HOH 358 ? ? 2.16
+4 1 ND2 A ASN 828 ? ? O A HOH 104 ? ? 2.17
+5 1 O A HOH 72 ? ? O A HOH 190 ? ? 2.17
+6 1 O B HOH 312 ? ? O B HOH 369 ? ? 2.18
+7 1 O A HOH 175 ? ? O B HOH 116 ? ? 2.19
+#
+loop_
+_pdbx_validate_torsion.id
+_pdbx_validate_torsion.PDB_model_num
+_pdbx_validate_torsion.auth_comp_id
+_pdbx_validate_torsion.auth_asym_id
+_pdbx_validate_torsion.auth_seq_id
+_pdbx_validate_torsion.PDB_ins_code
+_pdbx_validate_torsion.phi
+_pdbx_validate_torsion.psi
+1 1 ASP A 693 ? -91.34 -151.50
+2 1 GLU A 754 ? -146.41 45.56
+3 1 ASN A 813 ? 38.32 59.68
+4 1 ASN B 560 ? -141.26 -17.68
+5 1 ASP B 693 ? -91.02 -150.15
+6 1 GLU B 754 ? -142.59 46.57
+7 1 SER B 762 ? 50.65 4.24
+8 1 ASN B 813 ? 36.76 61.25
+#
+loop_
+_pdbx_validate_chiral.id
+_pdbx_validate_chiral.PDB_model_num
+_pdbx_validate_chiral.auth_comp_id
+_pdbx_validate_chiral.auth_asym_id
+_pdbx_validate_chiral.auth_seq_id
+_pdbx_validate_chiral.PDB_ins_code
+_pdbx_validate_chiral.details
+_pdbx_validate_chiral.omega
+1 1 TYR A 535 ? 'Expecting L Found L OUTSIDE RANGE' 23.258
+2 1 ILE A 816 ? 'Expecting L Found L OUTSIDE RANGE' 24.740
+3 1 ASN B 572 ? 'Expecting L Found L OUTSIDE RANGE' 24.789
+#
+_pdbx_entity_nonpoly.entity_id 2
+_pdbx_entity_nonpoly.name water
+_pdbx_entity_nonpoly.comp_id HOH
+#
--- /dev/null
+uniprot_data_columns
+#
+_group.id
+_group.name
+_group.sort_order
+g1;Quality Measures;3
+g2;Cross References;2
+g3;Names & Taxonomy;1
+g4;Procedures & Softwares;4
+g5;Date Of;5
+g6;Miscellenous;6
+g7;Sequences;7
+g8;Function;8
+g9;Interaction;9
+g10;Expression;10
+g11;Gene Ontology;11
+g12;Pathology & Biotech;12
+g13;Subcellular location;13
+g14;PTM / Processing;14
+g15;Structure;15
+g16;Publications;16
+g17;Date of;17
+g18;Family & Domain;18
+#
+_data_column.primary_key;entry name
+_data_column.default_response_page_size;100
+#
+_data_column.name
+_data_column.code
+_data_column.group_id
+_data_column.data_type
+_data_column.min_col_width
+_data_column.max_col_width
+_data_column.preferred_col_width
+_data_column.is_shown_by_default
+_data_column.is_searchable
+Entry Name;entry name;String;g3;80;100;85;true;true
+Protein names;protein names;String;g3;300;1500;500;true;true
+Gene Names;genes;String;g3;50;1000;95;true;true
+Organism;organism;String;g3;50;1000;95;true;true
+Organism ID;organism-id;int;g3;60;100;80;false;true
+Proteomes;proteome;String;g3;50;1000;95;false;true
+Taxonomic lineage (ALL);lineage(ALL);String;g3;50;400;95;false;false
+Virus hosts;virus hosts;String;g3;50;1000;95;false;true
+Fragment;fragment;String;g7;50;1000;95;false;true
+Gene encoded by;encodedon;String;g7;50;1000;95;false;true
+Alternative products (isoforms);comment(ALTERNATIVE PRODUCTS);String;g7;50;1000;95;false;false
+Erroneous gene model prediction;comment(ERRONEOUS GENE MODEL PREDICTION);String;g7;50;1000;95;false;false
+Erroneous initiation;comment(ERRONEOUS INITIATION);String;g7;50;1000;95;false;false
+Erroneous translation;comment(ERRONEOUS TRANSLATION);String;g7;50;1000;95;false;false
+Frameshift;comment(FRAMESHIFT);String;g7;50;1000;95;false;false
+Mass spectrometry;comment(MASS SPECTROMETRY);String;g7;50;1000;95;false;false
+Polymorphism;comment(POLYMORPHISM);String;g7;50;1000;95;false;false
+RNA editing;comment(RNA EDITING);String;g7;50;1000;95;false;false
+Sequence caution;comment(SEQUENCE CAUTION);String;g7;50;1000;95;false;false
+Length;length;int;g7;50;100;95;false;true
+Mass;mass;String;g7;50;100;80;false;true
+Sequence;sequence;String;g7;50;1000;95;false;true
+Alternative sequence;feature(ALTERNATIVE SEQUENCE);String;g7;50;1000;95;false;false
+Natural variant;feature(NATURAL VARIANT);String;g7;50;1000;95;false;false
+Non-adjacent residues;feature(NON ADJACENT RESIDUES);String;g7;50;1000;95;false;false
+Non-standard residue;feature(NON STANDARD RESIDUE);String;g7;50;1000;95;false;false
+Non-terminal residue;feature(NON TERMINAL RESIDUE);String;g7;50;1000;95;false;false
+Sequence conflict;feature(SEQUENCE CONFLICT);String;g7;50;1000;95;false;false
+Sequence uncertainty;feature(SEQUENCE UNCERTAINTY);String;g7;50;1000;95;false;false
+Version (Sequence);version(sequence);String;g7;50;1000;95;false;false
+EC number;ec;String;g8;50;1000;95;false;true
+Absorption;comment(ABSORPTION);String;g8;50;1000;95;false;false
+Catalytic activity;comment(CATALYTIC ACTIVITY);String;g8;50;1000;95;false;false
+Cofactor;comment(COFACTOR);String;g8;50;1000;95;false;false
+Enzyme regulation;comment(ENZYME REGULATION);String;g8;50;1000;95;false;false
+Function [CC];comment(FUNCTION);String;g8;50;1000;95;false;false
+Kinetics;comment(KINETICS);String;g8;50;1000;95;false;false
+Pathway;comment(PATHWAY);String;g8;50;1000;95;false;false
+Redox potential;comment(REDOX POTENTIAL);String;g8;50;1000;95;false;false
+Temperature dependence;comment(TEMPERATURE DEPENDENCE);String;g8;50;1000;95;false;false
+pH dependence;comment(PH DEPENDENCE);String;g8;50;1000;95;false;false
+Active site;feature(ACTIVE SITE);String;g8;50;1000;95;false;false
+Binding site;feature(BINDING SITE);String;g8;50;1000;95;false;false
+DNA binding;feature(DNA BINDING);String;g8;50;1000;95;false;false
+Metal binding;feature(METAL BINDING);String;g8;50;1000;95;false;false
+Nucleotide binding;feature(NP BIND);String;g8;50;1000;95;false;false
+Site;feature(SITE);String;g8;50;1000;95;false;false
+Annotation;annotation score;String;g6;50;1000;95;false;true
+Features;features;String;g6;50;1000;95;false;true
+Caution;comment(CAUTION);String;g6;50;1000;95;false;false
+Miscellaneous [CC];comment(GENERAL);String;g6;50;1000;95;false;false
+Keywords;keywords;String;g6;50;1000;95;false;true
+Protein existence;existence;String;g6;50;1000;95;false;true
+Status;reviewed;String;g6;50;1000;95;false;true
+ALL;entry name;String;g7;50;1000;95;false;true;
+Subunit structure [CC];comment(SUBUNIT);String;g9;50;1000;95;false;false
+Interacts with;interactor;String;g9;50;1000;95;false;true
+Developmental stage;comment(DEVELOPMENTAL STAGE);String;g10;50;1000;95;false;false
+Induction;comment(INDUCTION);String;g10;50;1000;95;false;false
+Tissue specificity;comment(TISSUE SPECIFICITY);String;g10;50;1000;95;false;false
+Gene ontology (GO);go;String;g11;50;1000;95;false;true
+Gene ontology (biological process);go(biological process);String;g11;50;1000;95;false;false
+Gene ontology (molecular function);go(molecular function);String;g11;50;1000;95;false;false
+Gene ontology (cellular component);go(cellular component);String;g11;50;1000;95;false;false
+Gene ontology IDs;go-id;String;g11;50;1000;95;false;true
+Allergenic properties;comment(ALLERGEN);String;g12;50;1000;95;false;false
+Biotechnological use;comment(BIOTECHNOLOGY);String;g12;50;1000;95;false;false
+Disruption phenotype;comment(DISRUPTION PHENOTYPE);String;g12;50;1000;95;false;false
+Involvement in disease;comment(DISEASE);String;g12;50;1000;95;false;false
+Pharmaceutical use;comment(PHARMACEUTICAL);String;g12;50;1000;95;false;false
+Toxic dose;comment(TOXIC DOSE);String;g12;50;1000;95;false;false
+Subcellular location [CC];comment(SUBCELLULAR LOCATION);String;g13;50;1000;95;false;false
+Intramembrane;feature(INTRAMEMBRANE);String;g13;50;1000;95;false;false
+Topological domain;feature(TOPOLOGICAL DOMAIN);String;g13;50;1000;95;false;false
+Transmembrane;feature(TRANSMEMBRANE);String;g13;50;1000;95;false;false
+Post-translational modification;comment(PTM);String;g14;50;1000;95;false;false
+Chain;feature(CHAIN);String;g14;50;1000;95;false;false
+Cross-link;feature(CROSS LINK);String;g14;50;1000;95;false;false
+Disulfide bond;feature(DISULFIDE BOND);String;g14;50;1000;95;false;false
+Glycosylation;feature(GLYCOSYLATION);String;g14;50;1000;95;false;false
+Initiator methionine;feature(INITIATOR METHIONINE);String;g14;50;1000;95;false;false
+Lipidation;feature(LIPIDATION);String;g14;50;1000;95;false;false
+Modified residue;feature(MODIFIED RESIDUE);String;g14;50;1000;95;false;false
+Peptide;feature(PEPTIDE);String;g14;50;1000;95;false;false
+Propeptide;feature(PROPEPTIDE);String;g14;50;1000;95;false;false
+Signal peptide;feature(SIGNAL);String;g14;50;1000;95;false;false
+Transit peptide;feature(TRANSIT);String;g14;50;1000;95;false;false
+3D;3d;String;g15;50;1000;95;false;false
+Beta strand;feature(BETA STRAND);String;g15;50;1000;95;false;false
+Helix;feature(HELIX);String;g15;50;1000;95;false;false
+Turn;feature(TURN);String;g15;50;1000;95;false;false
+PubMed ID;citation;String;g16;50;1000;95;false;true
+Date of creation;created;String;g17;80;150;100;true;true
+Date of last modification;last-modified;String;g17;80;150;100;true;true
+Date of last sequence modification;sequence-modified;String;g17;80;150;100;false;true
+Version (entry);version(entry);int;g17;80;100;80;false;false
+Domain [CC];comment(DOMAIN);String;g18;80;1000;95;false;false
+Sequence similarities;comment(SIMILARITY);String;g18;50;1000;95;false;false
+Protein families;families;String;g18;50;1000;95;false;true
+Coiled coil;feature(COILED COIL);String;g18;50;1000;95;false;false
+Compositional bias;feature(COMPOSITIONAL BIAS);String;g18;50;1000;95;false;false
+Domain [FT];feature(DOMAIN EXTENT);String;g18;50;1000;95;false;false
+Motif;feature(MOTIF);String;g18;50;1000;95;false;false
+Region;feature(REGION);String;g18;50;1000;95;false;false
+Repeat;feature(REPEAT);String;g18;50;1000;95;false;false
+Zinc finger;feature(ZINC FINGER);String;g18;50;1000;95;false;false
+Cross-reference (EMBL);database(EMBL);String;g2;50;1000;95;false;false
+Cross-reference (PDB);database(PDB);String;g2;50;1000;95;false;false
+Cross-reference (ENSEMBL);database(ENSEMBL);String;g2;50;1000;95;false;false
+Cross-reference (PFAM);database(PFAM);String;g2;50;1000;95;false;false
+Cross-reference (RFAM);database(RFAM);String;g2;50;1000;95;false;false
+Cross-reference (CATH);database(CATH);String;g2;50;1000;95;false;false
+Cross-reference (SCOPE);database(SCOPE);String;g2;50;1000;95;false;false
+Cross-reference (GO);database(GO);String;g2;50;1000;95;false;false
+Cross-reference (INTERPRO);database(INTERPRO);String;g2;50;1000;95;false;false
+Mapped PubMed ID;citationmapping;String;g16;50;1000;95;false;true
+#
<tocitem text="PDB Sequence Fetcher" target="pdbfetcher" />
<tocitem text="PDB Structure Chooser" target="pdbchooser" />
<tocitem text="Chimera Viewer" target="chimera" />
- <tocitem text="Select columns by annotation" target="selectcolbyannot" />
+ <tocitem text="Select Columns by Annotation" target="selectcolbyannot" />
<tocitem text="Latest Release Notes" target="release"/>
</tocitem>
<tocitem text="Viewing Trees" target="treeviewer" expand="false" />
<tocitem text="Fetching Sequences" target="seqfetch" />
- <tocitem text="Select columns by annotation" target="selectcolbyannot" />
+ <tocitem text="Select Columns by Annotation" target="selectcolbyannot" />
<tocitem text="Nucleic Acid Support" target="nucleicAcids" expand="false">
<tocitem text="Viewing RNA structure" target="varna" />
<tocitem text="Consensus" target="calcs.consensus" />
<tocitem text="RNA Structure Consensus" target="calcs.alstrconsensus" />
<tocitem text="Annotations File Format" target="annotations.fileformat" />
- <tocitem text="Select Column by Annotation" target="calcs.annotation" />
+ <tocitem text="Select Columns by Annotation" target="selectcolbyannot" />
</tocitem>
<tocitem text="3D Structure Data" target="viewingpdbs" expand="false">
<tocitem text="PDB Sequence Fetcher" target="pdbfetcher" />
<tocitem text="Annotations Menu" target="alwAnnotations" />
<tocitem text="Format Menu" target="alwFormat" />
<tocitem text="Colour Menu" target="alwColour" />
- <tocitem text="Calculation Menu" target="alwCalc" />
+ <tocitem text="Calculate Menu" target="alwCalc" />
<tocitem text="Web Service Menu" target="wsMenu" />
<tocitem text="Annotation Panel Menu" target="annotPanelMenu" />
<tocitem text="Popup Menu" target="popMenu" />
conserved BLOSUM62 score (which is higher). This value is normalised
for each column, and then plotted on a scale from 0 to 1.
</p>
- <p>Multiple alignment algorithms using the BLOSUM 62 substition
+ <p>Multiple alignment algorithms using the BLOSUM 62 substitution
matrices should, in theory, maximise alignment quality for an
un-gapped alignment, and locally maximise quality for gapped
alignments.</p>
matrix, and (since 2.8.1) is available for Tree and PCA
calculations.</li>
<li><a href="#simplenucleotide">Simple Nucleotide
- Substition</a> is a (fairly) arbitrary DNA/RNA substitution matrix.</li>
+ Substitution</a> is a (fairly) arbitrary DNA/RNA substitution matrix.</li>
<!-- <li><a href="#conservation">Conservation Matrices</a> A range of matrices for distinguishing amino-acids by physicochemical property conservation.
</li> -->
</ul>
<li><em>label</em><br> Indicate that the feature
description should be used to create a colour for features of
this type.<br> <em>Note: if no threshold value is
- needed then the final '|' may be ommitted.<br> This
+ needed then the final '|' may be omitted.<br> This
keyword was added in Jalview 2.6
</em></li>
<p>
If your sequence annotation is already available in GFF Format (see
- <a href="http://www.sanger.ac.uk/resources/software/gff/spec.html">http://www.sanger.ac.uk/resources/software/gff/spec.html</a>),
+ <a href="http://gmod.org/wiki/GFF2">gmod.org/wiki/GFF2</a>),
then you can leave it as is, after first adding a line containing
only 'GFF' after any Jalview feature colour definitions (<em>this
mixed format capability was added in Jalview 2.6</em>). Alternately,
</pre>
This format allows two alternate ways of referring to a sequence,
- either by its text ID, or its index in an associated alignment.
+ either by its text ID, or its index (base 0) in an associated alignment.
Normally, sequence features are associated with sequences rather than
alignments, and the sequenceIndex field is given as "-1". In
order to specify a sequence by its index in a particular alignment,
ordering based on the average length of each feature type.
</p>
<p>
- The <strong><em>transparency slider setting</em></strong> (currently
- only available in the application version) controls the visibility
+ The <strong><em>transparency slider setting</em></strong> controls the visibility
of features rendered below other features. Reducing the transparency
will mean that features at the top of the list can obscure features
lower down, and increasing it allows the user to 'see through' the
<strong>The Groovy Shell</strong>
</p>
<p>
- <a href="http://groovy.codehaus.org/">Groovy</a> is an "<em>agile
+ <a href="http://www.groovy-lang.org/">Groovy</a> is an "<em>agile
and dynamic language for the Java platform</em>". The groovy
scripting language makes it extremely easy to programmatically
interact with Java programs, in much the same way that Javascript is
page.
</p>
<p>
- <strong><em>Getting Groovy...</em> </strong><br> Jalview Groovy
- support is only possible if the core groovy jars which include the
- GroovyShell are present on the CLASSPATH when Jalview is started.
- </p>
- <p>
- The jars are obtained from the <em>embedded</em> directory within
- the <a href="http://dist.codehaus.org/groovy/distributions">groovy
- distribution</a>. The easiest way of adding them to the Jalview
- classpath is to download and build Jalview from its source
- distribution, and then add the groovy-all-*.jar to the lib directory
- whose path is given in the java.ext.dirs property.
- </p>
- <p>
- <strong>Opening Jalview's Groovy Console</strong><br>If groovy
- is available, then the <strong>Tools→Groovy
- Console...</strong> menu entry will be available from the Jalview Desktop's
- drop-down menu. Selecting this will open the <a
- href="http://groovy.codehaus.org/Groovy+Console"
- >Groovy Console</a> which allows you to interactively execute Groovy
+ <strong><em>Getting Groovy...</em> </strong><br> Jalview comes with
+ an embedded installation of Groovy. All you need is to select <strong>Tools→Groovy
+ Console...</strong> menu option from the Jalview Desktop's
+ drop-down menu. After a short pause, you should then see the <a
+ href="http://groovy-lang.org/groovyconsole.html"
+ >Groovy Console</a> appear. This allows you to interactively execute Groovy
scripts within the Jalview run-time environment.
</p>
<p>
action on the whole alignment, or selected rows, columns, or
regions.
</em> <br></li>
+ <li><strong>Reverse, Reverse Complement</strong> (not applet)<br>
+ <em>These options are visible for nucleotide alignments. Selecting them adds the reverse (or reverse complement)
+ of the sequences (or selected region) as new sequences in the alignment. To try this out, add this sequence and
+ perform 'Reverse Complement' followed by 'Translate as cDNA':
+ <br><small>
+ Seq GTCATTTGCGCGTGTTGATTATTCGGACCGCTCCACTTCCCTTTACTCGTGCGTTCAATTGATTTAATCCTC
+ TGGGGGGGCTCTGGTTTACATAGCTTAAATCTATTCCATTCAAGGAAGCTCATG</small>
+ </em> <br></li>
<li><strong>Get Cross-References</strong> (not applet)<br>
<em>This option is visible where sequences have
cross-references to other standard databases; for example, an
dialog box.
</em></li>
<li><strong>Groovy Console...<em> (only
- available if groovy is on the classpath)</em><br></strong> <em>Open's
- the <a href="../groovy.html">Groovy Console</a> for
+ available if groovy is on the classpath)</em><br></strong> <em>Opens
+ the <a href="../features/groovy.html">Groovy Console</a> for
interactive scripting.
</em><strong><br></strong></li>
<tr>
<td width="60" nowrap>
<div align="center">
- <strong><a name="Jalview.2.9.0b2">2.9.0b2</a><br />
- <em>16/10/2015</em></strong>
+ <strong><a name="Jalview.2.9.1">2.9.1</a><br /> <em>1/6/2016</em></strong>
</div>
</td>
+ <td><em>General</em>
+ <ul>
+ <li></li>
+ </ul> <em>Application</em>
+ <ul>
+ <li></li>
+ </ul> <em>Applet</em>
+ <ul>
+ <li></li>
+ </ul></td>
<td>
- <em>General</em>
- <ul>
- <li>Time stamps for signed Jalview application and applet jars</li>
- </ul>
+ <div align="left">
+ <em>General</em>
+ <ul>
+ <li></li>
+ </ul>
+ <em>Application</em>
+ <ul>
+ <li></li>
+ </ul>
+ <em>Applet</em>
+ <ul>
+ <li></li>
+ </ul>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="60" nowrap>
+ <div align="center">
+ <strong><a name="Jalview.2.9.0b2">2.9.0b2</a><br />
+ <em>16/10/2015</em></strong>
+ </div>
</td>
+ <td><em>General</em>
+ <ul>
+ <li>Time stamps for signed Jalview application and applet
+ jars</li>
+ </ul></td>
<td>
<div align="left">
- <em>Application</em><ul>
- <li>Duplicate group consensus and conservation rows shown when tree is partitioned</li>
- <li>Erratic behaviour when tree partitions made with multiple cDNA/Protein split views</li>
- </ul>
+ <em>Application</em>
+ <ul>
+ <li>Duplicate group consensus and conservation rows
+ shown when tree is partitioned</li>
+ <li>Erratic behaviour when tree partitions made with
+ multiple cDNA/Protein split views</li>
+ </ul>
</div>
</td>
</tr>
<em>8/10/2015</em></strong>
</div>
</td>
- <td>
- <em>General</em>
+ <td><em>General</em>
+ <ul>
+ <li>Updated Spanish translations of localized text for
+ 2.9</li>
+ </ul> <em>Application</em>
<ul>
- <li>Updated Spanish translations of localized text for 2.9</li>
- </ul>
- <em>Application</em><ul>
- <!-- <li>cDNA/Protein splitframe window geometry preserved in Jalview projects</li>-->
- <li>Signed OSX InstallAnywhere installer<br></li>
- <li>Support for per-sequence based annotations in BioJSON</li></ul>
- <em>Applet</em>
- <ul><li>Split frame example added to applet examples page</li>
- </ul>
- </td>
+ <!-- <li>cDNA/Protein splitframe window geometry preserved in Jalview projects</li>-->
+ <li>Signed OSX InstallAnywhere installer<br></li>
+ <li>Support for per-sequence based annotations in BioJSON</li>
+ </ul> <em>Applet</em>
+ <ul>
+ <li>Split frame example added to applet examples page</li>
+ </ul></td>
<td>
<div align="left">
- <em>General</em>
+ <em>General</em>
<ul>
- <li>Mapping of cDNA to protein in split frames incorrect when sequence start > 1</li>
- <li>Broken images in filter column by annotation dialog documentation</li>
+ <li>Mapping of cDNA to protein in split frames
+ incorrect when sequence start > 1</li>
+ <li>Broken images in filter column by annotation dialog
+ documentation</li>
<li>Feature colours not parsed from features file</li>
- <li>Exceptions and incomplete link URLs recovered when loading a features file containing HTML tags in feature description</li>
-
+ <li>Exceptions and incomplete link URLs recovered when
+ loading a features file containing HTML tags in feature
+ description</li>
+
</ul>
- <em>Application</em><ul>
- <li>Annotations corrupted after BioJS export and reimport</li>
- <li>Incorrect sequence limits after Fetch DB References with 'trim retrieved sequences'</li>
- <li>Incorrect warning about deleting all data when deleting selected columns</li>
- <li>Patch to build system for shipping properly signed JNLP templates for webstart launch</li>
- <li>EMBL-PDBe fetcher/viewer dialogs do not offer unreleased structures for download or viewing</li>
- <li>Tab/space/return keystroke operation of EMBL-PDBe fetcher/viewer dialogs works correctly</li>
- <li>Disabled 'minimise' button on Jalview windows running on OSX to workaround redraw hang bug</li>
- <li>Split cDNA/Protein view position and geometry not recovered from jalview project</li>
- <li>Initial enabled/disabled state of annotation menu sorter 'show autocalculated first/last' corresponds to alignment view</li>
- <li>Restoring of Clustal, RNA Helices and T-Coffee color schemes from BioJSON</li>
- </ul>
- <em>Applet</em><ul>
- <li>Reorder sequences mirrored in cDNA/Protein split frame</li>
+ <em>Application</em>
+ <ul>
+ <li>Annotations corrupted after BioJS export and
+ reimport</li>
+ <li>Incorrect sequence limits after Fetch DB References
+ with 'trim retrieved sequences'</li>
+ <li>Incorrect warning about deleting all data when
+ deleting selected columns</li>
+ <li>Patch to build system for shipping properly signed
+ JNLP templates for webstart launch</li>
+ <li>EMBL-PDBe fetcher/viewer dialogs do not offer
+ unreleased structures for download or viewing</li>
+ <li>Tab/space/return keystroke operation of EMBL-PDBe
+ fetcher/viewer dialogs works correctly</li>
+ <li>Disabled 'minimise' button on Jalview windows
+ running on OSX to workaround redraw hang bug</li>
+ <li>Split cDNA/Protein view position and geometry not
+ recovered from jalview project</li>
+ <li>Initial enabled/disabled state of annotation menu
+ sorter 'show autocalculated first/last' corresponds to
+ alignment view</li>
+ <li>Restoring of Clustal, RNA Helices and T-Coffee
+ color schemes from BioJSON</li>
+ </ul>
+ <em>Applet</em>
+ <ul>
+ <li>Reorder sequences mirrored in cDNA/Protein split
+ frame</li>
<li>Applet with Jmol examples not loading correctly</li>
- </ul>
+ </ul>
</div>
</td>
</tr>
<tr>
<td><div align="center">
<strong><a name="Jalview.2.8.0b1">2.8.0b1</a><br />
- <em>30/1/2014</em></strong>
+ <em>30/1/2014</em></strong>
</div></td>
<td>
<ul>
<ul>
<li>URL links generated from description line for
regular-expression based URL links (applet and application)
+
<li>Non-positional feature URL links are shown in link
menu</li>
<li>Cancel button for DAS Feature Fetching
<li>PCA and PDB Viewers zoom via mouse roller
<li>User-defined sub-tree colours and sub-tree selection
+
<li>'New Window' button on the 'Output to Text box'
</ul>
<li>Fixed Remove Empty Columns Bug (empty columns at end
of alignment)
<li>Slowed DAS Feature Fetching for increased robustness.
+
<li>Made angle brackets in ASCII feature descriptions
display correctly
<li>WsDbFetch query/result association resolved
<li>Tree leaf to sequence mapping improved
<li>Smooth fonts switch moved to FontChooser dialog box.
+
</ul>
</td>
--- /dev/null
+pdb_data_columns
+#
+_group.id
+_group.name
+_group.sort_order
+g1;Quality Measures;1
+g2;Cross References;2
+g3;Names & Taxonomy;3
+g4;Procedures & Softwares;4
+g5;Date Of;5
+g6;Miscellenous;6
+#
+_data_column.primary_key;pdb_id
+_data_column.default_response_page_size;100
+#
+_data_column.name
+_data_column.code
+_data_column.group_id
+_data_column.data_type
+_data_column.min_col_width
+_data_column.max_col_width
+_data_column.preferred_col_width
+_data_column.is_shown_by_default
+_data_column.is_searchable
+PDB Id;pdb_id;String;g2;40;60;45;true;true
+Title;title;String;g6;300;1500;400;true;false
+Molecule;molecule_name;String;g3;50;400;95;false;true
+Molecule Type;molecule_type;String;g3;50;400;95;false;true
+Sequence;molecule_sequence;String;g6;50;400;95;false;false
+PFAM Accession;pfam_accession;String;g2;50;400;95;false;true
+PFAM Name;pfam_name;String;g3;50;400;95;false;true
+InterPro Name;interpro_name;String;g3;50;400;95;false;false
+InterPro Accession;interpro_accession;String;g2;50;400;95;false;false
+UniProt Id;uniprot_id;String;g2;50;400;95;false;true
+UniProt Accession;uniprot_accession;String;g2;50;400;95;false;false
+UniProt Coverage;uniprot_coverage;String;g6;50;400;95;false;false
+Uniprot Features;uniprot_features;String;g6;50;400;95;false;false
+R Factor;r_factor;Double;g1;50;150;85;false;false
+Resolution;resolution;Double;g1;50;150;85;true;false
+Data Quality;data_quality;Double;g1;50;150;85;false;false
+Overall Quality;overall_quality;Double;g1;50;150;85;false;false
+Number of Polymers;number_of_polymers;int;g6;50;400;95;false;false
+Number of Protein Chains;number_of_protein_chains;int;g6;50;400;95;false;false
+Number of Bound Molecule;number_of_bound_molecules;int;g6;50;400;95;false;false
+Number of Polymer Residue;number_of_polymer_residues;int;g6;50;400;95;false;false
+GENUS;genus;String;g3;50;400;95;false;true
+Gene Name;gene_name;String;g3;50;400;95;false;true
+Experimental Method;experimental_method;String;g4;50;400;95;false;false
+GO Id;go_id;String;g2;50;400;95;false;false
+Assembly Id;assembly_id;String;g2;50;400;95;false;false
+Assembly Form;assembly_form;String;g6;50;400;95;false;false
+Assembly Type;assembly_type;String;g6;50;400;95;false;false
+Space Group;spacegroup;String;g6;50;400;95;false;false
+Cath Code;cath_code;String;g2;50;400;95;false;false
+Tax Id;tax_id;String;g2;50;400;95;false;false
+Tax Query;tax_query;String;g2;50;400;95;false;false
+Interacting Entity Id;interacting_entity_id;String;g2;50;400;95;false;false
+Interacting Molecules;interacting_molecules;String;g6;50;400;95;false;false
+Pubmed Id;pubmed_id;int;g2;50;400;95;false;false
+Status;status;String;g6;50;400;95;false;false
+Model Quality;model_quality;Double;g1;50;150;85;false;false
+Pivot Resolution;pivot_resolution;Double;g1;50;150;85;false;false
+Data reduction software;data_reduction_software;String;g4;50;400;95;false;false
+Max observed residues;max_observed_residues;String;g6;50;400;95;false;false
+Organism scientific name;organism_scientific_name;String;g3;50;400;95;false;false
+Super kingdom;superkingdom;String;g3;50;400;95;false;false
+Rank;rank;String;g3;50;400;95;false;false
+Crystallisation Ph;crystallisation_ph;String;g6;50;400;95;false;false
+Biological Function;biological_function;String;g6;50;400;95;false;false
+Biological Process;biological_process;String;g6;50;400;95;false;false
+Biological Cell Component;biological_cell_component;String;g6;50;400;95;false;false
+Compound Name;compound_name;String;g3;50;400;95;false;false
+Compound Id;compound_id;String;g2;50;400;95;false;false
+Compound Weight;compound_weight;String;g6;50;400;95;false;false
+Compound Systematic Name;compound_systematic_name;String;g3;50;400;95;false;false
+Interacting Ligands;interacting_ligands;String;g6;50;400;95;false;false
+Journal;journal;String;g6;50;400;95;false;false
+All Authors;all_authors;String;g6;50;400;95;false;false
+Experiment Data Available;experiment_data_available;String;g6;50;400;95;false;false
+Diffraction Protocol;diffraction_protocol;String;g4;50;400;95;false;false
+Refinement Software;refinement_software;String;g4;50;400;95;false;false
+Structure Determination Method;structure_determination_method;String;g4;50;400;95;false;false
+Synchrotron Site;synchrotron_site;String;g6;50;400;95;false;false
+Sample Preparation Method;sample_preparation_method;String;g4;50;400;95;false;false
+Entry Authors;entry_authors;String;g6;50;400;95;false;false
+Citation Title;citation_title;String;g6;50;400;95;false;false
+Structure Solution Software;structure_solution_software;String;g4;50;400;95;false;false
+Entry Entity;entry_entity;String;g6;50;400;95;false;false
+R Free;r_free;Double;g1;50;150;85;false;false
+Number of Polymer Entities;number_of_polymer_entities;int;g6;50;400;95;false;false
+Number of Bound Entities;number_of_bound_entities;int;g6;50;400;95;false;false
+Crystallisation Reservoir;crystallisation_reservoir;String;g6;50;400;95;false;false
+Data Scalling Software;data_scaling_software;String;g4;50;400;95;false;false
+Detector;detector;String;g6;50;400;95;false;false
+Detector Type;detector_type;String;g6;50;400;95;false;false
+Modified Residue Flag;modified_residue_flag;String;g6;50;400;95;false;false
+Number of Copies;number_of_copies;int;g6;50;400;95;false;false
+Struc Asym Id;struct_asym_id;String;g2;50;400;95;false;false
+Homologus PDB Entity Id;homologus_pdb_entity_id;String;g2;50;400;95;false;false
+Molecule Synonym;molecule_synonym;String;g6;50;400;95;false;false
+Deposition Site;deposition_site;String;g6;50;400;95;false;false
+Synchrotron Beamline;synchrotron_beamline;String;g6;50;400;95;false;false
+Entity Id; entity_id;String;g2;50;400;95;false;false
+Beam Source Name;beam_source_name;String;g3;50;400;95;false;false
+Processing Site;processing_site;String;g6;50;400;95;false;false
+Entity Weight;entity_weight;Double;g6;50;400;95;false;false
+Version;_version_;String;g6;50;400;95;false;false
+ALL;text;String;g6;50;400;95;false;true
+#
--- /dev/null
+uniprot_data_columns
+#
+_group.id
+_group.name
+_group.sort_order
+g1;Quality Measures;3
+g2;Cross References;2
+g3;Names & Taxonomy;1
+g4;Procedures & Softwares;4
+g5;Date Of;5
+g6;Miscellenous;6
+g7;Sequences;7
+g8;Function;8
+g9;Interaction;9
+g10;Expression;10
+g11;Gene Ontology;11
+g12;Pathology & Biotech;12
+g13;Subcellular location;13
+g14;PTM / Processing;14
+g15;Structure;15
+g16;Publications;16
+g17;Date of;17
+g18;Family & Domain;18
+#
+_data_column.primary_key;id
+_data_column.default_response_page_size;500
+#
+_data_column.name
+_data_column.code|_data_column.alt_code (optional: used for specifying search code when different from original code)
+_data_column.group_id
+_data_column.data_type
+_data_column.min_col_width
+_data_column.max_col_width
+_data_column.preferred_col_width
+_data_column.is_shown_by_default
+_data_column.is_searchable
+Uniprot Id;id;String;g3;80;150;85;true;true
+Entry Name;entry name|name;String;g3;100;150;105;true;true
+Protein names;protein names|protein name;String;g3;300;1500;500;true;true
+Gene Names;genes|gene;String;g3;100;1000;145;true;true
+Organism;organism;String;g3;100;1000;200;true;true
+Organism ID;organism-id;int;g3;60;100;80;false;true
+Proteomes;proteome;String;g3;50;1000;95;false;true
+Taxonomic lineage (ALL);lineage(ALL);String;g3;50;400;95;false;false
+Virus hosts;virus hosts;String;g3;50;1000;95;false;true
+Fragment;fragment;String;g7;50;1000;95;false;true
+Gene encoded by;encodedon;String;g7;50;1000;95;false;true
+Alternative products (isoforms);comment(ALTERNATIVE PRODUCTS);String;g7;50;1000;95;false;false
+Erroneous gene model prediction;comment(ERRONEOUS GENE MODEL PREDICTION);String;g7;50;1000;95;false;false
+Erroneous initiation;comment(ERRONEOUS INITIATION);String;g7;50;1000;95;false;false
+Erroneous translation;comment(ERRONEOUS TRANSLATION);String;g7;50;1000;95;false;false
+Frameshift;comment(FRAMESHIFT);String;g7;50;1000;95;false;false
+Mass spectrometry;comment(MASS SPECTROMETRY);String;g7;50;1000;95;false;false
+Polymorphism;comment(POLYMORPHISM);String;g7;50;1000;95;false;false
+RNA editing;comment(RNA EDITING);String;g7;50;1000;95;false;false
+Sequence caution;comment(SEQUENCE CAUTION);String;g7;50;1000;95;false;false
+Status;reviewed;String;g6;50;100;95;true;true
+Length;length;int;g7;50;100;65;true;true
+Mass;mass;String;g7;50;100;80;false;true
+Sequence;sequence;String;g7;50;1000;95;false;true
+Alternative sequence;feature(ALTERNATIVE SEQUENCE);String;g7;50;1000;95;false;false
+Natural variant;feature(NATURAL VARIANT);String;g7;50;1000;95;false;false
+Non-adjacent residues;feature(NON ADJACENT RESIDUES);String;g7;50;1000;95;false;false
+Non-standard residue;feature(NON STANDARD RESIDUE);String;g7;50;1000;95;false;false
+Non-terminal residue;feature(NON TERMINAL RESIDUE);String;g7;50;1000;95;false;false
+Sequence conflict;feature(SEQUENCE CONFLICT);String;g7;50;1000;95;false;false
+Sequence uncertainty;feature(SEQUENCE UNCERTAINTY);String;g7;50;1000;95;false;false
+Version (Sequence);version(sequence);String;g7;50;1000;95;false;false
+EC number;ec;String;g8;50;1000;95;false;true
+Absorption;comment(ABSORPTION);String;g8;50;1000;95;false;false
+Catalytic activity;comment(CATALYTIC ACTIVITY);String;g8;50;1000;95;false;false
+Cofactor;comment(COFACTOR);String;g8;50;1000;95;false;false
+Enzyme regulation;comment(ENZYME REGULATION);String;g8;50;1000;95;false;false
+Function [CC];comment(FUNCTION);String;g8;50;1000;95;false;false
+Kinetics;comment(KINETICS);String;g8;50;1000;95;false;false
+Pathway;comment(PATHWAY);String;g8;50;1000;95;false;false
+Redox potential;comment(REDOX POTENTIAL);String;g8;50;1000;95;false;false
+Temperature dependence;comment(TEMPERATURE DEPENDENCE);String;g8;50;1000;95;false;false
+pH dependence;comment(PH DEPENDENCE);String;g8;50;1000;95;false;false
+Active site;feature(ACTIVE SITE);String;g8;50;1000;95;false;false
+Binding site;feature(BINDING SITE);String;g8;50;1000;95;false;false
+DNA binding;feature(DNA BINDING);String;g8;50;1000;95;false;false
+Metal binding;feature(METAL BINDING);String;g8;50;1000;95;false;false
+Nucleotide binding;feature(NP BIND);String;g8;50;1000;95;false;false
+Site;feature(SITE);String;g8;50;1000;95;false;false
+Annotation;annotation score;String;g6;50;1000;95;false;true
+Features;features;String;g6;50;1000;95;false;true
+Caution;comment(CAUTION);String;g6;50;1000;95;false;false
+Miscellaneous [CC];comment(GENERAL);String;g6;50;1000;95;false;false
+Keywords;keywords;String;g6;50;1000;95;false;true
+Protein existence;existence;String;g6;50;1000;95;false;true
+ALL;Search All;String;g7;50;1000;95;false;true;
+Subunit structure [CC];comment(SUBUNIT);String;g9;50;1000;95;false;false
+Interacts with;interactor;String;g9;50;1000;95;false;true
+Developmental stage;comment(DEVELOPMENTAL STAGE);String;g10;50;1000;95;false;false
+Induction;comment(INDUCTION);String;g10;50;1000;95;false;false
+Tissue specificity;comment(TISSUE SPECIFICITY);String;g10;50;1000;95;false;false
+Gene ontology (GO);go;String;g11;50;1000;95;false;true
+Gene ontology (biological process);go(biological process);String;g11;50;1000;95;false;false
+Gene ontology (molecular function);go(molecular function);String;g11;50;1000;95;false;false
+Gene ontology (cellular component);go(cellular component);String;g11;50;1000;95;false;false
+Gene ontology IDs;go-id;String;g11;50;1000;95;false;true
+Allergenic properties;comment(ALLERGEN);String;g12;50;1000;95;false;false
+Biotechnological use;comment(BIOTECHNOLOGY);String;g12;50;1000;95;false;false
+Disruption phenotype;comment(DISRUPTION PHENOTYPE);String;g12;50;1000;95;false;false
+Involvement in disease;comment(DISEASE);String;g12;50;1000;95;false;false
+Pharmaceutical use;comment(PHARMACEUTICAL);String;g12;50;1000;95;false;false
+Toxic dose;comment(TOXIC DOSE);String;g12;50;1000;95;false;false
+Subcellular location [CC];comment(SUBCELLULAR LOCATION);String;g13;50;1000;95;false;false
+Intramembrane;feature(INTRAMEMBRANE);String;g13;50;1000;95;false;false
+Topological domain;feature(TOPOLOGICAL DOMAIN);String;g13;50;1000;95;false;false
+Transmembrane;feature(TRANSMEMBRANE);String;g13;50;1000;95;false;false
+Post-translational modification;comment(PTM);String;g14;50;1000;95;false;false
+Chain;feature(CHAIN);String;g14;50;1000;95;false;false
+Cross-link;feature(CROSS LINK);String;g14;50;1000;95;false;false
+Disulfide bond;feature(DISULFIDE BOND);String;g14;50;1000;95;false;false
+Glycosylation;feature(GLYCOSYLATION);String;g14;50;1000;95;false;false
+Initiator methionine;feature(INITIATOR METHIONINE);String;g14;50;1000;95;false;false
+Lipidation;feature(LIPIDATION);String;g14;50;1000;95;false;false
+Modified residue;feature(MODIFIED RESIDUE);String;g14;50;1000;95;false;false
+Peptide;feature(PEPTIDE);String;g14;50;1000;95;false;false
+Propeptide;feature(PROPEPTIDE);String;g14;50;1000;95;false;false
+Signal peptide;feature(SIGNAL);String;g14;50;1000;95;false;false
+Transit peptide;feature(TRANSIT);String;g14;50;1000;95;false;false
+3D;3d;String;g15;50;1000;95;false;false
+Beta strand;feature(BETA STRAND);String;g15;50;1000;95;false;false
+Helix;feature(HELIX);String;g15;50;1000;95;false;false
+Turn;feature(TURN);String;g15;50;1000;95;false;false
+PubMed ID;citation;String;g16;50;1000;95;false;true
+Date of creation;created;String;g17;80;150;100;false;true
+Date of last modification;last-modified;String;g17;80;150;100;false;true
+Date of last sequence modification;sequence-modified;String;g17;80;150;100;false;true
+Version (entry);version(entry);int;g17;80;100;80;false;false
+Domain;comment(DOMAIN)|domain;String;g18;80;1000;95;false;true
+Sequence similarities;comment(SIMILARITY);String;g18;50;1000;95;false;false
+Protein families;families|family;String;g18;50;1000;95;false;true
+Coiled coil;feature(COILED COIL);String;g18;50;1000;95;false;false
+Compositional bias;feature(COMPOSITIONAL BIAS);String;g18;50;1000;95;false;false
+Domain [FT];feature(DOMAIN EXTENT);String;g18;50;1000;95;false;false
+Motif;feature(MOTIF);String;g18;50;1000;95;false;false
+Region;feature(REGION);String;g18;50;1000;95;false;false
+Repeat;feature(REPEAT);String;g18;50;1000;95;false;false
+Zinc finger;feature(ZINC FINGER);String;g18;50;1000;95;false;false
+Cross-reference (EMBL);database(EMBL);String;g2;50;1000;95;false;false
+Cross-reference (PDB);database(PDB);String;g2;50;1000;95;false;false
+Cross-reference (ENSEMBL);database(ENSEMBL);String;g2;50;1000;95;false;false
+Cross-reference (PFAM);database(PFAM);String;g2;50;1000;95;false;false
+Cross-reference (RFAM);database(RFAM);String;g2;50;1000;95;false;false
+Cross-reference (CATH);database(CATH);String;g2;50;1000;95;false;false
+Cross-reference (SCOPE);database(SCOPE);String;g2;50;1000;95;false;false
+Cross-reference (GO);database(GO);String;g2;50;1000;95;false;false
+Cross-reference (INTERPRO);database(INTERPRO);String;g2;50;1000;95;false;false
+Mapped PubMed ID;citationmapping;String;g16;50;1000;95;false;true
+#
label.show_sequence_features = Show Sequence Features
label.nucleotide = Nucleotide
label.protein = Protein
+label.nucleotides = Nucleotides
+label.proteins = Proteins
label.to_new_alignment = To New Alignment
label.to_this_alignment = Add To This Alignment
label.apply_colour_to_all_groups = Apply Colour To All Groups
label.export_image = Export Image
label.vamsas_store = VAMSAS store
label.translate_cDNA = Translate as cDNA
-label.linked_view_title = Linked cDNA and protein view
+label.reverse = Reverse
+label.reverse_complement = Reverse Complement
+label.linked_view_title = Linked CDS and protein view
label.align = Align
label.extract_scores = Extract Scores
label.get_cross_refs = Get Cross-References
label.invalid_font = Invalid Font
label.separate_multiple_accession_ids = Enter one or more accession IDs separated by a semi-colon ";"
label.separate_multiple_query_values = Enter one or more {0}s separated by a semi-colon ";"
-label.search_all = Enter one or more search values separated by a semi-colon ";" (Note: This Searches the entire PDB database)
+label.search_all = Enter one or more search values separated by a semi-colon ";" (Note: This Searches the entire database)
label.replace_commas_semicolons = Replace commas with semi-colons
label.parsing_failed_syntax_errors_shown_below_param = Parsing failed. Syntax errors shown below {0}
label.parsing_failed_unrecoverable_exception_thrown_param = \nParsing failed. An unrecoverable exception was thrown\:\n {0}
label.blasting_for_unidentified_sequence = BLASTing for unidentified sequences
label.select_columns_containing = Select columns containing
label.select_columns_not_containing = Select columns that do not contain
+label.hide_columns_containing = Hide columns containing
+label.hide_columns_not_containing = Hide columns that do not contain
option.trim_retrieved_seqs = Trim retrieved sequences
label.trim_retrieved_sequences = When the reference sequence is longer than the sequence that you are working with, only keep the relevant subsequences.
label.use_sequence_id_1 = Use $SEQUENCE_ID$ or $SEQUENCE_ID=/<regex>/=$
error.dbrefsource_implementation_exception =DBRefSource Implementation Exception
error.implementation_error_dbinstance_must_implement_interface = Implmentation Error - getDbInstances must be given a class that implements jalview.ws.seqfetcher.DbSourceProxy (was given{0})
error.implementation_error_must_init_dbsources =Implementation error. Must initialise dbSources
-label.view_controller_toggled_marked = {0} {1} columns {2} containing features of type {3} across {4} sequence(s)
+label.view_controller_toggled_marked = {0} {1} columns containing features of type {2} across {3} sequence(s)
label.toggled = Toggled
label.marked = Marked
label.not = not
label.mark_as_representative = Mark as representative
label.open_jabaws_web_page = Open JABAWS web page
label.opens_the_jabaws_server_homepage = Opens the JABAWS server's homepage in web browser
-label.pdb_sequence_getcher = PDB Sequence Fetcher
+label.pdb_sequence_fetcher = PDB Sequence Fetcher
label.result = result
label.results = results
label.structure_chooser = Structure Chooser
info.associate_wit_sequence = Associate with Sequence
label.search_result = Search Result
label.found_structures_summary = Found Structures Summary
-label.configure_displayed_columns = Configure Displayed Columns
+label.configure_displayed_columns = Customise Displayed Options
label.start_jalview = Start Jalview
label.biojs_html_export = BioJS
label.scale_as_cdna = Scale protein residues to codons
label.structure_chooser_no_of_structures = Structure Chooser - {0} Found ({1})
info.no_pdb_entry_found_for = No PDB entry found for {0}
exception.unable_to_detect_internet_connection = Jalview is unable to detect an internet connection
-exception.pdb_rest_service_no_longer_available = PDB rest services no longer available!
+exception.fts_rest_service_no_longer_available = {0} rest services no longer available!
exception.resource_not_be_found = The requested resource could not be found
-exception.pdb_server_error = There seems to be an error from the PDB server
-exception.pdb_server_unreachable = Jalview is unable to reach the PDBe Solr server. \nPlease ensure that you are connected to the internet and try again.
+exception.fts_server_error = There seems to be an error from the {0} server
+exception.fts_server_unreachable = Jalview is unable to reach the {0} server. \nPlease ensure that you are connected to the internet and try again.
label.nw_mapping = Needleman & Wunsch Alignment
label.sifts_mapping = SIFTs Mapping
label.mapping_method = Sequence \u27f7 Structure mapping method
+label.mapping_method = Sequence \u27f7 Structure mapping method
status.waiting_for_user_to_select_output_file = Waiting for user to select {0} file.
status.cancelled_image_export_operation = Cancelled {0} export operation.
-info.error_creating_file = Error creating {0} file.
\ No newline at end of file
+info.error_creating_file = Error creating {0} file.
+exception.outofmemory_loading_mmcif_file = Out of memory loading mmCIF File
+info.error_creating_file = Error creating {0} file.
+label.run_groovy = Run Groovy console script
+label.run_groovy_tip = Run the script in the Groovy console over this alignment
+label.couldnt_run_groovy_script = Failed to run Groovy script
+label.uniprot_sequence_fetcher = UniProt Sequence Fetcher
+action.next_page= >>
+action.prev_page= <<
+label.next_page_tooltop=Next Page
+label.prev_page_tooltop=Previous Page
+exception.bad_request=Bad request. There is a problem with your input.
+exception.service_not_available=Service not available. The server is being updated, try again later.
error.dbrefsource_implementation_exception = Excepción de implementación DBRefSource
error.implementation_error_dbinstance_must_implement_interface = Error de Implementación- getDbInstances debe recibir una clase que implemente jalview.ws.seqfetcher.DbSourceProxy (recibió {0})
error.implementation_error_must_init_dbsources =Error de implementación. Debe inicializar dbSources
-label.view_controller_toggled_marked = {0} {1} columnas {2} conteniendo caracterÃsticas del tipo {3} en {4} secuencia(s)
+label.view_controller_toggled_marked = {0} {1} columnas conteniendo caracterÃsticas del tipo {2} en {3} secuencia(s)
label.toggled = Invertida
label.marked = Marcada
label.not = no
import jalview.appletgui.SequenceRenderer;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
+import jalview.io.StructureFile;
import jalview.structure.AtomSpec;
import jalview.structure.StructureListener;
import jalview.structure.StructureMapping;
int my = 0;
- public PDBfile pdb;
+ public StructureFile pdb;
PDBEntry pdbentry;
if (protocol.equals(jalview.io.AppletFormatAdapter.PASTE))
{
- pdbentry.setFile("INLINE" + pdb.id);
+ pdbentry.setFile("INLINE" + pdb.getId());
}
} catch (Exception ex)
return;
}
- pdbentry.setId(pdb.id);
+ pdbentry.setId(pdb.getId());
ssm.addStructureViewerListener(this);
// JUST DEAL WITH ONE SEQUENCE FOR NOW
SequenceI sequence = seq[0];
- for (int i = 0; i < pdb.chains.size(); i++)
+ for (int i = 0; i < pdb.getChains().size(); i++)
{
mappingDetails.append("\n\nPDB Sequence is :\nSequence = "
- + pdb.chains.elementAt(i).sequence.getSequenceAsString());
+ + pdb.getChains().elementAt(i).sequence.getSequenceAsString());
mappingDetails.append("\nNo of residues = "
- + pdb.chains.elementAt(i).residues.size() + "\n\n");
+ + pdb.getChains().elementAt(i).residues.size() + "\n\n");
// Now lets compare the sequences to get
// the start and end points.
// Align the sequence to the pdb
// TODO: DNa/Pep switch
AlignSeq as = new AlignSeq(sequence,
- pdb.chains.elementAt(i).sequence,
- pdb.chains.elementAt(i).isNa ? AlignSeq.DNA : AlignSeq.PEP);
+ pdb.getChains().elementAt(i).sequence,
+ pdb.getChains().elementAt(i).isNa ? AlignSeq.DNA : AlignSeq.PEP);
as.calcScoreMatrix();
as.traceAlignment();
PrintStream ps = new PrintStream(System.out)
{
+ @Override
public void print(String x)
{
mappingDetails.append(x);
}
+ @Override
public void println()
{
mappingDetails.append("\n");
mappingDetails.append("\nSEQ start/end " + seqstart + " " + seqend);
}
- mainchain = pdb.chains.elementAt(maxchain);
+ mainchain = pdb.getChains().elementAt(maxchain);
mainchain.pdbstart = pdbstart;
mainchain.pdbend = pdbend;
addKeyListener(new KeyAdapter()
{
+ @Override
public void keyPressed(KeyEvent evt)
{
doKeyPressed(evt);
// Sort the bonds by z coord
visiblebonds = new Vector<Bond>();
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- if (pdb.chains.elementAt(ii).isVisible)
+ if (pdb.getChains().elementAt(ii).isVisible)
{
- Vector<Bond> tmp = pdb.chains.elementAt(ii).bonds;
+ Vector<Bond> tmp = pdb.getChains().elementAt(ii).bonds;
for (int i = 0; i < tmp.size(); i++)
{
min[1] = (float) 1e30;
min[2] = (float) 1e30;
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- if (pdb.chains.elementAt(ii).isVisible)
+ if (pdb.getChains().elementAt(ii).isVisible)
{
- Vector<Bond> bonds = pdb.chains.elementAt(ii).bonds;
+ Vector<Bond> bonds = pdb.getChains().elementAt(ii).bonds;
for (Bond tmp : bonds)
{
int bsize = 0;
// Find centre coordinate
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- if (pdb.chains.elementAt(ii).isVisible)
+ if (pdb.getChains().elementAt(ii).isVisible)
{
- Vector<Bond> bonds = pdb.chains.elementAt(ii).bonds;
+ Vector<Bond> bonds = pdb.getChains().elementAt(ii).bonds;
bsize += bonds.size();
centre[2] = ztot / (2 * (float) bsize);
}
+ @Override
public void paint(Graphics g)
{
PDBChain chain;
if (bysequence && pdb != null)
{
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- chain = pdb.chains.elementAt(ii);
+ chain = pdb.getChains().elementAt(ii);
for (int i = 0; i < chain.bonds.size(); i++)
{
}
}
+ @Override
public void mousePressed(MouseEvent e)
{
pdbAction = true;
repaint();
if (foundchain != -1)
{
- PDBChain chain = pdb.chains.elementAt(foundchain);
+ PDBChain chain = pdb.getChains().elementAt(foundchain);
if (chain == mainchain)
{
if (fatom.alignmentMapping != -1)
dragging = false;
}
+ @Override
public void mouseMoved(MouseEvent e)
{
pdbAction = true;
PDBChain chain = null;
if (foundchain != -1)
{
- chain = pdb.chains.elementAt(foundchain);
+ chain = pdb.getChains().elementAt(foundchain);
if (chain == mainchain)
{
mouseOverStructure(fatom.resNumber, chain.id);
}
}
+ @Override
public void mouseClicked(MouseEvent e)
{
}
+ @Override
public void mouseEntered(MouseEvent e)
{
}
+ @Override
public void mouseExited(MouseEvent e)
{
}
+ @Override
public void mouseDragged(MouseEvent evt)
{
int x = evt.getX();
}
// Alter the bonds
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
for (Bond tmpBond : chain.bonds)
{
repaint();
}
+ @Override
public void mouseReleased(MouseEvent evt)
{
dragging = false;
void drawLabels(Graphics g)
{
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
if (chain.isVisible)
{
foundchain = -1;
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- PDBChain chain = pdb.chains.elementAt(ii);
+ PDBChain chain = pdb.getChains().elementAt(ii);
int truex;
Bond tmpBond = null;
if (chain.isVisible)
{
- Vector<Bond> bonds = pdb.chains.elementAt(ii).bonds;
+ Vector<Bond> bonds = pdb.getChains().elementAt(ii).bonds;
for (int i = 0; i < bonds.size(); i++)
{
if (fatom != null) // )&& chain.ds != null)
{
- chain = pdb.chains.elementAt(foundchain);
+ chain = pdb.getChains().elementAt(foundchain);
}
}
return fatom;
}
+ @Override
public void update(Graphics g)
{
paint(g);
public void setAllchainsVisible(boolean b)
{
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- PDBChain chain = pdb.chains.elementAt(ii);
+ PDBChain chain = pdb.getChains().elementAt(ii);
chain.isVisible = b;
}
mainchain.isVisible = true;
// ////////////////////////////////
// /StructureListener
+ @Override
public String[] getPdbFile()
{
return new String[] { pdbentry.getFile() };
// return new Color(viewer.getAtomArgb(atomIndex));
}
+ @Override
public void updateColours(Object source)
{
colourBySequence();
import jalview.gui.AlignmentPanel;
import jalview.gui.FeatureRenderer;
import jalview.gui.SequenceRenderer;
+import jalview.io.StructureFile;
import jalview.structure.AtomSpec;
import jalview.structure.StructureListener;
import jalview.structure.StructureMapping;
int my = 0;
- public PDBfile pdb;
+ public StructureFile pdb;
PDBEntry pdbentry;
if (protocol.equals(jalview.io.AppletFormatAdapter.PASTE))
{
- pdbentry.setFile("INLINE" + pdb.id);
+ pdbentry.setFile("INLINE" + pdb.getId());
}
} catch (Exception ex)
errorMessage = "Error loading file: " + pdbentry.getId();
return;
}
- pdbentry.setId(pdb.id);
+ pdbentry.setId(pdb.getId());
ssm.addStructureViewerListener(this);
// JUST DEAL WITH ONE SEQUENCE FOR NOW
SequenceI sequence = seq[0];
- for (int i = 0; i < pdb.chains.size(); i++)
+ for (int i = 0; i < pdb.getChains().size(); i++)
{
mappingDetails.append("\n\nPDB Sequence is :\nSequence = "
- + pdb.chains.elementAt(i).sequence.getSequenceAsString());
+ + pdb.getChains().elementAt(i).sequence.getSequenceAsString());
mappingDetails.append("\nNo of residues = "
- + pdb.chains.elementAt(i).residues.size() + "\n\n");
+ + pdb.getChains().elementAt(i).residues.size() + "\n\n");
// Now lets compare the sequences to get
// the start and end points.
// Align the sequence to the pdb
AlignSeq as = new AlignSeq(sequence,
- pdb.chains.elementAt(i).sequence, "pep");
+ pdb.getChains().elementAt(i).sequence, "pep");
as.calcScoreMatrix();
as.traceAlignment();
PrintStream ps = new PrintStream(System.out)
{
+ @Override
public void print(String x)
{
mappingDetails.append(x);
}
+ @Override
public void println()
{
mappingDetails.append("\n");
mappingDetails.append("\nSEQ start/end " + seqstart + " " + seqend);
}
- mainchain = pdb.chains.elementAt(maxchain);
+ mainchain = pdb.getChains().elementAt(maxchain);
mainchain.pdbstart = pdbstart;
mainchain.pdbend = pdbend;
addKeyListener(new KeyAdapter()
{
+ @Override
public void keyPressed(KeyEvent evt)
{
keyPressed(evt);
// Sort the bonds by z coord
visiblebonds = new Vector<Bond>();
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
if (chain.isVisible)
{
min[1] = (float) 1e30;
min[2] = (float) 1e30;
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
if (chain.isVisible)
{
int bsize = 0;
// Find centre coordinate
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
if (chain.isVisible)
{
centre[2] = ztot / (2 * (float) bsize);
}
+ @Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
PDBChain chain;
if (bysequence && pdb != null)
{
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- chain = pdb.chains.elementAt(ii);
+ chain = pdb.getChains().elementAt(ii);
for (int i = 0; i < chain.bonds.size(); i++)
{
}
}
+ @Override
public void mousePressed(MouseEvent e)
{
pdbAction = true;
repaint();
if (foundchain != -1)
{
- PDBChain chain = pdb.chains.elementAt(foundchain);
+ PDBChain chain = pdb.getChains().elementAt(foundchain);
if (chain == mainchain)
{
if (fatom.alignmentMapping != -1)
dragging = false;
}
+ @Override
public void mouseMoved(MouseEvent e)
{
pdbAction = true;
PDBChain chain = null;
if (foundchain != -1)
{
- chain = pdb.chains.elementAt(foundchain);
+ chain = pdb.getChains().elementAt(foundchain);
if (chain == mainchain)
{
mouseOverStructure(fatom.resNumber, chain.id);
}
}
+ @Override
public void mouseClicked(MouseEvent e)
{
}
+ @Override
public void mouseEntered(MouseEvent e)
{
}
+ @Override
public void mouseExited(MouseEvent e)
{
}
+ @Override
public void mouseDragged(MouseEvent evt)
{
int x = evt.getX();
}
// Alter the bonds
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
for (Bond tmpBond : chain.bonds)
{
repaint();
}
+ @Override
public void mouseReleased(MouseEvent evt)
{
dragging = false;
void drawLabels(Graphics g)
{
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
if (chain.isVisible)
{
foundchain = -1;
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- PDBChain chain = pdb.chains.elementAt(ii);
+ PDBChain chain = pdb.getChains().elementAt(ii);
int truex;
Bond tmpBond = null;
if (fatom != null) // )&& chain.ds != null)
{ // dead code? value of chain is either overwritten or discarded
- chain = pdb.chains.elementAt(foundchain);
+ chain = pdb.getChains().elementAt(foundchain);
}
}
public void setAllchainsVisible(boolean b)
{
- for (int ii = 0; ii < pdb.chains.size(); ii++)
+ for (int ii = 0; ii < pdb.getChains().size(); ii++)
{
- PDBChain chain = pdb.chains.elementAt(ii);
+ PDBChain chain = pdb.getChains().elementAt(ii);
chain.isVisible = b;
}
mainchain.isVisible = true;
// ////////////////////////////////
// /StructureListener
+ @Override
public String[] getPdbFile()
{
return new String[] { pdbentry.getFile() };
// return new Color(viewer.getAtomArgb(atomIndex));
}
+ @Override
public void updateColours(Object source)
{
colourBySequence();
import jalview.schemes.ColourSchemeI;
import jalview.schemes.ResidueProperties;
import jalview.structure.StructureMapping;
+import jalview.structure.StructureViewSettings;
import java.awt.Color;
import java.util.List;
if (as.astr1.charAt(i) == as.astr2.charAt(i))
{
+ if (pdbpos >= residues.size())
+ {
+ continue;
+ }
Residue res = residues.elementAt(pdbpos);
for (Atom atom : res.atoms)
{
status = PDBChain.IEASTATUS;
}
SequenceFeature[] features = sequence.getSequenceFeatures();
+ if (features == null)
+ {
+ return null;
+ }
for (int i = 0; i < features.length; i++)
{
if (features[i].getFeatureGroup().equals(pdbid))
// Add inserted residues as features to the base residue
Atom currAtom = resAtoms.get(0);
if (currAtom.insCode != ' '
+ && !residues.isEmpty()
&& residues.lastElement().atoms.get(0).resNumber == currAtom.resNumber)
{
SequenceFeature sf = new SequenceFeature("INSERTION",
else
{
+ // boolean baseDetected = false;
+ // for (Atom resAtom : resAtoms)
+ // {
+ // if (resAtom.insCode == ' ')
+ // {
+ // baseDetected = true;
+ // }
+ // }
+ // if (!baseDetected)
+ // {
+ // continue;
+ // }
// Make a new Residue object with the new atoms vector
residues.addElement(new Residue(resAtoms, resNumber - 1, count));
Residue tmpres = residues.lastElement();
Atom tmpat = tmpres.atoms.get(0);
// Make A new SequenceFeature for the current residue numbering
- SequenceFeature sf = new SequenceFeature("RES NUM", tmpat.resName
+ SequenceFeature sf = new SequenceFeature("RESNUM", tmpat.resName
+ ":" + tmpat.resNumIns + " " + pdbid + id, "", offset
+ count, offset + count, pdbid);
// MCview.PDBChain.PDBFILEFEATURE);
resFeatures.addElement(sf);
resAnnotation.addElement(new Annotation(tmpat.tfactor));
// Keep totting up the sequence
+
if ((symbol = ResidueProperties.getAA3Hash().get(tmpat.resName)) == null)
{
String nucname = tmpat.resName.trim();
|| ResidueProperties.nucleotideIndex[nucname
.charAt((deoxyn ? 1 : 0))] == -1)
{
- seq.append("X");
- // System.err.println("PDBReader:Null aa3Hash for " +
- // tmpat.resName);
+ char r = ResidueProperties
+ .getSingleCharacterCode(ResidueProperties
+ .getCanonicalAminoAcid(tmpat.resName));
+ seq.append(r == '0' ? 'X' : r);
+ // System.err.println("PDBReader:Null aa3Hash for " +
+ // tmpat.resName);
}
else
{
// System.out.println("PDB Sequence is :\nSequence = " + seq);
// System.out.println("No of residues = " + residues.size());
+
+ if (StructureViewSettings.isShowSeqFeatures())
+ {
for (i = 0, iSize = resFeatures.size(); i < iSize; i++)
{
sequence.addSequenceFeature(resFeatures.elementAt(i));
resFeatures.setElementAt(null, i);
}
+ }
if (visibleChainAnnotation)
{
Annotation[] annots = new Annotation[resAnnotation.size()];
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
-import javax.swing.SwingUtilities;
public class PDBViewer extends JInternalFrame implements Runnable
{
{
EBIFetchClient ebi = new EBIFetchClient();
String query = "pdb:" + pdbentry.getId();
- pdbentry.setFile(ebi.fetchDataAsFile(query, "default", "raw")
+ pdbentry.setFile(ebi.fetchDataAsFile(query, "default", "raw", ".xml")
.getAbsolutePath());
if (pdbentry.getFile() != null)
@Override
public void mousePressed(MouseEvent evt)
{
- if (evt.isControlDown()
- || SwingUtilities.isRightMouseButton(evt))
+ if (evt.isPopupTrigger())
{
radioItem.removeActionListener(radioItem.getActionListeners()[0]);
*/
package MCview;
-import jalview.analysis.AlignSeq;
-import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
-import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
import jalview.io.FileParse;
+import jalview.io.StructureFile;
import jalview.util.MessageManager;
-import java.awt.Color;
import java.io.IOException;
-import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;
-public class PDBfile extends jalview.io.AlignFile
+public class PDBfile extends StructureFile
{
private static String CALC_ID_PREFIX = "JalviewPDB";
- public Vector<PDBChain> chains;
-
- public String id;
-
- /**
- * set to true to add derived sequence annotations (temp factor read from
- * file, or computed secondary structure) to the alignment
- */
- private boolean visibleChainAnnotation = false;
-
- /*
- * Set true to predict secondary structure (using JMol for protein, Annotate3D
- * for RNA)
- */
- private boolean predictSecondaryStructure = true;
-
- /*
- * Set true (with predictSecondaryStructure=true) to predict secondary
- * structure using an external service (currently Annotate3D for RNA only)
- */
- private boolean externalSecondaryStructure = false;
-
public PDBfile(boolean addAlignmentAnnotations,
boolean predictSecondaryStructure, boolean externalSecStr)
{
super();
- this.visibleChainAnnotation = addAlignmentAnnotations;
- this.predictSecondaryStructure = predictSecondaryStructure;
- this.externalSecondaryStructure = externalSecStr;
+ addSettings(addAlignmentAnnotations, predictSecondaryStructure,
+ externalSecStr);
}
- public PDBfile(boolean addAlignmentAnnotations,
- boolean predictSecondaryStructure, boolean externalSecStr,
- String file, String protocol) throws IOException
+ public PDBfile(boolean addAlignmentAnnotations, boolean predictSecStr,
+ boolean externalSecStr, String file, String protocol)
+ throws IOException
{
super(false, file, protocol);
- this.visibleChainAnnotation = addAlignmentAnnotations;
- this.predictSecondaryStructure = predictSecondaryStructure;
- this.externalSecondaryStructure = externalSecStr;
+ addSettings(addAlignmentAnnotations, predictSecStr, externalSecStr);
doParse();
}
- public PDBfile(boolean addAlignmentAnnotations,
- boolean predictSecondaryStructure, boolean externalSecStr,
+ public PDBfile(boolean addAlignmentAnnotations, boolean predictSecStr,
+ boolean externalSecStr,
FileParse source) throws IOException
{
super(false, source);
- this.visibleChainAnnotation = addAlignmentAnnotations;
- this.predictSecondaryStructure = predictSecondaryStructure;
- this.externalSecondaryStructure = externalSecStr;
+ addSettings(addAlignmentAnnotations, predictSecStr, externalSecStr);
doParse();
}
@Override
public void parse() throws IOException
{
+ setDbRefType(DBRefSource.PDB);
// TODO set the filename sensibly - try using data source name.
- id = safeName(getDataName());
+ setId(safeName(getDataName()));
- chains = new Vector<PDBChain>();
+ setChains(new Vector<PDBChain>());
List<SequenceI> rna = new ArrayList<SequenceI>();
List<SequenceI> prot = new ArrayList<SequenceI>();
PDBChain tmpchain;
}
if (tid.length() > 0)
{
- id = tid;
+ setId(tid);
}
continue;
}
}
Atom tmpatom = new Atom(line);
- tmpchain = findChain(tmpatom.chain);
- if (tmpchain != null)
+ try
{
+ tmpchain = findChain(tmpatom.chain);
if (tmpatom.resNumIns.trim().equals(lastID))
{
// phosphorylated protein - seen both CA and P..
continue;
}
tmpchain.atoms.addElement(tmpatom);
- }
- else
+ } catch (Exception e)
{
- tmpchain = new PDBChain(id, tmpatom.chain);
- chains.addElement(tmpchain);
+ tmpchain = new PDBChain(getId(), tmpatom.chain);
+ getChains().add(tmpchain);
tmpchain.atoms.addElement(tmpatom);
}
lastID = tmpatom.resNumIns.trim();
makeResidueList();
makeCaBondList();
- if (id == null)
+ if (getId() == null)
{
- id = inFile.getName();
+ setId(inFile.getName());
}
- for (PDBChain chain : chains)
+ for (PDBChain chain : getChains())
{
SequenceI chainseq = postProcessChain(chain);
if (isRNA(chainseq))
}
if (predictSecondaryStructure)
{
- predictSecondaryStructure(rna, prot);
+ addSecondaryStructure(rna, prot);
}
} catch (OutOfMemoryError er)
{
markCalcIds();
}
- /**
- * Predict secondary structure for RNA and/or protein sequences and add as
- * annotations
- *
- * @param rnaSequences
- * @param proteinSequences
- */
- protected void predictSecondaryStructure(List<SequenceI> rnaSequences,
- List<SequenceI> proteinSequences)
- {
- /*
- * Currently using Annotate3D for RNA, but only if the 'use external
- * prediction' flag is set
- */
- if (externalSecondaryStructure && rnaSequences.size() > 0)
- {
- try
- {
- processPdbFileWithAnnotate3d(rnaSequences);
- } catch (Exception x)
- {
- System.err.println("Exceptions when dealing with RNA in pdb file");
- x.printStackTrace();
-
- }
- }
- /*
- * Currently using JMol PDB parser for peptide
- */
- if (proteinSequences.size() > 0)
- {
- try
- {
- processPdbFileWithJmol(proteinSequences);
- } catch (Exception x)
- {
- System.err
- .println("Exceptions from Jmol when processing data in pdb file");
- x.printStackTrace();
- }
- }
- }
/**
* Process a parsed chain to construct and return a Sequence, and add it to
* @param chain
* @return
*/
- protected SequenceI postProcessChain(PDBChain chain)
- {
- SequenceI pdbSequence = chain.sequence;
- pdbSequence.setName(id + "|" + pdbSequence.getName());
- PDBEntry entry = new PDBEntry();
- entry.setId(id);
- entry.setType(PDBEntry.Type.PDB);
- entry.setProperty(new Hashtable());
- if (chain.id != null)
- {
- // entry.getProperty().put("CHAIN", chains.elementAt(i).id);
- entry.setChainCode(String.valueOf(chain.id));
- }
- if (inFile != null)
- {
- entry.setFile(inFile.getAbsolutePath());
- }
- else
- {
- // TODO: decide if we should dump the datasource to disk
- entry.setFile(getDataName());
- }
- pdbSequence.addPDBId(entry);
-
- DBRefEntry sourceDBRef = new DBRefEntry();
- sourceDBRef.setAccessionId(id);
- sourceDBRef.setSource(DBRefSource.PDB);
- sourceDBRef.setStartRes(pdbSequence.getStart());
- sourceDBRef.setEndRes(pdbSequence.getEnd());
- pdbSequence.setSourceDBRef(sourceDBRef);
- // PDBChain objects maintain reference to dataset
- SequenceI chainseq = pdbSequence.deriveSequence();
- seqs.addElement(chainseq);
-
- AlignmentAnnotation[] chainannot = chainseq.getAnnotation();
-
- if (chainannot != null && visibleChainAnnotation)
- {
- for (int ai = 0; ai < chainannot.length; ai++)
- {
- chainannot[ai].visible = visibleChainAnnotation;
- annotations.addElement(chainannot[ai]);
- }
- }
- return chainseq;
- }
public static boolean isCalcIdHandled(String calcId)
{
oldId = "";
}
aa.setCalcId(CALC_ID_PREFIX);
- aa.setProperty("PDBID", id);
+ aa.setProperty("PDBID", getId());
aa.setProperty("oldCalcId", oldId);
}
}
}
}
- private void processPdbFileWithJmol(List<SequenceI> prot)
- throws Exception
- {
- try
- {
- Class cl = Class.forName("jalview.ext.jmol.PDBFileWithJmol");
- if (cl != null)
- {
- final Constructor constructor = cl
- .getConstructor(new Class[] { FileParse.class });
- final Object[] args = new Object[] { new FileParse(getDataName(),
- type) };
- Object jmf = constructor.newInstance(args);
- AlignmentI al = new Alignment((SequenceI[]) cl.getMethod(
- "getSeqsAsArray", new Class[] {}).invoke(jmf));
- cl.getMethod("addAnnotations", new Class[] { AlignmentI.class })
- .invoke(jmf, al);
- for (SequenceI sq : al.getSequences())
- {
- if (sq.getDatasetSequence() != null)
- {
- sq.getDatasetSequence().getAllPDBEntries().clear();
- }
- else
- {
- sq.getAllPDBEntries().clear();
- }
- }
- replaceAndUpdateChains(prot, al, AlignSeq.PEP, false);
- }
- } catch (ClassNotFoundException q)
- {
- }
- }
-
- private void replaceAndUpdateChains(List<SequenceI> prot, AlignmentI al,
- String pep, boolean b)
- {
- List<List<? extends Object>> replaced = AlignSeq
- .replaceMatchingSeqsWith(seqs, annotations, prot, al, pep,
- false);
- for (PDBChain ch : chains)
- {
- int p = 0;
- for (SequenceI sq : (List<SequenceI>) replaced.get(0))
- {
- p++;
- if (sq == ch.sequence || sq.getDatasetSequence() == ch.sequence)
- {
- p = -p;
- break;
- }
- }
- if (p < 0)
- {
- p = -p - 1;
- // set shadow entry for chains
- ch.shadow = (SequenceI) replaced.get(1).get(p);
- ch.shadowMap = ((AlignSeq) replaced.get(2).get(p))
- .getMappingFromS1(false);
- }
- }
- }
-
- private void processPdbFileWithAnnotate3d(List<SequenceI> rna)
- throws Exception
- {
- // System.out.println("this is a PDB format and RNA sequence");
- // note: we use reflection here so that the applet can compile and run
- // without the HTTPClient bits and pieces needed for accessing Annotate3D
- // web service
- try
- {
- Class cl = Class.forName("jalview.ws.jws1.Annotate3D");
- if (cl != null)
- {
- // TODO: use the PDB ID of the structure if one is available, to save
- // bandwidth and avoid uploading the whole structure to the service
- Object annotate3d = cl.getConstructor(new Class[] {}).newInstance(
- new Object[] {});
- AlignmentI al = ((AlignmentI) cl.getMethod("getRNAMLFor",
- new Class[] { FileParse.class }).invoke(annotate3d,
- new Object[] { new FileParse(getDataName(), type) }));
- for (SequenceI sq : al.getSequences())
- {
- if (sq.getDatasetSequence() != null)
- {
- if (sq.getDatasetSequence().getAllPDBEntries() != null)
- {
- sq.getDatasetSequence().getAllPDBEntries().clear();
- }
- }
- else
- {
- if (sq.getAllPDBEntries() != null)
- {
- sq.getAllPDBEntries().clear();
- }
- }
- }
- replaceAndUpdateChains(rna, al, AlignSeq.DNA, false);
- }
- } catch (ClassNotFoundException x)
- {
- // ignore classnotfounds - occurs in applet
- }
- ;
- }
-
- /**
- * make a friendly ID string.
- *
- * @param dataName
- * @return truncated dataName to after last '/'
- */
- private String safeName(String dataName)
- {
- int p = 0;
- while ((p = dataName.indexOf("/")) > -1 && p < dataName.length())
- {
- dataName = dataName.substring(p + 1);
- }
- return dataName;
- }
-
- public void makeResidueList()
- {
- for (int i = 0; i < chains.size(); i++)
- {
- chains.elementAt(i).makeResidueList(visibleChainAnnotation);
- }
- }
-
- public void makeCaBondList()
- {
- for (int i = 0; i < chains.size(); i++)
- {
- chains.elementAt(i).makeCaBondList();
- }
- }
-
- public PDBChain findChain(String id)
- {
- for (int i = 0; i < chains.size(); i++)
- {
- if (chains.elementAt(i).id.equals(id))
- {
- return chains.elementAt(i);
- }
- }
-
- return null;
- }
-
- public void setChargeColours()
- {
- for (int i = 0; i < chains.size(); i++)
- {
- chains.elementAt(i).setChargeColours();
- }
- }
-
- public void setColours(jalview.schemes.ColourSchemeI cs)
- {
- for (int i = 0; i < chains.size(); i++)
- {
- chains.elementAt(i).setChainColours(cs);
- }
- }
-
- public void setChainColours()
- {
- for (int i = 0; i < chains.size(); i++)
- {
- // divide by zero --> infinity --> 255 ;-)
- chains.elementAt(i).setChainColours(
- Color.getHSBColor(1.0f / i, .4f, 1.0f));
- }
- }
-
- public static boolean isRNA(SequenceI seq)
- {
- for (char c : seq.getSequence())
- {
- if ((c != 'A') && (c != 'C') && (c != 'G') && (c != 'U'))
- {
- return false;
- }
- }
-
- return true;
-
- }
}
return null;
}
+
+ public Vector<Atom> getAtoms()
+ {
+ return this.atoms;
+ }
}
*/
// invoked by openModel in ChimeraManager
// line: #1, chain A: hiv-1 protease
+ // line: Model 0 (filename)
public static int[] parseOpenedModelNumber(String inputLine)
{
int hash = inputLine.indexOf('#');
- int space = inputLine.indexOf(',', hash);
+ int space = -1;
+ if (hash == (-1))
+ {
+ hash = inputLine.indexOf("Model");
+ if (hash >= 0)
+ {
+ hash = hash + 5;
+ }
+ space = inputLine.indexOf(' ', hash + 1);
+ }
+ else
+ {
+ space = inputLine.indexOf(',', hash);
+ }
+
int decimal = inputLine.substring(hash + 1, space).indexOf('.');
// model number is between hash+1 and space
int modelNumber = -1;
{
int start = inputLine.indexOf("name ");
if (start < 0)
+ {
return null;
+ }
// Might get a quoted string (don't understand why, but there you have it)
if (inputLine.startsWith("\"", start + 5))
{
return inputLine.substring(start, end);
}
else
+ {
return inputLine.substring(start);
+ }
}
else
{
{
String[] subSplit = split[0].substring(1).split("\\.");
if (subSplit.length > 0)
+ {
model = Integer.parseInt(subSplit[0]);
+ }
else
+ {
model = Integer.parseInt(split[0].substring(1));
+ }
if (subSplit.length > 1)
+ {
submodel = Integer.parseInt(subSplit[1]);
+ }
} catch (Exception e)
{
// ignore
{
if (atom.equals("C") || atom.equals("CA") || atom.equals("N")
|| atom.equals("O") || atom.equals("H"))
+ {
return true;
+ }
return false;
}
}
else
{
+ // length > 1, so we probably have a file name with "." in it
logger.info("Could not parse model identifier: " + modelID);
+ resKeyParts[0] = modelID;
}
}
}
// }
// System.out.println("model = " + model + " chain = " + chain +
- // " residue = " +
- // residue);
+ // " residue = " + residue);
if (model != null)
{
List<ChimeraModel> models = chimeraManager.getChimeraModels(model,
}
if (chimeraResidue != null)
+ {
return chimeraResidue;
+ }
if (chimeraChain != null)
+ {
return chimeraChain;
+ }
if (chimeraModel != null)
+ {
return chimeraModel;
+ }
} catch (Exception ex)
{
}
if (chimeraResidue != null)
+ {
return chimeraResidue;
+ }
if (chimeraChain != null)
+ {
return chimeraChain;
+ }
if (chimeraModel != null)
+ {
return chimeraModel;
+ }
} catch (Exception ex)
{
public static String findStructures(String residueList)
{
if (residueList == null)
+ {
return null;
+ }
String[] residues = residueList.split(",");
Map<String, String> structureNameMap = new HashMap<String, String>();
for (int i = 0; i < residues.length; i++)
}
}
if (structureNameMap.isEmpty())
+ {
return null;
+ }
String structure = null;
for (String struct : structureNameMap.keySet())
{
if (structure == null)
+ {
structure = new String();
+ }
else
+ {
structure = structure.concat(",");
+ }
structure = structure.concat(struct);
}
return structure;
{
resRange = resRange.concat("-");
if (chain != null && range[res].indexOf('.') == -1)
+ {
range[res] = range[res].concat("." + chain);
+ }
}
if (res == 0 && range.length >= 2 && range[res].indexOf('.') > 0)
public static String toFullName(String aaType)
{
if (!aaNames.containsKey(aaType))
+ {
return aaType;
- String[] ids = ((String) aaNames.get(aaType)).split(" ");
+ }
+ String[] ids = aaNames.get(aaType).split(" ");
return ids[2].replace('_', ' ');
}
public static String toSingleLetter(String aaType)
{
if (!aaNames.containsKey(aaType))
+ {
return aaType;
- String[] ids = ((String) aaNames.get(aaType)).split(" ");
+ }
+ String[] ids = aaNames.get(aaType).split(" ");
return ids[0];
}
public static String toThreeLetter(String aaType)
{
if (!aaNames.containsKey(aaType))
+ {
return aaType;
- String[] ids = ((String) aaNames.get(aaType)).split(" ");
+ }
+ String[] ids = aaNames.get(aaType).split(" ");
return ids[1];
}
public static String toSMILES(String aaType)
{
if (!aaNames.containsKey(aaType))
+ {
return null;
- String[] ids = ((String) aaNames.get(aaType)).split(" ");
+ }
+ String[] ids = aaNames.get(aaType).split(" ");
if (ids.length < 4)
+ {
return null;
+ }
return ids[3];
}
{
logger.info("chimera open " + modelPath);
// stopListening();
+ List<ChimeraModel> modelList = getModelList();
List<String> response = null;
// TODO: [Optional] Handle modbase models
if (type == ModelType.MODBASE_MODEL)
logger.warn("Could not open " + modelPath);
return null;
}
- List<ChimeraModel> models = new ArrayList<ChimeraModel>();
- int[] modelNumbers = null;
- if (type == ModelType.PDB_MODEL)
- {
- for (String line : response)
- {
- if (line.startsWith("#"))
- {
- modelNumbers = ChimUtils.parseOpenedModelNumber(line);
- if (modelNumbers != null)
- {
- int modelNumber = ChimUtils.makeModelKey(modelNumbers[0],
- modelNumbers[1]);
- if (currentModelsMap.containsKey(modelNumber))
- {
- continue;
- }
- ChimeraModel newModel = new ChimeraModel(modelName, type,
- modelNumbers[0], modelNumbers[1]);
- currentModelsMap.put(modelNumber, newModel);
- models.add(newModel);
-
- //
- // patch for Jalview - set model name in Chimera
- // TODO: find a variant that works for sub-models
- sendChimeraCommand("setattr M name " + modelName + " #"
- + modelNumbers[0], false);
- // end patch for Jalview
-
- modelNumbers = null;
- }
- }
- }
- }
- else
+
+ List<ChimeraModel> newModelList = getModelList();
+ for (ChimeraModel newModel : newModelList)
{
- // TODO: [Optional] Open smiles from file would fail. Do we need it?
- // If parsing fails, iterate over all open models to get the right one
- List<ChimeraModel> openModels = getModelList();
- for (ChimeraModel openModel : openModels)
+ if (!modelList.contains(newModel))
{
- String openModelName = openModel.getModelName();
- if (openModelName.endsWith("..."))
- {
- openModelName = openModelName.substring(0,
- openModelName.length() - 3);
- }
- if (modelPath.startsWith(openModelName))
- {
- openModel.setModelName(modelPath);
- int modelNumber = ChimUtils
- .makeModelKey(openModel.getModelNumber(),
- openModel.getSubModelNumber());
- if (!currentModelsMap.containsKey(modelNumber))
- {
- currentModelsMap.put(modelNumber, openModel);
- models.add(openModel);
- }
- }
+ newModel.setModelName(modelName);
+ sendChimeraCommand(
+ "setattr M name " + modelName + " #"
+ + newModel.getModelNumber(), false);
+ modelList.add(newModel);
+
}
}
// assign color and residues to open models
- for (ChimeraModel newModel : models)
+ for (ChimeraModel chimeraModel : modelList)
{
+ // // patch for Jalview - set model name in Chimera
+ // // TODO: find a variant that works for sub-models
// get model color
- Color modelColor = getModelColor(newModel);
+ Color modelColor = getModelColor(chimeraModel);
if (modelColor != null)
{
- newModel.setModelColor(modelColor);
+ chimeraModel.setModelColor(modelColor);
}
// Get our properties (default color scheme, etc.)
// Create the information we need for the navigator
if (type != ModelType.SMILES)
{
- addResidues(newModel);
+ addResidues(chimeraModel);
}
}
sendChimeraCommand("focus", false);
// startListening(); // see ChimeraListener
- return models;
+ return modelList;
}
/**
*
* @return ChimeraModel
*/
+ @Override
public ChimeraModel getChimeraModel()
{
return this;
*
* @return user data
*/
+ @Override
public Object getUserData()
{
return userData;
* @param data
* user data to associate with this model
*/
+ @Override
public void setUserData(Object data)
{
this.userData = data;
*
* @return the selected state
*/
+ @Override
public boolean isSelected()
{
return selected;
* @param selected
* a boolean to set the selected state to
*/
+ @Override
public void setSelected(boolean selected)
{
this.selected = selected;
*
* @return the chains in this model as a list
*/
+ @Override
public List<ChimeraStructuralObject> getChildren()
{
return new ArrayList<ChimeraStructuralObject>(chainMap.values());
/**
* Checks if this model has selected children.
*/
+ @Override
public boolean hasSelectedChildren()
{
if (selected)
/**
* Return the Chimera specification for this model.
*/
+ @Override
public String toSpec()
{
if (subModelNumber == 0)
+ {
return ("#" + modelNumber);
+ }
return ("#" + modelNumber + "." + subModelNumber);
}
* Return a string representation for the model. Shorten if longer than 100
* characters.
*/
+ @Override
public String toString()
{
String modelName = "";
}
return nodeName;
}
+
+ @Override
+ public boolean equals(Object otherChimeraModel)
+ {
+ if (!(otherChimeraModel instanceof ChimeraModel))
+ {
+ return false;
+ }
+ ChimeraModel otherCM = ((ChimeraModel) otherChimeraModel);
+ return this.name.equals(otherCM.name)
+ && this.modelNumber == otherCM.modelNumber
+ && this.type == otherCM.type;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hashCode = 1;
+ hashCode = hashCode * 37 + this.name.hashCode();
+ hashCode = hashCode * 37 + this.type.hashCode();
+ hashCode = (hashCode * 37) + modelNumber;
+ return hashCode;
+ }
}
import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;
-import java.util.Set;
/**
* Takes in a vector or array of sequences and column start and column end and
Hashtable[] hconsensus)
{
final char gapCharacter = alignment.getGapCharacter();
- Set<AlignedCodonFrame> mappings = alignment.getCodonFrames();
+ List<AlignedCodonFrame> mappings = alignment.getCodonFrames();
if (mappings == null || mappings.isEmpty())
{
return;
{
continue;
}
- char[] codon = MappingUtils.findCodonFor(seq, col, mappings);
- int codonEncoded = CodingUtils.encodeCodon(codon);
- if (codonEncoded >= 0)
+ List<char[]> codons = MappingUtils
+ .findCodonsFor(seq, col, mappings);
+ for (char[] codon : codons)
{
- codonCounts[codonEncoded + 2]++;
- ungappedCount++;
+ int codonEncoded = CodingUtils.encodeCodon(codon);
+ if (codonEncoded >= 0)
+ {
+ codonCounts[codonEncoded + 2]++;
+ ungappedCount++;
+ }
}
}
codonCounts[1] = ungappedCount;
import jalview.util.QuickSort;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
/**
int start, int stop, AlignmentI alignment, String method)
{
sortByFeature(featureLabel == null ? null
- : new String[] { featureLabel }, groupLabel == null ? null
- : new String[] { groupLabel }, start, stop, alignment, method);
+ : Arrays.asList(new String[] { featureLabel }),
+ groupLabel == null ? null
+ : Arrays.asList(new String[]{ groupLabel }), start, stop, alignment, method);
}
private static boolean containsIgnoreCase(final String lab,
- final String[] labs)
+ final List<String> labs)
{
if (labs == null)
{
{
return false;
}
- for (int q = 0; q < labs.length; q++)
+ for (String label : labs)
{
- if (labs[q] != null && lab.equalsIgnoreCase(labs[q]))
+ if (lab.equalsIgnoreCase(label))
{
return true;
}
return false;
}
- public static void sortByFeature(String[] featureLabels,
- String[] groupLabels, int start, int stop, AlignmentI alignment,
+ public static void sortByFeature(List<String> featureLabels,
+ List<String> groupLabels, int start, int stop, AlignmentI alignment,
String method)
{
if (method != FEATURE_SCORE && method != FEATURE_LABEL
scoreLabel.append(start + stop + method);
// This doesn't quite work yet - we'd like to have a canonical ordering that
// can be preserved from call to call
- for (int i = 0; featureLabels != null && i < featureLabels.length; i++)
+ if (featureLabels != null)
{
- scoreLabel.append(featureLabels[i] == null ? "null"
- : featureLabels[i]);
+ for (String label : featureLabels)
+ {
+ scoreLabel.append(label);
+ }
}
- for (int i = 0; groupLabels != null && i < groupLabels.length; i++)
+ if (groupLabels != null)
{
- scoreLabel.append(groupLabels[i] == null ? "null" : groupLabels[i]);
+ for (String label : groupLabels)
+ {
+ scoreLabel.append(label);
+ }
}
/*
*/
package jalview.analysis;
+import static jalview.io.gff.GffConstants.CLINICAL_SIGNIFICANCE;
+
import jalview.datamodel.AlignedCodon;
import jalview.datamodel.AlignedCodonFrame;
import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.DBRefSource;
-import jalview.datamodel.FeatureProperties;
+import jalview.datamodel.IncompleteCodonException;
import jalview.datamodel.Mapping;
-import jalview.datamodel.SearchResults;
import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyI;
import jalview.schemes.ResidueProperties;
-import jalview.util.DBRefUtils;
+import jalview.util.Comparison;
import jalview.util.MapList;
import jalview.util.MappingUtils;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.NoSuchElementException;
import java.util.Set;
import java.util.TreeMap;
public class AlignmentUtils
{
+ private static final String SEQUENCE_VARIANT = "sequence_variant:";
+ private static final String ID = "ID";
+
+ /**
+ * A data model to hold the 'normal' base value at a position, and an optional
+ * sequence variant feature
+ */
+ static class DnaVariant
+ {
+ String base;
+
+ SequenceFeature variant;
+
+ DnaVariant(String nuc)
+ {
+ base = nuc;
+ }
+
+ DnaVariant(String nuc, SequenceFeature var)
+ {
+ base = nuc;
+ variant = var;
+ }
+ }
+
/**
* given an existing alignment, create a new alignment including all, or up to
* flankSize additional symbols from each sequence's dataset sequence
}
else
{
- MapList map = mapProteinSequenceToCdna(aaSeq, cdnaSeq);
+ MapList map = mapCdnaToProtein(aaSeq, cdnaSeq);
if (map != null)
{
acf.addMap(cdnaSeq, aaSeq, map);
* Answers true if the mappings include one between the given (dataset)
* sequences.
*/
- public static boolean mappingExists(Set<AlignedCodonFrame> set,
+ public static boolean mappingExists(List<AlignedCodonFrame> mappings,
SequenceI aaSeq, SequenceI cdnaSeq)
{
- if (set != null)
+ if (mappings != null)
{
- for (AlignedCodonFrame acf : set)
+ for (AlignedCodonFrame acf : mappings)
{
if (cdnaSeq == acf.getDnaForAaSeq(aaSeq))
{
}
/**
- * Build a mapping (if possible) of a protein to a cDNA sequence. The cDNA
- * must be three times the length of the protein, possibly after ignoring
- * start and/or stop codons, and must translate to the protein. Returns null
- * if no mapping is determined.
+ * Builds a mapping (if possible) of a cDNA to a protein sequence.
+ * <ul>
+ * <li>first checks if the cdna translates exactly to the protein sequence</li>
+ * <li>else checks for translation after removing a STOP codon</li>
+ * <li>else checks for translation after removing a START codon</li>
+ * <li>if that fails, inspect CDS features on the cDNA sequence</li>
+ * </ul>
+ * Returns null if no mapping is determined.
*
- * @param proteinSeqs
+ * @param proteinSeq
+ * the aligned protein sequence
* @param cdnaSeq
+ * the aligned cdna sequence
* @return
*/
- public static MapList mapProteinSequenceToCdna(SequenceI proteinSeq,
+ public static MapList mapCdnaToProtein(SequenceI proteinSeq,
SequenceI cdnaSeq)
{
/*
final int proteinEnd = proteinSeq.getEnd();
/*
- * If lengths don't match, try ignoring stop codon.
+ * If lengths don't match, try ignoring stop codon (if present)
*/
if (cdnaLength != mappedLength && cdnaLength > 2)
{
cdnaLength -= 3;
}
- if (cdnaLength != mappedLength)
- {
- return null;
- }
- if (!translatesAs(cdnaSeqChars, startOffset, aaSeqChars))
+ if (translatesAs(cdnaSeqChars, startOffset, aaSeqChars))
{
- return null;
+ /*
+ * protein is translation of dna (+/- start/stop codons)
+ */
+ MapList map = new MapList(new int[] { cdnaStart, cdnaEnd }, new int[]
+ { proteinStart, proteinEnd }, 3, 1);
+ return map;
}
- MapList map = new MapList(new int[] { cdnaStart, cdnaEnd }, new int[] {
- proteinStart, proteinEnd }, 3, 1);
- return map;
+
+ /*
+ * translation failed - try mapping CDS annotated regions of dna
+ */
+ return mapCdsToProtein(cdnaSeq, proteinSeq);
}
/**
return false;
}
- int aaResidue = 0;
- for (int i = cdnaStart; i < cdnaSeqChars.length - 2
- && aaResidue < aaSeqChars.length; i += 3, aaResidue++)
+ int aaPos = 0;
+ int dnaPos = cdnaStart;
+ for (; dnaPos < cdnaSeqChars.length - 2
+ && aaPos < aaSeqChars.length; dnaPos += 3, aaPos++)
{
- String codon = String.valueOf(cdnaSeqChars, i, 3);
+ String codon = String.valueOf(cdnaSeqChars, dnaPos, 3);
final String translated = ResidueProperties.codonTranslate(codon);
+
/*
* allow * in protein to match untranslatable in dna
*/
- final char aaRes = aaSeqChars[aaResidue];
+ final char aaRes = aaSeqChars[aaPos];
if ((translated == null || "STOP".equals(translated)) && aaRes == '*')
{
continue;
return false;
}
}
- // fail if we didn't match all of the aa sequence
- return (aaResidue == aaSeqChars.length);
+
+ /*
+ * check we matched all of the protein sequence
+ */
+ if (aaPos != aaSeqChars.length)
+ {
+ return false;
+ }
+
+ /*
+ * check we matched all of the dna except
+ * for optional trailing STOP codon
+ */
+ if (dnaPos == cdnaSeqChars.length)
+ {
+ return true;
+ }
+ if (dnaPos == cdnaSeqChars.length - 3)
+ {
+ String codon = String.valueOf(cdnaSeqChars, dnaPos, 3);
+ if ("STOP".equals(ResidueProperties.codonTranslate(codon)))
+ {
+ return true;
+ }
+ }
+ return false;
}
/**
/*
* Locate the aligned source sequence whose dataset sequence is mapped. We
- * just take the first match here (as we can't align cDNA like more than one
- * protein sequence).
+ * just take the first match here (as we can't align like more than one
+ * sequence).
*/
SequenceI alignFrom = null;
AlignedCodonFrame mapping = null;
for (AlignedCodonFrame mp : mappings)
{
- alignFrom = mp.findAlignedSequence(seq.getDatasetSequence(), al);
+ alignFrom = mp.findAlignedSequence(seq, al);
if (alignFrom != null)
{
mapping = mp;
/**
* Align sequence 'alignTo' the same way as 'alignFrom', using the mapping to
* match residues and codons. Flags control whether existing gaps in unmapped
- * (intron) and mapped (exon) regions are preserved or not. Gaps linking intro
- * and exon are only retained if both flags are set.
+ * (intron) and mapped (exon) regions are preserved or not. Gaps between
+ * intron and exon are only retained if both flags are set.
*
* @param alignTo
* @param alignFrom
boolean preserveUnmappedGaps)
{
// TODO generalise to work for Protein-Protein, dna-dna, dna-protein
- final char[] thisSeq = alignTo.getSequence();
- final char[] thatAligned = alignFrom.getSequence();
- StringBuilder thisAligned = new StringBuilder(2 * thisSeq.length);
// aligned and dataset sequence positions, all base zero
int thisSeqPos = 0;
char myGapChar = myGap.charAt(0);
int ratio = myGap.length();
- /*
- * Traverse the aligned protein sequence.
- */
int fromOffset = alignFrom.getStart() - 1;
int toOffset = alignTo.getStart() - 1;
int sourceGapMappedLength = 0;
boolean inExon = false;
+ final char[] thisSeq = alignTo.getSequence();
+ final char[] thatAligned = alignFrom.getSequence();
+ StringBuilder thisAligned = new StringBuilder(2 * thisSeq.length);
+
+ /*
+ * Traverse the 'model' aligned sequence
+ */
for (char sourceChar : thatAligned)
{
if (sourceChar == sourceGap)
}
/*
- * Found a residue. Locate its mapped codon (start) position.
+ * Found a non-gap character. Locate its mapped region if any.
*/
sourceDsPos++;
// Note mapping positions are base 1, our sequence positions base 0
if (mappedPos == null)
{
/*
- * Abort realignment if unmapped protein. Or could ignore it??
+ * unmapped position; treat like a gap
*/
- System.err.println("Can't align: no codon mapping to residue "
- + sourceDsPos + "(" + sourceChar + ")");
- return;
+ sourceGapMappedLength += ratio;
+ // System.err.println("Can't align: no codon mapping to residue "
+ // + sourceDsPos + "(" + sourceChar + ")");
+ // return;
+ continue;
}
int mappedCodonStart = mappedPos[0]; // position (1...) of codon start
}
/*
- * At end of protein sequence. Copy any remaining dna sequence, optionally
- * including (intron) gaps. We do not copy trailing gaps in protein.
+ * At end of model aligned sequence. Copy any remaining target sequence, optionally
+ * including (intron) gaps.
*/
while (thisSeqPos < thisSeq.length)
{
{
thisAligned.append(c);
}
+ sourceGapMappedLength--;
+ }
+
+ /*
+ * finally add gaps to pad for any trailing source gaps or
+ * unmapped characters
+ */
+ if (preserveUnmappedGaps)
+ {
+ while (sourceGapMappedLength > 0)
+ {
+ thisAligned.append(myGapChar);
+ sourceGapMappedLength--;
+ }
}
/*
}
/**
- * Returns a list of sequences mapped from the given sequences and aligned
- * (gapped) in the same way. For example, the cDNA for aligned protein, where
- * a single gap in protein generates three gaps in cDNA.
+ * Realigns the given protein to match the alignment of the dna, using codon
+ * mappings to translate aligned codon positions to protein residues.
*
- * @param sequences
- * @param gapCharacter
- * @param mappings
- * @return
+ * @param protein
+ * the alignment whose sequences are realigned by this method
+ * @param dna
+ * the dna alignment whose alignment we are 'copying'
+ * @return the number of sequences that were realigned
*/
- public static List<SequenceI> getAlignedTranslation(
- List<SequenceI> sequences, char gapCharacter,
- Set<AlignedCodonFrame> mappings)
+ public static int alignProteinAsDna(AlignmentI protein, AlignmentI dna)
{
- List<SequenceI> alignedSeqs = new ArrayList<SequenceI>();
-
- for (SequenceI seq : sequences)
- {
- List<SequenceI> mapped = getAlignedTranslation(seq, gapCharacter,
- mappings);
- alignedSeqs.addAll(mapped);
- }
- return alignedSeqs;
+ List<SequenceI> unmappedProtein = new ArrayList<SequenceI>();
+ Map<AlignedCodon, Map<SequenceI, AlignedCodon>> alignedCodons = buildCodonColumnsMap(
+ protein, dna, unmappedProtein);
+ return alignProteinAs(protein, alignedCodons, unmappedProtein);
}
/**
- * Returns sequences aligned 'like' the source sequence, as mapped by the
- * given mappings. Normally we expect zero or one 'mapped' sequences, but this
- * will support 1-to-many as well.
+ * Builds a map whose key is an aligned codon position (3 alignment column
+ * numbers base 0), and whose value is a map from protein sequence to each
+ * protein's peptide residue for that codon. The map generates an ordering of
+ * the codons, and allows us to read off the peptides at each position in
+ * order to assemble 'aligned' protein sequences.
*
- * @param seq
- * @param gapCharacter
- * @param mappings
+ * @param protein
+ * the protein alignment
+ * @param dna
+ * the coding dna alignment
+ * @param unmappedProtein
+ * any unmapped proteins are added to this list
* @return
*/
- protected static List<SequenceI> getAlignedTranslation(SequenceI seq,
- char gapCharacter, Set<AlignedCodonFrame> mappings)
+ protected static Map<AlignedCodon, Map<SequenceI, AlignedCodon>> buildCodonColumnsMap(
+ AlignmentI protein, AlignmentI dna,
+ List<SequenceI> unmappedProtein)
{
- List<SequenceI> result = new ArrayList<SequenceI>();
- for (AlignedCodonFrame mapping : mappings)
+ /*
+ * maintain a list of any proteins with no mappings - these will be
+ * rendered 'as is' in the protein alignment as we can't align them
+ */
+ unmappedProtein.addAll(protein.getSequences());
+
+ List<AlignedCodonFrame> mappings = protein.getCodonFrames();
+
+ /*
+ * Map will hold, for each aligned codon position e.g. [3, 5, 6], a map of
+ * {dnaSequence, {proteinSequence, codonProduct}} at that position. The
+ * comparator keeps the codon positions ordered.
+ */
+ Map<AlignedCodon, Map<SequenceI, AlignedCodon>> alignedCodons = new TreeMap<AlignedCodon, Map<SequenceI, AlignedCodon>>(
+ new CodonComparator());
+
+ for (SequenceI dnaSeq : dna.getSequences())
{
- if (mapping.involvesSequence(seq))
+ for (AlignedCodonFrame mapping : mappings)
{
- SequenceI mapped = getAlignedTranslation(seq, gapCharacter, mapping);
- if (mapped != null)
+ SequenceI prot = mapping.findAlignedSequence(dnaSeq, protein);
+ if (prot != null)
{
- result.add(mapped);
+ Mapping seqMap = mapping.getMappingForSequence(dnaSeq);
+ addCodonPositions(dnaSeq, prot, protein.getGapCharacter(),
+ seqMap, alignedCodons);
+ unmappedProtein.remove(prot);
}
}
}
- return result;
+
+ /*
+ * Finally add any unmapped peptide start residues (e.g. for incomplete
+ * codons) as if at the codon position before the second residue
+ */
+ // TODO resolve JAL-2022 so this fudge can be removed
+ int mappedSequenceCount = protein.getHeight() - unmappedProtein.size();
+ addUnmappedPeptideStarts(alignedCodons, mappedSequenceCount);
+
+ return alignedCodons;
}
/**
- * Returns the translation of 'seq' (as held in the mapping) with
- * corresponding alignment (gaps).
+ * Scans for any protein mapped from position 2 (meaning unmapped start
+ * position e.g. an incomplete codon), and synthesizes a 'codon' for it at the
+ * preceding position in the alignment
*
- * @param seq
- * @param gapCharacter
- * @param mapping
- * @return
+ * @param alignedCodons
+ * the codon-to-peptide map
+ * @param mappedSequenceCount
+ * the number of distinct sequences in the map
*/
- protected static SequenceI getAlignedTranslation(SequenceI seq,
- char gapCharacter, AlignedCodonFrame mapping)
+ protected static void addUnmappedPeptideStarts(
+ Map<AlignedCodon, Map<SequenceI, AlignedCodon>> alignedCodons,
+ int mappedSequenceCount)
{
- String gap = String.valueOf(gapCharacter);
- boolean toDna = false;
- int fromRatio = 1;
- SequenceI mapTo = mapping.getDnaForAaSeq(seq);
- if (mapTo != null)
- {
- // mapping is from protein to nucleotide
- toDna = true;
- // should ideally get gap count ratio from mapping
- gap = String.valueOf(new char[] { gapCharacter, gapCharacter,
- gapCharacter });
- }
- else
- {
- // mapping is from nucleotide to protein
- mapTo = mapping.getAaForDnaSeq(seq);
- fromRatio = 3;
- }
- StringBuilder newseq = new StringBuilder(seq.getLength()
- * (toDna ? 3 : 1));
+ // TODO delete this ugly hack once JAL-2022 is resolved
+ // i.e. we can model startPhase > 0 (incomplete start codon)
- int residueNo = 0; // in seq, base 1
- int[] phrase = new int[fromRatio];
- int phraseOffset = 0;
- int gapWidth = 0;
- boolean first = true;
- final Sequence alignedSeq = new Sequence("", "");
+ List<SequenceI> sequencesChecked = new ArrayList<SequenceI>();
+ AlignedCodon lastCodon = null;
+ Map<SequenceI, AlignedCodon> toAdd = new HashMap<SequenceI, AlignedCodon>();
- for (char c : seq.getSequence())
+ for (Entry<AlignedCodon, Map<SequenceI, AlignedCodon>> entry : alignedCodons
+ .entrySet())
{
- if (c == gapCharacter)
+ for (Entry<SequenceI, AlignedCodon> sequenceCodon : entry.getValue()
+ .entrySet())
{
- gapWidth++;
- if (gapWidth >= fromRatio)
+ SequenceI seq = sequenceCodon.getKey();
+ if (sequencesChecked.contains(seq))
{
- newseq.append(gap);
- gapWidth = 0;
+ continue;
}
- }
- else
- {
- phrase[phraseOffset++] = residueNo + 1;
- if (phraseOffset == fromRatio)
+ sequencesChecked.add(seq);
+ AlignedCodon codon = sequenceCodon.getValue();
+ if (codon.peptideCol > 1)
+ {
+ System.err
+ .println("Problem mapping protein with >1 unmapped start positions: "
+ + seq.getName());
+ }
+ else if (codon.peptideCol == 1)
{
/*
- * Have read a whole codon (or protein residue), now translate: map
- * source phrase to positions in target sequence add characters at
- * these positions to newseq Note mapping positions are base 1, our
- * sequence positions base 0.
+ * first position (peptideCol == 0) was unmapped - add it
*/
- SearchResults sr = new SearchResults();
- for (int pos : phrase)
+ if (lastCodon != null)
{
- mapping.markMappedRegion(seq, pos, sr);
+ AlignedCodon firstPeptide = new AlignedCodon(lastCodon.pos1,
+ lastCodon.pos2, lastCodon.pos3, String.valueOf(seq
+ .getCharAt(0)), 0);
+ toAdd.put(seq, firstPeptide);
}
- newseq.append(sr.getCharacters());
- if (first)
+ else
{
- first = false;
- // Hack: Copy sequence dataset, name and description from
- // SearchResults.match[0].sequence
- // TODO? carry over sequence names from original 'complement'
- // alignment
- SequenceI mappedTo = sr.getResultSequence(0);
- alignedSeq.setName(mappedTo.getName());
- alignedSeq.setDescription(mappedTo.getDescription());
- alignedSeq.setDatasetSequence(mappedTo);
+ /*
+ * unmapped residue at start of alignment (no prior column) -
+ * 'insert' at nominal codon [0, 0, 0]
+ */
+ AlignedCodon firstPeptide = new AlignedCodon(0, 0, 0,
+ String.valueOf(seq.getCharAt(0)), 0);
+ toAdd.put(seq, firstPeptide);
}
- phraseOffset = 0;
}
- residueNo++;
+ if (sequencesChecked.size() == mappedSequenceCount)
+ {
+ // no need to check past first mapped position in all sequences
+ break;
+ }
}
+ lastCodon = entry.getKey();
}
- alignedSeq.setSequence(newseq.toString());
- return alignedSeq;
- }
-
- /**
- * Realigns the given protein to match the alignment of the dna, using codon
- * mappings to translate aligned codon positions to protein residues.
- *
- * @param protein
- * the alignment whose sequences are realigned by this method
- * @param dna
- * the dna alignment whose alignment we are 'copying'
- * @return the number of sequences that were realigned
- */
- public static int alignProteinAsDna(AlignmentI protein, AlignmentI dna)
- {
- List<SequenceI> unmappedProtein = new ArrayList<SequenceI>();
- unmappedProtein.addAll(protein.getSequences());
-
- Set<AlignedCodonFrame> mappings = protein.getCodonFrames();
/*
- * Map will hold, for each aligned codon position e.g. [3, 5, 6], a map of
- * {dnaSequence, {proteinSequence, codonProduct}} at that position. The
- * comparator keeps the codon positions ordered.
+ * add any new codons safely after iterating over the map
*/
- Map<AlignedCodon, Map<SequenceI, String>> alignedCodons = new TreeMap<AlignedCodon, Map<SequenceI, String>>(
- new CodonComparator());
- for (SequenceI dnaSeq : dna.getSequences())
+ for (Entry<SequenceI, AlignedCodon> startCodon : toAdd.entrySet())
{
- for (AlignedCodonFrame mapping : mappings)
- {
- Mapping seqMap = mapping.getMappingForSequence(dnaSeq);
- SequenceI prot = mapping.findAlignedSequence(
- dnaSeq.getDatasetSequence(), protein);
- if (prot != null)
- {
- addCodonPositions(dnaSeq, prot, protein.getGapCharacter(),
- seqMap, alignedCodons);
- unmappedProtein.remove(prot);
- }
- }
+ addCodonToMap(alignedCodons, startCodon.getValue(),
+ startCodon.getKey());
}
- return alignProteinAs(protein, alignedCodons, unmappedProtein);
}
/**
* @return
*/
protected static int alignProteinAs(AlignmentI protein,
- Map<AlignedCodon, Map<SequenceI, String>> alignedCodons,
+ Map<AlignedCodon, Map<SequenceI, AlignedCodon>> alignedCodons,
List<SequenceI> unmappedProtein)
{
/*
int column = 0;
for (AlignedCodon codon : alignedCodons.keySet())
{
- final Map<SequenceI, String> columnResidues = alignedCodons
+ final Map<SequenceI, AlignedCodon> columnResidues = alignedCodons
.get(codon);
- for (Entry<SequenceI, String> entry : columnResidues.entrySet())
+ for (Entry<SequenceI, AlignedCodon> entry : columnResidues.entrySet())
{
// place translated codon at its column position in sequence
- entry.getKey().getSequence()[column] = entry.getValue().charAt(0);
+ entry.getKey().getSequence()[column] = entry.getValue().product
+ .charAt(0);
}
column++;
}
*/
static void addCodonPositions(SequenceI dna, SequenceI protein,
char gapChar, Mapping seqMap,
- Map<AlignedCodon, Map<SequenceI, String>> alignedCodons)
+ Map<AlignedCodon, Map<SequenceI, AlignedCodon>> alignedCodons)
{
Iterator<AlignedCodon> codons = seqMap.getCodonIterator(dna, gapChar);
+
+ /*
+ * add codon positions, and their peptide translations, to the alignment
+ * map, while remembering the first codon mapped
+ */
while (codons.hasNext())
{
- AlignedCodon codon = codons.next();
- Map<SequenceI, String> seqProduct = alignedCodons.get(codon);
- if (seqProduct == null)
+ try
{
- seqProduct = new HashMap<SequenceI, String>();
- alignedCodons.put(codon, seqProduct);
+ AlignedCodon codon = codons.next();
+ addCodonToMap(alignedCodons, codon, protein);
+ } catch (IncompleteCodonException e)
+ {
+ // possible incomplete trailing codon - ignore
+ } catch (NoSuchElementException e)
+ {
+ // possibly peptide lacking STOP
}
- seqProduct.put(protein, codon.product);
}
}
/**
+ * Helper method to add a codon-to-peptide entry to the aligned codons map
+ *
+ * @param alignedCodons
+ * @param codon
+ * @param protein
+ */
+ protected static void addCodonToMap(
+ Map<AlignedCodon, Map<SequenceI, AlignedCodon>> alignedCodons,
+ AlignedCodon codon, SequenceI protein)
+ {
+ Map<SequenceI, AlignedCodon> seqProduct = alignedCodons.get(codon);
+ if (seqProduct == null)
+ {
+ seqProduct = new HashMap<SequenceI, AlignedCodon>();
+ alignedCodons.put(codon, seqProduct);
+ }
+ seqProduct.put(protein, codon);
+ }
+
+ /**
* Returns true if a cDNA/Protein mapping either exists, or could be made,
* between at least one pair of sequences in the two alignments. Currently,
* the logic is:
}
AlignmentI dna = al1.isNucleotide() ? al1 : al2;
AlignmentI protein = dna == al1 ? al2 : al1;
- Set<AlignedCodonFrame> mappings = protein.getCodonFrames();
+ List<AlignedCodonFrame> mappings = protein.getCodonFrames();
for (SequenceI dnaSeq : dna.getSequences())
{
for (SequenceI proteinSeq : protein.getSequences())
* @return
*/
protected static boolean isMappable(SequenceI dnaSeq,
- SequenceI proteinSeq, Set<AlignedCodonFrame> mappings)
+ SequenceI proteinSeq, List<AlignedCodonFrame> mappings)
{
if (dnaSeq == null || proteinSeq == null)
{
SequenceI proteinDs = proteinSeq.getDatasetSequence() == null ? proteinSeq
: proteinSeq.getDatasetSequence();
- /*
- * Already mapped?
- */
for (AlignedCodonFrame mapping : mappings)
{
if (proteinDs == mapping.getAaForDnaSeq(dnaDs))
{
+ /*
+ * already mapped
+ */
return true;
}
}
* Just try to make a mapping (it is not yet stored), test whether
* successful.
*/
- return mapProteinSequenceToCdna(proteinDs, dnaDs) != null;
+ return mapCdnaToProtein(proteinDs, dnaDs) != null;
}
/**
}
/**
- * Constructs an alignment consisting of the mapped exon regions in the given
- * nucleotide sequences, and updates mappings to match.
+ * Constructs an alignment consisting of the mapped (CDS) regions in the given
+ * nucleotide sequences, and updates mappings to match. The CDS sequences are
+ * added to the original alignment's dataset, which is shared by the new
+ * alignment. Mappings from nucleotide to CDS, and from CDS to protein, are
+ * added to the alignment dataset.
*
* @param dna
* aligned dna sequences
* @param mappings
- * from dna to protein; these are replaced with new mappings
- * @return an alignment whose sequences are the exon-only parts of the dna
- * sequences (or null if no exons are found)
+ * from dna to protein
+ * @param al
+ * @return an alignment whose sequences are the cds-only parts of the dna
+ * sequences (or null if no mappings are found)
*/
- public static AlignmentI makeExonAlignment(SequenceI[] dna,
- Set<AlignedCodonFrame> mappings)
+ public static AlignmentI makeCdsAlignment(SequenceI[] dna,
+ List<AlignedCodonFrame> mappings, AlignmentI al)
{
- Set<AlignedCodonFrame> newMappings = new LinkedHashSet<AlignedCodonFrame>();
- List<SequenceI> exonSequences = new ArrayList<SequenceI>();
-
- for (SequenceI dnaSeq : dna)
+ List<SequenceI> cdsSeqs = new ArrayList<SequenceI>();
+
+ for (SequenceI seq : dna)
{
- final SequenceI ds = dnaSeq.getDatasetSequence();
+ AlignedCodonFrame cdsMappings = new AlignedCodonFrame();
List<AlignedCodonFrame> seqMappings = MappingUtils
- .findMappingsForSequence(ds, mappings);
- for (AlignedCodonFrame acf : seqMappings)
+ .findMappingsForSequence(seq, mappings);
+ List<AlignedCodonFrame> alignmentMappings = al.getCodonFrames();
+ for (AlignedCodonFrame mapping : seqMappings)
{
- AlignedCodonFrame newMapping = new AlignedCodonFrame();
- final List<SequenceI> mappedExons = makeExonSequences(ds, acf,
- newMapping);
- if (!mappedExons.isEmpty())
+ for (Mapping aMapping : mapping.getMappingsFromSequence(seq))
{
- exonSequences.addAll(mappedExons);
- newMappings.add(newMapping);
+ SequenceI cdsSeq = makeCdsSequence(seq.getDatasetSequence(),
+ aMapping);
+ cdsSeqs.add(cdsSeq);
+
+ /*
+ * add a mapping from CDS to the (unchanged) mapped to range
+ */
+ List<int[]> cdsRange = Collections.singletonList(new int[] { 1,
+ cdsSeq.getLength() });
+ MapList map = new MapList(cdsRange, aMapping.getMap()
+ .getToRanges(), aMapping.getMap().getFromRatio(),
+ aMapping.getMap().getToRatio());
+ cdsMappings.addMap(cdsSeq, aMapping.getTo(), map);
+
+ /*
+ * add another mapping from original 'from' range to CDS
+ */
+ map = new MapList(aMapping.getMap().getFromRanges(), cdsRange, 1,
+ 1);
+ cdsMappings.addMap(seq.getDatasetSequence(), cdsSeq, map);
+
+ alignmentMappings.add(cdsMappings);
+
+ /*
+ * transfer any features on dna that overlap the CDS
+ */
+ transferFeatures(seq, cdsSeq, map, null, SequenceOntologyI.CDS);
}
}
}
- AlignmentI al = new Alignment(
- exonSequences.toArray(new SequenceI[exonSequences.size()]));
- al.setDataset(null);
/*
- * Replace the old mappings with the new ones
+ * add CDS seqs to shared dataset
*/
- mappings.clear();
- mappings.addAll(newMappings);
+ Alignment dataset = al.getDataset();
+ for (SequenceI seq : cdsSeqs)
+ {
+ if (!dataset.getSequences().contains(seq.getDatasetSequence()))
+ {
+ dataset.addSequence(seq.getDatasetSequence());
+ }
+ }
+ AlignmentI cds = new Alignment(cdsSeqs.toArray(new SequenceI[cdsSeqs
+ .size()]));
+ cds.setDataset(dataset);
- return al;
+ return cds;
}
/**
- * Helper method to make exon-only sequences and populate their mappings to
- * protein products
- * <p>
- * For example, if ggCCaTTcGAg has mappings [3, 4, 6, 7, 9, 10] to protein
- * then generate a sequence CCTTGA with mapping [1, 6] to the same protein
- * residues
- * <p>
- * Typically eukaryotic dna will include exons encoding for a single peptide
- * sequence i.e. return a single result. Bacterial dna may have overlapping
- * exon mappings coding for multiple peptides so return multiple results
- * (example EMBL KF591215).
+ * Helper method that makes a CDS sequence as defined by the mappings from the
+ * given sequence i.e. extracts the 'mapped from' ranges (which may be on
+ * forward or reverse strand).
*
- * @param dnaSeq
- * a dna dataset sequence
+ * @param seq
* @param mapping
- * containing one or more mappings of the sequence to protein
- * @param newMapping
- * the new mapping to populate, from the exon-only sequences to their
- * mapped protein sequences
* @return
*/
- protected static List<SequenceI> makeExonSequences(SequenceI dnaSeq,
- AlignedCodonFrame mapping, AlignedCodonFrame newMapping)
+ static SequenceI makeCdsSequence(SequenceI seq, Mapping mapping)
{
- List<SequenceI> exonSequences = new ArrayList<SequenceI>();
- List<Mapping> seqMappings = mapping.getMappingsForSequence(dnaSeq);
- final char[] dna = dnaSeq.getSequence();
- for (Mapping seqMapping : seqMappings)
- {
- StringBuilder newSequence = new StringBuilder(dnaSeq.getLength());
+ char[] seqChars = seq.getSequence();
+ List<int[]> fromRanges = mapping.getMap().getFromRanges();
+ int cdsWidth = MappingUtils.getLength(fromRanges);
+ char[] newSeqChars = new char[cdsWidth];
- /*
- * Get the codon regions as { [2, 5], [7, 12], [14, 14] etc }
- */
- final List<int[]> dnaExonRanges = seqMapping.getMap().getFromRanges();
- for (int[] range : dnaExonRanges)
+ int newPos = 0;
+ for (int[] range : fromRanges)
+ {
+ if (range[0] <= range[1])
+ {
+ // forward strand mapping - just copy the range
+ int length = range[1] - range[0] + 1;
+ System.arraycopy(seqChars, range[0] - 1, newSeqChars, newPos,
+ length);
+ newPos += length;
+ }
+ else
{
- for (int pos = range[0]; pos <= range[1]; pos++)
+ // reverse strand mapping - copy and complement one by one
+ for (int i = range[0]; i >= range[1]; i--)
{
- newSequence.append(dna[pos - 1]);
+ newSeqChars[newPos++] = Dna.getComplement(seqChars[i - 1]);
}
}
+ }
- SequenceI exon = new Sequence(dnaSeq.getName(),
- newSequence.toString());
+ SequenceI newSeq = new Sequence(seq.getName() + "|"
+ + mapping.getTo().getName(), newSeqChars, 1, newPos);
+ newSeq.createDatasetSequence();
+ return newSeq;
+ }
- /*
- * Locate any xrefs to CDS database on the protein product and attach to
- * the CDS sequence. Also add as a sub-token of the sequence name.
- */
- // default to "CDS" if we can't locate an actual gene id
- String cdsAccId = FeatureProperties
- .getCodingFeature(DBRefSource.EMBL);
- DBRefEntry[] cdsRefs = DBRefUtils.selectRefs(seqMapping.getTo()
- .getDBRefs(), DBRefSource.CODINGDBS);
- if (cdsRefs != null)
+ /**
+ * Transfers co-located features on 'fromSeq' to 'toSeq', adjusting the
+ * feature start/end ranges, optionally omitting specified feature types.
+ * Returns the number of features copied.
+ *
+ * @param fromSeq
+ * @param toSeq
+ * @param select
+ * if not null, only features of this type are copied (including
+ * subtypes in the Sequence Ontology)
+ * @param mapping
+ * the mapping from 'fromSeq' to 'toSeq'
+ * @param omitting
+ */
+ public static int transferFeatures(SequenceI fromSeq, SequenceI toSeq,
+ MapList mapping, String select, String... omitting)
+ {
+ SequenceI copyTo = toSeq;
+ while (copyTo.getDatasetSequence() != null)
+ {
+ copyTo = copyTo.getDatasetSequence();
+ }
+
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ int count = 0;
+ SequenceFeature[] sfs = fromSeq.getSequenceFeatures();
+ if (sfs != null)
+ {
+ for (SequenceFeature sf : sfs)
{
- for (DBRefEntry cdsRef : cdsRefs)
+ String type = sf.getType();
+ if (select != null && !so.isA(type, select))
+ {
+ continue;
+ }
+ boolean omit = false;
+ for (String toOmit : omitting)
+ {
+ if (type.equals(toOmit))
+ {
+ omit = true;
+ }
+ }
+ if (omit)
{
- exon.addDBRef(new DBRefEntry(cdsRef));
- cdsAccId = cdsRef.getAccessionId();
+ continue;
+ }
+
+ /*
+ * locate the mapped range - null if either start or end is
+ * not mapped (no partial overlaps are calculated)
+ */
+ int start = sf.getBegin();
+ int end = sf.getEnd();
+ int[] mappedTo = mapping.locateInTo(start, end);
+ /*
+ * if whole exon range doesn't map, try interpreting it
+ * as 5' or 3' exon overlapping the CDS range
+ */
+ if (mappedTo == null)
+ {
+ mappedTo = mapping.locateInTo(end, end);
+ if (mappedTo != null)
+ {
+ /*
+ * end of exon is in CDS range - 5' overlap
+ * to a range from the start of the peptide
+ */
+ mappedTo[0] = 1;
+ }
+ }
+ if (mappedTo == null)
+ {
+ mappedTo = mapping.locateInTo(start, start);
+ if (mappedTo != null)
+ {
+ /*
+ * start of exon is in CDS range - 3' overlap
+ * to a range up to the end of the peptide
+ */
+ mappedTo[1] = toSeq.getLength();
+ }
+ }
+ if (mappedTo != null)
+ {
+ SequenceFeature copy = new SequenceFeature(sf);
+ copy.setBegin(Math.min(mappedTo[0], mappedTo[1]));
+ copy.setEnd(Math.max(mappedTo[0], mappedTo[1]));
+ copyTo.addSequenceFeature(copy);
+ count++;
}
}
- exon.setName(exon.getName() + "|" + cdsAccId);
- exon.createDatasetSequence();
+ }
+ return count;
+ }
- /*
- * Build new mappings - from the same protein regions, but now to
- * contiguous exons
- */
- List<int[]> exonRange = new ArrayList<int[]>();
- exonRange.add(new int[] { 1, newSequence.length() });
- MapList map = new MapList(exonRange, seqMapping.getMap()
- .getToRanges(), 3, 1);
- newMapping.addMap(exon.getDatasetSequence(), seqMapping.getTo(), map);
- MapList cdsToDnaMap = new MapList(dnaExonRanges, exonRange, 1, 1);
- newMapping.addMap(dnaSeq, exon.getDatasetSequence(), cdsToDnaMap);
+ /**
+ * Returns a mapping from dna to protein by inspecting sequence features of
+ * type "CDS" on the dna.
+ *
+ * @param dnaSeq
+ * @param proteinSeq
+ * @return
+ */
+ public static MapList mapCdsToProtein(SequenceI dnaSeq,
+ SequenceI proteinSeq)
+ {
+ List<int[]> ranges = findCdsPositions(dnaSeq);
+ int mappedDnaLength = MappingUtils.getLength(ranges);
- exonSequences.add(exon);
- }
- return exonSequences;
+ int proteinLength = proteinSeq.getLength();
+ int proteinStart = proteinSeq.getStart();
+ int proteinEnd = proteinSeq.getEnd();
+
+ /*
+ * incomplete start codon may mean X at start of peptide
+ * we ignore both for mapping purposes
+ */
+ if (proteinSeq.getCharAt(0) == 'X')
+ {
+ // todo JAL-2022 support startPhase > 0
+ proteinStart++;
+ proteinLength--;
+ }
+ List<int[]> proteinRange = new ArrayList<int[]>();
+
+ /*
+ * dna length should map to protein (or protein plus stop codon)
+ */
+ int codesForResidues = mappedDnaLength / 3;
+ if (codesForResidues == (proteinLength + 1))
+ {
+ // assuming extra codon is for STOP and not in peptide
+ codesForResidues--;
+ }
+ if (codesForResidues == proteinLength)
+ {
+ proteinRange.add(new int[] { proteinStart, proteinEnd });
+ return new MapList(ranges, proteinRange, 3, 1);
+ }
+ return null;
+ }
+
+ /**
+ * Returns a list of CDS ranges found (as sequence positions base 1), i.e. of
+ * start/end positions of sequence features of type "CDS" (or a sub-type of
+ * CDS in the Sequence Ontology). The ranges are sorted into ascending start
+ * position order, so this method is only valid for linear CDS in the same
+ * sense as the protein product.
+ *
+ * @param dnaSeq
+ * @return
+ */
+ public static List<int[]> findCdsPositions(SequenceI dnaSeq)
+ {
+ List<int[]> result = new ArrayList<int[]>();
+ SequenceFeature[] sfs = dnaSeq.getSequenceFeatures();
+ if (sfs == null)
+ {
+ return result;
+ }
+
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ int startPhase = 0;
+
+ for (SequenceFeature sf : sfs)
+ {
+ /*
+ * process a CDS feature (or a sub-type of CDS)
+ */
+ if (so.isA(sf.getType(), SequenceOntologyI.CDS))
+ {
+ int phase = 0;
+ try
+ {
+ phase = Integer.parseInt(sf.getPhase());
+ } catch (NumberFormatException e)
+ {
+ // ignore
+ }
+ /*
+ * phase > 0 on first codon means 5' incomplete - skip to the start
+ * of the next codon; example ENST00000496384
+ */
+ int begin = sf.getBegin();
+ int end = sf.getEnd();
+ if (result.isEmpty())
+ {
+ begin += phase;
+ if (begin > end)
+ {
+ // shouldn't happen!
+ System.err
+ .println("Error: start phase extends beyond start CDS in "
+ + dnaSeq.getName());
+ }
+ }
+ result.add(new int[] { begin, end });
+ }
+ }
+
+ /*
+ * remove 'startPhase' positions (usually 0) from the first range
+ * so we begin at the start of a complete codon
+ */
+ if (!result.isEmpty())
+ {
+ // TODO JAL-2022 correctly model start phase > 0
+ result.get(0)[0] += startPhase;
+ }
+
+ /*
+ * Finally sort ranges by start position. This avoids a dependency on
+ * keeping features in order on the sequence (if they are in order anyway,
+ * the sort will have almost no work to do). The implicit assumption is CDS
+ * ranges are assembled in order. Other cases should not use this method,
+ * but instead construct an explicit mapping for CDS (e.g. EMBL parsing).
+ */
+ Collections.sort(result, new Comparator<int[]>()
+ {
+ @Override
+ public int compare(int[] o1, int[] o2)
+ {
+ return Integer.compare(o1[0], o2[0]);
+ }
+ });
+ return result;
+ }
+
+ /**
+ * Maps exon features from dna to protein, and computes variants in peptide
+ * product generated by variants in dna, and adds them as sequence_variant
+ * features on the protein sequence. Returns the number of variant features
+ * added.
+ *
+ * @param dnaSeq
+ * @param peptide
+ * @param dnaToProtein
+ */
+ public static int computeProteinFeatures(SequenceI dnaSeq,
+ SequenceI peptide, MapList dnaToProtein)
+ {
+ while (dnaSeq.getDatasetSequence() != null)
+ {
+ dnaSeq = dnaSeq.getDatasetSequence();
+ }
+ while (peptide.getDatasetSequence() != null)
+ {
+ peptide = peptide.getDatasetSequence();
+ }
+
+ transferFeatures(dnaSeq, peptide, dnaToProtein, SequenceOntologyI.EXON);
+
+ /*
+ * compute protein variants from dna variants and codon mappings;
+ * NB - alternatively we could retrieve this using the REST service e.g.
+ * http://rest.ensembl.org/overlap/translation
+ * /ENSP00000288602?feature=transcript_variation;content-type=text/xml
+ * which would be a bit slower but possibly more reliable
+ */
+
+ /*
+ * build a map with codon variations for each potentially varying peptide
+ */
+ LinkedHashMap<Integer, List<DnaVariant>[]> variants = buildDnaVariantsMap(
+ dnaSeq, dnaToProtein);
+
+ /*
+ * scan codon variations, compute peptide variants and add to peptide sequence
+ */
+ int count = 0;
+ for (Entry<Integer, List<DnaVariant>[]> variant : variants.entrySet())
+ {
+ int peptidePos = variant.getKey();
+ List<DnaVariant>[] codonVariants = variant.getValue();
+ count += computePeptideVariants(peptide, peptidePos, codonVariants);
+ }
+
+ /*
+ * sort to get sequence features in start position order
+ * - would be better to store in Sequence as a TreeSet or NCList?
+ */
+ Arrays.sort(peptide.getSequenceFeatures(),
+ new Comparator<SequenceFeature>()
+ {
+ @Override
+ public int compare(SequenceFeature o1, SequenceFeature o2)
+ {
+ int c = Integer.compare(o1.getBegin(), o2.getBegin());
+ return c == 0 ? Integer.compare(o1.getEnd(), o2.getEnd())
+ : c;
+ }
+ });
+ return count;
+ }
+
+ /**
+ * Computes non-synonymous peptide variants from codon variants and adds them
+ * as sequence_variant features on the protein sequence (one feature per
+ * allele variant). Selected attributes (variant id, clinical significance)
+ * are copied over to the new features.
+ *
+ * @param peptide
+ * the protein sequence
+ * @param peptidePos
+ * the position to compute peptide variants for
+ * @param codonVariants
+ * a list of dna variants per codon position
+ * @return the number of features added
+ */
+ static int computePeptideVariants(SequenceI peptide, int peptidePos,
+ List<DnaVariant>[] codonVariants)
+ {
+ String residue = String.valueOf(peptide.getCharAt(peptidePos - 1));
+ int count = 0;
+ String base1 = codonVariants[0].get(0).base;
+ String base2 = codonVariants[1].get(0).base;
+ String base3 = codonVariants[2].get(0).base;
+
+ /*
+ * variants in first codon base
+ */
+ for (DnaVariant var : codonVariants[0])
+ {
+ if (var.variant != null)
+ {
+ String alleles = (String) var.variant.getValue("alleles");
+ if (alleles != null)
+ {
+ for (String base : alleles.split(","))
+ {
+ String codon = base + base2 + base3;
+ if (addPeptideVariant(peptide, peptidePos, residue, var, codon))
+ {
+ count++;
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * variants in second codon base
+ */
+ for (DnaVariant var : codonVariants[1])
+ {
+ if (var.variant != null)
+ {
+ String alleles = (String) var.variant.getValue("alleles");
+ if (alleles != null)
+ {
+ for (String base : alleles.split(","))
+ {
+ String codon = base1 + base + base3;
+ if (addPeptideVariant(peptide, peptidePos, residue, var, codon))
+ {
+ count++;
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * variants in third codon base
+ */
+ for (DnaVariant var : codonVariants[2])
+ {
+ if (var.variant != null)
+ {
+ String alleles = (String) var.variant.getValue("alleles");
+ if (alleles != null)
+ {
+ for (String base : alleles.split(","))
+ {
+ String codon = base1 + base2 + base;
+ if (addPeptideVariant(peptide, peptidePos, residue, var, codon))
+ {
+ count++;
+ }
+ }
+ }
+ }
+ }
+
+ return count;
+ }
+
+ /**
+ * Helper method that adds a peptide variant feature, provided the given codon
+ * translates to a value different to the current residue (is a non-synonymous
+ * variant). ID and clinical_significance attributes of the dna variant (if
+ * present) are copied to the new feature.
+ *
+ * @param peptide
+ * @param peptidePos
+ * @param residue
+ * @param var
+ * @param codon
+ * @return true if a feature was added, else false
+ */
+ static boolean addPeptideVariant(SequenceI peptide, int peptidePos,
+ String residue, DnaVariant var, String codon)
+ {
+ /*
+ * get peptide translation of codon e.g. GAT -> D
+ * note that variants which are not single alleles,
+ * e.g. multibase variants or HGMD_MUTATION etc
+ * are currently ignored here
+ */
+ String trans = codon.contains("-") ? "-"
+ : (codon.length() > 3 ? null : ResidueProperties
+ .codonTranslate(codon));
+ if (trans != null && !trans.equals(residue))
+ {
+ String desc = residue + "->" + trans;
+ // set score to 0f so 'graduated colour' option is offered! JAL-2060
+ SequenceFeature sf = new SequenceFeature(
+ SequenceOntologyI.SEQUENCE_VARIANT, desc, peptidePos,
+ peptidePos, 0f, null);
+ StringBuilder attributes = new StringBuilder(32);
+ String id = (String) var.variant.getValue(ID);
+ if (id != null)
+ {
+ if (id.startsWith(SEQUENCE_VARIANT))
+ {
+ id = id.substring(SEQUENCE_VARIANT.length());
+ }
+ sf.setValue(ID, id);
+ attributes.append(ID).append("=").append(id);
+ // TODO handle other species variants
+ StringBuilder link = new StringBuilder(32);
+ try
+ {
+ link.append(desc).append(" ").append(id)
+ .append("|http://www.ensembl.org/Homo_sapiens/Variation/Summary?v=")
+ .append(URLEncoder.encode(id, "UTF-8"));
+ sf.addLink(link.toString());
+ } catch (UnsupportedEncodingException e)
+ {
+ // as if
+ }
+ }
+ String clinSig = (String) var.variant
+ .getValue(CLINICAL_SIGNIFICANCE);
+ if (clinSig != null)
+ {
+ sf.setValue(CLINICAL_SIGNIFICANCE, clinSig);
+ attributes.append(";").append(CLINICAL_SIGNIFICANCE).append("=")
+ .append(clinSig);
+ }
+ peptide.addSequenceFeature(sf);
+ if (attributes.length() > 0)
+ {
+ sf.setAttributes(attributes.toString());
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Builds a map whose key is position in the protein sequence, and value is a
+ * list of the base and all variants for each corresponding codon position
+ *
+ * @param dnaSeq
+ * @param dnaToProtein
+ * @return
+ */
+ static LinkedHashMap<Integer, List<DnaVariant>[]> buildDnaVariantsMap(
+ SequenceI dnaSeq, MapList dnaToProtein)
+ {
+ /*
+ * map from peptide position to all variants of the codon which codes for it
+ * LinkedHashMap ensures we keep the peptide features in sequence order
+ */
+ LinkedHashMap<Integer, List<DnaVariant>[]> variants = new LinkedHashMap<Integer, List<DnaVariant>[]>();
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+
+ SequenceFeature[] dnaFeatures = dnaSeq.getSequenceFeatures();
+ if (dnaFeatures == null)
+ {
+ return variants;
+ }
+
+ int dnaStart = dnaSeq.getStart();
+ int[] lastCodon = null;
+ int lastPeptidePostion = 0;
+
+ /*
+ * build a map of codon variations for peptides
+ */
+ for (SequenceFeature sf : dnaFeatures)
+ {
+ int dnaCol = sf.getBegin();
+ if (dnaCol != sf.getEnd())
+ {
+ // not handling multi-locus variant features
+ continue;
+ }
+ if (so.isA(sf.getType(), SequenceOntologyI.SEQUENCE_VARIANT))
+ {
+ int[] mapsTo = dnaToProtein.locateInTo(dnaCol, dnaCol);
+ if (mapsTo == null)
+ {
+ // feature doesn't lie within coding region
+ continue;
+ }
+ int peptidePosition = mapsTo[0];
+ List<DnaVariant>[] codonVariants = variants.get(peptidePosition);
+ if (codonVariants == null)
+ {
+ codonVariants = new ArrayList[3];
+ codonVariants[0] = new ArrayList<DnaVariant>();
+ codonVariants[1] = new ArrayList<DnaVariant>();
+ codonVariants[2] = new ArrayList<DnaVariant>();
+ variants.put(peptidePosition, codonVariants);
+ }
+
+ /*
+ * extract dna variants to a string array
+ */
+ String alls = (String) sf.getValue("alleles");
+ if (alls == null)
+ {
+ continue;
+ }
+ String[] alleles = alls.toUpperCase().split(",");
+ int i = 0;
+ for (String allele : alleles)
+ {
+ alleles[i++] = allele.trim(); // lose any space characters "A, G"
+ }
+
+ /*
+ * get this peptide's codon positions e.g. [3, 4, 5] or [4, 7, 10]
+ */
+ int[] codon = peptidePosition == lastPeptidePostion ? lastCodon
+ : MappingUtils.flattenRanges(dnaToProtein.locateInFrom(
+ peptidePosition, peptidePosition));
+ lastPeptidePostion = peptidePosition;
+ lastCodon = codon;
+
+ /*
+ * save nucleotide (and any variant) for each codon position
+ */
+ for (int codonPos = 0; codonPos < 3; codonPos++)
+ {
+ String nucleotide = String.valueOf(
+ dnaSeq.getCharAt(codon[codonPos] - dnaStart))
+ .toUpperCase();
+ List<DnaVariant> codonVariant = codonVariants[codonPos];
+ if (codon[codonPos] == dnaCol)
+ {
+ if (!codonVariant.isEmpty()
+ && codonVariant.get(0).variant == null)
+ {
+ /*
+ * already recorded base value, add this variant
+ */
+ codonVariant.get(0).variant = sf;
+ }
+ else
+ {
+ /*
+ * add variant with base value
+ */
+ codonVariant.add(new DnaVariant(nucleotide, sf));
+ }
+ }
+ else if (codonVariant.isEmpty())
+ {
+ /*
+ * record (possibly non-varying) base value
+ */
+ codonVariant.add(new DnaVariant(nucleotide));
+ }
+ }
+ }
+ }
+ return variants;
+ }
+
+ /**
+ * Makes an alignment with a copy of the given sequences, adding in any
+ * non-redundant sequences which are mapped to by the cross-referenced
+ * sequences.
+ *
+ * @param seqs
+ * @param xrefs
+ * @return
+ */
+ public static AlignmentI makeCopyAlignment(SequenceI[] seqs,
+ SequenceI[] xrefs)
+ {
+ AlignmentI copy = new Alignment(new Alignment(seqs));
+
+ SequenceIdMatcher matcher = new SequenceIdMatcher(seqs);
+ if (xrefs != null)
+ {
+ for (SequenceI xref : xrefs)
+ {
+ DBRefEntry[] dbrefs = xref.getDBRefs();
+ if (dbrefs != null)
+ {
+ for (DBRefEntry dbref : dbrefs)
+ {
+ if (dbref.getMap() == null || dbref.getMap().getTo() == null)
+ {
+ continue;
+ }
+ SequenceI mappedTo = dbref.getMap().getTo();
+ SequenceI match = matcher.findIdMatch(mappedTo);
+ if (match == null)
+ {
+ matcher.add(mappedTo);
+ copy.addSequence(mappedTo);
+ }
+ }
+ }
+ }
+ }
+ return copy;
+ }
+
+ /**
+ * Try to align sequences in 'unaligned' to match the alignment of their
+ * mapped regions in 'aligned'. For example, could use this to align CDS
+ * sequences which are mapped to their parent cDNA sequences.
+ *
+ * This method handles 1:1 mappings (dna-to-dna or protein-to-protein). For
+ * dna-to-protein or protein-to-dna use alternative methods.
+ *
+ * @param unaligned
+ * sequences to be aligned
+ * @param aligned
+ * holds aligned sequences and their mappings
+ * @return
+ */
+ public static int alignAs(AlignmentI unaligned, AlignmentI aligned)
+ {
+ List<SequenceI> unmapped = new ArrayList<SequenceI>();
+ Map<Integer, Map<SequenceI, Character>> columnMap = buildMappedColumnsMap(
+ unaligned, aligned, unmapped);
+ int width = columnMap.size();
+ char gap = unaligned.getGapCharacter();
+ int realignedCount = 0;
+
+ for (SequenceI seq : unaligned.getSequences())
+ {
+ if (!unmapped.contains(seq))
+ {
+ char[] newSeq = new char[width];
+ Arrays.fill(newSeq, gap);
+ int newCol = 0;
+ int lastCol = 0;
+
+ /*
+ * traverse the map to find columns populated
+ * by our sequence
+ */
+ for (Integer column : columnMap.keySet())
+ {
+ Character c = columnMap.get(column).get(seq);
+ if (c != null)
+ {
+ /*
+ * sequence has a character at this position
+ *
+ */
+ newSeq[newCol] = c;
+ lastCol = newCol;
+ }
+ newCol++;
+ }
+
+ /*
+ * trim trailing gaps
+ */
+ if (lastCol < width)
+ {
+ char[] tmp = new char[lastCol + 1];
+ System.arraycopy(newSeq, 0, tmp, 0, lastCol + 1);
+ newSeq = tmp;
+ }
+ seq.setSequence(String.valueOf(newSeq));
+ realignedCount++;
+ }
+ }
+ return realignedCount;
+ }
+
+ /**
+ * Returns a map whose key is alignment column number (base 1), and whose
+ * values are a map of sequence characters in that column.
+ *
+ * @param unaligned
+ * @param aligned
+ * @param unmapped
+ * @return
+ */
+ static Map<Integer, Map<SequenceI, Character>> buildMappedColumnsMap(
+ AlignmentI unaligned, AlignmentI aligned, List<SequenceI> unmapped)
+ {
+ /*
+ * Map will hold, for each aligned column position, a map of
+ * {unalignedSequence, sequenceCharacter} at that position.
+ * TreeMap keeps the entries in ascending column order.
+ */
+ Map<Integer, Map<SequenceI, Character>> map = new TreeMap<Integer, Map<SequenceI, Character>>();
+
+ /*
+ * r any sequences that have no mapping so can't be realigned
+ */
+ unmapped.addAll(unaligned.getSequences());
+
+ List<AlignedCodonFrame> mappings = aligned.getCodonFrames();
+
+ for (SequenceI seq : unaligned.getSequences())
+ {
+ for (AlignedCodonFrame mapping : mappings)
+ {
+ SequenceI fromSeq = mapping.findAlignedSequence(seq, aligned);
+ if (fromSeq != null)
+ {
+ Mapping seqMap = mapping.getMappingBetween(fromSeq, seq);
+ if (addMappedPositions(seq, fromSeq, seqMap, map))
+ {
+ unmapped.remove(seq);
+ }
+ }
+ }
+ }
+ return map;
+ }
+
+ /**
+ * Helper method that adds to a map the mapped column positions of a sequence. <br>
+ * For example if aaTT-Tg-gAAA is mapped to TTTAAA then the map should record
+ * that columns 3,4,6,10,11,12 map to characters T,T,T,A,A,A of the mapped to
+ * sequence.
+ *
+ * @param seq
+ * the sequence whose column positions we are recording
+ * @param fromSeq
+ * a sequence that is mapped to the first sequence
+ * @param seqMap
+ * the mapping from 'fromSeq' to 'seq'
+ * @param map
+ * a map to add the column positions (in fromSeq) of the mapped
+ * positions of seq
+ * @return
+ */
+ static boolean addMappedPositions(SequenceI seq, SequenceI fromSeq,
+ Mapping seqMap, Map<Integer, Map<SequenceI, Character>> map)
+ {
+ if (seqMap == null)
+ {
+ return false;
+ }
+
+ char[] fromChars = fromSeq.getSequence();
+ int toStart = seq.getStart();
+ char[] toChars = seq.getSequence();
+
+ /*
+ * traverse [start, end, start, end...] ranges in fromSeq
+ */
+ for (int[] fromRange : seqMap.getMap().getFromRanges())
+ {
+ for (int i = 0; i < fromRange.length - 1; i += 2)
+ {
+ boolean forward = fromRange[i + 1] >= fromRange[i];
+
+ /*
+ * find the range mapped to (sequence positions base 1)
+ */
+ int[] range = seqMap.locateMappedRange(fromRange[i],
+ fromRange[i + 1]);
+ if (range == null)
+ {
+ System.err.println("Error in mapping " + seqMap + " from "
+ + fromSeq.getName());
+ return false;
+ }
+ int fromCol = fromSeq.findIndex(fromRange[i]);
+ int mappedCharPos = range[0];
+
+ /*
+ * walk over the 'from' aligned sequence in forward or reverse
+ * direction; when a non-gap is found, record the column position
+ * of the next character of the mapped-to sequence; stop when all
+ * the characters of the range have been counted
+ */
+ while (mappedCharPos <= range[1])
+ {
+ if (!Comparison.isGap(fromChars[fromCol - 1]))
+ {
+ /*
+ * mapped from sequence has a character in this column
+ * record the column position for the mapped to character
+ */
+ Map<SequenceI, Character> seqsMap = map.get(fromCol);
+ if (seqsMap == null)
+ {
+ seqsMap = new HashMap<SequenceI, Character>();
+ map.put(fromCol, seqsMap);
+ }
+ seqsMap.put(seq, toChars[mappedCharPos - toStart]);
+ mappedCharPos++;
+ }
+ fromCol += (forward ? 1 : -1);
+ }
+ }
+ }
+ return true;
+ }
+
+ // strictly temporary hack until proper criteria for aligning protein to cds
+ // are in place; this is so Ensembl -> fetch xrefs Uniprot aligns the Uniprot
+ public static boolean looksLikeEnsembl(AlignmentI alignment)
+ {
+ for (SequenceI seq : alignment.getSequences())
+ {
+ String name = seq.getName();
+ if (!name.startsWith("ENSG") && !name.startsWith("ENST"))
+ {
+ return false;
+ }
+ }
+ return true;
}
}
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
+import jalview.datamodel.Mapping;
import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
import jalview.util.DBRefUtils;
+import jalview.util.MapList;
import jalview.ws.SequenceFetcher;
import jalview.ws.seqfetcher.ASequenceFetcher;
*/
public class CrossRef
{
+ /*
+ * A sub-class that ignores Parent attribute when comparing sequence
+ * features. This avoids 'duplicate' CDS features that only
+ * differ in their parent Transcript ids.
+ */
+ class MySequenceFeature extends SequenceFeature
+ {
+ private SequenceFeature feat;
+
+ MySequenceFeature(SequenceFeature sf)
+ {
+ this.feat = sf;
+ }
+
+ @Override
+ public boolean equals(Object o)
+ {
+ return feat.equals(o, true);
+ }
+ }
+
/**
* Select just the DNA or protein references for a protein or dna sequence
*
{
String[] dbrefs = null;
List<String> refs = new ArrayList<String>();
- for (int s = 0; s < seqs.length; s++)
+ for (SequenceI seq : seqs)
{
- if (seqs[s] != null)
+ if (seq != null)
{
- SequenceI dss = seqs[s];
+ SequenceI dss = seq;
while (dss.getDatasetSequence() != null)
{
dss = dss.getDatasetSequence();
}
DBRefEntry[] rfs = findXDbRefs(dna, dss.getDBRefs());
- for (int r = 0; rfs != null && r < rfs.length; r++)
+ if (rfs != null)
{
- if (!refs.contains(rfs[r].getSource()))
+ for (DBRefEntry ref : rfs)
{
- refs.add(rfs[r].getSource());
+ if (!refs.contains(ref.getSource()))
+ {
+ refs.add(ref.getSource());
+ }
}
}
if (dataset != null)
{
// search for references to this sequence's direct references.
- DBRefEntry[] lrfs = CrossRef
- .findXDbRefs(!dna, seqs[s].getDBRefs());
+ DBRefEntry[] lrfs = CrossRef.findXDbRefs(!dna, seq.getDBRefs());
List<SequenceI> rseqs = new ArrayList<SequenceI>();
- CrossRef.searchDatasetXrefs(seqs[s], !dna, lrfs, dataset, rseqs,
+ CrossRef.searchDatasetXrefs(seq, !dna, lrfs, dataset, rseqs,
null); // don't need to specify codon frame for mapping here
for (SequenceI rs : rseqs)
{
- DBRefEntry[] xrs = findXDbRefs(dna, rs.getDBRefs()); // not used??
- for (int r = 0; rfs != null && r < rfs.length; r++)
+ DBRefEntry[] xrs = findXDbRefs(dna, rs.getDBRefs());
+ if (xrs != null)
{
- if (!refs.contains(rfs[r].getSource()))
+ for (DBRefEntry ref : xrs)
{
- refs.add(rfs[r].getSource());
+ if (!refs.contains(ref.getSource()))
+ {
+ refs.add(ref.getSource());
+ }
}
}
+ // looks like copy and paste - change rfs to xrs?
+ // for (int r = 0; rfs != null && r < rfs.length; r++)
+ // {
+ // if (!refs.contains(rfs[r].getSource()))
+ // {
+ // refs.add(rfs[r].getSource());
+ // }
+ // }
}
}
}
return dbrefs;
}
- /*
- * if (dna) { if (rfs[r].hasMap()) { // most likely this is a protein cross
- * reference if (!refs.contains(rfs[r].getSource())) {
- * refs.addElement(rfs[r].getSource()); } } }
- */
public static boolean hasCdnaMap(SequenceI[] seqs)
{
+ // TODO unused - remove?
String[] reftypes = findSequenceXrefTypes(false, seqs);
for (int s = 0; s < reftypes.length; s++)
{
public static SequenceI[] getCdnaMap(SequenceI[] seqs)
{
+ // TODO unused - remove?
Vector cseqs = new Vector();
for (int s = 0; s < seqs.length; s++)
{
/**
*
- * @param dna
- * @param seqs
- * @return
- */
- public static Alignment findXrefSequences(SequenceI[] seqs, boolean dna,
- String source)
- {
- return findXrefSequences(seqs, dna, source, null);
- }
-
- /**
- *
* @param seqs
+ * sequences whose xrefs are being retrieved
* @param dna
+ * true if sequences are nucleotide
* @param source
- * @param dataset
- * alignment to search for product sequences.
+ * @param al
+ * alignment to search for cross-referenced sequences (and possibly
+ * add to)
* @return products (as dataset sequences)
*/
- public static Alignment findXrefSequences(SequenceI[] seqs, boolean dna,
- String source, AlignmentI dataset)
+ public static Alignment findXrefSequences(SequenceI[] seqs,
+ final boolean dna, final String source, AlignmentI al)
{
+ AlignmentI dataset = al.getDataset() == null ? al : al.getDataset();
List<SequenceI> rseqs = new ArrayList<SequenceI>();
- Alignment ral = null;
- AlignedCodonFrame cf = new AlignedCodonFrame(); // nominal width
- for (int s = 0; s < seqs.length; s++)
+ AlignedCodonFrame cf = new AlignedCodonFrame();
+ for (SequenceI seq : seqs)
{
- SequenceI dss = seqs[s];
+ SequenceI dss = seq;
while (dss.getDatasetSequence() != null)
{
dss = dss.getDatasetSequence();
if ((xrfs == null || xrfs.length == 0) && dataset != null)
{
System.out.println("Attempting to find ds Xrefs refs.");
- DBRefEntry[] lrfs = CrossRef.findXDbRefs(!dna, seqs[s].getDBRefs());
+ // FIXME should be dss not seq here?
+ DBRefEntry[] lrfs = CrossRef.findXDbRefs(!dna, seq.getDBRefs());
// less ambiguous would be a 'find primary dbRefEntry' method.
// filter for desired source xref here
found = CrossRef.searchDatasetXrefs(dss, !dna, lrfs, dataset,
}
for (int r = 0; xrfs != null && r < xrfs.length; r++)
{
- if (source != null && !source.equals(xrfs[r].getSource()))
+ DBRefEntry xref = xrfs[r];
+ if (source != null && !source.equals(xref.getSource()))
{
continue;
}
- if (xrfs[r].hasMap())
+ if (xref.hasMap())
{
- if (xrfs[r].getMap().getTo() != null)
+ if (xref.getMap().getTo() != null)
{
- SequenceI rsq = new Sequence(xrfs[r].getMap().getTo());
+ SequenceI rsq = new Sequence(xref.getMap().getTo());
rseqs.add(rsq);
- if (xrfs[r].getMap().getMap().getFromRatio() != xrfs[r]
+ if (xref.getMap().getMap().getFromRatio() != xref
.getMap().getMap().getToRatio())
{
// get sense of map correct for adding to product alignment.
if (dna)
{
// map is from dna seq to a protein product
- cf.addMap(dss, rsq, xrfs[r].getMap().getMap());
+ cf.addMap(dss, rsq, xref.getMap().getMap());
}
else
{
// map should be from protein seq to its coding dna
- cf.addMap(rsq, dss, xrfs[r].getMap().getMap().getInverse());
+ cf.addMap(rsq, dss, xref.getMap().getMap().getInverse());
}
}
found = true;
// xrefs on this sequence.
if (dataset != null)
{
- found |= searchDataset(dss, xrfs[r], dataset, rseqs, cf); // ,false,!dna);
+ found |= searchDataset(dss, xref, dataset, rseqs, cf, false,
+ !dna);
if (found)
{
xrfs[r] = null; // we've recovered seqs for this one.
}
if (l > 0)
{
- System.out
- .println("Attempting to retrieve cross referenced sequences.");
+ // System.out
+ // .println("Attempting to retrieve cross referenced sequences.");
DBRefEntry[] t = new DBRefEntry[l];
l = 0;
for (int r = 0; r < xrfs.length; r++)
xrfs = t;
try
{
- retrieved = sftch.getSequences(xrfs); // problem here is we don't
- // know which of xrfs
- // resulted in which
+ retrieved = sftch.getSequences(xrfs, !dna);
+ // problem here is we don't know which of xrfs resulted in which
// retrieved element
} catch (Exception e)
{
System.err
.println("Problem whilst retrieving cross references for Sequence : "
- + seqs[s].getName());
+ + seq.getName());
e.printStackTrace();
}
+
if (retrieved != null)
{
+ updateDbrefMappings(dna, seq, xrfs, retrieved, cf);
+
+ SequenceIdMatcher matcher = new SequenceIdMatcher(
+ dataset.getSequences());
+ List<SequenceFeature> copiedFeatures = new ArrayList<SequenceFeature>();
+ CrossRef me = new CrossRef();
for (int rs = 0; rs < retrieved.length; rs++)
{
// TODO: examine each sequence for 'redundancy'
- jalview.datamodel.DBRefEntry[] dbr = retrieved[rs]
- .getDBRefs();
+ DBRefEntry[] dbr = retrieved[rs].getDBRefs();
if (dbr != null && dbr.length > 0)
{
for (int di = 0; di < dbr.length; di++)
{
// find any entry where we should put in the sequence being
// cross-referenced into the map
- jalview.datamodel.Mapping map = dbr[di].getMap();
+ Mapping map = dbr[di].getMap();
if (map != null)
{
if (map.getTo() != null && map.getMap() != null)
{
- // should search the local dataset to find any existing
- // candidates for To !
+ SequenceI matched = matcher
+ .findIdMatch(map.getTo());
+ if (matched != null)
+ {
+ /*
+ * already got an xref to this sequence; update this
+ * map to point to the same sequence, and add
+ * any new dbrefs to it
+ */
+ for (DBRefEntry ref : map.getTo().getDBRefs())
+ {
+ matched.addDBRef(ref); // add or update mapping
+ }
+ map.setTo(matched);
+ }
+ else
+ {
+ matcher.add(map.getTo());
+ }
try
{
// compare ms with dss and replace with dss in mapping
int sf = map.getMap().getToLowest();
int st = map.getMap().getToHighest();
SequenceI mappedrg = ms.getSubSequence(sf, st);
- SequenceI loc = dss.getSubSequence(sf, st);
+ // SequenceI loc = dss.getSubSequence(sf, st);
if (mappedrg.getLength() > 0
- && mappedrg.getSequenceAsString().equals(
- loc.getSequenceAsString()))
+ && ms.getSequenceAsString().equals(
+ dss.getSequenceAsString()))
+ // && mappedrg.getSequenceAsString().equals(
+ // loc.getSequenceAsString()))
{
- System.err
- .println("Mapping updated for retrieved crossreference");
+ String msg = "Mapping updated from "
+ + ms.getName()
+ + " to retrieved crossreference "
+ + dss.getName();
+ System.out.println(msg);
// method to update all refs of existing To on
// retrieved sequence with dss and merge any props
// on To onto dss.
map.setTo(dss);
+ /*
+ * copy sequence features as well, avoiding
+ * duplication (e.g. same variation from 2
+ * transcripts)
+ */
+ SequenceFeature[] sfs = ms
+ .getSequenceFeatures();
+ if (sfs != null)
+ {
+ for (SequenceFeature feat : sfs)
+ {
+ /*
+ * we override SequenceFeature.equals here (but
+ * not elsewhere) to ignore Parent attribute
+ * TODO not quite working yet!
+ */
+ if (!copiedFeatures
+ .contains(me.new MySequenceFeature(
+ feat)))
+ {
+ dss.addSequenceFeature(feat);
+ copiedFeatures.add(feat);
+ }
+ }
+ }
+ cf.addMap(retrieved[rs].getDatasetSequence(),
+ dss, map.getMap());
+ }
+ else
+ {
+ cf.addMap(retrieved[rs].getDatasetSequence(),
+ map.getTo(), map.getMap());
}
} catch (Exception e)
{
}
}
}
+
+ Alignment ral = null;
if (rseqs.size() > 0)
{
- SequenceI[] rsqs = new SequenceI[rseqs.size()];
- rseqs.toArray(rsqs);
- ral = new Alignment(rsqs);
- if (cf != null && cf.getProtMappings() != null)
+ ral = new Alignment(rseqs.toArray(new SequenceI[rseqs.size()]));
+ if (cf != null && !cf.isEmpty())
{
ral.addCodonFrame(cf);
}
}
/**
+ * Updates any empty mappings in the cross-references with one to a compatible
+ * retrieved sequence if found, and adds any new mappings to the
+ * AlignedCodonFrame
+ *
+ * @param dna
+ * @param mapFrom
+ * @param xrefs
+ * @param retrieved
+ * @param acf
+ */
+ static void updateDbrefMappings(boolean dna, SequenceI mapFrom,
+ DBRefEntry[] xrefs, SequenceI[] retrieved, AlignedCodonFrame acf)
+ {
+ SequenceIdMatcher matcher = new SequenceIdMatcher(retrieved);
+ for (DBRefEntry xref : xrefs)
+ {
+ if (!xref.hasMap())
+ {
+ String targetSeqName = xref.getSource() + "|"
+ + xref.getAccessionId();
+ SequenceI[] matches = matcher.findAllIdMatches(targetSeqName);
+ if (matches == null)
+ {
+ return;
+ }
+ for (SequenceI seq : matches)
+ {
+ MapList mapping = null;
+ if (dna)
+ {
+ mapping = AlignmentUtils.mapCdnaToProtein(seq, mapFrom);
+ }
+ else
+ {
+ mapping = AlignmentUtils.mapCdnaToProtein(mapFrom, seq);
+ if (mapping != null)
+ {
+ mapping = mapping.getInverse();
+ }
+ }
+ if (mapping != null)
+ {
+ xref.setMap(new Mapping(seq, mapping));
+ if (dna)
+ {
+ AlignmentUtils.computeProteinFeatures(mapFrom, seq, mapping);
+ }
+ if (dna)
+ {
+ acf.addMap(mapFrom, seq, mapping);
+ }
+ else
+ {
+ acf.addMap(seq, mapFrom, mapping.getInverse());
+ }
+ continue;
+ }
+ }
+ }
+ }
+ }
+
+ /**
* find references to lrfs in the cross-reference set of each sequence in
* dataset (that is not equal to sequenceI) Identifies matching DBRefEntry
* based on source and accession string only - Map and Version are nulled.
}
}
}
+
+ /**
+ * Returns an alignment consisting of the reversed (and optionally
+ * complemented) sequences set in this object's constructor
+ *
+ * @param complement
+ * @return
+ */
+ public AlignmentI reverseCdna(boolean complement)
+ {
+ int sSize = selection.size();
+ List<SequenceI> reversed = new ArrayList<SequenceI>();
+ for (int s = 0; s < sSize; s++)
+ {
+ SequenceI newseq = reverseSequence(selection.get(s).getName(),
+ seqstring[s], complement);
+
+ if (newseq != null)
+ {
+ reversed.add(newseq);
+ }
+ }
+
+ SequenceI[] newseqs = reversed.toArray(new SequenceI[reversed.size()]);
+ AlignmentI al = new Alignment(newseqs);
+ ((Alignment) al).createDatasetAlignment();
+ return al;
+ }
+
+ /**
+ * Returns a reversed, and optionally complemented, sequence. The new
+ * sequence's name is the original name with "|rev" or "|revcomp" appended.
+ * aAcCgGtT and DNA ambiguity codes are complemented, any other characters are
+ * left unchanged.
+ *
+ * @param seq
+ * @param complement
+ * @return
+ */
+ public static SequenceI reverseSequence(String seqName, String sequence,
+ boolean complement)
+ {
+ String newName = seqName + "|rev" + (complement ? "comp" : "");
+ char[] originalSequence = sequence.toCharArray();
+ int length = originalSequence.length;
+ char[] reversedSequence = new char[length];
+
+ for (int i = 0; i < length; i++)
+ {
+ reversedSequence[length - i - 1] = complement ? getComplement(originalSequence[i])
+ : originalSequence[i];
+ }
+ SequenceI reversed = new Sequence(newName, reversedSequence, 1, length);
+ return reversed;
+ }
+
+ /**
+ * Returns dna complement (preserving case) for aAcCgGtTuU. Ambiguity codes
+ * are treated as on http://reverse-complement.com/. Anything else is left
+ * unchanged.
+ *
+ * @param c
+ * @return
+ */
+ public static char getComplement(char c)
+ {
+ char result = c;
+ switch (c) {
+ case 'a':
+ result = 't';
+ break;
+ case 'A':
+ result = 'T';
+ break;
+ case 'c':
+ result = 'g';
+ break;
+ case 'C':
+ result = 'G';
+ break;
+ case 'g':
+ result = 'c';
+ break;
+ case 'G':
+ result = 'C';
+ break;
+ case 't':
+ result = 'a';
+ break;
+ case 'T':
+ result = 'A';
+ break;
+ case 'u':
+ result = 'a';
+ break;
+ case 'U':
+ result = 'A';
+ break;
+ case 'r':
+ result = 'y';
+ break;
+ case 'R':
+ result = 'Y';
+ break;
+ case 'y':
+ result = 'r';
+ break;
+ case 'Y':
+ result = 'R';
+ break;
+ case 'k':
+ result = 'm';
+ break;
+ case 'K':
+ result = 'M';
+ break;
+ case 'm':
+ result = 'k';
+ break;
+ case 'M':
+ result = 'K';
+ break;
+ case 'b':
+ result = 'v';
+ break;
+ case 'B':
+ result = 'V';
+ break;
+ case 'v':
+ result = 'b';
+ break;
+ case 'V':
+ result = 'B';
+ break;
+ case 'd':
+ result = 'h';
+ break;
+ case 'D':
+ result = 'H';
+ break;
+ case 'h':
+ result = 'd';
+ break;
+ case 'H':
+ result = 'D';
+ break;
+ }
+
+ return result;
+ }
}
sfeat.addElement(sfarray[i]);
}
}
- sqinfo.put("SeqFeatures", sfeat);
- sqinfo.put("PdbId",
+ if (seq.getDatasetSequence() == null)
+ {
+ sqinfo.put("SeqFeatures", sfeat);
+ sqinfo.put("PdbId",
(seq.getAllPDBEntries() != null) ? seq.getAllPDBEntries()
: new Vector<PDBEntry>());
- sqinfo.put("datasetSequence",
+ }
+ else
+ {
+ sqinfo.put("datasetSequence",
(seq.getDatasetSequence() != null) ? seq.getDatasetSequence()
: new Sequence("THISISAPLACEHOLDER", ""));
+ }
return sqinfo;
}
&& !(seqds.getName().equals("THISISAPLACEHOLDER") && seqds
.getLength() == 0))
{
+ if (sfeatures!=null)
+ {
+ System.err
+ .println("Implementation error: setting dataset sequence for a sequence which has sequence features.\n\tDataset sequence features will not be visible.");
+ }
sq.setDatasetSequence(seqds);
}
}
/**
- * add more sequences to this matcher - also used by the constructor
+ * Adds sequences to this matcher
*
* @param seqs
*/
{
for (SequenceI seq : seqs)
{
- // TODO: deal with ID collisions - SequenceI should be appended to list
- // associated with this key.
- names.put(new SeqIdName(seq.getDisplayId(true)), seq);
- SequenceI dbseq = seq;
- while (dbseq.getDatasetSequence() != null)
- {
- dbseq = dbseq.getDatasetSequence();
- }
- // add in any interesting identifiers
- if (dbseq.getDBRefs() != null)
+ add(seq);
+ }
+ }
+
+ /**
+ * Adds one sequence to this matcher
+ *
+ * @param seq
+ */
+ public void add(SequenceI seq)
+ {
+ // TODO: deal with ID collisions - SequenceI should be appended to list
+ // associated with this key.
+ names.put(new SeqIdName(seq.getDisplayId(true)), seq);
+ SequenceI dbseq = seq;
+ while (dbseq.getDatasetSequence() != null)
+ {
+ dbseq = dbseq.getDatasetSequence();
+ }
+ // add in any interesting identifiers
+ if (dbseq.getDBRefs() != null)
+ {
+ DBRefEntry dbr[] = dbseq.getDBRefs();
+ SeqIdName sid = null;
+ for (int r = 0; r < dbr.length; r++)
{
- DBRefEntry dbr[] = dbseq.getDBRefs();
- SeqIdName sid = null;
- for (int r = 0; r < dbr.length; r++)
+ sid = new SeqIdName(dbr[r].getAccessionId());
+ if (!names.containsKey(sid))
{
- sid = new SeqIdName(dbr[r].getAccessionId());
- if (!names.containsKey(sid))
- {
- names.put(sid, seq);
- }
+ names.put(sid, seq);
}
}
}
return r;
}
- private class SeqIdName
+ class SeqIdName
{
String id;
}
if (s instanceof SeqIdName)
{
- return this.equals((SeqIdName) s);
+ return this.equals(((SeqIdName) s).id);
}
else
{
* todo: (JBPNote) Set separator characters appropriately
*
* @param s
- * SeqIdName
* @return boolean
*/
- public boolean equals(SeqIdName s)
- {
- // TODO: JAL-732 patch for cases when name includes a list of IDs, and the
- // match contains one ID flanked
- if (id.length() > s.id.length())
- {
- return id.startsWith(s.id) ? (WORD_SEP.indexOf(id.charAt(s.id
- .length())) > -1) : false;
- }
- else
- {
- return s.id.startsWith(id) ? (s.id.equals(id) ? true : (WORD_SEP
- .indexOf(s.id.charAt(id.length())) > -1)) : false;
- }
- }
-
public boolean equals(String s)
{
if (id.length() > s.length())
import jalview.api.analysis.ScoreModelI;
import jalview.api.analysis.ViewBasedAnalysisI;
import jalview.datamodel.AlignmentView;
+import jalview.datamodel.SeqCigar;
import jalview.datamodel.SequenceFeature;
-import jalview.datamodel.SequenceI;
-import jalview.util.Comparison;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;
public float[][] findDistances(AlignmentView seqData)
{
int nofeats = 0;
- List<String> dft = Arrays.asList(fr.getDisplayedFeatureTypes());
-
- if (dft != null)
- {
- nofeats = dft.size();
- }
-
- SequenceI[] sequenceString = seqData.getVisibleAlignment(
- Comparison.GapChars.charAt(0)).getSequencesArray();
- int noseqs = sequenceString.length;
- int cpwidth = seqData.getWidth();
+ List<String> dft = fr.getDisplayedFeatureTypes();
+ nofeats = dft.size();
+ SeqCigar[] seqs = seqData.getSequences();
+ int noseqs = seqs.length;
+ int cpwidth = 0;// = seqData.getWidth();
float[][] distance = new float[noseqs][noseqs];
if (nofeats == 0)
{
}
return distance;
}
- float max = 0;
- for (int cpos = 0; cpos < cpwidth; cpos++)
+ // need to get real position for view position
+ int[] viscont = seqData.getVisibleContigs();
+ for (int vc = 0; vc < viscont.length; vc += 2)
{
- // get visible features at cpos under view's display settings and compare
- // them
- List<Hashtable<String, SequenceFeature>> sfap = new ArrayList<Hashtable<String, SequenceFeature>>();
- for (int i = 0; i < noseqs; i++)
- {
- Hashtable<String, SequenceFeature> types = new Hashtable<String, SequenceFeature>();
- List<SequenceFeature> sfs = fr.findFeaturesAtRes(sequenceString[i],
- sequenceString[i].findPosition(cpos));
- for (SequenceFeature sf : sfs)
- {
- types.put(sf.getType(), sf);
- }
- sfap.add(types);
- }
- for (int i = 0; i < (noseqs - 1); i++)
+
+ for (int cpos = viscont[vc]; cpos <= viscont[vc + 1]; cpos++)
{
- if (cpos == 0)
- {
- distance[i][i] = 0f;
- }
- for (int j = i + 1; j < noseqs; j++)
+ cpwidth++;
+ // get visible features at cpos under view's display settings and
+ // compare them
+ List<Hashtable<String, SequenceFeature>> sfap = new ArrayList<Hashtable<String, SequenceFeature>>();
+ for (int i = 0; i < noseqs; i++)
{
- int sfcommon = 0;
- // compare the two lists of features...
- Hashtable<String, SequenceFeature> fi = sfap.get(i), fk, fj = sfap
- .get(j);
- if (fi.size() > fj.size())
+ Hashtable<String, SequenceFeature> types = new Hashtable<String, SequenceFeature>();
+ int spos = seqs[i].findPosition(cpos);
+ if (spos != -1)
{
- fk = fj;
+ List<SequenceFeature> sfs = fr.findFeaturesAtRes(
+ seqs[i].getRefSeq(), spos);
+ for (SequenceFeature sf : sfs)
+ {
+ types.put(sf.getType(), sf);
+ }
}
- else
+ sfap.add(types);
+ }
+ for (int i = 0; i < (noseqs - 1); i++)
+ {
+ if (cpos == 0)
{
- fk = fi;
- fi = fj;
+ distance[i][i] = 0f;
}
- for (String k : fi.keySet())
+ for (int j = i + 1; j < noseqs; j++)
{
- SequenceFeature sfj = fk.get(k);
- if (sfj != null)
+ int sfcommon = 0;
+ // compare the two lists of features...
+ Hashtable<String, SequenceFeature> fi = sfap.get(i), fk, fj = sfap
+ .get(j);
+ if (fi.size() > fj.size())
{
- sfcommon++;
+ fk = fj;
}
+ else
+ {
+ fk = fi;
+ fi = fj;
+ }
+ for (String k : fi.keySet())
+ {
+ SequenceFeature sfj = fk.get(k);
+ if (sfj != null)
+ {
+ sfcommon++;
+ }
+ }
+ distance[i][j] += (fi.size() + fk.size() - 2f * sfcommon);
+ distance[j][i] += distance[i][j];
}
- distance[i][j] += (fi.size() + fk.size() - 2f * sfcommon);
- distance[j][i] += distance[i][j];
}
}
}
return true;
}
+ @Override
public String toString()
{
return "Score between sequences based on hamming distance between binary vectors marking features displayed at each column";
import jalview.datamodel.AlignmentAnnotation;
+/**
+ * Interface describing a worker that calculates alignment annotation(s). The
+ * main (re-)calculation should be performed by the inherited run() method.
+ */
public interface AlignCalcWorkerI extends Runnable
{
-
+ /**
+ * Answers true if this worker updates the given annotation (regardless of its
+ * current state)
+ *
+ * @param annot
+ * @return
+ */
public boolean involves(AlignmentAnnotation annot);
+ /**
+ * Updates the display of calculated annotation values (does not recalculate
+ * the values). This allows for quick redraw of annotations when display
+ * settings are changed.
+ */
public void updateAnnotation();
- void removeOurAnnotation();
+ /**
+ * Removes any annotation managed by this worker from the alignment
+ */
+ void removeAnnotation();
}
*/
package jalview.api;
+import java.util.List;
+
/**
* prototype abstract controller for a Jalview alignment view
*
* @return true if operation affected state
*/
boolean markColumnsContainingFeatures(boolean invert,
- boolean extendCurrent, boolean clearColumns, String featureType);
+ boolean extendCurrent, boolean toggle, String featureType);
/**
* sort the alignment or current selection by average score over the given set
* @param typ
* list of feature names or null to use currently displayed features
*/
- void sortAlignmentByFeatureScore(String[] typ);
+ void sortAlignmentByFeatureScore(List<String> typ);
/**
* sort the alignment or current selection by distribution of the given set of
* @param typ
* list of feature names or null to use currently displayed features
*/
- void sortAlignmentByFeatureDensity(String[] typ);
+ void sortAlignmentByFeatureDensity(List<String> typ);
/**
* add a features file of some kind to the current view
* Set whether view should scroll to show the highlighted region of a sequence
*/
void setFollowHighlight(boolean b);
+
+ public void applyFeaturesStyle(FeatureSettingsModelI featureSettings);
}
package jalview.api;
+import jalview.datamodel.Mapping;
+
public interface DBRefEntryI
{
* @return index of end residue in the source DB
*/
public int getEndRes();
+
+ public Mapping getMap();
}
*/
boolean isGraduatedColour();
- void setGraduatedColour(boolean b);
-
/**
* Returns the feature colour (when isGraduatedColour answers false)
*
void setThreshold(float f);
+ /**
+ * Answers true if the colour varies between the actual minimum and maximum
+ * score values of the feature, or false if between absolute minimum and
+ * maximum values (or if not a graduated colour).
+ *
+ * @return
+ */
boolean isAutoScaled();
void setAutoScaled(boolean b);
List<SequenceFeature> findFeaturesAtRes(SequenceI sequence, int res);
/**
+ * get current displayed types, in ordering of rendering (on top last)
*
- * @return true if the rendering platform supports transparency
+ * @return a (possibly empty) list of feature types
*/
- boolean isTransparencyAvailable();
- /**
- * get current displayed types
- *
- * @return
- */
-
- String[] getDisplayedFeatureTypes();
+ List<String> getDisplayedFeatureTypes();
/**
* get current displayed groups
*
- * @return
+ * @return a (possibly empty) list of feature groups
*/
- String[] getDisplayedFeatureGroups();
+ List<String> getDisplayedFeatureGroups();
/**
* display all features of these types
+++ /dev/null
-package jalview.api;
-
-/**
- * An interface that describes the settings configurable in the Feature Settings
- * dialog.
- *
- * @author gmcarstairs
- *
- */
-public interface FeatureSettingsI
-{
- // note Java 8 will allow default implementations of these methods in the
- // interface, simplifying instantiating classes
-
- /**
- * Answers true if the specified feature type is displayed
- *
- * @param type
- * @return
- */
- boolean isFeatureDisplayed(String type);
-
- /**
- * Answers true if the specified feature group is displayed
- *
- * @param group
- * @return
- */
- boolean isGroupDisplayed(String group);
-
- /**
- * Returns the colour (or graduated colour) for the feature type, or null if
- * not known
- *
- * @param type
- * @return
- */
- FeatureColourI getFeatureColour(String type);
-
- /**
- * Returns the transparency value, from 0 (fully transparent) to 1 (fully
- * opaque)
- *
- * @return
- */
- float getTransparency();
-
- /**
- * Returns -1 if feature1 'precedes' (is displayed on top of) feature 2, +1 if
- * feature2 is on top of feature1, or 0 if we don't care
- *
- * @param feature1
- * @param feature2
- * @return
- */
- int compareTo(String feature1, String feature2);
-
- /**
- * Answers true if features should be initially sorted so that features with a
- * shorter average length are displayed on top of those with a longer average
- * length
- *
- * @return
- */
- boolean optimiseOrder();
-}
*/
package jalview.api;
-public interface FeatureSettingsModelI
+import java.util.Comparator;
+
+/**
+ * An interface that describes the settings configurable in the Feature Settings
+ * dialog.
+ *
+ * @author gmcarstairs
+ */
+public interface FeatureSettingsModelI extends Comparator<String>
{
+ // note Java 8 will allow default implementations of these methods in the
+ // interface, simplifying instantiating classes
+
+ /**
+ * Answers true if the specified feature type is displayed
+ *
+ * @param type
+ * @return
+ */
+ boolean isFeatureDisplayed(String type);
+
+ /**
+ * Answers true if the specified feature group is displayed
+ *
+ * @param group
+ * @return
+ */
+ boolean isGroupDisplayed(String group);
+
+ /**
+ * Returns the colour (or graduated colour) for the feature type, or null if
+ * not known
+ *
+ * @param type
+ * @return
+ */
+ FeatureColourI getFeatureColour(String type);
+
+ /**
+ * Returns the transparency value, from 0 (fully transparent) to 1 (fully
+ * opaque)
+ *
+ * @return
+ */
+ float getTransparency();
+
+ /**
+ * Returns -1 if feature1 is displayed before (below) feature 2, +1 if
+ * feature2 is displayed after (on top of) feature1, or 0 if we don't care.
+ *
+ * <br>
+ * Note that this is the opposite ordering to how features are displayed in
+ * the feature settings dialogue. FeatureRendererModel.setFeaturePriority
+ * takes care of converting between the two.
+ *
+ * @param feature1
+ * @param feature2
+ * @return
+ */
+ @Override
+ int compare(String feature1, String feature2);
+
+ /**
+ * Answers true if features should be initially sorted so that features with a
+ * shorter average length are displayed on top of those with a longer average
+ * length
+ *
+ * @return
+ */
+ boolean optimiseOrder();
+
}
int getVisibleFeatureCount();
- int getRegisterdFeaturesCount();
+ int getRegisteredFeaturesCount();
}
--- /dev/null
+package jalview.api;
+
+/**
+ * A tagging interface to mark a source of sequence features
+ */
+public interface FeaturesSourceI
+{
+}
public boolean parseFeaturesFile(String file, String type,
boolean autoenabledisplay)
{
- // TODO: test if importing a features file onto an alignment which already
- // has features with links overwrites the original links.
-
- Hashtable featureLinks = new Hashtable();
boolean featuresFile = false;
try
{
- featuresFile = new jalview.io.FeaturesFile(file, type).parse(viewport
- .getAlignment(), alignPanel.seqPanel.seqCanvas
- .getFeatureRenderer().getFeatureColours(), featureLinks,
- true, viewport.applet.getDefaultParameter("relaxedidmatch",
- false));
+ Map<String, FeatureColourI> colours = alignPanel.seqPanel.seqCanvas
+ .getFeatureRenderer().getFeatureColours();
+ boolean relaxedIdMatching = viewport.applet.getDefaultParameter(
+ "relaxedidmatch", false);
+ featuresFile = new FeaturesFile(file, type).parse(
+ viewport.getAlignment(), colours, true, relaxedIdMatching);
} catch (Exception ex)
{
ex.printStackTrace();
if (featuresFile)
{
- if (featureLinks.size() > 0)
- {
- alignPanel.seqPanel.seqCanvas.getFeatureRenderer().featureLinks = featureLinks;
- }
if (autoenabledisplay)
{
viewport.setShowSequenceFeatures(true);
public String outputFeatures(boolean displayTextbox, String format)
{
String features;
+ FeaturesFile formatter = new FeaturesFile();
if (format.equalsIgnoreCase("Jalview"))
{
- features = new FeaturesFile().printJalviewFormat(viewport
+ features = formatter.printJalviewFormat(viewport
.getAlignment().getSequencesArray(),
getDisplayedFeatureCols());
}
else
{
- features = new FeaturesFile().printGFFFormat(viewport.getAlignment()
+ features = formatter.printGffFormat(viewport.getAlignment()
.getSequencesArray(), getDisplayedFeatureCols());
}
import jalview.analysis.NJTree;
import jalview.api.AlignViewportI;
+import jalview.api.FeatureSettingsModelI;
import jalview.bin.JalviewLite;
import jalview.commands.CommandI;
import jalview.datamodel.AlignmentI;
private AnnotationColumnChooser annotationColumnSelectionState;
+ @Override
public void finalize()
{
applet = null;
return followSelection;
}
+ @Override
public void sendSelection()
{
getStructureSelectionManager().sendSelection(
.getStructureSelectionManager(applet);
}
- /**
- * synthesize a column selection if none exists so it covers the given
- * selection group. if wholewidth is false, no column selection is made if the
- * selection group covers the whole alignment width.
- *
- * @param sg
- * @param wholewidth
- */
- public void expandColSelection(SequenceGroup sg, boolean wholewidth)
- {
- int sgs, sge;
- if (sg != null
- && (sgs = sg.getStartRes()) >= 0
- && sg.getStartRes() <= (sge = sg.getEndRes())
- && (colSel == null || colSel.getSelected() == null || colSel
- .getSelected().size() == 0))
- {
- if (!wholewidth && alignment.getWidth() == (1 + sge - sgs))
- {
- // do nothing
- return;
- }
- if (colSel == null)
- {
- colSel = new ColumnSelection();
- }
- for (int cspos = sg.getStartRes(); cspos <= sg.getEndRes(); cspos++)
- {
- colSel.addElement(cspos);
- }
- }
- }
-
+ @Override
public boolean isNormaliseSequenceLogo()
{
return normaliseSequenceLogo;
*
* @return true if alignment characters should be displayed
*/
+ @Override
public boolean isValidCharWidth()
{
return validCharWidth;
}
}
+ /**
+ * Applies the supplied feature settings descriptor to currently known
+ * features. This supports an 'initial configuration' of feature colouring
+ * based on a preset or user favourite. This may then be modified in the usual
+ * way using the Feature Settings dialogue.
+ *
+ * @param featureSettings
+ */
+ @Override
+ public void applyFeaturesStyle(FeatureSettingsModelI featureSettings)
+ {
+ // TODO implement for applet
+ }
+
}
{
for (int sel : av.getColumnSelection().getSelected())
{
+ // TODO: JAL-2001 check if applet has faulty 'REMOVE' selected columns
+ // of
+ // annotation if selection includes hidden columns
anot[sel] = null;
}
}
for (int index : av.getColumnSelection().getSelected())
{
+ // TODO: JAL-2001 - provide a fast method to list visible selected
+ // columns
if (!av.getColumnSelection().isVisible(index))
{
continue;
import jalview.datamodel.SequenceI;
import jalview.io.AppletFormatAdapter;
import jalview.io.FileParse;
+import jalview.io.StructureFile;
import jalview.schemes.BuriedColourScheme;
import jalview.schemes.HelixColourScheme;
import jalview.schemes.HydrophobicColourScheme;
String alreadyMapped = StructureSelectionManager
.getStructureSelectionManager(ap.av.applet)
.alreadyMappedToFile(pdbentry.getId());
- MCview.PDBfile reader = null;
+ StructureFile reader = null;
if (alreadyMapped != null)
{
reader = StructureSelectionManager.getStructureSelectionManager(
this.addWindowListener(new WindowAdapter()
{
+ @Override
public void windowClosing(WindowEvent evt)
{
closeViewer();
this.setVisible(false);
}
+ @Override
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == mappingMenuItem)
jmb.setColourBySequence(itm == seqColour);
}
+ @Override
public void itemStateChanged(ItemEvent evt)
{
if (evt.getSource() == jmolColour)
}
}
+ @Override
public void keyPressed(KeyEvent evt)
{
if (evt.getKeyCode() == KeyEvent.VK_ENTER && scriptWindow.isVisible())
}
+ @Override
public void keyTyped(KeyEvent evt)
{
}
+ @Override
public void keyReleased(KeyEvent evt)
{
}
{
Dimension currentSize = new Dimension();
+ @Override
public void update(Graphics g)
{
paint(g);
}
+ @Override
public void paint(Graphics g)
{
currentSize = this.getSize();
import jalview.analysis.AlignmentUtils;
import jalview.api.ComplexAlignFile;
+import jalview.api.FeaturesSourceI;
import jalview.bin.JalviewLite;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.ColumnSelection;
addSequences.setVisible(false);
}
+ @Override
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == accept)
{
AlignmentI al = null;
- String format = new IdentifyFile().Identify(text,
+ String format = new IdentifyFile().identify(text,
AppletFormatAdapter.PASTE);
AppletFormatAdapter afa = new AppletFormatAdapter(alignFrame.alignPanel);
try
{
af = new AlignFrame(al, alignFrame.viewport.applet,
"Cut & Paste input - " + format, false);
+ if (source instanceof FeaturesSourceI)
+ {
+ af.getAlignViewport().setShowSequenceFeatures(true);
+ }
}
af.statusBar
this.add(textarea, java.awt.BorderLayout.CENTER);
}
+ @Override
public void mousePressed(MouseEvent evt)
{
if (textarea.getText().startsWith(
}
}
+ @Override
public void mouseReleased(MouseEvent evt)
{
}
+ @Override
public void mouseClicked(MouseEvent evt)
{
}
+ @Override
public void mouseEntered(MouseEvent evt)
{
}
+ @Override
public void mouseExited(MouseEvent evt)
{
}
{
super();
this.av = av;
-
- setTransparencyAvailable(!System.getProperty("java.version")
- .startsWith("1.1"));
}
static String lastFeatureAdded;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
+import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
transparency = new Scrollbar(Scrollbar.HORIZONTAL,
100 - (int) (fr.getTransparency() * 100), 1, 1, 100);
- if (fr.isTransparencyAvailable())
- {
- transparency.addAdjustmentListener(this);
- }
- else
- {
- transparency.setEnabled(false);
- }
+ transparency.addAdjustmentListener(this);
java.net.URL url = getClass().getResource("/images/link.gif");
if (url != null)
Panel tPanel = new Panel(new BorderLayout());
- if (fr.isTransparencyAvailable())
- {
- tPanel.add(transparency, BorderLayout.CENTER);
- tPanel.add(new Label("Transparency"), BorderLayout.EAST);
- }
- else
- {
- tPanel.add(
- new Label("Transparency not available in this web browser"),
- BorderLayout.CENTER);
- }
+ tPanel.add(transparency, BorderLayout.CENTER);
+ tPanel.add(new Label("Transparency"), BorderLayout.EAST);
lowerPanel.add(tPanel, BorderLayout.SOUTH);
final FeatureColourI typeCol = fr.getFeatureStyle(type);
PopupMenu men = new PopupMenu(MessageManager.formatMessage(
"label.settings_for_type", new String[] { type }));
- MenuItem scr = new MenuItem(
+ java.awt.MenuItem scr = new MenuItem(
MessageManager.getString("label.sort_by_score"));
men.add(scr);
final FeatureSettings me = this;
@Override
public void actionPerformed(ActionEvent e)
{
- me.ap.alignFrame.avc
- .sortAlignmentByFeatureScore(new String[] { type });
+ me.ap.alignFrame.avc.sortAlignmentByFeatureScore(Arrays
+ .asList(new String[] { type }));
}
});
@Override
public void actionPerformed(ActionEvent e)
{
- me.ap.alignFrame.avc
- .sortAlignmentByFeatureDensity(new String[] { type });
+ me.ap.alignFrame.avc.sortAlignmentByFeatureDensity(Arrays
+ .asList(new String[] { type }));
}
});
men.add(dens);
+
if (minmax != null)
{
final float[][] typeMinMax = minmax.get(type);
});
}
}
+
+ MenuItem selectContaining = new MenuItem(
+ MessageManager.getString("label.select_columns_containing"));
+ selectContaining.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ me.ap.alignFrame.avc.markColumnsContainingFeatures(false, false,
+ false, type);
+ }
+ });
+ men.add(selectContaining);
+
+ MenuItem selectNotContaining = new MenuItem(
+ MessageManager.getString("label.select_columns_not_containing"));
+ selectNotContaining.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ me.ap.alignFrame.avc.markColumnsContainingFeatures(true, false,
+ false, type);
+ }
+ });
+ men.add(selectNotContaining);
+
+ MenuItem hideContaining = new MenuItem(
+ MessageManager.getString("label.hide_columns_containing"));
+ hideContaining.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ hideFeatureColumns(type, true);
+ }
+ });
+ men.add(hideContaining);
+
+ MenuItem hideNotContaining = new MenuItem(
+ MessageManager.getString("label.hide_columns_not_containing"));
+ hideNotContaining.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ hideFeatureColumns(type, false);
+ }
+ });
+ men.add(hideNotContaining);
+
this.featurePanel.add(men);
men.show(this.featurePanel, x, y);
}
for (String group : fr.getFeatureGroups())
{
boolean vis = fr.checkGroupVisibility(group, false);
- Checkbox check = new MyCheckbox(group, vis,
- (fr.featureLinks != null && fr.featureLinks
- .containsKey(group)));
+ Checkbox check = new MyCheckbox(group, vis, false);
check.addMouseListener(this);
check.setFont(new Font("Serif", Font.BOLD, 12));
check.addItemListener(groupItemListener);
selected = true;
}
- check = new MyCheckbox(
- type,
- selected,
- (fr.featureLinks != null && fr.featureLinks.containsKey(type)),
+ check = new MyCheckbox(type, selected, false,
fr.getFeatureStyle(type));
check.addMouseListener(this);
boolean dragging = false;
@Override
- public void mousePressed(MouseEvent evt)
- {
-
- selectedCheck = (MyCheckbox) evt.getSource();
-
- if (fr.featureLinks != null
- && fr.featureLinks.containsKey(selectedCheck.type))
- {
- if (evt.getX() > selectedCheck.stringWidth + 20)
- {
- evt.consume();
- }
- }
-
- }
-
- @Override
public void mouseDragged(MouseEvent evt)
{
if (((Component) evt.getSource()).getParent() != featurePanel)
{
this.popupSort(check, fr.getMinMax(), evt.getX(), evt.getY());
}
- if (fr.featureLinks != null && fr.featureLinks.containsKey(check.type))
- {
- if (evt.getX() > check.stringWidth + 20)
- {
- evt.consume();
- String link = fr.featureLinks.get(check.type).toString();
- ap.alignFrame.showURL(link.substring(link.indexOf("|") + 1),
- link.substring(0, link.indexOf("|")));
- }
- }
if (check.getParent() != featurePanel)
{
}
}
+ /**
+ * Hide columns containing (or not containing) a given feature type
+ *
+ * @param type
+ * @param columnsContaining
+ */
+ void hideFeatureColumns(final String type,
+ boolean columnsContaining)
+ {
+ if (ap.alignFrame.avc.markColumnsContainingFeatures(
+ columnsContaining, false, false, type))
+ {
+ if (ap.alignFrame.avc.markColumnsContainingFeatures(
+ !columnsContaining, false, false, type))
+ {
+ ap.alignFrame.viewport.hideSelectedColumns();
+ }
+ }
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
}
repaint();
}
+ @Override
public void update(Graphics g)
{
paint(g);
}
+ @Override
public void paint(Graphics g)
{
if (getSize().height < 0 || getSize().width < 0)
Font bold = new Font(av.getFont().getName(), Font.BOLD, av.getFont()
.getSize());
- if (av.isHiddenRepSequence(seq))
+ if (av.isReferenceSeq(seq) || av.isHiddenRepSequence(seq))
{
gg.setFont(bold);
return true;
int avcharWidth = av.getCharWidth(), avcharHeight = av.getCharHeight();
for (int sel : cs.getSelected())
{
+ // TODO: JAL-2001 - provide a fast method to list visible selected in a
+ // given range
if (av.hasHiddenColumns())
{
sel = av.getColumnSelection().findColumnPosition(sel);
gg.setColor(Color.black);
int scalestartx = (startx / 10) * 10;
+ int widthx = 1 + endx - startx;
FontMetrics fm = gg.getFontMetrics(av.getFont());
int y = avcharHeight - fm.getDescent();
res = av.getColumnSelection().findHiddenRegionPosition(i)
- startx;
- if (res < 0 || res > endx - scalestartx)
+ if (res < 0 || res > widthx)
{
continue;
}
* at 0). NOTE 1: The av limits are set in setFont in this class and in the
* adjustment listener in SeqPanel when the scrollbars move.
*/
+ @Override
public void update(Graphics g)
{
paint(g);
g1.translate(-screenY * avcharWidth, 0);
screenY += blockEnd - blockStart + 1;
blockStart = hideEnd + 1;
+
+ if (screenY > (endRes - startRes))
+ {
+ // already rendered last block
+ return;
+ }
}
}
if (screenY <= (endRes - startRes))
{
+ // remaining visible region to render
blockEnd = blockStart + (endRes - startRes) - screenY;
g1.translate(screenY * avcharWidth, 0);
draw(g1, blockStart, blockEnd, startSeq, endSeq, offset);
*/
package jalview.bin;
+import jalview.datamodel.DBRefSource;
+import jalview.ws.dbsources.Pdb;
import jalview.ws.dbsources.das.api.DasSourceRegistryI;
import jalview.ws.dbsources.das.datamodel.DasSourceRegistry;
import jalview.ws.sifts.SiftsSettings;
private final static String DEFAULT_FAIL_SAFE_PID_THRESHOLD = "30";
+ private final static String DEFAULT_STRUCTURE_FORMAT = DBRefSource.PDB;
+
/**
* Initialises the Jalview Application Log
*/
System.out
.println("Jalview Version: " + codeVersion + codeInstallation);
+ Pdb.setCurrentDefaultFomart(jalview.bin.Cache.getDefault(
+ "DEFAULT_STRUCTURE_FORMAT", DEFAULT_STRUCTURE_FORMAT));
// jnlpVersion will be null if we're using InstallAnywhere
// Dont do this check if running in headless mode
if (jnlpVersion == null
import java.util.Vector;
import javax.swing.UIManager;
-import javax.swing.UnsupportedLookAndFeelException;
/**
* Main class for Jalview Application <br>
// grab all the rights we can the JVM
Policy.setPolicy(new Policy()
{
+ @Override
public PermissionCollection getPermissions(CodeSource codesource)
{
Permissions perms = new Permissions();
return (perms);
}
+ @Override
public void refresh()
{
}
*/
public static void main(String[] args)
{
+ System.setSecurityManager(null);
System.out.println("Java version: "
+ System.getProperty("java.version"));
System.out.println(System.getProperty("os.arch") + " "
} catch (Exception ex)
{
}
- if (new Platform().isAMac())
+ if (Platform.isAMac())
{
System.setProperty("com.apple.mrj.application.apple.menu.about.name",
"Jalview");
{
UIManager.setLookAndFeel(ch.randelshofer.quaqua.QuaquaManager
.getLookAndFeel());
- } catch (UnsupportedLookAndFeelException e)
+ } catch (Throwable e)
{
- // TODO Auto-generated catch block
- e.printStackTrace();
+ System.err.println("Failed to set QuaQua look and feel: "
+ + e.toString());
}
}
protocol = jalview.io.AppletFormatAdapter.checkProtocol(file);
- format = new jalview.io.IdentifyFile().Identify(file, protocol);
+ format = new jalview.io.IdentifyFile().identify(file, protocol);
AlignFrame af = fileLoader.LoadFileWaitTillLoaded(file, protocol,
format);
{
// Execute the groovy script after we've done all the rendering stuff
// and before any images or figures are generated.
- if (jalview.bin.Cache.groovyJarsPresent())
- {
- System.out.println("Executing script " + groovyscript);
- executeGroovyScript(groovyscript, new Object[] { desktop, af });
-
- System.out.println("CMD groovy[" + groovyscript
- + "] executed successfully!");
- }
- else
- {
- System.err
- .println("Sorry. Groovy Support is not available, so ignoring the provided groovy script "
- + groovyscript);
- }
+ System.out.println("Executing script " + groovyscript);
+ executeGroovyScript(groovyscript, new Object[] { desktop, af });
+ System.out.println("CMD groovy[" + groovyscript
+ + "] executed successfully!");
groovyscript = null;
}
String imageName = "unnamed.png";
}
else
{
- format = new jalview.io.IdentifyFile().Identify(file, protocol);
+ format = new jalview.io.IdentifyFile().identify(file, protocol);
}
startUpAlframe = fileLoader.LoadFileWaitTillLoaded(file, protocol,
+ "\n\n(you can enable or disable usage tracking in the preferences)",
new Runnable()
{
+ @Override
public void run()
{
Cache.log
}
}, new Runnable()
{
+ @Override
public void run()
{
Cache.log.debug("Not enabling Google Tracking.");
class rnabuttonlistener implements ActionListener
{
+ @Override
public void actionPerformed(ActionEvent arg0)
{
System.out.println("Good idea ! ");
class pbuttonlistener implements ActionListener
{
+ @Override
public void actionPerformed(ActionEvent arg0)
{
new Thread(new Runnable()
{
+ @Override
public void run()
{
synchronized (us)
*
* @see jalview.bin.JalviewLiteJsApi#getSelectedSequences()
*/
+ @Override
public String getSelectedSequences()
{
return getSelectedSequencesFrom(getDefaultTargetFrame());
*
* @see jalview.bin.JalviewLiteJsApi#getSelectedSequences(java.lang.String)
*/
+ @Override
public String getSelectedSequences(String sep)
{
return getSelectedSequencesFrom(getDefaultTargetFrame(), sep);
* jalview.bin.JalviewLiteJsApi#getSelectedSequencesFrom(jalview.appletgui
* .AlignFrame)
*/
+ @Override
public String getSelectedSequencesFrom(AlignFrame alf)
{
return getSelectedSequencesFrom(alf, separator); // ""+0x00AC);
* jalview.bin.JalviewLiteJsApi#getSelectedSequencesFrom(jalview.appletgui
* .AlignFrame, java.lang.String)
*/
+ @Override
public String getSelectedSequencesFrom(AlignFrame alf, String sep)
{
StringBuffer result = new StringBuffer("");
* @see jalview.bin.JalviewLiteJsApi#highlight(java.lang.String,
* java.lang.String, java.lang.String)
*/
+ @Override
public void highlight(String sequenceId, String position,
String alignedPosition)
{
* @see jalview.bin.JalviewLiteJsApi#highlightIn(jalview.appletgui.AlignFrame,
* java.lang.String, java.lang.String, java.lang.String)
*/
+ @Override
public void highlightIn(final AlignFrame alf, final String sequenceId,
final String position, final String alignedPosition)
{
* @see jalview.bin.JalviewLiteJsApi#select(java.lang.String,
* java.lang.String)
*/
+ @Override
public void select(String sequenceIds, String columns)
{
selectIn(getDefaultTargetFrame(), sequenceIds, columns, separator);
* @see jalview.bin.JalviewLiteJsApi#select(java.lang.String,
* java.lang.String, java.lang.String)
*/
+ @Override
public void select(String sequenceIds, String columns, String sep)
{
selectIn(getDefaultTargetFrame(), sequenceIds, columns, sep);
* @see jalview.bin.JalviewLiteJsApi#selectIn(jalview.appletgui.AlignFrame,
* java.lang.String, java.lang.String)
*/
+ @Override
public void selectIn(AlignFrame alf, String sequenceIds, String columns)
{
selectIn(alf, sequenceIds, columns, separator);
* @see jalview.bin.JalviewLiteJsApi#selectIn(jalview.appletgui.AlignFrame,
* java.lang.String, java.lang.String, java.lang.String)
*/
+ @Override
public void selectIn(final AlignFrame alf, String sequenceIds,
String columns, String sep)
{
if (csel != null)
{
List<Integer> cs = csel.getSelected();
+ // note - the following actually clears cs as well, since
+ // csel.getSelected returns a reference. Need to check if we need to
+ // have a concurrentModification exception thrown here
csel.clear();
for (Integer selectedCol : cs)
{
* jalview.bin.JalviewLiteJsApi#getSelectedSequencesAsAlignment(java.lang.
* String, java.lang.String)
*/
+ @Override
public String getSelectedSequencesAsAlignment(String format, String suffix)
{
return getSelectedSequencesAsAlignmentFrom(getDefaultTargetFrame(),
* jalview.bin.JalviewLiteJsApi#getSelectedSequencesAsAlignmentFrom(jalview
* .appletgui.AlignFrame, java.lang.String, java.lang.String)
*/
+ @Override
public String getSelectedSequencesAsAlignmentFrom(AlignFrame alf,
String format, String suffix)
{
*
* @see jalview.bin.JalviewLiteJsApi#getAlignmentOrder()
*/
+ @Override
public String getAlignmentOrder()
{
return getAlignmentOrderFrom(getDefaultTargetFrame());
* jalview.bin.JalviewLiteJsApi#getAlignmentOrderFrom(jalview.appletgui.AlignFrame
* )
*/
+ @Override
public String getAlignmentOrderFrom(AlignFrame alf)
{
return getAlignmentOrderFrom(alf, separator);
* jalview.bin.JalviewLiteJsApi#getAlignmentOrderFrom(jalview.appletgui.AlignFrame
* , java.lang.String)
*/
+ @Override
public String getAlignmentOrderFrom(AlignFrame alf, String sep)
{
AlignmentI alorder = alf.getAlignViewport().getAlignment();
* @see jalview.bin.JalviewLiteJsApi#orderBy(java.lang.String,
* java.lang.String)
*/
+ @Override
public String orderBy(String order, String undoName)
{
return orderBy(order, undoName, separator);
* @see jalview.bin.JalviewLiteJsApi#orderBy(java.lang.String,
* java.lang.String, java.lang.String)
*/
+ @Override
public String orderBy(String order, String undoName, String sep)
{
return orderAlignmentBy(getDefaultTargetFrame(), order, undoName, sep);
* jalview.bin.JalviewLiteJsApi#orderAlignmentBy(jalview.appletgui.AlignFrame,
* java.lang.String, java.lang.String, java.lang.String)
*/
+ @Override
public String orderAlignmentBy(AlignFrame alf, String order,
String undoName, String sep)
{
*
* @see jalview.bin.JalviewLiteJsApi#getAlignment(java.lang.String)
*/
+ @Override
public String getAlignment(String format)
{
return getAlignmentFrom(getDefaultTargetFrame(), format, TRUE);
* jalview.bin.JalviewLiteJsApi#getAlignmentFrom(jalview.appletgui.AlignFrame,
* java.lang.String)
*/
+ @Override
public String getAlignmentFrom(AlignFrame alf, String format)
{
return getAlignmentFrom(alf, format, TRUE);
* @see jalview.bin.JalviewLiteJsApi#getAlignment(java.lang.String,
* java.lang.String)
*/
+ @Override
public String getAlignment(String format, String suffix)
{
return getAlignmentFrom(getDefaultTargetFrame(), format, suffix);
* jalview.bin.JalviewLiteJsApi#getAlignmentFrom(jalview.appletgui.AlignFrame,
* java.lang.String, java.lang.String)
*/
+ @Override
public String getAlignmentFrom(AlignFrame alf, String format,
String suffix)
{
*
* @see jalview.bin.JalviewLiteJsApi#loadAnnotation(java.lang.String)
*/
+ @Override
public void loadAnnotation(String annotation)
{
loadAnnotationFrom(getDefaultTargetFrame(), annotation);
* jalview.bin.JalviewLiteJsApi#loadAnnotationFrom(jalview.appletgui.AlignFrame
* , java.lang.String)
*/
+ @Override
public void loadAnnotationFrom(AlignFrame alf, String annotation)
{
if (new AnnotationFile().annotateAlignmentView(alf.getAlignViewport(),
*
* @see jalview.bin.JalviewLiteJsApi#loadAnnotation(java.lang.String)
*/
+ @Override
public void loadFeatures(String features, boolean autoenabledisplay)
{
loadFeaturesFrom(getDefaultTargetFrame(), features, autoenabledisplay);
* jalview.bin.JalviewLiteJsApi#loadAnnotationFrom(jalview.appletgui.AlignFrame
* , java.lang.String)
*/
+ @Override
public boolean loadFeaturesFrom(AlignFrame alf, String features,
boolean autoenabledisplay)
{
*
* @see jalview.bin.JalviewLiteJsApi#getFeatures(java.lang.String)
*/
+ @Override
public String getFeatures(String format)
{
return getFeaturesFrom(getDefaultTargetFrame(), format);
* jalview.bin.JalviewLiteJsApi#getFeaturesFrom(jalview.appletgui.AlignFrame,
* java.lang.String)
*/
+ @Override
public String getFeaturesFrom(AlignFrame alf, String format)
{
return alf.outputFeatures(false, format);
*
* @see jalview.bin.JalviewLiteJsApi#getAnnotation()
*/
+ @Override
public String getAnnotation()
{
return getAnnotationFrom(getDefaultTargetFrame());
* jalview.bin.JalviewLiteJsApi#getAnnotationFrom(jalview.appletgui.AlignFrame
* )
*/
+ @Override
public String getAnnotationFrom(AlignFrame alf)
{
return alf.outputAnnotations(false);
*
* @see jalview.bin.JalviewLiteJsApi#newView()
*/
+ @Override
public AlignFrame newView()
{
return newViewFrom(getDefaultTargetFrame());
*
* @see jalview.bin.JalviewLiteJsApi#newView(java.lang.String)
*/
+ @Override
public AlignFrame newView(String name)
{
return newViewFrom(getDefaultTargetFrame(), name);
*
* @see jalview.bin.JalviewLiteJsApi#newViewFrom(jalview.appletgui.AlignFrame)
*/
+ @Override
public AlignFrame newViewFrom(AlignFrame alf)
{
return alf.newView(null);
* @see jalview.bin.JalviewLiteJsApi#newViewFrom(jalview.appletgui.AlignFrame,
* java.lang.String)
*/
+ @Override
public AlignFrame newViewFrom(AlignFrame alf, String name)
{
return alf.newView(name);
* @see jalview.bin.JalviewLiteJsApi#loadAlignment(java.lang.String,
* java.lang.String)
*/
+ @Override
public AlignFrame loadAlignment(String text, String title)
{
AlignmentI al = null;
- String format = new IdentifyFile().Identify(text,
+ String format = new IdentifyFile().identify(text,
AppletFormatAdapter.PASTE);
try
{
*
* @see jalview.bin.JalviewLiteJsApi#setMouseoverListener(java.lang.String)
*/
+ @Override
public void setMouseoverListener(String listener)
{
setMouseoverListener(currentAlignFrame, listener);
* jalview.bin.JalviewLiteJsApi#setMouseoverListener(jalview.appletgui.AlignFrame
* , java.lang.String)
*/
+ @Override
public void setMouseoverListener(AlignFrame af, String listener)
{
if (listener != null)
*
* @see jalview.bin.JalviewLiteJsApi#setSelectionListener(java.lang.String)
*/
+ @Override
public void setSelectionListener(String listener)
{
setSelectionListener(null, listener);
* jalview.bin.JalviewLiteJsApi#setSelectionListener(jalview.appletgui.AlignFrame
* , java.lang.String)
*/
+ @Override
public void setSelectionListener(AlignFrame af, String listener)
{
if (listener != null)
* @see jalview.bin.JalviewLiteJsApi#setStructureListener(java.lang.String,
* java.lang.String)
*/
+ @Override
public void setStructureListener(String listener, String modelSet)
{
if (listener != null)
* jalview.bin.JalviewLiteJsApi#removeJavascriptListener(jalview.appletgui
* .AlignFrame, java.lang.String)
*/
+ @Override
public void removeJavascriptListener(AlignFrame af, String listener)
{
if (listener != null)
}
}
+ @Override
public void stop()
{
System.err.println("Applet " + getName() + " stop().");
tidyUp();
}
+ @Override
public void destroy()
{
System.err.println("Applet " + getName() + " destroy().");
* @see jalview.bin.JalviewLiteJsApi#mouseOverStructure(java.lang.String,
* java.lang.String, java.lang.String)
*/
+ @Override
public void mouseOverStructure(final String pdbResNum,
final String chain, final String pdbfile)
{
* jalview.bin.JalviewLiteJsApi#scrollViewToIn(jalview.appletgui.AlignFrame,
* java.lang.String, java.lang.String)
*/
+ @Override
public void scrollViewToIn(final AlignFrame alf, final String topRow,
final String leftHandColumn)
{
add(launcher);
launcher.addActionListener(new java.awt.event.ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
LoadingThread loader = new LoadingThread(file, file2,
frame.setTitle(title);
frame.addWindowListener(new WindowAdapter()
{
+ @Override
public void windowClosing(WindowEvent e)
{
if (frame instanceof AlignFrame)
frame.dispose();
}
+ @Override
public void windowActivated(WindowEvent e)
{
if (frame instanceof AlignFrame)
* @param g
* graphics context
*/
+ @Override
public void paint(Graphics g)
{
if (!fileFound)
{
private boolean running = false;
+ @Override
public void run()
{
if (running || checkedForJmol)
applet = _applet;
}
+ @Override
public void run()
{
LoadJmolThread jmolchecker = new LoadJmolThread();
return null;
}
String resolvedFile = resolveFileProtocol(fileParam);
- String format = new IdentifyFile().Identify(resolvedFile, protocol);
+ String format = new IdentifyFile().identify(resolvedFile, protocol);
dbgMsg("File identified as '" + format + "'");
AlignmentI al = null;
try
*
* @see jalview.bin.JalviewLiteJsApi#getFeatureGroups()
*/
+ @Override
public String getFeatureGroups()
{
String lst = arrayToSeparatorList(getDefaultTargetFrame()
* jalview.bin.JalviewLiteJsApi#getFeatureGroupsOn(jalview.appletgui.AlignFrame
* )
*/
+ @Override
public String getFeatureGroupsOn(AlignFrame alf)
{
String lst = arrayToSeparatorList(alf.getFeatureGroups());
*
* @see jalview.bin.JalviewLiteJsApi#getFeatureGroupsOfState(boolean)
*/
+ @Override
public String getFeatureGroupsOfState(boolean visible)
{
return arrayToSeparatorList(getDefaultTargetFrame()
* jalview.bin.JalviewLiteJsApi#getFeatureGroupsOfStateOn(jalview.appletgui
* .AlignFrame, boolean)
*/
+ @Override
public String getFeatureGroupsOfStateOn(AlignFrame alf, boolean visible)
{
return arrayToSeparatorList(alf.getFeatureGroupsOfState(visible));
* @see jalview.bin.JalviewLiteJsApi#setFeatureGroupStateOn(jalview.appletgui.
* AlignFrame, java.lang.String, boolean)
*/
+ @Override
public void setFeatureGroupStateOn(final AlignFrame alf,
final String groups, boolean state)
{
* @see jalview.bin.JalviewLiteJsApi#setFeatureGroupState(java.lang.String,
* boolean)
*/
+ @Override
public void setFeatureGroupState(String groups, boolean state)
{
setFeatureGroupStateOn(getDefaultTargetFrame(), groups, state);
*
* @see jalview.bin.JalviewLiteJsApi#getSeparator()
*/
+ @Override
public String getSeparator()
{
return separator;
*
* @see jalview.bin.JalviewLiteJsApi#setSeparator(java.lang.String)
*/
+ @Override
public void setSeparator(String separator)
{
if (separator == null || separator.length() < 1)
* @see jalview.bin.JalviewLiteJsApi#addPdbFile(jalview.appletgui.AlignFrame,
* java.lang.String, java.lang.String, java.lang.String)
*/
+ @Override
public boolean addPdbFile(AlignFrame alFrame, String sequenceId,
String pdbEntryString, String pdbFile)
{
return alignPdbStructures;
}
+ @Override
public void start()
{
// callInitCallback();
* @see jalview.bin.JalviewLiteJsApi#getJsMessage(java.lang.String,
* java.lang.String)
*/
+ @Override
public String getJsMessage(String messageclass, String viewId)
{
Hashtable<String, String[]> msgset = jsmessages.get(messageclass);
String format = getParameter("format");
if (format == null || format.length() == 0)
{
- format = new jalview.io.IdentifyFile().Identify(file, protocol);
+ format = new jalview.io.IdentifyFile().identify(file, protocol);
System.out.println("Format is " + format);
}
else
import jalview.util.MessageManager;
import java.awt.Color;
-import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;
ColumnSelection cs = viewport.getColumnSelection();
if (bs.cardinality() > 0 || invert)
{
+ boolean changed = false;
if (cs == null)
{
cs = new ColumnSelection();
{
if (!extendCurrent)
{
+ changed = !cs.isEmpty();
cs.clear();
}
}
{
if (ibs < 0 || i < ibs)
{
+ changed = true;
if (toggle && cs.contains(i))
{
cs.removeElement(i++);
for (int i = bs.nextSetBit(alStart); i >= alStart; i = bs
.nextSetBit(i + 1))
{
+ changed = true;
if (toggle && cs.contains(i))
{
cs.removeElement(i);
}
}
}
- viewport.setColumnSelection(cs);
- alignPanel.paintAlignment(true);
- avcg.setStatus(MessageManager.formatMessage(
- "label.view_controller_toggled_marked",
- new String[] {
- (toggle ? MessageManager.getString("label.toggled")
- : MessageManager.getString("label.marked")),
- (invert ? (Integer.valueOf((alw - alStart)
- - bs.cardinality()).toString()) : (Integer
- .valueOf(bs.cardinality()).toString())),
- featureType, Integer.valueOf(nseq).toString() }));
- return true;
+ if (changed)
+ {
+ viewport.setColumnSelection(cs);
+ alignPanel.paintAlignment(true);
+ avcg.setStatus(MessageManager.formatMessage(
+ "label.view_controller_toggled_marked",
+ new String[] {
+ (toggle ? MessageManager.getString("label.toggled")
+ : MessageManager.getString("label.marked")),
+ (invert ? (Integer.valueOf((alw - alStart)
+ - bs.cardinality()).toString()) : (Integer
+ .valueOf(bs.cardinality()).toString())),
+ featureType, Integer.valueOf(nseq).toString() }));
+ return true;
+ }
}
else
{
cs.clear();
alignPanel.paintAlignment(true);
}
- return false;
}
+ return false;
}
@Override
- public void sortAlignmentByFeatureDensity(String[] typ)
+ public void sortAlignmentByFeatureDensity(List<String> typ)
{
sortBy(typ, "Sort by Density", AlignmentSorter.FEATURE_DENSITY);
}
- protected void sortBy(String[] typ, String methodText, final String method)
+ protected void sortBy(List<String> typ, String methodText,
+ final String method)
{
FeatureRenderer fr = alignPanel.getFeatureRenderer();
- if (typ == null)
+ if (typ == null && fr != null)
{
- typ = fr == null ? null : fr.getDisplayedFeatureTypes();
+ typ = fr.getDisplayedFeatureTypes();
}
- String gps[] = null;
- gps = fr == null ? null : fr.getDisplayedFeatureGroups();
- if (typ != null)
+ List<String> gps = null;
+ if (fr != null)
{
- List<String> types = new ArrayList<String>();
- for (String displayed : typ)
- {
- if (displayed != null)
- {
- types.add(displayed);
- }
- }
- typ = new String[types.size()];
- types.toArray(typ);
- }
- if (gps != null)
- {
- List<String> grps = new ArrayList<String>();
-
- for (int i = 0; i < gps.length; i++)
- {
- if (gps[i] != null)
- {
- grps.add(gps[i]);
- }
- }
- gps = new String[grps.size()];
- grps.toArray(gps);
+ gps = fr.getDisplayedFeatureGroups();
}
AlignmentI al = viewport.getAlignment();
}
@Override
- public void sortAlignmentByFeatureScore(String[] typ)
+ public void sortAlignmentByFeatureScore(List<String> typ)
{
sortBy(typ, "Sort by Feature Score", AlignmentSorter.FEATURE_SCORE);
}
boolean featuresFile = false;
try
{
- featuresFile = new FeaturesFile(file, protocol).parse(viewport
+ featuresFile = new FeaturesFile(false, file, protocol).parse(viewport
.getAlignment().getDataset(), alignPanel.getFeatureRenderer()
.getFeatureColours(), false, relaxedIdMatching);
} catch (Exception ex)
*
* Example: in "G-AT-C-GA" the aligned codons are (0, 2, 3) and (5, 7, 8).
*
- * JBPComment: Is this useful anywhere other than jalview.analysis.Dna ?
- *
* @author gmcarstairs
*
*/
public final class AlignedCodon
{
+ // base 1 aligned sequence position (base 0)
public final int pos1;
+ // base 2 aligned sequence position (base 0)
public final int pos2;
+ // base 3 aligned sequence position (base 0)
public final int pos3;
+ // peptide aligned sequence position (base 0)
+ public final int peptideCol;
+
+ // peptide coded for by this codon
public final String product;
public AlignedCodon(int i, int j, int k)
{
- this(i, j, k, null);
+ this(i, j, k, null, 0);
}
- public AlignedCodon(int i, int j, int k, String prod)
+ public AlignedCodon(int i, int j, int k, String prod, int prodCol)
{
pos1 = i;
pos2 = j;
pos3 = k;
product = prod;
+ peptideCol = prodCol;
}
/**
public class AlignedCodonFrame
{
- /**
- * tied array of na Sequence objects.
+ /*
+ * Data bean to hold mappings from one sequence to another
*/
- private SequenceI[] dnaSeqs = null;
+ private class SequenceToSequenceMapping
+ {
+ private SequenceI fromSeq;
- /**
- * tied array of Mappings to protein sequence Objects and SequenceI[]
- * aaSeqs=null; MapLists where each maps from the corresponding dnaSeqs
- * element to corresponding aaSeqs element
- */
- private Mapping[] dnaToProt = null;
+ private Mapping mapping;
+
+ SequenceToSequenceMapping(SequenceI from, Mapping map)
+ {
+ this.fromSeq = from;
+ this.mapping = map;
+ }
+
+ /**
+ * Readable representation for debugging only, not guaranteed not to change
+ */
+ @Override
+ public String toString()
+ {
+ return String.format("From %s %s", fromSeq.getName(),
+ mapping.toString());
+ }
+ }
+
+ private List<SequenceToSequenceMapping> mappings;
/**
* Constructor
*/
public AlignedCodonFrame()
{
+ mappings = new ArrayList<SequenceToSequenceMapping>();
}
/**
*/
public void addMap(SequenceI dnaseq, SequenceI aaseq, MapList map)
{
- int nlen = 1;
- if (dnaSeqs != null)
- {
- nlen = dnaSeqs.length + 1;
- }
- SequenceI[] ndna = new SequenceI[nlen];
- Mapping[] ndtp = new Mapping[nlen];
- if (dnaSeqs != null)
- {
- System.arraycopy(dnaSeqs, 0, ndna, 0, dnaSeqs.length);
- System.arraycopy(dnaToProt, 0, ndtp, 0, dnaSeqs.length);
- }
- dnaSeqs = ndna;
- dnaToProt = ndtp;
- nlen--;
- dnaSeqs[nlen] = (dnaseq.getDatasetSequence() == null) ? dnaseq : dnaseq
- .getDatasetSequence();
- Mapping mp = new Mapping(map);
// JBPNote DEBUG! THIS !
// dnaseq.transferAnnotation(aaseq, mp);
// aaseq.transferAnnotation(dnaseq, new Mapping(map.getInverse()));
- mp.to = (aaseq.getDatasetSequence() == null) ? aaseq : aaseq
+
+ SequenceI fromSeq = (dnaseq.getDatasetSequence() == null) ? dnaseq
+ : dnaseq.getDatasetSequence();
+ SequenceI toSeq = (aaseq.getDatasetSequence() == null) ? aaseq : aaseq
.getDatasetSequence();
- dnaToProt[nlen] = mp;
+
+ /*
+ * if we already hold a mapping between these sequences, just add to it
+ */
+ for (SequenceToSequenceMapping ssm : mappings)
+ {
+ if (ssm.fromSeq == fromSeq && ssm.mapping.to == toSeq)
+ {
+ ssm.mapping.map.addMapList(map);
+ return;
+ }
+ }
+
+ /*
+ * otherwise, add a new sequence mapping
+ */
+ Mapping mp = new Mapping(toSeq, map);
+ mappings.add(new SequenceToSequenceMapping(fromSeq, mp));
}
public SequenceI[] getdnaSeqs()
{
- return dnaSeqs;
+ // TODO return a list instead?
+ // return dnaSeqs;
+ List<SequenceI> seqs = new ArrayList<SequenceI>();
+ for (SequenceToSequenceMapping ssm : mappings)
+ {
+ seqs.add(ssm.fromSeq);
+ }
+ return seqs.toArray(new SequenceI[seqs.size()]);
}
public SequenceI[] getAaSeqs()
{
- if (dnaToProt == null)
- {
- return null;
- }
- SequenceI[] sqs = new SequenceI[dnaToProt.length];
- for (int sz = 0; sz < dnaToProt.length; sz++)
+ // TODO not used - remove?
+ List<SequenceI> seqs = new ArrayList<SequenceI>();
+ for (SequenceToSequenceMapping ssm : mappings)
{
- sqs[sz] = dnaToProt[sz].to;
+ seqs.add(ssm.mapping.to);
}
- return sqs;
+ return seqs.toArray(new SequenceI[seqs.size()]);
}
public MapList[] getdnaToProt()
{
- if (dnaToProt == null)
+ List<MapList> maps = new ArrayList<MapList>();
+ for (SequenceToSequenceMapping ssm : mappings)
{
- return null;
- }
- MapList[] sqs = new MapList[dnaToProt.length];
- for (int sz = 0; sz < dnaToProt.length; sz++)
- {
- sqs[sz] = dnaToProt[sz].map;
+ maps.add(ssm.mapping.map);
}
- return sqs;
+ return maps.toArray(new MapList[maps.size()]);
}
public Mapping[] getProtMappings()
{
- return dnaToProt;
+ List<Mapping> maps = new ArrayList<Mapping>();
+ for (SequenceToSequenceMapping ssm : mappings)
+ {
+ maps.add(ssm.mapping);
+ }
+ return maps.toArray(new Mapping[maps.size()]);
}
/**
*/
public Mapping getMappingForSequence(SequenceI seq)
{
- if (dnaSeqs == null)
- {
- return null;
- }
SequenceI seqDs = seq.getDatasetSequence();
seqDs = seqDs != null ? seqDs : seq;
- for (int ds = 0; ds < dnaSeqs.length; ds++)
+ for (SequenceToSequenceMapping ssm : mappings)
{
- if (dnaSeqs[ds] == seqDs || dnaToProt[ds].to == seqDs)
+ if (ssm.fromSeq == seqDs || ssm.mapping.to == seqDs)
{
- return dnaToProt[ds];
+ return ssm.mapping;
}
}
return null;
*/
public SequenceI getAaForDnaSeq(SequenceI dnaSeqRef)
{
- if (dnaSeqs == null)
- {
- return null;
- }
SequenceI dnads = dnaSeqRef.getDatasetSequence();
- for (int ds = 0; ds < dnaSeqs.length; ds++)
+ for (SequenceToSequenceMapping ssm : mappings)
{
- if (dnaSeqs[ds] == dnaSeqRef || dnaSeqs[ds] == dnads)
+ if (ssm.fromSeq == dnaSeqRef || ssm.fromSeq == dnads)
{
- return dnaToProt[ds].to;
+ return ssm.mapping.to;
}
}
return null;
*/
public SequenceI getDnaForAaSeq(SequenceI aaSeqRef)
{
- if (dnaToProt == null)
- {
- return null;
- }
SequenceI aads = aaSeqRef.getDatasetSequence();
- for (int as = 0; as < dnaToProt.length; as++)
+ for (SequenceToSequenceMapping ssm : mappings)
{
- if (dnaToProt[as].to == aaSeqRef || dnaToProt[as].to == aads)
+ if (ssm.mapping.to == aaSeqRef || ssm.mapping.to == aads)
{
- return dnaSeqs[as];
+ return ssm.fromSeq;
}
}
return null;
public void markMappedRegion(SequenceI seq, int index,
SearchResults results)
{
- if (dnaToProt == null)
- {
- return;
- }
int[] codon;
SequenceI ds = seq.getDatasetSequence();
- for (int mi = 0; mi < dnaToProt.length; mi++)
+ for (SequenceToSequenceMapping ssm : mappings)
{
- if (dnaSeqs[mi] == seq || dnaSeqs[mi] == ds)
+ if (ssm.fromSeq == seq || ssm.fromSeq == ds)
{
- // DEBUG System.err.println("dna pos "+index);
- codon = dnaToProt[mi].map.locateInTo(index, index);
+ codon = ssm.mapping.map.locateInTo(index, index);
if (codon != null)
{
for (int i = 0; i < codon.length; i += 2)
{
- results.addResult(dnaToProt[mi].to, codon[i], codon[i + 1]);
+ results.addResult(ssm.mapping.to, codon[i], codon[i + 1]);
}
}
}
- else if (dnaToProt[mi].to == seq || dnaToProt[mi].to == ds)
+ else if (ssm.mapping.to == seq || ssm.mapping.to == ds)
{
- // DEBUG System.err.println("aa pos "+index);
{
- codon = dnaToProt[mi].map.locateInFrom(index, index);
+ codon = ssm.mapping.map.locateInFrom(index, index);
if (codon != null)
{
for (int i = 0; i < codon.length; i += 2)
{
- results.addResult(dnaSeqs[mi], codon[i], codon[i + 1]);
+ results.addResult(ssm.fromSeq, codon[i], codon[i + 1]);
}
}
}
* Adapted from markMappedRegion().
*/
MapList ml = null;
- for (int i = 0; i < dnaToProt.length; i++)
+ int i = 0;
+ for (SequenceToSequenceMapping ssm : mappings)
{
- if (dnaSeqs[i] == seq)
+ if (ssm.fromSeq == seq)
{
ml = getdnaToProt()[i];
break;
}
+ i++;
}
return ml == null ? null : ml.locateInFrom(aaPos, aaPos);
}
/**
* Convenience method to return the first aligned sequence in the given
- * alignment whose dataset has a mapping with the given dataset sequence.
+ * alignment whose dataset has a mapping with the given (aligned or dataset)
+ * sequence.
*
* @param seq
*
/*
* Search mapped protein ('to') sequences first.
*/
- if (this.dnaToProt != null)
+ for (SequenceToSequenceMapping ssm : mappings)
{
- for (int i = 0; i < dnaToProt.length; i++)
+ if (ssm.fromSeq == seq || ssm.fromSeq == seq.getDatasetSequence())
{
- if (this.dnaSeqs[i] == seq)
+ for (SequenceI sourceAligned : al.getSequences())
{
- for (SequenceI sourceAligned : al.getSequences())
+ if (ssm.mapping.to == sourceAligned.getDatasetSequence()
+ || ssm.mapping.to == sourceAligned)
{
- if (this.dnaToProt[i].to == sourceAligned.getDatasetSequence())
- {
- return sourceAligned;
- }
+ return sourceAligned;
}
}
}
/*
* Then try mapped dna sequences.
*/
- if (this.dnaToProt != null)
+ for (SequenceToSequenceMapping ssm : mappings)
{
- for (int i = 0; i < dnaToProt.length; i++)
+ if (ssm.mapping.to == seq
+ || ssm.mapping.to == seq.getDatasetSequence())
{
- if (this.dnaToProt[i].to == seq)
+ for (SequenceI sourceAligned : al.getSequences())
{
- for (SequenceI sourceAligned : al.getSequences())
+ if (ssm.fromSeq == sourceAligned.getDatasetSequence())
{
- if (this.dnaSeqs[i] == sourceAligned.getDatasetSequence())
- {
- return sourceAligned;
- }
+ return sourceAligned;
}
}
}
}
/**
- * Returns the region in the 'mappedFrom' sequence's dataset that is mapped to
- * position 'pos' (base 1) in the 'mappedTo' sequence's dataset. The region is
- * a set of start/end position pairs.
+ * Returns the region in the target sequence's dataset that is mapped to the
+ * given position (base 1) in the query sequence's dataset. The region is a
+ * set of start/end position pairs.
*
- * @param mappedFrom
- * @param mappedTo
- * @param pos
+ * @param target
+ * @param query
+ * @param queryPos
* @return
*/
- public int[] getMappedRegion(SequenceI mappedFrom, SequenceI mappedTo,
- int pos)
+ public int[] getMappedRegion(SequenceI target, SequenceI query,
+ int queryPos)
{
- SequenceI targetDs = mappedFrom.getDatasetSequence() == null ? mappedFrom
- : mappedFrom.getDatasetSequence();
- SequenceI sourceDs = mappedTo.getDatasetSequence() == null ? mappedTo
- : mappedTo.getDatasetSequence();
- if (targetDs == null || sourceDs == null || dnaToProt == null)
+ SequenceI targetDs = target.getDatasetSequence() == null ? target
+ : target.getDatasetSequence();
+ SequenceI queryDs = query.getDatasetSequence() == null ? query : query
+ .getDatasetSequence();
+ if (targetDs == null || queryDs == null /*|| dnaToProt == null*/)
{
return null;
}
- for (int mi = 0; mi < dnaToProt.length; mi++)
+ for (SequenceToSequenceMapping ssm : mappings)
{
- if (dnaSeqs[mi] == targetDs && dnaToProt[mi].to == sourceDs)
+ /*
+ * try mapping from target to query
+ */
+ if (ssm.fromSeq == targetDs && ssm.mapping.to == queryDs)
{
- int[] codon = dnaToProt[mi].map.locateInFrom(pos, pos);
+ int[] codon = ssm.mapping.map.locateInFrom(queryPos, queryPos);
+ if (codon != null)
+ {
+ return codon;
+ }
+ }
+ /*
+ * else try mapping from query to target
+ */
+ else if (ssm.fromSeq == queryDs && ssm.mapping.to == targetDs)
+ {
+ int[] codon = ssm.mapping.map.locateInTo(queryPos, queryPos);
if (codon != null)
{
return codon;
}
/**
- * Returns the DNA codon for the given position (base 1) in a mapped protein
- * sequence, or null if no mapping is found.
+ * Returns the mapped DNA codons for the given position in a protein sequence,
+ * or null if no mapping is found. Returns a list of (e.g.) ['g', 'c', 't']
+ * codons. There may be more than one codon mapped to the protein if (for
+ * example), there are mappings to cDNA variants.
*
* @param protein
* the peptide dataset sequence
* residue position (base 1) in the peptide sequence
* @return
*/
- public char[] getMappedCodon(SequenceI protein, int aaPos)
+ public List<char[]> getMappedCodons(SequenceI protein, int aaPos)
{
- if (dnaToProt == null)
- {
- return null;
- }
MapList ml = null;
SequenceI dnaSeq = null;
- for (int i = 0; i < dnaToProt.length; i++)
+ List<char[]> result = new ArrayList<char[]>();
+
+ for (SequenceToSequenceMapping ssm : mappings)
{
- if (dnaToProt[i].to == protein)
+ if (ssm.mapping.to == protein)
{
- ml = getdnaToProt()[i];
- dnaSeq = dnaSeqs[i];
- break;
+ ml = ssm.mapping.map;
+ dnaSeq = ssm.fromSeq;
+
+ int[] codonPos = ml.locateInFrom(aaPos, aaPos);
+ if (codonPos == null)
+ {
+ return null;
+ }
+
+ /*
+ * Read off the mapped nucleotides (converting to position base 0)
+ */
+ codonPos = MappingUtils.flattenRanges(codonPos);
+ char[] dna = dnaSeq.getSequence();
+ int start = dnaSeq.getStart();
+ result.add(new char[] { dna[codonPos[0] - start],
+ dna[codonPos[1] - start], dna[codonPos[2] - start] });
}
}
- if (ml == null)
- {
- return null;
- }
- int[] codonPos = ml.locateInFrom(aaPos, aaPos);
- if (codonPos == null)
- {
- return null;
- }
-
- /*
- * Read off the mapped nucleotides (converting to position base 0)
- */
- codonPos = MappingUtils.flattenRanges(codonPos);
- char[] dna = dnaSeq.getSequence();
- int start = dnaSeq.getStart();
- return new char[] { dna[codonPos[0] - start], dna[codonPos[1] - start],
- dna[codonPos[2] - start] };
+ return result.isEmpty() ? null : result;
}
/**
- * Returns any mappings found which are to (or from) the given sequence, and
- * to distinct sequences.
+ * Returns any mappings found which are from the given sequence, and to
+ * distinct sequences.
*
* @param seq
* @return
*/
- public List<Mapping> getMappingsForSequence(SequenceI seq)
+ public List<Mapping> getMappingsFromSequence(SequenceI seq)
{
List<Mapping> result = new ArrayList<Mapping>();
- if (dnaSeqs == null)
- {
- return result;
- }
List<SequenceI> related = new ArrayList<SequenceI>();
SequenceI seqDs = seq.getDatasetSequence();
seqDs = seqDs != null ? seqDs : seq;
- for (int ds = 0; ds < dnaSeqs.length; ds++)
+ for (SequenceToSequenceMapping ssm : mappings)
{
- final Mapping mapping = dnaToProt[ds];
- if (dnaSeqs[ds] == seqDs || mapping.to == seqDs)
+ final Mapping mapping = ssm.mapping;
+ if (ssm.fromSeq == seqDs)
{
if (!related.contains(mapping.to))
{
}
return result;
}
+
+ /**
+ * Test whether the given sequence is substitutable for one or more dummy
+ * sequences in this mapping
+ *
+ * @param map
+ * @param seq
+ * @return
+ */
+ public boolean isRealisableWith(SequenceI seq)
+ {
+ return realiseWith(seq, false) > 0;
+ }
+
+ /**
+ * Replace any matchable mapped dummy sequences with the given real one.
+ * Returns the count of sequence mappings instantiated.
+ *
+ * @param seq
+ * @return
+ */
+ public int realiseWith(SequenceI seq)
+ {
+ return realiseWith(seq, true);
+ }
+
+ /**
+ * Returns the number of mapped dummy sequences that could be replaced with
+ * the given real sequence.
+ *
+ * @param seq
+ * a dataset sequence
+ * @param doUpdate
+ * if true, performs replacements, else only counts
+ * @return
+ */
+ protected int realiseWith(SequenceI seq, boolean doUpdate)
+ {
+ SequenceI ds = seq.getDatasetSequence() != null ? seq
+ .getDatasetSequence() : seq;
+ int count = 0;
+
+ /*
+ * check for replaceable DNA ('map from') sequences
+ */
+ for (SequenceToSequenceMapping ssm : mappings)
+ {
+ SequenceI dna = ssm.fromSeq;
+ if (dna instanceof SequenceDummy
+ && dna.getName().equals(ds.getName()))
+ {
+ Mapping mapping = ssm.mapping;
+ int mapStart = mapping.getMap().getFromLowest();
+ int mapEnd = mapping.getMap().getFromHighest();
+ boolean mappable = couldRealiseSequence(dna, ds, mapStart, mapEnd);
+ if (mappable)
+ {
+ count++;
+ if (doUpdate)
+ {
+ // TODO: new method ? ds.realise(dna);
+ // might want to copy database refs as well
+ ds.setSequenceFeatures(dna.getSequenceFeatures());
+ // dnaSeqs[i] = ds;
+ ssm.fromSeq = ds;
+ System.out.println("Realised mapped sequence " + ds.getName());
+ }
+ }
+ }
+
+ /*
+ * check for replaceable protein ('map to') sequences
+ */
+ Mapping mapping = ssm.mapping;
+ SequenceI prot = mapping.getTo();
+ int mapStart = mapping.getMap().getToLowest();
+ int mapEnd = mapping.getMap().getToHighest();
+ boolean mappable = couldRealiseSequence(prot, ds, mapStart, mapEnd);
+ if (mappable)
+ {
+ count++;
+ if (doUpdate)
+ {
+ // TODO: new method ? ds.realise(dna);
+ // might want to copy database refs as well
+ ds.setSequenceFeatures(dna.getSequenceFeatures());
+ ssm.mapping.setTo(ds);
+ }
+ }
+ }
+ return count;
+ }
+
+ /**
+ * Helper method to test whether a 'real' sequence could replace a 'dummy'
+ * sequence in the map. The criteria are that they have the same name, and
+ * that the mapped region overlaps the candidate sequence.
+ *
+ * @param existing
+ * @param replacement
+ * @param mapStart
+ * @param mapEnd
+ * @return
+ */
+ protected static boolean couldRealiseSequence(SequenceI existing,
+ SequenceI replacement, int mapStart, int mapEnd)
+ {
+ if (existing instanceof SequenceDummy
+ && !(replacement instanceof SequenceDummy)
+ && existing.getName().equals(replacement.getName()))
+ {
+ int start = replacement.getStart();
+ int end = replacement.getEnd();
+ boolean mappingOverlapsSequence = (mapStart >= start && mapStart <= end)
+ || (mapEnd >= start && mapEnd <= end);
+ if (mappingOverlapsSequence)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Change any mapping to the given sequence to be to its dataset sequence
+ * instead. For use when mappings are created before their referenced
+ * sequences are instantiated, for example when parsing GFF data.
+ *
+ * @param seq
+ */
+ public void updateToDataset(SequenceI seq)
+ {
+ if (seq == null || seq.getDatasetSequence() == null)
+ {
+ return;
+ }
+ SequenceI ds = seq.getDatasetSequence();
+
+ for (SequenceToSequenceMapping ssm : mappings)
+ /*
+ * 'from' sequences
+ */
+ {
+ if (ssm.fromSeq == seq)
+ {
+ ssm.fromSeq = ds;
+ }
+
+ /*
+ * 'to' sequences
+ */
+ if (ssm.mapping.to == seq)
+ {
+ ssm.mapping.to = ds;
+ }
+ }
+ }
+
+ /**
+ * Answers true if this object contains no mappings
+ *
+ * @return
+ */
+ public boolean isEmpty()
+ {
+ return mappings.isEmpty();
+ }
+
+ /**
+ * Method for debug / inspection purposes only, may change in future
+ */
+ @Override
+ public String toString()
+ {
+ return mappings == null ? "null" : mappings.toString();
+ }
+
+ /**
+ * Returns the first mapping found that is from 'fromSeq' to 'toSeq', or null
+ * if none found
+ *
+ * @param fromSeq
+ * aligned or dataset sequence
+ * @param toSeq
+ * aligned or dataset sequence
+ * @return
+ */
+ public Mapping getMappingBetween(SequenceI fromSeq, SequenceI toSeq)
+ {
+ for (SequenceToSequenceMapping mapping : mappings)
+ {
+ SequenceI from = mapping.fromSeq;
+ SequenceI to = mapping.mapping.to;
+ if ((from == fromSeq || from == fromSeq.getDatasetSequence())
+ && (to == toSeq || to == toSeq.getDatasetSequence()))
+ {
+ return mapping.mapping;
+ }
+ }
+ return null;
+ }
}
import jalview.analysis.AlignmentUtils;
import jalview.io.FastaFile;
+import jalview.util.Comparison;
import jalview.util.MessageManager;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Hashtable;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
protected List<SequenceI> sequences;
- protected List<SequenceGroup> groups = java.util.Collections
- .synchronizedList(new ArrayList<SequenceGroup>());
+ protected List<SequenceGroup> groups;
protected char gapCharacter = '-';
public boolean hasRNAStructure = false;
- /** DOCUMENT ME!! */
public AlignmentAnnotation[] annotations;
- HiddenSequences hiddenSequences = new HiddenSequences(this);
+ HiddenSequences hiddenSequences;
public Hashtable alignmentProperties;
- private Set<AlignedCodonFrame> codonFrameList = new LinkedHashSet<AlignedCodonFrame>();
+ private List<AlignedCodonFrame> codonFrameList;
private void initAlignment(SequenceI[] seqs)
{
- int i = 0;
+ groups = Collections.synchronizedList(new ArrayList<SequenceGroup>());
+ hiddenSequences = new HiddenSequences(this);
+ codonFrameList = new ArrayList<AlignedCodonFrame>();
- if (jalview.util.Comparison.isNucleotide(seqs))
+ if (Comparison.isNucleotide(seqs))
{
type = NUCLEOTIDE;
}
type = PROTEIN;
}
- sequences = java.util.Collections
- .synchronizedList(new ArrayList<SequenceI>());
+ sequences = Collections.synchronizedList(new ArrayList<SequenceI>());
- for (i = 0; i < seqs.length; i++)
+ for (int i = 0; i < seqs.length; i++)
{
sequences.add(seqs[i]);
}
seqs[i] = new Sequence(seqs[i]);
}
+ initAlignment(seqs);
+
/*
- * Share the same dataset sequence mappings (if any). TODO: find a better
- * place for these to live (alignment dataset?).
+ * Share the same dataset sequence mappings (if any).
*/
- this.codonFrameList = ((Alignment) al).codonFrameList;
-
- initAlignment(seqs);
+ this.setCodonFrames(al.getCodonFrames());
}
/**
{
if (dataset == null && data == null)
{
- // Create a new dataset for this alignment.
- // Can only be done once, if dataset is not null
- // This will not be performed
- SequenceI[] seqs = new SequenceI[getHeight()];
- SequenceI currentSeq;
- for (int i = 0; i < getHeight(); i++)
- {
- currentSeq = getSequenceAt(i);
- if (currentSeq.getDatasetSequence() != null)
- {
- seqs[i] = currentSeq.getDatasetSequence();
- }
- else
- {
- seqs[i] = currentSeq.createDatasetSequence();
- }
- }
-
- dataset = new Alignment(seqs);
+ createDatasetAlignment();
}
else if (dataset == null && data != null)
{
}
/**
+ * Creates a new dataset for this alignment. Can only be done once - if
+ * dataset is not null this will not be performed.
+ */
+ public void createDatasetAlignment()
+ {
+ if (dataset != null)
+ {
+ return;
+ }
+ SequenceI[] seqs = new SequenceI[getHeight()];
+ SequenceI currentSeq;
+ for (int i = 0; i < getHeight(); i++)
+ {
+ currentSeq = getSequenceAt(i);
+ if (currentSeq.getDatasetSequence() != null)
+ {
+ seqs[i] = currentSeq.getDatasetSequence();
+ }
+ else
+ {
+ seqs[i] = currentSeq.createDatasetSequence();
+ }
+ }
+
+ dataset = new Alignment(seqs);
+ // move mappings to the dataset alignment
+ dataset.codonFrameList = this.codonFrameList;
+ this.codonFrameList = null;
+ }
+
+ /**
* reference count for number of alignments referencing this one.
*/
int alignmentRefs = 0;
return alignmentProperties;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * jalview.datamodel.AlignmentI#addCodonFrame(jalview.datamodel.AlignedCodonFrame
- * )
+ /**
+ * Adds the given mapping to the stored set. Note this may be held on the
+ * dataset alignment.
*/
@Override
public void addCodonFrame(AlignedCodonFrame codons)
{
- if (codons != null)
+ List<AlignedCodonFrame> acfs = getCodonFrames();
+ if (codons != null && acfs != null && !acfs.contains(codons))
{
- codonFrameList.add(codons);
+ acfs.add(codons);
}
}
return null;
}
List<AlignedCodonFrame> cframes = new ArrayList<AlignedCodonFrame>();
- for (AlignedCodonFrame acf : codonFrameList)
+ for (AlignedCodonFrame acf : getCodonFrames())
{
if (acf.involvesSequence(seq))
{
}
/**
- * Sets the codon frame mappings (replacing any existing mappings).
+ * Sets the codon frame mappings (replacing any existing mappings). Note the
+ * mappings are set on the dataset alignment instead if there is one.
*
* @see jalview.datamodel.AlignmentI#setCodonFrames()
*/
@Override
- public void setCodonFrames(Set<AlignedCodonFrame> acfs)
+ public void setCodonFrames(List<AlignedCodonFrame> acfs)
{
- this.codonFrameList = acfs;
+ if (dataset != null)
+ {
+ dataset.setCodonFrames(acfs);
+ }
+ else
+ {
+ this.codonFrameList = acfs;
+ }
}
/**
* Returns the set of codon frame mappings. Any changes to the returned set
- * will affect the alignment.
+ * will affect the alignment. The mappings are held on (and read from) the
+ * dataset alignment if there is one.
*
* @see jalview.datamodel.AlignmentI#getCodonFrames()
*/
@Override
- public Set<AlignedCodonFrame> getCodonFrames()
+ public List<AlignedCodonFrame> getCodonFrames()
{
- return codonFrameList;
+ return dataset != null ? dataset.getCodonFrames() : codonFrameList;
}
- /*
- * (non-Javadoc)
- *
- * @seejalview.datamodel.AlignmentI#removeCodonFrame(jalview.datamodel.
- * AlignedCodonFrame)
+ /**
+ * Removes the given mapping from the stored set. Note that the mappings are
+ * held on the dataset alignment if there is one.
*/
@Override
public boolean removeCodonFrame(AlignedCodonFrame codons)
{
- if (codons == null || codonFrameList == null)
+ List<AlignedCodonFrame> acfs = getCodonFrames();
+ if (codons == null || acfs == null)
{
return false;
}
- return codonFrameList.remove(codons);
+ return acfs.remove(codons);
}
@Override
addAnnotation(alan[a]);
}
- this.codonFrameList.addAll(toappend.getCodonFrames());
+ getCodonFrames().addAll(toappend.getCodonFrames());
List<SequenceGroup> sg = toappend.getGroups();
if (sg != null)
*
* @return the representative sequence for this group
*/
+ @Override
public SequenceI getSeqrep()
{
return seqrep;
* @param seqrep
* the seqrep to set (null means no sequence representative)
*/
+ @Override
public void setSeqrep(SequenceI seqrep)
{
this.seqrep = seqrep;
*
* @return true if group has a sequence representative
*/
+ @Override
public boolean hasSeqrep()
{
return seqrep != null;
boolean preserveUnmappedGaps)
{
// TODO should this method signature be the one in the interface?
- int count = 0;
boolean thisIsNucleotide = this.isNucleotide();
boolean thatIsProtein = !al.isNucleotide();
if (!thatIsProtein && !thisIsNucleotide)
{
return AlignmentUtils.alignProteinAsDna(this, al);
}
-
- char thisGapChar = this.getGapCharacter();
- String gap = thisIsNucleotide && thatIsProtein ? String
- .valueOf(new char[] { thisGapChar, thisGapChar, thisGapChar })
- : String.valueOf(thisGapChar);
-
- // TODO handle intron regions? Needs a 'holistic' alignment of dna,
- // not just sequence by sequence. But how to 'gap' intron regions?
-
- /*
- * Get mappings from 'that' alignment's sequences to this.
- */
- for (SequenceI alignTo : getSequences())
- {
- count += AlignmentUtils.alignSequenceAs(alignTo, al, gap,
- preserveMappedGaps, preserveUnmappedGaps) ? 1 : 0;
- }
- return count;
+ return AlignmentUtils.alignAs(this, al);
}
/**
}
return hasValidSeq;
}
+
+ /**
+ * Update any mappings to 'virtual' sequences to compatible real ones, if
+ * present in the added sequences. Returns a count of mappings updated.
+ *
+ * @param seqs
+ * @return
+ */
+ @Override
+ public int realiseMappings(List<SequenceI> seqs)
+ {
+ int count = 0;
+ for (SequenceI seq : seqs)
+ {
+ for (AlignedCodonFrame mapping : getCodonFrames())
+ {
+ count += mapping.realiseWith(seq);
+ }
+ }
+ return count;
+ }
+
+ /**
+ * Returns the first AlignedCodonFrame that has a mapping between the given
+ * dataset sequences
+ *
+ * @param mapFrom
+ * @param mapTo
+ * @return
+ */
+ @Override
+ public AlignedCodonFrame getMapping(SequenceI mapFrom, SequenceI mapTo)
+ {
+ for (AlignedCodonFrame acf : getCodonFrames())
+ {
+ if (acf.getAaForDnaSeq(mapFrom) == mapTo)
+ {
+ return acf;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public int[] getVisibleStartAndEndIndex(List<int[]> hiddenCols)
+ {
+ int[] alignmentStartEnd = new int[] { 0, getWidth() - 1 };
+ int startPos = alignmentStartEnd[0];
+ int endPos = alignmentStartEnd[1];
+
+ int[] lowestRange = new int[] { -1, -1 };
+ int[] higestRange = new int[] { -1, -1 };
+
+ for (int[] hiddenCol : hiddenCols)
+ {
+ lowestRange = (hiddenCol[0] <= startPos) ? hiddenCol : lowestRange;
+ higestRange = (hiddenCol[1] >= endPos) ? hiddenCol : higestRange;
+ }
+
+ if (lowestRange[0] == -1 && lowestRange[1] == -1)
+ {
+ startPos = alignmentStartEnd[0];
+ }
+ else
+ {
+ startPos = lowestRange[1] + 1;
+ }
+
+ if (higestRange[0] == -1 && higestRange[1] == -1)
+ {
+ endPos = alignmentStartEnd[1];
+ }
+ else
+ {
+ endPos = higestRange[0] - 1;
+ }
+ return new int[] { startPos, endPos };
+ }
}
*
* @return
*/
- Set<AlignedCodonFrame> getCodonFrames();
+ List<AlignedCodonFrame> getCodonFrames();
/**
- * Set the codon frame mappings (replacing any existing set).
+ * Set the codon frame mappings (replacing any existing list).
*/
- void setCodonFrames(Set<AlignedCodonFrame> acfs);
+ void setCodonFrames(List<AlignedCodonFrame> acfs);
/**
* get codon frames involving sequenceI
* @return
*/
public boolean hasValidSequence();
+
+ /**
+ * Update any mappings to 'virtual' sequences to compatible real ones, if
+ * present in the added sequences. Returns a count of mappings updated.
+ *
+ * @param seqs
+ * @return
+ */
+ int realiseMappings(List<SequenceI> seqs);
+
+ /**
+ * Returns the first AlignedCodonFrame that has a mapping between the given
+ * dataset sequences
+ *
+ * @param mapFrom
+ * @param mapTo
+ * @return
+ */
+ AlignedCodonFrame getMapping(SequenceI mapFrom, SequenceI mapTo);
+
+ /**
+ * Calculate the visible start and end index of an alignment. The result is
+ * returned an int array where: int[0] = startIndex, and int[1] = endIndex.
+ *
+ * @param hiddenCols
+ * @return
+ */
+ public int[] getVisibleStartAndEndIndex(List<int[]> hiddenCols);
}
*/
package jalview.datamodel;
+import jalview.util.Comparison;
import jalview.util.ShiftList;
import jalview.viewmodel.annotationfilter.AnnotationFilterParameter;
import jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField;
import java.util.ArrayList;
+import java.util.BitSet;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
*/
public class ColumnSelection
{
- /*
- * list of selected columns (not ordered)
- */
- Vector<Integer> selected = new Vector<Integer>();
+ private class IntList
+ {
+ /*
+ * list of selected columns (ordered by selection order, not column order)
+ */
+ private List<Integer> order = new ArrayList<Integer>();
+
+ /**
+ * bitfield for column selection - allows quick lookup
+ */
+ private BitSet selected = new BitSet();
+
+ /**
+ * adds a new column i to the selection - only if i is not already selected
+ *
+ * @param i
+ */
+ public void add(int i)
+ {
+ if (!selected.get(i))
+ {
+ order.add(Integer.valueOf(i));
+ selected.set(i);
+ }
+ }
+
+ public void clear()
+ {
+ order.clear();
+ selected.clear();
+ }
+
+ public void remove(int col)
+ {
+
+ Integer colInt = new Integer(col);
+
+ if (selected.get(col))
+ {
+ // if this ever changes to List.remove(), ensure Integer not int
+ // argument
+ // as List.remove(int i) removes the i'th item which is wrong
+ order.remove(colInt);
+ selected.clear(col);
+ }
+ }
+
+ public boolean contains(Integer colInt)
+ {
+ return selected.get(colInt);
+ }
+
+ public boolean isEmpty()
+ {
+ return order.isEmpty();
+ }
+
+ public List<Integer> getList()
+ {
+ return order;
+ }
+
+ public int size()
+ {
+ return order.size();
+ }
+
+ /**
+ * gets the column that was selected first, second or i'th
+ *
+ * @param i
+ * @return
+ */
+ public int elementAt(int i)
+ {
+ return order.get(i);
+ }
+
+ protected boolean pruneColumnList(final List<int[]> shifts)
+ {
+ int s = 0, t = shifts.size();
+ int[] sr = shifts.get(s++);
+ boolean pruned = false;
+ int i = 0, j = order.size();
+ while (i < j && s <= t)
+ {
+ int c = order.get(i++).intValue();
+ if (sr[0] <= c)
+ {
+ if (sr[1] + sr[0] >= c)
+ { // sr[1] -ve means inseriton.
+ order.remove(--i);
+ selected.clear(c);
+ j--;
+ }
+ else
+ {
+ if (s < t)
+ {
+ sr = shifts.get(s);
+ }
+ s++;
+ }
+ }
+ }
+ return pruned;
+ }
+
+ /**
+ * shift every selected column at or above start by change
+ *
+ * @param start
+ * - leftmost column to be shifted
+ * @param change
+ * - delta for shift
+ */
+ public void compensateForEdits(int start, int change)
+ {
+ BitSet mask = new BitSet();
+ for (int i = 0; i < order.size(); i++)
+ {
+ int temp = order.get(i);
+
+ if (temp >= start)
+ {
+ // clear shifted bits and update List of selected columns
+ selected.clear(temp);
+ mask.set(temp - change);
+ order.set(i, new Integer(temp - change));
+ }
+ }
+ // lastly update the bitfield all at once
+ selected.or(mask);
+ }
+
+ public boolean isSelected(int column)
+ {
+ return selected.get(column);
+ }
+
+ public int getMaxColumn()
+ {
+ return selected.length() - 1;
+ }
+
+ public int getMinColumn()
+ {
+ return selected.get(0) ? 0 : selected.nextSetBit(0);
+ }
+
+ /**
+ * @return a series of selection intervals along the range
+ */
+ public List<int[]> getRanges()
+ {
+ List<int[]> rlist = new ArrayList<int[]>();
+ if (selected.isEmpty())
+ {
+ return rlist;
+ }
+ int next = selected.nextSetBit(0), clear = -1;
+ while (next != -1)
+ {
+ clear = selected.nextClearBit(next);
+ rlist.add(new int[] { next, clear - 1 });
+ next = selected.nextSetBit(clear);
+ }
+ return rlist;
+ }
+ }
+
+ IntList selected = new IntList();
/*
* list of hidden column [start, end] ranges; the list is maintained in
*/
public void addElement(int col)
{
- Integer column = new Integer(col);
- if (!selected.contains(column))
- {
- selected.addElement(column);
- }
+ selected.add(col);
}
/**
*/
public void clear()
{
- selected.removeAllElements();
+ selected.clear();
}
/**
*/
public void removeElement(int col)
{
- Integer colInt = new Integer(col);
-
- if (selected.contains(colInt))
- {
- // if this ever changes to List.remove(), ensure Integer not int argument
- // as List.remove(int i) removes the i'th item which is wrong
- selected.removeElement(colInt);
- }
+ selected.remove(col);
}
/**
colInt = new Integer(i);
if (selected.contains(colInt))
{
- selected.removeElement(colInt);
+ selected.remove(colInt);
}
}
}
/**
* Returns a list of selected columns. The list contains no duplicates but is
- * not necessarily ordered.
+ * not necessarily ordered. It also may include columns hidden from the
+ * current view
*/
public List<Integer> getSelected()
{
- return selected;
+ return selected.getList();
+ }
+
+ /**
+ * @return list of int arrays containing start and end column position for
+ * runs of selected columns ordered from right to left.
+ */
+ public List<int[]> getSelectedRanges()
+ {
+ return selected.getRanges();
}
/**
* @param col
* index to search for in column selection
*
- * @return true if Integer(col) is in selection.
+ * @return true if col is selected
*/
public boolean contains(int col)
{
- return selected.contains(new Integer(col));
+ return (col > -1) ? selected.isSelected(col) : false;
}
/**
*/
public int getMax()
{
- int max = -1;
-
- for (int sel : getSelected())
+ if (selected.isEmpty())
{
- if (sel > max)
- {
- max = sel;
- }
+ return -1;
}
-
- return max;
+ return selected.getMaxColumn();
}
/**
*/
public int getMin()
{
- int min = 1000000000;
-
- for (int sel : getSelected())
+ if (selected.isEmpty())
{
- if (sel < min)
- {
- min = sel;
- }
+ return 1000000000;
}
-
- return min;
+ return selected.getMinColumn();
}
/**
public List<int[]> compensateForEdit(int start, int change)
{
List<int[]> deletedHiddenColumns = null;
- for (int i = 0; i < selected.size(); i++)
- {
- int temp = selected.get(i);
-
- if (temp >= start)
- {
- // if this ever changes to List.set(), swap parameter order!!
- selected.setElementAt(new Integer(temp - change), i);
- }
- }
+ selected.compensateForEdits(start, change);
if (hiddenColumns != null)
{
*/
private void compensateForDelEdits(int start, int change)
{
- for (int i = 0; i < selected.size(); i++)
- {
- int temp = selected.get(i);
- if (temp >= start)
- {
- // if this ever changes to List.set(), must swap parameter order!!!
- selected.setElementAt(new Integer(temp - change), i);
- }
- }
+ selected.compensateForEdits(start, change);
if (hiddenColumns != null)
{
// operations.
}
- private boolean pruneColumnList(final List<int[]> shifts,
- Vector<Integer> list)
- {
- int s = 0, t = shifts.size();
- int[] sr = shifts.get(s++);
- boolean pruned = false;
- int i = 0, j = list.size();
- while (i < j && s <= t)
- {
- int c = list.elementAt(i++).intValue();
- if (sr[0] <= c)
- {
- if (sr[1] + sr[0] >= c)
- { // sr[1] -ve means inseriton.
- list.removeElementAt(--i);
- j--;
- }
- else
- {
- if (s < t)
- {
- sr = shifts.get(s);
- }
- s++;
- }
- }
- }
- return pruned;
- }
-
/**
* remove any hiddenColumns or selected columns and shift remaining based on a
* series of position, range deletions.
}
if (selected != null && selected.size() > 0)
{
- pruneColumnList(shifts, selected);
+ selected.pruneColumnList(shifts);
if (selected != null && selected.size() == 0)
{
selected = null;
* Return absolute column index for a visible column index
*
* @param column
- * int column index in alignment view
+ * int column index in alignment view (count from zero)
* @return alignment column index for column
*/
public int adjustForHiddenColumns(int column)
/**
* Use this method to determine where the next hiddenRegion starts
+ *
+ * @param hiddenRegion
+ * index of hidden region (counts from 0)
+ * @return column number in visible view
*/
public int findHiddenRegionPosition(int hiddenRegion)
{
gaps += region[1] + 1 - region[0];
result = region[1] + 1;
index++;
- } while (index < hiddenRegion + 1);
+ } while (index <= hiddenRegion);
result -= gaps;
}
public void hideSelectedColumns()
{
- while (!selected.isEmpty())
+ synchronized (selected)
{
- int column = selected.get(0).intValue();
- hideColumns(column);
+ for (int[] selregions : selected.getRanges())
+ {
+ hideColumns(selregions[0], selregions[1]);
+ }
+ selected.clear();
}
}
/*
* remaining case is that the new range follows everything else
*/
- hiddenColumns.addElement(new int[] { start, end });
+ hiddenColumns.addElement(new int[] { start, end });
}
/**
{
if (copy.selected != null)
{
- selected = new Vector<Integer>();
+ selected = new IntList();
for (int i = 0, j = copy.selected.size(); i < j; i++)
{
- selected.addElement(copy.selected.elementAt(i));
+ selected.add(copy.selected.elementAt(i));
}
}
if (copy.hiddenColumns != null)
}
/**
+ * Locate the first and last position visible for this sequence. if seq isn't
+ * visible then return the position of the left and right of the hidden
+ * boundary region, and the corresponding alignment column indices for the
+ * extent of the sequence
+ *
+ * @param seq
+ * @return int[] { visible start, visible end, first seqpos, last seqpos,
+ * alignment index for seq start, alignment index for seq end }
+ */
+ public int[] locateVisibleBoundsOfSequence(SequenceI seq)
+ {
+ int fpos=seq.getStart(),lpos= seq.getEnd();
+ int start = 0;
+
+ if (hiddenColumns == null || hiddenColumns.size() == 0)
+ {
+ int ifpos = seq.findIndex(fpos) - 1, ilpos = seq.findIndex(lpos) - 1;
+ return new int[] { ifpos, ilpos, fpos, lpos, ifpos, ilpos };
+ }
+
+ // Simply walk along the sequence whilst watching for hidden column
+ // boundaries
+ List<int[]> regions = getHiddenColumns();
+ int spos = fpos, lastvispos = -1, rcount = 0, hideStart = seq
+ .getLength(), hideEnd = -1;
+ int visPrev = 0, visNext = 0, firstP = -1, lastP = -1;
+ boolean foundStart = false;
+ for (int p = 0, pLen = seq.getLength(); spos <= seq.getEnd()
+ && p < pLen; p++)
+ {
+ if (!Comparison.isGap(seq.getCharAt(p)))
+ {
+ // keep track of first/last column
+ // containing sequence data regardless of visibility
+ if (firstP == -1)
+ {
+ firstP = p;
+ }
+ lastP = p;
+ // update hidden region start/end
+ while (hideEnd < p && rcount < regions.size())
+ {
+ int[] region = regions.get(rcount++);
+ visPrev = visNext;
+ visNext += region[0] - visPrev;
+ hideStart = region[0];
+ hideEnd = region[1];
+ }
+ if (hideEnd < p)
+ {
+ hideStart = seq.getLength();
+ }
+ // update visible boundary for sequence
+ if (p < hideStart)
+ {
+ if (!foundStart)
+ {
+ fpos = spos;
+ start = p;
+ foundStart = true;
+ }
+ lastvispos = p;
+ lpos = spos;
+ }
+ // look for next sequence position
+ spos++;
+ }
+ }
+ if (foundStart)
+ {
+ return new int[] { findColumnPosition(start),
+ findColumnPosition(lastvispos), fpos, lpos, firstP, lastP };
+ }
+ // otherwise, sequence was completely hidden
+ return new int[] { visPrev, visNext, 0, 0, firstP, lastP };
+ }
+
+ /**
* delete any columns in alignmentAnnotation that are hidden (including
* sequence associated annotation).
*
{
if (hiddenColumns != null && isVisible(col.intValue()))
{
- if (!selected.contains(col))
- {
- selected.addElement(col);
- }
+ selected.add(col);
}
}
}
*/
public void setElementsFrom(ColumnSelection colsel)
{
- selected = new Vector<Integer>();
+ selected = new IntList();
if (colsel.selected != null && colsel.selected.size() > 0)
{
if (hiddenColumns != null && hiddenColumns.size() > 0)
public boolean filterAnnotations(Annotation[] annotations,
AnnotationFilterParameter filterParams)
{
+ // JBPNote - this method needs to be refactored to become independent of
+ // viewmodel package
this.revealAllHiddenColumns();
this.clear();
int count = 0;
} while (count < annotations.length);
return false;
}
+
}
}
+
public DBRefEntry(String source, String version, String accessionId)
{
this(source, version, accessionId, null);
this.map = map;
}
- public DBRefEntry(DBRefEntry entry)
+ public DBRefEntry(DBRefEntryI entry)
{
- this(
- (entry.source == null ? "" : new String(entry.source)),
- (entry.version == null ? "" : new String(entry.version)),
- (entry.accessionId == null ? "" : new String(entry.accessionId)),
- (entry.map == null ? null : new Mapping(entry.map)));
+ this((entry.getSource() == null ? "" : new String(entry.getSource())),
+ (entry.getVersion() == null ? "" : new String(
+ entry.getVersion())),
+ (entry.getAccessionId() == null ? "" : new String(
+ entry.getAccessionId())),
+ (entry.getMap() == null ? null : new Mapping(entry.getMap())));
}
@Override
}
+ @Override
public Mapping getMap()
{
return map;
public static String PDB = "PDB";
/**
+ * mmCIF Entry Code
+ */
+ public static String MMCIF = "mmCIF";
+
+ /**
* EMBL ID
*/
public static String EMBL = "EMBL";
public static final String GENEDB = "GeneDB".toUpperCase();
/**
- * List of databases whose sequences might have coding regions annotated
- */
- public static final String[] DNACODINGDBS = { EMBL, EMBLCDS, GENEDB };
-
- public static final String[] CODINGDBS = { EMBLCDS, GENEDB };
-
- public static final String[] PROTEINDBS = { UNIPROT, PDB, UNIPROTKB,
- EMBLCDSProduct };
-
- public static final String[] PROTEINSEQ = { UNIPROT, UNIPROTKB,
- EMBLCDSProduct };
-
- public static final String[] PROTEINSTR = { PDB };
-
- public static final String[] DOMAINDBS = { PFAM, RFAM };
-
- /**
- * set of unique DBRefSource property constants. These could be used to
- * reconstruct the above groupings
- */
- public static final Object SEQDB = "SQ";
-
- /**
- * database of nucleic acid sequences
+ * Ensembl
*/
- public static final Object DNASEQDB = "NASQ";
+ public static final String ENSEMBL = "ENSEMBL";
/**
- * database of amino acid sequences
- */
- public static final Object PROTSEQDB = "PROTSQ";
-
- /**
- * database of cDNA sequences
- */
- public static final Object CODINGSEQDB = "CODING";
-
- /**
- * database of na sequences with exon annotation
- */
- public static final Object DNACODINGSEQDB = "XONCODING";
-
- /**
- * DB returns several sequences associated with a protein/nucleotide domain
+ * List of databases whose sequences might have coding regions annotated
*/
- public static final Object DOMAINDB = "DOMAIN";
+ public static final String[] DNACODINGDBS = { EMBL, EMBLCDS, GENEDB,
+ ENSEMBL };
- /**
- * DB query can take multiple accession codes concatenated by a separator.
- * Value of property indicates maximum number of accession codes to send at a
- * time.
- */
- public static final Object MULTIACC = "MULTIACC";
+ public static final String[] CODINGDBS = { EMBLCDS, GENEDB, ENSEMBL };
- /**
- * DB query returns an alignment for each accession provided.
- */
- public static final Object ALIGNMENTDB = "ALIGNMENTS";
+ public static final String[] PROTEINDBS = { UNIPROT, PDB, UNIPROTKB,
+ EMBLCDSProduct, ENSEMBL }; // Ensembl ENSP* entries are protein
}
int[] alignedCodon = getAlignedCodon(codon);
String peptide = getPeptide();
+ int peptideCol = toPosition - 1 - Mapping.this.to.getStart();
return new AlignedCodon(alignedCodon[0], alignedCodon[1],
- alignedCodon[2], peptide);
+ alignedCodon[2], peptide, peptideCol);
}
/**
* sequence.
*
* @return
+ * @throws NoSuchElementException
+ * if the 'toRange' is exhausted (nothing to map to)
*/
private String getPeptide()
{
*
* @see java.lang.Object#finalize()
*/
+ @Override
protected void finalize() throws Throwable
{
map = null;
super.finalize();
}
+ /**
+ * Returns an iterator which can serve up the aligned codon column positions
+ * and their corresponding peptide products
+ *
+ * @param seq
+ * an aligned (i.e. possibly gapped) sequence
+ * @param gapChar
+ * @return
+ */
public Iterator<AlignedCodon> getCodonIterator(SequenceI seq, char gapChar)
{
return new AlignedCodonIterator(seq, gapChar);
}
+ /**
+ * Readable representation for debugging only, not guaranteed not to change
+ */
+ @Override
+ public String toString()
+ {
+ return String.format("%s %s", this.map.toString(), this.to == null ? ""
+ : this.to.getName());
+ }
+
}
--- /dev/null
+package jalview.datamodel;
+
+/**
+ * An enumeration of the kinds of mapping (from nucleotide or peptide, to
+ * nucleotide or peptide), and the corresponding word lengths
+ */
+public enum MappingType
+{
+ NucleotideToPeptide(3, 1)
+ {
+ @Override
+ public MappingType getInverse()
+ {
+ return PeptideToNucleotide;
+ }
+ },
+ PeptideToNucleotide(1, 3)
+ {
+ @Override
+ public MappingType getInverse()
+ {
+ return NucleotideToPeptide;
+ }
+ },
+ NucleotideToNucleotide(1, 1)
+ {
+ @Override
+ public MappingType getInverse()
+ {
+ return NucleotideToNucleotide;
+ }
+ },
+ PeptideToPeptide(1, 1)
+ {
+ @Override
+ public MappingType getInverse()
+ {
+ return PeptideToPeptide;
+ }
+ };
+
+ private int fromRatio;
+
+ private int toRatio;
+
+ private MappingType(int fromSize, int toSize)
+ {
+ fromRatio = fromSize;
+ toRatio = toSize;
+ }
+
+ public abstract MappingType getInverse();
+
+ public int getFromRatio()
+ {
+ return fromRatio;
+ }
+
+ public int getToRatio()
+ {
+ return toRatio;
+ }
+}
public enum Type
{
- PDB, FILE
+ PDB, MMCIF, FILE
}
Hashtable properties;
this.chainCode = chainCode;
}
+ @Override
public String toString()
{
return id;
public Match(SequenceI seq, int start, int end)
{
sequence = seq;
- this.start = start;
- this.end = end;
+
+ /*
+ * always hold in forwards order, even if given in reverse order
+ * (such as from a mapping to a reverse strand); this avoids
+ * trouble for routines that highlight search results etc
+ */
+ if (start <= end)
+ {
+ this.start = start;
+ this.end = end;
+ }
+ else
+ {
+ this.start = end;
+ this.end = start;
+ }
}
public SequenceI getSequence()
}
/**
+ *
+ * @param column
+ * @return position in sequence for column (or -1 if no match state exists)
+ */
+ public int findPosition(int column)
+ {
+ int w = 0, ew, p = refseq.findPosition(start);
+ if (column < 0)
+ {
+ return -1;
+ }
+ if (range != null)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ if (operation[i] == M || operation[i] == D)
+ {
+ p += range[i];
+ }
+ if (operation[i] == M || operation[i] == I)
+ {
+ ew = w + range[i];
+ if (column < ew)
+ {
+ if (operation[i] == I)
+ {
+ return -1;
+ }
+ return p - (ew - column);
+ }
+ w = ew;
+ }
+ }
+ }
+ return -1;
+ }
+
+ /**
* Returns sequence as a string with cigar operations applied to it
*
* @return String
*/
+ @Override
public String getSequenceString(char GapChar)
{
return (length == 0) ? "" : (String) getSequenceAndDeletions(
import jalview.util.StringUtils;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
}
/**
- * Creates a new Sequence object with new features, DBRefEntries,
- * AlignmentAnnotations, and PDBIds but inherits any existing dataset sequence
- * reference.
+ * Creates a new Sequence object with new AlignmentAnnotations but inherits
+ * any existing dataset sequence reference. If non exists, everything is
+ * copied.
*
* @param seq
- * DOCUMENT ME!
+ * if seq is a dataset sequence, behaves like a plain old copy
+ * constructor
*/
public Sequence(SequenceI seq)
{
}
+ /**
+ * does the heavy lifting when cloning a dataset sequence, or coping data from
+ * dataset to a new derived sequence.
+ *
+ * @param seq
+ * - source of attributes.
+ * @param alAnnotation
+ * - alignment annotation present on seq that should be copied onto
+ * this sequence
+ */
protected void initSeqFrom(SequenceI seq,
AlignmentAnnotation[] alAnnotation)
{
- initSeqAndName(seq.getName(), seq.getSequence(), seq.getStart(),
+ {
+ char[] oseq = seq.getSequence();
+ initSeqAndName(seq.getName(), Arrays.copyOf(oseq, oseq.length),
+ seq.getStart(),
seq.getEnd());
+ }
description = seq.getDescription();
- sourceDBRef = seq.getSourceDBRef();
- if (seq.getSequenceFeatures() != null)
+ sourceDBRef = seq.getSourceDBRef() == null ? null : new DBRefEntry(
+ seq.getSourceDBRef());
+ if (seq != datasetSequence)
{
- SequenceFeature[] sf = seq.getSequenceFeatures();
- for (int i = 0; i < sf.length; i++)
- {
- addSequenceFeature(new SequenceFeature(sf[i]));
- }
+ setDatasetSequence(seq.getDatasetSequence());
}
- setDatasetSequence(seq.getDatasetSequence());
if (datasetSequence == null && seq.getDBRefs() != null)
{
- // only copy DBRefs if we really are a dataset sequence
+ // only copy DBRefs and seqfeatures if we really are a dataset sequence
DBRefEntry[] dbr = seq.getDBRefs();
for (int i = 0; i < dbr.length; i++)
{
addDBRef(new DBRefEntry(dbr[i]));
}
+ if (seq.getSequenceFeatures() != null)
+ {
+ SequenceFeature[] sf = seq.getSequenceFeatures();
+ for (int i = 0; i < sf.length; i++)
+ {
+ addSequenceFeature(new SequenceFeature(sf[i]));
+ }
+ }
}
if (seq.getAnnotation() != null)
{
}
if (seq.getAllPDBEntries() != null)
{
- Vector ids = seq.getAllPDBEntries();
- Enumeration e = ids.elements();
- while (e.hasMoreElements())
+ Vector<PDBEntry> ids = seq.getAllPDBEntries();
+ for (PDBEntry pdb : ids)
{
- this.addPDBId(new PDBEntry((PDBEntry) e.nextElement()));
+ this.addPDBId(new PDBEntry(pdb));
}
}
}
- /**
- * DOCUMENT ME!
- *
- * @param v
- * DOCUMENT ME!
- */
+
@Override
public void setSequenceFeatures(SequenceFeature[] features)
{
- sequenceFeatures = features;
+ if (datasetSequence == null)
+ {
+ sequenceFeatures = features;
+ }
+ else
+ {
+ System.err
+ .println("Warning: JAL-2046 side effect ? Possible implementation error: overwriting dataset sequence features by setting sequence features on alignment");
+ datasetSequence.setSequenceFeatures(features);
+ }
}
@Override
public synchronized void addSequenceFeature(SequenceFeature sf)
{
+ if (sequenceFeatures==null && datasetSequence != null)
+ {
+ datasetSequence.addSequenceFeature(sf);
+ return;
+ }
if (sequenceFeatures == null)
{
sequenceFeatures = new SequenceFeature[0];
{
if (sequenceFeatures == null)
{
+ if (datasetSequence!=null) {
+ datasetSequence.deleteFeature(sf);
+ }
return;
}
@Override
public Vector<PDBEntry> getAllPDBEntries()
{
- return pdbIds;
+ return pdbIds == null ? new Vector<PDBEntry>() : pdbIds;
}
/**
}
/**
- * DOCUMENT ME!
+ * Returns the character of the aligned sequence at the given position (base
+ * zero), or space if the position is not within the sequence's bounds
*
- * @param i
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
+ * @return
*/
@Override
public char getCharAt(int i)
{
- if (i < sequence.length)
+ if (i >= 0 && i < sequence.length)
{
return sequence[i];
}
@Override
public void addDBRef(DBRefEntry entry)
{
+ // TODO add to dataset sequence instead if there is one?
if (dbrefs == null)
{
dbrefs = new DBRefEntry[0];
@Override
public void setDatasetSequence(SequenceI seq)
{
+ // TODO check for circular reference before setting?
datasetSequence = seq;
}
@Override
public SequenceI deriveSequence()
{
- SequenceI seq = new Sequence(this);
- if (datasetSequence != null)
- {
- // duplicate current sequence with same dataset
- seq.setDatasetSequence(datasetSequence);
- }
- else
+ Sequence seq=null;
+ if (datasetSequence == null)
{
if (isValidDatasetSequence())
{
// Use this as dataset sequence
+ seq = new Sequence(getName(), "", 1, -1);
seq.setDatasetSequence(this);
+ seq.initSeqFrom(this, getAnnotation());
+ return seq;
}
else
{
// Create a new, valid dataset sequence
- SequenceI ds = seq;
- ds.setSequence(AlignSeq.extractGaps(
- jalview.util.Comparison.GapChars, new String(sequence)));
- setDatasetSequence(ds);
- ds.setSequenceFeatures(getSequenceFeatures());
- seq = this; // and return this sequence as the derived sequence.
+ createDatasetSequence();
}
}
- return seq;
+ return new Sequence(this);
}
/*
{
if (datasetSequence == null)
{
- datasetSequence = new Sequence(getName(), AlignSeq.extractGaps(
+ Sequence dsseq = new Sequence(getName(), AlignSeq.extractGaps(
jalview.util.Comparison.GapChars, getSequenceAsString()),
getStart(), getEnd());
- datasetSequence.setSequenceFeatures(getSequenceFeatures());
- datasetSequence.setDescription(getDescription());
- setSequenceFeatures(null);
- // move database references onto dataset sequence
- datasetSequence.setDBRefs(getDBRefs());
- setDBRefs(null);
- datasetSequence.setPDBId(getAllPDBEntries());
- setPDBId(null);
+
+ datasetSequence = dsseq;
+
+ dsseq.setDescription(description);
+ // move features and database references onto dataset sequence
+ dsseq.sequenceFeatures = sequenceFeatures;
+ sequenceFeatures=null;
+ dsseq.dbrefs = dbrefs;
+ dbrefs=null;
+ // TODO: search and replace any references to this sequence with
+ // references to the dataset sequence in Mappings on dbref
+ dsseq.pdbIds = pdbIds;
+ pdbIds = null;
datasetSequence.updatePDBIds();
if (annotation != null)
{
+ // annotation is cloned rather than moved, to preserve what's currently
+ // on the alignment
for (AlignmentAnnotation aa : annotation)
{
AlignmentAnnotation _aa = new AlignmentAnnotation(aa);
*/
package jalview.datamodel;
-public class SequenceDummy extends Sequence implements SequenceI
+public class SequenceDummy extends Sequence
{
public SequenceDummy(String sequenceId)
{
{
return dummy;
}
+
+ /**
+ * Always suppress /start-end for display name as we don't know it
+ */
+ @Override
+ public String getDisplayId(boolean jvsuffix)
+ {
+ // required for correct behaviour of SequenceIdMatcher
+ return super.getDisplayId(false);
+ }
}
*/
package jalview.datamodel;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Vector;
/**
*/
public class SequenceFeature
{
+ private static final String STATUS = "status";
+
+ private static final String STRAND = "STRAND";
+
+ // private key for Phase designed not to conflict with real GFF data
+ private static final String PHASE = "!Phase";
+
+ /*
+ * ATTRIBUTES is reserved for the GFF 'column 9' data, formatted as
+ * name1=value1;name2=value2,value3;...etc
+ */
+ private static final String ATTRIBUTES = "ATTRIBUTES";
+
public int begin;
public int end;
public String description;
- public Hashtable otherDetails;
+ public Map<String, Object> otherDetails;
public Vector<String> links;
}
/**
- * Constructs a duplicate feature. Note: Uses clone on the otherDetails so
- * only shallow copies are made of additional properties and method will
- * silently fail if unclonable objects are found in the hash.
+ * Constructs a duplicate feature. Note: Uses makes a shallow copy of the
+ * otherDetails map, so the new and original SequenceFeature may reference the
+ * same objects in the map.
*
* @param cpy
*/
{
try
{
- otherDetails = (Hashtable) cpy.otherDetails.clone();
+ otherDetails = (Map<String, Object>) ((HashMap<String, Object>) cpy.otherDetails)
+ .clone();
} catch (Exception e)
{
- // Uncloneable objects in the otherDetails - don't complain
+ // ignore
}
}
if (cpy.links != null && cpy.links.size() > 0)
}
}
+ /**
+ * Constructor including a Status value
+ *
+ * @param type
+ * @param desc
+ * @param status
+ * @param begin
+ * @param end
+ * @param featureGroup
+ */
public SequenceFeature(String type, String desc, String status,
int begin, int end, String featureGroup)
{
+ this(type, desc, begin, end, featureGroup);
+ setStatus(status);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param type
+ * @param desc
+ * @param begin
+ * @param end
+ * @param featureGroup
+ */
+ SequenceFeature(String type, String desc, int begin, int end,
+ String featureGroup)
+ {
this.type = type;
this.description = desc;
- setValue("status", status);
this.begin = begin;
this.end = end;
this.featureGroup = featureGroup;
}
+ /**
+ * Constructor including a score value
+ *
+ * @param type
+ * @param desc
+ * @param begin
+ * @param end
+ * @param score
+ * @param featureGroup
+ */
public SequenceFeature(String type, String desc, int begin, int end,
float score, String featureGroup)
{
- this.type = type;
- this.description = desc;
- this.begin = begin;
- this.end = end;
+ this(type, desc, begin, end, featureGroup);
this.score = score;
- this.featureGroup = featureGroup;
}
- public boolean equals(SequenceFeature sf)
+ /**
+ * Two features are considered equal if they have the same type, group,
+ * description, start, end, phase, strand, and (if present) 'Name', ID' and
+ * 'Parent' attributes.
+ *
+ * Note we need to check Parent to distinguish the same exon occurring in
+ * different transcripts (in Ensembl GFF). This allows assembly of transcript
+ * sequences from their component exon regions.
+ */
+ @Override
+ public boolean equals(Object o)
{
+ return equals(o, false);
+ }
+
+ /**
+ * Overloaded method allows the equality test to optionally ignore the
+ * 'Parent' attribute of a feature. This supports avoiding adding many
+ * superficially duplicate 'exon' or CDS features to genomic or protein
+ * sequence.
+ *
+ * @param o
+ * @param ignoreParent
+ * @return
+ */
+ public boolean equals(Object o, boolean ignoreParent)
+ {
+ if (o == null || !(o instanceof SequenceFeature))
+ {
+ return false;
+ }
+
+ SequenceFeature sf = (SequenceFeature) o;
if (begin != sf.begin || end != sf.end || score != sf.score)
{
return false;
}
- if (!(type + description + featureGroup).equals(sf.type
- + sf.description + sf.featureGroup))
+ if (getStrand() != sf.getStrand())
{
return false;
}
+ if (!(type + description + featureGroup + getPhase()).equals(sf.type
+ + sf.description + sf.featureGroup + sf.getPhase()))
+ {
+ return false;
+ }
+ if (!equalAttribute(getValue("ID"), sf.getValue("ID")))
+ {
+ return false;
+ }
+ if (!equalAttribute(getValue("Name"), sf.getValue("Name")))
+ {
+ return false;
+ }
+ if (!ignoreParent)
+ {
+ if (!equalAttribute(getValue("Parent"), sf.getValue("Parent")))
+ {
+ return false;
+ }
+ }
return true;
}
/**
+ * Returns true if both values are null, are both non-null and equal
+ *
+ * @param att1
+ * @param att2
+ * @return
+ */
+ protected static boolean equalAttribute(Object att1, Object att2)
+ {
+ if (att1 == null && att2 == null)
+ {
+ return true;
+ }
+ if (att1 != null)
+ {
+ return att1.equals(att2);
+ }
+ return att2.equals(att1);
+ }
+
+ /**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
}
/**
- * Used for getting values which are not in the basic set. eg STRAND, FRAME
+ * Used for getting values which are not in the basic set. eg STRAND, PHASE
* for GFF file
*
* @param key
}
/**
+ * Returns a property value for the given key if known, else the specified
+ * default value
+ *
+ * @param key
+ * @param defaultValue
+ * @return
+ */
+ public Object getValue(String key, Object defaultValue)
+ {
+ Object value = getValue(key);
+ return value == null ? defaultValue : value;
+ }
+
+ /**
* Used for setting values which are not in the basic set. eg STRAND, FRAME
* for GFF file
*
{
if (otherDetails == null)
{
- otherDetails = new Hashtable();
+ otherDetails = new HashMap<String, Object>();
}
otherDetails.put(key, value);
*/
public void setStatus(String status)
{
- setValue("status", status);
+ setValue(STATUS, status);
}
public String getStatus()
{
- if (otherDetails != null)
- {
- String stat = (String) otherDetails.get("status");
- if (stat != null)
- {
- return new String(stat);
- }
- }
- return null;
+ return (String) getValue(STATUS);
+ }
+
+ public void setAttributes(String attr)
+ {
+ setValue(ATTRIBUTES, attr);
+ }
+
+ public String getAttributes()
+ {
+ return (String) getValue(ATTRIBUTES);
}
public void setPosition(int pos)
return begin;
}
+ /**
+ * Return 1 for forward strand ('+' in GFF), -1 for reverse strand ('-' in
+ * GFF), and 0 for unknown or not (validly) specified
+ *
+ * @return
+ */
public int getStrand()
{
- String str;
- if (otherDetails == null
- || (str = otherDetails.get("STRAND").toString()) == null)
- {
- return 0;
- }
- if (str.equals("-"))
- {
- return -1;
- }
- if (str.equals("+"))
+ int strand = 0;
+ if (otherDetails != null)
{
- return 1;
+ Object str = otherDetails.get(STRAND);
+ if ("-".equals(str))
+ {
+ strand = -1;
+ }
+ else if ("+".equals(str))
+ {
+ strand = 1;
+ }
}
- return 0;
+ return strand;
+ }
+
+ /**
+ * Set the value of strand
+ *
+ * @param strand
+ * should be "+" for forward, or "-" for reverse
+ */
+ public void setStrand(String strand)
+ {
+ setValue(STRAND, strand);
}
+ public void setPhase(String phase)
+ {
+ setValue(PHASE, phase);
+ }
+
+ public String getPhase()
+ {
+ return (String) getValue(PHASE);
+ }
+
+ /**
+ * Readable representation, for debug only, not guaranteed not to change
+ * between versions
+ */
+ @Override
+ public String toString()
+ {
+ return String.format("%d %d %s %s", getBegin(), getEnd(), getType(),
+ getDescription());
+ }
+
+ /**
+ * Overridden to ensure that whenever two objects are equal, they have the
+ * same hashCode
+ */
+ @Override
+ public int hashCode()
+ {
+ String s = getType() + getDescription() + getFeatureGroup()
+ + getValue("ID") + getValue("Name") + getValue("Parent")
+ + getPhase();
+ return s.hashCode() + getBegin() + getEnd() + (int) getScore()
+ + getStrand();
+ }
}
public void insertCharAt(int position, int count, char ch);
/**
- * DOCUMENT ME!
+ * Gets array holding sequence features associated with this sequence. The
+ * array may be held by the sequence's dataset sequence if that is defined.
*
- * @return DOCUMENT ME!
+ * @return hard reference to array
*/
public SequenceFeature[] getSequenceFeatures();
/**
- * DOCUMENT ME!
+ * Replaces the array of sequence features associated with this sequence with
+ * a new array reference. If this sequence has a dataset sequence, then this
+ * method will update the dataset sequence's feature array
*
- * @param v
- * DOCUMENT ME!
+ * @param features
+ * New array of sequence features
*/
public void setSequenceFeatures(SequenceFeature[] features);
*/
package jalview.datamodel.xdb.embl;
+import jalview.analysis.SequenceIdMatcher;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
import jalview.datamodel.FeatureProperties;
import jalview.datamodel.Sequence;
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
+import jalview.util.DBRefUtils;
+import jalview.util.MapList;
+import jalview.util.MappingUtils;
+import jalview.util.StringUtils;
+import java.util.Arrays;
import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.Vector;
+import java.util.regex.Pattern;
/**
* Data model for one entry returned from an EMBL query, as marshalled by a
* Castor binding file
*
- * For example: http://www.ebi.ac.uk/Tools/dbfetch/dbfetch/embl/x53828/emblxml
+ * For example:
+ * http://www.ebi.ac.uk/Tools/dbfetch/dbfetch?db=ena_sequence&id=J03321
+ * &format=emblxml
*
* @see embl_mapping.xml
*/
public class EmblEntry
{
+ private static final Pattern SPACE_PATTERN = Pattern.compile(" ");
+
String accession;
String version;
this.version = version;
}
- /*
- * EMBL Feature support is limited. The text below is included for the benefit
- * of any developer working on improving EMBL feature import in Jalview.
- * Extract from EMBL feature specification see
- * http://www.embl-ebi.ac.uk/embl/Documentation
- * /FT_definitions/feature_table.html 3.5 Location 3.5.1 Purpose
- *
- * The location indicates the region of the presented sequence which
- * corresponds to a feature.
- *
- * 3.5.2 Format and conventions The location contains at least one sequence
- * location descriptor and may contain one or more operators with one or more
- * sequence location descriptors. Base numbers refer to the numbering in the
- * entry. This numbering designates the first base (5' end) of the presented
- * sequence as base 1. Base locations beyond the range of the presented
- * sequence may not be used in location descriptors, the only exception being
- * location in a remote entry (see 3.5.2.1, e).
- *
- * Location operators and descriptors are discussed in more detail below.
- *
- * 3.5.2.1 Location descriptors
- *
- * The location descriptor can be one of the following: (a) a single base
- * number (b) a site between two indicated adjoining bases (c) a single base
- * chosen from within a specified range of bases (not allowed for new entries)
- * (d) the base numbers delimiting a sequence span (e) a remote entry
- * identifier followed by a local location descriptor (i.e., a-d)
- *
- * A site between two adjoining nucleotides, such as endonucleolytic cleavage
- * site, is indicated by listing the two points separated by a carat (^). The
- * permitted formats for this descriptor are n^n+1 (for example 55^56), or,
- * for circular molecules, n^1, where "n" is the full length of the molecule,
- * ie 1000^1 for circular molecule with length 1000.
- *
- * A single base chosen from a range of bases is indicated by the first base
- * number and the last base number of the range separated by a single period
- * (e.g., '12.21' indicates a single base taken from between the indicated
- * points). From October 2006 the usage of this descriptor is restricted : it
- * is illegal to use "a single base from a range" (c) either on its own or in
- * combination with the "sequence span" (d) descriptor for newly created
- * entries. The existing entries where such descriptors exist are going to be
- * retrofitted.
- *
- * Sequence spans are indicated by the starting base number and the ending
- * base number separated by two periods (e.g., '34..456'). The '<' and '>'
- * symbols may be used with the starting and ending base numbers to indicate
- * that an end point is beyond the specified base number. The starting and
- * ending base positions can be represented as distinct base numbers
- * ('34..456') or a site between two indicated adjoining bases.
- *
- * A location in a remote entry (not the entry to which the feature table
- * belongs) can be specified by giving the accession-number and sequence
- * version of the remote entry, followed by a colon ":", followed by a
- * location descriptor which applies to that entry's sequence (i.e.
- * J12345.1:1..15, see also examples below)
- *
- * 3.5.2.2 Operators
- *
- * The location operator is a prefix that specifies what must be done to the
- * indicated sequence to find or construct the location corresponding to the
- * feature. A list of operators is given below with their definitions and most
- * common format.
- *
- * complement(location) Find the complement of the presented sequence in the
- * span specified by " location" (i.e., read the complement of the presented
- * strand in its 5'-to-3' direction)
- *
- * join(location,location, ... location) The indicated elements should be
- * joined (placed end-to-end) to form one contiguous sequence
- *
- * order(location,location, ... location) The elements can be found in the
- * specified order (5' to 3' direction), but nothing is implied about the
- * reasonableness about joining them
- *
- * Note : location operator "complement" can be used in combination with
- * either " join" or "order" within the same location; combinations of "join"
- * and "order" within the same location (nested operators) are illegal.
- *
- *
- *
- * 3.5.3 Location examples
- *
- * The following is a list of common location descriptors with their meanings:
- *
- * Location Description
- *
- * 467 Points to a single base in the presented sequence
- *
- * 340..565 Points to a continuous range of bases bounded by and including the
- * starting and ending bases
- *
- * <345..500 Indicates that the exact lower boundary point of a feature is
- * unknown. The location begins at some base previous to the first base
- * specified (which need not be contained in the presented sequence) and
- * continues to and includes the ending base
- *
- * <1..888 The feature starts before the first sequenced base and continues to
- * and includes base 888
- *
- * 1..>888 The feature starts at the first sequenced base and continues beyond
- * base 888
- *
- * 102.110 Indicates that the exact location is unknown but that it is one of
- * the bases between bases 102 and 110, inclusive
- *
- * 123^124 Points to a site between bases 123 and 124
- *
- * join(12..78,134..202) Regions 12 to 78 and 134 to 202 should be joined to
- * form one contiguous sequence
- *
- *
- * complement(34..126) Start at the base complementary to 126 and finish at
- * the base complementary to base 34 (the feature is on the strand
- * complementary to the presented strand)
- *
- *
- * complement(join(2691..4571,4918..5163)) Joins regions 2691 to 4571 and 4918
- * to 5163, then complements the joined segments (the feature is on the strand
- * complementary to the presented strand)
- *
- * join(complement(4918..5163),complement(2691..4571)) Complements regions
- * 4918 to 5163 and 2691 to 4571, then joins the complemented segments (the
- * feature is on the strand complementary to the presented strand)
- *
- * J00194.1:100..202 Points to bases 100 to 202, inclusive, in the entry (in
- * this database) with primary accession number 'J00194'
- *
- * join(1..100,J00194.1:100..202) Joins region 1..100 of the existing entry
- * with the region 100..202 of remote entry J00194
- */
/**
* Recover annotated sequences from EMBL file
*
- * @param noNa
- * don't return nucleic acid sequences
* @param sourceDb
- * TODO
- * @param noProtein
- * don't return any translated protein sequences marked in features
- * @return dataset sequences with DBRefs and features - DNA always comes first
+ * @param peptides
+ * a list of protein products found so far (to add to)
+ * @return dna dataset sequence with DBRefs and features
*/
- public jalview.datamodel.SequenceI[] getSequences(boolean noNa,
- boolean noPeptide, String sourceDb)
- { // TODO: ensure emblEntry.getSequences behaves correctly for returning all
- // cases of noNa and noPeptide
- Vector<SequenceI> seqs = new Vector<SequenceI>();
- Sequence dna = null;
- if (!noNa)
+ public SequenceI getSequence(String sourceDb, List<SequenceI> peptides)
+ {
+ SequenceI dna = new Sequence(sourceDb + "|" + accession,
+ sequence.getSequence());
+ dna.setDescription(desc);
+ DBRefEntry retrievedref = new DBRefEntry(sourceDb, version, accession);
+ dna.addDBRef(retrievedref);
+ // add map to indicate the sequence is a valid coordinate frame for the
+ // dbref
+ retrievedref.setMap(new Mapping(null, new int[] { 1, dna.getLength() },
+ new int[] { 1, dna.getLength() }, 1, 1));
+ // TODO: transform EMBL Database refs to canonical form
+ if (dbRefs != null)
{
- // In theory we still need to create this if noNa is set to avoid a null
- // pointer exception
- dna = new Sequence(sourceDb + "|" + accession, sequence.getSequence());
- dna.setDescription(desc);
- DBRefEntry retrievedref = new DBRefEntry(sourceDb, version, accession);
- dna.addDBRef(retrievedref);
- // add map to indicate the sequence is a valid coordinate frame for the
- // dbref
- retrievedref.setMap(new Mapping(null,
- new int[] { 1, dna.getLength() }, new int[] { 1,
- dna.getLength() }, 1, 1));
- // TODO: transform EMBL Database refs to canonical form
- if (dbRefs != null)
+ for (DBRefEntry dbref : dbRefs)
{
- for (DBRefEntry dbref : dbRefs)
- {
- dna.addDBRef(dbref);
- }
+ dna.addDBRef(dbref);
}
}
+
try
{
for (EmblFeature feature : features)
{
- if (!noNa)
+ if (feature.dbRefs != null)
{
- if (feature.dbRefs != null)
+ for (DBRefEntry dbref : feature.dbRefs)
{
- for (DBRefEntry dbref : feature.dbRefs)
- {
- dna.addDBRef(dbref);
- }
+ dna.addDBRef(dbref);
}
}
if (FeatureProperties.isCodingFeature(sourceDb, feature.getName()))
{
- parseCodingFeature(feature, sourceDb, seqs, dna, noPeptide);
- }
- else
- {
- // General feature type.
- // TODO this is just duplicated code ??
- if (!noNa)
- {
- if (feature.dbRefs != null)
- {
- for (DBRefEntry dbref : feature.dbRefs)
- {
- dna.addDBRef(dbref);
- }
- }
- }
+ parseCodingFeature(feature, sourceDb, dna, peptides);
}
}
} catch (Exception e)
System.err.println("Resulted in exception: " + e.getMessage());
e.printStackTrace(System.err);
}
- if (!noNa && dna != null)
- {
- seqs.add(dna);
- }
- SequenceI[] sqs = new SequenceI[seqs.size()];
- for (int i = 0, j = seqs.size(); i < j; i++)
- {
- sqs[i] = seqs.elementAt(i);
- seqs.set(i, null);
- }
- return sqs;
+
+ return dna;
}
/**
- * attempt to extract coding region and product from a feature and properly
- * decorate it with annotations.
+ * Extracts coding region and product from a CDS feature and properly decorate
+ * it with annotations.
*
* @param feature
* coding feature
* @param sourceDb
* source database for the EMBLXML
- * @param seqs
- * place where sequences go
* @param dna
* parent dna sequence for this record
- * @param noPeptide
- * flag for generation of Peptide sequence objects
+ * @param peptides
+ * list of protein product sequences for Embl entry
*/
- private void parseCodingFeature(EmblFeature feature, String sourceDb,
- Vector<SequenceI> seqs, Sequence dna, boolean noPeptide)
+ void parseCodingFeature(EmblFeature feature, String sourceDb,
+ SequenceI dna, List<SequenceI> peptides)
{
boolean isEmblCdna = sourceDb.equals(DBRefSource.EMBLCDS);
- // extract coding region(s)
- jalview.datamodel.Mapping map = null;
- int[] exon = null;
- if (feature.locations != null)
- {
- for (EmblFeatureLocations loc : feature.locations)
- {
- int[] se = loc.getElementRanges(accession);
- if (exon == null)
- {
- exon = se;
- }
- else
- {
- int[] t = new int[exon.length + se.length];
- System.arraycopy(exon, 0, t, 0, exon.length);
- System.arraycopy(se, 0, t, exon.length, se.length);
- exon = t;
- }
- }
- }
+
+ int[] exon = getCdsRanges(feature);
+
String prseq = null;
- String prname = new String();
+ String prname = "";
String prid = null;
- Hashtable<String, String> vals = new Hashtable<String, String>();
- int prstart = 1;
- // get qualifiers
+ Map<String, String> vals = new Hashtable<String, String>();
+ SequenceIdMatcher matcher = new SequenceIdMatcher(peptides);
+
+ /*
+ * codon_start 1/2/3 in EMBL corresponds to phase 0/1/2 in CDS
+ * (phase is required for CDS features in GFF3 format)
+ */
+ int codonStart = 1;
+
+ /*
+ * parse qualifiers, saving protein translation, protein id,
+ * codon start position, product (name), and 'other values'
+ */
if (feature.getQualifiers() != null)
{
for (Qualifier q : feature.getQualifiers())
String qname = q.getName();
if (qname.equals("translation"))
{
- StringBuilder prsq = new StringBuilder(q.getValues()[0]);
- int p = prsq.indexOf(" ");
- while (p > -1)
- {
- prsq.deleteCharAt(p);
- p = prsq.indexOf(" ", p);
- }
- prseq = prsq.toString();
- prsq = null;
-
+ // remove all spaces (precompiled String.replaceAll(" ", ""))
+ prseq = SPACE_PATTERN.matcher(q.getValues()[0]).replaceAll("");
}
else if (qname.equals("protein_id"))
{
}
else if (qname.equals("codon_start"))
{
- prstart = Integer.parseInt(q.getValues()[0]);
+ try
+ {
+ codonStart = Integer.parseInt(q.getValues()[0]);
+ } catch (NumberFormatException e)
+ {
+ System.err.println("Invalid codon_start in XML for "
+ + accession + ": " + e.getMessage());
+ }
}
else if (qname.equals("product"))
{
+ // sometimes name is returned e.g. for V00488
prname = q.getValues()[0];
}
else
{
// throw anything else into the additional properties hash
- String[] s = q.getValues();
- StringBuilder sb = new StringBuilder();
- if (s != null)
+ String[] qvals = q.getValues();
+ if (qvals != null)
{
- for (int i = 0; i < s.length; i++)
- {
- sb.append(s[i]);
- sb.append("\n");
- }
+ String commaSeparated = StringUtils.arrayToSeparatorList(qvals,
+ ",");
+ vals.put(qname, commaSeparated);
}
- vals.put(qname, sb.toString());
}
}
}
- Sequence product = null;
+
DBRefEntry protEMBLCDS = null;
- exon = adjustForPrStart(prstart, exon);
+ exon = MappingUtils.removeStartPositions(codonStart - 1, exon);
boolean noProteinDbref = true;
+ SequenceI product = null;
+ Mapping map = null;
if (prseq != null && prname != null && prid != null)
{
- // extract proteins.
- product = new Sequence(prid, prseq, 1, prseq.length());
- product.setDescription(((prname.length() == 0) ? "Protein Product from "
- + sourceDb
- : prname));
- if (!noPeptide)
+ /*
+ * look for product in peptides list, if not found, add it
+ */
+ product = matcher.findIdMatch(prid);
+ if (product == null)
{
- // Protein is also added to vector of sequences returned
- seqs.add(product);
+ product = new Sequence(prid, prseq, 1, prseq.length());
+ product.setDescription(((prname.length() == 0) ? "Protein Product from "
+ + sourceDb
+ : prname));
+ peptides.add(product);
+ matcher.add(product);
}
+
// we have everything - create the mapping and perhaps the protein
// sequence
if (exon == null || exon.length == 0)
System.err
.println("Implementation Notice: EMBLCDS records not properly supported yet - Making up the CDNA region of this sequence... may be incorrect ("
+ sourceDb + ":" + getAccession() + ")");
- if (prseq.length() * 3 == (1 - prstart + dna.getSequence().length))
+ if (prseq.length() * 3 == (1 - codonStart + dna.getSequence().length))
{
System.err
.println("Not allowing for additional stop codon at end of cDNA fragment... !");
// this might occur for CDS sequences where no features are
// marked.
- exon = new int[] { dna.getStart() + (prstart - 1), dna.getEnd() };
- map = new jalview.datamodel.Mapping(product, exon, new int[] { 1,
- prseq.length() }, 3, 1);
+ exon = new int[] { dna.getStart() + (codonStart - 1),
+ dna.getEnd() };
+ map = new Mapping(product, exon, new int[] { 1, prseq.length() },
+ 3, 1);
}
- if ((prseq.length() + 1) * 3 == (1 - prstart + dna.getSequence().length))
+ if ((prseq.length() + 1) * 3 == (1 - codonStart + dna.getSequence().length))
{
System.err
.println("Allowing for additional stop codon at end of cDNA fragment... will probably cause an error in VAMSAs!");
- exon = new int[] { dna.getStart() + (prstart - 1),
+ exon = new int[] { dna.getStart() + (codonStart - 1),
dna.getEnd() - 3 };
- map = new jalview.datamodel.Mapping(product, exon, new int[] { 1,
- prseq.length() }, 3, 1);
+ map = new Mapping(product, exon, new int[] { 1, prseq.length() },
+ 3, 1);
}
}
else
}
else
{
- // final product length trunctation check
-
- map = new jalview.datamodel.Mapping(product,
- adjustForProteinLength(prseq.length(), exon), new int[] {
- 1, prseq.length() }, 3, 1);
+ // final product length truncation check
+ // TODO should from range include stop codon even if not in protein
+ // in order to include stop codon in CDS sequence (as done for
+ // Ensembl)?
+ int[] cdsRanges = adjustForProteinLength(prseq.length(), exon);
+ map = new Mapping(product, cdsRanges, new int[] { 1,
+ prseq.length() }, 3, 1);
// reconstruct the EMBLCDS entry
// TODO: this is only necessary when there codon annotation is
// complete (I think JBPNote)
pcdnaref.setAccessionId(prid);
pcdnaref.setSource(DBRefSource.EMBLCDS);
pcdnaref.setVersion(getVersion()); // same as parent EMBL version.
- jalview.util.MapList mp = new jalview.util.MapList(new int[] { 1,
- prseq.length() }, new int[] { 1 + (prstart - 1),
- (prstart - 1) + 3 * prseq.length() }, 1, 3);
- // { 1 + (prstart - 1) * 3,
- // 1 + (prstart - 1) * 3 + prseq.length() * 3 - 1 }, new int[]
- // { 1prstart, prstart + prseq.length() - 1 }, 3, 1);
+ MapList mp = new MapList(new int[] { 1, prseq.length() },
+ new int[] { 1 + (codonStart - 1),
+ (codonStart - 1) + 3 * prseq.length() }, 1, 3);
pcdnaref.setMap(new Mapping(mp));
if (product != null)
{
protEMBLCDS = new DBRefEntry(pcdnaref);
protEMBLCDS.setSource(DBRefSource.EMBLCDSProduct);
product.addDBRef(protEMBLCDS);
-
}
-
}
}
// add cds feature to dna seq - this may include the stop codon
for (int xint = 0; exon != null && xint < exon.length; xint += 2)
{
- SequenceFeature sf = new SequenceFeature();
- sf.setBegin(exon[xint]);
- sf.setEnd(exon[xint + 1]);
- sf.setType(feature.getName());
+ SequenceFeature sf = makeCdsFeature(exon, xint, prname, prid, vals,
+ codonStart);
+ sf.setType(feature.getName()); // "CDS"
sf.setFeatureGroup(sourceDb);
- sf.setDescription("Exon " + (1 + xint / 2) + " for protein '"
- + prname + "' EMBLCDS:" + prid);
- sf.setValue(FeatureProperties.EXONPOS, new Integer(1 + xint));
- sf.setValue(FeatureProperties.EXONPRODUCT, prname);
- if (vals != null)
- {
- for (Entry<String, String> val : vals.entrySet())
- {
- sf.setValue(val.getKey(), val.getValue());
- }
- }
dna.addSequenceFeature(sf);
}
}
- // add dbRefs to sequence
+
+ /*
+ * add dbRefs to sequence, and mappings for Uniprot xrefs
+ */
if (feature.dbRefs != null)
{
+ boolean mappingUsed = false;
for (DBRefEntry ref : feature.dbRefs)
{
- ref.setSource(jalview.util.DBRefUtils.getCanonicalName(ref
- .getSource()));
- // Hard code the kind of protein product accessions that EMBL cite
- if (ref.getSource().equals(jalview.datamodel.DBRefSource.UNIPROT))
+ ref.setSource(DBRefUtils.getCanonicalName(ref.getSource()));
+ if (ref.getSource().equals(DBRefSource.UNIPROT))
{
- ref.setMap(map);
+ String proteinSeqName = DBRefSource.UNIPROT + "|"
+ + ref.getAccessionId();
if (map != null && map.getTo() != null)
{
- map.getTo().addDBRef(
- new DBRefEntry(ref.getSource(), ref.getVersion(), ref
- .getAccessionId())); // don't copy map over.
- if (map.getTo().getName().indexOf(prid) == 0)
+ if (mappingUsed)
+ {
+ /*
+ * two or more Uniprot xrefs for the same CDS -
+ * each needs a distinct Mapping (as to a different sequence)
+ */
+ map = new Mapping(map);
+ }
+ mappingUsed = true;
+
+ /*
+ * try to locate the protein mapped to (possibly by a
+ * previous CDS feature)
+ */
+ SequenceI proteinSeq = matcher.findIdMatch(proteinSeqName);
+ if (proteinSeq == null)
{
- map.getTo().setName(
- jalview.datamodel.DBRefSource.UNIPROT + "|"
- + ref.getAccessionId());
+ proteinSeq = new Sequence(proteinSeqName,
+ product.getSequenceAsString());
+ matcher.add(proteinSeq);
+ peptides.add(proteinSeq);
}
+ map.setTo(proteinSeq);
+ map.getTo().addDBRef(
+ new DBRefEntry(ref.getSource(), ref.getVersion(), ref
+ .getAccessionId()));
+ ref.setMap(map);
}
noProteinDbref = false;
}
}
}
- private int[] adjustForPrStart(int prstart, int[] exon)
+ /**
+ * Helper method to construct a SequenceFeature for one cds range
+ *
+ * @param exons
+ * array of cds [start, end, ...] positions
+ * @param exonStartIndex
+ * offset into the exons array
+ * @param proteinName
+ * @param proteinAccessionId
+ * @param vals
+ * map of 'miscellaneous values' for feature
+ * @param codonStart
+ * codon start position for CDS (1/2/3, normally 1)
+ * @return
+ */
+ protected SequenceFeature makeCdsFeature(int[] exons, int exonStartIndex,
+ String proteinName, String proteinAccessionId,
+ Map<String, String> vals, int codonStart)
{
-
- int origxon[], sxpos = -1;
- int sxstart, sxstop; // unnecessary variables used for debugging
- // first adjust range for codon start attribute
- if (prstart > 1)
+ int exonNumber = exonStartIndex / 2 + 1;
+ SequenceFeature sf = new SequenceFeature();
+ sf.setBegin(Math.min(exons[exonStartIndex], exons[exonStartIndex + 1]));
+ sf.setEnd(Math.max(exons[exonStartIndex], exons[exonStartIndex + 1]));
+ sf.setDescription(String.format("Exon %d for protein '%s' EMBLCDS:%s",
+ exonNumber, proteinName, proteinAccessionId));
+ sf.setPhase(String.valueOf(codonStart - 1));
+ sf.setStrand(exons[exonStartIndex] <= exons[exonStartIndex + 1] ? "+"
+ : "-");
+ sf.setValue(FeatureProperties.EXONPOS, exonNumber);
+ sf.setValue(FeatureProperties.EXONPRODUCT, proteinName);
+ if (!vals.isEmpty())
{
- origxon = new int[exon.length];
- System.arraycopy(exon, 0, origxon, 0, exon.length);
- int cdspos = 0;
- for (int x = 0; x < exon.length && sxpos == -1; x += 2)
+ StringBuilder sb = new StringBuilder();
+ boolean first = true;
+ for (Entry<String, String> val : vals.entrySet())
{
- cdspos += exon[x + 1] - exon[x] + 1;
- if (prstart <= cdspos)
+ if (!first)
{
- sxpos = x;
- sxstart = exon[x];
- sxstop = exon[x + 1];
- // and adjust start boundary of first exon.
- exon[x] = exon[x + 1] - cdspos + prstart;
- break;
+ sb.append(";");
}
+ sb.append(val.getKey()).append("=").append(val.getValue());
+ first = false;
+ sf.setValue(val.getKey(), val.getValue());
}
+ sf.setAttributes(sb.toString());
+ }
+ return sf;
+ }
- if (sxpos > 0)
- {
- int[] nxon = new int[exon.length - sxpos];
- System.arraycopy(exon, sxpos, nxon, 0, exon.length - sxpos);
- exon = nxon;
- }
+ /**
+ * Returns the CDS positions as a list of [start, end, start, end...]
+ * positions. If on the reverse strand, these will be in descending order.
+ *
+ * @param feature
+ * @return
+ */
+ protected int[] getCdsRanges(EmblFeature feature)
+ {
+ if (feature.locations == null)
+ {
+ return new int[] {};
}
- return exon;
+ int cdsBoundaryCount = 0; // count of all start/stop locations
+ int[][] cdsLocations = new int[feature.locations.size()][];
+ int locationNumber = 0;
+ for (EmblFeatureLocations loc : feature.locations)
+ {
+ int[] locationRanges = loc.getElementRanges(accession);
+ cdsLocations[locationNumber++] = locationRanges;
+ cdsBoundaryCount += locationRanges.length;
+ }
+ int[] cdsRanges = new int[cdsBoundaryCount];
+ int copyTo = 0;
+ for (int[] ranges : cdsLocations)
+ {
+ System.arraycopy(ranges, 0, cdsRanges, copyTo, ranges.length);
+ copyTo += ranges.length;
+ }
+ return cdsRanges;
+
}
/**
* @param exon
* @return new exon
*/
- private int[] adjustForProteinLength(int prlength, int[] exon)
+ static int[] adjustForProteinLength(int prlength, int[] exon)
{
+ if (prlength <= 0 || exon == null)
+ {
+ return exon;
+ }
+ int desiredCdsLength = prlength * 3;
+ int exonLength = MappingUtils.getLength(Arrays.asList(exon));
+
+ /*
+ * assuming here exon might include stop codon in addition to protein codons
+ */
+ if (desiredCdsLength == exonLength
+ || desiredCdsLength == exonLength - 3)
+ {
+ return exon;
+ }
- int origxon[], sxpos = -1, endxon = 0, cdslength = prlength * 3;
- int sxstart, sxstop; // unnecessary variables used for debugging
- // first adjust range for codon start attribute
- if (prlength >= 1 && exon != null)
+ int origxon[];
+ int sxpos = -1;
+ int endxon = 0;
+ origxon = new int[exon.length];
+ System.arraycopy(exon, 0, origxon, 0, exon.length);
+ int cdspos = 0;
+ for (int x = 0; x < exon.length; x += 2)
{
- origxon = new int[exon.length];
- System.arraycopy(exon, 0, origxon, 0, exon.length);
- int cdspos = 0;
- for (int x = 0; x < exon.length && sxpos == -1; x += 2)
+ cdspos += Math.abs(exon[x + 1] - exon[x]) + 1;
+ if (desiredCdsLength <= cdspos)
{
- cdspos += exon[x + 1] - exon[x] + 1;
- if (cdslength <= cdspos)
+ // advanced beyond last codon.
+ sxpos = x;
+ if (desiredCdsLength != cdspos)
{
- // advanced beyond last codon.
- sxpos = x;
- sxstart = exon[x];
- sxstop = exon[x + 1];
- if (cdslength != cdspos)
- {
- System.err
- .println("Truncating final exon interval on region by "
- + (cdspos - cdslength));
- }
- // locate the new end boundary of final exon as endxon
- endxon = exon[x + 1] - cdspos + cdslength;
- break;
+ // System.err
+ // .println("Truncating final exon interval on region by "
+ // + (cdspos - cdslength));
}
- }
- if (sxpos != -1)
- {
- // and trim the exon interval set if necessary
- int[] nxon = new int[sxpos + 2];
- System.arraycopy(exon, 0, nxon, 0, sxpos + 2);
- nxon[sxpos + 1] = endxon; // update the end boundary for the new exon
- // set
- exon = nxon;
+ /*
+ * shrink the final exon - reduce end position if forward
+ * strand, increase it if reverse
+ */
+ if (exon[x + 1] >= exon[x])
+ {
+ endxon = exon[x + 1] - cdspos + desiredCdsLength;
+ }
+ else
+ {
+ endxon = exon[x + 1] + cdspos - desiredCdsLength;
+ }
+ break;
}
}
+
+ if (sxpos != -1)
+ {
+ // and trim the exon interval set if necessary
+ int[] nxon = new int[sxpos + 2];
+ System.arraycopy(exon, 0, nxon, 0, sxpos + 2);
+ nxon[sxpos + 1] = endxon; // update the end boundary for the new exon
+ // set
+ exon = nxon;
+ }
return exon;
}
}
*/
package jalview.datamodel.xdb.embl;
+import jalview.bin.Cache;
+import jalview.util.ArrayUtils;
+
+import java.util.Arrays;
import java.util.Vector;
/**
- * Data model for a <loctaion> child element of a <feature> read
+ * Data model for a <location> child element of a <feature> read
* from an EMBL query reply
*
* @see embl_mapping.xml
+ * @see http://www.insdc.org/files/feature_table.html#3.4.2
*/
public class EmblFeatureLocations
{
}
/**
- * Return all location elements concerning given accession as start-end pairs
- * TODO: pass back complement and 'less than or more than' range information
- * TODO: deal with multiple accessions
+ * Return all location elements concerning given accession as start-end pairs.
+ * If the CDS feature is on the forward strand, then start <= end, if on the
+ * reverse strand then start > end.
*
* @param accession
* the accession string for which locations are requested, or null
* for all locations
- * @return null or int[] { start1, end1, ... }
+ * @return int[] { start1, end1, ... }
*/
-
- public int[] getElementRanges(String accession)
+ int[] getElementRanges(String accession)
{
int sepos = 0;
int[] se = new int[locElements.size() * 2];
- if (locationType.equalsIgnoreCase("single")) // TODO: or "simple" ?
+ if ("single".equalsIgnoreCase(locationType)
+ || "join".equalsIgnoreCase(locationType))
{
for (EmblFeatureLocElement loce : locElements)
{
BasePosition bp[] = loce.getBasePositions();
if (bp.length == 2)
{
- se[sepos++] = Integer.parseInt(bp[0].getPos());
- se[sepos++] = Integer.parseInt(bp[1].getPos());
+ try
+ {
+ int start = Integer.parseInt(bp[0].getPos());
+ int end = Integer.parseInt(bp[1].getPos());
+ se[sepos++] = start;
+ se[sepos++] = end;
+ } catch (NumberFormatException e)
+ {
+ System.err
+ .println("format error in EMBL CDS location basePosition: "
+ + e.getMessage());
+ }
}
- }
- }
- }
- else if (locationType.equalsIgnoreCase("join"))
- {
- for (EmblFeatureLocElement loce : locElements)
- {
- if (accession == null || loce.accession != null
- && accession.equals(loce.accession))
- {
- BasePosition bp[] = loce.getBasePositions();
- if (bp.length == 2)
+ else
{
- se[sepos++] = Integer.parseInt(bp[0].getPos());
- se[sepos++] = Integer.parseInt(bp[1].getPos());
+ System.err
+ .println("format error in EMBL CDS location, basePosition count = "
+ + bp.length);
}
}
}
- return se;
}
else if (locationType != null)
{
- if (jalview.bin.Cache.log != null)
+ if (Cache.log != null)
{
- jalview.bin.Cache.log
- .error("EmbleFeatureLocations.getElementRanges cannot deal with locationType=='"
+ Cache.log
+ .error("EmblFeatureLocations.getElementRanges cannot deal with locationType=='"
+ locationType + "'");
}
else
{
System.err
- .println("EmbleFeatureLocations.getElementRanges cannot deal with locationType=='"
+ .println("EmblFeatureLocations.getElementRanges cannot deal with locationType=='"
+ locationType + "'");
}
}
- // trim range if necessary.
- if (se != null && sepos != se.length)
+
+ if (sepos != se.length)
+ {
+ /*
+ * we failed to parse something - trim off null values
+ */
+ se = Arrays.copyOf(se, sepos);
+ }
+
+ /*
+ * If on the complement, reverse the ranges to [end, start, ...end1, start1].
+ * For an example of a joined complement, see (tRNA feature) CAGL0B00165r on
+ * http://www.ebi.ac.uk/ena/data/view/CR380948&display=xml
+ * http://www.ebi.ac.uk/Tools/dbfetch/dbfetch/embl/CR380948/emblxml
+ */
+ if (locationComplement)
{
- int[] trimmed = new int[sepos];
- System.arraycopy(se, 0, trimmed, 0, sepos);
- se = trimmed;
+ ArrayUtils.reverseIntArray(se);
}
return se;
}
*/
package jalview.datamodel.xdb.embl;
+import jalview.datamodel.DBRefEntry;
+import jalview.ws.dbsources.Uniprot;
+
import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
unmar.setMapping(map);
unmar.setLogWriter(new PrintWriter(System.out));
record = (EmblFile) unmar.unmarshal(file);
+
+ canonicaliseDbRefs(record);
} catch (Exception e)
{
e.printStackTrace(System.err);
return record;
}
+
+ /**
+ * Change blank version to "0" in any DBRefEntry, to ensure consistent
+ * comparison with other DBRefEntry in Jalview
+ *
+ * @param record
+ * @see Uniprot#getDbVersion
+ */
+ static void canonicaliseDbRefs(EmblFile record)
+ {
+ for (EmblEntry entry : record.getEntries())
+ {
+ if (entry.getDbRefs() != null)
+ {
+ for (DBRefEntry dbref : entry.getDbRefs())
+ {
+ if ("".equals(dbref.getVersion()))
+ {
+ dbref.setVersion("0");
+ }
+ }
+ }
+
+ if (entry.getFeatures() != null)
+ {
+ for (EmblFeature feature : entry.getFeatures())
+ {
+ if (feature.getDbRefs() != null)
+ {
+ for (DBRefEntry dbref : feature.getDbRefs())
+ {
+ if ("".equals(dbref.getVersion()))
+ {
+ dbref.setVersion("0");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.SequenceFeature;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyI;
+
+import com.stevesoft.pat.Regex;
+
+/**
+ * A client to fetch CDNA sequence from Ensembl (i.e. that part of the genomic
+ * sequence that is transcribed to RNA, but not necessarily translated to
+ * protein)
+ *
+ * @author gmcarstairs
+ *
+ */
+public class EnsemblCdna extends EnsemblSeqProxy
+{
+ /*
+ * accepts ENST or ENSTG with 11 digits
+ * or ENSMUST or similar for other species
+ * or CCDSnnnnn.nn with at least 3 digits
+ */
+ private static final Regex ACCESSION_REGEX = new Regex(
+ "(ENS([A-Z]{3}|)[TG][0-9]{11}$)" + "|" + "(CCDS[0-9.]{3,}$)");
+
+ /*
+ * fetch exon features on genomic sequence (to identify the cdna regions)
+ * and cds and variation features (to retain)
+ */
+ private static final EnsemblFeatureType[] FEATURES_TO_FETCH = {
+ EnsemblFeatureType.exon, EnsemblFeatureType.cds,
+ EnsemblFeatureType.variation };
+
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblCdna()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblCdna(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "ENSEMBL (CDNA)";
+ }
+
+ @Override
+ protected EnsemblSeqType getSourceEnsemblType()
+ {
+ return EnsemblSeqType.CDNA;
+ }
+
+ @Override
+ public Regex getAccessionValidator()
+ {
+ return ACCESSION_REGEX;
+ }
+
+ @Override
+ protected EnsemblFeatureType[] getFeaturesToFetch()
+ {
+ return FEATURES_TO_FETCH;
+ }
+
+ /**
+ * Answers true unless the feature type is 'transcript' (or a sub-type in the
+ * Sequence Ontology).
+ */
+ @Override
+ protected boolean retainFeature(SequenceFeature sf, String accessionId)
+ {
+ if (isTranscript(sf.getType()))
+ {
+ return false;
+ }
+ return featureMayBelong(sf, accessionId);
+ }
+
+ /**
+ * Answers true if the sequence feature type is 'exon' (or a subtype of exon
+ * in the Sequence Ontology), and the Parent of the feature is the transcript
+ * we are retrieving
+ */
+ @Override
+ protected boolean identifiesSequence(SequenceFeature sf, String accId)
+ {
+ if (SequenceOntologyFactory.getInstance().isA(sf.getType(),
+ SequenceOntologyI.EXON))
+ {
+ String parentFeature = (String) sf.getValue(PARENT);
+ if (("transcript:" + accId).equals(parentFeature))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyI;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A client for direct fetching of CDS sequences from Ensembl (i.e. that part of
+ * the genomic sequence that is translated to protein)
+ *
+ * TODO: not currently used as CDS sequences are computed from CDS features on
+ * transcripts - delete this class?
+ *
+ * @author gmcarstairs
+ *
+ */
+public class EnsemblCds extends EnsemblSeqProxy
+{
+ /*
+ * fetch cds features on genomic sequence (to identify the CDS regions)
+ * and exon and variation features (to retain for display)
+ */
+ private static final EnsemblFeatureType[] FEATURES_TO_FETCH = {
+ EnsemblFeatureType.cds, EnsemblFeatureType.exon,
+ EnsemblFeatureType.variation };
+
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblCds()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblCds(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "ENSEMBL (CDS)";
+ }
+
+ @Override
+ protected EnsemblSeqType getSourceEnsemblType()
+ {
+ return EnsemblSeqType.CDS;
+ }
+
+ @Override
+ protected EnsemblFeatureType[] getFeaturesToFetch()
+ {
+ return FEATURES_TO_FETCH;
+ }
+
+ /**
+ * Answers true unless the feature type is 'CDS' (or a sub-type of CDS in the
+ * Sequence Ontology). CDS features are only retrieved in order to identify
+ * the cds sequence range, and are redundant information on the cds sequence
+ * itself.
+ */
+ @Override
+ protected boolean retainFeature(SequenceFeature sf, String accessionId)
+ {
+ if (SequenceOntologyFactory.getInstance().isA(sf.getType(),
+ SequenceOntologyI.CDS))
+ {
+ return false;
+ }
+ return featureMayBelong(sf, accessionId);
+ }
+
+ /**
+ * Answers true if the sequence feature type is 'CDS' (or a subtype of CDS in
+ * the Sequence Ontology), and the Parent of the feature is the transcript we
+ * are retrieving
+ */
+ @Override
+ protected boolean identifiesSequence(SequenceFeature sf, String accId)
+ {
+ if (SequenceOntologyFactory.getInstance().isA(sf.getType(),
+ SequenceOntologyI.CDS))
+ {
+ String parentFeature = (String) sf.getValue(PARENT);
+ if (("transcript:" + accId).equals(parentFeature))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Overrides this method to trivially return a range which is the whole of the
+ * nucleotide sequence. This is both faster than scanning for CDS features,
+ * and also means we don't need to keep CDS features on CDS sequence (where
+ * they are redundant information).
+ */
+ protected List<int[]> getCdsRanges(SequenceI dnaSeq)
+ {
+ int len = dnaSeq.getLength();
+ List<int[]> ranges = new ArrayList<int[]>();
+ ranges.add(new int[] { 1, len });
+ return ranges;
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.io.FeaturesFile;
+import jalview.io.FileParse;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A client for fetching and processing Ensembl feature data in GFF format by
+ * calling the overlap REST service
+ *
+ * @author gmcarstairs
+ * @see http://rest.ensembl.org/documentation/info/overlap_id
+ */
+class EnsemblFeatures extends EnsemblRestClient
+{
+ /*
+ * The default features to retrieve from Ensembl
+ * can override in getSequenceRecords parameter
+ */
+ private EnsemblFeatureType[] featuresWanted = { EnsemblFeatureType.cds,
+ EnsemblFeatureType.exon, EnsemblFeatureType.variation };
+
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblFeatures()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblFeatures(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "ENSEMBL (features)";
+ }
+
+ /**
+ * Makes a query to the REST overlap endpoint for the given sequence
+ * identifier. This returns an 'alignment' consisting of one 'dummy sequence'
+ * (the genomic sequence for which overlap features are returned by the
+ * service). This sequence will have on it sequence features which are the
+ * real information of interest, such as CDS regions or sequence variations.
+ */
+ @Override
+ public AlignmentI getSequenceRecords(String query) throws IOException
+ {
+ // TODO: use a vararg String... for getSequenceRecords instead?
+ List<String> queries = new ArrayList<String>();
+ queries.add(query);
+ FileParse fp = getSequenceReader(queries);
+ FeaturesFile fr = new FeaturesFile(fp);
+ return new Alignment(fr.getSeqsAsArray());
+ }
+
+ /**
+ * Returns a URL for the REST overlap endpoint
+ *
+ * @param ids
+ * @return
+ */
+ @Override
+ protected URL getUrl(List<String> ids) throws MalformedURLException
+ {
+ StringBuffer urlstring = new StringBuffer(128);
+ urlstring.append(getDomain()).append("/overlap/id/")
+ .append(ids.get(0));
+
+ // @see https://github.com/Ensembl/ensembl-rest/wiki/Output-formats
+ urlstring.append("?content-type=text/x-gff3");
+
+ /*
+ * specify features to retrieve
+ * @see http://rest.ensembl.org/documentation/info/overlap_id
+ * could make the list a configurable entry in jalview.properties
+ */
+ for (EnsemblFeatureType feature : featuresWanted)
+ {
+ urlstring.append("&feature=").append(feature.name());
+ }
+
+ return new URL(urlstring.toString());
+ }
+
+ @Override
+ protected boolean useGetRequest()
+ {
+ return true;
+ }
+
+ /**
+ * Returns the MIME type for GFF3. For GET requests the Content-type header
+ * describes the required encoding of the response.
+ */
+ @Override
+ protected String getRequestMimeType(boolean multipleIds)
+ {
+ return "text/x-gff3";
+ }
+
+ /**
+ * Returns the MIME type for GFF3.
+ */
+ @Override
+ protected String getResponseMimeType()
+ {
+ return "text/x-gff3";
+ }
+
+ /**
+ * Overloaded method that allows a list of features to retrieve to be
+ * specified
+ *
+ * @param accId
+ * @param features
+ * @return
+ * @throws IOException
+ */
+ protected AlignmentI getSequenceRecords(String accId,
+ EnsemblFeatureType[] features) throws IOException
+ {
+ featuresWanted = features;
+ return getSequenceRecords(accId);
+ }
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.api.FeatureColourI;
+import jalview.api.FeatureSettingsModelI;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyI;
+import jalview.schemes.FeatureColour;
+import jalview.schemes.FeatureSettingsAdapter;
+import jalview.util.MapList;
+
+import java.awt.Color;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.stevesoft.pat.Regex;
+
+/**
+ * A class that fetches genomic sequence and all transcripts for an Ensembl gene
+ *
+ * @author gmcarstairs
+ */
+public class EnsemblGene extends EnsemblSeqProxy
+{
+ private static final String GENE_PREFIX = "gene:";
+
+ /*
+ * accepts anything as we will attempt lookup of gene or
+ * transcript id or gene name
+ */
+ private static final Regex ACCESSION_REGEX = new Regex(".*");
+
+ private static final EnsemblFeatureType[] FEATURES_TO_FETCH = {
+ EnsemblFeatureType.gene, EnsemblFeatureType.transcript,
+ EnsemblFeatureType.exon, EnsemblFeatureType.cds,
+ EnsemblFeatureType.variation };
+
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblGene()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblGene(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "ENSEMBL";
+ }
+
+ @Override
+ protected EnsemblFeatureType[] getFeaturesToFetch()
+ {
+ return FEATURES_TO_FETCH;
+ }
+
+ @Override
+ protected EnsemblSeqType getSourceEnsemblType()
+ {
+ return EnsemblSeqType.GENOMIC;
+ }
+
+ /**
+ * Returns an alignment containing the gene(s) for the given gene or
+ * transcript identifier, or external identifier (e.g. Uniprot id). If given a
+ * gene name or external identifier, returns any related gene sequences found
+ * for model organisms. If only a single gene is queried for, then its
+ * transcripts are also retrieved and added to the alignment. <br>
+ * Method:
+ * <ul>
+ * <li>resolves a transcript identifier by looking up its parent gene id</li>
+ * <li>resolves an external identifier by looking up xref-ed gene ids</li>
+ * <li>fetches the gene sequence</li>
+ * <li>fetches features on the sequence</li>
+ * <li>identifies "transcript" features whose Parent is the requested gene</li>
+ * <li>fetches the transcript sequence for each transcript</li>
+ * <li>makes a mapping from the gene to each transcript</li>
+ * <li>copies features from gene to transcript sequences</li>
+ * <li>fetches the protein sequence for each transcript, maps and saves it as
+ * a cross-reference</li>
+ * <li>aligns each transcript against the gene sequence based on the position
+ * mappings</li>
+ * </ul>
+ *
+ * @param query
+ * a single gene or transcript identifier or gene name
+ * @return an alignment containing a gene, and possibly transcripts, or null
+ */
+ @Override
+ public AlignmentI getSequenceRecords(String query) throws Exception
+ {
+ /*
+ * convert to a non-duplicated list of gene identifiers
+ */
+ List<String> geneIds = getGeneIds(query);
+
+ AlignmentI al = null;
+ for (String geneId : geneIds)
+ {
+ /*
+ * fetch the gene sequence(s) with features and xrefs
+ */
+ AlignmentI geneAlignment = super.getSequenceRecords(geneId);
+
+ if (geneAlignment.getHeight() == 1)
+ {
+ getTranscripts(geneAlignment, geneId);
+ }
+ if (al == null)
+ {
+ al = geneAlignment;
+ }
+ else
+ {
+ al.append(geneAlignment);
+ }
+ }
+ return al;
+ }
+
+ /**
+ * Converts a query, which may contain one or more gene or transcript
+ * identifiers, into a non-redundant list of gene identifiers.
+ *
+ * @param accessions
+ * @return
+ */
+ List<String> getGeneIds(String accessions)
+ {
+ List<String> geneIds = new ArrayList<String>();
+
+ for (String acc : accessions.split(getAccessionSeparator()))
+ {
+ if (isGeneIdentifier(acc))
+ {
+ if (!geneIds.contains(acc))
+ {
+ geneIds.add(acc);
+ }
+ }
+
+ /*
+ * if given a transcript id, look up its gene parent
+ */
+ else if (isTranscriptIdentifier(acc))
+ {
+ String geneId = new EnsemblLookup(getDomain()).getParent(acc);
+ if (geneId != null && !geneIds.contains(geneId))
+ {
+ geneIds.add(geneId);
+ }
+ }
+
+ /*
+ * if given a gene or other external name, lookup and fetch
+ * the corresponding gene for all model organisms
+ */
+ else
+ {
+ List<String> ids = new EnsemblSymbol(getDomain()).getIds(acc);
+ for (String geneId : ids)
+ {
+ if (!geneIds.contains(geneId))
+ {
+ geneIds.add(geneId);
+ }
+ }
+ }
+ }
+ return geneIds;
+ }
+
+ /**
+ * Attempts to get Ensembl stable identifiers for model organisms for a gene
+ * name by calling the xrefs symbol REST service to resolve the gene name.
+ *
+ * @param query
+ * @return
+ */
+ protected String getGeneIdentifiersForName(String query)
+ {
+ List<String> ids = new EnsemblSymbol(getDomain()).getIds(query);
+ if (ids != null)
+ {
+ for (String id : ids)
+ {
+ if (isGeneIdentifier(id))
+ {
+ return id;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Constructs all transcripts for the gene, as identified by "transcript"
+ * features whose Parent is the requested gene. The coding transcript
+ * sequences (i.e. with introns omitted) are added to the alignment.
+ *
+ * @param al
+ * @param accId
+ * @throws Exception
+ */
+ protected void getTranscripts(AlignmentI al, String accId)
+ throws Exception
+ {
+ SequenceI gene = al.getSequenceAt(0);
+ List<SequenceFeature> transcriptFeatures = getTranscriptFeatures(accId,
+ gene);
+
+ for (SequenceFeature transcriptFeature : transcriptFeatures)
+ {
+ makeTranscript(transcriptFeature, al, gene);
+ }
+
+ clearGeneFeatures(gene);
+ }
+
+ /**
+ * Remove unwanted features (transcript, exon, CDS) from the gene sequence
+ * after we have used them to derive transcripts and transfer features
+ *
+ * @param gene
+ */
+ protected void clearGeneFeatures(SequenceI gene)
+ {
+ SequenceFeature[] sfs = gene.getSequenceFeatures();
+ if (sfs != null)
+ {
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ List<SequenceFeature> filtered = new ArrayList<SequenceFeature>();
+ for (SequenceFeature sf : sfs)
+ {
+ String type = sf.getType();
+ if (!isTranscript(type) && !so.isA(type, SequenceOntologyI.EXON)
+ && !so.isA(type, SequenceOntologyI.CDS))
+ {
+ filtered.add(sf);
+ }
+ }
+ gene.setSequenceFeatures(filtered
+ .toArray(new SequenceFeature[filtered
+ .size()]));
+ }
+ }
+
+ /**
+ * Constructs a spliced transcript sequence by finding 'exon' features for the
+ * given id (or failing that 'CDS'). Copies features on to the new sequence.
+ * 'Aligns' the new sequence against the gene sequence by padding with gaps,
+ * and adds it to the alignment.
+ *
+ * @param transcriptFeature
+ * @param al
+ * the alignment to which to add the new sequence
+ * @param gene
+ * the parent gene sequence, with features
+ * @return
+ */
+ SequenceI makeTranscript(SequenceFeature transcriptFeature,
+ AlignmentI al, SequenceI gene)
+ {
+ String accId = getTranscriptId(transcriptFeature);
+ if (accId == null)
+ {
+ return null;
+ }
+
+ /*
+ * NB we are mapping from gene sequence (not genome), so do not
+ * need to check for reverse strand (gene and transcript sequences
+ * are in forward sense)
+ */
+
+ /*
+ * make a gene-length sequence filled with gaps
+ * we will fill in the bases for transcript regions
+ */
+ char[] seqChars = new char[gene.getLength()];
+ Arrays.fill(seqChars, al.getGapCharacter());
+
+ /*
+ * look for exon features of the transcript, failing that for CDS
+ * (for example ENSG00000124610 has 1 CDS but no exon features)
+ */
+ String parentId = "transcript:" + accId;
+ List<SequenceFeature> splices = findFeatures(gene,
+ SequenceOntologyI.EXON, parentId);
+ if (splices.isEmpty())
+ {
+ splices = findFeatures(gene, SequenceOntologyI.CDS, parentId);
+ }
+
+ int transcriptLength = 0;
+ final char[] geneChars = gene.getSequence();
+ int offset = gene.getStart(); // to convert to 0-based positions
+ List<int[]> mappedFrom = new ArrayList<int[]>();
+
+ for (SequenceFeature sf : splices)
+ {
+ int start = sf.getBegin() - offset;
+ int end = sf.getEnd() - offset;
+ int spliceLength = end - start + 1;
+ System.arraycopy(geneChars, start, seqChars, start, spliceLength);
+ transcriptLength += spliceLength;
+ mappedFrom.add(new int[] { sf.getBegin(), sf.getEnd() });
+ }
+
+ Sequence transcript = new Sequence(accId, seqChars, 1, transcriptLength);
+
+ /*
+ * Ensembl has gene name as transcript Name
+ * EnsemblGenomes doesn't, but has a url-encoded description field
+ */
+ String description = (String) transcriptFeature.getValue(NAME);
+ if (description == null)
+ {
+ description = (String) transcriptFeature.getValue(DESCRIPTION);
+ }
+ if (description != null)
+ {
+ try
+ {
+ transcript.setDescription(URLDecoder.decode(description, "UTF-8"));
+ } catch (UnsupportedEncodingException e)
+ {
+ e.printStackTrace(); // as if
+ }
+ }
+ transcript.createDatasetSequence();
+
+ al.addSequence(transcript);
+
+ /*
+ * transfer features to the new sequence; we use EnsemblCdna to do this,
+ * to filter out unwanted features types (see method retainFeature)
+ */
+ List<int[]> mapTo = new ArrayList<int[]>();
+ mapTo.add(new int[] { 1, transcriptLength });
+ MapList mapping = new MapList(mappedFrom, mapTo, 1, 1);
+ EnsemblCdna cdna = new EnsemblCdna(getDomain());
+ cdna.transferFeatures(gene.getSequenceFeatures(),
+ transcript.getDatasetSequence(), mapping, parentId);
+
+ /*
+ * fetch and save cross-references
+ */
+ cdna.getCrossReferences(transcript);
+
+ /*
+ * and finally fetch the protein product and save as a cross-reference
+ */
+ cdna.addProteinProduct(transcript);
+
+ return transcript;
+ }
+
+ /**
+ * Returns the 'transcript_id' property of the sequence feature (or null)
+ *
+ * @param feature
+ * @return
+ */
+ protected String getTranscriptId(SequenceFeature feature)
+ {
+ return (String) feature.getValue("transcript_id");
+ }
+
+ /**
+ * Returns a list of the transcript features on the sequence whose Parent is
+ * the gene for the accession id.
+ *
+ * @param accId
+ * @param geneSequence
+ * @return
+ */
+ protected List<SequenceFeature> getTranscriptFeatures(String accId,
+ SequenceI geneSequence)
+ {
+ List<SequenceFeature> transcriptFeatures = new ArrayList<SequenceFeature>();
+
+ String parentIdentifier = GENE_PREFIX + accId;
+ SequenceFeature[] sfs = geneSequence.getSequenceFeatures();
+
+ if (sfs != null)
+ {
+ for (SequenceFeature sf : sfs)
+ {
+ if (isTranscript(sf.getType()))
+ {
+ String parent = (String) sf.getValue(PARENT);
+ if (parentIdentifier.equals(parent))
+ {
+ transcriptFeatures.add(sf);
+ }
+ }
+ }
+ }
+
+ return transcriptFeatures;
+ }
+
+ @Override
+ public String getDescription()
+ {
+ return "Fetches all transcripts and variant features for a gene or transcript";
+ }
+
+ /**
+ * Default test query is a gene id (can also enter a transcript id)
+ */
+ @Override
+ public String getTestQuery()
+ {
+ return "ENSG00000157764"; // BRAF, 5 transcripts, reverse strand
+ // ENSG00000090266 // NDUFB2, 15 transcripts, forward strand
+ // ENSG00000101812 // H2BFM histone, 3 transcripts, forward strand
+ // ENSG00000123569 // H2BFWT histone, 2 transcripts, reverse strand
+ }
+
+ /**
+ * Answers true for a feature of type 'gene' (or a sub-type of gene in the
+ * Sequence Ontology), whose ID is the accession we are retrieving
+ */
+ @Override
+ protected boolean identifiesSequence(SequenceFeature sf, String accId)
+ {
+ if (SequenceOntologyFactory.getInstance().isA(sf.getType(),
+ SequenceOntologyI.GENE))
+ {
+ String id = (String) sf.getValue(ID);
+ if ((GENE_PREFIX + accId).equals(id))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Answers true unless feature type is 'gene', or 'transcript' with a parent
+ * which is a different gene. We need the gene features to identify the range,
+ * but it is redundant information on the gene sequence. Checking the parent
+ * allows us to drop transcript features which belong to different
+ * (overlapping) genes.
+ */
+ @Override
+ protected boolean retainFeature(SequenceFeature sf, String accessionId)
+ {
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ String type = sf.getType();
+ if (so.isA(type, SequenceOntologyI.GENE))
+ {
+ return false;
+ }
+ if (isTranscript(type))
+ {
+ String parent = (String) sf.getValue(PARENT);
+ if (!(GENE_PREFIX + accessionId).equals(parent))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Answers false. This allows an optimisation - a single 'gene' feature is all
+ * that is needed to identify the positions of the gene on the genomic
+ * sequence.
+ */
+ @Override
+ protected boolean isSpliceable()
+ {
+ return false;
+ }
+
+ /**
+ * Override to do nothing as Ensembl doesn't return a protein sequence for a
+ * gene identifier
+ */
+ @Override
+ protected void addProteinProduct(SequenceI querySeq)
+ {
+ }
+
+ @Override
+ public Regex getAccessionValidator()
+ {
+ return ACCESSION_REGEX;
+ }
+
+ /**
+ * Returns a descriptor for suitable feature display settings with
+ * <ul>
+ * <li>only exon or sequence_variant features (or their subtypes in the
+ * Sequence Ontology) visible</li>
+ * <li>variant features coloured red</li>
+ * <li>exon features coloured by label (exon name)</li>
+ * <li>variants displayed above (on top of) exons</li>
+ * </ul>
+ */
+ @Override
+ public FeatureSettingsModelI getFeatureColourScheme()
+ {
+ return new FeatureSettingsAdapter()
+ {
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ @Override
+ public boolean isFeatureDisplayed(String type)
+ {
+ return (so.isA(type, SequenceOntologyI.EXON) || so.isA(type,
+ SequenceOntologyI.SEQUENCE_VARIANT));
+ }
+
+ @Override
+ public FeatureColourI getFeatureColour(String type)
+ {
+ if (so.isA(type, SequenceOntologyI.EXON))
+ {
+ return new FeatureColour()
+ {
+ @Override
+ public boolean isColourByLabel()
+ {
+ return true;
+ }
+ };
+ }
+ if (so.isA(type, SequenceOntologyI.SEQUENCE_VARIANT))
+ {
+ return new FeatureColour()
+ {
+
+ @Override
+ public Color getColour()
+ {
+ return Color.RED;
+ }
+ };
+ }
+ return null;
+ }
+
+ /**
+ * order to render sequence_variant after exon after the rest
+ */
+ @Override
+ public int compare(String feature1, String feature2)
+ {
+ if (so.isA(feature1, SequenceOntologyI.SEQUENCE_VARIANT))
+ {
+ return +1;
+ }
+ if (so.isA(feature2, SequenceOntologyI.SEQUENCE_VARIANT))
+ {
+ return -1;
+ }
+ if (so.isA(feature1, SequenceOntologyI.EXON))
+ {
+ return +1;
+ }
+ if (so.isA(feature2, SequenceOntologyI.EXON))
+ {
+ return -1;
+ }
+ return 0;
+ }
+ };
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.SequenceFeature;
+
+/**
+ * A client to fetch genomic sequence from Ensembl
+ *
+ * TODO: not currently used - delete?
+ *
+ * @author gmcarstairs
+ *
+ */
+public class EnsemblGenome extends EnsemblSeqProxy
+{
+ /*
+ * fetch transcript features on genomic sequence (to identify the transcript
+ * regions) and cds, exon and variation features (to retain)
+ */
+ private static final EnsemblFeatureType[] FEATURES_TO_FETCH = {
+ EnsemblFeatureType.transcript, EnsemblFeatureType.exon,
+ EnsemblFeatureType.cds, EnsemblFeatureType.variation };
+
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblGenome()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblGenome(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "ENSEMBL (Genomic)";
+ }
+
+ @Override
+ protected EnsemblSeqType getSourceEnsemblType()
+ {
+ return EnsemblSeqType.GENOMIC;
+ }
+
+ @Override
+ protected EnsemblFeatureType[] getFeaturesToFetch()
+ {
+ return FEATURES_TO_FETCH;
+ }
+
+ /**
+ * Answers true unless the feature type is 'transcript' (or a sub-type of
+ * transcript in the Sequence Ontology), or has a parent other than the given
+ * accession id. Transcript features are only retrieved in order to identify
+ * the transcript sequence range, and are redundant information on the
+ * transcript sequence itself.
+ */
+ @Override
+ protected boolean retainFeature(SequenceFeature sf, String accessionId)
+ {
+ if (isTranscript(sf.getType()))
+ {
+ return false;
+ }
+ return featureMayBelong(sf, accessionId);
+ }
+
+ /**
+ * Answers true if the sequence feature type is 'transcript' (or a subtype of
+ * transcript in the Sequence Ontology), and the ID of the feature is the
+ * transcript we are retrieving
+ */
+ @Override
+ protected boolean identifiesSequence(SequenceFeature sf, String accId)
+ {
+ if (isTranscript(sf.getType()))
+ {
+ String id = (String) sf.getValue(ID);
+ if (("transcript:" + accId).equals(id))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+
+/**
+ * A class to behave much like EnsemblGene but referencing the ensemblgenomes
+ * domain and data
+ *
+ * @author gmcarstairs
+ *
+ */
+public class EnsemblGenomes extends EnsemblGene
+{
+ /**
+ * Constructor sets domain to rest.ensemblgenomes.org instead of the 'usual'
+ * rest.ensembl.org
+ */
+ public EnsemblGenomes()
+ {
+ super(ENSEMBL_GENOMES_REST);
+ }
+
+ @Override
+ public boolean isGeneIdentifier(String query)
+ {
+ return true;
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "EnsemblGenomes";
+ }
+
+ @Override
+ public String getTestQuery()
+ {
+ return "DDB_G0283883";
+ }
+
+ @Override
+ public String getDbSource()
+ {
+ return "EnsemblGenomes";
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.AlignmentI;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+
+/**
+ * A client for the Ensembl lookup REST endpoint; used to find the Parent gene
+ * identifier given a transcript identifier.
+ *
+ * @author gmcarstairs
+ *
+ */
+public class EnsemblLookup extends EnsemblRestClient
+{
+
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblLookup()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param
+ */
+ public EnsemblLookup(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "ENSEMBL";
+ }
+
+ @Override
+ public AlignmentI getSequenceRecords(String queries) throws Exception
+ {
+ return null;
+ }
+
+ @Override
+ protected URL getUrl(List<String> ids) throws MalformedURLException
+ {
+ String identifier = ids.get(0);
+ return getUrl(identifier);
+ }
+
+ /**
+ * @param identifier
+ * @return
+ */
+ protected URL getUrl(String identifier)
+ {
+ String url = getDomain() + "/lookup/id/" + identifier
+ + "?content-type=application/json";
+ try
+ {
+ return new URL(url);
+ } catch (MalformedURLException e)
+ {
+ return null;
+ }
+ }
+
+ @Override
+ protected boolean useGetRequest()
+ {
+ return true;
+ }
+
+ @Override
+ protected String getRequestMimeType(boolean multipleIds)
+ {
+ return "application/json";
+ }
+
+ @Override
+ protected String getResponseMimeType()
+ {
+ return "application/json";
+ }
+
+ /**
+ * Calls the Ensembl lookup REST endpoint and retrieves the 'Parent' for the
+ * given identifier, or null if not found
+ *
+ * @param identifier
+ * @return
+ */
+ public String getParent(String identifier)
+ {
+ List<String> ids = Arrays.asList(new String[] { identifier });
+
+ BufferedReader br = null;
+ try
+ {
+ URL url = getUrl(identifier);
+ if (url != null)
+ {
+ br = getHttpResponse(url, ids);
+ }
+ return (parseResponse(br));
+ } catch (IOException e)
+ {
+ // ignore
+ return null;
+ } finally
+ {
+ if (br != null)
+ {
+ try
+ {
+ br.close();
+ } catch (IOException e)
+ {
+ // ignore
+ }
+ }
+ }
+ }
+
+ /**
+ * Parses "Parent" from the JSON response and returns the value, or null if
+ * not found
+ *
+ * @param br
+ * @return
+ * @throws IOException
+ */
+ protected String parseResponse(BufferedReader br) throws IOException
+ {
+ String parent = null;
+ JSONParser jp = new JSONParser();
+ try
+ {
+ JSONObject val = (JSONObject) jp.parse(br);
+ parent = val.get("Parent").toString();
+ } catch (ParseException e)
+ {
+ // ignore
+ }
+ return parent;
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceFeature;
+
+import java.util.List;
+
+import com.stevesoft.pat.Regex;
+
+/**
+ * A client to fetch protein translated sequence for an Ensembl identifier
+ *
+ * @author gmcarstairs
+ *
+ */
+public class EnsemblProtein extends EnsemblSeqProxy
+{
+ /*
+ * accepts ENSP with 11 digits
+ * or ENSMUSP or similar for other species
+ * or CCDSnnnnn.nn with at least 3 digits
+ */
+ private static final Regex ACCESSION_REGEX = new Regex(
+ "(ENS([A-Z]{3}|)P[0-9]{11}$)" + "|" + "(CCDS[0-9.]{3,}$)");
+
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblProtein()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblProtein(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "ENSEMBL (Protein)";
+ }
+
+ @Override
+ protected EnsemblSeqType getSourceEnsemblType()
+ {
+ return EnsemblSeqType.PROTEIN;
+ }
+
+ /**
+ * Returns false, as this fetcher does not retrieve DNA sequences.
+ */
+ @Override
+ public boolean isDnaCoding()
+ {
+ return false;
+ }
+
+ /**
+ * Test query is to the protein translation of transcript ENST00000288602
+ */
+ @Override
+ public String getTestQuery()
+ {
+ return "ENSP00000288602";
+ }
+
+ /**
+ * Overrides base class method to do nothing - genomic features are not
+ * applicable to the protein product sequence
+ */
+ @Override
+ protected void addFeaturesAndProduct(String accId, AlignmentI alignment)
+ {
+ }
+
+ @Override
+ protected EnsemblFeatureType[] getFeaturesToFetch()
+ {
+ // not applicable - can't fetch genomic features for a protein sequence
+ return null;
+ }
+
+ @Override
+ protected boolean identifiesSequence(SequenceFeature sf, String accId)
+ {
+ // not applicable - protein sequence is not a 'subset' of genomic sequence
+ return false;
+ }
+
+ @Override
+ public Regex getAccessionValidator()
+ {
+ return ACCESSION_REGEX;
+ }
+
+ /**
+ * Returns an accession id for a query, including conversion of ENST* to
+ * ENSP*. This supports querying for the protein sequence for a transcript
+ * (ENST identifier) and returning the ENSP identifier.
+ */
+ @Override
+ public String getAccessionIdFromQuery(String query)
+ {
+ String accId = super.getAccessionIdFromQuery(query);
+
+ /*
+ * ensure last character before (11) digits is P
+ * ENST00000288602 -> ENSP00000288602
+ * ENSMUST00000288602 -> ENSMUSP00000288602
+ */
+ if (accId != null && accId.length() >= 12)
+ {
+ char[] chars = accId.toCharArray();
+ chars[chars.length - 12] = 'P';
+ accId = new String(chars);
+ }
+ return accId;
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.io.FileParse;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import javax.ws.rs.HttpMethod;
+
+import com.stevesoft.pat.Regex;
+
+/**
+ * Base class for Ensembl REST service clients
+ *
+ * @author gmcarstairs
+ */
+abstract class EnsemblRestClient extends EnsemblSequenceFetcher
+{
+ private final static String ENSEMBL_REST = "http://rest.ensembl.org";
+
+ protected final static String ENSEMBL_GENOMES_REST = "http://rest.ensemblgenomes.org";
+
+ // @see https://github.com/Ensembl/ensembl-rest/wiki/Output-formats
+ private static final String PING_URL = "http://rest.ensembl.org/info/ping.json";
+
+ private final static long RETEST_INTERVAL = 10000L; // 10 seconds
+
+ private static final Regex TRANSCRIPT_REGEX = new Regex(
+ "(ENS)([A-Z]{3}|)T[0-9]{11}$");
+
+ private static final Regex GENE_REGEX = new Regex(
+ "(ENS)([A-Z]{3}|)G[0-9]{11}$");
+
+ private String domain = ENSEMBL_REST;
+
+ private static boolean ensemblRestAvailable = false;
+
+ private static long lastCheck = -1;
+
+ /*
+ * absolute time to wait till if we overloaded the REST service
+ */
+ private static long retryAfter;
+
+ protected volatile boolean inProgress = false;
+
+ /**
+ * Default constructor to use rest.ensembl.org
+ */
+ public EnsemblRestClient()
+ {
+ this(ENSEMBL_REST);
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblRestClient(String d)
+ {
+ domain = d;
+ }
+
+ /**
+ * Returns the domain name to query e.g. http://rest.ensembl.org or
+ * http://rest.ensemblgenomes.org
+ *
+ * @return
+ */
+ String getDomain()
+ {
+ return domain;
+ }
+
+ void setDomain(String d)
+ {
+ domain = d;
+ }
+
+ /**
+ * Answers true if the query matches the regular expression pattern for an
+ * Ensembl transcript stable identifier
+ *
+ * @param query
+ * @return
+ */
+ public boolean isTranscriptIdentifier(String query)
+ {
+ return query == null ? false : TRANSCRIPT_REGEX.search(query);
+ }
+
+ /**
+ * Answers true if the query matches the regular expression pattern for an
+ * Ensembl gene stable identifier
+ *
+ * @param query
+ * @return
+ */
+ public boolean isGeneIdentifier(String query)
+ {
+ return query == null ? false : GENE_REGEX.search(query);
+ }
+
+ @Override
+ public boolean queryInProgress()
+ {
+ return inProgress;
+ }
+
+ @Override
+ public StringBuffer getRawRecords()
+ {
+ return null;
+ }
+
+ /**
+ * Returns the URL for the client http request
+ *
+ * @param ids
+ * @return
+ * @throws MalformedURLException
+ */
+ protected abstract URL getUrl(List<String> ids)
+ throws MalformedURLException;
+
+ /**
+ * Returns true if client uses GET method, false if it uses POST
+ *
+ * @return
+ */
+ protected abstract boolean useGetRequest();
+
+ /**
+ * Return the desired value for the Content-Type request header
+ *
+ * @param multipleIds
+ *
+ * @return
+ * @see https://github.com/Ensembl/ensembl-rest/wiki/HTTP-Headers
+ */
+ protected abstract String getRequestMimeType(boolean multipleIds);
+
+ /**
+ * Return the desired value for the Accept request header
+ *
+ * @return
+ * @see https://github.com/Ensembl/ensembl-rest/wiki/HTTP-Headers
+ */
+ protected abstract String getResponseMimeType();
+
+ /**
+ * Tries to connect to Ensembl's REST 'ping' endpoint, and returns true if
+ * successful, else false
+ *
+ * @return
+ */
+ private boolean checkEnsembl()
+ {
+ try
+ {
+ // note this format works for both ensembl and ensemblgenomes
+ // info/ping.json works for ensembl only (March 2016)
+ URL ping = new URL(getDomain()
+ + "/info/ping?content-type=application/json");
+ HttpURLConnection conn = (HttpURLConnection) ping.openConnection();
+ int rc = conn.getResponseCode();
+ conn.disconnect();
+ if (rc >= 200 && rc < 300)
+ {
+ return true;
+ }
+ } catch (Throwable t)
+ {
+ System.err.println("Error connecting to " + PING_URL + ": "
+ + t.getMessage());
+ }
+ return false;
+ }
+
+ /**
+ * returns a reader to a Fasta response from the Ensembl sequence endpoint
+ *
+ * @param ids
+ * @return
+ * @throws IOException
+ */
+ protected FileParse getSequenceReader(List<String> ids)
+ throws IOException
+ {
+ URL url = getUrl(ids);
+
+ BufferedReader reader = getHttpResponse(url, ids);
+ FileParse fp = new FileParse(reader, url.toString(), "HTTP_POST");
+ return fp;
+ }
+
+ /**
+ * Writes the HTTP request and gets the response as a reader.
+ *
+ * @param url
+ * @param ids
+ * written as Json POST body if more than one
+ * @return
+ * @throws IOException
+ * if response code was not 200, or other I/O error
+ */
+ protected BufferedReader getHttpResponse(URL url, List<String> ids)
+ throws IOException
+ {
+ // long now = System.currentTimeMillis();
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+
+ /*
+ * POST method allows multiple queries in one request; it is supported for
+ * sequence queries, but not for overlap
+ */
+ boolean multipleIds = ids.size() > 1;// useGetRequest();
+ connection.setRequestMethod(multipleIds ? HttpMethod.POST
+ : HttpMethod.GET);
+ connection.setRequestProperty("Content-Type",
+ getRequestMimeType(multipleIds));
+ connection.setRequestProperty("Accept", getResponseMimeType());
+
+ connection.setUseCaches(false);
+ connection.setDoInput(true);
+ connection.setDoOutput(multipleIds);
+
+ if (multipleIds)
+ {
+ writePostBody(connection, ids);
+ }
+
+ InputStream response = connection.getInputStream();
+ int responseCode = connection.getResponseCode();
+
+ if (responseCode != 200)
+ {
+ /*
+ * note: a GET request for an invalid id returns an error code e.g. 415
+ * but POST request returns 200 and an empty Fasta response
+ */
+ throw new IOException(
+ "Response code was not 200. Detected response was "
+ + responseCode);
+ }
+ // System.out.println(getClass().getName() + " took "
+ // + (System.currentTimeMillis() - now) + "ms to fetch");
+
+ checkRateLimits(connection);
+
+ BufferedReader reader = null;
+ reader = new BufferedReader(new InputStreamReader(response, "UTF-8"));
+ return reader;
+ }
+
+ /**
+ * Inspect response headers for any sign of server overload and respect any
+ * 'retry-after' directive
+ *
+ * @see https://github.com/Ensembl/ensembl-rest/wiki/Rate-Limits
+ * @param connection
+ */
+ void checkRateLimits(HttpURLConnection connection)
+ {
+ // number of requests allowed per time interval:
+ String limit = connection.getHeaderField("X-RateLimit-Limit");
+ // length of quota time interval in seconds:
+ // String period = connection.getHeaderField("X-RateLimit-Period");
+ // seconds remaining until usage quota is reset:
+ String reset = connection.getHeaderField("X-RateLimit-Reset");
+ // number of requests remaining from quota for current period:
+ String remaining = connection.getHeaderField("X-RateLimit-Remaining");
+ // number of seconds to wait before retrying (if remaining == 0)
+ String retryDelay = connection.getHeaderField("Retry-After");
+
+ // to test:
+ // retryDelay = "5";
+
+ if (retryDelay != null)
+ {
+ System.err.println("Ensembl REST service rate limit exceeded, wait "
+ + retryDelay + " seconds before retrying");
+ try
+ {
+ retryAfter = System.currentTimeMillis()
+ + (1000 * Integer.valueOf(retryDelay));
+ } catch (NumberFormatException e)
+ {
+ System.err.println("Unexpected value for Retry-After: "
+ + retryDelay);
+ }
+ }
+ else
+ {
+ retryAfter = 0;
+ // debug:
+ // System.out.println(String.format(
+ // "%s Ensembl requests remaining of %s (reset in %ss)",
+ // remaining, limit, reset));
+ }
+ }
+ /**
+ * Rechecks if Ensembl is responding, unless the last check was successful and
+ * the retest interval has not yet elapsed. Returns true if Ensembl is up,
+ * else false.
+ *
+ * @return
+ */
+ protected boolean isEnsemblAvailable()
+ {
+ long now = System.currentTimeMillis();
+
+ /*
+ * check if we are waiting for 'Retry-After' to expire
+ */
+ if (retryAfter > now)
+ {
+ System.err.println("Still " + (1 + (retryAfter - now) / 1000)
+ + " secs to wait before retrying Ensembl");
+ return false;
+ }
+ else
+ {
+ retryAfter = 0;
+ }
+
+ boolean retest = now - lastCheck > RETEST_INTERVAL;
+ if (ensemblRestAvailable && !retest)
+ {
+ return true;
+ }
+ ensemblRestAvailable = checkEnsembl();
+ lastCheck = now;
+ return ensemblRestAvailable;
+ }
+
+ /**
+ * Constructs, writes and flushes the POST body of the request, containing the
+ * query ids in JSON format
+ *
+ * @param connection
+ * @param ids
+ * @throws IOException
+ */
+ protected void writePostBody(HttpURLConnection connection,
+ List<String> ids) throws IOException
+ {
+ boolean first;
+ StringBuilder postBody = new StringBuilder(64);
+ postBody.append("{\"ids\":[");
+ first = true;
+ for (String id : ids)
+ {
+ if (!first)
+ {
+ postBody.append(",");
+ }
+ first = false;
+ postBody.append("\"");
+ postBody.append(id.trim());
+ postBody.append("\"");
+ }
+ postBody.append("]}");
+ byte[] thepostbody = postBody.toString().getBytes();
+ connection.setRequestProperty("Content-Length",
+ Integer.toString(thepostbody.length));
+ DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
+ wr.write(thepostbody);
+ wr.flush();
+ wr.close();
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.analysis.AlignmentUtils;
+import jalview.analysis.Dna;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.DBRefSource;
+import jalview.datamodel.Mapping;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.exceptions.JalviewException;
+import jalview.io.FastaFile;
+import jalview.io.FileParse;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyI;
+import jalview.util.Comparison;
+import jalview.util.DBRefUtils;
+import jalview.util.MapList;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Base class for Ensembl sequence fetchers
+ *
+ * @see http://rest.ensembl.org/documentation/info/sequence_id
+ * @author gmcarstairs
+ */
+public abstract class EnsemblSeqProxy extends EnsemblRestClient
+{
+ private static final String ALLELES = "alleles";
+
+ protected static final String PARENT = "Parent";
+
+ protected static final String ID = "ID";
+
+ protected static final String NAME = "Name";
+
+ protected static final String DESCRIPTION = "description";
+
+ /*
+ * enum for 'type' parameter to the /sequence REST service
+ */
+ public enum EnsemblSeqType
+ {
+ /**
+ * type=genomic to fetch full dna including introns
+ */
+ GENOMIC("genomic"),
+
+ /**
+ * type=cdna to fetch coding dna including UTRs
+ */
+ CDNA("cdna"),
+
+ /**
+ * type=cds to fetch coding dna excluding UTRs
+ */
+ CDS("cds"),
+
+ /**
+ * type=protein to fetch peptide product sequence
+ */
+ PROTEIN("protein");
+
+ /*
+ * the value of the 'type' parameter to fetch this version of
+ * an Ensembl sequence
+ */
+ private String type;
+
+ EnsemblSeqType(String t)
+ {
+ type = t;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ }
+
+ /**
+ * A comparator to sort ranges into ascending start position order
+ */
+ private class RangeSorter implements Comparator<int[]>
+ {
+ boolean forwards;
+
+ RangeSorter(boolean forward)
+ {
+ forwards = forward;
+ }
+
+ @Override
+ public int compare(int[] o1, int[] o2)
+ {
+ return (forwards ? 1 : -1) * Integer.compare(o1[0], o2[0]);
+ }
+
+ }
+
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblSeqProxy()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ */
+ public EnsemblSeqProxy(String d)
+ {
+ super(d);
+ }
+
+ /**
+ * Makes the sequence queries to Ensembl's REST service and returns an
+ * alignment consisting of the returned sequences.
+ */
+ @Override
+ public AlignmentI getSequenceRecords(String query) throws Exception
+ {
+ // TODO use a String... query vararg instead?
+
+ // danger: accession separator used as a regex here, a string elsewhere
+ // in this case it is ok (it is just a space), but (e.g.) '\' would not be
+ List<String> allIds = Arrays.asList(query
+ .split(getAccessionSeparator()));
+ AlignmentI alignment = null;
+ inProgress = true;
+
+ /*
+ * execute queries, if necessary in batches of the
+ * maximum allowed number of ids
+ */
+ int maxQueryCount = getMaximumQueryCount();
+ for (int v = 0, vSize = allIds.size(); v < vSize; v += maxQueryCount)
+ {
+ int p = Math.min(vSize, v + maxQueryCount);
+ List<String> ids = allIds.subList(v, p);
+ try
+ {
+ alignment = fetchSequences(ids, alignment);
+ } catch (Throwable r)
+ {
+ inProgress = false;
+ String msg = "Aborting ID retrieval after " + v
+ + " chunks. Unexpected problem (" + r.getLocalizedMessage()
+ + ")";
+ System.err.println(msg);
+ break;
+ }
+ }
+
+ if (alignment == null)
+ {
+ return null;
+ }
+
+ /*
+ * fetch and transfer genomic sequence features,
+ * fetch protein product and add as cross-reference
+ */
+ for (String accId : allIds)
+ {
+ addFeaturesAndProduct(accId, alignment);
+ }
+
+ for (SequenceI seq : alignment.getSequences())
+ {
+ getCrossReferences(seq);
+ }
+
+ return alignment;
+ }
+
+ /**
+ * Fetches Ensembl features using the /overlap REST endpoint, and adds them to
+ * the sequence in the alignment. Also fetches the protein product, maps it
+ * from the CDS features of the sequence, and saves it as a cross-reference of
+ * the dna sequence.
+ *
+ * @param accId
+ * @param alignment
+ */
+ protected void addFeaturesAndProduct(String accId, AlignmentI alignment)
+ {
+ if (alignment == null)
+ {
+ return;
+ }
+
+ try
+ {
+ /*
+ * get 'dummy' genomic sequence with exon, cds and variation features
+ */
+ SequenceI genomicSequence = null;
+ EnsemblFeatures gffFetcher = new EnsemblFeatures(getDomain());
+ EnsemblFeatureType[] features = getFeaturesToFetch();
+ AlignmentI geneFeatures = gffFetcher.getSequenceRecords(accId,
+ features);
+ if (geneFeatures.getHeight() > 0)
+ {
+ genomicSequence = geneFeatures.getSequenceAt(0);
+ }
+ if (genomicSequence != null)
+ {
+ /*
+ * transfer features to the query sequence
+ */
+ SequenceI querySeq = alignment.findName(accId);
+ if (transferFeatures(accId, genomicSequence, querySeq))
+ {
+
+ /*
+ * fetch and map protein product, and add it as a cross-reference
+ * of the retrieved sequence
+ */
+ addProteinProduct(querySeq);
+ }
+ }
+ } catch (IOException e)
+ {
+ System.err.println("Error transferring Ensembl features: "
+ + e.getMessage());
+ }
+ }
+
+ /**
+ * Returns those sequence feature types to fetch from Ensembl. We may want
+ * features either because they are of interest to the user, or as means to
+ * identify the locations of the sequence on the genomic sequence (CDS
+ * features identify CDS, exon features identify cDNA etc).
+ *
+ * @return
+ */
+ protected abstract EnsemblFeatureType[] getFeaturesToFetch();
+
+ /**
+ * Fetches and maps the protein product, and adds it as a cross-reference of
+ * the retrieved sequence
+ */
+ protected void addProteinProduct(SequenceI querySeq)
+ {
+ String accId = querySeq.getName();
+ try
+ {
+ AlignmentI protein = new EnsemblProtein(getDomain())
+ .getSequenceRecords(accId);
+ if (protein == null || protein.getHeight() == 0)
+ {
+ System.out.println("No protein product found for " + accId);
+ return;
+ }
+ SequenceI proteinSeq = protein.getSequenceAt(0);
+
+ /*
+ * need dataset sequences (to be the subject of mappings)
+ */
+ proteinSeq.createDatasetSequence();
+ querySeq.createDatasetSequence();
+
+ MapList mapList = AlignmentUtils.mapCdsToProtein(querySeq, proteinSeq);
+ if (mapList != null)
+ {
+ // clunky: ensure Uniprot xref if we have one is on mapped sequence
+ SequenceI ds = proteinSeq.getDatasetSequence();
+ ds.setSourceDBRef(proteinSeq.getSourceDBRef());
+
+ Mapping map = new Mapping(ds, mapList);
+ DBRefEntry dbr = new DBRefEntry(getDbSource(), getDbVersion(),
+ proteinSeq.getName(), map);
+ querySeq.getDatasetSequence().addDBRef(dbr);
+
+ /*
+ * copy exon features to protein, compute peptide variants from dna
+ * variants and add as features on the protein sequence ta-da
+ */
+ AlignmentUtils.computeProteinFeatures(querySeq, proteinSeq, mapList);
+ }
+ } catch (Exception e)
+ {
+ System.err
+ .println(String.format("Error retrieving protein for %s: %s",
+ accId, e.getMessage()));
+ }
+ }
+
+ /**
+ * Get database xrefs from Ensembl, and attach them to the sequence
+ *
+ * @param seq
+ */
+ protected void getCrossReferences(SequenceI seq)
+ {
+ while (seq.getDatasetSequence() != null)
+ {
+ seq = seq.getDatasetSequence();
+ }
+
+ EnsemblXref xrefFetcher = new EnsemblXref(getDomain());
+ List<DBRefEntry> xrefs = xrefFetcher.getCrossReferences(seq.getName());
+ for (DBRefEntry xref : xrefs)
+ {
+ seq.addDBRef(xref);
+ /*
+ * Save any Uniprot xref to be the reference for SIFTS mapping
+ */
+ if (DBRefSource.UNIPROT.equals(xref.getSource()))
+ {
+ seq.setSourceDBRef(xref);
+ }
+ }
+
+ /*
+ * and add a reference to itself
+ */
+ DBRefEntry self = new DBRefEntry(getDbSource(), "0", seq.getName());
+ seq.addDBRef(self);
+ }
+
+ /**
+ * Fetches sequences for the list of accession ids and adds them to the
+ * alignment. Returns the extended (or created) alignment.
+ *
+ * @param ids
+ * @param alignment
+ * @return
+ * @throws JalviewException
+ * @throws IOException
+ */
+ protected AlignmentI fetchSequences(List<String> ids, AlignmentI alignment)
+ throws JalviewException, IOException
+ {
+ if (!isEnsemblAvailable())
+ {
+ inProgress = false;
+ throw new JalviewException("ENSEMBL Rest API not available.");
+ }
+ FileParse fp = getSequenceReader(ids);
+ FastaFile fr = new FastaFile(fp);
+ if (fr.hasWarningMessage())
+ {
+ System.out.println(String.format(
+ "Warning when retrieving %d ids %s\n%s", ids.size(),
+ ids.toString(), fr.getWarningMessage()));
+ }
+ else if (fr.getSeqs().size() != ids.size())
+ {
+ System.out.println(String.format(
+ "Only retrieved %d sequences for %d query strings", fr
+ .getSeqs().size(), ids.size()));
+ }
+
+ if (fr.getSeqs().size() == 1 && fr.getSeqs().get(0).getLength() == 0)
+ {
+ /*
+ * POST request has returned an empty FASTA file e.g. for invalid id
+ */
+ throw new IOException("No data returned for " + ids);
+ }
+
+ if (fr.getSeqs().size() > 0)
+ {
+ AlignmentI seqal = new Alignment(
+ fr.getSeqsAsArray());
+ for (SequenceI sq:seqal.getSequences())
+ {
+ if (sq.getDescription() == null)
+ {
+ sq.setDescription(getDbName());
+ }
+ String name = sq.getName();
+ if (ids.contains(name)
+ || ids.contains(name.replace("ENSP", "ENST")))
+ {
+ DBRefUtils.parseToDbRef(sq, DBRefSource.ENSEMBL, "0", name);
+ }
+ }
+ if (alignment == null)
+ {
+ alignment = seqal;
+ }
+ else
+ {
+ alignment.append(seqal);
+ }
+ }
+ return alignment;
+ }
+
+ /**
+ * Returns the URL for the REST call
+ *
+ * @return
+ * @throws MalformedURLException
+ */
+ @Override
+ protected URL getUrl(List<String> ids) throws MalformedURLException
+ {
+ /*
+ * a single id is included in the URL path
+ * multiple ids go in the POST body instead
+ */
+ StringBuffer urlstring = new StringBuffer(128);
+ urlstring.append(getDomain() + "/sequence/id");
+ if (ids.size() == 1)
+ {
+ urlstring.append("/").append(ids.get(0));
+ }
+ // @see https://github.com/Ensembl/ensembl-rest/wiki/Output-formats
+ urlstring.append("?type=").append(getSourceEnsemblType().getType());
+ urlstring.append(("&Accept=text/x-fasta"));
+
+ URL url = new URL(urlstring.toString());
+ return url;
+ }
+
+ /**
+ * A sequence/id POST request currently allows up to 50 queries
+ *
+ * @see http://rest.ensembl.org/documentation/info/sequence_id_post
+ */
+ @Override
+ public int getMaximumQueryCount()
+ {
+ return 50;
+ }
+
+ @Override
+ protected boolean useGetRequest()
+ {
+ return false;
+ }
+
+ @Override
+ protected String getRequestMimeType(boolean multipleIds)
+ {
+ return multipleIds ? "application/json" : "text/x-fasta";
+ }
+
+ @Override
+ protected String getResponseMimeType()
+ {
+ return "text/x-fasta";
+ }
+
+ /**
+ *
+ * @return the configured sequence return type for this source
+ */
+ protected abstract EnsemblSeqType getSourceEnsemblType();
+
+ /**
+ * Returns a list of [start, end] genomic ranges corresponding to the sequence
+ * being retrieved.
+ *
+ * The correspondence between the frames of reference is made by locating
+ * those features on the genomic sequence which identify the retrieved
+ * sequence. Specifically
+ * <ul>
+ * <li>genomic sequence is identified by "transcript" features with
+ * ID=transcript:transcriptId</li>
+ * <li>cdna sequence is identified by "exon" features with
+ * Parent=transcript:transcriptId</li>
+ * <li>cds sequence is identified by "CDS" features with
+ * Parent=transcript:transcriptId</li>
+ * </ul>
+ *
+ * The returned ranges are sorted to run forwards (for positive strand) or
+ * backwards (for negative strand). Aborts and returns null if both positive
+ * and negative strand are found (this should not normally happen).
+ *
+ * @param sourceSequence
+ * @param accId
+ * @param start
+ * the start position of the sequence we are mapping to
+ * @return
+ */
+ protected MapList getGenomicRangesFromFeatures(SequenceI sourceSequence,
+ String accId, int start)
+ {
+ SequenceFeature[] sfs = sourceSequence.getSequenceFeatures();
+ if (sfs == null)
+ {
+ return null;
+ }
+
+ /*
+ * generously initial size for number of cds regions
+ * (worst case titin Q8WZ42 has c. 313 exons)
+ */
+ List<int[]> regions = new ArrayList<int[]>(100);
+ int mappedLength = 0;
+ int direction = 1; // forward
+ boolean directionSet = false;
+
+ for (SequenceFeature sf : sfs)
+ {
+ /*
+ * accept the target feature type or a specialisation of it
+ * (e.g. coding_exon for exon)
+ */
+ if (identifiesSequence(sf, accId))
+ {
+ int strand = sf.getStrand();
+ strand = strand == 0 ? 1 : strand; // treat unknown as forward
+
+ if (directionSet && strand != direction)
+ {
+ // abort - mix of forward and backward
+ System.err.println("Error: forward and backward strand for "
+ + accId);
+ return null;
+ }
+ direction = strand;
+ directionSet = true;
+
+ /*
+ * add to CDS ranges, semi-sorted forwards/backwards
+ */
+ if (strand < 0)
+ {
+ regions.add(0, new int[] { sf.getEnd(), sf.getBegin() });
+ }
+ else
+ {
+ regions.add(new int[] { sf.getBegin(), sf.getEnd() });
+ }
+ mappedLength += Math.abs(sf.getEnd() - sf.getBegin() + 1);
+
+ if (!isSpliceable())
+ {
+ /*
+ * 'gene' sequence is contiguous so we can stop as soon as its
+ * identifying feature has been found
+ */
+ break;
+ }
+ }
+ }
+
+ if (regions.isEmpty())
+ {
+ System.out.println("Failed to identify target sequence for " + accId
+ + " from genomic features");
+ return null;
+ }
+
+ /*
+ * a final sort is needed since Ensembl returns CDS sorted within source
+ * (havana / ensembl_havana)
+ */
+ Collections.sort(regions, new RangeSorter(direction == 1));
+
+ List<int[]> to = Arrays.asList(new int[] { start,
+ start + mappedLength - 1 });
+
+ return new MapList(regions, to, 1, 1);
+ }
+
+ /**
+ * Answers true if the sequence being retrieved may occupy discontiguous
+ * regions on the genomic sequence.
+ */
+ protected boolean isSpliceable()
+ {
+ return true;
+ }
+
+ /**
+ * Returns true if the sequence feature marks positions of the genomic
+ * sequence feature which are within the sequence being retrieved. For
+ * example, an 'exon' feature whose parent is the target transcript marks the
+ * cdna positions of the transcript.
+ *
+ * @param sf
+ * @param accId
+ * @return
+ */
+ protected abstract boolean identifiesSequence(SequenceFeature sf,
+ String accId);
+
+ /**
+ * Transfers the sequence feature to the target sequence, locating its start
+ * and end range based on the mapping. Features which do not overlap the
+ * target sequence are ignored.
+ *
+ * @param sf
+ * @param targetSequence
+ * @param mapping
+ * mapping from the sequence feature's coordinates to the target
+ * sequence
+ * @param forwardStrand
+ */
+ protected void transferFeature(SequenceFeature sf,
+ SequenceI targetSequence, MapList mapping, boolean forwardStrand)
+ {
+ int start = sf.getBegin();
+ int end = sf.getEnd();
+ int[] mappedRange = mapping.locateInTo(start, end);
+
+ if (mappedRange != null)
+ {
+ SequenceFeature copy = new SequenceFeature(sf);
+ copy.setBegin(Math.min(mappedRange[0], mappedRange[1]));
+ copy.setEnd(Math.max(mappedRange[0], mappedRange[1]));
+ targetSequence.addSequenceFeature(copy);
+
+ /*
+ * for sequence_variant on reverse strand, have to convert the allele
+ * values to their complements
+ */
+ if (!forwardStrand
+ && SequenceOntologyFactory.getInstance().isA(sf.getType(),
+ SequenceOntologyI.SEQUENCE_VARIANT))
+ {
+ reverseComplementAlleles(copy);
+ }
+ }
+ }
+
+ /**
+ * Change the 'alleles' value of a feature by converting to complementary
+ * bases, and also update the feature description to match
+ *
+ * @param sf
+ */
+ static void reverseComplementAlleles(SequenceFeature sf)
+ {
+ final String alleles = (String) sf.getValue(ALLELES);
+ if (alleles == null)
+ {
+ return;
+ }
+ StringBuilder complement = new StringBuilder(alleles.length());
+ for (String allele : alleles.split(","))
+ {
+ reverseComplementAllele(complement, allele);
+ }
+ String comp = complement.toString();
+ sf.setValue(ALLELES, comp);
+ sf.setDescription(comp);
+
+ /*
+ * replace value of "alleles=" in sf.ATTRIBUTES as well
+ * so 'output as GFF' shows reverse complement alleles
+ */
+ String atts = sf.getAttributes();
+ if (atts != null)
+ {
+ atts = atts.replace(ALLELES + "=" + alleles, ALLELES + "=" + comp);
+ sf.setAttributes(atts);
+ }
+ }
+
+ /**
+ * Makes the 'reverse complement' of the given allele and appends it to the
+ * buffer, after a comma separator if not the first
+ *
+ * @param complement
+ * @param allele
+ */
+ static void reverseComplementAllele(StringBuilder complement,
+ String allele)
+ {
+ if (complement.length() > 0)
+ {
+ complement.append(",");
+ }
+
+ /*
+ * some 'alleles' are actually descriptive terms
+ * e.g. HGMD_MUTATION, PhenCode_variation
+ * - we don't want to 'reverse complement' these
+ */
+ if (!Comparison.isNucleotideSequence(allele, true))
+ {
+ complement.append(allele);
+ }
+ else
+ {
+ for (int i = allele.length() - 1; i >= 0; i--)
+ {
+ complement.append(Dna.getComplement(allele.charAt(i)));
+ }
+ }
+ }
+
+ /**
+ * Transfers features from sourceSequence to targetSequence
+ *
+ * @param accessionId
+ * @param sourceSequence
+ * @param targetSequence
+ * @return true if any features were transferred, else false
+ */
+ protected boolean transferFeatures(String accessionId,
+ SequenceI sourceSequence, SequenceI targetSequence)
+ {
+ if (sourceSequence == null || targetSequence == null)
+ {
+ return false;
+ }
+
+ // long start = System.currentTimeMillis();
+ SequenceFeature[] sfs = sourceSequence.getSequenceFeatures();
+ MapList mapping = getGenomicRangesFromFeatures(sourceSequence, accessionId,
+ targetSequence.getStart());
+ if (mapping == null)
+ {
+ return false;
+ }
+
+ boolean result = transferFeatures(sfs, targetSequence, mapping,
+ accessionId);
+ // System.out.println("transferFeatures (" + (sfs.length) + " --> "
+ // + targetSequence.getSequenceFeatures().length + ") to "
+ // + targetSequence.getName()
+ // + " took " + (System.currentTimeMillis() - start) + "ms");
+ return result;
+ }
+
+ /**
+ * Transfer features to the target sequence. The start/end positions are
+ * converted using the mapping. Features which do not overlap are ignored.
+ * Features whose parent is not the specified identifier are also ignored.
+ *
+ * @param features
+ * @param targetSequence
+ * @param mapping
+ * @param parentId
+ * @return
+ */
+ protected boolean transferFeatures(SequenceFeature[] features,
+ SequenceI targetSequence, MapList mapping, String parentId)
+ {
+ final boolean forwardStrand = mapping.isFromForwardStrand();
+
+ /*
+ * sort features by start position (which corresponds to end
+ * position descending if reverse strand) so as to add them in
+ * 'forwards' order to the target sequence
+ */
+ sortFeatures(features, forwardStrand);
+
+ boolean transferred = false;
+ for (SequenceFeature sf : features)
+ {
+ if (retainFeature(sf, parentId))
+ {
+ transferFeature(sf, targetSequence, mapping, forwardStrand);
+ transferred = true;
+ }
+ }
+ return transferred;
+ }
+
+ /**
+ * Sort features by start position ascending (if on forward strand), or end
+ * position descending (if on reverse strand)
+ *
+ * @param features
+ * @param forwardStrand
+ */
+ protected static void sortFeatures(SequenceFeature[] features,
+ final boolean forwardStrand)
+ {
+ Arrays.sort(features, new Comparator<SequenceFeature>()
+ {
+ @Override
+ public int compare(SequenceFeature o1, SequenceFeature o2)
+ {
+ if (forwardStrand)
+ {
+ return Integer.compare(o1.getBegin(), o2.getBegin());
+ }
+ else
+ {
+ return Integer.compare(o2.getEnd(), o1.getEnd());
+ }
+ }
+ });
+ }
+
+ /**
+ * Answers true if the feature type is one we want to keep for the sequence.
+ * Some features are only retrieved in order to identify the sequence range,
+ * and may then be discarded as redundant information (e.g. "CDS" feature for
+ * a CDS sequence).
+ */
+ @SuppressWarnings("unused")
+ protected boolean retainFeature(SequenceFeature sf, String accessionId)
+ {
+ return true; // override as required
+ }
+
+ /**
+ * Answers true if the feature has a Parent which refers to the given
+ * accession id, or if the feature has no parent. Answers false if the
+ * feature's Parent is for a different accession id.
+ *
+ * @param sf
+ * @param identifier
+ * @return
+ */
+ protected boolean featureMayBelong(SequenceFeature sf, String identifier)
+ {
+ String parent = (String) sf.getValue(PARENT);
+ // using contains to allow for prefix "gene:", "transcript:" etc
+ if (parent != null && !parent.contains(identifier))
+ {
+ // this genomic feature belongs to a different transcript
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String getDescription()
+ {
+ return "Ensembl " + getSourceEnsemblType().getType()
+ + " sequence with variant features";
+ }
+
+ /**
+ * Returns a (possibly empty) list of features on the sequence which have the
+ * specified sequence ontology type (or a sub-type of it), and the given
+ * identifier as parent
+ *
+ * @param sequence
+ * @param type
+ * @param parentId
+ * @return
+ */
+ protected List<SequenceFeature> findFeatures(SequenceI sequence,
+ String type, String parentId)
+ {
+ List<SequenceFeature> result = new ArrayList<SequenceFeature>();
+
+ SequenceFeature[] sfs = sequence.getSequenceFeatures();
+ if (sfs != null) {
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ for (SequenceFeature sf :sfs) {
+ if (so.isA(sf.getType(), type))
+ {
+ String parent = (String) sf.getValue(PARENT);
+ if (parent.equals(parentId))
+ {
+ result.add(sf);
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Answers true if the feature type is either 'NMD_transcript_variant' or
+ * 'transcript' or one of its sub-types in the Sequence Ontology. This is
+ * needed because NMD_transcript_variant behaves like 'transcript' in Ensembl
+ * although strictly speaking it is not (it is a sub-type of
+ * sequence_variant).
+ *
+ * @param featureType
+ * @return
+ */
+ public static boolean isTranscript(String featureType)
+ {
+ return SequenceOntologyI.NMD_TRANSCRIPT_VARIANT.equals(featureType)
+ || SequenceOntologyFactory.getInstance().isA(featureType,
+ SequenceOntologyI.TRANSCRIPT);
+ }
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.DBRefSource;
+import jalview.ws.seqfetcher.DbSourceProxyImpl;
+
+import com.stevesoft.pat.Regex;
+
+/**
+ * A base class for Ensembl sequence fetchers
+ *
+ * @author gmcarstairs
+ */
+abstract class EnsemblSequenceFetcher extends DbSourceProxyImpl
+{
+ /*
+ * accepts ENSG/T/E/P with 11 digits
+ * or ENSMUSP or similar for other species
+ * or CCDSnnnnn.nn with at least 3 digits
+ */
+ private static final Regex ACCESSION_REGEX = new Regex(
+ "(ENS([A-Z]{3}|)[GTEP]{1}[0-9]{11}$)" + "|" + "(CCDS[0-9.]{3,}$)");
+
+ /*
+ * possible values for the 'feature' parameter of the /overlap REST service
+ * @see http://rest.ensembl.org/documentation/info/overlap_id
+ */
+ protected enum EnsemblFeatureType
+ {
+ gene, transcript, cds, exon, repeat, simple, misc, variation,
+ somatic_variation, structural_variation, somatic_structural_variation,
+ constrained, regulatory
+ }
+
+ @Override
+ public String getDbSource()
+ {
+ // NB ensure Uniprot xrefs are canonicalised from "Ensembl" to "ENSEMBL"
+ return DBRefSource.ENSEMBL; // "ENSEMBL"
+ }
+
+ @Override
+ public String getDbVersion()
+ {
+ return "0";
+ }
+
+ @Override
+ public String getAccessionSeparator()
+ {
+ return " ";
+ }
+
+ /**
+ * Ensembl accession are ENST + 11 digits for human transcript, ENSG for human
+ * gene. Other species insert 3 letters e.g. ENSMUST..., ENSMUSG...
+ *
+ * @see http://www.ensembl.org/Help/View?id=151
+ */
+ @Override
+ public Regex getAccessionValidator()
+ {
+ return ACCESSION_REGEX;
+ }
+
+ @Override
+ public boolean isValidReference(String accession)
+ {
+ return getAccessionValidator().search(accession);
+ }
+
+ @Override
+ public int getTier()
+ {
+ return 0;
+ }
+
+ /**
+ * Default test query is a transcript
+ */
+ @Override
+ public String getTestQuery()
+ {
+ // has CDS on reverse strand:
+ return "ENST00000288602";
+ // ENST00000461457 // forward strand
+ }
+
+ @Override
+ public boolean isDnaCoding()
+ {
+ return true;
+ }
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+
+/**
+ * A client for the Ensembl xrefs/symbol REST service;
+ *
+ * @see http://rest.ensembl.org/documentation/info/xref_external
+ * @author gmcarstairs
+ *
+ */
+public class EnsemblSymbol extends EnsemblXref
+{
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblSymbol(String d)
+ {
+ super(d);
+ }
+
+ /**
+ * Returns the first "id" value in gene identifier format from the JSON
+ * response, or null if none found
+ *
+ * @param br
+ * @return
+ * @throws IOException
+ */
+ protected String parseSymbolResponse(BufferedReader br)
+ throws IOException
+ {
+ JSONParser jp = new JSONParser();
+ String result = null;
+ try
+ {
+ JSONArray responses = (JSONArray) jp.parse(br);
+ Iterator rvals = responses.iterator();
+ while (rvals.hasNext())
+ {
+ JSONObject val = (JSONObject) rvals.next();
+ String id = val.get("id").toString();
+ if (id != null && isGeneIdentifier(id))
+ {
+ result = id;
+ break;
+ }
+ }
+ } catch (ParseException e)
+ {
+ // ignore
+ }
+ return result;
+ }
+
+ protected URL getUrl(String id, Species species)
+ {
+ String url = getDomain() + "/xrefs/symbol/" + species.toString() + "/"
+ + id
+ + "?content-type=application/json";
+ try
+ {
+ return new URL(url);
+ } catch (MalformedURLException e)
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Calls the Ensembl xrefs REST 'symbol' endpoint and retrieves any gene ids
+ * for the given identifier, for any known model organisms
+ *
+ * @param identifier
+ * @return
+ */
+ public List<String> getIds(String identifier)
+ {
+ List<String> result = new ArrayList<String>();
+ List<String> ids = new ArrayList<String>();
+ ids.add(identifier);
+
+ String[] queries = identifier.split(getAccessionSeparator());
+ BufferedReader br = null;
+ try
+ {
+ for (String query : queries)
+ {
+ for (Species taxon : Species.values())
+ {
+ if (taxon.isModelOrganism())
+ {
+ URL url = getUrl(query, taxon);
+ if (url != null)
+ {
+ br = getHttpResponse(url, ids);
+ }
+ String geneId = parseSymbolResponse(br);
+ if (geneId != null)
+ {
+ result.add(geneId);
+ }
+ }
+ }
+ }
+ } catch (IOException e)
+ {
+ // ignore
+ } finally
+ {
+ if (br != null)
+ {
+ try
+ {
+ br.close();
+ } catch (IOException e)
+ {
+ // ignore
+ }
+ }
+ }
+ return result;
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.DBRefEntry;
+import jalview.util.DBRefUtils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+
+/**
+ * A class to fetch cross-references from Ensembl by calling the /xrefs REST
+ * service
+ *
+ * @author gmcarstairs
+ * @see http://rest.ensembl.org/documentation/info/xref_id
+ */
+class EnsemblXref extends EnsemblRestClient
+{
+
+ private static final String GO_GENE_ONTOLOGY = "GO";
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblXref(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return "ENSEMBL (xref)";
+ }
+
+ @Override
+ public AlignmentI getSequenceRecords(String queries) throws Exception
+ {
+ return null;
+ }
+
+ @Override
+ protected URL getUrl(List<String> ids) throws MalformedURLException
+ {
+ return getUrl(ids.get(0));
+ }
+
+ @Override
+ protected boolean useGetRequest()
+ {
+ return true;
+ }
+
+ @Override
+ protected String getRequestMimeType(boolean multipleIds)
+ {
+ return "application/json";
+ }
+
+ @Override
+ protected String getResponseMimeType()
+ {
+ return "application/json";
+ }
+
+ /**
+ * Calls the Ensembl xrefs REST endpoint and retrieves any cross-references
+ * ("primary_id") for the given identifier (Ensembl accession id) and database
+ * names. The "dbname" returned by Ensembl is canonicalised to Jalview's
+ * standard version, and a DBRefEntry constructed. Currently takes all
+ * identifiers apart from GO terms and synonyms.
+ *
+ * @param identifier
+ * an Ensembl stable identifier
+ * @return
+ */
+ public List<DBRefEntry> getCrossReferences(String identifier)
+ {
+ List<DBRefEntry> result = new ArrayList<DBRefEntry>();
+ List<String> ids = new ArrayList<String>();
+ ids.add(identifier);
+
+ BufferedReader br = null;
+ try
+ {
+ URL url = getUrl(identifier);
+ if (url != null)
+ {
+ br = getHttpResponse(url, ids);
+ }
+ return (parseResponse(br));
+ } catch (IOException e)
+ {
+ // ignore
+ } finally
+ {
+ if (br != null)
+ {
+ try
+ {
+ br.close();
+ } catch (IOException e)
+ {
+ // ignore
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Parses "primary_id" and "dbname" values from the JSON response and
+ * constructs a DBRefEntry. Returns a list of the DBRefEntry created. Note we
+ * don't parse "synonyms" as they appear to be either redirected or obsolete
+ * in Uniprot.
+ *
+ * @param br
+ * @return
+ * @throws IOException
+ */
+ protected List<DBRefEntry> parseResponse(BufferedReader br)
+ throws IOException
+ {
+ JSONParser jp = new JSONParser();
+ List<DBRefEntry> result = new ArrayList<DBRefEntry>();
+ try
+ {
+ JSONArray responses = (JSONArray) jp.parse(br);
+ Iterator rvals = responses.iterator();
+ while (rvals.hasNext())
+ {
+ JSONObject val = (JSONObject) rvals.next();
+ String dbName = val.get("dbname").toString();
+ if (dbName.equals(GO_GENE_ONTOLOGY))
+ {
+ continue;
+ }
+ String id = val.get("primary_id").toString();
+ if (dbName != null && id != null)
+ {
+ dbName = DBRefUtils.getCanonicalName(dbName);
+ DBRefEntry dbref = new DBRefEntry(dbName, "0", id);
+ result.add(dbref);
+ }
+ }
+ } catch (ParseException e)
+ {
+ // ignore
+ }
+ return result;
+ }
+
+ /**
+ * Returns the URL for the REST endpoint to fetch all cross-references for an
+ * identifier. Note this may return protein cross-references for nucleotide.
+ * Filter the returned list as required.
+ *
+ * @param identifier
+ * @return
+ */
+ protected URL getUrl(String identifier)
+ {
+ String url = getDomain() + "/xrefs/id/" + identifier
+ + "?content-type=application/json&all_levels=1";
+ try
+ {
+ return new URL(url);
+ } catch (MalformedURLException e)
+ {
+ return null;
+ }
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+/**
+ * Selected species identifiers used by Ensembl
+ *
+ * @author gmcarstairs
+ * @see http://rest.ensembl.org/info/species?content-type=text/xml
+ */
+enum Species
+{
+ /*
+ * using any suitably readable alias as the enum name; these are all
+ * valid species parameters to Ensembl REST services where applicable
+ */
+ human(true), mouse(true), s_cerevisiae(true), cow(false), pig(false),
+ rat(true), celegans(true), sheep(false), horse(false), gorilla(false),
+ rabbit(false), gibbon(false), dog(false), orangutan(false),
+ xenopus(true), chimpanzee(false), cat(false), zebrafish(true), chicken(
+ true), dmelanogaster(true);
+
+ boolean modelOrganism;
+
+ private Species(boolean model)
+ {
+ this.modelOrganism = model;
+ }
+
+ boolean isModelOrganism()
+ {
+ return modelOrganism;
+ }
+}
--- /dev/null
+package jalview.ext.htsjdk;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.StringUtil;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
+
+import java.io.File;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * a source of sequence data accessed via the HTSJDK
+ *
+ * @author jprocter
+ *
+ */
+public class HtsContigDb
+{
+
+ private String name;
+
+ private File dbLocation;
+
+ private htsjdk.samtools.reference.ReferenceSequenceFile refFile = null;
+
+ public HtsContigDb(String name, File descriptor) throws Exception
+ {
+ if (descriptor.isFile())
+ {
+ this.name = name;
+ dbLocation = descriptor;
+ }
+ initSource();
+ }
+
+ private void initSource() throws Exception
+ {
+ if (refFile != null)
+ {
+ return;
+ }
+
+ refFile = ReferenceSequenceFileFactory.getReferenceSequenceFile(
+ dbLocation, true);
+ if (refFile == null || refFile.getSequenceDictionary() == null)
+ {
+ // refFile = initSequenceDictionaryFor(dbLocation);
+ }
+
+ }
+
+
+ SAMSequenceDictionary rrefDict = null;
+ private ReferenceSequenceFile initSequenceDictionaryFor(File dbLocation2) throws Exception
+ {
+ rrefDict = getDictionary(dbLocation2, true);
+ if (rrefDict != null)
+ {
+ ReferenceSequenceFile rrefFile = ReferenceSequenceFileFactory.getReferenceSequenceFile(dbLocation2, true);
+ return rrefFile;
+ }
+ return null;
+ }
+ /**
+ * code below hacked out from picard ----
+ *
+ * picard/src/java/picard/sam/CreateSequenceDictionary.java
+ * https://github.com/
+ * broadinstitute/picard/commit/270580d3e28123496576f0b91b3433179bb5d876
+ */
+
+
+ /*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+ /**
+ *
+ * @param f
+ * @param truncate
+ * @return
+ * @throws Exception
+ */
+ SAMSequenceDictionary getDictionary(File f, boolean truncate)
+ throws Exception
+ {
+ if (md5 == null)
+ {
+ initCreateSequenceDictionary();
+ }
+ final ReferenceSequenceFile refSeqFile = ReferenceSequenceFileFactory
+ .getReferenceSequenceFile(f, truncate);
+ ReferenceSequence refSeq;
+ List<SAMSequenceRecord> ret = new ArrayList<SAMSequenceRecord>();
+ Set<String> sequenceNames = new HashSet<String>();
+ for (int numSequences = 0; (refSeq = refSeqFile.nextSequence()) != null; ++numSequences)
+ {
+ if (sequenceNames.contains(refSeq.getName()))
+ {
+ throw new Exception(
+ "Sequence name appears more than once in reference: "
+ + refSeq.getName());
+ }
+ sequenceNames.add(refSeq.getName());
+ ret.add(makeSequenceRecord(refSeq));
+ }
+ return new SAMSequenceDictionary(ret);
+ }
+
+ public boolean isValid()
+ {
+ return dbLocation != null && refFile != null;
+ }
+
+ /**
+ * Create one SAMSequenceRecord from a single fasta sequence
+ */
+ private SAMSequenceRecord makeSequenceRecord(
+ final ReferenceSequence refSeq)
+ {
+
+ final SAMSequenceRecord ret = new SAMSequenceRecord(refSeq.getName(),
+ refSeq.length());
+
+ // Compute MD5 of upcased bases
+ final byte[] bases = refSeq.getBases();
+ for (int i = 0; i < bases.length; ++i)
+ {
+ bases[i] = StringUtil.toUpperCase(bases[i]);
+ }
+
+ ret.setAttribute(SAMSequenceRecord.MD5_TAG, md5Hash(bases));
+ // if (GENOME_ASSEMBLY != null) {
+ // ret.setAttribute(SAMSequenceRecord.ASSEMBLY_TAG, GENOME_ASSEMBLY);
+ // }
+ // ret.setAttribute(SAMSequenceRecord.URI_TAG, URI);
+ // if (SPECIES != null) {
+ // ret.setAttribute(SAMSequenceRecord.SPECIES_TAG, SPECIES);
+ // }
+ return ret;
+ }
+
+ private MessageDigest md5;
+
+ public void initCreateSequenceDictionary() throws Exception
+ {
+ try
+ {
+ md5 = MessageDigest.getInstance("MD5");
+ } catch (NoSuchAlgorithmException e)
+ {
+ throw new Exception("MD5 algorithm not found", e);
+ }
+ }
+
+ private String md5Hash(final byte[] bytes)
+ {
+ md5.reset();
+ md5.update(bytes);
+ String s = new BigInteger(1, md5.digest()).toString(16);
+ if (s.length() != 32)
+ {
+ final String zeros = "00000000000000000000000000000000";
+ s = zeros.substring(0, 32 - s.length()) + s;
+ }
+ return s;
+ }
+
+ // ///// end of hts bits.
+
+ SequenceI getSequenceProxy(String id)
+ {
+ if (!isValid())
+ {
+ return null;
+ }
+
+ ReferenceSequence sseq = refFile.getSequence(id);
+ return new Sequence(sseq.getName(), new String(sseq.getBases()));
+ }
+}
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
import jalview.io.AppletFormatAdapter;
+import jalview.io.StructureFile;
import jalview.schemes.ColourSchemeI;
import jalview.schemes.ResidueProperties;
import jalview.structure.AtomSpec;
{
String fileName = modelfilenames[modelnum];
boolean foundEntry = false;
- MCview.PDBfile pdb = null;
+ StructureFile pdb = null;
String pdbfile = null;
// model was probably loaded inline - so check the pdb file hashcode
if (loadedInline)
{
pdb = getSsm().setMapping(getSequence()[pe], getChains()[pe],
pdbfile, AppletFormatAdapter.PASTE);
- getPdbEntry(modelnum).setFile("INLINE" + pdb.id);
+ getPdbEntry(modelnum).setFile("INLINE" + pdb.getId());
matches = true;
foundEntry = true;
}
if (matches)
{
// add an entry for every chain in the model
- for (int i = 0; i < pdb.chains.size(); i++)
+ for (int i = 0; i < pdb.getChains().size(); i++)
{
- String chid = new String(pdb.id + ":"
- + pdb.chains.elementAt(i).id);
+ String chid = new String(pdb.getId() + ":"
+ + pdb.getChains().elementAt(i).id);
chainFile.put(chid, fileName);
chainNames.addElement(chid);
}
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.Annotation;
-import jalview.datamodel.PDBEntry;
-import jalview.datamodel.Sequence;
+import jalview.datamodel.DBRefSource;
import jalview.datamodel.SequenceI;
-import jalview.io.AlignFile;
import jalview.io.FileParse;
+import jalview.io.StructureFile;
import jalview.schemes.ResidueProperties;
-import jalview.util.Comparison;
+import jalview.structure.StructureViewSettings;
import jalview.util.MessageManager;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Hashtable;
import java.util.List;
import java.util.Map;
+import java.util.Vector;
import javajs.awt.Dimension;
import org.jmol.api.JmolViewer;
import org.jmol.c.CBK;
import org.jmol.c.STR;
-import org.jmol.modelset.Group;
-import org.jmol.modelset.Model;
import org.jmol.modelset.ModelSet;
-import org.jmol.modelsetbio.BioModel;
-import org.jmol.modelsetbio.BioPolymer;
-import org.jmol.modelsetbio.Monomer;
import org.jmol.viewer.Viewer;
+import MCview.Atom;
+import MCview.PDBChain;
+import MCview.Residue;
+
/**
- * Import and process PDB files with Jmol
+ * Import and process files with Jmol for file like PDB, mmCIF
*
* @author jprocter
*
*/
-public class PDBFileWithJmol extends AlignFile implements
- JmolStatusListener
+public class JmolParser extends StructureFile implements JmolStatusListener
{
Viewer viewer = null;
- public PDBFileWithJmol(String inFile, String type) throws IOException
+ public JmolParser(boolean addAlignmentAnnotations, boolean predictSecStr,
+ boolean externalSecStr, String inFile, String type)
+ throws IOException
{
super(inFile, type);
}
- public PDBFileWithJmol(FileParse fp) throws IOException
+ public JmolParser(boolean addAlignmentAnnotations, boolean predictSecStr,
+ boolean externalSecStr, FileParse fp) throws IOException
{
super(fp);
}
- public PDBFileWithJmol()
+ public JmolParser()
{
}
/**
+ * Calls the Jmol library to parse the PDB/mmCIF file, and then inspects the
+ * resulting object model to generate Jalview-style sequences, with secondary
+ * structure annotation added where available (i.e. where it has been computed
+ * by Jmol using DSSP).
+ *
+ * @see jalview.io.AlignFile#parse()
+ */
+ @Override
+ public void parse() throws IOException
+ {
+ String dataName = getDataName();
+ if (dataName.endsWith(".cif"))
+ {
+ setDbRefType(DBRefSource.MMCIF);
+ }
+ else
+ {
+ setDbRefType(DBRefSource.PDB);
+ }
+ setChains(new Vector<PDBChain>());
+ Viewer jmolModel = getJmolData();
+ jmolModel.openReader(getDataName(), getDataName(), getReader());
+ waitForScript(jmolModel);
+
+ /*
+ * Convert one or more Jmol Model objects to Jalview sequences
+ */
+ if (jmolModel.ms.mc > 0)
+ {
+ transformJmolModelToJalview(jmolModel.ms);
+ }
+ }
+
+ /**
* create a headless jmol instance for dataprocessing
*
* @return
return viewer;
}
+ public void transformJmolModelToJalview(ModelSet ms) throws IOException
+ {
+ try
+ {
+ String lastID = "";
+ List<SequenceI> rna = new ArrayList<SequenceI>();
+ List<SequenceI> prot = new ArrayList<SequenceI>();
+ PDBChain tmpchain;
+ String pdbId = (String) ms.getInfo(0, "title");
+ setId(pdbId);
+ List<Atom> significantAtoms = convertSignificantAtoms(ms);
+ for (Atom tmpatom : significantAtoms)
+ {
+ try
+ {
+ tmpchain = findChain(tmpatom.chain);
+ if (tmpatom.resNumIns.trim().equals(lastID))
+ {
+ // phosphorylated protein - seen both CA and P..
+ continue;
+ }
+ tmpchain.atoms.addElement(tmpatom);
+ } catch (Exception e)
+ {
+ tmpchain = new PDBChain(pdbId, tmpatom.chain);
+ getChains().add(tmpchain);
+ tmpchain.atoms.addElement(tmpatom);
+ }
+ lastID = tmpatom.resNumIns.trim();
+ }
+ xferSettings();
+
+ makeResidueList();
+ makeCaBondList();
+
+ if (getId() == null)
+ {
+ setId(inFile.getName());
+ }
+ for (PDBChain chain : getChains())
+ {
+ SequenceI chainseq = postProcessChain(chain);
+ if (isRNA(chainseq))
+ {
+ rna.add(chainseq);
+ }
+ else
+ {
+ prot.add(chainseq);
+ }
+
+ if (StructureViewSettings.isPredictSecondaryStructure())
+ {
+ createAnnotation(chainseq, chain, ms.at);
+ }
+ }
+ } catch (OutOfMemoryError er)
+ {
+ System.out
+ .println("OUT OF MEMORY LOADING TRANSFORMING JMOL MODEL TO JALVIEW MODEL");
+ throw new IOException(
+ MessageManager
+ .getString("exception.outofmemory_loading_mmcif_file"));
+ }
+ }
+
+ private List<Atom> convertSignificantAtoms(ModelSet ms)
+ {
+ List<Atom> significantAtoms = new ArrayList<Atom>();
+ for (org.jmol.modelset.Atom atom : ms.at)
+ {
+ if (atom.getAtomName().equalsIgnoreCase("CA")
+ || atom.getAtomName().equalsIgnoreCase("P"))
+ {
+ Atom curAtom = new Atom(atom.x, atom.y, atom.z);
+ curAtom.atomIndex = atom.getIndex();
+ curAtom.chain = atom.getChainIDStr();
+ curAtom.insCode = atom.group.getInsertionCode();
+ curAtom.name = atom.getAtomName();
+ curAtom.number = atom.getAtomNumber();
+ curAtom.resName = atom.getGroup3(true);
+ curAtom.resNumber = atom.getResno();
+ curAtom.occupancy = ms.occupancies != null ? ms.occupancies[atom
+ .getIndex()] : Float.valueOf(atom.getOccupancy100());
+ curAtom.resNumIns = "" + curAtom.resNumber + curAtom.insCode;
+ curAtom.tfactor = atom.getBfactor100() / 100f;
+ curAtom.type = 0;
+ significantAtoms.add(curAtom);
+ }
+ }
+ return significantAtoms;
+ }
+
+ private void createAnnotation(SequenceI sequence, PDBChain chain,
+ org.jmol.modelset.Atom[] jmolAtoms)
+ {
+ char[] secstr = new char[sequence.getLength()];
+ char[] secstrcode = new char[sequence.getLength()];
+
+ // Ensure Residue size equals Seq size
+ if (chain.residues.size() != sequence.getLength())
+ {
+ return;
+ }
+ int annotIndex = 0;
+ for (Residue residue : chain.residues)
+ {
+ Atom repAtom = residue.getAtoms().get(0);
+ STR proteinStructureSubType = jmolAtoms[repAtom.atomIndex].group
+ .getProteinStructureSubType();
+ setSecondaryStructure(proteinStructureSubType, annotIndex, secstr,
+ secstrcode);
+ ++annotIndex;
+ }
+ addSecondaryStructureAnnotation(chain.pdbid, sequence, secstr,
+ secstrcode, chain.id, sequence.getStart());
+ }
+
+ /**
+ * Helper method that adds an AlignmentAnnotation for secondary structure to
+ * the sequence, provided at least one secondary structure prediction has been
+ * made
+ *
+ * @param modelTitle
+ * @param seq
+ * @param secstr
+ * @param secstrcode
+ * @param chainId
+ * @param firstResNum
+ * @return
+ */
+ protected void addSecondaryStructureAnnotation(String modelTitle,
+ SequenceI sq, char[] secstr, char[] secstrcode, String chainId,
+ int firstResNum)
+ {
+ char[] seq = sq.getSequence();
+ boolean ssFound = false;
+ Annotation asecstr[] = new Annotation[seq.length + firstResNum - 1];
+ for (int p = 0; p < seq.length; p++)
+ {
+ if (secstr[p] >= 'A' && secstr[p] <= 'z')
+ {
+ try
+ {
+ asecstr[p] = new Annotation(String.valueOf(secstr[p]), null,
+ secstrcode[p], Float.NaN);
+ ssFound = true;
+ } catch (Exception e)
+ {
+ // e.printStackTrace();
+ }
+ }
+ }
+
+ if (ssFound)
+ {
+ String mt = modelTitle == null ? getDataName() : modelTitle;
+ mt += chainId;
+ AlignmentAnnotation ann = new AlignmentAnnotation(
+ "Secondary Structure", "Secondary Structure for " + mt,
+ asecstr);
+ ann.belowAlignment = true;
+ ann.visible = true;
+ ann.autoCalculated = false;
+ ann.setCalcId(getClass().getName());
+ ann.adjustForAlignment();
+ ann.validateRangeAndDisplay();
+ annotations.add(ann);
+ sq.addAlignmentAnnotation(ann);
+ }
+ }
+
private void waitForScript(Viewer jmd)
{
while (jmd.isScriptExecuting())
return null;
}
- /**
- * Calls the Jmol library to parse the PDB file, and then inspects the
- * resulting object model to generate Jalview-style sequences, with secondary
- * structure annotation added where available (i.e. where it has been computed
- * by Jmol using DSSP).
- *
- * @see jalview.io.AlignFile#parse()
- */
- @Override
- public void parse() throws IOException
- {
- Viewer jmolModel = getJmolData();
- jmolModel.openReader(getDataName(), getDataName(), getReader());
- waitForScript(jmolModel);
-
- /*
- * Convert one or more Jmol Model objects to Jalview sequences
- */
- if (jmolModel.ms.mc > 0)
- {
- parseBiopolymers(jmolModel.ms);
- }
- }
-
- /**
- * Process the Jmol BioPolymer array and generate a Jalview sequence for each
- * chain found (including any secondary structure annotation from DSSP)
- *
- * @param ms
- * @throws IOException
- */
- public void parseBiopolymers(ModelSet ms) throws IOException
- {
- int modelIndex = -1;
- for (Model model : ms.am)
- {
- modelIndex++;
- String modelTitle = (String) ms.getInfo(modelIndex, "title");
-
- /*
- * Chains can span BioPolymers, so first make a flattened list,
- * and then work out the lengths of chains present
- */
- List<Monomer> monomers = getMonomers(ms, (BioModel) model);
- List<Integer> chainLengths = getChainLengths(monomers);
-
- /*
- * now chop up the Monomer list to make Jalview Sequences
- */
- int from = 0;
- for (int length : chainLengths)
- {
- buildSequenceFromChain(monomers.subList(from, from + length), modelTitle);
- from += length;
- }
- }
- }
-
- /**
- * Helper method to construct a sequence for one chain and add it to the seqs
- * list
- *
- * @param monomers
- * a list of all monomers in the chain
- * @param modelTitle
- */
- protected void buildSequenceFromChain(List<Monomer> monomers, String modelTitle)
- {
- final int length = monomers.size();
-
- /*
- * arrays to hold sequence and secondary structure
- */
- char[] seq = new char[length];
- char[] secstr = new char[length];
- char[] secstrcode = new char[length];
-
- /*
- * populate the sequence and secondary structure arrays
- */
- extractJmolChainData(monomers, seq, secstr, secstrcode);
-
- /*
- * grab chain code and start position from first residue;
- */
- String chainId = monomers.get(0).chain.getIDStr();
- int firstResNum = monomers.get(0).getResno();
- if (firstResNum < 1)
- {
- // Jalview doesn't like residue < 1, so force this to 1
- System.err.println("Converting chain " + chainId + " first RESNUM ("
- + firstResNum + ") to 1");
- firstResNum = 1;
- }
-
- /*
- * convert any non-gap unknown residues to 'X'
- */
- convertNonGapCharacters(seq);
-
- /*
- * construct and add the Jalview sequence
- */
- String seqName = "" + getDataName() + "|" + modelTitle + "|"
- + chainId;
- SequenceI sq = new Sequence(seqName, seq, firstResNum, firstResNum + length - 1);
- seqs.add(sq);
-
- /*
- * add secondary structure predictions (if any)
- */
- addSecondaryStructureAnnotation(modelTitle, sq, secstr, secstrcode,
- chainId, firstResNum);
-
- /*
- * record the PDB id for the sequence
- */
- addPdbid(sq, chainId);
- }
-
- /**
- * Scans the list of (Jmol) Monomer objects, and adds the residue for each to
- * the sequence array, and any converted secondary structure prediction to the
- * secondary structure arrays
- *
- * @param monomers
- * @param seq
- * @param secstr
- * @param secstrcode
- */
- protected void extractJmolChainData(List<Monomer> monomers, char[] seq,
- char[] secstr, char[] secstrcode)
- {
- int pos = 0;
- for (Monomer monomer : monomers)
- {
- seq[pos] = monomer.getGroup1();
-
- /*
- * JAL-1828 replace a modified amino acid with its standard
- * equivalent (e.g. MSE with MET->M) to maximise sequence matching
- */
- replaceNonCanonicalResidue(monomer.getGroup3(), seq, pos);
-
- /*
- * if Jmol has derived a secondary structure prediction for
- * this position, convert it to Jalview equivalent and save it
- */
- setSecondaryStructure(monomer.getProteinStructureSubType(), pos,
- secstr, secstrcode);
- pos++;
- }
- }
-
- /**
- * Helper method that adds an AlignmentAnnotation for secondary structure to
- * the sequence, provided at least one secondary structure prediction has been
- * made
- *
- * @param modelTitle
- * @param seq
- * @param secstr
- * @param secstrcode
- * @param chainId
- * @param firstResNum
- * @return
- */
- protected void addSecondaryStructureAnnotation(String modelTitle,
- SequenceI sq, char[] secstr, char[] secstrcode,
- String chainId, int firstResNum)
- {
- char[] seq = sq.getSequence();
- boolean ssFound = false;
- Annotation asecstr[] = new Annotation[seq.length + firstResNum - 1];
- for (int p = 0; p < seq.length; p++)
- {
- if (secstr[p] >= 'A' && secstr[p] <= 'z')
- {
- asecstr[p] = new Annotation(String.valueOf(secstr[p]), null,
- secstrcode[p], Float.NaN);
- ssFound = true;
- }
- }
-
- if (ssFound)
- {
- String mt = modelTitle == null ? getDataName() : modelTitle;
- mt += chainId;
- AlignmentAnnotation ann = new AlignmentAnnotation(
- "Secondary Structure", "Secondary Structure for " + mt,
- asecstr);
- ann.belowAlignment = true;
- ann.visible = true;
- ann.autoCalculated = false;
- ann.setCalcId(getClass().getName());
- ann.adjustForAlignment();
- ann.validateRangeAndDisplay();
- annotations.add(ann);
- sq.addAlignmentAnnotation(ann);
- }
- }
-
- /**
- * Replace any non-gap miscellaneous characters with 'X'
- *
- * @param seq
- * @return
- */
- protected void convertNonGapCharacters(char[] seq)
+ public boolean isPredictSecondaryStructure()
{
- boolean isNa = Comparison.areNucleotide(new char[][] { seq });
- int[] cinds = isNa ? ResidueProperties.nucleotideIndex
- : ResidueProperties.aaIndex;
- int nonGap = isNa ? ResidueProperties.maxNucleotideIndex
- : ResidueProperties.maxProteinIndex;
-
- for (int p = 0; p < seq.length; p++)
- {
- if (cinds[seq[p]] == nonGap)
- {
- seq[p] = 'X';
- }
- }
+ return predictSecondaryStructure;
}
- /**
- * Add a PDBEntry giving the source of PDB data to the sequence
- *
- * @param sq
- * @param chainId
- */
- protected void addPdbid(SequenceI sq, String chainId)
+ public void setPredictSecondaryStructure(boolean predictSecondaryStructure)
{
- PDBEntry pdbe = new PDBEntry();
- pdbe.setFile(getDataName());
- pdbe.setId(getDataName());
- pdbe.setProperty(new Hashtable());
- pdbe.setChainCode(chainId);
- sq.addPDBId(pdbe);
+ this.predictSecondaryStructure = predictSecondaryStructure;
}
- /**
- * Scans the list of Monomers (residue models), inspecting the chain id for
- * each, and returns an array whose length is the number of chains, and values
- * the length of each chain
- *
- * @param monomers
- * @return
- */
- protected List<Integer> getChainLengths(List<Monomer> monomers)
+ public boolean isVisibleChainAnnotation()
{
- List<Integer> chainLengths = new ArrayList<Integer>();
- int lastChainId = -1;
- int length = 0;
-
- for (Monomer monomer : monomers)
- {
- int chainId = monomer.chain.chainID;
- if (chainId != lastChainId && length > 0)
- {
- /*
- * change of chain - record the length of the last one
- */
- chainLengths.add(length);
- length = 0;
- }
- lastChainId = chainId;
- length++;
- }
- if (length > 0)
- {
- /*
- * record the length of the final chain
- */
- chainLengths.add(length);
- }
-
- return chainLengths;
+ return visibleChainAnnotation;
}
- /**
- * Returns a flattened list of Monomer (residues) in order, across all
- * BioPolymers in the model. This simplifies assembling chains which span
- * BioPolymers. The result omits any alternate residues reported for the same
- * sequence position (RESNUM value).
- *
- * @param ms
- * @param model
- * @return
- */
- protected List<Monomer> getMonomers(ModelSet ms, BioModel model)
+ public void setVisibleChainAnnotation(boolean visibleChainAnnotation)
{
- List<Monomer> result = new ArrayList<Monomer>();
- int lastResNo = Integer.MIN_VALUE;
-
- for (BioPolymer bp : model.bioPolymers)
- {
- for (int groupLeadAtoms : bp.getLeadAtomIndices())
- {
- Group group = ms.at[groupLeadAtoms].group;
- if (group instanceof Monomer)
- {
- /*
- * ignore alternate residue at same position
- * example: 1ejg has residues A:LEU, B:ILE at RESNUM=25
- */
- int resNo = group.getResno();
- if (lastResNo != resNo)
- {
- result.add((Monomer) group);
- }
- lastResNo = resNo;
- }
- }
- }
- return result;
+ this.visibleChainAnnotation = visibleChainAnnotation;
}
}
*/
String[] modelFileNames = null;
- String lastMousedOverAtomSpec;
+ String lastHighlightCommand;
private List<String> lastReply;
* Construct and send a command to highlight zero, one or more atoms.
*
* <pre>
- * Done by generating a command like (to 'highlight' position 44)
- * show #0:44.C
+ * Done by generating a command like (to 'highlight' positions 44 and 46)
+ * show #0:44,46.C
* </pre>
*/
@Override
{
return;
}
- StringBuilder atomSpecs = new StringBuilder();
+ StringBuilder cmd = new StringBuilder(128);
boolean first = true;
+ boolean found = false;
for (AtomSpec atom : atoms)
{
List<ChimeraModel> cms = chimeraMaps.get(pdbfile);
if (cms != null && !cms.isEmpty())
{
- atomSpecs.append(first ? "" : ",");
+ if (first)
+ {
+ cmd.append("show #").append(cms.get(0).getModelNumber())
+ .append(":");
+ }
+ else
+ {
+ cmd.append(",");
+ }
first = false;
- atomSpecs.append(cms.get(0).getModelNumber());
- atomSpecs.append(":" + pdbResNum);
+ cmd.append(cms.get(0).getModelNumber()).append(":");
+ cmd.append(pdbResNum);
if (!chain.equals(" "))
{
- atomSpecs.append("." + chain);
+ cmd.append(".").append(chain);
}
+ found = true;
}
}
- String atomSpec = atomSpecs.toString();
+ String command = cmd.toString();
/*
* Avoid repeated commands for the same residue
*/
- if (atomSpec.equals(lastMousedOverAtomSpec))
+ if (command.equals(lastHighlightCommand))
{
return;
}
- StringBuilder command = new StringBuilder(32);
viewerCommandHistory(false);
- if (atomSpec.length() > 0)
+ if (found)
{
- command.append("show #").append(atomSpec);
viewer.sendChimeraCommand(command.toString(), false);
}
viewerCommandHistory(true);
- this.lastMousedOverAtomSpec = atomSpec;
+ this.lastHighlightCommand = command;
}
/**
{
sendChimeraCommand("focus", false);
}
+
+ /**
+ * Send a 'show' command for all atoms in the currently selected columns
+ *
+ * TODO: pull up to abstract structure viewer interface
+ *
+ * @param vp
+ */
+ public void highlightSelection(AlignmentViewPanel vp)
+ {
+ List<Integer> cols = vp.getAlignViewport().getColumnSelection()
+ .getSelected();
+ AlignmentI alignment = vp.getAlignment();
+ StructureSelectionManager sm = getSsm();
+ for (SequenceI seq : alignment.getSequences())
+ {
+ /*
+ * convert selected columns into sequence positions
+ */
+ int[] positions = new int[cols.size()];
+ int i = 0;
+ for (Integer col : cols)
+ {
+ positions[i++] = seq.findPosition(col);
+ }
+ sm.highlightStructure(this, seq, positions);
+ }
+ }
}
--- /dev/null
+package jalview.ext.so;
+
+import jalview.io.gff.SequenceOntologyI;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import org.biojava.nbio.ontology.Ontology;
+import org.biojava.nbio.ontology.Term;
+import org.biojava.nbio.ontology.Term.Impl;
+import org.biojava.nbio.ontology.Triple;
+import org.biojava.nbio.ontology.io.OboParser;
+import org.biojava.nbio.ontology.utils.Annotation;
+
+/**
+ * A wrapper class that parses the Sequence Ontology and exposes useful access
+ * methods. This version uses the BioJava parser.
+ */
+public class SequenceOntology implements SequenceOntologyI
+{
+ /*
+ * the parsed Ontology data as modelled by BioJava
+ */
+ private Ontology ontology;
+
+ /*
+ * the ontology term for the isA relationship
+ */
+ private Term isA;
+
+ /*
+ * lookup of terms by user readable name (NB not guaranteed unique)
+ */
+ private Map<String, Term> termsByDescription;
+
+ /*
+ * Map where key is a Term and value is a (possibly empty) list of
+ * all Terms to which the key has an 'isA' relationship, either
+ * directly or indirectly (A isA B isA C)
+ */
+ private Map<Term, List<Term>> termIsA;
+
+ private List<String> termsFound;
+
+ private List<String> termsNotFound;
+
+ /**
+ * Package private constructor to enforce use of singleton. Parses and caches
+ * the SO OBO data file.
+ */
+ public SequenceOntology()
+ {
+ termsFound = new ArrayList<String>();
+ termsNotFound = new ArrayList<String>();
+ termsByDescription = new HashMap<String, Term>();
+ termIsA = new HashMap<Term, List<Term>>();
+
+ loadOntologyZipFile("so-xp-simple.obo");
+ }
+
+ /**
+ * Loads the given ontology file from a zip file with ".zip" appended
+ *
+ * @param ontologyFile
+ */
+ protected void loadOntologyZipFile(String ontologyFile)
+ {
+ ZipInputStream zipStream = null;
+ try
+ {
+ String zipFile = ontologyFile + ".zip";
+ System.out.println("Loading Sequence Ontology from " + zipFile);
+ InputStream inStream = this.getClass().getResourceAsStream(
+ "/" + zipFile);
+ zipStream = new ZipInputStream(new BufferedInputStream(inStream));
+ ZipEntry entry;
+ while ((entry = zipStream.getNextEntry()) != null)
+ {
+ if (entry.getName().equals(ontologyFile))
+ {
+ loadOboFile(zipStream);
+ }
+ }
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ } finally
+ {
+ closeStream(zipStream);
+ }
+ }
+
+ /**
+ * Closes the input stream, swallowing all exceptions
+ *
+ * @param is
+ */
+ protected void closeStream(InputStream is)
+ {
+ if (is != null)
+ {
+ try
+ {
+ is.close();
+ } catch (IOException e)
+ {
+ // ignore
+ }
+ }
+ }
+
+ /**
+ * Reads, parses and stores the OBO file data
+ *
+ * @param is
+ * @throws ParseException
+ * @throws IOException
+ */
+ protected void loadOboFile(InputStream is) throws ParseException,
+ IOException
+ {
+ BufferedReader oboFile = new BufferedReader(new InputStreamReader(is));
+ OboParser parser = new OboParser();
+ ontology = parser.parseOBO(oboFile, "SO", "the SO ontology");
+ isA = ontology.getTerm("is_a");
+ storeTermNames();
+ }
+
+ /**
+ * Stores a lookup table of terms by description. Note that description is not
+ * guaranteed unique. Where duplicate descriptions are found, try to discard
+ * the term that is flagged as obsolete. However we do store obsolete terms
+ * where there is no duplication of description.
+ */
+ protected void storeTermNames()
+ {
+ for (Term term : ontology.getTerms())
+ {
+ if (term instanceof Impl)
+ {
+ String description = term.getDescription();
+ if (description != null)
+ {
+ Term replaced = termsByDescription.get(description);
+ if (replaced != null)
+ {
+ boolean newTermIsObsolete = isObsolete(term);
+ boolean oldTermIsObsolete = isObsolete(replaced);
+ if (newTermIsObsolete && !oldTermIsObsolete)
+ {
+ System.err.println("Ignoring " + term.getName()
+ + " as obsolete and duplicated by "
+ + replaced.getName());
+ term = replaced;
+ }
+ else if (!newTermIsObsolete && oldTermIsObsolete)
+ {
+ System.err.println("Ignoring " + replaced.getName()
+ + " as obsolete and duplicated by " + term.getName());
+ }
+ else
+ {
+ System.err.println("Warning: " + term.getName()
+ + " has replaced " + replaced.getName()
+ + " for lookup of '" + description + "'");
+ }
+ }
+ termsByDescription.put(description, term);
+ }
+ }
+ }
+ }
+
+ /**
+ * Answers true if the term has property "is_obsolete" with value true, else
+ * false
+ *
+ * @param term
+ * @return
+ */
+ public static boolean isObsolete(Term term)
+ {
+ Annotation ann = term.getAnnotation();
+ if (ann != null)
+ {
+ try
+ {
+ if (Boolean.TRUE.equals(ann.getProperty("is_obsolete")))
+ {
+ return true;
+ }
+ } catch (NoSuchElementException e)
+ {
+ // fall through to false
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Test whether the given Sequence Ontology term is nucleotide_match (either
+ * directly or via is_a relationship)
+ *
+ * @param soTerm
+ * SO name or description
+ * @return
+ */
+ public boolean isNucleotideMatch(String soTerm)
+ {
+ return isA(soTerm, NUCLEOTIDE_MATCH);
+ }
+
+ /**
+ * Test whether the given Sequence Ontology term is protein_match (either
+ * directly or via is_a relationship)
+ *
+ * @param soTerm
+ * SO name or description
+ * @return
+ */
+ public boolean isProteinMatch(String soTerm)
+ {
+ return isA(soTerm, PROTEIN_MATCH);
+ }
+
+ /**
+ * Test whether the given Sequence Ontology term is polypeptide (either
+ * directly or via is_a relationship)
+ *
+ * @param soTerm
+ * SO name or description
+ * @return
+ */
+ public boolean isPolypeptide(String soTerm)
+ {
+ return isA(soTerm, POLYPEPTIDE);
+ }
+
+ /**
+ * Returns true if the given term has a (direct or indirect) 'isA'
+ * relationship with the parent
+ *
+ * @param child
+ * @param parent
+ * @return
+ */
+ @Override
+ public boolean isA(String child, String parent)
+ {
+ if (child == null || parent == null)
+ {
+ return false;
+ }
+ /*
+ * optimise trivial checks like isA("CDS", "CDS")
+ */
+ if (child.equals(parent))
+ {
+ termFound(child);
+ return true;
+ }
+
+ Term childTerm = getTerm(child);
+ if (childTerm != null)
+ {
+ termFound(child);
+ }
+ else
+ {
+ termNotFound(child);
+ }
+ Term parentTerm = getTerm(parent);
+
+ return termIsA(childTerm, parentTerm);
+ }
+
+ /**
+ * Records a valid term queried for, for reporting purposes
+ *
+ * @param term
+ */
+ private void termFound(String term)
+ {
+ synchronized (termsFound)
+ {
+ if (!termsFound.contains(term))
+ {
+ termsFound.add(term);
+ }
+ }
+ }
+
+ /**
+ * Records an invalid term queried for, for reporting purposes
+ *
+ * @param term
+ */
+ private void termNotFound(String term)
+ {
+ synchronized (termsNotFound)
+ {
+ if (!termsNotFound.contains(term))
+ {
+ System.err.println("SO term " + term + " invalid");
+ termsNotFound.add(term);
+ }
+ }
+ }
+
+ /**
+ * Returns true if the childTerm 'isA' parentTerm (directly or indirectly).
+ *
+ * @param childTerm
+ * @param parentTerm
+ * @return
+ */
+ protected synchronized boolean termIsA(Term childTerm, Term parentTerm)
+ {
+ /*
+ * null term could arise from a misspelled SO description
+ */
+ if (childTerm == null || parentTerm == null)
+ {
+ return false;
+ }
+
+ /*
+ * recursive search endpoint:
+ */
+ if (childTerm == parentTerm)
+ {
+ return true;
+ }
+
+ /*
+ * lazy initialisation - find all of a term's parents (recursively)
+ * the first time this is called, and save them in a map.
+ */
+ if (!termIsA.containsKey(childTerm))
+ {
+ findParents(childTerm);
+ }
+
+ List<Term> parents = termIsA.get(childTerm);
+ for (Term parent : parents)
+ {
+ if (termIsA(parent, parentTerm))
+ {
+ /*
+ * add (great-)grandparents to parents list as they are discovered,
+ * for faster lookup next time
+ */
+ if (!parents.contains(parentTerm))
+ {
+ parents.add(parentTerm);
+ }
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Finds all the 'isA' parents of the childTerm and stores them as a (possibly
+ * empty) list.
+ *
+ * @param childTerm
+ */
+ protected synchronized void findParents(Term childTerm)
+ {
+ List<Term> result = new ArrayList<Term>();
+ for (Triple triple : ontology.getTriples(childTerm, null, isA))
+ {
+ Term parent = triple.getObject();
+ result.add(parent);
+
+ /*
+ * and search for the parent's parents recursively
+ */
+ findParents(parent);
+ }
+ termIsA.put(childTerm, result);
+ }
+
+ /**
+ * Returns the Term for a given name (e.g. "SO:0000735") or description (e.g.
+ * "sequence_location"), or null if not found.
+ *
+ * @param child
+ * @return
+ */
+ protected Term getTerm(String nameOrDescription)
+ {
+ Term t = termsByDescription.get(nameOrDescription);
+ if (t == null)
+ {
+ try
+ {
+ t = ontology.getTerm(nameOrDescription);
+ } catch (NoSuchElementException e)
+ {
+ // not found
+ }
+ }
+ return t;
+ }
+
+ public boolean isSequenceVariant(String soTerm)
+ {
+ return isA(soTerm, SEQUENCE_VARIANT);
+ }
+
+ /**
+ * Sorts (case-insensitive) and returns the list of valid terms queried for
+ */
+ @Override
+ public List<String> termsFound()
+ {
+ synchronized (termsFound)
+ {
+ Collections.sort(termsFound, String.CASE_INSENSITIVE_ORDER);
+ return termsFound;
+ }
+ }
+
+ /**
+ * Sorts (case-insensitive) and returns the list of invalid terms queried for
+ */
+ @Override
+ public List<String> termsNotFound()
+ {
+ synchronized (termsNotFound)
+ {
+ Collections.sort(termsNotFound, String.CASE_INSENSITIVE_ORDER);
+ return termsNotFound;
+ }
+ }
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.api;
+
+/**
+ * This interface provides a model for the summary data;
+ *
+ * @author tcnofoegbu
+ *
+ */
+public interface FTSData
+{
+
+ /**
+ * Return an array of Objects representing the retrieved FTS data
+ *
+ * @return
+ */
+ public Object[] getSummaryData();
+
+ /**
+ * The primary key object for the retrieved FTS data
+ *
+ * @return
+ */
+ public Object getPrimaryKey();
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.api;
+
+/**
+ * This interface provides a model for the dynamic data column configuration
+ *
+ * @author tcnofoegbu
+ *
+ */
+public interface FTSDataColumnI
+{
+ /**
+ * Returns the name of the data column
+ *
+ * @return the data column's name
+ */
+ public String getName();
+
+ /**
+ * Returns the code of the data column
+ *
+ * @return the data column's code
+ */
+ public String getCode();
+
+ /**
+ * Returns the alternative code value for the data column
+ *
+ * @return the data column's code
+ */
+ public String getAltCode();
+
+ /**
+ * Returns the minimum width of the data column
+ *
+ * @return the data column's minimum width
+ */
+ public int getMinWidth();
+
+ /**
+ * Returns the maximum width of the data column
+ *
+ * @return the data column's maximum width
+ */
+ public int getMaxWidth();
+
+ /**
+ * Returns the preferred width of the data column
+ *
+ * @return the data column's preferred width
+ */
+ public int getPreferredWidth();
+
+ /**
+ * Determines if the data column is the primary key column
+ *
+ * @return true if data column is the primary key column, otherwise false
+ */
+ public boolean isPrimaryKeyColumn();
+
+ /**
+ * Checks if the data column field can be used to perform a search query
+ *
+ * @return true means the data column is searchable
+ */
+ public boolean isSearchable();
+
+ /**
+ * Checks if the data column is displayed by default
+ *
+ * @return true means the data column is shown by default
+ */
+ public boolean isVisibleByDefault();
+
+ /**
+ * Returns the data column's data type class
+ *
+ * @return the Class for the data column's data type
+ */
+ public Class getDataColumnClass();
+
+ /**
+ * Returns the data colum's FTS data column group
+ *
+ * @return the FTSDataColumnGroupI for the column
+ */
+ public FTSDataColumnGroupI getGroup();
+
+ /**
+ * This interface provides a model for the dynamic data column group
+ *
+ */
+ public interface FTSDataColumnGroupI
+ {
+ /**
+ * Returns the Id of the data column's group
+ *
+ * @return the data column's group Id
+ */
+ public String getID();
+
+ /**
+ * Returns the name of the group
+ *
+ * @return the group's name
+ */
+ public String getName();
+
+ /**
+ * Returns the sort order of the group
+ *
+ * @return the group's sort order
+ */
+ public int getSortOrder();
+ }
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.api;
+
+import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+
+import java.util.Collection;
+
+/**
+ * Methods for FTS Rest client.
+ *
+ * @author tcnofoegbu
+ */
+public interface FTSRestClientI
+{
+
+ /**
+ * Execute a given FTS request, process the response and return it as an
+ * FTSRestResponse object
+ *
+ * @param ftsRestRequest
+ * the FTS request to execute
+ * @return FTSRestResponse - the response after executing an FTS request
+ * @throws Exception
+ */
+ public FTSRestResponse executeRequest(FTSRestRequest ftsRequest)
+ throws Exception;
+
+ /**
+ * Return the resource file path for the data columns configuration file
+ *
+ * @return
+ */
+ public String getColumnDataConfigFileName();
+
+ /**
+ * Fetch FTSDataColumnGroupI by the group's Id
+ *
+ * @param groupId
+ * @return FTSDataColumnGroupI
+ * @throws Exception
+ */
+ public FTSDataColumnGroupI getDataColumnGroupById(String groupId)
+ throws Exception;
+
+ /**
+ * Fetch FTSDataColumnI by name or code
+ *
+ * @param nameOrCode
+ * @return FTSDataColumnI
+ * @throws Exception
+ */
+ public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
+ throws Exception;
+
+
+ /**
+ * Convert collection of FTSDataColumnI objects to a comma delimited string of
+ * the 'code' values
+ *
+ * @param wantedFields
+ * the collection of FTSDataColumnI to process
+ * @return the generated comma delimited string from the supplied
+ * FTSDataColumnI collection
+ */
+ public String getDataColumnsFieldsAsCommaDelimitedString(
+ Collection<FTSDataColumnI> wantedFields);
+
+
+ /**
+ * Fetch index of the primary key column for the dynamic table
+ *
+ * @param wantedFields
+ * the available table columns
+ * @param hasRefSeq
+ * true if the data columns has an additional column for reference
+ * sequence
+ * @return index of the primary key column
+ * @throws Exception
+ */
+ public int getPrimaryKeyColumIndex(
+ Collection<FTSDataColumnI> wantedFields, boolean hasRefSeq)
+ throws Exception;
+
+ /**
+ * Fetch the primary key data column object
+ *
+ * @return the FTSDataColumnI object for the primary key column
+ */
+ public FTSDataColumnI getPrimaryKeyColumn();
+
+ /**
+ * Returns list of FTSDataColumnI objects to be displayed by default
+ *
+ * @return list of columns to display by default
+ */
+ public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns();
+
+ /**
+ * Return list of FTSDataColumnI objects that can be used to perform a search
+ * query
+ *
+ * @return list of searchable FTSDataColumnI object
+ */
+ public Collection<FTSDataColumnI> getSearchableDataColumns();
+
+ /**
+ * Return list of all available FTSDataColumnI object
+ *
+ * @return list of all FTSColumnI objcet
+ */
+ public Collection<FTSDataColumnI> getAllFTSDataColumns();
+
+ /**
+ * Return the default response page limit
+ *
+ * @return the default response page size
+ */
+ public int getDefaultResponsePageSize();
+}
+
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.api;
+
+import javax.swing.JTable;
+
+/**
+ *
+ * @author tcnofoegbu
+ *
+ */
+public interface GFTSPanelI
+{
+
+ /**
+ * Action performed when a text is entered in the search field.
+ *
+ * @param isFreshSearch
+ * if true a fresh search is executed else a pagination search is
+ * executed
+ */
+ public void searchAction(boolean isFreshSearch);
+
+ /**
+ * Action performed when search results are selected and the 'ok' button is
+ * pressed.
+ */
+ public void okAction();
+
+ /**
+ * Return the entered text
+ *
+ * @return the entered text
+ */
+ public String getTypedText();
+
+ /**
+ * The JTable for presenting the query result
+ *
+ * @return JTable
+ */
+ public JTable getResultTable();
+
+ /**
+ * Return the title to display on the search interface main panel
+ *
+ * @return String - the title
+ */
+ public String getFTSFrameTitle();
+
+ /**
+ * Return a singleton instance of FTSRestClientI
+ *
+ * @return FTSRestClientI
+ */
+ public FTSRestClientI getFTSRestClient();
+
+ /**
+ * Set error message when one occurs
+ *
+ * @param message
+ * the error message to set
+ */
+ public void setErrorMessage(String message);
+
+ /**
+ * Updates the title displayed on the search interface's main panel
+ *
+ * @param newTitle
+ */
+ public void updateSearchFrameTitle(String newTitle);
+
+ /**
+ * Controls the progress spinner, set to 'true' while search operation is in
+ * progress and 'false' after it completes
+ *
+ * @param isSearchInProgress
+ */
+ public void setSearchInProgress(Boolean isSearchInProgress);
+
+ /**
+ * Action performed when previous page (<<) button is pressed pressed.
+ */
+ public void prevPageAction();
+
+ /**
+ * Action performed when next page (>>) button is pressed pressed.
+ */
+ public void nextPageAction();
+
+ /**
+ * Checks if the current service's search result is paginate-able
+ *
+ * @return true means the service provides paginated results
+ */
+ public boolean isPaginationEnabled();
+
+ /**
+ * Updates the 'enabled' state for the previous page button
+ *
+ * @param isEnabled
+ */
+ public void setPrevPageButtonEnabled(boolean isEnabled);
+
+ /**
+ * Updates the 'enabled' state for the next page button
+ *
+ * @param isEnabled
+ */
+ public void setNextPageButtonEnabled(boolean isEnabled);
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.fts.core;
+
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
+import jalview.fts.api.FTSRestClientI;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.RowSorter;
+import javax.swing.SortOrder;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+import javax.swing.table.TableRowSorter;
+
+
+@SuppressWarnings("serial")
+public class FTSDataColumnPreferences extends JScrollPane
+{
+ protected JTable tbl_FTSDataColumnPrefs = new JTable();
+
+ protected JScrollPane scrl_pdbDocFieldConfig = new JScrollPane(
+ tbl_FTSDataColumnPrefs);
+
+ private HashMap<String, FTSDataColumnI> map = new HashMap<String, FTSDataColumnI>();
+
+ private Collection<FTSDataColumnI> structSummaryColumns = new LinkedHashSet<FTSDataColumnI>();
+
+ private Collection<FTSDataColumnI> allFTSDataColumns = new LinkedHashSet<FTSDataColumnI>();
+
+ public enum PreferenceSource
+ {
+ SEARCH_SUMMARY, STRUCTURE_CHOOSER, PREFERENCES;
+ }
+
+ private PreferenceSource currentSource;
+
+ private FTSRestClientI ftsRestClient;
+
+ public FTSDataColumnPreferences(PreferenceSource source,
+ FTSRestClientI ftsRestClient)
+ {
+ this.ftsRestClient = ftsRestClient;
+ Collection<FTSDataColumnI> defaultCols = ftsRestClient
+ .getAllDefaulDisplayedDataColumns();
+
+ structSummaryColumns.addAll(defaultCols);
+
+ allFTSDataColumns.addAll(ftsRestClient.getAllFTSDataColumns());
+
+ tbl_FTSDataColumnPrefs.setAutoCreateRowSorter(true);
+ this.getViewport().add(tbl_FTSDataColumnPrefs);
+ this.currentSource = source;
+
+ String[] columnNames = null;
+ switch (source)
+ {
+ case SEARCH_SUMMARY:
+ columnNames = new String[] { "", "Display", "Group" };
+ break;
+ case STRUCTURE_CHOOSER:
+ columnNames = new String[] { "", "Display", "Group" };
+ break;
+ case PREFERENCES:
+ columnNames = new String[] { "PDB Field", "Show in search summary",
+ "Show in structure summary" };
+ break;
+ default:
+ break;
+ }
+
+ Object[][] data = new Object[allFTSDataColumns.size() - 1][3];
+
+ int x = 0;
+ for (FTSDataColumnI field : allFTSDataColumns)
+ {
+ if (field.getName().equalsIgnoreCase("all"))
+ {
+ continue;
+ }
+
+ switch (source)
+ {
+ case SEARCH_SUMMARY:
+ data[x++] = new Object[] {
+ ftsRestClient.getAllDefaulDisplayedDataColumns()
+ .contains(field),
+ field.getName(), field.getGroup() };
+ break;
+ case STRUCTURE_CHOOSER:
+ data[x++] = new Object[] { structSummaryColumns.contains(field),
+ field.getName(), field.getGroup() };
+ break;
+ case PREFERENCES:
+ data[x++] = new Object[] { field.getName(),
+ ftsRestClient.getAllDefaulDisplayedDataColumns()
+ .contains(field),
+ structSummaryColumns.contains(field) };
+ break;
+ default:
+ break;
+ }
+ map.put(field.getName(), field);
+ }
+
+ FTSDataColumnPrefsTableModel model = new FTSDataColumnPrefsTableModel(columnNames, data);
+ tbl_FTSDataColumnPrefs.setModel(model);
+
+ switch (source)
+ {
+ case SEARCH_SUMMARY:
+ case STRUCTURE_CHOOSER:
+ tbl_FTSDataColumnPrefs.getColumnModel().getColumn(0)
+ .setPreferredWidth(30);
+ tbl_FTSDataColumnPrefs.getColumnModel().getColumn(0).setMinWidth(20);
+ tbl_FTSDataColumnPrefs.getColumnModel().getColumn(0).setMaxWidth(40);
+ tbl_FTSDataColumnPrefs.getColumnModel().getColumn(1)
+ .setPreferredWidth(150);
+ tbl_FTSDataColumnPrefs.getColumnModel().getColumn(1).setMinWidth(150);
+ tbl_FTSDataColumnPrefs.getColumnModel().getColumn(2)
+ .setPreferredWidth(150);
+ tbl_FTSDataColumnPrefs.getColumnModel().getColumn(2)
+.setMinWidth(150);
+
+ TableRowSorter<TableModel> sorter = new TableRowSorter<>(
+ tbl_FTSDataColumnPrefs.getModel());
+ tbl_FTSDataColumnPrefs.setRowSorter(sorter);
+ List<RowSorter.SortKey> sortKeys = new ArrayList<>();
+ int columnIndexToSort = 2;
+ sortKeys.add(new RowSorter.SortKey(columnIndexToSort,
+ SortOrder.ASCENDING));
+ sorter.setSortKeys(sortKeys);
+ sorter.setComparator(
+ columnIndexToSort,
+ new Comparator<FTSDataColumnGroupI>()
+ {
+ @Override
+ public int compare(FTSDataColumnGroupI o1,
+ FTSDataColumnGroupI o2)
+ {
+ return o1.getSortOrder() - o2.getSortOrder();
+ }
+ });
+ sorter.sort();
+
+ tbl_FTSDataColumnPrefs
+ .setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
+ break;
+ case PREFERENCES:
+ default:
+ break;
+ }
+
+ }
+
+ public Collection<FTSDataColumnI> getStructureSummaryFields()
+ {
+ return structSummaryColumns;
+ }
+
+ class FTSDataColumnPrefsTableModel extends AbstractTableModel
+ {
+
+ public FTSDataColumnPrefsTableModel(String[] columnNames, Object[][] data)
+ {
+ this.data = data;
+ this.columnNames = columnNames;
+ }
+
+ private Object[][] data;
+
+ private String[] columnNames;
+
+ @Override
+ public int getColumnCount()
+ {
+ return columnNames.length;
+ }
+
+ @Override
+ public int getRowCount()
+ {
+ return data.length;
+ }
+
+ @Override
+ public String getColumnName(int col)
+ {
+ return columnNames[col];
+ }
+
+ @Override
+ public Object getValueAt(int row, int col)
+ {
+ return data[row][col];
+ }
+
+ /*
+ * JTable uses this method to determine the default renderer/ editor for
+ * each cell. If we didn't implement this method, then the last column would
+ * contain text ("true"/"false"), rather than a check box.
+ */
+ @Override
+ public Class getColumnClass(int c)
+ {
+ return getValueAt(0, c).getClass();
+ }
+
+ /*
+ * Don't need to implement this method unless your table's editable.
+ */
+ @Override
+ public boolean isCellEditable(int row, int col)
+ {
+ // Note that the data/cell address is constant,
+ // no matter where the cell appears onscreen.
+ // !isPDBID(row, col) ensures the PDB_Id cell is never editable as it
+ // serves as a unique id for each row.
+ // return (col == 1 || col == 2) && !isPDBID(row, col);
+ switch (currentSource)
+ {
+ case SEARCH_SUMMARY:
+ case STRUCTURE_CHOOSER:
+ return (col == 0) && !isPrimaryKeyCell(row, 1);
+ case PREFERENCES:
+ return (col == 1 || col == 2) && !isPrimaryKeyCell(row, 0);
+ default:
+ return false;
+ }
+
+ }
+
+ /**
+ * Determines whether the data in a given cell is a PDB ID.
+ *
+ * @param row
+ * @param col
+ * @return
+ */
+
+ public boolean isPrimaryKeyCell(int row, int col)
+ {
+ String name = getValueAt(row, col).toString();
+ FTSDataColumnI pdbField = map.get(name);
+ return pdbField.isPrimaryKeyColumn();
+ }
+
+ /*
+ * Don't need to implement this method unless your table's data can change.
+ */
+ @Override
+ public void setValueAt(Object value, int row, int col)
+ {
+ data[row][col] = value;
+ fireTableCellUpdated(row, col);
+
+ String name = null;
+ switch (currentSource)
+ {
+ case SEARCH_SUMMARY:
+ case STRUCTURE_CHOOSER:
+ name = getValueAt(row, 1).toString();
+ break;
+ case PREFERENCES:
+ name = getValueAt(row, 0).toString();
+ break;
+ default:
+ break;
+ }
+ boolean selected = ((Boolean) value).booleanValue();
+
+ FTSDataColumnI ftsDataColumn = map.get(name);
+
+ if (currentSource == PreferenceSource.SEARCH_SUMMARY)
+ {
+ updatePrefs(ftsRestClient
+ .getAllDefaulDisplayedDataColumns(), ftsDataColumn,
+ selected);
+ }
+ else if (currentSource == PreferenceSource.STRUCTURE_CHOOSER)
+ {
+ updatePrefs(structSummaryColumns, ftsDataColumn, selected);
+ }
+ else if (currentSource == PreferenceSource.PREFERENCES)
+ {
+ if (col == 1)
+ {
+ updatePrefs(ftsRestClient
+ .getAllDefaulDisplayedDataColumns(), ftsDataColumn,
+ selected);
+ }
+ else if (col == 2)
+ {
+ updatePrefs(structSummaryColumns, ftsDataColumn, selected);
+ }
+ }
+ }
+
+ private void updatePrefs(
+ Collection<FTSDataColumnI> prefConfig,
+ FTSDataColumnI dataColumn, boolean selected)
+ {
+ if (prefConfig.contains(dataColumn) && !selected)
+ {
+ prefConfig.remove(dataColumn);
+ }
+
+ if (!prefConfig.contains(dataColumn) && selected)
+ {
+ prefConfig.add(dataColumn);
+ }
+ }
+
+ }
+}
--- /dev/null
+package jalview.fts.core;
+
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.util.MessageManager;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Objects;
+
+/**
+ * Base class providing implementation for common methods defined in
+ * FTSRestClientI
+ *
+ * @author tcnofoegbu
+ *
+ * @note implementations MUST be accessed as a singleton.
+ */
+public abstract class FTSRestClient implements FTSRestClientI
+{
+ protected Collection<FTSDataColumnI> dataColumns = new ArrayList<FTSDataColumnI>();
+
+ protected Collection<FTSDataColumnGroupI> dataColumnGroups = new ArrayList<FTSDataColumnGroupI>();
+
+ protected Collection<FTSDataColumnI> searchableDataColumns = new ArrayList<FTSDataColumnI>();
+
+ protected Collection<FTSDataColumnI> defaulDisplayedDataColumns = new ArrayList<FTSDataColumnI>();
+
+ protected FTSDataColumnI primaryKeyColumn;
+
+ private String primaryKeyColumnCode = null;
+
+ private int defaultResponsePageSize = 100;
+
+ protected FTSRestClient()
+ {
+
+ }
+
+ public void parseDataColumnsConfigFile()
+ {
+ String fileName = getColumnDataConfigFileName();
+
+ InputStream in = getClass().getResourceAsStream(fileName);
+
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(in)))
+ {
+ String line;
+ while ((line = br.readLine()) != null)
+ {
+ final String[] lineData = line.split(";");
+ try
+ {
+ if (lineData.length == 2)
+ {
+ if (lineData[0].equalsIgnoreCase("_data_column.primary_key"))
+ {
+ primaryKeyColumnCode = lineData[1];
+ }
+ if (lineData[0]
+ .equalsIgnoreCase("_data_column.default_response_page_size"))
+ {
+ defaultResponsePageSize = Integer.valueOf(lineData[1]);
+ }
+ }
+ else if (lineData.length == 3)
+ {
+ dataColumnGroups.add(new FTSDataColumnGroupI()
+ {
+ @Override
+ public String getID()
+ {
+ return lineData[0];
+ }
+
+ @Override
+ public String getName()
+ {
+ return lineData[1];
+ }
+
+ @Override
+ public int getSortOrder()
+ {
+ return Integer.valueOf(lineData[2]);
+ }
+
+ @Override
+ public String toString()
+ {
+ return lineData[1];
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(this.getID(), this.getName(),
+ this.getSortOrder());
+ }
+
+ @Override
+ public boolean equals(Object otherObject)
+ {
+ FTSDataColumnGroupI that = (FTSDataColumnGroupI) otherObject;
+ return this.getID().equals(that.getID())
+ && this.getName().equals(that.getName())
+ && this.getSortOrder() == that.getSortOrder();
+ }
+ });
+ }
+ else if (lineData.length > 6)
+ {
+ FTSDataColumnI dataCol = new FTSDataColumnI()
+ {
+ @Override
+ public String toString()
+ {
+ return lineData[0];
+ }
+
+ @Override
+ public String getName()
+ {
+ return lineData[0];
+ }
+
+ @Override
+ public String getCode()
+ {
+ return lineData[1].split("\\|")[0];
+ }
+
+ @Override
+ public String getAltCode()
+ {
+ return lineData[1].split("\\|").length > 1 ? lineData[1]
+ .split("\\|")[1] : getCode();
+ }
+
+ @Override
+ public Class<?> getDataColumnClass()
+ {
+ String classString = lineData[2];
+ classString = classString.toUpperCase();
+ switch (classString)
+ {
+ case "INT":
+ case "INTEGER":
+ return Integer.class;
+ case "DOUBLE":
+ return Double.class;
+ case "STRING":
+ default:
+ return String.class;
+ }
+ }
+
+ @Override
+ public FTSDataColumnGroupI getGroup()
+ {
+ FTSDataColumnGroupI group = null;
+ try
+ {
+ group = getDataColumnGroupById(lineData[3]);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return group;
+ }
+
+ @Override
+ public int getMinWidth()
+ {
+ return Integer.valueOf(lineData[4]);
+ }
+
+ @Override
+ public int getMaxWidth()
+ {
+ return Integer.valueOf(lineData[5]);
+ }
+
+ @Override
+ public int getPreferredWidth()
+ {
+ return Integer.valueOf(lineData[6]);
+ }
+
+ @Override
+ public boolean isPrimaryKeyColumn()
+ {
+ return getName().equalsIgnoreCase(primaryKeyColumnCode)
+ || getCode().equalsIgnoreCase(primaryKeyColumnCode);
+ }
+
+ @Override
+ public boolean isVisibleByDefault()
+ {
+ return Boolean.valueOf(lineData[7]);
+ }
+
+ @Override
+ public boolean isSearchable()
+ {
+ return Boolean.valueOf(lineData[8]);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(this.getName(), this.getCode(),
+ this.getGroup());
+ }
+
+
+ @Override
+ public boolean equals(Object otherObject)
+ {
+ FTSDataColumnI that = (FTSDataColumnI) otherObject;
+ return this.getCode().equals(that.getCode())
+ && this.getName().equals(that.getName())
+ && this.getGroup().equals(that.getGroup());
+ }
+
+ };
+ dataColumns.add(dataCol);
+
+ if (dataCol.isSearchable())
+ {
+ searchableDataColumns.add(dataCol);
+ }
+
+ if (dataCol.isVisibleByDefault())
+ {
+ defaulDisplayedDataColumns.add(dataCol);
+ }
+
+ }
+ else
+ {
+ continue;
+ }
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ try
+ {
+ this.primaryKeyColumn = getDataColumnByNameOrCode(primaryKeyColumnCode);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ } catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public int getPrimaryKeyColumIndex(
+ Collection<FTSDataColumnI> wantedFields, boolean hasRefSeq)
+ throws Exception
+ {
+
+ // If a reference sequence is attached then start counting from 1 else
+ // start from zero
+ int pdbFieldIndexCounter = hasRefSeq ? 1 : 0;
+
+ for (FTSDataColumnI field : wantedFields)
+ {
+ if (field.isPrimaryKeyColumn())
+ {
+ break; // Once PDB Id index is determined exit iteration
+ }
+ ++pdbFieldIndexCounter;
+ }
+ return pdbFieldIndexCounter;
+ }
+
+ @Override
+ public String getDataColumnsFieldsAsCommaDelimitedString(
+ Collection<FTSDataColumnI> dataColumnFields)
+ {
+ String result = "";
+ if (dataColumnFields != null && !dataColumnFields.isEmpty())
+ {
+ StringBuilder returnedFields = new StringBuilder();
+ for (FTSDataColumnI field : dataColumnFields)
+ {
+ returnedFields.append(",").append(field.getCode());
+ }
+ returnedFields.deleteCharAt(0);
+ result = returnedFields.toString();
+ }
+ return result;
+ }
+
+
+ @Override
+ public Collection<FTSDataColumnI> getAllFTSDataColumns()
+ {
+ if (dataColumns == null || dataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
+ return dataColumns;
+ }
+
+ @Override
+ public Collection<FTSDataColumnI> getSearchableDataColumns()
+ {
+ if (searchableDataColumns == null || searchableDataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
+ return searchableDataColumns;
+ }
+
+ @Override
+ public Collection<FTSDataColumnI> getAllDefaulDisplayedDataColumns()
+ {
+ if (defaulDisplayedDataColumns == null
+ || defaulDisplayedDataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
+ return defaulDisplayedDataColumns;
+ }
+
+ @Override
+ public FTSDataColumnI getPrimaryKeyColumn()
+ {
+ if (defaulDisplayedDataColumns == null
+ || defaulDisplayedDataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
+ return primaryKeyColumn;
+ }
+
+ @Override
+ public FTSDataColumnI getDataColumnByNameOrCode(String nameOrCode)
+ throws Exception
+ {
+ if (dataColumns == null || dataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
+ for (FTSDataColumnI column : dataColumns)
+ {
+ if (column.getName().equalsIgnoreCase(nameOrCode)
+ || column.getCode().equalsIgnoreCase(nameOrCode))
+ {
+ return column;
+ }
+ }
+ throw new Exception("Couldn't find data column with name : "
+ + nameOrCode);
+ }
+
+ @Override
+ public FTSDataColumnGroupI getDataColumnGroupById(String id)
+ throws Exception
+ {
+ if (dataColumns == null || dataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
+ for (FTSDataColumnGroupI columnGroup : dataColumnGroups)
+ {
+ if (columnGroup.getID().equalsIgnoreCase(id))
+ {
+ return columnGroup;
+ }
+ }
+ throw new Exception("Couldn't find data column group with id : " + id);
+ }
+
+ public String getMessageByHTTPStatusCode(int code, String service)
+ {
+ String message = "";
+ switch (code)
+ {
+ case 400:
+ message = MessageManager
+ .getString("exception.bad_request");
+ break;
+
+ case 410:
+ message = MessageManager.formatMessage(
+ "exception.fts_rest_service_no_longer_available", service);
+ break;
+ case 403:
+ case 404:
+ message = MessageManager.getString("exception.resource_not_be_found");
+ break;
+ case 408:
+ case 409:
+ case 500:
+ case 501:
+ case 502:
+ case 504:
+ case 505:
+ message = MessageManager.getString("exception.fts_server_error");
+ break;
+ case 503:
+ message = MessageManager.getString("exception.service_not_available");
+ break;
+ default:
+ break;
+ }
+ return message;
+ }
+
+ protected String getResourceFile(String fileName)
+ {
+ String result = "";
+ try
+ {
+ result = getClass().getResource(fileName).getFile();
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return result;
+
+ }
+
+ @Override
+ public int getDefaultResponsePageSize()
+ {
+ if (dataColumns == null || dataColumns.isEmpty())
+ {
+ parseDataColumnsConfigFile();
+ }
+ return defaultResponsePageSize;
+ }
+
+}
/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
-package jalview.ws.uimodel;
+package jalview.fts.core;
import jalview.bin.Cache;
import jalview.datamodel.SequenceI;
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
+import jalview.fts.api.FTSDataColumnI;
import java.util.Collection;
/**
- * Represents the PDB request to be consumed by the PDBRestClient
+ * Represents the FTS request to be consumed by the FTSRestClient
*
* @author tcnofoegbu
*
*/
-public class PDBRestRequest
+public class FTSRestRequest
{
private String fieldToSearchBy;
private boolean allowUnpublishedEntries = Cache.getDefault(
"ALLOW_UNPUBLISHED_PDB_QUERYING", false);
+ private boolean facet;
+
+ private String facetPivot;
+
+ private int facetPivotMinCount;
+
private int responseSize;
+ private int offSet;
+
private boolean isSortAscending;
- private Collection<PDBDocField> wantedFields;
+ private Collection<FTSDataColumnI> wantedFields;
public String getFieldToSearchBy()
{
this.responseSize = responseSize;
}
- public Collection<PDBDocField> getWantedFields()
+ public Collection<FTSDataColumnI> getWantedFields()
{
return wantedFields;
}
- public void setWantedFields(Collection<PDBDocField> wantedFields)
+ public void setWantedFields(
+ Collection<FTSDataColumnI> wantedFields)
{
this.wantedFields = wantedFields;
}
this.associatedSequence = associatedSequence;
}
- public String getQuery()
+ public boolean isAllowUnpublishedEntries()
{
- return fieldToSearchBy + searchTerm
- + (isAllowEmptySeq() ? "" : " AND molecule_sequence:['' TO *]")
- + (isAllowUnpublishedEntries() ? "" : " AND status:REL");
+ return allowUnpublishedEntries;
}
- public String toString()
+ public void setAllowUnpublishedEntries(boolean allowUnpublishedEntries)
{
- return "Query : " + getQuery() + " sort field: " + fieldToSortBy
- + " isAsc: " + isAscending() + " Associated Seq : "
- + associatedSequence;
+ this.allowUnpublishedEntries = allowUnpublishedEntries;
}
- public boolean isAllowUnpublishedEntries()
+ public boolean isFacet()
{
- return allowUnpublishedEntries;
+ return facet;
}
- public void setAllowUnpublishedEntries(boolean allowUnpublishedEntries)
+ public void setFacet(boolean facet)
{
- this.allowUnpublishedEntries = allowUnpublishedEntries;
+ this.facet = facet;
+ }
+
+ public String getFacetPivot()
+ {
+ return facetPivot;
+ }
+
+ public void setFacetPivot(String facetPivot)
+ {
+ this.facetPivot = facetPivot;
+ }
+
+ public int getFacetPivotMinCount()
+ {
+ return facetPivotMinCount;
+ }
+
+ public void setFacetPivotMinCount(int facetPivotMinCount)
+ {
+ this.facetPivotMinCount = facetPivotMinCount;
+ }
+
+ public int getOffSet()
+ {
+ return offSet;
+ }
+
+ public void setOffSet(int offSet)
+ {
+ this.offSet = offSet;
}
}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.core;
+
+import jalview.fts.api.FTSData;
+import jalview.fts.api.FTSDataColumnI;
+
+import java.util.Collection;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * Represents the response model generated by the FTSRestClient upon successful
+ * execution of a given FTS request
+ *
+ * @author tcnofoegbu
+ *
+ */
+public class FTSRestResponse
+{
+ private int numberOfItemsFound;
+
+ private String responseTime;
+
+ private Collection<FTSData> searchSummary;
+
+ public int getNumberOfItemsFound()
+ {
+ return numberOfItemsFound;
+ }
+
+ public void setNumberOfItemsFound(int itemFound)
+ {
+ this.numberOfItemsFound = itemFound;
+ }
+
+ public String getResponseTime()
+ {
+ return responseTime;
+ }
+
+ public void setResponseTime(String responseTime)
+ {
+ this.responseTime = responseTime;
+ }
+
+ public Collection<FTSData> getSearchSummary()
+ {
+ return searchSummary;
+ }
+
+ public void setSearchSummary(Collection<FTSData> searchSummary)
+ {
+ this.searchSummary = searchSummary;
+ }
+
+ /**
+ * Convenience method to obtain a Table model for a given summary List based
+ * on the request parameters
+ *
+ * @param request
+ * the FTSRestRequest object which holds useful information for
+ * creating a table model
+ * @param summariesList
+ * the summary list which contains the data for populating the
+ * table's rows
+ * @return the table model which was dynamically generated
+ */
+ public static DefaultTableModel getTableModel(FTSRestRequest request,
+ Collection<FTSData> summariesList)
+ {
+ final FTSDataColumnI[] cols = request.getWantedFields()
+ .toArray(new FTSDataColumnI[0]);
+ final int colOffset = request.getAssociatedSequence() == null ? 0 : 1;
+ DefaultTableModel tableModel = new DefaultTableModel()
+ {
+ @Override
+ public boolean isCellEditable(int row, int column)
+ {
+ return false;
+ }
+
+ @Override
+ public Class<?> getColumnClass(int columnIndex)
+ {
+ if (colOffset == 1 && columnIndex == 0)
+ {
+ return String.class;
+ }
+ return cols[columnIndex - colOffset].getDataColumnClass();
+ }
+
+ };
+ if (request.getAssociatedSequence() != null)
+ {
+ tableModel.addColumn("Ref Sequence"); // Create sequence column header if
+ // exists in the request
+ }
+ for (FTSDataColumnI field : request
+ .getWantedFields())
+ {
+ tableModel.addColumn(field.getName()); // Create sequence column header if
+ // exists in the request
+ }
+
+ for (FTSData res : summariesList)
+ {
+ tableModel.addRow(res.getSummaryData()); // Populate table rows with
+ // summary list
+ }
+
+ return tableModel;
+ }
+
+ public static void configureTableColumn(JTable tbl_summary,
+ Collection<FTSDataColumnI> wantedFields)
+ {
+ for (FTSDataColumnI wantedField : wantedFields)
+ {
+ try
+ {
+ tbl_summary.getColumn(wantedField.getName()).setMinWidth(
+ wantedField.getMinWidth());
+ tbl_summary.getColumn(wantedField.getName()).setMaxWidth(
+ wantedField.getMaxWidth());
+ tbl_summary.getColumn(wantedField.getName()).setPreferredWidth(
+ wantedField.getPreferredWidth());
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.core;
+
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.GFTSPanelI;
+import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
+import jalview.gui.Desktop;
+import jalview.gui.IProgressIndicator;
+import jalview.gui.JvSwingUtils;
+import jalview.gui.SequenceFetcher;
+import jalview.util.MessageManager;
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.Timer;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+
+/**
+ * This class provides the swing GUI layout for FTS Panel and implements most of
+ * the contracts defined in GFSPanelI
+ *
+ * @author tcnofoegbu
+ *
+ */
+
+@SuppressWarnings("serial")
+public abstract class GFTSPanel extends JPanel implements GFTSPanelI
+{
+ protected JInternalFrame mainFrame = new JInternalFrame(
+ getFTSFrameTitle());
+
+ protected IProgressIndicator progressIdicator;
+
+ protected JComboBox<FTSDataColumnI> cmb_searchTarget = new JComboBox<FTSDataColumnI>();
+
+ protected JButton btn_ok = new JButton();
+
+ protected JButton btn_back = new JButton();
+
+ protected JButton btn_cancel = new JButton();
+
+ protected JTextField txt_search = new JTextField(30);
+
+ protected SequenceFetcher seqFetcher;
+
+ protected Collection<FTSDataColumnI> wantedFields;
+
+ private String lastSearchTerm = "";
+
+ protected JButton btn_next_page = new JButton();
+
+ protected JButton btn_prev_page = new JButton();
+
+ protected StringBuilder errorWarning = new StringBuilder();
+
+ protected ImageIcon warningImage = new ImageIcon(getClass().getResource(
+ "/images/warning.gif"));
+
+ protected ImageIcon loadingImage = new ImageIcon(getClass().getResource(
+ "/images/loading.gif"));
+
+ protected ImageIcon balnkPlaceholderImage = new ImageIcon(getClass()
+ .getResource("/images/blank_16x16_placeholder.png"));
+
+ protected JLabel lbl_warning = new JLabel(warningImage);
+
+ protected JLabel lbl_loading = new JLabel(loadingImage);
+
+ protected JLabel lbl_blank = new JLabel(balnkPlaceholderImage);
+
+ private JTabbedPane tabbedPane = new JTabbedPane();
+
+ private JPanel pnl_actions = new JPanel();
+
+ private JPanel pnl_results = new JPanel(new CardLayout());
+
+ private JPanel pnl_inputs = new JPanel();
+
+ private BorderLayout mainLayout = new BorderLayout();
+
+ protected Object[] previousWantedFields;
+
+ protected int resultSetCount;
+
+ protected int totalResultSetCount;
+
+ protected int offSet;
+
+ protected int pageLimit;
+
+ protected HashSet<String> paginatorCart = new HashSet<String>();
+
+ private JTable tbl_summary = new JTable()
+ {
+ private boolean inLayout;
+
+ @Override
+ public boolean getScrollableTracksViewportWidth()
+ {
+ return hasExcessWidth();
+
+ }
+
+ @Override
+ public void doLayout()
+ {
+ if (hasExcessWidth())
+ {
+ autoResizeMode = AUTO_RESIZE_SUBSEQUENT_COLUMNS;
+ }
+ inLayout = true;
+ super.doLayout();
+ inLayout = false;
+ autoResizeMode = AUTO_RESIZE_OFF;
+ }
+
+ protected boolean hasExcessWidth()
+ {
+ return getPreferredSize().width < getParent().getWidth();
+ }
+
+ @Override
+ public void columnMarginChanged(ChangeEvent e)
+ {
+ if (isEditing())
+ {
+ removeEditor();
+ }
+ TableColumn resizingColumn = getTableHeader().getResizingColumn();
+ // Need to do this here, before the parent's
+ // layout manager calls getPreferredSize().
+ if (resizingColumn != null && autoResizeMode == AUTO_RESIZE_OFF
+ && !inLayout)
+ {
+ resizingColumn.setPreferredWidth(resizingColumn.getWidth());
+ }
+ resizeAndRepaint();
+ }
+
+ @Override
+ public String getToolTipText(MouseEvent evt)
+ {
+ String toolTipText = null;
+ java.awt.Point pnt = evt.getPoint();
+ int rowIndex = rowAtPoint(pnt);
+ int colIndex = columnAtPoint(pnt);
+
+ try
+ {
+ if (getValueAt(rowIndex, colIndex) == null)
+ {
+ return null;
+ }
+ toolTipText = getValueAt(rowIndex, colIndex).toString();
+
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ toolTipText = (toolTipText == null ? null
+ : (toolTipText.length() > 500 ? JvSwingUtils.wrapTooltip(
+ true, toolTipText.subSequence(0, 500) + "...")
+ : JvSwingUtils.wrapTooltip(true, toolTipText)));
+
+ return toolTipText;
+ }
+ };
+ protected JScrollPane scrl_searchResult = new JScrollPane(tbl_summary);
+
+ public GFTSPanel()
+ {
+ try
+ {
+ jbInit();
+ mainFrame.invalidate();
+ mainFrame.pack();
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Initializes the GUI default properties
+ *
+ * @throws Exception
+ */
+ private void jbInit() throws Exception
+ {
+ lbl_warning.setVisible(false);
+ lbl_warning.setFont(new java.awt.Font("Verdana", 0, 12));
+ lbl_loading.setVisible(false);
+ lbl_loading.setFont(new java.awt.Font("Verdana", 0, 12));
+ lbl_blank.setVisible(true);
+ lbl_blank.setFont(new java.awt.Font("Verdana", 0, 12));
+
+ tbl_summary.setAutoCreateRowSorter(true);
+ tbl_summary.getTableHeader().setReorderingAllowed(false);
+ tbl_summary.addMouseListener(new MouseAdapter()
+ {
+ @Override
+ public void mouseClicked(MouseEvent e)
+ {
+ validateSelection();
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e)
+ {
+ validateSelection();
+ }
+ });
+ tbl_summary.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent evt)
+ {
+ validateSelection();
+ switch (evt.getKeyCode())
+ {
+ case KeyEvent.VK_ESCAPE: // escape key
+ btn_back_ActionPerformed();
+ break;
+ case KeyEvent.VK_ENTER: // enter key
+ if (btn_ok.isEnabled())
+ {
+ okAction();
+ }
+ evt.consume();
+ break;
+ case KeyEvent.VK_TAB: // tab key
+ if (evt.isShiftDown())
+ {
+ tabbedPane.requestFocus();
+ }
+ else
+ {
+ btn_back.requestFocus();
+ }
+ evt.consume();
+ break;
+ default:
+ return;
+ }
+ }
+ });
+
+ btn_back.setFont(new java.awt.Font("Verdana", 0, 12));
+ btn_back.setText(MessageManager.getString("action.back"));
+ btn_back.addActionListener(new java.awt.event.ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ btn_back_ActionPerformed();
+ }
+ });
+ btn_back.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent evt)
+ {
+ if (evt.getKeyCode() == KeyEvent.VK_ENTER)
+ {
+ btn_back_ActionPerformed();
+ }
+ }
+ });
+
+ btn_ok.setEnabled(false);
+ btn_ok.setFont(new java.awt.Font("Verdana", 0, 12));
+ btn_ok.setText(MessageManager.getString("action.ok"));
+ btn_ok.addActionListener(new java.awt.event.ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ okAction();
+ }
+ });
+ btn_ok.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent evt)
+ {
+ if (evt.getKeyCode() == KeyEvent.VK_ENTER)
+ {
+ okAction();
+ }
+ }
+ });
+ btn_next_page.setEnabled(false);
+ btn_next_page.setToolTipText(MessageManager
+ .getString("label.next_page_tooltop"));
+ btn_next_page.setFont(new java.awt.Font("Verdana", 0, 12));
+ btn_next_page.setText(MessageManager.getString("action.next_page"));
+ btn_next_page.addActionListener(new java.awt.event.ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ nextPageAction();
+ }
+ });
+ btn_next_page.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent evt)
+ {
+ if (evt.getKeyCode() == KeyEvent.VK_ENTER)
+ {
+ nextPageAction();
+ }
+ }
+ });
+
+ btn_prev_page.setEnabled(false);
+ btn_prev_page.setToolTipText(MessageManager
+ .getString("label.prev_page_tooltop"));
+ btn_prev_page.setFont(new java.awt.Font("Verdana", 0, 12));
+ btn_prev_page.setText(MessageManager.getString("action.prev_page"));
+ btn_prev_page.addActionListener(new java.awt.event.ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ prevPageAction();
+ }
+ });
+ btn_prev_page.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent evt)
+ {
+ if (evt.getKeyCode() == KeyEvent.VK_ENTER)
+ {
+ prevPageAction();
+ }
+ }
+ });
+
+ if (isPaginationEnabled())
+ {
+ btn_prev_page.setVisible(true);
+ btn_next_page.setVisible(true);
+ }
+ else
+ {
+ btn_prev_page.setVisible(false);
+ btn_next_page.setVisible(false);
+ }
+
+ btn_cancel.setFont(new java.awt.Font("Verdana", 0, 12));
+ btn_cancel.setText(MessageManager.getString("action.cancel"));
+ btn_cancel.addActionListener(new java.awt.event.ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ btn_cancel_ActionPerformed();
+ }
+ });
+ btn_cancel.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent evt)
+ {
+ if (evt.getKeyCode() == KeyEvent.VK_ENTER)
+ {
+ btn_cancel_ActionPerformed();
+ }
+ }
+ });
+ scrl_searchResult.setPreferredSize(new Dimension(800, 400));
+
+ cmb_searchTarget.setFont(new java.awt.Font("Verdana", 0, 12));
+ cmb_searchTarget.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ String tooltipText;
+ if ("all".equalsIgnoreCase(getCmbSearchTarget().getSelectedItem()
+ .toString()))
+ {
+ tooltipText = MessageManager.getString("label.search_all");
+ }
+ else if ("pdb id".equalsIgnoreCase(getCmbSearchTarget()
+ .getSelectedItem().toString()))
+ {
+ tooltipText = MessageManager
+ .getString("label.separate_multiple_accession_ids");
+ }
+ else
+ {
+ tooltipText = MessageManager.formatMessage(
+ "label.separate_multiple_query_values",
+ new Object[] { getCmbSearchTarget().getSelectedItem()
+ .toString() });
+ }
+ txt_search.setToolTipText(JvSwingUtils.wrapTooltip(true,
+ tooltipText));
+ searchAction(true);
+ }
+ });
+
+ populateCmbSearchTargetOptions();
+
+ txt_search.setFont(new java.awt.Font("Verdana", 0, 12));
+
+ txt_search.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent e)
+ {
+ if (e.getKeyCode() == KeyEvent.VK_ENTER)
+ {
+ if (txt_search.getText() == null
+ || txt_search.getText().isEmpty())
+ {
+ return;
+ }
+ String primaryKeyName = getFTSRestClient().getPrimaryKeyColumn()
+ .getName();
+ if (primaryKeyName.equalsIgnoreCase(getCmbSearchTarget()
+ .getSelectedItem().toString()))
+ {
+ transferToSequenceFetcher(txt_search.getText());
+ }
+ }
+ }
+ });
+
+ final DeferredTextInputListener listener = new DeferredTextInputListener(
+ 1500,
+ new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ if (!getTypedText().equalsIgnoreCase(lastSearchTerm))
+ {
+ searchAction(true);
+ paginatorCart.clear();
+ lastSearchTerm = getTypedText();
+ }
+ }
+ }, false);
+ txt_search.getDocument().addDocumentListener(listener);
+ txt_search.addFocusListener(new FocusListener()
+ {
+ @Override
+ public void focusGained(FocusEvent e)
+ {
+ listener.start();
+ }
+
+ @Override
+ public void focusLost(FocusEvent e)
+ {
+// listener.stop();
+ }
+ });
+
+ final String searchTabTitle = MessageManager
+ .getString("label.search_result");
+ final String configureCols = MessageManager
+ .getString("label.configure_displayed_columns");
+ ChangeListener changeListener = new ChangeListener()
+ {
+ @Override
+ public void stateChanged(ChangeEvent changeEvent)
+ {
+ JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent
+ .getSource();
+ int index = sourceTabbedPane.getSelectedIndex();
+
+ btn_back.setVisible(true);
+ btn_cancel.setVisible(true);
+ btn_ok.setVisible(true);
+ if (sourceTabbedPane.getTitleAt(index).equals(configureCols))
+ {
+ btn_back.setVisible(false);
+ btn_cancel.setVisible(false);
+ btn_ok.setVisible(false);
+ btn_back.setEnabled(false);
+ btn_cancel.setEnabled(false);
+ btn_ok.setEnabled(false);
+ btn_next_page.setEnabled(false);
+ btn_prev_page.setEnabled(false);
+ txt_search.setEnabled(false);
+ cmb_searchTarget.setEnabled(false);
+ previousWantedFields = getFTSRestClient()
+ .getAllDefaulDisplayedDataColumns()
+ .toArray(new Object[0]);
+ }
+ if (sourceTabbedPane.getTitleAt(index).equals(searchTabTitle))
+ {
+ btn_back.setEnabled(true);
+ btn_cancel.setEnabled(true);
+ refreshPaginatorState();
+ txt_search.setEnabled(true);
+ cmb_searchTarget.setEnabled(true);
+ if (wantedFieldsUpdated())
+ {
+ searchAction(true);
+ paginatorCart.clear();
+ }
+ else
+ {
+ validateSelection();
+ }
+ }
+ }
+ };
+ tabbedPane.addChangeListener(changeListener);
+ tabbedPane.setPreferredSize(new Dimension(800, 400));
+ tabbedPane.add(searchTabTitle, scrl_searchResult);
+ tabbedPane.add(configureCols, new FTSDataColumnPreferences(
+ PreferenceSource.SEARCH_SUMMARY, getFTSRestClient()));
+
+ pnl_actions.add(btn_back);
+ pnl_actions.add(btn_ok);
+ pnl_actions.add(btn_cancel);
+
+ pnl_results.add(tabbedPane);
+ pnl_inputs.add(cmb_searchTarget);
+ pnl_inputs.add(txt_search);
+ pnl_inputs.add(lbl_loading);
+ pnl_inputs.add(lbl_warning);
+ pnl_inputs.add(lbl_blank);
+ pnl_inputs.add(btn_prev_page);
+ pnl_inputs.add(btn_next_page);
+
+ this.setLayout(mainLayout);
+ this.add(pnl_inputs, java.awt.BorderLayout.NORTH);
+ this.add(pnl_results, java.awt.BorderLayout.CENTER);
+ this.add(pnl_actions, java.awt.BorderLayout.SOUTH);
+ mainFrame.setVisible(true);
+ mainFrame.setContentPane(this);
+ mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ Desktop.addInternalFrame(mainFrame, getFTSFrameTitle(), 900, 500);
+ }
+
+ public class DeferredTextInputListener implements DocumentListener
+ {
+ private final Timer swingTimer;
+
+ public DeferredTextInputListener(int timeOut, ActionListener listener,
+ boolean repeats)
+ {
+ swingTimer = new Timer(timeOut, listener);
+ swingTimer.setRepeats(repeats);
+ }
+
+ public void start()
+ {
+ swingTimer.start();
+ }
+
+ public void stop()
+ {
+ swingTimer.stop();
+ }
+
+ @Override
+ public void insertUpdate(DocumentEvent e)
+ {
+ swingTimer.restart();
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e)
+ {
+ swingTimer.restart();
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent e)
+ {
+ swingTimer.restart();
+ }
+
+ }
+
+ public boolean wantedFieldsUpdated()
+ {
+ if (previousWantedFields == null)
+ {
+ return true;
+ }
+
+ return Arrays.equals(getFTSRestClient()
+ .getAllDefaulDisplayedDataColumns()
+ .toArray(new Object[0]), previousWantedFields) ? false
+ : true;
+
+ }
+
+ public void validateSelection()
+ {
+ if (tbl_summary.getSelectedRows().length > 0
+ || !paginatorCart.isEmpty())
+ {
+ btn_ok.setEnabled(true);
+ }
+ else
+ {
+ btn_ok.setEnabled(false);
+ }
+ }
+
+ public JComboBox<FTSDataColumnI> getCmbSearchTarget()
+ {
+ return cmb_searchTarget;
+ }
+
+ public JTextField getTxtSearch()
+ {
+ return txt_search;
+ }
+
+ public JInternalFrame getMainFrame()
+ {
+ return mainFrame;
+ }
+
+ protected void delayAndEnableActionButtons()
+ {
+ new Thread()
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ Thread.sleep(1500);
+ } catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ btn_ok.setEnabled(true);
+ btn_back.setEnabled(true);
+ btn_cancel.setEnabled(true);
+ }
+ }.start();
+ }
+
+ protected void checkForErrors()
+ {
+ lbl_warning.setVisible(false);
+ lbl_blank.setVisible(true);
+ if (errorWarning.length() > 0)
+ {
+ lbl_loading.setVisible(false);
+ lbl_blank.setVisible(false);
+ lbl_warning.setToolTipText(JvSwingUtils.wrapTooltip(true,
+ errorWarning.toString()));
+ lbl_warning.setVisible(true);
+ }
+ }
+
+ protected void btn_back_ActionPerformed()
+ {
+ mainFrame.dispose();
+ new SequenceFetcher(progressIdicator);
+ }
+
+ protected void disableActionButtons()
+ {
+ btn_ok.setEnabled(false);
+ btn_back.setEnabled(false);
+ btn_cancel.setEnabled(false);
+ }
+
+ protected void btn_cancel_ActionPerformed()
+ {
+ mainFrame.dispose();
+ }
+
+ /**
+ * Populates search target combo-box options
+ */
+ public void populateCmbSearchTargetOptions()
+ {
+ List<FTSDataColumnI> searchableTargets = new ArrayList<FTSDataColumnI>();
+ try
+ {
+ Collection<FTSDataColumnI> foundFTSTargets = getFTSRestClient()
+ .getSearchableDataColumns();
+ searchableTargets.addAll(foundFTSTargets);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ Collections.sort(searchableTargets, new Comparator<FTSDataColumnI>()
+ {
+ @Override
+ public int compare(FTSDataColumnI o1, FTSDataColumnI o2)
+ {
+ return o1.getName().compareTo(o2.getName());
+ }
+ });
+
+ for (FTSDataColumnI searchTarget : searchableTargets)
+ {
+ cmb_searchTarget.addItem(searchTarget);
+ }
+ }
+
+
+ public void transferToSequenceFetcher(String ids)
+ {
+ // mainFrame.dispose();
+ seqFetcher.getTextArea().setText(ids);
+ Thread worker = new Thread(seqFetcher);
+ worker.start();
+ }
+
+ @Override
+ public String getTypedText()
+ {
+ return txt_search.getText().trim();
+ }
+
+ @Override
+ public JTable getResultTable()
+ {
+ return tbl_summary;
+ }
+
+ public void reset()
+ {
+ lbl_loading.setVisible(false);
+ errorWarning.setLength(0);
+ lbl_warning.setVisible(false);
+ lbl_blank.setVisible(true);
+ btn_ok.setEnabled(false);
+ mainFrame.setTitle(getFTSFrameTitle());
+ referesh();
+ tbl_summary.setModel(new DefaultTableModel());
+ tbl_summary.setVisible(false);
+ }
+
+ @Override
+ public void setPrevPageButtonEnabled(boolean isEnabled)
+ {
+ btn_prev_page.setEnabled(isEnabled);
+ }
+
+ @Override
+ public void setNextPageButtonEnabled(boolean isEnabled)
+ {
+ btn_next_page.setEnabled(isEnabled);
+ }
+
+ @Override
+ public void setErrorMessage(String message)
+ {
+ errorWarning.append(message);
+ }
+
+ @Override
+ public void updateSearchFrameTitle(String title)
+ {
+ mainFrame.setTitle(title);
+ }
+
+ @Override
+ public void setSearchInProgress(Boolean isSearchInProgress)
+ {
+ lbl_blank.setVisible(!isSearchInProgress);
+ lbl_loading.setVisible(isSearchInProgress);
+ }
+
+ @Override
+ public void prevPageAction()
+ {
+ updatePaginatorCart();
+ if (offSet >= pageLimit)
+ {
+ offSet = offSet - pageLimit;
+ searchAction(false);
+ }
+ else
+ {
+ refreshPaginatorState();
+ }
+ }
+
+ @Override
+ public void nextPageAction()
+ {
+ updatePaginatorCart();
+ offSet = offSet + pageLimit;
+ searchAction(false);
+ }
+
+ public void updatePaginatorCart()
+ {
+ int primaryKeyColIndex = 0;
+ JTable resultTable = getResultTable();
+ int totalRows = resultTable.getRowCount();
+ try
+ {
+ primaryKeyColIndex = getFTSRestClient().getPrimaryKeyColumIndex(
+ wantedFields, false);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ for (int row = 0; row < totalRows; row++)
+ {
+ String id = (String) resultTable.getValueAt(row, primaryKeyColIndex);
+ if (paginatorCart.contains(id))
+ {
+ paginatorCart.remove(id);
+ }
+ }
+ int[] selectedRows = resultTable.getSelectedRows();
+ for (int summaryRow : selectedRows)
+ {
+ String idStr = resultTable.getValueAt(summaryRow,
+ primaryKeyColIndex).toString();
+ paginatorCart.add(idStr);
+ }
+ // System.out.println("Paginator shopping cart size : "
+ // + paginatorCart.size());
+ }
+
+ public void updateSummaryTableSelections()
+ {
+ JTable resultTable = getResultTable();
+ if (paginatorCart.isEmpty())
+ {
+ return;
+ }
+ int primaryKeyColIndex = 0;
+ try
+ {
+ primaryKeyColIndex = getFTSRestClient().getPrimaryKeyColumIndex(
+ wantedFields, false);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ // System.out.println(">>>>>> got here : 1");
+ int totalRows = resultTable.getRowCount();
+ // resultTable.clearSelection();
+ for (int row = 0; row < totalRows; row++)
+ {
+ String id = (String) resultTable.getValueAt(row, primaryKeyColIndex);
+ if (paginatorCart.contains(id))
+ {
+ resultTable.addRowSelectionInterval(row, row);
+ }
+ }
+ validateSelection();
+ }
+ public void refreshPaginatorState()
+ {
+ // System.out.println("resultSet count : " + resultSetCount);
+ // System.out.println("offSet : " + offSet);
+ // System.out.println("page limit : " + pageLimit);
+ setPrevPageButtonEnabled(false);
+ setNextPageButtonEnabled(false);
+ if (resultSetCount == 0 && pageLimit == 0)
+ {
+ return;
+ }
+ if (resultSetCount >= pageLimit)
+ {
+ setNextPageButtonEnabled(true);
+ }
+ if (offSet >= pageLimit)
+ {
+ setPrevPageButtonEnabled(true);
+ }
+ }
+ public void referesh()
+ {
+ mainFrame.setTitle(getFTSFrameTitle());
+ }
+
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.service.pdb;
+
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.fts.core.GFTSPanel;
+import jalview.gui.SequenceFetcher;
+import jalview.util.MessageManager;
+
+import java.util.HashSet;
+
+@SuppressWarnings("serial")
+public class PDBFTSPanel extends GFTSPanel
+{
+ private static String defaultFTSFrameTitle = MessageManager
+ .getString("label.pdb_sequence_fetcher");
+
+ private String ftsFrameTitle = defaultFTSFrameTitle;
+
+ public PDBFTSPanel(SequenceFetcher seqFetcher)
+ {
+ pageLimit = PDBFTSRestClient.getInstance().getDefaultResponsePageSize();
+ this.seqFetcher = seqFetcher;
+ this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
+ .getProgressIndicator();
+ }
+
+
+ @Override
+ public void searchAction(boolean isFreshSearch)
+ {
+ if (isFreshSearch)
+ {
+ offSet = 0;
+ }
+ new Thread()
+ {
+ @Override
+ public void run()
+ {
+ ftsFrameTitle = defaultFTSFrameTitle;
+ reset();
+ boolean allowEmptySequence = false;
+ if (getTypedText().length() > 0)
+ {
+ setSearchInProgress(true);
+ long startTime = System.currentTimeMillis();
+
+ String searchTarget = ((FTSDataColumnI) cmb_searchTarget
+ .getSelectedItem()).getCode();
+ wantedFields = PDBFTSRestClient.getInstance()
+ .getAllDefaulDisplayedDataColumns();
+ String searchTerm = decodeSearchTerm(txt_search.getText(),
+ searchTarget);
+
+ FTSRestRequest request = new FTSRestRequest();
+ request.setAllowEmptySeq(allowEmptySequence);
+ request.setResponseSize(100);
+ request.setFieldToSearchBy("(" + searchTarget + ":");
+ request.setSearchTerm(searchTerm + ")");
+ request.setOffSet(offSet);
+ request.setWantedFields(wantedFields);
+ FTSRestClientI pdbRestCleint = PDBFTSRestClient.getInstance();
+ FTSRestResponse resultList;
+ try
+ {
+ resultList = pdbRestCleint.executeRequest(request);
+ } catch (Exception e)
+ {
+ setErrorMessage(e.getMessage());
+ checkForErrors();
+ return;
+ }
+
+ if (resultList.getSearchSummary() != null
+ && resultList.getSearchSummary().size() > 0)
+ {
+ getResultTable().setModel(
+ FTSRestResponse.getTableModel(request,
+ resultList.getSearchSummary()));
+ FTSRestResponse.configureTableColumn(getResultTable(),
+ wantedFields);
+ getResultTable().setVisible(true);
+ }
+
+ long endTime = System.currentTimeMillis();
+ totalResultSetCount = resultList.getNumberOfItemsFound();
+ resultSetCount = resultList.getSearchSummary() == null ? 0
+ : resultList.getSearchSummary().size();
+ String result = (resultSetCount > 0) ? MessageManager
+ .getString("label.results") : MessageManager
+ .getString("label.result");
+
+ if (isPaginationEnabled() && resultSetCount > 0)
+ {
+ updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
+ + " " + (offSet + 1) + " to "
+ + (offSet + resultSetCount) + " of "
+ + totalResultSetCount
+ + " " + " (" + (endTime - startTime) + " milli secs)");
+ }
+ else
+ {
+ updateSearchFrameTitle(defaultFTSFrameTitle + " - "
+ + resultSetCount + " " + result + " ("
+ + (endTime - startTime) + " milli secs)");
+ }
+
+ setSearchInProgress(false);
+ refreshPaginatorState();
+ updateSummaryTableSelections();
+ }
+ }
+ }.start();
+ }
+
+ public static String decodeSearchTerm(String enteredText,
+ String targetField)
+ {
+ String foundSearchTerms = enteredText;
+ StringBuilder foundSearchTermsBuilder = new StringBuilder();
+ if (enteredText.contains(";"))
+ {
+ String[] searchTerms = enteredText.split(";");
+ for (String searchTerm : searchTerms)
+ {
+ if (searchTerm.contains(":"))
+ {
+ foundSearchTermsBuilder.append(targetField).append(":")
+ .append(searchTerm.split(":")[0]).append(" OR ");
+ }
+ else
+ {
+ foundSearchTermsBuilder.append(targetField).append(":")
+ .append(searchTerm).append(" OR ");
+ }
+ }
+ int endIndex = foundSearchTermsBuilder.lastIndexOf(" OR ");
+ foundSearchTerms = foundSearchTermsBuilder.toString();
+ if (foundSearchTerms.contains(" OR "))
+ {
+ foundSearchTerms = foundSearchTerms.substring(
+ targetField.length() + 1, endIndex);
+ }
+ }
+ else if (enteredText.contains(":"))
+ {
+ foundSearchTerms = foundSearchTerms.split(":")[0];
+ }
+ return foundSearchTerms;
+ }
+
+ @Override
+ public void okAction()
+ {
+ // mainFrame.dispose();
+ disableActionButtons();
+ StringBuilder selectedIds = new StringBuilder();
+ HashSet<String> selectedIdsSet = new HashSet<String>();
+ int primaryKeyColIndex = 0;
+ try
+ {
+ primaryKeyColIndex = getFTSRestClient().getPrimaryKeyColumIndex(
+ wantedFields,
+ false);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ int[] selectedRows = getResultTable().getSelectedRows();
+ String searchTerm = txt_search.getText();
+ for (int summaryRow : selectedRows)
+ {
+ String idStr = getResultTable().getValueAt(summaryRow,
+ primaryKeyColIndex)
+ .toString();
+ selectedIdsSet.add(getPDBIdwithSpecifiedChain(idStr, searchTerm));
+ }
+
+ for (String idStr : paginatorCart)
+ {
+ selectedIdsSet.add(getPDBIdwithSpecifiedChain(idStr, searchTerm));
+ }
+
+ for (String selectedId : selectedIdsSet)
+ {
+ selectedIds.append(selectedId).append(";");
+ }
+
+ String ids = selectedIds.toString();
+ // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
+ seqFetcher.getTextArea().setText(ids);
+ Thread worker = new Thread(seqFetcher);
+ worker.start();
+ delayAndEnableActionButtons();
+ }
+
+
+ public static String getPDBIdwithSpecifiedChain(String pdbId,
+ String searchTerm)
+ {
+ String pdbIdWithChainCode = "";
+ if (searchTerm.contains(";"))
+ {
+ String[] foundTerms = searchTerm.split(";");
+ for (String foundTerm : foundTerms)
+ {
+ if (foundTerm.contains(pdbId))
+ {
+ pdbIdWithChainCode = foundTerm;
+ }
+ }
+ }
+ else if (searchTerm.contains(pdbId))
+ {
+ pdbIdWithChainCode = searchTerm;
+ }
+ else
+ {
+ pdbIdWithChainCode = pdbId;
+ }
+ return pdbIdWithChainCode;
+ }
+
+ @Override
+ public FTSRestClientI getFTSRestClient()
+ {
+ return PDBFTSRestClient.getInstance();
+ }
+
+ @Override
+ public String getFTSFrameTitle()
+ {
+ return ftsFrameTitle;
+ }
+
+ @Override
+ public boolean isPaginationEnabled()
+ {
+ return true;
+ }
+
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.fts.service.pdb;
+
+import jalview.datamodel.SequenceI;
+import jalview.fts.api.FTSData;
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestClient;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.util.MessageManager;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+
+import javax.ws.rs.core.MediaType;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+
+/**
+ * A rest client for querying the Search endpoint of the PDB API
+ *
+ * @author tcnofoegbu
+ *
+ */
+public class PDBFTSRestClient extends FTSRestClient
+{
+
+ private static FTSRestClientI instance = null;
+
+ public static final String PDB_SEARCH_ENDPOINT = "http://www.ebi.ac.uk/pdbe/search/pdb/select?";
+
+ protected PDBFTSRestClient()
+ {
+ }
+
+ /**
+ * Takes a PDBRestRequest object and returns a response upon execution
+ *
+ * @param pdbRestRequest
+ * the PDBRestRequest instance to be processed
+ * @return the pdbResponse object for the given request
+ * @throws Exception
+ */
+ @Override
+ public FTSRestResponse executeRequest(FTSRestRequest pdbRestRequest)
+ throws Exception
+ {
+ try
+ {
+ ClientConfig clientConfig = new DefaultClientConfig();
+ Client client = Client.create(clientConfig);
+
+ String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(pdbRestRequest
+ .getWantedFields());
+ int responseSize = (pdbRestRequest.getResponseSize() == 0) ? getDefaultResponsePageSize()
+ : pdbRestRequest.getResponseSize();
+ int offSet = pdbRestRequest.getOffSet();
+ String sortParam = null;
+ if (pdbRestRequest.getFieldToSortBy() == null
+ || pdbRestRequest.getFieldToSortBy().trim().isEmpty())
+ {
+ sortParam = "";
+ }
+ else
+ {
+ if (pdbRestRequest.getFieldToSortBy()
+ .equalsIgnoreCase("Resolution"))
+ {
+ sortParam = pdbRestRequest.getFieldToSortBy()
+ + (pdbRestRequest.isAscending() ? " asc" : " desc");
+ }
+ else
+ {
+ sortParam = pdbRestRequest.getFieldToSortBy()
+ + (pdbRestRequest.isAscending() ? " desc" : " asc");
+ }
+ }
+
+ String facetPivot = (pdbRestRequest.getFacetPivot() == null || pdbRestRequest
+ .getFacetPivot().isEmpty()) ? "" : pdbRestRequest
+ .getFacetPivot();
+ String facetPivotMinCount = String.valueOf(pdbRestRequest
+ .getFacetPivotMinCount());
+
+ String query = pdbRestRequest.getFieldToSearchBy()
+ + pdbRestRequest.getSearchTerm()
+ + (pdbRestRequest.isAllowEmptySeq() ? ""
+ : " AND molecule_sequence:['' TO *]")
+ + (pdbRestRequest.isAllowUnpublishedEntries() ? ""
+ : " AND status:REL");
+
+ // Build request parameters for the REST Request
+ WebResource webResource = null;
+ if (pdbRestRequest.isFacet())
+ {
+ webResource = client.resource(PDB_SEARCH_ENDPOINT)
+ .queryParam("wt", "json").queryParam("fl", wantedFields)
+ .queryParam("rows", String.valueOf(responseSize))
+ .queryParam("q", query)
+ .queryParam("start", String.valueOf(offSet))
+ .queryParam("sort", sortParam).queryParam("facet", "true")
+ .queryParam("facet.pivot", facetPivot)
+ .queryParam("facet.pivot.mincount", facetPivotMinCount);
+ }
+ else
+ {
+ webResource = client.resource(PDB_SEARCH_ENDPOINT)
+ .queryParam("wt", "json").queryParam("fl", wantedFields)
+ .queryParam("rows", String.valueOf(responseSize))
+ .queryParam("start", String.valueOf(offSet))
+ .queryParam("q", query)
+ .queryParam("sort", sortParam);
+ }
+ // Execute the REST request
+ ClientResponse clientResponse = webResource.accept(
+ MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+ // Get the JSON string from the response object
+ String responseString = clientResponse.getEntity(String.class);
+ // System.out.println("query >>>>>>> " + pdbRestRequest.toString());
+
+ // Check the response status and report exception if one occurs
+ if (clientResponse.getStatus() != 200)
+ {
+ String errorMessage = "";
+ if (clientResponse.getStatus() == 400)
+ {
+ errorMessage = parseJsonExceptionString(responseString);
+ throw new Exception(errorMessage);
+ }
+ else
+ {
+ errorMessage = getMessageByHTTPStatusCode(clientResponse
+.getStatus(), "PDB");
+ throw new Exception(errorMessage);
+ }
+ }
+
+ // Make redundant objects eligible for garbage collection to conserve
+ // memory
+ clientResponse = null;
+ client = null;
+
+ // Process the response and return the result to the caller.
+ return parsePDBJsonResponse(responseString, pdbRestRequest);
+ } catch (Exception e)
+ {
+ String exceptionMsg = e.getMessage();
+ if (exceptionMsg.contains("SocketException"))
+ {
+ // No internet connection
+ throw new Exception(
+ MessageManager
+ .getString("exception.unable_to_detect_internet_connection"));
+ }
+ else if (exceptionMsg.contains("UnknownHostException"))
+ {
+ // The server 'www.ebi.ac.uk' is unreachable
+ throw new Exception(MessageManager.formatMessage(
+ "exception.fts_server_unreachable", "PDB Solr"));
+ }
+ else
+ {
+ throw e;
+ }
+ }
+ }
+
+
+ /**
+ * Process error response from PDB server if/when one occurs.
+ *
+ * @param jsonResponse
+ * the JSON string containing error message from the server
+ * @return the processed error message from the JSON string
+ */
+ public static String parseJsonExceptionString(String jsonErrorResponse)
+ {
+ StringBuilder errorMessage = new StringBuilder(
+ "\n============= PDB Rest Client RunTime error =============\n");
+
+ try
+ {
+ JSONParser jsonParser = new JSONParser();
+ JSONObject jsonObj = (JSONObject) jsonParser.parse(jsonErrorResponse);
+ JSONObject errorResponse = (JSONObject) jsonObj.get("error");
+
+ JSONObject responseHeader = (JSONObject) jsonObj
+ .get("responseHeader");
+ JSONObject paramsObj = (JSONObject) responseHeader.get("params");
+ String status = responseHeader.get("status").toString();
+ String message = errorResponse.get("msg").toString();
+ String query = paramsObj.get("q").toString();
+ String fl = paramsObj.get("fl").toString();
+
+ errorMessage.append("Status: ").append(status).append("\n");
+ errorMessage.append("Message: ").append(message).append("\n");
+ errorMessage.append("query: ").append(query).append("\n");
+ errorMessage.append("fl: ").append(fl).append("\n");
+
+ } catch (ParseException e)
+ {
+ e.printStackTrace();
+ }
+ return errorMessage.toString();
+ }
+
+ /**
+ * Parses the JSON response string from PDB REST API. The response is dynamic
+ * hence, only fields specifically requested for in the 'wantedFields'
+ * parameter is fetched/processed
+ *
+ * @param pdbJsonResponseString
+ * the JSON string to be parsed
+ * @param pdbRestRequest
+ * the request object which contains parameters used to process the
+ * JSON string
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ public static FTSRestResponse parsePDBJsonResponse(
+ String pdbJsonResponseString, FTSRestRequest pdbRestRequest)
+ {
+ FTSRestResponse searchResult = new FTSRestResponse();
+ List<FTSData> result = null;
+ try
+ {
+ JSONParser jsonParser = new JSONParser();
+ JSONObject jsonObj = (JSONObject) jsonParser
+ .parse(pdbJsonResponseString);
+
+ JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
+ String queryTime = ((JSONObject) jsonObj.get("responseHeader")).get(
+ "QTime").toString();
+ int numFound = Integer
+ .valueOf(pdbResponse.get("numFound").toString());
+ if (numFound > 0)
+ {
+ result = new ArrayList<FTSData>();
+ JSONArray docs = (JSONArray) pdbResponse.get("docs");
+ for (Iterator<JSONObject> docIter = docs.iterator(); docIter
+ .hasNext();)
+ {
+ JSONObject doc = docIter.next();
+ result.add(getFTSData(doc, pdbRestRequest));
+ }
+ searchResult.setNumberOfItemsFound(numFound);
+ searchResult.setResponseTime(queryTime);
+ searchResult.setSearchSummary(result);
+ }
+ } catch (ParseException e)
+ {
+ e.printStackTrace();
+ }
+ return searchResult;
+ }
+
+ public static FTSData getFTSData(JSONObject pdbJsonDoc,
+ FTSRestRequest request)
+ {
+
+ String primaryKey = null;
+
+ Object[] summaryRowData;
+
+ SequenceI associatedSequence;
+
+ Collection<FTSDataColumnI> diplayFields = request.getWantedFields();
+ SequenceI associatedSeq = request.getAssociatedSequence();
+ int colCounter = 0;
+ summaryRowData = new Object[(associatedSeq != null) ? diplayFields
+ .size() + 1 : diplayFields.size()];
+ if (associatedSeq != null)
+ {
+ associatedSequence = associatedSeq;
+ summaryRowData[0] = associatedSequence;
+ colCounter = 1;
+ }
+
+ for (FTSDataColumnI field : diplayFields)
+ {
+ String fieldData = (pdbJsonDoc.get(field.getCode()) == null) ? ""
+ : pdbJsonDoc.get(field.getCode()).toString();
+ if (field.isPrimaryKeyColumn())
+ {
+ primaryKey = fieldData;
+ summaryRowData[colCounter++] = primaryKey;
+ }
+ else if (fieldData == null || fieldData.isEmpty())
+ {
+ summaryRowData[colCounter++] = null;
+ }
+ else
+ {
+ try
+ {
+ summaryRowData[colCounter++] = (field.getDataColumnClass() == Integer.class) ? Integer
+ .valueOf(fieldData)
+ : (field.getDataColumnClass() == Double.class) ? Double
+ .valueOf(fieldData)
+ : fieldData;
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ System.out.println("offending value:" + fieldData);
+ }
+ }
+ }
+
+ final String primaryKey1 = primaryKey;
+
+ final Object[] summaryRowData1 = summaryRowData;
+ return new FTSData()
+ {
+ @Override
+ public Object[] getSummaryData()
+ {
+ return summaryRowData1;
+ }
+
+ @Override
+ public Object getPrimaryKey()
+ {
+ return primaryKey1;
+ }
+
+ /**
+ * Returns a string representation of this object;
+ */
+ @Override
+ public String toString()
+ {
+ StringBuilder summaryFieldValues = new StringBuilder();
+ for (Object summaryField : summaryRowData1)
+ {
+ summaryFieldValues.append(
+ summaryField == null ? " " : summaryField.toString())
+ .append("\t");
+ }
+ return summaryFieldValues.toString();
+ }
+
+ /**
+ * Returns hash code value for this object
+ */
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(primaryKey1, this.toString());
+ }
+
+ @Override
+ public boolean equals(Object that)
+ {
+ return this.toString().equals(that.toString());
+ }
+ };
+ }
+
+ @Override
+ public String getColumnDataConfigFileName()
+ {
+ return "/fts/pdb_data_columns.txt";
+ }
+
+
+ public static FTSRestClientI getInstance()
+ {
+ if (instance == null)
+ {
+ instance = new PDBFTSRestClient();
+ }
+ return instance;
+ }
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.service.uniprot;
+
+import jalview.fts.api.FTSData;
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestClient;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.util.MessageManager;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+
+import javax.ws.rs.core.MediaType;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+
+public class UniProtFTSRestClient extends FTSRestClient
+{
+ private static FTSRestClientI instance = null;
+
+ public static final String UNIPROT_SEARCH_ENDPOINT = "http://www.uniprot.org/uniprot/?";
+
+ @Override
+ public FTSRestResponse executeRequest(FTSRestRequest uniportRestRequest)
+ throws Exception
+ {
+ try
+ {
+ ClientConfig clientConfig = new DefaultClientConfig();
+ Client client = Client.create(clientConfig);
+
+ String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(uniportRestRequest
+ .getWantedFields());
+ int responseSize = (uniportRestRequest.getResponseSize() == 0) ? getDefaultResponsePageSize()
+ : uniportRestRequest.getResponseSize();
+
+ int offSet = uniportRestRequest.getOffSet();
+
+ String query = uniportRestRequest.getFieldToSearchBy()
+ .equalsIgnoreCase("Search All") ? uniportRestRequest
+ .getSearchTerm() : uniportRestRequest.getFieldToSearchBy()
+ + ":" + uniportRestRequest.getSearchTerm();
+
+ // + (uniportRestRequest.isAllowUnpublishedEntries() ? ""
+ // : " AND status:REL");
+ // System.out.println(">>>>> Query : " + query);
+ // System.out.println(">>>>> Columns : " + wantedFields);
+ // System.out.println(">>>>> Response size: " + responseSize
+ // + " offset : "
+ // + offSet);
+ WebResource webResource = null;
+ webResource = client.resource(UNIPROT_SEARCH_ENDPOINT)
+ .queryParam("format", "tab")
+ .queryParam("columns", wantedFields)
+ .queryParam("limit", String.valueOf(responseSize))
+ .queryParam("offset", String.valueOf(offSet))
+ .queryParam("sort", "score").queryParam("query", query);
+ // Execute the REST request
+ ClientResponse clientResponse = webResource.accept(
+ MediaType.TEXT_PLAIN).get(ClientResponse.class);
+ String uniProtTabDelimittedResponseString = clientResponse
+ .getEntity(String.class);
+ // Make redundant objects eligible for garbage collection to conserve
+ // memory
+ // System.out.println(">>>>> response : "
+ // + uniProtTabDelimittedResponseString);
+ if (clientResponse.getStatus() != 200)
+ {
+ String errorMessage = getMessageByHTTPStatusCode(
+ clientResponse.getStatus(), "Uniprot");
+ throw new Exception(errorMessage);
+
+ }
+ int xTotalResults = Integer.valueOf(clientResponse.getHeaders()
+ .get("X-Total-Results").get(0));
+ clientResponse = null;
+ client = null;
+ return parseUniprotResponse(uniProtTabDelimittedResponseString,
+ uniportRestRequest, xTotalResults);
+ } catch (Exception e)
+ {
+ String exceptionMsg = e.getMessage();
+ if (exceptionMsg.contains("SocketException"))
+ {
+ // No internet connection
+ throw new Exception(
+ MessageManager
+ .getString("exception.unable_to_detect_internet_connection"));
+ }
+ else if (exceptionMsg.contains("UnknownHostException"))
+ {
+ // The server 'http://www.uniprot.org' is unreachable
+ throw new Exception(MessageManager.formatMessage(
+ "exception.fts_server_unreachable", "Uniprot"));
+ }
+ else
+ {
+ throw e;
+ }
+ }
+ }
+
+
+ public FTSRestResponse parseUniprotResponse(
+ String uniProtTabDelimittedResponseString,
+ FTSRestRequest uniprotRestRequest, int xTotalResults)
+ {
+ FTSRestResponse searchResult = new FTSRestResponse();
+ List<FTSData> result = null;
+ if (uniProtTabDelimittedResponseString == null
+ || uniProtTabDelimittedResponseString.trim().isEmpty())
+ {
+ searchResult.setNumberOfItemsFound(0);
+ return searchResult;
+ }
+ String[] foundDataRow = uniProtTabDelimittedResponseString.split("\n");
+ if (foundDataRow != null && foundDataRow.length > 0)
+ {
+ result = new ArrayList<FTSData>();
+ String titleRow = getDataColumnsFieldsAsTabDelimitedString(uniprotRestRequest
+ .getWantedFields());
+ // System.out.println(">>>>Title row : " + titleRow);
+ for (String dataRow : foundDataRow)
+ {
+ if (dataRow.equalsIgnoreCase(titleRow))
+ {
+ // System.out.println(">>>>>>>>>> matched!!!");
+ continue;
+ }
+ // System.out.println(dataRow);
+ result.add(getFTSData(dataRow, uniprotRestRequest));
+ }
+ searchResult.setNumberOfItemsFound(xTotalResults);
+ searchResult.setSearchSummary(result);
+ }
+ return searchResult;
+ }
+
+ /**
+ * Takes a collection of FTSDataColumnI and converts its 'code' values into a
+ * tab delimited string.
+ *
+ * @param dataColumnFields
+ * the collection of FTSDataColumnI to process
+ * @return the generated comma delimited string from the supplied
+ * FTSDataColumnI collection
+ */
+ private String getDataColumnsFieldsAsTabDelimitedString(
+ Collection<FTSDataColumnI> dataColumnFields)
+ {
+ String result = "";
+ if (dataColumnFields != null && !dataColumnFields.isEmpty())
+ {
+ StringBuilder returnedFields = new StringBuilder();
+ for (FTSDataColumnI field : dataColumnFields)
+ {
+ if (field.getName().equalsIgnoreCase("Uniprot Id"))
+ {
+ returnedFields.append("\t").append("Entry");
+ }
+ else
+ {
+ returnedFields.append("\t").append(field.getName());
+ }
+ }
+ returnedFields.deleteCharAt(0);
+ result = returnedFields.toString();
+ }
+ return result;
+ }
+
+ public static FTSData getFTSData(String tabDelimittedDataStr,
+ FTSRestRequest request)
+ {
+ String primaryKey = null;
+
+ Object[] summaryRowData;
+
+ Collection<FTSDataColumnI> diplayFields = request.getWantedFields();
+ int colCounter = 0;
+ summaryRowData = new Object[diplayFields.size()];
+ String[] columns = tabDelimittedDataStr.split("\t");
+ for (FTSDataColumnI field : diplayFields)
+ {
+ try
+ {
+ String fieldData = columns[colCounter];
+ if (field.isPrimaryKeyColumn())
+ {
+ primaryKey = fieldData;
+ summaryRowData[colCounter++] = primaryKey;
+ }
+ else if (fieldData == null || fieldData.isEmpty())
+ {
+ summaryRowData[colCounter++] = null;
+ }
+ else
+ {
+ try
+ {
+ summaryRowData[colCounter++] = (field.getDataColumnClass() == Integer.class) ? Integer
+ .valueOf(fieldData)
+ : (field.getDataColumnClass() == Double.class) ? Double
+ .valueOf(fieldData) : fieldData;
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ System.out.println("offending value:" + fieldData);
+ }
+ }
+ } catch (Exception e)
+ {
+ // e.printStackTrace();
+ }
+ }
+
+ final String primaryKey1 = primaryKey;
+
+ final Object[] summaryRowData1 = summaryRowData;
+ return new FTSData()
+ {
+ @Override
+ public Object[] getSummaryData()
+ {
+ return summaryRowData1;
+ }
+
+ @Override
+ public Object getPrimaryKey()
+ {
+ return primaryKey1;
+ }
+
+ /**
+ * Returns a string representation of this object;
+ */
+ @Override
+ public String toString()
+ {
+ StringBuilder summaryFieldValues = new StringBuilder();
+ for (Object summaryField : summaryRowData1)
+ {
+ summaryFieldValues.append(
+ summaryField == null ? " " : summaryField.toString())
+ .append("\t");
+ }
+ return summaryFieldValues.toString();
+ }
+
+ /**
+ * Returns hash code value for this object
+ */
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(primaryKey1, this.toString());
+ }
+
+ @Override
+ public boolean equals(Object that)
+ {
+ return this.toString().equals(that.toString());
+ }
+ };
+ }
+
+
+ public static FTSRestClientI getInstance()
+ {
+ if (instance == null)
+ {
+ instance = new UniProtFTSRestClient();
+ }
+ return instance;
+ }
+
+ @Override
+ public String getColumnDataConfigFileName()
+ {
+ return "/fts/uniprot_data_columns.txt";
+ }
+
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.fts.service.uniprot;
+
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.fts.core.GFTSPanel;
+import jalview.gui.SequenceFetcher;
+import jalview.util.MessageManager;
+
+import java.util.HashSet;
+
+@SuppressWarnings("serial")
+public class UniprotFTSPanel extends GFTSPanel
+{
+
+ private static String defaultFTSFrameTitle = MessageManager
+ .getString("label.uniprot_sequence_fetcher");
+
+ private String ftsFrameTitle = defaultFTSFrameTitle;
+
+
+
+ public UniprotFTSPanel(SequenceFetcher seqFetcher)
+ {
+ pageLimit = UniProtFTSRestClient.getInstance()
+ .getDefaultResponsePageSize();
+ this.seqFetcher = seqFetcher;
+ this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
+ .getProgressIndicator();
+ }
+
+ @Override
+ public void searchAction(boolean isFreshSearch)
+ {
+ if (isFreshSearch)
+ {
+ offSet = 0;
+ }
+ new Thread()
+ {
+ @Override
+ public void run()
+ {
+ ftsFrameTitle = defaultFTSFrameTitle;
+ reset();
+ if (getTypedText().length() > 0)
+ {
+ setSearchInProgress(true);
+ long startTime = System.currentTimeMillis();
+
+ String searchTarget = ((FTSDataColumnI) cmb_searchTarget
+ .getSelectedItem()).getAltCode();
+
+ wantedFields = UniProtFTSRestClient.getInstance()
+ .getAllDefaulDisplayedDataColumns();
+ String searchTerm = decodeSearchTerm(txt_search.getText(),
+ searchTarget);
+
+ FTSRestRequest request = new FTSRestRequest();
+ request.setFieldToSearchBy(searchTarget);
+ request.setSearchTerm(searchTerm);
+ request.setOffSet(offSet);
+ request.setWantedFields(wantedFields);
+ FTSRestClientI uniProtRestCleint = UniProtFTSRestClient
+ .getInstance();
+ FTSRestResponse resultList;
+ try
+ {
+ resultList = uniProtRestCleint.executeRequest(request);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ setErrorMessage(e.getMessage());
+ checkForErrors();
+ return;
+ }
+
+ if (resultList.getSearchSummary() != null
+ && resultList.getSearchSummary().size() > 0)
+ {
+ getResultTable().setModel(
+ FTSRestResponse.getTableModel(request,
+ resultList.getSearchSummary()));
+ FTSRestResponse.configureTableColumn(getResultTable(),
+ wantedFields);
+ getResultTable().setVisible(true);
+ }
+
+ long endTime = System.currentTimeMillis();
+ totalResultSetCount = resultList.getNumberOfItemsFound();
+ resultSetCount = resultList.getSearchSummary() == null ? 0
+ : resultList.getSearchSummary().size();
+ String result = (resultSetCount > 0) ? MessageManager
+ .getString("label.results") : MessageManager
+ .getString("label.result");
+ if (isPaginationEnabled() && resultSetCount > 0)
+ {
+ updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
+ + " " + (offSet + 1) + " to "
+ + (offSet + resultSetCount) + " of "
+ + totalResultSetCount
+ + " " + " (" + (endTime - startTime) + " milli secs)");
+ }
+ else
+ {
+ updateSearchFrameTitle(defaultFTSFrameTitle + " - "
+ + resultSetCount + " " + result + " ("
+ + (endTime - startTime) + " milli secs)");
+ }
+ setSearchInProgress(false);
+ refreshPaginatorState();
+ updateSummaryTableSelections();
+ }
+ }
+ }.start();
+
+ }
+
+ public String decodeSearchTerm(String enteredText, String targetField)
+ {
+ int searchTargetLength = targetField.equalsIgnoreCase("Search All") ? 0
+ : targetField.length() + 1;
+ String searchTarget = targetField.equalsIgnoreCase("Search All") ? ""
+ : targetField + ":";
+ String foundSearchTerms = enteredText;
+ StringBuilder foundSearchTermsBuilder = new StringBuilder();
+ if (enteredText.contains(";"))
+ {
+ String[] searchTerms = enteredText.split(";");
+ for (String searchTerm : searchTerms)
+ {
+ foundSearchTermsBuilder.append(searchTarget).append(searchTerm)
+ .append(" OR ");
+ }
+ int endIndex = foundSearchTermsBuilder.lastIndexOf(" OR ");
+ foundSearchTerms = foundSearchTermsBuilder.toString();
+ if (foundSearchTerms.contains(" OR "))
+ {
+ foundSearchTerms = foundSearchTerms.substring(searchTargetLength,
+ endIndex);
+ }
+ }
+ return foundSearchTerms;
+ }
+
+
+ @Override
+ public boolean isPaginationEnabled()
+ {
+ return true;
+ }
+
+ @Override
+ public void okAction()
+ {
+ disableActionButtons();
+ StringBuilder selectedIds = new StringBuilder();
+ HashSet<String> selectedIdsSet = new HashSet<String>();
+ int primaryKeyColIndex = 0;
+ try
+ {
+ primaryKeyColIndex = getFTSRestClient().getPrimaryKeyColumIndex(
+ wantedFields, false);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ int[] selectedRows = getResultTable().getSelectedRows();
+ for (int summaryRow : selectedRows)
+ {
+ String idStr = getResultTable().getValueAt(summaryRow,
+ primaryKeyColIndex).toString();
+ selectedIdsSet.add(idStr);
+ }
+ selectedIdsSet.addAll(paginatorCart);
+ for (String selectedId : selectedIdsSet)
+ {
+ selectedIds.append(selectedId).append(";");
+ }
+
+ String ids = selectedIds.toString();
+ // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
+ seqFetcher.getTextArea().setText(ids);
+ Thread worker = new Thread(seqFetcher);
+ worker.start();
+ delayAndEnableActionButtons();
+ }
+
+ @Override
+ public FTSRestClientI getFTSRestClient()
+ {
+ return UniProtFTSRestClient.getInstance();
+ }
+
+ @Override
+ public String getFTSFrameTitle()
+ {
+ return ftsFrameTitle;
+ }
+
+}
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
import jalview.api.FeatureSettingsControllerI;
+import jalview.api.FeatureSettingsModelI;
import jalview.api.SplitContainerI;
import jalview.api.ViewStyleI;
import jalview.api.analysis.ScoreModelI;
import jalview.datamodel.AlignmentOrder;
import jalview.datamodel.AlignmentView;
import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.DBRefSource;
import jalview.datamodel.HiddenSequences;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SeqCigar;
import jalview.io.JnetAnnotationMaker;
import jalview.io.NewickFile;
import jalview.io.TCoffeeScoreFile;
+import jalview.io.gff.SequenceOntologyI;
import jalview.jbgui.GAlignFrame;
import jalview.schemes.Blosum62ColourScheme;
import jalview.schemes.BuriedColourScheme;
import jalview.structure.StructureSelectionManager;
import jalview.util.MessageManager;
import jalview.viewmodel.AlignmentViewport;
+import jalview.ws.DBRefFetcher;
+import jalview.ws.DBRefFetcher.FetchFinishedListenerI;
+import jalview.ws.SequenceFetcher;
import jalview.ws.jws1.Discoverer;
import jalview.ws.jws2.Jws2Discoverer;
import jalview.ws.jws2.jabaws2.Jws2Instance;
import java.awt.dnd.DropTargetListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
-import java.util.Set;
import java.util.Vector;
import javax.swing.JCheckBoxMenuItem;
{
formatMenu.add(vsel);
}
+ addFocusListener(new FocusAdapter()
+ {
+ @Override
+ public void focusGained(FocusEvent e)
+ {
+ Desktop.setCurrentAlignFrame(AlignFrame.this);
+ }
+ });
}
public void setGUINucleotide(boolean nucleotide)
{
showTranslation.setVisible(nucleotide);
+ showReverse.setVisible(nucleotide);
+ showReverseComplement.setVisible(nucleotide);
conservationMenuItem.setEnabled(!nucleotide);
modifyConservation.setEnabled(!nucleotide);
showGroupConservation.setEnabled(!nucleotide);
rnahelicesColour.setEnabled(av.getAlignment().hasRNAStructure());
rnahelicesColour
.setSelected(av.getGlobalColourScheme() instanceof jalview.schemes.RNAHelicesColour);
- setShowProductsEnabled();
+
+ showProducts.setEnabled(canShowProducts());
+ setGroovyEnabled(Desktop.getGroovyConsole() != null);
+
updateEditMenuBar();
}
+ /**
+ * Set the enabled state of the 'Run Groovy' option in the Calculate menu
+ *
+ * @param b
+ */
+ public void setGroovyEnabled(boolean b)
+ {
+ runGroovy.setEnabled(b);
+ }
+
private IProgressIndicator progressBar;
/*
@Override
public void fetchSequence_actionPerformed(ActionEvent e)
{
- new SequenceFetcher(this);
+ new jalview.gui.SequenceFetcher(this);
}
@Override
AlignmentI alignmentToExport = null;
AlignExportSettingI settings = exportSettings;
String[] omitHidden = null;
- int[] alignmentStartEnd = new int[2];
HiddenSequences hiddenSeqs = viewport.getAlignment()
.getHiddenSequences();
alignmentToExport = viewport.getAlignment();
- alignmentStartEnd = new int[] { 0, alignmentToExport.getWidth() - 1 };
boolean hasHiddenSeqs = hiddenSeqs.getSize() > 0;
if (settings == null)
omitHidden = viewport.getViewAsString(false);
}
+ int[] alignmentStartEnd = new int[2];
if (hasHiddenSeqs && settings.isExportHiddenSequences())
{
alignmentToExport = hiddenSeqs.getFullAlignment();
else
{
alignmentToExport = viewport.getAlignment();
- alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
+ alignmentStartEnd = viewport.getAlignment()
+ .getVisibleStartAndEndIndex(
+ viewport
.getColumnSelection().getHiddenColumns());
}
AlignmentExportData ed = new AlignmentExportData(alignmentToExport,
return ed;
}
- public static int[] getStartEnd(int[] aligmentStartEnd,
- List<int[]> hiddenCols)
- {
- int startPos = aligmentStartEnd[0];
- int endPos = aligmentStartEnd[1];
-
- int[] lowestRange = new int[] { -1, -1 };
- int[] higestRange = new int[] { -1, -1 };
-
- for (int[] hiddenCol : hiddenCols)
- {
- lowestRange = (hiddenCol[0] <= startPos) ? hiddenCol : lowestRange;
- higestRange = (hiddenCol[1] >= endPos) ? hiddenCol : higestRange;
- }
-
- if (lowestRange[0] == -1 && lowestRange[1] == -1)
- {
- startPos = aligmentStartEnd[0];
- }
- else
- {
- startPos = lowestRange[1] + 1;
- }
-
- if (higestRange[0] == -1 && higestRange[1] == -1)
- {
- endPos = aligmentStartEnd[1];
- }
- else
- {
- endPos = higestRange[0] - 1;
- }
-
- // System.out.println("Export range : " + startPos + " - " + endPos);
- return new int[] { startPos, endPos };
- }
-
- public static void main(String[] args)
- {
- ArrayList<int[]> hiddenCols = new ArrayList<int[]>();
- hiddenCols.add(new int[] { 0, 0 });
- hiddenCols.add(new int[] { 6, 9 });
- hiddenCols.add(new int[] { 11, 12 });
- hiddenCols.add(new int[] { 33, 33 });
- hiddenCols.add(new int[] { 50, 50 });
-
- int[] x = getStartEnd(new int[] { 0, 50 }, hiddenCols);
- // System.out.println("Export range : " + x[0] + " - " + x[1]);
- }
/**
* DOCUMENT ME!
return;
}
- format = new IdentifyFile().Identify(str, "Paste");
+ format = new IdentifyFile().identify(str, "Paste");
} catch (OutOfMemoryError er)
{
@Override
public void mousePressed(MouseEvent evt)
{
- if (evt.isControlDown()
- || SwingUtilities.isRightMouseButton(evt))
+ if (evt.isPopupTrigger())
{
radioItem.removeActionListener(radioItem.getActionListeners()[0]);
{
JMenuItem tm = new JMenuItem();
ScoreModelI sm = ResidueProperties.scoreMatrices.get(pwtype);
- if (sm.isProtein() == !viewport.getAlignment().isNucleotide())
+ if (sm.isDNA() == viewport.getAlignment().isNucleotide()
+ || sm.isProtein() == !viewport.getAlignment()
+ .isNucleotide())
{
String smn = MessageManager.getStringOrReturn(
"label.score_model_", sm.getName());
}
}
- /*
- * public void vamsasStore_actionPerformed(ActionEvent e) { JalviewFileChooser
- * chooser = new JalviewFileChooser(jalview.bin.Cache.
- * getProperty("LAST_DIRECTORY"));
- *
- * chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Export
- * to Vamsas file"); chooser.setToolTipText("Export");
- *
- * int value = chooser.showSaveDialog(this);
- *
- * if (value == JalviewFileChooser.APPROVE_OPTION) {
- * jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport);
- * //vs.store(chooser.getSelectedFile().getAbsolutePath() ); vs.storeJalview(
- * chooser.getSelectedFile().getAbsolutePath(), this); } }
- */
/**
- * prototype of an automatically enabled/disabled analysis function
+ * Searches selected sequences for xRef products and builds the Show
+ * Cross-References menu (formerly called Show Products)
*
+ * @return true if Show Cross-references menu should be enabled.
*/
- protected void setShowProductsEnabled()
+ public boolean canShowProducts()
{
SequenceI[] selection = viewport.getSequenceSelection();
- if (canShowProducts(selection, viewport.getSelectionGroup() != null,
- viewport.getAlignment().getDataset()))
- {
- showProducts.setEnabled(true);
-
- }
- else
- {
- showProducts.setEnabled(false);
- }
- }
-
- /**
- * search selection for sequence xRef products and build the show products
- * menu.
- *
- * @param selection
- * @param dataset
- * @return true if showProducts menu should be enabled.
- */
- public boolean canShowProducts(SequenceI[] selection,
- boolean isRegionSelection, Alignment dataset)
- {
+ AlignmentI dataset = viewport.getAlignment().getDataset();
boolean showp = false;
try
{
showProducts.removeAll();
final boolean dna = viewport.getAlignment().isNucleotide();
- final Alignment ds = dataset;
String[] ptypes = (selection == null || selection.length == 0) ? null
: CrossRef.findSequenceXrefTypes(dna, selection, dataset);
- // Object[] prods =
- // CrossRef.buildXProductsList(viewport.getAlignment().isNucleotide(),
- // selection, dataset, true);
- final SequenceI[] sel = selection;
+
for (int t = 0; ptypes != null && t < ptypes.length; t++)
{
showp = true;
- final boolean isRegSel = isRegionSelection;
final AlignFrame af = this;
final String source = ptypes[t];
JMenuItem xtype = new JMenuItem(ptypes[t]);
@Override
public void actionPerformed(ActionEvent e)
{
- // TODO: new thread for this call with vis-delay
- af.showProductsFor(af.viewport.getSequenceSelection(),
- isRegSel, dna, source);
+ showProductsFor(af.viewport.getSequenceSelection(), dna, source);
}
});
} catch (Exception e)
{
jalview.bin.Cache.log
- .warn("canTranslate threw an exception - please report to help@jalview.org",
+ .warn("canShowProducts threw an exception - please report to help@jalview.org",
e);
return false;
}
return showp;
}
- protected void showProductsFor(final SequenceI[] sel,
- final boolean isRegSel, final boolean dna, final String source)
+ protected void showProductsFor(final SequenceI[] sel, final boolean dna,
+ final String source)
{
Runnable foo = new Runnable()
{
new Object[] { source }), sttime);
try
{
- // update our local dataset reference
- Alignment ds = AlignFrame.this.getViewport().getAlignment()
- .getDataset();
- Alignment prods = CrossRef
- .findXrefSequences(sel, dna, source, ds);
- if (prods != null)
+ AlignmentI alignment = AlignFrame.this.getViewport()
+ .getAlignment();
+ AlignmentI xrefs = CrossRef.findXrefSequences(sel, dna, source,
+ alignment);
+ if (xrefs != null)
{
- SequenceI[] sprods = new SequenceI[prods.getHeight()];
- for (int s = 0; s < sprods.length; s++)
- {
- sprods[s] = (prods.getSequenceAt(s)).deriveSequence();
- if (ds.getSequences() == null
- || !ds.getSequences().contains(
- sprods[s].getDatasetSequence()))
- {
- ds.addSequence(sprods[s].getDatasetSequence());
- }
- sprods[s].updatePDBIds();
- }
- Alignment al = new Alignment(sprods);
- al.setDataset(ds);
-
/*
- * Copy dna-to-protein mappings to new alignment
+ * get display scheme (if any) to apply to features
*/
- // TODO 1: no mappings are set up for EMBL product
- // TODO 2: if they were, should add them to protein alignment, not
- // dna
- Set<AlignedCodonFrame> cf = prods.getCodonFrames();
- for (AlignedCodonFrame acf : cf)
+ FeatureSettingsModelI featureColourScheme = new SequenceFetcher()
+ .getFeatureColourScheme(source);
+
+ AlignmentI al = makeCrossReferencesAlignment(
+ alignment.getDataset(), xrefs);
+
+ AlignFrame newFrame = new AlignFrame(al, DEFAULT_WIDTH,
+ DEFAULT_HEIGHT);
+ if (Cache.getDefault("HIDE_INTRONS", true))
{
- al.addCodonFrame(acf);
+ newFrame.hideFeatureColumns(SequenceOntologyI.EXON, false);
}
- AlignFrame naf = new AlignFrame(al, DEFAULT_WIDTH,
- DEFAULT_HEIGHT);
- String newtitle = "" + ((dna) ? "Proteins" : "Nucleotides")
- + " for " + ((isRegSel) ? "selected region of " : "")
- + getTitle();
- naf.setTitle(newtitle);
-
- // temporary flag until SplitFrame is released
- boolean asSplitFrame = Cache.getDefault(
- Preferences.ENABLE_SPLIT_FRAME, true);
- if (asSplitFrame)
+ String newtitle = String.format("%s %s %s",
+ MessageManager.getString(dna ? "label.proteins"
+ : "label.nucleotides"), MessageManager
+ .getString("label.for"), getTitle());
+ newFrame.setTitle(newtitle);
+
+ if (!Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, true))
{
/*
- * Make a copy of this alignment (sharing the same dataset
- * sequences). If we are DNA, drop introns and update mappings
+ * split frame display is turned off in preferences file
*/
- AlignmentI copyAlignment = null;
- final SequenceI[] sequenceSelection = AlignFrame.this.viewport
- .getSequenceSelection();
- if (dna)
+ Desktop.addInternalFrame(newFrame, newtitle, DEFAULT_WIDTH,
+ DEFAULT_HEIGHT);
+ return; // via finally clause
+ }
+
+ /*
+ * Make a copy of this alignment (sharing the same dataset
+ * sequences). If we are DNA, drop introns and update mappings
+ */
+ AlignmentI copyAlignment = null;
+ final SequenceI[] sequenceSelection = AlignFrame.this.viewport
+ .getSequenceSelection();
+ List<AlignedCodonFrame> cf = xrefs.getCodonFrames();
+ boolean copyAlignmentIsAligned = false;
+ if (dna)
+ {
+ copyAlignment = AlignmentUtils.makeCdsAlignment(
+ sequenceSelection, cf, alignment);
+ if (copyAlignment.getHeight() == 0)
{
- copyAlignment = AlignmentUtils.makeExonAlignment(
- sequenceSelection, cf);
- al.getCodonFrames().clear();
- al.getCodonFrames().addAll(cf);
- final StructureSelectionManager ssm = StructureSelectionManager
- .getStructureSelectionManager(Desktop.instance);
- ssm.registerMappings(cf);
+ System.err.println("Failed to make CDS alignment");
}
- else
+ al.getCodonFrames().clear();
+ al.getCodonFrames().addAll(copyAlignment.getCodonFrames());
+
+ /*
+ * pending getting Embl transcripts to 'align',
+ * we are only doing this for Ensembl
+ */
+ // TODO proper criteria for 'can align as cdna'
+ if (DBRefSource.ENSEMBL.equalsIgnoreCase(source)
+ || AlignmentUtils.looksLikeEnsembl(alignment))
{
- copyAlignment = new Alignment(new Alignment(
- sequenceSelection));
+ copyAlignment.alignAs(alignment);
+ copyAlignmentIsAligned = true;
}
- AlignFrame copyThis = new AlignFrame(copyAlignment,
- AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
- copyThis.setTitle(AlignFrame.this.getTitle());
- // SplitFrame with dna above, protein below
- SplitFrame sf = new SplitFrame(dna ? copyThis : naf,
- dna ? naf : copyThis);
- naf.setVisible(true);
- copyThis.setVisible(true);
- String linkedTitle = MessageManager
- .getString("label.linked_view_title");
- Desktop.addInternalFrame(sf, linkedTitle, -1, -1);
}
else
{
- Desktop.addInternalFrame(naf, newtitle, DEFAULT_WIDTH,
- DEFAULT_HEIGHT);
+ copyAlignment = AlignmentUtils.makeCopyAlignment(
+ sequenceSelection, xrefs.getSequencesArray());
+ copyAlignment.getCodonFrames().addAll(cf);
}
- }
- else
- {
- System.err.println("No Sequences generated for xRef type "
- + source);
+ copyAlignment.setGapCharacter(AlignFrame.this.viewport
+ .getGapCharacter());
+
+ StructureSelectionManager ssm = StructureSelectionManager
+ .getStructureSelectionManager(Desktop.instance);
+ ssm.registerMappings(cf);
+
+ if (copyAlignment.getHeight() <= 0)
+ {
+ System.err.println("No Sequences generated for xRef type "
+ + source);
+ return;
+ }
+ /*
+ * align protein to dna
+ */
+ if (dna && copyAlignmentIsAligned)
+ {
+ al.alignAs(copyAlignment);
+ }
+ else
+ {
+ /*
+ * align cdna to protein - currently only if
+ * fetching and aligning Ensembl transcripts!
+ */
+ if (DBRefSource.ENSEMBL.equalsIgnoreCase(source))
+ {
+ copyAlignment.alignAs(al);
+ }
+ }
+
+ AlignFrame copyThis = new AlignFrame(copyAlignment,
+ AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
+ copyThis.setTitle(AlignFrame.this.getTitle());
+
+ boolean showSequenceFeatures = viewport
+ .isShowSequenceFeatures();
+ newFrame.setShowSeqFeatures(showSequenceFeatures);
+ copyThis.setShowSeqFeatures(showSequenceFeatures);
+ FeatureRenderer myFeatureStyling = alignPanel.getSeqPanel().seqCanvas
+ .getFeatureRenderer();
+
+ /*
+ * copy feature rendering settings to split frame
+ */
+ newFrame.alignPanel.getSeqPanel().seqCanvas
+ .getFeatureRenderer()
+ .transferSettings(myFeatureStyling);
+ copyThis.alignPanel.getSeqPanel().seqCanvas
+ .getFeatureRenderer()
+ .transferSettings(myFeatureStyling);
+
+ /*
+ * apply 'database source' feature configuration
+ * if any was found
+ */
+ // TODO is this the feature colouring for the original
+ // alignment or the fetched xrefs? either could be Ensembl
+ newFrame.getViewport().applyFeaturesStyle(featureColourScheme);
+ copyThis.getViewport().applyFeaturesStyle(featureColourScheme);
+
+ SplitFrame sf = new SplitFrame(dna ? copyThis : newFrame,
+ dna ? newFrame : copyThis);
+ newFrame.setVisible(true);
+ copyThis.setVisible(true);
+ String linkedTitle = MessageManager
+ .getString("label.linked_view_title");
+ Desktop.addInternalFrame(sf, linkedTitle, -1, -1);
+ sf.adjustDivider();
}
} catch (Exception e)
{
- jalview.bin.Cache.log.error(
+ Cache.log.error(
"Exception when finding crossreferences", e);
} catch (OutOfMemoryError e)
{
new OOMWarning("whilst fetching crossreferences", e);
- } catch (Error e)
+ } catch (Throwable e)
{
- jalview.bin.Cache.log.error("Error when finding crossreferences",
+ Cache.log.error("Error when finding crossreferences",
e);
+ } finally
+ {
+ AlignFrame.this.setProgressBar(MessageManager.formatMessage(
+ "status.finished_searching_for_sequences_from",
+ new Object[] { source }), sttime);
}
- AlignFrame.this.setProgressBar(MessageManager.formatMessage(
- "status.finished_searching_for_sequences_from",
- new Object[] { source }), sttime);
+ }
+
+ /**
+ * Makes an alignment containing the given sequences. If this is of the
+ * same type as the given dataset (nucleotide/protein), then the new
+ * alignment shares the same dataset, and its dataset sequences are added
+ * to it. Otherwise a new dataset sequence is created for the
+ * cross-references.
+ *
+ * @param dataset
+ * @param seqs
+ * @return
+ */
+ protected AlignmentI makeCrossReferencesAlignment(AlignmentI dataset,
+ AlignmentI seqs)
+ {
+ boolean sameType = dataset.isNucleotide() == seqs.isNucleotide();
+
+ SequenceI[] sprods = new SequenceI[seqs.getHeight()];
+ for (int s = 0; s < sprods.length; s++)
+ {
+ sprods[s] = (seqs.getSequenceAt(s)).deriveSequence();
+ if (sameType)
+ {
+ if (dataset.getSequences() == null
+ || !dataset.getSequences().contains(
+ sprods[s].getDatasetSequence()))
+ {
+ dataset.addSequence(sprods[s].getDatasetSequence());
+ }
+ }
+ sprods[s].updatePDBIds();
+ }
+ Alignment al = new Alignment(sprods);
+ if (sameType)
+ {
+ al.setDataset((Alignment) dataset);
+ }
+ else
+ {
+ al.createDatasetAlignment();
+ }
+ return al;
}
};
frunner.start();
}
- public boolean canShowTranslationProducts(SequenceI[] selection,
- AlignmentI alignment)
- {
- // old way
- try
- {
- return (jalview.analysis.Dna.canTranslate(selection,
- viewport.getViewAsVisibleContigs(true)));
- } catch (Exception e)
- {
- jalview.bin.Cache.log
- .warn("canTranslate threw an exception - please report to help@jalview.org",
- e);
- return false;
- }
- }
-
/**
* Construct and display a new frame containing the translation of this
* frame's DNA sequences to their aligned protein (amino acid) equivalents.
String type = null;
try
{
- type = new IdentifyFile().Identify(file, protocol);
+ type = new IdentifyFile().identify(file, protocol);
} catch (Exception ex)
{
type = null;
/**
* Attempt to load a "dropped" file or URL string: First by testing whether
- * it's and Annotation file, then a JNet file, and finally a features file. If
+ * it's an Annotation file, then a JNet file, and finally a features file. If
* all are false then the user may have dropped an alignment file onto this
* AlignFrame.
*
{
if (protocol == null)
{
- protocol = jalview.io.FormatAdapter.checkProtocol(file);
+ protocol = FormatAdapter.checkProtocol(file);
}
// if the file isn't identified, or not positively identified as some
// other filetype (PFAM is default unidentified alignment file type) then
// try to parse it as a features file
if (format == null)
{
- format = new IdentifyFile().Identify(file, protocol);
+ format = new IdentifyFile().identify(file, protocol);
}
if (format.equalsIgnoreCase("JnetFile"))
{
viewport.setColumnSelection(cs);
isAnnotation = true;
}
- else
+ else if (IdentifyFile.FeaturesFile.equals(format))
{
- /*
- * if (format.equalsIgnoreCase("PDB")) {
- *
- * String pdbfn = ""; // try to match up filename with sequence id
- * try { if (protocol == jalview.io.FormatAdapter.FILE) { File fl =
- * new File(file); pdbfn = fl.getName(); } else if (protocol ==
- * jalview.io.FormatAdapter.URL) { URL url = new URL(file); pdbfn =
- * url.getFile(); } } catch (Exception e) { } ; if (assocSeq ==
- * null) { SequenceIdMatcher idm = new SequenceIdMatcher(viewport
- * .getAlignment().getSequencesArray()); if (pdbfn.length() > 0) {
- * // attempt to find a match in the alignment SequenceI mtch =
- * idm.findIdMatch(pdbfn); int l = 0, c = pdbfn.indexOf("."); while
- * (mtch == null && c != -1) { while ((c = pdbfn.indexOf(".", l)) >
- * l) { l = c; } if (l > -1) { pdbfn = pdbfn.substring(0, l); } mtch
- * = idm.findIdMatch(pdbfn); } if (mtch != null) { // try and
- * associate // prompt ? PDBEntry pe = new AssociatePdbFileWithSeq()
- * .associatePdbWithSeq(file, protocol, mtch, true); if (pe != null)
- * { System.err.println("Associated file : " + file + " with " +
- * mtch.getDisplayId(true)); alignPanel.paintAlignment(true); } } //
- * TODO: maybe need to load as normal otherwise return; } }
- */
- // try to parse it as a features file
- boolean isGroupsFile = parseFeaturesFile(file, protocol);
- // if it wasn't a features file then we just treat it as a general
- // alignment file to load into the current view.
- if (!isGroupsFile)
- {
- new FileLoader().LoadFile(viewport, file, protocol, format);
- }
- else
+ if (parseFeaturesFile(file, protocol))
{
alignPanel.paintAlignment(true);
}
}
+ else
+ {
+ new FileLoader().LoadFile(viewport, file, protocol, format);
+ }
}
}
if (isAnnotation)
} catch (Exception x)
{
}
- ;
new OOMWarning(
"loading data "
+ (protocol != null ? (protocol.equals(FormatAdapter.PASTE) ? "from clipboard."
@Override
public void tabbedPane_mousePressed(MouseEvent e)
{
- if (SwingUtilities.isRightMouseButton(e))
+ if (e.isPopupTrigger())
{
String msg = MessageManager.getString("label.enter_view_name");
String reply = JOptionPane.showInternalInputDialog(this, msg, msg,
{
new Thread(new Runnable()
{
-
@Override
public void run()
{
- boolean isNuclueotide = alignPanel.alignFrame
- .getViewport().getAlignment()
- .isNucleotide();
- new jalview.ws.DBRefFetcher(alignPanel.av
- .getSequenceSelection(),
- alignPanel.alignFrame, null,
- alignPanel.alignFrame.featureSettings,
- isNuclueotide)
+ boolean isNucleotide = alignPanel.alignFrame.getViewport()
+ .getAlignment().isNucleotide();
+ DBRefFetcher dbRefFetcher = new DBRefFetcher(alignPanel.av
+ .getSequenceSelection(), alignPanel.alignFrame, null,
+ alignPanel.alignFrame.featureSettings, isNucleotide);
+ dbRefFetcher.addListener(new FetchFinishedListenerI()
+ {
+ @Override
+ public void finished()
+ {
+ AlignFrame.this.setMenusForViewport();
+ }
+ });
+ dbRefFetcher
.fetchDBRefs(false);
}
}).start();
@Override
public void run()
{
- final jalview.ws.SequenceFetcher sf = SequenceFetcher
+ final jalview.ws.SequenceFetcher sf = jalview.gui.SequenceFetcher
.getSequenceFetcherSingleton(me);
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
- boolean isNuclueotide = alignPanel.alignFrame
+ boolean isNucleotide = alignPanel.alignFrame
.getViewport().getAlignment()
.isNucleotide();
- new jalview.ws.DBRefFetcher(alignPanel.av
- .getSequenceSelection(),
+ DBRefFetcher dbRefFetcher = new DBRefFetcher(
+ alignPanel.av.getSequenceSelection(),
alignPanel.alignFrame, dassource,
alignPanel.alignFrame.featureSettings,
- isNuclueotide)
- .fetchDBRefs(false);
+ isNucleotide);
+ dbRefFetcher
+ .addListener(new FetchFinishedListenerI()
+ {
+ @Override
+ public void finished()
+ {
+ AlignFrame.this.setMenusForViewport();
+ }
+ });
+ dbRefFetcher.fetchDBRefs(false);
}
}).start();
}
@Override
public void run()
{
- boolean isNuclueotide = alignPanel.alignFrame
+ boolean isNucleotide = alignPanel.alignFrame
.getViewport().getAlignment()
.isNucleotide();
- new jalview.ws.DBRefFetcher(alignPanel.av
- .getSequenceSelection(),
+ DBRefFetcher dbRefFetcher = new DBRefFetcher(
+ alignPanel.av.getSequenceSelection(),
alignPanel.alignFrame, dassource,
alignPanel.alignFrame.featureSettings,
- isNuclueotide)
- .fetchDBRefs(false);
+ isNucleotide);
+ dbRefFetcher
+ .addListener(new FetchFinishedListenerI()
+ {
+ @Override
+ public void finished()
+ {
+ AlignFrame.this.setMenusForViewport();
+ }
+ });
+ dbRefFetcher.fetchDBRefs(false);
}
}).start();
}
@Override
public void run()
{
- boolean isNuclueotide = alignPanel.alignFrame
+ boolean isNucleotide = alignPanel.alignFrame
.getViewport().getAlignment()
.isNucleotide();
- new jalview.ws.DBRefFetcher(alignPanel.av
- .getSequenceSelection(),
+ DBRefFetcher dbRefFetcher = new DBRefFetcher(
+ alignPanel.av.getSequenceSelection(),
alignPanel.alignFrame, dassrc,
alignPanel.alignFrame.featureSettings,
- isNuclueotide)
- .fetchDBRefs(false);
+ isNucleotide);
+ dbRefFetcher
+ .addListener(new FetchFinishedListenerI()
+ {
+ @Override
+ public void finished()
+ {
+ AlignFrame.this.setMenusForViewport();
+ }
+ });
+ dbRefFetcher.fetchDBRefs(false);
}
}).start();
}
{
// TODO no longer a menu action - refactor as required
final AlignmentI alignment = getViewport().getAlignment();
- Set<AlignedCodonFrame> mappings = alignment.getCodonFrames();
+ List<AlignedCodonFrame> mappings = alignment.getCodonFrames();
if (mappings == null)
{
return;
sf.setComplementVisible(this, show);
}
}
+
+ /**
+ * Generate the reverse (optionally complemented) of the selected sequences,
+ * and add them to the alignment
+ */
+ @Override
+ protected void showReverse_actionPerformed(boolean complement)
+ {
+ AlignmentI al = null;
+ try
+ {
+ Dna dna = new Dna(viewport, viewport.getViewAsVisibleContigs(true));
+
+ al = dna.reverseCdna(complement);
+ viewport.addAlignment(al, "");
+ } catch (Exception ex)
+ {
+ System.err.println(ex.getMessage());
+ return;
+ }
+ }
+
+ /**
+ * Try to run a script in the Groovy console, having first ensured that this
+ * AlignFrame is set as currentAlignFrame in Desktop, to allow the script to
+ * be targeted at this alignment.
+ */
+ @Override
+ protected void runGroovy_actionPerformed()
+ {
+ Desktop.setCurrentAlignFrame(this);
+ groovy.ui.Console console = Desktop.getGroovyConsole();
+ if (console != null)
+ {
+ try
+ {
+ console.runScript();
+ } catch (Exception ex)
+ {
+ System.err.println((ex.toString()));
+ JOptionPane
+ .showInternalMessageDialog(Desktop.desktop, MessageManager
+ .getString("label.couldnt_run_groovy_script"),
+ MessageManager
+ .getString("label.groovy_support_failed"),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ else
+ {
+ System.err.println("Can't run Groovy script as console not found");
+ }
+ }
+
+ /**
+ * Hides columns containing (or not containing) a specified feature, provided
+ * that would not leave all columns hidden
+ *
+ * @param featureType
+ * @param columnsContaining
+ * @return
+ */
+ public boolean hideFeatureColumns(String featureType,
+ boolean columnsContaining)
+ {
+ boolean notForHiding = avc.markColumnsContainingFeatures(
+ columnsContaining, false, false, featureType);
+ if (notForHiding)
+ {
+ if (avc.markColumnsContainingFeatures(!columnsContaining, false,
+ false, featureType))
+ {
+ getViewport().hideSelectedColumns();
+ return true;
+ }
+ }
+ return false;
+ }
}
class PrintThread extends Thread
import jalview.analysis.NJTree;
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
+import jalview.api.FeatureColourI;
+import jalview.api.FeatureSettingsModelI;
+import jalview.api.FeaturesDisplayedI;
import jalview.api.ViewStyleI;
import jalview.bin.Cache;
import jalview.commands.CommandI;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
-import java.util.Set;
import java.util.Vector;
import javax.swing.JInternalFrame;
AlignmentI al = getAlignment();
if (al != null)
{
- Set<AlignedCodonFrame> mappings = al.getCodonFrames();
+ List<AlignedCodonFrame> mappings = al.getCodonFrames();
if (mappings != null)
{
StructureSelectionManager ssm = StructureSelectionManager
*
* @return DOCUMENT ME!
*/
+ @Override
public char getGapCharacter()
{
return getAlignment().getGapCharacter();
*
* @return DOCUMENT ME!
*/
+ @Override
public ColumnSelection getColumnSelection()
{
return colSel;
/**
* Send the current selection to be broadcast to any selection listeners.
*/
+ @Override
public void sendSelection()
{
jalview.structure.StructureSelectionManager
}
/**
- * synthesize a column selection if none exists so it covers the given
- * selection group. if wholewidth is false, no column selection is made if the
- * selection group covers the whole alignment width.
- *
- * @param sg
- * @param wholewidth
- */
- public void expandColSelection(SequenceGroup sg, boolean wholewidth)
- {
- int sgs, sge;
- if (sg != null
- && (sgs = sg.getStartRes()) >= 0
- && sg.getStartRes() <= (sge = sg.getEndRes())
- && (colSel == null || colSel.getSelected() == null || colSel
- .getSelected().size() == 0))
- {
- if (!wholewidth && alignment.getWidth() == (1 + sge - sgs))
- {
- // do nothing
- return;
- }
- if (colSel == null)
- {
- colSel = new ColumnSelection();
- }
- for (int cspos = sg.getStartRes(); cspos <= sg.getEndRes(); cspos++)
- {
- colSel.addElement(cspos);
- }
- }
- }
-
- /**
* Returns the (Desktop) instance of the StructureSelectionManager
*/
@Override
return seqvectors.toArray(new SequenceI[seqvectors.size()][]);
}
+ @Override
public boolean isNormaliseSequenceLogo()
{
return normaliseSequenceLogo;
*
* @return true if alignment characters should be displayed
*/
+ @Override
public boolean isValidCharWidth()
{
return validCharWidth;
* may give the user the option to open a new frame, or split panel, with cDNA
* and protein linked.
*
- * @param al
+ * @param toAdd
* @param title
*/
- public void addAlignment(AlignmentI al, String title)
+ public void addAlignment(AlignmentI toAdd, String title)
{
// TODO: promote to AlignViewportI? applet CutAndPasteTransfer is different
// TODO: create undo object for this JAL-1101
/*
- * If any cDNA/protein mappings can be made between the alignments, offer to
- * open a linked alignment with split frame option.
+ * Ensure datasets are created for the new alignment as
+ * mappings operate on dataset sequences
+ */
+ toAdd.setDataset(null);
+
+ /*
+ * Check if any added sequence could be the object of a mapping or
+ * cross-reference; if so, make the mapping explicit
+ */
+ getAlignment().realiseMappings(toAdd.getSequences());
+
+ /*
+ * If any cDNA/protein mappings exist or can be made between the alignments,
+ * offer to open a split frame with linked alignments
*/
if (Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, true))
{
- if (al.getDataset() == null)
+ if (AlignmentUtils.isMappable(toAdd, getAlignment()))
{
- // need to create ds seqs
- for (SequenceI sq : al.getSequences())
- {
- if (sq.getDatasetSequence() == null)
- {
- sq.createDatasetSequence();
- }
- }
- }
- if (AlignmentUtils.isMappable(al, getAlignment()))
- {
- if (openLinkedAlignment(al, title))
+ if (openLinkedAlignment(toAdd, title))
{
return;
}
// TODO: JAL-407 regardless of above - identical sequences (based on ID and
// provenance) should share the same dataset sequence
- for (int i = 0; i < al.getHeight(); i++)
+ AlignmentI al = getAlignment();
+ String gap = String.valueOf(al.getGapCharacter());
+ for (int i = 0; i < toAdd.getHeight(); i++)
{
- getAlignment().addSequence(al.getSequenceAt(i));
+ SequenceI seq = toAdd.getSequenceAt(i);
+ /*
+ * experimental!
+ * - 'align' any mapped sequences as per existing
+ * e.g. cdna to genome, domain hit to protein sequence
+ * very experimental! (need a separate menu option for this)
+ * - only add mapped sequences ('select targets from a dataset')
+ */
+ if (true /*AlignmentUtils.alignSequenceAs(seq, al, gap, true, true)*/)
+ {
+ al.addSequence(seq);
+ }
}
setEndSeq(getAlignment().getHeight());
return true;
}
+ /**
+ * Applies the supplied feature settings descriptor to currently known
+ * features. This supports an 'initial configuration' of feature colouring
+ * based on a preset or user favourite. This may then be modified in the usual
+ * way using the Feature Settings dialogue.
+ *
+ * @param featureSettings
+ */
+ public void applyFeaturesStyle(FeatureSettingsModelI featureSettings)
+ {
+ if (featureSettings == null)
+ {
+ return;
+ }
+
+ FeatureRenderer fr = getAlignPanel().getSeqPanel().seqCanvas
+ .getFeatureRenderer();
+ fr.findAllFeatures(true);
+ List<String> renderOrder = fr.getRenderOrder();
+ FeaturesDisplayedI displayed = fr.getFeaturesDisplayed();
+ displayed.clear();
+ // TODO this clears displayed.featuresRegistered - do we care?
+
+ /*
+ * set feature colour if specified by feature settings
+ * set visibility of all features
+ */
+ for (String type : renderOrder)
+ {
+ FeatureColourI preferredColour = featureSettings
+ .getFeatureColour(type);
+ if (preferredColour != null)
+ {
+ fr.setColour(type, preferredColour);
+ }
+ if (featureSettings.isFeatureDisplayed(type))
+ {
+ displayed.setVisible(type);
+ }
+ }
+
+ /*
+ * set visibility of feature groups
+ */
+ for (String group : fr.getFeatureGroups())
+ {
+ fr.setGroupVisibility(group, featureSettings.isGroupDisplayed(group));
+ }
+
+ /*
+ * order the features
+ */
+ if (featureSettings.optimiseOrder())
+ {
+ // TODO not supported (yet?)
+ }
+ else
+ {
+ fr.orderFeatures(featureSettings);
+ }
+ fr.setTransparency(featureSettings.getTransparency());
+ }
+
}
import jalview.api.FeatureColourI;
import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.SequenceI;
import jalview.io.AnnotationFile;
import jalview.io.FeaturesFile;
import jalview.io.JalviewFileChooser;
{
Map<String, FeatureColourI> displayedFeatureColours = ap
.getFeatureRenderer().getDisplayedFeatureCols();
+ FeaturesFile formatter = new FeaturesFile();
+ SequenceI[] sequences = ap.av.getAlignment().getSequencesArray();
+ Map<String, FeatureColourI> featureColours = ap.getFeatureRenderer()
+ .getDisplayedFeatureCols();
+ boolean includeNonPositional = ap.av.isShowNPFeats();
if (GFFFormat.isSelected())
{
- text = new FeaturesFile().printGFFFormat(ap.av.getAlignment()
- .getDataset().getSequencesArray(), displayedFeatureColours, true, ap.av.isShowNPFeats());// ap.av.featuresDisplayed//);
+ text = new FeaturesFile().printGffFormat(ap.av.getAlignment()
+ .getDataset().getSequencesArray(), displayedFeatureColours,
+ true, ap.av.isShowNPFeats());
+ text = formatter.printGffFormat(sequences, featureColours, true,
+ includeNonPositional);
}
else
{
text = new FeaturesFile().printJalviewFormat(ap.av.getAlignment()
.getDataset().getSequencesArray(), displayedFeatureColours, true, ap.av.isShowNPFeats()); // ap.av.featuresDisplayed);
+ text = formatter.printJalviewFormat(sequences, featureColours,
+ true, includeNonPositional);
}
}
else
* @param evt
* DOCUMENT ME!
*/
+ @Override
public void actionPerformed(ActionEvent evt)
{
AlignmentAnnotation[] aa = ap.av.getAlignment()
return true;
}
- /**
- * DOCUMENT ME!
- *
- * @param evt
- * DOCUMENT ME!
- */
+ @Override
public void mousePressed(MouseEvent evt)
{
getSelectedRow(evt.getY() - getScrollOffset());
oldY = evt.getY();
+ if (!evt.isPopupTrigger())
+ {
+ return;
+ }
+ evt.consume();
+ // handle popup menu event
+ final AlignmentAnnotation[] aa = ap.av.getAlignment()
+ .getAlignmentAnnotation();
+
+ JPopupMenu pop = new JPopupMenu(
+ MessageManager.getString("label.annotations"));
+ JMenuItem item = new JMenuItem(ADDNEW);
+ item.addActionListener(this);
+ pop.add(item);
+ if (selectedRow < 0)
+ {
+ if (hasHiddenRows)
+ { // let the user make everything visible again
+ item = new JMenuItem(SHOWALL);
+ item.addActionListener(this);
+ pop.add(item);
+ }
+ pop.show(this, evt.getX(), evt.getY());
+ return;
+ }
+ item = new JMenuItem(EDITNAME);
+ item.addActionListener(this);
+ pop.add(item);
+ item = new JMenuItem(HIDE);
+ item.addActionListener(this);
+ pop.add(item);
+ // JAL-1264 hide all sequence-specific annotations of this type
+ if (selectedRow < aa.length)
+ {
+ if (aa[selectedRow].sequenceRef != null)
+ {
+ final String label = aa[selectedRow].label;
+ JMenuItem hideType = new JMenuItem();
+ String text = MessageManager.getString("label.hide_all") + " "
+ + label;
+ hideType.setText(text);
+ hideType.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ AlignmentUtils.showOrHideSequenceAnnotations(
+ ap.av.getAlignment(), Collections.singleton(label),
+ null, false, false);
+ // for (AlignmentAnnotation ann : ap.av.getAlignment()
+ // .getAlignmentAnnotation())
+ // {
+ // if (ann.sequenceRef != null && ann.label != null
+ // && ann.label.equals(label))
+ // {
+ // ann.visible = false;
+ // }
+ // }
+ refresh();
+ }
+ });
+ pop.add(hideType);
+ }
+ }
+ item = new JMenuItem(DELETE);
+ item.addActionListener(this);
+ pop.add(item);
+ if (hasHiddenRows)
+ {
+ item = new JMenuItem(SHOWALL);
+ item.addActionListener(this);
+ pop.add(item);
+ }
+ item = new JMenuItem(OUTPUT_TEXT);
+ item.addActionListener(this);
+ pop.add(item);
+ // TODO: annotation object should be typed for autocalculated/derived
+ // property methods
+ if (selectedRow < aa.length)
+ {
+ final String label = aa[selectedRow].label;
+ if (!aa[selectedRow].autoCalculated)
+ {
+ if (aa[selectedRow].graph == AlignmentAnnotation.NO_GRAPH)
+ {
+ // display formatting settings for this row.
+ pop.addSeparator();
+ // av and sequencegroup need to implement same interface for
+ item = new JCheckBoxMenuItem(TOGGLE_LABELSCALE,
+ aa[selectedRow].scaleColLabel);
+ item.addActionListener(this);
+ pop.add(item);
+ }
+ }
+ else if (label.indexOf("Consensus") > -1)
+ {
+ pop.addSeparator();
+ // av and sequencegroup need to implement same interface for
+ final JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(
+ MessageManager.getString("label.ignore_gaps_consensus"),
+ (aa[selectedRow].groupRef != null) ? aa[selectedRow].groupRef
+ .getIgnoreGapsConsensus() : ap.av
+ .isIgnoreGapsConsensus());
+ final AlignmentAnnotation aaa = aa[selectedRow];
+ cbmi.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ if (aaa.groupRef != null)
+ {
+ // TODO: pass on reference to ap so the view can be updated.
+ aaa.groupRef.setIgnoreGapsConsensus(cbmi.getState());
+ ap.getAnnotationPanel().paint(
+ ap.getAnnotationPanel().getGraphics());
+ }
+ else
+ {
+ ap.av.setIgnoreGapsConsensus(cbmi.getState(), ap);
+ }
+ }
+ });
+ pop.add(cbmi);
+ // av and sequencegroup need to implement same interface for
+ if (aaa.groupRef != null)
+ {
+ final JCheckBoxMenuItem chist = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_group_histogram"),
+ aa[selectedRow].groupRef.isShowConsensusHistogram());
+ chist.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ aaa.groupRef.setShowConsensusHistogram(chist.getState());
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(chist);
+ final JCheckBoxMenuItem cprofl = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_group_logo"),
+ aa[selectedRow].groupRef.isShowSequenceLogo());
+ cprofl.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ aaa.groupRef.setshowSequenceLogo(cprofl.getState());
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cprofl);
+ final JCheckBoxMenuItem cproflnorm = new JCheckBoxMenuItem(
+ MessageManager.getString("label.normalise_group_logo"),
+ aa[selectedRow].groupRef.isNormaliseSequenceLogo());
+ cproflnorm.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ aaa.groupRef.setNormaliseSequenceLogo(cproflnorm.getState());
+ // automatically enable logo display if we're clicked
+ aaa.groupRef.setshowSequenceLogo(true);
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cproflnorm);
+ }
+ else
+ {
+ final JCheckBoxMenuItem chist = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_histogram"),
+ av.isShowConsensusHistogram());
+ chist.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ av.setShowConsensusHistogram(chist.getState());
+ ap.alignFrame.setMenusForViewport();
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(chist);
+ final JCheckBoxMenuItem cprof = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_logo"),
+ av.isShowSequenceLogo());
+ cprof.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ av.setShowSequenceLogo(cprof.getState());
+ ap.alignFrame.setMenusForViewport();
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cprof);
+ final JCheckBoxMenuItem cprofnorm = new JCheckBoxMenuItem(
+ MessageManager.getString("label.normalise_logo"),
+ av.isNormaliseSequenceLogo());
+ cprofnorm.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ av.setShowSequenceLogo(true);
+ av.setNormaliseSequenceLogo(cprofnorm.getState());
+ ap.alignFrame.setMenusForViewport();
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cprofnorm);
+ }
+ final JMenuItem consclipbrd = new JMenuItem(COPYCONS_SEQ);
+ consclipbrd.addActionListener(this);
+ pop.add(consclipbrd);
+ }
+ }
+ pop.show(this, evt.getX(), evt.getY());
+
}
/**
* @param evt
* DOCUMENT ME!
*/
+ @Override
public void mouseReleased(MouseEvent evt)
{
int start = selectedRow;
* @param evt
* DOCUMENT ME!
*/
+ @Override
public void mouseEntered(MouseEvent evt)
{
if (evt.getY() < 10)
* @param evt
* DOCUMENT ME!
*/
+ @Override
public void mouseExited(MouseEvent evt)
{
if (dragEvent == null)
* @param evt
* DOCUMENT ME!
*/
+ @Override
public void mouseDragged(MouseEvent evt)
{
dragEvent = evt;
* @param evt
* DOCUMENT ME!
*/
+ @Override
public void mouseMoved(MouseEvent evt)
{
resizePanel = evt.getY() < 10;
}
}
- /**
- * DOCUMENT ME!
- *
- * @param evt
- * DOCUMENT ME!
- */
+ @Override
public void mouseClicked(MouseEvent evt)
{
final AlignmentAnnotation[] aa = ap.av.getAlignment()
.getAlignmentAnnotation();
- if (SwingUtilities.isLeftMouseButton(evt))
+ if (!evt.isPopupTrigger() && SwingUtilities.isLeftMouseButton(evt))
{
if (selectedRow > -1 && selectedRow < aa.length)
{
}
}
- }
- if (!SwingUtilities.isRightMouseButton(evt))
- {
- return;
- }
-
- JPopupMenu pop = new JPopupMenu(
- MessageManager.getString("label.annotations"));
- JMenuItem item = new JMenuItem(ADDNEW);
- item.addActionListener(this);
- pop.add(item);
- if (selectedRow < 0)
- {
- if (hasHiddenRows)
- { // let the user make everything visible again
- item = new JMenuItem(SHOWALL);
- item.addActionListener(this);
- pop.add(item);
- }
- pop.show(this, evt.getX(), evt.getY());
return;
}
- item = new JMenuItem(EDITNAME);
- item.addActionListener(this);
- pop.add(item);
- item = new JMenuItem(HIDE);
- item.addActionListener(this);
- pop.add(item);
- // JAL-1264 hide all sequence-specific annotations of this type
- if (selectedRow < aa.length)
- {
- if (aa[selectedRow].sequenceRef != null)
- {
- final String label = aa[selectedRow].label;
- JMenuItem hideType = new JMenuItem();
- String text = MessageManager.getString("label.hide_all") + " "
- + label;
- hideType.setText(text);
- hideType.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- AlignmentUtils.showOrHideSequenceAnnotations(
- ap.av.getAlignment(), Collections.singleton(label),
- null, false, false);
- // for (AlignmentAnnotation ann : ap.av.getAlignment()
- // .getAlignmentAnnotation())
- // {
- // if (ann.sequenceRef != null && ann.label != null
- // && ann.label.equals(label))
- // {
- // ann.visible = false;
- // }
- // }
- refresh();
- }
- });
- pop.add(hideType);
- }
- }
- item = new JMenuItem(DELETE);
- item.addActionListener(this);
- pop.add(item);
- if (hasHiddenRows)
- {
- item = new JMenuItem(SHOWALL);
- item.addActionListener(this);
- pop.add(item);
- }
- item = new JMenuItem(OUTPUT_TEXT);
- item.addActionListener(this);
- pop.add(item);
- // TODO: annotation object should be typed for autocalculated/derived
- // property methods
- if (selectedRow < aa.length)
- {
- final String label = aa[selectedRow].label;
- if (!aa[selectedRow].autoCalculated)
- {
- if (aa[selectedRow].graph == AlignmentAnnotation.NO_GRAPH)
- {
- // display formatting settings for this row.
- pop.addSeparator();
- // av and sequencegroup need to implement same interface for
- item = new JCheckBoxMenuItem(TOGGLE_LABELSCALE,
- aa[selectedRow].scaleColLabel);
- item.addActionListener(this);
- pop.add(item);
- }
- }
- else if (label.indexOf("Consensus") > -1)
- {
- pop.addSeparator();
- // av and sequencegroup need to implement same interface for
- final JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(
- MessageManager.getString("label.ignore_gaps_consensus"),
- (aa[selectedRow].groupRef != null) ? aa[selectedRow].groupRef
- .getIgnoreGapsConsensus() : ap.av
- .isIgnoreGapsConsensus());
- final AlignmentAnnotation aaa = aa[selectedRow];
- cbmi.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- if (aaa.groupRef != null)
- {
- // TODO: pass on reference to ap so the view can be updated.
- aaa.groupRef.setIgnoreGapsConsensus(cbmi.getState());
- ap.getAnnotationPanel().paint(
- ap.getAnnotationPanel().getGraphics());
- }
- else
- {
- ap.av.setIgnoreGapsConsensus(cbmi.getState(), ap);
- }
- }
- });
- pop.add(cbmi);
- // av and sequencegroup need to implement same interface for
- if (aaa.groupRef != null)
- {
- final JCheckBoxMenuItem chist = new JCheckBoxMenuItem(
- MessageManager.getString("label.show_group_histogram"),
- aa[selectedRow].groupRef.isShowConsensusHistogram());
- chist.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- // TODO: pass on reference
- // to ap
- // so the
- // view
- // can be
- // updated.
- aaa.groupRef.setShowConsensusHistogram(chist.getState());
- ap.repaint();
- // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
- }
- });
- pop.add(chist);
- final JCheckBoxMenuItem cprofl = new JCheckBoxMenuItem(
- MessageManager.getString("label.show_group_logo"),
- aa[selectedRow].groupRef.isShowSequenceLogo());
- cprofl.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- // TODO: pass on reference
- // to ap
- // so the
- // view
- // can be
- // updated.
- aaa.groupRef.setshowSequenceLogo(cprofl.getState());
- ap.repaint();
- // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
- }
- });
- pop.add(cprofl);
- final JCheckBoxMenuItem cproflnorm = new JCheckBoxMenuItem(
- MessageManager.getString("label.normalise_group_logo"),
- aa[selectedRow].groupRef.isNormaliseSequenceLogo());
- cproflnorm.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
-
- // TODO: pass on reference
- // to ap
- // so the
- // view
- // can be
- // updated.
- aaa.groupRef.setNormaliseSequenceLogo(cproflnorm.getState());
- // automatically enable logo display if we're clicked
- aaa.groupRef.setshowSequenceLogo(true);
- ap.repaint();
- // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
- }
- });
- pop.add(cproflnorm);
- }
- else
- {
- final JCheckBoxMenuItem chist = new JCheckBoxMenuItem(
- MessageManager.getString("label.show_histogram"),
- av.isShowConsensusHistogram());
- chist.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- // TODO: pass on reference
- // to ap
- // so the
- // view
- // can be
- // updated.
- av.setShowConsensusHistogram(chist.getState());
- ap.alignFrame.setMenusForViewport();
- ap.repaint();
- // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
- }
- });
- pop.add(chist);
- final JCheckBoxMenuItem cprof = new JCheckBoxMenuItem(
- MessageManager.getString("label.show_logo"),
- av.isShowSequenceLogo());
- cprof.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- // TODO: pass on reference
- // to ap
- // so the
- // view
- // can be
- // updated.
- av.setShowSequenceLogo(cprof.getState());
- ap.alignFrame.setMenusForViewport();
- ap.repaint();
- // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
- }
- });
- pop.add(cprof);
- final JCheckBoxMenuItem cprofnorm = new JCheckBoxMenuItem(
- MessageManager.getString("label.normalise_logo"),
- av.isNormaliseSequenceLogo());
- cprofnorm.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- // TODO: pass on reference
- // to ap
- // so the
- // view
- // can be
- // updated.
- av.setShowSequenceLogo(true);
- av.setNormaliseSequenceLogo(cprofnorm.getState());
- ap.alignFrame.setMenusForViewport();
- ap.repaint();
- // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
- }
- });
- pop.add(cprofnorm);
- }
- final JMenuItem consclipbrd = new JMenuItem(COPYCONS_SEQ);
- consclipbrd.addActionListener(this);
- pop.add(consclipbrd);
- }
- }
- pop.show(this, evt.getX(), evt.getY());
}
/**
List<int[]> hiddenCols = av.getColumnSelection().getHiddenColumns();
if (hiddenCols != null)
{
- alignmentStartEnd = AlignFrame.getStartEnd(alignmentStartEnd,
+ alignmentStartEnd = av.getAlignment().getVisibleStartAndEndIndex(
hiddenCols);
}
String output = new FormatAdapter().formatSequences("Fasta", seqs,
* @param g1
* DOCUMENT ME!
*/
+ @Override
public void paintComponent(Graphics g)
{
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.Scrollable;
-import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
/**
}
}
- if (SwingUtilities.isRightMouseButton(evt) && activeRow != -1)
+ if (evt.isPopupTrigger() && activeRow != -1)
{
if (av.getColumnSelection() == null)
{
import jalview.api.StructureSelectionManagerProvider;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
+import jalview.io.StructureFile;
import jalview.structure.StructureSelectionManager;
import jalview.util.MessageManager;
StructureSelectionManagerProvider ssmp)
{
PDBEntry entry = new PDBEntry();
- MCview.PDBfile pdbfile = null;
+ StructureFile pdbfile = null;
pdbfile = StructureSelectionManager.getStructureSelectionManager(ssmp)
.setMapping(false, new SequenceI[] { sequence }, null, choice,
protocol);
// stacktrace already thrown so just return
return null;
}
- if (pdbfile.id == null)
+ if (pdbfile.getId() == null)
{
String reply = null;
}
else
{
- entry.setId(pdbfile.id);
+ entry.setId(pdbfile.getId());
}
entry.setType(PDBEntry.Type.FILE);
this.addInternalFrameListener(new InternalFrameAdapter()
{
+ @Override
public void internalFrameClosing(InternalFrameEvent internalFrameEvent)
{
closeViewer(false);
MessageManager.getString("label.all"));
menuItem.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent evt)
{
allChainsSelected = true;
menuItem = new JCheckBoxMenuItem(chainName, true);
menuItem.addItemListener(new ItemListener()
{
+ @Override
public void itemStateChanged(ItemEvent evt)
{
if (!allChainsSelected)
* @param closeChimera
* if true, close any linked Chimera process; if false, prompt first
*/
+ @Override
public void closeViewer(boolean closeChimera)
{
if (jmb != null && jmb.isChimeraRunning())
* Open any newly added PDB structures in Chimera, having first fetched data
* from PDB (if not already saved).
*/
+ @Override
public void run()
{
_started = true;
{
new Thread(new Runnable()
{
+ @Override
public void run()
{
alignStructs_withAllAlignPanels();
}
}
+ @Override
public void setJalviewColourScheme(ColourSchemeI ucs)
{
jmb.setJalviewColourScheme(ucs);
});
SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
textarea.requestFocus();
textarea.setText(text);
}
+ @Override
public void save_actionPerformed(ActionEvent e)
{
JalviewFileChooser chooser = new JalviewFileChooser(
}
}
+ @Override
public void toggleHtml_actionPerformed(ActionEvent e)
{
String txt = textarea.getText();
* @param e
* DOCUMENT ME!
*/
+ @Override
public void copyItem_actionPerformed(ActionEvent e)
{
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
* @param e
* DOCUMENT ME!
*/
+ @Override
public void cancel_actionPerformed(ActionEvent e)
{
try
}
}
+ @Override
public void textarea_mousePressed(MouseEvent e)
{
- if (SwingUtilities.isRightMouseButton(e))
+ if (e.isPopupTrigger())
{
JPopupMenu popup = new JPopupMenu(
MessageManager.getString("action.edit"));
MessageManager.getString("action.copy"));
item.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
copyItem_actionPerformed(e);
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
import jalview.api.ComplexAlignFile;
+import jalview.api.FeatureSettingsModelI;
import jalview.api.FeaturesDisplayedI;
+import jalview.api.FeaturesSourceI;
import jalview.bin.Jalview;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.ColumnSelection;
{
SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
textarea.requestFocus();
textarea.append(text);
}
+ @Override
public void save_actionPerformed(ActionEvent e)
{
JalviewFileChooser chooser = new JalviewFileChooser(
* @param e
* DOCUMENT ME!
*/
+ @Override
public void copyItem_actionPerformed(ActionEvent e)
{
textarea.getSelectedText();
* @param e
* DOCUMENT ME!
*/
+ @Override
public void pasteMenu_actionPerformed(ActionEvent e)
{
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
* @param e
* DOCUMENT ME!
*/
+ @Override
public void ok_actionPerformed(ActionEvent e)
{
String text = getText();
return;
}
- String format = new IdentifyFile().Identify(text, "Paste");
+ String format = new IdentifyFile().identify(text, "Paste");
if (format == null || format.equalsIgnoreCase("EMPTY DATA FILE"))
{
System.err.println(MessageManager
{
String title = MessageManager.formatMessage(
"label.input_cut_paste_params", new String[] { format });
- if (viewport != null)
+ FeatureSettingsModelI proxyColourScheme = source
+ .getFeatureColourScheme();
+
+ /*
+ * if the view panel was closed its alignment is nulled
+ * and this is an orphaned cut and paste window
+ */
+ if (viewport != null && viewport.getAlignment() != null)
{
+ if (proxyColourScheme != null)
+ {
+ viewport.applyFeaturesStyle(proxyColourScheme);
+ }
((AlignViewport) viewport).addAlignment(al, title);
}
else
{
af = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT);
+ if (source instanceof FeaturesSourceI)
+ {
+ af.getViewport().setShowSequenceFeatures(true);
+ }
+ }
+ if (proxyColourScheme != null)
+ {
+ af.getViewport().applyFeaturesStyle(proxyColourScheme);
}
-
af.currentFileFormat = format;
Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT);
* @param e
* DOCUMENT ME!
*/
+ @Override
public void cancel_actionPerformed(ActionEvent e)
{
try
}
}
+ @Override
public void textarea_mousePressed(MouseEvent e)
{
- if (SwingUtilities.isRightMouseButton(e))
+ if (e.isPopupTrigger())
{
JPopupMenu popup = new JPopupMenu(
MessageManager.getString("action.edit"));
MessageManager.getString("action.copy"));
item.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
copyItem_actionPerformed(e);
item = new JMenuItem(MessageManager.getString("action.paste"));
item.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
pasteMenu_actionPerformed(e);
ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener()
{
+ @Override
public void valueChanged(ListSelectionEvent e)
{
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
table.addMouseListener(new MouseAdapter()
{
+ @Override
public void mouseClicked(MouseEvent evt)
{
- if (evt.getClickCount() == 2
- || SwingUtilities.isRightMouseButton(evt))
+ if (evt.getClickCount() == 2 || evt.isPopupTrigger())
{
editRemoveLocalSource(evt);
}
this(null);
}
+ @Override
public void paintComponent(java.awt.Graphics g)
{
if (sourceRegistry == null)
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
TableSorter sorter = (TableSorter) table.getModel();
fullDetails.setText(text.toString());
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
fullDetailsScrollpane.getVerticalScrollBar().setValue(0);
});
}
+ @Override
public void run()
{
loadingDasSources = true;
return selected;
}
+ @Override
public void refresh_actionPerformed(ActionEvent e)
{
saveProperties(jalview.bin.Cache.applicationProperties);
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
filter1.setSelectedIndex(0);
});
}
+ @Override
public void amendLocal(boolean newSource)
{
String url = "http://localhost:8080/", nickname = "";
SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
scrollPane.getVerticalScrollBar().setValue(
refreshTableData(data);
SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
scrollPane.getVerticalScrollBar().setValue(
}
}
+ @Override
public void valueChanged(ListSelectionEvent evt)
{
// Called when the MainTable selection changes
}
}
+ @Override
public void reset_actionPerformed(ActionEvent e)
{
registryURL.setText(sourceRegistry.getDasRegistryURL());
private Object[][] data;
+ @Override
public int getColumnCount()
{
return columnNames.length;
}
+ @Override
public int getRowCount()
{
return data.length;
}
+ @Override
public String getColumnName(int col)
{
return columnNames[col];
}
+ @Override
public Object getValueAt(int row, int col)
{
return data[row][col];
* each cell. If we didn't implement this method, then the last column would
* contain text ("true"/"false"), rather than a check box.
*/
+ @Override
public Class getColumnClass(int c)
{
return getValueAt(0, c).getClass();
/*
* Don't need to implement this method unless your table's editable.
*/
+ @Override
public boolean isCellEditable(int row, int col)
{
// Note that the data/cell address is constant,
/*
* Don't need to implement this method unless your table's data can change.
*/
+ @Override
public void setValueAt(Object value, int row, int col)
{
data[row][col] = value;
Thread thr = new Thread(new Runnable()
{
+ @Override
public void run()
{
// this actually initialises the das source list
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
+import java.awt.Window;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
-import java.lang.reflect.Constructor;
import java.net.URL;
import java.util.ArrayList;
import java.util.Hashtable;
*/
instance = this;
doVamsasClientCheck();
- doGroovyCheck();
+
+ groovyShell = new JMenuItem();
+ groovyShell.setText(MessageManager.getString("label.groovy_console"));
+ groovyShell.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ groovyShell_actionPerformed();
+ }
+ });
+ toolsMenu.add(groovyShell);
+ groovyShell.setVisible(true);
+
doConfigureStructurePrefs();
setTitle("Jalview " + jalview.bin.Cache.getProperty("VERSION"));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
@Override
public void mousePressed(MouseEvent evt)
{
- if (SwingUtilities.isRightMouseButton(evt))
+ if (evt.isPopupTrigger())
{
showPasteMenu(evt.getX(), evt.getY());
}
String file = (String) contents
.getTransferData(DataFlavor.stringFlavor);
- String format = new IdentifyFile().Identify(file,
+ String format = new IdentifyFile().identify(file,
FormatAdapter.PASTE);
new FileLoader().LoadFile(file, FormatAdapter.PASTE, format);
}
else
{
- format = new IdentifyFile().Identify(file, protocol);
+ format = new IdentifyFile().identify(file, protocol);
}
new FileLoader().LoadFile(file, protocol, format);
}
else
{
- format = new IdentifyFile().Identify(choice, FormatAdapter.FILE);
+ format = new IdentifyFile().identify(choice, FormatAdapter.FILE);
}
if (viewport != null)
{
new FileLoader().LoadFile(viewport, choice, FormatAdapter.FILE,
format);
- // viewport.setShowSequenceFeatures(JSONFile.isSeqFeaturesEnabled());
- // AlignFrame af = viewport.getAlignPanel().alignFrame;
- // if (af != null)
- // {
- // af.changeColour(JSONFile.getColourScheme());
- // af.setMenusForViewport();
- // }
}
else
{
}
else
{
- String format = new IdentifyFile().Identify(url, FormatAdapter.URL);
+ String format = new IdentifyFile().identify(url, FormatAdapter.URL);
if (format.equals("URL NOT FOUND"))
{
protected JMenuItem groovyShell;
- public void doGroovyCheck()
- {
- if (jalview.bin.Cache.groovyJarsPresent())
- {
- groovyShell = new JMenuItem();
- groovyShell.setText(MessageManager.getString("label.groovy_console"));
- groovyShell.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- groovyShell_actionPerformed();
- }
- });
- toolsMenu.add(groovyShell);
- groovyShell.setVisible(true);
- }
- }
-
/**
* Accessor method to quickly get all the AlignmentFrames loaded.
*
*/
public void groovyShell_actionPerformed()
{
- // use reflection to avoid creating compilation dependency.
- if (!jalview.bin.Cache.groovyJarsPresent())
- {
- throw new Error(
- MessageManager
- .getString("error.implementation_error_cannot_create_groovyshell"));
- }
try
{
- Class<?> gcClass = Desktop.class.getClassLoader().loadClass(
- "groovy.ui.Console");
- Constructor<?> gccons = gcClass.getConstructor();
- java.lang.reflect.Method setvar = gcClass.getMethod("setVariable",
- new Class[] { String.class, Object.class });
- java.lang.reflect.Method run = gcClass.getMethod("run");
- Object gc = gccons.newInstance();
- setvar.invoke(gc, new Object[] { "Jalview", this });
- run.invoke(gc);
+ openGroovyConsole();
} catch (Exception ex)
{
jalview.bin.Cache.log.error("Groovy Shell Creation failed.", ex);
}
/**
+ * Open the Groovy console
+ */
+ void openGroovyConsole()
+ {
+ groovyConsole = new groovy.ui.Console();
+
+ /*
+ * bind groovy variable 'Jalview' to the Desktop object
+ */
+ groovyConsole.setVariable("Jalview", this);
+
+ /*
+ * start the console
+ */
+ groovyConsole.run();
+
+ /*
+ * Allow only one console at a time, so that the AlignFrame menu option
+ * 'Calculate | Run Groovy script' is unambiguous.
+ * Disable 'new console', and enable 'Run script', when the console is
+ * opened, and the reverse when it is closed
+ */
+ Window window = (Window) groovyConsole.getFrame();
+ window.addWindowListener(new WindowAdapter()
+ {
+ @Override
+ public void windowClosed(WindowEvent e)
+ {
+ groovyShell.setEnabled(true);
+ enableExecuteGroovy(false);
+ }
+ });
+
+ /*
+ * if we got this far, enable 'Run Groovy' in AlignFrame menus
+ * and disable opening a second console
+ */
+ groovyShell.setEnabled(false);
+ enableExecuteGroovy(true);
+ }
+
+ /**
+ * Enable or disable 'Run Groovy script' in AlignFrame calculate menus
+ *
+ * @param enabled
+ */
+ public void enableExecuteGroovy(boolean enabled)
+ {
+ AlignFrame[] alignFrames = getAlignFrames();
+ if (alignFrames != null)
+ {
+ for (AlignFrame af : alignFrames)
+ {
+ af.setGroovyEnabled(enabled);
+ }
+ }
+ }
+
+ /**
* Progress bars managed by the IProgressIndicator method.
*/
private Hashtable<Long, JPanel> progressBars;
*/
private java.util.concurrent.Semaphore block = new Semaphore(0);
+ private static groovy.ui.Console groovyConsole;
+
/**
* add another dialog thread to the queue
*
Desktop.currentAlignFrame = currentAlignFrame;
}
+ public static groovy.ui.Console getGroovyConsole()
+ {
+ return groovyConsole;
+ }
+
}
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.util.Arrays;
+import java.util.Comparator;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
FeatureSettings.renderGraduatedColor(colour, col);
}
}
+
+ /**
+ * Orders features in render precedence (last in order is last to render, so
+ * displayed on top of other features)
+ *
+ * @param order
+ */
+ public void orderFeatures(Comparator<String> order)
+ {
+ Arrays.sort(renderOrder, order);
+ }
}
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
+import java.util.Arrays;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
int newRow = table.rowAtPoint(evt.getPoint());
if (newRow != selectedRow && selectedRow != -1 && newRow != -1)
{
- Object[] temp = new Object[3];
- temp[0] = table.getValueAt(selectedRow, 0);
- temp[1] = table.getValueAt(selectedRow, 1);
- temp[2] = table.getValueAt(selectedRow, 2);
-
- table.setValueAt(table.getValueAt(newRow, 0), selectedRow, 0);
- table.setValueAt(table.getValueAt(newRow, 1), selectedRow, 1);
- table.setValueAt(table.getValueAt(newRow, 2), selectedRow, 2);
-
- table.setValueAt(temp[0], newRow, 0);
- table.setValueAt(temp[1], newRow, 1);
- table.setValueAt(temp[2], newRow, 2);
-
+ Object[][] data = ((FeatureTableModel) table.getModel())
+ .getData();
+ Object[] temp = data[selectedRow];
+ data[selectedRow] = data[newRow];
+ data[newRow] = temp;
+ updateFeatureRenderer(data);
+ table.repaint();
selectedRow = newRow;
}
}
frame.setLayer(JLayeredPane.PALETTE_LAYER);
}
- protected void popupSort(final int row, final String type,
+ protected void popupSort(final int selectedRow, final String type,
final Object typeCol, final Map<String, float[][]> minmax, int x,
int y)
{
@Override
public void actionPerformed(ActionEvent e)
{
- me.af.avc.sortAlignmentByFeatureScore(new String[] { type });
+ me.af.avc.sortAlignmentByFeatureScore(Arrays
+ .asList(new String[] { type }));
}
});
@Override
public void actionPerformed(ActionEvent e)
{
- me.af.avc.sortAlignmentByFeatureDensity(new String[] { type });
+ me.af.avc.sortAlignmentByFeatureDensity(Arrays
+ .asList(new String[] { type }));
}
});
{
FeatureColourChooser fc = (FeatureColourChooser) e
.getSource();
- table.setValueAt(fc.getLastColour(), row, 1);
+ table.setValueAt(fc.getLastColour(), selectedRow, 1);
table.validate();
}
else
{
// probably the color chooser!
- table.setValueAt(colorChooser.getColor(), row, 1);
+ table.setValueAt(colorChooser.getColor(), selectedRow, 1);
table.validate();
me.updateFeatureRenderer(
((FeatureTableModel) table.getModel()).getData(),
MessageManager.getString("label.select_columns_containing"));
selCols.addActionListener(new ActionListener()
{
-
@Override
public void actionPerformed(ActionEvent arg0)
{
MessageManager.getString("label.select_columns_not_containing"));
clearCols.addActionListener(new ActionListener()
{
-
@Override
public void actionPerformed(ActionEvent arg0)
{
false, type);
}
});
+ JMenuItem hideCols = new JMenuItem(
+ MessageManager.getString("label.hide_columns_containing"));
+ hideCols.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent arg0)
+ {
+ fr.ap.alignFrame.hideFeatureColumns(type, true);
+ }
+ });
+ JMenuItem hideOtherCols = new JMenuItem(
+ MessageManager.getString("label.hide_columns_not_containing"));
+ hideOtherCols.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent arg0)
+ {
+ fr.ap.alignFrame.hideFeatureColumns(type, false);
+ }
+ });
men.add(selCols);
men.add(clearCols);
+ men.add(hideCols);
+ men.add(hideOtherCols);
men.show(table, x, y);
}
void save()
{
JalviewFileChooser chooser = new JalviewFileChooser(
- jalview.bin.Cache.getProperty("LAST_DIRECTORY"),
+ Cache.getProperty("LAST_DIRECTORY"),
new String[] { "fc" },
new String[] { "Sequence Feature Colours" },
"Sequence Feature Colours");
updateFeatureRenderer(data, true);
}
+ /**
+ * Update the priority order of features; only repaint if this changed the
+ * order of visible features
+ *
+ * @param data
+ * @param visibleNew
+ */
private void updateFeatureRenderer(Object[][] data, boolean visibleNew)
{
- fr.setFeaturePriority(data, visibleNew);
- af.alignPanel.paintAlignment(true);
+ if (fr.setFeaturePriority(data, visibleNew))
+ {
+ af.alignPanel.paintAlignment(true);
+ }
}
int selectedRow = -1;
* @param g
* DOCUMENT ME!
*/
+ @Override
public void paintComponent(Graphics g)
{
g.setColor(Color.white);
Font bold = new Font(av.getFont().getName(), Font.BOLD, av.getFont()
.getSize());
- if (av.isHiddenRepSequence(seq))
+ if (av.isReferenceSeq(seq) || av.isHiddenRepSequence(seq))
{
gg.setFont(bold);
}
seqAnnotReport.createSequenceAnnotationReport(tip, sequence,
av.isShowDBRefs(), av.isShowNPFeats(),
sp.seqCanvas.fr.getMinMax());
- setToolTipText("<html>" + sequence.getDisplayId(true) + " "
- + tip.toString() + "</html>");
+ setToolTipText(JvSwingUtils.wrapTooltip(true,
+ sequence.getDisplayId(true) + " " + tip.toString()));
}
}
*/
if (e.getClickCount() < 2 || SwingUtilities.isRightMouseButton(e))
{
+ // reinstate isRightMouseButton check to ignore mouse-related popup events
+ // note - this does nothing on default MacBookPro force-trackpad config!
return;
}
int seq = alignPanel.getSeqPanel().findSeq(e);
- if (SwingUtilities.isRightMouseButton(e))
+ if (e.isPopupTrigger())
{
Sequence sq = (Sequence) av.getAlignment().getSequenceAt(seq);
// build a new links menu based on the current links + any non-positional
// features
- Vector nlinks = new Vector(Preferences.sequenceURLLinks);
- SequenceFeature sf[] = sq == null ? null : sq.getSequenceFeatures();
- for (int sl = 0; sf != null && sl < sf.length; sl++)
+ Vector<String> nlinks = new Vector<String>(
+ Preferences.sequenceURLLinks);
+ SequenceFeature sfs[] = sq == null ? null : sq.getSequenceFeatures();
+ if (sfs != null)
{
- if (sf[sl].begin == sf[sl].end && sf[sl].begin == 0)
+ for (SequenceFeature sf : sfs)
{
- if (sf[sl].links != null && sf[sl].links.size() > 0)
+ if (sf.begin == sf.end && sf.begin == 0)
{
- for (int l = 0, lSize = sf[sl].links.size(); l < lSize; l++)
+ if (sf.links != null && sf.links.size() > 0)
{
- nlinks.addElement(sf[sl].links.elementAt(l));
+ for (int l = 0, lSize = sf.links.size(); l < lSize; l++)
+ {
+ nlinks.addElement(sf.links.elementAt(l));
+ }
}
}
}
}
- jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(alignPanel, sq,
- nlinks, new Vector(Preferences.getGroupURLLinks()));
+ PopupMenu pop = new PopupMenu(alignPanel, sq, nlinks,
+ Preferences.getGroupURLLinks());
pop.show(this, e.getX(), e.getY());
return;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
+import javax.swing.ToolTipManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
public DbTreeRenderer(JDatabaseTree me)
{
us = me;
+ ToolTipManager.sharedInstance().registerComponent(dbviews);
}
private Component returnLabel(String txt)
value = vl.getUserObject();
if (value instanceof DbSourceProxy)
{
- val = (((DbSourceProxy) value).getDbName());
+ val = ((DbSourceProxy) value).getDbName();
+ if (((DbSourceProxy) value).getDescription() != null)
+ { // getName()
+ this.setToolTipText(((DbSourceProxy) value).getDescription());
+ }
}
else
{
if (value instanceof String)
{
- val = ((String) value);
+ val = (String) value;
}
}
}
if (value == null)
{
- val = ("");
+ val = "";
}
return super.getTreeCellRendererComponent(tree, val, selected,
expanded, leaf, row, hasFocus);
*/
Map<String, SequenceI> seqRefIds = null;
- Vector frefedSequence = null;
+ Vector<Object[]> frefedSequence = null;
boolean raiseGUI = true; // whether errors are raised in dialog boxes or not
int r = 0, rSize = frefedSequence.size();
while (r < rSize)
{
- Object[] ref = (Object[]) frefedSequence.elementAt(r);
+ Object[] ref = frefedSequence.elementAt(r);
if (ref != null)
{
String sref = (String) ref[0];
if (sf[index].otherDetails != null)
{
String key;
- Enumeration keys = sf[index].otherDetails.keys();
- while (keys.hasMoreElements())
+ Iterator<String> keys = sf[index].otherDetails.keySet()
+ .iterator();
+ while (keys.hasNext())
{
- key = keys.nextElement().toString();
+ key = keys.next();
OtherData keyValue = new OtherData();
keyValue.setKey(key);
keyValue.setValue(sf[index].otherDetails.get(key).toString());
// SAVE MAPPINGS
if (jal.getCodonFrames() != null)
{
- Set<AlignedCodonFrame> jac = jal.getCodonFrames();
+ List<AlignedCodonFrame> jac = jal.getCodonFrames();
for (AlignedCodonFrame acf : jac)
{
AlcodonFrame alc = new AlcodonFrame();
Vector<String> settingsAdded = new Vector<String>();
if (renderOrder != null)
{
- for (int ro = 0; ro < renderOrder.length; ro++)
+ for (String featureType : renderOrder)
{
- FeatureColourI gstyle = ap.getSeqPanel().seqCanvas
+ FeatureColourI fcol = ap.getSeqPanel().seqCanvas
.getFeatureRenderer()
- .getFeatureStyle(renderOrder[ro]);
+ .getFeatureStyle(featureType);
Setting setting = new Setting();
- setting.setType(renderOrder[ro]);
- if (!gstyle.isSimpleColour())
+ setting.setType(featureType);
+ if (!fcol.isSimpleColour())
{
- setting.setColour(gstyle.getMaxColour().getRGB());
- setting.setMincolour(gstyle.getMinColour().getRGB());
- setting.setMin(gstyle.getMin());
- setting.setMax(gstyle.getMax());
- setting.setColourByLabel(gstyle.isColourByLabel());
- setting.setAutoScale(gstyle.isAutoScaled());
- setting.setThreshold(gstyle.getThreshold());
+ setting.setColour(fcol.getMaxColour().getRGB());
+ setting.setMincolour(fcol.getMinColour().getRGB());
+ setting.setMin(fcol.getMin());
+ setting.setMax(fcol.getMax());
+ setting.setColourByLabel(fcol.isColourByLabel());
+ setting.setAutoScale(fcol.isAutoScaled());
+ setting.setThreshold(fcol.getThreshold());
// -1 = No threshold, 0 = Below, 1 = Above
- setting.setThreshstate(gstyle.isAboveThreshold() ? 1
- : (gstyle.isBelowThreshold() ? 0 : -1));
+ setting.setThreshstate(fcol.isAboveThreshold() ? 1
+ : (fcol.isBelowThreshold() ? 0 : -1));
}
else
{
- setting.setColour(gstyle.getColour().getRGB());
+ setting.setColour(fcol.getColour().getRGB());
}
setting.setDisplay(av.getFeaturesDisplayed().isVisible(
- renderOrder[ro]));
+ featureType));
float rorder = ap.getSeqPanel().seqCanvas.getFeatureRenderer()
- .getOrder(renderOrder[ro]);
+ .getOrder(featureType);
if (rorder > -1)
{
setting.setOrder(rorder);
}
fs.addSetting(setting);
- settingsAdded.addElement(renderOrder[ro]);
+ settingsAdded.addElement(featureType);
}
}
Vector<String> groupsAdded = new Vector<String>();
while (en.hasNext())
{
- String grp = en.next().toString();
+ String grp = en.next();
if (groupsAdded.contains(grp))
{
continue;
}
if (frefedSequence == null)
{
- frefedSequence = new Vector();
+ frefedSequence = new Vector<Object[]>();
}
AlignFrame af = null, _af = null;
{
mapping = addMapping(maps[m].getMapping());
}
- if (dnaseq != null)
+ if (dnaseq != null && mapping.getTo() != null)
{
cf.addMap(dnaseq, mapping.getTo(), mapping.getMap());
}
add(enabled, BorderLayout.NORTH);
for (Object str : opt.getPossibleValues())
{
- val.addItem((String) str);
+ val.addItem(str);
}
- val.setSelectedItem((String) opt.getValue());
+ val.setSelectedItem(opt.getValue());
if (opt.getPossibleValues().size() > 1)
{
setLayout(new GridLayout(1, 2));
setInitialValue();
}
+ @Override
public void actionPerformed(ActionEvent e)
{
if (e.getSource() != enabled)
return opt;
}
+ @Override
public void mouseClicked(MouseEvent e)
{
- if (javax.swing.SwingUtilities.isRightMouseButton(e))
+ if (e.isPopupTrigger())
{
showUrlPopUp(this, finfo.toString(), e.getX(), e.getY());
}
}
+ @Override
public void mouseEntered(MouseEvent e)
{
// TODO Auto-generated method stub
}
+ @Override
public void mouseExited(MouseEvent e)
{
// TODO Auto-generated method stub
}
+ @Override
public void mousePressed(MouseEvent e)
{
// TODO Auto-generated method stub
}
+ @Override
public void mouseReleased(MouseEvent e)
{
// TODO Auto-generated method stub
showDesc.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
descisvisible = !descisvisible;
validate();
}
+ @Override
public void actionPerformed(ActionEvent e)
{
if (adjusting)
lastVal = null;
}
+ @Override
public void mouseClicked(MouseEvent e)
{
- if (javax.swing.SwingUtilities.isRightMouseButton(e))
+ if (e.isPopupTrigger())
{
showUrlPopUp(this, finfo.toString(), e.getX(), e.getY());
}
}
+ @Override
public void mouseEntered(MouseEvent e)
{
// TODO Auto-generated method stub
}
+ @Override
public void mouseExited(MouseEvent e)
{
// TODO Auto-generated method stub
}
+ @Override
public void mousePressed(MouseEvent e)
{
// TODO Auto-generated method stub
}
+ @Override
public void mouseReleased(MouseEvent e)
{
// TODO Auto-generated method stub
}
+ @Override
public void stateChanged(ChangeEvent e)
{
if (!adjusting)
{
valueField.setText(""
- + ((integ) ? ("" + (int) slider.getValue())
- : ("" + (float) (slider.getValue() / 1000f))));
+ + ((integ) ? ("" + slider.getValue())
+ : ("" + slider.getValue() / 1000f)));
checkIfModified();
}
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-
-package jalview.gui;
-
-import jalview.jbgui.GPDBSearchPanel;
-import jalview.jbgui.PDBDocFieldPreferences;
-import jalview.util.MessageManager;
-import jalview.ws.dbsources.PDBRestClient;
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
-import jalview.ws.uimodel.PDBRestRequest;
-import jalview.ws.uimodel.PDBRestResponse;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-
-import javax.swing.table.DefaultTableModel;
-
-@SuppressWarnings("serial")
-public class PDBSearchPanel extends GPDBSearchPanel
-{
- private SequenceFetcher seqFetcher;
-
- private IProgressIndicator progressIdicator;
-
- private Collection<PDBDocField> wantedFields;
-
- public PDBSearchPanel(SequenceFetcher seqFetcher)
- {
- this.seqFetcher = seqFetcher;
- this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
- .getProgressIndicator();
- }
-
- /**
- * Action performed when an input is detected on txt_search field.
- */
- @Override
- public void txt_search_ActionPerformed()
- {
- new Thread()
- {
- public void run()
- {
- lbl_loading.setVisible(false);
- errorWarning.setLength(0);
- lbl_warning.setVisible(false);
- btn_ok.setEnabled(false);
- boolean allowEmptySequence = false;
- mainFrame.setTitle(MessageManager
- .getString("label.pdb_sequence_getcher"));
- tbl_summary.setModel(new DefaultTableModel());
- if (txt_search.getText().trim().length() > 0)
- {
- lbl_loading.setVisible(true);
- long startTime = System.currentTimeMillis();
-
- String searchTarget = ((PDBDocField) cmb_searchTarget
- .getSelectedItem()).getCode();
-
- wantedFields = PDBDocFieldPreferences.getSearchSummaryFields();
-
- String searchTerm = decodeSearchTerm(txt_search.getText(),
- searchTarget);
-
- PDBRestRequest request = new PDBRestRequest();
- request.setAllowEmptySeq(allowEmptySequence);
- request.setResponseSize(100);
- request.setFieldToSearchBy("(" + searchTarget + ":");
- request.setSearchTerm(searchTerm + ")");
- request.setWantedFields(wantedFields);
- // System.out.println(">>>>>>>>>>>>>> " + request.getQuery());
- PDBRestClient pdbRestCleint = new PDBRestClient();
- PDBRestResponse resultList;
- try
- {
- resultList = pdbRestCleint.executeRequest(request);
- } catch (Exception e)
- {
- // e.printStackTrace();
- errorWarning.append(e.getMessage());
- checkForErrors();
- return;
- }
-
- if (resultList.getSearchSummary() != null)
- {
- tbl_summary.setModel(PDBRestResponse.getTableModel(request,
- resultList.getSearchSummary()));
- }
-
- long endTime = System.currentTimeMillis();
- int resultSetCount = resultList.getNumberOfItemsFound();
- String result = (resultSetCount > 1) ? MessageManager
- .getString("label.results") : MessageManager
- .getString("label.result");
- mainFrame.setTitle(frameTitle + " - " + resultSetCount + " "
- + result + " (" + (endTime - startTime) + " milli secs)");
- lbl_loading.setVisible(false);
- }
- }
- }.start();
- }
-
- public static String decodeSearchTerm(String enteredText,
- String targetField)
- {
- String foundSearchTerms = enteredText;
- StringBuilder foundSearchTermsBuilder = new StringBuilder();
- if (enteredText.contains(";"))
- {
- String[] searchTerms = enteredText.split(";");
- for (String searchTerm : searchTerms)
- {
- if (searchTerm.contains(":"))
- {
- foundSearchTermsBuilder.append(targetField).append(":")
- .append(searchTerm.split(":")[0]).append(" OR ");
- }
- else
- {
- foundSearchTermsBuilder.append(targetField).append(":")
- .append(searchTerm).append(" OR ");
- }
- }
- int endIndex = foundSearchTermsBuilder.lastIndexOf(" OR ");
- foundSearchTerms = foundSearchTermsBuilder.toString();
- if (foundSearchTerms.contains(" OR "))
- {
- foundSearchTerms = foundSearchTerms.substring(
- targetField.length() + 1, endIndex);
- }
- }
- else if (enteredText.contains(":"))
- {
- foundSearchTerms = foundSearchTerms.split(":")[0];
- }
- return foundSearchTerms;
- }
-
- @Override
- public void btn_ok_ActionPerformed()
- {
- loadSelectedPDBSequencesToAlignment();
- }
-
- @Override
- public void btn_back_ActionPerformed()
- {
- mainFrame.dispose();
- new SequenceFetcher(progressIdicator);
- }
-
- @Override
- public void btn_cancel_ActionPerformed()
- {
- mainFrame.dispose();
- }
-
- public void transferToSequenceFetcher(String ids)
- {
- // mainFrame.dispose();
- seqFetcher.textArea.setText(ids);
- Thread worker = new Thread(seqFetcher);
- worker.start();
- }
-
- /**
- * Add the discovered/selected sequences to a target alignment window
- */
- public void loadSelectedPDBSequencesToAlignment()
- {
- // mainFrame.dispose();
- disableActionButtons();
- StringBuilder selectedIds = new StringBuilder();
- HashSet<String> selectedIdsSet = new HashSet<String>();
- int pdbIdCol = PDBRestClient.getPDBIdColumIndex(wantedFields, false);
- int[] selectedRows = tbl_summary.getSelectedRows();
- for (int summaryRow : selectedRows)
- {
- String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdCol)
- .toString();
- String searchTerm = txt_search.getText();
- selectedIdsSet.add(getPDBIdwithSpecifiedChain(pdbIdStr, searchTerm));
- }
-
- for (String selectedId : selectedIdsSet)
- {
- selectedIds.append(selectedId).append(";");
- }
-
- String ids = selectedIds.toString();
- // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
- seqFetcher.textArea.setText(ids);
- Thread worker = new Thread(seqFetcher);
- worker.start();
- delayAndEnableActionButtons();
-
- }
-
- private void disableActionButtons()
- {
- btn_ok.setEnabled(false);
- btn_back.setEnabled(false);
- btn_cancel.setEnabled(false);
- }
-
- private void delayAndEnableActionButtons()
- {
- new Thread()
- {
- public void run()
- {
- try
- {
- Thread.sleep(1500);
- } catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- btn_ok.setEnabled(true);
- btn_back.setEnabled(true);
- btn_cancel.setEnabled(true);
- }
- }.start();
- }
-
- public static String getPDBIdwithSpecifiedChain(String pdbId,
- String searchTerm)
- {
- String pdbIdWithChainCode = "";
- if (searchTerm.contains(";"))
- {
- String[] foundTerms = searchTerm.split(";");
- for (String foundTerm : foundTerms)
- {
- if (foundTerm.contains(pdbId))
- {
- pdbIdWithChainCode = foundTerm;
- }
- }
- }
- else if (searchTerm.contains(pdbId))
- {
- pdbIdWithChainCode = searchTerm;
- }
- else
- {
- pdbIdWithChainCode = pdbId;
- }
- return pdbIdWithChainCode;
- }
-
- /**
- * Populates search target combo-box options
- */
- public void populateCmbSearchTargetOptions()
- {
- List<PDBDocField> searchableTargets = new ArrayList<PDBDocField>();
- searchableTargets.add(PDBDocField.PDB_ID);
- searchableTargets.add(PDBDocField.PFAM_ACCESSION);
- searchableTargets.add(PDBDocField.MOLECULE_TYPE);
- searchableTargets.add(PDBDocField.MOLECULE_NAME);
- searchableTargets.add(PDBDocField.UNIPROT_ACCESSION);
- searchableTargets.add(PDBDocField.GENE_NAME);
- searchableTargets.add(PDBDocField.GENUS);
- searchableTargets.add(PDBDocField.ALL);
-
- Collections.sort(searchableTargets, new Comparator<PDBDocField>()
- {
- @Override
- public int compare(PDBDocField o1, PDBDocField o2)
- {
- return o1.getName().compareTo(o2.getName());
- }
- });
-
- for (PDBDocField searchTarget : searchableTargets)
- {
- cmb_searchTarget.addItem(searchTarget);
- }
- }
-
- public void checkForErrors()
- {
- lbl_warning.setVisible(false);
- if (errorWarning.length() > 0)
- {
- lbl_loading.setVisible(false);
- lbl_warning.setToolTipText(JvSwingUtils.wrapTooltip(true,
- errorWarning.toString()));
- lbl_warning.setVisible(true);
- }
- }
-}
import jalview.analysis.AlignmentAnnotationUtils;
import jalview.analysis.AlignmentUtils;
import jalview.analysis.Conservation;
+import jalview.bin.Cache;
import jalview.commands.ChangeCaseCommand;
import jalview.commands.EditCommand;
import jalview.commands.EditCommand.Action;
import jalview.schemes.TurnColourScheme;
import jalview.schemes.UserColourScheme;
import jalview.schemes.ZappoColourScheme;
+import jalview.util.DBRefUtils;
import jalview.util.GroupUrlLink;
import jalview.util.GroupUrlLink.UrlStringTooLongException;
import jalview.util.MessageManager;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Hashtable;
{
private static final String ALL_ANNOTATIONS = "All";
- private static final String COMMA = ",";
-
JMenu groupMenu = new JMenu();
JMenuItem groupName = new JMenuItem();
JMenu pdbMenu = new JMenu();
- JMenuItem pdbFromFile = new JMenuItem();
-
- JMenuItem enterPDB = new JMenuItem();
-
- JMenuItem discoverPDB = new JMenuItem();
-
JMenu outputMenu = new JMenu();
JMenu seqShowAnnotationsMenu = new JMenu();
* @param seq
* DOCUMENT ME!
*/
- public PopupMenu(final AlignmentPanel ap, Sequence seq, Vector links)
+ public PopupMenu(final AlignmentPanel ap, Sequence seq, List<String> links)
{
this(ap, seq, links, null);
}
* @param groupLinks
*/
public PopupMenu(final AlignmentPanel ap, final SequenceI seq,
- Vector links, Vector groupLinks)
+ List<String> links, List<String> groupLinks)
{
// /////////////////////////////////////////////////////////
// If this is activated from the sequence panel, the user may want to
if (links != null && links.size() > 0)
{
+ addFeatureLinks(seq, links);
+ }
+ }
- JMenu linkMenu = new JMenu(MessageManager.getString("action.link"));
- Vector linkset = new Vector();
- for (int i = 0; i < links.size(); i++)
+ /**
+ * Adds a 'Link' menu item with a sub-menu item for each hyperlink provided.
+ *
+ * @param seq
+ * @param links
+ */
+ void addFeatureLinks(final SequenceI seq, List<String> links)
+ {
+ JMenu linkMenu = new JMenu(MessageManager.getString("action.link"));
+ List<String> linkset = new ArrayList<String>();
+ for (String link : links)
+ {
+ UrlLink urlLink = null;
+ try
{
- String link = links.elementAt(i).toString();
- UrlLink urlLink = null;
- try
- {
- urlLink = new UrlLink(link);
- } catch (Exception foo)
- {
- jalview.bin.Cache.log.error("Exception for URLLink '" + link
- + "'", foo);
- continue;
- }
- ;
- if (!urlLink.isValid())
+ urlLink = new UrlLink(link);
+ } catch (Exception foo)
+ {
+ Cache.log.error("Exception for URLLink '" + link + "'", foo);
+ continue;
+ }
+ ;
+ if (!urlLink.isValid())
+ {
+ Cache.log.error(urlLink.getInvalidMessage());
+ continue;
+ }
+ final String label = urlLink.getLabel();
+ if (seq != null && urlLink.isDynamic())
+ {
+
+ // collect matching db-refs
+ DBRefEntry[] dbr = DBRefUtils.selectRefs(seq.getDBRefs(),
+ new String[] { urlLink.getTarget() });
+ // collect id string too
+ String id = seq.getName();
+ String descr = seq.getDescription();
+ if (descr != null && descr.length() < 1)
{
- jalview.bin.Cache.log.error(urlLink.getInvalidMessage());
- continue;
+ descr = null;
}
- final String label = urlLink.getLabel();
- if (seq != null && urlLink.isDynamic())
- {
- // collect matching db-refs
- DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs(
- seq.getDBRefs(), new String[] { urlLink.getTarget() });
- // collect id string too
- String id = seq.getName();
- String descr = seq.getDescription();
- if (descr != null && descr.length() < 1)
- {
- descr = null;
- }
-
- if (dbr != null)
+ if (dbr != null)
+ {
+ for (int r = 0; r < dbr.length; r++)
{
- for (int r = 0; r < dbr.length; r++)
+ if (id != null && dbr[r].getAccessionId().equals(id))
{
- if (id != null && dbr[r].getAccessionId().equals(id))
- {
- // suppress duplicate link creation for the bare sequence ID
- // string with this link
- id = null;
- }
- // create Bare ID link for this RUL
- String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(),
- true);
- if (urls != null)
- {
- for (int u = 0; u < urls.length; u += 2)
- {
- if (!linkset.contains(urls[u] + "|" + urls[u + 1]))
- {
- linkset.addElement(urls[u] + "|" + urls[u + 1]);
- addshowLink(linkMenu, label + "|" + urls[u],
- urls[u + 1]);
- }
- }
- }
+ // suppress duplicate link creation for the bare sequence ID
+ // string with this link
+ id = null;
}
- }
- if (id != null)
- {
- // create Bare ID link for this RUL
- String[] urls = urlLink.makeUrls(id, true);
+ // create Bare ID link for this URL
+ String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(), true);
if (urls != null)
{
for (int u = 0; u < urls.length; u += 2)
{
if (!linkset.contains(urls[u] + "|" + urls[u + 1]))
{
- linkset.addElement(urls[u] + "|" + urls[u + 1]);
- addshowLink(linkMenu, label, urls[u + 1]);
+ linkset.add(urls[u] + "|" + urls[u + 1]);
+ addshowLink(linkMenu, label + "|" + urls[u], urls[u + 1]);
}
}
}
}
- // Create urls from description but only for URL links which are regex
- // links
- if (descr != null && urlLink.getRegexReplace() != null)
+ }
+ if (id != null)
+ {
+ // create Bare ID link for this URL
+ String[] urls = urlLink.makeUrls(id, true);
+ if (urls != null)
{
- // create link for this URL from description where regex matches
- String[] urls = urlLink.makeUrls(descr, true);
- if (urls != null)
+ for (int u = 0; u < urls.length; u += 2)
{
- for (int u = 0; u < urls.length; u += 2)
+ if (!linkset.contains(urls[u] + "|" + urls[u + 1]))
{
- if (!linkset.contains(urls[u] + "|" + urls[u + 1]))
- {
- linkset.addElement(urls[u] + "|" + urls[u + 1]);
- addshowLink(linkMenu, label, urls[u + 1]);
- }
+ linkset.add(urls[u] + "|" + urls[u + 1]);
+ addshowLink(linkMenu, label, urls[u + 1]);
}
}
}
}
- else
+ // Create urls from description but only for URL links which are regex
+ // links
+ if (descr != null && urlLink.getRegexReplace() != null)
{
- if (!linkset.contains(label + "|" + urlLink.getUrl_prefix()))
+ // create link for this URL from description where regex matches
+ String[] urls = urlLink.makeUrls(descr, true);
+ if (urls != null)
{
- linkset.addElement(label + "|" + urlLink.getUrl_prefix());
- // Add a non-dynamic link
- addshowLink(linkMenu, label, urlLink.getUrl_prefix());
+ for (int u = 0; u < urls.length; u += 2)
+ {
+ if (!linkset.contains(urls[u] + "|" + urls[u + 1]))
+ {
+ linkset.add(urls[u] + "|" + urls[u + 1]);
+ addshowLink(linkMenu, label, urls[u + 1]);
+ }
+ }
}
}
}
- if (sequence != null)
- {
- sequenceMenu.add(linkMenu);
- }
else
{
- add(linkMenu);
+ if (!linkset.contains(label + "|" + urlLink.getUrl_prefix()))
+ {
+ linkset.add(label + "|" + urlLink.getUrl_prefix());
+ // Add a non-dynamic link
+ addshowLink(linkMenu, label, urlLink.getUrl_prefix());
+ }
}
}
+ if (sequence != null)
+ {
+ sequenceMenu.add(linkMenu);
+ }
+ else
+ {
+ add(linkMenu);
+ }
}
/**
showOrHideMenu.add(item);
}
- private void buildGroupURLMenu(SequenceGroup sg, Vector groupLinks)
+ private void buildGroupURLMenu(SequenceGroup sg, List<String> groupLinks)
{
// TODO: usability: thread off the generation of group url content so root
// ID/regex match URLs
groupLinksMenu = new JMenu(
MessageManager.getString("action.group_link"));
+ // three types of url that might be created.
JMenu[] linkMenus = new JMenu[] { null,
new JMenu(MessageManager.getString("action.ids")),
new JMenu(MessageManager.getString("action.sequences")),
- new JMenu(MessageManager.getString("action.ids_sequences")) }; // three
- // types
- // of url
- // that
- // might
- // be
- // created.
+ new JMenu(MessageManager.getString("action.ids_sequences")) };
+
SequenceI[] seqs = ap.av.getSelectionAsNewSequence();
String[][] idandseqs = GroupUrlLink.formStrings(seqs);
- Hashtable commonDbrefs = new Hashtable();
+ Hashtable<String, Object[]> commonDbrefs = new Hashtable<String, Object[]>();
for (int sq = 0; sq < seqs.length; sq++)
{
for (int d = 0; d < dbr.length; d++)
{
String src = dbr[d].getSource(); // jalview.util.DBRefUtils.getCanonicalName(dbr[d].getSource()).toUpperCase();
- Object[] sarray = (Object[]) commonDbrefs.get(src);
+ Object[] sarray = commonDbrefs.get(src);
if (sarray == null)
{
sarray = new Object[2];
// now create group links for all distinct ID/sequence sets.
boolean addMenu = false; // indicates if there are any group links to give
// to user
- for (int i = 0; i < groupLinks.size(); i++)
+ for (String link : groupLinks)
{
- String link = groupLinks.elementAt(i).toString();
GroupUrlLink urlLink = null;
try
{
urlLink = new GroupUrlLink(link);
} catch (Exception foo)
{
- jalview.bin.Cache.log.error("Exception for GroupURLLink '" + link
+ Cache.log.error("Exception for GroupURLLink '" + link
+ "'", foo);
continue;
}
;
if (!urlLink.isValid())
{
- jalview.bin.Cache.log.error(urlLink.getInvalidMessage());
+ Cache.log.error(urlLink.getInvalidMessage());
continue;
}
final String label = urlLink.getLabel();
boolean usingNames = false;
// Now see which parts of the group apply for this URL
String ltarget = urlLink.getTarget(); // jalview.util.DBRefUtils.getCanonicalName(urlLink.getTarget());
- Object[] idset = (Object[]) commonDbrefs.get(ltarget.toUpperCase());
+ Object[] idset = commonDbrefs.get(ltarget.toUpperCase());
String[] seqstr, ids; // input to makeUrl
if (idset != null)
{
new Object[] { urlgenerator.getUrl_prefix(),
urlgenerator.getNumberInvolved(urlstub) }));
// TODO: put in info about what is being sent.
- item.addActionListener(new java.awt.event.ActionListener()
+ item.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
try
{
showLink(urlgenerator.constructFrom(urlstub));
- } catch (UrlStringTooLongException e)
+ } catch (UrlStringTooLongException e2)
{
}
}
changeCase(e);
}
});
- pdbMenu.setText(MessageManager
- .getString("label.associate_structure_with_sequence"));
- pdbFromFile.setText(MessageManager.getString("label.from_file"));
- pdbFromFile.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- pdbFromFile_actionPerformed();
- }
- });
-
- enterPDB.setText(MessageManager.getString("label.enter_pdb_id"));
- enterPDB.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- enterPDB_actionPerformed();
- }
- });
- discoverPDB.setText(MessageManager.getString("label.discover_pdb_ids"));
- discoverPDB.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- discoverPDB_actionPerformed();
- }
- });
outputMenu.setText(MessageManager.getString("label.out_to_textbox")
+ "...");
seqShowAnnotationsMenu.setText(MessageManager
editMenu.add(upperCase);
editMenu.add(lowerCase);
editMenu.add(toggle);
- pdbMenu.add(pdbFromFile);
// JBPNote: These shouldn't be added here - should appear in a generic
// 'apply web service to this sequence menu'
// pdbMenu.add(RNAFold);
// pdbMenu.add(ContraFold);
- pdbMenu.add(enterPDB);
- pdbMenu.add(discoverPDB);
jMenu1.add(groupName);
jMenu1.add(colourMenu);
jMenu1.add(showBoxes);
ap, true));
}
- public void pdbFromFile_actionPerformed()
- {
- jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(
- jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
- chooser.setFileView(new jalview.io.JalviewFileView());
- chooser.setDialogTitle(MessageManager.formatMessage(
- "label.select_pdb_file_for",
- new Object[] { sequence.getDisplayId(false) }));
- chooser.setToolTipText(MessageManager.formatMessage(
- "label.load_pdb_file_associate_with_sequence",
- new Object[] { sequence.getDisplayId(false) }));
-
- int value = chooser.showOpenDialog(null);
-
- if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)
- {
- String choice = chooser.getSelectedFile().getPath();
- jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
- new AssociatePdbFileWithSeq().associatePdbWithSeq(choice,
- jalview.io.AppletFormatAdapter.FILE, sequence, true,
- Desktop.instance);
- }
-
- }
-
public void enterPDB_actionPerformed()
{
String id = JOptionPane.showInternalInputDialog(Desktop.desktop,
import jalview.jbgui.GSequenceLink;
import jalview.schemes.ColourSchemeProperty;
import jalview.util.MessageManager;
+import jalview.util.Platform;
import jalview.ws.sifts.SiftsSettings;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.io.File;
-import java.util.Collection;
+import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
* Holds name and link separated with | character. Sequence ID must be
* $SEQUENCE_ID$ or $SEQUENCE_ID=/.possible | chars ./=$
*/
- public static Vector sequenceURLLinks;
+ public static Vector<String> sequenceURLLinks;
/**
* Holds name and link separated with | character. Sequence IDS and Sequences
* (TODO: proper escape for using | to separate ids or sequences
*/
- public static Vector groupURLLinks;
+ public static List<String> groupURLLinks;
static
{
String string = Cache
.getDefault(
"SEQUENCE_LINKS",
"EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$");
- sequenceURLLinks = new Vector();
+ sequenceURLLinks = new Vector<String>();
try
{
* .properties file as '|' separated strings
*/
- groupURLLinks = new Vector();
+ groupURLLinks = new ArrayList<String>();
}
- Vector nameLinks, urlLinks;
+ Vector<String> nameLinks, urlLinks;
JInternalFrame frame;
wsPrefs = new WsPreferences();
wsTab.add(wsPrefs, BorderLayout.CENTER);
int width = 500, height = 450;
- if (new jalview.util.Platform().isAMac())
+ new jalview.util.Platform();
+ if (Platform.isAMac())
{
width = 570;
height = 480;
/*
* Set Connections tab defaults
*/
- nameLinks = new Vector();
- urlLinks = new Vector();
+ nameLinks = new Vector<String>();
+ urlLinks = new Vector<String>();
for (int i = 0; i < sequenceURLLinks.size(); i++)
{
String link = sequenceURLLinks.elementAt(i).toString();
if (nameLinks.size() > 0)
{
StringBuffer links = new StringBuffer();
- sequenceURLLinks = new Vector();
+ sequenceURLLinks = new Vector<String>();
for (int i = 0; i < nameLinks.size(); i++)
{
sequenceURLLinks.addElement(nameLinks.elementAt(i) + "|"
super.showunconserved_actionPerformed(e);
}
- public static Collection getGroupURLLinks()
+ public static List<String> getGroupURLLinks()
{
return groupURLLinks;
}
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
+import java.util.List;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
-import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
/**
min = res;
max = res;
- if (SwingUtilities.isRightMouseButton(evt))
+ if (evt.isPopupTrigger())
{
rightMouseButtonPressed(evt, res);
}
ColumnSelection cs = av.getColumnSelection();
int avCharWidth = av.getCharWidth(), avCharHeight = av.getCharHeight();
- int s;
if (cs != null)
{
gg.setColor(new Color(220, 0, 0));
for (int sel : cs.getSelected())
{
+ // TODO: JAL-2001 - provide a fast method to list visible selected in a
+ // given range
+
if (av.hasHiddenColumns())
{
if (cs.isVisible(sel))
}
}
}
- // Draw the scale numbers
- gg.setColor(Color.black);
- int scalestartx = (startx / 10) * 10;
+ int widthx = 1 + endx - startx;
FontMetrics fm = gg.getFontMetrics(av.getFont());
- int y = avCharHeight - fm.getDescent();
-
- if ((scalestartx % 10) == 0)
- {
- scalestartx += 5;
- }
-
- String string;
- int maxX = 0;
-
- for (int i = scalestartx; i < endx; i += 5)
- {
- if ((i % 10) == 0)
- {
- string = String.valueOf(av.getColumnSelection()
- .adjustForHiddenColumns(i));
- if ((i - startx - 1) * avCharWidth > maxX)
- {
- gg.drawString(string, (i - startx - 1) * avCharWidth, y);
- maxX = (i - startx + 1) * avCharWidth + fm.stringWidth(string);
- }
-
- gg.drawLine(((i - startx - 1) * avCharWidth) + (avCharWidth / 2),
- y + 2,
- ((i - startx - 1) * avCharWidth) + (avCharWidth / 2), y
- + (fm.getDescent() * 2));
- }
- else
- {
- gg.drawLine(((i - startx - 1) * avCharWidth) + (avCharWidth / 2), y
- + fm.getDescent(), ((i - startx - 1) * avCharWidth)
- + (avCharWidth / 2), y + (fm.getDescent() * 2));
- }
- }
-
+ int y = avCharHeight, yOf = fm.getDescent();
+ y -= yOf;
if (av.hasHiddenColumns())
{
+ // draw any hidden column markers
gg.setColor(Color.blue);
int res;
if (av.getShowHiddenMarkers()
for (int i = 0; i < av.getColumnSelection().getHiddenColumns()
.size(); i++)
{
-
res = av.getColumnSelection().findHiddenRegionPosition(i)
- startx;
- if (res < 0 || res > endx - scalestartx)
+ if (res < 0 || res > widthx)
{
continue;
}
- gg.fillPolygon(new int[] { res * avCharWidth - avCharHeight / 4,
- res * avCharWidth + avCharHeight / 4, res * avCharWidth },
- new int[] { y - avCharHeight / 2, y - avCharHeight / 2,
- y + 8 }, 3);
+ gg.fillPolygon(new int[] {
+ -1 + res * avCharWidth - avCharHeight / 4,
+ -1 + res * avCharWidth + avCharHeight / 4,
+ -1 + res * avCharWidth }, new int[] { y, y, y + 2 * yOf }, 3);
}
}
+ }
+ // Draw the scale numbers
+ gg.setColor(Color.black);
+
+ int maxX = 0;
+ List<Object[]> marks = jalview.renderer.ScaleRenderer.calculateMarks(
+ av, startx, endx);
+ for (Object[] mark : marks)
+ {
+ boolean major = Boolean.valueOf((Boolean) mark[0]);
+ int mpos = ((Integer) mark[1]).intValue(); // (i - startx - 1)
+ String mstring = (String) mark[2];
+ if (mstring != null)
+ {
+ if (mpos * avCharWidth > maxX)
+ {
+ gg.drawString(mstring, mpos * avCharWidth, y);
+ maxX = (mpos + 2) * avCharWidth + fm.stringWidth(mstring);
+ }
+ }
+ if (major)
+ {
+ gg.drawLine((mpos * avCharWidth) + (avCharWidth / 2), y + 2,
+ (mpos * avCharWidth) + (avCharWidth / 2), y + (yOf * 2));
+ }
+ else
+ {
+ gg.drawLine((mpos * avCharWidth) + (avCharWidth / 2), y + yOf,
+ (mpos * avCharWidth) + (avCharWidth / 2), y + (yOf * 2));
+ }
+ }
+ if (av.hasHiddenColumns())
+ {
if (reveal != null && reveal[0] > startx && reveal[0] < endx)
{
gg.drawString(MessageManager.getString("label.reveal_columns"),
}
}
+
}
private void drawNorthScale(Graphics g, int startx, int endx, int ypos)
{
updateViewport();
- int scalestartx = startx - (startx % 10) + 10;
-
- g.setColor(Color.black);
- // NORTH SCALE
- for (int i = scalestartx; i < endx; i += 10)
+ for (Object[] mark : jalview.renderer.ScaleRenderer.calculateMarks(av,
+ startx, endx))
{
- int value = i;
- if (av.hasHiddenColumns())
+ int mpos = ((Integer) mark[1]).intValue(); // (i - startx - 1)
+ if (mpos < 0)
{
- value = av.getColumnSelection().adjustForHiddenColumns(value);
+ continue;
}
+ String mstring = (String) mark[2];
- g.drawString(String.valueOf(value), (i - startx - 1) * charWidth,
- ypos - (charHeight / 2));
-
- g.drawLine(((i - startx - 1) * charWidth) + (charWidth / 2),
- (ypos + 2) - (charHeight / 2), ((i - startx - 1) * charWidth)
- + (charWidth / 2), ypos - 2);
+ if (Boolean.valueOf((Boolean) mark[0]))
+ {
+ if (mstring != null)
+ {
+ g.drawString(mstring, mpos * charWidth, ypos - (charHeight / 2));
+ }
+ g.drawLine((mpos * charWidth) + (charWidth / 2), (ypos + 2)
+ - (charHeight / 2), (mpos * charWidth) + (charWidth / 2),
+ ypos - 2);
+ }
}
}
*/
// Set this to false to force a full panel paint
+ @Override
public void paintComponent(Graphics g)
{
updateViewport();
g1.translate(-screenY * charWidth, 0);
screenY += blockEnd - blockStart + 1;
blockStart = hideEnd + 1;
+
+ if (screenY > (endRes - startRes))
+ {
+ // already rendered last block
+ return;
+ }
}
if (screenY <= (endRes - startRes))
{
+ // remaining visible region to render
blockEnd = blockStart + (endRes - startRes) - screenY;
g1.translate(screenY * charWidth, 0);
draw(g1, blockStart, blockEnd, startSeq, endSeq, offset);
package jalview.gui;
import jalview.api.AlignViewportI;
+import jalview.bin.Cache;
import jalview.commands.EditCommand;
import jalview.commands.EditCommand.Action;
import jalview.commands.EditCommand.Edit;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
+import java.util.ArrayList;
import java.util.List;
-import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
/**
void insertNucAtCursor(boolean group, String nuc)
{
+ // TODO not called - delete?
groupEditing = group;
startseq = seqCanvas.cursorY;
lastres = seqCanvas.cursorX;
{
lastMousePress = evt.getPoint();
- if (javax.swing.SwingUtilities.isMiddleMouseButton(evt))
+ if (SwingUtilities.isMiddleMouseButton(evt))
{
mouseWheelPressed = true;
return;
{
for (int j = 0; j < startres - lastres; j++)
{
- if (!jalview.util.Comparison.isGap(groupSeqs[g]
- .getCharAt(fixedRight - j)))
+ if (!Comparison.isGap(groupSeqs[g].getCharAt(fixedRight - j)))
{
blank = false;
break;
continue;
}
- if (!jalview.util.Comparison.isGap(groupSeqs[g].getCharAt(j)))
+ if (!Comparison.isGap(groupSeqs[g].getCharAt(j)))
{
// Not a gap, block edit not valid
endEditing();
for (blankColumn = fixedColumn; blankColumn > j; blankColumn--)
{
- if (jalview.util.Comparison.isGap(seq[s].getCharAt(blankColumn)))
+ if (Comparison.isGap(seq[s].getCharAt(blankColumn)))
{
// Theres a space, so break and insert the gap
break;
}
- if (javax.swing.SwingUtilities.isRightMouseButton(evt))
+ if (evt.isPopupTrigger())
{
List<SequenceFeature> allFeatures = ap.getFeatureRenderer()
.findFeaturesAtRes(sequence.getDatasetSequence(),
sequence.findPosition(res));
- Vector links = new Vector();
+ List<String> links = new ArrayList<String>();
for (SequenceFeature sf : allFeatures)
{
if (sf.links != null)
{
- for (int j = 0; j < sf.links.size(); j++)
+ for (String link : sf.links)
{
- links.addElement(sf.links.elementAt(j));
+ links.add(link);
}
}
}
- jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null, links);
+ PopupMenu pop = new PopupMenu(ap, null, links);
pop.show(this, evt.getX(), evt.getY());
return;
}
{
if (av.getAlignment() == null)
{
- jalview.bin.Cache.log.warn("alignviewport av SeqSetId="
+ Cache.log.warn("alignviewport av SeqSetId="
+ av.getSequenceSetId() + " ViewId=" + av.getViewId()
+ " 's alignment is NULL! returning immediately.");
return;
*/
package jalview.gui;
+import jalview.api.FeatureSettingsModelI;
+import jalview.bin.Cache;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.DBRefSource;
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
-import jalview.io.FormatAdapter;
-import jalview.io.IdentifyFile;
+import jalview.fts.service.pdb.PDBFTSPanel;
+import jalview.fts.service.uniprot.UniprotFTSPanel;
+import jalview.io.gff.SequenceOntologyI;
import jalview.util.DBRefUtils;
import jalview.util.MessageManager;
import jalview.ws.dbsources.das.api.DasSourceRegistryI;
import javax.swing.SwingConstants;
import javax.swing.tree.DefaultMutableTreeNode;
-import com.stevesoft.pat.Regex;
-
public class SequenceFetcher extends JPanel implements Runnable
{
JLabel dbeg = new JLabel();
int debounceTrap = 0;
+ public JTextArea getTextArea()
+ {
+ return textArea;
+ }
+
/**
* Blocking method that initialises and returns the shared instance of the
* SequenceFetcher client
}
}
if (sfetch == null
- || dasRegistry != jalview.bin.Cache.getDasSourceRegistry()
- || lastDasSourceRegistry != (jalview.bin.Cache
- .getDasSourceRegistry().getDasRegistryURL() + jalview.bin.Cache
+ || dasRegistry != Cache.getDasSourceRegistry()
+ || lastDasSourceRegistry != (Cache.getDasSourceRegistry()
+ .getDasRegistryURL() + Cache
.getDasSourceRegistry().getLocalSourceString())
.hashCode())
{
.getString("status.init_sequence_database_fetchers"),
Thread.currentThread().hashCode());
}
- dasRegistry = jalview.bin.Cache.getDasSourceRegistry();
+ dasRegistry = Cache.getDasSourceRegistry();
dasRegistry.refreshSources();
jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher();
{
debounceTrap++;
String currentSelection = database.getSelectedItem();
- if (!currentSelection.equalsIgnoreCase("pdb"))
- {
- otherSourceAction();
- }
+
if (currentSelection.equalsIgnoreCase("pdb")
&& (database.action == KeyEvent.VK_ENTER || ((debounceTrap % 2) == 0)))
{
pdbSourceAction();
}
+ else if (currentSelection.equalsIgnoreCase("uniprot")
+ && (database.action == KeyEvent.VK_ENTER || ((debounceTrap % 2) == 0)))
+ {
+ uniprotSourceAction();
+ }
+ else
+ {
+ otherSourceAction();
+ }
database.action = -1;
}
});
private void pdbSourceAction()
{
databaseButt.setText(database.getSelectedItem());
- new PDBSearchPanel(this);
+ new PDBFTSPanel(this);
frame.dispose();
}
+ private void uniprotSourceAction()
+ {
+ databaseButt.setText(database.getSelectedItem());
+ new UniprotFTSPanel(this);
+ frame.dispose();
+ }
private void otherSourceAction()
{
try
resetDialog();
return;
}
+ // TODO: Refactor to GUI independent code and write tests.
// indicate if successive sources should be merged into one alignment.
boolean addToLast = false;
- ArrayList<String> aresultq = new ArrayList<String>(), presultTitle = new ArrayList<String>();
- ArrayList<AlignmentI> presult = new ArrayList<AlignmentI>(), aresult = new ArrayList<AlignmentI>();
+ List<String> aresultq = new ArrayList<String>();
+ List<String> presultTitle = new ArrayList<String>();
+ List<AlignmentI> presult = new ArrayList<AlignmentI>();
+ List<AlignmentI> aresult = new ArrayList<AlignmentI>();
Iterator<DbSourceProxy> proxies = database.getSelectedSources()
.iterator();
String[] qries;
- List<String> nextfetch = Arrays.asList(qries = textArea.getText()
+ List<String> nextFetch = Arrays.asList(qries = textArea.getText()
.split(";"));
Iterator<String> en = Arrays.asList(new String[0]).iterator();
int nqueries = qries.length;
- while (proxies.hasNext() && (en.hasNext() || nextfetch.size() > 0))
+
+ FeatureSettingsModelI preferredFeatureColours = null;
+ while (proxies.hasNext() && (en.hasNext() || nextFetch.size() > 0))
{
- if (!en.hasNext() && nextfetch.size() > 0)
+ if (!en.hasNext() && nextFetch.size() > 0)
{
- en = nextfetch.iterator();
- nqueries = nextfetch.size();
+ en = nextFetch.iterator();
+ nqueries = nextFetch.size();
// save the remaining queries in the original array
- qries = nextfetch.toArray(new String[nqueries]);
- nextfetch = new ArrayList<String>();
+ qries = nextFetch.toArray(new String[nqueries]);
+ nextFetch = new ArrayList<String>();
}
DbSourceProxy proxy = proxies.next();
- boolean isAliSource = false;
try
{
// update status
Integer.valueOf(nqueries).toString(),
proxy.getDbName() }), Thread.currentThread()
.hashCode());
- isAliSource = proxy.isA(DBRefSource.ALIGNMENTDB);
- if (proxy.getAccessionSeparator() == null)
+ if (proxy.getMaximumQueryCount() == 1)
{
+ /*
+ * proxy only handles one accession id at a time
+ */
while (en.hasNext())
{
- String item = en.next();
- try
+ String acc = en.next();
+ if (!fetchSingleAccession(proxy, acc, aresultq, aresult))
{
- if (aresult != null)
- {
- try
- {
- // give the server a chance to breathe
- Thread.sleep(5);
- } catch (Exception e)
- {
- //
- }
-
- }
-
- AlignmentI indres = null;
- try
- {
- indres = proxy.getSequenceRecords(item);
- } catch (OutOfMemoryError oome)
- {
- new OOMWarning("fetching " + item + " from "
- + proxy.getDbName(), oome, this);
- }
- if (indres != null)
- {
- aresultq.add(item);
- aresult.add(indres);
- }
- else
- {
- nextfetch.add(item);
- }
- } catch (Exception e)
- {
- jalview.bin.Cache.log.info("Error retrieving " + item
- + " from " + proxy.getDbName(), e);
- nextfetch.add(item);
+ nextFetch.add(acc);
}
}
}
else
{
- StringBuffer multiacc = new StringBuffer();
- ArrayList<String> tosend = new ArrayList<String>();
- while (en.hasNext())
- {
- String nel = en.next();
- tosend.add(nel);
- multiacc.append(nel);
- if (en.hasNext())
- {
- multiacc.append(proxy.getAccessionSeparator());
- }
- }
- try
- {
- AlignmentI rslt;
- SequenceI[] rs;
- List<String> nores = new ArrayList<String>();
- rslt = proxy.getSequenceRecords(multiacc.toString());
- if (rslt == null || rslt.getHeight() == 0)
- {
- // no results - pass on all queries to next source
- nextfetch.addAll(tosend);
- }
- else
- {
- aresultq.add(multiacc.toString());
- aresult.add(rslt);
-
- rs = rslt.getSequencesArray();
- // search for each query in the dbrefs associated with each
- // sequence
- // returned.
- // ones we do not find will be used to query next source (if any)
- for (String q : tosend)
- {
- DBRefEntry dbr = new DBRefEntry(), found[] = null;
- dbr.setSource(proxy.getDbSource());
- dbr.setVersion(null);
- if (proxy.getAccessionValidator() != null)
- {
- Regex vgr = proxy.getAccessionValidator();
- vgr.search(q);
- if (vgr.numSubs() > 0)
- {
- dbr.setAccessionId(vgr.stringMatched(1));
- }
- else
- {
- dbr.setAccessionId(vgr.stringMatched());
- }
- }
- else
- {
- dbr.setAccessionId(q);
- }
- boolean rfound = false;
- for (int r = 0; r < rs.length; r++)
- {
- if (rs[r] != null
- && (found = DBRefUtils.searchRefs(
- rs[r].getDBRefs(), dbr)) != null
- && found.length > 0)
- {
- rfound = true;
- rs[r] = null;
- continue;
- }
- }
- if (!rfound)
- {
- nextfetch.add(q);
- }
- }
- }
- } catch (OutOfMemoryError oome)
- {
- new OOMWarning("fetching " + multiacc + " from "
- + database.getSelectedItem(), oome, this);
- }
+ /*
+ * proxy can fetch multiple accessions at one time
+ */
+ fetchMultipleAccessions(proxy, en, aresultq, aresult, nextFetch);
}
-
} catch (Exception e)
{
showErrorMessage("Error retrieving " + textArea.getText()
e.printStackTrace();
} catch (OutOfMemoryError e)
{
- // resets dialog box - so we don't use OOMwarning here.
showErrorMessage("Out of Memory when retrieving "
+ textArea.getText()
+ " from "
+ " from " + database.getSelectedItem());
e.printStackTrace();
}
+
// Stack results ready for opening in alignment windows
if (aresult != null && aresult.size() > 0)
{
+ FeatureSettingsModelI proxyColourScheme = proxy
+ .getFeatureColourScheme();
+ if (proxyColourScheme != null)
+ {
+ preferredFeatureColours = proxyColourScheme;
+ }
+
AlignmentI ar = null;
- if (isAliSource)
+ if (proxy.isAlignmentSource())
{
addToLast = false;
// new window for each result
{
ar.append(aresult.remove(0));
}
- ;
}
addToLast = true;
presult.add(ar);
// process results
while (presult.size() > 0)
{
- parseResult(presult.remove(0), presultTitle.remove(0), null);
+ parseResult(presult.remove(0), presultTitle.remove(0), null,
+ preferredFeatureColours);
}
// only remove visual delay after we finished parsing.
guiWindow.setProgressBar(null, Thread.currentThread().hashCode());
- if (nextfetch.size() > 0)
+ if (nextFetch.size() > 0)
{
StringBuffer sb = new StringBuffer();
sb.append("Didn't retrieve the following "
- + (nextfetch.size() == 1 ? "query" : nextfetch.size()
+ + (nextFetch.size() == 1 ? "query" : nextFetch.size()
+ " queries") + ": \n");
int l = sb.length(), lr = 0;
- for (String s : nextfetch)
+ for (String s : nextFetch)
{
if (l != sb.length())
{
resetDialog();
}
- AlignmentI parseResult(String result, String title)
+ /**
+ * Tries to fetch one or more accession ids from the database proxy
+ *
+ * @param proxy
+ * @param accessions
+ * the queries to fetch
+ * @param aresultq
+ * a successful queries list to add to
+ * @param aresult
+ * a list of retrieved alignments to add to
+ * @param nextFetch
+ * failed queries are added to this list
+ * @throws Exception
+ */
+ void fetchMultipleAccessions(DbSourceProxy proxy,
+ Iterator<String> accessions, List<String> aresultq,
+ List<AlignmentI> aresult, List<String> nextFetch)
+ throws Exception
{
- String format = new IdentifyFile().Identify(result, "Paste");
- AlignmentI sequences = null;
- if (FormatAdapter.isValidFormat(format))
+ StringBuilder multiacc = new StringBuilder();
+ List<String> tosend = new ArrayList<String>();
+ while (accessions.hasNext())
+ {
+ String nel = accessions.next();
+ tosend.add(nel);
+ multiacc.append(nel);
+ if (accessions.hasNext())
+ {
+ multiacc.append(proxy.getAccessionSeparator());
+ }
+ }
+
+ try
{
- sequences = null;
- try
+ String query = multiacc.toString();
+ AlignmentI rslt = proxy.getSequenceRecords(query);
+ if (rslt == null || rslt.getHeight() == 0)
{
- sequences = new FormatAdapter().readFile(result.toString(),
- "Paste", format);
- } catch (Exception ex)
+ // no results - pass on all queries to next source
+ nextFetch.addAll(tosend);
+ }
+ else
{
+ aresultq.add(query);
+ aresult.add(rslt);
+ if (tosend.size() > 1)
+ {
+ checkResultForQueries(rslt, tosend, nextFetch, proxy);
+ }
}
+ } catch (OutOfMemoryError oome)
+ {
+ new OOMWarning("fetching " + multiacc + " from "
+ + database.getSelectedItem(), oome, this);
+ }
+ }
- if (sequences != null)
+ /**
+ * Query for a single accession id via the database proxy
+ *
+ * @param proxy
+ * @param accession
+ * @param aresultq
+ * a list of successful queries to add to
+ * @param aresult
+ * a list of retrieved alignments to add to
+ * @return true if the fetch was successful, else false
+ */
+ boolean fetchSingleAccession(DbSourceProxy proxy, String accession,
+ List<String> aresultq, List<AlignmentI> aresult)
+ {
+ boolean success = false;
+ try
+ {
+ if (aresult != null)
{
- return parseResult(sequences, title, format);
+ try
+ {
+ // give the server a chance to breathe
+ Thread.sleep(5);
+ } catch (Exception e)
+ {
+ //
+ }
}
- }
- else
+
+ AlignmentI indres = null;
+ try
+ {
+ indres = proxy.getSequenceRecords(accession);
+ } catch (OutOfMemoryError oome)
+ {
+ new OOMWarning("fetching " + accession + " from "
+ + proxy.getDbName(), oome, this);
+ }
+ if (indres != null)
+ {
+ aresultq.add(accession);
+ aresult.add(indres);
+ success = true;
+ }
+ } catch (Exception e)
+ {
+ Cache.log.info(
+ "Error retrieving " + accession
+ + " from " + proxy.getDbName(), e);
+ } finally
{
- showErrorMessage("Error retrieving " + textArea.getText() + " from "
- + database.getSelectedItem());
+ return success;
}
+ }
- return null;
+ /**
+ * Checks which of the queries were successfully retrieved by searching the
+ * DBRefs of the retrieved sequences for a match. Any not found are added to
+ * the 'nextFetch' list.
+ *
+ * @param rslt
+ * @param queries
+ * @param nextFetch
+ * @param proxy
+ */
+ void checkResultForQueries(AlignmentI rslt, List<String> queries,
+ List<String> nextFetch, DbSourceProxy proxy)
+ {
+ SequenceI[] rs = rslt.getSequencesArray();
+
+ for (String q : queries)
+ {
+ DBRefEntry[] found = null;
+ DBRefEntry dbr = new DBRefEntry();
+ dbr.setSource(proxy.getDbSource());
+ dbr.setVersion(null);
+ String accId = proxy.getAccessionIdFromQuery(q);
+ dbr.setAccessionId(accId);
+ boolean rfound = false;
+ for (int r = 0; r < rs.length; r++)
+ {
+ if (rs[r] != null)
+ {
+ found = DBRefUtils.searchRefs(rs[r].getDBRefs(), accId);
+ if (found != null && found.length > 0)
+ {
+ rfound = true;
+ break;
+ }
+ }
+ }
+ if (!rfound)
+ {
+ nextFetch.add(q);
+ }
+ }
}
/**
}
AlignmentI parseResult(AlignmentI al, String title,
- String currentFileFormat)
+ String currentFileFormat,
+ FeatureSettingsModelI preferredFeatureColours)
{
if (al != null && al.getHeight() > 0)
}
}
+
+ if (preferredFeatureColours != null)
+ {
+ af.getViewport().applyFeaturesStyle(preferredFeatureColours);
+ }
+ if (Cache.getDefault("HIDE_INTRONS", true))
+ {
+ af.hideFeatureColumns(SequenceOntologyI.EXON, false);
+ }
+
Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT);
try
{
- af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN",
+ af.setMaximum(Cache.getDefault("SHOW_FULLSCREEN",
false));
} catch (Exception ex)
{
import java.awt.event.KeyListener;
import java.beans.PropertyVetoException;
import java.util.Map.Entry;
-import java.util.Set;
import javax.swing.AbstractAction;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
-import javax.swing.UIDefaults;
-import javax.swing.UIManager;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
*/
public class SplitFrame extends GSplitFrame implements SplitContainerI
{
+ private static final int WINDOWS_INSETS_WIDTH = 28; // tbc
+
+ private static final int MAC_INSETS_WIDTH = 28;
+
+ private static final int WINDOWS_INSETS_HEIGHT = 50; // tbc
+
+ private static final int MAC_INSETS_HEIGHT = 50;
+ private static final int DESKTOP_DECORATORS_HEIGHT = 65;
private static final long serialVersionUID = 1L;
public SplitFrame(GAlignFrame top, GAlignFrame bottom)
* estimate width and height of SplitFrame; this.getInsets() doesn't seem to
* give the full additional size (a few pixels short)
*/
- UIDefaults defaults = UIManager.getDefaults();
- Set<Object> keySet = defaults.keySet();
- for (Object key : keySet)
- {
- System.out.println(key.toString() + " = "
- + UIManager.get(key).toString());
- }
- int widthFudge = Platform.isAMac() ? 28 : 28; // Windows tbc
- int heightFudge = Platform.isAMac() ? 50 : 50; // tbc
+ int widthFudge = Platform.isAMac() ? MAC_INSETS_WIDTH
+ : WINDOWS_INSETS_WIDTH;
+ int heightFudge = Platform.isAMac() ? MAC_INSETS_HEIGHT
+ : WINDOWS_INSETS_HEIGHT;
int width = ((AlignFrame) getTopFrame()).getWidth() + widthFudge;
int height = ((AlignFrame) getTopFrame()).getHeight()
+ ((AlignFrame) getBottomFrame()).getHeight() + DIVIDER_SIZE
{
// allow about 65 pixels for Desktop decorators on Windows
- int newHeight = Math.min(height, Desktop.instance.getHeight() - 65);
+ int newHeight = Math.min(height, Desktop.instance.getHeight()
+ - DESKTOP_DECORATORS_HEIGHT);
if (newHeight != height)
{
int oldDividerLocation = getDividerLocation();
}
/**
+ * Adjust the divider for a sensible split of the real estate (for example,
+ * when many transcripts are shown with a single protein). This should only be
+ * called after the split pane has been laid out (made visible) so it has a
+ * height.
+ */
+ protected void adjustDivider()
+ {
+ final AlignViewport topViewport = ((AlignFrame) getTopFrame()).viewport;
+ final AlignViewport bottomViewport = ((AlignFrame) getBottomFrame()).viewport;
+ final AlignmentI topAlignment = topViewport.getAlignment();
+ final AlignmentI bottomAlignment = bottomViewport.getAlignment();
+ boolean topAnnotations = topViewport.isShowAnnotation();
+ boolean bottomAnnotations = bottomViewport.isShowAnnotation();
+ int topCount = topAlignment.getHeight();
+ int bottomCount = bottomAlignment.getHeight();
+ int topCharHeight = topViewport.getViewStyle().getCharHeight();
+ int bottomCharHeight = bottomViewport.getViewStyle().getCharHeight();
+
+ /*
+ * estimate ratio of (topFrameContent / bottomFrameContent)
+ */
+ int insets = Platform.isAMac() ? MAC_INSETS_HEIGHT
+ : WINDOWS_INSETS_HEIGHT;
+ // allow 3 'rows' for scale, scrollbar, status bar
+ int topHeight = insets + (3 + topCount) * topCharHeight
+ + (topAnnotations ? topViewport.calcPanelHeight() : 0);
+ int bottomHeight = insets + (3 + bottomCount) * bottomCharHeight
+ + (bottomAnnotations ? bottomViewport.calcPanelHeight() : 0);
+ double ratio = ((double) topHeight) / (topHeight + bottomHeight);
+
+ setRelativeDividerLocation(ratio);
+ }
+
+ /**
* Add a listener to tidy up when the frame is closed.
*/
protected void addCloseFrameListener()
import jalview.datamodel.DBRefSource;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
+import jalview.fts.api.FTSData;
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.fts.service.pdb.PDBFTSRestClient;
import jalview.jbgui.GStructureChooser;
-import jalview.jbgui.PDBDocFieldPreferences;
import jalview.structure.StructureSelectionManager;
import jalview.util.MessageManager;
-import jalview.ws.dbsources.PDBRestClient;
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
import jalview.ws.sifts.SiftsSettings;
-import jalview.ws.uimodel.PDBRestRequest;
-import jalview.ws.uimodel.PDBRestResponse;
-import jalview.ws.uimodel.PDBRestResponse.PDBResponseSummary;
import java.awt.event.ItemEvent;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Objects;
+import java.util.Vector;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
private IProgressIndicator progressIndicator;
- private Collection<PDBResponseSummary> discoveredStructuresSet;
+ private Collection<FTSData> discoveredStructuresSet;
- private PDBRestRequest lastPdbRequest;
+ private FTSRestRequest lastPdbRequest;
- private PDBRestClient pdbRestCleint;
+ private FTSRestClientI pdbRestCleint;
private String selectedPdbFileName;
public void fetchStructuresMetaData()
{
long startTime = System.currentTimeMillis();
- Collection<PDBDocField> wantedFields = PDBDocFieldPreferences
- .getStructureSummaryFields();
+ pdbRestCleint = PDBFTSRestClient.getInstance();
+ Collection<FTSDataColumnI> wantedFields = pdbRestCleint
+ .getAllDefaulDisplayedDataColumns();
- discoveredStructuresSet = new LinkedHashSet<PDBResponseSummary>();
+ discoveredStructuresSet = new LinkedHashSet<FTSData>();
HashSet<String> errors = new HashSet<String>();
for (SequenceI seq : selectedSequences)
{
- PDBRestRequest pdbRequest = new PDBRestRequest();
+ FTSRestRequest pdbRequest = new FTSRestRequest();
pdbRequest.setAllowEmptySeq(false);
pdbRequest.setResponseSize(500);
pdbRequest.setFieldToSearchBy("(");
pdbRequest.setWantedFields(wantedFields);
pdbRequest.setSearchTerm(buildQuery(seq) + ")");
pdbRequest.setAssociatedSequence(seq);
- pdbRestCleint = new PDBRestClient();
- PDBRestResponse resultList;
+ FTSRestResponse resultList;
try
{
resultList = pdbRestCleint.executeRequest(pdbRequest);
if (discoveredStructuresSet != null
&& !discoveredStructuresSet.isEmpty())
{
- tbl_summary.setModel(PDBRestResponse.getTableModel(lastPdbRequest,
+ tbl_summary.setModel(FTSRestResponse.getTableModel(lastPdbRequest,
discoveredStructuresSet));
structuresDiscovered = true;
noOfStructuresFound = discoveredStructuresSet.size();
{
if (isValidSeqName(entry.getId()))
{
- queryBuilder.append(PDBRestClient.PDBDocField.PDB_ID.getCode())
+ queryBuilder.append("pdb_id")
.append(":")
.append(entry.getId().toLowerCase())
.append(" OR ");
if (dbRef.getSource().equalsIgnoreCase(DBRefSource.UNIPROT))
{
queryBuilder
- .append(PDBRestClient.PDBDocField.UNIPROT_ACCESSION
- .getCode()).append(":")
+.append("uniprot_accession").append(":")
.append(getDBRefId(dbRef))
.append(" OR ");
queryBuilder
- .append(PDBRestClient.PDBDocField.UNIPROT_ID.getCode())
+.append("uniprot_id")
.append(":")
.append(getDBRefId(dbRef)).append(" OR ");
isUniProtRefsFound = true;
else if (dbRef.getSource().equalsIgnoreCase(DBRefSource.PDB))
{
- queryBuilder.append(PDBRestClient.PDBDocField.PDB_ID.getCode())
+ queryBuilder.append("pdb_id")
.append(":").append(getDBRefId(dbRef).toLowerCase())
.append(" OR ");
isPDBRefsFound = true;
if (!isPDBRefsFound && !isUniProtRefsFound)
{
String seqName = seq.getName();
+ seqName = sanitizeSeqName(seqName);
String[] names = seqName.toLowerCase().split("\\|");
for (String name : names)
{
}
/**
+ * Remove the following special characters from input string +, -, &, |, !, (,
+ * ), {, }, [, ], ^, ", ~, *, ?, :, \
+ *
+ * @param seqName
+ * @return
+ */
+ private static String sanitizeSeqName(String seqName)
+ {
+ Objects.requireNonNull(seqName);
+ return seqName.replaceAll("\\[\\d*\\]", "")
+ .replaceAll("[^\\dA-Za-z|]", "").replaceAll("\\s+", "+");
+ }
+
+
+ /**
* Ensures sequence ref names are not less than 3 characters and does not
* contain a database name
*
public void run()
{
long startTime = System.currentTimeMillis();
+ pdbRestCleint = PDBFTSRestClient.getInstance();
lbl_loading.setVisible(true);
- Collection<PDBDocField> wantedFields = PDBDocFieldPreferences
- .getStructureSummaryFields();
- Collection<PDBResponseSummary> filteredResponse = new HashSet<PDBResponseSummary>();
+ Collection<FTSDataColumnI> wantedFields = pdbRestCleint
+ .getAllDefaulDisplayedDataColumns();
+ Collection<FTSData> filteredResponse = new HashSet<FTSData>();
HashSet<String> errors = new HashSet<String>();
+
for (SequenceI seq : selectedSequences)
{
- PDBRestRequest pdbRequest = new PDBRestRequest();
- pdbRequest.setAllowEmptySeq(false);
- pdbRequest.setResponseSize(1);
- pdbRequest.setFieldToSearchBy("(");
- pdbRequest.setFieldToSortBy(fieldToFilterBy,
- !chk_invertFilter.isSelected());
- pdbRequest.setSearchTerm(buildQuery(seq) + ")");
- pdbRequest.setWantedFields(wantedFields);
- pdbRequest.setAssociatedSequence(seq);
- pdbRestCleint = new PDBRestClient();
- PDBRestResponse resultList;
+ FTSRestRequest pdbRequest = new FTSRestRequest();
+ if (fieldToFilterBy.equalsIgnoreCase("uniprot_coverage"))
+ {
+ System.out.println(">>>>>> Filtering with uniprot coverate");
+ pdbRequest.setAllowEmptySeq(false);
+ pdbRequest.setResponseSize(1);
+ pdbRequest.setFieldToSearchBy("(");
+ pdbRequest.setSearchTerm(buildQuery(seq) + ")");
+ pdbRequest.setWantedFields(wantedFields);
+ pdbRequest.setAssociatedSequence(seq);
+ pdbRequest.setFacet(true);
+ pdbRequest.setFacetPivot(fieldToFilterBy + ",entry_entity");
+ pdbRequest.setFacetPivotMinCount(1);
+ }
+ else
+ {
+ pdbRequest.setAllowEmptySeq(false);
+ pdbRequest.setResponseSize(1);
+ pdbRequest.setFieldToSearchBy("(");
+ pdbRequest.setFieldToSortBy(fieldToFilterBy,
+ !chk_invertFilter.isSelected());
+ pdbRequest.setSearchTerm(buildQuery(seq) + ")");
+ pdbRequest.setWantedFields(wantedFields);
+ pdbRequest.setAssociatedSequence(seq);
+ }
+ FTSRestResponse resultList;
try
{
resultList = pdbRestCleint.executeRequest(pdbRequest);
if (!filteredResponse.isEmpty())
{
final int filterResponseCount = filteredResponse.size();
- Collection<PDBResponseSummary> reorderedStructuresSet = new LinkedHashSet<PDBResponseSummary>();
+ Collection<FTSData> reorderedStructuresSet = new LinkedHashSet<FTSData>();
reorderedStructuresSet.addAll(filteredResponse);
reorderedStructuresSet.addAll(discoveredStructuresSet);
- tbl_summary.setModel(PDBRestResponse.getTableModel(
+ tbl_summary.setModel(FTSRestResponse.getTableModel(
lastPdbRequest, reorderedStructuresSet));
+ FTSRestResponse.configureTableColumn(tbl_summary, wantedFields);
+ tbl_summary.getColumn("Ref Sequence").setPreferredWidth(120);
+ tbl_summary.getColumn("Ref Sequence").setMinWidth(100);
+ tbl_summary.getColumn("Ref Sequence").setMaxWidth(200);
// Update table selection model here
tbl_summary.addRowSelectionInterval(0, filterResponseCount - 1);
mainFrame.setTitle(MessageManager.formatMessage(
if (isStructuresDiscovered())
{
cmb_filterOption.addItem(new FilterOption("Best Quality",
- PDBDocField.OVERALL_QUALITY.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Best UniProt Coverage",
- PDBDocField.UNIPROT_COVERAGE.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Highest Resolution",
- PDBDocField.RESOLUTION.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Highest Protein Chain",
- PDBDocField.PROTEIN_CHAIN_COUNT.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Highest Bound Molecules",
- PDBDocField.BOUND_MOLECULE_COUNT.getCode(), VIEWS_FILTER));
- cmb_filterOption.addItem(new FilterOption("Highest Polymer Residues",
- PDBDocField.POLYMER_RESIDUE_COUNT.getCode(), VIEWS_FILTER));
+ "overall_quality", VIEWS_FILTER));
+ cmb_filterOption.addItem(new FilterOption("Most UniProt Coverage",
+ "uniprot_coverage", VIEWS_FILTER));
+ cmb_filterOption.addItem(new FilterOption("Best Resolution",
+ "resolution", VIEWS_FILTER));
+ cmb_filterOption.addItem(new FilterOption("Most Protein Chain",
+ "number_of_protein_chains", VIEWS_FILTER));
+ cmb_filterOption.addItem(new FilterOption("Most Bound Molecules",
+ "number_of_bound_molecules", VIEWS_FILTER));
+ cmb_filterOption.addItem(new FilterOption("Most Polymer Residues",
+ "number_of_polymer_residues", VIEWS_FILTER));
}
cmb_filterOption.addItem(new FilterOption("Enter PDB Id", "-",
VIEWS_ENTER_ID));
String currentView = selectedFilterOpt.getView();
if (currentView == VIEWS_FILTER)
{
- int pdbIdColIndex = tbl_summary.getColumn(
- PDBRestClient.PDBDocField.PDB_ID.getName()).getModelIndex();
+ int pdbIdColIndex = tbl_summary.getColumn("PDB Id")
+ .getModelIndex();
int refSeqColIndex = tbl_summary.getColumn("Ref Sequence")
.getModelIndex();
int[] selectedRows = tbl_summary.getSelectedRows();
SequenceI selectedSeq = (SequenceI) tbl_summary.getValueAt(row,
refSeqColIndex);
selectedSeqsToView.add(selectedSeq);
- PDBEntry pdbEntry = selectedSeq.getPDBEntry(pdbIdStr);
+ PDBEntry pdbEntry = selectedSeq.getPDBEntry(pdbIdStr);
+ if (pdbEntry == null)
+ {
+ pdbEntry = getFindEntry(pdbIdStr,
+ selectedSeq.getAllPDBEntries());
+ }
if (pdbEntry == null)
{
pdbEntry = new PDBEntry();
int[] selectedRows = tbl_local_pdb.getSelectedRows();
PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length];
int count = 0;
- int pdbIdColIndex = tbl_local_pdb.getColumn(
- PDBRestClient.PDBDocField.PDB_ID.getName()).getModelIndex();
+ int pdbIdColIndex = tbl_local_pdb.getColumn("PDB Id")
+ .getModelIndex();
int refSeqColIndex = tbl_local_pdb.getColumn("Ref Sequence")
.getModelIndex();
ArrayList<SequenceI> selectedSeqsToView = new ArrayList<SequenceI>();
}).start();
}
+ private PDBEntry getFindEntry(String id, Vector<PDBEntry> pdbEntries)
+ {
+ Objects.requireNonNull(id);
+ Objects.requireNonNull(pdbEntries);
+ PDBEntry foundEntry = null;
+ for (PDBEntry entry : pdbEntries)
+ {
+ if (entry.getId().equalsIgnoreCase(id))
+ {
+ return entry;
+ }
+ }
+ return foundEntry;
+ }
+
private void launchStructureViewer(StructureSelectionManager ssm,
final PDBEntry[] pdbEntriesToView,
final AlignmentPanel alignPanel, SequenceI[] sequences)
this.structuresDiscovered = structuresDiscovered;
}
- public Collection<PDBResponseSummary> getDiscoveredStructuresSet()
+ public Collection<FTSData> getDiscoveredStructuresSet()
{
return discoveredStructuresSet;
}
isValidPBDEntry = false;
if (txt_search.getText().length() > 0)
{
- List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
- wantedFields.add(PDBDocField.PDB_ID);
- PDBRestRequest pdbRequest = new PDBRestRequest();
+ List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
+ FTSRestRequest pdbRequest = new FTSRestRequest();
pdbRequest.setAllowEmptySeq(false);
pdbRequest.setResponseSize(1);
pdbRequest.setFieldToSearchBy("(pdb_id:");
pdbRequest.setWantedFields(wantedFields);
- pdbRequest.setSearchTerm(txt_search.getText() + ")");
+ pdbRequest
+ .setSearchTerm(txt_search.getText().toLowerCase() + ")");
pdbRequest.setAssociatedSequence(selectedSequence);
- pdbRestCleint = new PDBRestClient();
- PDBRestResponse resultList;
+ pdbRestCleint = PDBFTSRestClient.getInstance();
+ wantedFields.add(pdbRestCleint.getPrimaryKeyColumn());
+ FTSRestResponse resultList;
try
{
resultList = pdbRestCleint.executeRequest(pdbRequest);
import javax.swing.JColorChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
-import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
/**
{
if (highlightNode != null)
{
- if (SwingUtilities.isRightMouseButton(evt))
+ if (evt.isPopupTrigger())
{
Color col = JColorChooser.showDialog(this,
MessageManager.getString("label.select_subtree_colour"),
int maxLength = 0;
/**
- * Sequences to be added to form a new alignment.
+ * Sequences to be added to form a new alignment. TODO: remove vector in this
+ * class
*/
protected Vector<SequenceI> seqs;
if (space > -1)
{
seq = new Sequence(id.substring(0, space), "");
- seq.setDescription(id.substring(space + 1));
+ String desc = id.substring(space + 1);
+ seq.setDescription(desc);
+
+ /*
+ * it is tempting to parse Ensembl style gene description e.g.
+ * chromosome:GRCh38:7:140696688:140721955:1 and set the
+ * start position of the sequence, but this causes much confusion
+ * for reverse strand feature locations
+ */
}
else
{
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.AlignmentView;
+import jalview.structure.StructureViewSettings;
import jalview.util.MessageManager;
import java.io.File;
public static final String[] READABLE_FORMATS = new String[] { "BLC",
"CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "STH", "PDB",
"JnetFile", "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC,
- IdentifyFile.GFF3File, "HTML" };
+ IdentifyFile.FeaturesFile, "HTML", "mmCIF" };
/**
* List of readable format file extensions by application in order
public static final String[] READABLE_EXTENSIONS = new String[] {
"fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa",
"sto,stk", "xml,rnaml", PhylipFile.FILE_EXT, JSONFile.FILE_EXT,
- ".gff2,gff3", "jar,jvp", HtmlFile.FILE_EXT };
+ ".gff2,gff3", "jar,jvp", HtmlFile.FILE_EXT, "cif" };
/**
* List of readable formats by application in order corresponding to
*/
public static final String[] READABLE_FNAMES = new String[] { "Fasta",
"Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "Stockholm", "RNAML",
- PhylipFile.FILE_DESC, JSONFile.FILE_DESC, IdentifyFile.GFF3File,
- "Jalview", HtmlFile.FILE_DESC };
+ PhylipFile.FILE_DESC, JSONFile.FILE_DESC, IdentifyFile.FeaturesFile,
+ "Jalview", HtmlFile.FILE_DESC, "mmCIF" };
/**
* List of valid format strings for use by callers of the formatSequences
}
else if (format.equals("PDB"))
{
- alignFile = new MCview.PDBfile(annotFromStructure,
+ // TODO obtain config value from preference settings.
+ // Set value to 'true' to test PDB processing with Jmol: JAL-1213
+ boolean isParseWithJMOL = false;
+ if (isParseWithJMOL)
+ {
+ StructureViewSettings.addSettings(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct);
+ alignFile = new jalview.ext.jmol.JmolParser(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct, inFile,
+ type);
+ }
+ else
+ {
+ StructureViewSettings.setShowSeqFeatures(true);
+ alignFile = new MCview.PDBfile(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct, inFile,
+ type);
+ }
+ }
+ else if (format.equals("mmCIF"))
+ {
+ StructureViewSettings.addSettings(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct);
+ alignFile = new jalview.ext.jmol.JmolParser(annotFromStructure,
localSecondaryStruct, serviceSecondaryStruct, inFile, type);
- // Uncomment to test Jmol data based PDB processing: JAL-1213
- // afile = new jalview.ext.jmol.PDBFileWithJmol(inFile, type);
}
else if (format.equals("STH"))
{
{
alignFile = new RnamlFile(inFile, type);
}
- else if (format.equals(IdentifyFile.GFF3File))
+ else if (format.equals(IdentifyFile.FeaturesFile))
{
- alignFile = new Gff3File(inFile, type);
+ alignFile = new FeaturesFile(true, inFile, type);
}
return buildAlignmentFrom(alignFile);
} catch (Exception e)
}
else if (format.equals("PDB"))
{
- alignFile = new MCview.PDBfile(annotFromStructure,
+ // TODO obtain config value from preference settings
+ boolean isParseWithJMOL = false;
+ if (isParseWithJMOL)
+ {
+ StructureViewSettings.addSettings(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct);
+ alignFile = new jalview.ext.jmol.JmolParser(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct, source);
+ }
+ else
+ {
+ StructureViewSettings.setShowSeqFeatures(true);
+ alignFile = new MCview.PDBfile(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct, source);
+ }
+ }
+ else if (format.equals("mmCIF"))
+ {
+ StructureViewSettings.addSettings(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct);
+ alignFile = new jalview.ext.jmol.JmolParser(annotFromStructure,
localSecondaryStruct, serviceSecondaryStruct, source);
}
else if (format.equals("STH"))
{
alignFile = new PhylipFile(source);
}
- else if (format.equals(IdentifyFile.GFF3File))
+ else if (format.equals(IdentifyFile.FeaturesFile))
{
- alignFile = new Gff3File(inFile, type);
+ alignFile = new FeaturesFile(inFile, type);
}
else if (format.equals(JSONFile.FILE_DESC))
{
long memf = -r.totalMemory() + r.freeMemory();
long t1 = -System.currentTimeMillis();
AlignmentI al = afa.readFile(args[i], FILE,
- new IdentifyFile().Identify(args[i], FILE));
+ new IdentifyFile().identify(args[i], FILE));
t1 += System.currentTimeMillis();
System.gc();
memf += r.totalMemory() - r.freeMemory();
{
try
{
- String idformat = new jalview.io.IdentifyFile().Identify(file,
+ String idformat = new jalview.io.IdentifyFile().identify(file,
protocol);
if (idformat == null)
{
*/
package jalview.io;
+import jalview.analysis.AlignmentUtils;
import jalview.analysis.SequenceIdMatcher;
+import jalview.api.AlignViewportI;
import jalview.api.FeatureColourI;
+import jalview.api.FeaturesSourceI;
import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.SequenceDummy;
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
+import jalview.io.gff.GffHelperBase;
+import jalview.io.gff.GffHelperFactory;
+import jalview.io.gff.GffHelperI;
import jalview.schemes.FeatureColour;
import jalview.schemes.UserColourScheme;
import jalview.util.MapList;
+import jalview.util.ParseHtmlBodyAndLinks;
+import jalview.util.StringUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
-import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.Vector;
+import java.util.Map.Entry;
/**
- * Parse and create Jalview Features files Detects GFF format features files and
- * parses. Does not implement standard print() - call specific printFeatures or
- * printGFF. Uses AlignmentI.findSequence(String id) to find the sequence object
- * for the features annotation - this normally works on an exact match.
+ * Parses and writes features files, which may be in Jalview, GFF2 or GFF3
+ * format. These are tab-delimited formats but with differences in the use of
+ * columns.
+ *
+ * A Jalview feature file may define feature colours and then declare that the
+ * remainder of the file is in GFF format with the line 'GFF'.
+ *
+ * GFF3 files may include alignment mappings for features, which Jalview will
+ * attempt to model, and may include sequence data following a ##FASTA line.
+ *
*
* @author AMW
- * @version $Revision$
+ * @author jbprocter
+ * @author gmcarstairs
*/
-public class FeaturesFile extends AlignFile
+public class FeaturesFile extends AlignFile implements FeaturesSourceI
{
- /**
- * work around for GFF interpretation bug where source string becomes
- * description rather than a group
- */
- private boolean doGffSource = true;
+ private static final String ID_NOT_SPECIFIED = "ID_NOT_SPECIFIED";
+
+ private static final String NOTE = "Note";
+
+ protected static final String TAB = "\t";
+
+ protected static final String GFF_VERSION = "##gff-version";
- private int gffversion;
+ private AlignmentI lastmatchedAl = null;
+
+ private SequenceIdMatcher matcher = null;
+
+ protected AlignmentI dataset;
+
+ protected int gffVersion;
/**
* Creates a new FeaturesFile object.
}
/**
+ * Constructor which does not parse the file immediately
+ *
* @param inFile
* @param type
* @throws IOException
*/
public FeaturesFile(String inFile, String type) throws IOException
{
- super(inFile, type);
+ super(false, inFile, type);
}
/**
}
/**
- * @param parseImmediately
- * @param source
- * @throws IOException
- */
- public FeaturesFile(boolean parseImmediately, FileParse source)
- throws IOException
- {
- super(parseImmediately, source);
- }
-
- /**
+ * Constructor that optionally parses the file immediately
+ *
* @param parseImmediately
* @param inFile
* @param type
* - process html strings into plain text
* @return true if features were added
*/
- public boolean parse(AlignmentI align, Map colours, boolean removeHTML)
- {
- return parse(align, colours, null, removeHTML, false);
- }
-
- /**
- * Parse GFF or sequence features file optionally using case-independent
- * matching, discarding URLs
- *
- * @param align
- * - alignment/dataset containing sequences that are to be annotated
- * @param colours
- * - hashtable to store feature colour definitions
- * @param removeHTML
- * - process html strings into plain text
- * @param relaxedIdmatching
- * - when true, ID matches to compound sequence IDs are allowed
- * @return true if features were added
- */
- public boolean parse(AlignmentI align, Map colours, boolean removeHTML,
- boolean relaxedIdMatching)
+ public boolean parse(AlignmentI align,
+ Map<String, FeatureColourI> colours,
+ boolean removeHTML)
{
- return parse(align, colours, null, removeHTML, relaxedIdMatching);
+ return parse(align, colours, removeHTML, false);
}
/**
- * Parse GFF or sequence features file optionally using case-independent
- * matching
- *
- * @param align
- * - alignment/dataset containing sequences that are to be annotated
- * @param colours
- * - hashtable to store feature colour definitions
- * @param featureLink
- * - hashtable to store associated URLs
- * @param removeHTML
- * - process html strings into plain text
- * @return true if features were added
+ * Extends the default addProperties by also adding peptide-to-cDNA mappings
+ * (if any) derived while parsing a GFF file
*/
- public boolean parse(AlignmentI align, Map colours, Map featureLink,
- boolean removeHTML)
- {
- return parse(align, colours, featureLink, removeHTML, false);
- }
-
- @Override
- public void addAnnotations(AlignmentI al)
- {
- // TODO Auto-generated method stub
- super.addAnnotations(al);
- }
-
@Override
public void addProperties(AlignmentI al)
{
- // TODO Auto-generated method stub
super.addProperties(al);
- }
-
- @Override
- public void addSeqGroups(AlignmentI al)
- {
- // TODO Auto-generated method stub
- super.addSeqGroups(al);
+ if (dataset != null && dataset.getCodonFrames() != null)
+ {
+ AlignmentI ds = (al.getDataset() == null) ? al : al.getDataset();
+ for (AlignedCodonFrame codons : dataset.getCodonFrames())
+ {
+ ds.addCodonFrame(codons);
+ }
+ }
}
/**
- * Parse GFF or sequence features file
+ * Parse GFF or Jalview format sequence features file
*
* @param align
* - alignment/dataset containing sequences that are to be annotated
* @param colours
* - hashtable to store feature colour definitions
- * @param featureLink
- * - hashtable to store associated URLs
* @param removeHTML
* - process html strings into plain text
* @param relaxedIdmatching
* - when true, ID matches to compound sequence IDs are allowed
* @return true if features were added
*/
- public boolean parse(AlignmentI align, Map colours, Map featureLink,
+ public boolean parse(AlignmentI align,
+ Map<String, FeatureColourI> colours,
boolean removeHTML, boolean relaxedIdmatching)
{
+ Map<String, String> gffProps = new HashMap<String, String>();
+ /*
+ * keep track of any sequences we try to create from the data
+ */
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
String line = null;
try
{
- SequenceI seq = null;
- /**
- * keep track of any sequences we try to create from the data if it is a
- * GFF3 file
- */
- ArrayList<SequenceI> newseqs = new ArrayList<SequenceI>();
- String theType, desc, token = null;
-
- StringTokenizer st;
- SequenceFeature sf;
- String featureGroup = null, groupLink = null;
- Map<String, String> typeLink = new Hashtable<String, String>();
- /**
- * when true, assume GFF style features rather than Jalview style.
- */
- boolean GFFFile = true;
- Map<String, String> gffProps = new HashMap<String, String>();
+ String[] gffColumns;
+ String featureGroup = null;
+
while ((line = nextLine()) != null)
{
- int featureStart, featureEnd;
// skip comments/process pragmas
- if (line.startsWith("#"))
+ if (line.length() == 0 || line.startsWith("#"))
{
- if (line.startsWith("##"))
+ if (line.toLowerCase().startsWith("##"))
{
- // possibly GFF2/3 version and metadata header
processGffPragma(line, gffProps, align, newseqs);
- line = "";
}
continue;
}
- st = new StringTokenizer(line, "\t");
- if (st.countTokens() == 1)
+ gffColumns = line.split("\\t"); // tab as regex
+ if (gffColumns.length == 1)
{
if (line.trim().equalsIgnoreCase("GFF"))
{
- // Start parsing file as if it might be GFF again.
- GFFFile = true;
+ /*
+ * Jalview features file with appended GFF
+ * assume GFF2 (though it may declare ##gff-version 3)
+ */
+ gffVersion = 2;
continue;
}
}
- if (st.countTokens() > 1 && st.countTokens() < 4)
+
+ if (gffColumns.length > 1 && gffColumns.length < 4)
{
- GFFFile = false;
- theType = st.nextToken();
- if (theType.equalsIgnoreCase("startgroup"))
+ /*
+ * if 2 or 3 tokens, we anticipate either 'startgroup', 'endgroup' or
+ * a feature type colour specification
+ */
+ String ft = gffColumns[0];
+ if (ft.equalsIgnoreCase("startgroup"))
{
- featureGroup = st.nextToken();
- if (st.hasMoreElements())
- {
- groupLink = st.nextToken();
- featureLink.put(featureGroup, groupLink);
- }
+ featureGroup = gffColumns[1];
}
- else if (theType.equalsIgnoreCase("endgroup"))
+ else if (ft.equalsIgnoreCase("endgroup"))
{
// We should check whether this is the current group,
- // but at present theres no way of showing more than 1 group
- st.nextToken();
+ // but at present there's no way of showing more than 1 group
featureGroup = null;
- groupLink = null;
}
else
{
- String colscheme = st.nextToken();
- try
- {
- FeatureColourI colour = FeatureColour
- .parseJalviewFeatureColour(colscheme);
- if (colour != null)
- {
- colours.put(theType, colour);
- }
- if (st.hasMoreElements())
- {
- String link = st.nextToken();
- typeLink.put(theType, link);
- if (featureLink == null)
- {
- featureLink = new Hashtable();
- }
- featureLink.put(theType, link);
- }
- } catch (IllegalArgumentException e)
+ String colscheme = gffColumns[1];
+ FeatureColourI colour = FeatureColour
+ .parseJalviewFeatureColour(colscheme);
+ if (colour != null)
{
- System.err.println("Error parsing feature colour scheme "
- + colscheme + " : " + e.getMessage());
+ colours.put(ft, colour);
}
}
continue;
}
- String seqId = "";
- while (st.hasMoreElements())
- {
-
- if (GFFFile)
- {
- // Still possible this is an old Jalview file,
- // which does not have type colours at the beginning
- seqId = token = st.nextToken();
- seq = findName(align, seqId, relaxedIdmatching, newseqs);
- if (seq != null)
- {
- desc = st.nextToken();
- String group = null;
- if (doGffSource && desc.indexOf(' ') == -1)
- {
- // could also be a source term rather than description line
- group = new String(desc);
- }
- theType = st.nextToken();
- try
- {
- String stt = st.nextToken();
- if (stt.length() == 0 || stt.equals("-"))
- {
- featureStart = 0;
- }
- else
- {
- featureStart = Integer.parseInt(stt);
- }
- } catch (NumberFormatException ex)
- {
- featureStart = 0;
- }
- try
- {
- String stt = st.nextToken();
- if (stt.length() == 0 || stt.equals("-"))
- {
- featureEnd = 0;
- }
- else
- {
- featureEnd = Integer.parseInt(stt);
- }
- } catch (NumberFormatException ex)
- {
- featureEnd = 0;
- }
- // TODO: decide if non positional feature assertion for input data
- // where end==0 is generally valid
- if (featureEnd == 0)
- {
- // treat as non-positional feature, regardless.
- featureStart = 0;
- }
- float score = 0f;
- try
- {
- score = new Float(st.nextToken()).floatValue();
- } catch (NumberFormatException ex)
- {
- // ignore
- }
-
- sf = new SequenceFeature(theType, desc, featureStart, featureEnd, score, group);
-
- try
- {
- sf.setValue("STRAND", st.nextToken());
- sf.setValue("FRAME", st.nextToken());
- } catch (Exception ex)
- {
- }
-
- if (st.hasMoreTokens())
- {
- StringBuilder attributes = new StringBuilder();
- boolean sep = false;
- while (st.hasMoreTokens())
- {
- attributes.append(sep ? "\t" : "").append(
- st.nextElement());
- sep = true;
- }
- // TODO validate and split GFF2 attributes field ? parse out
- // ([A-Za-z][A-Za-z0-9_]*) <value> ; and add as
- // sf.setValue(attrib, val);
- sf.setValue("ATTRIBUTES", attributes.toString());
- }
-
- if (processOrAddSeqFeature(align, newseqs, seq, sf, GFFFile,
- relaxedIdmatching))
- {
- // check whether we should add the sequence feature to any other
- // sequences in the alignment with the same or similar
- while ((seq = align.findName(seq, seqId, true)) != null)
- {
- seq.addSequenceFeature(new SequenceFeature(sf));
- }
- }
- break;
- }
- }
-
- if (GFFFile && seq == null)
- {
- desc = token;
- }
- else
- {
- desc = st.nextToken();
- }
- if (!st.hasMoreTokens())
- {
- System.err
- .println("DEBUG: Run out of tokens when trying to identify the destination for the feature.. giving up.");
- // in all probability, this isn't a file we understand, so bail
- // quietly.
- return false;
- }
-
- token = st.nextToken();
- if (!token.equals("ID_NOT_SPECIFIED"))
- {
- seq = findName(align, seqId = token, relaxedIdmatching, null);
- st.nextToken();
- }
- else
- {
- seqId = null;
- try
- {
- int idx = Integer.parseInt(st.nextToken());
- seq = align.getSequenceAt(idx);
- } catch (NumberFormatException ex)
- {
- seq = null;
- }
- }
-
- if (seq == null)
- {
- System.out.println("Sequence not found: " + line);
- break;
- }
-
- featureStart = Integer.parseInt(st.nextToken());
- featureEnd = Integer.parseInt(st.nextToken());
-
- theType = st.nextToken();
-
- if (!colours.containsKey(theType))
- {
- // Probably the old style groups file
- colours.put(
- theType,
- new FeatureColour(UserColourScheme
- .getColourFromString(theType)));
- }
- sf = new SequenceFeature(theType, desc, "", featureStart, featureEnd, featureGroup);
- if (st.hasMoreTokens())
- {
- float score = 0f;
- try
- {
- score = new Float(st.nextToken()).floatValue();
- // update colourgradient bounds if allowed to
- } catch (NumberFormatException ex)
- {
- // ignore
- }
- sf.setScore(score);
- }
- if (groupLink != null && removeHTML)
- {
- sf.addLink(groupLink);
- sf.description += "%LINK%";
- }
- if (typeLink.containsKey(theType) && removeHTML)
- {
- sf.addLink(typeLink.get(theType));
- sf.description += "%LINK%";
- }
-
- parseDescriptionHTML(sf, removeHTML);
-
- seq.addSequenceFeature(sf);
-
- while (seqId != null
- && (seq = align.findName(seq, seqId, false)) != null)
- {
- seq.addSequenceFeature(new SequenceFeature(sf));
- }
- // If we got here, its not a GFFFile
- GFFFile = false;
+ /*
+ * if not a comment, GFF pragma, startgroup, endgroup or feature
+ * colour specification, that just leaves a feature details line
+ * in either Jalview or GFF format
+ */
+ if (gffVersion == 0)
+ {
+ parseJalviewFeature(line, gffColumns, align, colours, removeHTML,
+ relaxedIdmatching, featureGroup);
+ }
+ else
+ {
+ parseGff(gffColumns, align, relaxedIdmatching, newseqs);
}
}
resetMatcher();
return false;
}
- return true;
- }
-
- private enum GffPragmas
- {
- gff_version, sequence_region, feature_ontology, attribute_ontology, source_ontology, species_build, fasta, hash
- };
-
- private static Map<String, GffPragmas> GFFPRAGMA;
- static
- {
- GFFPRAGMA = new HashMap<String, GffPragmas>();
- GFFPRAGMA.put("sequence-region", GffPragmas.sequence_region);
- GFFPRAGMA.put("feature-ontology", GffPragmas.feature_ontology);
- GFFPRAGMA.put("#", GffPragmas.hash);
- GFFPRAGMA.put("fasta", GffPragmas.fasta);
- GFFPRAGMA.put("species-build", GffPragmas.species_build);
- GFFPRAGMA.put("source-ontology", GffPragmas.source_ontology);
- GFFPRAGMA.put("attribute-ontology", GffPragmas.attribute_ontology);
- }
-
- private void processGffPragma(String line, Map<String, String> gffProps,
- AlignmentI align, ArrayList<SequenceI> newseqs)
- throws IOException
- {
- // line starts with ##
- int spacepos = line.indexOf(' ');
- String pragma = spacepos == -1 ? line.substring(2).trim() : line
- .substring(2, spacepos);
- GffPragmas gffpragma = GFFPRAGMA.get(pragma.toLowerCase());
- if (gffpragma == null)
- {
- return;
- }
- switch (gffpragma)
+ /*
+ * experimental - add any dummy sequences with features to the alignment
+ * - we need them for Ensembl feature extraction - though maybe not otherwise
+ */
+ for (SequenceI newseq : newseqs)
{
- case gff_version:
- try
- {
- gffversion = Integer.parseInt(line.substring(spacepos + 1));
- } finally
+ if (newseq.getSequenceFeatures() != null)
{
-
+ align.addSequence(newseq);
}
- break;
- case feature_ontology:
- // resolve against specific feature ontology
- break;
- case attribute_ontology:
- // resolve against specific attribute ontology
- break;
- case source_ontology:
- // resolve against specific source ontology
- break;
- case species_build:
- // resolve against specific NCBI taxon version
- break;
- case hash:
- // close off any open feature hierarchies
- break;
- case fasta:
- // process the rest of the file as a fasta file and replace any dummy
- // sequence IDs
- process_as_fasta(align, newseqs);
- break;
- default:
- // we do nothing ?
- System.err.println("Ignoring unknown pragma:\n" + line);
- }
- }
-
- private void process_as_fasta(AlignmentI align, List<SequenceI> newseqs)
- throws IOException
- {
- try
- {
- mark();
- } catch (IOException q)
- {
- }
- FastaFile parser = new FastaFile(this);
- List<SequenceI> includedseqs = parser.getSeqs();
- SequenceIdMatcher smatcher = new SequenceIdMatcher(newseqs);
- // iterate over includedseqs, and replacing matching ones with newseqs
- // sequences. Generic iterator not used here because we modify includedseqs
- // as we go
- for (int p = 0, pSize = includedseqs.size(); p < pSize; p++)
- {
- // search for any dummy seqs that this sequence can be used to update
- SequenceI dummyseq = smatcher.findIdMatch(includedseqs.get(p));
- if (dummyseq != null)
- {
- // dummyseq was created so it could be annotated and referred to in
- // alignments/codon mappings
-
- SequenceI mseq = includedseqs.get(p);
- // mseq is the 'template' imported from the FASTA file which we'll use
- // to coomplete dummyseq
- if (dummyseq instanceof SequenceDummy)
- {
- // probably have the pattern wrong
- // idea is that a flyweight proxy for a sequence ID can be created for
- // 1. stable reference creation
- // 2. addition of annotation
- // 3. future replacement by a real sequence
- // current pattern is to create SequenceDummy objects - a convenience
- // constructor for a Sequence.
- // problem is that when promoted to a real sequence, all references
- // need
- // to be updated somehow.
- ((SequenceDummy) dummyseq).become(mseq);
- includedseqs.set(p, dummyseq); // template is no longer needed
- }
- }
- }
- // finally add sequences to the dataset
- for (SequenceI seq : includedseqs)
- {
- align.addSequence(seq);
}
+ return true;
}
/**
- * take a sequence feature and examine its attributes to decide how it should
- * be added to a sequence
+ * Try to parse a Jalview format feature specification and add it as a
+ * sequence feature to any matching sequences in the alignment. Returns true
+ * if successful (a feature was added), or false if not.
*
- * @param seq
- * - the destination sequence constructed or discovered in the
- * current context
- * @param sf
- * - the base feature with ATTRIBUTES property containing any
- * additional attributes
- * @param gFFFile
- * - true if we are processing a GFF annotation file
- * @return true if sf was actually added to the sequence, false if it was
- * processed in another way
+ * @param line
+ * @param gffColumns
+ * @param alignment
+ * @param featureColours
+ * @param removeHTML
+ * @param relaxedIdmatching
+ * @param featureGroup
*/
- public boolean processOrAddSeqFeature(AlignmentI align,
- List<SequenceI> newseqs, SequenceI seq, SequenceFeature sf,
- boolean gFFFile, boolean relaxedIdMatching)
+ protected boolean parseJalviewFeature(String line, String[] gffColumns,
+ AlignmentI alignment, Map<String, FeatureColourI> featureColours,
+ boolean removeHTML, boolean relaxedIdMatching, String featureGroup)
{
- String attr = (String) sf.getValue("ATTRIBUTES");
- boolean add = true;
- if (gFFFile && attr != null)
+ /*
+ * tokens: description seqid seqIndex start end type [score]
+ */
+ if (gffColumns.length < 6)
{
- int nattr = 8;
-
- for (String attset : attr.split("\t"))
- {
- if (attset == null || attset.trim().length() == 0)
- {
- continue;
- }
- nattr++;
- Map<String, List<String>> set = new HashMap<String, List<String>>();
- // normally, only expect one column - 9 - in this field
- // the attributes (Gff3) or groups (gff2) field
- for (String pair : attset.trim().split(";"))
- {
- pair = pair.trim();
- if (pair.length() == 0)
- {
- continue;
- }
-
- // expect either space seperated (gff2) or '=' separated (gff3)
- // key/value pairs here
-
- int eqpos = pair.indexOf('='), sppos = pair.indexOf(' ');
- String key = null, value = null;
-
- if (sppos > -1 && (eqpos == -1 || sppos < eqpos))
- {
- key = pair.substring(0, sppos);
- value = pair.substring(sppos + 1);
- }
- else
- {
- if (eqpos > -1 && (sppos == -1 || eqpos < sppos))
- {
- key = pair.substring(0, eqpos);
- value = pair.substring(eqpos + 1);
- }
- else
- {
- key = pair;
- }
- }
- if (key != null)
- {
- List<String> vals = set.get(key);
- if (vals == null)
- {
- vals = new ArrayList<String>();
- set.put(key, vals);
- }
- if (value != null)
- {
- vals.add(value.trim());
- }
- }
- }
- try
- {
- add &= processGffKey(set, nattr, seq, sf, align, newseqs,
- relaxedIdMatching); // process decides if
- // feature is actually
- // added
- } catch (InvalidGFF3FieldException ivfe)
- {
- System.err.println(ivfe);
- }
- }
- }
- if (add)
- {
- seq.addSequenceFeature(sf);
+ System.err.println("Ignoring feature line '" + line
+ + "' with too few columns (" + gffColumns.length + ")");
+ return false;
}
- return add;
- }
-
- public class InvalidGFF3FieldException extends Exception
- {
- String field, value;
+ String desc = gffColumns[0];
+ String seqId = gffColumns[1];
+ SequenceI seq = findSequence(seqId, alignment, null, relaxedIdMatching);
- public InvalidGFF3FieldException(String field,
- Map<String, List<String>> set, String message)
+ if (!ID_NOT_SPECIFIED.equals(seqId))
{
- super(message + " (Field was " + field + " and value was "
- + set.get(field).toString());
- this.field = field;
- this.value = set.get(field).toString();
+ seq = findSequence(seqId, alignment, null, relaxedIdMatching);
}
-
- }
-
- /**
- * take a set of keys for a feature and interpret them
- *
- * @param set
- * @param nattr
- * @param seq
- * @param sf
- * @return
- */
- public boolean processGffKey(Map<String, List<String>> set, int nattr,
- SequenceI seq, SequenceFeature sf, AlignmentI align,
- List<SequenceI> newseqs, boolean relaxedIdMatching)
- throws InvalidGFF3FieldException
- {
- String attr;
- // decide how to interpret according to type
- if (sf.getType().equals("similarity"))
+ else
{
- int strand = sf.getStrand();
- // exonerate cdna/protein map
- // look for fields
- List<SequenceI> querySeq = findNames(align, newseqs,
- relaxedIdMatching, set.get(attr = "Query"));
- if (querySeq == null || querySeq.size() != 1)
+ seqId = null;
+ seq = null;
+ String seqIndex = gffColumns[2];
+ try
{
- throw new InvalidGFF3FieldException(attr, set,
- "Expecting exactly one sequence in Query field (got "
- + set.get(attr) + ")");
- }
- if (set.containsKey(attr = "Align"))
+ int idx = Integer.parseInt(seqIndex);
+ seq = alignment.getSequenceAt(idx);
+ } catch (NumberFormatException ex)
{
- // process the align maps and create cdna/protein maps
- // ideally, the query sequences are in the alignment, but maybe not...
-
- AlignedCodonFrame alco = new AlignedCodonFrame();
- MapList codonmapping = constructCodonMappingFromAlign(set, attr,
- strand);
-
- // add codon mapping, and hope!
- alco.addMap(seq, querySeq.get(0), codonmapping);
- align.addCodonFrame(alco);
- // everything that's needed to be done is done
- // no features to create here !
- return false;
+ System.err.println("Invalid sequence index: " + seqIndex);
}
+ }
+ if (seq == null)
+ {
+ System.out.println("Sequence not found: " + line);
+ return false;
}
- return true;
- }
- private MapList constructCodonMappingFromAlign(
- Map<String, List<String>> set, String attr, int strand)
- throws InvalidGFF3FieldException
- {
- if (strand == 0)
+ int startPos = Integer.parseInt(gffColumns[3]);
+ int endPos = Integer.parseInt(gffColumns[4]);
+
+ String ft = gffColumns[5];
+
+ if (!featureColours.containsKey(ft))
{
- throw new InvalidGFF3FieldException(attr, set,
- "Invalid strand for a codon mapping (cannot be 0)");
+ /*
+ * Perhaps an old style groups file with no colours -
+ * synthesize a colour from the feature type
+ */
+ UserColourScheme ucs = new UserColourScheme(ft);
+ featureColours.put(ft, new FeatureColour(ucs.findColour('A')));
}
- List<Integer> fromrange = new ArrayList<Integer>(), torange = new ArrayList<Integer>();
- int lastppos = 0, lastpframe = 0;
- for (String range : set.get(attr))
+ SequenceFeature sf = new SequenceFeature(ft, desc, "", startPos,
+ endPos, featureGroup);
+ if (gffColumns.length > 6)
{
- List<Integer> ints = new ArrayList<Integer>();
- StringTokenizer st = new StringTokenizer(range, " ");
- while (st.hasMoreTokens())
- {
- String num = st.nextToken();
- try
- {
- ints.add(new Integer(num));
- } catch (NumberFormatException nfe)
- {
- throw new InvalidGFF3FieldException(attr, set,
- "Invalid number in field " + num);
- }
- }
- // Align positionInRef positionInQuery LengthInRef
- // contig_1146 exonerate:protein2genome:local similarity 8534 11269
- // 3652 - . alignment_id 0 ;
- // Query DDB_G0269124
- // Align 11270 143 120
- // corresponds to : 120 bases align at pos 143 in protein to 11270 on
- // dna in strand direction
- // Align 11150 187 282
- // corresponds to : 282 bases align at pos 187 in protein to 11150 on
- // dna in strand direction
- //
- // Align 10865 281 888
- // Align 9977 578 1068
- // Align 8909 935 375
- //
- if (ints.size() != 3)
- {
- throw new InvalidGFF3FieldException(attr, set,
- "Invalid number of fields for this attribute ("
- + ints.size() + ")");
- }
- fromrange.add(new Integer(ints.get(0).intValue()));
- fromrange.add(new Integer(ints.get(0).intValue() + strand
- * ints.get(2).intValue()));
- // how are intron/exon boundaries that do not align in codons
- // represented
- if (ints.get(1).equals(lastppos) && lastpframe > 0)
+ float score = Float.NaN;
+ try
{
- // extend existing to map
- lastppos += ints.get(2) / 3;
- lastpframe = ints.get(2) % 3;
- torange.set(torange.size() - 1, new Integer(lastppos));
- }
- else
+ score = new Float(gffColumns[6]).floatValue();
+ // update colourgradient bounds if allowed to
+ } catch (NumberFormatException ex)
{
- // new to map range
- torange.add(ints.get(1));
- lastppos = ints.get(1) + ints.get(2) / 3;
- lastpframe = ints.get(2) % 3;
- torange.add(new Integer(lastppos));
+ // leave as NaN
}
- }
- // from and to ranges must end up being a series of start/end intervals
- if (fromrange.size() % 2 == 1)
- {
- throw new InvalidGFF3FieldException(attr, set,
- "Couldn't parse the DNA alignment range correctly");
- }
- if (torange.size() % 2 == 1)
- {
- throw new InvalidGFF3FieldException(attr, set,
- "Couldn't parse the protein alignment range correctly");
- }
- // finally, build the map
- int[] frommap = new int[fromrange.size()], tomap = new int[torange
- .size()];
- int p = 0;
- for (Integer ip : fromrange)
- {
- frommap[p++] = ip.intValue();
- }
- p = 0;
- for (Integer ip : torange)
- {
- tomap[p++] = ip.intValue();
+ sf.setScore(score);
}
- return new MapList(frommap, tomap, 3, 1);
- }
+ parseDescriptionHTML(sf, removeHTML);
- private List<SequenceI> findNames(AlignmentI align,
- List<SequenceI> newseqs, boolean relaxedIdMatching,
- List<String> list)
- {
- List<SequenceI> found = new ArrayList<SequenceI>();
- for (String seqId : list)
+ seq.addSequenceFeature(sf);
+
+ while (seqId != null
+ && (seq = alignment.findName(seq, seqId, false)) != null)
{
- SequenceI seq = findName(align, seqId, relaxedIdMatching, newseqs);
- if (seq != null)
- {
- found.add(seq);
- }
+ seq.addSequenceFeature(new SequenceFeature(sf));
}
- return found;
+ return true;
}
- private AlignmentI lastmatchedAl = null;
-
- private SequenceIdMatcher matcher = null;
-
/**
* clear any temporary handles used to speed up ID matching
*/
- private void resetMatcher()
+ protected void resetMatcher()
{
lastmatchedAl = null;
matcher = null;
}
- private SequenceI findName(AlignmentI align, String seqId,
- boolean relaxedIdMatching, List<SequenceI> newseqs)
+ /**
+ * Returns a sequence matching the given id, as follows
+ * <ul>
+ * <li>strict matching is on exact sequence name</li>
+ * <li>relaxed matching allows matching on a token within the sequence name,
+ * or a dbxref</li>
+ * <li>first tries to find a match in the alignment sequences</li>
+ * <li>else tries to find a match in the new sequences already generated while
+ * parsing the features file</li>
+ * <li>else creates a new placeholder sequence, adds it to the new sequences
+ * list, and returns it</li>
+ * </ul>
+ *
+ * @param seqId
+ * @param align
+ * @param newseqs
+ * @param relaxedIdMatching
+ *
+ * @return
+ */
+ protected SequenceI findSequence(String seqId, AlignmentI align,
+ List<SequenceI> newseqs, boolean relaxedIdMatching)
{
+ // TODO encapsulate in SequenceIdMatcher, share the matcher
+ // with the GffHelper (removing code duplication)
SequenceI match = null;
if (relaxedIdMatching)
{
if (lastmatchedAl != align)
{
- matcher = new SequenceIdMatcher(
- (lastmatchedAl = align).getSequencesArray());
+ lastmatchedAl = align;
+ matcher = new SequenceIdMatcher(align.getSequencesArray());
if (newseqs != null)
{
matcher.addAll(newseqs);
{
return;
}
- jalview.util.ParseHtmlBodyAndLinks parsed = new jalview.util.ParseHtmlBodyAndLinks(
+ ParseHtmlBodyAndLinks parsed = new ParseHtmlBodyAndLinks(
sf.getDescription(), removeHTML, newline);
sf.description = (removeHTML) ? parsed.getNonHtmlContent()
/**
* generate a features file for seqs includes non-pos features by default.
*
- * @param seqs
+ * @param sequences
* source of sequence features
- * @param map
+ * @param visible
* hash of feature types and colours
* @return features file contents
*/
- public String printJalviewFormat(SequenceI[] seqs,
- Map<String, FeatureColourI> map)
+ public String printJalviewFormat(SequenceI[] sequences,
+ Map<String, FeatureColourI> visible)
{
- return printJalviewFormat(seqs, map, true, true);
+ return printJalviewFormat(sequences, visible, true, true);
}
/**
* @return features file contents
*/
public String printJalviewFormat(SequenceI[] sequences,
- Map<String, FeatureColourI> visible,
- boolean visOnly, boolean nonpos)
+ Map<String, FeatureColourI> visible, boolean visOnly,
+ boolean nonpos)
{
+ StringBuilder out = new StringBuilder(256);
+ boolean featuresGen = false;
if (visOnly && !nonpos && (visible == null || visible.size() < 1))
{
// no point continuing.
return "No Features Visible";
}
- StringBuilder out = new StringBuilder(128);
- SequenceFeature[] next;
- boolean featuresGen = false;
if (visible != null && visOnly)
{
Iterator<String> en = visible.keySet().iterator();
while (en.hasNext())
{
- String featureType = en.next();
+ String featureType = en.next().toString();
FeatureColourI colour = visible.get(featureType);
out.append(colour.toJalviewFormat(featureType)).append(newline);
}
}
+
// Work out which groups are both present and visible
- Vector groups = new Vector();
+ List<String> groups = new ArrayList<String>();
int groupIndex = 0;
boolean isnonpos = false;
+ SequenceFeature[] features;
for (int i = 0; i < sequences.length; i++)
{
- next = sequences[i].getSequenceFeatures();
- if (next != null)
+ features = sequences[i].getSequenceFeatures();
+ if (features != null)
{
- for (int j = 0; j < next.length; j++)
+ for (int j = 0; j < features.length; j++)
{
- isnonpos = next[j].begin == 0 && next[j].end == 0;
+ isnonpos = features[j].begin == 0 && features[j].end == 0;
if ((!nonpos && isnonpos)
|| (!isnonpos && visOnly && !visible
- .containsKey(next[j].type)))
+ .containsKey(features[j].type)))
{
continue;
}
- if (next[j].featureGroup != null
- && !groups.contains(next[j].featureGroup))
+ if (features[j].featureGroup != null
+ && !groups.contains(features[j].featureGroup))
{
- groups.addElement(next[j].featureGroup);
+ groups.add(features[j].featureGroup);
}
}
}
String group = null;
do
{
-
if (groups.size() > 0 && groupIndex < groups.size())
{
- group = groups.elementAt(groupIndex).toString();
+ group = groups.get(groupIndex);
out.append(newline);
- out.append("STARTGROUP\t");
+ out.append("STARTGROUP").append(TAB);
out.append(group);
out.append(newline);
}
for (int i = 0; i < sequences.length; i++)
{
- next = sequences[i].getSequenceFeatures();
- if (next != null)
+ features = sequences[i].getSequenceFeatures();
+ if (features != null)
{
- for (int j = 0; j < next.length; j++)
+ for (SequenceFeature sequenceFeature : features)
{
- isnonpos = next[j].begin == 0 && next[j].end == 0;
+ isnonpos = sequenceFeature.begin == 0 && sequenceFeature.end == 0;
if ((!nonpos && isnonpos)
|| (!isnonpos && visOnly && !visible
- .containsKey(next[j].type)))
+ .containsKey(sequenceFeature.type)))
{
// skip if feature is nonpos and we ignore them or if we only
// output visible and it isn't non-pos and it's not visible
}
if (group != null
- && (next[j].featureGroup == null || !next[j].featureGroup
+ && (sequenceFeature.featureGroup == null || !sequenceFeature.featureGroup
.equals(group)))
{
continue;
}
- if (group == null && next[j].featureGroup != null)
+ if (group == null && sequenceFeature.featureGroup != null)
{
continue;
}
// we have features to output
featuresGen = true;
- if (next[j].description == null
- || next[j].description.equals(""))
+ if (sequenceFeature.description == null
+ || sequenceFeature.description.equals(""))
{
- out.append(next[j].type + "\t");
+ out.append(sequenceFeature.type).append(TAB);
}
else
{
- if (next[j].links != null
- && next[j].getDescription().indexOf("<html>") == -1)
+ if (sequenceFeature.links != null
+ && sequenceFeature.getDescription().indexOf("<html>") == -1)
{
out.append("<html>");
}
- out.append(next[j].description + " ");
- if (next[j].links != null)
+ out.append(sequenceFeature.description);
+ if (sequenceFeature.links != null)
{
- for (int l = 0; l < next[j].links.size(); l++)
+ for (int l = 0; l < sequenceFeature.links.size(); l++)
{
- String label = next[j].links.elementAt(l).toString();
+ String label = sequenceFeature.links.elementAt(l);
String href = label.substring(label.indexOf("|") + 1);
label = label.substring(0, label.indexOf("|"));
- if (next[j].description.indexOf(href) == -1)
+ if (sequenceFeature.description.indexOf(href) == -1)
{
- out.append("<a href=\"" + href + "\">" + label + "</a>");
+ out.append(" <a href=\"" + href + "\">" + label
+ + "</a>");
}
}
- if (next[j].getDescription().indexOf("</html>") == -1)
+ if (sequenceFeature.getDescription().indexOf("</html>") == -1)
{
out.append("</html>");
}
}
- out.append("\t");
+ out.append(TAB);
}
out.append(sequences[i].getName());
out.append("\t-1\t");
- out.append(next[j].begin);
- out.append("\t");
- out.append(next[j].end);
- out.append("\t");
- out.append(next[j].type);
- if (!Float.isNaN(next[j].score))
+ out.append(sequenceFeature.begin);
+ out.append(TAB);
+ out.append(sequenceFeature.end);
+ out.append(TAB);
+ out.append(sequenceFeature.type);
+ if (!Float.isNaN(sequenceFeature.score))
{
- out.append("\t");
- out.append(next[j].score);
+ out.append(TAB);
+ out.append(sequenceFeature.score);
}
out.append(newline);
}
if (group != null)
{
- out.append("ENDGROUP\t");
+ out.append("ENDGROUP").append(TAB);
out.append(group);
out.append(newline);
groupIndex++;
}
/**
- * generate a gff file for sequence features includes non-pos features by
- * default.
+ * Parse method that is called when a GFF file is dragged to the desktop
+ */
+ @Override
+ public void parse()
+ {
+ AlignViewportI av = getViewport();
+ if (av != null)
+ {
+ if (av.getAlignment() != null)
+ {
+ dataset = av.getAlignment().getDataset();
+ }
+ if (dataset == null)
+ {
+ // working in the applet context ?
+ dataset = av.getAlignment();
+ }
+ }
+ else
+ {
+ dataset = new Alignment(new SequenceI[] {});
+ }
+
+ boolean parseResult = parse(dataset, null, false, true);
+ if (!parseResult)
+ {
+ // pass error up somehow
+ }
+ if (av != null)
+ {
+ // update viewport with the dataset data ?
+ }
+ else
+ {
+ setSeqs(dataset.getSequencesArray());
+ }
+ }
+
+ /**
+ * Implementation of unused abstract method
*
- * @param seqs
- * @param map
+ * @return error message
+ */
+ @Override
+ public String print()
+ {
+ return "Use printGffFormat() or printJalviewFormat()";
+ }
+
+ /**
+ * Returns features output in GFF2 format, including hidden and non-positional
+ * features
+ *
+ * @param sequences
+ * the sequences whose features are to be output
+ * @param visible
+ * a map whose keys are the type names of visible features
* @return
*/
- public String printGFFFormat(SequenceI[] seqs,
- Map<String, FeatureColourI> map)
+ public String printGffFormat(SequenceI[] sequences,
+ Map<String, FeatureColourI> visible)
{
- return printGFFFormat(seqs, map, true, true);
+ return printGffFormat(sequences, visible, true, true);
}
- public String printGFFFormat(SequenceI[] seqs,
- Map<String, FeatureColourI> map, boolean visOnly, boolean nonpos)
+ /**
+ * Returns features output in GFF2 format
+ *
+ * @param sequences
+ * the sequences whose features are to be output
+ * @param visible
+ * a map whose keys are the type names of visible features
+ * @param outputVisibleOnly
+ * @param includeNonPositionalFeatures
+ * @return
+ */
+ public String printGffFormat(SequenceI[] sequences,
+ Map<String, FeatureColourI> visible, boolean outputVisibleOnly,
+ boolean includeNonPositionalFeatures)
{
- StringBuffer out = new StringBuffer();
- SequenceFeature[] next;
+ StringBuilder out = new StringBuilder(256);
+ int version = gffVersion == 0 ? 2 : gffVersion;
+ out.append(String.format("%s %d\n", GFF_VERSION, version));
String source;
boolean isnonpos;
- for (int i = 0; i < seqs.length; i++)
+ for (SequenceI seq : sequences)
{
- if (seqs[i].getSequenceFeatures() != null)
+ SequenceFeature[] features = seq.getSequenceFeatures();
+ if (features != null)
{
- next = seqs[i].getSequenceFeatures();
- for (int j = 0; j < next.length; j++)
+ for (SequenceFeature sf : features)
{
- isnonpos = next[j].begin == 0 && next[j].end == 0;
- if ((!nonpos && isnonpos)
- || (!isnonpos && visOnly && !map
- .containsKey(next[j].type)))
+ isnonpos = sf.begin == 0 && sf.end == 0;
+ if (!includeNonPositionalFeatures && isnonpos)
+ {
+ /*
+ * ignore non-positional features if not wanted
+ */
+ continue;
+ }
+ // TODO why the test !isnonpos here?
+ // what about not visible non-positional features?
+ if (!isnonpos && outputVisibleOnly
+ && !visible.containsKey(sf.type))
{
+ /*
+ * ignore not visible features if not wanted
+ */
continue;
}
- source = next[j].featureGroup;
+ source = sf.featureGroup;
if (source == null)
{
- source = next[j].getDescription();
+ source = sf.getDescription();
}
- out.append(seqs[i].getName());
- out.append("\t");
+ out.append(seq.getName());
+ out.append(TAB);
out.append(source);
- out.append("\t");
- out.append(next[j].type);
- out.append("\t");
- out.append(next[j].begin);
- out.append("\t");
- out.append(next[j].end);
- out.append("\t");
- out.append(next[j].score);
- out.append("\t");
-
- if (next[j].getValue("STRAND") != null)
- {
- out.append(next[j].getValue("STRAND"));
- out.append("\t");
- }
- else
+ out.append(TAB);
+ out.append(sf.type);
+ out.append(TAB);
+ out.append(sf.begin);
+ out.append(TAB);
+ out.append(sf.end);
+ out.append(TAB);
+ out.append(sf.score);
+ out.append(TAB);
+
+ int strand = sf.getStrand();
+ out.append(strand == 1 ? "+" : (strand == -1 ? "-" : "."));
+ out.append(TAB);
+
+ String phase = sf.getPhase();
+ out.append(phase == null ? "." : phase);
+
+ // miscellaneous key-values (GFF column 9)
+ String attributes = sf.getAttributes();
+ if (attributes != null)
{
- out.append(".\t");
+ out.append(TAB).append(attributes);
}
- if (next[j].getValue("FRAME") != null)
- {
- out.append(next[j].getValue("FRAME"));
- }
- else
- {
- out.append(".");
- }
- // TODO: verify/check GFF - should there be a /t here before attribute
- // output ?
+ out.append(newline);
+ }
+ }
+ }
- if (next[j].getValue("ATTRIBUTES") != null)
- {
- out.append(next[j].getValue("ATTRIBUTES"));
- }
+ return out.toString();
+ }
- out.append(newline);
+ /**
+ * Returns a mapping given list of one or more Align descriptors (exonerate
+ * format)
+ *
+ * @param alignedRegions
+ * a list of "Align fromStart toStart fromCount"
+ * @param mapIsFromCdna
+ * if true, 'from' is dna, else 'from' is protein
+ * @param strand
+ * either 1 (forward) or -1 (reverse)
+ * @return
+ * @throws IOException
+ */
+ protected MapList constructCodonMappingFromAlign(
+ List<String> alignedRegions, boolean mapIsFromCdna, int strand)
+ throws IOException
+ {
+ if (strand == 0)
+ {
+ throw new IOException(
+ "Invalid strand for a codon mapping (cannot be 0)");
+ }
+ int regions = alignedRegions.size();
+ // arrays to hold [start, end] for each aligned region
+ int[] fromRanges = new int[regions * 2]; // from dna
+ int[] toRanges = new int[regions * 2]; // to protein
+ int fromRangesIndex = 0;
+ int toRangesIndex = 0;
+
+ for (String range : alignedRegions)
+ {
+ /*
+ * Align mapFromStart mapToStart mapFromCount
+ * e.g. if mapIsFromCdna
+ * Align 11270 143 120
+ * means:
+ * 120 bases from pos 11270 align to pos 143 in peptide
+ * if !mapIsFromCdna this would instead be
+ * Align 143 11270 40
+ */
+ String[] tokens = range.split(" ");
+ if (tokens.length != 3)
+ {
+ throw new IOException("Wrong number of fields for Align");
+ }
+ int fromStart = 0;
+ int toStart = 0;
+ int fromCount = 0;
+ try
+ {
+ fromStart = Integer.parseInt(tokens[0]);
+ toStart = Integer.parseInt(tokens[1]);
+ fromCount = Integer.parseInt(tokens[2]);
+ } catch (NumberFormatException nfe)
+ {
+ throw new IOException("Invalid number in Align field: "
+ + nfe.getMessage());
+ }
+
+ /*
+ * Jalview always models from dna to protein, so adjust values if the
+ * GFF mapping is from protein to dna
+ */
+ if (!mapIsFromCdna)
+ {
+ fromCount *= 3;
+ int temp = fromStart;
+ fromStart = toStart;
+ toStart = temp;
+ }
+ fromRanges[fromRangesIndex++] = fromStart;
+ fromRanges[fromRangesIndex++] = fromStart + strand * (fromCount - 1);
+
+ /*
+ * If a codon has an intron gap, there will be contiguous 'toRanges';
+ * this is handled for us by the MapList constructor.
+ * (It is not clear that exonerate ever generates this case)
+ */
+ toRanges[toRangesIndex++] = toStart;
+ toRanges[toRangesIndex++] = toStart + (fromCount - 1) / 3;
+ }
+
+ return new MapList(fromRanges, toRanges, 3, 1);
+ }
+
+ /**
+ * Parse a GFF format feature. This may include creating a 'dummy' sequence to
+ * hold the feature, or for its mapped sequence, or both, to be resolved
+ * either later in the GFF file (##FASTA section), or when the user loads
+ * additional sequences.
+ *
+ * @param gffColumns
+ * @param alignment
+ * @param relaxedIdMatching
+ * @param newseqs
+ * @return
+ */
+ protected SequenceI parseGff(String[] gffColumns, AlignmentI alignment,
+ boolean relaxedIdMatching, List<SequenceI> newseqs)
+ {
+ /*
+ * GFF: seqid source type start end score strand phase [attributes]
+ */
+ if (gffColumns.length < 5)
+ {
+ System.err.println("Ignoring GFF feature line with too few columns ("
+ + gffColumns.length + ")");
+ return null;
+ }
+ /*
+ * locate referenced sequence in alignment _or_
+ * as a forward or external reference (SequenceDummy)
+ */
+ String seqId = gffColumns[0];
+ SequenceI seq = findSequence(seqId, alignment, newseqs,
+ relaxedIdMatching);
+
+ SequenceFeature sf = null;
+ GffHelperI helper = GffHelperFactory.getHelper(gffColumns);
+ if (helper != null)
+ {
+ try
+ {
+ sf = helper.processGff(seq, gffColumns, alignment, newseqs,
+ relaxedIdMatching);
+ if (sf != null)
+ {
+ seq.addSequenceFeature(sf);
+ while ((seq = alignment.findName(seq, seqId, true)) != null)
+ {
+ seq.addSequenceFeature(new SequenceFeature(sf));
+ }
}
+ } catch (IOException e)
+ {
+ System.err.println("GFF parsing failed with: " + e.getMessage());
+ return null;
}
}
- return out.toString();
+ return seq;
}
/**
- * this is only for the benefit of object polymorphism - method does nothing.
+ * Process the 'column 9' data of the GFF file. This is less formally defined,
+ * and its interpretation will vary depending on the tool that has generated
+ * it.
+ *
+ * @param attributes
+ * @param sf
*/
- @Override
- public void parse()
+ protected void processGffColumnNine(String attributes, SequenceFeature sf)
{
- // IGNORED
+ sf.setAttributes(attributes);
+
+ /*
+ * Parse attributes in column 9 and add them to the sequence feature's
+ * 'otherData' table; use Note as a best proxy for description
+ */
+ char nameValueSeparator = gffVersion == 3 ? '=' : ' ';
+ // TODO check we don't break GFF2 values which include commas here
+ Map<String, List<String>> nameValues = GffHelperBase
+ .parseNameValuePairs(attributes, ";", nameValueSeparator, ",");
+ for (Entry<String, List<String>> attr : nameValues.entrySet())
+ {
+ String values = StringUtils.listToDelimitedString(attr.getValue(),
+ "; ");
+ sf.setValue(attr.getKey(), values);
+ if (NOTE.equals(attr.getKey()))
+ {
+ sf.setDescription(values);
+ }
+ }
}
/**
- * this is only for the benefit of object polymorphism - method does nothing.
+ * After encountering ##fasta in a GFF3 file, process the remainder of the
+ * file as FAST sequence data. Any placeholder sequences created during
+ * feature parsing are updated with the actual sequences.
*
- * @return error message
+ * @param align
+ * @param newseqs
+ * @throws IOException
*/
- @Override
- public String print()
+ protected void processAsFasta(AlignmentI align, List<SequenceI> newseqs)
+ throws IOException
{
- return "USE printGFFFormat() or printJalviewFormat()";
+ try
+ {
+ mark();
+ } catch (IOException q)
+ {
+ }
+ FastaFile parser = new FastaFile(this);
+ List<SequenceI> includedseqs = parser.getSeqs();
+
+ SequenceIdMatcher smatcher = new SequenceIdMatcher(newseqs);
+
+ /*
+ * iterate over includedseqs, and replacing matching ones with newseqs
+ * sequences. Generic iterator not used here because we modify
+ * includedseqs as we go
+ */
+ for (int p = 0, pSize = includedseqs.size(); p < pSize; p++)
+ {
+ // search for any dummy seqs that this sequence can be used to update
+ SequenceI includedSeq = includedseqs.get(p);
+ SequenceI dummyseq = smatcher.findIdMatch(includedSeq);
+ if (dummyseq != null && dummyseq instanceof SequenceDummy)
+ {
+ // probably have the pattern wrong
+ // idea is that a flyweight proxy for a sequence ID can be created for
+ // 1. stable reference creation
+ // 2. addition of annotation
+ // 3. future replacement by a real sequence
+ // current pattern is to create SequenceDummy objects - a convenience
+ // constructor for a Sequence.
+ // problem is that when promoted to a real sequence, all references
+ // need to be updated somehow. We avoid that by keeping the same object.
+ ((SequenceDummy) dummyseq).become(includedSeq);
+ dummyseq.createDatasetSequence();
+
+ /*
+ * Update mappings so they are now to the dataset sequence
+ */
+ for (AlignedCodonFrame mapping : align.getCodonFrames())
+ {
+ mapping.updateToDataset(dummyseq);
+ }
+
+ /*
+ * replace parsed sequence with the realised forward reference
+ */
+ includedseqs.set(p, dummyseq);
+
+ /*
+ * and remove from the newseqs list
+ */
+ newseqs.remove(dummyseq);
+ }
+ }
+
+ /*
+ * finally add sequences to the dataset
+ */
+ for (SequenceI seq : includedseqs)
+ {
+ // experimental: mapping-based 'alignment' to query sequence
+ AlignmentUtils.alignSequenceAs(seq, align,
+ String.valueOf(align.getGapCharacter()), false, true);
+
+ // rename sequences if GFF handler requested this
+ // TODO a more elegant way e.g. gffHelper.postProcess(newseqs) ?
+ SequenceFeature[] sfs = seq.getSequenceFeatures();
+ if (sfs != null)
+ {
+ String newName = (String) sfs[0].getValue(GffHelperI.RENAME_TOKEN);
+ if (newName != null)
+ {
+ seq.setName(newName);
+ }
+ }
+ align.addSequence(seq);
+ }
}
+ /**
+ * Process a ## directive
+ *
+ * @param line
+ * @param gffProps
+ * @param align
+ * @param newseqs
+ * @throws IOException
+ */
+ protected void processGffPragma(String line,
+ Map<String, String> gffProps, AlignmentI align,
+ List<SequenceI> newseqs) throws IOException
+ {
+ line = line.trim();
+ if ("###".equals(line))
+ {
+ // close off any open 'forward references'
+ return;
+ }
+
+ String[] tokens = line.substring(2).split(" ");
+ String pragma = tokens[0];
+ String value = tokens.length == 1 ? null : tokens[1];
+
+ if ("gff-version".equalsIgnoreCase(pragma))
+ {
+ if (value != null)
+ {
+ try
+ {
+ // value may be e.g. "3.1.2"
+ gffVersion = Integer.parseInt(value.split("\\.")[0]);
+ } catch (NumberFormatException e)
+ {
+ // ignore
+ }
+ }
+ }
+ else if ("sequence-region".equalsIgnoreCase(pragma))
+ {
+ // could capture <seqid start end> if wanted here
+ }
+ else if ("feature-ontology".equalsIgnoreCase(pragma))
+ {
+ // should resolve against the specified feature ontology URI
+ }
+ else if ("attribute-ontology".equalsIgnoreCase(pragma))
+ {
+ // URI of attribute ontology - not currently used in GFF3
+ }
+ else if ("source-ontology".equalsIgnoreCase(pragma))
+ {
+ // URI of source ontology - not currently used in GFF3
+ }
+ else if ("species-build".equalsIgnoreCase(pragma))
+ {
+ // save URI of specific NCBI taxon version of annotations
+ gffProps.put("species-build", value);
+ }
+ else if ("fasta".equalsIgnoreCase(pragma))
+ {
+ // process the rest of the file as a fasta file and replace any dummy
+ // sequence IDs
+ processAsFasta(align, newseqs);
+ }
+ else
+ {
+ System.err.println("Ignoring unknown pragma: " + line);
+ }
+ }
}
package jalview.io;
import jalview.api.ComplexAlignFile;
+import jalview.api.FeatureSettingsModelI;
import jalview.api.FeaturesDisplayedI;
+import jalview.api.FeaturesSourceI;
import jalview.bin.Jalview;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.ColumnSelection;
SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
loader.start();
}
}
+ @Override
public void run()
{
String title = protocol.equals(AppletFormatAdapter.PASTE) ? "Copied From Clipboard"
// just in case the caller didn't identify the file for us
if (source != null)
{
- format = new IdentifyFile().Identify(source, false); // identify
+ format = new IdentifyFile().identify(source, false); // identify
// stream and
// rewind rather
// than close
}
else
{
- format = new IdentifyFile().Identify(file, protocol);
+ format = new IdentifyFile().identify(file, protocol);
}
}
}
}
+ FeatureSettingsModelI proxyColourScheme = source
+ .getFeatureColourScheme();
if (viewport != null)
{
+ if (proxyColourScheme != null)
+ {
+ viewport.applyFeaturesStyle(proxyColourScheme);
+ }
// append to existing alignment
viewport.addAlignment(al, title);
}
.getColumnSelection();
SequenceI[] hiddenSeqs = ((ComplexAlignFile) source)
.getHiddenSequences();
- boolean showSeqFeatures = ((ComplexAlignFile) source)
- .isShowSeqFeatures();
String colourSchemeName = ((ComplexAlignFile) source)
.getGlobalColourScheme();
FeaturesDisplayedI fd = ((ComplexAlignFile) source)
.getDisplayedFeatures();
alignFrame = new AlignFrame(al, hiddenSeqs, colSel,
AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
-
- alignFrame.getViewport().setShowSequenceFeatures(
- showSeqFeatures);
alignFrame.getViewport().setFeaturesDisplayed(fd);
+ alignFrame.getViewport().setShowSequenceFeatures(
+ ((ComplexAlignFile) source).isShowSeqFeatures());
ColourSchemeI cs = ColourSchemeMapper.getJalviewColourScheme(
colourSchemeName, al);
if (cs != null)
{
alignFrame = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT);
+ if (source instanceof FeaturesSourceI)
+ {
+ alignFrame.getViewport().setShowSequenceFeatures(true);
+ }
}
// add metadata and update ui
if (!protocol.equals(AppletFormatAdapter.PASTE))
{
alignFrame.setFileName(file, format);
}
-
+ if (proxyColourScheme != null)
+ {
+ alignFrame.getViewport()
+ .applyFeaturesStyle(proxyColourScheme);
+ }
alignFrame.statusBar.setText(MessageManager.formatMessage(
"label.successfully_loaded_file",
new String[] { title }));
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
JOptionPane.showInternalMessageDialog(Desktop.desktop,
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
javax.swing.JOptionPane.showInternalMessageDialog(
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
javax.swing.JOptionPane.showInternalMessageDialog(
*
* @see java.lang.Object#finalize()
*/
+ @Override
protected void finalize() throws Throwable
{
source = null;
import jalview.api.AlignExportSettingI;
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
+import jalview.api.FeatureSettingsModelI;
import jalview.util.MessageManager;
import java.io.BufferedReader;
}
/**
+ * not for general use, creates a fileParse object for an existing reader with
+ * configurable values for the origin and the type of the source
+ */
+ public FileParse(BufferedReader source, String originString,
+ String typeString)
+ {
+ type = typeString;
+ error = false;
+ inFile = null;
+ dataName = originString;
+ dataIn = source;
+ try
+ {
+ if (dataIn.markSupported())
+ {
+ dataIn.mark(READAHEAD_LIMIT);
+ }
+ } catch (IOException q)
+ {
+
+ }
+ }
+
+ /**
* Create a datasource for input to Jalview. See AppletFormatAdapter for the
* types of sources that are handled.
*
}
/**
- * rewinds the datasource the beginning.
+ * Rewinds the datasource to the marked point if possible
+ *
+ * @param bytesRead
*
*/
- public void reset() throws IOException
+ public void reset(int bytesRead) throws IOException
{
+ if (bytesRead >= READAHEAD_LIMIT)
+ {
+ System.err.println(String.format(
+ "File reset error: read %d bytes but reset limit is %d",
+ bytesRead, READAHEAD_LIMIT));
+ }
if (dataIn != null && !error)
{
dataIn.reset();
}
// could also set export/import settings
}
+
+ /**
+ * Returns the preferred feature colour configuration if there is one, else
+ * null
+ *
+ * @return
+ */
+ public FeatureSettingsModelI getFeatureColourScheme()
+ {
+ return null;
+ }
}
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.io;
-
-import jalview.api.AlignViewportI;
-import jalview.datamodel.AlignedCodonFrame;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.SequenceI;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * A GFF3 File parsing wrapper for the tangled mess that is FeaturesFile.
- *
- * This class implements the methods relied on by FileLoader/FormatAdapter in
- * order to allow them to load alignments directly from GFF2 and GFF3 files that
- * contain sequence data and alignment information.
- *
- * Major issues:
- *
- * 1. GFF3 files commonly include mappings between DNA, RNA and Protein - so
- * this class needs a dataset AlignmentI context to create alignment codon
- * mappings.
- *
- * 2. A single GFF3 file can generate many distinct alignments. Support will be
- * needed to allow several AlignmentI instances to be generated from a single
- * file.
- *
- *
- * @author jprocter
- *
- */
-public class Gff3File extends FeaturesFile
-{
-
- /**
- *
- */
- public Gff3File()
- {
- super();
- }
-
- /**
- * @param source
- * @throws IOException
- */
- public Gff3File(FileParse source) throws IOException
- {
- super(source);
- }
-
- /**
- * @param inFile
- * @param type
- * @throws IOException
- */
- public Gff3File(String inFile, String type) throws IOException
- {
- super(inFile, type);
- }
-
- /**
- * @param parseImmediately
- * @param source
- * @throws IOException
- */
- public Gff3File(boolean parseImmediately, FileParse source)
- throws IOException
- {
- super(parseImmediately, source);
- }
-
- /**
- * @param parseImmediately
- * @param inFile
- * @param type
- * @throws IOException
- */
- public Gff3File(boolean parseImmediately, String inFile, String type)
- throws IOException
- {
- super(parseImmediately, inFile, type);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see jalview.io.FeaturesFile#print()
- */
- @Override
- public String print()
- {
- // TODO GFF3 writer with sensible defaults for writing alignment data
-
- // return super.printGFFFormat(seqs, visible);
- return ("Not yet implemented.");
- }
-
- AlignmentI dataset;
-
- List<AlignmentI> alignments;
-
- @Override
- public void parse()
- {
- AlignViewportI av = getViewport();
- if (av != null)
- {
- if (av.getAlignment() != null)
- {
- dataset = av.getAlignment().getDataset();
- }
- if (dataset == null)
- {
- // working in the applet context ?
- dataset = av.getAlignment();
- }
- }
- else
- {
- dataset = new Alignment(new SequenceI[] {});
- }
-
- boolean parseResult = parse(dataset, null, null, false, true);
- if (!parseResult)
- {
- // pass error up somehow
- }
- if (av != null)
- {
- // update viewport with the dataset data ?
- }
- else
- {
- setSeqs(dataset.getSequencesArray());
- }
-
- }
-
- @Override
- public void addProperties(AlignmentI al)
- {
- super.addProperties(al);
- if (dataset.getCodonFrames() != null)
- {
- AlignmentI ds = (al.getDataset() == null) ? al : al.getDataset();
- for (AlignedCodonFrame codons : dataset.getCodonFrames())
- {
- ds.addCodonFrame(codons);
- }
- }
- }
-}
package jalview.io;
import jalview.api.ComplexAlignFile;
+import jalview.api.FeatureSettingsModelI;
import jalview.api.FeaturesDisplayedI;
import jalview.datamodel.ColumnSelection;
import jalview.datamodel.SequenceI;
"Print method of HtmlFile is not supported!");
}
+ @Override
public boolean isShowSeqFeatures()
{
return showSeqFeatures;
this.showSeqFeatures = showSeqFeatures;
}
+ @Override
public String getGlobalColourScheme()
{
return globalColourScheme;
this.globalColourScheme = globalColourScheme;
}
+ @Override
public ColumnSelection getColumnSelection()
{
return columnSelection;
this.columnSelection = columnSelection;
}
+ @Override
public SequenceI[] getHiddenSequences()
{
return hiddenSequences;
return displayedFeatures;
}
+ /**
+ * Returns a descriptor for suitable feature display settings with
+ * <ul>
+ * <li>ResNums or insertions features visible</li>
+ * <li>insertions features coloured red</li>
+ * <li>ResNum features coloured by label</li>
+ * <li>Insertions displayed above (on top of) ResNums</li>
+ * </ul>
+ */
+ @Override
+ public FeatureSettingsModelI getFeatureColourScheme()
+ {
+ return new PDBFeatureSettings();
+ }
+
}
*/
public class IdentifyFile
{
- public static final String GFF3File = "GFF v2 or v3";
+ public static final String FeaturesFile = "GFF or Jalview features";
/**
* Identify a datasource's file content.
* DOCUMENT ME!
* @return ID String
*/
- public String Identify(String file, String protocol)
+ public String identify(String file, String protocol)
{
String emessage = "UNIDENTIFIED FILE PARSING ERROR";
FileParse parser = null;
parser = new FileParse(file, protocol);
if (parser.isValid())
{
- return Identify(parser);
+ return identify(parser);
}
} catch (Exception e)
{
return emessage;
}
- public String Identify(FileParse source)
+ public String identify(FileParse source)
{
- return Identify(source, true); // preserves original behaviour prior to
+ return identify(source, true); // preserves original behaviour prior to
// version 2.3
}
* @param closeSource
* @return filetype string
*/
- public String Identify(FileParse source, boolean closeSource)
+ public String identify(FileParse source, boolean closeSource)
{
String reply = "PFAM";
String data;
- int length = 0;
+ int bytesRead = 0;
+ int trimmedLength = 0;
boolean lineswereskipped = false;
boolean isBinary = false; // true if length is non-zero and non-printable
// characters are encountered
}
while ((data = source.nextLine()) != null)
{
- length += data.trim().length();
+ bytesRead += data.length();
+ trimmedLength += data.trim().length();
if (!lineswereskipped)
{
for (int i = 0; !isBinary && i < data.length(); i++)
if (data.startsWith("##GFF-VERSION"))
{
- reply = GFF3File;
+ // GFF - possibly embedded in a Jalview features file!
+ reply = FeaturesFile;
+ break;
+ }
+ if (looksLikeFeatureData(data))
+ {
+ reply = FeaturesFile;
break;
}
if (data.indexOf("# STOCKHOLM") > -1)
reply = "STH";
break;
}
+ if (data.indexOf("_ENTRY.ID") > -1
+ || data.indexOf("_AUDIT_AUTHOR.NAME") > -1
+ || data.indexOf("_ATOM_SITE.") > -1)
+ {
+ reply = "mmCIF";
+ break;
+ }
// if (data.indexOf(">") > -1)
if (data.startsWith(">"))
{
} catch (IOException ex)
{
}
- ;
if (dta != null && dta.indexOf("*") > -1)
{
starterm = true;
// read as a FASTA (probably)
break;
}
- if ((data.indexOf("<") > -1)) // possible Markup Language data i.e HTML,
+ int lessThan = data.indexOf("<");
+ if ((lessThan > -1)) // possible Markup Language data i.e HTML,
// RNAML, XML
{
- boolean identified = false;
- do
- {
- if (data.matches("<(?i)html(\"[^\"]*\"|'[^']*'|[^'\">])*>"))
- {
- reply = HtmlFile.FILE_DESC;
- identified = true;
- break;
- }
-
- if (data.matches("<(?i)rnaml (\"[^\"]*\"|'[^']*'|[^'\">])*>"))
- {
- reply = "RNAML";
- identified = true;
- break;
- }
- } while ((data = source.nextLine()) != null);
-
- if (identified)
+ String upper = data.toUpperCase();
+ if (upper.substring(lessThan).startsWith("<HTML"))
{
+ reply = HtmlFile.FILE_DESC;
break;
}
- if (data == null)
+ if (upper.substring(lessThan).startsWith("<RNAML"))
{
+ reply = "RNAML";
break;
}
}
reply = PhylipFile.FILE_DESC;
break;
}
-
- /*
- * // TODO comment out SimpleBLAST identification for Jalview 2.4.1 else
- * if (!lineswereskipped && data.indexOf("BLAST")<4) { reply =
- * "SimpleBLAST"; break;
- *
- * } // end comments for Jalview 2.4.1
- */
- else if (!lineswereskipped && data.charAt(0) != '*'
- && data.charAt(0) != ' '
- && data.indexOf(":") < data.indexOf(",")) // &&
- // data.indexOf(",")<data.indexOf(",",
- // data.indexOf(",")))
+ else
{
- // file looks like a concise JNet file
- reply = "JnetFile";
- break;
+ if (!lineswereskipped && looksLikeJnetData(data))
+ {
+ reply = "JnetFile";
+ break;
+ }
}
lineswereskipped = true; // this means there was some junk before any
}
else
{
- source.reset(); // so the file can be parsed from the beginning again.
+ source.reset(bytesRead); // so the file can be parsed from the mark
}
} catch (Exception ex)
{
System.err.println("File Identification failed!\n" + ex);
return source.errormessage;
}
- if (length == 0)
+ if (trimmedLength == 0)
{
System.err
.println("File Identification failed! - Empty file was read.");
return reply;
}
+ /**
+ * Returns true if the data appears to be Jnet concise annotation format
+ *
+ * @param data
+ * @return
+ */
+ protected boolean looksLikeJnetData(String data)
+ {
+ char firstChar = data.charAt(0);
+ int colonPos = data.indexOf(":");
+ int commaPos = data.indexOf(",");
+ boolean isJnet = firstChar != '*' && firstChar != ' ' && colonPos > -1
+ && commaPos > -1 && colonPos < commaPos;
+ // && data.indexOf(",")<data.indexOf(",", data.indexOf(","))) / ??
+ return isJnet;
+ }
+
+ /**
+ * Returns true if the data has at least 6 tab-delimited fields _and_
+ * fields 4 and 5 are integer (start/end)
+ * @param data
+ * @return
+ */
+ protected boolean looksLikeFeatureData(String data)
+ {
+ if (data == null)
+ {
+ return false;
+ }
+ String[] columns = data.split("\t");
+ if (columns.length < 6) {
+ return false;
+ }
+ for (int col = 3; col < 5; col++)
+ {
+ try {
+ Integer.parseInt(columns[col]);
+ } catch (NumberFormatException e) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public static void main(String[] args)
{
for (int i = 0; args != null && i < args.length; i++)
{
IdentifyFile ider = new IdentifyFile();
- String type = ider.Identify(args[i], AppletFormatAdapter.FILE);
+ String type = ider.identify(args[i], AppletFormatAdapter.FILE);
System.out.println("Type of " + args[i] + " is " + type);
}
if (args == null || args.length == 0)
import jalview.api.AlignmentViewPanel;
import jalview.api.ComplexAlignFile;
import jalview.api.FeatureRenderer;
+import jalview.api.FeatureSettingsModelI;
import jalview.api.FeaturesDisplayedI;
import jalview.bin.BuildDetails;
import jalview.datamodel.AlignmentAnnotation;
}
}
+ @Override
public String getGlobalColourScheme()
{
return globalColourScheme;
this.displayedFeatures = displayedFeatures;
}
+ @Override
public void configureForView(AlignmentViewPanel avpanel)
{
super.configureForView(avpanel);
}
+ @Override
public boolean isShowSeqFeatures()
{
return showSeqFeatures;
return hiddenColumns;
}
+ @Override
public ColumnSelection getColumnSelection()
{
return columnSelection;
this.columnSelection = columnSelection;
}
+ @Override
public SequenceI[] getHiddenSequences()
{
if (hiddenSequences == null || hiddenSequences.isEmpty())
this.exportJalviewSettings = exportJalviewSettings;
}
}
+
+ /**
+ * Returns a descriptor for suitable feature display settings with
+ * <ul>
+ * <li>ResNums or insertions features visible</li>
+ * <li>insertions features coloured red</li>
+ * <li>ResNum features coloured by label</li>
+ * <li>Insertions displayed above (on top of) ResNums</li>
+ * </ul>
+ */
+ @Override
+ public FeatureSettingsModelI getFeatureColourScheme()
+ {
+ return new PDBFeatureSettings();
+ }
}
--- /dev/null
+package jalview.io;
+
+import jalview.api.FeatureColourI;
+import jalview.schemes.FeatureColour;
+import jalview.schemes.FeatureSettingsAdapter;
+
+import java.awt.Color;
+
+public class PDBFeatureSettings extends FeatureSettingsAdapter
+{
+
+ public static final String FEATURE_INSERTION = "INSERTION";
+
+ public static final String FEATURE_RES_NUM = "RESNUM";
+
+ @Override
+ public boolean isFeatureDisplayed(String type)
+ {
+ return type.equalsIgnoreCase(FEATURE_INSERTION)
+ || type.equalsIgnoreCase(FEATURE_RES_NUM);
+ }
+
+ @Override
+ public FeatureColourI getFeatureColour(String type)
+ {
+ if (type.equalsIgnoreCase(FEATURE_INSERTION))
+ {
+ return new FeatureColour()
+ {
+
+ @Override
+ public Color getColour()
+ {
+ return Color.RED;
+ }
+ };
+ }
+ return null;
+ }
+
+ /**
+ * Order to render insertion after ResNum
+ */
+ @Override
+ public int compare(String feature1, String feature2)
+ {
+ if (feature1.equalsIgnoreCase(FEATURE_INSERTION))
+ {
+ return +1;
+ }
+ if (feature2.equalsIgnoreCase(FEATURE_INSERTION))
+ {
+ return -1;
+ }
+ if (feature1.equalsIgnoreCase(FEATURE_RES_NUM))
+ {
+ return +1;
+ }
+ if (feature2.equalsIgnoreCase(FEATURE_RES_NUM))
+ {
+ return -1;
+ }
+ return 0;
+ }
+}
+
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
+import jalview.io.gff.GffConstants;
+import jalview.util.DBRefUtils;
import jalview.util.UrlLink;
import java.util.ArrayList;
}
/**
- * appends the features at rpos to the given stringbuffer ready for display in
- * a tooltip
+ * Append text for the list of features to the tooltip
*
* @param tooltipText2
- * @param linkImageURL
* @param rpos
* @param features
- * TODO refactor to Jalview 'utilities' somehow.
+ * @param minmax
*/
public void appendFeatures(final StringBuffer tooltipText2, int rpos,
- List<SequenceFeature> features)
+ List<SequenceFeature> features, Map<String, float[][]> minmax)
{
- appendFeatures(tooltipText2, rpos, features, null);
+ if (features != null)
+ {
+ for (SequenceFeature feature : features)
+ {
+ appendFeature(tooltipText2, rpos, minmax, feature);
+ }
+ }
}
- public void appendFeatures(final StringBuffer tooltipText2, int rpos,
- List<SequenceFeature> features, Map<String, float[][]> map)
+ /**
+ * Appends text for one sequence feature to the string buffer
+ *
+ * @param sb
+ * @param rpos
+ * @param minmax
+ * {{min, max}, {min, max}} positional and non-positional feature
+ * scores for this type
+ * @param feature
+ */
+ void appendFeature(final StringBuffer sb, int rpos,
+ Map<String, float[][]> minmax, SequenceFeature feature)
{
- String tmpString;
- if (features != null)
+ if ("disulfide bond".equals(feature.getType()))
{
- for (SequenceFeature feature : features)
+ if (feature.getBegin() == rpos || feature.getEnd() == rpos)
{
- if (feature.getType().equals("disulfide bond"))
+ if (sb.length() > 6)
{
- if (feature.getBegin() == rpos || feature.getEnd() == rpos)
- {
- if (tooltipText2.length() > 6)
- {
- tooltipText2.append("<br>");
- }
- tooltipText2.append("disulfide bond " + feature.getBegin()
- + ":" + feature.getEnd());
- }
+ sb.append("<br>");
}
- else
+ sb.append("disulfide bond ").append(feature.getBegin()).append(":")
+ .append(feature.getEnd());
+ }
+ }
+ else
+ {
+ if (sb.length() > 6)
+ {
+ sb.append("<br>");
+ }
+ // TODO: remove this hack to display link only features
+ boolean linkOnly = feature.getValue("linkonly") != null;
+ if (!linkOnly)
+ {
+ sb.append(feature.getType()).append(" ");
+ if (rpos != 0)
{
- if (tooltipText2.length() > 6)
+ // we are marking a positional feature
+ sb.append(feature.begin);
+ }
+ if (feature.begin != feature.end)
+ {
+ sb.append(" " + feature.end);
+ }
+
+ if (feature.getDescription() != null
+ && !feature.description.equals(feature.getType()))
+ {
+ String tmpString = feature.getDescription();
+ String tmp2up = tmpString.toUpperCase();
+ final int startTag = tmp2up.indexOf("<HTML>");
+ if (startTag > -1)
{
- tooltipText2.append("<br>");
+ tmpString = tmpString.substring(startTag + 6);
+ tmp2up = tmp2up.substring(startTag + 6);
}
- // TODO: remove this hack to display link only features
- boolean linkOnly = feature.getValue("linkonly") != null;
- if (!linkOnly)
+ // TODO strips off </body> but not <body> - is that intended?
+ int endTag = tmp2up.indexOf("</BODY>");
+ if (endTag > -1)
{
- tooltipText2.append(feature.getType() + " ");
- if (rpos != 0)
- {
- // we are marking a positional feature
- tooltipText2.append(feature.begin);
- }
- if (feature.begin != feature.end)
- {
- tooltipText2.append(" " + feature.end);
- }
-
- if (feature.getDescription() != null
- && !feature.description.equals(feature.getType()))
- {
- tmpString = feature.getDescription();
- String tmp2up = tmpString.toUpperCase();
- int startTag = tmp2up.indexOf("<HTML>");
- if (startTag > -1)
- {
- tmpString = tmpString.substring(startTag + 6);
- tmp2up = tmp2up.substring(startTag + 6);
- }
- int endTag = tmp2up.indexOf("</BODY>");
- if (endTag > -1)
- {
- tmpString = tmpString.substring(0, endTag);
- tmp2up = tmp2up.substring(0, endTag);
- }
- endTag = tmp2up.indexOf("</HTML>");
- if (endTag > -1)
- {
- tmpString = tmpString.substring(0, endTag);
- }
-
- if (startTag > -1)
- {
- tooltipText2.append("; " + tmpString);
- }
- else
- {
- if (tmpString.indexOf("<") > -1
- || tmpString.indexOf(">") > -1)
- {
- // The description does not specify html is to
- // be used, so we must remove < > symbols
- tmpString = tmpString.replaceAll("<", "<");
- tmpString = tmpString.replaceAll(">", ">");
-
- tooltipText2.append("; ");
- tooltipText2.append(tmpString);
+ tmpString = tmpString.substring(0, endTag);
+ tmp2up = tmp2up.substring(0, endTag);
+ }
+ endTag = tmp2up.indexOf("</HTML>");
+ if (endTag > -1)
+ {
+ tmpString = tmpString.substring(0, endTag);
+ }
- }
- else
- {
- tooltipText2.append("; " + tmpString);
- }
- }
- }
- // check score should be shown
- if (!Float.isNaN(feature.getScore()))
+ if (startTag > -1)
+ {
+ sb.append("; ").append(tmpString);
+ }
+ else
+ {
+ if (tmpString.indexOf("<") > -1
+ || tmpString.indexOf(">") > -1)
{
- float[][] rng = (map == null) ? null : (map.get(feature
- .getType()));
- if (rng != null && rng[0] != null && rng[0][0] != rng[0][1])
- {
- tooltipText2.append(" Score=" + feature.getScore());
- }
+ // The description does not specify html is to
+ // be used, so we must remove < > symbols
+ tmpString = tmpString.replaceAll("<", "<");
+ tmpString = tmpString.replaceAll(">", ">");
+ sb.append("; ").append(tmpString);
}
- if (feature.getValue("status") != null)
+ else
{
- String status = feature.getValue("status").toString();
- if (status.length() > 0)
- {
- tooltipText2.append("; (" + feature.getValue("status")
- + ")");
- }
+ sb.append("; ").append(tmpString);
}
}
}
- if (feature.links != null)
+
+ /*
+ * score should be shown if there is one, and min != max
+ * for this feature type (e.g. not all 0)
+ */
+ if (!Float.isNaN(feature.getScore()))
{
- if (linkImageURL != null)
+ float[][] rng = (minmax == null) ? null : minmax.get(feature
+ .getType());
+ if (rng != null && rng[0] != null && rng[0][0] != rng[0][1])
{
- tooltipText2.append(" <img src=\"" + linkImageURL + "\">");
+ sb.append(" Score=").append(
+ String.valueOf(feature.getScore()));
}
- else
+ }
+ String status = (String) feature.getValue("status");
+ if (status != null && status.length() > 0)
+ {
+ sb.append("; (").append(status).append(")");
+ }
+ String clinSig = (String) feature
+ .getValue(GffConstants.CLINICAL_SIGNIFICANCE);
+ if (clinSig != null)
+ {
+ sb.append("; ").append(clinSig);
+ }
+ }
+ }
+ appendLinks(sb, feature);
+ }
+
+ /**
+ * Format and appends any hyperlinks for the sequence feature to the string
+ * buffer
+ *
+ * @param sb
+ * @param feature
+ */
+ void appendLinks(final StringBuffer sb, SequenceFeature feature)
+ {
+ if (feature.links != null)
+ {
+ if (linkImageURL != null)
+ {
+ sb.append(" <img src=\"" + linkImageURL + "\">");
+ }
+ else
+ {
+ for (String urlstring : feature.links)
+ {
+ try
{
- for (String urlstring : feature.links)
+ for (String[] urllink : createLinksFrom(null, urlstring))
{
- try
- {
- for (String[] urllink : createLinksFrom(null, urlstring))
- {
- tooltipText2.append("<br/> <a href=\""
- + urllink[3]
- + "\" target=\""
- + urllink[0]
- + "\">"
- + (urllink[0].toLowerCase().equals(
- urllink[1].toLowerCase()) ? urllink[0]
- : (urllink[0] + ":" + urllink[1]))
- + "</a></br>");
- }
- } catch (Exception x)
- {
- System.err.println("problem when creating links from "
- + urlstring);
- x.printStackTrace();
- }
+ sb.append("<br/> <a href=\""
+ + urllink[3]
+ + "\" target=\""
+ + urllink[0]
+ + "\">"
+ + (urllink[0].toLowerCase().equals(
+ urllink[1].toLowerCase()) ? urllink[0]
+ : (urllink[0] + ":" + urllink[1]))
+ + "</a></br>");
}
+ } catch (Exception x)
+ {
+ System.err.println("problem when creating links from "
+ + urlstring);
+ x.printStackTrace();
}
-
}
}
+
}
}
* @return String[][] { String[] { link target, link label, dynamic component
* inserted (if any), url }}
*/
- public String[][] createLinksFrom(SequenceI seq, String link)
+ String[][] createLinksFrom(SequenceI seq, String link)
{
- ArrayList<String[]> urlSets = new ArrayList<String[]>();
- ArrayList<String> uniques = new ArrayList<String>();
+ List<String[]> urlSets = new ArrayList<String[]>();
+ List<String> uniques = new ArrayList<String>();
UrlLink urlLink = new UrlLink(link);
if (!urlLink.isValid())
{
System.err.println(urlLink.getInvalidMessage());
return null;
}
- final String target = urlLink.getTarget(); // link.substring(0,
- // link.indexOf("|"));
- final String label = urlLink.getLabel();
if (seq != null && urlLink.isDynamic())
{
-
- // collect matching db-refs
- DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs(seq.getDBRefs(),
- new String[] { target });
- // collect id string too
- String id = seq.getName();
- String descr = seq.getDescription();
- if (descr != null && descr.length() < 1)
+ urlSets.addAll(createDynamicLinks(seq, urlLink, uniques));
+ }
+ else
+ {
+ String target = urlLink.getTarget();
+ String label = urlLink.getLabel();
+ String unq = label + "|" + urlLink.getUrl_prefix();
+ if (!uniques.contains(unq))
{
- descr = null;
+ uniques.add(unq);
+ urlSets.add(new String[] { target, label, null,
+ urlLink.getUrl_prefix() });
}
- if (dbr != null)
+ }
+
+ return urlSets.toArray(new String[][] {});
+ }
+
+ /**
+ * Formats and returns a list of dynamic href links
+ *
+ * @param seq
+ * @param urlLink
+ * @param uniques
+ */
+ List<String[]> createDynamicLinks(SequenceI seq, UrlLink urlLink,
+ List<String> uniques)
+ {
+ List<String[]> result = new ArrayList<String[]>();
+ final String target = urlLink.getTarget();
+ final String label = urlLink.getLabel();
+
+ // collect matching db-refs
+ DBRefEntry[] dbr = DBRefUtils.selectRefs(seq.getDBRefs(),
+ new String[] { target });
+ // collect id string too
+ String id = seq.getName();
+ String descr = seq.getDescription();
+ if (descr != null && descr.length() < 1)
+ {
+ descr = null;
+ }
+ if (dbr != null)
+ {
+ for (int r = 0; r < dbr.length; r++)
{
- for (int r = 0; r < dbr.length; r++)
+ if (id != null && dbr[r].getAccessionId().equals(id))
{
- if (id != null && dbr[r].getAccessionId().equals(id))
- {
- // suppress duplicate link creation for the bare sequence ID
- // string with this link
- id = null;
- }
- // create Bare ID link for this RUL
- String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(), true);
- if (urls != null)
- {
- for (int u = 0; u < urls.length; u += 2)
- {
- String unq = urls[u] + "|" + urls[u + 1];
- if (!uniques.contains(unq))
- {
- urlSets.add(new String[] { target, label, urls[u],
- urls[u + 1] });
- uniques.add(unq);
- }
- }
- }
+ // suppress duplicate link creation for the bare sequence ID
+ // string with this link
+ id = null;
}
- }
- if (id != null)
- {
- // create Bare ID link for this RUL
- String[] urls = urlLink.makeUrls(id, true);
+ // create Bare ID link for this URL
+ String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(), true);
if (urls != null)
{
for (int u = 0; u < urls.length; u += 2)
String unq = urls[u] + "|" + urls[u + 1];
if (!uniques.contains(unq))
{
- urlSets.add(new String[] { target, label, urls[u],
+ result.add(new String[] { target, label, urls[u],
urls[u + 1] });
uniques.add(unq);
}
}
}
}
- if (descr != null && urlLink.getRegexReplace() != null)
+ }
+ if (id != null)
+ {
+ // create Bare ID link for this URL
+ String[] urls = urlLink.makeUrls(id, true);
+ if (urls != null)
{
- // create link for this URL from description only if regex matches
- String[] urls = urlLink.makeUrls(descr, true);
- if (urls != null)
+ for (int u = 0; u < urls.length; u += 2)
{
- for (int u = 0; u < urls.length; u += 2)
+ String unq = urls[u] + "|" + urls[u + 1];
+ if (!uniques.contains(unq))
{
- String unq = urls[u] + "|" + urls[u + 1];
- if (!uniques.contains(unq))
- {
- urlSets.add(new String[] { target, label, urls[u],
- urls[u + 1] });
- uniques.add(unq);
- }
+ result.add(new String[] { target, label, urls[u],
+ urls[u + 1] });
+ uniques.add(unq);
}
}
}
-
}
- else
+ if (descr != null && urlLink.getRegexReplace() != null)
{
- String unq = label + "|" + urlLink.getUrl_prefix();
- if (!uniques.contains(unq))
+ // create link for this URL from description only if regex matches
+ String[] urls = urlLink.makeUrls(descr, true);
+ if (urls != null)
{
- uniques.add(unq);
- // Add a non-dynamic link
- urlSets.add(new String[] { target, label, null,
- urlLink.getUrl_prefix() });
+ for (int u = 0; u < urls.length; u += 2)
+ {
+ String unq = urls[u] + "|" + urls[u + 1];
+ if (!uniques.contains(unq))
+ {
+ result.add(new String[] { target, label, urls[u],
+ urls[u + 1] });
+ uniques.add(unq);
+ }
+ }
}
}
-
- return urlSets.toArray(new String[][] {});
+ return result;
}
public void createSequenceAnnotationReport(final StringBuffer tip,
public void createSequenceAnnotationReport(final StringBuffer tip,
SequenceI sequence, boolean showDbRefs, boolean showNpFeats,
- boolean tableWrap, Map<String, float[][]> map)
+ boolean tableWrap, Map<String, float[][]> minmax)
{
String tmp;
tip.append("<i>");
int sz = -tip.length();
List<SequenceFeature> tfeat = new ArrayList<SequenceFeature>();
tfeat.add(features[i]);
- appendFeatures(tip, 0, tfeat, map);
+ appendFeatures(tip, 0, tfeat, minmax);
sz += tip.length();
maxWidth = Math.max(maxWidth, sz);
}
--- /dev/null
+package jalview.io;
+
+import jalview.analysis.AlignSeq;
+import jalview.api.FeatureSettingsModelI;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.DBRefSource;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
+import jalview.structure.StructureViewSettings;
+
+import java.awt.Color;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Vector;
+
+import MCview.PDBChain;
+
+public abstract class StructureFile extends AlignFile
+{
+
+ private String id;
+
+ private String dbRefType;
+ /**
+ * set to true to add derived sequence annotations (temp factor read from
+ * file, or computed secondary structure) to the alignment
+ */
+ protected boolean visibleChainAnnotation = false;
+
+ /**
+ * Set true to predict secondary structure (using JMol for protein, Annotate3D
+ * for RNA)
+ */
+ protected boolean predictSecondaryStructure = false;
+
+ /**
+ * Set true (with predictSecondaryStructure=true) to predict secondary
+ * structure using an external service (currently Annotate3D for RNA only)
+ */
+ protected boolean externalSecondaryStructure = false;
+
+ private Vector<PDBChain> chains;
+
+ public StructureFile(String inFile, String type) throws IOException
+ {
+ super(inFile, type);
+ }
+
+ public StructureFile(FileParse fp) throws IOException
+ {
+ super(fp);
+ }
+
+ public void addSettings(boolean addAlignmentAnnotations,
+ boolean predictSecondaryStructure, boolean externalSecStr)
+ {
+ this.visibleChainAnnotation = addAlignmentAnnotations;
+ this.predictSecondaryStructure = predictSecondaryStructure;
+ this.externalSecondaryStructure = externalSecStr;
+ }
+
+ public void xferSettings()
+ {
+ this.visibleChainAnnotation = StructureViewSettings
+ .isVisibleChainAnnotation();
+ this.predictSecondaryStructure = StructureViewSettings
+ .isPredictSecondaryStructure();
+ this.externalSecondaryStructure = StructureViewSettings
+ .isExternalSecondaryStructure();
+
+ }
+
+ public StructureFile(boolean parseImmediately, String inFile, String type)
+ throws IOException
+ {
+ super(parseImmediately, inFile, type);
+ }
+
+ public StructureFile(boolean a, FileParse fp) throws IOException
+ {
+ super(a, fp);
+ }
+
+ public StructureFile()
+ {
+ }
+
+ @SuppressWarnings("rawtypes")
+ protected SequenceI postProcessChain(PDBChain chain)
+ {
+ SequenceI pdbSequence = chain.sequence;
+ pdbSequence.setName(getId() + "|" + pdbSequence.getName());
+ PDBEntry entry = new PDBEntry();
+ entry.setId(getId());
+ entry.setType(this.dbRefType);
+ entry.setProperty(new Hashtable());
+ if (chain.id != null)
+ {
+ entry.setChainCode(String.valueOf(chain.id));
+ }
+ if (inFile != null)
+ {
+ entry.setFile(inFile.getAbsolutePath());
+ }
+ else
+ {
+ entry.setFile(getDataName());
+ }
+
+ DBRefEntry sourceDBRef = new DBRefEntry();
+ sourceDBRef.setAccessionId(getId());
+ sourceDBRef.setSource(DBRefSource.PDB);
+ sourceDBRef.setStartRes(pdbSequence.getStart());
+ sourceDBRef.setEndRes(pdbSequence.getEnd());
+
+ SequenceI chainseq = pdbSequence.deriveSequence();
+ chainseq.setSourceDBRef(sourceDBRef);
+ chainseq.addPDBId(entry);
+ chainseq.addDBRef(sourceDBRef);
+
+ seqs.addElement(chainseq);
+
+ AlignmentAnnotation[] chainannot = chainseq.getAnnotation();
+
+ if (chainannot != null && visibleChainAnnotation)
+ {
+ for (int ai = 0; ai < chainannot.length; ai++)
+ {
+ chainannot[ai].visible = visibleChainAnnotation;
+ annotations.addElement(chainannot[ai]);
+ }
+ }
+ return chainseq;
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ protected void processPdbFileWithAnnotate3d(List<SequenceI> rna)
+ throws Exception
+ {
+ // System.out.println("this is a PDB format and RNA sequence");
+ // note: we use reflection here so that the applet can compile and run
+ // without the HTTPClient bits and pieces needed for accessing Annotate3D
+ // web service
+ try
+ {
+ Class cl = Class.forName("jalview.ws.jws1.Annotate3D");
+ if (cl != null)
+ {
+ // TODO: use the PDB ID of the structure if one is available, to save
+ // bandwidth and avoid uploading the whole structure to the service
+ Object annotate3d = cl.getConstructor(new Class[] {}).newInstance(
+ new Object[] {});
+ AlignmentI al = ((AlignmentI) cl.getMethod("getRNAMLFor",
+ new Class[] { FileParse.class }).invoke(annotate3d,
+ new Object[] { new FileParse(getDataName(), type) }));
+ for (SequenceI sq : al.getSequences())
+ {
+ if (sq.getDatasetSequence() != null)
+ {
+ if (sq.getDatasetSequence().getAllPDBEntries() != null)
+ {
+ sq.getDatasetSequence().getAllPDBEntries().clear();
+ }
+ }
+ else
+ {
+ if (sq.getAllPDBEntries() != null)
+ {
+ sq.getAllPDBEntries().clear();
+ }
+ }
+ }
+ replaceAndUpdateChains(rna, al, AlignSeq.DNA, false);
+ }
+ } catch (ClassNotFoundException x)
+ {
+ // ignore classnotfounds - occurs in applet
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void replaceAndUpdateChains(List<SequenceI> prot,
+ AlignmentI al,
+ String pep, boolean b)
+ {
+ List<List<? extends Object>> replaced = AlignSeq
+ .replaceMatchingSeqsWith(seqs, annotations, prot, al, pep,
+ false);
+ for (PDBChain ch : getChains())
+ {
+ int p = 0;
+ for (SequenceI sq : (List<SequenceI>) replaced.get(0))
+ {
+ p++;
+ if (sq == ch.sequence || sq.getDatasetSequence() == ch.sequence)
+ {
+ p = -p;
+ break;
+ }
+ }
+ if (p < 0)
+ {
+ p = -p - 1;
+ // set shadow entry for chains
+ ch.shadow = (SequenceI) replaced.get(1).get(p);
+ ch.shadowMap = ((AlignSeq) replaced.get(2).get(p))
+ .getMappingFromS1(false);
+ }
+ }
+ }
+
+ /**
+ * Predict secondary structure for RNA and/or protein sequences and add as
+ * annotations
+ *
+ * @param rnaSequences
+ * @param proteinSequences
+ */
+ protected void addSecondaryStructure(List<SequenceI> rnaSequences,
+ List<SequenceI> proteinSequences)
+ {
+ /*
+ * Currently using Annotate3D for RNA, but only if the 'use external
+ * prediction' flag is set
+ */
+ if (externalSecondaryStructure && rnaSequences.size() > 0)
+ {
+ try
+ {
+ processPdbFileWithAnnotate3d(rnaSequences);
+ } catch (Exception x)
+ {
+ System.err.println("Exceptions when dealing with RNA in pdb file");
+ x.printStackTrace();
+
+ }
+ }
+
+ /*
+ * Currently using JMol PDB parser for peptide
+ */
+ if (proteinSequences.size() > 0)
+ {
+ try
+ {
+ processWithJmolParser(proteinSequences);
+ } catch (Exception x)
+ {
+ System.err
+ .println("Exceptions from Jmol when processing data in pdb file");
+ x.printStackTrace();
+ }
+ }
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ private void processWithJmolParser(List<SequenceI> prot)
+ throws Exception
+ {
+ try
+ {
+
+ Class cl = Class.forName("jalview.ext.jmol.JmolParser");
+ if (cl != null)
+ {
+ final Constructor constructor = cl
+.getConstructor(new Class[] {
+ boolean.class, boolean.class, boolean.class, FileParse.class });
+ final Object[] args = new Object[] { visibleChainAnnotation,
+ predictSecondaryStructure, externalSecondaryStructure,
+ new FileParse(getDataName(),
+ type) };
+
+ StructureViewSettings.setShowSeqFeatures(false);
+ StructureViewSettings.setVisibleChainAnnotation(false);
+ StructureViewSettings
+ .setPredictSecondaryStructure(predictSecondaryStructure);
+ StructureViewSettings
+ .setExternalSecondaryStructure(externalSecondaryStructure);
+ Object jmf = constructor.newInstance(args);
+ AlignmentI al = new Alignment((SequenceI[]) cl.getMethod(
+ "getSeqsAsArray", new Class[] {}).invoke(jmf));
+ cl.getMethod("addAnnotations", new Class[] { AlignmentI.class })
+ .invoke(jmf, al);
+ for (SequenceI sq : al.getSequences())
+ {
+ if (sq.getDatasetSequence() != null)
+ {
+ sq.getDatasetSequence().getAllPDBEntries().clear();
+ }
+ else
+ {
+ sq.getAllPDBEntries().clear();
+ }
+ }
+ replaceAndUpdateChains(prot, al, AlignSeq.PEP, false);
+ }
+ } catch (ClassNotFoundException q)
+ {
+ }
+ }
+
+ public PDBChain findChain(String id) throws Exception
+ {
+ for (PDBChain chain : getChains())
+ {
+ if (chain.id.equalsIgnoreCase(id))
+ {
+ return chain;
+ }
+ }
+ throw new Exception("PDB chain not Found!");
+ }
+
+ public void makeResidueList()
+ {
+ for (PDBChain chain : getChains())
+ {
+ chain.makeResidueList(visibleChainAnnotation);
+ }
+ }
+
+ public void makeCaBondList()
+ {
+ for (PDBChain chain : getChains())
+ {
+ chain.makeCaBondList();
+ }
+ }
+
+ public void setChargeColours()
+ {
+ for (PDBChain chain : getChains())
+ {
+ chain.setChargeColours();
+ }
+ }
+
+ public void setColours(jalview.schemes.ColourSchemeI cs)
+ {
+ for (PDBChain chain : getChains())
+ {
+ chain.setChainColours(cs);
+ }
+ }
+
+ public void setChainColours()
+ {
+ int i = 0;
+ for (PDBChain chain : getChains())
+ {
+ chain.setChainColours(Color.getHSBColor(1.0f / i++, .4f, 1.0f));
+ }
+ }
+
+ public static boolean isRNA(SequenceI seq)
+ {
+ for (char c : seq.getSequence())
+ {
+ if ((c != 'A') && (c != 'C') && (c != 'G') && (c != 'U'))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * make a friendly ID string.
+ *
+ * @param dataName
+ * @return truncated dataName to after last '/'
+ */
+ protected String safeName(String dataName)
+ {
+ int p = 0;
+ while ((p = dataName.indexOf("/")) > -1 && p < dataName.length())
+ {
+ dataName = dataName.substring(p + 1);
+ }
+ return dataName;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public Vector<PDBChain> getChains()
+ {
+ return chains;
+ }
+
+ public void setChains(Vector<PDBChain> chains)
+ {
+ this.chains = chains;
+ }
+
+ public String getDbRefType()
+ {
+ return dbRefType;
+ }
+
+ public void setDbRefType(String dbRefType)
+ {
+ this.dbRefType = dbRefType;
+ }
+
+ /**
+ * Returns a descriptor for suitable feature display settings with
+ * <ul>
+ * <li>ResNums or insertions features visible</li>
+ * <li>insertions features coloured red</li>
+ * <li>ResNum features coloured by label</li>
+ * <li>Insertions displayed above (on top of) ResNums</li>
+ * </ul>
+ */
+ @Override
+ public FeatureSettingsModelI getFeatureColourScheme()
+ {
+ return new PDBFeatureSettings();
+ }
+}
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Set;
import java.util.Vector;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
// to the align frames.
boolean gathered = false;
String newviewid = null;
- Set<AlignedCodonFrame> mappings = av.getAlignment()
+ List<AlignedCodonFrame> mappings = av.getAlignment()
.getCodonFrames();
for (int i = 0; i < views.length; i++)
{
}
// Store any sequence mappings.
- Set<AlignedCodonFrame> cframes = av.getAlignment().getCodonFrames();
+ List<AlignedCodonFrame> cframes = av.getAlignment().getCodonFrames();
if (cframes != null)
{
for (AlignedCodonFrame acf : cframes)
--- /dev/null
+package jalview.io.gff;
+
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.MappingType;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.util.MapList;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A handler to parse GFF in the format generated by the exonerate tool
+ */
+public class ExonerateHelper extends Gff2Helper
+{
+ private static final String SIMILARITY = "similarity";
+
+ private static final String GENOME2GENOME = "genome2genome";
+
+ private static final String CDNA2GENOME = "cdna2genome";
+
+ private static final String CODING2GENOME = "coding2genome";
+
+ private static final String CODING2CODING = "coding2coding";
+
+ private static final String PROTEIN2GENOME = "protein2genome";
+
+ private static final String PROTEIN2DNA = "protein2dna";
+
+ private static final String ALIGN = "Align";
+
+ private static final String QUERY = "Query";
+
+ private static final String TARGET = "Target";
+
+ /**
+ * Process one GFF feature line (as modelled by SequenceFeature)
+ *
+ * @param seq
+ * the sequence with which this feature is associated
+ * @param gffColumns
+ * the sequence feature with ATTRIBUTES property containing any
+ * additional attributes
+ * @param align
+ * the alignment we are adding GFF to
+ * @param newseqs
+ * any new sequences referenced by the GFF
+ * @param relaxedIdMatching
+ * if true, match word tokens in sequence names
+ * @return true if the sequence feature should be added to the sequence, else
+ * false (i.e. it has been processed in another way e.g. to generate a
+ * mapping)
+ */
+ @Override
+ public SequenceFeature processGff(SequenceI seq, String[] gffColumns,
+ AlignmentI align, List<SequenceI> newseqs,
+ boolean relaxedIdMatching)
+ {
+ String attr = gffColumns[ATTRIBUTES_COL];
+ Map<String, List<String>> set = parseNameValuePairs(attr);
+
+ try
+ {
+ processGffSimilarity(set, seq, gffColumns,
+ align, newseqs, relaxedIdMatching);
+ } catch (IOException ivfe)
+ {
+ System.err.println(ivfe);
+ }
+
+ /*
+ * return null to indicate we don't want to add a sequence feature for
+ * similarity (only process it to create mappings)
+ */
+ return null;
+ }
+
+ /**
+ * Processes the 'Query' (or 'Target') and 'Align' properties associated with
+ * an exonerate GFF similarity feature; these properties define the mapping of
+ * the annotated range to a related sequence.
+ *
+ * @param set
+ * parsed GFF column 9 key/value(s)
+ * @param seq
+ * the sequence the GFF feature is on
+ * @param gff
+ * the GFF column data
+ * @param align
+ * the alignment the sequence belongs to, where any new mappings
+ * should be added
+ * @param newseqs
+ * a list of new 'virtual sequences' generated while parsing GFF
+ * @param relaxedIdMatching
+ * if true allow fuzzy search for a matching target sequence
+ * @throws IOException
+ */
+ protected void processGffSimilarity(
+ Map<String, List<String>> set,
+ SequenceI seq, String[] gff, AlignmentI align,
+ List<SequenceI> newseqs, boolean relaxedIdMatching)
+ throws IOException
+ {
+ /*
+ * exonerate may be run with
+ * --showquerygff - outputs 'features on the query' e.g. (protein2genome)
+ * Target <dnaseqid> ; Align proteinStartPos dnaStartPos proteinCount
+ * --showtargetgff - outputs 'features on the target' e.g. (protein2genome)
+ * Query <proteinseqid> ; Align dnaStartPos proteinStartPos nucleotideCount
+ * where the Align spec may repeat
+ */
+ // TODO handle coding2coding and similar as well
+ boolean featureIsOnTarget = true;
+ List<String> mapTo = set.get(QUERY);
+ if (mapTo == null)
+ {
+ mapTo = set.get(TARGET);
+ featureIsOnTarget = false;
+ }
+ MappingType type = getMappingType(gff[SOURCE_COL]);
+
+ if (type == null)
+ {
+ throw new IOException("Sorry, I don't handle " + gff[SOURCE_COL]);
+ }
+
+ if (mapTo == null || mapTo.size() != 1)
+ {
+ throw new IOException(
+ "Expecting exactly one sequence in Query or Target field (got "
+ + mapTo + ")");
+ }
+
+ /*
+ * locate the mapped sequence in the alignment or 'new' (GFF file) sequences;
+ */
+ SequenceI mappedSequence = findSequence(mapTo.get(0), align, newseqs,
+ relaxedIdMatching);
+
+ /*
+ * If mapping is from protein to dna, we store it as dna to protein instead
+ */
+ SequenceI mapFromSequence = seq;
+ SequenceI mapToSequence = mappedSequence;
+ if ((type == MappingType.NucleotideToPeptide && featureIsOnTarget)
+ || (type == MappingType.PeptideToNucleotide && !featureIsOnTarget))
+ {
+ mapFromSequence = mappedSequence;
+ mapToSequence = seq;
+ }
+
+ /*
+ * Process the Align maps and create mappings.
+ * These may be cdna-genome, cdna-protein, genome-protein.
+ * The mapped sequences may or may not be in the alignment
+ * (they may be included later in the GFF file).
+ */
+
+ /*
+ * get any existing mapping for these sequences (or start one),
+ * and add this mapped range
+ */
+ AlignedCodonFrame acf = getMapping(align, mapFromSequence,
+ mapToSequence);
+
+ /*
+ * exonerate GFF has the strand of the target in column 7
+ * (differs from GFF3 which has it in the Target descriptor)
+ */
+ String strand = gff[STRAND_COL];
+ boolean forwardStrand = true;
+ if ("-".equals(strand))
+ {
+ forwardStrand = false;
+ }
+ else if (!"+".equals(strand))
+ {
+ System.err.println("Strand must be specified for alignment");
+ return;
+ }
+
+ List<String> alignedRegions = set.get(ALIGN);
+ for (String region : alignedRegions)
+ {
+ MapList mapping = buildMapping(region, type, forwardStrand,
+ featureIsOnTarget, gff);
+
+ if (mapping == null)
+ {
+ continue;
+ }
+
+ acf.addMap(mapFromSequence, mapToSequence, mapping);
+ }
+ align.addCodonFrame(acf);
+ }
+
+ /**
+ * Construct the mapping
+ *
+ * @param region
+ * @param type
+ * @param forwardStrand
+ * @param featureIsOnTarget
+ * @param gff
+ * @return
+ */
+ protected MapList buildMapping(String region, MappingType type,
+ boolean forwardStrand, boolean featureIsOnTarget, String[] gff)
+ {
+ /*
+ * process one "fromStart toStart fromCount" descriptor
+ */
+ String[] tokens = region.split(" ");
+ if (tokens.length != 3)
+ {
+ System.err.println("Malformed Align descriptor: " + region);
+ return null;
+ }
+
+ /*
+ * get start/end of from/to mappings
+ * if feature is on the target sequence we have to invert the sense
+ */
+ int alignFromStart;
+ int alignToStart;
+ int alignCount;
+ try {
+ alignFromStart = Integer.parseInt(tokens[0]);
+ alignToStart = Integer.parseInt(tokens[1]);
+ alignCount = Integer.parseInt(tokens[2]);
+ } catch (NumberFormatException nfe) {
+ System.err.println(nfe.toString());
+ return null;
+ }
+
+ int fromStart;
+ int fromEnd;
+ int toStart;
+ int toEnd;
+
+ if (featureIsOnTarget)
+ {
+ fromStart = alignToStart;
+ toStart = alignFromStart;
+ toEnd = forwardStrand ? toStart + alignCount - 1 : toStart
+ - (alignCount - 1);
+ int toLength = Math.abs(toEnd - toStart) + 1;
+ int fromLength = toLength * type.getFromRatio() / type.getToRatio();
+ fromEnd = fromStart + fromLength - 1;
+ }
+ else
+ {
+ // we use the 'Align' values here not the feature start/end
+ // not clear why they may differ but it seems they can
+ fromStart = alignFromStart;
+ fromEnd = alignFromStart + alignCount - 1;
+ int fromLength = fromEnd - fromStart + 1;
+ int toLength = fromLength * type.getToRatio() / type.getFromRatio();
+ toStart = alignToStart;
+ if (forwardStrand)
+ {
+ toEnd = toStart + toLength - 1;
+ }
+ else
+ {
+ toEnd = toStart - (toLength - 1);
+ }
+ }
+
+ MapList codonmapping = constructMappingFromAlign(fromStart, fromEnd,
+ toStart, toEnd, type);
+ return codonmapping;
+ }
+
+ /**
+ * Returns a MappingType depending on the exonerate 'model' value.
+ *
+ * @param model
+ * @return
+ */
+ protected static MappingType getMappingType(String model)
+ {
+ MappingType result = null;
+
+ if (model.contains(PROTEIN2DNA) || model.contains(PROTEIN2GENOME))
+ {
+ result = MappingType.PeptideToNucleotide;
+ }
+ else if (model.contains(CODING2CODING)
+ || model.contains(CODING2GENOME)
+ || model.contains(CDNA2GENOME)
+ || model.contains(GENOME2GENOME))
+ {
+ result = MappingType.NucleotideToNucleotide;
+ }
+ return result;
+ }
+
+ /**
+ * Tests whether the GFF data looks like it was generated by exonerate, and is
+ * a format we are willing to handle
+ *
+ * @param columns
+ * @return
+ */
+ public static boolean recognises(String[] columns)
+ {
+ if (!SIMILARITY.equalsIgnoreCase(columns[TYPE_COL]))
+ {
+ return false;
+ }
+
+ /*
+ * inspect alignment model
+ */
+ String model = columns[SOURCE_COL];
+ // e.g. exonerate:protein2genome:local
+ if (model != null)
+ {
+ String mdl = model.toLowerCase();
+ if (mdl.contains(PROTEIN2DNA) || mdl.contains(PROTEIN2GENOME)
+ || mdl.contains(CODING2CODING)
+ || mdl.contains(CODING2GENOME)
+ || mdl.contains(CDNA2GENOME)
+ || mdl.contains(GENOME2GENOME))
+ {
+ return true;
+ }
+ }
+ System.err.println("Sorry, I don't handle exonerate model " + model);
+ return false;
+ }
+
+ @Override
+ protected SequenceFeature buildSequenceFeature(String[] gff,
+ Map<String, List<String>> set)
+ {
+ SequenceFeature sf = super.buildSequenceFeature(gff, set);
+ sf.setFeatureGroup("exonerate");
+
+ return sf;
+ }
+
+}
--- /dev/null
+package jalview.io.gff;
+
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+public class Gff2Helper extends GffHelperBase
+{
+ /**
+ * GFF2 uses space character to delimit name/value pairs on column 9
+ *
+ * @param text
+ * @return
+ */
+ public static Map<String, List<String>> parseNameValuePairs(String text)
+ {
+ // TODO: can a value include a comma? if so it will be broken by this
+ return parseNameValuePairs(text, ";", ' ', ",");
+ }
+
+ /**
+ * Return ' ' as the name-value separator used in column 9 attributes.
+ */
+ @Override
+ protected char getNameValueSeparator()
+ {
+ return ' ';
+ }
+
+ /**
+ * Default processing if not overridden is just to construct a sequence
+ * feature
+ */
+ @Override
+ public SequenceFeature processGff(SequenceI seq, String[] gff,
+ AlignmentI align, List<SequenceI> newseqs,
+ boolean relaxedIdMatching) throws IOException
+ {
+ Map<String, List<String>> attributes = null;
+ if (gff.length > ATTRIBUTES_COL)
+ {
+ attributes = parseNameValuePairs(gff[ATTRIBUTES_COL]);
+ }
+ return buildSequenceFeature(gff, attributes);
+ }
+
+}
--- /dev/null
+package jalview.io.gff;
+
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.MappingType;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.util.MapList;
+import jalview.util.StringUtils;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Base class with generic / common functionality for processing GFF3 data.
+ * Override this as required for any specialisations resulting from
+ * peculiarities of GFF3 generated by particular tools.
+ */
+public class Gff3Helper extends GffHelperBase
+{
+ protected static final String TARGET = "Target";
+
+ protected static final String ID = "ID";
+
+ private static final String NAME = "Name";
+
+ /**
+ * GFF3 uses '=' to delimit name/value pairs in column 9, and comma to
+ * separate multiple values for a name
+ *
+ * @param text
+ * @return
+ */
+ public static Map<String, List<String>> parseNameValuePairs(String text)
+ {
+ return parseNameValuePairs(text, ";", '=', ",");
+ }
+
+ /**
+ * Process one GFF feature line (as modelled by SequenceFeature)
+ *
+ * @param seq
+ * the sequence with which this feature is associated
+ * @param sf
+ * the sequence feature with ATTRIBUTES property containing any
+ * additional attributes
+ * @param align
+ * the alignment we are adding GFF to
+ * @param newseqs
+ * any new sequences referenced by the GFF
+ * @param relaxedIdMatching
+ * if true, match word tokens in sequence names
+ * @return true if the sequence feature should be added to the sequence, else
+ * false (i.e. it has been processed in another way e.g. to generate a
+ * mapping)
+ * @throws IOException
+ */
+ @Override
+ public SequenceFeature processGff(SequenceI seq, String[] gff,
+ AlignmentI align, List<SequenceI> newseqs,
+ boolean relaxedIdMatching) throws IOException
+ {
+ SequenceFeature sf = null;
+
+ if (gff.length == 9)
+ {
+ String soTerm = gff[TYPE_COL];
+ String atts = gff[ATTRIBUTES_COL];
+ Map<String, List<String>> attributes = parseNameValuePairs(atts);
+
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ if (so.isA(soTerm, SequenceOntologyI.PROTEIN_MATCH))
+ {
+ sf = processProteinMatch(attributes, seq, gff, align, newseqs,
+ relaxedIdMatching);
+ }
+ else if (so.isA(soTerm, SequenceOntologyI.NUCLEOTIDE_MATCH))
+ {
+ sf = processNucleotideMatch(attributes, seq, gff, align,
+ newseqs, relaxedIdMatching);
+ }
+ else
+ {
+ sf = buildSequenceFeature(gff, attributes);
+ }
+ }
+ else
+ {
+ /*
+ * fall back on generating a sequence feature with no special processing
+ */
+ sf = buildSequenceFeature(gff, null);
+ }
+
+ return sf;
+ }
+
+ /**
+ * Processes one GFF3 nucleotide (e.g. cDNA to genome) match.
+ *
+ * @param attributes
+ * parsed GFF column 9 key/value(s)
+ * @param seq
+ * the sequence the GFF feature is on
+ * @param gffColumns
+ * the GFF column data
+ * @param align
+ * the alignment the sequence belongs to, where any new mappings
+ * should be added
+ * @param newseqs
+ * a list of new 'virtual sequences' generated while parsing GFF
+ * @param relaxedIdMatching
+ * if true allow fuzzy search for a matching target sequence
+ * @return a sequence feature, if one should be added to the sequence, else
+ * null
+ * @throws IOException
+ */
+ protected SequenceFeature processNucleotideMatch(
+ Map<String, List<String>> attributes, SequenceI seq,
+ String[] gffColumns, AlignmentI align, List<SequenceI> newseqs,
+ boolean relaxedIdMatching)
+ throws IOException
+ {
+ String strand = gffColumns[STRAND_COL];
+
+ /*
+ * (For now) we don't process mappings from reverse complement ; to do
+ * this would require (a) creating a virtual sequence placeholder for
+ * the reverse complement (b) resolving the sequence by its id from some
+ * source (GFF ##FASTA or other) (c) creating the reverse complement
+ * sequence (d) updating the mapping to be to the reverse complement
+ */
+ if ("-".equals(strand))
+ {
+ System.err
+ .println("Skipping mapping from reverse complement as not yet supported");
+ return null;
+ }
+
+ List<String> targets = attributes.get(TARGET);
+ if (targets == null)
+ {
+ System.err.println("'Target' missing in GFF");
+ return null;
+ }
+
+ /*
+ * Typically we only expect one Target per GFF line, but this can handle
+ * multiple matches, to the same or different sequences (e.g. dna variants)
+ */
+ for (String target : targets)
+ {
+ /*
+ * Process "seqid start end [strand]"
+ */
+ String[] tokens = target.split(" ");
+ if (tokens.length < 3)
+ {
+ System.err.println("Incomplete Target: " + target);
+ continue;
+ }
+
+ /*
+ * Locate the mapped sequence in the alignment, or as a
+ * (new or existing) virtual sequence in the newseqs list
+ */
+ String targetId = findTargetId(tokens[0], attributes);
+ SequenceI mappedSequence1 = findSequence(targetId, align,
+ newseqs, relaxedIdMatching);
+ SequenceI mappedSequence = mappedSequence1;
+ if (mappedSequence == null)
+ {
+ continue;
+ }
+
+ /*
+ * get any existing mapping for these sequences (or start one),
+ * and add this mapped range
+ */
+ AlignedCodonFrame acf = getMapping(align, seq, mappedSequence);
+
+ try
+ {
+ int toStart = Integer.parseInt(tokens[1]);
+ int toEnd = Integer.parseInt(tokens[2]);
+ if (tokens.length > 3 && "-".equals(tokens[3]))
+ {
+ // mapping to reverse strand - swap start/end
+ int temp = toStart;
+ toStart = toEnd;
+ toEnd = temp;
+ }
+
+ int fromStart = Integer.parseInt(gffColumns[START_COL]);
+ int fromEnd = Integer.parseInt(gffColumns[END_COL]);
+ MapList mapping = constructMappingFromAlign(fromStart, fromEnd,
+ toStart, toEnd,
+ MappingType.NucleotideToNucleotide);
+
+ if (mapping != null)
+ {
+ acf.addMap(seq, mappedSequence, mapping);
+ align.addCodonFrame(acf);
+ }
+ } catch (NumberFormatException nfe)
+ {
+ System.err.println("Invalid start or end in Target " + target);
+ }
+ }
+
+ SequenceFeature sf = buildSequenceFeature(gffColumns, attributes);
+ return sf;
+ }
+
+ /**
+ * Returns the target sequence id extracted from the GFF name/value pairs.
+ * Default (standard behaviour) is the first token for "Target". This may be
+ * overridden where tools report this in a non-standard way.
+ *
+ * @param target
+ * first token of a "Target" value from GFF column 9, typically
+ * "seqid start end"
+ * @param set
+ * a map with all parsed column 9 attributes
+ * @return
+ */
+ @SuppressWarnings("unused")
+ protected String findTargetId(String target, Map<String, List<String>> set)
+ {
+ return target;
+ }
+
+ /**
+ * Processes one GFF 'protein_match'; fields of interest are
+ * <ul>
+ * <li>feature group - the database reporting a match e.g. Pfam</li>
+ * <li>Name - the matched entry's accession id in the database</li>
+ * <li>ID - a sequence identifier for the matched region (which may be
+ * appended as FASTA in the GFF file)</li>
+ * </ul>
+ *
+ * @param set
+ * parsed GFF column 9 key/value(s)
+ * @param seq
+ * the sequence the GFF feature is on
+ * @param gffColumns
+ * the sequence feature holding GFF data
+ * @param align
+ * the alignment the sequence belongs to, where any new mappings
+ * should be added
+ * @param newseqs
+ * a list of new 'virtual sequences' generated while parsing GFF
+ * @param relaxedIdMatching
+ * if true allow fuzzy search for a matching target sequence
+ * @return the (real or virtual) sequence(s) mapped to by this match
+ * @throws IOException
+ */
+ protected SequenceFeature processProteinMatch(
+ Map<String, List<String>> set, SequenceI seq,
+ String[] gffColumns, AlignmentI align, List<SequenceI> newseqs,
+ boolean relaxedIdMatching)
+ {
+ // This is currently tailored to InterProScan GFF output:
+ // ID holds the ID of the matched sequence, Target references the
+ // query sequence; this looks wrong, as ID should just be the GFF internal
+ // ID of the GFF feature, while Target would normally reference the matched
+ // sequence.
+ // TODO refactor as needed if other protein-protein GFF varies
+
+ SequenceFeature sf = buildSequenceFeature(gffColumns, set);
+
+ /*
+ * locate the mapped sequence in the alignment, or as a
+ * (new or existing) virtual sequence in the newseqs list
+ */
+ List<String> targets = set.get(TARGET);
+ if (targets != null)
+ {
+ for (String target : targets)
+ {
+
+ SequenceI mappedSequence1 = findSequence(findTargetId(target, set), align,
+ newseqs, relaxedIdMatching);
+ SequenceI mappedSequence = mappedSequence1;
+ if (mappedSequence == null)
+ {
+ continue;
+ }
+
+ /*
+ * give the mapped sequence a copy of the sequence feature, with
+ * start/end range adjusted
+ */
+ SequenceFeature sf2 = new SequenceFeature(sf);
+ sf2.setBegin(1);
+ int sequenceFeatureLength = 1 + sf.getEnd() - sf.getBegin();
+ sf2.setEnd(sequenceFeatureLength);
+ mappedSequence.addSequenceFeature(sf2);
+
+ /*
+ * add a property to the mapped sequence so that it can eventually be
+ * renamed with its qualified accession id; renaming has to wait until
+ * all sequence reference resolution is complete
+ */
+ String accessionId = StringUtils.listToDelimitedString(
+ set.get(NAME), ",");
+ if (accessionId.length() > 0)
+ {
+ String database = sf.getType(); // TODO InterProScan only??
+ String qualifiedAccId = database + "|" + accessionId;
+ sf2.setValue(RENAME_TOKEN, qualifiedAccId);
+ }
+
+ /*
+ * get any existing mapping for these sequences (or start one),
+ * and add this mapped range
+ */
+ AlignedCodonFrame alco = getMapping(align, seq, mappedSequence);
+ int[] from = new int[] { sf.getBegin(), sf.getEnd() };
+ int[] to = new int[] { 1, sequenceFeatureLength };
+ MapList mapping = new MapList(from, to, 1, 1);
+
+ alco.addMap(seq, mappedSequence, mapping);
+ align.addCodonFrame(alco);
+ }
+ }
+
+ return sf;
+ }
+
+ /**
+ * Return '=' as the name-value separator used in column 9 attributes.
+ */
+ @Override
+ protected char getNameValueSeparator()
+ {
+ return '=';
+ }
+
+ /**
+ * Modifies the default SequenceFeature in order to set the Target sequence id
+ * as the description
+ */
+ @Override
+ protected SequenceFeature buildSequenceFeature(String[] gff,
+ Map<String, List<String>> attributes)
+ {
+ SequenceFeature sf = super.buildSequenceFeature(gff, attributes);
+ String desc = getDescription(sf, attributes);
+ if (desc != null)
+ {
+ sf.setDescription(desc);
+ }
+ return sf;
+ }
+
+ /**
+ * Apply heuristic rules to try to get the most useful feature description
+ *
+ * @param sf
+ * @param attributes
+ * @return
+ */
+ protected String getDescription(SequenceFeature sf,
+ Map<String, List<String>> attributes)
+ {
+ String desc = null;
+ String target = (String) sf.getValue(TARGET);
+ if (target != null)
+ {
+ desc = target.split(" ")[0];
+ }
+
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ String type = sf.getType();
+ if (so.isA(type, SequenceOntologyI.SEQUENCE_VARIANT))
+ {
+ /*
+ * Ensembl returns dna variants as 'alleles'
+ */
+ desc = StringUtils.listToDelimitedString(
+ attributes.get("alleles"), ",");
+ }
+
+ /*
+ * extract 'Name' for a transcript (to show gene name)
+ * or an exon (so 'colour by label' shows exon boundaries)
+ */
+ if (SequenceOntologyI.NMD_TRANSCRIPT_VARIANT.equals(type)
+ || so.isA(type, SequenceOntologyI.TRANSCRIPT)
+ || so.isA(type, SequenceOntologyI.EXON))
+ {
+ desc = StringUtils.listToDelimitedString(attributes.get("Name"), ",");
+ }
+
+ /*
+ * if the above fails, try ID
+ */
+ if (desc == null)
+ {
+ desc = (String) sf.getValue(ID);
+ }
+
+ return desc;
+ }
+}
--- /dev/null
+package jalview.io.gff;
+
+/**
+ * A class to hold constants shared by creators and consumers of GFF or feature
+ * data
+ */
+public class GffConstants
+{
+ // SequenceOntology terms are to be found in SequenceOntologyI
+
+ /*
+ * clinical_significance may be an attribute of
+ * sequence_variant data from Ensembl
+ */
+ public static final String CLINICAL_SIGNIFICANCE = "clinical_significance";
+
+ /*
+ * not instantiable
+ */
+ private GffConstants()
+ {
+ }
+}
--- /dev/null
+package jalview.io.gff;
+
+import jalview.analysis.SequenceIdMatcher;
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.MappingType;
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.util.MapList;
+import jalview.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Base class with common functionality for flavours of GFF handler (GFF2 or
+ * GFF3)
+ */
+public abstract class GffHelperBase implements GffHelperI
+{
+ private static final String NOTE = "Note";
+
+ /*
+ * GFF columns 1-9 (zero-indexed):
+ */
+ protected static final int SEQID_COL = 0;
+
+ protected static final int SOURCE_COL = 1;
+
+ protected static final int TYPE_COL = 2;
+
+ protected static final int START_COL = 3;
+
+ protected static final int END_COL = 4;
+
+ protected static final int SCORE_COL = 5;
+
+ protected static final int STRAND_COL = 6;
+
+ protected static final int PHASE_COL = 7;
+
+ protected static final int ATTRIBUTES_COL = 8;
+
+ private AlignmentI lastmatchedAl = null;
+
+ private SequenceIdMatcher matcher = null;
+
+ /**
+ * Constructs and returns a mapping, or null if data appear invalid
+ *
+ * @param fromStart
+ * @param fromEnd
+ * @param toStart
+ * @param toEnd
+ * @param mappingType
+ * type of mapping (e.g. protein to nucleotide)
+ * @return
+ */
+ protected MapList constructMappingFromAlign(int fromStart, int fromEnd,
+ int toStart, int toEnd, MappingType mappingType)
+ {
+ int[] from = new int[] { fromStart, fromEnd };
+ int[] to = new int[] { toStart, toEnd };
+
+ /*
+ * Jalview always models from dna to protein, so switch values if the
+ * GFF mapping is from protein to dna
+ */
+ if (mappingType == MappingType.PeptideToNucleotide)
+ {
+ int[] temp = from;
+ from = to;
+ to = temp;
+ mappingType = mappingType.getInverse();
+ }
+
+ int fromRatio = mappingType.getFromRatio();
+ int toRatio = mappingType.getToRatio();
+
+ /*
+ * sanity check that mapped residue counts match
+ * TODO understand why PASA generates such cases...
+ */
+ if (!trimMapping(from, to, fromRatio, toRatio))
+ {
+ System.err.println("Ignoring mapping from " + Arrays.toString(from)
+ + " to " + Arrays.toString(to) + " as counts don't match!");
+ return null;
+ }
+
+ /*
+ * If a codon has an intron gap, there will be contiguous 'toRanges';
+ * this is handled for us by the MapList constructor.
+ * (It is not clear that exonerate ever generates this case)
+ */
+
+ return new MapList(from, to, fromRatio, toRatio);
+ }
+
+ /**
+ * Checks that the 'from' and 'to' ranges have equivalent lengths. If not,
+ * tries to trim the end of the longer so they do. Returns true if the
+ * mappings could be made equivalent, else false. Note the range array values
+ * may be modified by this method.
+ *
+ * @param from
+ * @param to
+ * @param fromRatio
+ * @param toRatio
+ * @return
+ */
+ protected static boolean trimMapping(int[] from, int[] to, int fromRatio,
+ int toRatio)
+ {
+ int fromLength = Math.abs(from[1] - from[0]) + 1;
+ int toLength = Math.abs(to[1] - to[0]) + 1;
+ int fromOverlap = fromLength * toRatio - toLength * fromRatio;
+ if (fromOverlap == 0)
+ {
+ return true;
+ }
+ if (fromOverlap > 0 && fromOverlap % toRatio == 0)
+ {
+ /*
+ * restrict from range to make them match up
+ * it's kind of arbitrary which end we truncate - here it is the end
+ */
+ System.err.print("Truncating mapping from " + Arrays.toString(from)
+ + " to ");
+ if (from[1] > from[0])
+ {
+ from[1] -= fromOverlap / toRatio;
+ }
+ else
+ {
+ from[1] += fromOverlap / toRatio;
+ }
+ System.err.println(Arrays.toString(from));
+ return true;
+ }
+ else if (fromOverlap < 0 && fromOverlap % fromRatio == 0)
+ {
+ fromOverlap = -fromOverlap; // > 0
+ /*
+ * restrict to range to make them match up
+ */
+ System.err.print("Truncating mapping to " + Arrays.toString(to)
+ + " to ");
+ if (to[1] > to[0])
+ {
+ to[1] -= fromOverlap / fromRatio;
+ }
+ else
+ {
+ to[1] += fromOverlap / fromRatio;
+ }
+ System.err.println(Arrays.toString(to));
+ return true;
+ }
+
+ /*
+ * Couldn't truncate to an exact match..
+ */
+ return false;
+ }
+
+ /**
+ * Returns a sequence matching the given id, as follows
+ * <ul>
+ * <li>strict matching is on exact sequence name</li>
+ * <li>relaxed matching allows matching on a token within the sequence name,
+ * or a dbxref</li>
+ * <li>first tries to find a match in the alignment sequences</li>
+ * <li>else tries to find a match in the new sequences already generated while
+ * parsing the features file</li>
+ * <li>else creates a new placeholder sequence, adds it to the new sequences
+ * list, and returns it</li>
+ * </ul>
+ *
+ * @param seqId
+ * @param align
+ * @param newseqs
+ * @param relaxedIdMatching
+ *
+ * @return
+ */
+ protected SequenceI findSequence(String seqId, AlignmentI align,
+ List<SequenceI> newseqs, boolean relaxedIdMatching)
+ {
+ if (seqId == null)
+ {
+ return null;
+ }
+ SequenceI match = null;
+ if (relaxedIdMatching)
+ {
+ if (lastmatchedAl != align)
+ {
+ lastmatchedAl = align;
+ matcher = new SequenceIdMatcher(align.getSequencesArray());
+ if (newseqs != null)
+ {
+ matcher.addAll(newseqs);
+ }
+ }
+ match = matcher.findIdMatch(seqId);
+ }
+ else
+ {
+ match = align.findName(seqId, true);
+ if (match == null && newseqs != null)
+ {
+ for (SequenceI m : newseqs)
+ {
+ if (seqId.equals(m.getName()))
+ {
+ return m;
+ }
+ }
+ }
+
+ }
+ if (match == null && newseqs != null)
+ {
+ match = new SequenceDummy(seqId);
+ if (relaxedIdMatching)
+ {
+ matcher.addAll(Arrays.asList(new SequenceI[] { match }));
+ }
+ // add dummy sequence to the newseqs list
+ newseqs.add(match);
+ }
+ return match;
+ }
+
+ /**
+ * Parses the input line to a map of name / value(s) pairs. For example the
+ * line <br>
+ * Notes=Fe-S;Method=manual curation, prediction; source = Pfam; Notes = Metal <br>
+ * if parsed with delimiter=";" and separators {' ', '='} <br>
+ * would return a map with { Notes={Fe=S, Metal}, Method={manual curation,
+ * prediction}, source={Pfam}} <br>
+ *
+ * This method supports parsing of either GFF2 format (which uses space ' ' as
+ * the name/value delimiter, and allows multiple occurrences of the same
+ * name), or GFF3 format (which uses '=' as the name/value delimiter, and
+ * strictly does not allow repeat occurrences of the same name - but does
+ * allow a comma-separated list of values).
+ *
+ * @param text
+ * @param namesDelimiter
+ * the major delimiter between name-value pairs
+ * @param nameValueSeparator
+ * one or more separators used between name and value
+ * @param valuesDelimiter
+ * delimits a list of more than one value
+ * @return the name-values map (which may be empty but never null)
+ */
+ public static Map<String, List<String>> parseNameValuePairs(String text,
+ String namesDelimiter, char nameValueSeparator,
+ String valuesDelimiter)
+ {
+ Map<String, List<String>> map = new HashMap<String, List<String>>();
+ if (text == null || text.trim().length() == 0)
+ {
+ return map;
+ }
+
+ for (String pair : text.trim().split(namesDelimiter))
+ {
+ pair = pair.trim();
+ if (pair.length() == 0)
+ {
+ continue;
+ }
+
+ int sepPos = pair.indexOf(nameValueSeparator);
+ if (sepPos == -1)
+ {
+ // no name=value present
+ continue;
+ }
+
+ String key = pair.substring(0, sepPos).trim();
+ String values = pair.substring(sepPos + 1).trim();
+ if (values.length() > 0)
+ {
+ List<String> vals = map.get(key);
+ if (vals == null)
+ {
+ vals = new ArrayList<String>();
+ map.put(key, vals);
+ }
+ for (String val : values.split(valuesDelimiter))
+ {
+ vals.add(val);
+ }
+ }
+ }
+ return map;
+ }
+
+ /**
+ * Constructs a SequenceFeature from the GFF column data. Subclasses may wish
+ * to call this method then adjust the SequenceFeature depending on the
+ * particular usage of different tools that generate GFF.
+ *
+ * @param gff
+ * @param attributes
+ * @return
+ */
+ protected SequenceFeature buildSequenceFeature(String[] gff,
+ Map<String, List<String>> attributes)
+ {
+ try
+ {
+ int start = Integer.parseInt(gff[START_COL]);
+ int end = Integer.parseInt(gff[END_COL]);
+
+ /*
+ * default 'score' is 0 rather than Float.NaN as the latter currently
+ * disables the 'graduated colour => colour by label' option
+ */
+ float score = 0f;
+ try
+ {
+ score = Float.parseFloat(gff[SCORE_COL]);
+ } catch (NumberFormatException nfe)
+ {
+ // e.g. '.' - leave as zero
+ }
+
+ SequenceFeature sf = new SequenceFeature(gff[TYPE_COL],
+ gff[SOURCE_COL], start, end, score, gff[SOURCE_COL]);
+
+ sf.setStrand(gff[STRAND_COL]);
+
+ sf.setPhase(gff[PHASE_COL]);
+
+ if (attributes != null)
+ {
+ /*
+ * save 'raw' column 9 to allow roundtrip output as input
+ */
+ sf.setAttributes(gff[ATTRIBUTES_COL]);
+
+ /*
+ * Add attributes in column 9 to the sequence feature's
+ * 'otherData' table; use Note as a best proxy for description
+ */
+ for (Entry<String, List<String>> attr : attributes.entrySet())
+ {
+ String values = StringUtils.listToDelimitedString(
+ attr.getValue(), ",");
+ sf.setValue(attr.getKey(), values);
+ if (NOTE.equals(attr.getKey()))
+ {
+ sf.setDescription(values);
+ }
+ }
+ }
+
+ return sf;
+ } catch (NumberFormatException nfe)
+ {
+ System.err.println("Invalid number in gff: " + nfe.getMessage());
+ return null;
+ }
+ }
+
+ /**
+ * Returns the character used to separate attributes names from values in GFF
+ * column 9. This is space for GFF2, '=' for GFF3.
+ *
+ * @return
+ */
+ protected abstract char getNameValueSeparator();
+
+ /**
+ * Returns any existing mapping held on the alignment between the given
+ * dataset sequences, or a new one if none found. This is a convenience method
+ * to facilitate processing multiple GFF lines that make up a single 'spliced'
+ * mapping, by extending the first mapping as the others are read.
+ *
+ * @param align
+ * @param fromSeq
+ * @param toSeq
+ * @return
+ */
+ protected AlignedCodonFrame getMapping(AlignmentI align, SequenceI fromSeq, SequenceI toSeq)
+ {
+ AlignedCodonFrame acf = align.getMapping(fromSeq, toSeq);
+ if (acf == null)
+ {
+ acf = new AlignedCodonFrame();
+ }
+ return acf;
+ }
+
+}
--- /dev/null
+package jalview.io.gff;
+
+
+/**
+ * A factory to serve instances of GFF helper classes
+ */
+public class GffHelperFactory
+{
+
+ /**
+ * Returns a class to process the GFF line based on inspecting its column
+ * data. This may return a general-purpose GFF2 or GFF3 helper, or a
+ * specialisation for a flavour of GFF generated by a particular tool.
+ *
+ * @param gff
+ * @return
+ */
+ public static GffHelperI getHelper(String[] gff)
+ {
+ if (gff == null || gff.length < 6)
+ {
+ return null;
+ }
+
+ GffHelperI result = null;
+ if (ExonerateHelper.recognises(gff))
+ {
+ result = new ExonerateHelper();
+ }
+ else if (InterProScanHelper.recognises(gff))
+ {
+ result = new InterProScanHelper();
+ }
+ else if (looksLikeGff3(gff))
+ {
+ result = new Gff3Helper();
+ }
+ else
+ {
+ result = new Gff2Helper();
+ }
+
+ return result;
+ }
+
+ /**
+ * Heuristic rule: if column 9 seems to have Name=Value entries, assume this
+ * is GFF3. GFF3 uses '=' as name-value separator, GFF2 uses space ' '.
+ *
+ * @param gff
+ * @return
+ */
+ protected static boolean looksLikeGff3(String[] gff)
+ {
+ if (gff.length >= 9)
+ {
+ String attributes = gff[8].trim();
+ int pos1 = attributes.indexOf(';');
+ int pos2 = attributes.indexOf('=');
+ if (pos2 != -1 && (pos1 == -1 || pos2 < pos1))
+ {
+ // there is an '=' before the first ';' (if any)
+ // not foolproof as theoretically GFF2 could be like "Name Value=123;"
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
--- /dev/null
+package jalview.io.gff;
+
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * An interface to described common functionality of different flavours of GFF
+ *
+ * @author gmcarstairs
+ *
+ */
+public interface GffHelperI
+{
+
+ final String RENAME_TOKEN = "$RENAME_TO$";
+
+ /**
+ * Process one GFF feature line
+ *
+ * @param seq
+ * the sequence with which this feature is associated
+ * @param gffColumns
+ * the GFF column data
+ * @param align
+ * the alignment we are adding GFF to
+ * @param newseqs
+ * any new sequences referenced by the GFF
+ * @param relaxedIdMatching
+ * if true, match word tokens in sequence names
+ * @return a SequenceFeature if one should be created, else null
+ * @throws IOException
+ */
+ SequenceFeature processGff(SequenceI seq, String[] gffColumns,
+ AlignmentI align,
+ List<SequenceI> newseqs, boolean relaxedIdMatching)
+ throws IOException;
+
+ // java 8 will allow static methods in interfaces:
+ // static boolean recognises(String [] columns);
+}
--- /dev/null
+package jalview.io.gff;
+
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.util.StringUtils;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A handler to parse GFF in the format generated by InterProScan
+ */
+public class InterProScanHelper extends Gff3Helper
+{
+ private static final String INTER_PRO_SCAN = "InterProScan";
+
+ private static final String SIGNATURE_DESC = "signature_desc";
+
+ /**
+ * Process one GFF feature line (as modelled by SequenceFeature)
+ *
+ * @param seq
+ * the sequence with which this feature is associated
+ * @param gff
+ * the gff column data
+ * @param align
+ * the alignment we are adding GFF to
+ * @param newseqs
+ * any new sequences referenced by the GFF
+ * @param relaxedIdMatching
+ * if true, match word tokens in sequence names
+ * @return a sequence feature if one should be added to the sequence, else
+ * null (i.e. it has been processed in another way e.g. to generate a
+ * mapping)
+ * @throws IOException
+ */
+ @Override
+ public SequenceFeature processGff(SequenceI seq, String[] gff,
+ AlignmentI align, List<SequenceI> newseqs,
+ boolean relaxedIdMatching) throws IOException
+ {
+ /*
+ * ignore the 'polypeptide' match of the whole sequence
+ */
+ if (".".equals(gff[SOURCE_COL]))
+ {
+ return null;
+ }
+
+ return super.processGff(seq, gff, align, newseqs, relaxedIdMatching);
+ }
+
+ /**
+ *
+ */
+ @Override
+ protected SequenceFeature buildSequenceFeature(String[] gff,
+ Map<String, List<String>> attributes)
+ {
+ SequenceFeature sf = super.buildSequenceFeature(gff, attributes);
+
+ /*
+ * signature_desc is a more informative source of description
+ */
+ List<String> desc = attributes.get(SIGNATURE_DESC);
+ String description = StringUtils.listToDelimitedString(desc, ", ");
+ if (description.length() > 0)
+ {
+ sf.setDescription(description);
+ }
+
+ /*
+ * Set sequence feature group as 'InterProScan', and type as the source
+ * database for this match (e.g. 'Pfam')
+ */
+ sf.setType(gff[SOURCE_COL]);
+ sf.setFeatureGroup(INTER_PRO_SCAN);
+
+ return sf;
+ }
+
+ /**
+ * Tests whether the GFF data looks like it was generated by InterProScan
+ *
+ * @param columns
+ * @return
+ */
+ public static boolean recognises(String[] columns)
+ {
+ SequenceOntologyI so = SequenceOntologyFactory.getInstance();
+ String type = columns[TYPE_COL];
+ if (so.isA(type, SequenceOntologyI.PROTEIN_MATCH)
+ || (".".equals(columns[SOURCE_COL]) && so.isA(type,
+ SequenceOntologyI.POLYPEPTIDE)))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Overriden method, because InterProScan GFF has the target sequence id in
+ * GFF field 'ID' rather than the usual 'Target' :-O
+ */
+ @Override
+ protected String findTargetId(String target, Map<String, List<String>> set)
+ {
+ List<String> ids = set.get(ID);
+ if (ids == null || ids.size() != 1)
+ {
+ return null;
+ }
+ return ids.get(0);
+ }
+
+}
--- /dev/null
+package jalview.io.gff;
+
+public class SequenceOntologyFactory
+{
+ private static SequenceOntologyI instance;
+
+ public static synchronized SequenceOntologyI getInstance()
+ {
+ if (instance == null)
+ {
+ // instance = new SequenceOntology();
+ instance = new SequenceOntologyLite();
+ }
+ return instance;
+ }
+
+ public static void setInstance(SequenceOntologyI so)
+ {
+ instance = so;
+ }
+}
--- /dev/null
+package jalview.io.gff;
+
+import java.util.List;
+
+public interface SequenceOntologyI
+{
+ /*
+ * selected commonly used values for quick reference
+ */
+ // SO:0000104
+ public static final String POLYPEPTIDE = "polypeptide";
+
+ // SO:0000349
+ public static final String PROTEIN_MATCH = "protein_match";
+
+ // SO:0000347
+ public static final String NUCLEOTIDE_MATCH = "nucleotide_match";
+
+ // SO:0000316
+ public static final String CDS = "CDS";
+
+ // SO:0001060
+ public static final String SEQUENCE_VARIANT = "sequence_variant";
+
+ // SO:0000147
+ public static final String EXON = "exon";
+
+ // SO:0000673
+ public static final String TRANSCRIPT = "transcript";
+
+ // SO:0001621 isA sequence_variant but used in Ensembl as a transcript
+ public static final String NMD_TRANSCRIPT_VARIANT = "NMD_transcript_variant";
+
+ // SO:0000704
+ public static final String GENE = "gene";
+
+ public boolean isA(String childTerm, String parentTerm);
+
+ /**
+ * Returns a sorted list of all valid terms queried for (i.e. terms processed
+ * which were valid in the SO), using the friendly description.
+ *
+ * This can be used to check that any hard-coded stand-in for the full SO
+ * includes all the terms needed for correct processing.
+ *
+ * @return
+ */
+ public List<String> termsFound();
+
+ /**
+ * Returns a sorted list of all invalid terms queried for (i.e. terms
+ * processed which were not found in the SO), using the friendly description.
+ *
+ * This can be used to report any 'non-compliance' in data, and/or to report
+ * valid terms missing from any hard-coded stand-in for the full SO.
+ *
+ * @return
+ */
+ public List<String> termsNotFound();
+}
--- /dev/null
+package jalview.io.gff;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * An implementation of SequenceOntologyI that hard codes terms of interest.
+ *
+ * Use this in unit testing by calling SequenceOntology.setInstance(new
+ * SequenceOntologyLite()).
+ *
+ * May also become a stand-in for SequenceOntology in the applet if we want to
+ * avoid the additional jars needed for parsing the full SO.
+ *
+ * @author gmcarstairs
+ *
+ */
+public class SequenceOntologyLite implements SequenceOntologyI
+{
+ /*
+ * initial selection of types of interest when processing Ensembl features
+ * NB unlike the full SequenceOntology we don't traverse indirect
+ * child-parent relationships here so e.g. need to list every sub-type
+ * of gene (direct or indirect) that is of interest
+ */
+ // @formatter:off
+ private final String[][] TERMS = new String[][] {
+
+ /*
+ * gene sub-types:
+ */
+ { "gene", "gene" },
+ { "ncRNA_gene", "gene" },
+ { "snRNA_gene", "gene" },
+ { "miRNA_gene", "gene" },
+ { "lincRNA_gene", "gene" },
+ { "rRNA_gene", "gene" },
+
+ /*
+ * transcript sub-types:
+ */
+ { "transcript", "transcript" },
+ { "mature_transcript", "transcript" },
+ { "processed_transcript", "transcript" },
+ { "aberrant_processed_transcript", "transcript" },
+ { "ncRNA", "transcript" },
+ { "snRNA", "transcript" },
+ { "miRNA", "transcript" },
+ { "lincRNA", "transcript" },
+ { "rRNA", "transcript" },
+ // there are many more sub-types of ncRNA...
+
+ /*
+ * sequence_variant sub-types:
+ */
+ { "sequence_variant", "sequence_variant" },
+ { "feature_variant", "sequence_variant" },
+ { "gene_variant", "sequence_variant" },
+ // NB Ensembl uses NMD_transcript_variant as if a 'transcript'
+ // but we model it here correctly as per the SO
+ { "NMD_transcript_variant", "sequence_variant" },
+ { "transcript_variant", "sequence_variant" },
+ { "structural_variant", "sequence_variant" },
+
+ /*
+ * no sub-types of exon or CDS yet seen in Ensembl
+ * some added here for testing purposes
+ */
+ { "exon", "exon" },
+ { "coding_exon", "exon" },
+ { "CDS", "CDS" },
+ { "CDS_predicted", "CDS" },
+
+ /*
+ * terms used in exonerate or PASA GFF
+ */
+ { "protein_match", "protein_match"},
+ { "nucleotide_match", "nucleotide_match"},
+ { "cDNA_match", "nucleotide_match"},
+
+ /*
+ * used in InterProScan GFF
+ */
+ { "polypeptide", "polypeptide" }
+ };
+ // @formatter:on
+
+ /*
+ * hard-coded list of any parents (direct or indirect)
+ * that we care about for a term
+ */
+ private Map<String, List<String>> parents;
+
+ private List<String> termsFound;
+
+ private List<String> termsNotFound;
+
+ public SequenceOntologyLite()
+ {
+ termsFound = new ArrayList<String>();
+ termsNotFound = new ArrayList<String>();
+ loadStaticData();
+ }
+
+ /**
+ * Loads hard-coded data into a lookup table of {term, {list_of_parents}}
+ */
+ private void loadStaticData()
+ {
+ parents = new HashMap<String, List<String>>();
+ for (String [] pair : TERMS) {
+ List<String> p = parents.get(pair[0]);
+ if (p == null)
+ {
+ p = new ArrayList<String>();
+ parents.put(pair[0], p);
+ }
+ p.add(pair[1]);
+ }
+ }
+
+ /**
+ * Answers true if 'child' isA 'parent' (including equality). In this
+ * implementation, based only on hard-coded values.
+ */
+ @Override
+ public boolean isA(String child, String parent)
+ {
+ if (child == null || parent == null)
+ {
+ return false;
+ }
+ if (child.equals(parent))
+ {
+ termFound(child);
+ return true;
+ }
+
+ List<String> p = parents.get(child);
+ if (p == null)
+ {
+ termNotFound(child);
+ return false;
+ }
+ termFound(child);
+ if (p.contains(parent))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Records a valid term queried for, for reporting purposes
+ *
+ * @param term
+ */
+ private void termFound(String term)
+ {
+ if (!termsFound.contains(term))
+ {
+ synchronized (termsFound)
+ {
+ termsFound.add(term);
+ }
+ }
+ }
+
+ /**
+ * Records an invalid term queried for, for reporting purposes
+ *
+ * @param term
+ */
+ private void termNotFound(String term)
+ {
+ synchronized (termsNotFound)
+ {
+ if (!termsNotFound.contains(term))
+ {
+ System.out.println("SO term " + term
+ + " not known - may be invalid, or model if needed in "
+ + getClass().getName());
+ termsNotFound.add(term);
+ }
+ }
+ }
+
+ /**
+ * Sorts (case-insensitive) and returns the list of valid terms queried for
+ */
+ @Override
+ public List<String> termsFound()
+ {
+ synchronized (termsFound)
+ {
+ Collections.sort(termsFound, String.CASE_INSENSITIVE_ORDER);
+ return termsFound;
+ }
+ }
+
+ /**
+ * Sorts (case-insensitive) and returns the list of invalid terms queried for
+ */
+ @Override
+ public List<String> termsNotFound()
+ {
+ synchronized (termsNotFound)
+ {
+ Collections.sort(termsNotFound, String.CASE_INSENSITIVE_ORDER);
+ return termsNotFound;
+ }
+ }
+}
*/
package jalview.io.packed;
+import jalview.api.FeatureColourI;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.SequenceI;
import jalview.io.NewickFile;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map;
public class JalviewDataset
{
/**
* @return the featureColours
*/
- public Hashtable getFeatureColours()
+ public Map<String, FeatureColourI> getFeatureColours()
{
return featureColours;
}
* @param featureColours
* the featureColours to set
*/
- public void setFeatureColours(Hashtable featureColours)
+ public void setFeatureColours(Map<String, FeatureColourI> featureColours)
{
this.featureColours = featureColours;
}
/**
* current set of feature colours
*/
- Hashtable featureColours;
+ Map<String, FeatureColourI> featureColours;
/**
* original identity of each sequence in results
seqDetails = new Hashtable();
al = new ArrayList<AlignmentSet>();
parentDataset = null;
- featureColours = new Hashtable();
+ featureColours = new HashMap<String, FeatureColourI>();
}
/**
*
* @param parentAlignment
*/
- public JalviewDataset(AlignmentI aldataset, Hashtable fc,
+ public JalviewDataset(AlignmentI aldataset,
+ Map<String, FeatureColourI> fc,
Hashtable seqDets)
{
+ // TODO not used - remove?
this(aldataset, fc, seqDets, null);
}
* (may be null) alignment to associate new annotation and trees
* with.
*/
- public JalviewDataset(AlignmentI aldataset, Hashtable fc,
+ public JalviewDataset(AlignmentI aldataset,
+ Map<String, FeatureColourI> fc,
Hashtable seqDets, AlignmentI parentAlignment)
{
this();
*/
package jalview.io.packed;
+import jalview.api.FeatureColourI;
import jalview.datamodel.AlignmentI;
import jalview.io.AppletFormatAdapter;
import jalview.io.FileParse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.List;
public class ParsePackedSet
String fmt = null;
try
{
- fmt = new IdentifyFile().Identify(src, false);
+ fmt = new IdentifyFile().identify(src, false);
} catch (Exception ex)
{
exerror = ex;
// if not, create one.
if (context.featureColours == null)
{
- context.featureColours = new Hashtable();
+ context.featureColours = new HashMap<String, FeatureColourI>();
}
try
{
import jalview.util.UrlLink;
import java.util.Enumeration;
+import java.util.Iterator;
import java.util.Vector;
import uk.ac.vamsas.objects.core.DataSetAnnotations;
doJvUpdate();
}
+ @Override
public void addToDocument()
{
DataSetAnnotations dsa = (DataSetAnnotations) vobj;
dataset.addDataSetAnnotations(dsa);
}
+ @Override
public void addFromDocument()
{
DataSetAnnotations dsa = (DataSetAnnotations) vobj;
bindjvvobj(sf, dsa);
}
+ @Override
public void conflict()
{
log.warn("Untested sequencefeature conflict code");
addToDocument(); // and create a new feature in the document
}
+ @Override
public void updateToDoc()
{
DataSetAnnotations dsa = (DataSetAnnotations) vobj;
}
+ @Override
public void updateFromDoc()
{
DataSetAnnotations dsa = (DataSetAnnotations) vobj;
}
if (feature.otherDetails != null)
{
- Enumeration iter = feature.otherDetails.keys();
+ Iterator<String> iter = feature.otherDetails.keySet().iterator();
Vector props = dsa.getPropertyAsReference();
- while (iter.hasMoreElements())
+ while (iter.hasNext())
{
- String key = (String) iter.nextElement();
+ String key = iter.next();
if (!key.equalsIgnoreCase("score")
&& !key.equalsIgnoreCase("status"))
{
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
protected JMenuItem showTranslation = new JMenuItem();
+ protected JMenuItem showReverse = new JMenuItem();
+
+ protected JMenuItem showReverseComplement = new JMenuItem();
+
protected JMenu showProducts = new JMenu();
+ protected JMenuItem runGroovy = new JMenuItem();
+
protected JMenuItem rnahelicesColour = new JMenuItem();
protected JCheckBoxMenuItem autoCalculate = new JCheckBoxMenuItem();
@Override
public void mousePressed(MouseEvent evt)
{
- if (evt.isControlDown()
- || SwingUtilities.isRightMouseButton(evt))
+ if (evt.isPopupTrigger())
{
radioItem.removeActionListener(radioItem.getActionListeners()[0]);
showTranslation_actionPerformed(e);
}
});
+ showReverse.setText(MessageManager.getString("label.reverse"));
+ showReverse.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ showReverse_actionPerformed(false);
+ }
+ });
+ showReverseComplement.setText(MessageManager
+ .getString("label.reverse_complement"));
+ showReverseComplement.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ showReverse_actionPerformed(true);
+ }
+ });
JMenuItem extractScores = new JMenuItem(
MessageManager.getString("label.extract_scores"));
// for show products actions see AlignFrame.canShowProducts
showProducts.setText(MessageManager.getString("label.get_cross_refs"));
+ runGroovy.setText(MessageManager.getString("label.run_groovy"));
+ runGroovy.setToolTipText(MessageManager.getString("label.run_groovy_tip"));
+ runGroovy.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ runGroovy_actionPerformed();
+ }
+ });
+
JMenuItem openFeatureSettings = new JMenuItem(
MessageManager.getString("action.feature_settings"));
openFeatureSettings.addActionListener(new ActionListener()
alignFrameMenuBar.add(colourMenu);
alignFrameMenuBar.add(calculateMenu);
alignFrameMenuBar.add(webService);
+
fileMenu.add(fetchSequence);
fileMenu.add(addSequenceMenu);
fileMenu.add(reload);
fileMenu.add(associatedData);
fileMenu.addSeparator();
fileMenu.add(closeMenuItem);
+
+ pasteMenu.add(pasteNew);
+ pasteMenu.add(pasteThis);
editMenu.add(undoMenuItem);
editMenu.add(redoMenuItem);
editMenu.add(cut);
// editMenu.addSeparator();
editMenu.add(padGapsMenuitem);
+ showMenu.add(showAllColumns);
+ showMenu.add(showAllSeqs);
+ showMenu.add(showAllhidden);
+ hideMenu.add(hideSelColumns);
+ hideMenu.add(hideSelSequences);
+ hideMenu.add(hideAllSelection);
+ hideMenu.add(hideAllButSelection);
viewMenu.add(newView);
viewMenu.add(expandViews);
viewMenu.add(gatherViews);
colourMenu.add(modifyPID);
colourMenu.add(annotationColour);
colourMenu.add(rnahelicesColour);
+
+ sort.add(sortIDMenuItem);
+ sort.add(sortLengthMenuItem);
+ sort.add(sortGroupMenuItem);
+ sort.add(sortPairwiseMenuItem);
+ sort.add(sortByTreeMenu);
calculateMenu.add(sort);
calculateMenu.add(calculateTree);
calculateMenu.addSeparator();
calculateMenu.add(PCAMenuItem);
calculateMenu.addSeparator();
calculateMenu.add(showTranslation);
+ calculateMenu.add(showReverse);
+ calculateMenu.add(showReverseComplement);
calculateMenu.add(showProducts);
calculateMenu.add(autoCalculate);
calculateMenu.add(sortByTree);
calculateMenu.addSeparator();
+ calculateMenu.add(expandAlignment);
calculateMenu.add(extractScores);
+ calculateMenu.addSeparator();
+ calculateMenu.add(runGroovy);
+
webServiceNoServices = new JMenuItem(
MessageManager.getString("label.no_services"));
webService.add(webServiceNoServices);
- pasteMenu.add(pasteNew);
- pasteMenu.add(pasteThis);
- sort.add(sortIDMenuItem);
- sort.add(sortLengthMenuItem);
- sort.add(sortGroupMenuItem);
- sort.add(sortPairwiseMenuItem);
- sort.add(sortByTreeMenu);
exportImageMenu.add(htmlMenuItem);
exportImageMenu.add(epsFile);
exportImageMenu.add(createPNG);
this.getContentPane().add(statusPanel, java.awt.BorderLayout.SOUTH);
statusPanel.add(statusBar, null);
this.getContentPane().add(tabbedPane, java.awt.BorderLayout.CENTER);
- showMenu.add(showAllColumns);
- showMenu.add(showAllSeqs);
- showMenu.add(showAllhidden);
- hideMenu.add(hideSelColumns);
- hideMenu.add(hideSelSequences);
- hideMenu.add(hideAllSelection);
- hideMenu.add(hideAllButSelection);
formatMenu.add(font);
formatMenu.addSeparator();
selectMenu.add(grpsFromSelection);
selectMenu.add(deleteGroups);
selectMenu.add(annotationColumn);
- calculateMenu.add(expandAlignment);
// TODO - determine if the listenToViewSelections button is needed : see bug
// JAL-574
// selectMenu.addSeparator();
}
/**
+ * Generate the reverse sequence (or reverse complement if the flag is true)
+ * and add it to the alignment
+ *
+ * @param complement
+ */
+ protected void showReverse_actionPerformed(boolean complement)
+ {
+ }
+
+ /**
+ * Try to run script in a Groovy console, having first ensured that this
+ * alignframe is set as currentAlignFrame in Desktop
+ */
+ protected void runGroovy_actionPerformed()
+ {
+
+ }
+ /**
* Adds the given action listener and key accelerator to the given menu item.
* Also saves in a lookup table to support lookup of action by key stroke.
*
return this.splitFrame;
}
- protected void showComplement_actionPerformed(boolean state)
+ protected void showComplement_actionPerformed(boolean complement)
{
}
}
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-
-package jalview.jbgui;
-
-import jalview.gui.Desktop;
-import jalview.gui.JvSwingUtils;
-import jalview.jbgui.PDBDocFieldPreferences.PreferenceSource;
-import jalview.util.MessageManager;
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.Arrays;
-
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JFrame;
-import javax.swing.JInternalFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-
-/**
- * GUI layout for PDB Fetch Panel
- *
- * @author tcnofoegbu
- *
- */
-@SuppressWarnings("serial")
-public abstract class GPDBSearchPanel extends JPanel
-{
- protected String frameTitle = MessageManager
- .getString("label.pdb_sequence_getcher");
-
- protected JInternalFrame mainFrame = new JInternalFrame(frameTitle);
-
- protected JComboBox<PDBDocField> cmb_searchTarget = new JComboBox<PDBDocField>();
-
- protected JButton btn_ok = new JButton();
-
- protected JButton btn_back = new JButton();
-
- protected JButton btn_cancel = new JButton();
-
- protected JTextField txt_search = new JTextField(20);
-
- protected JTable tbl_summary = new JTable()
- {
- public String getToolTipText(MouseEvent evt)
- {
- String toolTipText = null;
- java.awt.Point pnt = evt.getPoint();
- int rowIndex = rowAtPoint(pnt);
- int colIndex = columnAtPoint(pnt);
-
- try
- {
- toolTipText = getValueAt(rowIndex, colIndex).toString();
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- toolTipText = (toolTipText == null ? null
- : (toolTipText.length() > 500 ? JvSwingUtils.wrapTooltip(
- true, toolTipText.subSequence(0, 500) + "...")
- : JvSwingUtils.wrapTooltip(true, toolTipText)));
-
- return toolTipText;
- }
- };
-
- protected StringBuilder errorWarning = new StringBuilder();
-
- protected JScrollPane scrl_searchResult = new JScrollPane(tbl_summary);
-
- protected ImageIcon warningImage = new ImageIcon(getClass().getResource(
- "/images/warning.gif"));
-
- protected ImageIcon loadingImage = new ImageIcon(getClass().getResource(
- "/images/loading.gif"));
-
- protected JLabel lbl_warning = new JLabel(warningImage);
-
- protected JLabel lbl_loading = new JLabel(loadingImage);
-
- private JTabbedPane tabbedPane = new JTabbedPane();
-
- private PDBDocFieldPreferences pdbDocFieldPrefs = new PDBDocFieldPreferences(
- PreferenceSource.SEARCH_SUMMARY);
-
- private JPanel pnl_actions = new JPanel();
-
- private JPanel pnl_results = new JPanel();
-
- private JPanel pnl_inputs = new JPanel();
-
- private BorderLayout mainLayout = new BorderLayout();
-
- protected PDBDocField[] previousWantedFields;
-
- public GPDBSearchPanel()
- {
- try
- {
- jbInit();
- mainFrame.invalidate();
- mainFrame.pack();
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- }
-
- /**
- * Initializes the GUI default properties
- *
- * @throws Exception
- */
- private void jbInit() throws Exception
- {
- lbl_warning.setVisible(false);
- lbl_warning.setFont(new java.awt.Font("Verdana", 0, 12));
- lbl_loading.setVisible(false);
- lbl_loading.setFont(new java.awt.Font("Verdana", 0, 12));
-
- tbl_summary.setAutoCreateRowSorter(true);
- tbl_summary.getTableHeader().setReorderingAllowed(false);
- tbl_summary.addMouseListener(new MouseAdapter()
- {
- public void mouseClicked(MouseEvent e)
- {
- validateSelection();
- }
-
- public void mouseReleased(MouseEvent e)
- {
- validateSelection();
- }
- });
- tbl_summary.addKeyListener(new KeyAdapter()
- {
- @Override
- public void keyPressed(KeyEvent evt)
- {
- validateSelection();
- switch (evt.getKeyCode())
- {
- case KeyEvent.VK_ESCAPE: // escape key
- btn_back_ActionPerformed();
- break;
- case KeyEvent.VK_ENTER: // enter key
- if (btn_ok.isEnabled())
- {
- btn_ok_ActionPerformed();
- }
- evt.consume();
- break;
- case KeyEvent.VK_TAB: // tab key
- if (evt.isShiftDown())
- {
- tabbedPane.requestFocus();
- }
- else
- {
- btn_back.requestFocus();
- }
- evt.consume();
- break;
- default:
- return;
- }
- }
- });
-
- btn_back.setFont(new java.awt.Font("Verdana", 0, 12));
- btn_back.setText(MessageManager.getString("action.back"));
- btn_back.addActionListener(new java.awt.event.ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- btn_back_ActionPerformed();
- }
- });
- btn_back.addKeyListener(new KeyAdapter()
- {
- @Override
- public void keyPressed(KeyEvent evt)
- {
- if (evt.getKeyCode() == KeyEvent.VK_ENTER)
- {
- btn_back_ActionPerformed();
- }
- }
- });
-
- btn_ok.setEnabled(false);
- btn_ok.setFont(new java.awt.Font("Verdana", 0, 12));
- btn_ok.setText(MessageManager.getString("action.ok"));
- btn_ok.addActionListener(new java.awt.event.ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- btn_ok_ActionPerformed();
- }
- });
- btn_ok.addKeyListener(new KeyAdapter()
- {
- @Override
- public void keyPressed(KeyEvent evt)
- {
- if (evt.getKeyCode() == KeyEvent.VK_ENTER)
- {
- btn_ok_ActionPerformed();
- }
- }
- });
-
- btn_cancel.setFont(new java.awt.Font("Verdana", 0, 12));
- btn_cancel.setText(MessageManager.getString("action.cancel"));
- btn_cancel.addActionListener(new java.awt.event.ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- btn_cancel_ActionPerformed();
- }
- });
- btn_cancel.addKeyListener(new KeyAdapter()
- {
- @Override
- public void keyPressed(KeyEvent evt)
- {
- if (evt.getKeyCode() == KeyEvent.VK_ENTER)
- {
- btn_cancel_ActionPerformed();
- }
- }
- });
-
- scrl_searchResult.setPreferredSize(new Dimension(500, 300));
- scrl_searchResult
- .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-
- cmb_searchTarget.setFont(new java.awt.Font("Verdana", 0, 12));
- cmb_searchTarget.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- String tooltipText;
- if ("all".equalsIgnoreCase(getCmbSearchTarget().getSelectedItem()
- .toString()))
- {
- tooltipText = MessageManager.getString("label.search_all");
- }
- else if ("pdb id".equalsIgnoreCase(getCmbSearchTarget()
- .getSelectedItem().toString()))
- {
- tooltipText = MessageManager
- .getString("label.separate_multiple_accession_ids");
- }
- else
- {
- tooltipText = MessageManager.formatMessage(
- "label.separate_multiple_query_values",
- new Object[] { getCmbSearchTarget().getSelectedItem()
- .toString() });
- }
- txt_search.setToolTipText(JvSwingUtils.wrapTooltip(true,
- tooltipText));
- txt_search_ActionPerformed();
- }
- });
-
- populateCmbSearchTargetOptions();
-
- txt_search.setFont(new java.awt.Font("Verdana", 0, 12));
-
- txt_search.addKeyListener(new KeyAdapter()
- {
- @Override
- public void keyPressed(KeyEvent e)
- {
- if (e.getKeyCode() == KeyEvent.VK_ENTER)
- {
- if (txt_search.getText() == null
- || txt_search.getText().isEmpty())
- {
- return;
- }
- if ("pdb id".equalsIgnoreCase(getCmbSearchTarget()
- .getSelectedItem().toString()))
- {
- transferToSequenceFetcher(txt_search.getText());
- }
- }
- }
- });
-
- txt_search.getDocument().addDocumentListener(new DocumentListener()
- {
- @Override
- public void insertUpdate(DocumentEvent e)
- {
- txt_search_ActionPerformed();
- }
-
- @Override
- public void removeUpdate(DocumentEvent e)
- {
- txt_search_ActionPerformed();
- }
-
- @Override
- public void changedUpdate(DocumentEvent e)
- {
- txt_search_ActionPerformed();
- }
- });
-
- final String searchTabTitle = MessageManager
- .getString("label.search_result");
- final String configureCols = MessageManager
- .getString("label.configure_displayed_columns");
- ChangeListener changeListener = new ChangeListener()
- {
- public void stateChanged(ChangeEvent changeEvent)
- {
- JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent
- .getSource();
- int index = sourceTabbedPane.getSelectedIndex();
- if (sourceTabbedPane.getTitleAt(index).equals(configureCols))
- {
- btn_back.setEnabled(false);
- btn_cancel.setEnabled(false);
- btn_ok.setEnabled(false);
- previousWantedFields = PDBDocFieldPreferences
- .getSearchSummaryFields().toArray(new PDBDocField[0]);
- }
- if (sourceTabbedPane.getTitleAt(index).equals(searchTabTitle))
- {
- btn_back.setEnabled(true);
- btn_cancel.setEnabled(true);
- if (wantedFieldsUpdated())
- {
- txt_search_ActionPerformed();
- }
- else
- {
- validateSelection();
- }
- }
- }
- };
- tabbedPane.addChangeListener(changeListener);
- tabbedPane.setPreferredSize(new Dimension(500, 300));
- tabbedPane.add(searchTabTitle, scrl_searchResult);
- tabbedPane.add(configureCols, pdbDocFieldPrefs);
-
- pnl_actions.add(btn_back);
- pnl_actions.add(btn_ok);
- pnl_actions.add(btn_cancel);
-
- pnl_results.add(tabbedPane);
- pnl_inputs.add(cmb_searchTarget);
- pnl_inputs.add(txt_search);
- pnl_inputs.add(lbl_loading);
- pnl_inputs.add(lbl_warning);
-
- this.setLayout(mainLayout);
- this.add(pnl_inputs, java.awt.BorderLayout.NORTH);
- this.add(pnl_results, java.awt.BorderLayout.CENTER);
- this.add(pnl_actions, java.awt.BorderLayout.SOUTH);
- mainFrame.setVisible(true);
- mainFrame.setContentPane(this);
- mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- Desktop.addInternalFrame(mainFrame, frameTitle, 800, 400);
- }
-
- public boolean wantedFieldsUpdated()
- {
- if (previousWantedFields == null)
- {
- return true;
- }
-
- return Arrays.equals(PDBDocFieldPreferences.getSearchSummaryFields()
- .toArray(new PDBDocField[0]), previousWantedFields) ? false
- : true;
-
- }
-
- public void validateSelection()
- {
- if (tbl_summary.getSelectedRows().length > 0)
- {
- btn_ok.setEnabled(true);
- }
- else
- {
- btn_ok.setEnabled(false);
- }
- }
-
- public JComboBox<PDBDocField> getCmbSearchTarget()
- {
- return cmb_searchTarget;
- }
-
- public JTextField getTxtSearch()
- {
- return txt_search;
- }
-
- public JInternalFrame getMainFrame()
- {
- return mainFrame;
- }
-
- public abstract void transferToSequenceFetcher(String ids);
-
- public abstract void txt_search_ActionPerformed();
-
- public abstract void btn_ok_ActionPerformed();
-
- public abstract void btn_back_ActionPerformed();
-
- public abstract void btn_cancel_ActionPerformed();
-
- public abstract void populateCmbSearchTargetOptions();
-
-}
*/
package jalview.jbgui;
+import jalview.fts.core.FTSDataColumnPreferences;
+import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
+import jalview.fts.service.pdb.PDBFTSRestClient;
import jalview.gui.JvSwingUtils;
import jalview.gui.StructureViewer.ViewerType;
-import jalview.jbgui.PDBDocFieldPreferences.PreferenceSource;
import jalview.util.MessageManager;
import java.awt.BorderLayout;
ypos += lineSpacing;
ypos += lineSpacing;
- PDBDocFieldPreferences docFieldPref = new PDBDocFieldPreferences(
- PreferenceSource.PREFERENCES);
+ FTSDataColumnPreferences docFieldPref = new FTSDataColumnPreferences(
+ PreferenceSource.PREFERENCES, PDBFTSRestClient.getInstance());
docFieldPref.setBounds(new Rectangle(10, ypos, 450, 120));
structureTab.add(docFieldPref);
package jalview.jbgui;
import jalview.datamodel.SequenceI;
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.core.FTSDataColumnPreferences;
+import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
+import jalview.fts.service.pdb.PDBFTSRestClient;
import jalview.gui.AlignmentPanel;
import jalview.gui.Desktop;
import jalview.gui.JvSwingUtils;
-import jalview.jbgui.PDBDocFieldPreferences.PreferenceSource;
import jalview.util.MessageManager;
-import jalview.ws.dbsources.PDBRestClient;
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
+import javax.swing.table.TableColumn;
@SuppressWarnings("serial")
/**
protected static final String VIEWS_LOCAL_PDB = "VIEWS_LOCAL_PDB";
+ protected JTable tbl_local_pdb = new JTable();
+
+ protected JScrollPane scrl_localPDB = new JScrollPane(tbl_local_pdb);
+
+ private JTabbedPane pnl_filter = new JTabbedPane();
+
+ private FTSDataColumnPreferences pdbDocFieldPrefs = new FTSDataColumnPreferences(
+ PreferenceSource.STRUCTURE_CHOOSER,
+ PDBFTSRestClient.getInstance());
+
+ protected FTSDataColumnI[] previousWantedFields;
+
protected JTable tbl_summary = new JTable()
{
+ private boolean inLayout;
+
+ @Override
+ public boolean getScrollableTracksViewportWidth()
+ {
+ return hasExcessWidth();
+
+ }
+
+ @Override
+ public void doLayout()
+ {
+ if (hasExcessWidth())
+ {
+ autoResizeMode = AUTO_RESIZE_SUBSEQUENT_COLUMNS;
+ }
+ inLayout = true;
+ super.doLayout();
+ inLayout = false;
+ autoResizeMode = AUTO_RESIZE_OFF;
+ }
+
+ protected boolean hasExcessWidth()
+ {
+ return getPreferredSize().width < getParent().getWidth();
+ }
+
+ @Override
+ public void columnMarginChanged(ChangeEvent e)
+ {
+ if (isEditing())
+ {
+ removeEditor();
+ }
+ TableColumn resizingColumn = getTableHeader().getResizingColumn();
+ // Need to do this here, before the parent's
+ // layout manager calls getPreferredSize().
+ if (resizingColumn != null && autoResizeMode == AUTO_RESIZE_OFF
+ && !inLayout)
+ {
+ resizingColumn.setPreferredWidth(resizingColumn.getWidth());
+ }
+ resizeAndRepaint();
+ }
+
@Override
public String getToolTipText(MouseEvent evt)
{
try
{
+ if (getValueAt(rowIndex, colIndex) == null)
+ {
+ return null;
+ }
toolTipText = getValueAt(rowIndex, colIndex).toString();
} catch (Exception e)
{
protected JScrollPane scrl_foundStructures = new JScrollPane(tbl_summary);
- protected JTable tbl_local_pdb = new JTable();
-
- protected JScrollPane scrl_localPDB = new JScrollPane(tbl_local_pdb);
-
- private JTabbedPane pnl_filter = new JTabbedPane();
-
- private PDBDocFieldPreferences pdbDocFieldPrefs = new PDBDocFieldPreferences(
- PreferenceSource.STRUCTURE_CHOOSER);
-
- protected PDBDocField[] previousWantedFields;
-
public GStructureChooser()
{
try
JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent
.getSource();
int index = sourceTabbedPane.getSelectedIndex();
+ btn_view.setVisible(true);
+ btn_cancel.setVisible(true);
if (sourceTabbedPane.getTitleAt(index).equals(configureCols))
{
btn_view.setEnabled(false);
btn_cancel.setEnabled(false);
- previousWantedFields = PDBDocFieldPreferences
- .getStructureSummaryFields().toArray(
- new PDBRestClient.PDBDocField[0]);
+ btn_view.setVisible(false);
+ btn_cancel.setVisible(false);
+ previousWantedFields = PDBFTSRestClient.getInstance()
+ .getAllDefaulDisplayedDataColumns()
+ .toArray(new FTSDataColumnI[0]);
}
if (sourceTabbedPane.getTitleAt(index)
.equals(foundStructureSummary))
return true;
}
- return Arrays.equals(PDBDocFieldPreferences.getStructureSummaryFields()
- .toArray(new PDBRestClient.PDBDocField[0]),
+ return Arrays.equals(
+ PDBFTSRestClient.getInstance()
+ .getAllDefaulDisplayedDataColumns()
+ .toArray(new FTSDataColumnI[0]),
previousWantedFields) ? false : true;
}
pdbFile.setText(MessageManager.getString("label.pdb_file"));
pdbFile.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
pdbFile_actionPerformed(actionEvent);
png.setText("PNG");
png.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
png_actionPerformed(actionEvent);
eps.setText("EPS");
eps.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
eps_actionPerformed(actionEvent);
viewMapping.setText(MessageManager.getString("label.view_mapping"));
viewMapping.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
viewMapping_actionPerformed(actionEvent);
fitToWindow.setText(MessageManager.getString("label.fit_to_window"));
fitToWindow.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
fitToWindow_actionPerformed();
.setText(MessageManager.getString("action.background_colour"));
backGround.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
backGround_actionPerformed(actionEvent);
seqColour.setText(MessageManager.getString("action.by_sequence"));
seqColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
seqColour_actionPerformed(actionEvent);
chainColour.setText(MessageManager.getString("action.by_chain"));
chainColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
chainColour_actionPerformed(actionEvent);
chargeColour.setText(MessageManager.getString("label.charge_cysteine"));
chargeColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
chargeColour_actionPerformed(actionEvent);
zappoColour.setText(MessageManager.getString("label.zappo"));
zappoColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
zappoColour_actionPerformed(actionEvent);
taylorColour.setText(MessageManager.getString("label.taylor"));
taylorColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
taylorColour_actionPerformed(actionEvent);
hydroColour.setText(MessageManager.getString("label.hydrophobicity"));
hydroColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
hydroColour_actionPerformed(actionEvent);
.getString("label.strand_propensity"));
strandColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
strandColour_actionPerformed(actionEvent);
helixColour.setText(MessageManager.getString("label.helix_propensity"));
helixColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
helixColour_actionPerformed(actionEvent);
turnColour.setText(MessageManager.getString("label.turn_propensity"));
turnColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
turnColour_actionPerformed(actionEvent);
buriedColour.setText(MessageManager.getString("label.buried_index"));
buriedColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
buriedColour_actionPerformed(actionEvent);
.getString("label.purine_pyrimidine"));
purinePyrimidineColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
purinePyrimidineColour_actionPerformed(actionEvent);
userColour.setText(MessageManager.getString("action.user_defined"));
userColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
userColour_actionPerformed(actionEvent);
.getString("label.let_jmol_manage_structure_colours"));
viewerColour.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
viewerColour_actionPerformed(actionEvent);
helpItem.setText(MessageManager.getString("label.jmol_help"));
helpItem.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
showHelp_actionPerformed(actionEvent);
.setText(MessageManager.getString("label.align_structures"));
alignStructs.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent actionEvent)
{
alignStructs_actionPerformed(actionEvent);
{
}
+ protected void highlightSelection_actionPerformed()
+ {
+ }
+
protected void viewerColour_actionPerformed(ActionEvent actionEvent)
{
}
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.jbgui;
-
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.table.AbstractTableModel;
-
-@SuppressWarnings("serial")
-public class PDBDocFieldPreferences extends JScrollPane
-{
- protected JTable tbl_pdbDocFieldConfig = new JTable();
-
- protected JScrollPane scrl_pdbDocFieldConfig = new JScrollPane(
- tbl_pdbDocFieldConfig);
-
- private HashMap<String, PDBDocField> map = new HashMap<String, PDBDocField>();
-
- private static Collection<PDBDocField> searchSummaryFields = new LinkedHashSet<PDBDocField>();
-
- private static Collection<PDBDocField> structureSummaryFields = new LinkedHashSet<PDBDocField>();
-
- public enum PreferenceSource
- {
- SEARCH_SUMMARY, STRUCTURE_CHOOSER, PREFERENCES;
- }
-
- private PreferenceSource currentSource;
-
- static
- {
- searchSummaryFields.add(PDBDocField.PDB_ID);
- searchSummaryFields.add(PDBDocField.TITLE);
-
- structureSummaryFields.add(PDBDocField.PDB_ID);
- structureSummaryFields.add(PDBDocField.TITLE);
- }
-
- public PDBDocFieldPreferences(PreferenceSource source)
- {
- tbl_pdbDocFieldConfig.setAutoCreateRowSorter(true);
- this.getViewport().add(tbl_pdbDocFieldConfig);
- this.currentSource = source;
-
- String[] columnNames = null;
- switch (source)
- {
- case SEARCH_SUMMARY:
- columnNames = new String[] { "PDB Field", "Show in search summary" };
- break;
- case STRUCTURE_CHOOSER:
- columnNames = new String[] { "PDB Field", "Show in structure summary" };
- break;
- case PREFERENCES:
- columnNames = new String[] { "PDB Field", "Show in search summary",
- "Show in structure summary" };
- break;
- default:
- break;
- }
-
- Object[][] data = new Object[PDBDocField.values().length - 1][3];
- int x = 0;
- for (PDBDocField field : PDBDocField.values())
- {
- if (field.getName().equalsIgnoreCase("all"))
- {
- continue;
- }
-
- switch (source)
- {
- case SEARCH_SUMMARY:
- data[x++] = new Object[] { field.getName(),
- searchSummaryFields.contains(field) };
- break;
- case STRUCTURE_CHOOSER:
- data[x++] = new Object[] { field.getName(),
- structureSummaryFields.contains(field) };
- break;
- case PREFERENCES:
- data[x++] = new Object[] { field.getName(),
- searchSummaryFields.contains(field),
- structureSummaryFields.contains(field) };
- break;
- default:
- break;
- }
- map.put(field.getName(), field);
- }
-
- PDBFieldTableModel model = new PDBFieldTableModel(columnNames, data);
- tbl_pdbDocFieldConfig.setModel(model);
- }
-
- public static Collection<PDBDocField> getSearchSummaryFields()
- {
- return searchSummaryFields;
- }
-
- public static void setSearchSummaryFields(
- Collection<PDBDocField> searchSummaryFields)
- {
- PDBDocFieldPreferences.searchSummaryFields = searchSummaryFields;
- }
-
- public static Collection<PDBDocField> getStructureSummaryFields()
- {
- return structureSummaryFields;
- }
-
- public static void setStructureSummaryFields(
- Collection<PDBDocField> structureSummaryFields)
- {
- PDBDocFieldPreferences.structureSummaryFields = structureSummaryFields;
- }
-
- class PDBFieldTableModel extends AbstractTableModel
- {
-
- public PDBFieldTableModel(String[] columnNames, Object[][] data)
- {
- this.data = data;
- this.columnNames = columnNames;
- }
-
- private Object[][] data;
-
- private String[] columnNames;
-
- public int getColumnCount()
- {
- return columnNames.length;
- }
-
- public int getRowCount()
- {
- return data.length;
- }
-
- public String getColumnName(int col)
- {
- return columnNames[col];
- }
-
- public Object getValueAt(int row, int col)
- {
- return data[row][col];
- }
-
- /*
- * JTable uses this method to determine the default renderer/ editor for
- * each cell. If we didn't implement this method, then the last column would
- * contain text ("true"/"false"), rather than a check box.
- */
- public Class getColumnClass(int c)
- {
- return getValueAt(0, c).getClass();
- }
-
- /*
- * Don't need to implement this method unless your table's editable.
- */
- public boolean isCellEditable(int row, int col)
- {
- // Note that the data/cell address is constant,
- // no matter where the cell appears onscreen.
- // !isPDBID(row, col) ensures the PDB_Id cell is never editable as it
- // serves as a unique id for each row.
- return (col == 1 || col == 2) && !isPDBID(row, col);
-
- }
-
- /**
- * Determines whether the data in a given cell is a PDB ID.
- *
- * @param row
- * @param col
- * @return
- */
-
- public boolean isPDBID(int row, int col)
- {
- boolean matched = false;
- String name = getValueAt(row, 0).toString();
- PDBDocField pdbField = map.get(name);
- if (pdbField == PDBDocField.PDB_ID)
- {
- matched = true;
- }
- return matched;
- }
-
- /*
- * Don't need to implement this method unless your table's data can change.
- */
- public void setValueAt(Object value, int row, int col)
- {
- data[row][col] = value;
- fireTableCellUpdated(row, col);
-
- String name = getValueAt(row, 0).toString();
- boolean selected = ((Boolean) value).booleanValue();
-
- PDBDocField pdbField = map.get(name);
-
- if (currentSource == PreferenceSource.SEARCH_SUMMARY)
- {
- updatePrefs(searchSummaryFields, pdbField, selected);
- }
- else if (currentSource == PreferenceSource.STRUCTURE_CHOOSER)
- {
- updatePrefs(structureSummaryFields, pdbField, selected);
- }
- else if (currentSource == PreferenceSource.PREFERENCES)
- {
- if (col == 1)
- {
- updatePrefs(searchSummaryFields, pdbField, selected);
- }
- else if (col == 2)
- {
- updatePrefs(structureSummaryFields, pdbField, selected);
- }
- }
- }
-
- private void updatePrefs(Collection<PDBDocField> prefConfig,
- PDBDocField pdbField, boolean selected)
- {
- if (prefConfig.contains(pdbField) && !selected)
- {
- prefConfig.remove(pdbField);
- }
-
- if (!prefConfig.contains(pdbField) && selected)
- {
- prefConfig.add(pdbField);
- }
- }
-
- }
-}
if (columnSelection != null)
{
- for (int v : columnSelection.getSelected())
+ if (columnSelection.contains(column))
{
- if (v == column)
- {
- g.fillRect(x * charWidth, y, charWidth, charHeight);
- }
+ g.fillRect(x * charWidth, y, charWidth, charHeight);
}
}
}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.renderer;
+
+import jalview.api.AlignViewportI;
+import jalview.datamodel.SequenceI;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Calculate and display alignment rulers
+ *
+ * @author jprocter
+ *
+ */
+public class ScaleRenderer
+{
+ /**
+ * calculate positions markers on the alignment ruler
+ *
+ * @param av
+ * @param startx
+ * left-most column in visible view
+ * @param endx
+ * - right-most column in visible view
+ * @return List { Object { .. } } Boolean: true/false for major/minor mark,
+ * Integer: marker position in alignment column coords, String: null
+ * or a String to be rendered at the position.
+ */
+ public static List<Object[]> calculateMarks(AlignViewportI av,
+ int startx, int endx)
+ {
+ new ArrayList<Object[]>();
+
+ int scalestartx = (startx / 10) * 10;
+
+ SequenceI refSeq = av.getAlignment().getSeqrep();
+ int refSp = 0, refStartI = 0, refEndI = -1;
+ if (refSeq != null)
+ {
+ // find bounds and set origin appopriately
+ // locate first visible position for this sequence
+ int[] refbounds = av.getColumnSelection()
+ .locateVisibleBoundsOfSequence(refSeq);
+
+ refSp = refbounds[0];
+ refStartI = refbounds[4];
+ refEndI = refbounds[5];
+ scalestartx = refSp + ((scalestartx - refSp) / 10) * 10;
+ }
+
+ if (refSeq == null && scalestartx % 10 == 0)
+ {
+ scalestartx += 5;
+ }
+ List<Object[]> marks = new ArrayList<Object[]>();
+ String string;
+ int refN, iadj;
+ // todo: add a 'reference origin column' to set column number relative to
+ for (int i = scalestartx; i < endx; i += 5)
+ {
+ Object[] amark = new Object[3];
+ if (((i - refSp) % 10) == 0)
+ {
+ if (refSeq == null)
+ {
+ iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1) + 1;
+ string = String.valueOf(iadj);
+ }
+ else
+ {
+ iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1);
+ refN = refSeq.findPosition(iadj);
+ // TODO show bounds if position is a gap
+ // - ie L--R -> "1L|2R" for
+ // marker
+ if (iadj < refStartI)
+ {
+ string = String.valueOf(iadj - refStartI);
+ }
+ else if (iadj > refEndI)
+ {
+ string = "+" + String.valueOf(iadj - refEndI);
+ }
+ else
+ {
+ string = String.valueOf(refN) + refSeq.getCharAt(iadj);
+ }
+ }
+ amark[0] = Boolean.TRUE;
+ amark[1] = Integer.valueOf(i - startx - 1);
+ amark[2] = string;
+
+ }
+ else
+ {
+ amark[0] = Boolean.FALSE;
+ amark[1] = Integer.valueOf(i - startx - 1);
+ amark[2] = null;
+ }
+ marks.add(amark);
+ }
+ return marks;
+ }
+
+}
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
+import jalview.viewmodel.seqfeatures.FeatureRendererModel;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
-public class FeatureRenderer extends
- jalview.viewmodel.seqfeatures.FeatureRendererModel
+public class FeatureRenderer extends FeatureRendererModel
{
FontMetrics fm;
}
- if (transparency != 1.0f && g != null && transparencyAvailable)
+ if (transparency != 1.0f && g != null)
{
Graphics2D g2 = (Graphics2D) g;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
}
}
- boolean transparencyAvailable = true;
-
- protected void setTransparencyAvailable(boolean isTransparencyAvailable)
- {
- transparencyAvailable = isTransparencyAvailable;
- }
-
- @Override
- public boolean isTransparencyAvailable()
- {
- return transparencyAvailable;
- }
-
/**
* Called when alignment in associated view has new/modified features to
* discover and display.
}
/*
- * autoScaled == true: colours range over actual score range; autoScaled ==
- * false ('abso'): colours range over min/max range
+ * autoScaled == true: colours range over actual score range
+ * autoScaled == false ('abso'): colours range over min/max range
*/
- boolean autoScaled = false;
+ boolean autoScaled = true;
String tok = null, minval, maxval;
if (mincol != null)
{
}
tok = gcol.nextToken();
gcol.nextToken(); // skip next '|'
- if (tok.toLowerCase().indexOf("abso") != 0)
+ if (tok.toLowerCase().startsWith("abso"))
{
- minval = tok;
- autoScaled = true;
+ minval = gcol.nextToken();
+ gcol.nextToken(); // skip next '|'
+ autoScaled = false;
}
else
{
- minval = gcol.nextToken();
- gcol.nextToken(); // skip next '|'
+ minval = tok;
}
maxval = gcol.nextToken();
if (gcol.hasMoreTokens())
* Sets the 'graduated colour' flag. If true, also sets 'colour by label' to
* false.
*/
- @Override
- public void setGraduatedColour(boolean b)
+ void setGraduatedColour(boolean b)
{
graduatedColour = b;
if (b)
{
sb.append(Format.getHexString(getMinColour())).append(BAR);
sb.append(Format.getHexString(getMaxColour())).append(BAR);
- if (isAutoScaled())
+ if (!isAutoScaled())
{
sb.append("abso").append(BAR);
}
+++ /dev/null
-package jalview.schemes;
-
-import jalview.api.FeatureColourI;
-import jalview.api.FeatureSettingsI;
-
-import java.awt.Color;
-
-/**
- * Pre-set configurations for feature settings
- *
- * @author gmcarstairs
- *
- */
-public enum FeatureColourScheme implements FeatureSettingsI
-{
- /**
- * Show sequence variants in red, on top of exons coloured by label
- */
- EnsemblVariants
- {
-
- @Override
- public boolean isFeatureDisplayed(String type)
- {
- // TODO accept SO sub-types of these features
- // if (SequenceOntologyFactory.getInstance().isA(SequenceOntologyI.EXON...
- return (EXON.equals(type) || SEQUENCE_VARIANT.equals(type));
- }
-
- @Override
- public boolean isGroupDisplayed(String group)
- {
- return true;
- }
-
- @Override
- public FeatureColourI getFeatureColour(String type)
- {
- if (EXON.equals(type))
- {
- return new FeatureColour()
- {
- @Override
- public boolean isColourByLabel()
- {
- return true;
- }
- };
- }
- if (SEQUENCE_VARIANT.equals(type))
- {
- return new FeatureColour(Color.RED);
- }
- return null;
- }
-
- @Override
- public float getTransparency()
- {
- return 1f;
- }
-
- /**
- * Order sequence_variant above exon above the rest
- */
- @Override
- public int compareTo(String feature1, String feature2)
- {
- if (SEQUENCE_VARIANT.equals(feature1))
- {
- return -1;
- }
- if (SEQUENCE_VARIANT.equals(feature2))
- {
- return +1;
- }
- if (EXON.equals(feature1))
- {
- return -1;
- }
- if (EXON.equals(feature2))
- {
- return +1;
- }
- return 0;
- }
-
- @Override
- public boolean optimiseOrder()
- {
- return false;
- };
-
- };
-
- // SequenceOntologyI.SEQUENCE_VARIANT
- private static final String SEQUENCE_VARIANT = "sequence_variant";
-
- // SequenceOntologyI.EXON
- private static final String EXON = "exon";
-}
--- /dev/null
+package jalview.schemes;
+
+import jalview.api.FeatureColourI;
+import jalview.api.FeatureSettingsModelI;
+
+/**
+ * An adapter class that may be extended to instantiate feature colour schemes
+ */
+public class FeatureSettingsAdapter implements FeatureSettingsModelI
+{
+
+ @Override
+ public boolean isFeatureDisplayed(String type)
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isGroupDisplayed(String group)
+ {
+ return true;
+ }
+
+ @Override
+ public FeatureColourI getFeatureColour(String type)
+ {
+ return null;
+ }
+
+ @Override
+ public float getTransparency()
+ {
+ return 1f;
+ }
+
+ @Override
+ public int compare(String feature1, String feature2)
+ {
+ return 0;
+ }
+
+ @Override
+ public boolean optimiseOrder()
+ {
+ return false;
+ }
+
+}
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.schemes;
-
-import jalview.datamodel.SequenceFeature;
-
-import java.awt.Color;
-
-/**
- * Value and/or thresholded colour scale used for colouring by annotation and
- * feature score
- *
- * @author JimP
- *
- */
-public class GraduatedColor
-{
- int thresholdState = AnnotationColourGradient.NO_THRESHOLD; // or
- // ABOVE_THRESHOLD
- // or
- // BELOW_THRESHOLD
-
- float lr, lg, lb, dr, dg, db;
-
- /**
- * linear scaling parameters, base, minimum colour threshold, range of linear
- * scale from lower to upper
- */
- float base, range, thrsh;
-
- /**
- * when true, colour from u to u-d rather than u to u+d
- */
- boolean tolow = false;
-
- /**
- * when false, min/max range has been manually set so should not be
- * dynamically adjusted.
- */
- boolean autoScale = true;
-
- /**
- * construct a graduatedColor object from simple parameters
- *
- * @param low
- * @param high
- * @param min
- * @param max
- * color low->high from min->max
- */
- public GraduatedColor(Color low, Color high, float min, float max)
- {
- thrsh = Float.NaN;
- tolow = min >= max;
- lr = low.getRed() / 255f;
- lg = low.getGreen() / 255f;
- lb = low.getBlue() / 255f;
- dr = (high.getRed() / 255f) - lr;
- dg = (high.getGreen() / 255f) - lg;
- db = (high.getBlue() / 255f) - lb;
- if (tolow)
- {
- base = max;
- range = min - max;
- }
- else
- {
- base = min;
- range = max - min;
- }
- }
-
- public GraduatedColor(GraduatedColor oldcs)
- {
- lr = oldcs.lr;
- lg = oldcs.lg;
- lb = oldcs.lb;
- dr = oldcs.dr;
- dg = oldcs.dg;
- db = oldcs.db;
- base = oldcs.base;
- range = oldcs.range;
- tolow = oldcs.tolow;
- thresholdState = oldcs.thresholdState;
- thrsh = oldcs.thrsh;
- autoScale = oldcs.autoScale;
- colourByLabel = oldcs.colourByLabel;
- }
-
- /**
- * make a new gradient from an old one with a different scale range
- *
- * @param oldcs
- * @param min
- * @param max
- */
- public GraduatedColor(GraduatedColor oldcs, float min, float max)
- {
- this(oldcs);
- updateBounds(min, max);
- }
-
- public Color getMinColor()
- {
- return new Color(lr, lg, lb);
- }
-
- public Color getMaxColor()
- {
- return new Color(lr + dr, lg + dg, lb + db);
- }
-
- /**
- *
- * @return true if original min/max scale was from high to low
- */
- public boolean getTolow()
- {
- return tolow;
- }
-
- public void setTolow(boolean tolower)
- {
- tolow = tolower;
- }
-
- public boolean isColored(SequenceFeature feature)
- {
- float val = feature.getScore();
- if (Float.isNaN(val))
- {
- return true;
- }
- if (this.thresholdState == AnnotationColourGradient.NO_THRESHOLD)
- {
- return true;
- }
- if (Float.isNaN(this.thrsh))
- {
- return true;
- }
- boolean rtn = thresholdState == AnnotationColourGradient.ABOVE_THRESHOLD;
- if (val <= thrsh)
- {
- return !rtn; // ? !tolow : tolow;
- }
- else
- {
- return rtn; // ? tolow : !tolow;
- }
- }
-
- /**
- * default implementor of a getColourFromString method. TODO: abstract an
- * interface enabling pluggable colour from string
- */
- private UserColourScheme ucs = null;
-
- private boolean colourByLabel = false;
-
- /**
- *
- * @return true if colourByLabel style is set
- */
- public boolean isColourByLabel()
- {
- return colourByLabel;
- }
-
- /**
- * @param colourByLabel
- * the colourByLabel to set
- */
- public void setColourByLabel(boolean colourByLabel)
- {
- this.colourByLabel = colourByLabel;
- }
-
- public Color findColor(SequenceFeature feature)
- {
- if (colourByLabel)
- {
- // TODO: allow user defined feature label colourschemes. Colour space is
- // {type,regex,%anytype%}x{description string, regex, keyword}
- if (ucs == null)
- {
- ucs = new UserColourScheme();
- }
- return ucs.createColourFromName(feature.getDescription());
- }
- if (range == 0.0)
- {
- return getMaxColor();
- }
- float scr = feature.getScore();
- if (Float.isNaN(scr))
- {
- return getMinColor();
- }
- float scl = (scr - base) / range;
- if (tolow)
- {
- scl = -scl;
- }
- if (scl < 0f)
- {
- scl = 0f;
- }
- if (scl > 1f)
- {
- scl = 1f;
- }
- return new Color(lr + scl * dr, lg + scl * dg, lb + scl * db);
- }
-
- public void setThresh(float value)
- {
- thrsh = value;
- }
-
- public float getThresh()
- {
- return thrsh;
- }
-
- public void setThreshType(int aboveThreshold)
- {
- thresholdState = aboveThreshold;
- }
-
- public int getThreshType()
- {
- return thresholdState;
- }
-
- public float getMax()
- {
- // regenerate the original values passed in to the constructor
- return (tolow) ? base : (base + range);
- }
-
- public float getMin()
- {
- // regenerate the original value passed in to the constructor
- return (tolow) ? (base + range) : base;
- }
-
- public boolean isAutoScale()
- {
- return autoScale;
- }
-
- public void setAutoScaled(boolean autoscale)
- {
- autoScale = autoscale;
- }
-
- /**
- * update the base and range appropriatly for the given minmax range
- *
- * @param a
- * float[] {min,max} array containing minmax range for the associated
- * score values
- */
- public void updateBounds(float min, float max)
- {
- if (max < min)
- {
- base = max;
- range = min - max;
- tolow = true;
- }
- else
- {
- base = min;
- range = max - min;
- tolow = false;
- }
- }
-}
public class ResidueProperties
{
- public static Hashtable<String, ScoreModelI> scoreMatrices = new Hashtable();
+ public static Hashtable<String, ScoreModelI> scoreMatrices = new Hashtable<String, ScoreModelI>();
// Stores residue codes/names and colours and other things
public static final int[] aaIndex; // aaHash version 2.1.1 and below
if (col == null)
{
- System.out.println("Unknown colour!! " + colour);
+ System.out.println("Making colour from name: " + colour);
col = createColourFromName(colour);
}
import jalview.datamodel.SequenceI;
import jalview.gui.IProgressIndicator;
import jalview.io.AppletFormatAdapter;
+import jalview.io.StructureFile;
import jalview.util.MappingUtils;
import jalview.util.MessageManager;
import jalview.ws.sifts.SiftsClient;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.IdentityHashMap;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.Vector;
import MCview.Atom;
/*
* Set of any registered mappings between (dataset) sequences.
*/
- public Set<AlignedCodonFrame> seqmappings = new LinkedHashSet<AlignedCodonFrame>();
+ private List<AlignedCodonFrame> seqmappings = new ArrayList<AlignedCodonFrame>();
private List<CommandListener> commandListeners = new ArrayList<CommandListener>();
* - how to resolve data from resource
* @return null or the structure data parsed as a pdb file
*/
- synchronized public PDBfile setMapping(SequenceI[] sequence,
+ synchronized public StructureFile setMapping(SequenceI[] sequence,
String[] targetChains, String pdbFile, String protocol)
{
return setMapping(true, sequence, targetChains, pdbFile, protocol);
}
+
/**
* create sequence structure mappings between each sequence and the given
* pdbFile (retrieved via the given protocol).
* - how to resolve data from resource
* @return null or the structure data parsed as a pdb file
*/
- synchronized public PDBfile setMapping(boolean forStructureView,
+ synchronized public StructureFile setMapping(boolean forStructureView,
SequenceI[] sequenceArray, String[] targetChainIds,
String pdbFile,
String protocol)
}
}
}
- PDBfile pdb = null;
+ StructureFile pdb = null;
boolean isMapUsingSIFTs = SiftsSettings.isMapWithSifts();
try
{
- pdb = new PDBfile(addTempFacAnnot, parseSecStr, secStructServices,
- pdbFile, protocol);
- if (pdb.id != null && pdb.id.trim().length() > 0
+ if (pdbFile != null && isCIFFile(pdbFile))
+ {
+ pdb = new jalview.ext.jmol.JmolParser(addTempFacAnnot, parseSecStr,
+ secStructServices, pdbFile, protocol);
+ }
+ else
+ {
+ pdb = new PDBfile(addTempFacAnnot, parseSecStr, secStructServices,
+ pdbFile, protocol);
+ }
+
+ if (pdb.getId() != null && pdb.getId().trim().length() > 0
&& AppletFormatAdapter.FILE.equals(protocol))
{
- registerPDBFile(pdb.id.trim(), pdbFile);
+ registerPDBFile(pdb.getId().trim(), pdbFile);
}
} catch (Exception ex)
{
String maxChainId = " ";
PDBChain maxChain = null;
boolean first = true;
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
if (targetChainId.length() > 0 && !targetChainId.equals(chain.id)
&& !infChain)
if (protocol.equals(jalview.io.AppletFormatAdapter.PASTE))
{
- pdbFile = "INLINE" + pdb.id;
+ pdbFile = "INLINE" + pdb.getId();
}
ArrayList<StructureMapping> seqToStrucMapping = new ArrayList<StructureMapping>();
}
else
{
- for (PDBChain chain : pdb.chains)
+ for (PDBChain chain : pdb.getChains())
{
StructureMapping mapping = getStructureMapping(seq, pdbFile,
chain.id, pdb, chain, sqmpping, maxAlignseq);
return pdb;
}
+ private boolean isCIFFile(String filename)
+ {
+ String fileExt = filename.substring(filename.lastIndexOf(".") + 1,
+ filename.length());
+ return "cif".equalsIgnoreCase(fileExt);
+ }
+
private StructureMapping getStructureMapping(SequenceI seq,
- String pdbFile, String targetChainId, PDBfile pdb,
+ String pdbFile, String targetChainId, StructureFile pdb,
PDBChain maxChain, jalview.datamodel.Mapping sqmpping,
AlignSeq maxAlignseq)
{
{
StructureMapping curChainMapping = siftsClient
.getSiftsStructureMapping(seq, pdbFile, targetChainId);
+ try
+ {
PDBChain chain = pdb.findChain(targetChainId);
if (chain != null)
{
chain.transferResidueAnnotation(curChainMapping, sqmpping);
}
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
return curChainMapping;
} catch (SiftsException e)
{
private StructureMapping getNWMappings(SequenceI seq,
String pdbFile,
- String maxChainId, PDBChain maxChain, PDBfile pdb,
+ String maxChainId, PDBChain maxChain, StructureFile pdb,
AlignSeq maxAlignseq)
{
final StringBuilder mappingDetails = new StringBuilder(128);
} while (index < maxChain.atoms.size());
StructureMapping nwMapping = new StructureMapping(seq, pdbFile,
- pdb.id, maxChainId, mapping, mappingDetails.toString());
+ pdb.getId(), maxChainId, mapping, mappingDetails.toString());
maxChain.transferResidueAnnotation(nwMapping, sqmpping);
return nwMapping;
}
* the sequence that the mouse over occurred on
* @param indexpos
* the absolute position being mouseovered in seq (0 to seq.length())
- * @param index
+ * @param seqPos
* the sequence position (if -1, seq.findPosition is called to
* resolve the residue number)
*/
- public void mouseOverSequence(SequenceI seq, int indexpos, int index,
+ public void mouseOverSequence(SequenceI seq, int indexpos, int seqPos,
VamsasSource source)
{
boolean hasSequenceListeners = handlingVamsasMo
|| !seqmappings.isEmpty();
SearchResults results = null;
- if (index == -1)
+ if (seqPos == -1)
{
- index = seq.findPosition(indexpos);
+ seqPos = seq.findPosition(indexpos);
}
for (int i = 0; i < listeners.size(); i++)
{
}
if (listener instanceof StructureListener)
{
- highlightStructure((StructureListener) listener, seq, index);
+ highlightStructure((StructureListener) listener, seq, seqPos);
}
else
{
{
if (results == null)
{
- results = MappingUtils.buildSearchResults(seq, index,
+ results = MappingUtils.buildSearchResults(seq, seqPos,
seqmappings);
}
if (handlingVamsasMo)
{
- results.addResult(seq, index, index);
+ results.addResult(seq, seqPos, seqPos);
}
if (!results.isEmpty())
else if (listener instanceof SecondaryStructureListener)
{
((SecondaryStructureListener) listener).mouseOverSequence(seq,
- indexpos, index);
+ indexpos, seqPos);
}
}
}
/**
* Send suitable messages to a StructureListener to highlight atoms
- * corresponding to the given sequence position.
+ * corresponding to the given sequence position(s)
*
* @param sl
* @param seq
- * @param index
+ * @param positions
*/
- protected void highlightStructure(StructureListener sl, SequenceI seq,
- int index)
+ public void highlightStructure(StructureListener sl, SequenceI seq,
+ int... positions)
{
if (!sl.isListeningFor(seq))
{
List<AtomSpec> atoms = new ArrayList<AtomSpec>();
for (StructureMapping sm : mappings)
{
- if (sm.sequence == seq || sm.sequence == seq.getDatasetSequence())
+ if (sm.sequence == seq
+ || sm.sequence == seq.getDatasetSequence()
+ || (sm.sequence.getDatasetSequence() != null && sm.sequence
+ .getDatasetSequence() == seq.getDatasetSequence()))
{
- atomNo = sm.getAtomNum(index);
-
- if (atomNo > 0)
+ for (int index : positions)
{
- atoms.add(new AtomSpec(sm.pdbfile, sm.pdbchain, sm
- .getPDBResNum(index), atomNo));
+ atomNo = sm.getAtomNum(index);
+
+ if (atomNo > 0)
+ {
+ atoms.add(new AtomSpec(sm.pdbfile, sm.pdbchain, sm
+ .getPDBResNum(index), atomNo));
+ }
}
}
}
/**
* Add each of the given codonFrames to the stored set, if not aready present.
*
- * @param set
+ * @param mappings
*/
- public void registerMappings(Set<AlignedCodonFrame> set)
+ public void registerMappings(List<AlignedCodonFrame> mappings)
{
- if (set != null)
+ if (mappings != null)
{
- for (AlignedCodonFrame acf : set)
+ for (AlignedCodonFrame acf : mappings)
{
registerMapping(acf);
}
public void setProgressBar(String message)
{
+ if (progressIndicator == null)
+ {
+ return;
+ }
progressIndicator.setProgressBar(message, progressSessionId);
}
+ public List<AlignedCodonFrame> getSequenceMappings()
+ {
+ return seqmappings;
+ }
+
}
--- /dev/null
+package jalview.structure;
+
+public class StructureViewSettings
+{
+ private String dbRefType;
+
+ /**
+ * set to true to add derived sequence annotations (temp factor read from
+ * file, or computed secondary structure) to the alignment
+ */
+ private static boolean visibleChainAnnotation = false;
+
+ /**
+ * Set true to predict secondary structure (using JMol for protein, Annotate3D
+ * for RNA)
+ */
+ private static boolean predictSecStr = false;
+
+ /**
+ * Set true (with predictSecondaryStructure=true) to predict secondary
+ * structure using an external service (currently Annotate3D for RNA only)
+ */
+ private static boolean externalSecondaryStructure = false;
+
+ private static boolean showSeqFeatures = true;
+
+ public static void addSettings(boolean addAlignmentAnnotations,
+ boolean predictSecStr, boolean externalSecStr)
+ {
+ StructureViewSettings.visibleChainAnnotation = addAlignmentAnnotations;
+ StructureViewSettings.predictSecStr = predictSecStr;
+ StructureViewSettings.externalSecondaryStructure = externalSecStr;
+ StructureViewSettings.showSeqFeatures = true;
+ }
+
+ public static boolean isVisibleChainAnnotation()
+ {
+ return visibleChainAnnotation;
+ }
+
+ public static void setVisibleChainAnnotation(
+ boolean visibleChainAnnotation)
+ {
+ StructureViewSettings.visibleChainAnnotation = visibleChainAnnotation;
+ }
+
+ public static boolean isPredictSecondaryStructure()
+ {
+ return predictSecStr;
+ }
+
+ public static void setPredictSecondaryStructure(
+ boolean predictSecondaryStructure)
+ {
+ StructureViewSettings.predictSecStr = predictSecondaryStructure;
+ }
+
+ public static boolean isExternalSecondaryStructure()
+ {
+ return externalSecondaryStructure;
+ }
+
+ public static void setExternalSecondaryStructure(
+ boolean externalSecondaryStructure)
+ {
+ StructureViewSettings.externalSecondaryStructure = externalSecondaryStructure;
+ }
+
+ public static boolean isShowSeqFeatures()
+ {
+ return showSeqFeatures;
+ }
+
+ public static void setShowSeqFeatures(boolean showSeqFeatures)
+ {
+ StructureViewSettings.showSeqFeatures = showSeqFeatures;
+ }
+
+}
{
for (SequenceI s : seqs)
{
- if (s == seq)
+ if (s == seq
+ || (s.getDatasetSequence() != null && s
+ .getDatasetSequence() == seq
+ .getDatasetSequence()))
{
return true;
}
--- /dev/null
+package jalview.util;
+
+public class ArrayUtils
+{
+ /**
+ * Reverse the given array 'in situ'
+ *
+ * @param arr
+ */
+ public static void reverseIntArray(int[] arr)
+ {
+ if (arr != null)
+ {
+ /*
+ * swap [k] with [end-k] up to the half way point in the array
+ * if length is odd, the middle entry is left untouched by the excitement
+ */
+ int last = arr.length - 1;
+ for (int k = 0; k < arr.length / 2; k++)
+ {
+ int temp = arr[k];
+ arr[k] = arr[last - k];
+ arr[last - k] = temp;
+ }
+ }
+ }
+}
return col == null ? null : col.brighter().brighter().brighter();
}
+ /**
+ * Returns a color between minColour and maxColour; the RGB values are in
+ * proportion to where 'value' lies between minValue and maxValue
+ *
+ * @param value
+ * @param minValue
+ * @param minColour
+ * @param maxValue
+ * @param maxColour
+ * @return
+ */
+ public static Color getGraduatedColour(float value, float minValue,
+ Color minColour, float maxValue, Color maxColour)
+ {
+ if (minValue == maxValue)
+ {
+ return minColour;
+ }
+ if (value < minValue)
+ {
+ value = minValue;
+ }
+ if (value > maxValue)
+ {
+ value = maxValue;
+ }
+
+ /*
+ * prop = proportion of the way value is from minValue to maxValue
+ */
+ float prop = (value - minValue) / (maxValue - minValue);
+ float r = minColour.getRed() + prop
+ * (maxColour.getRed() - minColour.getRed());
+ float g = minColour.getGreen() + prop
+ * (maxColour.getGreen() - minColour.getGreen());
+ float b = minColour.getBlue() + prop
+ * (maxColour.getBlue() - minColour.getBlue());
+ return new Color(r / 255, g / 255, b / 255);
+ }
}
* @param letters
* @return
*/
- public static final boolean areNucleotide(char[][] letters)
+ static final boolean areNucleotide(char[][] letters)
{
int ntCount = 0;
int aaCount = 0;
// to save a lengthy calculation
for (char c : seq)
{
- if ('a' <= c && c <= 'z')
- {
- c -= TO_UPPER_CASE;
- }
-
- if (c == 'A' || c == 'G' || c == 'C' || c == 'T' || c == 'U')
+ if (isNucleotide(c))
{
ntCount++;
}
- else if (!Comparison.isGap(c))
+ else if (!isGap(c))
{
aaCount++;
}
}
/**
+ * Answers true if the character is one of aAcCgGtTuU
+ *
+ * @param c
+ * @return
+ */
+ public static boolean isNucleotide(char c)
+ {
+ if ('a' <= c && c <= 'z')
+ {
+ c -= TO_UPPER_CASE;
+ }
+
+ switch (c)
+ {
+ case 'A':
+ case 'C':
+ case 'G':
+ case 'T':
+ case 'U':
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Answers true if every character in the string is one of aAcCgGtTuU, or
+ * (optionally) a gap character (dot, dash, space), else false
+ *
+ * @param s
+ * @param allowGaps
+ * @return
+ */
+ public static boolean isNucleotideSequence(String s, boolean allowGaps)
+ {
+ if (s == null)
+ {
+ return false;
+ }
+ for (int i = 0; i < s.length(); i++)
+ {
+ char c = s.charAt(i);
+ if (!isNucleotide(c))
+ {
+ if (!allowGaps || !isGap(c))
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
* Convenience overload of isNucleotide
*
* @param seqs
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import com.stevesoft.pat.Regex;
+/**
+ * Utilities for handling DBRef objects and their collections.
+ */
public class DBRefUtils
{
+ /*
+ * lookup from lower-case form of a name to its canonical (standardised) form
+ */
private static Map<String, String> canonicalSourceNameLookup = new HashMap<String, String>();
private static Map<String, String> dasCoordinateSystemsLookup = new HashMap<String, String>();
canonicalSourceNameLookup.put("uniprotkb/swiss-prot",
DBRefSource.UNIPROT);
canonicalSourceNameLookup.put("uniprotkb/trembl", DBRefSource.UNIPROT);
+
+ // Ensembl values for dbname in xref REST service:
+ canonicalSourceNameLookup.put("uniprot/sptrembl", DBRefSource.UNIPROT);
+ canonicalSourceNameLookup.put("uniprot/swissprot", DBRefSource.UNIPROT);
+
canonicalSourceNameLookup.put("pdb", DBRefSource.PDB);
+ canonicalSourceNameLookup.put("ensembl", DBRefSource.ENSEMBL);
dasCoordinateSystemsLookup.put("pdbresnum", DBRefSource.PDB);
dasCoordinateSystemsLookup.put("uniprot", DBRefSource.UNIPROT);
}
/**
- * Utilities for handling DBRef objects and their collections.
- */
- /**
*
* @param dbrefs
- * Vector of DBRef objects to search
+ * array of DBRef objects to search
* @param sources
* String[] array of source DBRef IDs to retrieve
- * @return Vector
+ * @return
*/
public static DBRefEntry[] selectRefs(DBRefEntry[] dbrefs,
String[] sources)
{
- if (dbrefs == null)
- {
- return null;
- }
- if (sources == null)
+ if (dbrefs == null || sources == null)
{
return dbrefs;
}
- Map<String, Integer> srcs = new HashMap<String, Integer>();
- ArrayList<DBRefEntry> res = new ArrayList<DBRefEntry>();
-
- for (int i = 0; i < sources.length; i++)
+ HashSet<String> srcs = new HashSet<String>();
+ for (String src : sources)
{
- srcs.put(new String(sources[i]), new Integer(i));
+ srcs.add(src);
}
- for (int i = 0, j = dbrefs.length; i < j; i++)
+
+ List<DBRefEntry> res = new ArrayList<DBRefEntry>();
+ for (DBRefEntry dbr : dbrefs)
{
- if (srcs.containsKey(dbrefs[i].getSource()))
+ String source = getCanonicalName(dbr.getSource());
+ if (srcs.contains(source))
{
- res.add(dbrefs[i]);
+ res.add(dbr);
}
}
DBRefEntry[] reply = new DBRefEntry[res.size()];
return res.toArray(reply);
}
- res = null;
- // there are probable memory leaks in the hashtable!
return null;
}
}
/**
+ * Returns an array of those references that match the given accession id
+ * <ul>
+ * <li>database sources are the same</li>
+ * <li>accession ids are the same</li>
+ * <li>both have no mapping, or the mappings are the same</li>
+ * </ul>
+ *
+ * @param ref
+ * Set of references to search
+ * @param entry
+ * pattern to match
+ * @return
+ */
+ public static DBRefEntry[] searchRefs(DBRefEntry[] ref, String accId)
+ {
+ return searchRefs(ref, new DBRefEntry("", "", accId), matchId);
+ }
+
+ /**
* Returns an array of those references that match the given entry, according
* to the given comparator. Returns null if no matches.
*
/**
* match on all non-null fields in refa
*/
+ // TODO unused - remove?
public static DbRefComp matchNonNullonA = new DbRefComp()
{
+ @Override
public boolean matches(DBRefEntry refa, DBRefEntry refb)
{
if (refa.getSource() == null
* either field is null or field matches for all of source, version, accession
* id and map.
*/
+ // TODO unused - remove?
public static DbRefComp matchEitherNonNull = new DbRefComp()
{
+ @Override
public boolean matches(DBRefEntry refa, DBRefEntry refb)
{
- if ((refa.getSource() == null || refb.getSource() == null)
- || refb.getSource().equals(refa.getSource()))
+ if (nullOrEqual(refa.getSource(), refb.getSource())
+ && nullOrEqual(refa.getVersion(), refb.getVersion())
+ && nullOrEqual(refa.getAccessionId(), refb.getAccessionId())
+ && nullOrEqual(refa.getMap(), refb.getMap()))
{
- if ((refa.getVersion() == null || refb.getVersion() == null)
- || refb.getVersion().equals(refa.getVersion()))
- {
- if ((refa.getAccessionId() == null || refb.getAccessionId() == null)
- || refb.getAccessionId().equals(refa.getAccessionId()))
- {
- if ((refa.getMap() == null || refb.getMap() == null)
- || (refb.getMap() != null && refb.getMap().equals(
- refa.getMap())))
- {
- return true;
- }
- }
- }
+ return true;
}
return false;
}
* accession ID and DB must be identical. Version is ignored. Map is either
* not defined or is a match (or is compatible?)
*/
+ // TODO unused - remove?
public static DbRefComp matchDbAndIdAndEitherMap = new DbRefComp()
{
+ @Override
public boolean matches(DBRefEntry refa, DBRefEntry refb)
{
if (refa.getSource() != null && refb.getSource() != null
&& refb.getSource().equals(refa.getSource()))
{
// We dont care about version
- // if ((refa.getVersion()==null || refb.getVersion()==null)
- // || refb.getVersion().equals(refa.getVersion()))
- // {
if (refa.getAccessionId() != null && refb.getAccessionId() != null
+ // FIXME should be && not || here?
|| refb.getAccessionId().equals(refa.getAccessionId()))
{
if ((refa.getMap() == null || refb.getMap() == null)
* or map but no maplist on either or maplist of map on a is the complement of
* maplist of map on b.
*/
+ // TODO unused - remove?
public static DbRefComp matchDbAndIdAndComplementaryMapList = new DbRefComp()
{
+ @Override
public boolean matches(DBRefEntry refa, DBRefEntry refb)
{
if (refa.getSource() != null && refb.getSource() != null
&& refb.getSource().equals(refa.getSource()))
{
// We dont care about version
- // if ((refa.getVersion()==null || refb.getVersion()==null)
- // || refb.getVersion().equals(refa.getVersion()))
- // {
if (refa.getAccessionId() != null && refb.getAccessionId() != null
|| refb.getAccessionId().equals(refa.getAccessionId()))
{
* or or map but no maplist on either or maplist of map on a is equivalent to
* the maplist of map on b.
*/
+ // TODO unused - remove?
public static DbRefComp matchDbAndIdAndEquivalentMapList = new DbRefComp()
{
+ @Override
public boolean matches(DBRefEntry refa, DBRefEntry refb)
{
if (refa.getSource() != null && refb.getSource() != null
*/
public static DbRefComp matchDbAndIdAndEitherMapOrEquivalentMapList = new DbRefComp()
{
+ @Override
public boolean matches(DBRefEntry refa, DBRefEntry refb)
{
- // System.err.println("Comparing A: "+refa.getSrcAccString()+(refa.hasMap()?" has map.":"."));
- // System.err.println("Comparing B: "+refb.getSrcAccString()+(refb.hasMap()?" has map.":"."));
if (refa.getSource() != null && refb.getSource() != null
&& refb.getSource().equals(refa.getSource()))
{
// We dont care about version
- // if ((refa.getVersion()==null || refb.getVersion()==null)
- // || refb.getVersion().equals(refa.getVersion()))
- // {
if (refa.getAccessionId() != null && refb.getAccessionId() != null
&& refb.getAccessionId().equals(refa.getAccessionId()))
{
};
/**
+ * accession ID only must be identical.
+ */
+ public static DbRefComp matchId = new DbRefComp()
+ {
+ @Override
+ public boolean matches(DBRefEntry refa, DBRefEntry refb)
+ {
+ if (refa.getAccessionId() != null && refb.getAccessionId() != null
+ && refb.getAccessionId().equals(refa.getAccessionId()))
+ {
+ return true;
+ }
+ return false;
+ }
+ };
+
+ /**
* Parses a DBRefEntry and adds it to the sequence, also a PDBEntry if the
* database is PDB.
* <p>
return ref;
}
+ /**
+ * Returns true if either object is null, or they are equal
+ *
+ * @param o1
+ * @param o2
+ * @return
+ */
+ public static boolean nullOrEqual(Object o1, Object o2)
+ {
+ if (o1 == null || o2 == null)
+ {
+ return true;
+ }
+ return (o1 == null ? o2.equals(o1) : o1.equals(o2));
+ }
+
}
/*
* Subregions (base 1) described as { [start1, end1], [start2, end2], ...}
*/
- private List<int[]> fromShifts = new ArrayList<int[]>();
+ private List<int[]> fromShifts;
/*
* Same format as fromShifts, for the 'mapped to' sequence
*/
- private List<int[]> toShifts = new ArrayList<int[]>();
+ private List<int[]> toShifts;
/*
* number of steps in fromShifts to one toRatio unit
private int toHighest;
/**
+ * Constructor
+ */
+ public MapList()
+ {
+ fromShifts = new ArrayList<int[]>();
+ toShifts = new ArrayList<int[]>();
+ }
+
+ /**
* Two MapList objects are equal if they are the same object, or they both
* have populated shift ranges and all values are the same.
*/
}
/**
- * Constructor.
+ * Constructor given from and to ranges as [start1, end1, start2, end2,...].
+ * If any end is equal to the next start, the ranges will be merged. There is
+ * no validation check that the ranges do not overlap each other.
*
* @param from
* contiguous regions as [start1, end1, start2, end2, ...]
*/
public MapList(int from[], int to[], int fromRatio, int toRatio)
{
+ this();
this.fromRatio = fromRatio;
this.toRatio = toRatio;
- fromLowest = from[0];
- fromHighest = from[1];
+ fromLowest = Integer.MAX_VALUE;
+ fromHighest = Integer.MIN_VALUE;
+ int added = 0;
+
for (int i = 0; i < from.length; i += 2)
{
- fromLowest = Math.min(fromLowest, from[i]);
- fromHighest = Math.max(fromHighest, from[i + 1]);
-
- fromShifts.add(new int[] { from[i], from[i + 1] });
+ /*
+ * note lowest and highest values - bearing in mind the
+ * direction may be revesed
+ */
+ fromLowest = Math.min(fromLowest, Math.min(from[i], from[i + 1]));
+ fromHighest = Math.max(fromHighest, Math.max(from[i], from[i + 1]));
+ if (added > 0 && from[i] == fromShifts.get(added - 1)[1])
+ {
+ /*
+ * this range starts where the last ended - just extend it
+ */
+ fromShifts.get(added - 1)[1] = from[i + 1];
+ }
+ else
+ {
+ fromShifts.add(new int[] { from[i], from[i + 1] });
+ added++;
+ }
}
- toLowest = to[0];
- toHighest = to[1];
+ toLowest = Integer.MAX_VALUE;
+ toHighest = Integer.MIN_VALUE;
+ added = 0;
for (int i = 0; i < to.length; i += 2)
{
- toLowest = Math.min(toLowest, to[i]);
- toHighest = Math.max(toHighest, to[i + 1]);
- toShifts.add(new int[] { to[i], to[i + 1] });
+ toLowest = Math.min(toLowest, Math.min(to[i], to[i + 1]));
+ toHighest = Math.max(toHighest, Math.max(to[i], to[i + 1]));
+ if (added > 0 && to[i] == toShifts.get(added - 1)[1])
+ {
+ toShifts.get(added - 1)[1] = to[i + 1];
+ }
+ else
+ {
+ toShifts.add(new int[] { to[i], to[i + 1] });
+ added++;
+ }
}
}
*/
public MapList(MapList map)
{
+ this();
// TODO not used - remove?
this.fromLowest = map.fromLowest;
this.fromHighest = map.fromHighest;
}
/**
- * Constructor given ranges as lists of [start, end] positions
+ * Constructor given ranges as lists of [start, end] positions. There is no
+ * validation check that the ranges do not overlap each other.
*
* @param fromRange
* @param toRange
public MapList(List<int[]> fromRange, List<int[]> toRange, int fromRatio,
int toRatio)
{
+ this();
+ fromRange = coalesceRanges(fromRange);
+ toRange = coalesceRanges(toRange);
this.fromShifts = fromRange;
this.toShifts = toRange;
this.fromRatio = fromRatio;
this.toRatio = toRatio;
fromLowest = Integer.MAX_VALUE;
- fromHighest = 0;
+ fromHighest = Integer.MIN_VALUE;
for (int[] range : fromRange)
{
- fromLowest = Math.min(fromLowest, range[0]);
- fromHighest = Math.max(fromHighest, range[1]);
+ fromLowest = Math.min(fromLowest, Math.min(range[0], range[1]));
+ fromHighest = Math.max(fromHighest, Math.max(range[0], range[1]));
}
toLowest = Integer.MAX_VALUE;
- toHighest = 0;
+ toHighest = Integer.MIN_VALUE;
for (int[] range : toRange)
{
- toLowest = Math.min(toLowest, range[0]);
- toHighest = Math.max(toHighest, range[1]);
+ toLowest = Math.min(toLowest, Math.min(range[0], range[1]));
+ toHighest = Math.max(toHighest, Math.max(range[0], range[1]));
+ }
+ }
+
+ /**
+ * Consolidates a list of ranges so that any contiguous ranges are merged.
+ * This assumes the ranges are already in start order (does not sort them).
+ *
+ * @param ranges
+ * @return the same list (if unchanged), else a new merged list, leaving the
+ * input list unchanged
+ */
+ public static List<int[]> coalesceRanges(final List<int[]> ranges)
+ {
+ if (ranges == null || ranges.size() < 2) {
+ return ranges;
+ }
+
+ boolean changed = false;
+ List<int[]> merged = new ArrayList<int[]>();
+ int[] lastRange = ranges.get(0);
+ int lastDirection = lastRange[1] >= lastRange[0] ? 1 : -1;
+ lastRange = new int[] { lastRange[0], lastRange[1] };
+ merged.add(lastRange);
+ boolean first = true;
+
+ for (final int[] range : ranges)
+ {
+ if (first)
+ {
+ first = false;
+ continue;
+ }
+ if (range[0] == lastRange[0] && range[1] == lastRange[1])
+ {
+ // drop duplicate range
+ changed = true;
+ continue;
+ }
+
+ /*
+ * drop this range if it lies within the last range
+ */
+ if ((lastDirection == 1 && range[0] >= lastRange[0]
+ && range[0] <= lastRange[1] && range[1] >= lastRange[0] && range[1] <= lastRange[1])
+ || (lastDirection == -1 && range[0] <= lastRange[0]
+ && range[0] >= lastRange[1]
+ && range[1] <= lastRange[0] && range[1] >= lastRange[1]))
+ {
+ changed = true;
+ continue;
+ }
+
+ int direction = range[1] >= range[0] ? 1 : -1;
+
+ /*
+ * if next range is in the same direction as last and contiguous,
+ * just update the end position of the last range
+ */
+ boolean sameDirection = range[1] == range[0] || direction == lastDirection;
+ boolean extending = range[0] == lastRange[1] + lastDirection;
+ boolean overlapping = (lastDirection == 1 && range[0] >= lastRange[0] && range[0] <= lastRange[1])
+ || (lastDirection == -1 && range[0] <= lastRange[0] && range[0] >= lastRange[1]);
+ if (sameDirection && (overlapping || extending))
+ {
+ lastRange[1] = range[1];
+ changed = true;
+ }
+ else
+ {
+ lastRange = new int[] { range[0], range[1] };
+ merged.add(lastRange);
+ // careful: merging [5, 5] after [7, 6] should keep negative direction
+ lastDirection = (range[1] == range[0]) ? lastDirection : direction;
+ }
}
+
+ return changed ? merged : ranges;
}
/**
public String toString()
{
StringBuilder sb = new StringBuilder(64);
- sb.append("From (").append(fromRatio).append(":").append(toRatio)
- .append(") [");
+ sb.append("[");
for (int[] shift : fromShifts)
{
sb.append(" ").append(Arrays.toString(shift));
}
- sb.append(" ] To [");
+ sb.append(" ] ");
+ sb.append(fromRatio).append(":").append(toRatio);
+ sb.append(" to [");
for (int[] shift : toShifts)
{
sb.append(" ").append(Arrays.toString(shift));
sb.append(" ]");
return sb.toString();
}
+
+ /**
+ * Extend this map list by adding the given map's ranges. There is no
+ * validation check that the ranges do not overlap existing ranges (or each
+ * other), but contiguous ranges are merged.
+ *
+ * @param map
+ */
+ public void addMapList(MapList map)
+ {
+ this.fromLowest = Math.min(fromLowest, map.fromLowest);
+ this.toLowest = Math.min(toLowest, map.toLowest);
+ this.fromHighest = Math.max(fromHighest, map.fromHighest);
+ this.toHighest = Math.max(toHighest, map.toHighest);
+
+ for (int[] range : map.getFromRanges())
+ {
+ addRange(range, fromShifts);
+ }
+ for (int[] range : map.getToRanges())
+ {
+ addRange(range, toShifts);
+ }
+ }
+
+ /**
+ * Adds the given range to a list of ranges. If the new range just extends
+ * existing ranges, the current endpoint is updated instead.
+ *
+ * @param range
+ * @param addTo
+ */
+ static void addRange(int[] range, List<int[]> addTo)
+ {
+ /*
+ * list is empty - add to it!
+ */
+ if (addTo.size() == 0)
+ {
+ addTo.add(range);
+ return;
+ }
+
+ int[] last = addTo.get(addTo.size() - 1);
+ boolean lastForward = last[1] >= last[0];
+ boolean newForward = range[1] >= range[0];
+
+ /*
+ * contiguous range in the same direction - just update endpoint
+ */
+ if (lastForward == newForward && last[1] == range[0])
+ {
+ last[1] = range[1];
+ return;
+ }
+
+ /*
+ * next range starts at +1 in forward sense - update endpoint
+ */
+ if (lastForward && newForward && range[0] == last[1] + 1)
+ {
+ last[1] = range[1];
+ return;
+ }
+
+ /*
+ * next range starts at -1 in reverse sense - update endpoint
+ */
+ if (!lastForward && !newForward && range[0] == last[1] - 1)
+ {
+ last[1] = range[1];
+ return;
+ }
+
+ /*
+ * just add the new range
+ */
+ addTo.add(range);
+ }
+
+ /**
+ * Returns true if mapping is from forward strand, false if from reverse
+ * strand. Result is just based on the first 'from' range that is not a single
+ * position. Default is true unless proven to be false. Behaviour is not well
+ * defined if the mapping has a mixture of forward and reverse ranges.
+ *
+ * @return
+ */
+ public boolean isFromForwardStrand()
+ {
+ boolean forwardStrand = true;
+ for (int[] range : getFromRanges())
+ {
+ if (range[1] > range[0])
+ {
+ break; // forward strand confirmed
+ }
+ else if (range[1] < range[0])
+ {
+ forwardStrand = false;
+ break; // reverse strand confirmed
+ }
+ }
+ return forwardStrand;
+ }
}
import jalview.datamodel.SequenceI;
import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
/**
* Helper methods for manipulations involving sequence mappings.
*/
protected static void mapCutOrPaste(Edit edit, boolean undo,
List<SequenceI> targetSeqs, EditCommand result,
- Set<AlignedCodonFrame> mappings)
+ List<AlignedCodonFrame> mappings)
{
Action action = edit.getAction();
if (undo)
*/
public static EditCommand mapEditCommand(EditCommand command,
boolean undo, final AlignmentI mapTo, char gapChar,
- Set<AlignedCodonFrame> mappings)
+ List<AlignedCodonFrame> mappings)
{
/*
* For now, only support mapping from protein edits to cDna
Map<SequenceI, SequenceI> originalSequences,
final List<SequenceI> targetSeqs,
Map<SequenceI, SequenceI> targetCopies, char gapChar,
- EditCommand result, Set<AlignedCodonFrame> mappings)
+ EditCommand result, List<AlignedCodonFrame> mappings)
{
Action action = edit.getAction();
* @return
*/
public static SearchResults buildSearchResults(SequenceI seq, int index,
- Set<AlignedCodonFrame> seqmappings)
+ List<AlignedCodonFrame> seqmappings)
{
SearchResults results = new SearchResults();
addSearchResults(results, seq, index, seqmappings);
* @param seqmappings
*/
public static void addSearchResults(SearchResults results, SequenceI seq,
- int index, Set<AlignedCodonFrame> seqmappings)
+ int index, List<AlignedCodonFrame> seqmappings)
{
if (index >= seq.getStart() && index <= seq.getEnd())
{
*/
boolean targetIsNucleotide = mapTo.isNucleotide();
AlignViewportI protein = targetIsNucleotide ? mapFrom : mapTo;
- Set<AlignedCodonFrame> codonFrames = protein.getAlignment()
+ List<AlignedCodonFrame> codonFrames = protein.getAlignment()
.getCodonFrames();
/*
* Copy group name, colours etc, but not sequences or sequence colour scheme
/*
* Found a sequence mapping. Locate the start/end mapped residues.
*/
+ List<AlignedCodonFrame> mapping = Arrays.asList(new AlignedCodonFrame[] { acf });
SearchResults sr = buildSearchResults(selected,
- startResiduePos, Collections.singleton(acf));
+ startResiduePos, mapping);
for (Match m : sr.getResults())
{
mappedStartResidue = m.getStart();
mappedEndResidue = m.getEnd();
}
- sr = buildSearchResults(selected, endResiduePos,
- Collections.singleton(acf));
+ sr = buildSearchResults(selected, endResiduePos, mapping);
for (Match m : sr.getResults())
{
mappedStartResidue = Math.min(mappedStartResidue,
* @return
*/
public static CommandI mapOrderCommand(OrderCommand command,
- boolean undo, AlignmentI mapTo, Set<AlignedCodonFrame> mappings)
+ boolean undo, AlignmentI mapTo, List<AlignedCodonFrame> mappings)
{
SequenceI[] sortOrder = command.getSequenceOrder(undo);
List<SequenceI> mappedOrder = new ArrayList<SequenceI>();
{
boolean targetIsNucleotide = mapTo.isNucleotide();
AlignViewportI protein = targetIsNucleotide ? mapFrom : mapTo;
- Set<AlignedCodonFrame> codonFrames = protein.getAlignment()
+ List<AlignedCodonFrame> codonFrames = protein.getAlignment()
.getCodonFrames();
ColumnSelection mappedColumns = new ColumnSelection();
char fromGapChar = mapFrom.getAlignment().getGapCharacter();
- // FIXME allow for hidden columns
-
/*
* For each mapped column, find the range of columns that residues in that
* column map to.
* @param fromGapChar
*/
protected static void mapHiddenColumns(int[] hidden,
- Set<AlignedCodonFrame> mappings,
+ List<AlignedCodonFrame> mappings,
ColumnSelection mappedColumns, List<SequenceI> fromSequences,
List<SequenceI> toSequences, char fromGapChar)
{
* @param toSequences
* @param fromGapChar
*/
- protected static void mapColumn(int col, Set<AlignedCodonFrame> mappings,
+ protected static void mapColumn(int col,
+ List<AlignedCodonFrame> mappings,
ColumnSelection mappedColumns, List<SequenceI> fromSequences,
List<SequenceI> toSequences, char fromGapChar)
{
* @return
*/
protected static int[] findMappedColumns(int col,
- Set<AlignedCodonFrame> mappings, List<SequenceI> fromSequences,
+ List<AlignedCodonFrame> mappings, List<SequenceI> fromSequences,
List<SequenceI> toSequences, char fromGapChar)
{
int[] mappedTo = new int[] { Integer.MAX_VALUE, Integer.MIN_VALUE };
}
/**
- * Returns the mapped codon for a given aligned sequence column position (base
- * 0).
+ * Returns the mapped codon or codons for a given aligned sequence column
+ * position (base 0).
*
* @param seq
* an aligned peptide sequence
* an aligned column position (base 0)
* @param mappings
* a set of codon mappings
- * @return the bases of the mapped codon in the cDNA dataset sequence, or null
- * if not found
+ * @return the bases of the mapped codon(s) in the cDNA dataset sequence(s),
+ * or an empty list if none found
*/
- public static char[] findCodonFor(SequenceI seq, int col,
- Set<AlignedCodonFrame> mappings)
+ public static List<char[]> findCodonsFor(SequenceI seq, int col,
+ List<AlignedCodonFrame> mappings)
{
+ List<char[]> result = new ArrayList<char[]>();
int dsPos = seq.findPosition(col);
for (AlignedCodonFrame mapping : mappings)
{
if (mapping.involvesSequence(seq))
{
- return mapping.getMappedCodon(seq.getDatasetSequence(), dsPos);
+ List<char[]> codons = mapping.getMappedCodons(
+ seq.getDatasetSequence(), dsPos);
+ if (codons != null)
+ {
+ result.addAll(codons);
+ }
}
}
- return null;
+ return result;
}
/**
- * Converts a series of [start, end] ranges into an array of individual
- * positions.
+ * Converts a series of [start, end] range pairs into an array of individual
+ * positions. This also caters for 'reverse strand' (start > end) cases.
*
* @param ranges
* @return
int count = 0;
for (int i = 0; i < ranges.length - 1; i += 2)
{
- count += ranges[i + 1] - ranges[i] + 1;
+ count += Math.abs(ranges[i + 1] - ranges[i]) + 1;
}
int[] result = new int[count];
int k = 0;
for (int i = 0; i < ranges.length - 1; i += 2)
{
- for (int j = ranges[i]; j <= ranges[i + 1]; j++)
+ int from = ranges[i];
+ final int to = ranges[i + 1];
+ int step = from <= to ? 1 : -1;
+ do
{
- result[k++] = j;
- }
+ result[k++] = from;
+ from += step;
+ } while (from != to + step);
}
return result;
}
* @return
*/
public static List<AlignedCodonFrame> findMappingsForSequence(
- SequenceI sequence, Set<AlignedCodonFrame> mappings)
+ SequenceI sequence, List<AlignedCodonFrame> mappings)
{
List<AlignedCodonFrame> result = new ArrayList<AlignedCodonFrame>();
if (sequence == null || mappings == null)
}
return result;
}
+
+ /**
+ * Returns the total length of the supplied ranges, which may be as single
+ * [start, end] or multiple [start, end, start, end ...]
+ *
+ * @param ranges
+ * @return
+ */
+ public static int getLength(List<int[]> ranges)
+ {
+ if (ranges == null)
+ {
+ return 0;
+ }
+ int length = 0;
+ for (int[] range : ranges)
+ {
+ if (range.length % 2 != 0)
+ {
+ System.err.println("Error unbalance start/end ranges: "
+ + ranges.toString());
+ return 0;
+ }
+ for (int i = 0; i < range.length - 1; i += 2)
+ {
+ length += Math.abs(range[i + 1] - range[i]) + 1;
+ }
+ }
+ return length;
+ }
+
+ /**
+ * Answers true if any range includes the given value
+ *
+ * @param ranges
+ * @param value
+ * @return
+ */
+ public static boolean contains(List<int[]> ranges, int value)
+ {
+ if (ranges == null)
+ {
+ return false;
+ }
+ for (int[] range : ranges)
+ {
+ if (range[1] >= range[0] && value >= range[0] && value <= range[1])
+ {
+ /*
+ * value within ascending range
+ */
+ return true;
+ }
+ if (range[1] < range[0] && value <= range[0] && value >= range[1])
+ {
+ /*
+ * value within descending range
+ */
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Removes a specified number of positions from the start of a ranges list.
+ * For example, could be used to adjust cds ranges to allow for an incomplete
+ * start codon. Subranges are removed completely, or their start positions
+ * adjusted, until the required number of positions has been removed from the
+ * range. Reverse strand ranges are supported. The input array is not
+ * modified.
+ *
+ * @param removeCount
+ * @param ranges
+ * an array of [start, end, start, end...] positions
+ * @return a new array with the first removeCount positions removed
+ */
+ public static int[] removeStartPositions(int removeCount,
+ final int[] ranges)
+ {
+ if (removeCount <= 0)
+ {
+ return ranges;
+ }
+
+ int[] copy = Arrays.copyOf(ranges, ranges.length);
+ int sxpos = -1;
+ int cdspos = 0;
+ for (int x = 0; x < copy.length && sxpos == -1; x += 2)
+ {
+ cdspos += Math.abs(copy[x + 1] - copy[x]) + 1;
+ if (removeCount < cdspos)
+ {
+ /*
+ * we have removed enough, time to finish
+ */
+ sxpos = x;
+
+ /*
+ * increment start of first exon, or decrement if reverse strand
+ */
+ if (copy[x] <= copy[x + 1])
+ {
+ copy[x] = copy[x + 1] - cdspos + removeCount + 1;
+ }
+ else
+ {
+ copy[x] = copy[x + 1] + cdspos - removeCount - 1;
+ }
+ break;
+ }
+ }
+
+ if (sxpos > 0)
+ {
+ /*
+ * we dropped at least one entire sub-range - compact the array
+ */
+ int[] nxon = new int[copy.length - sxpos];
+ System.arraycopy(copy, sxpos, nxon, 0, copy.length - sxpos);
+ return nxon;
+ }
+ return copy;
+ }
}
}
return "" + separator;
}
+
+ /**
+ * Converts a list to a string with a delimiter before each term except the
+ * first. Returns an empty string given a null or zero-length argument. This
+ * can be replaced with StringJoiner in Java 8.
+ *
+ * @param terms
+ * @param delim
+ * @return
+ */
+ public static String listToDelimitedString(List<String> terms,
+ String delim)
+ {
+ StringBuilder sb = new StringBuilder(32);
+ if (terms != null && !terms.isEmpty())
+ {
+ boolean appended = false;
+ for (String term : terms)
+ {
+ if (appended)
+ {
+ sb.append(delim);
+ }
+ appended = true;
+ sb.append(term);
+ }
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Convenience method to parse a string to an integer, returning 0 if the
+ * input is null or not a valid integer
+ *
+ * @param s
+ * @return
+ */
+ public static int parseInt(String s)
+ {
+ int result = 0;
+ if (s != null && s.length() > 0)
+ {
+ try
+ {
+ result = Integer.parseInt(s);
+ } catch (NumberFormatException ex)
+ {
+ }
+ }
+ return result;
+ }
}
import jalview.structure.StructureSelectionManager;
import jalview.structure.VamsasSource;
import jalview.util.Comparison;
+import jalview.util.MapList;
import jalview.util.MappingUtils;
import jalview.viewmodel.styles.ViewStyle;
import jalview.workers.AlignCalcManager;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
-import java.util.Set;
/**
* base class holding visualization and analysis attributes and common logic for
/*
* A separate thread to compute cDNA consensus for a protein alignment
+ * which has mapping to cDNA
*/
final AlignmentI al = this.getAlignment();
if (!al.isNucleotide() && al.getCodonFrames() != null
&& !al.getCodonFrames().isEmpty())
{
- if (calculator
- .getRegisteredWorkersOfClass(ComplementConsensusThread.class) == null)
+ /*
+ * fudge - check first mapping is protein-to-nucleotide
+ * (we don't want to do this for protein-to-protein)
+ */
+ AlignedCodonFrame mapping = al.getCodonFrames().iterator().next();
+ // TODO hold mapping type e.g. dna-to-protein in AlignedCodonFrame?
+ MapList[] mapLists = mapping.getdnaToProt();
+ // mapLists can be empty if project load has not finished resolving seqs
+ if (mapLists.length > 0 && mapLists[0].getFromRatio() == 3)
{
- calculator.registerWorker(new ComplementConsensusThread(this, ap));
+ if (calculator
+ .getRegisteredWorkersOfClass(ComplementConsensusThread.class) == null)
+ {
+ calculator
+ .registerWorker(new ComplementConsensusThread(this, ap));
+ }
}
}
}
if (hiddenRepSequences == null)
{
- hiddenRepSequences = new Hashtable();
+ hiddenRepSequences = new Hashtable<SequenceI, SequenceCollectionI>();
}
hiddenRepSequences.put(repSequence, sg);
}
+ /**
+ *
+ * @return null or the current reference sequence
+ */
+ public SequenceI getReferenceSeq()
+ {
+ return alignment.getSeqrep();
+ }
+
+ /**
+ * @param seq
+ * @return true iff seq is the reference for the alignment
+ */
+ public boolean isReferenceSeq(SequenceI seq)
+ {
+ return alignment.getSeqrep() == seq;
+ }
+
+ /**
+ *
+ * @param seq
+ * @return true if there are sequences represented by this sequence that are
+ * currently hidden
+ */
public boolean isHiddenRepSequence(SequenceI seq)
{
- return alignment.getSeqrep() == seq
- || (hiddenRepSequences != null && hiddenRepSequences
+ return (hiddenRepSequences != null && hiddenRepSequences
.containsKey(seq));
}
+ /**
+ *
+ * @param seq
+ * @return null or a sequence group containing the sequences that seq
+ * represents
+ */
public SequenceGroup getRepresentedSequences(SequenceI seq)
{
return (SequenceGroup) (hiddenRepSequences == null ? null
}
else
{
- iSize = alignment.getHeight();
- seqs = alignment.getSequencesArray();
- end = alignment.getWidth();
+ if (hasHiddenRows())
+ {
+ iSize = alignment.getHiddenSequences().getFullAlignment()
+ .getHeight();
+ seqs = alignment.getHiddenSequences().getFullAlignment()
+ .getSequencesArray();
+ end = alignment.getHiddenSequences().getFullAlignment().getWidth();
+ }
+ else
+ {
+ iSize = alignment.getHeight();
+ seqs = alignment.getSequencesArray();
+ end = alignment.getWidth();
+ }
}
selection = new String[iSize];
{
if (!alignment.isNucleotide())
{
- final Set<AlignedCodonFrame> codonMappings = alignment
+ final List<AlignedCodonFrame> codonMappings = alignment
.getCodonFrames();
if (codonMappings != null && !codonMappings.isEmpty())
{
- complementConsensus = new AlignmentAnnotation("cDNA Consensus",
- "PID for cDNA", new Annotation[1], 0f, 100f,
- AlignmentAnnotation.BAR_GRAPH);
- initConsensus(complementConsensus);
+ // fudge: check mappings are not protein-to-protein
+ // TODO: nicer
+ AlignedCodonFrame mapping = codonMappings.iterator().next();
+ MapList[] mapLists = mapping.getdnaToProt();
+ // mapLists can be empty if project load has not finished resolving seqs
+ if (mapLists.length > 0 && mapLists[0].getFromRatio() == 3)
+ {
+ complementConsensus = new AlignmentAnnotation("cDNA Consensus",
+ "PID for cDNA", new Annotation[1], 0f, 100f,
+ AlignmentAnnotation.BAR_GRAPH);
+ initConsensus(complementConsensus);
+ }
}
}
}
public boolean areFeaturesDisplayed()
{
return featuresDisplayed != null
- && featuresDisplayed.getRegisterdFeaturesCount() > 0;
+ && featuresDisplayed.getRegisteredFeaturesCount() > 0;
}
/**
{
return 0;
}
- final Set<AlignedCodonFrame> mappings = proteinAlignment
+ final List<AlignedCodonFrame> mappings = proteinAlignment
.getCodonFrames();
/*
sequence.findPosition(middleColumn), mappings);
return seqOffset;
}
+
+ /**
+ * synthesize a column selection if none exists so it covers the given
+ * selection group. if wholewidth is false, no column selection is made if the
+ * selection group covers the whole alignment width.
+ *
+ * @param sg
+ * @param wholewidth
+ */
+ public void expandColSelection(SequenceGroup sg, boolean wholewidth)
+ {
+ int sgs, sge;
+ if (sg != null
+ && (sgs = sg.getStartRes()) >= 0
+ && sg.getStartRes() <= (sge = sg.getEndRes())
+ && (colSel == null || colSel.getSelected() == null || colSel
+ .getSelected().size() == 0))
+ {
+ if (!wholewidth && alignment.getWidth() == (1 + sge - sgs))
+ {
+ // do nothing
+ return;
+ }
+ if (colSel == null)
+ {
+ colSel = new ColumnSelection();
+ }
+ for (int cspos = sg.getStartRes(); cspos <= sg.getEndRes(); cspos++)
+ {
+ colSel.addElement(cspos);
+ }
+ }
+ }
}
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
@Override
public void setColour(String featureType, FeatureColourI col)
{
- {
- featureColours.put(featureType, col);
- }
+ featureColours.put(featureType, col);
}
public void setTransparency(float value)
*
* @param data
* { String(Type), Colour(Type), Boolean(Displayed) }
+ * @return true if any visible features have been reordered, else false
*/
- public void setFeaturePriority(Object[][] data)
+ public boolean setFeaturePriority(Object[][] data)
{
- setFeaturePriority(data, true);
+ return setFeaturePriority(data, true);
}
/**
+ * Sets the priority order for features
*
* @param data
* { String(Type), Colour(Type), Boolean(Displayed) }
* @param visibleNew
* when true current featureDisplay list will be cleared
+ * @return true if any visible features have been reordered or recoloured,
+ * else false (i.e. no need to repaint)
*/
- public void setFeaturePriority(Object[][] data, boolean visibleNew)
+ public boolean setFeaturePriority(Object[][] data, boolean visibleNew)
{
+ /*
+ * note visible feature ordering and colours before update
+ */
+ List<String> visibleFeatures = getDisplayedFeatureTypes();
+ Map<String, FeatureColourI> visibleColours = new HashMap<String, FeatureColourI>(
+ getFeatureColours());
+
FeaturesDisplayedI av_featuresdisplayed = null;
if (visibleNew)
{
}
if (data == null)
{
- return;
+ return false;
}
// The feature table will display high priority
- // features at the top, but theses are the ones
+ // features at the top, but these are the ones
// we need to render last, so invert the data
renderOrder = new String[data.length];
}
}
+ /*
+ * get the new visible ordering and return true if it has changed
+ * order or any colour has changed
+ */
+ List<String> reorderedVisibleFeatures = getDisplayedFeatureTypes();
+ if (!visibleFeatures.equals(reorderedVisibleFeatures))
+ {
+ /*
+ * the list of ordered visible features has changed
+ */
+ return true;
+ }
+
+ /*
+ * return true if any feature colour has changed
+ */
+ for (String feature : visibleFeatures)
+ {
+ if (visibleColours.get(feature) != getFeatureStyle(feature))
+ {
+ return true;
+ }
+ }
+ return false;
}
/**
return renderOrder != null;
}
+ /**
+ * Returns feature types in ordering of rendering, where last means on top
+ */
public List<String> getRenderOrder()
{
if (renderOrder == null)
* @return list of groups
*/
@Override
- public List<String> getGroups(boolean visible)
+ public List getGroups(boolean visible)
{
if (featureGroups != null)
{
return av.getFeaturesDisplayed();
}
+ /**
+ * Returns a (possibly empty) list of visible feature types, in render order
+ * (last is on top)
+ */
@Override
- public String[] getDisplayedFeatureTypes()
+ public List<String> getDisplayedFeatureTypes()
{
- String[] typ = null;
- typ = getRenderOrder().toArray(new String[0]);
+ List<String> typ = getRenderOrder();
+ List<String> displayed = new ArrayList<String>();
FeaturesDisplayedI feature_disp = av.getFeaturesDisplayed();
if (feature_disp != null)
{
synchronized (feature_disp)
{
- for (int i = 0; i < typ.length; i++)
+ for (String type : typ)
{
- if (!feature_disp.isVisible(typ[i]))
+ if (feature_disp.isVisible(type))
{
- typ[i] = null;
+ displayed.add(type);
}
}
}
}
- return typ;
+ return displayed;
}
@Override
- public String[] getDisplayedFeatureGroups()
+ public List<String> getDisplayedFeatureGroups()
{
- String[] gps = null;
- ArrayList<String> _gps = new ArrayList<String>();
- Iterator en = getFeatureGroups().iterator();
- int g = 0;
+ List<String> _gps = new ArrayList<String>();
boolean valid = false;
- while (en.hasNext())
+ for (String gp : getFeatureGroups())
{
- String gp = (String) en.next();
if (checkGroupVisibility(gp, false))
{
valid = true;
}
else
{
- gps = new String[_gps.size()];
- _gps.toArray(gps);
+ // gps = new String[_gps.size()];
+ // _gps.toArray(gps);
}
}
- return gps;
+ return _gps;
}
}
}
@Override
- public boolean areVisible(Collection featureTypes)
+ public boolean areVisible(Collection<String> featureTypes)
{
return featuresDisplayed.containsAll(featureTypes);
}
}
@Override
- public void setAllVisible(Collection makeVisible)
+ public void setAllVisible(Collection<String> makeVisible)
{
featuresDisplayed.addAll(makeVisible);
featuresRegistered.addAll(makeVisible);
}
@Override
- public int getRegisterdFeaturesCount()
+ public int getRegisteredFeaturesCount()
{
return featuresRegistered.size();
}
protected AlignmentViewPanel ap;
- protected List<AlignmentAnnotation> ourAnnots = null;
+ protected List<AlignmentAnnotation> ourAnnots;
public AlignCalcWorker(AlignViewportI alignViewport,
AlignmentViewPanel alignPanel)
}
+ @Override
public boolean involves(AlignmentAnnotation i)
{
return ourAnnots != null && ourAnnots.contains(i);
}
/**
- * permanently remove from the alignment all annotation rows managed by this
+ * Permanently removes from the alignment all annotation rows managed by this
* worker
*/
@Override
- public void removeOurAnnotation()
+ public void removeAnnotation()
{
if (ourAnnots != null && alignViewport != null)
{
alignment.deleteAnnotation(aa, true);
}
}
+ ourAnnots.clear();
}
}
// TODO: allow GUI to query workers associated with annotation to add items to
--- /dev/null
+package jalview.workers;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.gui.AlignFrame;
+import jalview.gui.Desktop;
+
+import java.awt.Color;
+
+/**
+ * Factory class with methods which allow clients (including external scripts
+ * such as Groovy) to 'register and forget' an alignment annotation calculator. <br>
+ * Currently supports two flavours of calculator:
+ * <ul>
+ * <li>a 'feature counter' which can count any desired property derivable from
+ * residue value and any sequence features at each position of the alignment</li>
+ * <li>a 'general purpose' calculator which computes one more complete
+ * AlignmentAnnotation objects</li>
+ * </ul>
+ */
+public class AlignmentAnnotationFactory
+{
+ /**
+ * Constructs and registers a new alignment annotation worker
+ *
+ * @param counter
+ * provider of feature counts per alignment position
+ */
+ public static void newCalculator(FeatureCounterI counter)
+ {
+ if (Desktop.getCurrentAlignFrame() != null)
+ {
+ newCalculator(Desktop.getCurrentAlignFrame(), counter);
+ }
+ else
+ {
+ System.err
+ .println("Can't register calculator as no alignment window has focus");
+ }
+ }
+
+ /**
+ * Constructs and registers a new alignment annotation worker
+ *
+ * @param af
+ * the AlignFrame for which the annotation is to be calculated
+ * @param counter
+ * provider of feature counts per alignment position
+ */
+ public static void newCalculator(AlignFrame af, FeatureCounterI counter)
+ {
+ new ColumnCounterWorker(af, counter);
+ }
+
+ /**
+ * Constructs and registers a new alignment annotation worker
+ *
+ * @param calculator
+ * provider of AlignmentAnnotation for the alignment
+ */
+ public static void newCalculator(AnnotationProviderI calculator)
+ {
+ if (Desktop.getCurrentAlignFrame() != null)
+ {
+ newCalculator(Desktop.getCurrentAlignFrame(), calculator);
+ }
+ else
+ {
+ System.err
+ .println("Can't register calculator as no alignment window has focus");
+ }
+ }
+
+ /**
+ * Constructs and registers a new alignment annotation worker
+ *
+ * @param af
+ * the AlignFrame for which the annotation is to be calculated
+ * @param calculator
+ * provider of AlignmentAnnotation for the alignment
+ */
+ public static void newCalculator(AlignFrame af,
+ AnnotationProviderI calculator)
+ {
+ new AnnotationWorker(af, calculator);
+ }
+
+ /**
+ * Factory method to construct an Annotation object
+ *
+ * @param displayChar
+ * @param desc
+ * @param secondaryStructure
+ * @param val
+ * @param color
+ * @return
+ */
+ public static Annotation newAnnotation(String displayChar, String desc,
+ char secondaryStructure, float val, Color color)
+ {
+ return new Annotation(displayChar, desc, secondaryStructure, val, color);
+ }
+
+ /**
+ * Factory method to construct an AlignmentAnnotation object
+ *
+ * @param name
+ * @param desc
+ * @param anns
+ * @return
+ */
+ public static AlignmentAnnotation newAlignmentAnnotation(String name,
+ String desc, Annotation[] anns)
+ {
+ return new AlignmentAnnotation(name, desc, anns);
+ }
+}
--- /dev/null
+package jalview.workers;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.gui.FeatureRenderer;
+
+import java.util.List;
+
+/**
+ * Interface to be satisfied by any class which computes one or more alignment
+ * annotations
+ */
+public interface AnnotationProviderI
+{
+ List<AlignmentAnnotation> calculateAnnotation(AlignmentI al,
+ FeatureRenderer fr);
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.workers;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.gui.AlignFrame;
+import jalview.gui.AlignmentPanel;
+import jalview.gui.FeatureRenderer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A class to create and update one or more alignment annotations, given a
+ * 'calculator'.
+ *
+ */
+class AnnotationWorker extends AlignCalcWorker
+{
+ /*
+ * the provider of the annotation calculations
+ */
+ AnnotationProviderI counter;
+
+ /**
+ * Constructor
+ *
+ * @param af
+ * @param counter
+ */
+ public AnnotationWorker(AlignFrame af, AnnotationProviderI counter)
+ {
+ super(af.getViewport(), af.alignPanel);
+ ourAnnots = new ArrayList<AlignmentAnnotation>();
+ this.counter = counter;
+ calcMan.registerWorker(this);
+ }
+
+ @Override
+ public void run()
+ {
+ try
+ {
+ calcMan.notifyStart(this);
+
+ while (!calcMan.notifyWorking(this))
+ {
+ try
+ {
+ Thread.sleep(200);
+ } catch (InterruptedException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ if (alignViewport.isClosed())
+ {
+ abortAndDestroy();
+ return;
+ }
+
+ removeAnnotations();
+ AlignmentI alignment = alignViewport.getAlignment();
+ if (alignment != null)
+ {
+ try
+ {
+ List<AlignmentAnnotation> anns = counter.calculateAnnotation(
+ alignment, new FeatureRenderer((AlignmentPanel) ap));
+ for (AlignmentAnnotation ann : anns)
+ {
+ ann.showAllColLabels = true;
+ ann.graph = AlignmentAnnotation.BAR_GRAPH;
+ ourAnnots.add(ann);
+ alignment.addAnnotation(ann);
+ }
+ } catch (IndexOutOfBoundsException x)
+ {
+ // probable race condition. just finish and return without any fuss.
+ return;
+ }
+ }
+ } catch (OutOfMemoryError error)
+ {
+ ap.raiseOOMWarning("calculating annotations", error);
+ calcMan.workerCannotRun(this);
+ } finally
+ {
+ calcMan.workerComplete(this);
+ }
+
+ if (ap != null)
+ {
+ ap.adjustAnnotationHeight();
+ ap.paintAlignment(true);
+ }
+
+ }
+
+ /**
+ * Remove all our annotations before re-calculating them
+ */
+ void removeAnnotations()
+ {
+ for (AlignmentAnnotation ann : ourAnnots)
+ {
+ alignViewport.getAlignment().deleteAnnotation(ann);
+ }
+ ourAnnots.clear();
+ }
+
+ @Override
+ public void updateAnnotation()
+ {
+ // do nothing
+ }
+}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.workers;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+import jalview.gui.AlignmentPanel;
+import jalview.gui.FeatureRenderer;
+import jalview.util.ColorUtils;
+import jalview.util.Comparison;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A class to compute an alignment annotation with column counts of any
+ * properties of interest of positions in an alignment. <br>
+ * This is designed to be extensible, by supplying to the constructor an object
+ * that computes a count for each residue position, based on the residue value
+ * and any sequence features at that position.
+ *
+ */
+class ColumnCounterWorker extends AlignCalcWorker
+{
+ FeatureCounterI counter;
+
+ /**
+ * Constructor registers the annotation for the given alignment frame
+ *
+ * @param af
+ * @param counter
+ */
+ public ColumnCounterWorker(AlignFrame af, FeatureCounterI counter)
+ {
+ super(af.getViewport(), af.alignPanel);
+ ourAnnots = new ArrayList<AlignmentAnnotation>();
+ this.counter = counter;
+ calcMan.registerWorker(this);
+ }
+
+ /**
+ * method called under control of AlignCalcManager to recompute the annotation
+ * when the alignment changes
+ */
+ @Override
+ public void run()
+ {
+ try
+ {
+ calcMan.notifyStart(this);
+
+ while (!calcMan.notifyWorking(this))
+ {
+ try
+ {
+ Thread.sleep(200);
+ } catch (InterruptedException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ if (alignViewport.isClosed())
+ {
+ abortAndDestroy();
+ return;
+ }
+
+ removeAnnotation();
+ if (alignViewport.getAlignment() != null)
+ {
+ try
+ {
+ computeAnnotations();
+ } catch (IndexOutOfBoundsException x)
+ {
+ // probable race condition. just finish and return without any fuss.
+ return;
+ }
+ }
+ } catch (OutOfMemoryError error)
+ {
+ ap.raiseOOMWarning("calculating feature counts", error);
+ calcMan.workerCannotRun(this);
+ } finally
+ {
+ calcMan.workerComplete(this);
+ }
+
+ if (ap != null)
+ {
+ ap.adjustAnnotationHeight();
+ ap.paintAlignment(true);
+ }
+
+ }
+
+ /**
+ * Scan each column of the alignment to calculate a count by feature type. Set
+ * the count as the value of the alignment annotation for that feature type.
+ */
+ void computeAnnotations()
+ {
+ FeatureRenderer fr = new FeatureRenderer((AlignmentPanel) ap);
+ // TODO use the commented out code once JAL-2075 is fixed
+ // to get adequate performance on genomic length sequence
+ AlignmentI alignment = alignViewport.getAlignment();
+ // AlignmentView alignmentView = alignViewport.getAlignmentView(false);
+ // AlignmentI alignment = alignmentView.getVisibleAlignment(' ');
+
+ // int width = alignmentView.getWidth();
+ int width = alignment.getWidth();
+ int height = alignment.getHeight();
+ int[] counts = new int[width];
+ int max = 0;
+
+ for (int col = 0; col < width; col++)
+ {
+ int count = 0;
+ for (int row = 0; row < height; row++)
+ {
+ count += countFeaturesAt(alignment, col, row, fr);
+ }
+ counts[col] = count;
+ max = Math.max(count, max);
+ }
+
+ Annotation[] anns = new Annotation[width];
+ /*
+ * add non-zero counts as annotations
+ */
+ for (int i = 0; i < counts.length; i++)
+ {
+ int count = counts[i];
+ if (count > 0)
+ {
+ Color color = ColorUtils.getGraduatedColour(count, 0, Color.cyan,
+ max, Color.blue);
+ anns[i] = new Annotation(String.valueOf(count),
+ String.valueOf(count), '0', count, color);
+ }
+ }
+
+ /*
+ * construct the annotation, save it and add it to the displayed alignment
+ */
+ AlignmentAnnotation ann = new AlignmentAnnotation(counter.getName(),
+ counter.getDescription(), anns);
+ ann.showAllColLabels = true;
+ ann.graph = AlignmentAnnotation.BAR_GRAPH;
+ ourAnnots.add(ann);
+ alignViewport.getAlignment().addAnnotation(ann);
+ }
+
+ /**
+ * Returns a count of any feature types present at the specified position of
+ * the alignment
+ *
+ * @param alignment
+ * @param col
+ * @param row
+ * @param fr
+ */
+ int countFeaturesAt(AlignmentI alignment, int col, int row,
+ FeatureRenderer fr)
+ {
+ SequenceI seq = alignment.getSequenceAt(row);
+ if (seq == null)
+ {
+ return 0;
+ }
+ if (col >= seq.getLength())
+ {
+ return 0;// sequence doesn't extend this far
+ }
+ char res = seq.getCharAt(col);
+ if (Comparison.isGap(res))
+ {
+ return 0;
+ }
+ int pos = seq.findPosition(col);
+
+ /*
+ * compute a count for any displayed features at residue
+ */
+ // NB have to adjust pos if using AlignmentView.getVisibleAlignment
+ // see JAL-2075
+ List<SequenceFeature> features = fr.findFeaturesAtRes(seq, pos);
+ int count = this.counter.count(String.valueOf(res), features);
+ return count;
+ }
+
+ /**
+ * Method called when the user changes display options that may affect how the
+ * annotation is rendered, but do not change its values. Currently no such
+ * options affect user-defined annotation, so this method does nothing.
+ */
+ @Override
+ public void updateAnnotation()
+ {
+ // do nothing
+ }
+}
package jalview.workers;
import jalview.analysis.AAFrequency;
-import jalview.api.AlignCalcWorkerI;
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
import jalview.datamodel.AlignmentAnnotation;
import java.util.Hashtable;
-public class ConsensusThread extends AlignCalcWorker implements
- AlignCalcWorkerI
+public class ConsensusThread extends AlignCalcWorker
{
public ConsensusThread(AlignViewportI alignViewport,
AlignmentViewPanel alignPanel)
package jalview.workers;
import jalview.analysis.Conservation;
-import jalview.api.AlignCalcWorkerI;
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
import jalview.datamodel.AlignmentAnnotation;
import java.util.ArrayList;
import java.util.List;
-public class ConservationThread extends AlignCalcWorker implements
- AlignCalcWorkerI
+public class ConservationThread extends AlignCalcWorker
{
private int ConsPercGaps = 25; // JBPNote : This should be a configurable
--- /dev/null
+package jalview.workers;
+
+import jalview.datamodel.SequenceFeature;
+
+import java.util.List;
+
+/**
+ * An interface for a type that returns counts of any value of interest at a
+ * sequence position that can be determined from the sequence character and any
+ * features present at that position
+ *
+ */
+public interface FeatureCounterI
+{
+ /**
+ * Returns a count of some property of interest, for example
+ * <ul>
+ * <li>the number of variant features at the position</li>
+ * <li>the number of Cath features of status 'True Positive'</li>
+ * <li>1 if the residue is hydrophobic, else 0</li>
+ * <li>etc</li>
+ * </ul>
+ *
+ * @param residue
+ * the residue (or gap) at the position
+ * @param a
+ * list of any sequence features which include the position
+ */
+ int count(String residue, List<SequenceFeature> features);
+
+ /**
+ * Returns a name for the annotation that this is counting, for use as the
+ * displayed label
+ *
+ * @return
+ */
+ String getName();
+
+ /**
+ * Returns a description for the annotation, for display as a tooltip
+ *
+ * @return
+ */
+ String getDescription();
+
+ /**
+ * Returns the colour (as [red, green, blue] values in the range 0-255) to use
+ * for the minimum value on histogram bars. If this is different to
+ * getMaxColour(), then bars will have a graduated colour.
+ *
+ * @return
+ */
+ int[] getMinColour();
+
+ /**
+ * Returns the colour (as [red, green, blue] values in the range 0-255) to use
+ * for the maximum value on histogram bars. If this is the same as
+ * getMinColour(), then bars will have a single colour (not graduated).
+ *
+ * @return
+ */
+ int[] getMaxColour();
+}
package jalview.workers;
import jalview.analysis.StructureFrequency;
-import jalview.api.AlignCalcWorkerI;
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
import jalview.datamodel.AlignmentAnnotation;
import java.util.Hashtable;
-public class StrucConsensusThread extends AlignCalcWorker implements
- AlignCalcWorkerI
+public class StrucConsensusThread extends AlignCalcWorker
{
public StrucConsensusThread(AlignViewportI alignViewport,
AlignmentViewPanel alignPanel)
import jalview.viewmodel.seqfeatures.FeatureRendererSettings;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Set;
public abstract class AWSThread extends Thread
/**
* generic web service job/subjob poll loop
*/
+ @Override
public void run()
{
JobStateSummary jstate = null;
WsUrl = wsurl2;
if (alframe != null)
{
- Set<AlignedCodonFrame> cf = alframe.getViewport().getAlignment()
+ List<AlignedCodonFrame> cf = alframe.getViewport().getAlignment()
.getCodonFrames();
if (cf != null)
{
*/
public class DBRefFetcher implements Runnable
{
+ public interface FetchFinishedListenerI
+ {
+ void finished();
+ }
+
+ private List<FetchFinishedListenerI> listeners;
+
SequenceI[] dataset;
IProgressIndicator progressWindow;
*/
private boolean trimDsSeqs = true;
- public DBRefFetcher()
- {
- }
-
/**
* Creates a new DBRefFetcher object and fetches from the currently selected
* set of databases, if this is null then it fetches based on feature settings
IProgressIndicator progressIndicatorFrame,
DbSourceProxy[] sources, FeatureSettings featureSettings, boolean isNucleotide)
{
+ listeners = new ArrayList<FetchFinishedListenerI>();
this.progressWindow = progressIndicatorFrame;
alseqs = new SequenceI[seqs.length];
SequenceI[] ds = new SequenceI[seqs.length];
}
/**
+ * Add a listener to be notified when sequence fetching is complete
+ *
+ * @param l
+ */
+ public void addListener(FetchFinishedListenerI l)
+ {
+ listeners.add(l);
+ }
+
+ /**
* retrieve all the das sequence sources and add them to the list of db
* sources to retrieve from
*/
// TODO: introduce multithread multisource queries and logic to remove a
// query from other sources if any source for a database returns a
// record
- if (dbsource.getDbSourceProperties().containsKey(
- DBRefSource.MULTIACC))
- {
- maxqlen = ((Integer) dbsource.getDbSourceProperties().get(
- DBRefSource.MULTIACC)).intValue();
- }
- else
- {
- maxqlen = 1;
- }
+ maxqlen = dbsource.getMaximumQueryCount();
+
while (queries.size() > 0 || seqIndex < currSeqs.length)
{
if (queries.size() > 0)
progressWindow.setProgressBar(
MessageManager.getString("label.dbref_search_completed"),
startTime);
- // promptBeforeBlast();
-
}
+ for (FetchFinishedListenerI listener : listeners)
+ {
+ listener.finished();
+ }
running = false;
-
}
/**
*/
package jalview.ws;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.DBRefSource;
-import jalview.datamodel.SequenceI;
+import jalview.ext.ensembl.EnsemblGene;
+import jalview.ext.ensembl.EnsemblGenomes;
+import jalview.ws.dbsources.EmblCdsSource;
+import jalview.ws.dbsources.EmblSource;
+import jalview.ws.dbsources.Pdb;
+import jalview.ws.dbsources.PfamFull;
+import jalview.ws.dbsources.PfamSeed;
+import jalview.ws.dbsources.RfamFull;
+import jalview.ws.dbsources.RfamSeed;
+import jalview.ws.dbsources.Uniprot;
+import jalview.ws.dbsources.UniprotName;
import jalview.ws.dbsources.das.api.jalviewSourceI;
import jalview.ws.seqfetcher.ASequenceFetcher;
import jalview.ws.seqfetcher.DbSourceProxy;
import java.util.ArrayList;
-import java.util.Enumeration;
import java.util.List;
-import java.util.Vector;
/**
- * This is the the concrete implementation of the sequence retrieval interface
- * and abstract class in jalview.ws.seqfetcher. This implements the run-time
- * discovery of sequence database clients, and provides a hardwired main for
- * testing all registered handlers.
+ * This implements the run-time discovery of sequence database clients.
*
*/
public class SequenceFetcher extends ASequenceFetcher
public SequenceFetcher(boolean addDas)
{
- addDBRefSourceImpl(jalview.ws.dbsources.EmblSource.class);
- addDBRefSourceImpl(jalview.ws.dbsources.EmblCdsSouce.class);
- addDBRefSourceImpl(jalview.ws.dbsources.Uniprot.class);
- addDBRefSourceImpl(jalview.ws.dbsources.UnprotName.class);
- addDBRefSourceImpl(jalview.ws.dbsources.Pdb.class);
- addDBRefSourceImpl(jalview.ws.dbsources.PfamFull.class);
- addDBRefSourceImpl(jalview.ws.dbsources.PfamSeed.class);
- // ensures Seed alignment is 'default' for PFAM
- addDBRefSourceImpl(jalview.ws.dbsources.RfamFull.class);
- addDBRefSourceImpl(jalview.ws.dbsources.RfamSeed.class);
+ addDBRefSourceImpl(EnsemblGene.class);
+ addDBRefSourceImpl(EnsemblGenomes.class);
+ addDBRefSourceImpl(EmblSource.class);
+ addDBRefSourceImpl(EmblCdsSource.class);
+ addDBRefSourceImpl(Uniprot.class);
+ addDBRefSourceImpl(UniprotName.class);
+ addDBRefSourceImpl(Pdb.class);
+ addDBRefSourceImpl(PfamFull.class);
+ addDBRefSourceImpl(PfamSeed.class);
+ addDBRefSourceImpl(RfamSeed.class);
if (addDas)
{
registerDasSequenceSources();
{
// Skip the alignment databases for the moment - they're not useful for
// verifying a single sequence against its reference source
- if (dbs.isA(DBRefSource.ALIGNMENTDB))
+ if (dbs.isAlignmentSource())
{
skip = true;
}
}
/**
- * return plaintext databse list suitable for using in a GUI element
- */
- public String[] _getOrderedSupportedSources()
- {
- String[] srcs = this.getSupportedDb();
- ArrayList dassrc = new ArrayList(), nondas = new ArrayList();
- for (int i = 0; i < srcs.length; i++)
- {
- for (DbSourceProxy dbs : getSourceProxy(srcs[i]))
- {
- String nm = dbs.getDbName();
- if (getSourceProxy(srcs[i]) instanceof jalview.ws.dbsources.das.datamodel.DasSequenceSource)
- {
- if (nm.startsWith("das:"))
- {
- nm = nm.substring(4);
- }
- dassrc.add(new String[] { srcs[i], nm.toUpperCase() });
- }
- else
- {
- nondas.add(new String[] { srcs[i], nm.toUpperCase() });
- }
- }
- }
- Object[] sorted = nondas.toArray();
- String[] tosort = new String[sorted.length];
- nondas.clear();
- for (int j = 0; j < sorted.length; j++)
- {
- tosort[j] = ((String[]) sorted[j])[1];
- }
- jalview.util.QuickSort.sort(tosort, sorted);
- int i = 0;
- // construct array with all sources listed
- srcs = new String[sorted.length + dassrc.size()];
- for (int j = sorted.length - 1; j >= 0; j--, i++)
- {
- srcs[i] = ((String[]) sorted[j])[0];
- sorted[j] = null;
- }
-
- sorted = dassrc.toArray();
- tosort = new String[sorted.length];
- dassrc.clear();
- for (int j = 0; j < sorted.length; j++)
- {
- tosort[j] = ((String[]) sorted[j])[1];
- }
- jalview.util.QuickSort.sort(tosort, sorted);
- for (int j = sorted.length - 1; j >= 0; j--, i++)
- {
- srcs[i] = ((String[]) sorted[j])[0];
- sorted[j] = null;
- }
- return srcs;
- }
-
- /**
- * simple run method to test dbsources.
- *
- * @param argv
- */
- public static void main(String[] argv)
- {
- AlignmentI ds = null;
- Vector noProds = new Vector();
- String usage = "SequenceFetcher.main [-nodas] [<DBNAME> [<ACCNO>]]\n"
- + "With no arguments, all DbSources will be queried with their test Accession number.\n"
- + "With one argument, the argument will be resolved to one or more db sources and each will be queried with their test accession only.\n"
- + "If given two arguments, SequenceFetcher will try to find the DbFetcher corresponding to <DBNAME> and retrieve <ACCNO> from it.\n"
- + "The -nodas option will exclude DAS sources from the database fetchers Jalview will try to use.";
- boolean withDas = true;
- if (argv != null && argv.length > 0
- && argv[0].toLowerCase().startsWith("-nodas"))
- {
- withDas = false;
- String targs[] = new String[argv.length - 1];
- System.arraycopy(argv, 1, targs, 0, targs.length);
- argv = targs;
- }
- if (argv != null && argv.length > 0)
- {
- List<DbSourceProxy> sps = new SequenceFetcher(withDas)
- .getSourceProxy(argv[0]);
-
- if (sps != null)
- {
- for (DbSourceProxy sp : sps)
- {
- AlignmentI al = null;
- try
- {
- al = sp.getSequenceRecords(argv.length > 1 ? argv[1] : sp
- .getTestQuery());
- } catch (Exception e)
- {
- e.printStackTrace();
- System.err.println("Error when retrieving "
- + (argv.length > 1 ? argv[1] : sp.getTestQuery())
- + " from " + argv[0] + "\nUsage: " + usage);
- }
- SequenceI[] prod = al.getSequencesArray();
- if (al != null)
- {
- for (int p = 0; p < prod.length; p++)
- {
- System.out.println("Prod " + p + ": "
- + prod[p].getDisplayId(true) + " : "
- + prod[p].getDescription());
- }
- }
- }
- return;
- }
- else
- {
- System.err.println("Can't resolve " + argv[0]
- + " as a database name. Allowed values are :\n"
- + new SequenceFetcher().getSupportedDb());
- }
- System.out.println(usage);
- return;
- }
- ASequenceFetcher sfetcher = new SequenceFetcher(withDas);
- String[] dbSources = sfetcher.getSupportedDb();
- for (int dbsource = 0; dbsource < dbSources.length; dbsource++)
- {
- String db = dbSources[dbsource];
- // skip me
- if (db.equals(DBRefSource.PDB))
- {
- continue;
- }
- for (DbSourceProxy sp : sfetcher.getSourceProxy(db))
- {
- System.out.println("Source: " + sp.getDbName() + " (" + db
- + "): retrieving test:" + sp.getTestQuery());
- AlignmentI al = null;
- try
- {
- al = sp.getSequenceRecords(sp.getTestQuery());
- if (al != null && al.getHeight() > 0
- && sp.getDbSourceProperties() != null)
- {
- boolean dna = sp.getDbSourceProperties().containsKey(
- DBRefSource.DNACODINGSEQDB)
- || sp.getDbSourceProperties().containsKey(
- DBRefSource.DNASEQDB)
- || sp.getDbSourceProperties().containsKey(
- DBRefSource.CODINGSEQDB);
- // try and find products
- String types[] = jalview.analysis.CrossRef
- .findSequenceXrefTypes(dna, al.getSequencesArray());
- if (types != null)
- {
- System.out.println("Xref Types for: "
- + (dna ? "dna" : "prot"));
- for (int t = 0; t < types.length; t++)
- {
- System.out.println("Type: " + types[t]);
- SequenceI[] prod = jalview.analysis.CrossRef
- .findXrefSequences(al.getSequencesArray(), dna,
- types[t]).getSequencesArray();
- System.out.println("Found "
- + ((prod == null) ? "no" : "" + prod.length)
- + " products");
- if (prod != null)
- {
- for (int p = 0; p < prod.length; p++)
- {
- System.out.println("Prod " + p + ": "
- + prod[p].getDisplayId(true));
- }
- }
- }
- }
- else
- {
- noProds.addElement((dna ? new Object[] { al, al }
- : new Object[] { al }));
- }
-
- }
- } catch (Exception ex)
- {
- System.out.println("ERROR:Failed to retrieve test query.");
- ex.printStackTrace(System.out);
- }
-
- if (al == null)
- {
- System.out.println("ERROR:No alignment retrieved.");
- StringBuffer raw = sp.getRawRecords();
- if (raw != null)
- {
- System.out.println(raw.toString());
- }
- else
- {
- System.out.println("ERROR:No Raw results.");
- }
- }
- else
- {
- System.out.println("Retrieved " + al.getHeight() + " sequences.");
- for (int s = 0; s < al.getHeight(); s++)
- {
- SequenceI sq = al.getSequenceAt(s);
- while (sq.getDatasetSequence() != null)
- {
- sq = sq.getDatasetSequence();
-
- }
- if (ds == null)
- {
- ds = new Alignment(new SequenceI[] { sq });
-
- }
- else
- {
- ds.addSequence(sq);
- }
- }
- }
- System.out.flush();
- System.err.flush();
-
- }
- if (noProds.size() > 0)
- {
- Enumeration ts = noProds.elements();
- while (ts.hasMoreElements())
-
- {
- Object[] typeSq = (Object[]) ts.nextElement();
- boolean dna = (typeSq.length > 1);
- AlignmentI al = (AlignmentI) typeSq[0];
- System.out.println("Trying getProducts for "
- + al.getSequenceAt(0).getDisplayId(true));
- System.out.println("Search DS Xref for: "
- + (dna ? "dna" : "prot"));
- // have a bash at finding the products amongst all the retrieved
- // sequences.
- SequenceI[] seqs = al.getSequencesArray();
- Alignment prodal = jalview.analysis.CrossRef.findXrefSequences(
- seqs, dna, null, ds);
- System.out.println("Found "
- + ((prodal == null) ? "no" : "" + prodal.getHeight())
- + " products");
- if (prodal != null)
- {
- SequenceI[] prod = prodal.getSequencesArray(); // note
- // should
- // test
- // rather
- // than
- // throw
- // away
- // codon
- // mapping
- // (if
- // present)
- for (int p = 0; p < prod.length; p++)
- {
- System.out.println("Prod " + p + ": "
- + prod[p].getDisplayId(true));
- }
- }
- }
-
- }
-
- }
- }
-
- /**
* query the currently defined DAS source registry for sequence sources and
* add a DasSequenceSource instance for each source to the SequenceFetcher
* source list.
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefSource;
-import jalview.ws.seqfetcher.DbSourceProxy;
import com.stevesoft.pat.Regex;
-public class EmblCdsSouce extends EmblXmlSource implements DbSourceProxy
+public class EmblCdsSource extends EmblXmlSource
{
- public EmblCdsSouce()
+ public EmblCdsSource()
{
super();
- addDbSourceProperty(DBRefSource.CODINGSEQDB);
}
+ @Override
public String getAccessionSeparator()
{
return null;
}
+ @Override
public Regex getAccessionValidator()
{
- return new com.stevesoft.pat.Regex("^[A-Z]+[0-9]+");
+ return new Regex("^[A-Z]+[0-9]+");
}
+ @Override
public String getDbSource()
{
return DBRefSource.EMBLCDS;
}
+ @Override
public String getDbVersion()
{
return "0"; // TODO : this is dynamically set for a returned record - not
// tied to proxy
}
+ @Override
public AlignmentI getSequenceRecords(String queries) throws Exception
{
if (queries.indexOf(".") > -1)
return getEmblSequenceRecords(DBRefSource.EMBLCDS, queries);
}
+ @Override
public boolean isValidReference(String accession)
{
// most embl CDS refs look like ..
/**
* cDNA for LDHA_CHICK swissprot sequence
*/
+ @Override
public String getTestQuery()
{
return "CAA37824";
}
+ @Override
public String getDbName()
{
return "EMBL (CDS)";
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefSource;
-import jalview.ws.seqfetcher.DbSourceProxy;
import com.stevesoft.pat.Regex;
* @author JimP
*
*/
-public class EmblSource extends EmblXmlSource implements DbSourceProxy
+public class EmblSource extends EmblXmlSource
{
public EmblSource()
{
- addDbSourceProperty(DBRefSource.DNASEQDB);
- addDbSourceProperty(DBRefSource.CODINGSEQDB);
+ super();
}
/*
*
* @see jalview.ws.DbSourceProxy#getAccessionSeparator()
*/
+ @Override
public String getAccessionSeparator()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getAccessionValidator()
*/
+ @Override
public Regex getAccessionValidator()
{
- return new com.stevesoft.pat.Regex("^[A-Z]+[0-9]+");
+ return new Regex("^[A-Z]+[0-9]+");
}
/*
*
* @see jalview.ws.DbSourceProxy#getDbSource()
*/
+ @Override
public String getDbSource()
{
return DBRefSource.EMBL;
*
* @see jalview.ws.DbSourceProxy#getDbVersion()
*/
+ @Override
public String getDbVersion()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[])
*/
+ @Override
public AlignmentI getSequenceRecords(String queries) throws Exception
{
return getEmblSequenceRecords(DBRefSource.EMBL, queries);
*
* @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)
*/
+ @Override
public boolean isValidReference(String accession)
{
// most embl refs look like ..
/**
* return LHD_CHICK coding gene
*/
+ @Override
public String getTestQuery()
{
return "X53828";
}
+ @Override
public String getDbName()
{
return "EMBL"; // getDbSource();
import jalview.ws.ebi.EBIFetchClient;
import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
public abstract class EmblXmlSource extends EbiFileRetrievedProxy
{
-
- /**
- * Last properly parsed embl file.
+ /*
+ * JAL-1856 Embl returns this text for query not found
*/
- public EmblFile efile = null;
+ private static final String EMBL_NOT_FOUND_REPLY = "ERROR 12 No entries found.";
public EmblXmlSource()
{
try
{
reply = dbFetch.fetchDataAsFile(
- emprefx.toLowerCase() + ":" + query.trim(), "emblxml", null);
+ emprefx.toLowerCase() + ":" + query.trim(), "emblxml", null,
+ ".xml");
} catch (Exception e)
{
stopQuery();
public AlignmentI getEmblSequenceRecords(String emprefx, String query,
File reply) throws Exception
{
- SequenceI seqs[] = null;
- StringBuffer result = new StringBuffer();
+ EmblFile efile = null;
+ List<SequenceI> seqs = new ArrayList<SequenceI>();
+
if (reply != null && reply.exists())
{
- efile = null;
file = reply.getAbsolutePath();
- if (reply.length() > 25)
+ if (reply.length() > EMBL_NOT_FOUND_REPLY.length())
{
efile = EmblFile.getEmblFile(reply);
}
- else
- {
- result.append(MessageManager.formatMessage(
- "label.no_embl_record_found",
- new String[] { emprefx.toLowerCase(), query.trim() }));
- }
}
+
+ List<SequenceI> peptides = new ArrayList<SequenceI>();
if (efile != null)
{
for (EmblEntry entry : efile.getEntries())
{
- SequenceI[] seqparts = entry.getSequences(false, true, emprefx);
- // TODO: use !fetchNa,!fetchPeptide here instead - see todo in EmblEntry
- if (seqparts != null)
+ SequenceI seq = entry.getSequence(emprefx, peptides);
+ if (seq != null)
{
- SequenceI[] newseqs = null;
- int si = 0;
- if (seqs == null)
- {
- newseqs = new SequenceI[seqparts.length];
- }
- else
- {
- newseqs = new SequenceI[seqs.length + seqparts.length];
-
- for (; si < seqs.length; si++)
- {
- newseqs[si] = seqs[si];
- seqs[si] = null;
- }
- }
- for (int j = 0; j < seqparts.length; si++, j++)
- {
- newseqs[si] = seqparts[j].deriveSequence();
- // place DBReferences on dataset and refer
- }
- seqs = newseqs;
-
+ seqs.add(seq.deriveSequence());
+ // place DBReferences on dataset and refer
}
}
}
- else
- {
- result = null;
- }
+
AlignmentI al = null;
- if (seqs != null && seqs.length > 0)
+ if (!seqs.isEmpty())
{
- al = new Alignment(seqs);
- result.append(MessageManager.formatMessage(
- "label.embl_successfully_parsed", new String[] { emprefx }));
- results = result;
+ al = new Alignment(seqs.toArray(new SequenceI[seqs.size()]));
}
stopQuery();
return al;
}
+ @Override
+ public boolean isDnaCoding()
+ {
+ return true;
+ }
+
}
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefSource;
-import jalview.ws.seqfetcher.DbSourceProxy;
import com.stevesoft.pat.Regex;
* @author JimP
*
*/
-public class GeneDbSource extends EmblXmlSource implements DbSourceProxy
+public class GeneDbSource extends EmblXmlSource
{
public GeneDbSource()
{
- addDbSourceProperty(DBRefSource.DNASEQDB);
- addDbSourceProperty(DBRefSource.CODINGSEQDB);
+ super();
}
/*
*
* @see jalview.ws.DbSourceProxy#getAccessionSeparator()
*/
+ @Override
public String getAccessionSeparator()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getAccessionValidator()
*/
+ @Override
public Regex getAccessionValidator()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getDbSource()
*/
+ @Override
public String getDbSource()
{
return DBRefSource.GENEDB;
*
* @see jalview.ws.DbSourceProxy#getDbVersion()
*/
+ @Override
public String getDbVersion()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[])
*/
+ @Override
public AlignmentI getSequenceRecords(String queries) throws Exception
{
// query of form
*
* @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)
*/
+ @Override
public boolean isValidReference(String accession)
{
// TODO Auto-generated method stub
/**
* return T.Brucei Mannosyl-Transferase TbPIG-M
*/
+ @Override
public String getTestQuery()
{
return "Tb927.6.3300";
}
+ @Override
public String getDbName()
{
return "GeneDB"; // getDbSource();
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.dbsources;
-
-import jalview.util.MessageManager;
-import jalview.ws.uimodel.PDBRestRequest;
-import jalview.ws.uimodel.PDBRestResponse;
-import jalview.ws.uimodel.PDBRestResponse.PDBResponseSummary;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.ws.rs.core.MediaType;
-
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-
-/**
- * A rest client for querying the Search endpoing of the PDB REST API
- *
- * @author tcnofoegbu
- *
- */
-public class PDBRestClient
-{
- public static final String PDB_SEARCH_ENDPOINT = "http://www.ebi.ac.uk/pdbe/search/pdb/select?";
-
- private static int DEFAULT_RESPONSE_SIZE = 200;
-
- /**
- * Takes a PDBRestRequest object and returns a response upon execution
- *
- * @param pdbRestRequest
- * the PDBRestRequest instance to be processed
- * @return the pdbResponse object for the given request
- * @throws Exception
- */
- public PDBRestResponse executeRequest(PDBRestRequest pdbRestRequest)
- throws Exception
- {
- try
- {
- ClientConfig clientConfig = new DefaultClientConfig();
- Client client = Client.create(clientConfig);
-
- String wantedFields = getPDBDocFieldsAsCommaDelimitedString(pdbRestRequest
- .getWantedFields());
- int responseSize = (pdbRestRequest.getResponseSize() == 0) ? DEFAULT_RESPONSE_SIZE
- : pdbRestRequest.getResponseSize();
- String sortParam = (pdbRestRequest.getFieldToSortBy() == null || pdbRestRequest
- .getFieldToSortBy().trim().isEmpty()) ? "" : (pdbRestRequest
- .getFieldToSortBy() + (pdbRestRequest.isAscending() ? " asc"
- : " desc"));
- // Build request parameters for the REST Request
- WebResource webResource = client.resource(PDB_SEARCH_ENDPOINT)
- .queryParam("wt", "json").queryParam("fl", wantedFields)
- .queryParam("rows", String.valueOf(responseSize))
- .queryParam("q", pdbRestRequest.getQuery())
- .queryParam("sort", sortParam);
-
- // Execute the REST request
- ClientResponse clientResponse = webResource.accept(
- MediaType.APPLICATION_JSON).get(ClientResponse.class);
-
- // Get the JSON string from the response object
- String responseString = clientResponse.getEntity(String.class);
-
- // Check the response status and report exception if one occurs
- if (clientResponse.getStatus() != 200)
- {
- String errorMessage = "";
- if (clientResponse.getStatus() == 400)
- {
- errorMessage = parseJsonExceptionString(responseString);
- throw new Exception(errorMessage);
- }
- else
- {
- errorMessage = getMessageByHTTPStatusCode(clientResponse
- .getStatus());
- throw new Exception(errorMessage);
- }
- }
-
- // Make redundant objects eligible for garbage collection to conserve
- // memory
- clientResponse = null;
- client = null;
-
- // Process the response and return the result to the caller.
- return parsePDBJsonResponse(responseString, pdbRestRequest);
- } catch (Exception e)
- {
- String exceptionMsg = e.getMessage();
- if (exceptionMsg.contains("SocketException"))
- {
- // No internet connection
- throw new Exception(
- MessageManager
- .getString("exception.unable_to_detect_internet_connection"));
- }
- else if (exceptionMsg.contains("UnknownHostException"))
- {
- // The server 'www.ebi.ac.uk' is unreachable
- throw new Exception(
- MessageManager
- .getString("exception.pdb_server_unreachable"));
- }
- else
- {
- throw e;
- }
- }
- }
-
- public String getMessageByHTTPStatusCode(int code)
- {
- String message = "";
- switch (code)
- {
- case 410:
- message = MessageManager
- .getString("exception.pdb_rest_service_no_longer_available");
- break;
- case 403:
- case 404:
- message = MessageManager.getString("exception.resource_not_be_found");
- break;
- case 408:
- case 409:
- case 500:
- case 501:
- case 502:
- case 503:
- case 504:
- case 505:
- message = MessageManager.getString("exception.pdb_server_error");
- break;
-
- default:
- break;
- }
- return message;
- }
-
- /**
- * Process error response from PDB server if/when one occurs.
- *
- * @param jsonResponse
- * the JSON string containing error message from the server
- * @return the processed error message from the JSON string
- */
- public static String parseJsonExceptionString(String jsonErrorResponse)
- {
- StringBuilder errorMessage = new StringBuilder(
- "\n============= PDB Rest Client RunTime error =============\n");
-
- try
- {
- JSONParser jsonParser = new JSONParser();
- JSONObject jsonObj = (JSONObject) jsonParser.parse(jsonErrorResponse);
- JSONObject errorResponse = (JSONObject) jsonObj.get("error");
-
- JSONObject responseHeader = (JSONObject) jsonObj
- .get("responseHeader");
- JSONObject paramsObj = (JSONObject) responseHeader.get("params");
- String status = responseHeader.get("status").toString();
- String message = errorResponse.get("msg").toString();
- String query = paramsObj.get("q").toString();
- String fl = paramsObj.get("fl").toString();
-
- errorMessage.append("Status: ").append(status).append("\n");
- errorMessage.append("Message: ").append(message).append("\n");
- errorMessage.append("query: ").append(query).append("\n");
- errorMessage.append("fl: ").append(fl).append("\n");
-
- } catch (ParseException e)
- {
- e.printStackTrace();
- }
- return errorMessage.toString();
- }
-
- /**
- * Parses the JSON response string from PDB REST API. The response is dynamic
- * hence, only fields specifically requested for in the 'wantedFields'
- * parameter is fetched/processed
- *
- * @param pdbJsonResponseString
- * the JSON string to be parsed
- * @param pdbRestRequest
- * the request object which contains parameters used to process the
- * JSON string
- * @return
- */
- @SuppressWarnings("unchecked")
- public static PDBRestResponse parsePDBJsonResponse(
- String pdbJsonResponseString, PDBRestRequest pdbRestRequest)
- {
- PDBRestResponse searchResult = new PDBRestResponse();
- List<PDBResponseSummary> result = null;
- try
- {
- JSONParser jsonParser = new JSONParser();
- JSONObject jsonObj = (JSONObject) jsonParser
- .parse(pdbJsonResponseString);
-
- JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
- String queryTime = ((JSONObject) jsonObj.get("responseHeader")).get(
- "QTime").toString();
- int numFound = Integer
- .valueOf(pdbResponse.get("numFound").toString());
- if (numFound > 0)
- {
- result = new ArrayList<PDBResponseSummary>();
- JSONArray docs = (JSONArray) pdbResponse.get("docs");
- for (Iterator<JSONObject> docIter = docs.iterator(); docIter
- .hasNext();)
- {
- JSONObject doc = docIter.next();
- result.add(searchResult.new PDBResponseSummary(doc,
- pdbRestRequest));
- }
- searchResult.setNumberOfItemsFound(numFound);
- searchResult.setResponseTime(queryTime);
- searchResult.setSearchSummary(result);
- }
- } catch (ParseException e)
- {
- e.printStackTrace();
- }
- return searchResult;
- }
-
- /**
- * Takes a collection of PDBDocField and converts its 'code' Field values into
- * a comma delimited string.
- *
- * @param pdbDocfields
- * the collection of PDBDocField to process
- * @return the comma delimited string from the pdbDocFields collection
- */
- public static String getPDBDocFieldsAsCommaDelimitedString(
- Collection<PDBDocField> pdbDocfields)
- {
- String result = "";
- if (pdbDocfields != null && !pdbDocfields.isEmpty())
- {
- StringBuilder returnedFields = new StringBuilder();
- for (PDBDocField field : pdbDocfields)
- {
- returnedFields.append(",").append(field.getCode());
- }
- returnedFields.deleteCharAt(0);
- result = returnedFields.toString();
- }
- return result;
- }
-
- /**
- * Determines the column index for 'PDB Id' Fields in the dynamic summary
- * table. The PDB Id serves as a unique identifier for a given row in the
- * summary table
- *
- * @param wantedFields
- * the available table columns in no particular order
- * @return the pdb id field column index
- */
- public static int getPDBIdColumIndex(
- Collection<PDBDocField> wantedFields, boolean hasRefSeq)
- {
-
- // If a reference sequence is attached then start counting from 1 else
- // start from zero
- int pdbFieldIndexCounter = hasRefSeq ? 1 : 0;
-
- for (PDBDocField field : wantedFields)
- {
- if (field.equals(PDBDocField.PDB_ID))
- {
- break; // Once PDB Id index is determined exit iteration
- }
- ++pdbFieldIndexCounter;
- }
- return pdbFieldIndexCounter;
- }
-
- /**
- * This enum represents the fields available in the PDB JSON response
- *
- */
- public enum PDBDocField
- {
- PDB_ID("PDB Id", "pdb_id"), TITLE("Title", "title"), MOLECULE_NAME(
- "Molecule", "molecule_name"), MOLECULE_TYPE("Molecule Type",
- "molecule_type"), MOLECULE_SEQUENCE("Sequence",
- "molecule_sequence"), PFAM_ACCESSION("PFAM Accession",
- "pfam_accession"), PFAM_NAME("PFAM Name", "pfam_name"), INTERPRO_NAME(
- "InterPro Name", "interpro_name"), INTERPRO_ACCESSION(
- "InterPro Accession", "interpro_accession"), UNIPROT_ID(
- "UniProt Id", "uniprot_id"), UNIPROT_ACCESSION(
- "UniProt Accession", "uniprot_accession"), UNIPROT_COVERAGE(
- "UniProt Coverage", "uniprot_coverage"), UNIPROT_FEATURES(
- "Uniprot Features", "uniprot_features"), R_FACTOR("R Factor",
- "r_factor"), RESOLUTION("Resolution", "resolution"), DATA_QUALITY(
- "Data Quality", "data_quality"), OVERALL_QUALITY(
- "Overall Quality", "overall_quality"), POLYMER_COUNT(
- "Number of Polymers", "number_of_polymers"), PROTEIN_CHAIN_COUNT(
- "Number of Protein Chains", "number_of_protein_chains"), BOUND_MOLECULE_COUNT(
- "Number of Bound Molecule", "number_of_bound_molecules"), POLYMER_RESIDUE_COUNT(
- "Number of Polymer Residue", "number_of_polymer_residues"), GENUS(
- "GENUS", "genus"), GENE_NAME("Gene Name", "gene_name"), EXPERIMENTAL_METHOD(
- "Experimental Method", "experimental_method"), GO_ID("GO Id",
- "go_id"), ASSEMBLY_ID("Assembly Id", "assembly_form"), ASSEMBLY_FORM(
- "Assembly Form", "assembly_id"), ASSEMBLY_TYPE("Assembly Type",
- "assembly_type"), SPACE_GROUP("Space Group", "spacegroup"), CATH_CODE(
- "Cath Code", "cath_code"), TAX_ID("Tax Id", "tax_id"), TAX_QUERY(
- "Tax Query", "tax_query"), INTERACTING_ENTRY_ID(
- "Interacting Entry Id", "interacting_entry_id"), INTERACTING_ENTITY_ID(
- "Interacting Entity Id", "interacting_entity_id"), INTERACTING_MOLECULES(
- "Interacting Molecules", "interacting_molecules"), PUBMED_ID(
- "Pubmed Id", "pubmed_id"), STATUS("Status", "status"), MODEL_QUALITY(
- "Model Quality", "model_quality"), PIVOT_RESOLUTION(
- "Pivot Resolution", "pivot_resolution"), DATA_REDUCTION_SOFTWARE(
- "Data reduction software", "data_reduction_software"), MAX_OBSERVED_RES(
- "Max observed residues", "max_observed_residues"), ORG_SCI_NAME(
- "Organism scientific name", "organism_scientific_name"), SUPER_KINGDOM(
- "Super kingdom", "superkingdom"), RANK("Rank", "rank"), CRYSTALLISATION_PH(
- "Crystallisation Ph", "crystallisation_ph"), BIOLOGICAL_FUNCTION(
- "Biological Function", "biological_function"), BIOLOGICAL_PROCESS(
- "Biological Process", "biological_process"), BIOLOGICAL_CELL_COMPONENT(
- "Biological Cell Component", "biological_cell_component"), COMPOUND_NAME(
- "Compound Name", "compound_name"), COMPOUND_ID("Compound Id",
- "compound_id"), COMPOUND_WEIGHT("Compound Weight",
- "compound_weight"), COMPOUND_SYSTEMATIC_NAME(
- "Compound Systematic Name", "compound_systematic_name"), INTERACTING_LIG(
- "Interacting Ligands", "interacting_ligands"), JOURNAL(
- "Journal", "journal"), ALL_AUTHORS("All Authors", "all_authors"), EXPERIMENTAL_DATA_AVAILABLE(
- "Experiment Data Available", "experiment_data_available"), DIFFRACTION_PROTOCOL(
- "Diffraction Protocol", "diffraction_protocol"), REFINEMENT_SOFTWARE(
- "Refinement Software", "refinement_software"), STRUCTURE_DETERMINATION_METHOD(
- "Structure Determination Method",
- "structure_determination_method"), SYNCHROTON_SITE(
- "Synchrotron Site", "synchrotron_site"), SAMPLE_PREP_METHOD(
- "Sample Preparation Method", "sample_preparation_method"), ENTRY_AUTHORS(
- "Entry Authors", "entry_authors"), CITATION_TITLE(
- "Citation Title", "citation_title"), STRUCTURE_SOLUTION_SOFTWARE(
- "Structure Solution Software", "structure_solution_software"), ENTRY_ENTITY(
- "Entry Entity", "entry_entity"), R_FREE("R Free", "r_free"), NO_OF_POLYMER_ENTITIES(
- "Number of Polymer Entities", "number_of_polymer_entities"), NO_OF_BOUND_ENTITIES(
- "Number of Bound Entities", "number_of_bound_entities"), CRYSTALLISATION_RESERVOIR(
- "Crystallisation Reservoir", "crystallisation_reservoir"), DATA_SCALING_SW(
- "Data Scalling Software", "data_scaling_software"), DETECTOR(
- "Detector", "detector"), DETECTOR_TYPE("Detector Type",
- "detector_type"), MODIFIED_RESIDUE_FLAG(
- "Modified Residue Flag", "modified_residue_flag"), NUMBER_OF_COPIES(
- "Number of Copies", "number_of_copies"), STRUCT_ASYM_ID(
- "Struc Asym Id", "struct_asym_id"), HOMOLOGUS_PDB_ENTITY_ID(
- "Homologus PDB Entity Id", "homologus_pdb_entity_id"), MOLECULE_SYNONYM(
- "Molecule Synonym", "molecule_synonym"), DEPOSITION_SITE(
- "Deposition Site", "deposition_site"), SYNCHROTRON_BEAMLINE(
- "Synchrotron Beamline", "synchrotron_beamline"), ENTITY_ID(
- "Entity Id", "entity_id"), BEAM_SOURCE_NAME("Beam Source Name",
- "beam_source_name"), PROCESSING_SITE("Processing Site",
- "processing_site"), ENTITY_WEIGHT("Entity Weight",
- "entity_weight"), VERSION("Version", "_version_"), ALL("ALL",
- "text");
-
- private String name;
-
- private String code;
-
- PDBDocField(String name, String code)
- {
- this.name = name;
- this.code = code;
- }
-
- public String getName()
- {
- return name;
- }
-
- public String getCode()
- {
- return code;
- }
-
- public String toString()
- {
- return name;
- }
- }
-}
*/
package jalview.ws.dbsources;
+import jalview.api.FeatureSettingsModelI;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
import jalview.io.FormatAdapter;
+import jalview.io.PDBFeatureSettings;
import jalview.util.MessageManager;
import jalview.ws.ebi.EBIFetchClient;
-import jalview.ws.seqfetcher.DbSourceProxy;
import java.util.ArrayList;
import java.util.List;
* @author JimP
*
*/
-public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy
+public class Pdb extends EbiFileRetrievedProxy
{
public Pdb()
{
super();
- addDbSourceProperty(DBRefSource.PROTSEQDB);
}
+ public static final String FEATURE_INSERTION = "INSERTION";
+
+ public static final String FEATURE_RES_NUM = "RESNUM";
+
+ private static String currentDefaultFomart = DBRefSource.PDB;
+
/*
* (non-Javadoc)
*
* @see jalview.ws.DbSourceProxy#getAccessionSeparator()
*/
+ @Override
public String getAccessionSeparator()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getAccessionValidator()
*/
+ @Override
public Regex getAccessionValidator()
{
return new Regex("([1-9][0-9A-Za-z]{3}):?([ _A-Za-z0-9]?)");
*
* @see jalview.ws.DbSourceProxy#getDbSource()
*/
+ @Override
public String getDbSource()
{
return DBRefSource.PDB;
*
* @see jalview.ws.DbSourceProxy#getDbVersion()
*/
+ @Override
public String getDbVersion()
{
return "0";
*
* @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[])
*/
+ @Override
public AlignmentI getSequenceRecords(String queries) throws Exception
{
AlignmentI pdbAlignment = null;
stopQuery();
return null;
}
+ String ext = getCurrentDefaultFomart().equalsIgnoreCase("mmcif") ? ".cif"
+ : ".xml";
EBIFetchClient ebi = new EBIFetchClient();
- file = ebi.fetchDataAsFile("pdb:" + id, "pdb", "raw").getAbsolutePath();
+ file = ebi.fetchDataAsFile("pdb:" + id,
+ getCurrentDefaultFomart().toLowerCase(), "raw", ext)
+ .getAbsolutePath();
stopQuery();
if (file == null)
{
{
pdbAlignment = new FormatAdapter().readFile(file,
- jalview.io.AppletFormatAdapter.FILE, "PDB");
+ jalview.io.AppletFormatAdapter.FILE,
+ getCurrentDefaultFomart());
if (pdbAlignment != null)
{
List<SequenceI> toremove = new ArrayList<SequenceI>();
*
* @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)
*/
+ @Override
public boolean isValidReference(String accession)
{
Regex r = getAccessionValidator();
/**
* obtain human glyoxalase chain A sequence
*/
+ @Override
public String getTestQuery()
{
return "1QIPA";
}
+ @Override
public String getDbName()
{
return "PDB"; // getDbSource();
{
return 0;
}
+
+ public static String getCurrentDefaultFomart()
+ {
+ return currentDefaultFomart;
+ }
+
+ public static void setCurrentDefaultFomart(String currentDefaultFomart)
+ {
+ Pdb.currentDefaultFomart = currentDefaultFomart;
+ }
+
+ /**
+ * Returns a descriptor for suitable feature display settings with
+ * <ul>
+ * <li>ResNums or insertions features visible</li>
+ * <li>insertions features coloured red</li>
+ * <li>ResNum features coloured by label</li>
+ * <li>Insertions displayed above (on top of) ResNums</li>
+ * </ul>
+ */
+ @Override
+ public FeatureSettingsModelI getFeatureColourScheme()
+ {
+ return new PDBFeatureSettings();
+ }
}
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
-import jalview.ws.seqfetcher.DbSourceProxy;
+import jalview.datamodel.DBRefSource;
+import jalview.io.FormatAdapter;
import com.stevesoft.pat.Regex;
* @author JimP
*
*/
-abstract public class Pfam extends Xfam implements DbSourceProxy
+abstract public class Pfam extends Xfam
{
public Pfam()
{
super();
- // all extensions of this PFAM source base class are DOMAINDB sources
- addDbSourceProperty(jalview.datamodel.DBRefSource.DOMAINDB);
- addDbSourceProperty(jalview.datamodel.DBRefSource.ALIGNMENTDB);
}
/*
*
* @see jalview.ws.DbSourceProxy#getAccessionSeparator()
*/
+ @Override
public String getAccessionSeparator()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getAccessionValidator()
*/
+ @Override
public Regex getAccessionValidator()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[])
*/
+ @Override
public AlignmentI getSequenceRecords(String queries) throws Exception
{
// TODO: this is not a perfect implementation. We need to be able to add
// individual references to each sequence in each family alignment that's
// retrieved.
startQuery();
- AlignmentI rcds = new jalview.io.FormatAdapter().readFile(getXFAMURL()
+ AlignmentI rcds = new FormatAdapter().readFile(getXFAMURL()
+ queries.trim().toUpperCase(), jalview.io.FormatAdapter.URL,
"STH");
for (int s = 0, sNum = rcds.getHeight(); s < sNum; s++)
{
rcds.getSequenceAt(s).addDBRef(
- new DBRefEntry(jalview.datamodel.DBRefSource.PFAM,
+new DBRefEntry(DBRefSource.PFAM,
// getDbSource(),
getDbVersion(), queries.trim().toUpperCase()));
- if (!getDbSource().equals(jalview.datamodel.DBRefSource.PFAM))
+ if (!getDbSource().equals(DBRefSource.PFAM))
{ // add the specific ref too
rcds.getSequenceAt(s).addDBRef(
new DBRefEntry(getDbSource(), getDbVersion(), queries
*
* @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)
*/
+ @Override
public boolean isValidReference(String accession)
{
return accession.indexOf("PF") == 0;
* public String getDbName() { return "PFAM"; // getDbSource(); }
*/
+ @Override
public String getXfamSource()
{
- return jalview.datamodel.DBRefSource.PFAM;
+ return DBRefSource.PFAM;
}
}
*/
package jalview.ws.dbsources;
-import jalview.ws.seqfetcher.DbSourceProxy;
/**
* flyweight class specifying retrieval of Full family alignments from PFAM
*
*/
-public class PfamFull extends Pfam implements DbSourceProxy
+public class PfamFull extends Pfam
{
public PfamFull()
{
*
* @see jalview.ws.dbsources.Pfam#getPFAMURL()
*/
+ @Override
protected String getXFAMURL()
{
- return "http://pfam.sanger.ac.uk/family/alignment/download/format?alnType=full&format=stockholm&order=t&case=l&gaps=default&entry=";
+ return "http://pfam.xfam.org/family/alignment/download/format?alnType=full&format=stockholm&order=t&case=l&gaps=default&entry=";
}
/*
*
* @see jalview.ws.seqfetcher.DbSourceProxy#getDbName()
*/
+ @Override
public String getDbName()
{
return "PFAM (Full)";
}
+ @Override
public String getDbSource()
{
return getDbName(); // so we have unique DbSource string.
}
+ @Override
public String getTestQuery()
{
return "PF03760";
}
+ @Override
public String getDbVersion()
{
return null;
*/
package jalview.ws.dbsources;
-import jalview.ws.seqfetcher.DbSourceProxy;
/**
* flyweight class specifying retrieval of Seed alignments from PFAM
* @author JimP
*
*/
-public class PfamSeed extends Pfam implements DbSourceProxy
+public class PfamSeed extends Pfam
{
public PfamSeed()
{
*
* @see jalview.ws.dbsources.Pfam#getPFAMURL()
*/
+ @Override
protected String getXFAMURL()
{
- return "http://pfam.sanger.ac.uk/family/alignment/download/format?alnType=seed&format=stockholm&order=t&case=l&gaps=default&entry=";
+ return "http://pfam.xfam.org/family/alignment/download/format?alnType=seed&format=stockholm&order=t&case=l&gaps=default&entry=";
}
/*
*
* @see jalview.ws.seqfetcher.DbSourceProxy#getDbName()
*/
+ @Override
public String getDbName()
{
return "PFAM (Seed)";
}
+ @Override
public String getDbSource()
{
return jalview.datamodel.DBRefSource.PFAM; // archetype source
}
+ @Override
public String getTestQuery()
{
return "PF03760";
*/
package jalview.ws.dbsources;
-import jalview.ws.seqfetcher.DbSourceProxy;
+import jalview.datamodel.DBRefSource;
import com.stevesoft.pat.Regex;
*
* @author Lauren Michelle Lui
*/
-abstract public class Rfam extends Xfam implements DbSourceProxy
+abstract public class Rfam extends Xfam
{
public Rfam()
{
super();
- // all extensions of this RFAM source base class are DOMAINDB sources
- addDbSourceProperty(jalview.datamodel.DBRefSource.DOMAINDB);
- addDbSourceProperty(jalview.datamodel.DBRefSource.ALIGNMENTDB);
}
/*
* @see jalview.ws.DbSourceProxy#getAccessionSeparator() Left here for
* consistency with Pfam class
*/
+ @Override
public String getAccessionSeparator()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#getAccessionValidator() * Left here for
*/
+ @Override
public Regex getAccessionValidator()
{
// TODO Auto-generated method stub
*
* @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)
*/
+ @Override
public boolean isValidReference(String accession)
{
return accession.indexOf("RF") == 0;
*
* @see jalview.ws.dbsources.Xfam#getXfamSource()
*/
+ @Override
public String getXfamSource()
{
- return jalview.datamodel.DBRefSource.RFAM;
+ return DBRefSource.RFAM;
}
}
*/
package jalview.ws.dbsources;
-import jalview.ws.seqfetcher.DbSourceProxy;
/**
* Flyweight class specifying retrieval of Full family alignments from RFAM
* @author Lauren Michelle Lui
*
*/
-public class RfamFull extends Rfam implements DbSourceProxy
+public class RfamFull extends Rfam
{
public RfamFull()
{
*
* @see jalview.ws.dbsources.Rfam#getXFAMURL()
*/
+ @Override
protected String getXFAMURL()
{
- return "http://rfam.sanger.ac.uk/family/alignment/download/format?alnType=full&nseLabels=0&format=stockholm&acc=";
+ return "http://rfam.xfam.org/family/alignment/download/format?alnType=full&nseLabels=0&format=stockholm&acc=";
+
}
/*
*
* @see jalview.ws.seqfetcher.DbSourceProxy#getDbName()
*/
+ @Override
public String getDbName()
{
return "RFAM (Full)";
}
+ @Override
public String getDbSource()
{
return getDbName(); // so we have unique DbSource string.
}
+ @Override
public String getTestQuery()
{
// Can be retrieved from http://rfam.janelia.org/cgi-bin/getdesc?acc=RF00014
return "RF00014";
}
+ @Override
public String getDbVersion()
{
return null;
*/
package jalview.ws.dbsources;
-import jalview.ws.seqfetcher.DbSourceProxy;
/**
* Flyweight class specifying retrieval of Seed family alignments from RFAM
* @author Lauren Michelle Lui
*
*/
-public class RfamSeed extends Rfam implements DbSourceProxy
+public class RfamSeed extends Rfam
{
public RfamSeed()
{
*
* @see jalview.ws.dbsources.Rfam#getRFAMURL()
*/
+ @Override
protected String getXFAMURL()
{
- return "http://rfam.sanger.ac.uk/family/alignment/download/format?alnType=seed&nseLabels=0&format=stockholm&acc=";
+ return "http://rfam.xfam.org/family/";
// Janelia Farms url
// "http://rfam.janelia.org/cgi-bin/getalignment?type=seed&fmt=stockholm&acc=";
}
+ @Override
+ public String getXFAMURLSUFFIX()
+ {
+ return "/alignment";
+ }
/*
* (non-Javadoc)
*
* @see jalview.ws.seqfetcher.DbSourceProxy#getDbName()
*/
+ @Override
public String getDbName()
{
return "RFAM (Seed)";
}
+ @Override
public String getDbSource()
{
return getDbName(); // so we have unique DbSource string.
}
+ @Override
public String getTestQuery()
{
return "RF00014";
} // http://rfam.janelia.org/cgi-bin/getdesc?acc=RF00014
+ @Override
public String getDbVersion()
{
return null;
import jalview.datamodel.UniprotEntry;
import jalview.datamodel.UniprotFile;
import jalview.ws.ebi.EBIFetchClient;
-import jalview.ws.seqfetcher.DbSourceProxy;
import jalview.ws.seqfetcher.DbSourceProxyImpl;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Vector;
+import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.xml.Unmarshaller;
import com.stevesoft.pat.Regex;
* @author JimP
*
*/
-public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
+public class Uniprot extends DbSourceProxyImpl
{
-
private static final String BAR_DELIMITER = "|";
- private static org.exolab.castor.mapping.Mapping map;
+ /*
+ * Castor mapping loaded from uniprot_mapping.xml
+ */
+ private static Mapping map;
/**
* Constructor
public Uniprot()
{
super();
- addDbSourceProperty(DBRefSource.SEQDB, DBRefSource.SEQDB);
- addDbSourceProperty(DBRefSource.PROTSEQDB);
}
/*
if (map == null)
{
// 1. Load the mapping information from the file
- map = new org.exolab.castor.mapping.Mapping(uni.getClass()
- .getClassLoader());
- java.net.URL url = getClass().getResource("/uniprot_mapping.xml");
+ map = new Mapping(uni.getClass().getClassLoader());
+ URL url = getClass().getResource("/uniprot_mapping.xml");
map.loadMapping(url);
}
// uniprotxml parameter required since december 2007
// uniprotkb dbname changed introduced december 2008
File file = ebi.fetchDataAsFile("uniprotkb:" + queries, "uniprotxml",
- null);
+ null, ".xml");
Vector<UniprotEntry> entries = getUniprotEntries(new FileReader(file));
if (entries != null)
StringBuilder desc = new StringBuilder(32);
if (entry.getProtein() != null && entry.getProtein().getName() != null)
{
+ boolean first = true;
for (String nm : entry.getProtein().getName())
{
- desc.append(nm).append(" ");
+ if (!first)
+ {
+ desc.append(" ");
+ }
+ first = false;
+ desc.append(nm);
}
}
return desc.toString();
public static String getUniprotEntryId(UniprotEntry entry)
{
StringBuilder name = new StringBuilder(32);
- name.append("UniProt/Swiss-Prot");
+ // name.append("UniProt/Swiss-Prot");
+ // use 'canonicalised' name for optimal id matching
+ name.append(DBRefSource.UNIPROT);
for (String accessionId : entry.getAccession())
{
name.append(BAR_DELIMITER);
*/
package jalview.ws.dbsources;
+import jalview.datamodel.DBRefSource;
+
/**
* Canonical Uniprot fetcher instance specifically retrieving UP_NAME
* references.
* @author JimP
*
*/
-public class UnprotName extends Uniprot implements
- jalview.ws.seqfetcher.DbSourceProxy
+public class UniprotName extends Uniprot
{
/*
*
* @see jalview.ws.dbsources.Uniprot#getDbSource()
*/
+ @Override
public String getDbSource()
{
- return jalview.datamodel.DBRefSource.UP_NAME;
+ return DBRefSource.UP_NAME;
}
}
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
+import jalview.io.FormatAdapter;
import jalview.ws.seqfetcher.DbSourceProxyImpl;
/**
protected abstract String getXFAMURL();
+ @Override
public abstract String getDbVersion();
abstract String getXfamSource();
+ @Override
public AlignmentI getSequenceRecords(String queries) throws Exception
{
// TODO: this is not a perfect implementation. We need to be able to add
// retrieved.
startQuery();
// TODO: trap HTTP 404 exceptions and return null
- AlignmentI rcds = new jalview.io.FormatAdapter().readFile(getXFAMURL()
- + queries.trim().toUpperCase(), jalview.io.FormatAdapter.URL,
+ AlignmentI rcds = new FormatAdapter().readFile(getXFAMURL()
+ + queries.trim().toUpperCase() + getXFAMURLSUFFIX(),
+ jalview.io.FormatAdapter.URL,
"STH");
for (int s = 0, sNum = rcds.getHeight(); s < sNum; s++)
{
return rcds;
}
+ /**
+ * Pfam and Rfam provide alignments
+ */
+ @Override
+ public boolean isAlignmentSource()
+ {
+ return true;
+ }
+
+ /**
+ * default suffix to append the retrieval URL for this source.
+ *
+ * @return "" for most Xfam sources
+ */
+ public String getXFAMURLSUFFIX()
+ {
+ return "";
+ }
+
}
*/
package jalview.ws.ebi;
+import jalview.datamodel.DBRefSource;
import jalview.util.MessageManager;
import java.io.BufferedInputStream;
*
* @param ids
* the query formatted as db:query1;query2;query3
- * @param f
+ * @param format
* the format wanted
* @param s
* - unused parameter
* @return the file holding the response
* @throws OutOfMemoryError
*/
- public File fetchDataAsFile(String ids, String f, String s)
+
+ public File fetchDataAsFile(String ids, String format, String s,
+ String ext)
throws OutOfMemoryError
{
File outFile = null;
try
{
- outFile = File.createTempFile("jalview", ".xml");
+ outFile = File.createTempFile("jalview", ext);
outFile.deleteOnExit();
- fetchData(ids, f, s, outFile);
+ fetchData(ids, format, s, outFile);
if (outFile.length() == 0)
{
outFile.delete();
*
* @param ids
* db:query1;query2;query3
- * @param f
+ * @param format
* raw/xml
* @param s
* not used - remove?
*
* @return Raw string array result of query set
*/
- public String[] fetchData(String ids, String f, String s)
+ public String[] fetchData(String ids, String format, String s)
throws OutOfMemoryError
{
- return fetchData(ids, f, s, null);
+ return fetchData(ids, format, s, null);
}
- public String[] fetchData(String ids, String f, String s, File outFile)
+ String[] fetchData(String ids, String f, String s, File outFile)
throws OutOfMemoryError
{
// Need to split
return (rslts.length == 0 ? null : rslts);
}
- public String[] fetchBatch(String ids, String db, String f, String s,
+ public String[] fetchBatch(String ids, String dbPath, String format, String s,
File outFile) throws OutOfMemoryError
{
- long time = System.currentTimeMillis();
- // max 200 ids can be added at one time
+ // long time = System.currentTimeMillis();
+ /*
+ * JAL-1855 dbfetch from ena_sequence, ena_coding
+ */
+ if (dbPath.equalsIgnoreCase(DBRefSource.EMBL))
+ {
+ dbPath = "ena_sequence";
+ }
+ else if (dbPath.equalsIgnoreCase(DBRefSource.EMBLCDS))
+ {
+ dbPath = "ena_coding";
+ }
+
try
{
URL rcall = new URL("http://www.ebi.ac.uk/Tools/dbfetch/dbfetch/"
- + db.toLowerCase() + "/" + ids.toLowerCase()
- + (f != null ? "/" + f : ""));
+ + dbPath.toLowerCase() + "/" + ids.toLowerCase()
+ + (format != null ? "/" + format : ""));
InputStream is = new BufferedInputStream(rcall.openStream());
if (outFile != null)
} catch (OutOfMemoryError er)
{
- System.out.println("OUT OF MEMORY DOWNLOADING QUERY FROM " + db
+ System.out.println("OUT OF MEMORY DOWNLOADING QUERY FROM " + dbPath
+ ":\n" + ids);
throw er;
} catch (Exception ex)
{
return null;
}
- System.err.println("Unexpected exception when retrieving from " + db
+ System.err.println("Unexpected exception when retrieving from "
+ + dbPath
+ "\nQuery was : '" + ids + "'");
ex.printStackTrace(System.err);
return null;
} finally
{
- // System.err.println("Took " + (System.currentTimeMillis() - time)
- // / 1000 + " secs for one call.");
+ // System.err.println("EBIFetch took " + (System.currentTimeMillis() -
+ // time) + " ms");
}
return null;
}
jalview.bin.Cache.log.debug("Getting associated alignment.");
// we ignore the returned alignment if we only predicted on a single
// sequence
- String format = new jalview.io.IdentifyFile().Identify(
+ String format = new jalview.io.IdentifyFile().identify(
result.getAligfile(), "Paste");
if (jalview.io.FormatAdapter.isValidFormat(format))
package jalview.ws.jws1;
import jalview.analysis.AlignSeq;
+import jalview.api.FeatureColourI;
import jalview.bin.Cache;
import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentView;
*
* @return true if getAlignment will return a valid alignment result.
*/
+ @Override
public boolean hasResults()
{
if (subjobComplete
*
* @return null or { Alignment(+features and annotation), NewickFile)}
*/
- public Object[] getAlignment(Alignment dataset, Map featureColours)
+ public Object[] getAlignment(Alignment dataset,
+ Map<String, FeatureColourI> featureColours)
{
if (result != null && result.isFinished())
*
* @return boolean true if job can be submitted.
*/
+ @Override
public boolean hasValidInput()
{
if (seqs.getSeqs() != null)
}
}
+ @Override
public boolean isCancellable()
{
return true;
}
+ @Override
public void cancelJob()
{
if (!jobComplete && jobs != null)
}
}
+ @Override
public void pollJob(AWsJob job) throws Exception
{
((SeqSearchWSJob) job).result = server.getResult(((SeqSearchWSJob) job)
.getJobId());
}
+ @Override
public void StartJob(AWsJob job)
{
if (!(job instanceof SeqSearchWSJob))
return msa;
}
+ @Override
public void parseResult()
{
int results = 0; // number of result sets received
wsInfo.showResultsNewFrame
.addActionListener(new java.awt.event.ActionListener()
{
+ @Override
public void actionPerformed(java.awt.event.ActionEvent evt)
{
displayResults(true);
wsInfo.mergeResults
.addActionListener(new java.awt.event.ActionListener()
{
+ @Override
public void actionPerformed(java.awt.event.ActionEvent evt)
{
displayResults(false);
// NewickFile nf[] = new NewickFile[jobs.length];
for (int j = 0; j < jobs.length; j++)
{
- Map featureColours = new HashMap();
+ Map<String, FeatureColourI> featureColours = new HashMap<String, FeatureColourI>();
Alignment al = null;
NewickFile nf = null;
if (jobs[j].hasResults())
}
}
+ @Override
public boolean canMergeResults()
{
return false;
import compbio.data.sequence.ScoreManager.ScoreHolder;
import compbio.metadata.Argument;
-public class AADisorderClient extends JabawsCalcWorker implements
- AlignCalcWorkerI
+public class AADisorderClient extends JabawsCalcWorker
{
private static final String THRESHOLD = "THRESHOLD";
*/
package jalview.ws.jws2;
-import jalview.api.AlignCalcWorkerI;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.Annotation;
import jalview.gui.AlignFrame;
import compbio.metadata.Argument;
public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
- implements AlignCalcWorkerI
{
-
/**
*
* @return default args for this service when run as dynamic web service
return (seqs.size() > 1);
}
+ @Override
public String getServiceActionText()
{
return "calculating consensus secondary structure prediction using JPred service";
* update the consensus annotation from the sequence profile data using
* current visualization settings.
*/
+ @Override
public void updateResultAnnotation(boolean immediate)
{
if (immediate || !calcMan.isWorking(this) && msascoreset != null)
*/
package jalview.ws.jws2;
-import jalview.api.AlignCalcWorkerI;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.Annotation;
import jalview.gui.AlignFrame;
*
*/
-public class RNAalifoldClient extends JabawsCalcWorker implements
- AlignCalcWorkerI
+public class RNAalifoldClient extends JabawsCalcWorker
{
String methodName;
initViewportParams();
}
+ @Override
public String getCalcId()
{
return CALC_ID;
*/
package jalview.ws.seqfetcher;
+import jalview.api.FeatureSettingsModelI;
+import jalview.bin.Cache;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.SequenceI;
import jalview.util.MessageManager;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Hashtable;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
public class ASequenceFetcher
{
- /**
+ /*
* set of databases we can retrieve entries from
*/
- protected Hashtable<String, Map<String, DbSourceProxy>> FETCHABLEDBS;
+ protected Hashtable<String, Map<String, DbSourceProxy>> fetchableDbs;
+
+ /*
+ * comparator to sort by tier (0/1/2) and name
+ */
+ private Comparator<DbSourceProxy> proxyComparator;
+ /**
+ * Constructor
+ */
public ASequenceFetcher()
{
super();
+
+ /*
+ * comparator to sort proxies by tier and name
+ */
+ proxyComparator = new Comparator<DbSourceProxy>()
+ {
+ @Override
+ public int compare(DbSourceProxy o1, DbSourceProxy o2)
+ {
+ /*
+ * Tier 0 precedes 1 precedes 2
+ */
+ int compared = Integer.compare(o1.getTier(), o2.getTier());
+ if (compared == 0)
+ {
+ // defend against NullPointer - should never happen
+ String o1Name = o1.getDbName();
+ String o2Name = o2.getDbName();
+ if (o1Name != null && o2Name != null)
+ {
+ compared = o1Name.compareToIgnoreCase(o2Name);
+ }
+ }
+ return compared;
+ }
+ };
}
/**
- * get list of supported Databases
+ * get array of supported Databases
*
* @return database source string for each database - only the latest version
* of a source db is bound to each source.
*/
public String[] getSupportedDb()
{
- if (FETCHABLEDBS == null)
+ if (fetchableDbs == null)
{
return null;
}
- String[] sf = new String[FETCHABLEDBS.size()];
- Enumeration e = FETCHABLEDBS.keys();
- int i = 0;
- while (e.hasMoreElements())
- {
- sf[i++] = (String) e.nextElement();
- }
- ;
+ String[] sf = fetchableDbs.keySet().toArray(
+ new String[fetchableDbs.size()]);
return sf;
}
public boolean isFetchable(String source)
{
- Enumeration e = FETCHABLEDBS.keys();
- while (e.hasMoreElements())
+ for (String db : fetchableDbs.keySet())
{
- String db = (String) e.nextElement();
- if (source.compareToIgnoreCase(db) == 0)
+ if (source.equalsIgnoreCase(db))
{
return true;
}
}
- jalview.bin.Cache.log.warn("isFetchable doesn't know about '" + source
+ Cache.log.warn("isFetchable doesn't know about '" + source
+ "'");
return false;
}
- public SequenceI[] getSequences(jalview.datamodel.DBRefEntry[] refs)
+ /**
+ * Fetch sequences for the given cross-references
+ *
+ * @param refs
+ * @param dna
+ * if true, only fetch from nucleotide data sources, else peptide
+ * @return
+ */
+ public SequenceI[] getSequences(DBRefEntry[] refs, boolean dna)
{
- SequenceI[] ret = null;
- Vector<SequenceI> rseqs = new Vector();
- Hashtable<String, List<String>> queries = new Hashtable();
+ Vector<SequenceI> rseqs = new Vector<SequenceI>();
+ Hashtable<String, List<String>> queries = new Hashtable<String, List<String>>();
for (int r = 0; r < refs.length; r++)
{
if (!queries.containsKey(refs[r].getSource()))
"Don't know how to fetch from this database :" + db));
continue;
}
- Iterator<DbSourceProxy> fetchers = getSourceProxy(db).iterator();
+
Stack<String> queriesLeft = new Stack<String>();
- // List<String> queriesFailed = new ArrayList<String>();
queriesLeft.addAll(query);
- while (fetchers.hasNext())
+
+ List<DbSourceProxy> proxies = getSourceProxy(db);
+ for (DbSourceProxy fetcher : proxies)
{
List<String> queriesMade = new ArrayList<String>();
- HashSet queriesFound = new HashSet<String>();
+ HashSet<String> queriesFound = new HashSet<String>();
try
{
- DbSourceProxy fetcher = fetchers.next();
- boolean doMultiple = fetcher.getAccessionSeparator() != null; // No
- // separator
- // - no
- // Multiple
- // Queries
+ if (fetcher.isDnaCoding() != dna)
+ {
+ continue; // wrong sort of data
+ }
+ boolean doMultiple = fetcher.getMaximumQueryCount() > 1;
while (!queriesLeft.isEmpty())
{
StringBuffer qsb = new StringBuffer();
try
{
// create a fetcher and go to it
- seqset = fetcher.getSequenceRecords(qsb.toString()); // ,
- // queriesFailed);
+ seqset = fetcher.getSequenceRecords(qsb.toString());
} catch (Exception ex)
{
System.err.println("Failed to retrieve the following from "
{
System.out.println("# Adding " + queriesMade.size()
+ " ids back to queries list for searching again (" + db
- + ".");
+ + ")");
queriesLeft.addAll(queriesMade);
}
}
}
+
+ SequenceI[] result = null;
if (rseqs.size() > 0)
{
- ret = new SequenceI[rseqs.size()];
- Enumeration sqs = rseqs.elements();
+ result = new SequenceI[rseqs.size()];
int si = 0;
- while (sqs.hasMoreElements())
+ for (SequenceI s : rseqs)
{
- SequenceI s = (SequenceI) sqs.nextElement();
- ret[si++] = s;
+ result[si++] = s;
s.updatePDBIds();
}
}
- return ret;
+ return result;
}
public void reportStdError(String db, List<String> queriesMade,
}
/**
- * Retrieve an instance of the proxy for the given source
+ * Returns a list of proxies for the given source
*
* @param db
* database source string TODO: add version string/wildcard for
* retrieval of specific DB source/version combinations.
- * @return an instance of DbSourceProxy for that db.
+ * @return a list of DbSourceProxy for the db
*/
public List<DbSourceProxy> getSourceProxy(String db)
{
- List<DbSourceProxy> dbs;
- Map<String, DbSourceProxy> dblist = FETCHABLEDBS.get(db);
+ db = DBRefUtils.getCanonicalName(db);
+ Map<String, DbSourceProxy> dblist = fetchableDbs.get(db);
if (dblist == null)
{
return new ArrayList<DbSourceProxy>();
}
- ;
- if (dblist.size() > 1)
- {
- DbSourceProxy[] l = dblist.values().toArray(new DbSourceProxy[0]);
- int i = 0;
- String[] nm = new String[l.length];
- // make sure standard dbs appear first, followed by reference das sources,
- // followed by anything else.
- for (DbSourceProxy s : l)
- {
- nm[i++] = "" + s.getTier() + s.getDbName().toLowerCase();
- }
- jalview.util.QuickSort.sort(nm, l);
- dbs = new ArrayList<DbSourceProxy>();
- for (i = l.length - 1; i >= 0; i--)
- {
- dbs.add(l[i]);
- }
- }
- else
- {
- dbs = new ArrayList<DbSourceProxy>(dblist.values());
- }
+
+ /*
+ * sort so that primary sources precede secondary
+ */
+ List<DbSourceProxy> dbs = new ArrayList<DbSourceProxy>(dblist.values());
+ Collections.sort(dbs, proxyComparator);
return dbs;
}
/**
- * constructs and instance of the proxy and registers it as a valid
- * dbrefsource
+ * constructs an instance of the proxy and registers it as a valid dbrefsource
*
* @param dbSourceProxy
* reference for class implementing
*/
protected void addDBRefSourceImpl(
Class<? extends DbSourceProxy> dbSourceProxy)
- throws java.lang.IllegalArgumentException
+ throws IllegalArgumentException
{
DbSourceProxy proxy = null;
try
{
if (proxy != null)
{
- if (FETCHABLEDBS == null)
+ if (fetchableDbs == null)
{
- FETCHABLEDBS = new Hashtable<String, Map<String, DbSourceProxy>>();
+ fetchableDbs = new Hashtable<String, Map<String, DbSourceProxy>>();
}
- Map<String, DbSourceProxy> slist = FETCHABLEDBS.get(proxy
+ Map<String, DbSourceProxy> slist = fetchableDbs.get(proxy
.getDbSource());
if (slist == null)
{
- FETCHABLEDBS.put(proxy.getDbSource(),
+ fetchableDbs.put(proxy.getDbSource(),
slist = new Hashtable<String, DbSourceProxy>());
}
slist.put(proxy.getDbName(), proxy);
}
/**
- * test if the database handler for dbName contains the given dbProperty when
- * a dbName resolves to a set of proxies - this method will return the result
- * of the test for the first instance. TODO implement additional method to
- * query all sources for a db to find one with a particular property
- *
- * @param dbName
- * @param dbProperty
- * @return true if proxy has the given property
- */
- public boolean hasDbSourceProperty(String dbName, String dbProperty)
- {
- // TODO: decide if invalidDbName exception is thrown here.
-
- List<DbSourceProxy> proxies = getSourceProxy(dbName);
- if (proxies != null)
- {
- for (DbSourceProxy proxy : proxies)
- {
- if (proxy.getDbSourceProperties() != null)
- {
- return proxy.getDbSourceProperties().containsKey(dbProperty);
- }
- }
- }
- return false;
- }
-
- /**
* select sources which are implemented by instances of the given class
*
* @param class that implements DbSourceProxy
*/
public String[] getDbInstances(Class class1)
{
- if (!jalview.ws.seqfetcher.DbSourceProxy.class.isAssignableFrom(class1))
+ if (!DbSourceProxy.class.isAssignableFrom(class1))
{
throw new Error(
MessageManager
"error.implementation_error_dbinstance_must_implement_interface",
new String[] { class1.toString() }));
}
- if (FETCHABLEDBS == null)
+ if (fetchableDbs == null)
{
return null;
}
String[] sources = null;
- Vector src = new Vector();
- Enumeration dbs = FETCHABLEDBS.keys();
+ Vector<String> src = new Vector<String>();
+ Enumeration<String> dbs = fetchableDbs.keys();
while (dbs.hasMoreElements())
{
- String dbn = (String) dbs.nextElement();
- for (DbSourceProxy dbp : FETCHABLEDBS.get(dbn).values())
+ String dbn = dbs.nextElement();
+ for (DbSourceProxy dbp : fetchableDbs.get(dbn).values())
{
if (class1.isAssignableFrom(dbp.getClass()))
{
public DbSourceProxy[] getDbSourceProxyInstances(Class class1)
{
- ArrayList<DbSourceProxy> prlist = new ArrayList<DbSourceProxy>();
+ List<DbSourceProxy> prlist = new ArrayList<DbSourceProxy>();
for (String fetchable : getSupportedDb())
{
for (DbSourceProxy pr : getSourceProxy(fetchable))
return prlist.toArray(new DbSourceProxy[0]);
}
+ /**
+ * Returns a preferred feature colouring scheme for the given source, or null
+ * if none is defined.
+ *
+ * @param source
+ * @return
+ */
+ public FeatureSettingsModelI getFeatureColourScheme(String source)
+ {
+ /*
+ * return the first non-null colour scheme for any proxy for
+ * this database source
+ */
+ for (DbSourceProxy proxy : getSourceProxy(source))
+ {
+ FeatureSettingsModelI preferredColours = proxy
+ .getFeatureColourScheme();
+ if (preferredColours != null)
+ {
+ return preferredColours;
+ }
+ }
+ return null;
+ }
}
*/
package jalview.ws.seqfetcher;
+import jalview.api.FeatureSettingsModelI;
import jalview.datamodel.AlignmentI;
-import java.util.Hashtable;
-
import com.stevesoft.pat.Regex;
/**
* generic Reference Retrieval interface for a particular database
- * source/version as cited in DBRefEntry. TODO: add/define property to describe
- * max number of queries that this source can cope with at once. TODO:
- * add/define mechanism for retrieval of Trees and distance matrices from a
- * database (unify with io)
+ * source/version as cited in DBRefEntry.
+ *
+ * TODO: add/define mechanism for retrieval of Trees and distance matrices from
+ * a database (unify with io)
*
- * @author JimP TODO: promote to API
+ * @author JimP
*/
public interface DbSourceProxy
{
*
* @return source string constant used for this DB source
*/
- public String getDbSource();
+ String getDbSource();
/**
* Short meaningful name for this data source for display in menus or
*
* @return String
*/
- public String getDbName();
+ String getDbName();
/**
*
* @return version string for this database.
*/
- public String getDbVersion();
+ String getDbVersion();
/**
* Separator between individual accession queries for a database that allows
* @return string for separating concatenated queries (as individually
* validated by the accession validator)
*/
- public String getAccessionSeparator();
+ String getAccessionSeparator();
/**
* Regular expression for checking form of query string understood by this
*
* @return null or a validation regex
*/
- public Regex getAccessionValidator();
-
- /**
- * DbSource properties hash - define the capabilities of this source Property
- * hash methods defined in DbSourceProxyImpl. See constants in
- * jalview.datamodel.DBRefSource for definition of properties.
- *
- * @return
- */
- public Hashtable getDbSourceProperties();
+ Regex getAccessionValidator();
/**
*
* @return a test/example query that can be used to validate retrieval and
* parsing mechanisms
*/
- public String getTestQuery();
+ String getTestQuery();
/**
- * optionally implemented
+ * Required for sources supporting multiple query retrieval for use with the
+ * DBRefFetcher, which attempts to limit its queries with putative accession
+ * strings for a source to only those that are likely to be valid.
*
* @param accession
* @return
*/
- public boolean isValidReference(String accession);
+ boolean isValidReference(String accession);
/**
* make one or more queries to the database and attempt to parse the response
*
* @param queries
* - one or more queries for database in expected form
- * @return null if queries were successful but result was not parsable
+ * @return null if queries were successful but result was not parsable.
+ * Otherwise, an AlignmentI object containing properly annotated data
+ * (e.g. sequences with accessions for this datasource)
* @throws Exception
* - propagated from underlying transport to database (note -
* exceptions are not raised if query not found in database)
*
*/
- public AlignmentI getSequenceRecords(String queries) throws Exception;
+ AlignmentI getSequenceRecords(String queries) throws Exception;
/**
*
* @return true if a query is currently being made
*/
- public boolean queryInProgress();
+ boolean queryInProgress();
/**
* get the raw reponse from the last set of queries
*
* @return one or more string buffers for each individual query
*/
- public StringBuffer getRawRecords();
+ StringBuffer getRawRecords();
/**
- * Find out more info about the source.
+ * Tier for this data source
*
- * @param dbsourceproperty
- * - one of the database reference source properties in
- * jalview.datamodel.DBRefSource
- * @return true if the source has this property
+ * @return 0 - primary datasource, 1 - das primary source, 2 - secondary
*/
- public boolean isA(Object dbsourceproperty);
+ int getTier();
/**
- * Tier for this data source
+ * Extracts valid accession strings from a query string. If there is an
+ * accession id validator, returns the the matched region or the first
+ * subgroup match from the matched region; else just returns the whole query.
*
- * @return 0 - primary datasource, 1 - das primary source, 2 - secondary
+ * @param query
+ * @return
+ */
+ String getAccessionIdFromQuery(String query);
+
+ /**
+ * Returns the maximum number of accession ids that can be queried in one
+ * request.
+ *
+ * @return
+ */
+ int getMaximumQueryCount();
+
+ /**
+ * Returns true if the source may provide coding DNA i.e. sequences with
+ * implicit peptide products
+ *
+ * @return
+ */
+ boolean isDnaCoding();
+
+ /**
+ * Answers true if the database is a source of alignments (for example, domain
+ * families)
+ *
+ * @return
+ */
+ boolean isAlignmentSource();
+
+ /**
+ * Returns an (optional) description of the source, suitable for display as a
+ * tooltip, or null
+ *
+ * @return
+ */
+ String getDescription();
+
+ /**
+ * Returns the preferred feature colour configuration if there is one, else
+ * null
+ *
+ * @return
*/
- public int getTier();
-}
+ FeatureSettingsModelI getFeatureColourScheme();
+}
\ No newline at end of file
*/
package jalview.ws.seqfetcher;
+import jalview.api.FeatureSettingsModelI;
import jalview.datamodel.AlignmentI;
import jalview.io.FormatAdapter;
import jalview.io.IdentifyFile;
-import java.util.Hashtable;
-
/**
* common methods for implementations of the DbSourceProxy interface.
*
*/
public abstract class DbSourceProxyImpl implements DbSourceProxy
{
- public DbSourceProxyImpl()
- {
- // default constructor - do nothing probably.
- }
- private Hashtable props = null;
-
- /*
- * (non-Javadoc)
- *
- * @see jalview.ws.DbSourceProxy#getDbSourceProperties()
- */
- public Hashtable getDbSourceProperties()
- {
- if (props == null)
- {
- props = new Hashtable();
- }
- return props;
- }
+ boolean queryInProgress = false;
- protected void addDbSourceProperty(Object propname)
- {
- addDbSourceProperty(propname, propname);
- }
+ protected StringBuffer results = null;
- protected void addDbSourceProperty(Object propname, Object propvalue)
+ public DbSourceProxyImpl()
{
- if (props == null)
- {
- props = new Hashtable();
- }
- props.put(propname, propvalue);
}
- boolean queryInProgress = false;
-
- protected StringBuffer results = null;
-
/*
* (non-Javadoc)
*
* @see jalview.ws.DbSourceProxy#getRawRecords()
*/
+ @Override
public StringBuffer getRawRecords()
{
return results;
*
* @see jalview.ws.DbSourceProxy#queryInProgress()
*/
+ @Override
public boolean queryInProgress()
{
return queryInProgress;
protected AlignmentI parseResult(String result) throws Exception
{
AlignmentI sequences = null;
- String format = new IdentifyFile().Identify(result, "Paste");
+ String format = new IdentifyFile().identify(result, "Paste");
if (FormatAdapter.isValidFormat(format))
{
sequences = new FormatAdapter().readFile(result.toString(), "Paste",
return sequences;
}
+ /**
+ * Returns the first accession id in the query (up to the first accession id
+ * separator), or the whole query if there is no separator or it is not found
+ */
@Override
- public boolean isA(Object dbsourceproperty)
+ public String getAccessionIdFromQuery(String query)
{
- assert (dbsourceproperty != null);
- return (props == null) ? false : props.containsKey(dbsourceproperty);
+ String sep = getAccessionSeparator();
+ if (sep == null)
+ {
+ return query;
+ }
+ int sepPos = query.indexOf(sep);
+ return sepPos == -1 ? query : query.substring(0, sepPos);
+ }
+
+ /**
+ * Default is only one accession id per query - override if more are allowed.
+ */
+ @Override
+ public int getMaximumQueryCount()
+ {
+ return 1;
+ }
+
+ /**
+ * Returns false - override to return true for DNA coding data sources
+ */
+ @Override
+ public boolean isDnaCoding()
+ {
+ return false;
}
+ /**
+ * Answers false - override as required in subclasses
+ */
+ @Override
+ public boolean isAlignmentSource()
+ {
+ return false;
+ }
+
+ @Override
+ public String getDescription()
+ {
+ return "";
+ }
+
+ @Override
+ public FeatureSettingsModelI getFeatureColourScheme()
+ {
+ return null;
+ }
}
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
import jalview.datamodel.SequenceI;
+import jalview.io.StructureFile;
import jalview.schemes.ResidueProperties;
import jalview.structure.StructureMapping;
import jalview.util.Format;
{
private Entry siftsEntry;
- private PDBfile pdb;
+ private StructureFile pdb;
private String pdbId;
* @param pdbId
* @throws SiftsException
*/
- public SiftsClient(PDBfile pdb) throws SiftsException
+ public SiftsClient(StructureFile pdb) throws SiftsException
{
this.pdb = pdb;
- this.pdbId = pdb.id;
+ this.pdbId = pdb.getId();
File siftsFile = getSiftsFile(pdbId);
siftsEntry = parseSIFTs(siftsFile);
}
public SiftsClient(PDBfile pdb, File siftsFile) throws SiftsException
{
this.pdb = pdb;
- this.pdbId = pdb.id;
+ this.pdbId = pdb.getId();
siftsEntry = parseSIFTs(siftsFile);
}
{
ArrayList<Integer> omitNonObserved = new ArrayList<Integer>();
int nonObservedShiftIndex = 0;
- System.out.println("Generating mappings for : " + entityId);
+ // System.out.println("Generating mappings for : " + entityId);
Entity entity = null;
entity = getEntityById(entityId);
String originalSeq = AlignSeq.extractGaps(
for (Segment segment : segments)
{
segStartEnd = segment.getStart() + " - " + segment.getEnd();
- System.out.println("Mappging segments : " + segment.getSegId() + "\\"
- + segStartEnd);
+ // System.out.println("Mapping segments : " + segment.getSegId() + "\\"
+ // + segStartEnd);
List<Residue> residues = segment.getListResidue().getResidue();
for (Residue residue : residues)
{
{
currSeqIndex = Integer.valueOf(resNumIndexString
.split("[a-zA-Z]")[0]);
+ continue;
}
if (pdbRefDb != null)
{
void populateAtomPositions(String chainId,
HashMap<Integer, int[]> mapping) throws IllegalArgumentException
{
- PDBChain chain = pdb.findChain(chainId);
- if (chain == null || mapping == null)
- {
- throw new IllegalArgumentException(
- "Chain id or mapping must not be null.");
- }
- for (int[] map : mapping.values())
+ try
{
- if (map[PDB_RES_POS] != UNASSIGNED)
+ PDBChain chain = pdb.findChain(chainId);
+
+ if (chain == null || mapping == null)
+ {
+ throw new IllegalArgumentException(
+ "Chain id or mapping must not be null.");
+ }
+ for (int[] map : mapping.values())
{
- map[PDB_ATOM_POS] = getAtomIndex(map[PDB_RES_POS], chain.atoms);
+ if (map[PDB_RES_POS] != UNASSIGNED)
+ {
+ map[PDB_ATOM_POS] = getAtomIndex(map[PDB_RES_POS], chain.atoms);
+ }
}
+ } catch (Exception e)
+ {
+ e.printStackTrace();
}
}
Arrays.sort(keys);
int firstIndex = keys[0];
int lastIndex = keys[keys.length - 1];
- System.out.println("Min value " + firstIndex);
- System.out.println("Max value " + lastIndex);
+ // System.out.println("Min value " + firstIndex);
+ // System.out.println("Max value " + lastIndex);
for (int x = firstIndex; x <= lastIndex; x++)
{
if (!resNumMap.containsKey(x) && !omitNonObserved.contains(x))
++count;
}
Arrays.sort(sPojo, Collections.reverseOrder());
- System.out.println("highest matched entity : " + sPojo[0].entityId);
- System.out.println("highest matched pid : " + sPojo[0].pid);
+ // System.out.println("highest matched entity : " + sPojo[0].entityId);
+ // System.out.println("highest matched pid : " + sPojo[0].pid);
if (sPojo[0].entityId != null)
{
// output mappings
StringBuffer output = new StringBuffer();
output.append(NEWLINE);
- output.append("Sequence ⟷ Structure mapping details").append(NEWLINE);
+ output.append("Sequence \u27f7 Structure mapping details").append(
+ NEWLINE);
output.append("Method: SIFTS");
output.append(NEWLINE).append(NEWLINE);
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-
-package jalview.ws.uimodel;
-
-import jalview.datamodel.SequenceI;
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
-
-import java.util.Collection;
-import java.util.Objects;
-
-import javax.swing.table.DefaultTableModel;
-
-import org.json.simple.JSONObject;
-
-/**
- * Represents the response model produced by the PDBRestClient upon successful
- * execution of a given request
- *
- * @author tcnofoegbu
- *
- */
-public class PDBRestResponse
-{
- private int numberOfItemsFound;
-
- private String responseTime;
-
- private Collection<PDBResponseSummary> searchSummary;
-
- public int getNumberOfItemsFound()
- {
- return numberOfItemsFound;
- }
-
- public void setNumberOfItemsFound(int itemFound)
- {
- this.numberOfItemsFound = itemFound;
- }
-
- public String getResponseTime()
- {
- return responseTime;
- }
-
- public void setResponseTime(String responseTime)
- {
- this.responseTime = responseTime;
- }
-
- public Collection<PDBResponseSummary> getSearchSummary()
- {
- return searchSummary;
- }
-
- public void setSearchSummary(Collection<PDBResponseSummary> searchSummary)
- {
- this.searchSummary = searchSummary;
- }
-
- /**
- * Convenience method to obtain a Table model for a given summary List based
- * on the request parameters
- *
- * @param request
- * the PDBRestRequest object which holds useful information for
- * creating a table model
- * @param summariesList
- * the summary list which contains the data for populating the
- * table's rows
- * @return the table model which was dynamically generated
- */
- public static DefaultTableModel getTableModel(PDBRestRequest request,
- Collection<PDBResponseSummary> summariesList)
- {
- DefaultTableModel tableModel = new DefaultTableModel()
- {
- @Override
- public boolean isCellEditable(int row, int column)
- {
- return false;
- }
- };
- if (request.getAssociatedSequence() != null)
- {
- tableModel.addColumn("Ref Sequence"); // Create sequence column header if
- // exists in the request
- }
- for (PDBDocField field : request.getWantedFields())
- {
- tableModel.addColumn(field.getName()); // Create sequence column header if
- // exists in the request
- }
-
- for (PDBResponseSummary res : summariesList)
- {
- tableModel.addRow(res.getSummaryData()); // Populate table rows with
- // summary list
- }
-
- return tableModel;
- }
-
- /**
- * Model for a unique response summary
- *
- */
- public class PDBResponseSummary
- {
- private String pdbId;
-
- private Object[] summaryRowData;
-
- private SequenceI associatedSequence;
-
- public PDBResponseSummary(JSONObject pdbJsonDoc, PDBRestRequest request)
- {
- Collection<PDBDocField> diplayFields = request.getWantedFields();
- SequenceI associatedSeq = request.getAssociatedSequence();
- int colCounter = 0;
- summaryRowData = new Object[(associatedSeq != null) ? diplayFields
- .size() + 1 : diplayFields.size()];
- if (associatedSeq != null)
- {
- this.associatedSequence = associatedSeq;
- summaryRowData[0] = associatedSequence;
- colCounter = 1;
- }
-
- for (PDBDocField field : diplayFields)
- {
- String fieldData = (pdbJsonDoc.get(field.getCode()) == null) ? ""
- : pdbJsonDoc.get(field.getCode()).toString();
- if (field.equals(PDBDocField.PDB_ID))
- {
- this.pdbId = fieldData;
- summaryRowData[colCounter++] = this.pdbId;
- }
- else
- {
- summaryRowData[colCounter++] = fieldData;
- }
- }
- }
-
- public String getPdbId()
- {
- return pdbId;
- }
-
- public void setPdbId(String pdbId)
- {
- this.pdbId = pdbId;
- }
-
- public Object[] getSummaryData()
- {
- return summaryRowData;
- }
-
- public void setSummaryData(String[] summaryData)
- {
- this.summaryRowData = summaryData;
- }
-
- /**
- * Returns a string representation of this object;
- */
- @Override
- public String toString()
- {
- StringBuilder summaryFieldValues = new StringBuilder();
- for (Object summaryField : summaryRowData)
- {
- summaryFieldValues.append(summaryField.toString()).append("\t");
- }
- return summaryFieldValues.toString();
- }
-
- /**
- * Returns hash code value for this object
- */
- @Override
- public int hashCode()
- {
- return Objects.hash(this.pdbId, this.toString());
- }
-
- /**
- * Indicates whether some object is equal to this one
- */
- @Override
- public boolean equals(Object that)
- {
- if (!(that instanceof PDBResponseSummary))
- {
- return false;
- }
- PDBResponseSummary another = (PDBResponseSummary) that;
- return this.toString().equals(another.toString());
- }
-
- }
-
-}
import jalview.datamodel.SequenceI;
import jalview.schemes.ColourSchemeI;
import jalview.schemes.TaylorColourScheme;
+import jalview.structure.StructureViewSettings;
import java.awt.Color;
import java.util.Vector;
public void setUp()
{
System.out.println("setup");
+ StructureViewSettings.setShowSeqFeatures(true);
c = new PDBChain("1GAQ", "A");
}
PDBfile pf = new PDBfile(false, false, false, "examples/3W5V.pdb",
AppletFormatAdapter.FILE);
- assertEquals("3W5V", pf.id);
+ assertEquals("3W5V", pf.getId());
// verify no alignment annotations created
assertNull(getAlignmentAnnotations(pf));
- assertEquals(4, pf.chains.size());
- assertEquals("A", pf.chains.get(0).id);
- assertEquals("B", pf.chains.get(1).id);
- assertEquals("C", pf.chains.get(2).id);
- assertEquals("D", pf.chains.get(3).id);
+ assertEquals(4, pf.getChains().size());
+ assertEquals("A", pf.getChains().get(0).id);
+ assertEquals("B", pf.getChains().get(1).id);
+ assertEquals("C", pf.getChains().get(2).id);
+ assertEquals("D", pf.getChains().get(3).id);
+
+ PDBChain chainA = pf.getChains().get(0);
+ SequenceI seqA = pf.getSeqs().get(0);
- PDBChain chainA = pf.chains.get(0);
assertEquals(0, chainA.seqstart); // not set
assertEquals(0, chainA.seqend); // not set
assertEquals(18, chainA.sequence.getStart());
assertTrue(chainA.sequence.getSequenceAsString().endsWith("WNVEVY"));
assertEquals("3W5V|A", chainA.sequence.getName());
assertNull(chainA.sequence.getAnnotation());
- assertEquals(1, chainA.sequence.getAllPDBEntries().size());
- PDBEntry pdb = chainA.sequence.getAllPDBEntries().get(0);
+ assertEquals(1, seqA.getAllPDBEntries().size());
+ PDBEntry pdb = seqA.getAllPDBEntries().get(0);
assertEquals("A", pdb.getChainCode());
assertEquals("PDB", pdb.getType());
assertEquals("3W5V", pdb.getId());
- PDBChain chainB = pf.chains.get(1);
+ PDBChain chainB = pf.getChains().get(1);
assertEquals(1, chainB.sequence.getStart());
assertEquals(96, chainB.sequence.getEnd());
assertTrue(chainB.sequence.getSequenceAsString().startsWith("ATYNVK"));
assertTrue(chainB.sequence.getSequenceAsString().endsWith("KEEELT"));
assertEquals("3W5V|B", chainB.sequence.getName());
- PDBChain chainC = pf.chains.get(2);
+ PDBChain chainC = pf.getChains().get(2);
assertEquals(18, chainC.sequence.getStart());
assertEquals(314, chainC.sequence.getEnd());
assertTrue(chainC.sequence.getSequenceAsString().startsWith("KCSKKQEE"));
assertTrue(chainC.sequence.getSequenceAsString().endsWith("WNVEVY"));
assertEquals("3W5V|C", chainC.sequence.getName());
- PDBChain chainD = pf.chains.get(3);
+ PDBChain chainD = pf.getChains().get(3);
assertEquals(1, chainD.sequence.getStart());
assertEquals(96, chainD.sequence.getEnd());
assertTrue(chainD.sequence.getSequenceAsString().startsWith("ATYNVK"));
* no sequence annotations created - tempFactor annotation is not added
* unless the flag to 'addAlignmentAnnotations' is set true
*/
- for (PDBChain c : pf.chains)
+ for (PDBChain c : pf.getChains())
{
assertNull(c.sequence.getAnnotation());
}
/*
* PDBFileWithJmol (unlike PDBChain!) leaves PDB id upper case
*/
- assertEquals("Secondary Structure for 3W5VA", anns[0].description);
- assertEquals("Secondary Structure for 3W5VB", anns[2].description);
- assertEquals("Secondary Structure for 3W5VC", anns[4].description);
- assertEquals("Secondary Structure for 3W5VD", anns[6].description);
+ assertEquals("Secondary Structure for 3w5vA", anns[0].description);
+ assertEquals("Secondary Structure for 3w5vB", anns[2].description);
+ assertEquals("Secondary Structure for 3w5vC", anns[4].description);
+ assertEquals("Secondary Structure for 3w5vD", anns[6].description);
/*
* Verify SS annotations are linked to respective sequences (chains)
import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
+import jalview.analysis.AlignmentUtils.DnaVariant;
import jalview.datamodel.AlignedCodonFrame;
import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.SearchResults;
import jalview.datamodel.SearchResults.Match;
import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
import jalview.io.AppletFormatAdapter;
import jalview.io.FormatAdapter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedHashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
+import java.util.TreeMap;
import org.testng.annotations.Test;
public class AlignmentUtilsTests
{
- // @formatter:off
- private static final String TEST_DATA =
- "# STOCKHOLM 1.0\n" +
- "#=GS D.melanogaster.1 AC AY119185.1/838-902\n" +
- "#=GS D.melanogaster.2 AC AC092237.1/57223-57161\n" +
- "#=GS D.melanogaster.3 AC AY060611.1/560-627\n" +
- "D.melanogaster.1 G.AGCC.CU...AUGAUCGA\n" +
- "#=GR D.melanogaster.1 SS ................((((\n" +
- "D.melanogaster.2 C.AUUCAACU.UAUGAGGAU\n" +
- "#=GR D.melanogaster.2 SS ................((((\n" +
- "D.melanogaster.3 G.UGGCGCU..UAUGACGCA\n" +
- "#=GR D.melanogaster.3 SS (.(((...(....(((((((\n" +
- "//";
-
- private static final String AA_SEQS_1 =
- ">Seq1Name\n" +
- "K-QY--L\n" +
- ">Seq2Name\n" +
- "-R-FP-W-\n";
-
- private static final String CDNA_SEQS_1 =
- ">Seq1Name\n" +
- "AC-GG--CUC-CAA-CT\n" +
- ">Seq2Name\n" +
- "-CG-TTA--ACG---AAGT\n";
-
- private static final String CDNA_SEQS_2 =
- ">Seq1Name\n" +
- "GCTCGUCGTACT\n" +
- ">Seq2Name\n" +
- "GGGTCAGGCAGT\n";
- // @formatter:on
-
- // public static Sequence ts=new
- // Sequence("short","ASDASDASDASDASDASDASDASDASDASDASDASDASD");
public static Sequence ts = new Sequence("short",
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm");
* region). The leading gap, and the gaps between codons, are subsumed by
* the protein alignment gap.
*/
- checkAlignSequenceAs("-G-GG--AA-A-", "-A-L-", true, true, map,
- "---G-GG---AA-A-");
+ checkAlignSequenceAs("-G-GG--AA-A---", "-A-L-", true, true, map,
+ "---G-GG---AA-A---");
/*
* Include only unmapped gaps in dna when realigning (outside the exon
* the protein alignment gap.
*/
checkAlignSequenceAs("-G-GG--AA-A-", "-A-L-", false, true, map,
- "---GGG---AAA-");
+ "---GGG---AAA---");
}
/**
@Test(groups = { "Functional" })
public void testAlignSequenceAs_withMapping_withUnmappedProtein()
{
-
/*
* Exons at codon 2 (AAA) and 4 (TTT) mapped to A and P
*/
1, 1, 3, 3 }, 3, 1);
/*
- * Expect alignment does nothing (aborts realignment). Change this test
- * first if different behaviour wanted.
+ * -L- 'aligns' ccc------
*/
- checkAlignSequenceAs("GGGAAACCCTTTGGG", "-A-L-P-", false, false, map,
- "GGGAAACCCTTTGGG");
+ checkAlignSequenceAs("gggAAAcccTTTggg", "-A-L-P-", false, false, map,
+ "gggAAAccc------TTTggg");
}
/**
* Helper method that performs and verifies the method under test.
*
- * @param dnaSeq
- * @param proteinSeq
+ * @param alignee
+ * the sequence to be realigned
+ * @param alignModel
+ * the sequence whose alignment is to be copied
* @param preserveMappedGaps
* @param preserveUnmappedGaps
* @param map
* @param expected
*/
- protected void checkAlignSequenceAs(final String dnaSeq,
- final String proteinSeq, final boolean preserveMappedGaps,
+ protected void checkAlignSequenceAs(final String alignee,
+ final String alignModel, final boolean preserveMappedGaps,
final boolean preserveUnmappedGaps, MapList map,
final String expected)
{
- SequenceI dna = new Sequence("Seq1", dnaSeq);
- dna.createDatasetSequence();
- SequenceI protein = new Sequence("Seq1", proteinSeq);
- protein.createDatasetSequence();
+ SequenceI alignMe = new Sequence("Seq1", alignee);
+ alignMe.createDatasetSequence();
+ SequenceI alignFrom = new Sequence("Seq2", alignModel);
+ alignFrom.createDatasetSequence();
AlignedCodonFrame acf = new AlignedCodonFrame();
- acf.addMap(dna.getDatasetSequence(), protein.getDatasetSequence(), map);
+ acf.addMap(alignMe.getDatasetSequence(), alignFrom.getDatasetSequence(), map);
- AlignmentUtils.alignSequenceAs(dna, protein, acf, "---", '-',
+ AlignmentUtils.alignSequenceAs(alignMe, alignFrom, acf, "---", '-',
preserveMappedGaps, preserveUnmappedGaps);
- assertEquals(expected, dna.getSequenceAsString());
+ assertEquals(expected, alignMe.getSequenceAsString());
}
/**
}
/**
- * Test for the method that generates an aligned translated sequence from one
- * mapping.
- */
- @Test(groups = { "Functional" })
- public void testGetAlignedTranslation_dnaLikeProtein()
- {
- // dna alignment will be replaced
- SequenceI dna = new Sequence("Seq1", "T-G-CC-A--T-TAC-CAG-");
- dna.createDatasetSequence();
- // protein alignment will be 'applied' to dna
- SequenceI protein = new Sequence("Seq1", "-CH-Y--Q-");
- protein.createDatasetSequence();
- MapList map = new MapList(new int[] { 1, 12 }, new int[] { 1, 4 }, 3, 1);
- AlignedCodonFrame acf = new AlignedCodonFrame();
- acf.addMap(dna.getDatasetSequence(), protein.getDatasetSequence(), map);
-
- final SequenceI aligned = AlignmentUtils.getAlignedTranslation(protein,
- '-', acf);
- assertEquals("---TGCCAT---TAC------CAG---",
- aligned.getSequenceAsString());
- assertSame(aligned.getDatasetSequence(), dna.getDatasetSequence());
- }
-
- /**
* Test the method that realigns protein to match mapped codon alignment.
*/
@Test(groups = { "Functional" })
acf.addMap(dna1.getDatasetSequence(), prot1.getDatasetSequence(), map);
acf.addMap(dna2.getDatasetSequence(), prot2.getDatasetSequence(), map);
acf.addMap(dna3.getDatasetSequence(), prot3.getDatasetSequence(), map);
- protein.setCodonFrames(Collections.singleton(acf));
+ ArrayList<AlignedCodonFrame> acfs = new ArrayList<AlignedCodonFrame>();
+ acfs.add(acf);
+ protein.setCodonFrames(acfs);
/*
* Translated codon order is [1,2,3] [1,3,4] [4,5,6] [4,5,7] [5,6,7] [7,8,9]
@Test(groups = { "Functional" })
public void testTranslatesAs()
{
+ // null arguments check
+ assertFalse(AlignmentUtils.translatesAs(null, 0, null));
+ assertFalse(AlignmentUtils.translatesAs(new char[] { 't' }, 0, null));
+ assertFalse(AlignmentUtils.translatesAs(null, 0, new char[] { 'a' }));
+
+ // straight translation
assertTrue(AlignmentUtils.translatesAs("tttcccaaaggg".toCharArray(), 0,
"FPKG".toCharArray()));
- // with start codon (not in protein)
+ // with extra start codon (not in protein)
assertTrue(AlignmentUtils.translatesAs("atgtttcccaaaggg".toCharArray(),
3, "FPKG".toCharArray()));
// with stop codon1 (not in protein)
assertTrue(AlignmentUtils.translatesAs(
"atgtttcccaaagggtga".toCharArray(), 3, "FPKG".toCharArray()));
- // with embedded stop codon
+ // with embedded stop codons
assertTrue(AlignmentUtils.translatesAs(
"atgtttTAGcccaaaTAAgggtga".toCharArray(), 3,
"F*PK*G".toCharArray()));
// wrong protein
assertFalse(AlignmentUtils.translatesAs("tttcccaaaggg".toCharArray(),
0, "FPMG".toCharArray()));
+
+ // truncated dna
+ assertFalse(AlignmentUtils.translatesAs("tttcccaaagg".toCharArray(), 0,
+ "FPKG".toCharArray()));
+
+ // truncated protein
+ assertFalse(AlignmentUtils.translatesAs("tttcccaaaggg".toCharArray(),
+ 0, "FPK".toCharArray()));
+
+ // overlong dna (doesn't end in stop codon)
+ assertFalse(AlignmentUtils.translatesAs(
+ "tttcccaaagggttt".toCharArray(), 0, "FPKG".toCharArray()));
+
+ // dna + stop codon + more
+ assertFalse(AlignmentUtils.translatesAs(
+ "tttcccaaagggttaga".toCharArray(), 0, "FPKG".toCharArray()));
+
+ // overlong protein
+ assertFalse(AlignmentUtils.translatesAs("tttcccaaaggg".toCharArray(),
+ 0, "FPKGQ".toCharArray()));
}
/**
}
/**
- * Test the method that extracts the exon-only part of a dna alignment.
+ * Test the method that extracts the cds-only part of a dna alignment.
*/
@Test(groups = { "Functional" })
- public void testMakeExonAlignment()
+ public void testMakeCdsAlignment()
{
SequenceI dna1 = new Sequence("dna1", "aaaGGGcccTTTaaa");
SequenceI dna2 = new Sequence("dna2", "GGGcccTTTaaaCCC");
dna2.createDatasetSequence();
pep1.createDatasetSequence();
pep2.createDatasetSequence();
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds1", 4, 6, 0f,
+ null));
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds2", 10, 12, 0f,
+ null));
+ dna2.addSequenceFeature(new SequenceFeature("CDS", "cds3", 1, 3, 0f,
+ null));
+ dna2.addSequenceFeature(new SequenceFeature("CDS", "cds4", 7, 9, 0f,
+ null));
+ dna2.addSequenceFeature(new SequenceFeature("CDS", "cds5", 13, 15, 0f,
+ null));
+ AlignmentI dna = new Alignment(new SequenceI[] { dna1, dna2 });
+ dna.setDataset(null);
- Set<AlignedCodonFrame> mappings = new HashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings = new ArrayList<AlignedCodonFrame>();
MapList map = new MapList(new int[] { 4, 6, 10, 12 },
new int[] { 1, 2 }, 3, 1);
AlignedCodonFrame acf = new AlignedCodonFrame();
acf.addMap(dna2.getDatasetSequence(), pep2.getDatasetSequence(), map);
mappings.add(acf);
- AlignmentI exons = AlignmentUtils.makeExonAlignment(new SequenceI[] {
- dna1, dna2 }, mappings);
- assertEquals(2, exons.getSequences().size());
- assertEquals("GGGTTT", exons.getSequenceAt(0).getSequenceAsString());
- assertEquals("GGGTTTCCC", exons.getSequenceAt(1).getSequenceAsString());
+ /*
+ * execute method under test:
+ */
+ AlignmentI cds = AlignmentUtils.makeCdsAlignment(new SequenceI[] {
+ dna1, dna2 }, mappings, dna);
+
+ assertEquals(2, cds.getSequences().size());
+ assertEquals("GGGTTT", cds.getSequenceAt(0)
+ .getSequenceAsString());
+ assertEquals("GGGTTTCCC", cds.getSequenceAt(1)
+ .getSequenceAsString());
/*
- * Verify updated mappings
+ * verify shared, extended alignment dataset
*/
- assertEquals(2, mappings.size());
+ assertSame(dna.getDataset(), cds.getDataset());
+ assertTrue(dna.getDataset().getSequences()
+ .contains(cds.getSequenceAt(0).getDatasetSequence()));
+ assertTrue(dna.getDataset().getSequences()
+ .contains(cds.getSequenceAt(1).getDatasetSequence()));
/*
+ * Verify mappings from CDS to peptide and cDNA to CDS
+ * the mappings are on the shared alignment dataset
+ */
+ assertSame(dna.getCodonFrames(), cds.getCodonFrames());
+ List<AlignedCodonFrame> cdsMappings = cds.getCodonFrames();
+ assertEquals(2, cdsMappings.size());
+
+ /*
* Mapping from pep1 to GGGTTT in first new exon sequence
*/
List<AlignedCodonFrame> pep1Mapping = MappingUtils
- .findMappingsForSequence(pep1, mappings);
+ .findMappingsForSequence(pep1, cdsMappings);
assertEquals(1, pep1Mapping.size());
// map G to GGG
- SearchResults sr = MappingUtils.buildSearchResults(pep1, 1, mappings);
+ SearchResults sr = MappingUtils
+ .buildSearchResults(pep1, 1, cdsMappings);
assertEquals(1, sr.getResults().size());
Match m = sr.getResults().get(0);
- assertEquals(exons.getSequenceAt(0).getDatasetSequence(),
+ assertSame(cds.getSequenceAt(0).getDatasetSequence(),
m.getSequence());
assertEquals(1, m.getStart());
assertEquals(3, m.getEnd());
// map F to TTT
- sr = MappingUtils.buildSearchResults(pep1, 2, mappings);
+ sr = MappingUtils.buildSearchResults(pep1, 2, cdsMappings);
m = sr.getResults().get(0);
- assertEquals(exons.getSequenceAt(0).getDatasetSequence(),
+ assertSame(cds.getSequenceAt(0).getDatasetSequence(),
m.getSequence());
assertEquals(4, m.getStart());
assertEquals(6, m.getEnd());
* Mapping from pep2 to GGGTTTCCC in second new exon sequence
*/
List<AlignedCodonFrame> pep2Mapping = MappingUtils
- .findMappingsForSequence(pep2, mappings);
+ .findMappingsForSequence(pep2, cdsMappings);
assertEquals(1, pep2Mapping.size());
// map G to GGG
- sr = MappingUtils.buildSearchResults(pep2, 1, mappings);
+ sr = MappingUtils.buildSearchResults(pep2, 1, cdsMappings);
assertEquals(1, sr.getResults().size());
m = sr.getResults().get(0);
- assertEquals(exons.getSequenceAt(1).getDatasetSequence(),
+ assertSame(cds.getSequenceAt(1).getDatasetSequence(),
m.getSequence());
assertEquals(1, m.getStart());
assertEquals(3, m.getEnd());
// map F to TTT
- sr = MappingUtils.buildSearchResults(pep2, 2, mappings);
+ sr = MappingUtils.buildSearchResults(pep2, 2, cdsMappings);
m = sr.getResults().get(0);
- assertEquals(exons.getSequenceAt(1).getDatasetSequence(),
+ assertSame(cds.getSequenceAt(1).getDatasetSequence(),
m.getSequence());
assertEquals(4, m.getStart());
assertEquals(6, m.getEnd());
// map P to CCC
- sr = MappingUtils.buildSearchResults(pep2, 3, mappings);
+ sr = MappingUtils.buildSearchResults(pep2, 3, cdsMappings);
m = sr.getResults().get(0);
- assertEquals(exons.getSequenceAt(1).getDatasetSequence(),
+ assertSame(cds.getSequenceAt(1).getDatasetSequence(),
m.getSequence());
assertEquals(7, m.getStart());
assertEquals(9, m.getEnd());
}
/**
- * Test the method that makes an exon-only sequence from a DNA sequence and
- * its product mapping. Test includes the expected case that the DNA sequence
- * already has a protein product (Uniprot translation) which in turn has an
- * x-ref to the EMBLCDS record.
+ * Test the method that makes a cds-only alignment from a DNA sequence and its
+ * product mappings, for the case where there are multiple exon mappings to
+ * different protein products.
*/
@Test(groups = { "Functional" })
- public void testMakeExonSequences()
- {
- SequenceI dna1 = new Sequence("dna1", "aaaGGGcccTTTaaa");
- SequenceI pep1 = new Sequence("pep1", "GF");
- dna1.createDatasetSequence();
- pep1.createDatasetSequence();
- pep1.getDatasetSequence().addDBRef(
- new DBRefEntry("EMBLCDS", "2", "A12345"));
-
- /*
- * Make the mapping from dna to protein. The protein sequence has a DBRef to
- * EMBLCDS|A12345.
- */
- Set<AlignedCodonFrame> mappings = new HashSet<AlignedCodonFrame>();
- MapList map = new MapList(new int[] { 4, 6, 10, 12 },
- new int[] { 1, 2 }, 3, 1);
- AlignedCodonFrame acf = new AlignedCodonFrame();
- acf.addMap(dna1.getDatasetSequence(), pep1.getDatasetSequence(), map);
- mappings.add(acf);
-
- AlignedCodonFrame newMapping = new AlignedCodonFrame();
- List<SequenceI> exons = AlignmentUtils.makeExonSequences(dna1, acf,
- newMapping);
- assertEquals(1, exons.size());
- SequenceI exon = exons.get(0);
-
- assertEquals("GGGTTT", exon.getSequenceAsString());
- assertEquals("dna1|A12345", exon.getName());
- assertEquals(1, exon.getDBRefs().length);
- DBRefEntry cdsRef = exon.getDBRefs()[0];
- assertEquals("EMBLCDS", cdsRef.getSource());
- assertEquals("2", cdsRef.getVersion());
- assertEquals("A12345", cdsRef.getAccessionId());
- }
-
- /**
- * Test the method that makes an exon-only alignment from a DNA sequence and
- * its product mappings, for the case where there are multiple exon mappings
- * to different protein products.
- */
- @Test(groups = { "Functional" })
- public void testMakeExonAlignment_multipleProteins()
+ public void testMakeCdsAlignment_multipleProteins()
{
SequenceI dna1 = new Sequence("dna1", "aaaGGGcccTTTaaa");
SequenceI pep1 = new Sequence("pep1", "GF"); // GGGTTT
pep1.createDatasetSequence();
pep2.createDatasetSequence();
pep3.createDatasetSequence();
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds1", 4, 6, 0f,
+ null));
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds2", 10, 12, 0f,
+ null));
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds3", 1, 3, 0f,
+ null));
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds4", 7, 9, 0f,
+ null));
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds5", 1, 3, 0f,
+ null));
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds6", 10, 12, 0f,
+ null));
pep1.getDatasetSequence().addDBRef(
new DBRefEntry("EMBLCDS", "2", "A12345"));
pep2.getDatasetSequence().addDBRef(
new DBRefEntry("EMBLCDS", "4", "A12347"));
/*
- * Make the mappings from dna to protein. Using LinkedHashset is a
- * convenience so results are in the input order. There is no assertion that
- * the generated exon sequences are in any particular order.
+ * Make the mappings from dna to protein
*/
- Set<AlignedCodonFrame> mappings = new LinkedHashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings = new ArrayList<AlignedCodonFrame>();
// map ...GGG...TTT to GF
MapList map = new MapList(new int[] { 4, 6, 10, 12 },
new int[] { 1, 2 }, 3, 1);
mappings.add(acf);
/*
- * Create the Exon alignment; also replaces the dna-to-protein mappings with
+ * Create the CDS alignment; also augments the dna-to-protein mappings with
* exon-to-protein and exon-to-dna mappings
*/
- AlignmentI exal = AlignmentUtils.makeExonAlignment(
- new SequenceI[] { dna1 }, mappings);
+ AlignmentI dna = new Alignment(new SequenceI[] { dna1 });
+ dna.setDataset(null);
/*
- * Verify we have 3 exon sequences, mapped to pep1/2/3 respectively
+ * execute method under test
*/
- List<SequenceI> exons = exal.getSequences();
- assertEquals(3, exons.size());
+ AlignmentI cdsal = AlignmentUtils.makeCdsAlignment(
+ new SequenceI[] { dna1 }, mappings, dna);
- SequenceI exon = exons.get(0);
- assertEquals("GGGTTT", exon.getSequenceAsString());
- assertEquals("dna1|A12345", exon.getName());
- assertEquals(1, exon.getDBRefs().length);
- DBRefEntry cdsRef = exon.getDBRefs()[0];
- assertEquals("EMBLCDS", cdsRef.getSource());
- assertEquals("2", cdsRef.getVersion());
- assertEquals("A12345", cdsRef.getAccessionId());
+ /*
+ * Verify we have 3 cds sequences, mapped to pep1/2/3 respectively
+ */
+ List<SequenceI> cds = cdsal.getSequences();
+ assertEquals(3, cds.size());
- exon = exons.get(1);
- assertEquals("aaaccc", exon.getSequenceAsString());
- assertEquals("dna1|A12346", exon.getName());
- assertEquals(1, exon.getDBRefs().length);
- cdsRef = exon.getDBRefs()[0];
- assertEquals("EMBLCDS", cdsRef.getSource());
- assertEquals("3", cdsRef.getVersion());
- assertEquals("A12346", cdsRef.getAccessionId());
+ /*
+ * verify shared, extended alignment dataset
+ */
+ assertSame(cdsal.getDataset(), dna.getDataset());
+ assertTrue(dna.getDataset().getSequences()
+ .contains(cds.get(0).getDatasetSequence()));
+ assertTrue(dna.getDataset().getSequences()
+ .contains(cds.get(1).getDatasetSequence()));
+ assertTrue(dna.getDataset().getSequences()
+ .contains(cds.get(2).getDatasetSequence()));
- exon = exons.get(2);
- assertEquals("aaaTTT", exon.getSequenceAsString());
- assertEquals("dna1|A12347", exon.getName());
- assertEquals(1, exon.getDBRefs().length);
- cdsRef = exon.getDBRefs()[0];
- assertEquals("EMBLCDS", cdsRef.getSource());
- assertEquals("4", cdsRef.getVersion());
- assertEquals("A12347", cdsRef.getAccessionId());
+ /*
+ * verify aligned cds sequences and their xrefs
+ */
+ SequenceI cdsSeq = cds.get(0);
+ assertEquals("GGGTTT", cdsSeq.getSequenceAsString());
+ // assertEquals("dna1|A12345", cdsSeq.getName());
+ assertEquals("dna1|pep1", cdsSeq.getName());
+ // assertEquals(1, cdsSeq.getDBRefs().length);
+ // DBRefEntry cdsRef = cdsSeq.getDBRefs()[0];
+ // assertEquals("EMBLCDS", cdsRef.getSource());
+ // assertEquals("2", cdsRef.getVersion());
+ // assertEquals("A12345", cdsRef.getAccessionId());
+
+ cdsSeq = cds.get(1);
+ assertEquals("aaaccc", cdsSeq.getSequenceAsString());
+ // assertEquals("dna1|A12346", cdsSeq.getName());
+ assertEquals("dna1|pep2", cdsSeq.getName());
+ // assertEquals(1, cdsSeq.getDBRefs().length);
+ // cdsRef = cdsSeq.getDBRefs()[0];
+ // assertEquals("EMBLCDS", cdsRef.getSource());
+ // assertEquals("3", cdsRef.getVersion());
+ // assertEquals("A12346", cdsRef.getAccessionId());
+
+ cdsSeq = cds.get(2);
+ assertEquals("aaaTTT", cdsSeq.getSequenceAsString());
+ // assertEquals("dna1|A12347", cdsSeq.getName());
+ assertEquals("dna1|pep3", cdsSeq.getName());
+ // assertEquals(1, cdsSeq.getDBRefs().length);
+ // cdsRef = cdsSeq.getDBRefs()[0];
+ // assertEquals("EMBLCDS", cdsRef.getSource());
+ // assertEquals("4", cdsRef.getVersion());
+ // assertEquals("A12347", cdsRef.getAccessionId());
/*
- * Verify there are mappings from each exon sequence to its protein product
+ * Verify there are mappings from each cds sequence to its protein product
* and also to its dna source
*/
- Iterator<AlignedCodonFrame> newMappingsIterator = mappings.iterator();
+ Iterator<AlignedCodonFrame> newMappingsIterator = cdsal
+ .getCodonFrames().iterator();
// mappings for dna1 - exon1 - pep1
- AlignedCodonFrame exonMapping = newMappingsIterator.next();
- List<Mapping> dnaMappings = exonMapping.getMappingsForSequence(dna1);
- assertEquals(1, dnaMappings.size());
- assertSame(exons.get(0).getDatasetSequence(), dnaMappings.get(0)
+ AlignedCodonFrame cdsMapping = newMappingsIterator.next();
+ List<Mapping> dnaMappings = cdsMapping.getMappingsFromSequence(dna1);
+ assertEquals(3, dnaMappings.size());
+ assertSame(cds.get(0).getDatasetSequence(), dnaMappings.get(0)
.getTo());
assertEquals("G(1) in CDS should map to G(4) in DNA", 4, dnaMappings
.get(0).getMap().getToPosition(1));
- List<Mapping> peptideMappings = exonMapping
- .getMappingsForSequence(pep1);
+ List<Mapping> peptideMappings = cdsMapping.getMappingsFromSequence(cds
+ .get(0).getDatasetSequence());
assertEquals(1, peptideMappings.size());
assertSame(pep1.getDatasetSequence(), peptideMappings.get(0).getTo());
- // mappings for dna1 - exon2 - pep2
- exonMapping = newMappingsIterator.next();
- dnaMappings = exonMapping.getMappingsForSequence(dna1);
- assertEquals(1, dnaMappings.size());
- assertSame(exons.get(1).getDatasetSequence(), dnaMappings.get(0)
+ // mappings for dna1 - cds2 - pep2
+ assertSame(cds.get(1).getDatasetSequence(), dnaMappings.get(1)
.getTo());
assertEquals("c(4) in CDS should map to c(7) in DNA", 7, dnaMappings
- .get(0).getMap().getToPosition(4));
- peptideMappings = exonMapping.getMappingsForSequence(pep2);
+ .get(1).getMap().getToPosition(4));
+ peptideMappings = cdsMapping.getMappingsFromSequence(cds.get(1)
+ .getDatasetSequence());
assertEquals(1, peptideMappings.size());
assertSame(pep2.getDatasetSequence(), peptideMappings.get(0).getTo());
- // mappings for dna1 - exon3 - pep3
- exonMapping = newMappingsIterator.next();
- dnaMappings = exonMapping.getMappingsForSequence(dna1);
- assertEquals(1, dnaMappings.size());
- assertSame(exons.get(2).getDatasetSequence(), dnaMappings.get(0)
+ // mappings for dna1 - cds3 - pep3
+ assertSame(cds.get(2).getDatasetSequence(), dnaMappings.get(2)
.getTo());
assertEquals("T(4) in CDS should map to T(10) in DNA", 10, dnaMappings
- .get(0).getMap().getToPosition(4));
- peptideMappings = exonMapping.getMappingsForSequence(pep3);
+ .get(2).getMap().getToPosition(4));
+ peptideMappings = cdsMapping.getMappingsFromSequence(cds.get(2)
+ .getDatasetSequence());
assertEquals(1, peptideMappings.size());
assertSame(pep3.getDatasetSequence(), peptideMappings.get(0).getTo());
}
* @throws IOException
*/
@Test(groups = { "Functional" })
- public void testMapProteinSequenceToCdna_forSubsequence()
+ public void testMapCdnaToProtein_forSubsequence()
throws IOException
{
SequenceI prot = new Sequence("UNIPROT|V12345", "E-I--Q", 10, 12);
SequenceI dna = new Sequence("EMBL|A33333", "GAA--AT-C-CAG", 40, 48);
dna.createDatasetSequence();
- MapList map = AlignmentUtils.mapProteinSequenceToCdna(prot, dna);
+ MapList map = AlignmentUtils.mapCdnaToProtein(prot, dna);
assertEquals(10, map.getToLowest());
assertEquals(12, map.getToHighest());
assertEquals(40, map.getFromLowest());
assertEquals(48, map.getFromHighest());
}
+
+ /**
+ * Test for the alignSequenceAs method where we have protein mapped to protein
+ */
+ @Test(groups = { "Functional" })
+ public void testAlignSequenceAs_mappedProteinProtein()
+ {
+
+ SequenceI alignMe = new Sequence("Match", "MGAASEV");
+ alignMe.createDatasetSequence();
+ SequenceI alignFrom = new Sequence("Query", "LQTGYMGAASEVMFSPTRR");
+ alignFrom.createDatasetSequence();
+
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ // this is like a domain or motif match of part of a peptide sequence
+ MapList map = new MapList(new int[] { 6, 12 }, new int[] { 1, 7 }, 1, 1);
+ acf.addMap(alignFrom.getDatasetSequence(),
+ alignMe.getDatasetSequence(), map);
+
+ AlignmentUtils.alignSequenceAs(alignMe, alignFrom, acf, "-", '-', true,
+ true);
+ assertEquals("-----MGAASEV-------", alignMe.getSequenceAsString());
+ }
+
+ /**
+ * Test for the alignSequenceAs method where there are trailing unmapped
+ * residues in the model sequence
+ */
+ @Test(groups = { "Functional" })
+ public void testAlignSequenceAs_withTrailingPeptide()
+ {
+ // map first 3 codons to KPF; G is a trailing unmapped residue
+ MapList map = new MapList(new int[] { 1, 9 }, new int[] { 1, 3 }, 3, 1);
+
+ checkAlignSequenceAs("AAACCCTTT", "K-PFG", true, true, map,
+ "AAA---CCCTTT---");
+ }
+
+ /**
+ * Tests for transferring features between mapped sequences
+ */
+ @Test(groups = { "Functional" })
+ public void testTransferFeatures()
+ {
+ SequenceI dna = new Sequence("dna/20-34", "acgTAGcaaGCCcgt");
+ SequenceI cds = new Sequence("cds/10-15", "TAGGCC");
+
+ // no overlap
+ dna.addSequenceFeature(new SequenceFeature("type1", "desc1", 1, 2, 1f,
+ null));
+ // partial overlap - to [1, 1]
+ dna.addSequenceFeature(new SequenceFeature("type2", "desc2", 3, 4, 2f,
+ null));
+ // exact overlap - to [1, 3]
+ dna.addSequenceFeature(new SequenceFeature("type3", "desc3", 4, 6, 3f,
+ null));
+ // spanning overlap - to [2, 5]
+ dna.addSequenceFeature(new SequenceFeature("type4", "desc4", 5, 11, 4f,
+ null));
+ // exactly overlaps whole mapped range [1, 6]
+ dna.addSequenceFeature(new SequenceFeature("type5", "desc5", 4, 12, 5f,
+ null));
+ // no overlap (internal)
+ dna.addSequenceFeature(new SequenceFeature("type6", "desc6", 7, 9, 6f,
+ null));
+ // no overlap (3' end)
+ dna.addSequenceFeature(new SequenceFeature("type7", "desc7", 13, 15,
+ 7f, null));
+ // overlap (3' end) - to [6, 6]
+ dna.addSequenceFeature(new SequenceFeature("type8", "desc8", 12, 12,
+ 8f, null));
+ // extended overlap - to [6, +]
+ dna.addSequenceFeature(new SequenceFeature("type9", "desc9", 12, 13,
+ 9f, null));
+
+ MapList map = new MapList(new int[] { 4, 6, 10, 12 },
+ new int[] { 1, 6 }, 1, 1);
+
+ /*
+ * transferFeatures() will build 'partial overlap' for regions
+ * that partially overlap 5' or 3' (start or end) of target sequence
+ */
+ AlignmentUtils.transferFeatures(dna, cds, map, null);
+ SequenceFeature[] sfs = cds.getSequenceFeatures();
+ assertEquals(6, sfs.length);
+
+ SequenceFeature sf = sfs[0];
+ assertEquals("type2", sf.getType());
+ assertEquals("desc2", sf.getDescription());
+ assertEquals(2f, sf.getScore());
+ assertEquals(1, sf.getBegin());
+ assertEquals(1, sf.getEnd());
+
+ sf = sfs[1];
+ assertEquals("type3", sf.getType());
+ assertEquals("desc3", sf.getDescription());
+ assertEquals(3f, sf.getScore());
+ assertEquals(1, sf.getBegin());
+ assertEquals(3, sf.getEnd());
+
+ sf = sfs[2];
+ assertEquals("type4", sf.getType());
+ assertEquals(2, sf.getBegin());
+ assertEquals(5, sf.getEnd());
+
+ sf = sfs[3];
+ assertEquals("type5", sf.getType());
+ assertEquals(1, sf.getBegin());
+ assertEquals(6, sf.getEnd());
+
+ sf = sfs[4];
+ assertEquals("type8", sf.getType());
+ assertEquals(6, sf.getBegin());
+ assertEquals(6, sf.getEnd());
+
+ sf = sfs[5];
+ assertEquals("type9", sf.getType());
+ assertEquals(6, sf.getBegin());
+ assertEquals(6, sf.getEnd());
+ }
+
+ /**
+ * Tests for transferring features between mapped sequences
+ */
+ @Test(groups = { "Functional" })
+ public void testTransferFeatures_withOmit()
+ {
+ SequenceI dna = new Sequence("dna/20-34", "acgTAGcaaGCCcgt");
+ SequenceI cds = new Sequence("cds/10-15", "TAGGCC");
+
+ MapList map = new MapList(new int[] { 4, 6, 10, 12 },
+ new int[] { 1, 6 }, 1, 1);
+
+ // [5, 11] maps to [2, 5]
+ dna.addSequenceFeature(new SequenceFeature("type4", "desc4", 5, 11, 4f,
+ null));
+ // [4, 12] maps to [1, 6]
+ dna.addSequenceFeature(new SequenceFeature("type5", "desc5", 4, 12, 5f,
+ null));
+ // [12, 12] maps to [6, 6]
+ dna.addSequenceFeature(new SequenceFeature("type8", "desc8", 12, 12,
+ 8f, null));
+
+ // desc4 and desc8 are the 'omit these' varargs
+ AlignmentUtils.transferFeatures(dna, cds, map, null, "type4", "type8");
+ SequenceFeature[] sfs = cds.getSequenceFeatures();
+ assertEquals(1, sfs.length);
+
+ SequenceFeature sf = sfs[0];
+ assertEquals("type5", sf.getType());
+ assertEquals(1, sf.getBegin());
+ assertEquals(6, sf.getEnd());
+ }
+
+ /**
+ * Tests for transferring features between mapped sequences
+ */
+ @Test(groups = { "Functional" })
+ public void testTransferFeatures_withSelect()
+ {
+ SequenceI dna = new Sequence("dna/20-34", "acgTAGcaaGCCcgt");
+ SequenceI cds = new Sequence("cds/10-15", "TAGGCC");
+
+ MapList map = new MapList(new int[] { 4, 6, 10, 12 },
+ new int[] { 1, 6 }, 1, 1);
+
+ // [5, 11] maps to [2, 5]
+ dna.addSequenceFeature(new SequenceFeature("type4", "desc4", 5, 11, 4f,
+ null));
+ // [4, 12] maps to [1, 6]
+ dna.addSequenceFeature(new SequenceFeature("type5", "desc5", 4, 12, 5f,
+ null));
+ // [12, 12] maps to [6, 6]
+ dna.addSequenceFeature(new SequenceFeature("type8", "desc8", 12, 12,
+ 8f, null));
+
+ // "type5" is the 'select this type' argument
+ AlignmentUtils.transferFeatures(dna, cds, map, "type5");
+ SequenceFeature[] sfs = cds.getSequenceFeatures();
+ assertEquals(1, sfs.length);
+
+ SequenceFeature sf = sfs[0];
+ assertEquals("type5", sf.getType());
+ assertEquals(1, sf.getBegin());
+ assertEquals(6, sf.getEnd());
+ }
+
+ /**
+ * Test the method that extracts the cds-only part of a dna alignment, for the
+ * case where the cds should be aligned to match its nucleotide sequence.
+ */
+ @Test(groups = { "Functional" })
+ public void testMakeCdsAlignment_alternativeTranscripts()
+ {
+ SequenceI dna1 = new Sequence("dna1", "aaaGGGCC-----CTTTaaaGGG");
+ // alternative transcript of same dna skips CCC codon
+ SequenceI dna2 = new Sequence("dna2", "aaaGGGCC-----cttTaaaGGG");
+ // dna3 has no mapping (protein product) so should be ignored here
+ SequenceI dna3 = new Sequence("dna3", "aaaGGGCCCCCGGGcttTaaaGGG");
+ SequenceI pep1 = new Sequence("pep1", "GPFG");
+ SequenceI pep2 = new Sequence("pep2", "GPG");
+ dna1.createDatasetSequence();
+ dna2.createDatasetSequence();
+ dna3.createDatasetSequence();
+ pep1.createDatasetSequence();
+ pep2.createDatasetSequence();
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds1", 4, 8, 0f,
+ null));
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds2", 9, 12, 0f,
+ null));
+ dna1.addSequenceFeature(new SequenceFeature("CDS", "cds3", 16, 18, 0f,
+ null));
+ dna2.addSequenceFeature(new SequenceFeature("CDS", "cds", 4, 8, 0f,
+ null));
+ dna2.addSequenceFeature(new SequenceFeature("CDS", "cds", 12, 12, 0f,
+ null));
+ dna2.addSequenceFeature(new SequenceFeature("CDS", "cds", 16, 18, 0f,
+ null));
+
+ List<AlignedCodonFrame> mappings = new ArrayList<AlignedCodonFrame>();
+ MapList map = new MapList(new int[] { 4, 12, 16, 18 },
+ new int[] { 1, 4 }, 3, 1);
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ acf.addMap(dna1.getDatasetSequence(), pep1.getDatasetSequence(), map);
+ mappings.add(acf);
+ map = new MapList(new int[] { 4, 8, 12, 12, 16, 18 },
+ new int[] { 1, 3 },
+ 3, 1);
+ acf = new AlignedCodonFrame();
+ acf.addMap(dna2.getDatasetSequence(), pep2.getDatasetSequence(), map);
+ mappings.add(acf);
+
+ AlignmentI dna = new Alignment(new SequenceI[] { dna1, dna2, dna3 });
+ dna.setDataset(null);
+ AlignmentI cds = AlignmentUtils.makeCdsAlignment(new SequenceI[] {
+ dna1, dna2, dna3 }, mappings, dna);
+ List<SequenceI> cdsSeqs = cds.getSequences();
+ assertEquals(2, cdsSeqs.size());
+ assertEquals("GGGCCCTTTGGG", cdsSeqs.get(0).getSequenceAsString());
+ assertEquals("GGGCCTGGG", cdsSeqs.get(1).getSequenceAsString());
+
+ /*
+ * verify shared, extended alignment dataset
+ */
+ assertSame(dna.getDataset(), cds.getDataset());
+ assertTrue(dna.getDataset().getSequences()
+ .contains(cdsSeqs.get(0).getDatasetSequence()));
+ assertTrue(dna.getDataset().getSequences()
+ .contains(cdsSeqs.get(1).getDatasetSequence()));
+
+ /*
+ * Verify updated mappings
+ */
+ List<AlignedCodonFrame> cdsMappings = cds.getCodonFrames();
+ assertEquals(2, cdsMappings.size());
+
+ /*
+ * Mapping from pep1 to GGGTTT in first new CDS sequence
+ */
+ List<AlignedCodonFrame> pep1Mapping = MappingUtils
+ .findMappingsForSequence(pep1, cdsMappings);
+ assertEquals(1, pep1Mapping.size());
+ /*
+ * maps GPFG to 1-3,4-6,7-9,10-12
+ */
+ SearchResults sr = MappingUtils
+ .buildSearchResults(pep1, 1, cdsMappings);
+ assertEquals(1, sr.getResults().size());
+ Match m = sr.getResults().get(0);
+ assertEquals(cds.getSequenceAt(0).getDatasetSequence(),
+ m.getSequence());
+ assertEquals(1, m.getStart());
+ assertEquals(3, m.getEnd());
+ sr = MappingUtils.buildSearchResults(pep1, 2, cdsMappings);
+ m = sr.getResults().get(0);
+ assertEquals(4, m.getStart());
+ assertEquals(6, m.getEnd());
+ sr = MappingUtils.buildSearchResults(pep1, 3, cdsMappings);
+ m = sr.getResults().get(0);
+ assertEquals(7, m.getStart());
+ assertEquals(9, m.getEnd());
+ sr = MappingUtils.buildSearchResults(pep1, 4, cdsMappings);
+ m = sr.getResults().get(0);
+ assertEquals(10, m.getStart());
+ assertEquals(12, m.getEnd());
+
+ /*
+ * GPG in pep2 map to 1-3,4-6,7-9 in second CDS sequence
+ */
+ List<AlignedCodonFrame> pep2Mapping = MappingUtils
+ .findMappingsForSequence(pep2, cdsMappings);
+ assertEquals(1, pep2Mapping.size());
+ sr = MappingUtils.buildSearchResults(pep2, 1, cdsMappings);
+ assertEquals(1, sr.getResults().size());
+ m = sr.getResults().get(0);
+ assertEquals(cds.getSequenceAt(1).getDatasetSequence(),
+ m.getSequence());
+ assertEquals(1, m.getStart());
+ assertEquals(3, m.getEnd());
+ sr = MappingUtils.buildSearchResults(pep2, 2, cdsMappings);
+ m = sr.getResults().get(0);
+ assertEquals(4, m.getStart());
+ assertEquals(6, m.getEnd());
+ sr = MappingUtils.buildSearchResults(pep2, 3, cdsMappings);
+ m = sr.getResults().get(0);
+ assertEquals(7, m.getStart());
+ assertEquals(9, m.getEnd());
+ }
+
+ /**
+ * Test the method that realigns protein to match mapped codon alignment.
+ */
+ @Test(groups = { "Functional" })
+ public void testAlignProteinAsDna_incompleteStartCodon()
+ {
+ // seq1: incomplete start codon (not mapped), then [3, 11]
+ SequenceI dna1 = new Sequence("Seq1", "ccAAA-TTT-GGG-");
+ // seq2 codons are [4, 5], [8, 11]
+ SequenceI dna2 = new Sequence("Seq2", "ccaAA-ttT-GGG-");
+ // seq3 incomplete start codon at 'tt'
+ SequenceI dna3 = new Sequence("Seq3", "ccaaa-ttt-GGG-");
+ AlignmentI dna = new Alignment(new SequenceI[] { dna1, dna2, dna3 });
+ dna.setDataset(null);
+
+ // prot1 has 'X' for incomplete start codon (not mapped)
+ SequenceI prot1 = new Sequence("Seq1", "XKFG"); // X for incomplete start
+ SequenceI prot2 = new Sequence("Seq2", "NG");
+ SequenceI prot3 = new Sequence("Seq3", "XG"); // X for incomplete start
+ AlignmentI protein = new Alignment(new SequenceI[] { prot1, prot2,
+ prot3 });
+ protein.setDataset(null);
+
+ // map dna1 [3, 11] to prot1 [2, 4] KFG
+ MapList map = new MapList(new int[] { 3, 11 }, new int[] { 2, 4 }, 3, 1);
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ acf.addMap(dna1.getDatasetSequence(), prot1.getDatasetSequence(), map);
+
+ // map dna2 [4, 5] [8, 11] to prot2 [1, 2] NG
+ map = new MapList(new int[] { 4, 5, 8, 11 }, new int[] { 1, 2 }, 3, 1);
+ acf.addMap(dna2.getDatasetSequence(), prot2.getDatasetSequence(), map);
+
+ // map dna3 [9, 11] to prot3 [2, 2] G
+ map = new MapList(new int[] { 9, 11 }, new int[] { 2, 2 }, 3, 1);
+ acf.addMap(dna3.getDatasetSequence(), prot3.getDatasetSequence(), map);
+
+ ArrayList<AlignedCodonFrame> acfs = new ArrayList<AlignedCodonFrame>();
+ acfs.add(acf);
+ protein.setCodonFrames(acfs);
+
+ /*
+ * verify X is included in the aligned proteins, and placed just
+ * before the first mapped residue
+ * CCT is between CCC and TTT
+ */
+ AlignmentUtils.alignProteinAsDna(protein, dna);
+ assertEquals("XK-FG", prot1.getSequenceAsString());
+ assertEquals("--N-G", prot2.getSequenceAsString());
+ assertEquals("---XG", prot3.getSequenceAsString());
+ }
+
+ /**
+ * Tests for the method that maps the subset of a dna sequence that has CDS
+ * (or subtype) feature - case where the start codon is incomplete.
+ */
+ @Test(groups = "Functional")
+ public void testFindCdsPositions_fivePrimeIncomplete()
+ {
+ SequenceI dnaSeq = new Sequence("dna", "aaagGGCCCaaaTTTttt");
+ dnaSeq.createDatasetSequence();
+ SequenceI ds = dnaSeq.getDatasetSequence();
+
+ // CDS for dna 5-6 (incomplete codon), 7-9
+ SequenceFeature sf = new SequenceFeature("CDS", "", 5, 9, 0f, null);
+ sf.setPhase("2"); // skip 2 bases to start of next codon
+ ds.addSequenceFeature(sf);
+ // CDS for dna 13-15
+ sf = new SequenceFeature("CDS_predicted", "", 13, 15, 0f, null);
+ ds.addSequenceFeature(sf);
+
+ List<int[]> ranges = AlignmentUtils.findCdsPositions(dnaSeq);
+
+ /*
+ * check the mapping starts with the first complete codon
+ */
+ assertEquals(6, MappingUtils.getLength(ranges));
+ assertEquals(2, ranges.size());
+ assertEquals(7, ranges.get(0)[0]);
+ assertEquals(9, ranges.get(0)[1]);
+ assertEquals(13, ranges.get(1)[0]);
+ assertEquals(15, ranges.get(1)[1]);
+ }
+
+ /**
+ * Tests for the method that maps the subset of a dna sequence that has CDS
+ * (or subtype) feature.
+ */
+ @Test(groups = "Functional")
+ public void testFindCdsPositions()
+ {
+ SequenceI dnaSeq = new Sequence("dna", "aaaGGGcccAAATTTttt");
+ dnaSeq.createDatasetSequence();
+ SequenceI ds = dnaSeq.getDatasetSequence();
+
+ // CDS for dna 10-12
+ SequenceFeature sf = new SequenceFeature("CDS_predicted", "", 10, 12,
+ 0f, null);
+ sf.setStrand("+");
+ ds.addSequenceFeature(sf);
+ // CDS for dna 4-6
+ sf = new SequenceFeature("CDS", "", 4, 6, 0f, null);
+ sf.setStrand("+");
+ ds.addSequenceFeature(sf);
+ // exon feature should be ignored here
+ sf = new SequenceFeature("exon", "", 7, 9, 0f, null);
+ ds.addSequenceFeature(sf);
+
+ List<int[]> ranges = AlignmentUtils.findCdsPositions(dnaSeq);
+ /*
+ * verify ranges { [4-6], [12-10] }
+ * note CDS ranges are ordered ascending even if the CDS
+ * features are not
+ */
+ assertEquals(6, MappingUtils.getLength(ranges));
+ assertEquals(2, ranges.size());
+ assertEquals(4, ranges.get(0)[0]);
+ assertEquals(6, ranges.get(0)[1]);
+ assertEquals(10, ranges.get(1)[0]);
+ assertEquals(12, ranges.get(1)[1]);
+ }
+
+ /**
+ * Test the method that computes a map of codon variants for each protein
+ * position from "sequence_variant" features on dna
+ */
+ @Test(groups = "Functional")
+ public void testBuildDnaVariantsMap()
+ {
+ SequenceI dna = new Sequence("dna", "atgAAATTTGGGCCCtag");
+ MapList map = new MapList(new int[] { 1, 18 }, new int[] { 1, 5 }, 3, 1);
+
+ /*
+ * first with no variants on dna
+ */
+ LinkedHashMap<Integer, List<DnaVariant>[]> variantsMap = AlignmentUtils
+ .buildDnaVariantsMap(dna, map);
+ assertTrue(variantsMap.isEmpty());
+
+ /*
+ * single allele codon 1, on base 1
+ */
+ SequenceFeature sf1 = new SequenceFeature("sequence_variant", "", 1, 1,
+ 0f, null);
+ sf1.setValue("alleles", "T");
+ sf1.setValue("ID", "sequence_variant:rs758803211");
+ dna.addSequenceFeature(sf1);
+
+ /*
+ * two alleles codon 2, on bases 2 and 3 (distinct variants)
+ */
+ SequenceFeature sf2 = new SequenceFeature("sequence_variant", "", 5, 5,
+ 0f, null);
+ sf2.setValue("alleles", "T");
+ sf2.setValue("ID", "sequence_variant:rs758803212");
+ dna.addSequenceFeature(sf2);
+ SequenceFeature sf3 = new SequenceFeature("sequence_variant", "", 6, 6,
+ 0f, null);
+ sf3.setValue("alleles", "G");
+ sf3.setValue("ID", "sequence_variant:rs758803213");
+ dna.addSequenceFeature(sf3);
+
+ /*
+ * two alleles codon 3, both on base 2 (one variant)
+ */
+ SequenceFeature sf4 = new SequenceFeature("sequence_variant", "", 8, 8,
+ 0f, null);
+ sf4.setValue("alleles", "C, G");
+ sf4.setValue("ID", "sequence_variant:rs758803214");
+ dna.addSequenceFeature(sf4);
+
+ // no alleles on codon 4
+
+ /*
+ * alleles on codon 5 on all 3 bases (distinct variants)
+ */
+ SequenceFeature sf5 = new SequenceFeature("sequence_variant", "", 13,
+ 13, 0f, null);
+ sf5.setValue("alleles", "C, G"); // (C duplicates given base value)
+ sf5.setValue("ID", "sequence_variant:rs758803215");
+ dna.addSequenceFeature(sf5);
+ SequenceFeature sf6 = new SequenceFeature("sequence_variant", "", 14,
+ 14, 0f, null);
+ sf6.setValue("alleles", "g, a"); // should force to upper-case
+ sf6.setValue("ID", "sequence_variant:rs758803216");
+ dna.addSequenceFeature(sf6);
+ SequenceFeature sf7 = new SequenceFeature("sequence_variant", "", 15,
+ 15, 0f, null);
+ sf7.setValue("alleles", "A, T");
+ sf7.setValue("ID", "sequence_variant:rs758803217");
+ dna.addSequenceFeature(sf7);
+
+ /*
+ * build map - expect variants on positions 1, 2, 3, 5
+ */
+ variantsMap = AlignmentUtils.buildDnaVariantsMap(dna, map);
+ assertEquals(4, variantsMap.size());
+
+ /*
+ * protein residue 1: variant on codon (ATG) base 1, not on 2 or 3
+ */
+ List<DnaVariant>[] pep1Variants = variantsMap.get(1);
+ assertEquals(3, pep1Variants.length);
+ assertEquals(1, pep1Variants[0].size());
+ assertEquals("A", pep1Variants[0].get(0).base); // codon[1] base
+ assertSame(sf1, pep1Variants[0].get(0).variant); // codon[1] variant
+ assertEquals(1, pep1Variants[1].size());
+ assertEquals("T", pep1Variants[1].get(0).base); // codon[2] base
+ assertNull(pep1Variants[1].get(0).variant); // no variant here
+ assertEquals(1, pep1Variants[2].size());
+ assertEquals("G", pep1Variants[2].get(0).base); // codon[3] base
+ assertNull(pep1Variants[2].get(0).variant); // no variant here
+
+ /*
+ * protein residue 2: variants on codon (AAA) bases 2 and 3
+ */
+ List<DnaVariant>[] pep2Variants = variantsMap.get(2);
+ assertEquals(3, pep2Variants.length);
+ assertEquals(1, pep2Variants[0].size());
+ // codon[1] base recorded while processing variant on codon[2]
+ assertEquals("A", pep2Variants[0].get(0).base);
+ assertNull(pep2Variants[0].get(0).variant); // no variant here
+ // codon[2] base and variant:
+ assertEquals(1, pep2Variants[1].size());
+ assertEquals("A", pep2Variants[1].get(0).base);
+ assertSame(sf2, pep2Variants[1].get(0).variant);
+ // codon[3] base was recorded when processing codon[2] variant
+ // and then the variant for codon[3] added to it
+ assertEquals(1, pep2Variants[2].size());
+ assertEquals("A", pep2Variants[2].get(0).base);
+ assertSame(sf3, pep2Variants[2].get(0).variant);
+
+ /*
+ * protein residue 3: variants on codon (TTT) base 2 only
+ */
+ List<DnaVariant>[] pep3Variants = variantsMap.get(3);
+ assertEquals(3, pep3Variants.length);
+ assertEquals(1, pep3Variants[0].size());
+ assertEquals("T", pep3Variants[0].get(0).base); // codon[1] base
+ assertNull(pep3Variants[0].get(0).variant); // no variant here
+ assertEquals(1, pep3Variants[1].size());
+ assertEquals("T", pep3Variants[1].get(0).base); // codon[2] base
+ assertSame(sf4, pep3Variants[1].get(0).variant); // codon[2] variant
+ assertEquals(1, pep3Variants[2].size());
+ assertEquals("T", pep3Variants[2].get(0).base); // codon[3] base
+ assertNull(pep3Variants[2].get(0).variant); // no variant here
+
+ /*
+ * three variants on protein position 5
+ */
+ List<DnaVariant>[] pep5Variants = variantsMap.get(5);
+ assertEquals(3, pep5Variants.length);
+ assertEquals(1, pep5Variants[0].size());
+ assertEquals("C", pep5Variants[0].get(0).base); // codon[1] base
+ assertSame(sf5, pep5Variants[0].get(0).variant); // codon[1] variant
+ assertEquals(1, pep5Variants[1].size());
+ assertEquals("C", pep5Variants[1].get(0).base); // codon[2] base
+ assertSame(sf6, pep5Variants[1].get(0).variant); // codon[2] variant
+ assertEquals(1, pep5Variants[2].size());
+ assertEquals("C", pep5Variants[2].get(0).base); // codon[3] base
+ assertSame(sf7, pep5Variants[2].get(0).variant); // codon[3] variant
+ }
+
+ /**
+ * Tests for the method that computes all peptide variants given codon
+ * variants
+ */
+ @Test(groups = "Functional")
+ public void testComputePeptideVariants()
+ {
+ /*
+ * scenario: AAATTTCCC codes for KFP, with variants
+ * GAA -> E
+ * CAA -> Q
+ * AAG synonymous
+ * AAT -> N
+ * TTC synonymous
+ * CAC,CGC -> H,R (as one variant)
+ */
+ SequenceI peptide = new Sequence("pep/10-12", "KFP");
+
+ /*
+ * two distinct variants for codon 1 position 1
+ * second one has clinical significance
+ */
+ SequenceFeature sf1 = new SequenceFeature("sequence_variant", "", 1, 1,
+ 0f, null);
+ sf1.setValue("alleles", "A,G"); // GAA -> E
+ sf1.setValue("ID", "var1.125A>G");
+ SequenceFeature sf2 = new SequenceFeature("sequence_variant", "", 1, 1,
+ 0f, null);
+ sf2.setValue("alleles", "A,C"); // CAA -> Q
+ sf2.setValue("ID", "var2");
+ sf2.setValue("clinical_significance", "Dodgy");
+ SequenceFeature sf3 = new SequenceFeature("sequence_variant", "", 3, 3,
+ 0f, null);
+ sf3.setValue("alleles", "A,G"); // synonymous
+ sf3.setValue("ID", "var3");
+ sf3.setValue("clinical_significance", "None");
+ SequenceFeature sf4 = new SequenceFeature("sequence_variant", "", 3, 3,
+ 0f, null);
+ sf4.setValue("alleles", "A,T"); // AAT -> N
+ sf4.setValue("ID", "sequence_variant:var4"); // prefix gets stripped off
+ sf4.setValue("clinical_significance", "Benign");
+ SequenceFeature sf5 = new SequenceFeature("sequence_variant", "", 6, 6,
+ 0f, null);
+ sf5.setValue("alleles", "T,C"); // synonymous
+ sf5.setValue("ID", "var5");
+ sf5.setValue("clinical_significance", "Bad");
+ SequenceFeature sf6 = new SequenceFeature("sequence_variant", "", 8, 8,
+ 0f, null);
+ sf6.setValue("alleles", "C,A,G"); // CAC,CGC -> H,R
+ sf6.setValue("ID", "var6");
+ sf6.setValue("clinical_significance", "Good");
+
+ List<DnaVariant> codon1Variants = new ArrayList<DnaVariant>();
+ List<DnaVariant> codon2Variants = new ArrayList<DnaVariant>();
+ List<DnaVariant> codon3Variants = new ArrayList<DnaVariant>();
+ List<DnaVariant> codonVariants[] = new ArrayList[3];
+ codonVariants[0] = codon1Variants;
+ codonVariants[1] = codon2Variants;
+ codonVariants[2] = codon3Variants;
+
+ /*
+ * compute variants for protein position 1
+ */
+ codon1Variants.add(new DnaVariant("A", sf1));
+ codon1Variants.add(new DnaVariant("A", sf2));
+ codon2Variants.add(new DnaVariant("A"));
+ codon2Variants.add(new DnaVariant("A"));
+ codon3Variants.add(new DnaVariant("A", sf3));
+ codon3Variants.add(new DnaVariant("A", sf4));
+ AlignmentUtils.computePeptideVariants(peptide, 1, codonVariants);
+
+ /*
+ * compute variants for protein position 2
+ */
+ codon1Variants.clear();
+ codon2Variants.clear();
+ codon3Variants.clear();
+ codon1Variants.add(new DnaVariant("T"));
+ codon2Variants.add(new DnaVariant("T"));
+ codon3Variants.add(new DnaVariant("T", sf5));
+ AlignmentUtils.computePeptideVariants(peptide, 2, codonVariants);
+
+ /*
+ * compute variants for protein position 3
+ */
+ codon1Variants.clear();
+ codon2Variants.clear();
+ codon3Variants.clear();
+ codon1Variants.add(new DnaVariant("C"));
+ codon2Variants.add(new DnaVariant("C", sf6));
+ codon3Variants.add(new DnaVariant("C"));
+ AlignmentUtils.computePeptideVariants(peptide, 3, codonVariants);
+
+ /*
+ * verify added sequence features for
+ * var1 K -> E
+ * var2 K -> Q
+ * var4 K -> N
+ * var6 P -> H
+ * var6 P -> R
+ */
+ SequenceFeature[] sfs = peptide.getSequenceFeatures();
+ assertEquals(5, sfs.length);
+ SequenceFeature sf = sfs[0];
+ assertEquals(1, sf.getBegin());
+ assertEquals(1, sf.getEnd());
+ assertEquals("K->E", sf.getDescription());
+ assertEquals("var1.125A>G", sf.getValue("ID"));
+ assertNull(sf.getValue("clinical_significance"));
+ assertEquals("ID=var1.125A>G", sf.getAttributes());
+ assertEquals(1, sf.links.size());
+ // link to variation is urlencoded
+ assertEquals(
+ "K->E var1.125A>G|http://www.ensembl.org/Homo_sapiens/Variation/Summary?v=var1.125A%3EG",
+ sf.links.get(0));
+ sf = sfs[1];
+ assertEquals(1, sf.getBegin());
+ assertEquals(1, sf.getEnd());
+ assertEquals("K->Q", sf.getDescription());
+ assertEquals("var2", sf.getValue("ID"));
+ assertEquals("Dodgy", sf.getValue("clinical_significance"));
+ assertEquals("ID=var2;clinical_significance=Dodgy", sf.getAttributes());
+ assertEquals(1, sf.links.size());
+ assertEquals(
+ "K->Q var2|http://www.ensembl.org/Homo_sapiens/Variation/Summary?v=var2",
+ sf.links.get(0));
+ sf = sfs[2];
+ assertEquals(1, sf.getBegin());
+ assertEquals(1, sf.getEnd());
+ assertEquals("K->N", sf.getDescription());
+ assertEquals("var4", sf.getValue("ID"));
+ assertEquals("Benign", sf.getValue("clinical_significance"));
+ assertEquals("ID=var4;clinical_significance=Benign", sf.getAttributes());
+ assertEquals(1, sf.links.size());
+ assertEquals(
+ "K->N var4|http://www.ensembl.org/Homo_sapiens/Variation/Summary?v=var4",
+ sf.links.get(0));
+ sf = sfs[3];
+ assertEquals(3, sf.getBegin());
+ assertEquals(3, sf.getEnd());
+ assertEquals("P->H", sf.getDescription());
+ assertEquals("var6", sf.getValue("ID"));
+ assertEquals("Good", sf.getValue("clinical_significance"));
+ assertEquals("ID=var6;clinical_significance=Good", sf.getAttributes());
+ assertEquals(1, sf.links.size());
+ assertEquals(
+ "P->H var6|http://www.ensembl.org/Homo_sapiens/Variation/Summary?v=var6",
+ sf.links.get(0));
+ // var5 generates two distinct protein variant features
+ sf = sfs[4];
+ assertEquals(3, sf.getBegin());
+ assertEquals(3, sf.getEnd());
+ assertEquals("P->R", sf.getDescription());
+ assertEquals("var6", sf.getValue("ID"));
+ assertEquals("Good", sf.getValue("clinical_significance"));
+ assertEquals("ID=var6;clinical_significance=Good", sf.getAttributes());
+ assertEquals(1, sf.links.size());
+ assertEquals(
+ "P->R var6|http://www.ensembl.org/Homo_sapiens/Variation/Summary?v=var6",
+ sf.links.get(0));
+ }
+
+ /**
+ * Tests for the method that maps the subset of a dna sequence that has CDS
+ * (or subtype) feature, with CDS strand = '-' (reverse)
+ */
+ // test turned off as currently findCdsPositions is not strand-dependent
+ // left in case it comes around again...
+ @Test(groups = "Functional", enabled = false)
+ public void testFindCdsPositions_reverseStrand()
+ {
+ SequenceI dnaSeq = new Sequence("dna", "aaaGGGcccAAATTTttt");
+ dnaSeq.createDatasetSequence();
+ SequenceI ds = dnaSeq.getDatasetSequence();
+
+ // CDS for dna 4-6
+ SequenceFeature sf = new SequenceFeature("CDS", "", 4, 6, 0f, null);
+ sf.setStrand("-");
+ ds.addSequenceFeature(sf);
+ // exon feature should be ignored here
+ sf = new SequenceFeature("exon", "", 7, 9, 0f, null);
+ ds.addSequenceFeature(sf);
+ // CDS for dna 10-12
+ sf = new SequenceFeature("CDS_predicted", "", 10, 12, 0f, null);
+ sf.setStrand("-");
+ ds.addSequenceFeature(sf);
+
+ List<int[]> ranges = AlignmentUtils.findCdsPositions(dnaSeq);
+ /*
+ * verify ranges { [12-10], [6-4] }
+ */
+ assertEquals(6, MappingUtils.getLength(ranges));
+ assertEquals(2, ranges.size());
+ assertEquals(12, ranges.get(0)[0]);
+ assertEquals(10, ranges.get(0)[1]);
+ assertEquals(6, ranges.get(1)[0]);
+ assertEquals(4, ranges.get(1)[1]);
+ }
+
+ /**
+ * Tests for the method that maps the subset of a dna sequence that has CDS
+ * (or subtype) feature - reverse strand case where the start codon is
+ * incomplete.
+ */
+ @Test(groups = "Functional", enabled = false)
+ // test turned off as currently findCdsPositions is not strand-dependent
+ // left in case it comes around again...
+ public void testFindCdsPositions_reverseStrandThreePrimeIncomplete()
+ {
+ SequenceI dnaSeq = new Sequence("dna", "aaagGGCCCaaaTTTttt");
+ dnaSeq.createDatasetSequence();
+ SequenceI ds = dnaSeq.getDatasetSequence();
+
+ // CDS for dna 5-9
+ SequenceFeature sf = new SequenceFeature("CDS", "", 5, 9, 0f, null);
+ sf.setStrand("-");
+ ds.addSequenceFeature(sf);
+ // CDS for dna 13-15
+ sf = new SequenceFeature("CDS_predicted", "", 13, 15, 0f, null);
+ sf.setStrand("-");
+ sf.setPhase("2"); // skip 2 bases to start of next codon
+ ds.addSequenceFeature(sf);
+
+ List<int[]> ranges = AlignmentUtils.findCdsPositions(dnaSeq);
+
+ /*
+ * check the mapping starts with the first complete codon
+ * expect ranges [13, 13], [9, 5]
+ */
+ assertEquals(6, MappingUtils.getLength(ranges));
+ assertEquals(2, ranges.size());
+ assertEquals(13, ranges.get(0)[0]);
+ assertEquals(13, ranges.get(0)[1]);
+ assertEquals(9, ranges.get(1)[0]);
+ assertEquals(5, ranges.get(1)[1]);
+ }
+
+ @Test(groups = "Functional")
+ public void testAlignAs_alternateTranscriptsUngapped()
+ {
+ SequenceI dna1 = new Sequence("dna1", "cccGGGTTTaaa");
+ SequenceI dna2 = new Sequence("dna2", "CCCgggtttAAA");
+ AlignmentI dna = new Alignment(new SequenceI[] { dna1, dna2 });
+ ((Alignment) dna).createDatasetAlignment();
+ SequenceI cds1 = new Sequence("cds1", "GGGTTT");
+ SequenceI cds2 = new Sequence("cds2", "CCCAAA");
+ AlignmentI cds = new Alignment(new SequenceI[] { cds1, cds2 });
+ ((Alignment) cds).createDatasetAlignment();
+
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ MapList map = new MapList(new int[] { 4, 9 }, new int[] { 1, 6 }, 1, 1);
+ acf.addMap(dna1.getDatasetSequence(), cds1.getDatasetSequence(), map);
+ map = new MapList(new int[] { 1, 3, 10, 12 }, new int[] { 1, 6 }, 1, 1);
+ acf.addMap(dna2.getDatasetSequence(), cds2.getDatasetSequence(), map);
+
+ /*
+ * verify CDS alignment is as:
+ * cccGGGTTTaaa (cdna)
+ * CCCgggtttAAA (cdna)
+ *
+ * ---GGGTTT--- (cds)
+ * CCC------AAA (cds)
+ */
+ dna.addCodonFrame(acf);
+ AlignmentUtils.alignAs(cds, dna);
+ assertEquals("---GGGTTT", cds.getSequenceAt(0).getSequenceAsString());
+ assertEquals("CCC------AAA", cds.getSequenceAt(1).getSequenceAsString());
+ }
+
+ @Test(groups = { "Functional" })
+ public void testAddMappedPositions()
+ {
+ SequenceI from = new Sequence("dna", "ggAA-ATcc-TT-g");
+ SequenceI seq1 = new Sequence("cds", "AAATTT");
+ from.createDatasetSequence();
+ seq1.createDatasetSequence();
+ Mapping mapping = new Mapping(seq1, new MapList(
+ new int[] { 3, 6, 9, 10 },
+ new int[] { 1, 6 }, 1, 1));
+ Map<Integer, Map<SequenceI, Character>> map = new TreeMap<Integer, Map<SequenceI, Character>>();
+ AlignmentUtils.addMappedPositions(seq1, from, mapping, map);
+
+ /*
+ * verify map has seq1 residues in columns 3,4,6,7,11,12
+ */
+ assertEquals(6, map.size());
+ assertEquals('A', map.get(3).get(seq1).charValue());
+ assertEquals('A', map.get(4).get(seq1).charValue());
+ assertEquals('A', map.get(6).get(seq1).charValue());
+ assertEquals('T', map.get(7).get(seq1).charValue());
+ assertEquals('T', map.get(11).get(seq1).charValue());
+ assertEquals('T', map.get(12).get(seq1).charValue());
+
+ /*
+ *
+ */
+ }
+
+ /**
+ * Test case where the mapping 'from' range includes a stop codon which is
+ * absent in the 'to' range
+ */
+ @Test(groups = { "Functional" })
+ public void testAddMappedPositions_withStopCodon()
+ {
+ SequenceI from = new Sequence("dna", "ggAA-ATcc-TT-g");
+ SequenceI seq1 = new Sequence("cds", "AAATTT");
+ from.createDatasetSequence();
+ seq1.createDatasetSequence();
+ Mapping mapping = new Mapping(seq1, new MapList(
+ new int[] { 3, 6, 9, 10 },
+ new int[] { 1, 6 }, 1, 1));
+ Map<Integer, Map<SequenceI, Character>> map = new TreeMap<Integer, Map<SequenceI, Character>>();
+ AlignmentUtils.addMappedPositions(seq1, from, mapping, map);
+
+ /*
+ * verify map has seq1 residues in columns 3,4,6,7,11,12
+ */
+ assertEquals(6, map.size());
+ assertEquals('A', map.get(3).get(seq1).charValue());
+ assertEquals('A', map.get(4).get(seq1).charValue());
+ assertEquals('A', map.get(6).get(seq1).charValue());
+ assertEquals('T', map.get(7).get(seq1).charValue());
+ assertEquals('T', map.get(11).get(seq1).charValue());
+ assertEquals('T', map.get(12).get(seq1).charValue());
+ }
}
assertEquals("[0, 2, 5]", convertCodon("A-A--A").toString());
assertEquals("[1, 3, 4]", convertCodon("-A-AA-").toString());
}
+
+ /**
+ * Test dna complementing
+ */
+ @Test(groups = "Functional")
+ public void testGetComplement()
+ {
+ assertEquals('t', Dna.getComplement('a'));
+ assertEquals('T', Dna.getComplement('A'));
+ assertEquals('a', Dna.getComplement('t'));
+ assertEquals('A', Dna.getComplement('T'));
+ assertEquals('c', Dna.getComplement('g'));
+ assertEquals('C', Dna.getComplement('G'));
+ assertEquals('g', Dna.getComplement('c'));
+ assertEquals('G', Dna.getComplement('C'));
+ // note uU --> aA but not vice versa
+ assertEquals('a', Dna.getComplement('u'));
+ assertEquals('A', Dna.getComplement('U'));
+ // ambiguity codes, see http://www.bioinformatics.org/sms/iupac.html
+ assertEquals('r', Dna.getComplement('y'));
+ assertEquals('R', Dna.getComplement('Y'));
+ assertEquals('y', Dna.getComplement('r'));
+ assertEquals('Y', Dna.getComplement('R'));
+ assertEquals('k', Dna.getComplement('m'));
+ assertEquals('K', Dna.getComplement('M'));
+ assertEquals('m', Dna.getComplement('k'));
+ assertEquals('M', Dna.getComplement('K'));
+ assertEquals('b', Dna.getComplement('v'));
+ assertEquals('B', Dna.getComplement('V'));
+ assertEquals('v', Dna.getComplement('b'));
+ assertEquals('V', Dna.getComplement('B'));
+ assertEquals('d', Dna.getComplement('h'));
+ assertEquals('D', Dna.getComplement('H'));
+ assertEquals('h', Dna.getComplement('d'));
+ assertEquals('H', Dna.getComplement('D'));
+ assertEquals('Q', Dna.getComplement('Q'));
+ }
+
+ @Test(groups = "Functional")
+ public void testReverseSequence()
+ {
+ String seq = "AcGtUrYkMbVdHNX";
+
+ // reverse:
+ SequenceI reversed = Dna.reverseSequence("Seq1", seq, false);
+ assertEquals(new StringBuilder(seq).reverse()
+ .toString(), reversed.getSequenceAsString());
+ assertEquals("Seq1|rev", reversed.getName());
+
+ // reverse complement:
+ SequenceI revcomp = Dna.reverseSequence("Seq1", seq, true);
+ assertEquals("XNDhBvKmRyAaCgT", revcomp.getSequenceAsString());
+ assertEquals("Seq1|revcomp", revcomp.getName());
+ }
}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.analysis;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+
+import java.util.Hashtable;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author jprocter
+ *
+ */
+public class SeqsetUtilsTest
+{
+ /**
+ * test for JAL-2046 bug - duplication of sequence features on reconstructed
+ * alignment
+ */
+ @Test(groups = { "Functional" })
+ public void testSeqFeatureAddition()
+ {
+ SequenceI[] sqset = new SequenceI[] {
+ new Sequence("Aseq1", "AREALSEQ"),
+ new Sequence("Aseq2", "AREALSEQ") };
+
+ AlignmentI al = new Alignment(sqset);
+ al.setDataset(null);
+ AlignmentI ds = al.getDataset();
+ SequenceFeature sf1 = new SequenceFeature("f1", "foo", "bleh", 2, 3,
+ "far"), sf2 = new SequenceFeature("f2", "foo", "bleh", 2, 3,
+ "far");
+ ds.getSequenceAt(0).addSequenceFeature(sf1);
+ Hashtable unq = SeqsetUtils.uniquify(sqset, true);
+ SequenceI[] sqset2 = new SequenceI[] {
+ new Sequence(sqset[0].getName(), sqset[0].getSequenceAsString()),
+ new Sequence(sqset[1].getName(), sqset[1].getSequenceAsString()) };
+ Assert.assertTrue(sqset[0].getSequenceFeatures()[0] == sf1);
+ Assert.assertEquals(sqset2[0].getSequenceFeatures(), null);
+ ds.getSequenceAt(0).addSequenceFeature(sf2);
+ Assert.assertEquals(sqset[0].getSequenceFeatures().length, 2);
+ SeqsetUtils.deuniquify(unq, sqset2);
+ // explicitly test that original sequence features still exist because they
+ // are on the shared dataset sequence
+ Assert.assertEquals(sqset[0].getSequenceFeatures().length, 2);
+ Assert.assertEquals(sqset2[0].getSequenceFeatures().length, 2);
+ Assert.assertTrue(sqset[0].getSequenceFeatures()[0] == sqset2[0]
+ .getSequenceFeatures()[0]);
+ Assert.assertTrue(sqset[0].getSequenceFeatures()[1] == sqset2[0]
+ .getSequenceFeatures()[1]);
+ }
+}
--- /dev/null
+package jalview.analysis;
+
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.analysis.SequenceIdMatcher.SeqIdName;
+import jalview.datamodel.SequenceI;
+
+import org.testng.annotations.Test;
+
+public class SequenceIdMatcherTest
+{
+
+ /**
+ * Test the method that checks for one sequence id starting with the other,
+ * followed by an 'allowed' separator character
+ */
+ @Test(groups = "Functional")
+ public void test_seqIdNameEquals()
+ {
+ SequenceIdMatcher sequenceIdMatcher = new SequenceIdMatcher(
+ new SequenceI[] {});
+
+ /*
+ * target name = matcher name + word separator...
+ */
+ SeqIdName testee = sequenceIdMatcher.new SeqIdName("A12345");
+ assertTrue(testee.equals("A12345"));
+ assertTrue(testee.equals("A12345~"));
+ assertTrue(testee.equals("A12345."));
+ assertTrue(testee.equals("A12345 "));
+ assertTrue(testee.equals("A12345|"));
+ assertTrue(testee.equals("A12345#"));
+ assertTrue(testee.equals("A12345\\"));
+ assertTrue(testee.equals("A12345/"));
+ assertTrue(testee.equals("A12345<"));
+ assertTrue(testee.equals("A12345>"));
+ assertTrue(testee.equals("A12345!"));
+ assertTrue(testee.equals("A12345\""));
+ assertTrue(testee.equals("A12345" + String.valueOf((char) 0x00A4)));
+ assertTrue(testee.equals("A12345$a"));
+ assertTrue(testee.equals("A12345%b"));
+ assertTrue(testee.equals("A12345^cd"));
+ assertTrue(testee.equals("A12345*efg"));
+ assertTrue(testee.equals("A12345)^&!"));
+ assertTrue(testee.equals("A12345}01&*"));
+ assertTrue(testee.equals("A12345[A23456"));
+ assertTrue(testee.equals("A12345@|Uniprot"));
+ assertTrue(testee.equals("A12345'whatever you want here"));
+ assertTrue(testee.equals("A12345,"));
+ assertTrue(testee.equals("A12345?"));
+ assertTrue(testee.equals("A12345_"));
+
+ /*
+ * matcher name = target name + word separator...
+ */
+ testee = sequenceIdMatcher.new SeqIdName("A12345#");
+ assertTrue(testee.equals("A12345"));
+
+ /*
+ * miscellaneous failing cases
+ */
+ testee = sequenceIdMatcher.new SeqIdName("A12345");
+ assertFalse(testee.equals((Object) null));
+ assertFalse(testee.equals(""));
+ assertFalse(testee.equals("a12345"));
+ assertFalse(testee.equals("A12346|A12345"));
+
+ testee = sequenceIdMatcher.new SeqIdName("A12345?B23456");
+ assertFalse(testee.equals("B23456"));
+ assertFalse(testee.equals("A12345|"));
+ assertFalse(testee.equals("A12345?"));
+
+ testee = sequenceIdMatcher.new SeqIdName("A12345<");
+ assertFalse(testee.equals("A12345?"));
+ assertTrue(testee.equals("A12345<")); // bug? inconsistent
+ }
+}
String expected = "Score = 320\nLength of alignment = 10\nSequence Seq1 : 3 - 18 (Sequence length = 14)\nSequence Seq1 : 1 - 10 (Sequence length = 10)\n\n"
+ "Seq1 SDFAQQQRRR\n"
+ " ||||||| \n"
- + "Seq1 SDFAQQQSSS\n\n" + "Percentage ID = 70.00\n\n";
+ + "Seq1 SDFAQQQSSS\n\n" + "Percentage ID = 70.00\n";
assertEquals(expected, baos.toString());
}
}
import jalview.io.FileLoader;
import jalview.io.FormatAdapter;
-import org.testng.AssertJUnit;
+import org.testng.Assert;
import org.testng.annotations.Test;
public class FeatureScoreModelTest
int[] sf3 = new int[] { -1, -1, -1, -1, -1, -1, 76, 77 };
- @Test(groups = { "Functional" })
- public void testFeatureScoreModel() throws Exception
+ public AlignFrame getTestAlignmentFrame()
{
AlignFrame alf = new FileLoader(false).LoadFileWaitTillLoaded(
alntestFile, FormatAdapter.PASTE);
AlignmentI al = alf.getViewport().getAlignment();
- AssertJUnit.assertEquals(4, al.getHeight());
- AssertJUnit.assertEquals(5, al.getWidth());
+ Assert.assertEquals(al.getHeight(), 4);
+ Assert.assertEquals(al.getWidth(), 5);
for (int i = 0; i < 4; i++)
{
SequenceI ds = al.getSequenceAt(i).getDatasetSequence();
alf.getFeatureRenderer().setVisible("sf2");
alf.getFeatureRenderer().setVisible("sf3");
alf.getFeatureRenderer().findAllFeatures(true);
- AssertJUnit.assertEquals("Number of feature types", 3, alf
- .getFeatureRenderer().getDisplayedFeatureTypes().length);
- AssertJUnit.assertTrue(alf.getCurrentView().areFeaturesDisplayed());
+ Assert.assertEquals(alf.getFeatureRenderer().getDisplayedFeatureTypes()
+ .size(), 3, "Number of feature types");
+ Assert.assertTrue(alf.getCurrentView().areFeaturesDisplayed());
+ return alf;
+ }
+
+ @Test(groups = { "Functional" })
+ public void testFeatureScoreModel() throws Exception
+ {
+ AlignFrame alf = getTestAlignmentFrame();
FeatureScoreModel fsm = new FeatureScoreModel();
- AssertJUnit.assertTrue(fsm.configureFromAlignmentView(alf
+ Assert.assertTrue(fsm.configureFromAlignmentView(alf
.getCurrentView().getAlignPanel()));
alf.selectAllSequenceMenuItem_actionPerformed(null);
float[][] dm = fsm.findDistances(alf.getViewport().getAlignmentView(
true));
- AssertJUnit.assertTrue("FER1_MESCR should be identical with RAPSA (2)",
- dm[0][2] == 0f);
- AssertJUnit
- .assertTrue(
- "FER1_MESCR should be further from SPIOL (1) than it is from RAPSA (2)",
- dm[0][1] > dm[0][2]);
+ Assert.assertTrue(dm[0][2] == 0f,
+ "FER1_MESCR (0) should be identical with RAPSA (2)");
+ Assert.assertTrue(dm[0][1] > dm[0][2],
+ "FER1_MESCR (0) should be further from SPIOL (1) than it is from RAPSA (2)");
+ }
+
+ @Test(groups = { "Functional" })
+ public void testFeatureScoreModel_hiddenFirstColumn() throws Exception
+ {
+ AlignFrame alf = getTestAlignmentFrame();
+ // hiding first two columns shouldn't affect the tree
+ alf.getViewport().hideColumns(0, 1);
+ FeatureScoreModel fsm = new FeatureScoreModel();
+ Assert.assertTrue(fsm.configureFromAlignmentView(alf.getCurrentView()
+ .getAlignPanel()));
+ alf.selectAllSequenceMenuItem_actionPerformed(null);
+ float[][] dm = fsm.findDistances(alf.getViewport().getAlignmentView(
+ true));
+ Assert.assertTrue(dm[0][2] == 0f,
+ "FER1_MESCR (0) should be identical with RAPSA (2)");
+ Assert.assertTrue(dm[0][1] > dm[0][2],
+ "FER1_MESCR (0) should be further from SPIOL (1) than it is from RAPSA (2)");
+ }
+ @Test(groups = { "Functional" })
+ public void testFeatureScoreModel_HiddenColumns() throws Exception
+ {
+ AlignFrame alf = getTestAlignmentFrame();
+ // hide columns and check tree changes
+ alf.getViewport().hideColumns(3, 4);
+ alf.getViewport().hideColumns(0, 1);
+ FeatureScoreModel fsm = new FeatureScoreModel();
+ Assert.assertTrue(fsm.configureFromAlignmentView(alf.getCurrentView()
+ .getAlignPanel()));
+ alf.selectAllSequenceMenuItem_actionPerformed(null);
+ float[][] dm = fsm.findDistances(alf.getViewport().getAlignmentView(
+ true));
+ Assert.assertTrue(dm[0][2] == 0f,
+ "After hiding last two columns FER1_MESCR (0) should still be identical with RAPSA (2)");
+ Assert.assertTrue(dm[0][1] == 0f,
+ "After hiding last two columns FER1_MESCR (0) should now also be identical with SPIOL (1)");
+ for (int s=0;s<3;s++)
+ {
+ Assert.assertTrue(dm[s][3] > 0f, "After hiding last two columns "
+ + alf.getViewport().getAlignment().getSequenceAt(s).getName()
+ + "(" + s + ") should still be distinct from FER1_MAIZE (3)");
+ }
}
}
package jalview.datamodel;
import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
import jalview.util.MapList;
import java.util.Arrays;
+import java.util.List;
import org.testng.annotations.Test;
*/
assertEquals(aa.getSequenceAt(1), acf.findAlignedSequence(cdna
.getSequenceAt(0).getDatasetSequence(), aa));
+ // can also find this from the dna aligned sequence
+ assertEquals(aa.getSequenceAt(1),
+ acf.findAlignedSequence(cdna.getSequenceAt(0), aa));
assertEquals(cdna.getSequenceAt(0), acf.findAlignedSequence(aa
.getSequenceAt(1).getDatasetSequence(), cdna));
final Sequence aseq1 = new Sequence("Seq1", "-P-R");
aseq1.createDatasetSequence();
- final Sequence aseq2 = new Sequence("Seq2", "-LY-");
+ final Sequence aseq2 = new Sequence("Seq2", "-LY-Q");
aseq2.createDatasetSequence();
/*
/*
* Set up the mappings for the exons (upper-case bases)
+ * Note residue Q is unmapped
*/
MapList map = new MapList(new int[] { 2, 4, 6, 6, 8, 9 }, new int[] {
1, 2 }, 3, 1);
3, 1);
acf.addMap(seq2.getDatasetSequence(), aseq2.getDatasetSequence(), map);
- assertEquals("[2, 4]",
- Arrays.toString(acf.getMappedRegion(seq1, aseq1, 1)));
- assertEquals("[6, 6, 8, 9]",
- Arrays.toString(acf.getMappedRegion(seq1, aseq1, 2)));
- assertEquals("[1, 2, 4, 4]",
- Arrays.toString(acf.getMappedRegion(seq2, aseq2, 1)));
- assertEquals("[5, 5, 7, 8]",
- Arrays.toString(acf.getMappedRegion(seq2, aseq2, 2)));
+ assertArrayEquals(new int[] { 2, 4 },
+ acf.getMappedRegion(seq1, aseq1, 1));
+ assertArrayEquals(new int[] { 6, 6, 8, 9 },
+ acf.getMappedRegion(seq1, aseq1, 2));
+ assertArrayEquals(new int[] { 1, 2, 4, 4 },
+ acf.getMappedRegion(seq2, aseq2, 1));
+ assertArrayEquals(new int[] { 5, 5, 7, 8 },
+ acf.getMappedRegion(seq2, aseq2, 2));
+
+ /*
+ * No mapping from seq2 to Q
+ */
+ assertNull(acf.getMappedRegion(seq2, aseq2, 3));
/*
* No mapping from sequence 1 to sequence 2
}
@Test(groups = { "Functional" })
- public void testGetMappedCodon()
+ public void testGetMappedCodons()
{
final Sequence seq1 = new Sequence("Seq1", "c-G-TA-gC-gT-T");
seq1.createDatasetSequence();
- final Sequence aseq1 = new Sequence("Seq1", "-P-R");
+ final Sequence aseq1 = new Sequence("Seq1", "-V-L");
aseq1.createDatasetSequence();
/*
*/
AlignedCodonFrame acf = new AlignedCodonFrame();
- assertNull(acf.getMappedCodon(seq1.getDatasetSequence(), 0));
+ assertNull(acf.getMappedCodons(seq1.getDatasetSequence(), 0));
+
+ /*
+ * Set up the mappings for the exons (upper-case bases)
+ */
+ MapList map = new MapList(new int[] { 2, 4, 6, 6, 8, 9 }, new int[] {
+ 1, 2 }, 3, 1);
+ acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
+
+ assertEquals(1, acf.getMappedCodons(aseq1.getDatasetSequence(), 1)
+ .size());
+ assertEquals(
+ "[G, T, A]",
+ Arrays.toString(acf.getMappedCodons(aseq1.getDatasetSequence(),
+ 1).get(0)));
+ assertEquals(
+ "[C, T, T]",
+ Arrays.toString(acf.getMappedCodons(aseq1.getDatasetSequence(),
+ 2).get(0)));
+ }
+
+ /**
+ * Test for the case where there is more than one variant of the DNA mapping
+ * to a protein sequence
+ */
+ @Test(groups = { "Functional" })
+ public void testGetMappedCodons_dnaVariants()
+ {
+ final Sequence seq1 = new Sequence("Seq1", "c-G-TA-gC-gT-T");
+ seq1.createDatasetSequence();
+ final Sequence seq2 = new Sequence("Seq2", "c-G-TT-gT-gT-A");
+ seq2.createDatasetSequence();
+ final Sequence aseq1 = new Sequence("Seq1", "-V-L");
+ aseq1.createDatasetSequence();
+
+ AlignedCodonFrame acf = new AlignedCodonFrame();
/*
* Set up the mappings for the exons (upper-case bases)
MapList map = new MapList(new int[] { 2, 4, 6, 6, 8, 9 }, new int[] {
1, 2 }, 3, 1);
acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
+ acf.addMap(seq2.getDatasetSequence(), aseq1.getDatasetSequence(), map);
- assertEquals("[G, T, A]", Arrays.toString(acf.getMappedCodon(
- aseq1.getDatasetSequence(), 1)));
- assertEquals("[C, T, T]", Arrays.toString(acf.getMappedCodon(
- aseq1.getDatasetSequence(), 2)));
+ assertEquals(2, acf.getMappedCodons(aseq1.getDatasetSequence(), 1)
+ .size());
+ List<char[]> codonsForV = acf.getMappedCodons(
+ aseq1.getDatasetSequence(), 1);
+ assertEquals("[G, T, A]", Arrays.toString(codonsForV.get(0)));
+ assertEquals("[G, T, T]", Arrays.toString(codonsForV.get(1)));
+ List<char[]> codonsForL = acf.getMappedCodons(
+ aseq1.getDatasetSequence(), 2);
+ assertEquals("[C, T, T]", Arrays.toString(codonsForL.get(0)));
+ assertEquals("[T, T, A]", Arrays.toString(codonsForL.get(1)));
}
/**
* Test for the case where sequences have start > 1
*/
@Test(groups = { "Functional" })
- public void testGetMappedCodon_forSubSequences()
+ public void testGetMappedCodons_forSubSequences()
{
final Sequence seq1 = new Sequence("Seq1", "c-G-TA-gC-gT-T", 27, 35);
seq1.createDatasetSequence();
- final Sequence aseq1 = new Sequence("Seq1", "-P-R", 12, 13);
+ final Sequence aseq1 = new Sequence("Seq1", "-V-L", 12, 13);
aseq1.createDatasetSequence();
/*
new int[] { 12, 13 }, 3, 1);
acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
- assertEquals("[G, T, A]", Arrays.toString(acf.getMappedCodon(
- aseq1.getDatasetSequence(), 12)));
- assertEquals("[C, T, T]", Arrays.toString(acf.getMappedCodon(
- aseq1.getDatasetSequence(), 13)));
+ assertEquals(
+ "[G, T, A]",
+ Arrays.toString(acf.getMappedCodons(aseq1.getDatasetSequence(),
+ 12).get(0)));
+ assertEquals(
+ "[C, T, T]",
+ Arrays.toString(acf.getMappedCodons(aseq1.getDatasetSequence(),
+ 13).get(0)));
+ }
+
+ @Test(groups = { "Functional" })
+ public void testCouldReplaceSequence()
+ {
+ SequenceI seq1 = new Sequence("Seq1/10-21", "aaacccgggttt");
+ SequenceI seq1proxy = new SequenceDummy("Seq1");
+
+ // map to region within sequence is ok
+ assertTrue(AlignedCodonFrame.couldRealiseSequence(seq1proxy, seq1, 12,
+ 17));
+ // map to region overlapping sequence is ok
+ assertTrue(AlignedCodonFrame.couldRealiseSequence(seq1proxy, seq1, 5,
+ 10));
+ assertTrue(AlignedCodonFrame.couldRealiseSequence(seq1proxy, seq1, 21,
+ 26));
+ // map to region before sequence is not ok
+ assertFalse(AlignedCodonFrame.couldRealiseSequence(seq1proxy, seq1, 4,
+ 9));
+ // map to region after sequence is not ok
+ assertFalse(AlignedCodonFrame.couldRealiseSequence(seq1proxy, seq1, 22,
+ 27));
+
+ /*
+ * test should fail if name doesn't match
+ */
+ seq1proxy.setName("Seq1a");
+ assertFalse(AlignedCodonFrame.couldRealiseSequence(seq1proxy, seq1, 12,
+ 17));
+ seq1proxy.setName("Seq1");
+ seq1.setName("Seq1a");
+ assertFalse(AlignedCodonFrame.couldRealiseSequence(seq1proxy, seq1, 12,
+ 17));
+
+ /*
+ * a dummy sequence can't replace a real one
+ */
+ assertFalse(AlignedCodonFrame.couldRealiseSequence(seq1, seq1proxy, 12,
+ 17));
+
+ /*
+ * a dummy sequence can't replace a dummy sequence
+ */
+ SequenceI seq1proxy2 = new SequenceDummy("Seq1");
+ assertFalse(AlignedCodonFrame.couldRealiseSequence(seq1proxy,
+ seq1proxy2, 12, 17));
+
+ /*
+ * a real sequence can't replace a real one
+ */
+ SequenceI seq1a = new Sequence("Seq1/10-21", "aaacccgggttt");
+ assertFalse(AlignedCodonFrame.couldRealiseSequence(seq1, seq1a, 12, 17));
+ }
+
+ /**
+ * Tests for the method that tests whether any mapping to a dummy sequence can
+ * be 'realised' to a given real sequence
+ */
+ @Test(groups = { "Functional" })
+ public void testIsRealisableWith()
+ {
+ SequenceI seq1 = new Sequence("Seq1", "tttaaaCCCGGGtttaaa");
+ SequenceI seq2 = new Sequence("Seq2", "PG");
+ SequenceI seq1proxy = new SequenceDummy("Seq1");
+ seq1.createDatasetSequence();
+ seq2.createDatasetSequence();
+ MapList mapList = new MapList(new int[] { 7, 12 }, new int[] { 2, 3 },
+ 3, 1);
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ acf.addMap(seq1proxy, seq2, mapList);
+
+ /*
+ * Seq2 is mapped to SequenceDummy seq1proxy bases 4-9
+ * This is 'realisable' from real sequence Seq1
+ */
+ assertTrue(acf.isRealisableWith(seq1));
+
+ /*
+ * test should fail if name doesn't match
+ */
+ seq1proxy.setName("Seq1a");
+ assertFalse(acf.isRealisableWith(seq1));
+ seq1proxy.setName("Seq1");
+
+ SequenceI seq1ds = seq1.getDatasetSequence();
+ seq1ds.setName("Seq1a");
+ assertFalse(acf.isRealisableWith(seq1));
+ seq1ds.setName("Seq1");
+
+ /*
+ * test should fail if no sequence overlap with mapping of bases 7-12
+ * use artificial start/end values to test this
+ */
+ seq1ds.setStart(1);
+ seq1ds.setEnd(6);
+ // seq1 precedes mapped region:
+ assertFalse(acf.isRealisableWith(seq1));
+ seq1ds.setEnd(7);
+ // seq1 includes first mapped base:
+ assertTrue(acf.isRealisableWith(seq1));
+ seq1ds.setStart(13);
+ seq1ds.setEnd(18);
+ // seq1 follows mapped region:
+ assertFalse(acf.isRealisableWith(seq1));
+ seq1ds.setStart(12);
+ // seq1 includes last mapped base:
+ assertTrue(acf.isRealisableWith(seq1));
+ }
+
+ /**
+ * Tests for the method that converts mappings to a dummy sequence to mappings
+ * to a compatible real sequence
+ */
+ @Test(groups = { "Functional" })
+ public void testRealiseWith()
+ {
+ SequenceI seq1 = new Sequence("Seq1", "tttCAACCCGGGtttaaa");
+ SequenceI seq2 = new Sequence("Seq2", "QPG");
+ SequenceI seq2a = new Sequence("Seq2a", "QPG");
+ SequenceI seq1proxy = new SequenceDummy("Seq1");
+ seq1.createDatasetSequence();
+ seq2.createDatasetSequence();
+ seq2a.createDatasetSequence();
+
+ /*
+ * Make mappings from Seq2 and Seq2a peptides to dummy sequence Seq1
+ */
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+
+ // map PG to codons 7-12 (CCCGGG)
+ MapList mapping1 = new MapList(new int[] { 7, 12 }, new int[] { 2, 3 },
+ 3, 1);
+ acf.addMap(seq1proxy, seq2, mapping1);
+ acf.addMap(seq1proxy, seq2a, mapping1);
+
+ // map QP to codons 4-9 (CAACCC)
+ MapList mapping2 = new MapList(new int[] { 4, 9 }, new int[] { 1, 2 },
+ 3, 1);
+ acf.addMap(seq1proxy, seq2, mapping2);
+ acf.addMap(seq1proxy, seq2a, mapping2);
+
+ /*
+ * acf now has two mappings one from Seq1 to Seq2, one from Seq1 to Seq2a
+ */
+ assertEquals(2, acf.getdnaSeqs().length);
+ assertSame(seq1proxy, acf.getdnaSeqs()[0]);
+ assertSame(seq1proxy, acf.getdnaSeqs()[1]);
+ assertEquals(2, acf.getProtMappings().length);
+
+ // 'realise' these mappings with the compatible sequence seq1
+ // two mappings should be updated:
+ assertEquals(2, acf.realiseWith(seq1));
+ assertSame(seq1.getDatasetSequence(), acf.getdnaSeqs()[0]);
+ assertSame(seq1.getDatasetSequence(), acf.getdnaSeqs()[1]);
+ }
+
+ /**
+ * Test the method that locates the mapped codon for a protein position.
+ */
+ @Test(groups = { "Functional" })
+ public void testGetMappedRegion_eitherWay()
+ {
+ final Sequence seq1 = new Sequence("Seq1", "AAACCCGGGTTT");
+ seq1.createDatasetSequence();
+ final Sequence seq2 = new Sequence("Seq2", "KPGF");
+ seq2.createDatasetSequence();
+ final Sequence seq3 = new Sequence("Seq3", "QYKPGFSW");
+ seq3.createDatasetSequence();
+
+ /*
+ * map Seq1 to all of Seq2 and part of Seq3
+ */
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ MapList map = new MapList(new int[] { 1, 12 }, new int[] { 1, 4 }, 3, 1);
+ acf.addMap(seq1.getDatasetSequence(), seq2.getDatasetSequence(), map);
+ map = new MapList(new int[] { 1, 12 }, new int[] { 3, 6 }, 3, 1);
+ acf.addMap(seq1.getDatasetSequence(), seq3.getDatasetSequence(), map);
+
+ /*
+ * map part of Seq3 to Seq2
+ */
+ map = new MapList(new int[] { 3, 6 }, new int[] { 1, 4 }, 1, 1);
+ acf.addMap(seq3.getDatasetSequence(), seq2.getDatasetSequence(), map);
+
+ /*
+ * original case - locate mapped codon for protein position
+ */
+ assertArrayEquals(new int[] { 4, 6 },
+ acf.getMappedRegion(seq1, seq2, 2));
+ assertArrayEquals(new int[] { 7, 9 },
+ acf.getMappedRegion(seq1, seq3, 5));
+ assertNull(acf.getMappedRegion(seq1, seq3, 1));
+
+ /*
+ * locate mapped protein for protein position
+ */
+ assertArrayEquals(new int[] { 4, 4 },
+ acf.getMappedRegion(seq3, seq2, 2));
+
+ /*
+ * reverse location protein-to-protein
+ */
+ assertArrayEquals(new int[] { 2, 2 },
+ acf.getMappedRegion(seq2, seq3, 4));
+
+ /*
+ * reverse location protein-from-nucleotide
+ * any of codon [4, 5, 6] positions map to seq2/2
+ */
+ assertArrayEquals(new int[] { 2, 2 },
+ acf.getMappedRegion(seq2, seq1, 4));
+ assertArrayEquals(new int[] { 2, 2 },
+ acf.getMappedRegion(seq2, seq1, 5));
+ assertArrayEquals(new int[] { 2, 2 },
+ acf.getMappedRegion(seq2, seq1, 6));
}
}
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
import jalview.io.AppletFormatAdapter;
import jalview.util.MapList;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
+import java.util.List;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
* Make mappings between sequences. The 'aligned cDNA' is playing the role
* of what would normally be protein here.
*/
- makeMappings(al2, al1);
+ makeMappings(al1, al2);
((Alignment) al2).alignAs(al1, false, true);
- assertEquals("GC-TC--GUC-GTA-CT", al2.getSequenceAt(0)
+ assertEquals("GC-TC--GUC-GTACT", al2.getSequenceAt(0)
.getSequenceAsString());
- assertEquals("-GG-GTC--AGG---CAGT", al2.getSequenceAt(1)
+ assertEquals("-GG-GTC--AGG--CAGT", al2.getSequenceAt(1)
.getSequenceAsString());
}
AlignmentI al2 = loadAlignment(AA_SEQS_1, "FASTA");
makeMappings(al1, al2);
+ // Fudge - alignProteinAsCdna expects mappings to be on protein
+ al2.getCodonFrames().addAll(al1.getCodonFrames());
+
((Alignment) al2).alignAs(al1, false, true);
assertEquals("K-Q-Y-L-", al2.getSequenceAt(0).getSequenceAsString());
assertEquals("-R-F-P-W", al2.getSequenceAt(1).getSequenceAsString());
}
/**
- * Aligning protein from cDNA for a single sequence. This is the 'simple' case
- * (as there is no need to compute codon 'alignments') but worth testing
- * before tackling the multiple sequence case.
- *
- * @throws IOException
- */
- @Test(groups = { "Functional" })
- public void testAlignAs_proteinAsCdna_singleSequence() throws IOException
- {
- /*
- * simplest case remove all gaps
- */
- verifyAlignAs(">protein\n-Q-K-\n", ">dna\nCAAaaa\n", "QK");
-
- /*
- * with sequence offsets
- */
- verifyAlignAs(">protein/12-13\n-Q-K-\n", ">dna/20-25\nCAAaaa\n", "QK");
- }
-
- /**
* Test aligning cdna as per protein alignment.
*
* @throws IOException
*/
- @Test(groups = { "Functional" })
+ @Test(groups = { "Functional" }, enabled = false)
+ // TODO review / update this test after redesign of alignAs method
public void testAlignAs_cdnaAsProtein() throws IOException
{
/*
((Alignment) al1).alignAs(al2, false, true);
assertEquals("ACG---GCUCCA------ACT", al1.getSequenceAt(0)
.getSequenceAsString());
- assertEquals("---CGT---TAACGA---AGT", al1.getSequenceAt(1)
+ assertEquals("---CGT---TAACGA---AGT---", al1.getSequenceAt(1)
.getSequenceAsString());
}
*
* @throws IOException
*/
- @Test(groups = { "Functional" })
+ @Test(groups = { "Functional" }, enabled = false)
+ // TODO review / update this test after redesign of alignAs method
public void testAlignAs_cdnaAsProtein_singleSequence() throws IOException
{
/*
}
/**
- * Helper method to make mappings from protein to dna sequences, and add the
- * mappings to the protein alignment
+ * Helper method to make mappings between sequences, and add the mappings to
+ * the 'mapped from' alignment
*
* @param alFrom
* @param alTo
*/
public void makeMappings(AlignmentI alFrom, AlignmentI alTo)
{
- AlignmentI prot = !alFrom.isNucleotide() ? alFrom : alTo;
- AlignmentI nuc = alFrom == prot ? alTo : alFrom;
-
int ratio = (alFrom.isNucleotide() == alTo.isNucleotide() ? 1 : 3);
AlignedCodonFrame acf = new AlignedCodonFrame();
- for (int i = 0; i < nuc.getHeight(); i++)
+ for (int i = 0; i < alFrom.getHeight(); i++)
{
- SequenceI seqFrom = nuc.getSequenceAt(i);
- SequenceI seqTo = prot.getSequenceAt(i);
+ SequenceI seqFrom = alFrom.getSequenceAt(i);
+ SequenceI seqTo = alTo.getSequenceAt(i);
MapList ml = new MapList(new int[] { seqFrom.getStart(),
seqFrom.getEnd() },
new int[] { seqTo.getStart(), seqTo.getEnd() }, ratio, 1);
acf.addMap(seqFrom, seqTo, ml);
}
- prot.addCodonFrame(acf);
+ alFrom.addCodonFrame(acf);
}
/**
*
* @throws IOException
*/
- @Test(groups = { "Functional" })
+ @Test(groups = { "Functional" }, enabled = false)
+ // TODO review / update this test after redesign of alignAs method
public void testAlignAs_dnaAsProtein_withIntrons() throws IOException
{
/*
*/
String dna1 = "A-Aa-gG-GCC-cT-TT";
String dna2 = "c--CCGgg-TT--T-AA-A";
- AlignmentI al1 = loadAlignment(">Seq1/6-17\n" + dna1
- + "\n>Seq2/20-31\n" + dna2 + "\n", "FASTA");
+ AlignmentI al1 = loadAlignment(">Dna1/6-17\n" + dna1
+ + "\n>Dna2/20-31\n" + dna2 + "\n", "FASTA");
AlignmentI al2 = loadAlignment(
- ">Seq1/7-9\n-P--YK\n>Seq2/11-13\nG-T--F\n", "FASTA");
+ ">Pep1/7-9\n-P--YK\n>Pep2/11-13\nG-T--F\n", "FASTA");
AlignedCodonFrame acf = new AlignedCodonFrame();
// Seq1 has intron at dna positions 3,4,9 so splice is AAG GCC TTT
// Seq2 has intron at dna positions 1,5,6 so splice is CCG TTT AAA
- // TODO sequence offsets
MapList ml1 = new MapList(new int[] { 6, 7, 10, 13, 15, 17 }, new int[]
{ 7, 9 }, 3, 1);
acf.addMap(al1.getSequenceAt(0), al2.getSequenceAt(0), ml1);
assertEquals("c--CCGgg-TT--T------AA-A", al1.getSequenceAt(1)
.getSequenceAsString());
}
+
+ @Test(groups = "Functional")
+ public void testCopyConstructor() throws IOException
+ {
+ AlignmentI protein = loadAlignment(AA_SEQS_1, FormatAdapter.PASTE);
+ // create sequence and alignment datasets
+ protein.setDataset(null);
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
+ { acf });
+ protein.getDataset().setCodonFrames(acfList);
+ AlignmentI copy = new Alignment(protein);
+
+ /*
+ * copy has different aligned sequences but the same dataset sequences
+ */
+ assertFalse(copy.getSequenceAt(0) == protein.getSequenceAt(0));
+ assertFalse(copy.getSequenceAt(1) == protein.getSequenceAt(1));
+ assertSame(copy.getSequenceAt(0).getDatasetSequence(), protein
+ .getSequenceAt(0).getDatasetSequence());
+ assertSame(copy.getSequenceAt(1).getDatasetSequence(), protein
+ .getSequenceAt(1).getDatasetSequence());
+
+ // TODO should the copy constructor copy the dataset?
+ // or make a new one referring to the same dataset sequences??
+ assertNull(copy.getDataset());
+ // assertArrayEquals(copy.getDataset().getSequencesArray(), protein
+ // .getDataset().getSequencesArray());
+ }
+
+ /**
+ * Test behaviour of createDataset
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testCreateDatasetAlignment() throws IOException
+ {
+ AlignmentI protein = new FormatAdapter().readFile(AA_SEQS_1,
+ AppletFormatAdapter.PASTE, "FASTA");
+ /*
+ * create a dataset sequence on first sequence
+ * leave the second without one
+ */
+ protein.getSequenceAt(0).createDatasetSequence();
+ assertNotNull(protein.getSequenceAt(0).getDatasetSequence());
+ assertNull(protein.getSequenceAt(1).getDatasetSequence());
+
+ /*
+ * add a mapping to the alignment
+ */
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ protein.addCodonFrame(acf);
+ assertNull(protein.getDataset());
+ assertTrue(protein.getCodonFrames().contains(acf));
+
+ /*
+ * create the alignment dataset
+ * note this creates sequence datasets where missing
+ * as a side-effect (in this case, on seq2
+ */
+ // TODO promote this method to AlignmentI
+ ((Alignment) protein).createDatasetAlignment();
+
+ // TODO this method should return AlignmentI not Alignment !!
+ Alignment ds = protein.getDataset();
+
+ // side-effect: dataset created on second sequence
+ assertNotNull(protein.getSequenceAt(1).getDatasetSequence());
+ // dataset alignment has references to dataset sequences
+ assertEquals(ds.getSequenceAt(0), protein.getSequenceAt(0)
+ .getDatasetSequence());
+ assertEquals(ds.getSequenceAt(1), protein.getSequenceAt(1)
+ .getDatasetSequence());
+
+ // codon frames should have been moved to the dataset
+ // getCodonFrames() should delegate to the dataset:
+ assertTrue(protein.getCodonFrames().contains(acf));
+ // prove the codon frames are indeed on the dataset:
+ assertTrue(ds.getCodonFrames().contains(acf));
+ }
+
+ @Test(groups = "Functional")
+ public void testAddCodonFrame()
+ {
+ AlignmentI align = new Alignment(new SequenceI[] {});
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ align.addCodonFrame(acf);
+ assertEquals(1, align.getCodonFrames().size());
+ assertTrue(align.getCodonFrames().contains(acf));
+ // can't add the same object twice:
+ align.addCodonFrame(acf);
+ assertEquals(1, align.getCodonFrames().size());
+
+ // create dataset alignment - mappings move to dataset
+ ((Alignment) align).createDatasetAlignment();
+ assertSame(align.getCodonFrames(), align.getDataset().getCodonFrames());
+ assertEquals(1, align.getCodonFrames().size());
+
+ AlignedCodonFrame acf2 = new AlignedCodonFrame();
+ align.addCodonFrame(acf2);
+ assertTrue(align.getDataset().getCodonFrames().contains(acf));
+ }
+
+ @Test(groups = "Functional")
+ public void getVisibleStartAndEndIndexTest()
+ {
+ Sequence seq = new Sequence("testSeq", "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ AlignmentI align = new Alignment(new SequenceI[] { seq });
+ ArrayList<int[]> hiddenCols = new ArrayList<int[]>();
+
+ int[] startEnd = align.getVisibleStartAndEndIndex(hiddenCols);
+ assertEquals(0, startEnd[0]);
+ assertEquals(25, startEnd[1]);
+
+ hiddenCols.add(new int[] { 0, 0 });
+ startEnd = align.getVisibleStartAndEndIndex(hiddenCols);
+ assertEquals(1, startEnd[0]);
+ assertEquals(25, startEnd[1]);
+
+ hiddenCols.add(new int[] { 6, 9 });
+ hiddenCols.add(new int[] { 11, 12 });
+ startEnd = align.getVisibleStartAndEndIndex(hiddenCols);
+ assertEquals(1, startEnd[0]);
+ assertEquals(25, startEnd[1]);
+
+ hiddenCols.add(new int[] { 24, 25 });
+ startEnd = align.getVisibleStartAndEndIndex(hiddenCols);
+ System.out.println(startEnd[0] + " : " + startEnd[1]);
+ assertEquals(1, startEnd[0]);
+ assertEquals(23, startEnd[1]);
+ }
}
assertEquals(2, cs.findColumnPosition(5));
}
+ /**
+ * Test the code used to locate the reference sequence ruler origin
+ */
+ @Test(groups = { "Functional" })
+ public void testLocateVisibleBoundsofSequence()
+ {
+ ColumnSelection cs = new ColumnSelection();
+ SequenceI seq = new Sequence("RefSeq", "-A-SD-ASD--E---");
+ assertEquals(2, seq.findIndex(seq.getStart()));
+
+ // no hidden columns
+ assertEquals(
+ Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1, seq.getStart(),
+ seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
+ Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
+
+ // hidden column on gap after end of sequence - should not affect bounds
+ cs.hideColumns(13);
+ assertEquals(
+ Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1, seq.getStart(),
+ seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
+ Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
+
+ cs.revealAllHiddenColumns();
+ // hidden column on gap before beginning of sequence - should vis bounds by
+ // one
+ cs.hideColumns(0);
+ assertEquals(
+ Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 2,
+ seq.findIndex(seq.getEnd()) - 2, seq.getStart(),
+ seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
+ Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
+
+ cs.revealAllHiddenColumns();
+ // hide columns around most of sequence - leave one residue remaining
+ cs.hideColumns(1, 3);
+ cs.hideColumns(6, 11);
+ assertEquals("-D",
+ cs.getVisibleSequenceStrings(0, 5, new SequenceI[] { seq })[0]);
+ assertEquals(
+ Arrays.toString(new int[] { 1, 1, 3, 3,
+ seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
+ Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
+ cs.revealAllHiddenColumns();
+
+ // hide whole sequence - should just get location of hidden region
+ // containing sequence
+ cs.hideColumns(1, 11);
+ assertEquals(
+ Arrays.toString(new int[] { 0, 1, 0, 0,
+ seq.findIndex(seq.getStart()) - 1,
+ seq.findIndex(seq.getEnd()) - 1 }),
+ Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
+
+ }
+
+ @Test(groups={"Functional"})
+ public void testLocateVisibleBoundsPathologicals()
+ {
+ // test some pathological cases we missed
+ AlignmentI al = new Alignment(new SequenceI[] { new Sequence("refseqGaptest","KTDVTI----------NFI-----G----L")});
+ ColumnSelection cs = new ColumnSelection();
+ cs.hideInsertionsFor(al.getSequenceAt(0));
+ assertEquals(
+ "G",
+ ""
+ + al.getSequenceAt(0).getCharAt(
+ cs.adjustForHiddenColumns(9)));
+
+
+ }
@Test(groups = { "Functional" })
public void testHideColumns()
{
}
/**
+ * Test the method that gets runs of selected columns ordered by column. If
+ * this fails, HideSelectedColumns may also fail
+ */
+ @Test(groups = { "Functional" })
+ public void testgetSelectedRanges()
+ {
+ ColumnSelection cs = new ColumnSelection();
+ int[] sel = { 2, 3, 4, 7, 8, 9, 20, 21, 22 };
+ for (int col : sel)
+ {
+ cs.addElement(col);
+ }
+ List<int[]> range;
+ range = cs.getSelectedRanges();
+ assertEquals(3, range.size());
+ assertEquals("[2, 4]", Arrays.toString(range.get(0)));
+ assertEquals("[7, 9]", Arrays.toString(range.get(1)));
+ assertEquals("[20, 22]", Arrays.toString(range.get(2)));
+ cs.addElement(0);
+ cs.addElement(1);
+ range = cs.getSelectedRanges();
+ assertEquals(3, range.size());
+ assertEquals("[0, 4]", Arrays.toString(range.get(0)));
+ }
+
+ /**
* Test the method that reveals a range of hidden columns given the start
* column of the range
*/
cs.invertColumnSelection(1, 9);
assertEquals("[1, 4, 8]", cs.getSelected().toString());
}
+
+ @Test(groups = { "Functional" })
+ public void testMaxColumnSelection()
+ {
+ ColumnSelection cs = new ColumnSelection();
+ cs.addElement(0);
+ cs.addElement(513);
+ cs.addElement(1);
+ assertEquals(513, cs.getMax());
+ cs.removeElement(513);
+ assertEquals(1, cs.getMax());
+ cs.removeElement(1);
+ assertEquals(0, cs.getMax());
+ cs.addElement(512);
+ cs.addElement(513);
+ assertEquals(513, cs.getMax());
+
+ }
+
+ @Test(groups = { "Functional" })
+ public void testMinColumnSelection()
+ {
+ ColumnSelection cs = new ColumnSelection();
+ cs.addElement(0);
+ cs.addElement(513);
+ cs.addElement(1);
+ assertEquals(0, cs.getMin());
+ cs.removeElement(0);
+ assertEquals(1, cs.getMin());
+ cs.addElement(0);
+ assertEquals(0, cs.getMin());
+ }
}
assertEquals("[[1, 6], [11, 13], [15, 20]]", result);
}
+ @Test(groups = { "Functional" })
+ public void testToString()
+ {
+ /*
+ * with no sequence
+ */
+ MapList fk = new MapList(new int[] { 1, 6, 8, 13 }, new int[] { 4, 7 },
+ 3, 1);
+ Mapping m = new Mapping(fk);
+ assertEquals("[ [1, 6] [8, 13] ] 3:1 to [ [4, 7] ] ", m.toString());
+
+ /*
+ * with a sequence
+ */
+ SequenceI seq = new Sequence("Seq1", "");
+ m = new Mapping(seq, fk);
+ assertEquals("[ [1, 6] [8, 13] ] 3:1 to [ [4, 7] ] Seq1", m.toString());
+ }
}
--- /dev/null
+package jalview.datamodel;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
+
+import jalview.datamodel.MappingType;
+
+import org.testng.annotations.Test;
+
+public class MappingTypeTest
+{
+
+ @Test(groups = "Functional")
+ public void testGetInverse()
+ {
+ assertSame(MappingType.PeptideToNucleotide,
+ MappingType.NucleotideToPeptide.getInverse());
+ assertSame(MappingType.NucleotideToPeptide,
+ MappingType.PeptideToNucleotide.getInverse());
+ assertSame(MappingType.NucleotideToNucleotide,
+ MappingType.NucleotideToNucleotide.getInverse());
+ assertSame(MappingType.PeptideToPeptide,
+ MappingType.PeptideToPeptide.getInverse());
+ }
+
+ @Test(groups = "Functional")
+ public void testGetFromRatio()
+ {
+ assertEquals(1, MappingType.NucleotideToNucleotide.getFromRatio());
+ assertEquals(1, MappingType.PeptideToNucleotide.getFromRatio());
+ assertEquals(1, MappingType.PeptideToPeptide.getFromRatio());
+ assertEquals(3, MappingType.NucleotideToPeptide.getFromRatio());
+ }
+
+ @Test(groups = "Functional")
+ public void testGetToRatio()
+ {
+ assertEquals(1, MappingType.NucleotideToNucleotide.getToRatio());
+ assertEquals(3, MappingType.PeptideToNucleotide.getToRatio());
+ assertEquals(1, MappingType.PeptideToPeptide.getToRatio());
+ assertEquals(1, MappingType.NucleotideToPeptide.getToRatio());
+ }
+}
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
+import jalview.datamodel.SearchResults.Match;
+
import org.testng.annotations.Test;
public class SearchResultsTest
sr2.addResult(seq1, 6, 8);
assertEquals(sr1.hashCode(), sr2.hashCode());
}
+
+ /**
+ * Verify that SearchResults$Match constructor normalises start/end to the
+ * 'forwards' direction
+ */
+ @Test(groups = { "Functional" })
+ public void testMatchConstructor()
+ {
+ SequenceI seq1 = new Sequence("", "abcdefghijklm");
+ Match m = new SearchResults().new Match(seq1, 2, 5);
+ assertSame(seq1, m.getSequence());
+ assertEquals(2, m.getStart());
+ assertEquals(5, m.getEnd());
+
+ // now a reverse mapping:
+ m = new SearchResults().new Match(seq1, 5, 2);
+ assertSame(seq1, m.getSequence());
+ assertEquals(2, m.getStart());
+ assertEquals(5, m.getEnd());
+ }
}
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
+import jalview.util.Comparison;
+
import org.testng.annotations.Test;
/**
*/
public class SeqCigarTest
{
+ @Test(groups = { "Functional" })
+ public void testFindPosition()
+ {
+ SequenceI oseq = new Sequence("MySeq", "ASD---ASD---ASD", 37, 45);
+ oseq.createDatasetSequence();
+ SeqCigar cs = new SeqCigar(oseq);
+ assertEquals(oseq.getSequenceAsString(), cs.getSequenceString('-'));
+ for (int c = 0, cLen = oseq.getLength(); c < cLen; c++)
+ {
+ int os_p = oseq.findPosition(c);
+ int cigar_p = cs.findPosition(c);
+ if (Comparison.isGap(oseq.getCharAt(c)))
+ {
+ assertEquals("Expected gap at position " + os_p + " column " + c,
+ -1, cigar_p);
+ }
+ else
+ {
+ assertEquals("Positions don't match for at column " + c, os_p,
+ cigar_p);
+ }
+ }
+ }
/*
* refactored 'as is' from main method
*
import org.testng.annotations.Test;
+@Test
public class SequenceDummyTest
{
/**
--- /dev/null
+package jalview.datamodel;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+
+import org.testng.annotations.Test;
+
+public class SequenceFeatureTest
+{
+ @Test(groups = { "Functional" })
+ public void testCopyConstructor()
+ {
+ SequenceFeature sf1 = new SequenceFeature("type", "desc", 22, 33,
+ 12.5f, "group");
+ sf1.setValue("STRAND", "+");
+ sf1.setValue("Note", "Testing");
+ Integer count = new Integer(7);
+ sf1.setValue("Count", count);
+
+ SequenceFeature sf2 = new SequenceFeature(sf1);
+ assertEquals("type", sf2.getType());
+ assertEquals("desc", sf2.getDescription());
+ assertEquals(22, sf2.getBegin());
+ assertEquals(33, sf2.getEnd());
+ assertEquals("+", sf2.getValue("STRAND"));
+ assertEquals("Testing", sf2.getValue("Note"));
+ // shallow clone of otherDetails map - contains the same object values!
+ assertSame(count, sf2.getValue("Count"));
+ }
+
+ /**
+ * Tests for retrieving a 'miscellaneous details' property value, with or
+ * without a supplied default
+ */
+ @Test(groups = { "Functional" })
+ public void testGetValue()
+ {
+ SequenceFeature sf1 = new SequenceFeature("type", "desc", 22, 33,
+ 12.5f, "group");
+ sf1.setValue("STRAND", "+");
+ assertEquals("+", sf1.getValue("STRAND"));
+ assertNull(sf1.getValue("strand")); // case-sensitive
+ assertEquals(".", sf1.getValue("unknown", "."));
+ Integer i = new Integer(27);
+ assertSame(i, sf1.getValue("Unknown", i));
+ }
+
+ /**
+ * Tests the method that returns 1 / -1 / 0 for strand "+" / "-" / other
+ */
+ @Test(groups = { "Functional" })
+ public void testGetStrand()
+ {
+ SequenceFeature sf = new SequenceFeature("type", "desc", 22, 33, 12.5f,
+ "group");
+ assertEquals(0, sf.getStrand());
+ sf.setValue("STRAND", "+");
+ assertEquals(1, sf.getStrand());
+ sf.setValue("STRAND", "-");
+ assertEquals(-1, sf.getStrand());
+ sf.setValue("STRAND", ".");
+ assertEquals(0, sf.getStrand());
+ }
+
+ /**
+ * Tests for equality, and that equal objects have the same hashCode
+ */
+ @Test(groups = { "Functional" })
+ public void testEqualsAndHashCode()
+ {
+ SequenceFeature sf1 = new SequenceFeature("type", "desc", 22, 33,
+ 12.5f, "group");
+ sf1.setValue("ID", "id");
+ sf1.setValue("Name", "name");
+ sf1.setValue("Parent", "parent");
+ sf1.setStrand("+");
+ sf1.setPhase("1");
+ SequenceFeature sf2 = new SequenceFeature("type", "desc", 22, 33,
+ 12.5f, "group");
+ sf2.setValue("ID", "id");
+ sf2.setValue("Name", "name");
+ sf2.setValue("Parent", "parent");
+ sf2.setStrand("+");
+ sf2.setPhase("1");
+
+ assertFalse(sf1.equals(null));
+ assertTrue(sf1.equals(sf2));
+ assertTrue(sf2.equals(sf1));
+ assertEquals(sf1.hashCode(), sf2.hashCode());
+
+ // changing type breaks equals:
+ sf2.setType("Type");
+ assertFalse(sf1.equals(sf2));
+
+ // changing description breaks equals:
+ sf2.setType("type");
+ sf2.setDescription("Desc");
+ assertFalse(sf1.equals(sf2));
+
+ // changing start position breaks equals:
+ sf2.setDescription("desc");
+ sf2.setBegin(21);
+ assertFalse(sf1.equals(sf2));
+
+ // changing end position breaks equals:
+ sf2.setBegin(22);
+ sf2.setEnd(32);
+ assertFalse(sf1.equals(sf2));
+
+ // changing feature group breaks equals:
+ sf2.setEnd(33);
+ sf2.setFeatureGroup("Group");
+ assertFalse(sf1.equals(sf2));
+
+ // changing ID breaks equals:
+ sf2.setFeatureGroup("group");
+ sf2.setValue("ID", "id2");
+ assertFalse(sf1.equals(sf2));
+
+ // changing Name breaks equals:
+ sf2.setValue("ID", "id");
+ sf2.setValue("Name", "Name");
+ assertFalse(sf1.equals(sf2));
+
+ // changing Parent breaks equals:
+ sf2.setValue("Name", "name");
+ sf1.setValue("Parent", "Parent");
+ assertFalse(sf1.equals(sf2));
+
+ // changing strand breaks equals:
+ sf1.setValue("Parent", "parent");
+ sf2.setStrand("-");
+ assertFalse(sf1.equals(sf2));
+
+ // changing phase breaks equals:
+ sf2.setStrand("+");
+ sf1.setPhase("2");
+ assertFalse(sf1.equals(sf2));
+
+ // restore equality as sanity check:
+ sf1.setPhase("1");
+ assertTrue(sf1.equals(sf2));
+ assertTrue(sf2.equals(sf1));
+ assertEquals(sf1.hashCode(), sf2.hashCode());
+
+ // changing status doesn't change equals:
+ sf1.setStatus("new");
+ assertTrue(sf1.equals(sf2));
+ }
+}
package jalview.datamodel;
import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
+
+import jalview.datamodel.PDBEntry.Type;
import java.util.Arrays;
import java.util.List;
+import java.util.Vector;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class SequenceTest
{
- SequenceI seq;
+ Sequence seq;
@BeforeMethod(alwaysRun = true)
public void setUp()
assertEquals(2, anns.length);
assertSame(annotation, anns[0]);
assertSame(annotation2, anns[1]);
-
}
@Test(groups = { "Functional" })
public void testGetStartGetEnd()
{
- SequenceI seq = new Sequence("test", "ABCDEF");
- assertEquals(1, seq.getStart());
- assertEquals(6, seq.getEnd());
+ SequenceI sq = new Sequence("test", "ABCDEF");
+ assertEquals(1, sq.getStart());
+ assertEquals(6, sq.getEnd());
- seq = new Sequence("test", "--AB-C-DEF--");
- assertEquals(1, seq.getStart());
- assertEquals(6, seq.getEnd());
+ sq = new Sequence("test", "--AB-C-DEF--");
+ assertEquals(1, sq.getStart());
+ assertEquals(6, sq.getEnd());
- seq = new Sequence("test", "----");
- assertEquals(1, seq.getStart());
- assertEquals(0, seq.getEnd()); // ??
+ sq = new Sequence("test", "----");
+ assertEquals(1, sq.getStart());
+ assertEquals(0, sq.getEnd()); // ??
}
/**
@Test(groups = { "Functional" })
public void testFindIndex()
{
- SequenceI seq = new Sequence("test", "ABCDEF");
- assertEquals(0, seq.findIndex(0));
- assertEquals(1, seq.findIndex(1));
- assertEquals(5, seq.findIndex(5));
- assertEquals(6, seq.findIndex(6));
- assertEquals(6, seq.findIndex(9));
-
- seq = new Sequence("test", "-A--B-C-D-E-F--");
- assertEquals(2, seq.findIndex(1));
- assertEquals(5, seq.findIndex(2));
- assertEquals(7, seq.findIndex(3));
+ SequenceI sq = new Sequence("test", "ABCDEF");
+ assertEquals(0, sq.findIndex(0));
+ assertEquals(1, sq.findIndex(1));
+ assertEquals(5, sq.findIndex(5));
+ assertEquals(6, sq.findIndex(6));
+ assertEquals(6, sq.findIndex(9));
+
+ sq = new Sequence("test", "-A--B-C-D-E-F--");
+ assertEquals(2, sq.findIndex(1));
+ assertEquals(5, sq.findIndex(2));
+ assertEquals(7, sq.findIndex(3));
// before start returns 0
- assertEquals(0, seq.findIndex(0));
- assertEquals(0, seq.findIndex(-1));
+ assertEquals(0, sq.findIndex(0));
+ assertEquals(0, sq.findIndex(-1));
// beyond end returns last residue column
- assertEquals(13, seq.findIndex(99));
+ assertEquals(13, sq.findIndex(99));
}
@Test(groups = { "Functional" })
public void testFindPosition()
{
- SequenceI seq = new Sequence("test", "ABCDEF");
- assertEquals(1, seq.findPosition(0));
- assertEquals(6, seq.findPosition(5));
+ SequenceI sq = new Sequence("test", "ABCDEF");
+ assertEquals(1, sq.findPosition(0));
+ assertEquals(6, sq.findPosition(5));
// assertEquals(-1, seq.findPosition(6)); // fails
- seq = new Sequence("test", "AB-C-D--");
- assertEquals(1, seq.findPosition(0));
- assertEquals(2, seq.findPosition(1));
+ sq = new Sequence("test", "AB-C-D--");
+ assertEquals(1, sq.findPosition(0));
+ assertEquals(2, sq.findPosition(1));
// gap position 'finds' residue to the right (not the left as per javadoc)
- assertEquals(3, seq.findPosition(2));
- assertEquals(3, seq.findPosition(3));
- assertEquals(4, seq.findPosition(4));
- assertEquals(4, seq.findPosition(5));
+ assertEquals(3, sq.findPosition(2));
+ assertEquals(3, sq.findPosition(3));
+ assertEquals(4, sq.findPosition(4));
+ assertEquals(4, sq.findPosition(5));
// returns 1 more than sequence length if off the end ?!?
- assertEquals(5, seq.findPosition(6));
- assertEquals(5, seq.findPosition(7));
-
- seq = new Sequence("test", "--AB-C-DEF--");
- assertEquals(1, seq.findPosition(0));
- assertEquals(1, seq.findPosition(1));
- assertEquals(1, seq.findPosition(2));
- assertEquals(2, seq.findPosition(3));
- assertEquals(3, seq.findPosition(4));
- assertEquals(3, seq.findPosition(5));
- assertEquals(4, seq.findPosition(6));
- assertEquals(4, seq.findPosition(7));
- assertEquals(5, seq.findPosition(8));
- assertEquals(6, seq.findPosition(9));
- assertEquals(7, seq.findPosition(10));
- assertEquals(7, seq.findPosition(11));
+ assertEquals(5, sq.findPosition(6));
+ assertEquals(5, sq.findPosition(7));
+
+ sq = new Sequence("test", "--AB-C-DEF--");
+ assertEquals(1, sq.findPosition(0));
+ assertEquals(1, sq.findPosition(1));
+ assertEquals(1, sq.findPosition(2));
+ assertEquals(2, sq.findPosition(3));
+ assertEquals(3, sq.findPosition(4));
+ assertEquals(3, sq.findPosition(5));
+ assertEquals(4, sq.findPosition(6));
+ assertEquals(4, sq.findPosition(7));
+ assertEquals(5, sq.findPosition(8));
+ assertEquals(6, sq.findPosition(9));
+ assertEquals(7, sq.findPosition(10));
+ assertEquals(7, sq.findPosition(11));
}
@Test(groups = { "Functional" })
public void testDeleteChars()
{
- SequenceI seq = new Sequence("test", "ABCDEF");
- assertEquals(1, seq.getStart());
- assertEquals(6, seq.getEnd());
- seq.deleteChars(2, 3);
- assertEquals("ABDEF", seq.getSequenceAsString());
- assertEquals(1, seq.getStart());
- assertEquals(5, seq.getEnd());
-
- seq = new Sequence("test", "ABCDEF");
- seq.deleteChars(0, 2);
- assertEquals("CDEF", seq.getSequenceAsString());
- assertEquals(3, seq.getStart());
- assertEquals(6, seq.getEnd());
+ SequenceI sq = new Sequence("test", "ABCDEF");
+ assertEquals(1, sq.getStart());
+ assertEquals(6, sq.getEnd());
+ sq.deleteChars(2, 3);
+ assertEquals("ABDEF", sq.getSequenceAsString());
+ assertEquals(1, sq.getStart());
+ assertEquals(5, sq.getEnd());
+
+ sq = new Sequence("test", "ABCDEF");
+ sq.deleteChars(0, 2);
+ assertEquals("CDEF", sq.getSequenceAsString());
+ assertEquals(3, sq.getStart());
+ assertEquals(6, sq.getEnd());
}
@Test(groups = { "Functional" })
public void testInsertCharAt()
{
// non-static methods:
- SequenceI seq = new Sequence("test", "ABCDEF");
- seq.insertCharAt(0, 'z');
- assertEquals("zABCDEF", seq.getSequenceAsString());
- seq.insertCharAt(2, 2, 'x');
- assertEquals("zAxxBCDEF", seq.getSequenceAsString());
+ SequenceI sq = new Sequence("test", "ABCDEF");
+ sq.insertCharAt(0, 'z');
+ assertEquals("zABCDEF", sq.getSequenceAsString());
+ sq.insertCharAt(2, 2, 'x');
+ assertEquals("zAxxBCDEF", sq.getSequenceAsString());
// for static method see StringUtilsTest
}
@Test(groups = { "Functional" })
public void testGapMap()
{
- SequenceI seq = new Sequence("test", "-A--B-CD-E--F-");
- seq.createDatasetSequence();
- assertEquals("[1, 4, 6, 7, 9, 12]", Arrays.toString(seq.gapMap()));
+ SequenceI sq = new Sequence("test", "-A--B-CD-E--F-");
+ sq.createDatasetSequence();
+ assertEquals("[1, 4, 6, 7, 9, 12]", Arrays.toString(sq.gapMap()));
}
/**
@Test(groups = { "Functional" })
public void testGetSequenceFeatures()
{
- SequenceI seq = new Sequence("test", "GATCAT");
- seq.createDatasetSequence();
+ SequenceI sq = new Sequence("test", "GATCAT");
+ sq.createDatasetSequence();
- assertNull(seq.getSequenceFeatures());
+ assertNull(sq.getSequenceFeatures());
/*
* SequenceFeature on sequence
*/
SequenceFeature sf = new SequenceFeature();
- seq.addSequenceFeature(sf);
- SequenceFeature[] sfs = seq.getSequenceFeatures();
+ sq.addSequenceFeature(sf);
+ SequenceFeature[] sfs = sq.getSequenceFeatures();
assertEquals(1, sfs.length);
assertSame(sf, sfs[0]);
+
/*
* SequenceFeature on sequence and dataset sequence; returns that on
* sequence
+ *
+ * Note JAL-2046: spurious: we have no use case for this at the moment.
+ * This test also buggy - as sf2.equals(sf), no new feature is added
*/
SequenceFeature sf2 = new SequenceFeature();
- seq.getDatasetSequence().addSequenceFeature(sf2);
- sfs = seq.getSequenceFeatures();
+ sq.getDatasetSequence().addSequenceFeature(sf2);
+ sfs = sq.getSequenceFeatures();
assertEquals(1, sfs.length);
assertSame(sf, sfs[0]);
/*
* SequenceFeature on dataset sequence only
+ * Note JAL-2046: spurious: we have no use case for setting a non-dataset sequence's feature array to null at the moment.
*/
- seq.setSequenceFeatures(null);
- sfs = seq.getSequenceFeatures();
- assertEquals(1, sfs.length);
- assertSame(sf2, sfs[0]);
+ sq.setSequenceFeatures(null);
+ assertNull(sq.getDatasetSequence().getSequenceFeatures());
/*
* Corrupt case - no SequenceFeature, dataset's dataset is the original
* sequence. Test shows no infinite loop results.
*/
- seq.getDatasetSequence().setSequenceFeatures(null);
- seq.getDatasetSequence().setDatasetSequence(seq); // loop!
- assertNull(seq.getSequenceFeatures());
+ sq.getDatasetSequence().setSequenceFeatures(null);
+ /**
+ * is there a usecase for this ? setDatasetSequence should throw an error if
+ * this actually occurs.
+ */
+ sq.getDatasetSequence().setDatasetSequence(sq); // loop!
+ assertNull(sq.getSequenceFeatures());
}
/**
* right. Also it returns a non-existent residue position for a gap beyond
* the sequence.
*/
- Sequence seq = new Sequence("TestSeq", "AB.C-D E.");
- int[] map = seq.findPositionMap();
+ Sequence sq = new Sequence("TestSeq", "AB.C-D E.");
+ int[] map = sq.findPositionMap();
assertEquals(Arrays.toString(new int[] { 1, 2, 3, 3, 4, 4, 5, 5, 6 }),
Arrays.toString(map));
}
@Test(groups = { "Functional" })
public void testGetSubsequence()
{
- SequenceI seq = new Sequence("TestSeq", "ABCDEFG");
- seq.createDatasetSequence();
+ SequenceI sq = new Sequence("TestSeq", "ABCDEFG");
+ sq.createDatasetSequence();
// positions are base 0, end position is exclusive
- SequenceI subseq = seq.getSubSequence(2, 4);
+ SequenceI subseq = sq.getSubSequence(2, 4);
assertEquals("CD", subseq.getSequenceAsString());
// start/end are base 1 positions
assertEquals(3, subseq.getStart());
assertEquals(4, subseq.getEnd());
// subsequence shares the full dataset sequence
- assertSame(seq.getDatasetSequence(), subseq.getDatasetSequence());
+ assertSame(sq.getDatasetSequence(), subseq.getDatasetSequence());
}
/**
@Test(groups = { "Functional" })
public void testDeriveSequence_existingDataset()
{
- SequenceI seq = new Sequence("Seq1", "CD");
- seq.setDatasetSequence(new Sequence("Seq1", "ABCDEF"));
- seq.setStart(3);
- seq.setEnd(4);
- SequenceI derived = seq.deriveSequence();
+ Sequence sq = new Sequence("Seq1", "CD");
+ sq.setDatasetSequence(new Sequence("Seq1", "ABCDEF"));
+ sq.getDatasetSequence().addSequenceFeature(
+ new SequenceFeature("", "", 1, 2, 0f, null));
+ sq.setStart(3);
+ sq.setEnd(4);
+
+ Sequence derived = (Sequence) sq.deriveSequence();
assertEquals("CD", derived.getSequenceAsString());
- assertSame(seq.getDatasetSequence(), derived.getDatasetSequence());
+ assertSame(sq.getDatasetSequence(), derived.getDatasetSequence());
+
+ assertNull(sq.sequenceFeatures);
+ assertNull(derived.sequenceFeatures);
+ // derived sequence should access dataset sequence features
+ assertNotNull(sq.getSequenceFeatures());
+ assertArrayEquals(sq.getSequenceFeatures(),
+ derived.getSequenceFeatures());
}
/**
@Test(groups = { "Functional" })
public void testDeriveSequence_noDatasetUngapped()
{
- SequenceI seq = new Sequence("Seq1", "ABCDEF");
- assertEquals(1, seq.getStart());
- assertEquals(6, seq.getEnd());
- SequenceI derived = seq.deriveSequence();
+ SequenceI sq = new Sequence("Seq1", "ABCDEF");
+ assertEquals(1, sq.getStart());
+ assertEquals(6, sq.getEnd());
+ SequenceI derived = sq.deriveSequence();
assertEquals("ABCDEF", derived.getSequenceAsString());
assertEquals("ABCDEF", derived.getDatasetSequence()
.getSequenceAsString());
@Test(groups = { "Functional" })
public void testDeriveSequence_noDatasetGapped()
{
- SequenceI seq = new Sequence("Seq1", "AB-C.D EF");
- assertEquals(1, seq.getStart());
- assertEquals(6, seq.getEnd());
- assertNull(seq.getDatasetSequence());
- SequenceI derived = seq.deriveSequence();
+ SequenceI sq = new Sequence("Seq1", "AB-C.D EF");
+ assertEquals(1, sq.getStart());
+ assertEquals(6, sq.getEnd());
+ assertNull(sq.getDatasetSequence());
+ SequenceI derived = sq.deriveSequence();
assertEquals("AB-C.D EF", derived.getSequenceAsString());
assertEquals("ABCDEF", derived.getDatasetSequence()
.getSequenceAsString());
}
+
+ @Test(groups = { "Functional" })
+ public void testCopyConstructor_noDataset()
+ {
+ SequenceI seq1 = new Sequence("Seq1", "AB-C.D EF");
+ seq1.setDescription("description");
+ seq1.addAlignmentAnnotation(new AlignmentAnnotation("label", "desc",
+ 1.3d));
+ seq1.addSequenceFeature(new SequenceFeature("type", "desc", 22, 33,
+ 12.4f, "group"));
+ seq1.addPDBId(new PDBEntry("1A70", "B", Type.PDB, "File"));
+ seq1.addDBRef(new DBRefEntry("EMBL", "1.2", "AZ12345"));
+
+ SequenceI copy = new Sequence(seq1);
+
+ assertNull(copy.getDatasetSequence());
+
+ verifyCopiedSequence(seq1, copy);
+
+ // copy has a copy of the DBRefEntry
+ // this is murky - DBrefs are only copied for dataset sequences
+ // where the test for 'dataset sequence' is 'dataset is null'
+ // but that doesn't distinguish it from an aligned sequence
+ // which has not yet generated a dataset sequence
+ // NB getDBRef looks inside dataset sequence if not null
+ DBRefEntry[] dbrefs = copy.getDBRefs();
+ assertEquals(1, dbrefs.length);
+ assertFalse(dbrefs[0] == seq1.getDBRefs()[0]);
+ assertTrue(dbrefs[0].equals(seq1.getDBRefs()[0]));
+ }
+
+ @Test(groups = { "Functional" })
+ public void testCopyConstructor_withDataset()
+ {
+ SequenceI seq1 = new Sequence("Seq1", "AB-C.D EF");
+ seq1.createDatasetSequence();
+ seq1.setDescription("description");
+ seq1.addAlignmentAnnotation(new AlignmentAnnotation("label", "desc",
+ 1.3d));
+ // JAL-2046 - what is the contract for using a derived sequence's
+ // addSequenceFeature ?
+ seq1.addSequenceFeature(new SequenceFeature("type", "desc", 22, 33,
+ 12.4f, "group"));
+ seq1.addPDBId(new PDBEntry("1A70", "B", Type.PDB, "File"));
+ // here we add DBRef to the dataset sequence:
+ seq1.getDatasetSequence().addDBRef(
+ new DBRefEntry("EMBL", "1.2", "AZ12345"));
+
+ SequenceI copy = new Sequence(seq1);
+
+ assertNotNull(copy.getDatasetSequence());
+ assertSame(copy.getDatasetSequence(), seq1.getDatasetSequence());
+
+ verifyCopiedSequence(seq1, copy);
+
+ // getDBRef looks inside dataset sequence and this is shared,
+ // so holds the same dbref objects
+ DBRefEntry[] dbrefs = copy.getDBRefs();
+ assertEquals(1, dbrefs.length);
+ assertSame(dbrefs[0], seq1.getDBRefs()[0]);
+ }
+
+ /**
+ * Helper to make assertions about a copied sequence
+ *
+ * @param seq1
+ * @param copy
+ */
+ protected void verifyCopiedSequence(SequenceI seq1, SequenceI copy)
+ {
+ // verify basic properties:
+ assertEquals(copy.getName(), seq1.getName());
+ assertEquals(copy.getDescription(), seq1.getDescription());
+ assertEquals(copy.getStart(), seq1.getStart());
+ assertEquals(copy.getEnd(), seq1.getEnd());
+ assertEquals(copy.getSequenceAsString(), seq1.getSequenceAsString());
+
+ // copy has a copy of the annotation:
+ AlignmentAnnotation[] anns = copy.getAnnotation();
+ assertEquals(1, anns.length);
+ assertFalse(anns[0] == seq1.getAnnotation()[0]);
+ assertEquals(anns[0].label, seq1.getAnnotation()[0].label);
+ assertEquals(anns[0].description, seq1.getAnnotation()[0].description);
+ assertEquals(anns[0].score, seq1.getAnnotation()[0].score);
+
+ // copy has a copy of the sequence feature:
+ SequenceFeature[] sfs = copy.getSequenceFeatures();
+ assertEquals(1, sfs.length);
+ if (seq1.getDatasetSequence()!=null && copy.getDatasetSequence()==seq1.getDatasetSequence()) {
+ assertTrue(sfs[0] == seq1.getSequenceFeatures()[0]);
+ } else {
+ assertFalse(sfs[0] == seq1.getSequenceFeatures()[0]);
+ }
+ assertTrue(sfs[0].equals(seq1.getSequenceFeatures()[0]));
+
+ // copy has a copy of the PDB entry
+ Vector<PDBEntry> pdbs = copy.getAllPDBEntries();
+ assertEquals(1, pdbs.size());
+ assertFalse(pdbs.get(0) == seq1.getAllPDBEntries().get(0));
+ assertTrue(pdbs.get(0).equals(seq1.getAllPDBEntries().get(0)));
+ }
+
+ @Test(groups = "Functional")
+ public void testGetCharAt()
+ {
+ SequenceI sq = new Sequence("", "abcde");
+ assertEquals('a', sq.getCharAt(0));
+ assertEquals('e', sq.getCharAt(4));
+ assertEquals(' ', sq.getCharAt(5));
+ assertEquals(' ', sq.getCharAt(-1));
+ }
}
--- /dev/null
+package jalview.datamodel.xdb.embl;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
+
+import jalview.util.MappingUtils;
+
+import java.util.Arrays;
+import java.util.Vector;
+
+import org.testng.annotations.Test;
+
+public class EmblEntryTest
+{
+ @Test(groups = "Functional")
+ public void testGetCdsRanges()
+ {
+ EmblEntry testee = new EmblEntry();
+
+ /*
+ * Make a (CDS) Feature with 4 locations
+ */
+ EmblFeature cds = new EmblFeature();
+ Vector<EmblFeatureLocations> locs = new Vector<EmblFeatureLocations>();
+ cds.setLocations(locs);
+
+ /*
+ * single range [10-20]
+ */
+ EmblFeatureLocations loc = new EmblFeatureLocations();
+ loc.setLocationType("single");
+ loc.setLocationComplement(false);
+ Vector<EmblFeatureLocElement> elements = new Vector<EmblFeatureLocElement>();
+ EmblFeatureLocElement locElement = new EmblFeatureLocElement();
+ BasePosition b1 = new BasePosition();
+ b1.setPos("10");
+ BasePosition b2 = new BasePosition();
+ b2.setPos("20");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * complement range [30-40]
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("single");
+ loc.setLocationComplement(true);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("30");
+ b2 = new BasePosition();
+ b2.setPos("40");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * join range [50-60], [70-80]
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("join");
+ loc.setLocationComplement(false);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("50");
+ b2 = new BasePosition();
+ b2.setPos("60");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("70");
+ b2 = new BasePosition();
+ b2.setPos("80");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * complement range [90-100], [110-120]
+ * this should be the same as complement(join(90..100,110.120))
+ * which is "join 90-100 and 110-120, then complement"
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("join");
+ loc.setLocationComplement(true);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("90");
+ b2 = new BasePosition();
+ b2.setPos("100");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("110");
+ b2 = new BasePosition();
+ b2.setPos("120");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ int[] exons = testee.getCdsRanges(cds);
+ assertEquals("[10, 20, 40, 30, 50, 60, 70, 80, 120, 110, 100, 90]",
+ Arrays.toString(exons));
+ }
+
+ @Test(groups = "Functional")
+ public void testGetCdsRanges_badData()
+ {
+ EmblEntry testee = new EmblEntry();
+
+ /*
+ * Make a (CDS) Feature with 4 locations
+ */
+ EmblFeature cds = new EmblFeature();
+ Vector<EmblFeatureLocations> locs = new Vector<EmblFeatureLocations>();
+ cds.setLocations(locs);
+
+ /*
+ * single range [10-20]
+ */
+ EmblFeatureLocations loc = new EmblFeatureLocations();
+ loc.setLocationType("single");
+ loc.setLocationComplement(false);
+ Vector<EmblFeatureLocElement> elements = new Vector<EmblFeatureLocElement>();
+ EmblFeatureLocElement locElement = new EmblFeatureLocElement();
+ BasePosition b1 = new BasePosition();
+ b1.setPos("10");
+ BasePosition b2 = new BasePosition();
+ b2.setPos("20");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * single range with missing end position - should be skipped
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("single");
+ loc.setLocationComplement(false);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("30");
+ locElement.setBasePositions(new BasePosition[] { b1 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * single range with extra base position - should be skipped
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("single");
+ loc.setLocationComplement(false);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("30");
+ locElement.setBasePositions(new BasePosition[] { b1, b1, b1 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * single valid range [50-60] to finish
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("single");
+ loc.setLocationComplement(false);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("50");
+ b2 = new BasePosition();
+ b2.setPos("60");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ int[] exons = testee.getCdsRanges(cds);
+ assertEquals("[10, 20, 50, 60]", Arrays.toString(exons));
+ }
+
+ /**
+ * Test retrieval of exon locations matching an accession id
+ */
+ @Test(groups = "Functional")
+ public void testGetCdsRanges_forAccession()
+ {
+ EmblEntry testee = new EmblEntry();
+ String accession = "A1234";
+ testee.setAccession(accession);
+ /*
+ * Make a (CDS) Feature with 4 locations
+ */
+ EmblFeature cds = new EmblFeature();
+ Vector<EmblFeatureLocations> locs = new Vector<EmblFeatureLocations>();
+ cds.setLocations(locs);
+
+ /*
+ * single range [10-20] for 'this' accession
+ */
+ EmblFeatureLocations loc = new EmblFeatureLocations();
+ loc.setLocationType("single");
+ loc.setLocationComplement(false);
+ Vector<EmblFeatureLocElement> elements = new Vector<EmblFeatureLocElement>();
+ EmblFeatureLocElement locElement = new EmblFeatureLocElement();
+ locElement.setAccession(accession);
+ BasePosition b1 = new BasePosition();
+ b1.setPos("10");
+ BasePosition b2 = new BasePosition();
+ b2.setPos("20");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * complement range [30-40] - no accession
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("single");
+ loc.setLocationComplement(true);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ b1 = new BasePosition();
+ b1.setPos("30");
+ b2 = new BasePosition();
+ b2.setPos("40");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * join range [50-60] this accession, [70-80] another
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("join");
+ loc.setLocationComplement(false);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ locElement.setAccession(accession);
+ b1 = new BasePosition();
+ b1.setPos("50");
+ b2 = new BasePosition();
+ b2.setPos("60");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ locElement = new EmblFeatureLocElement();
+ locElement.setAccession("notme");
+ b1 = new BasePosition();
+ b1.setPos("70");
+ b2 = new BasePosition();
+ b2.setPos("80");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * complement range [90-100] wrong accession, [110-120] good
+ * this should be the same as complement(join(90..100,110.120))
+ * which is "join 90-100 and 110-120, then complement"
+ */
+ loc = new EmblFeatureLocations();
+ loc.setLocationType("join");
+ loc.setLocationComplement(true);
+ elements = new Vector<EmblFeatureLocElement>();
+ locElement = new EmblFeatureLocElement();
+ locElement.setAccession("wrong");
+ b1 = new BasePosition();
+ b1.setPos("90");
+ b2 = new BasePosition();
+ b2.setPos("100");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ locElement = new EmblFeatureLocElement();
+ locElement.setAccession(accession);
+ b1 = new BasePosition();
+ b1.setPos("110");
+ b2 = new BasePosition();
+ b2.setPos("120");
+ locElement.setBasePositions(new BasePosition[] { b1, b2 });
+ elements.add(locElement);
+ loc.setLocElements(elements);
+ locs.add(loc);
+
+ /*
+ * verify we pick out only ranges for A1234
+ */
+ int[] exons = testee.getCdsRanges(cds);
+ assertEquals("[10, 20, 50, 60, 120, 110]",
+ Arrays.toString(exons));
+ }
+}
+ "<description>Chicken LDH-A mRNA for lactate dehydrogenase A chain (EC 1.1.1.27)</description>"
+ "<keyword>L-lactate dehydrogenase</keyword><keyword>chutney</keyword>"
+ "<dbreference db=\"EuropePMC\" primary=\"PMC1460223\" secondary=\"9649548\" />"
+ + "<dbreference db=\"MD5\" primary=\"d3b68\" />"
+ "<feature name=\"CDS\"><dbreference db=\"GOA\" primary=\"P00340\" secondary=\"2.1\" /><dbreference db=\"InterPro\" primary=\"IPR001236\" />"
+ "<qualifier name=\"note\"><value>L-lactate dehydrogenase A-chain</value><value>pickle</value></qualifier>"
+ "<qualifier name=\"translation\"><value>MSLKDHLIHN</value><evidence>Keith</evidence></qualifier>"
/*
* dbrefs
*/
- assertEquals(1, entry.getDbRefs().size());
+ assertEquals(2, entry.getDbRefs().size());
DBRefEntry dbref = entry.getDbRefs().get(0);
assertEquals("EuropePMC", dbref.getSource());
assertEquals("PMC1460223", dbref.getAccessionId());
assertEquals("9649548", dbref.getVersion());
+ dbref = entry.getDbRefs().get(1);
+ assertEquals("MD5", dbref.getSource());
+ assertEquals("d3b68", dbref.getAccessionId());
+ // blank version has been converted to "0"
+ assertEquals("0", dbref.getVersion());
/*
* sequence features
dbref = ef.getDbRefs().get(1);
assertEquals("InterPro", dbref.getSource());
assertEquals("IPR001236", dbref.getAccessionId());
- assertEquals("", dbref.getVersion());
+ // blank version converted to "0":
+ assertEquals("0", dbref.getVersion());
assertEquals(2, ef.getQualifiers().size());
// feature qualifiers
assertEquals("mRNA", seq.getType());
assertEquals("2", seq.getVersion());
assertEquals("GTGACG", seq.getSequence());
+
+ /*
+ * getSequence() converts empty DBRefEntry.version to "0"
+ */
+ assertEquals("0", entry.getDbRefs().get(1).getVersion());
+ assertEquals("0", entry.getFeatures().get(0).getDbRefs().get(1)
+ .getVersion());
}
}
--- /dev/null
+##gff-version 3
+# retrieved via http://rest.ensembl.org/overlap/id/ENSG00000157764?feature=gene&feature=transcript&feature=cds&content-type=text/x-gff3
+##sequence-region 7 140719327 140924764
+7 ensembl_havana gene 140719327 140722790 . + . ID=gene:ENSG00000090266;assembly_name=GRCh38;biotype=protein_coding;description=NADH dehydrogenase (ubiquinone) 1 beta subcomplex%2C 2%2C 8kDa [Source:HGNC Symbol%3BAcc:HGNC:7697];external_name=NDUFB2;logic_name=ensembl_havana_gene;version=11
+7 ensembl_havana gene 140719327 140924764 . - . ID=gene:ENSG00000157764;assembly_name=GRCh38;biotype=protein_coding;description=B-Raf proto-oncogene%2C serine/threonine kinase [Source:HGNC Symbol%3BAcc:HGNC:1097];external_name=BRAF;logic_name=ensembl_havana_gene;version=11
+7 ensembl snRNA_gene 140884072 140884178 . + . ID=gene:ENSG00000271932;assembly_name=GRCh38;biotype=snRNA;description=RNA%2C U6 small nuclear 85%2C pseudogene [Source:HGNC Symbol%3BAcc:HGNC:47048];external_name=RNU6-85P;logic_name=ncrna;version=1
+7 ensembl_havana transcript 140719327 140722790 . + . ID=transcript:ENST00000476279;Parent=gene:ENSG00000090266;assembly_name=GRCh38;biotype=protein_coding;external_name=NDUFB2-003;logic_name=havana;version=4
+7 ensembl_havana transcript 140719327 140721955 . + . ID=transcript:ENST00000461457;Parent=gene:ENSG00000090266;assembly_name=GRCh38;biotype=protein_coding;external_name=NDUFB2-004;logic_name=havana;version=1
+7 ensembl_havana transcript 140719327 140783157 . - . ID=transcript:ENST00000496384;Parent=gene:ENSG00000157764;assembly_name=GRCh38;biotype=protein_coding;external_name=BRAF-003;logic_name=havana;version=5
+7 ensembl_havana transcript 140734479 140924764 . - . ID=transcript:ENST00000288602;Parent=gene:ENSG00000157764;assembly_name=GRCh38;biotype=protein_coding;external_name=BRAF-001;logic_name=ensembl_havana_transcript;version=9
+7 ensembl_havana NMD_transcript_variant 140734521 140754211 . - . ID=transcript:ENST00000479537;Parent=gene:ENSG00000157764;assembly_name=GRCh38;biotype=nonsense_mediated_decay;external_name=BRAF-005;logic_name=havana;version=4
+7 ensembl_havana NMD_transcript_variant 140734597 140924658 . - . ID=transcript:ENST00000497784;Parent=gene:ENSG00000157764;assembly_name=GRCh38;biotype=nonsense_mediated_decay;external_name=BRAF-002;logic_name=havana;version=1
+7 ensembl_havana aberrant_processed_transcript 140834061 140924709 . - . ID=transcript:ENST00000469930;Parent=gene:ENSG00000157764;assembly_name=GRCh38;biotype=retained_intron;external_name=BRAF-004;logic_name=havana;version=1
+7 ensembl snRNA 140884072 140884178 . + . ID=transcript:ENST00000605989;Parent=gene:ENSG00000271932;assembly_name=GRCh38;biotype=snRNA;external_name=RNU6-85P-201;logic_name=ncrna;version=1
+7 havana CDS 140696745 140696842 . + 0 ID=CDS:ENSP00000419087;Parent=transcript:ENST00000476279;assembly_name=GRCh38
+7 havana CDS 140702866 140703010 . + 1 ID=CDS:ENSP00000419087;Parent=transcript:ENST00000476279;assembly_name=GRCh38
+7 havana CDS 140704860 140704934 . + 0 ID=CDS:ENSP00000419087;Parent=transcript:ENST00000476279;assembly_name=GRCh38
+7 havana CDS 140696745 140696842 . + 0 ID=CDS:ENSP00000420062;Parent=transcript:ENST00000461457;assembly_name=GRCh38
+7 havana CDS 140721552 140721744 . + 1 ID=CDS:ENSP00000420062;Parent=transcript:ENST00000461457;assembly_name=GRCh38
+7 havana CDS 140783021 140783157 . - 2 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140781576 140781693 . - 0 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140777991 140778075 . - 2 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140776912 140777088 . - 1 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140754187 140754233 . - 1 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140753275 140753393 . - 2 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140749287 140749418 . - 0 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140739812 140739946 . - 0 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140734617 140734770 . - 0 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 havana CDS 140726494 140726516 . - 2 ID=CDS:ENSP00000419060;Parent=transcript:ENST00000496384;assembly_name=GRCh38
+7 ensembl_havana CDS 140924566 140924703 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140850111 140850212 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140834609 140834872 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140808892 140808995 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140807960 140808062 . - 1 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140801412 140801560 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140800362 140800481 . - 1 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140794308 140794467 . - 1 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140787548 140787584 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140783021 140783157 . - 2 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140781576 140781693 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140777991 140778075 . - 2 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140776912 140777088 . - 1 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140754187 140754233 . - 1 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140753275 140753393 . - 2 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140749287 140749418 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140739812 140739946 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 ensembl_havana CDS 140734597 140734770 . - 0 ID=CDS:ENSP00000288602;Parent=transcript:ENST00000288602;assembly_name=GRCh38
+7 havana CDS 140754187 140754211 . - 0 ID=CDS:ENSP00000418033;Parent=transcript:ENST00000479537;assembly_name=GRCh38
+7 havana CDS 140753275 140753393 . - 2 ID=CDS:ENSP00000418033;Parent=transcript:ENST00000479537;assembly_name=GRCh38
+7 havana CDS 140749287 140749418 . - 0 ID=CDS:ENSP00000418033;Parent=transcript:ENST00000479537;assembly_name=GRCh38
+7 havana CDS 140747415 140747447 . - 0 ID=CDS:ENSP00000418033;Parent=transcript:ENST00000479537;assembly_name=GRCh38
+7 havana CDS 140924566 140924658 . - 0 ID=CDS:ENSP00000420119;Parent=transcript:ENST00000497784;assembly_name=GRCh38
+7 havana CDS 140850111 140850212 . - 0 ID=CDS:ENSP00000420119;Parent=transcript:ENST00000497784;assembly_name=GRCh38
+7 havana CDS 140834609 140834872 . - 0 ID=CDS:ENSP00000420119;Parent=transcript:ENST00000497784;assembly_name=GRCh38
+7 havana CDS 140808892 140808995 . - 0 ID=CDS:ENSP00000420119;Parent=transcript:ENST00000497784;assembly_name=GRCh38
+7 havana CDS 140808295 140808316 . - 1 ID=CDS:ENSP00000420119;Parent=transcript:ENST00000497784;assembly_name=GRCh38
--- /dev/null
+package jalview.ext.ensembl;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyLite;
+import jalview.util.MapList;
+
+import java.util.List;
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class EnsemblCdnaTest
+{
+ @BeforeClass
+ public void setUp()
+ {
+ SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
+ }
+
+ @AfterClass
+ public void tearDown()
+ {
+ SequenceOntologyFactory.setInstance(null);
+ }
+ /**
+ * Test that the cdna part of genomic sequence is correctly identified by
+ * 'exon' features (or subtypes) - reverse strand case.
+ */
+ @Test(groups = "Functional")
+ public void testGetGenomicRangesFromFeatures_reverseStrand()
+ {
+ EnsemblCdna testee = new EnsemblCdna();
+ SequenceI genomic = new SequenceDummy("chr7");
+ genomic.setStart(10000);
+ genomic.setEnd(50000);
+ String transcriptId = "ABC123";
+
+ // exon at (start+10000) length 501
+ SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f,
+ null);
+ sf.setValue("Parent", "transcript:" + transcriptId);
+ sf.setStrand("-");
+ genomic.addSequenceFeature(sf);
+
+ // exon (sub-type) at (start + exon_variant) length 101
+ sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null);
+ sf.setValue("Parent", "transcript:" + transcriptId);
+ sf.setStrand("-");
+ genomic.addSequenceFeature(sf);
+
+ // exon belonging to a different transcript doesn't count
+ sf = new SequenceFeature("exon", "", 11500, 12600, 0f, null);
+ sf.setValue("Parent", "transcript:anotherOne");
+ genomic.addSequenceFeature(sf);
+
+ // transcript feature doesn't count
+ sf = new SequenceFeature("transcript", "", 10000, 50000, 0f, null);
+ genomic.addSequenceFeature(sf);
+
+ MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
+ transcriptId, 23);
+ List<int[]> fromRanges = ranges.getFromRanges();
+ assertEquals(2, fromRanges.size());
+
+ /*
+ * from ranges should be sorted by start order descending
+ * and hold mappings from reverse strand sense
+ */
+ assertEquals(20500, fromRanges.get(0)[0]);
+ assertEquals(20000, fromRanges.get(0)[1]);
+ assertEquals(10600, fromRanges.get(1)[0]);
+ assertEquals(10500, fromRanges.get(1)[1]);
+ // to range should start from given start numbering
+ List<int[]> toRanges = ranges.getToRanges();
+ assertEquals(1, toRanges.size());
+ assertEquals(23, toRanges.get(0)[0]);
+ assertEquals(624, toRanges.get(0)[1]);
+ }
+
+ /**
+ * Test that the cdna part of genomic sequence is correctly identified by
+ * 'exon' features (or subtypes) with the desired transcript as parent
+ */
+ @Test(groups = "Functional")
+ public void testGetGenomicRangesFromFeatures()
+ {
+ EnsemblCdna testee = new EnsemblCdna();
+ SequenceI genomic = new SequenceDummy("chr7");
+ genomic.setStart(10000);
+ genomic.setEnd(50000);
+ String transcriptId = "ABC123";
+
+ // exon at (start+10000) length 501
+ SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f,
+ null);
+ sf.setValue("Parent", "transcript:" + transcriptId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ // exon (sub-type) at (start + exon_variant) length 101
+ sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null);
+ sf.setValue("Parent", "transcript:" + transcriptId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ // exon belonging to a different transcript doesn't count
+ sf = new SequenceFeature("exon", "", 11500, 12600, 0f, null);
+ sf.setValue("Parent", "transcript:anotherOne");
+ genomic.addSequenceFeature(sf);
+
+ // transcript feature doesn't count
+ sf = new SequenceFeature("transcript", "", 10000, 50000, 0f, null);
+ sf.setStrand("-"); // weird but ignored
+ genomic.addSequenceFeature(sf);
+
+ MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
+ transcriptId, 23);
+ List<int[]> fromRanges = ranges.getFromRanges();
+ assertEquals(2, fromRanges.size());
+ // from ranges should be sorted by start order
+ assertEquals(10500, fromRanges.get(0)[0]);
+ assertEquals(10600, fromRanges.get(0)[1]);
+ assertEquals(20000, fromRanges.get(1)[0]);
+ assertEquals(20500, fromRanges.get(1)[1]);
+ // to range should start from given start numbering
+ List<int[]> toRanges = ranges.getToRanges();
+ assertEquals(1, toRanges.size());
+ assertEquals(23, toRanges.get(0)[0]);
+ assertEquals(624, toRanges.get(0)[1]);
+ }
+
+ /**
+ * The method under test should give up and return null if both forward and
+ * reverse strands are present in the features of interest
+ */
+ @Test(groups = "Functional")
+ public void testGetGenomicRangesFromFeatures_mixedStrand()
+ {
+ EnsemblCdna testee = new EnsemblCdna();
+ SequenceI genomic = new SequenceDummy("chr7");
+ genomic.setStart(10000);
+ genomic.setEnd(50000);
+ String transcriptId = "ABC123";
+
+ SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f,
+ null);
+ sf.setValue("Parent", "transcript:" + transcriptId);
+ sf.setStrand("-");
+ genomic.addSequenceFeature(sf);
+
+ sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null);
+ sf.setValue("Parent", "transcript:" + transcriptId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
+ transcriptId, 23);
+ assertNull(ranges);
+ }
+
+ /**
+ * Test the method that retains features except for 'transcript' (or
+ * subtypes), or features with parent other than the given id
+ */
+ @Test(groups = "Functional")
+ public void testRetainFeature()
+ {
+ String accId = "ABC123";
+ EnsemblCdna testee = new EnsemblCdna();
+
+ SequenceFeature sf = new SequenceFeature("transcript", "", 20000,
+ 20500, 0f, null);
+ assertFalse(testee.retainFeature(sf, accId));
+
+ sf.setType("aberrant_processed_transcript");
+ assertFalse(testee.retainFeature(sf, accId));
+
+ sf.setType("NMD_transcript_variant");
+ assertFalse(testee.retainFeature(sf, accId));
+
+ // other feature with no parent is retained
+ sf.setType("sequence_variant");
+ assertTrue(testee.retainFeature(sf, accId));
+
+ // other feature with desired parent is retained
+ sf.setValue("Parent", "transcript:" + accId);
+ assertTrue(testee.retainFeature(sf, accId));
+
+ // feature with wrong parent is not retained
+ sf.setValue("Parent", "transcript:XYZ");
+ assertFalse(testee.retainFeature(sf, accId));
+ }
+
+ /**
+ * Test the method that picks out 'exon' (or subtype) features with the
+ * accession id as parent
+ */
+ @Test(groups = "Functional")
+ public void testIdentifiesSequence()
+ {
+ String accId = "ABC123";
+ EnsemblCdna testee = new EnsemblCdna();
+
+ // exon with no parent not valid
+ SequenceFeature sf = new SequenceFeature("exon", "", 1, 2, 0f, null);
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // exon with wrong parent not valid
+ sf.setValue("Parent", "transcript:XYZ");
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // exon with right parent is valid
+ sf.setValue("Parent", "transcript:" + accId);
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // exon sub-type with right parent is valid
+ sf.setType("coding_exon");
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // transcript not valid:
+ sf.setType("transcript");
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // CDS not valid:
+ sf.setType("CDS");
+ assertFalse(testee.identifiesSequence(sf, accId));
+ }
+
+ @Test(groups = "Functional")
+ public void testIsValidReference() throws Exception
+ {
+ EnsemblSequenceFetcher esq = new EnsemblCdna();
+ Assert.assertTrue(esq.isValidReference("CCDS5863.1"));
+ Assert.assertTrue(esq.isValidReference("ENST00000288602"));
+ Assert.assertTrue(esq.isValidReference("ENSG00000288602"));
+ Assert.assertFalse(esq.isValidReference("ENSP00000288602"));
+ Assert.assertFalse(esq.isValidReference("ENST0000288602"));
+ // non-human species having a 3 character identifier included:
+ Assert.assertTrue(esq.isValidReference("ENSMUSG00000099398"));
+ }
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyLite;
+import jalview.util.MapList;
+
+import java.util.List;
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class EnsemblCdsTest
+{
+ @BeforeClass
+ public void setUp()
+ {
+ SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
+ }
+
+ @AfterClass
+ public void tearDown()
+ {
+ SequenceOntologyFactory.setInstance(null);
+ }
+
+ /**
+ * Test that the cdna part of genomic sequence is correctly identified by
+ * 'CDS' features (or subtypes) with the desired transcript as parent
+ */
+ @Test(groups = "Functional")
+ public void testGetGenomicRangesFromFeatures()
+ {
+ EnsemblCds testee = new EnsemblCds();
+ SequenceI genomic = new SequenceDummy("chr7");
+ genomic.setStart(10000);
+ genomic.setEnd(50000);
+ String transcriptId = "ABC123";
+
+ // CDS at (start+10000) length 501
+ SequenceFeature sf = new SequenceFeature("CDS", "", 20000, 20500, 0f,
+ null);
+ sf.setValue("Parent", "transcript:" + transcriptId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ // CDS (sub-type) at (start + 10500) length 101
+ sf = new SequenceFeature("CDS_predicted", "", 10500, 10600, 0f, null);
+ sf.setValue("Parent", "transcript:" + transcriptId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ // CDS belonging to a different transcript doesn't count
+ sf = new SequenceFeature("CDS", "", 11500, 12600, 0f, null);
+ sf.setValue("Parent", "transcript:anotherOne");
+ genomic.addSequenceFeature(sf);
+
+ // exon feature doesn't count
+ sf = new SequenceFeature("exon", "", 10000, 50000, 0f, null);
+ genomic.addSequenceFeature(sf);
+
+ // mRNA_region feature doesn't count (parent of CDS)
+ sf = new SequenceFeature("mRNA_region", "", 10000, 50000, 0f, null);
+ genomic.addSequenceFeature(sf);
+
+ MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
+ transcriptId, 23);
+ List<int[]> fromRanges = ranges.getFromRanges();
+ assertEquals(2, fromRanges.size());
+ // from ranges should be sorted by start order
+ assertEquals(10500, fromRanges.get(0)[0]);
+ assertEquals(10600, fromRanges.get(0)[1]);
+ assertEquals(20000, fromRanges.get(1)[0]);
+ assertEquals(20500, fromRanges.get(1)[1]);
+ // to range should start from given start numbering
+ List<int[]> toRanges = ranges.getToRanges();
+ assertEquals(1, toRanges.size());
+ assertEquals(23, toRanges.get(0)[0]);
+ assertEquals(624, toRanges.get(0)[1]);
+ }
+
+ /**
+ * Test the method that retains features except for 'CDS' (or subtypes), or
+ * features with parent other than the given id
+ */
+ @Test(groups = "Functional")
+ public void testRetainFeature()
+ {
+ String accId = "ABC123";
+ EnsemblCds testee = new EnsemblCds();
+
+ SequenceFeature sf = new SequenceFeature("CDS", "", 20000,
+ 20500, 0f, null);
+ assertFalse(testee.retainFeature(sf, accId));
+
+ sf.setType("CDS_predicted");
+ assertFalse(testee.retainFeature(sf, accId));
+
+ // other feature with no parent is retained
+ sf.setType("sequence_variant");
+ assertTrue(testee.retainFeature(sf, accId));
+
+ // other feature with desired parent is retained
+ sf.setValue("Parent", "transcript:" + accId);
+ assertTrue(testee.retainFeature(sf, accId));
+
+ // feature with wrong parent is not retained
+ sf.setValue("Parent", "transcript:XYZ");
+ assertFalse(testee.retainFeature(sf, accId));
+ }
+
+ /**
+ * Test the method that picks out 'CDS' (or subtype) features with the
+ * accession id as parent
+ */
+ @Test(groups = "Functional")
+ public void testIdentifiesSequence()
+ {
+ String accId = "ABC123";
+ EnsemblCds testee = new EnsemblCds();
+
+ // cds with no parent not valid
+ SequenceFeature sf = new SequenceFeature("CDS", "", 1, 2, 0f, null);
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // cds with wrong parent not valid
+ sf.setValue("Parent", "transcript:XYZ");
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // cds with right parent is valid
+ sf.setValue("Parent", "transcript:" + accId);
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // cds sub-type with right parent is valid
+ sf.setType("CDS_predicted");
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // transcript not valid:
+ sf.setType("transcript");
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // exon not valid:
+ sf.setType("exon");
+ assertFalse(testee.identifiesSequence(sf, accId));
+ }
+
+ @Test(groups = "Functional")
+ public void testIsValidReference() throws Exception
+ {
+ EnsemblSequenceFetcher esq = new EnsemblCds();
+ Assert.assertTrue(esq.isValidReference("CCDS5863.1"));
+ Assert.assertTrue(esq.isValidReference("ENST00000288602"));
+ Assert.assertTrue(esq.isValidReference("ENSG00000288602"));
+ Assert.assertTrue(esq.isValidReference("ENSP00000288602"));
+ Assert.assertFalse(esq.isValidReference("ENST0000288602"));
+ // non-human species have a 3 character identifier included:
+ Assert.assertTrue(esq.isValidReference("ENSMUSG00000099398"));
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.api.FeatureSettingsModelI;
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyLite;
+import jalview.util.MapList;
+
+import java.awt.Color;
+import java.util.List;
+
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class EnsemblGeneTest
+{
+ @BeforeClass
+ public void setUp()
+ {
+ SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
+ }
+
+ @AfterClass
+ public void tearDown()
+ {
+ SequenceOntologyFactory.setInstance(null);
+ }
+
+ /**
+ * Test that the gene part of genomic sequence is uniquely identified by a
+ * 'gene' features (or subtype) with the correct gene ID
+ */
+ @Test(groups = "Functional")
+ public void testGetGenomicRangesFromFeatures()
+ {
+ EnsemblGene testee = new EnsemblGene();
+ SequenceI genomic = new SequenceDummy("chr7");
+ genomic.setStart(10000);
+ genomic.setEnd(50000);
+ String geneId = "ABC123";
+
+ // gene at (start+10000) length 501
+ SequenceFeature sf = new SequenceFeature("gene", "", 20000, 20500, 0f,
+ null);
+ sf.setValue("ID", "gene:" + geneId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ // gene at (start + 10500) length 101
+ // should be ignored - the first 'gene' found defines the whole range
+ sf = new SequenceFeature("gene", "", 10500, 10600, 0f, null);
+ sf.setValue("ID", "gene:" + geneId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ MapList ranges = testee.getGenomicRangesFromFeatures(genomic, geneId,
+ 23);
+ List<int[]> fromRanges = ranges.getFromRanges();
+ assertEquals(1, fromRanges.size());
+ assertEquals(20000, fromRanges.get(0)[0]);
+ assertEquals(20500, fromRanges.get(0)[1]);
+ // to range should start from given start numbering
+ List<int[]> toRanges = ranges.getToRanges();
+ assertEquals(1, toRanges.size());
+ assertEquals(23, toRanges.get(0)[0]);
+ assertEquals(523, toRanges.get(0)[1]);
+ }
+
+ /**
+ * Test variant using a sub-type of gene from the Sequence Ontology
+ */
+ @Test(groups = "Functional")
+ public void testGetGenomicRangesFromFeatures_ncRNA_gene_reverseStrand()
+ {
+ EnsemblGene testee = new EnsemblGene();
+ SequenceI genomic = new SequenceDummy("chr7");
+ genomic.setStart(10000);
+ genomic.setEnd(50000);
+ String geneId = "ABC123";
+
+ // gene at (start+10000) length 501
+ SequenceFeature sf = new SequenceFeature("ncRNA_gene", "", 20000,
+ 20500, 0f, null);
+ sf.setValue("ID", "gene:" + geneId);
+ sf.setStrand("-");
+ genomic.addSequenceFeature(sf);
+
+ // gene at (start + 10500) length 101
+ // should be ignored - the first 'gene' found defines the whole range
+ // (real data would only have one such feature)
+ sf = new SequenceFeature("gene", "", 10500, 10600, 0f, null);
+ sf.setValue("ID", "gene:" + geneId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ MapList ranges = testee.getGenomicRangesFromFeatures(genomic, geneId,
+ 23);
+ List<int[]> fromRanges = ranges.getFromRanges();
+ assertEquals(1, fromRanges.size());
+ // from range on reverse strand:
+ assertEquals(20500, fromRanges.get(0)[0]);
+ assertEquals(20000, fromRanges.get(0)[1]);
+ // to range should start from given start numbering
+ List<int[]> toRanges = ranges.getToRanges();
+ assertEquals(1, toRanges.size());
+ assertEquals(23, toRanges.get(0)[0]);
+ assertEquals(523, toRanges.get(0)[1]);
+ }
+
+ /**
+ * Test the method that extracts transcript (or subtype) features with a
+ * specified gene as parent
+ */
+ @Test(groups = "Functional")
+ public void testGetTranscriptFeatures()
+ {
+ SequenceI genomic = new SequenceDummy("chr7");
+ genomic.setStart(10000);
+ genomic.setEnd(50000);
+ String geneId = "ABC123";
+
+ // transcript feature
+ SequenceFeature sf1 = new SequenceFeature("transcript", "", 20000,
+ 20500, 0f, null);
+ sf1.setValue("Parent", "gene:" + geneId);
+ sf1.setValue("transcript_id", "transcript1");
+ genomic.addSequenceFeature(sf1);
+
+ // transcript sub-type feature
+ SequenceFeature sf2 = new SequenceFeature("snRNA", "", 20000,
+ 20500, 0f, null);
+ sf2.setValue("Parent", "gene:" + geneId);
+ sf2.setValue("transcript_id", "transcript2");
+ genomic.addSequenceFeature(sf2);
+
+ // NMD_transcript_variant treated like transcript in Ensembl
+ SequenceFeature sf3 = new SequenceFeature("NMD_transcript_variant", "",
+ 20000, 20500, 0f, null);
+ sf3.setValue("Parent", "gene:" + geneId);
+ sf3.setValue("transcript_id", "transcript3");
+ genomic.addSequenceFeature(sf3);
+
+ // transcript for a different gene - ignored
+ SequenceFeature sf4 = new SequenceFeature("snRNA", "", 20000, 20500,
+ 0f, null);
+ sf4.setValue("Parent", "gene:XYZ");
+ sf4.setValue("transcript_id", "transcript4");
+ genomic.addSequenceFeature(sf4);
+
+ EnsemblGene testee = new EnsemblGene();
+
+ /*
+ * with no filter
+ */
+ List<SequenceFeature> features = testee.getTranscriptFeatures(geneId,
+ genomic);
+ assertEquals(3, features.size());
+ assertSame(sf1, features.get(0));
+ assertSame(sf2, features.get(1));
+ assertSame(sf3, features.get(2));
+ }
+
+ /**
+ * Test the method that retains features except for 'gene', or 'transcript'
+ * with parent other than the given id
+ */
+ @Test(groups = "Functional")
+ public void testRetainFeature()
+ {
+ String geneId = "ABC123";
+ EnsemblGene testee = new EnsemblGene();
+ SequenceFeature sf = new SequenceFeature("gene", "", 20000,
+ 20500, 0f, null);
+ sf.setValue("ID", "gene:" + geneId);
+ assertFalse(testee.retainFeature(sf, geneId));
+
+ sf.setType("transcript");
+ sf.setValue("Parent", "gene:" + geneId);
+ assertTrue(testee.retainFeature(sf, geneId));
+
+ sf.setType("mature_transcript");
+ sf.setValue("Parent", "gene:" + geneId);
+ assertTrue(testee.retainFeature(sf, geneId));
+
+ sf.setType("NMD_transcript_variant");
+ sf.setValue("Parent", "gene:" + geneId);
+ assertTrue(testee.retainFeature(sf, geneId));
+
+ sf.setValue("Parent", "gene:XYZ");
+ assertFalse(testee.retainFeature(sf, geneId));
+
+ sf.setType("anything");
+ assertTrue(testee.retainFeature(sf, geneId));
+ }
+
+ /**
+ * Test the method that picks out 'gene' (or subtype) features with the
+ * accession id as ID
+ */
+ @Test(groups = "Functional")
+ public void testIdentifiesSequence()
+ {
+ String accId = "ABC123";
+ EnsemblGene testee = new EnsemblGene();
+
+ // gene with no ID not valid
+ SequenceFeature sf = new SequenceFeature("gene", "", 1, 2, 0f, null);
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // gene with wrong ID not valid
+ sf.setValue("ID", "gene:XYZ");
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // gene with right ID is valid
+ sf.setValue("ID", "gene:" + accId);
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // gene sub-type with right ID is valid
+ sf.setType("snRNA_gene");
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // transcript not valid:
+ sf.setType("transcript");
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // exon not valid:
+ sf.setType("exon");
+ assertFalse(testee.identifiesSequence(sf, accId));
+ }
+
+ /**
+ * Check behaviour of feature colour scheme for EnsemblGene sequences.
+ * Currently coded to display exon and sequence_variant (or sub-types) only,
+ * with sequence_variant in red above exon coloured by label.
+ */
+ @Test(groups = "Functional")
+ public void testGetFeatureColourScheme()
+ {
+ FeatureSettingsModelI fc = new EnsemblGene().getFeatureColourScheme();
+ assertTrue(fc.isFeatureDisplayed("exon"));
+ assertTrue(fc.isFeatureDisplayed("coding_exon")); // subtype of exon
+ assertTrue(fc.isFeatureDisplayed("sequence_variant"));
+ assertTrue(fc.isFeatureDisplayed("feature_variant")); // subtype
+ assertFalse(fc.isFeatureDisplayed("transcript"));
+ assertEquals(Color.RED, fc.getFeatureColour("sequence_variant")
+ .getColour());
+ assertEquals(Color.RED, fc.getFeatureColour("feature_variant")
+ .getColour());
+ assertTrue(fc.getFeatureColour("exon").isColourByLabel());
+ assertTrue(fc.getFeatureColour("coding_exon").isColourByLabel());
+ assertEquals(1, fc.compare("sequence_variant", "exon"));
+ assertEquals(-1, fc.compare("exon", "sequence_variant"));
+ assertEquals(1, fc.compare("feature_variant", "coding_exon"));
+ assertEquals(-1, fc.compare("coding_exon", "feature_variant"));
+ assertEquals(1f, fc.getTransparency());
+ }
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyLite;
+import jalview.util.MapList;
+
+import java.util.List;
+
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class EnsemblGenomeTest
+{
+ @BeforeClass
+ public void setUp()
+ {
+ SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
+ }
+
+ @AfterClass
+ public void tearDown()
+ {
+ SequenceOntologyFactory.setInstance(null);
+ }
+
+ /**
+ * Test that the genomic sequence part of genomic sequence is correctly
+ * identified by 'transcript' features (or subtypes) with the correct gene ID
+ */
+ @Test(groups = "Functional")
+ public void testGetGenomicRangesFromFeatures()
+ {
+ EnsemblGenome testee = new EnsemblGenome();
+ SequenceI genomic = new SequenceDummy("chr7");
+ genomic.setStart(10000);
+ genomic.setEnd(50000);
+ String transcriptId = "ABC123";
+
+ // transcript at (start+10000) length 501
+ SequenceFeature sf = new SequenceFeature("transcript", "", 20000,
+ 20500, 0f,
+ null);
+ sf.setValue("ID", "transcript:" + transcriptId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ // transcript (sub-type) at (start + 10500) length 101
+ sf = new SequenceFeature("ncRNA", "", 10500, 10600, 0f, null);
+ sf.setValue("ID", "transcript:" + transcriptId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ // Ensembl treats NMD_transcript_variant as if transcript
+ // although strictly it is a sequence_variant in SO
+ sf = new SequenceFeature("NMD_transcript_variant", "", 11000, 12000,
+ 0f, null);
+ sf.setValue("ID", "transcript:" + transcriptId);
+ sf.setStrand("+");
+ genomic.addSequenceFeature(sf);
+
+ // transcript with a different ID doesn't count
+ sf = new SequenceFeature("transcript", "", 11500, 12600, 0f, null);
+ sf.setValue("ID", "transcript:anotherOne");
+ genomic.addSequenceFeature(sf);
+
+ // parent of transcript feature doesn't count
+ sf = new SequenceFeature("gene_member_region", "", 10000, 50000, 0f,
+ null);
+ genomic.addSequenceFeature(sf);
+
+ MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
+ transcriptId, 23);
+ List<int[]> fromRanges = ranges.getFromRanges();
+ assertEquals(3, fromRanges.size());
+ // from ranges should be sorted by start order
+ assertEquals(10500, fromRanges.get(0)[0]);
+ assertEquals(10600, fromRanges.get(0)[1]);
+ assertEquals(11000, fromRanges.get(1)[0]);
+ assertEquals(12000, fromRanges.get(1)[1]);
+ assertEquals(20000, fromRanges.get(2)[0]);
+ assertEquals(20500, fromRanges.get(2)[1]);
+ // to range should start from given start numbering
+ List<int[]> toRanges = ranges.getToRanges();
+ assertEquals(1, toRanges.size());
+ assertEquals(23, toRanges.get(0)[0]);
+ assertEquals(1625, toRanges.get(0)[1]);
+ }
+
+ /**
+ * Test the method that retains features except for 'transcript' (or
+ * sub-type), or those with parent other than the given id
+ */
+ @Test(groups = "Functional")
+ public void testRetainFeature()
+ {
+ String accId = "ABC123";
+ EnsemblGenome testee = new EnsemblGenome();
+
+ SequenceFeature sf = new SequenceFeature("transcript", "", 20000,
+ 20500, 0f, null);
+ assertFalse(testee.retainFeature(sf, accId));
+
+ sf.setType("mature_transcript");
+ assertFalse(testee.retainFeature(sf, accId));
+
+ sf.setType("NMD_transcript_variant");
+ assertFalse(testee.retainFeature(sf, accId));
+
+ // other feature with no parent is kept
+ sf.setType("anything");
+ assertTrue(testee.retainFeature(sf, accId));
+
+ // other feature with correct parent is kept
+ sf.setValue("Parent", "transcript:" + accId);
+ assertTrue(testee.retainFeature(sf, accId));
+
+ // other feature with wrong parent is not kept
+ sf.setValue("Parent", "transcript:XYZ");
+ assertFalse(testee.retainFeature(sf, accId));
+ }
+
+ /**
+ * Test the method that picks out 'transcript' (or subtype) features with the
+ * accession id as ID
+ */
+ @Test(groups = "Functional")
+ public void testIdentifiesSequence()
+ {
+ String accId = "ABC123";
+ EnsemblGenome testee = new EnsemblGenome();
+
+ // transcript with no ID not valid
+ SequenceFeature sf = new SequenceFeature("transcript", "", 1, 2, 0f,
+ null);
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // transcript with wrong ID not valid
+ sf.setValue("ID", "transcript");
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // transcript with right ID is valid
+ sf.setValue("ID", "transcript:" + accId);
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // transcript sub-type with right ID is valid
+ sf.setType("ncRNA");
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // Ensembl treats NMD_transcript_variant as if a transcript
+ sf.setType("NMD_transcript_variant");
+ assertTrue(testee.identifiesSequence(sf, accId));
+
+ // gene not valid:
+ sf.setType("gene");
+ assertFalse(testee.identifiesSequence(sf, accId));
+
+ // exon not valid:
+ sf.setType("exon");
+ assertFalse(testee.identifiesSequence(sf, accId));
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import static org.testng.AssertJUnit.assertEquals;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class EnsemblProteinTest
+{
+
+ @Test(groups = "Functional")
+ public void testIsValidReference() throws Exception
+ {
+ EnsemblSequenceFetcher esq = new EnsemblProtein();
+ Assert.assertTrue(esq.isValidReference("CCDS5863.1"));
+ Assert.assertTrue(esq.isValidReference("ENSP00000288602"));
+ Assert.assertFalse(esq.isValidReference("ENST00000288602"));
+ Assert.assertFalse(esq.isValidReference("ENSG00000288602"));
+ // non-human species having a 3 character identifier included:
+ Assert.assertTrue(esq.isValidReference("ENSMUSP00000099398"));
+ }
+
+ @Test(groups = "Functional")
+ public void testGetAccesionIdFromQuery() throws Exception
+ {
+ EnsemblSequenceFetcher esq = new EnsemblProtein();
+ assertEquals("ENSP00000288602",
+ esq.getAccessionIdFromQuery("ENSP00000288602"));
+ assertEquals("ENSMUSP00000288602",
+ esq.getAccessionIdFromQuery("ENSMUSP00000288602"));
+
+ // ENST converted to ENSP
+ assertEquals("ENSP00000288602",
+ esq.getAccessionIdFromQuery("ENST00000288602"));
+ assertEquals("ENSMUSP00000288602",
+ esq.getAccessionIdFromQuery("ENSMUST00000288602"));
+
+ // with valid separator:
+ assertEquals("ENSP00000288604",
+ esq.getAccessionIdFromQuery("ENSP00000288604 ENSP00000288602"));
+
+ // with wrong separator:
+ assertEquals("ENSP00000288604,ENSP00000288602",
+ esq.getAccessionIdFromQuery("ENSP00000288604,ENSP00000288602"));
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.AlignmentI;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import org.testng.annotations.Test;
+
+public class EnsemblRestClientTest
+{
+
+ @Test(suiteName = "live")
+ public void testLiveCheckEnsembl()
+ {
+ EnsemblRestClient sf = new EnsemblRestClient()
+ {
+
+ @Override
+ public String getDbName()
+ {
+ return null;
+ }
+
+ @Override
+ public AlignmentI getSequenceRecords(String queries) throws Exception
+ {
+ return null;
+ }
+
+ @Override
+ protected URL getUrl(List<String> ids) throws MalformedURLException
+ {
+ return null;
+ }
+
+ @Override
+ protected boolean useGetRequest()
+ {
+ return false;
+ }
+
+ @Override
+ protected String getRequestMimeType(boolean b)
+ {
+ return null;
+ }
+
+ @Override
+ protected String getResponseMimeType()
+ {
+ return null;
+ }
+
+ };
+ boolean isAvailable = sf.isEnsemblAvailable();
+ if (isAvailable)
+ {
+ System.out.println("Ensembl is UP!");
+ }
+ else
+ {
+ System.err
+ .println("Ensembl is DOWN or unreachable ******************* BAD!");
+ }
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import jalview.datamodel.SequenceFeature;
+
+/**
+ * A convenience class to simplify writing unit tests (pending Mockito or
+ * similar?)
+ */
+public class EnsemblSeqProxyAdapter extends EnsemblSeqProxy
+{
+ /**
+ * Default constructor (to use rest.ensembl.org)
+ */
+ public EnsemblSeqProxyAdapter()
+ {
+ super();
+ }
+
+ /**
+ * Constructor given the target domain to fetch data from
+ *
+ * @param d
+ */
+ public EnsemblSeqProxyAdapter(String d)
+ {
+ super(d);
+ }
+
+ @Override
+ public String getDbName()
+ {
+ return null;
+ }
+
+ @Override
+ protected EnsemblFeatureType[] getFeaturesToFetch()
+ {
+ return null;
+ }
+
+ @Override
+ protected EnsemblSeqType getSourceEnsemblType()
+ {
+ return null;
+ }
+
+ @Override
+ protected boolean identifiesSequence(SequenceFeature sf, String accId)
+ {
+ return false;
+ }
+
+}
--- /dev/null
+package jalview.ext.ensembl;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
+import jalview.io.FastaFile;
+import jalview.io.FileParse;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyLite;
+
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+
+public class EnsemblSeqProxyTest
+{
+ private static final Object[][] allSeqs = new Object[][] {
+ {
+ new EnsemblProtein(),
+ "CCDS5863.1",
+ ">CCDS5863.1\n"
+ + "MAALSGGGGGGAEPGQALFNGDMEPEAGAGAGAAASSAADPAIPEEVWNIKQMIKLTQEH\n"
+ + "IEALLDKFGGEHNPPSIYLEAYEEYTSKLDALQQREQQLLESLGNGTDFSVSSSASMDTV\n"
+ + "TSSSSSSLSVLPSSLSVFQNPTDVARSNPKSPQKPIVRVFLPNKQRTVVPARCGVTVRDS\n"
+ + "LKKALMMRGLIPECCAVYRIQDGEKKPIGWDTDISWLTGEELHVEVLENVPLTTHNFVRK\n"
+ + "TFFTLAFCDFCRKLLFQGFRCQTCGYKFHQRCSTEVPLMCVNYDQLDLLFVSKFFEHHPI\n"
+ + "PQEEASLAETALTSGSSPSAPASDSIGPQILTSPSPSKSIPIPQPFRPADEDHRNQFGQR\n"
+ + "DRSSSAPNVHINTIEPVNIDDLIRDQGFRGDGGSTTGLSATPPASLPGSLTNVKALQKSP\n"
+ + "GPQRERKSSSSSEDRNRMKTLGRRDSSDDWEIPDGQITVGQRIGSGSFGTVYKGKWHGDV\n"
+ + "AVKMLNVTAPTPQQLQAFKNEVGVLRKTRHVNILLFMGYSTKPQLAIVTQWCEGSSLYHH\n"
+ + "LHIIETKFEMIKLIDIARQTAQGMDYLHAKSIIHRDLKSNNIFLHEDLTVKIGDFGLATV\n"
+ + "KSRWSGSHQFEQLSGSILWMAPEVIRMQDKNPYSFQSDVYAFGIVLYELMTGQLPYSNIN\n"
+ + "NRDQIIFMVGRGYLSPDLSKVRSNCPKAMKRLMAECLKKKRDERPLFPQILASIELLARS\n"
+ + "LPKIHRSASEPSLNRAGFQTEDFSLYACASPKTPIQAGGYGAFPVH\n" },
+ {
+ new EnsemblCdna(),
+ "CCDS5863.1",
+ ">CCDS5863.1\n"
+ + "ATGGCGGCGCTGAGCGGTGGCGGTGGTGGCGGCGCGGAGCCGGGCCAGGCTCTGTTCAAC\n"
+ + "GGGGACATGGAGCCCGAGGCCGGCGCCGGCGCCGGCGCCGCGGCCTCTTCGGCTGCGGAC\n"
+ + "CCTGCCATTCCGGAGGAGGTGTGGAATATCAAACAAATGATTAAGTTGACACAGGAACAT\n"
+ + "ATAGAGGCCCTATTGGACAAATTTGGTGGGGAGCATAATCCACCATCAATATATCTGGAG\n"
+ + "GCCTATGAAGAATACACCAGCAAGCTAGATGCACTCCAACAAAGAGAACAACAGTTATTG\n"
+ + "GAATCTCTGGGGAACGGAACTGATTTTTCTGTTTCTAGCTCTGCATCAATGGATACCGTT\n"
+ + "ACATCTTCTTCCTCTTCTAGCCTTTCAGTGCTACCTTCATCTCTTTCAGTTTTTCAAAAT\n"
+ + "CCCACAGATGTGGCACGGAGCAACCCCAAGTCACCACAAAAACCTATCGTTAGAGTCTTC\n"
+ + "CTGCCCAACAAACAGAGGACAGTGGTACCTGCAAGGTGTGGAGTTACAGTCCGAGACAGT\n"
+ + "CTAAAGAAAGCACTGATGATGAGAGGTCTAATCCCAGAGTGCTGTGCTGTTTACAGAATT\n"
+ + "CAGGATGGAGAGAAGAAACCAATTGGTTGGGACACTGATATTTCCTGGCTTACTGGAGAA\n"
+ + "GAATTGCATGTGGAAGTGTTGGAGAATGTTCCACTTACAACACACAACTTTGTACGAAAA\n"
+ + "ACGTTTTTCACCTTAGCATTTTGTGACTTTTGTCGAAAGCTGCTTTTCCAGGGTTTCCGC\n"
+ + "TGTCAAACATGTGGTTATAAATTTCACCAGCGTTGTAGTACAGAAGTTCCACTGATGTGT\n"
+ + "GTTAATTATGACCAACTTGATTTGCTGTTTGTCTCCAAGTTCTTTGAACACCACCCAATA\n"
+ + "CCACAGGAAGAGGCGTCCTTAGCAGAGACTGCCCTAACATCTGGATCATCCCCTTCCGCA\n"
+ + "CCCGCCTCGGACTCTATTGGGCCCCAAATTCTCACCAGTCCGTCTCCTTCAAAATCCATT\n"
+ + "CCAATTCCACAGCCCTTCCGACCAGCAGATGAAGATCATCGAAATCAATTTGGGCAACGA\n"
+ + "GACCGATCCTCATCAGCTCCCAATGTGCATATAAACACAATAGAACCTGTCAATATTGAT\n"
+ + "GACTTGATTAGAGACCAAGGATTTCGTGGTGATGGAGGATCAACCACAGGTTTGTCTGCT\n"
+ + "ACCCCCCCTGCCTCATTACCTGGCTCACTAACTAACGTGAAAGCCTTACAGAAATCTCCA\n"
+ + "GGACCTCAGCGAGAAAGGAAGTCATCTTCATCCTCAGAAGACAGGAATCGAATGAAAACA\n"
+ + "CTTGGTAGACGGGACTCGAGTGATGATTGGGAGATTCCTGATGGGCAGATTACAGTGGGA\n"
+ + "CAAAGAATTGGATCTGGATCATTTGGAACAGTCTACAAGGGAAAGTGGCATGGTGATGTG\n"
+ + "GCAGTGAAAATGTTGAATGTGACAGCACCTACACCTCAGCAGTTACAAGCCTTCAAAAAT\n"
+ + "GAAGTAGGAGTACTCAGGAAAACACGACATGTGAATATCCTACTCTTCATGGGCTATTCC\n"
+ + "ACAAAGCCACAACTGGCTATTGTTACCCAGTGGTGTGAGGGCTCCAGCTTGTATCACCAT\n"
+ + "CTCCATATCATTGAGACCAAATTTGAGATGATCAAACTTATAGATATTGCACGACAGACT\n"
+ + "GCACAGGGCATGGATTACTTACACGCCAAGTCAATCATCCACAGAGACCTCAAGAGTAAT\n"
+ + "AATATATTTCTTCATGAAGACCTCACAGTAAAAATAGGTGATTTTGGTCTAGCTACAGTG\n"
+ + "AAATCTCGATGGAGTGGGTCCCATCAGTTTGAACAGTTGTCTGGATCCATTTTGTGGATG\n"
+ + "GCACCAGAAGTCATCAGAATGCAAGATAAAAATCCATACAGCTTTCAGTCAGATGTATAT\n"
+ + "GCATTTGGAATTGTTCTGTATGAATTGATGACTGGACAGTTACCTTATTCAAACATCAAC\n"
+ + "AACAGGGACCAGATAATTTTTATGGTGGGACGAGGATACCTGTCTCCAGATCTCAGTAAG\n"
+ + "GTACGGAGTAACTGTCCAAAAGCCATGAAGAGATTAATGGCAGAGTGCCTCAAAAAGAAA\n"
+ + "AGAGATGAGAGACCACTCTTTCCCCAAATTCTCGCCTCTATTGAGCTGCTGGCCCGCTCA\n"
+ + "TTGCCAAAAATTCACCGCAGTGCATCAGAACCCTCCTTGAATCGGGCTGGTTTCCAAACA\n"
+ + "GAGGATTTTAGTCTATATGCTTGTGCTTCTCCAAAAACACCCATCCAGGCAGGGGGATAT\n"
+ + "GGTGCGTTTCCTGTCCACTGA\n" },
+ {
+ new EnsemblProtein(),
+ "ENSP00000288602",
+ ">ENSP00000288602\n"
+ + "MAALSGGGGGGAEPGQALFNGDMEPEAGAGAGAAASSAADPAIPEEVWNIKQMIKLTQEH\n"
+ + "IEALLDKFGGEHNPPSIYLEAYEEYTSKLDALQQREQQLLESLGNGTDFSVSSSASMDTV\n"
+ + "TSSSSSSLSVLPSSLSVFQNPTDVARSNPKSPQKPIVRVFLPNKQRTVVPARCGVTVRDS\n"
+ + "LKKALMMRGLIPECCAVYRIQDGEKKPIGWDTDISWLTGEELHVEVLENVPLTTHNFVRK\n"
+ + "TFFTLAFCDFCRKLLFQGFRCQTCGYKFHQRCSTEVPLMCVNYDQLDLLFVSKFFEHHPI\n"
+ + "PQEEASLAETALTSGSSPSAPASDSIGPQILTSPSPSKSIPIPQPFRPADEDHRNQFGQR\n"
+ + "DRSSSAPNVHINTIEPVNIDDLIRDQGFRGDGGSTTGLSATPPASLPGSLTNVKALQKSP\n"
+ + "GPQRERKSSSSSEDRNRMKTLGRRDSSDDWEIPDGQITVGQRIGSGSFGTVYKGKWHGDV\n"
+ + "AVKMLNVTAPTPQQLQAFKNEVGVLRKTRHVNILLFMGYSTKPQLAIVTQWCEGSSLYHH\n"
+ + "LHIIETKFEMIKLIDIARQTAQGMDYLHAKSIIHRDLKSNNIFLHEDLTVKIGDFGLATV\n"
+ + "KSRWSGSHQFEQLSGSILWMAPEVIRMQDKNPYSFQSDVYAFGIVLYELMTGQLPYSNIN\n"
+ + "NRDQIIFMVGRGYLSPDLSKVRSNCPKAMKRLMAECLKKKRDERPLFPQILASIELLARS\n"
+ + "LPKIHRSASEPSLNRAGFQTEDFSLYACASPKTPIQAGGYGAFPVH" } };
+
+ @BeforeClass
+ public void setUp()
+ {
+ SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
+ }
+
+ @AfterClass
+ public void tearDown()
+ {
+ SequenceOntologyFactory.setInstance(null);
+ }
+
+ @DataProvider(name = "ens_seqs")
+ public Object[][] createData(Method m)
+ {
+ System.out.println(m.getName());
+ return allSeqs;
+ }
+
+ @Test(dataProvider = "ens_seqs", suiteName = "live")
+ public void testGetOneSeqs(EnsemblRestClient proxy, String sq, String fastasq)
+ throws Exception
+ {
+ FileParse fp = proxy.getSequenceReader(Arrays
+ .asList(new String[]
+ { sq }));
+ SequenceI[] sqs = new FastaFile(fp).getSeqsAsArray();
+ FastaFile trueRes = new FastaFile(fastasq, AppletFormatAdapter.PASTE);
+ SequenceI[] trueSqs = trueRes.getSeqsAsArray();
+ Assert.assertEquals(sqs.length, trueSqs.length,
+ "Different number of sequences retrieved for query " + sq);
+ Alignment ral = new Alignment(sqs);
+ for (SequenceI tr : trueSqs)
+ {
+ SequenceI[] rseq;
+ Assert.assertNotNull(
+ rseq = ral.findSequenceMatch(tr.getName()),
+ "Couldn't find sequences matching expected sequence "
+ + tr.getName());
+ Assert.assertEquals(rseq.length, 1,
+ "Expected only one sequence for sequence ID " + tr.getName());
+ Assert.assertEquals(
+ rseq[0].getSequenceAsString(),
+ tr.getSequenceAsString(),
+ "Sequences differ for " + tr.getName() + "\n" + "Exp:"
+ + tr.getSequenceAsString() + "\n" + "Got:"
+ + rseq[0].getSequenceAsString());
+
+ }
+ }
+
+ @Test(suiteName = "live")
+ public void testLiveCheckEnsembl()
+ {
+ EnsemblRestClient sf = new EnsemblRestClient()
+ {
+
+ @Override
+ public String getDbName()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public AlignmentI getSequenceRecords(String queries) throws Exception
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected URL getUrl(List<String> ids) throws MalformedURLException
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected boolean useGetRequest()
+ {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ protected String getRequestMimeType(boolean b)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected String getResponseMimeType()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ };
+ boolean isAvailable = sf.isEnsemblAvailable();
+ System.out.println("Ensembl is "
+ + (isAvailable ? "UP!"
+ : "DOWN or unreachable ******************* BAD!"));
+ }
+
+ @Test(groups = "Functional")
+ public void getGenomicRangesFromFeatures()
+ {
+
+ }
+
+ @Test(groups = "Functional")
+ public void testIsTranscriptIdentifier()
+ {
+ EnsemblSeqProxy testee = new EnsemblGene();
+ assertFalse(testee.isTranscriptIdentifier(null));
+ assertFalse(testee.isTranscriptIdentifier(""));
+ assertFalse(testee.isTranscriptIdentifier("ENSG00000012345"));
+ assertTrue(testee.isTranscriptIdentifier("ENST00000012345"));
+ assertTrue(testee.isTranscriptIdentifier("ENSMUST00000012345"));
+ assertFalse(testee.isTranscriptIdentifier("enst00000012345"));
+ assertFalse(testee.isTranscriptIdentifier("ENST000000123456"));
+ assertFalse(testee.isTranscriptIdentifier("ENST0000001234"));
+ }
+
+ @Test(groups = "Functional")
+ public void testIsGeneIdentifier()
+ {
+ EnsemblSeqProxy testee = new EnsemblGene();
+ assertFalse(testee.isGeneIdentifier(null));
+ assertFalse(testee.isGeneIdentifier(""));
+ assertFalse(testee.isGeneIdentifier("ENST00000012345"));
+ assertTrue(testee.isGeneIdentifier("ENSG00000012345"));
+ assertTrue(testee.isGeneIdentifier("ENSMUSG00000012345"));
+ assertFalse(testee.isGeneIdentifier("ensg00000012345"));
+ assertFalse(testee.isGeneIdentifier("ENSG000000123456"));
+ assertFalse(testee.isGeneIdentifier("ENSG0000001234"));
+ }
+
+ /**
+ * Test the method that appends a single allele's reverse complement to a
+ * string buffer
+ */
+ @Test(groups = "Functional")
+ public void testReverseComplementAllele()
+ {
+ StringBuilder sb = new StringBuilder();
+ EnsemblSeqProxy.reverseComplementAllele(sb, "G"); // comp=C
+ EnsemblSeqProxy.reverseComplementAllele(sb, "g"); // comp=c
+ EnsemblSeqProxy.reverseComplementAllele(sb, "C"); // comp=G
+ EnsemblSeqProxy.reverseComplementAllele(sb, "T"); // comp=A
+ EnsemblSeqProxy.reverseComplementAllele(sb, "A"); // comp=T
+ assertEquals("C,c,G,A,T", sb.toString());
+
+ sb = new StringBuilder();
+ EnsemblSeqProxy.reverseComplementAllele(sb, "-GATt"); // revcomp=aATC-
+ EnsemblSeqProxy.reverseComplementAllele(sb, "hgmd_mutation");
+ EnsemblSeqProxy.reverseComplementAllele(sb, "PhenCode_variation");
+ assertEquals("aATC-,hgmd_mutation,PhenCode_variation", sb.toString());
+ }
+
+ /**
+ * Test the method that computes the reverse complement of the alleles in a
+ * sequence_variant feature
+ */
+ @Test(groups = "Functional")
+ public void testReverseComplementAlleles()
+ {
+ String alleles = "C,G,-TAC,HGMD_MUTATION,gac";
+ SequenceFeature sf = new SequenceFeature("sequence_variant", alleles,
+ 1, 2, 0f, null);
+ sf.setValue("alleles", alleles);
+ sf.setAttributes("x=y,z;alleles=" + alleles + ";a=b,c");
+
+ EnsemblSeqProxy.reverseComplementAlleles(sf);
+ String revcomp = "G,C,GTA-,HGMD_MUTATION,gtc";
+ // verify description is updated with reverse complement
+ assertEquals(revcomp, sf.getDescription());
+ // verify alleles attribute is updated with reverse complement
+ assertEquals(revcomp, sf.getValue("alleles"));
+ // verify attributes string is updated with reverse complement
+ assertEquals("x=y,z;alleles=" + revcomp + ";a=b,c", sf.getAttributes());
+ }
+
+ @Test(groups = "Functional")
+ public void testSortFeatures()
+ {
+ SequenceFeature sf1 = new SequenceFeature("", "", 10, 15, 0f, null);
+ SequenceFeature sf2 = new SequenceFeature("", "", 8, 12, 0f, null);
+ SequenceFeature sf3 = new SequenceFeature("", "", 8, 13, 0f, null);
+ SequenceFeature sf4 = new SequenceFeature("", "", 11, 11, 0f, null);
+ SequenceFeature[] sfs = new SequenceFeature[] { sf1, sf2, sf3, sf4 };
+
+ // sort by start position ascending (forward strand)
+ // sf2 and sf3 tie and should not be reordered by sorting
+ EnsemblSeqProxy.sortFeatures(sfs, true);
+ assertArrayEquals(new SequenceFeature[] { sf2, sf3, sf1, sf4 }, sfs);
+
+ // sort by end position descending (reverse strand)
+ EnsemblSeqProxy.sortFeatures(sfs, false);
+ assertArrayEquals(new SequenceFeature[] { sf1, sf3, sf2, sf4 }, sfs);
+ }
+}
\ No newline at end of file
--- /dev/null
+package jalview.ext.ensembl;
+
+import static org.testng.AssertJUnit.assertEquals;
+
+import jalview.datamodel.DBRefEntry;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URL;
+import java.util.List;
+
+import org.testng.annotations.Test;
+
+public class EnsemblXrefTest
+{
+ //@formatter:off
+ private static final String JSON =
+ "[{\"primary_id\":\"CCDS5863\",\"dbname\":\"CCDS\"}," +
+ "{\"primary_id\":\"P15056\",\"dbname\":\"Uniprot/SWISSPROT\",\"synonyms\":[\"C21\"]}," +
+ "{\"primary_id\":\"GO:0000165\",\"dbname\":\"GO\"}]";
+ //@formatter:on
+
+ @Test(groups = "Functional")
+ public void testGetCrossReferences()
+ {
+ System.out.println(JSON);
+ EnsemblXref testee = new EnsemblXref("http://rest.ensembl.org")
+ {
+ @Override
+ protected BufferedReader getHttpResponse(URL url, List<String> ids)
+ throws IOException
+ {
+ return new BufferedReader(new StringReader(JSON));
+ }
+ };
+
+ // synonyms and GO terms are not returned
+ List<DBRefEntry> dbrefs = testee.getCrossReferences("ABCDE");
+ assertEquals(2, dbrefs.size());
+ assertEquals("CCDS", dbrefs.get(0).getSource());
+ assertEquals("CCDS5863", dbrefs.get(0).getAccessionId());
+ // Uniprot name should get converted to Jalview canonical form
+ assertEquals("UNIPROT", dbrefs.get(1).getSource());
+ assertEquals("P15056", dbrefs.get(1).getAccessionId());
+ }
+}
--- /dev/null
+/**
+ *
+ */
+package jalview.ext.htsjdk;
+
+import jalview.datamodel.SequenceI;
+
+import java.io.File;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author jprocter
+ *
+ */
+public class TestHtsContigDb
+{
+ @Test
+ public final void testHTSReferenceSequence() throws Exception
+ {
+ HtsContigDb remmadb = new HtsContigDb("REEMADB", new File(
+ "test/jalview/ext/htsjdk/pgmb.fasta"));
+
+ Assert.assertTrue(remmadb.isValid());
+
+ SequenceI sq = remmadb.getSequenceProxy("Deminut");
+ Assert.assertNotNull(sq);
+ Assert.assertNotEquals(0, sq.getLength());
+ }
+
+}
--- /dev/null
+>DDB_G0280897
+MTDKINNLINQWLKWDKNEITRKEIEQLKENNNEKELLVRLEERIQFGTAGLRGAMRAGF
+SCMNDLTVTQASQGLCEYVIETIEQSKSKGIVIGYDGRHNSYIFAKITAATFKSKGFKVY
+LFSHIVPTPYVSFAVPNLKAAIGVMITASHNPKNDNGYKVYWETGCQINTPHDKGISKKI
+DENLEPWSNVDATSDIKYGNGDDGESMIDPLSVITELYNKNIKEYSVGSKIELANEPIVY
+TAMHGVGGVYAKKAFETFQLKPFIPVAQQIEPDAEFPTVTYPNPEEGKGALKLSIETAEA
+NNSRLILANDPDADRLAVAEKLADGSWKVFNGNEIGVLLADWAWTNRSTLTKGGSTLENN
+KYFMINTAVSSAMLKTMSEKEGFIHQECLTGFKWIGNAAYNAINNNDGTTFLFGYEEAIG
+FQYGDVSFDKDGVRAAAIFAEFALSLYKKGSSVQDHLESMYKRYGYHISKNRYFFCYEPS
+KMVSIFNKIRNDGKYLTKLGDDDDEQFTITRIRDLTTGYDNGYPDCKARLPVSSSTQMIT
+FYFKNGGIATLRGSGTEPKLKYYVEMIGEVKSNVESTLTKAVELVINQLLKPIENQLEPP
+KDD
+>PPL_06716
+MSNIKELAESWLKWDKNAETRKEIQSLLESDNQSELKSRLEQRIAFGTAGLRGPMKAGFS
+CMNDLTVIQASQGLCIYVEQTLSNSKNSGIVVGYDGRHHSKEFARLTAATFASRGFKVYL
+FSKIVPTPYVVILYLISNYMDCYVHQAFAVPELKASVGVMITASHNPKDDNGYKVYWDNG
+CQINTPHDIRIAMQIDLNLEPWNIDVNELLNGSLVSDPLDTITKSYFGKIAKYSVKNEVK
+LATSEKIVYTAMHGVGGEYAKMAFETFGLPAFIPVDQQIQPDPEFPTVAFPNPEEGKGAL
+KLSIETAERNNSRLILANDPDADRLAVAERQPDGQWKVFNGNEIGVLFADWAWQNARRAD
+STTPAERFCMINTAVSSSMLKTMANKDGYRHEECLTGFKWVGNKARELMDKGYNFLFAYE
+EAIGFMYGDVSLDKDGVRCAPIFAELALTCYQAGKSCQDHLEELYKRYGYHISKNRYFFC
+YDPKKMVAIFDKIRNYGQFPTNCGDFYITRVRDLTVGYDSGYPDHKARLPVSSSTQMITF
+YFENGGIATLRGSGTEPKLKYYVEMIGSDRQLVESTLSQLVEQVINQFLRPVENELTPPK
+DD
+>DFA_03821
+MTDINQLAQNWLKWDRNPKTHKEIEQLVEAKDENELRARLENRIAFGTAGIVSTTIVQSH
+MNIGPMKAGFANMNDLTVIQASQGLSIYVQETISQAQSKGVVVGYDGRYNSEVFAKLTAA
+TFASKGFKVYLFSKIVPTPFVAFAVPELGASVGVMVTASHNPKDDNGYKVYWDNGCQINT
+PHDKGIAKQIDLNLEPWTINIDKLLSSELVNDPLETISNAYFSKIYSYSVKNRSTPLELA
+NEKVVYTAMHGVGGDYVKKAFETFKLPPYVEVAQQIKPDPAFPTVAFPNPEEGKGALKLS
+IETAESVNSRLILANDPDADRLAVAEKLKDGSWKVFNGNEIGILLADWAWTNAKINHPDV
+PAEKFFMINTAVSSAMLKTMAKKEGYICEETLTGFKWVGNKAKEMIDQGYKFLFAYEEAI
+GFMYGDVSLDKDGVRCAPIFAEYALNLYANGSSCQDHLDHLMQRYGYHISKNRYFFCYEP
+SKMVRIFNDIRKSNNGQFPDKCGPYEIIRIRDLTVDYDTAYPDNKARLPVSTSTQMITFY
+FKNGAIATLRGSGTEPKLKYYVEMIGDNKQEVESTLQQVVQQVIDNFLQPVVNQLTPPKD
+D
+>DLA_10096
+MDIYTLANKWLEWDKNEKNRKEIQHFVDEKNEQELRERLENRIQFGTAGLRGPMKAGFAN
+MNDLTVIQASQGLALYVKETIDSALTKGVVVGYDGRHNSQTFARLTAATFLSKGFKVYLF
+SKLVPTPFVAFAVPELGASCGVMITASHNPKDDNGYKVYWDNGCQINTPHDKGISKLIDE
+NLVPWTMNLDDLNKSDLVSDPLERVSKSYFTKISKYSVVKSGATIKQEKVVYTPMHGVGG
+DYAAEAFKVFDLHPFIPVELQIKPDAEFPTVAFPNPEEGKGALKLAIETAESNQSRLILA
+NDPDADRLAVAEKQSSDGSWKVFNGNEIGVLFADWAWRKERALFSEGYNCKPSEYTMIST
+AVSSAMLSTMAKKEGFQHEEVLTGFKWVGNAAKQAMDRGQKFLFAYEEAIGFMYGDVSLD
+KDGVRGASIFAELAFDLYQQGSSCQEHLESLYKKYGYHISNNRYFFCYDPKKMVRIFNEI
+RGNNREYVKELGEFKVERIRDLTTGYDTAFPPEFKAQLPTSSSTQMITFYFTNGSIATLR
+GSGTEPKLKYYVESIGSDKLQVQQTLTKLVSLVIEKLLRPKENELTPPKESVGSERLLAL
+LSEVMSTSMKIQVKYNESITEYNIIKGVKLLTQIDVLCQIFKVDANPDRFVLNYRESNLI
+LSEDNLSKLFSNEISSCSSQSQNGSNGELSSLYSSFGENSSNNNNNSTLKFELILAPIYQ
+VDSVLEHLNNSNLIKKRII
+>DPU1265769
+MSMIRSISGVRGVIGQSWTPTLVSNHIIGFTQLLESEKYYNQKQKKIVVGRDSRVSGPWI
+EMIVNGSLISMGYQVIHIDIAATPTVQYMVEKTKSSGGIVITSSHNPVEWNGLKFVGPDG
+LFIAPVECEVLFSLADNPSSFKFPNYDKLGSVVCNTTANKEHIEAIFKLPFISVDKIKEK
+KFKVCLDSVNGAGGPIMSYLLTELGCEVIGINLEPTGLFAHTPEPVPANLGQLCELVKTH
+KADFGIAVDPDVDRCVFIDDKGVPLGEEYTLAMAVELLLGDCGRRGNVCKNLSSSRAIDD
+ICKKYDSQVICAPVGEIQVAKKMQQVNAVIGGEGNGGVMLPDIHIGRDAPVAATLALQLL
+ANRNAASISEFKRTTLPTYEIVKLKAGIEGLDPDAILAEYTKQYENKEGVVINQEDGLKI
+DSADWWVHLRKSNTEHIIRVISEAKNTKEATDIATKFINEIESKRK
+>440792448
+MASRVSGRMRKISDETQQMVNAWLSVDWDPESREHVKGLVAAGKEEELVAHLGRRISFGT
+AGLRGKMKWGFAFMNAVTVTQASQGLCAYLRTVHPCLTDLRERGVIVGHDGRYNSRMFAR
+LTAAVFLSRKIKVHLFRDDVPTPLVAFGVRHLKCAAGVMVTASHNPKEDNGYKVYWANSA
+QITAPHDAQIARAIEANFSIWDRMPDDKAIDEHPLCLDPTTDVCAAYLAAARHWSFRTPQ
+QNAAAQLRVVYTAMHGVGGQSVERIFDAFGLPPVIAVREQHDPDPDFTTVEFPNPEEANG
+CSLRLAMSTADREGAPLILANDPDADRLAVAERQRDSGEWRILDGNEIALLLADWLWRNY
+TERHPEVDRAKIVMLNSTVSSKALAAMAAKEGFHYRETLTGFKWLGNLADELVRAGYTFL
+FAYEVEIGFMIGDMSLDTDGVRAAPVFVEMANHLYERGLTLSDHLDNLYHKYGYYKMAVG
+YYFCHDPRLMDQIFNEIRNDGLYISTCGDHKVQYVRDLTTGFDNSQPHNRAVLPVSSAAH
+MITFTFENECVATFRGSGTEPKLKYYIEVANASNEQLATDLLDSMKQEIIDRFLQPSQNG
+LRPPAAAEDAHNSPHNSGNSPEQMAPARIARDVIHKEIQALQNLEATLGRDFEKVVEIIE
+SRGSGRVIFTGVGKSGIIAQKISASFSSLGISSFFVHATEAAHGDLGVITAEDVIIAISN
+SGNTPELIFIIPSLRVLAGKIIGITSNKDSLLARYSDASIITGKIMEADQHKIAPTASTI
+VCLAIGDALAVTLSARMKFTLPEFGLRHPGGVLGEKVLGKVFQEFAMKGQGRFLRFWKRM
+TNEERDKLRRDFERIDLAELSRIYLQCRSKAEKGAIDPHSLEPLPSHTWVKLHESDPAAV
+AAWRDAGLRALREGKIGVVLMAGGQATRLGMTMPKGFLDLNLPSHKSLYQLHAEKLLRLQ
+DEVRQTFGGGGGDEEVQQQQQQIQIPFYVMTSPEALQQTHQFFIKHQFFGLCPKQVFFFK
+QRSLPCVAPSGEIIMDTKCSVVFSPDGHGGLFVALKDAKAYEDMKRRGVEYVFAFGVDNP
+LCEVADPAYMGYCIQRNVKMGYKVVDRRDPQETAGVVCVRDGVINCVEYSELPESVAELR
+DEQSGELVYNAANMLNLFFTLRFMRKIADNPSLMEYHLAKKRIPFVNDNGVRTEPLVPNG
+WKFEKYLVDCTPYANNSVAVMFVKREEEFAPIKNGWNSEVDSPRSARRLLAAHYRRRIER
+AGGKLAADDPDKMVEVSPLVTDRKLAQLLQDKHLVTGPAVLQ
+>ENY64621.1
+MALNNYIKKTEMDYLYEQAALWLKWDKTPETRKEIEDLVASKNEEELKKRFCKRIEFGTA
+GLRGKMCAGFNCMNNLIVQQASQGLALAVEELVQNAHEKGVVIGYDGRYHSKEFAAITAK
+VFISKGFKTYLFSTLCPTPWTAFAVGYLKTACGVMVTASHNPKADNGYKVYWENGCQIIE
+PIDANIASKIHSNLEPWDLSNVDISKVIDPLADVSAEYYKQMMLTIPHFECPEQPKVKYV
+YTAMHGVGSKYVQDAFKTAKLPQPILVPLQNEPDPEFPTVPFPNPEEGKGALKCSIEVAE
+ANGATVIIANDPDADRLSVAVKSGNGWRQFTGNEMANLIADWTYNKYIVSGDKTPAFMVR
+STVSSSFISKMGEVEGFDTYETLTGFKWIGNKAKEIVDTQHKKLLMAYEEAIGFVIGNMS
+YDKDGVRAAVCFAAMALEYAEQGFNLEDRLNMLYEKYGYFASNNKYYFCYDPKLMEKIFN
+KMRNNGQYYWKFGKYAVKSIRDLTVGIDTAQPDKKPLLPVSASTQMITYTFENGCKATLR
+GSGTEPKLKYYIELPGKKGVKAEDVIAELMDLSHELLQASLEPEKNGLIPPKAE
+>Ppo014092.000
+MSISPSVQELVGKWLQWDKNPQNIKEIKDLVAANNEAELKNRLATRIAFGTAGLRGPMRA
+GFSCMNDLTVIQASQGLCKYLQQMVSDIKTRGIVVGYDGRHHSKEFAEWTAATFLSQGIT
+VYLFTRLVPTPFVSYATPLLRCAAGIMITASHNPKDDNGYKVYWDNGCQINVPHDKGISD
+CIEQNLTPWDINKAELLKSELVKDPTETVASAYLKEIKAKCCFHHDENSQKIPVTYTAMH
+GVGSEWVARAFEVFGLAPYVPVAPQISADPEFPTVAFPNPEEGKGALKLSMEAADKAGST
+LILATDPDADRLAVAEKLPSGSWKIFTGNEIGALLAYWAWLKYKERNPKVDPSKCVVINS
+TVSSKLLKALADKEGLKYDETLTGFKWIGGQAAIRIKEGYTFIFGFEEAIGFLFGDVNLD
+KDGVRAAAVFAEMNIQLHKQGITVVQQLEKIYKLYGYFITRNRYFFCYDPAKMERIFNAI
+RNYNNSGTYPTSCGPFKIKNTRDLTTGYDDSQTDKKAILPVSKSTQMITFFFENGGVVTL
+RGSGTEPKLKYYTELSGSDPEKVKSTLDEMVQAIIDTCLKPVENQLQPPSDE
+>ADB0001102_3
+MSTTTSINKLAQDWLKWDKNPKTRAEIQELVEQNDVKELTARLENRIAFGTAGLRGPMKA
+GFSCMNDLTVIQASQGLCLYVIDTIPNAIKSGVVIGYDGRYNSKEFAKYTAATFLSKGYK
+VYLFSKVVPTPYVAFAVTDLKASIGVMITASHNPKDDNGYKVYWENGCQINTPHDKGIAK
+LIDLNLEPWEINVDQLLSGPLVEDPLDRIVSSYNTKIAQYSVASHVKFANEKIIYTAMHG
+VGGEYTKMAFEAFKLPPFIPVAQQYQPDPAFPTVTFPNPEEGKGALKLSIETAEANGSRL
+ILANDPDADRLAVAERLKDGTWKVFNGNEIGVLLADWAWQNARRSHPDTPAEKFFMINTA
+VSSAMLKTMAKKDGYRCEETLTGFKWVGNRAREVMDAEGLHFLFAYEEAIGFLYGDVSLD
+KDGVRCAAIFAELALSYYANGSSCEDHLESLYKRYGYHISRNRYFFCYEPPKMVAIFNKI
+RNNRNFPTKCGRFEIERVRDLTIDYDDGFPDKKARLPVSTSTQMITFYFKNGAIATLRGS
+GTEPKLKYYVEMIGQDKAHVQQELAELVQCIINEFLRPVENELTPPKDD
+>Carpum
+MTQSTCITSMVINNYLSIYIFIYTINDYLKRSLFVLCLVAKMSHHKVAITHPISSYNSII
+NELAQNWLRWDKNKETRKEIEQLVEQKNEKELYDCLAKRIAFGTADNEIMMLLTHTLHTG
+LRGQMKAGFSNMNDLTVIQASQGLCKYVKETIPEAQKKGVVVGYDCRHHSETFARLTAAT
+FASQGFTVYLYSKMVPTPFVAFGVTDLKACVGVMVTASHNPKEDNGYKVYWENGCQINSP
+HDKGISQQIELNLEPWTIDVNSLLEKVDDPLERVTKSYMDQISKYSVRGSVDMATENVVY
+TAMHGVGGVFVKDAFAAFGLAPYIPVPAQVGPDAEFPTVTLPNPEEGKGALKLSIETAEA
+NNSRLIVANDPDADRLAAAEKLKDGSWKVFNGNEIGVLFADWAWQNARRQHGGDSINPSE
+YFMVTTAVSSSMLRTMATKEGYGYDETLTGFKWVGNKARDLIDQGKKFLFAYEESIGYMY
+GEVSLDKDGVRGAAVFTEMALSCYARGTSCQEHLESLYVKYGYHLSKNRYYFCYDPSKMV
+SIFNRIRNNGEFPKTCGPFEITRIRDLTVDYDNGYEDKKARLPVSSSTQMITFYFKNGAI
+ATLRGSGTEPKLKYYVEMIGDDKEQVKATLDQVHDQVIQQFLRPTENQLSPPSDE
+>Cephalum
+MTTDIYQIAQNWLRWDRNPKTHKEISQLVQDKNESELKARLESRIAFGTAGLRGPMKAGF
+SCMNDLTVIQASQGLCMYVKQTLAPDAERKGIVVGYDGRYNSEVFAKLTAATFVSQGFKV
+HLFSRLVPTPFVAFAVPFLKACVGVMITASHNPKDDNGYKVYWDNGCQINTPHDKGIAKQ
+IELNLEPWNVFYKEYFDRIERYTVRHNKQMAREKIVYSAMHGVGGEYTKRAFEVFALDPF
+IAVKEQFHPDPAFPTVTFPNPEEGKGALKLSIETAEANNNWAWKNGKPYYEKGLGSFPND
+QYFMINTAVSSAMLKTMAMKEGFTYEEVLTGFKWVGNAAQNLIEKGKHLLFAYEEAIGFM
+YGDVSLDKDGVRCAPIFAELAQHLYSKGSSCQDHLEELYKRYGYHISKNRYFFCYDPLKM
+EKIFNRIRNGGQYPTKCGDFEITRIRDLTTGYDTGYPPENKAQLPTSTSTQMITFYFKNG
+GIATLRGSGTEPKLKYYVEMIGDDKENVELILQSMVDQVINQFLRPIENELIPPKD
+>Violaceum
+MVINPFYPYYLYFCYSPGISYQGVKINKTKLEQSTLTTINQWLNGNYDEQTKKNIQNLLD
+QESYTELTDAFYRNLEFGTGGLRGIMGAGSNRINKYTIGTATQGLSNYLLKKYPGEKIKV
+AIAHDSRNNSDQFAKITADVFSANGIYVYFFKELRPTPELSFAIRELGCRSGVMLTASHN
+PKEYNGYKAYGADGGQFTAPDDRLVMDEVAKITSIDEVKFTRIDANIELIGEEIDQLYLD
+KITALSVSPEAISRQKDLKIVYSPIHGTGITLVPKALAQFGFDNVTIVEEQSKPDGNFPT
+VVYPNPEEKEAMTLALKKAQEIDADLVLATDPDADRVGIAVKNNNNEWILLNGNQTGSLL
+VHYVLTAWEEKGKIDGNQYIVKTVVTSNLIEAIAKAKKVDCYNTLTGFKWIGQLITSLQG
+KKTFVVGGEESYGYSVGELVRDKDAVISCAFIAEMTAYYKDKGSSLYNALIDMYVTHGLY
+KEELVSLTKKGKTGAEEIKAMMEKFRNNPPASLGGSKVSTLKDYELGTETDLNTGKISKL
+SLPKSDVLQFVTEDGSIVSARPSGTEPKIKFYCSVNATLSQASEFDKTDEKLGLKINALM
+EDLQK
+>Deminut
+MTDIYQIAQNWLKWDRNPKTHKEISTLVEKKDEAELRARLETRIAFGTAGLRGPMKAGFS
+CMNDLTVIQASQGLSLYVKKTLAGSESKGAVVGYDGRYNSEVFAKLTAATFASQGFKVYL
+FSKVVPTPYVAFAVPELGASVGVMVTASHNPKDDNGYKVYWDNGCQINTPHDKHISELIE
+SNLEPWNVCIYITLQINIDKLLSGVIDPLQVVTSSYMSKIEKYSVKHLPQPLKLATEQKI
+VYTAMHGVGAEYAKLAFEAFSLPPFIPVTQQVTPDPAFPTVAFPNPEEGKGALKLAIETA
+EANKSRIILANDPDADRLAVAEKQPEYVFLFYLISNNGTWKVFNGNEIGILFADWAWQNC
+RRVYPDVPADQFFMINTAVSSAMLKSMAKKDGYIHEETLTGFKWVGNKARELLDQNKRFL
+FAYEEAIGFMYGDVSLDKDGVRCAAIFAELALYQYANGSSCQRHLDSLYERYGYHISKNR
+YFFCYEPPKMVAIFNAIRNNKNYPTKCGEFEIERIRDLTDDYDNGYPDNKARLPISKSTQ
+MITFFFKNGAIATLRGSGTEPKLKYYVEMIGDNKSEVEAILAKVVTAVIDNFLRPVENQL
+TPPKDD
+>Ellipt
+MADLDKLVEDWMRWDKNTKTRDEVQKMVAQGDKKALAAALQNRIAFGTAGLRGPMKAGFA
+NMNDLTVIQASQGLCIYVSATIADAAKKGVVVGYDGRHNSLQFARLTAATFRSKGFKVYL
+FSTVVPTPYVAFSVPELGACVGVMVTASHNPKDDNGYKIDVEKLLKEDGVEDPLEKITAS
+YMSKVADYSIKSHPATKDIVMSDDKIVYTAMHGVGGEYTRRSFKAFSLPEFIPVVQQFHP
+DPEFPTVTFPNPEEGKGALKLAIETAEKNNSRLILANDPDADRLAVAERQPDGTWKVFNG
+NEIGVLFADWAWKNARARDPTTPASEFFMVNTAVSSAMLKTMAKTEGYTYEETLTGFKWV
+GNKAKEAIDKGGRFLFAYEEAIGFMYGDVSLDKDGVRTAPIFAQMALSLYAKGLSCVDHL
+EQLMKTYGYHISRNRYFFCYEPPKMVAIFDKIRNNGNFPKHCGPFEIVRVRDLTVDYDDA
+YEDKKARLPVSTSTQMITFYFKNGAIATLRGSGTEPKLKYYVEMIGDKSAKKEDVEKTLA
+EVVKQVIDNFLRPVENELTPPKDD
+>Lepto
+MASSERLQQLIQDWLKWDKNPTTLSEIQELVKKNDEKELRARLENRIAFGTAGMFLLGPM
+KAGFSCMNDLTVIQASQGLCIYVSDTIPNALNSGVVVGYDGRYNSKEFAKYTAATFLSKG
+YKVYLFSKVVPTPYVAFAVTELKAAIGVMITASHNPKDDNGYKVYWDNGCQINTPHDKGI
+AKQIQLNLEPWNVCAFFLDINANELLSGSSVVDPLDTIVNSYNSKITSYSVGNSGVKLAN
+EKIVYTAMHGVGGEYTKLAFEAFKLPPFVPVPQQYTPDPAFPTVAFPNPEEGKGALKLSI
+ETAEANGSRLILANDPDADRLAVAERNTNGTWKVFNGNEIGVLLADWAWQNARRAHPDTP
+ANRYFMINTAVSSAMLKTMAKHEGYRCDETLTGFKWVGNQARKVIDEEKLNFLFAYEEAI
+GFMYGDVSLDKDGVRCAPIFAEMALSYYAQGHSCEDHLETLYKRYGYHISRNRYFFCYEP
+PKMVAIFDRIRNGRNFPTKCGRFEIERVRDLTVDYDDAYPDKKARLPVSTSTQMITFWFK
+NGGIATLRGSGTEPKLKYYVEMIGQDKQVVEKELAELVDAVIQQFLRPVENELTPPKDD
--- /dev/null
+DDB_G0280897 603 15 60 61
+PPL_06716 602 641 60 61
+DFA_03821 601 1266 60 61
+DLA_10096 739 1890 60 61
+DPU1265769 466 2654 60 61
+440792448 1302 3139 60 61
+ENY64621.1 594 4476 60 61
+Ppo014092.000 592 5095 60 61
+ADB0001102_3 589 5711 60 61
+Carpum 655 6318 60 61
+Cephalum 536 6994 60 61
+Violaceum 605 7550 60 61
+Deminut 606 8175 60 61
+Ellipt 564 8800 60 61
+Lepto 599 9381 60 61
--- /dev/null
+HEADER GLYCOSYLTRANSFERASE 07-JUN-95 1XYZ
+TITLE A COMMON PROTEIN FOLD AND SIMILAR ACTIVE SITE IN TWO
+TITLE 2 DISTINCT FAMILIES OF BETA-GLYCANASES
+COMPND MOL_ID: 1;
+COMPND 2 MOLECULE: 1,4-BETA-D-XYLAN-XYLANOHYDROLASE;
+COMPND 3 CHAIN: A, B;
+COMPND 4 SYNONYM: ENDO-1\,4-BETA-XYLANASE Z, XYLANASE XYNZ;
+COMPND 5 EC: 3.2.1.8;
+COMPND 6 ENGINEERED: YES
+SOURCE MOL_ID: 1;
+SOURCE 2 ORGANISM_SCIENTIFIC: CLOSTRIDIUM THERMOCELLUM;
+SOURCE 3 ORGANISM_TAXID: 1515;
+SOURCE 4 STRAIN: NCIB 10682;
+SOURCE 5 EXPRESSION_SYSTEM: ESCHERICHIA COLI;
+SOURCE 6 EXPRESSION_SYSTEM_TAXID: 562;
+SOURCE 7 EXPRESSION_SYSTEM_PLASMID: PCT1214 (PUC8)
+KEYWDS GLYCOSYL HYDROLASE, XYLANASE, FAMILY F/10 OF GLYCOSYL
+KEYWDS 2 HYDROLASES, CLOSTRIDIUM THERMOCELLUM, GLYCOSYLTRANSFERASE
+EXPDTA X-RAY DIFFRACTION
+AUTHOR P.M.ALZARI,S.SPINELLI,R.DOMINGUEZ
+REVDAT 2 24-FEB-09 1XYZ 1 VERSN
+REVDAT 1 29-JAN-96 1XYZ 0
+JRNL AUTH R.DOMINGUEZ,H.SOUCHON,S.SPINELLI,Z.DAUTER,
+JRNL AUTH 2 K.S.WILSON,S.CHAUVAUX,P.BEGUIN,P.M.ALZARI
+JRNL TITL A COMMON PROTEIN FOLD AND SIMILAR ACTIVE SITE IN
+JRNL TITL 2 TWO DISTINCT FAMILIES OF BETA-GLYCANASES.
+JRNL REF NAT.STRUCT.BIOL. V. 2 569 1995
+JRNL REFN ISSN 1072-8368
+JRNL PMID 7664125
+JRNL DOI 10.1038/NSB0795-569
+REMARK 1
+REMARK 1 REFERENCE 1
+REMARK 1 AUTH H.SOUCHON,S.SPINELLI,P.BEGUIN,P.M.ALZARI
+REMARK 1 TITL CRYSTALLIZATION AND PRELIMINARY DIFFRACTION
+REMARK 1 TITL 2 ANALYSIS OF THE CATALYTIC DOMAIN OF XYLANASE Z
+REMARK 1 TITL 3 FROM CLOSTRIDIUM THERMOCELLUM
+REMARK 1 REF J.MOL.BIOL. V. 235 1348 1994
+REMARK 1 REFN ISSN 0022-2836
+REMARK 2
+REMARK 2 RESOLUTION. 1.40 ANGSTROMS.
+REMARK 3
+REMARK 3 REFINEMENT.
+REMARK 3 PROGRAM : ARP/WARP, X-PLOR
+REMARK 3 AUTHORS : LAMZIN,PERRAKIS,MORRIS
+REMARK 3
+REMARK 3 DATA USED IN REFINEMENT.
+REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 1.40
+REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 10.00
+REMARK 3 DATA CUTOFF (SIGMA(F)) : 0.000
+REMARK 3 DATA CUTOFF HIGH (ABS(F)) : NULL
+REMARK 3 DATA CUTOFF LOW (ABS(F)) : NULL
+REMARK 3 COMPLETENESS (WORKING+TEST) (%) : NULL
+REMARK 3 NUMBER OF REFLECTIONS : 117046
+REMARK 3
+REMARK 3 FIT TO DATA USED IN REFINEMENT.
+REMARK 3 CROSS-VALIDATION METHOD : NULL
+REMARK 3 FREE R VALUE TEST SET SELECTION : NULL
+REMARK 3 R VALUE (WORKING SET) : 0.183
+REMARK 3 FREE R VALUE : 0.221
+REMARK 3 FREE R VALUE TEST SET SIZE (%) : NULL
+REMARK 3 FREE R VALUE TEST SET COUNT : NULL
+REMARK 3 ESTIMATED ERROR OF FREE R VALUE : NULL
+REMARK 3
+REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN.
+REMARK 3 TOTAL NUMBER OF BINS USED : NULL
+REMARK 3 BIN RESOLUTION RANGE HIGH (A) : NULL
+REMARK 3 BIN RESOLUTION RANGE LOW (A) : NULL
+REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : NULL
+REMARK 3 REFLECTIONS IN BIN (WORKING SET) : NULL
+REMARK 3 BIN R VALUE (WORKING SET) : NULL
+REMARK 3 BIN FREE R VALUE : NULL
+REMARK 3 BIN FREE R VALUE TEST SET SIZE (%) : NULL
+REMARK 3 BIN FREE R VALUE TEST SET COUNT : NULL
+REMARK 3 ESTIMATED ERROR OF BIN FREE R VALUE : NULL
+REMARK 3
+REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT.
+REMARK 3 PROTEIN ATOMS : 5166
+REMARK 3 NUCLEIC ACID ATOMS : 0
+REMARK 3 HETEROGEN ATOMS : 0
+REMARK 3 SOLVENT ATOMS : 457
+REMARK 3
+REMARK 3 B VALUES.
+REMARK 3 FROM WILSON PLOT (A**2) : NULL
+REMARK 3 MEAN B VALUE (OVERALL, A**2) : NULL
+REMARK 3 OVERALL ANISOTROPIC B VALUE.
+REMARK 3 B11 (A**2) : NULL
+REMARK 3 B22 (A**2) : NULL
+REMARK 3 B33 (A**2) : NULL
+REMARK 3 B12 (A**2) : NULL
+REMARK 3 B13 (A**2) : NULL
+REMARK 3 B23 (A**2) : NULL
+REMARK 3
+REMARK 3 ESTIMATED COORDINATE ERROR.
+REMARK 3 ESD FROM LUZZATI PLOT (A) : NULL
+REMARK 3 ESD FROM SIGMAA (A) : NULL
+REMARK 3 LOW RESOLUTION CUTOFF (A) : NULL
+REMARK 3
+REMARK 3 CROSS-VALIDATED ESTIMATED COORDINATE ERROR.
+REMARK 3 ESD FROM C-V LUZZATI PLOT (A) : NULL
+REMARK 3 ESD FROM C-V SIGMAA (A) : NULL
+REMARK 3
+REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES.
+REMARK 3 BOND LENGTHS (A) : 0.015
+REMARK 3 BOND ANGLES (DEGREES) : 1.61
+REMARK 3 DIHEDRAL ANGLES (DEGREES) : 23.20
+REMARK 3 IMPROPER ANGLES (DEGREES) : 1.58
+REMARK 3
+REMARK 3 ISOTROPIC THERMAL MODEL : NULL
+REMARK 3
+REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS. RMS SIGMA
+REMARK 3 MAIN-CHAIN BOND (A**2) : NULL ; NULL
+REMARK 3 MAIN-CHAIN ANGLE (A**2) : NULL ; NULL
+REMARK 3 SIDE-CHAIN BOND (A**2) : NULL ; NULL
+REMARK 3 SIDE-CHAIN ANGLE (A**2) : NULL ; NULL
+REMARK 3
+REMARK 3 NCS MODEL : NULL
+REMARK 3
+REMARK 3 NCS RESTRAINTS. RMS SIGMA/WEIGHT
+REMARK 3 GROUP 1 POSITIONAL (A) : NULL ; NULL
+REMARK 3 GROUP 1 B-FACTOR (A**2) : NULL ; NULL
+REMARK 3
+REMARK 3 PARAMETER FILE 1 : NULL
+REMARK 3 TOPOLOGY FILE 1 : NULL
+REMARK 3
+REMARK 3 OTHER REFINEMENT REMARKS: NULL
+REMARK 4
+REMARK 4 1XYZ COMPLIES WITH FORMAT V. 3.15, 01-DEC-08
+REMARK 100
+REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY BNL.
+REMARK 200
+REMARK 200 EXPERIMENTAL DETAILS
+REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION
+REMARK 200 DATE OF DATA COLLECTION : NOV-93
+REMARK 200 TEMPERATURE (KELVIN) : NULL
+REMARK 200 PH : NULL
+REMARK 200 NUMBER OF CRYSTALS USED : 1
+REMARK 200
+REMARK 200 SYNCHROTRON (Y/N) : Y
+REMARK 200 RADIATION SOURCE : EMBL/DESY, HAMBURG
+REMARK 200 BEAMLINE : X31
+REMARK 200 X-RAY GENERATOR MODEL : NULL
+REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M
+REMARK 200 WAVELENGTH OR RANGE (A) : 0.92
+REMARK 200 MONOCHROMATOR : NULL
+REMARK 200 OPTICS : NULL
+REMARK 200
+REMARK 200 DETECTOR TYPE : IMAGE PLATE
+REMARK 200 DETECTOR MANUFACTURER : MARRESEARCH
+REMARK 200 INTENSITY-INTEGRATION SOFTWARE : DENZO
+REMARK 200 DATA SCALING SOFTWARE : NULL
+REMARK 200
+REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 11704
+REMARK 200 RESOLUTION RANGE HIGH (A) : NULL
+REMARK 200 RESOLUTION RANGE LOW (A) : NULL
+REMARK 200 REJECTION CRITERIA (SIGMA(I)) : NULL
+REMARK 200
+REMARK 200 OVERALL.
+REMARK 200 COMPLETENESS FOR RANGE (%) : 96.4
+REMARK 200 DATA REDUNDANCY : 2.900
+REMARK 200 R MERGE (I) : 0.08300
+REMARK 200 R SYM (I) : NULL
+REMARK 200 <I/SIGMA(I)> FOR THE DATA SET : NULL
+REMARK 200
+REMARK 200 IN THE HIGHEST RESOLUTION SHELL.
+REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : NULL
+REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : NULL
+REMARK 200 COMPLETENESS FOR SHELL (%) : NULL
+REMARK 200 DATA REDUNDANCY IN SHELL : NULL
+REMARK 200 R MERGE FOR SHELL (I) : NULL
+REMARK 200 R SYM FOR SHELL (I) : NULL
+REMARK 200 <I/SIGMA(I)> FOR SHELL : NULL
+REMARK 200
+REMARK 200 DIFFRACTION PROTOCOL: NULL
+REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: NULL
+REMARK 200 SOFTWARE USED: ARP/WARP, X-PLOR
+REMARK 200 STARTING MODEL: NULL
+REMARK 200
+REMARK 200 REMARK: NULL
+REMARK 280
+REMARK 280 CRYSTAL
+REMARK 280 SOLVENT CONTENT, VS (%): 40.63
+REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.07
+REMARK 280
+REMARK 280 CRYSTALLIZATION CONDITIONS: NULL
+REMARK 290
+REMARK 290 CRYSTALLOGRAPHIC SYMMETRY
+REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 1
+REMARK 290
+REMARK 290 SYMOP SYMMETRY
+REMARK 290 NNNMMM OPERATOR
+REMARK 290 1555 X,Y,Z
+REMARK 290
+REMARK 290 WHERE NNN -> OPERATOR NUMBER
+REMARK 290 MMM -> TRANSLATION VECTOR
+REMARK 290
+REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS
+REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM
+REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY
+REMARK 290 RELATED MOLECULES.
+REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000
+REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000
+REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000
+REMARK 290
+REMARK 290 REMARK: NULL
+REMARK 300
+REMARK 300 BIOMOLECULE: 1, 2
+REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM
+REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN
+REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON
+REMARK 300 BURIED SURFACE AREA.
+REMARK 300 REMARK:
+REMARK 300 MTRIX
+REMARK 300 THE TRANSFORMATIONS PRESENTED ON MTRIX RECORDS BELOW
+REMARK 300 DESCRIBE NON-CRYSTALLOGRAPHIC RELATIONSHIPS AMONG THE
+REMARK 300 VARIOUS DOMAINS IN THIS ENTRY. APPLYING THE APPROPRIATE
+REMARK 300 MTRIX TRANSFORMATION TO THE RESIDUES LISTED FIRST WILL
+REMARK 300 YIELD APPROXIMATE COORDINATES FOR THE RESIDUES LISTED
+REMARK 300 SECOND.
+REMARK 300
+REMARK 300 APPLIED TO TRANSFORMED TO
+REMARK 300 MTRIX RESIDUES RESIDUES RMSD
+REMARK 300 M1 A 516 .. A 835 B 516 .. B 835 0.287
+REMARK 350
+REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN
+REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE
+REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS
+REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND
+REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.
+REMARK 350
+REMARK 350 BIOMOLECULE: 1
+REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: MONOMERIC
+REMARK 350 APPLY THE FOLLOWING TO CHAINS: A
+REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000
+REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000
+REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000
+REMARK 350
+REMARK 350 BIOMOLECULE: 2
+REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: MONOMERIC
+REMARK 350 APPLY THE FOLLOWING TO CHAINS: B
+REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000
+REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000
+REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000
+REMARK 465
+REMARK 465 MISSING RESIDUES
+REMARK 465 THE FOLLOWING RESIDUES WERE NOT LOCATED IN THE
+REMARK 465 EXPERIMENT. (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN
+REMARK 465 IDENTIFIER; SSSEQ=SEQUENCE NUMBER; I=INSERTION CODE.)
+REMARK 465
+REMARK 465 M RES C SSSEQI
+REMARK 465 PRO A 491
+REMARK 465 GLY A 492
+REMARK 465 GLN A 493
+REMARK 465 GLY A 494
+REMARK 465 ASP A 495
+REMARK 465 VAL A 496
+REMARK 465 GLN A 497
+REMARK 465 THR A 498
+REMARK 465 PRO A 499
+REMARK 465 ASN A 500
+REMARK 465 PRO A 501
+REMARK 465 SER A 502
+REMARK 465 VAL A 503
+REMARK 465 THR A 504
+REMARK 465 PRO A 505
+REMARK 465 THR A 506
+REMARK 465 GLN A 507
+REMARK 465 THR A 508
+REMARK 465 PRO A 509
+REMARK 465 ILE A 510
+REMARK 465 PRO A 511
+REMARK 465 THR A 512
+REMARK 465 ILE A 513
+REMARK 465 SER A 514
+REMARK 465 GLY A 515
+REMARK 465 GLY A 836
+REMARK 465 TYR A 837
+REMARK 465 PRO B 491
+REMARK 465 GLY B 492
+REMARK 465 GLN B 493
+REMARK 465 GLY B 494
+REMARK 465 ASP B 495
+REMARK 465 VAL B 496
+REMARK 465 GLN B 497
+REMARK 465 THR B 498
+REMARK 465 PRO B 499
+REMARK 465 ASN B 500
+REMARK 465 PRO B 501
+REMARK 465 SER B 502
+REMARK 465 VAL B 503
+REMARK 465 THR B 504
+REMARK 465 PRO B 505
+REMARK 465 THR B 506
+REMARK 465 GLN B 507
+REMARK 465 THR B 508
+REMARK 465 PRO B 509
+REMARK 465 ILE B 510
+REMARK 465 PRO B 511
+REMARK 465 THR B 512
+REMARK 465 ILE B 513
+REMARK 465 SER B 514
+REMARK 465 GLY B 515
+REMARK 465 GLY B 836
+REMARK 465 TYR B 837
+REMARK 500
+REMARK 500 GEOMETRY AND STEREOCHEMISTRY
+REMARK 500 SUBTOPIC: CLOSE CONTACTS IN SAME ASYMMETRIC UNIT
+REMARK 500
+REMARK 500 THE FOLLOWING ATOMS ARE IN CLOSE CONTACT.
+REMARK 500
+REMARK 500 ATM1 RES C SSEQI ATM2 RES C SSEQI DISTANCE
+REMARK 500 O HOH A 8 O HOH A 204 2.06
+REMARK 500 SD MET A 562 O HOH A 193 2.11
+REMARK 500 O HOH B 279 O HOH B 358 2.16
+REMARK 500 ND2 ASN A 828 O HOH A 104 2.17
+REMARK 500 O HOH A 72 O HOH A 190 2.17
+REMARK 500 O HOH B 312 O HOH B 369 2.18
+REMARK 500 O HOH A 175 O HOH B 116 2.19
+REMARK 500
+REMARK 500 REMARK: NULL
+REMARK 500
+REMARK 500 GEOMETRY AND STEREOCHEMISTRY
+REMARK 500 SUBTOPIC: TORSION ANGLES
+REMARK 500
+REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS:
+REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER;
+REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE).
+REMARK 500
+REMARK 500 STANDARD TABLE:
+REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2)
+REMARK 500
+REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI-
+REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400
+REMARK 500
+REMARK 500 M RES CSSEQI PSI PHI
+REMARK 500 ASP A 693 -151.50 -91.34
+REMARK 500 GLU A 754 45.56 -146.41
+REMARK 500 ASN A 813 59.68 38.32
+REMARK 500 ASN B 560 -17.68 -141.26
+REMARK 500 ASP B 693 -150.15 -91.02
+REMARK 500 GLU B 754 46.57 -142.59
+REMARK 500 SER B 762 4.24 50.65
+REMARK 500 ASN B 813 61.25 36.76
+REMARK 500
+REMARK 500 REMARK: NULL
+REMARK 525
+REMARK 525 SOLVENT
+REMARK 525
+REMARK 525 THE SOLVENT MOLECULES HAVE CHAIN IDENTIFIERS THAT
+REMARK 525 INDICATE THE POLYMER CHAIN WITH WHICH THEY ARE MOST
+REMARK 525 CLOSELY ASSOCIATED. THE REMARK LISTS ALL THE SOLVENT
+REMARK 525 MOLECULES WHICH ARE MORE THAN 5A AWAY FROM THE
+REMARK 525 NEAREST POLYMER CHAIN (M = MODEL NUMBER;
+REMARK 525 RES=RESIDUE NAME; C=CHAIN IDENTIFIER; SSEQ=SEQUENCE
+REMARK 525 NUMBER; I=INSERTION CODE):
+REMARK 525
+REMARK 525 M RES CSSEQI
+REMARK 525 HOH B 299 DISTANCE = 13.50 ANGSTROMS
+REMARK 525 HOH A 98 DISTANCE = 9.05 ANGSTROMS
+REMARK 525 HOH A 100 DISTANCE = 9.72 ANGSTROMS
+REMARK 525 HOH B 356 DISTANCE = 5.34 ANGSTROMS
+REMARK 525 HOH B 368 DISTANCE = 8.39 ANGSTROMS
+REMARK 525 HOH B 380 DISTANCE = 11.09 ANGSTROMS
+REMARK 525 HOH B 403 DISTANCE = 5.08 ANGSTROMS
+REMARK 525 HOH B 409 DISTANCE = 18.99 ANGSTROMS
+REMARK 525 HOH A 225 DISTANCE = 5.08 ANGSTROMS
+REMARK 525 HOH A 230 DISTANCE = 5.81 ANGSTROMS
+DBREF 1XYZ A 491 837 UNP P10478 XYNZ_CLOTM 491 837
+DBREF 1XYZ B 491 837 UNP P10478 XYNZ_CLOTM 491 837
+SEQRES 1 A 347 PRO GLY GLN GLY ASP VAL GLN THR PRO ASN PRO SER VAL
+SEQRES 2 A 347 THR PRO THR GLN THR PRO ILE PRO THR ILE SER GLY ASN
+SEQRES 3 A 347 ALA LEU ARG ASP TYR ALA GLU ALA ARG GLY ILE LYS ILE
+SEQRES 4 A 347 GLY THR CYS VAL ASN TYR PRO PHE TYR ASN ASN SER ASP
+SEQRES 5 A 347 PRO THR TYR ASN SER ILE LEU GLN ARG GLU PHE SER MET
+SEQRES 6 A 347 VAL VAL CYS GLU ASN GLU MET LYS PHE ASP ALA LEU GLN
+SEQRES 7 A 347 PRO ARG GLN ASN VAL PHE ASP PHE SER LYS GLY ASP GLN
+SEQRES 8 A 347 LEU LEU ALA PHE ALA GLU ARG ASN GLY MET GLN MET ARG
+SEQRES 9 A 347 GLY HIS THR LEU ILE TRP HIS ASN GLN ASN PRO SER TRP
+SEQRES 10 A 347 LEU THR ASN GLY ASN TRP ASN ARG ASP SER LEU LEU ALA
+SEQRES 11 A 347 VAL MET LYS ASN HIS ILE THR THR VAL MET THR HIS TYR
+SEQRES 12 A 347 LYS GLY LYS ILE VAL GLU TRP ASP VAL ALA ASN GLU CYS
+SEQRES 13 A 347 MET ASP ASP SER GLY ASN GLY LEU ARG SER SER ILE TRP
+SEQRES 14 A 347 ARG ASN VAL ILE GLY GLN ASP TYR LEU ASP TYR ALA PHE
+SEQRES 15 A 347 ARG TYR ALA ARG GLU ALA ASP PRO ASP ALA LEU LEU PHE
+SEQRES 16 A 347 TYR ASN ASP TYR ASN ILE GLU ASP LEU GLY PRO LYS SER
+SEQRES 17 A 347 ASN ALA VAL PHE ASN MET ILE LYS SER MET LYS GLU ARG
+SEQRES 18 A 347 GLY VAL PRO ILE ASP GLY VAL GLY PHE GLN CYS HIS PHE
+SEQRES 19 A 347 ILE ASN GLY MET SER PRO GLU TYR LEU ALA SER ILE ASP
+SEQRES 20 A 347 GLN ASN ILE LYS ARG TYR ALA GLU ILE GLY VAL ILE VAL
+SEQRES 21 A 347 SER PHE THR GLU ILE ASP ILE ARG ILE PRO GLN SER GLU
+SEQRES 22 A 347 ASN PRO ALA THR ALA PHE GLN VAL GLN ALA ASN ASN TYR
+SEQRES 23 A 347 LYS GLU LEU MET LYS ILE CYS LEU ALA ASN PRO ASN CYS
+SEQRES 24 A 347 ASN THR PHE VAL MET TRP GLY PHE THR ASP LYS TYR THR
+SEQRES 25 A 347 TRP ILE PRO GLY THR PHE PRO GLY TYR GLY ASN PRO LEU
+SEQRES 26 A 347 ILE TYR ASP SER ASN TYR ASN PRO LYS PRO ALA TYR ASN
+SEQRES 27 A 347 ALA ILE LYS GLU ALA LEU MET GLY TYR
+SEQRES 1 B 347 PRO GLY GLN GLY ASP VAL GLN THR PRO ASN PRO SER VAL
+SEQRES 2 B 347 THR PRO THR GLN THR PRO ILE PRO THR ILE SER GLY ASN
+SEQRES 3 B 347 ALA LEU ARG ASP TYR ALA GLU ALA ARG GLY ILE LYS ILE
+SEQRES 4 B 347 GLY THR CYS VAL ASN TYR PRO PHE TYR ASN ASN SER ASP
+SEQRES 5 B 347 PRO THR TYR ASN SER ILE LEU GLN ARG GLU PHE SER MET
+SEQRES 6 B 347 VAL VAL CYS GLU ASN GLU MET LYS PHE ASP ALA LEU GLN
+SEQRES 7 B 347 PRO ARG GLN ASN VAL PHE ASP PHE SER LYS GLY ASP GLN
+SEQRES 8 B 347 LEU LEU ALA PHE ALA GLU ARG ASN GLY MET GLN MET ARG
+SEQRES 9 B 347 GLY HIS THR LEU ILE TRP HIS ASN GLN ASN PRO SER TRP
+SEQRES 10 B 347 LEU THR ASN GLY ASN TRP ASN ARG ASP SER LEU LEU ALA
+SEQRES 11 B 347 VAL MET LYS ASN HIS ILE THR THR VAL MET THR HIS TYR
+SEQRES 12 B 347 LYS GLY LYS ILE VAL GLU TRP ASP VAL ALA ASN GLU CYS
+SEQRES 13 B 347 MET ASP ASP SER GLY ASN GLY LEU ARG SER SER ILE TRP
+SEQRES 14 B 347 ARG ASN VAL ILE GLY GLN ASP TYR LEU ASP TYR ALA PHE
+SEQRES 15 B 347 ARG TYR ALA ARG GLU ALA ASP PRO ASP ALA LEU LEU PHE
+SEQRES 16 B 347 TYR ASN ASP TYR ASN ILE GLU ASP LEU GLY PRO LYS SER
+SEQRES 17 B 347 ASN ALA VAL PHE ASN MET ILE LYS SER MET LYS GLU ARG
+SEQRES 18 B 347 GLY VAL PRO ILE ASP GLY VAL GLY PHE GLN CYS HIS PHE
+SEQRES 19 B 347 ILE ASN GLY MET SER PRO GLU TYR LEU ALA SER ILE ASP
+SEQRES 20 B 347 GLN ASN ILE LYS ARG TYR ALA GLU ILE GLY VAL ILE VAL
+SEQRES 21 B 347 SER PHE THR GLU ILE ASP ILE ARG ILE PRO GLN SER GLU
+SEQRES 22 B 347 ASN PRO ALA THR ALA PHE GLN VAL GLN ALA ASN ASN TYR
+SEQRES 23 B 347 LYS GLU LEU MET LYS ILE CYS LEU ALA ASN PRO ASN CYS
+SEQRES 24 B 347 ASN THR PHE VAL MET TRP GLY PHE THR ASP LYS TYR THR
+SEQRES 25 B 347 TRP ILE PRO GLY THR PHE PRO GLY TYR GLY ASN PRO LEU
+SEQRES 26 B 347 ILE TYR ASP SER ASN TYR ASN PRO LYS PRO ALA TYR ASN
+SEQRES 27 B 347 ALA ILE LYS GLU ALA LEU MET GLY TYR
+FORMUL 3 HOH *457(H2 O)
+HELIX 1 1 LEU A 518 ARG A 525 1 8
+HELIX 2 2 TYR A 535 ASN A 539 5 5
+HELIX 3 3 PRO A 543 GLU A 552 1 10
+HELIX 4 4 PHE A 564 LEU A 567 1 4
+HELIX 5 5 SER A 577 ASN A 589 1 13
+HELIX 6 6 SER A 606 THR A 609 1 4
+HELIX 7 7 ARG A 615 HIS A 632 1 18
+HELIX 8 8 ILE A 658 ILE A 663 1 6
+HELIX 9 9 TYR A 667 ALA A 678 1 12
+HELIX 10 10 PRO A 696 ARG A 711 1 16
+HELIX 11 11 PRO A 730 ILE A 746 1 17
+HELIX 12 12 PRO A 765 ALA A 785 1 21
+HELIX 13 13 ILE A 804 THR A 807 1 4
+HELIX 14 14 PRO A 825 LEU A 834 1 10
+HELIX 15 15 LEU B 518 ARG B 525 1 8
+HELIX 16 16 TYR B 535 ASN B 539 5 5
+HELIX 17 17 PRO B 543 GLU B 552 1 10
+HELIX 18 18 PHE B 564 LEU B 567 1 4
+HELIX 19 19 SER B 577 ASN B 589 1 13
+HELIX 20 20 SER B 606 THR B 609 1 4
+HELIX 21 21 ARG B 615 HIS B 632 1 18
+HELIX 22 22 ILE B 658 ILE B 663 1 6
+HELIX 23 23 TYR B 667 ALA B 678 1 12
+HELIX 24 24 PRO B 696 GLU B 710 1 15
+HELIX 25 25 PRO B 730 ILE B 746 1 17
+HELIX 26 26 PRO B 765 ALA B 785 1 21
+HELIX 27 27 ILE B 804 THR B 807 1 4
+HELIX 28 28 PRO B 825 ALA B 833 1 9
+SHEET 1 A 8 GLN A 592 ARG A 594 0
+SHEET 2 A 8 MET A 555 CYS A 558 1 N VAL A 556 O GLN A 592
+SHEET 3 A 8 LYS A 528 VAL A 533 1 N THR A 531 O MET A 555
+SHEET 4 A 8 CYS A 789 MET A 794 1 N PHE A 792 O LYS A 528
+SHEET 5 A 8 ILE A 749 PHE A 752 1 N VAL A 750 O ASN A 790
+SHEET 6 A 8 GLY A 717 PHE A 720 1 N VAL A 718 O ILE A 749
+SHEET 7 A 8 LEU A 683 ASP A 688 1 N TYR A 686 O GLY A 717
+SHEET 8 A 8 GLU A 639 ASN A 644 1 N TRP A 640 O LEU A 683
+SHEET 1 B 2 HIS A 723 ILE A 725 0
+SHEET 2 B 2 ASP A 756 ARG A 758 1 N ASP A 756 O PHE A 724
+SHEET 1 C 8 GLN B 592 ARG B 594 0
+SHEET 2 C 8 MET B 555 CYS B 558 1 N VAL B 556 O GLN B 592
+SHEET 3 C 8 LYS B 528 VAL B 533 1 N THR B 531 O MET B 555
+SHEET 4 C 8 CYS B 789 MET B 794 1 N PHE B 792 O LYS B 528
+SHEET 5 C 8 ILE B 749 PHE B 752 1 N VAL B 750 O ASN B 790
+SHEET 6 C 8 GLY B 717 PHE B 720 1 N VAL B 718 O ILE B 749
+SHEET 7 C 8 LEU B 683 ASP B 688 1 N TYR B 686 O GLY B 717
+SHEET 8 C 8 GLU B 639 ASN B 644 1 N TRP B 640 O LEU B 683
+SHEET 1 D 2 HIS B 723 ILE B 725 0
+SHEET 2 D 2 ASP B 756 ARG B 758 1 N ASP B 756 O PHE B 724
+CISPEP 1 HIS A 596 THR A 597 0 0.11
+CISPEP 2 HIS B 596 THR B 597 0 0.29
+CRYST1 47.100 51.100 70.740 100.54 83.79 101.64 P 1 2
+ORIGX1 1.000000 0.000000 0.000000 0.00000
+ORIGX2 0.000000 1.000000 0.000000 0.00000
+ORIGX3 0.000000 0.000000 1.000000 0.00000
+SCALE1 0.021231 0.004374 -0.001609 0.00000
+SCALE2 0.000000 0.019980 0.003352 0.00000
+SCALE3 0.000000 0.000000 0.014418 0.00000
+MTRIX1 1 -0.999970 0.003570 0.006220 23.67979 1
+MTRIX2 1 0.006340 0.034090 0.999400 -4.45463 1
+MTRIX3 1 0.003360 0.999410 -0.034110 56.27028 1
+ATOM 1 N ASN A 516 41.511 25.152 36.876 1.00 22.29 N
+ATOM 2 CA ASN A 516 40.907 25.555 35.563 1.00 21.77 C
+ATOM 3 C ASN A 516 39.684 24.707 35.106 1.00 19.45 C
+ATOM 4 O ASN A 516 39.191 24.916 34.001 1.00 18.37 O
+ATOM 5 CB ASN A 516 41.970 25.570 34.422 1.00 25.18 C
+ATOM 6 CG ASN A 516 43.166 26.528 34.694 1.00 28.53 C
+ATOM 7 OD1 ASN A 516 43.247 27.183 35.761 1.00 31.23 O
+ATOM 8 ND2 ASN A 516 44.122 26.565 33.756 1.00 28.63 N
+ATOM 9 N ALA A 517 39.186 23.778 35.939 1.00 15.70 N
+ATOM 10 CA ALA A 517 38.027 22.952 35.538 1.00 14.27 C
+ATOM 11 C ALA A 517 36.730 23.719 35.746 1.00 12.59 C
+ATOM 12 O ALA A 517 36.707 24.699 36.480 1.00 12.14 O
+ATOM 13 CB ALA A 517 37.986 21.654 36.326 1.00 14.12 C
+ATOM 14 N LEU A 518 35.647 23.273 35.115 1.00 11.39 N
+ATOM 15 CA LEU A 518 34.366 23.944 35.280 1.00 11.22 C
+ATOM 16 C LEU A 518 33.984 24.033 36.768 1.00 10.88 C
+ATOM 17 O LEU A 518 33.537 25.080 37.228 1.00 11.47 O
+ATOM 18 CB LEU A 518 33.276 23.197 34.525 1.00 11.98 C
+ATOM 19 CG LEU A 518 33.253 23.288 33.007 1.00 12.97 C
+ATOM 20 CD1 LEU A 518 32.199 22.294 32.471 1.00 13.61 C
+ATOM 21 CD2 LEU A 518 32.943 24.720 32.590 1.00 13.01 C
+ATOM 22 N ARG A 519 34.201 22.959 37.533 1.00 10.76 N
+ATOM 23 CA ARG A 519 33.856 22.980 38.959 1.00 11.30 C
+ATOM 24 C ARG A 519 34.623 24.033 39.770 1.00 13.05 C
+ATOM 25 O ARG A 519 34.129 24.518 40.770 1.00 13.26 O
+ATOM 26 CB ARG A 519 34.047 21.612 39.610 1.00 11.25 C
+ATOM 27 CG ARG A 519 35.464 21.144 39.631 1.00 12.52 C
+ATOM 28 CD ARG A 519 35.624 19.805 40.289 1.00 15.25 C
+ATOM 29 NE ARG A 519 35.222 19.856 41.678 1.00 17.64 N
+ATOM 30 CZ ARG A 519 35.125 18.774 42.447 1.00 19.57 C
+ATOM 31 NH1 ARG A 519 35.403 17.566 41.943 1.00 20.77 N
+ATOM 32 NH2 ARG A 519 34.757 18.903 43.707 1.00 20.67 N
+ATOM 33 N ASP A 520 35.818 24.409 39.330 1.00 13.66 N
+ATOM 34 CA ASP A 520 36.605 25.420 40.057 1.00 15.27 C
+ATOM 35 C ASP A 520 35.994 26.819 39.900 1.00 15.32 C
+ATOM 36 O ASP A 520 35.875 27.572 40.864 1.00 16.59 O
+ATOM 37 CB ASP A 520 38.056 25.409 39.563 1.00 16.63 C
+ATOM 38 CG ASP A 520 38.717 24.070 39.771 1.00 18.58 C
+ATOM 39 OD1 ASP A 520 38.507 23.499 40.860 1.00 20.36 O
+ATOM 40 OD2 ASP A 520 39.409 23.562 38.864 1.00 18.95 O
+ATOM 41 N TYR A 521 35.607 27.159 38.680 1.00 14.43 N
+ATOM 42 CA TYR A 521 34.999 28.446 38.424 1.00 15.53 C
+ATOM 43 C TYR A 521 33.606 28.496 39.035 1.00 15.66 C
+ATOM 44 O TYR A 521 33.161 29.542 39.518 1.00 15.87 O
+ATOM 45 CB TYR A 521 34.936 28.692 36.930 1.00 17.67 C
+ATOM 46 CG TYR A 521 36.303 28.908 36.363 1.00 21.57 C
+ATOM 47 CD1 TYR A 521 37.054 30.035 36.730 1.00 23.83 C
+ATOM 48 CD2 TYR A 521 36.873 27.984 35.504 1.00 22.47 C
+ATOM 49 CE1 TYR A 521 38.347 30.235 36.255 1.00 24.99 C
+ATOM 50 CE2 TYR A 521 38.169 28.171 35.016 1.00 24.67 C
+ATOM 51 CZ TYR A 521 38.896 29.302 35.398 1.00 25.79 C
+ATOM 52 OH TYR A 521 40.165 29.509 34.903 1.00 27.89 O
+ATOM 53 N ALA A 522 32.906 27.366 38.988 1.00 13.96 N
+ATOM 54 CA ALA A 522 31.570 27.312 39.556 1.00 14.62 C
+ATOM 55 C ALA A 522 31.654 27.491 41.058 1.00 14.50 C
+ATOM 56 O ALA A 522 30.933 28.297 41.615 1.00 15.27 O
+ATOM 57 CB ALA A 522 30.907 25.982 39.213 1.00 14.67 C
+ATOM 58 N GLU A 523 32.534 26.739 41.706 1.00 15.66 N
+ATOM 59 CA GLU A 523 32.718 26.826 43.155 1.00 20.86 C
+ATOM 60 C GLU A 523 32.995 28.282 43.575 1.00 20.93 C
+ATOM 61 O GLU A 523 32.429 28.775 44.549 1.00 20.13 O
+ATOM 62 CB GLU A 523 33.873 25.912 43.621 1.00 24.74 C
+ATOM 63 CG GLU A 523 33.507 24.407 43.599 1.00 32.08 C
+ATOM 64 CD GLU A 523 34.707 23.414 43.527 1.00 35.74 C
+ATOM 65 OE1 GLU A 523 35.852 23.761 43.957 1.00 38.51 O
+ATOM 66 OE2 GLU A 523 34.482 22.266 43.040 1.00 36.79 O
+ATOM 67 N ALA A 524 33.810 28.981 42.794 1.00 20.38 N
+ATOM 68 CA ALA A 524 34.166 30.364 43.086 1.00 20.61 C
+ATOM 69 C ALA A 524 32.939 31.280 43.078 1.00 20.43 C
+ATOM 70 O ALA A 524 32.920 32.354 43.707 1.00 21.31 O
+ATOM 71 CB ALA A 524 35.213 30.848 42.069 1.00 21.00 C
+ATOM 72 N ARG A 525 31.911 30.857 42.361 1.00 18.97 N
+ATOM 73 CA ARG A 525 30.701 31.641 42.259 1.00 18.39 C
+ATOM 74 C ARG A 525 29.567 31.127 43.152 1.00 17.82 C
+ATOM 75 O ARG A 525 28.486 31.697 43.136 1.00 18.38 O
+ATOM 76 CB ARG A 525 30.249 31.690 40.800 1.00 19.29 C
+ATOM 77 CG ARG A 525 31.317 32.203 39.823 1.00 21.17 C
+ATOM 78 CD ARG A 525 31.730 33.670 40.097 1.00 22.80 C
+ATOM 79 NE ARG A 525 30.630 34.606 39.879 1.00 25.15 N
+ATOM 80 CZ ARG A 525 30.277 35.123 38.699 1.00 26.64 C
+ATOM 81 NH1 ARG A 525 30.939 34.819 37.588 1.00 27.98 N
+ATOM 82 NH2 ARG A 525 29.212 35.914 38.623 1.00 27.62 N
+ATOM 83 N GLY A 526 29.815 30.071 43.932 1.00 17.65 N
+ATOM 84 CA GLY A 526 28.786 29.496 44.809 1.00 17.76 C
+ATOM 85 C GLY A 526 27.692 28.668 44.122 1.00 17.76 C
+ATOM 86 O GLY A 526 26.561 28.562 44.629 1.00 18.64 O
+ATOM 87 N ILE A 527 28.044 28.082 42.977 1.00 16.77 N
+ATOM 88 CA ILE A 527 27.163 27.268 42.111 1.00 16.84 C
+ATOM 89 C ILE A 527 27.736 25.832 42.085 1.00 15.99 C
+ATOM 90 O ILE A 527 28.970 25.640 42.148 1.00 17.08 O
+ATOM 91 CB ILE A 527 27.235 27.828 40.595 1.00 17.70 C
+ATOM 92 CG1 ILE A 527 26.668 29.250 40.491 1.00 19.09 C
+ATOM 93 CG2 ILE A 527 26.559 26.927 39.590 1.00 18.76 C
+ATOM 94 CD1 ILE A 527 25.392 29.465 41.200 1.00 19.73 C
+ATOM 95 N LYS A 528 26.858 24.832 42.063 1.00 13.16 N
+ATOM 96 CA LYS A 528 27.275 23.429 41.914 1.00 12.08 C
+ATOM 97 C LYS A 528 26.965 23.107 40.441 1.00 11.04 C
+ATOM 98 O LYS A 528 25.882 23.449 39.946 1.00 10.17 O
+ATOM 99 CB LYS A 528 26.446 22.489 42.803 1.00 14.13 C
+ATOM 100 CG LYS A 528 26.720 22.606 44.314 1.00 16.62 C
+ATOM 101 CD LYS A 528 28.184 22.310 44.610 1.00 18.95 C
+ATOM 102 CE LYS A 528 28.533 22.576 46.083 1.00 20.80 C
+ATOM 103 NZ LYS A 528 29.986 22.331 46.352 1.00 22.40 N
+ATOM 104 N ILE A 529 27.922 22.502 39.741 1.00 9.53 N
+ATOM 105 CA ILE A 529 27.746 22.147 38.339 1.00 8.79 C
+ATOM 106 C ILE A 529 27.829 20.640 38.243 1.00 8.34 C
+ATOM 107 O ILE A 529 28.763 20.039 38.759 1.00 9.37 O
+ATOM 108 CB ILE A 529 28.764 22.903 37.420 1.00 8.92 C
+ATOM 109 CG1 ILE A 529 28.477 22.605 35.948 1.00 10.81 C
+ATOM 110 CG2 ILE A 529 30.192 22.593 37.789 1.00 10.32 C
+ATOM 111 CD1 ILE A 529 28.954 23.747 34.990 1.00 10.65 C
+ATOM 112 N GLY A 530 26.832 20.017 37.624 1.00 7.55 N
+ATOM 113 CA GLY A 530 26.842 18.575 37.593 1.00 7.77 C
+ATOM 114 C GLY A 530 26.306 17.919 36.347 1.00 8.70 C
+ATOM 115 O GLY A 530 25.993 18.600 35.347 1.00 8.22 O
+ATOM 116 N THR A 531 26.199 16.591 36.408 1.00 7.71 N
+ATOM 117 CA THR A 531 25.701 15.803 35.293 1.00 7.60 C
+ATOM 118 C THR A 531 25.117 14.481 35.807 1.00 8.27 C
+ATOM 119 O THR A 531 25.453 14.039 36.921 1.00 7.43 O
+ATOM 120 CB THR A 531 26.891 15.442 34.308 1.00 8.06 C
+ATOM 121 OG1 THR A 531 26.428 14.629 33.211 1.00 8.12 O
+ATOM 122 CG2 THR A 531 28.020 14.705 35.058 1.00 8.56 C
+ATOM 123 N CYS A 532 24.221 13.880 35.022 1.00 8.23 N
+ATOM 124 CA CYS A 532 23.762 12.537 35.353 1.00 8.73 C
+ATOM 125 C CYS A 532 24.913 11.621 34.905 1.00 10.18 C
+ATOM 126 O CYS A 532 25.752 11.977 34.032 1.00 9.35 O
+ATOM 127 CB CYS A 532 22.480 12.149 34.632 1.00 10.51 C
+ATOM 128 SG CYS A 532 22.666 11.919 32.869 1.00 13.95 S
+ATOM 129 N VAL A 533 25.010 10.461 35.547 1.00 9.17 N
+ATOM 130 CA VAL A 533 26.080 9.512 35.258 1.00 9.39 C
+ATOM 131 C VAL A 533 25.530 8.375 34.410 1.00 10.48 C
+ATOM 132 O VAL A 533 24.571 7.708 34.807 1.00 11.48 O
+ATOM 133 CB VAL A 533 26.668 9.022 36.593 1.00 10.22 C
+ATOM 134 CG1 VAL A 533 27.668 7.870 36.385 1.00 10.75 C
+ATOM 135 CG2 VAL A 533 27.340 10.205 37.316 1.00 10.21 C
+ATOM 136 N ASN A 534 26.061 8.234 33.198 1.00 10.57 N
+ATOM 137 CA ASN A 534 25.600 7.214 32.239 1.00 11.85 C
+ATOM 138 C ASN A 534 26.157 5.835 32.584 1.00 12.89 C
+ATOM 139 O ASN A 534 27.197 5.714 33.260 1.00 12.77 O
+ATOM 140 CB ASN A 534 25.942 7.627 30.776 1.00 11.73 C
+ATOM 141 CG ASN A 534 25.416 9.039 30.425 1.00 11.50 C
+ATOM 142 OD1 ASN A 534 24.198 9.256 30.321 1.00 13.65 O
+ATOM 143 ND2 ASN A 534 26.317 10.010 30.361 1.00 9.07 N
+ATOM 144 N TYR A 535 25.544 4.808 32.020 1.00 14.86 N
+ATOM 145 CA TYR A 535 25.946 3.450 32.338 1.00 17.34 C
+ATOM 146 C TYR A 535 27.413 2.986 32.289 1.00 17.31 C
+ATOM 147 O TYR A 535 27.845 2.227 33.169 1.00 16.66 O
+ATOM 148 CB TYR A 535 25.039 2.424 31.658 1.00 22.46 C
+ATOM 149 CG TYR A 535 25.159 1.083 32.366 1.00 27.41 C
+ATOM 150 CD1 TYR A 535 24.839 0.963 33.729 1.00 28.84 C
+ATOM 151 CD2 TYR A 535 25.721 -0.023 31.721 1.00 30.41 C
+ATOM 152 CE1 TYR A 535 25.092 -0.212 34.425 1.00 31.23 C
+ATOM 153 CE2 TYR A 535 25.974 -1.220 32.416 1.00 32.19 C
+ATOM 154 CZ TYR A 535 25.654 -1.302 33.772 1.00 32.33 C
+ATOM 155 OH TYR A 535 25.872 -2.491 34.453 1.00 34.01 O
+ATOM 156 N PRO A 536 28.210 3.450 31.307 1.00 16.94 N
+ATOM 157 CA PRO A 536 29.611 3.020 31.238 1.00 16.86 C
+ATOM 158 C PRO A 536 30.393 3.246 32.508 1.00 16.28 C
+ATOM 159 O PRO A 536 31.401 2.592 32.724 1.00 16.65 O
+ATOM 160 CB PRO A 536 30.171 3.865 30.092 1.00 18.10 C
+ATOM 161 CG PRO A 536 28.981 3.989 29.178 1.00 18.10 C
+ATOM 162 CD PRO A 536 27.894 4.346 30.178 1.00 17.57 C
+ATOM 163 N PHE A 537 29.973 4.202 33.330 1.00 15.77 N
+ATOM 164 CA PHE A 537 30.667 4.473 34.593 1.00 15.60 C
+ATOM 165 C PHE A 537 30.785 3.211 35.456 1.00 17.03 C
+ATOM 166 O PHE A 537 31.860 2.888 35.955 1.00 17.37 O
+ATOM 167 CB PHE A 537 29.919 5.546 35.402 1.00 14.84 C
+ATOM 168 CG PHE A 537 30.336 5.630 36.854 1.00 15.54 C
+ATOM 169 CD1 PHE A 537 31.464 6.345 37.235 1.00 15.77 C
+ATOM 170 CD2 PHE A 537 29.592 4.979 37.851 1.00 16.19 C
+ATOM 171 CE1 PHE A 537 31.849 6.415 38.594 1.00 16.61 C
+ATOM 172 CE2 PHE A 537 29.971 5.038 39.219 1.00 16.26 C
+ATOM 173 CZ PHE A 537 31.092 5.754 39.588 1.00 16.41 C
+ATOM 174 N TYR A 538 29.680 2.496 35.587 1.00 17.95 N
+ATOM 175 CA TYR A 538 29.633 1.314 36.426 1.00 21.33 C
+ATOM 176 C TYR A 538 30.512 0.138 36.019 1.00 25.76 C
+ATOM 177 O TYR A 538 31.203 -0.436 36.869 1.00 28.22 O
+ATOM 178 CB TYR A 538 28.191 0.879 36.606 1.00 17.95 C
+ATOM 179 CG TYR A 538 27.377 1.952 37.275 1.00 16.62 C
+ATOM 180 CD1 TYR A 538 27.425 2.128 38.667 1.00 15.56 C
+ATOM 181 CD2 TYR A 538 26.607 2.830 36.521 1.00 16.28 C
+ATOM 182 CE1 TYR A 538 26.734 3.152 39.283 1.00 15.35 C
+ATOM 183 CE2 TYR A 538 25.913 3.858 37.124 1.00 15.96 C
+ATOM 184 CZ TYR A 538 25.979 4.015 38.513 1.00 15.58 C
+ATOM 185 OH TYR A 538 25.276 5.041 39.101 1.00 16.96 O
+ATOM 186 N ASN A 539 30.517 -0.218 34.741 1.00 29.62 N
+ATOM 187 CA ASN A 539 31.343 -1.340 34.323 1.00 33.13 C
+ATOM 188 C ASN A 539 32.742 -0.968 33.816 1.00 34.74 C
+ATOM 189 O ASN A 539 33.485 -1.836 33.344 1.00 35.85 O
+ATOM 190 CB ASN A 539 30.602 -2.215 33.319 1.00 34.61 C
+ATOM 191 CG ASN A 539 30.452 -1.566 31.967 1.00 35.75 C
+ATOM 192 OD1 ASN A 539 31.045 -0.521 31.694 1.00 36.15 O
+ATOM 193 ND2 ASN A 539 29.657 -2.190 31.099 1.00 36.19 N
+ATOM 194 N ASN A 540 33.102 0.312 33.916 1.00 35.84 N
+ATOM 195 CA ASN A 540 34.428 0.798 33.502 1.00 37.55 C
+ATOM 196 C ASN A 540 34.806 0.597 32.037 1.00 36.41 C
+ATOM 197 O ASN A 540 35.994 0.528 31.695 1.00 36.29 O
+ATOM 198 CB ASN A 540 35.511 0.171 34.374 1.00 40.91 C
+ATOM 199 CG ASN A 540 35.365 0.552 35.825 1.00 44.11 C
+ATOM 200 OD1 ASN A 540 35.737 1.671 36.230 1.00 45.52 O
+ATOM 201 ND2 ASN A 540 34.790 -0.362 36.629 1.00 45.76 N
+ATOM 202 N SER A 541 33.802 0.550 31.171 1.00 34.36 N
+ATOM 203 CA SER A 541 34.030 0.351 29.754 1.00 31.80 C
+ATOM 204 C SER A 541 34.543 1.595 29.027 1.00 29.83 C
+ATOM 205 O SER A 541 34.963 1.496 27.870 1.00 30.50 O
+ATOM 206 CB SER A 541 32.739 -0.130 29.077 1.00 33.07 C
+ATOM 207 OG SER A 541 31.694 0.833 29.179 1.00 34.29 O
+ATOM 208 N ASP A 542 34.488 2.762 29.668 1.00 26.01 N
+ATOM 209 CA ASP A 542 34.931 3.991 29.015 1.00 23.12 C
+ATOM 210 C ASP A 542 35.764 4.833 29.994 1.00 22.05 C
+ATOM 211 O ASP A 542 35.234 5.671 30.724 1.00 20.76 O
+ATOM 212 CB ASP A 542 33.693 4.752 28.470 1.00 21.88 C
+ATOM 213 CG ASP A 542 34.040 5.793 27.416 1.00 20.64 C
+ATOM 214 OD1 ASP A 542 35.203 6.238 27.350 1.00 21.37 O
+ATOM 215 OD2 ASP A 542 33.132 6.203 26.659 1.00 19.67 O
+ATOM 216 N PRO A 543 37.096 4.580 30.043 1.00 22.07 N
+ATOM 217 CA PRO A 543 38.045 5.286 30.922 1.00 20.53 C
+ATOM 218 C PRO A 543 38.063 6.795 30.726 1.00 19.04 C
+ATOM 219 O PRO A 543 38.220 7.541 31.696 1.00 18.90 O
+ATOM 220 CB PRO A 543 39.403 4.677 30.541 1.00 21.59 C
+ATOM 221 CG PRO A 543 39.064 3.311 30.059 1.00 22.37 C
+ATOM 222 CD PRO A 543 37.797 3.543 29.253 1.00 22.48 C
+ATOM 223 N THR A 544 37.932 7.244 29.475 1.00 16.88 N
+ATOM 224 CA THR A 544 37.937 8.680 29.187 1.00 16.62 C
+ATOM 225 C THR A 544 36.699 9.327 29.839 1.00 14.37 C
+ATOM 226 O THR A 544 36.789 10.421 30.394 1.00 13.61 O
+ATOM 227 CB THR A 544 37.933 8.970 27.657 1.00 16.62 C
+ATOM 228 OG1 THR A 544 39.048 8.320 27.045 1.00 18.82 O
+ATOM 229 CG2 THR A 544 38.037 10.438 27.393 1.00 16.77 C
+ATOM 230 N TYR A 545 35.560 8.631 29.778 1.00 13.73 N
+ATOM 231 CA TYR A 545 34.316 9.135 30.392 1.00 12.39 C
+ATOM 232 C TYR A 545 34.578 9.414 31.874 1.00 12.05 C
+ATOM 233 O TYR A 545 34.347 10.531 32.366 1.00 11.61 O
+ATOM 234 CB TYR A 545 33.191 8.097 30.257 1.00 11.92 C
+ATOM 235 CG TYR A 545 31.861 8.538 30.805 1.00 11.56 C
+ATOM 236 CD1 TYR A 545 31.536 8.341 32.146 1.00 12.07 C
+ATOM 237 CD2 TYR A 545 30.932 9.177 29.997 1.00 11.46 C
+ATOM 238 CE1 TYR A 545 30.333 8.771 32.649 1.00 11.58 C
+ATOM 239 CE2 TYR A 545 29.733 9.607 30.494 1.00 10.57 C
+ATOM 240 CZ TYR A 545 29.441 9.402 31.828 1.00 10.93 C
+ATOM 241 OH TYR A 545 28.249 9.887 32.338 1.00 11.97 O
+ATOM 242 N ASN A 546 35.089 8.397 32.571 1.00 13.21 N
+ATOM 243 CA ASN A 546 35.370 8.505 34.004 1.00 14.05 C
+ATOM 244 C ASN A 546 36.404 9.572 34.355 1.00 13.17 C
+ATOM 245 O ASN A 546 36.268 10.254 35.376 1.00 12.33 O
+ATOM 246 CB ASN A 546 35.799 7.146 34.568 1.00 15.55 C
+ATOM 247 CG ASN A 546 34.674 6.126 34.556 1.00 17.40 C
+ATOM 248 OD1 ASN A 546 33.706 6.261 33.818 1.00 19.28 O
+ATOM 249 ND2 ASN A 546 34.798 5.097 35.381 1.00 19.39 N
+ATOM 250 N SER A 547 37.412 9.757 33.507 1.00 13.12 N
+ATOM 251 CA SER A 547 38.427 10.757 33.806 1.00 14.48 C
+ATOM 252 C SER A 547 37.903 12.207 33.694 1.00 13.07 C
+ATOM 253 O SER A 547 38.269 13.073 34.488 1.00 14.04 O
+ATOM 254 CB SER A 547 39.680 10.528 32.979 1.00 16.98 C
+ATOM 255 OG SER A 547 39.406 10.728 31.622 1.00 23.00 O
+ATOM 256 N ILE A 548 37.018 12.464 32.732 1.00 12.03 N
+ATOM 257 CA ILE A 548 36.437 13.801 32.611 1.00 11.90 C
+ATOM 258 C ILE A 548 35.424 14.000 33.755 1.00 10.12 C
+ATOM 259 O ILE A 548 35.368 15.070 34.354 1.00 9.55 O
+ATOM 260 CB ILE A 548 35.740 14.013 31.228 1.00 13.31 C
+ATOM 261 CG1 ILE A 548 36.811 14.026 30.132 1.00 14.52 C
+ATOM 262 CG2 ILE A 548 34.891 15.310 31.215 1.00 12.01 C
+ATOM 263 CD1 ILE A 548 36.241 13.934 28.751 1.00 17.19 C
+ATOM 264 N LEU A 549 34.614 12.973 34.025 1.00 10.09 N
+ATOM 265 CA LEU A 549 33.611 13.030 35.100 1.00 10.02 C
+ATOM 266 C LEU A 549 34.207 13.450 36.454 1.00 10.24 C
+ATOM 267 O LEU A 549 33.718 14.398 37.071 1.00 10.79 O
+ATOM 268 CB LEU A 549 32.871 11.684 35.239 1.00 10.01 C
+ATOM 269 CG LEU A 549 31.792 11.590 36.336 1.00 10.66 C
+ATOM 270 CD1 LEU A 549 30.634 12.512 36.049 1.00 11.62 C
+ATOM 271 CD2 LEU A 549 31.319 10.172 36.478 1.00 11.31 C
+ATOM 272 N GLN A 550 35.270 12.773 36.892 1.00 10.53 N
+ATOM 273 CA GLN A 550 35.891 13.086 38.199 1.00 12.97 C
+ATOM 274 C GLN A 550 36.646 14.442 38.266 1.00 12.79 C
+ATOM 275 O GLN A 550 36.896 14.981 39.351 1.00 14.16 O
+ATOM 276 CB GLN A 550 36.828 11.933 38.655 1.00 13.64 C
+ATOM 277 CG GLN A 550 38.002 11.671 37.690 1.00 14.91 C
+ATOM 278 CD GLN A 550 38.912 10.491 38.067 1.00 15.57 C
+ATOM 279 OE1 GLN A 550 40.030 10.389 37.562 1.00 16.54 O
+ATOM 280 NE2 GLN A 550 38.413 9.576 38.871 1.00 13.98 N
+ATOM 281 N ARG A 551 36.967 14.994 37.097 1.00 12.31 N
+ATOM 282 CA ARG A 551 37.710 16.247 36.999 1.00 12.09 C
+ATOM 283 C ARG A 551 36.885 17.548 36.907 1.00 10.73 C
+ATOM 284 O ARG A 551 37.173 18.522 37.583 1.00 11.07 O
+ATOM 285 CB ARG A 551 38.628 16.157 35.768 1.00 13.98 C
+ATOM 286 CG ARG A 551 39.639 17.262 35.656 1.00 17.53 C
+ATOM 287 CD ARG A 551 40.464 17.120 34.362 1.00 19.06 C
+ATOM 288 NE ARG A 551 39.697 17.540 33.184 1.00 20.88 N
+ATOM 289 CZ ARG A 551 39.705 16.902 32.017 1.00 21.80 C
+ATOM 290 NH1 ARG A 551 40.437 15.805 31.864 1.00 21.59 N
+ATOM 291 NH2 ARG A 551 38.974 17.359 31.002 1.00 22.47 N
+ATOM 292 N GLU A 552 35.838 17.539 36.090 1.00 9.49 N
+ATOM 293 CA GLU A 552 35.075 18.748 35.807 1.00 9.31 C
+ATOM 294 C GLU A 552 33.845 19.080 36.637 1.00 8.60 C
+ATOM 295 O GLU A 552 33.454 20.230 36.697 1.00 9.32 O
+ATOM 296 CB GLU A 552 34.624 18.710 34.326 1.00 9.93 C
+ATOM 297 CG GLU A 552 35.727 18.576 33.262 1.00 11.83 C
+ATOM 298 CD GLU A 552 36.499 19.865 33.040 1.00 12.44 C
+ATOM 299 OE1 GLU A 552 36.002 20.950 33.359 1.00 12.96 O
+ATOM 300 OE2 GLU A 552 37.630 19.793 32.551 1.00 16.81 O
+ATOM 301 N PHE A 553 33.242 18.088 37.283 1.00 8.90 N
+ATOM 302 CA PHE A 553 31.979 18.320 37.974 1.00 8.57 C
+ATOM 303 C PHE A 553 32.023 18.289 39.476 1.00 8.77 C
+ATOM 304 O PHE A 553 32.858 17.590 40.060 1.00 10.39 O
+ATOM 305 CB PHE A 553 30.937 17.325 37.448 1.00 9.45 C
+ATOM 306 CG PHE A 553 30.752 17.397 35.954 1.00 10.03 C
+ATOM 307 CD1 PHE A 553 30.083 18.485 35.380 1.00 11.05 C
+ATOM 308 CD2 PHE A 553 31.328 16.441 35.109 1.00 10.75 C
+ATOM 309 CE1 PHE A 553 30.002 18.619 33.953 1.00 12.27 C
+ATOM 310 CE2 PHE A 553 31.250 16.570 33.697 1.00 10.90 C
+ATOM 311 CZ PHE A 553 30.590 17.655 33.137 1.00 10.88 C
+ATOM 312 N SER A 554 31.130 19.050 40.105 1.00 8.54 N
+ATOM 313 CA SER A 554 31.039 19.070 41.570 1.00 9.08 C
+ATOM 314 C SER A 554 29.733 18.417 42.085 1.00 8.65 C
+ATOM 315 O SER A 554 29.484 18.395 43.285 1.00 9.71 O
+ATOM 316 CB SER A 554 31.189 20.489 42.106 1.00 9.55 C
+ATOM 317 OG SER A 554 30.243 21.362 41.524 1.00 10.33 O
+ATOM 318 N MET A 555 28.932 17.853 41.181 1.00 8.52 N
+ATOM 319 CA MET A 555 27.663 17.207 41.528 1.00 8.20 C
+ATOM 320 C MET A 555 27.328 16.086 40.506 1.00 9.98 C
+ATOM 321 O MET A 555 27.616 16.202 39.303 1.00 9.39 O
+ATOM 322 CB MET A 555 26.541 18.271 41.580 1.00 8.93 C
+ATOM 323 CG MET A 555 25.157 17.749 41.903 1.00 10.17 C
+ATOM 324 SD MET A 555 23.988 19.061 42.174 1.00 12.03 S
+ATOM 325 CE MET A 555 24.160 19.365 43.943 1.00 11.88 C
+ATOM 326 N VAL A 556 26.771 14.975 41.002 1.00 8.37 N
+ATOM 327 CA VAL A 556 26.363 13.847 40.160 1.00 8.94 C
+ATOM 328 C VAL A 556 24.917 13.399 40.532 1.00 9.51 C
+ATOM 329 O VAL A 556 24.407 13.709 41.636 1.00 8.72 O
+ATOM 330 CB VAL A 556 27.335 12.615 40.253 1.00 9.90 C
+ATOM 331 CG1 VAL A 556 28.651 12.901 39.530 1.00 11.18 C
+ATOM 332 CG2 VAL A 556 27.584 12.188 41.741 1.00 9.70 C
+ATOM 333 N VAL A 557 24.247 12.754 39.576 1.00 8.11 N
+ATOM 334 CA VAL A 557 22.883 12.262 39.750 1.00 9.04 C
+ATOM 335 C VAL A 557 22.835 10.937 38.996 1.00 8.99 C
+ATOM 336 O VAL A 557 23.484 10.787 37.965 1.00 9.56 O
+ATOM 337 CB VAL A 557 21.822 13.227 39.094 1.00 10.16 C
+ATOM 338 CG1 VAL A 557 20.390 12.873 39.539 1.00 10.54 C
+ATOM 339 CG2 VAL A 557 22.111 14.637 39.425 1.00 13.14 C
+ATOM 340 N CYS A 558 22.082 9.968 39.514 1.00 9.81 N
+ATOM 341 CA CYS A 558 21.909 8.666 38.868 1.00 12.43 C
+ATOM 342 C CYS A 558 20.946 8.793 37.693 1.00 12.01 C
+ATOM 343 O CYS A 558 19.841 9.283 37.855 1.00 12.77 O
+ATOM 344 CB CYS A 558 21.281 7.668 39.856 1.00 13.77 C
+ATOM 345 SG CYS A 558 22.436 6.991 41.064 1.00 18.71 S
+ATOM 346 N GLU A 559 21.329 8.326 36.517 1.00 12.71 N
+ATOM 347 CA GLU A 559 20.405 8.462 35.395 1.00 13.52 C
+ATOM 348 C GLU A 559 19.197 7.547 35.561 1.00 13.28 C
+ATOM 349 O GLU A 559 18.062 7.989 35.407 1.00 13.92 O
+ATOM 350 CB GLU A 559 21.107 8.152 34.069 1.00 14.74 C
+ATOM 351 CG GLU A 559 20.216 8.400 32.865 1.00 16.84 C
+ATOM 352 CD GLU A 559 20.884 8.073 31.529 1.00 19.09 C
+ATOM 353 OE1 GLU A 559 22.051 7.611 31.523 1.00 19.16 O
+ATOM 354 OE2 GLU A 559 20.229 8.295 30.478 1.00 21.50 O
+ATOM 355 N ASN A 560 19.445 6.292 35.930 1.00 12.97 N
+ATOM 356 CA ASN A 560 18.355 5.306 36.052 1.00 15.58 C
+ATOM 357 C ASN A 560 18.400 4.427 37.280 1.00 15.17 C
+ATOM 358 O ASN A 560 17.418 3.778 37.599 1.00 15.41 O
+ATOM 359 CB ASN A 560 18.425 4.317 34.883 1.00 17.86 C
+ATOM 360 CG ASN A 560 18.156 4.963 33.549 1.00 20.52 C
+ATOM 361 OD1 ASN A 560 17.068 5.493 33.305 1.00 23.03 O
+ATOM 362 ND2 ASN A 560 19.144 4.923 32.668 1.00 21.96 N
+ATOM 363 N GLU A 561 19.540 4.415 37.958 1.00 14.85 N
+ATOM 364 CA GLU A 561 19.774 3.522 39.081 1.00 14.96 C
+ATOM 365 C GLU A 561 19.067 3.784 40.417 1.00 15.00 C
+ATOM 366 O GLU A 561 19.187 2.967 41.354 1.00 14.61 O
+ATOM 367 CB GLU A 561 21.289 3.331 39.265 1.00 17.32 C
+ATOM 368 CG GLU A 561 21.986 2.667 38.070 1.00 18.89 C
+ATOM 369 CD GLU A 561 22.133 3.572 36.816 1.00 20.84 C
+ATOM 370 OE1 GLU A 561 21.933 4.827 36.888 1.00 20.56 O
+ATOM 371 OE2 GLU A 561 22.467 3.007 35.742 1.00 22.23 O
+ATOM 372 N MET A 562 18.416 4.937 40.554 1.00 12.29 N
+ATOM 373 CA MET A 562 17.674 5.220 41.773 1.00 12.08 C
+ATOM 374 C MET A 562 16.182 5.404 41.518 1.00 11.74 C
+ATOM 375 O MET A 562 15.473 6.007 42.332 1.00 12.97 O
+ATOM 376 CB MET A 562 18.286 6.356 42.593 1.00 13.30 C
+ATOM 377 CG MET A 562 19.599 5.949 43.212 1.00 15.93 C
+ATOM 378 SD MET A 562 20.297 7.204 44.328 1.00 19.08 S
+ATOM 379 CE MET A 562 19.130 7.075 45.652 1.00 19.63 C
+ATOM 380 N LYS A 563 15.718 4.910 40.367 1.00 10.88 N
+ATOM 381 CA LYS A 563 14.290 4.930 40.041 1.00 12.47 C
+ATOM 382 C LYS A 563 13.635 3.736 40.799 1.00 12.55 C
+ATOM 383 O LYS A 563 14.332 2.804 41.194 1.00 11.94 O
+ATOM 384 CB LYS A 563 14.072 4.843 38.523 1.00 15.12 C
+ATOM 385 CG LYS A 563 14.261 6.203 37.872 1.00 17.16 C
+ATOM 386 CD LYS A 563 14.413 6.088 36.382 1.00 19.34 C
+ATOM 387 CE LYS A 563 14.874 7.463 35.843 1.00 20.42 C
+ATOM 388 NZ LYS A 563 15.271 7.408 34.412 1.00 21.61 N
+ATOM 389 N PHE A 564 12.320 3.768 40.989 1.00 12.42 N
+ATOM 390 CA PHE A 564 11.590 2.731 41.772 1.00 12.98 C
+ATOM 391 C PHE A 564 11.858 1.266 41.385 1.00 13.21 C
+ATOM 392 O PHE A 564 12.119 0.429 42.264 1.00 12.63 O
+ATOM 393 CB PHE A 564 10.099 3.043 41.741 1.00 12.27 C
+ATOM 394 CG PHE A 564 9.322 2.526 42.922 1.00 12.49 C
+ATOM 395 CD1 PHE A 564 9.065 1.154 43.070 1.00 13.09 C
+ATOM 396 CD2 PHE A 564 8.727 3.421 43.816 1.00 12.05 C
+ATOM 397 CE1 PHE A 564 8.205 0.694 44.097 1.00 12.00 C
+ATOM 398 CE2 PHE A 564 7.874 2.962 44.838 1.00 12.16 C
+ATOM 399 CZ PHE A 564 7.621 1.600 44.964 1.00 11.41 C
+ATOM 400 N ASP A 565 11.848 0.971 40.092 1.00 13.79 N
+ATOM 401 CA ASP A 565 12.104 -0.389 39.618 1.00 16.20 C
+ATOM 402 C ASP A 565 13.513 -0.883 39.912 1.00 14.58 C
+ATOM 403 O ASP A 565 13.713 -2.071 40.112 1.00 16.53 O
+ATOM 404 CB ASP A 565 11.759 -0.556 38.119 1.00 18.42 C
+ATOM 405 CG ASP A 565 12.691 0.232 37.166 1.00 21.03 C
+ATOM 406 OD1 ASP A 565 13.301 1.279 37.510 1.00 21.94 O
+ATOM 407 OD2 ASP A 565 12.773 -0.193 36.004 1.00 24.30 O
+ATOM 408 N ALA A 566 14.486 0.023 39.952 1.00 13.35 N
+ATOM 409 CA ALA A 566 15.872 -0.340 40.221 1.00 12.37 C
+ATOM 410 C ALA A 566 16.132 -0.557 41.704 1.00 11.90 C
+ATOM 411 O ALA A 566 16.885 -1.460 42.086 1.00 12.98 O
+ATOM 412 CB ALA A 566 16.823 0.737 39.684 1.00 13.87 C
+ATOM 413 N LEU A 567 15.549 0.302 42.525 1.00 10.41 N
+ATOM 414 CA LEU A 567 15.731 0.238 43.971 1.00 10.75 C
+ATOM 415 C LEU A 567 14.910 -0.831 44.701 1.00 10.05 C
+ATOM 416 O LEU A 567 15.370 -1.365 45.702 1.00 9.00 O
+ATOM 417 CB LEU A 567 15.460 1.611 44.615 1.00 11.83 C
+ATOM 418 CG LEU A 567 16.651 2.576 44.639 1.00 13.21 C
+ATOM 419 CD1 LEU A 567 16.195 3.948 45.141 1.00 13.06 C
+ATOM 420 CD2 LEU A 567 17.759 2.009 45.534 1.00 14.86 C
+ATOM 421 N GLN A 568 13.682 -1.083 44.251 1.00 9.16 N
+ATOM 422 CA GLN A 568 12.821 -2.086 44.902 1.00 9.03 C
+ATOM 423 C GLN A 568 12.257 -2.995 43.804 1.00 9.11 C
+ATOM 424 O GLN A 568 11.068 -2.958 43.506 1.00 9.32 O
+ATOM 425 CB GLN A 568 11.698 -1.388 45.681 1.00 9.34 C
+ATOM 426 CG GLN A 568 11.042 -2.344 46.681 1.00 9.49 C
+ATOM 427 CD GLN A 568 9.925 -1.770 47.515 1.00 9.83 C
+ATOM 428 OE1 GLN A 568 9.678 -0.549 47.579 1.00 10.82 O
+ATOM 429 NE2 GLN A 568 9.243 -2.664 48.199 1.00 7.54 N
+ATOM 430 N PRO A 569 13.110 -3.869 43.229 1.00 9.77 N
+ATOM 431 CA PRO A 569 12.740 -4.788 42.150 1.00 10.77 C
+ATOM 432 C PRO A 569 11.710 -5.848 42.482 1.00 11.54 C
+ATOM 433 O PRO A 569 11.013 -6.334 41.604 1.00 12.27 O
+ATOM 434 CB PRO A 569 14.089 -5.378 41.720 1.00 11.53 C
+ATOM 435 CG PRO A 569 14.891 -5.362 42.988 1.00 11.37 C
+ATOM 436 CD PRO A 569 14.536 -4.029 43.588 1.00 10.78 C
+ATOM 437 N ARG A 570 11.645 -6.231 43.751 1.00 12.37 N
+ATOM 438 CA ARG A 570 10.665 -7.217 44.243 1.00 12.40 C
+ATOM 439 C ARG A 570 10.108 -6.578 45.493 1.00 11.70 C
+ATOM 440 O ARG A 570 10.791 -5.753 46.109 1.00 11.68 O
+ATOM 441 CB ARG A 570 11.335 -8.558 44.581 1.00 15.41 C
+ATOM 442 CG ARG A 570 11.819 -9.291 43.327 1.00 19.94 C
+ATOM 443 CD ARG A 570 12.279 -10.747 43.584 1.00 23.04 C
+ATOM 444 NE ARG A 570 13.616 -10.839 44.185 1.00 25.11 N
+ATOM 445 CZ ARG A 570 13.853 -11.332 45.401 1.00 26.45 C
+ATOM 446 NH1 ARG A 570 12.834 -11.768 46.145 1.00 27.52 N
+ATOM 447 NH2 ARG A 570 15.101 -11.382 45.869 1.00 25.90 N
+ATOM 448 N GLN A 571 8.897 -6.930 45.899 1.00 12.35 N
+ATOM 449 CA GLN A 571 8.314 -6.292 47.075 1.00 12.44 C
+ATOM 450 C GLN A 571 9.161 -6.529 48.336 1.00 12.10 C
+ATOM 451 O GLN A 571 9.433 -7.664 48.726 1.00 11.73 O
+ATOM 452 CB GLN A 571 6.857 -6.701 47.289 1.00 14.56 C
+ATOM 453 CG GLN A 571 6.202 -5.788 48.306 1.00 18.17 C
+ATOM 454 CD GLN A 571 4.692 -5.861 48.362 1.00 21.29 C
+ATOM 455 OE1 GLN A 571 4.060 -5.116 49.132 1.00 24.04 O
+ATOM 456 NE2 GLN A 571 4.096 -6.733 47.552 1.00 21.88 N
+ATOM 457 N ASN A 572 9.522 -5.426 48.979 1.00 11.04 N
+ATOM 458 CA ASN A 572 10.381 -5.393 50.160 1.00 12.42 C
+ATOM 459 C ASN A 572 11.790 -5.899 50.036 1.00 11.15 C
+ATOM 460 O ASN A 572 12.384 -6.311 51.033 1.00 11.60 O
+ATOM 461 CB ASN A 572 9.737 -5.964 51.407 1.00 15.04 C
+ATOM 462 CG ASN A 572 9.221 -4.894 52.268 1.00 18.98 C
+ATOM 463 OD1 ASN A 572 9.995 -4.059 52.850 1.00 19.98 O
+ATOM 464 ND2 ASN A 572 7.911 -4.742 52.212 1.00 20.80 N
+ATOM 465 N VAL A 573 12.309 -5.873 48.813 1.00 9.96 N
+ATOM 466 CA VAL A 573 13.685 -6.252 48.509 1.00 10.18 C
+ATOM 467 C VAL A 573 14.304 -4.970 47.904 1.00 11.30 C
+ATOM 468 O VAL A 573 13.812 -4.470 46.875 1.00 11.52 O
+ATOM 469 CB VAL A 573 13.745 -7.391 47.506 1.00 10.03 C
+ATOM 470 CG1 VAL A 573 15.175 -7.687 47.151 1.00 10.66 C
+ATOM 471 CG2 VAL A 573 13.023 -8.657 48.098 1.00 9.74 C
+ATOM 472 N PHE A 574 15.340 -4.434 48.553 1.00 9.70 N
+ATOM 473 CA PHE A 574 15.965 -3.163 48.128 1.00 9.11 C
+ATOM 474 C PHE A 574 17.352 -3.410 47.617 1.00 9.74 C
+ATOM 475 O PHE A 574 18.152 -4.098 48.268 1.00 11.03 O
+ATOM 476 CB PHE A 574 15.989 -2.161 49.302 1.00 8.51 C
+ATOM 477 CG PHE A 574 14.613 -1.678 49.710 1.00 9.17 C
+ATOM 478 CD1 PHE A 574 13.824 -2.414 50.605 1.00 9.18 C
+ATOM 479 CD2 PHE A 574 14.054 -0.524 49.143 1.00 9.56 C
+ATOM 480 CE1 PHE A 574 12.506 -2.021 50.922 1.00 8.61 C
+ATOM 481 CE2 PHE A 574 12.729 -0.132 49.466 1.00 10.00 C
+ATOM 482 CZ PHE A 574 11.961 -0.897 50.358 1.00 9.53 C
+ATOM 483 N ASP A 575 17.660 -2.855 46.457 1.00 8.49 N
+ATOM 484 CA ASP A 575 18.969 -3.048 45.884 1.00 8.62 C
+ATOM 485 C ASP A 575 19.692 -1.703 45.888 1.00 9.81 C
+ATOM 486 O ASP A 575 19.393 -0.837 45.040 1.00 10.34 O
+ATOM 487 CB ASP A 575 18.822 -3.593 44.471 1.00 9.82 C
+ATOM 488 CG ASP A 575 20.161 -3.860 43.795 1.00 11.13 C
+ATOM 489 OD1 ASP A 575 21.230 -3.431 44.288 1.00 11.30 O
+ATOM 490 OD2 ASP A 575 20.149 -4.529 42.744 1.00 14.44 O
+ATOM 491 N PHE A 576 20.655 -1.531 46.805 1.00 8.48 N
+ATOM 492 CA PHE A 576 21.387 -0.274 46.921 1.00 8.30 C
+ATOM 493 C PHE A 576 22.769 -0.330 46.258 1.00 9.49 C
+ATOM 494 O PHE A 576 23.550 0.625 46.382 1.00 10.33 O
+ATOM 495 CB PHE A 576 21.615 0.064 48.405 1.00 8.54 C
+ATOM 496 CG PHE A 576 20.352 0.324 49.200 1.00 10.29 C
+ATOM 497 CD1 PHE A 576 19.448 1.314 48.813 1.00 10.53 C
+ATOM 498 CD2 PHE A 576 20.077 -0.416 50.362 1.00 10.46 C
+ATOM 499 CE1 PHE A 576 18.284 1.570 49.558 1.00 12.42 C
+ATOM 500 CE2 PHE A 576 18.907 -0.164 51.121 1.00 11.16 C
+ATOM 501 CZ PHE A 576 18.011 0.830 50.717 1.00 11.25 C
+ATOM 502 N SER A 577 23.093 -1.429 45.588 1.00 9.04 N
+ATOM 503 CA SER A 577 24.419 -1.578 45.042 1.00 10.38 C
+ATOM 504 C SER A 577 24.963 -0.440 44.168 1.00 10.38 C
+ATOM 505 O SER A 577 26.034 0.098 44.459 1.00 11.09 O
+ATOM 506 CB SER A 577 24.581 -2.925 44.347 1.00 11.36 C
+ATOM 507 OG SER A 577 23.678 -3.038 43.273 1.00 15.81 O
+ATOM 508 N LYS A 578 24.228 -0.074 43.115 1.00 11.96 N
+ATOM 509 CA LYS A 578 24.687 0.990 42.200 1.00 11.14 C
+ATOM 510 C LYS A 578 24.701 2.375 42.810 1.00 10.31 C
+ATOM 511 O LYS A 578 25.673 3.116 42.661 1.00 11.06 O
+ATOM 512 CB LYS A 578 23.902 0.935 40.892 1.00 11.44 C
+ATOM 513 CG LYS A 578 24.284 -0.299 40.108 1.00 13.23 C
+ATOM 514 CD LYS A 578 23.758 -0.276 38.712 1.00 15.30 C
+ATOM 515 CE LYS A 578 24.309 -1.457 37.954 1.00 17.76 C
+ATOM 516 NZ LYS A 578 23.869 -1.409 36.526 1.00 19.51 N
+ATOM 517 N GLY A 579 23.674 2.686 43.587 1.00 10.04 N
+ATOM 518 CA GLY A 579 23.612 3.973 44.240 1.00 10.33 C
+ATOM 519 C GLY A 579 24.736 4.141 45.244 1.00 9.65 C
+ATOM 520 O GLY A 579 25.304 5.220 45.337 1.00 11.01 O
+ATOM 521 N ASP A 580 25.085 3.085 45.986 1.00 10.04 N
+ATOM 522 CA ASP A 580 26.172 3.174 46.983 1.00 10.22 C
+ATOM 523 C ASP A 580 27.527 3.295 46.300 1.00 9.18 C
+ATOM 524 O ASP A 580 28.437 3.909 46.841 1.00 10.73 O
+ATOM 525 CB ASP A 580 26.168 1.976 47.972 1.00 12.50 C
+ATOM 526 CG ASP A 580 25.057 2.072 49.055 1.00 14.21 C
+ATOM 527 OD1 ASP A 580 24.188 2.955 49.004 1.00 13.52 O
+ATOM 528 OD2 ASP A 580 25.049 1.221 49.972 1.00 15.49 O
+ATOM 529 N GLN A 581 27.665 2.652 45.146 1.00 9.92 N
+ATOM 530 CA GLN A 581 28.883 2.735 44.350 1.00 11.72 C
+ATOM 531 C GLN A 581 29.065 4.198 43.854 1.00 11.64 C
+ATOM 532 O GLN A 581 30.170 4.745 43.924 1.00 12.21 O
+ATOM 533 CB GLN A 581 28.800 1.804 43.151 1.00 13.55 C
+ATOM 534 CG GLN A 581 30.123 1.640 42.471 1.00 18.11 C
+ATOM 535 CD GLN A 581 30.041 0.850 41.168 1.00 21.45 C
+ATOM 536 OE1 GLN A 581 30.920 0.997 40.298 1.00 24.51 O
+ATOM 537 NE2 GLN A 581 28.996 0.029 41.010 1.00 20.61 N
+ATOM 538 N LEU A 582 27.999 4.837 43.366 1.00 9.96 N
+ATOM 539 CA LEU A 582 28.132 6.234 42.936 1.00 10.73 C
+ATOM 540 C LEU A 582 28.414 7.183 44.116 1.00 10.35 C
+ATOM 541 O LEU A 582 29.228 8.110 44.014 1.00 10.03 O
+ATOM 542 CB LEU A 582 26.905 6.695 42.141 1.00 10.29 C
+ATOM 543 CG LEU A 582 27.036 8.125 41.589 1.00 10.67 C
+ATOM 544 CD1 LEU A 582 28.254 8.259 40.663 1.00 11.85 C
+ATOM 545 CD2 LEU A 582 25.773 8.451 40.815 1.00 11.84 C
+ATOM 546 N LEU A 583 27.768 6.953 45.257 1.00 9.56 N
+ATOM 547 CA LEU A 583 28.001 7.818 46.403 1.00 9.90 C
+ATOM 548 C LEU A 583 29.457 7.722 46.878 1.00 9.16 C
+ATOM 549 O LEU A 583 30.057 8.721 47.228 1.00 9.96 O
+ATOM 550 CB LEU A 583 27.023 7.499 47.537 1.00 11.71 C
+ATOM 551 CG LEU A 583 27.173 8.321 48.825 1.00 13.57 C
+ATOM 552 CD1 LEU A 583 26.782 9.808 48.592 1.00 14.73 C
+ATOM 553 CD2 LEU A 583 26.305 7.695 49.936 1.00 15.24 C
+ATOM 554 N ALA A 584 30.028 6.525 46.885 1.00 9.86 N
+ATOM 555 CA ALA A 584 31.421 6.362 47.320 1.00 10.89 C
+ATOM 556 C ALA A 584 32.378 7.169 46.383 1.00 10.75 C
+ATOM 557 O ALA A 584 33.355 7.787 46.831 1.00 10.77 O
+ATOM 558 CB ALA A 584 31.796 4.873 47.341 1.00 10.98 C
+ATOM 559 N PHE A 585 32.113 7.111 45.081 1.00 11.30 N
+ATOM 560 CA PHE A 585 32.899 7.851 44.092 1.00 10.70 C
+ATOM 561 C PHE A 585 32.740 9.351 44.358 1.00 10.59 C
+ATOM 562 O PHE A 585 33.738 10.077 44.384 1.00 10.72 O
+ATOM 563 CB PHE A 585 32.395 7.487 42.685 1.00 12.01 C
+ATOM 564 CG PHE A 585 32.891 8.401 41.579 1.00 13.07 C
+ATOM 565 CD1 PHE A 585 34.106 8.154 40.941 1.00 13.99 C
+ATOM 566 CD2 PHE A 585 32.098 9.464 41.132 1.00 13.59 C
+ATOM 567 CE1 PHE A 585 34.528 8.948 39.870 1.00 13.36 C
+ATOM 568 CE2 PHE A 585 32.508 10.254 40.074 1.00 13.44 C
+ATOM 569 CZ PHE A 585 33.725 9.988 39.448 1.00 13.72 C
+ATOM 570 N ALA A 586 31.505 9.812 44.594 1.00 9.66 N
+ATOM 571 CA ALA A 586 31.236 11.240 44.851 1.00 9.63 C
+ATOM 572 C ALA A 586 32.013 11.738 46.051 1.00 11.79 C
+ATOM 573 O ALA A 586 32.690 12.774 46.000 1.00 11.85 O
+ATOM 574 CB ALA A 586 29.759 11.485 45.059 1.00 10.04 C
+ATOM 575 N GLU A 587 31.984 10.956 47.119 1.00 12.40 N
+ATOM 576 CA GLU A 587 32.678 11.341 48.335 1.00 15.08 C
+ATOM 577 C GLU A 587 34.204 11.446 48.203 1.00 14.23 C
+ATOM 578 O GLU A 587 34.797 12.386 48.741 1.00 15.23 O
+ATOM 579 CB GLU A 587 32.265 10.423 49.494 1.00 19.00 C
+ATOM 580 CG GLU A 587 30.790 10.633 49.872 1.00 24.24 C
+ATOM 581 CD GLU A 587 30.352 9.857 51.101 1.00 27.57 C
+ATOM 582 OE1 GLU A 587 30.760 8.676 51.256 1.00 28.92 O
+ATOM 583 OE2 GLU A 587 29.578 10.445 51.901 1.00 30.04 O
+ATOM 584 N ARG A 588 34.842 10.540 47.463 1.00 12.93 N
+ATOM 585 CA ARG A 588 36.294 10.654 47.341 1.00 13.31 C
+ATOM 586 C ARG A 588 36.691 11.716 46.317 1.00 12.35 C
+ATOM 587 O ARG A 588 37.864 12.059 46.189 1.00 12.04 O
+ATOM 588 CB ARG A 588 36.983 9.310 47.104 1.00 14.50 C
+ATOM 589 CG ARG A 588 36.752 8.664 45.801 1.00 16.91 C
+ATOM 590 CD ARG A 588 37.369 7.266 45.836 1.00 19.74 C
+ATOM 591 NE ARG A 588 37.339 6.626 44.519 1.00 20.85 N
+ATOM 592 CZ ARG A 588 36.405 5.771 44.084 1.00 22.70 C
+ATOM 593 NH1 ARG A 588 35.375 5.405 44.842 1.00 22.75 N
+ATOM 594 NH2 ARG A 588 36.518 5.257 42.864 1.00 24.85 N
+ATOM 595 N ASN A 589 35.699 12.261 45.628 1.00 11.09 N
+ATOM 596 CA ASN A 589 35.956 13.318 44.652 1.00 11.19 C
+ATOM 597 C ASN A 589 35.373 14.675 45.048 1.00 12.23 C
+ATOM 598 O ASN A 589 35.372 15.611 44.258 1.00 13.60 O
+ATOM 599 CB ASN A 589 35.512 12.893 43.266 1.00 10.52 C
+ATOM 600 CG ASN A 589 36.448 11.891 42.671 1.00 11.20 C
+ATOM 601 OD1 ASN A 589 37.617 12.208 42.407 1.00 12.39 O
+ATOM 602 ND2 ASN A 589 35.983 10.663 42.493 1.00 12.35 N
+ATOM 603 N GLY A 590 34.948 14.799 46.303 1.00 11.11 N
+ATOM 604 CA GLY A 590 34.409 16.046 46.802 1.00 12.54 C
+ATOM 605 C GLY A 590 33.187 16.543 46.046 1.00 13.67 C
+ATOM 606 O GLY A 590 33.016 17.752 45.853 1.00 14.76 O
+ATOM 607 N MET A 591 32.322 15.611 45.659 1.00 11.86 N
+ATOM 608 CA MET A 591 31.110 15.937 44.929 1.00 11.81 C
+ATOM 609 C MET A 591 29.856 15.722 45.774 1.00 12.73 C
+ATOM 610 O MET A 591 29.828 14.854 46.660 1.00 13.18 O
+ATOM 611 CB MET A 591 30.974 15.007 43.729 1.00 12.03 C
+ATOM 612 CG MET A 591 32.109 15.061 42.737 1.00 13.60 C
+ATOM 613 SD MET A 591 31.837 13.777 41.558 1.00 17.11 S
+ATOM 614 CE MET A 591 32.965 14.238 40.297 1.00 18.14 C
+ATOM 615 N GLN A 592 28.814 16.500 45.482 1.00 11.47 N
+ATOM 616 CA GLN A 592 27.510 16.321 46.126 1.00 11.95 C
+ATOM 617 C GLN A 592 26.674 15.444 45.190 1.00 11.52 C
+ATOM 618 O GLN A 592 27.031 15.254 44.020 1.00 10.61 O
+ATOM 619 CB GLN A 592 26.801 17.655 46.371 1.00 14.73 C
+ATOM 620 CG GLN A 592 27.451 18.487 47.472 1.00 19.63 C
+ATOM 621 CD GLN A 592 26.701 19.777 47.758 1.00 23.71 C
+ATOM 622 OE1 GLN A 592 26.914 20.393 48.812 1.00 27.70 O
+ATOM 623 NE2 GLN A 592 25.783 20.176 46.858 1.00 24.73 N
+ATOM 624 N MET A 593 25.549 14.932 45.676 1.00 10.95 N
+ATOM 625 CA MET A 593 24.717 14.071 44.856 1.00 11.58 C
+ATOM 626 C MET A 593 23.246 14.468 44.999 1.00 10.01 C
+ATOM 627 O MET A 593 22.849 14.991 46.052 1.00 12.78 O
+ATOM 628 CB MET A 593 24.948 12.633 45.335 1.00 13.38 C
+ATOM 629 CG MET A 593 24.256 11.533 44.588 1.00 17.02 C
+ATOM 630 SD MET A 593 24.938 9.915 45.134 1.00 19.41 S
+ATOM 631 CE MET A 593 23.635 8.775 44.598 1.00 20.39 C
+ATOM 632 N ARG A 594 22.490 14.379 43.907 1.00 8.19 N
+ATOM 633 CA ARG A 594 21.038 14.611 43.945 1.00 8.93 C
+ATOM 634 C ARG A 594 20.394 13.207 43.875 1.00 8.31 C
+ATOM 635 O ARG A 594 20.926 12.302 43.224 1.00 9.88 O
+ATOM 636 CB ARG A 594 20.502 15.429 42.738 1.00 9.04 C
+ATOM 637 CG ARG A 594 21.149 16.806 42.508 1.00 9.14 C
+ATOM 638 CD ARG A 594 20.365 17.594 41.462 1.00 7.96 C
+ATOM 639 NE ARG A 594 19.123 18.140 42.007 1.00 8.48 N
+ATOM 640 CZ ARG A 594 17.885 17.703 41.739 1.00 8.59 C
+ATOM 641 NH1 ARG A 594 17.672 16.701 40.895 1.00 8.09 N
+ATOM 642 NH2 ARG A 594 16.849 18.219 42.394 1.00 7.94 N
+ATOM 643 N GLY A 595 19.254 13.034 44.533 1.00 7.75 N
+ATOM 644 CA GLY A 595 18.558 11.753 44.490 1.00 8.52 C
+ATOM 645 C GLY A 595 17.439 11.843 43.463 1.00 7.86 C
+ATOM 646 O GLY A 595 16.585 12.699 43.558 1.00 9.47 O
+ATOM 647 N HIS A 596 17.393 10.910 42.531 1.00 8.73 N
+ATOM 648 CA HIS A 596 16.406 10.953 41.482 1.00 7.94 C
+ATOM 649 C HIS A 596 15.952 9.513 41.226 1.00 8.14 C
+ATOM 650 O HIS A 596 16.745 8.713 40.778 1.00 9.92 O
+ATOM 651 CB HIS A 596 17.124 11.553 40.248 1.00 9.36 C
+ATOM 652 CG HIS A 596 16.291 11.591 39.006 1.00 10.80 C
+ATOM 653 ND1 HIS A 596 15.337 12.559 38.773 1.00 11.73 N
+ATOM 654 CD2 HIS A 596 16.275 10.778 37.920 1.00 12.56 C
+ATOM 655 CE1 HIS A 596 14.769 12.344 37.598 1.00 12.76 C
+ATOM 656 NE2 HIS A 596 15.318 11.267 37.058 1.00 13.02 N
+ATOM 657 N THR A 597 14.684 9.162 41.427 1.00 8.09 N
+ATOM 658 CA THR A 597 13.588 10.015 41.887 1.00 8.14 C
+ATOM 659 C THR A 597 12.621 9.019 42.554 1.00 8.44 C
+ATOM 660 O THR A 597 12.537 7.863 42.132 1.00 9.27 O
+ATOM 661 CB THR A 597 12.857 10.707 40.697 1.00 8.07 C
+ATOM 662 OG1 THR A 597 11.738 11.439 41.182 1.00 9.27 O
+ATOM 663 CG2 THR A 597 12.392 9.693 39.651 1.00 9.25 C
+ATOM 664 N LEU A 598 11.864 9.472 43.545 1.00 8.35 N
+ATOM 665 CA LEU A 598 10.989 8.568 44.286 1.00 9.50 C
+ATOM 666 C LEU A 598 9.645 8.210 43.673 1.00 9.54 C
+ATOM 667 O LEU A 598 9.377 7.040 43.408 1.00 12.35 O
+ATOM 668 CB LEU A 598 10.838 9.074 45.734 1.00 9.29 C
+ATOM 669 CG LEU A 598 12.154 9.258 46.501 1.00 9.29 C
+ATOM 670 CD1 LEU A 598 11.970 10.051 47.740 1.00 10.09 C
+ATOM 671 CD2 LEU A 598 12.786 7.915 46.818 1.00 10.46 C
+ATOM 672 N ILE A 599 8.811 9.206 43.425 1.00 9.46 N
+ATOM 673 CA ILE A 599 7.468 8.979 42.900 1.00 10.99 C
+ATOM 674 C ILE A 599 7.327 9.468 41.450 1.00 10.62 C
+ATOM 675 O ILE A 599 7.436 10.658 41.173 1.00 11.12 O
+ATOM 676 CB ILE A 599 6.430 9.675 43.824 1.00 11.60 C
+ATOM 677 CG1 ILE A 599 6.578 9.192 45.293 1.00 12.74 C
+ATOM 678 CG2 ILE A 599 5.029 9.453 43.305 1.00 13.24 C
+ATOM 679 CD1 ILE A 599 6.568 7.645 45.498 1.00 13.61 C
+ATOM 680 N TRP A 600 7.038 8.546 40.540 1.00 10.60 N
+ATOM 681 CA TRP A 600 6.928 8.863 39.113 1.00 12.78 C
+ATOM 682 C TRP A 600 5.914 7.883 38.485 1.00 14.21 C
+ATOM 683 O TRP A 600 5.631 6.822 39.056 1.00 13.85 O
+ATOM 684 CB TRP A 600 8.323 8.688 38.493 1.00 12.55 C
+ATOM 685 CG TRP A 600 8.523 9.123 37.052 1.00 14.25 C
+ATOM 686 CD1 TRP A 600 7.865 10.117 36.371 1.00 14.13 C
+ATOM 687 CD2 TRP A 600 9.517 8.620 36.162 1.00 15.59 C
+ATOM 688 NE1 TRP A 600 8.406 10.267 35.102 1.00 13.78 N
+ATOM 689 CE2 TRP A 600 9.420 9.362 34.949 1.00 15.35 C
+ATOM 690 CE3 TRP A 600 10.493 7.612 36.267 1.00 17.01 C
+ATOM 691 CZ2 TRP A 600 10.270 9.124 33.849 1.00 16.96 C
+ATOM 692 CZ3 TRP A 600 11.334 7.376 35.175 1.00 17.84 C
+ATOM 693 CH2 TRP A 600 11.216 8.135 33.978 1.00 17.15 C
+ATOM 694 N HIS A 601 5.343 8.230 37.326 1.00 14.33 N
+ATOM 695 CA HIS A 601 4.372 7.335 36.675 1.00 15.58 C
+ATOM 696 C HIS A 601 5.053 6.317 35.755 1.00 17.02 C
+ATOM 697 O HIS A 601 4.422 5.361 35.307 1.00 18.55 O
+ATOM 698 CB HIS A 601 3.323 8.140 35.903 1.00 16.18 C
+ATOM 699 CG HIS A 601 3.912 9.001 34.841 1.00 16.40 C
+ATOM 700 ND1 HIS A 601 4.603 10.157 35.128 1.00 16.72 N
+ATOM 701 CD2 HIS A 601 4.004 8.826 33.501 1.00 17.39 C
+ATOM 702 CE1 HIS A 601 5.110 10.657 34.013 1.00 16.87 C
+ATOM 703 NE2 HIS A 601 4.761 9.870 33.011 1.00 18.08 N
+ATOM 704 N ASN A 602 6.345 6.507 35.506 1.00 18.40 N
+ATOM 705 CA ASN A 602 7.113 5.610 34.658 1.00 21.87 C
+ATOM 706 C ASN A 602 8.127 4.831 35.472 1.00 23.10 C
+ATOM 707 O ASN A 602 8.551 5.240 36.557 1.00 22.55 O
+ATOM 708 CB ASN A 602 7.922 6.380 33.613 1.00 24.59 C
+ATOM 709 CG ASN A 602 7.121 6.744 32.368 1.00 28.41 C
+ATOM 710 OD1 ASN A 602 6.090 6.128 32.041 1.00 29.43 O
+ATOM 711 ND2 ASN A 602 7.605 7.764 31.650 1.00 29.84 N
+ATOM 712 N GLN A 603 8.585 3.750 34.854 1.00 24.98 N
+ATOM 713 CA GLN A 603 9.599 2.878 35.419 1.00 25.68 C
+ATOM 714 C GLN A 603 9.289 2.332 36.803 1.00 23.01 C
+ATOM 715 O GLN A 603 10.134 2.400 37.714 1.00 23.45 O
+ATOM 716 CB GLN A 603 10.972 3.562 35.353 1.00 27.56 C
+ATOM 717 CG GLN A 603 11.443 3.709 33.899 1.00 30.86 C
+ATOM 718 CD GLN A 603 12.862 4.225 33.797 1.00 32.75 C
+ATOM 719 OE1 GLN A 603 13.107 5.300 33.228 1.00 33.45 O
+ATOM 720 NE2 GLN A 603 13.814 3.475 34.374 1.00 33.88 N
+ATOM 721 N ASN A 604 8.073 1.798 36.928 1.00 20.85 N
+ATOM 722 CA ASN A 604 7.592 1.161 38.162 1.00 19.41 C
+ATOM 723 C ASN A 604 7.675 -0.357 37.950 1.00 18.99 C
+ATOM 724 O ASN A 604 7.438 -0.822 36.840 1.00 19.39 O
+ATOM 725 CB ASN A 604 6.183 1.634 38.504 1.00 18.42 C
+ATOM 726 CG ASN A 604 6.193 3.041 39.070 1.00 18.72 C
+ATOM 727 OD1 ASN A 604 7.092 3.376 39.851 1.00 18.40 O
+ATOM 728 ND2 ASN A 604 5.267 3.891 38.623 1.00 17.42 N
+ATOM 729 N PRO A 605 8.077 -1.136 38.990 1.00 17.69 N
+ATOM 730 CA PRO A 605 8.197 -2.601 38.854 1.00 17.36 C
+ATOM 731 C PRO A 605 6.858 -3.303 38.643 1.00 17.68 C
+ATOM 732 O PRO A 605 5.821 -2.823 39.124 1.00 17.77 O
+ATOM 733 CB PRO A 605 8.899 -3.010 40.157 1.00 16.74 C
+ATOM 734 CG PRO A 605 8.427 -2.003 41.135 1.00 16.28 C
+ATOM 735 CD PRO A 605 8.381 -0.705 40.370 1.00 16.92 C
+ATOM 736 N SER A 606 6.867 -4.445 37.955 1.00 17.92 N
+ATOM 737 CA SER A 606 5.613 -5.143 37.691 1.00 19.48 C
+ATOM 738 C SER A 606 4.811 -5.506 38.942 1.00 18.07 C
+ATOM 739 O SER A 606 3.588 -5.426 38.920 1.00 18.54 O
+ATOM 740 CB SER A 606 5.811 -6.363 36.769 1.00 21.22 C
+ATOM 741 OG SER A 606 6.686 -7.328 37.334 1.00 25.84 O
+ATOM 742 N TRP A 607 5.473 -5.866 40.042 1.00 16.74 N
+ATOM 743 CA TRP A 607 4.715 -6.191 41.265 1.00 16.33 C
+ATOM 744 C TRP A 607 3.825 -5.007 41.731 1.00 16.73 C
+ATOM 745 O TRP A 607 2.795 -5.204 42.367 1.00 16.73 O
+ATOM 746 CB TRP A 607 5.643 -6.659 42.420 1.00 15.22 C
+ATOM 747 CG TRP A 607 6.618 -5.609 42.981 1.00 14.09 C
+ATOM 748 CD1 TRP A 607 7.930 -5.436 42.620 1.00 13.83 C
+ATOM 749 CD2 TRP A 607 6.355 -4.629 43.994 1.00 12.86 C
+ATOM 750 NE1 TRP A 607 8.486 -4.420 43.345 1.00 12.89 N
+ATOM 751 CE2 TRP A 607 7.547 -3.902 44.193 1.00 12.33 C
+ATOM 752 CE3 TRP A 607 5.226 -4.292 44.755 1.00 12.56 C
+ATOM 753 CZ2 TRP A 607 7.644 -2.854 45.125 1.00 12.72 C
+ATOM 754 CZ3 TRP A 607 5.322 -3.258 45.682 1.00 12.84 C
+ATOM 755 CH2 TRP A 607 6.524 -2.550 45.859 1.00 12.54 C
+ATOM 756 N LEU A 608 4.234 -3.773 41.426 1.00 17.25 N
+ATOM 757 CA LEU A 608 3.468 -2.612 41.842 1.00 18.31 C
+ATOM 758 C LEU A 608 2.344 -2.347 40.860 1.00 20.96 C
+ATOM 759 O LEU A 608 1.177 -2.344 41.243 1.00 20.05 O
+ATOM 760 CB LEU A 608 4.363 -1.370 41.947 1.00 17.68 C
+ATOM 761 CG LEU A 608 3.726 -0.083 42.492 1.00 18.22 C
+ATOM 762 CD1 LEU A 608 3.524 -0.203 43.987 1.00 18.68 C
+ATOM 763 CD2 LEU A 608 4.595 1.110 42.189 1.00 18.34 C
+ATOM 764 N THR A 609 2.691 -2.187 39.581 1.00 24.00 N
+ATOM 765 CA THR A 609 1.673 -1.864 38.577 1.00 26.97 C
+ATOM 766 C THR A 609 0.589 -2.934 38.368 1.00 28.56 C
+ATOM 767 O THR A 609 -0.521 -2.610 37.943 1.00 29.27 O
+ATOM 768 CB THR A 609 2.294 -1.445 37.231 1.00 27.45 C
+ATOM 769 OG1 THR A 609 3.005 -2.548 36.659 1.00 28.41 O
+ATOM 770 CG2 THR A 609 3.253 -0.285 37.431 1.00 27.49 C
+ATOM 771 N ASN A 610 0.901 -4.184 38.700 1.00 30.11 N
+ATOM 772 CA ASN A 610 -0.052 -5.285 38.566 1.00 32.17 C
+ATOM 773 C ASN A 610 -0.599 -5.744 39.909 1.00 32.33 C
+ATOM 774 O ASN A 610 -1.176 -6.829 39.985 1.00 33.65 O
+ATOM 775 CB ASN A 610 0.593 -6.510 37.906 1.00 34.50 C
+ATOM 776 CG ASN A 610 0.848 -6.323 36.428 1.00 36.74 C
+ATOM 777 OD1 ASN A 610 1.843 -6.836 35.895 1.00 37.95 O
+ATOM 778 ND2 ASN A 610 -0.050 -5.607 35.744 1.00 37.38 N
+ATOM 779 N GLY A 611 -0.369 -4.985 40.976 1.00 31.38 N
+ATOM 780 CA GLY A 611 -0.869 -5.402 42.278 1.00 30.87 C
+ATOM 781 C GLY A 611 -2.325 -5.010 42.479 1.00 30.76 C
+ATOM 782 O GLY A 611 -2.904 -4.360 41.602 1.00 30.48 O
+ATOM 783 N ASN A 612 -2.928 -5.448 43.589 1.00 30.43 N
+ATOM 784 CA ASN A 612 -4.315 -5.088 43.914 1.00 30.99 C
+ATOM 785 C ASN A 612 -4.220 -4.106 45.082 1.00 27.51 C
+ATOM 786 O ASN A 612 -3.914 -4.484 46.216 1.00 27.46 O
+ATOM 787 CB ASN A 612 -5.198 -6.327 44.268 1.00 35.14 C
+ATOM 788 CG ASN A 612 -4.897 -6.918 45.670 1.00 38.55 C
+ATOM 789 OD1 ASN A 612 -3.799 -7.452 45.918 1.00 40.71 O
+ATOM 790 ND2 ASN A 612 -5.879 -6.826 46.586 1.00 39.60 N
+ATOM 791 N TRP A 613 -4.403 -2.827 44.776 1.00 23.48 N
+ATOM 792 CA TRP A 613 -4.283 -1.796 45.798 1.00 20.49 C
+ATOM 793 C TRP A 613 -5.533 -0.978 46.026 1.00 18.93 C
+ATOM 794 O TRP A 613 -6.445 -0.929 45.197 1.00 20.20 O
+ATOM 795 CB TRP A 613 -3.152 -0.794 45.438 1.00 19.01 C
+ATOM 796 CG TRP A 613 -1.865 -1.396 44.966 1.00 17.06 C
+ATOM 797 CD1 TRP A 613 -1.404 -1.447 43.670 1.00 16.68 C
+ATOM 798 CD2 TRP A 613 -0.909 -2.107 45.764 1.00 16.08 C
+ATOM 799 NE1 TRP A 613 -0.231 -2.170 43.619 1.00 17.17 N
+ATOM 800 CE2 TRP A 613 0.097 -2.586 44.886 1.00 16.28 C
+ATOM 801 CE3 TRP A 613 -0.807 -2.399 47.134 1.00 15.80 C
+ATOM 802 CZ2 TRP A 613 1.194 -3.349 45.337 1.00 15.62 C
+ATOM 803 CZ3 TRP A 613 0.283 -3.157 47.578 1.00 15.59 C
+ATOM 804 CH2 TRP A 613 1.266 -3.621 46.674 1.00 14.65 C
+ATOM 805 N ASN A 614 -5.552 -0.333 47.179 1.00 17.76 N
+ATOM 806 CA ASN A 614 -6.587 0.616 47.534 1.00 17.17 C
+ATOM 807 C ASN A 614 -5.789 1.786 48.132 1.00 16.19 C
+ATOM 808 O ASN A 614 -4.554 1.697 48.284 1.00 15.42 O
+ATOM 809 CB ASN A 614 -7.633 0.044 48.514 1.00 19.14 C
+ATOM 810 CG ASN A 614 -7.017 -0.612 49.723 1.00 20.31 C
+ATOM 811 OD1 ASN A 614 -6.364 0.024 50.535 1.00 20.35 O
+ATOM 812 ND2 ASN A 614 -7.219 -1.909 49.837 1.00 23.30 N
+ATOM 813 N ARG A 615 -6.473 2.886 48.433 1.00 15.45 N
+ATOM 814 CA ARG A 615 -5.807 4.059 48.967 1.00 15.10 C
+ATOM 815 C ARG A 615 -4.887 3.748 50.147 1.00 16.05 C
+ATOM 816 O ARG A 615 -3.707 4.102 50.141 1.00 14.73 O
+ATOM 817 CB ARG A 615 -6.832 5.118 49.351 1.00 14.82 C
+ATOM 818 CG ARG A 615 -6.241 6.298 50.074 1.00 14.60 C
+ATOM 819 CD ARG A 615 -7.312 7.302 50.370 1.00 15.50 C
+ATOM 820 NE ARG A 615 -6.854 8.349 51.277 1.00 16.81 N
+ATOM 821 CZ ARG A 615 -6.429 9.551 50.882 1.00 18.20 C
+ATOM 822 NH1 ARG A 615 -6.380 9.874 49.590 1.00 17.86 N
+ATOM 823 NH2 ARG A 615 -6.152 10.474 51.784 1.00 18.91 N
+ATOM 824 N ASP A 616 -5.425 3.057 51.145 1.00 15.90 N
+ATOM 825 CA ASP A 616 -4.655 2.713 52.328 1.00 17.46 C
+ATOM 826 C ASP A 616 -3.456 1.807 52.102 1.00 15.67 C
+ATOM 827 O ASP A 616 -2.371 2.096 52.629 1.00 15.23 O
+ATOM 828 CB ASP A 616 -5.580 2.127 53.389 1.00 21.46 C
+ATOM 829 CG ASP A 616 -6.650 3.110 53.802 1.00 25.12 C
+ATOM 830 OD1 ASP A 616 -6.284 4.218 54.252 1.00 27.38 O
+ATOM 831 OD2 ASP A 616 -7.849 2.799 53.633 1.00 28.94 O
+ATOM 832 N SER A 617 -3.607 0.752 51.305 1.00 14.18 N
+ATOM 833 CA SER A 617 -2.466 -0.129 51.084 1.00 14.14 C
+ATOM 834 C SER A 617 -1.383 0.495 50.188 1.00 12.70 C
+ATOM 835 O SER A 617 -0.199 0.236 50.396 1.00 13.67 O
+ATOM 836 CB SER A 617 -2.869 -1.517 50.605 1.00 13.73 C
+ATOM 837 OG SER A 617 -3.623 -1.462 49.423 1.00 15.18 O
+ATOM 838 N LEU A 618 -1.774 1.353 49.248 1.00 12.05 N
+ATOM 839 CA LEU A 618 -0.775 1.994 48.379 1.00 10.58 C
+ATOM 840 C LEU A 618 -0.023 3.086 49.136 1.00 9.82 C
+ATOM 841 O LEU A 618 1.161 3.272 48.906 1.00 10.65 O
+ATOM 842 CB LEU A 618 -1.393 2.512 47.079 1.00 11.64 C
+ATOM 843 CG LEU A 618 -0.359 2.827 45.986 1.00 11.43 C
+ATOM 844 CD1 LEU A 618 0.495 1.568 45.651 1.00 11.33 C
+ATOM 845 CD2 LEU A 618 -1.068 3.369 44.750 1.00 10.85 C
+ATOM 846 N LEU A 619 -0.685 3.792 50.056 1.00 9.97 N
+ATOM 847 CA LEU A 619 -0.005 4.792 50.879 1.00 10.83 C
+ATOM 848 C LEU A 619 1.065 4.109 51.735 1.00 10.94 C
+ATOM 849 O LEU A 619 2.139 4.665 51.971 1.00 11.62 O
+ATOM 850 CB LEU A 619 -0.984 5.554 51.796 1.00 11.99 C
+ATOM 851 CG LEU A 619 -1.709 6.778 51.185 1.00 13.01 C
+ATOM 852 CD1 LEU A 619 -2.746 7.313 52.179 1.00 13.81 C
+ATOM 853 CD2 LEU A 619 -0.688 7.902 50.822 1.00 12.30 C
+ATOM 854 N ALA A 620 0.774 2.892 52.201 1.00 10.98 N
+ATOM 855 CA ALA A 620 1.741 2.146 53.021 1.00 10.92 C
+ATOM 856 C ALA A 620 2.967 1.773 52.195 1.00 9.46 C
+ATOM 857 O ALA A 620 4.088 1.827 52.704 1.00 10.27 O
+ATOM 858 CB ALA A 620 1.093 0.874 53.626 1.00 12.09 C
+ATOM 859 N VAL A 621 2.751 1.347 50.949 1.00 10.05 N
+ATOM 860 CA VAL A 621 3.858 1.013 50.040 1.00 10.26 C
+ATOM 861 C VAL A 621 4.702 2.284 49.769 1.00 10.57 C
+ATOM 862 O VAL A 621 5.945 2.240 49.782 1.00 10.12 O
+ATOM 863 CB VAL A 621 3.352 0.437 48.681 1.00 11.18 C
+ATOM 864 CG1 VAL A 621 4.512 0.327 47.670 1.00 11.63 C
+ATOM 865 CG2 VAL A 621 2.735 -0.949 48.901 1.00 12.07 C
+ATOM 866 N MET A 622 4.021 3.408 49.538 1.00 10.55 N
+ATOM 867 CA MET A 622 4.710 4.673 49.282 1.00 10.33 C
+ATOM 868 C MET A 622 5.591 5.048 50.473 1.00 9.76 C
+ATOM 869 O MET A 622 6.758 5.392 50.327 1.00 9.72 O
+ATOM 870 CB MET A 622 3.692 5.788 49.046 1.00 10.72 C
+ATOM 871 CG MET A 622 4.362 7.162 48.839 1.00 13.07 C
+ATOM 872 SD MET A 622 3.254 8.586 48.839 1.00 15.12 S
+ATOM 873 CE MET A 622 2.703 8.419 47.297 1.00 12.69 C
+ATOM 874 N LYS A 623 5.024 4.977 51.672 1.00 10.07 N
+ATOM 875 CA LYS A 623 5.759 5.315 52.890 1.00 10.43 C
+ATOM 876 C LYS A 623 6.951 4.396 53.133 1.00 9.10 C
+ATOM 877 O LYS A 623 8.010 4.862 53.539 1.00 9.69 O
+ATOM 878 CB LYS A 623 4.825 5.289 54.112 1.00 12.96 C
+ATOM 879 CG LYS A 623 5.464 5.848 55.382 1.00 16.43 C
+ATOM 880 CD LYS A 623 4.515 5.738 56.577 1.00 20.46 C
+ATOM 881 CE LYS A 623 5.240 5.954 57.939 1.00 24.16 C
+ATOM 882 NZ LYS A 623 5.820 7.330 58.167 1.00 27.21 N
+ATOM 883 N ASN A 624 6.801 3.098 52.886 1.00 9.04 N
+ATOM 884 CA ASN A 624 7.911 2.167 53.097 1.00 9.13 C
+ATOM 885 C ASN A 624 9.057 2.416 52.100 1.00 9.34 C
+ATOM 886 O ASN A 624 10.248 2.356 52.464 1.00 9.65 O
+ATOM 887 CB ASN A 624 7.456 0.716 52.955 1.00 9.98 C
+ATOM 888 CG ASN A 624 8.564 -0.261 53.302 1.00 10.67 C
+ATOM 889 OD1 ASN A 624 9.196 -0.123 54.333 1.00 12.28 O
+ATOM 890 ND2 ASN A 624 8.817 -1.222 52.438 1.00 12.13 N
+ATOM 891 N HIS A 625 8.696 2.709 50.847 1.00 8.84 N
+ATOM 892 CA HIS A 625 9.711 2.972 49.813 1.00 8.77 C
+ATOM 893 C HIS A 625 10.495 4.245 50.131 1.00 8.46 C
+ATOM 894 O HIS A 625 11.738 4.238 50.176 1.00 8.85 O
+ATOM 895 CB HIS A 625 9.087 3.107 48.427 1.00 8.52 C
+ATOM 896 CG HIS A 625 10.107 3.225 47.336 1.00 9.38 C
+ATOM 897 ND1 HIS A 625 10.784 2.136 46.830 1.00 8.97 N
+ATOM 898 CD2 HIS A 625 10.620 4.313 46.709 1.00 8.92 C
+ATOM 899 CE1 HIS A 625 11.671 2.545 45.939 1.00 10.05 C
+ATOM 900 NE2 HIS A 625 11.588 3.862 45.848 1.00 9.43 N
+ATOM 901 N ILE A 626 9.767 5.331 50.359 1.00 8.47 N
+ATOM 902 CA ILE A 626 10.391 6.607 50.669 1.00 8.25 C
+ATOM 903 C ILE A 626 11.262 6.554 51.939 1.00 8.45 C
+ATOM 904 O ILE A 626 12.402 7.007 51.934 1.00 9.43 O
+ATOM 905 CB ILE A 626 9.336 7.715 50.788 1.00 8.46 C
+ATOM 906 CG1 ILE A 626 8.700 7.983 49.408 1.00 7.70 C
+ATOM 907 CG2 ILE A 626 9.939 8.990 51.394 1.00 8.27 C
+ATOM 908 CD1 ILE A 626 7.628 9.109 49.417 1.00 7.92 C
+ATOM 909 N THR A 627 10.744 5.987 53.021 1.00 7.57 N
+ATOM 910 CA THR A 627 11.483 5.928 54.281 1.00 8.15 C
+ATOM 911 C THR A 627 12.722 5.043 54.218 1.00 7.29 C
+ATOM 912 O THR A 627 13.794 5.433 54.695 1.00 8.36 O
+ATOM 913 CB THR A 627 10.571 5.431 55.438 1.00 9.80 C
+ATOM 914 OG1 THR A 627 9.432 6.305 55.538 1.00 11.76 O
+ATOM 915 CG2 THR A 627 11.329 5.422 56.764 1.00 10.40 C
+ATOM 916 N THR A 628 12.590 3.860 53.619 1.00 7.73 N
+ATOM 917 CA THR A 628 13.726 2.926 53.512 1.00 8.21 C
+ATOM 918 C THR A 628 14.868 3.500 52.651 1.00 8.19 C
+ATOM 919 O THR A 628 16.022 3.463 53.044 1.00 9.68 O
+ATOM 920 CB THR A 628 13.274 1.517 52.973 1.00 8.77 C
+ATOM 921 OG1 THR A 628 12.290 0.966 53.866 1.00 9.58 O
+ATOM 922 CG2 THR A 628 14.462 0.544 52.855 1.00 9.50 C
+ATOM 923 N VAL A 629 14.537 4.083 51.503 1.00 8.25 N
+ATOM 924 CA VAL A 629 15.552 4.643 50.615 1.00 7.68 C
+ATOM 925 C VAL A 629 16.220 5.899 51.214 1.00 7.02 C
+ATOM 926 O VAL A 629 17.450 5.990 51.301 1.00 7.73 O
+ATOM 927 CB VAL A 629 14.916 4.979 49.221 1.00 8.14 C
+ATOM 928 CG1 VAL A 629 15.951 5.696 48.345 1.00 8.60 C
+ATOM 929 CG2 VAL A 629 14.451 3.707 48.524 1.00 8.99 C
+ATOM 930 N MET A 630 15.407 6.849 51.687 1.00 7.56 N
+ATOM 931 CA MET A 630 15.976 8.065 52.251 1.00 7.96 C
+ATOM 932 C MET A 630 16.794 7.865 53.532 1.00 9.50 C
+ATOM 933 O MET A 630 17.769 8.579 53.744 1.00 11.04 O
+ATOM 934 CB MET A 630 14.914 9.151 52.425 1.00 8.46 C
+ATOM 935 CG MET A 630 14.424 9.705 51.072 1.00 9.69 C
+ATOM 936 SD MET A 630 13.266 11.064 51.234 1.00 10.77 S
+ATOM 937 CE MET A 630 14.304 12.370 51.922 1.00 10.43 C
+ATOM 938 N THR A 631 16.390 6.944 54.408 1.00 9.97 N
+ATOM 939 CA THR A 631 17.172 6.728 55.644 1.00 10.56 C
+ATOM 940 C THR A 631 18.510 6.048 55.304 1.00 10.31 C
+ATOM 941 O THR A 631 19.515 6.312 55.970 1.00 11.18 O
+ATOM 942 CB THR A 631 16.406 5.899 56.723 1.00 12.53 C
+ATOM 943 OG1 THR A 631 16.166 4.607 56.214 1.00 15.56 O
+ATOM 944 CG2 THR A 631 15.060 6.506 57.065 1.00 12.14 C
+ATOM 945 N HIS A 632 18.554 5.221 54.250 1.00 9.45 N
+ATOM 946 CA HIS A 632 19.835 4.604 53.845 1.00 10.32 C
+ATOM 947 C HIS A 632 20.846 5.692 53.435 1.00 10.36 C
+ATOM 948 O HIS A 632 22.060 5.537 53.611 1.00 11.83 O
+ATOM 949 CB HIS A 632 19.654 3.618 52.668 1.00 10.64 C
+ATOM 950 CG HIS A 632 20.881 2.814 52.356 1.00 10.54 C
+ATOM 951 ND1 HIS A 632 21.407 1.890 53.232 1.00 10.21 N
+ATOM 952 CD2 HIS A 632 21.707 2.820 51.279 1.00 10.86 C
+ATOM 953 CE1 HIS A 632 22.504 1.363 52.717 1.00 11.14 C
+ATOM 954 NE2 HIS A 632 22.708 1.911 51.530 1.00 11.38 N
+ATOM 955 N TYR A 633 20.343 6.775 52.844 1.00 11.07 N
+ATOM 956 CA TYR A 633 21.205 7.900 52.393 1.00 11.33 C
+ATOM 957 C TYR A 633 21.062 9.158 53.264 1.00 12.02 C
+ATOM 958 O TYR A 633 21.485 10.254 52.867 1.00 11.76 O
+ATOM 959 CB TYR A 633 20.856 8.284 50.927 1.00 10.10 C
+ATOM 960 CG TYR A 633 21.159 7.203 49.926 1.00 9.18 C
+ATOM 961 CD1 TYR A 633 22.477 6.931 49.559 1.00 9.96 C
+ATOM 962 CD2 TYR A 633 20.147 6.389 49.409 1.00 8.30 C
+ATOM 963 CE1 TYR A 633 22.783 5.867 48.713 1.00 9.63 C
+ATOM 964 CE2 TYR A 633 20.451 5.322 48.559 1.00 8.42 C
+ATOM 965 CZ TYR A 633 21.781 5.062 48.217 1.00 8.06 C
+ATOM 966 OH TYR A 633 22.102 3.985 47.432 1.00 9.73 O
+ATOM 967 N LYS A 634 20.561 8.991 54.479 1.00 12.16 N
+ATOM 968 CA LYS A 634 20.287 10.133 55.342 1.00 12.74 C
+ATOM 969 C LYS A 634 21.496 11.034 55.540 1.00 13.36 C
+ATOM 970 O LYS A 634 22.575 10.566 55.904 1.00 13.93 O
+ATOM 971 CB LYS A 634 19.724 9.646 56.684 1.00 14.64 C
+ATOM 972 CG LYS A 634 19.116 10.726 57.556 1.00 17.90 C
+ATOM 973 CD LYS A 634 18.686 10.132 58.901 1.00 19.94 C
+ATOM 974 CE LYS A 634 17.912 11.129 59.780 1.00 22.59 C
+ATOM 975 NZ LYS A 634 18.737 12.274 60.284 1.00 24.99 N
+ATOM 976 N GLY A 635 21.310 12.328 55.266 1.00 12.79 N
+ATOM 977 CA GLY A 635 22.365 13.307 55.428 1.00 13.55 C
+ATOM 978 C GLY A 635 23.446 13.242 54.364 1.00 15.28 C
+ATOM 979 O GLY A 635 24.376 14.023 54.404 1.00 17.72 O
+ATOM 980 N LYS A 636 23.330 12.357 53.387 1.00 15.95 N
+ATOM 981 CA LYS A 636 24.367 12.258 52.352 1.00 17.83 C
+ATOM 982 C LYS A 636 23.952 12.805 50.971 1.00 16.79 C
+ATOM 983 O LYS A 636 24.806 12.982 50.103 1.00 16.05 O
+ATOM 984 CB LYS A 636 24.800 10.799 52.200 1.00 21.69 C
+ATOM 985 CG LYS A 636 25.283 10.143 53.512 1.00 26.25 C
+ATOM 986 CD LYS A 636 25.456 8.628 53.310 1.00 30.78 C
+ATOM 987 CE LYS A 636 26.162 7.910 54.490 1.00 32.89 C
+ATOM 988 NZ LYS A 636 26.576 6.515 54.054 1.00 34.45 N
+ATOM 989 N ILE A 637 22.645 12.974 50.750 1.00 15.11 N
+ATOM 990 CA ILE A 637 22.108 13.484 49.479 1.00 14.10 C
+ATOM 991 C ILE A 637 21.426 14.839 49.746 1.00 14.57 C
+ATOM 992 O ILE A 637 20.469 14.934 50.507 1.00 16.15 O
+ATOM 993 CB ILE A 637 21.204 12.410 48.807 1.00 13.05 C
+ATOM 994 CG1 ILE A 637 22.114 11.270 48.326 1.00 12.55 C
+ATOM 995 CG2 ILE A 637 20.310 13.030 47.717 1.00 11.31 C
+ATOM 996 CD1 ILE A 637 21.413 10.105 47.691 1.00 14.16 C
+ATOM 997 N VAL A 638 21.953 15.894 49.122 1.00 14.36 N
+ATOM 998 CA VAL A 638 21.474 17.254 49.358 1.00 14.86 C
+ATOM 999 C VAL A 638 20.144 17.688 48.766 1.00 12.58 C
+ATOM 1000 O VAL A 638 19.450 18.498 49.364 1.00 14.66 O
+ATOM 1001 CB VAL A 638 22.581 18.297 49.031 1.00 17.00 C
+ATOM 1002 CG1 VAL A 638 23.762 18.086 49.981 1.00 19.19 C
+ATOM 1003 CG2 VAL A 638 23.038 18.178 47.553 1.00 17.19 C
+ATOM 1004 N GLU A 639 19.798 17.177 47.600 1.00 8.63 N
+ATOM 1005 CA GLU A 639 18.542 17.525 46.970 1.00 8.26 C
+ATOM 1006 C GLU A 639 17.908 16.218 46.504 1.00 6.89 C
+ATOM 1007 O GLU A 639 18.586 15.381 45.914 1.00 7.18 O
+ATOM 1008 CB GLU A 639 18.788 18.410 45.728 1.00 8.85 C
+ATOM 1009 CG GLU A 639 19.502 19.743 46.020 1.00 9.27 C
+ATOM 1010 CD GLU A 639 19.635 20.649 44.793 1.00 9.86 C
+ATOM 1011 OE1 GLU A 639 19.007 20.376 43.745 1.00 10.05 O
+ATOM 1012 OE2 GLU A 639 20.360 21.643 44.892 1.00 11.30 O
+ATOM 1013 N TRP A 640 16.612 16.067 46.762 1.00 6.79 N
+ATOM 1014 CA TRP A 640 15.852 14.892 46.353 1.00 6.60 C
+ATOM 1015 C TRP A 640 14.703 15.271 45.443 1.00 5.08 C
+ATOM 1016 O TRP A 640 13.940 16.146 45.806 1.00 6.57 O
+ATOM 1017 CB TRP A 640 15.208 14.192 47.591 1.00 8.03 C
+ATOM 1018 CG TRP A 640 16.067 13.127 48.235 1.00 9.68 C
+ATOM 1019 CD1 TRP A 640 16.858 13.255 49.352 1.00 11.36 C
+ATOM 1020 CD2 TRP A 640 16.252 11.789 47.764 1.00 10.30 C
+ATOM 1021 NE1 TRP A 640 17.516 12.076 49.588 1.00 11.42 N
+ATOM 1022 CE2 TRP A 640 17.172 11.163 48.634 1.00 10.88 C
+ATOM 1023 CE3 TRP A 640 15.739 11.064 46.675 1.00 11.57 C
+ATOM 1024 CZ2 TRP A 640 17.597 9.836 48.450 1.00 12.43 C
+ATOM 1025 CZ3 TRP A 640 16.163 9.745 46.486 1.00 13.72 C
+ATOM 1026 CH2 TRP A 640 17.081 9.152 47.370 1.00 12.48 C
+ATOM 1027 N ASP A 641 14.581 14.603 44.296 1.00 6.32 N
+ATOM 1028 CA ASP A 641 13.427 14.793 43.413 1.00 5.74 C
+ATOM 1029 C ASP A 641 12.404 13.791 44.017 1.00 6.88 C
+ATOM 1030 O ASP A 641 12.430 12.580 43.713 1.00 7.88 O
+ATOM 1031 CB ASP A 641 13.729 14.395 41.970 1.00 6.68 C
+ATOM 1032 CG ASP A 641 14.609 15.410 41.234 1.00 8.43 C
+ATOM 1033 OD1 ASP A 641 14.662 16.582 41.626 1.00 9.60 O
+ATOM 1034 OD2 ASP A 641 15.230 14.998 40.242 1.00 9.12 O
+ATOM 1035 N VAL A 642 11.570 14.298 44.913 1.00 6.28 N
+ATOM 1036 CA VAL A 642 10.558 13.467 45.560 1.00 6.92 C
+ATOM 1037 C VAL A 642 9.502 12.991 44.579 1.00 8.31 C
+ATOM 1038 O VAL A 642 9.127 11.813 44.581 1.00 8.14 O
+ATOM 1039 CB VAL A 642 9.906 14.212 46.732 1.00 7.51 C
+ATOM 1040 CG1 VAL A 642 8.736 13.386 47.309 1.00 9.22 C
+ATOM 1041 CG2 VAL A 642 10.958 14.475 47.801 1.00 7.87 C
+ATOM 1042 N ALA A 643 9.044 13.905 43.731 1.00 8.39 N
+ATOM 1043 CA ALA A 643 8.029 13.599 42.728 1.00 9.29 C
+ATOM 1044 C ALA A 643 8.549 14.115 41.393 1.00 9.10 C
+ATOM 1045 O ALA A 643 9.203 15.156 41.349 1.00 9.25 O
+ATOM 1046 CB ALA A 643 6.699 14.253 43.081 1.00 10.98 C
+ATOM 1047 N ASN A 644 8.216 13.417 40.320 1.00 8.51 N
+ATOM 1048 CA ASN A 644 8.710 13.747 38.978 1.00 8.61 C
+ATOM 1049 C ASN A 644 7.612 13.687 37.913 1.00 10.26 C
+ATOM 1050 O ASN A 644 6.837 12.724 37.857 1.00 10.20 O
+ATOM 1051 CB ASN A 644 9.813 12.726 38.645 1.00 9.80 C
+ATOM 1052 CG ASN A 644 10.684 13.127 37.456 1.00 11.91 C
+ATOM 1053 OD1 ASN A 644 11.150 14.266 37.345 1.00 14.46 O
+ATOM 1054 ND2 ASN A 644 10.944 12.174 36.587 1.00 11.71 N
+ATOM 1055 N GLU A 645 7.487 14.753 37.124 1.00 10.35 N
+ATOM 1056 CA GLU A 645 6.528 14.812 36.008 1.00 10.79 C
+ATOM 1057 C GLU A 645 5.106 14.379 36.329 1.00 10.69 C
+ATOM 1058 O GLU A 645 4.512 13.605 35.591 1.00 12.21 O
+ATOM 1059 CB GLU A 645 7.070 13.967 34.868 1.00 11.45 C
+ATOM 1060 CG GLU A 645 8.515 14.289 34.543 1.00 12.47 C
+ATOM 1061 CD GLU A 645 9.122 13.388 33.479 1.00 15.07 C
+ATOM 1062 OE1 GLU A 645 8.430 12.460 32.978 1.00 16.08 O
+ATOM 1063 OE2 GLU A 645 10.323 13.594 33.157 1.00 15.18 O
+ATOM 1064 N CYS A 646 4.541 14.929 37.392 1.00 11.63 N
+ATOM 1065 CA CYS A 646 3.190 14.566 37.800 1.00 12.46 C
+ATOM 1066 C CYS A 646 2.109 15.467 37.211 1.00 13.44 C
+ATOM 1067 O CYS A 646 0.919 15.167 37.363 1.00 12.98 O
+ATOM 1068 CB CYS A 646 3.052 14.628 39.322 1.00 14.16 C
+ATOM 1069 SG CYS A 646 4.185 13.520 40.280 1.00 17.92 S
+ATOM 1070 N MET A 647 2.489 16.591 36.599 1.00 12.91 N
+ATOM 1071 CA MET A 647 1.483 17.510 36.051 1.00 12.39 C
+ATOM 1072 C MET A 647 1.198 17.166 34.612 1.00 12.89 C
+ATOM 1073 O MET A 647 2.104 16.846 33.855 1.00 11.29 O
+ATOM 1074 CB MET A 647 1.957 18.971 36.140 1.00 13.15 C
+ATOM 1075 CG MET A 647 0.914 20.014 35.716 1.00 13.35 C
+ATOM 1076 SD MET A 647 -0.530 20.081 36.774 1.00 16.27 S
+ATOM 1077 CE MET A 647 0.143 20.858 38.208 1.00 15.68 C
+ATOM 1078 N ASP A 648 -0.079 17.190 34.253 1.00 14.26 N
+ATOM 1079 CA ASP A 648 -0.460 16.910 32.874 1.00 16.47 C
+ATOM 1080 C ASP A 648 0.135 18.000 31.966 1.00 15.82 C
+ATOM 1081 O ASP A 648 0.278 19.140 32.375 1.00 14.43 O
+ATOM 1082 CB ASP A 648 -1.976 16.896 32.728 1.00 19.03 C
+ATOM 1083 CG ASP A 648 -2.401 16.358 31.395 1.00 23.11 C
+ATOM 1084 OD1 ASP A 648 -2.234 15.131 31.173 1.00 25.41 O
+ATOM 1085 OD2 ASP A 648 -2.864 17.145 30.535 1.00 24.25 O
+ATOM 1086 N ASP A 649 0.480 17.641 30.741 1.00 16.50 N
+ATOM 1087 CA ASP A 649 1.058 18.606 29.805 1.00 20.50 C
+ATOM 1088 C ASP A 649 0.217 19.825 29.439 1.00 21.12 C
+ATOM 1089 O ASP A 649 0.746 20.875 29.033 1.00 21.52 O
+ATOM 1090 CB ASP A 649 1.545 17.893 28.565 1.00 22.57 C
+ATOM 1091 CG ASP A 649 2.906 17.337 28.763 1.00 25.17 C
+ATOM 1092 OD1 ASP A 649 3.732 18.045 29.387 1.00 26.56 O
+ATOM 1093 OD2 ASP A 649 3.140 16.200 28.329 1.00 27.90 O
+ATOM 1094 N SER A 650 -1.090 19.683 29.621 1.00 21.45 N
+ATOM 1095 CA SER A 650 -2.040 20.762 29.363 1.00 21.67 C
+ATOM 1096 C SER A 650 -1.963 21.808 30.491 1.00 21.48 C
+ATOM 1097 O SER A 650 -2.315 22.975 30.286 1.00 22.52 O
+ATOM 1098 CB SER A 650 -3.470 20.184 29.305 1.00 22.20 C
+ATOM 1099 OG SER A 650 -3.899 19.603 30.554 1.00 24.05 O
+ATOM 1100 N GLY A 651 -1.520 21.372 31.674 1.00 18.65 N
+ATOM 1101 CA GLY A 651 -1.470 22.242 32.821 1.00 17.91 C
+ATOM 1102 C GLY A 651 -2.824 22.224 33.497 1.00 18.26 C
+ATOM 1103 O GLY A 651 -3.047 22.963 34.438 1.00 19.45 O
+ATOM 1104 N ASN A 652 -3.726 21.346 33.060 1.00 19.18 N
+ATOM 1105 CA ASN A 652 -5.067 21.281 33.651 1.00 21.03 C
+ATOM 1106 C ASN A 652 -5.198 20.552 34.968 1.00 20.60 C
+ATOM 1107 O ASN A 652 -6.191 20.683 35.646 1.00 23.64 O
+ATOM 1108 CB ASN A 652 -6.096 20.742 32.651 1.00 22.76 C
+ATOM 1109 CG ASN A 652 -6.361 21.723 31.514 1.00 25.67 C
+ATOM 1110 OD1 ASN A 652 -6.396 22.941 31.722 1.00 26.40 O
+ATOM 1111 ND2 ASN A 652 -6.487 21.206 30.305 1.00 26.40 N
+ATOM 1112 N GLY A 653 -4.203 19.780 35.341 1.00 19.49 N
+ATOM 1113 CA GLY A 653 -4.281 19.066 36.593 1.00 16.84 C
+ATOM 1114 C GLY A 653 -3.288 17.939 36.561 1.00 15.65 C
+ATOM 1115 O GLY A 653 -2.541 17.769 35.604 1.00 15.47 O
+ATOM 1116 N LEU A 654 -3.287 17.154 37.625 1.00 15.82 N
+ATOM 1117 CA LEU A 654 -2.363 16.046 37.749 1.00 15.44 C
+ATOM 1118 C LEU A 654 -2.632 14.949 36.729 1.00 16.20 C
+ATOM 1119 O LEU A 654 -3.781 14.672 36.349 1.00 17.76 O
+ATOM 1120 CB LEU A 654 -2.404 15.485 39.190 1.00 16.82 C
+ATOM 1121 CG LEU A 654 -1.999 16.441 40.339 1.00 17.28 C
+ATOM 1122 CD1 LEU A 654 -2.341 15.847 41.727 1.00 17.10 C
+ATOM 1123 CD2 LEU A 654 -0.529 16.707 40.232 1.00 17.49 C
+ATOM 1124 N ARG A 655 -1.554 14.332 36.291 1.00 15.11 N
+ATOM 1125 CA ARG A 655 -1.551 13.254 35.321 1.00 15.76 C
+ATOM 1126 C ARG A 655 -2.132 11.956 35.926 1.00 15.91 C
+ATOM 1127 O ARG A 655 -1.944 11.673 37.124 1.00 15.50 O
+ATOM 1128 CB ARG A 655 -0.080 13.073 34.942 1.00 18.24 C
+ATOM 1129 CG ARG A 655 0.258 12.001 34.021 1.00 20.71 C
+ATOM 1130 CD ARG A 655 1.743 11.779 34.062 1.00 21.00 C
+ATOM 1131 NE ARG A 655 2.529 12.917 33.568 1.00 22.27 N
+ATOM 1132 CZ ARG A 655 2.724 13.216 32.279 1.00 23.89 C
+ATOM 1133 NH1 ARG A 655 2.157 12.478 31.324 1.00 24.61 N
+ATOM 1134 NH2 ARG A 655 3.602 14.159 31.927 1.00 23.30 N
+ATOM 1135 N SER A 656 -2.848 11.167 35.143 1.00 15.30 N
+ATOM 1136 CA SER A 656 -3.339 9.919 35.723 1.00 17.88 C
+ATOM 1137 C SER A 656 -2.115 8.969 35.818 1.00 17.56 C
+ATOM 1138 O SER A 656 -1.179 9.044 35.004 1.00 17.81 O
+ATOM 1139 CB SER A 656 -4.535 9.341 34.935 1.00 20.25 C
+ATOM 1140 OG SER A 656 -4.134 8.362 34.006 1.00 24.17 O
+ATOM 1141 N SER A 657 -2.042 8.237 36.925 1.00 15.62 N
+ATOM 1142 CA SER A 657 -0.958 7.298 37.208 1.00 14.45 C
+ATOM 1143 C SER A 657 -1.453 6.353 38.303 1.00 14.09 C
+ATOM 1144 O SER A 657 -2.510 6.607 38.915 1.00 13.28 O
+ATOM 1145 CB SER A 657 0.287 8.049 37.709 1.00 13.71 C
+ATOM 1146 OG SER A 657 0.100 8.611 38.982 1.00 12.74 O
+ATOM 1147 N ILE A 658 -0.703 5.286 38.586 1.00 13.44 N
+ATOM 1148 CA ILE A 658 -1.144 4.377 39.644 1.00 13.09 C
+ATOM 1149 C ILE A 658 -1.325 5.135 40.977 1.00 12.37 C
+ATOM 1150 O ILE A 658 -2.355 4.987 41.642 1.00 13.54 O
+ATOM 1151 CB ILE A 658 -0.216 3.135 39.790 1.00 14.48 C
+ATOM 1152 CG1 ILE A 658 -0.814 2.160 40.805 1.00 16.04 C
+ATOM 1153 CG2 ILE A 658 1.204 3.534 40.192 1.00 15.18 C
+ATOM 1154 CD1 ILE A 658 -0.043 0.860 40.917 1.00 18.43 C
+ATOM 1155 N TRP A 659 -0.403 6.044 41.307 1.00 11.81 N
+ATOM 1156 CA TRP A 659 -0.477 6.812 42.572 1.00 11.45 C
+ATOM 1157 C TRP A 659 -1.685 7.733 42.593 1.00 10.79 C
+ATOM 1158 O TRP A 659 -2.440 7.763 43.551 1.00 12.67 O
+ATOM 1159 CB TRP A 659 0.782 7.668 42.804 1.00 11.39 C
+ATOM 1160 CG TRP A 659 2.058 6.924 42.617 1.00 12.46 C
+ATOM 1161 CD1 TRP A 659 2.896 6.974 41.529 1.00 12.48 C
+ATOM 1162 CD2 TRP A 659 2.618 5.959 43.518 1.00 12.83 C
+ATOM 1163 NE1 TRP A 659 3.936 6.084 41.700 1.00 14.54 N
+ATOM 1164 CE2 TRP A 659 3.787 5.446 42.912 1.00 13.43 C
+ATOM 1165 CE3 TRP A 659 2.238 5.476 44.777 1.00 12.60 C
+ATOM 1166 CZ2 TRP A 659 4.587 4.459 43.533 1.00 14.15 C
+ATOM 1167 CZ3 TRP A 659 3.032 4.491 45.401 1.00 12.93 C
+ATOM 1168 CH2 TRP A 659 4.190 3.998 44.774 1.00 13.84 C
+ATOM 1169 N ARG A 660 -1.869 8.482 41.523 1.00 10.87 N
+ATOM 1170 CA ARG A 660 -2.980 9.421 41.439 1.00 10.84 C
+ATOM 1171 C ARG A 660 -4.355 8.767 41.432 1.00 10.26 C
+ATOM 1172 O ARG A 660 -5.277 9.235 42.104 1.00 10.51 O
+ATOM 1173 CB ARG A 660 -2.816 10.288 40.173 1.00 11.29 C
+ATOM 1174 CG ARG A 660 -4.019 11.178 39.823 1.00 12.05 C
+ATOM 1175 CD ARG A 660 -4.251 12.236 40.873 1.00 13.12 C
+ATOM 1176 NE ARG A 660 -5.450 13.049 40.577 1.00 13.70 N
+ATOM 1177 CZ ARG A 660 -6.699 12.721 40.913 1.00 12.68 C
+ATOM 1178 NH1 ARG A 660 -6.958 11.573 41.550 1.00 11.54 N
+ATOM 1179 NH2 ARG A 660 -7.671 13.607 40.725 1.00 11.79 N
+ATOM 1180 N ASN A 661 -4.489 7.720 40.632 1.00 10.81 N
+ATOM 1181 CA ASN A 661 -5.774 7.054 40.453 1.00 12.17 C
+ATOM 1182 C ASN A 661 -6.245 6.292 41.682 1.00 13.13 C
+ATOM 1183 O ASN A 661 -7.432 6.375 42.050 1.00 14.25 O
+ATOM 1184 CB ASN A 661 -5.735 6.111 39.249 1.00 13.42 C
+ATOM 1185 CG ASN A 661 -5.473 6.837 37.925 1.00 14.23 C
+ATOM 1186 OD1 ASN A 661 -5.419 8.068 37.861 1.00 14.47 O
+ATOM 1187 ND2 ASN A 661 -5.275 6.057 36.862 1.00 15.94 N
+ATOM 1188 N VAL A 662 -5.314 5.589 42.333 1.00 11.99 N
+ATOM 1189 CA VAL A 662 -5.639 4.799 43.526 1.00 11.91 C
+ATOM 1190 C VAL A 662 -5.733 5.601 44.830 1.00 11.64 C
+ATOM 1191 O VAL A 662 -6.685 5.430 45.606 1.00 12.84 O
+ATOM 1192 CB VAL A 662 -4.619 3.610 43.687 1.00 11.78 C
+ATOM 1193 CG1 VAL A 662 -4.857 2.863 44.987 1.00 12.44 C
+ATOM 1194 CG2 VAL A 662 -4.682 2.684 42.481 1.00 11.85 C
+ATOM 1195 N ILE A 663 -4.759 6.471 45.086 1.00 9.92 N
+ATOM 1196 CA ILE A 663 -4.764 7.249 46.312 1.00 10.42 C
+ATOM 1197 C ILE A 663 -5.719 8.432 46.260 1.00 11.77 C
+ATOM 1198 O ILE A 663 -6.465 8.668 47.209 1.00 12.98 O
+ATOM 1199 CB ILE A 663 -3.326 7.695 46.692 1.00 10.15 C
+ATOM 1200 CG1 ILE A 663 -2.487 6.444 46.996 1.00 10.96 C
+ATOM 1201 CG2 ILE A 663 -3.325 8.642 47.852 1.00 9.34 C
+ATOM 1202 CD1 ILE A 663 -1.021 6.700 47.074 1.00 11.26 C
+ATOM 1203 N GLY A 664 -5.692 9.191 45.163 1.00 12.24 N
+ATOM 1204 CA GLY A 664 -6.573 10.339 45.076 1.00 12.01 C
+ATOM 1205 C GLY A 664 -5.814 11.621 44.833 1.00 12.95 C
+ATOM 1206 O GLY A 664 -4.576 11.622 44.723 1.00 12.33 O
+ATOM 1207 N GLN A 665 -6.541 12.734 44.871 1.00 13.82 N
+ATOM 1208 CA GLN A 665 -5.946 14.027 44.547 1.00 15.58 C
+ATOM 1209 C GLN A 665 -4.881 14.577 45.491 1.00 15.36 C
+ATOM 1210 O GLN A 665 -4.077 15.412 45.067 1.00 16.86 O
+ATOM 1211 CB GLN A 665 -7.028 15.074 44.293 1.00 18.52 C
+ATOM 1212 CG GLN A 665 -7.746 15.528 45.540 1.00 24.51 C
+ATOM 1213 CD GLN A 665 -8.484 16.875 45.363 1.00 27.85 C
+ATOM 1214 OE1 GLN A 665 -8.431 17.508 44.299 1.00 30.10 O
+ATOM 1215 NE2 GLN A 665 -9.150 17.318 46.422 1.00 29.11 N
+ATOM 1216 N ASP A 666 -4.816 14.074 46.724 1.00 13.36 N
+ATOM 1217 CA ASP A 666 -3.841 14.553 47.711 1.00 13.33 C
+ATOM 1218 C ASP A 666 -2.598 13.662 47.870 1.00 11.79 C
+ATOM 1219 O ASP A 666 -1.857 13.802 48.861 1.00 12.33 O
+ATOM 1220 CB ASP A 666 -4.525 14.684 49.078 1.00 14.83 C
+ATOM 1221 CG ASP A 666 -5.128 13.362 49.561 1.00 16.96 C
+ATOM 1222 OD1 ASP A 666 -5.139 12.368 48.804 1.00 16.93 O
+ATOM 1223 OD2 ASP A 666 -5.602 13.312 50.715 1.00 18.91 O
+ATOM 1224 N TYR A 667 -2.369 12.747 46.933 1.00 10.74 N
+ATOM 1225 CA TYR A 667 -1.232 11.853 47.062 1.00 10.51 C
+ATOM 1226 C TYR A 667 0.132 12.545 47.210 1.00 10.39 C
+ATOM 1227 O TYR A 667 0.994 12.022 47.909 1.00 10.92 O
+ATOM 1228 CB TYR A 667 -1.208 10.808 45.947 1.00 11.00 C
+ATOM 1229 CG TYR A 667 -0.526 11.236 44.655 1.00 10.72 C
+ATOM 1230 CD1 TYR A 667 -1.243 11.893 43.645 1.00 11.01 C
+ATOM 1231 CD2 TYR A 667 0.808 10.899 44.406 1.00 11.43 C
+ATOM 1232 CE1 TYR A 667 -0.648 12.193 42.414 1.00 10.71 C
+ATOM 1233 CE2 TYR A 667 1.410 11.193 43.171 1.00 11.53 C
+ATOM 1234 CZ TYR A 667 0.667 11.837 42.181 1.00 11.28 C
+ATOM 1235 OH TYR A 667 1.246 12.070 40.944 1.00 12.36 O
+ATOM 1236 N LEU A 668 0.348 13.693 46.557 1.00 10.36 N
+ATOM 1237 CA LEU A 668 1.644 14.385 46.686 1.00 10.31 C
+ATOM 1238 C LEU A 668 1.882 14.987 48.065 1.00 9.95 C
+ATOM 1239 O LEU A 668 3.028 15.071 48.522 1.00 10.72 O
+ATOM 1240 CB LEU A 668 1.843 15.449 45.600 1.00 12.04 C
+ATOM 1241 CG LEU A 668 2.114 14.909 44.192 1.00 13.54 C
+ATOM 1242 CD1 LEU A 668 2.257 16.062 43.212 1.00 15.57 C
+ATOM 1243 CD2 LEU A 668 3.375 14.054 44.139 1.00 14.87 C
+ATOM 1244 N ASP A 669 0.812 15.356 48.769 1.00 9.71 N
+ATOM 1245 CA ASP A 669 0.973 15.914 50.109 1.00 11.40 C
+ATOM 1246 C ASP A 669 1.625 14.846 51.021 1.00 10.54 C
+ATOM 1247 O ASP A 669 2.482 15.158 51.854 1.00 10.79 O
+ATOM 1248 CB ASP A 669 -0.367 16.318 50.711 1.00 12.86 C
+ATOM 1249 CG ASP A 669 -1.015 17.502 50.002 1.00 15.76 C
+ATOM 1250 OD1 ASP A 669 -0.452 18.079 49.056 1.00 16.66 O
+ATOM 1251 OD2 ASP A 669 -2.120 17.874 50.434 1.00 18.14 O
+ATOM 1252 N TYR A 670 1.205 13.594 50.846 1.00 9.93 N
+ATOM 1253 CA TYR A 670 1.754 12.476 51.618 1.00 10.41 C
+ATOM 1254 C TYR A 670 3.190 12.201 51.248 1.00 8.85 C
+ATOM 1255 O TYR A 670 4.010 12.033 52.124 1.00 9.28 O
+ATOM 1256 CB TYR A 670 0.922 11.200 51.415 1.00 11.99 C
+ATOM 1257 CG TYR A 670 -0.376 11.275 52.154 1.00 15.47 C
+ATOM 1258 CD1 TYR A 670 -0.437 10.937 53.508 1.00 17.20 C
+ATOM 1259 CD2 TYR A 670 -1.530 11.744 51.528 1.00 17.38 C
+ATOM 1260 CE1 TYR A 670 -1.608 11.062 54.220 1.00 19.48 C
+ATOM 1261 CE2 TYR A 670 -2.709 11.884 52.223 1.00 19.68 C
+ATOM 1262 CZ TYR A 670 -2.742 11.540 53.573 1.00 20.46 C
+ATOM 1263 OH TYR A 670 -3.909 11.688 54.283 1.00 23.93 O
+ATOM 1264 N ALA A 671 3.511 12.205 49.952 1.00 8.46 N
+ATOM 1265 CA ALA A 671 4.883 11.923 49.522 1.00 7.15 C
+ATOM 1266 C ALA A 671 5.856 12.890 50.160 1.00 8.02 C
+ATOM 1267 O ALA A 671 6.886 12.470 50.708 1.00 8.12 O
+ATOM 1268 CB ALA A 671 5.012 11.945 48.002 1.00 8.36 C
+ATOM 1269 N PHE A 672 5.531 14.186 50.117 1.00 7.83 N
+ATOM 1270 CA PHE A 672 6.405 15.212 50.717 1.00 8.55 C
+ATOM 1271 C PHE A 672 6.507 15.114 52.255 1.00 8.76 C
+ATOM 1272 O PHE A 672 7.590 15.292 52.812 1.00 9.14 O
+ATOM 1273 CB PHE A 672 6.022 16.624 50.234 1.00 7.96 C
+ATOM 1274 CG PHE A 672 6.538 16.924 48.830 1.00 8.17 C
+ATOM 1275 CD1 PHE A 672 7.818 17.444 48.642 1.00 8.70 C
+ATOM 1276 CD2 PHE A 672 5.780 16.604 47.700 1.00 9.12 C
+ATOM 1277 CE1 PHE A 672 8.344 17.629 47.343 1.00 8.63 C
+ATOM 1278 CE2 PHE A 672 6.298 16.786 46.395 1.00 8.84 C
+ATOM 1279 CZ PHE A 672 7.584 17.295 46.231 1.00 8.72 C
+ATOM 1280 N ARG A 673 5.390 14.824 52.927 1.00 10.01 N
+ATOM 1281 CA ARG A 673 5.403 14.642 54.393 1.00 11.25 C
+ATOM 1282 C ARG A 673 6.265 13.446 54.800 1.00 10.14 C
+ATOM 1283 O ARG A 673 7.131 13.577 55.673 1.00 11.12 O
+ATOM 1284 CB ARG A 673 3.989 14.462 54.922 1.00 15.64 C
+ATOM 1285 CG ARG A 673 3.223 15.749 55.010 1.00 20.81 C
+ATOM 1286 CD ARG A 673 1.981 15.528 55.843 1.00 25.86 C
+ATOM 1287 NE ARG A 673 0.799 16.007 55.140 1.00 30.63 N
+ATOM 1288 CZ ARG A 673 0.418 17.280 55.110 1.00 32.65 C
+ATOM 1289 NH1 ARG A 673 1.138 18.205 55.756 1.00 33.81 N
+ATOM 1290 NH2 ARG A 673 -0.681 17.625 54.429 1.00 34.41 N
+ATOM 1291 N TYR A 674 6.108 12.318 54.095 1.00 9.91 N
+ATOM 1292 CA TYR A 674 6.900 11.109 54.379 1.00 10.14 C
+ATOM 1293 C TYR A 674 8.390 11.389 54.172 1.00 9.98 C
+ATOM 1294 O TYR A 674 9.232 10.950 54.944 1.00 9.86 O
+ATOM 1295 CB TYR A 674 6.497 9.928 53.473 1.00 10.79 C
+ATOM 1296 CG TYR A 674 5.101 9.408 53.667 1.00 11.54 C
+ATOM 1297 CD1 TYR A 674 4.442 9.582 54.876 1.00 13.46 C
+ATOM 1298 CD2 TYR A 674 4.448 8.708 52.645 1.00 12.58 C
+ATOM 1299 CE1 TYR A 674 3.151 9.066 55.071 1.00 13.55 C
+ATOM 1300 CE2 TYR A 674 3.166 8.186 52.828 1.00 12.22 C
+ATOM 1301 CZ TYR A 674 2.536 8.371 54.043 1.00 13.30 C
+ATOM 1302 OH TYR A 674 1.288 7.838 54.271 1.00 15.76 O
+ATOM 1303 N ALA A 675 8.709 12.141 53.118 1.00 8.57 N
+ATOM 1304 CA ALA A 675 10.098 12.455 52.803 1.00 9.05 C
+ATOM 1305 C ALA A 675 10.729 13.338 53.863 1.00 7.95 C
+ATOM 1306 O ALA A 675 11.866 13.094 54.271 1.00 9.48 O
+ATOM 1307 CB ALA A 675 10.177 13.115 51.426 1.00 8.33 C
+ATOM 1308 N ARG A 676 9.997 14.356 54.310 1.00 8.97 N
+ATOM 1309 CA ARG A 676 10.508 15.260 55.338 1.00 10.41 C
+ATOM 1310 C ARG A 676 10.768 14.508 56.653 1.00 12.36 C
+ATOM 1311 O ARG A 676 11.764 14.769 57.328 1.00 13.32 O
+ATOM 1312 CB ARG A 676 9.548 16.412 55.569 1.00 11.14 C
+ATOM 1313 CG ARG A 676 9.974 17.330 56.710 1.00 13.61 C
+ATOM 1314 CD ARG A 676 11.221 18.203 56.350 1.00 15.19 C
+ATOM 1315 NE ARG A 676 10.812 19.506 55.807 1.00 16.85 N
+ATOM 1316 CZ ARG A 676 11.319 20.099 54.716 1.00 17.52 C
+ATOM 1317 NH1 ARG A 676 12.286 19.525 54.017 1.00 15.32 N
+ATOM 1318 NH2 ARG A 676 10.852 21.295 54.340 1.00 17.76 N
+ATOM 1319 N GLU A 677 9.919 13.539 56.979 1.00 13.53 N
+ATOM 1320 CA GLU A 677 10.125 12.759 58.201 1.00 16.22 C
+ATOM 1321 C GLU A 677 11.380 11.872 58.070 1.00 16.73 C
+ATOM 1322 O GLU A 677 12.154 11.722 59.039 1.00 17.17 O
+ATOM 1323 CB GLU A 677 8.917 11.865 58.478 1.00 20.24 C
+ATOM 1324 CG GLU A 677 7.720 12.553 59.115 1.00 27.80 C
+ATOM 1325 CD GLU A 677 6.383 11.760 58.959 1.00 31.77 C
+ATOM 1326 OE1 GLU A 677 6.396 10.520 58.692 1.00 34.00 O
+ATOM 1327 OE2 GLU A 677 5.300 12.405 59.089 1.00 34.87 O
+ATOM 1328 N ALA A 678 11.588 11.286 56.884 1.00 13.74 N
+ATOM 1329 CA ALA A 678 12.717 10.382 56.652 1.00 12.60 C
+ATOM 1330 C ALA A 678 14.079 11.049 56.774 1.00 13.19 C
+ATOM 1331 O ALA A 678 15.025 10.460 57.331 1.00 13.81 O
+ATOM 1332 CB ALA A 678 12.572 9.676 55.294 1.00 11.91 C
+ATOM 1333 N ASP A 679 14.211 12.248 56.208 1.00 12.01 N
+ATOM 1334 CA ASP A 679 15.480 12.969 56.279 1.00 12.89 C
+ATOM 1335 C ASP A 679 15.165 14.463 56.360 1.00 14.91 C
+ATOM 1336 O ASP A 679 15.082 15.151 55.365 1.00 14.07 O
+ATOM 1337 CB ASP A 679 16.376 12.642 55.075 1.00 12.70 C
+ATOM 1338 CG ASP A 679 17.734 13.333 55.151 1.00 12.64 C
+ATOM 1339 OD1 ASP A 679 17.984 14.083 56.108 1.00 13.80 O
+ATOM 1340 OD2 ASP A 679 18.572 13.123 54.261 1.00 13.39 O
+ATOM 1341 N PRO A 680 15.033 14.985 57.576 1.00 16.78 N
+ATOM 1342 CA PRO A 680 14.720 16.401 57.769 1.00 17.32 C
+ATOM 1343 C PRO A 680 15.746 17.403 57.238 1.00 17.31 C
+ATOM 1344 O PRO A 680 15.457 18.595 57.192 1.00 18.58 O
+ATOM 1345 CB PRO A 680 14.531 16.502 59.281 1.00 18.70 C
+ATOM 1346 CG PRO A 680 15.420 15.418 59.820 1.00 18.51 C
+ATOM 1347 CD PRO A 680 15.233 14.286 58.863 1.00 17.07 C
+ATOM 1348 N ASP A 681 16.936 16.937 56.866 1.00 16.83 N
+ATOM 1349 CA ASP A 681 17.977 17.830 56.341 1.00 17.87 C
+ATOM 1350 C ASP A 681 18.019 17.920 54.799 1.00 16.11 C
+ATOM 1351 O ASP A 681 18.700 18.788 54.237 1.00 16.81 O
+ATOM 1352 CB ASP A 681 19.359 17.445 56.891 1.00 20.24 C
+ATOM 1353 CG ASP A 681 19.503 17.731 58.405 1.00 23.69 C
+ATOM 1354 OD1 ASP A 681 18.952 18.745 58.903 1.00 24.92 O
+ATOM 1355 OD2 ASP A 681 20.169 16.925 59.093 1.00 25.53 O
+ATOM 1356 N ALA A 682 17.318 17.014 54.132 1.00 13.26 N
+ATOM 1357 CA ALA A 682 17.284 16.990 52.673 1.00 12.61 C
+ATOM 1358 C ALA A 682 16.392 18.116 52.125 1.00 11.78 C
+ATOM 1359 O ALA A 682 15.383 18.461 52.740 1.00 11.51 O
+ATOM 1360 CB ALA A 682 16.737 15.648 52.196 1.00 12.16 C
+ATOM 1361 N LEU A 683 16.783 18.710 50.994 1.00 10.35 N
+ATOM 1362 CA LEU A 683 15.939 19.714 50.349 1.00 9.46 C
+ATOM 1363 C LEU A 683 15.056 18.890 49.415 1.00 8.12 C
+ATOM 1364 O LEU A 683 15.547 18.129 48.574 1.00 9.20 O
+ATOM 1365 CB LEU A 683 16.763 20.702 49.524 1.00 10.77 C
+ATOM 1366 CG LEU A 683 17.612 21.595 50.414 1.00 13.17 C
+ATOM 1367 CD1 LEU A 683 18.590 22.420 49.536 1.00 13.48 C
+ATOM 1368 CD2 LEU A 683 16.671 22.476 51.285 1.00 14.23 C
+ATOM 1369 N LEU A 684 13.756 19.083 49.534 1.00 6.84 N
+ATOM 1370 CA LEU A 684 12.775 18.312 48.781 1.00 6.89 C
+ATOM 1371 C LEU A 684 12.281 19.076 47.556 1.00 5.32 C
+ATOM 1372 O LEU A 684 11.767 20.188 47.687 1.00 6.16 O
+ATOM 1373 CB LEU A 684 11.598 17.963 49.727 1.00 6.91 C
+ATOM 1374 CG LEU A 684 12.010 17.349 51.079 1.00 7.28 C
+ATOM 1375 CD1 LEU A 684 10.785 17.062 51.844 1.00 8.29 C
+ATOM 1376 CD2 LEU A 684 12.854 16.112 50.873 1.00 7.97 C
+ATOM 1377 N PHE A 685 12.378 18.433 46.400 1.00 5.53 N
+ATOM 1378 CA PHE A 685 11.986 19.027 45.111 1.00 5.54 C
+ATOM 1379 C PHE A 685 10.870 18.310 44.356 1.00 5.42 C
+ATOM 1380 O PHE A 685 10.746 17.085 44.426 1.00 6.80 O
+ATOM 1381 CB PHE A 685 13.180 19.007 44.143 1.00 5.66 C
+ATOM 1382 CG PHE A 685 14.223 20.039 44.434 1.00 6.45 C
+ATOM 1383 CD1 PHE A 685 15.020 19.953 45.571 1.00 7.50 C
+ATOM 1384 CD2 PHE A 685 14.383 21.125 43.586 1.00 7.13 C
+ATOM 1385 CE1 PHE A 685 15.956 20.930 45.876 1.00 8.44 C
+ATOM 1386 CE2 PHE A 685 15.315 22.104 43.887 1.00 9.11 C
+ATOM 1387 CZ PHE A 685 16.104 22.005 45.043 1.00 9.15 C
+ATOM 1388 N TYR A 686 10.107 19.104 43.603 1.00 6.04 N
+ATOM 1389 CA TYR A 686 9.105 18.643 42.648 1.00 6.20 C
+ATOM 1390 C TYR A 686 9.828 18.965 41.315 1.00 6.40 C
+ATOM 1391 O TYR A 686 10.163 20.125 41.076 1.00 7.61 O
+ATOM 1392 CB TYR A 686 7.807 19.436 42.729 1.00 6.67 C
+ATOM 1393 CG TYR A 686 6.907 19.047 41.599 1.00 8.19 C
+ATOM 1394 CD1 TYR A 686 6.213 17.854 41.623 1.00 9.84 C
+ATOM 1395 CD2 TYR A 686 6.846 19.826 40.440 1.00 9.73 C
+ATOM 1396 CE1 TYR A 686 5.481 17.418 40.528 1.00 11.80 C
+ATOM 1397 CE2 TYR A 686 6.116 19.414 39.324 1.00 10.10 C
+ATOM 1398 CZ TYR A 686 5.433 18.199 39.370 1.00 11.40 C
+ATOM 1399 OH TYR A 686 4.745 17.746 38.263 1.00 11.62 O
+ATOM 1400 N ASN A 687 9.999 17.970 40.451 1.00 6.16 N
+ATOM 1401 CA ASN A 687 10.784 18.095 39.209 1.00 6.41 C
+ATOM 1402 C ASN A 687 9.897 17.859 37.988 1.00 7.43 C
+ATOM 1403 O ASN A 687 9.096 16.917 37.981 1.00 8.20 O
+ATOM 1404 CB ASN A 687 11.911 17.055 39.263 1.00 6.42 C
+ATOM 1405 CG ASN A 687 12.938 17.225 38.151 1.00 7.76 C
+ATOM 1406 OD1 ASN A 687 13.545 18.277 38.029 1.00 8.53 O
+ATOM 1407 ND2 ASN A 687 13.186 16.165 37.393 1.00 7.31 N
+ATOM 1408 N ASP A 688 10.016 18.704 36.961 1.00 6.72 N
+ATOM 1409 CA ASP A 688 9.157 18.534 35.774 1.00 6.46 C
+ATOM 1410 C ASP A 688 9.748 19.272 34.568 1.00 6.21 C
+ATOM 1411 O ASP A 688 10.699 20.038 34.716 1.00 6.93 O
+ATOM 1412 CB ASP A 688 7.750 19.082 36.080 1.00 7.72 C
+ATOM 1413 CG ASP A 688 6.619 18.336 35.344 1.00 7.51 C
+ATOM 1414 OD1 ASP A 688 6.851 17.709 34.302 1.00 8.37 O
+ATOM 1415 OD2 ASP A 688 5.464 18.379 35.832 1.00 10.71 O
+ATOM 1416 N TYR A 689 9.175 19.030 33.387 1.00 7.40 N
+ATOM 1417 CA TYR A 689 9.636 19.662 32.136 1.00 8.13 C
+ATOM 1418 C TYR A 689 8.551 20.619 31.620 1.00 8.50 C
+ATOM 1419 O TYR A 689 7.375 20.481 31.967 1.00 8.49 O
+ATOM 1420 CB TYR A 689 9.998 18.590 31.083 1.00 8.55 C
+ATOM 1421 CG TYR A 689 8.839 17.688 30.679 1.00 9.89 C
+ATOM 1422 CD1 TYR A 689 7.969 18.061 29.645 1.00 11.80 C
+ATOM 1423 CD2 TYR A 689 8.589 16.478 31.340 1.00 10.35 C
+ATOM 1424 CE1 TYR A 689 6.876 17.253 29.275 1.00 12.45 C
+ATOM 1425 CE2 TYR A 689 7.502 15.672 30.990 1.00 11.81 C
+ATOM 1426 CZ TYR A 689 6.643 16.070 29.944 1.00 13.40 C
+ATOM 1427 OH TYR A 689 5.550 15.310 29.562 1.00 15.47 O
+ATOM 1428 N ASN A 690 8.939 21.587 30.778 1.00 9.20 N
+ATOM 1429 CA ASN A 690 7.984 22.578 30.230 1.00 10.09 C
+ATOM 1430 C ASN A 690 7.281 23.415 31.301 1.00 9.15 C
+ATOM 1431 O ASN A 690 6.119 23.775 31.142 1.00 10.51 O
+ATOM 1432 CB ASN A 690 6.921 21.943 29.307 1.00 13.59 C
+ATOM 1433 CG ASN A 690 7.503 21.349 28.024 1.00 19.88 C
+ATOM 1434 OD1 ASN A 690 8.661 21.615 27.662 1.00 24.00 O
+ATOM 1435 ND2 ASN A 690 6.709 20.505 27.331 1.00 21.71 N
+ATOM 1436 N ILE A 691 7.991 23.697 32.399 1.00 7.85 N
+ATOM 1437 CA ILE A 691 7.501 24.520 33.504 1.00 8.08 C
+ATOM 1438 C ILE A 691 8.466 25.706 33.794 1.00 8.74 C
+ATOM 1439 O ILE A 691 8.333 26.421 34.818 1.00 9.11 O
+ATOM 1440 CB ILE A 691 7.344 23.698 34.824 1.00 7.49 C
+ATOM 1441 CG1 ILE A 691 8.690 23.112 35.262 1.00 7.88 C
+ATOM 1442 CG2 ILE A 691 6.312 22.605 34.640 1.00 8.47 C
+ATOM 1443 CD1 ILE A 691 8.745 22.706 36.749 1.00 9.41 C
+ATOM 1444 N GLU A 692 9.386 25.950 32.848 1.00 8.29 N
+ATOM 1445 CA GLU A 692 10.415 26.991 33.013 1.00 8.57 C
+ATOM 1446 C GLU A 692 9.985 28.416 32.636 1.00 9.36 C
+ATOM 1447 O GLU A 692 10.504 29.387 33.185 1.00 9.96 O
+ATOM 1448 CB GLU A 692 11.672 26.632 32.209 1.00 8.11 C
+ATOM 1449 CG GLU A 692 12.273 25.273 32.506 1.00 9.28 C
+ATOM 1450 CD GLU A 692 11.681 24.106 31.702 1.00 10.09 C
+ATOM 1451 OE1 GLU A 692 10.704 24.272 30.918 1.00 9.96 O
+ATOM 1452 OE2 GLU A 692 12.219 22.999 31.846 1.00 10.79 O
+ATOM 1453 N ASP A 693 9.034 28.519 31.699 1.00 10.25 N
+ATOM 1454 CA ASP A 693 8.544 29.818 31.221 1.00 10.88 C
+ATOM 1455 C ASP A 693 7.335 30.306 32.025 1.00 11.44 C
+ATOM 1456 O ASP A 693 7.231 30.035 33.230 1.00 10.68 O
+ATOM 1457 CB ASP A 693 8.224 29.741 29.718 1.00 12.00 C
+ATOM 1458 CG ASP A 693 7.124 28.713 29.379 1.00 13.76 C
+ATOM 1459 OD1 ASP A 693 6.433 28.182 30.277 1.00 13.16 O
+ATOM 1460 OD2 ASP A 693 6.950 28.421 28.175 1.00 15.65 O
+ATOM 1461 N LEU A 694 6.462 31.100 31.392 1.00 11.18 N
+ATOM 1462 CA LEU A 694 5.266 31.590 32.086 1.00 11.21 C
+ATOM 1463 C LEU A 694 4.001 31.085 31.388 1.00 10.70 C
+ATOM 1464 O LEU A 694 2.966 31.716 31.446 1.00 12.38 O
+ATOM 1465 CB LEU A 694 5.276 33.117 32.223 1.00 11.87 C
+ATOM 1466 CG LEU A 694 6.448 33.728 33.031 1.00 13.21 C
+ATOM 1467 CD1 LEU A 694 6.543 35.255 32.797 1.00 13.01 C
+ATOM 1468 CD2 LEU A 694 6.319 33.433 34.547 1.00 13.38 C
+ATOM 1469 N GLY A 695 4.108 29.932 30.742 1.00 11.36 N
+ATOM 1470 CA GLY A 695 2.988 29.301 30.055 1.00 11.97 C
+ATOM 1471 C GLY A 695 2.007 28.563 30.976 1.00 11.95 C
+ATOM 1472 O GLY A 695 2.250 28.458 32.177 1.00 10.45 O
+ATOM 1473 N PRO A 696 0.934 27.964 30.427 1.00 12.59 N
+ATOM 1474 CA PRO A 696 -0.049 27.256 31.267 1.00 12.44 C
+ATOM 1475 C PRO A 696 0.463 26.147 32.191 1.00 12.07 C
+ATOM 1476 O PRO A 696 0.079 26.136 33.358 1.00 13.43 O
+ATOM 1477 CB PRO A 696 -1.118 26.773 30.275 1.00 14.05 C
+ATOM 1478 CG PRO A 696 -0.543 26.986 28.910 1.00 15.40 C
+ATOM 1479 CD PRO A 696 0.480 28.082 29.028 1.00 14.21 C
+ATOM 1480 N LYS A 697 1.354 25.273 31.728 1.00 10.48 N
+ATOM 1481 CA LYS A 697 1.850 24.211 32.602 1.00 10.17 C
+ATOM 1482 C LYS A 697 2.710 24.814 33.722 1.00 10.26 C
+ATOM 1483 O LYS A 697 2.646 24.369 34.871 1.00 9.04 O
+ATOM 1484 CB LYS A 697 2.647 23.189 31.810 1.00 9.61 C
+ATOM 1485 CG LYS A 697 2.905 21.906 32.572 1.00 9.66 C
+ATOM 1486 CD LYS A 697 3.831 21.005 31.787 1.00 8.50 C
+ATOM 1487 CE LYS A 697 4.077 19.644 32.484 1.00 8.97 C
+ATOM 1488 NZ LYS A 697 5.049 18.797 31.704 1.00 9.85 N
+ATOM 1489 N SER A 698 3.506 25.839 33.395 1.00 9.18 N
+ATOM 1490 CA SER A 698 4.345 26.512 34.390 1.00 8.89 C
+ATOM 1491 C SER A 698 3.467 27.158 35.469 1.00 9.65 C
+ATOM 1492 O SER A 698 3.768 27.100 36.676 1.00 9.22 O
+ATOM 1493 CB SER A 698 5.183 27.608 33.731 1.00 9.19 C
+ATOM 1494 OG SER A 698 5.788 28.397 34.725 1.00 9.94 O
+ATOM 1495 N ASN A 699 2.399 27.811 35.027 1.00 9.47 N
+ATOM 1496 CA ASN A 699 1.480 28.458 35.957 1.00 10.75 C
+ATOM 1497 C ASN A 699 0.766 27.420 36.847 1.00 10.84 C
+ATOM 1498 O ASN A 699 0.525 27.677 38.036 1.00 12.28 O
+ATOM 1499 CB ASN A 699 0.434 29.292 35.208 1.00 11.64 C
+ATOM 1500 CG ASN A 699 1.020 30.526 34.549 1.00 13.16 C
+ATOM 1501 OD1 ASN A 699 2.094 31.014 34.912 1.00 14.22 O
+ATOM 1502 ND2 ASN A 699 0.305 31.045 33.574 1.00 14.26 N
+ATOM 1503 N ALA A 700 0.418 26.268 36.277 1.00 10.94 N
+ATOM 1504 CA ALA A 700 -0.248 25.201 37.052 1.00 11.45 C
+ATOM 1505 C ALA A 700 0.699 24.681 38.147 1.00 10.06 C
+ATOM 1506 O ALA A 700 0.269 24.489 39.285 1.00 11.58 O
+ATOM 1507 CB ALA A 700 -0.666 24.059 36.141 1.00 11.97 C
+ATOM 1508 N VAL A 701 1.978 24.478 37.824 1.00 8.49 N
+ATOM 1509 CA VAL A 701 2.963 23.995 38.802 1.00 8.74 C
+ATOM 1510 C VAL A 701 3.256 25.039 39.882 1.00 8.75 C
+ATOM 1511 O VAL A 701 3.299 24.709 41.055 1.00 10.08 O
+ATOM 1512 CB VAL A 701 4.258 23.489 38.132 1.00 7.81 C
+ATOM 1513 CG1 VAL A 701 5.328 23.205 39.150 1.00 8.09 C
+ATOM 1514 CG2 VAL A 701 3.981 22.224 37.352 1.00 8.15 C
+ATOM 1515 N PHE A 702 3.402 26.311 39.510 1.00 8.03 N
+ATOM 1516 CA PHE A 702 3.640 27.371 40.488 1.00 8.25 C
+ATOM 1517 C PHE A 702 2.477 27.469 41.499 1.00 8.70 C
+ATOM 1518 O PHE A 702 2.704 27.552 42.702 1.00 8.94 O
+ATOM 1519 CB PHE A 702 3.834 28.733 39.770 1.00 8.60 C
+ATOM 1520 CG PHE A 702 3.889 29.901 40.702 1.00 9.98 C
+ATOM 1521 CD1 PHE A 702 5.054 30.194 41.388 1.00 10.08 C
+ATOM 1522 CD2 PHE A 702 2.748 30.670 40.947 1.00 10.86 C
+ATOM 1523 CE1 PHE A 702 5.077 31.235 42.317 1.00 11.76 C
+ATOM 1524 CE2 PHE A 702 2.766 31.703 41.871 1.00 11.08 C
+ATOM 1525 CZ PHE A 702 3.935 31.983 42.558 1.00 10.61 C
+ATOM 1526 N ASN A 703 1.245 27.475 40.996 1.00 9.83 N
+ATOM 1527 CA ASN A 703 0.071 27.570 41.868 1.00 12.01 C
+ATOM 1528 C ASN A 703 -0.052 26.323 42.747 1.00 12.38 C
+ATOM 1529 O ASN A 703 -0.417 26.445 43.915 1.00 13.72 O
+ATOM 1530 CB ASN A 703 -1.204 27.840 41.077 1.00 14.33 C
+ATOM 1531 CG ASN A 703 -1.307 29.292 40.613 1.00 17.70 C
+ATOM 1532 OD1 ASN A 703 -1.029 30.237 41.367 1.00 20.02 O
+ATOM 1533 ND2 ASN A 703 -1.710 29.476 39.376 1.00 20.46 N
+ATOM 1534 N MET A 704 0.317 25.151 42.212 1.00 11.57 N
+ATOM 1535 CA MET A 704 0.288 23.918 42.988 1.00 11.79 C
+ATOM 1536 C MET A 704 1.266 24.019 44.172 1.00 10.63 C
+ATOM 1537 O MET A 704 0.914 23.738 45.316 1.00 10.64 O
+ATOM 1538 CB MET A 704 0.661 22.714 42.117 1.00 11.85 C
+ATOM 1539 CG MET A 704 0.756 21.410 42.921 1.00 14.76 C
+ATOM 1540 SD MET A 704 1.281 19.965 41.978 1.00 17.19 S
+ATOM 1541 CE MET A 704 2.907 20.349 41.684 1.00 17.42 C
+ATOM 1542 N ILE A 705 2.491 24.447 43.894 1.00 9.25 N
+ATOM 1543 CA ILE A 705 3.506 24.549 44.929 1.00 9.61 C
+ATOM 1544 C ILE A 705 3.175 25.629 45.943 1.00 9.98 C
+ATOM 1545 O ILE A 705 3.331 25.437 47.144 1.00 10.55 O
+ATOM 1546 CB ILE A 705 4.878 24.757 44.286 1.00 9.69 C
+ATOM 1547 CG1 ILE A 705 5.251 23.481 43.525 1.00 9.53 C
+ATOM 1548 CG2 ILE A 705 5.907 25.180 45.330 1.00 9.75 C
+ATOM 1549 CD1 ILE A 705 6.561 23.582 42.784 1.00 9.63 C
+ATOM 1550 N LYS A 706 2.686 26.767 45.462 1.00 10.82 N
+ATOM 1551 CA LYS A 706 2.286 27.851 46.354 1.00 11.64 C
+ATOM 1552 C LYS A 706 1.168 27.356 47.320 1.00 11.68 C
+ATOM 1553 O LYS A 706 1.230 27.593 48.514 1.00 12.32 O
+ATOM 1554 CB LYS A 706 1.803 29.026 45.516 1.00 11.74 C
+ATOM 1555 CG LYS A 706 1.333 30.215 46.303 1.00 14.97 C
+ATOM 1556 CD LYS A 706 0.878 31.242 45.282 1.00 18.19 C
+ATOM 1557 CE LYS A 706 -0.112 32.194 45.863 1.00 23.05 C
+ATOM 1558 NZ LYS A 706 0.573 32.882 46.998 1.00 25.92 N
+ATOM 1559 N SER A 707 0.178 26.648 46.795 1.00 12.04 N
+ATOM 1560 CA SER A 707 -0.917 26.122 47.595 1.00 13.99 C
+ATOM 1561 C SER A 707 -0.433 25.071 48.613 1.00 14.05 C
+ATOM 1562 O SER A 707 -0.876 25.081 49.771 1.00 14.01 O
+ATOM 1563 CB SER A 707 -1.968 25.517 46.679 1.00 16.30 C
+ATOM 1564 OG SER A 707 -3.012 24.929 47.433 1.00 21.95 O
+ATOM 1565 N MET A 708 0.461 24.171 48.192 1.00 13.32 N
+ATOM 1566 CA MET A 708 1.007 23.146 49.089 1.00 13.90 C
+ATOM 1567 C MET A 708 1.652 23.828 50.278 1.00 15.20 C
+ATOM 1568 O MET A 708 1.387 23.458 51.427 1.00 15.09 O
+ATOM 1569 CB MET A 708 2.046 22.270 48.385 1.00 15.29 C
+ATOM 1570 CG MET A 708 1.435 21.182 47.533 1.00 17.98 C
+ATOM 1571 SD MET A 708 2.658 20.366 46.455 1.00 21.36 S
+ATOM 1572 CE MET A 708 3.602 19.453 47.631 1.00 20.26 C
+ATOM 1573 N LYS A 709 2.472 24.849 50.022 1.00 15.53 N
+ATOM 1574 CA LYS A 709 3.114 25.568 51.122 1.00 17.48 C
+ATOM 1575 C LYS A 709 2.109 26.272 52.032 1.00 17.94 C
+ATOM 1576 O LYS A 709 2.305 26.308 53.256 1.00 19.02 O
+ATOM 1577 CB LYS A 709 4.148 26.567 50.615 1.00 18.08 C
+ATOM 1578 CG LYS A 709 5.314 25.903 49.972 1.00 19.52 C
+ATOM 1579 CD LYS A 709 6.443 26.878 49.675 1.00 21.08 C
+ATOM 1580 CE LYS A 709 7.261 27.264 50.912 1.00 22.26 C
+ATOM 1581 NZ LYS A 709 8.206 26.178 51.397 1.00 22.53 N
+ATOM 1582 N GLU A 710 1.045 26.825 51.464 1.00 17.74 N
+ATOM 1583 CA GLU A 710 0.037 27.495 52.282 1.00 20.71 C
+ATOM 1584 C GLU A 710 -0.728 26.526 53.173 1.00 20.14 C
+ATOM 1585 O GLU A 710 -1.434 26.958 54.073 1.00 20.13 O
+ATOM 1586 CB GLU A 710 -0.984 28.224 51.432 1.00 22.49 C
+ATOM 1587 CG GLU A 710 -0.449 29.431 50.780 1.00 26.82 C
+ATOM 1588 CD GLU A 710 -1.500 30.127 49.937 1.00 29.66 C
+ATOM 1589 OE1 GLU A 710 -2.505 29.496 49.509 1.00 30.93 O
+ATOM 1590 OE2 GLU A 710 -1.316 31.332 49.715 1.00 32.59 O
+ATOM 1591 N ARG A 711 -0.649 25.236 52.861 1.00 19.44 N
+ATOM 1592 CA ARG A 711 -1.330 24.206 53.632 1.00 20.20 C
+ATOM 1593 C ARG A 711 -0.358 23.443 54.524 1.00 19.06 C
+ATOM 1594 O ARG A 711 -0.668 22.354 54.992 1.00 19.95 O
+ATOM 1595 CB ARG A 711 -2.051 23.252 52.680 1.00 22.22 C
+ATOM 1596 CG ARG A 711 -2.986 23.996 51.742 1.00 25.57 C
+ATOM 1597 CD ARG A 711 -3.803 23.092 50.817 1.00 26.84 C
+ATOM 1598 NE ARG A 711 -3.072 22.501 49.675 1.00 27.16 N
+ATOM 1599 CZ ARG A 711 -2.594 21.262 49.684 1.00 26.18 C
+ATOM 1600 NH1 ARG A 711 -2.713 20.556 50.793 1.00 26.12 N
+ATOM 1601 NH2 ARG A 711 -1.963 20.754 48.629 1.00 25.60 N
+ATOM 1602 N GLY A 712 0.844 23.975 54.692 1.00 17.78 N
+ATOM 1603 CA GLY A 712 1.847 23.325 55.526 1.00 17.90 C
+ATOM 1604 C GLY A 712 2.567 22.080 55.000 1.00 17.74 C
+ATOM 1605 O GLY A 712 3.190 21.354 55.780 1.00 18.91 O
+ATOM 1606 N VAL A 713 2.474 21.804 53.701 1.00 15.00 N
+ATOM 1607 CA VAL A 713 3.162 20.654 53.125 1.00 14.56 C
+ATOM 1608 C VAL A 713 4.623 21.060 52.938 1.00 14.23 C
+ATOM 1609 O VAL A 713 4.912 22.100 52.332 1.00 14.84 O
+ATOM 1610 CB VAL A 713 2.567 20.271 51.748 1.00 13.68 C
+ATOM 1611 CG1 VAL A 713 3.349 19.121 51.117 1.00 14.30 C
+ATOM 1612 CG2 VAL A 713 1.119 19.932 51.896 1.00 14.43 C
+ATOM 1613 N PRO A 714 5.568 20.229 53.408 1.00 14.38 N
+ATOM 1614 CA PRO A 714 7.002 20.553 53.271 1.00 14.68 C
+ATOM 1615 C PRO A 714 7.576 20.378 51.865 1.00 15.27 C
+ATOM 1616 O PRO A 714 7.753 19.259 51.401 1.00 18.74 O
+ATOM 1617 CB PRO A 714 7.688 19.598 54.269 1.00 15.08 C
+ATOM 1618 CG PRO A 714 6.744 18.384 54.259 1.00 14.97 C
+ATOM 1619 CD PRO A 714 5.346 18.979 54.174 1.00 14.39 C
+ATOM 1620 N ILE A 715 7.764 21.474 51.153 1.00 13.07 N
+ATOM 1621 CA ILE A 715 8.377 21.410 49.837 1.00 11.14 C
+ATOM 1622 C ILE A 715 9.371 22.579 49.796 1.00 10.94 C
+ATOM 1623 O ILE A 715 9.046 23.710 50.203 1.00 11.71 O
+ATOM 1624 CB ILE A 715 7.348 21.415 48.674 1.00 11.59 C
+ATOM 1625 CG1 ILE A 715 8.103 21.491 47.339 1.00 12.65 C
+ATOM 1626 CG2 ILE A 715 6.326 22.510 48.832 1.00 11.98 C
+ATOM 1627 CD1 ILE A 715 7.287 21.084 46.141 1.00 14.79 C
+ATOM 1628 N ASP A 716 10.607 22.293 49.412 1.00 8.69 N
+ATOM 1629 CA ASP A 716 11.644 23.324 49.401 1.00 8.51 C
+ATOM 1630 C ASP A 716 11.998 23.904 48.026 1.00 8.98 C
+ATOM 1631 O ASP A 716 12.384 25.075 47.932 1.00 9.98 O
+ATOM 1632 CB ASP A 716 12.947 22.778 50.008 1.00 8.70 C
+ATOM 1633 CG ASP A 716 12.749 22.165 51.399 1.00 9.89 C
+ATOM 1634 OD1 ASP A 716 12.381 22.911 52.322 1.00 12.40 O
+ATOM 1635 OD2 ASP A 716 12.971 20.959 51.564 1.00 9.71 O
+ATOM 1636 N GLY A 717 11.941 23.071 46.991 1.00 7.84 N
+ATOM 1637 CA GLY A 717 12.349 23.542 45.684 1.00 7.82 C
+ATOM 1638 C GLY A 717 11.608 22.999 44.490 1.00 8.89 C
+ATOM 1639 O GLY A 717 10.743 22.106 44.608 1.00 7.90 O
+ATOM 1640 N VAL A 718 11.851 23.630 43.337 1.00 7.48 N
+ATOM 1641 CA VAL A 718 11.249 23.190 42.090 1.00 7.38 C
+ATOM 1642 C VAL A 718 12.404 22.899 41.125 1.00 6.95 C
+ATOM 1643 O VAL A 718 13.389 23.641 41.087 1.00 6.87 O
+ATOM 1644 CB VAL A 718 10.248 24.250 41.482 1.00 8.29 C
+ATOM 1645 CG1 VAL A 718 10.941 25.558 41.143 1.00 8.18 C
+ATOM 1646 CG2 VAL A 718 9.553 23.657 40.241 1.00 7.69 C
+ATOM 1647 N GLY A 719 12.335 21.759 40.463 1.00 5.91 N
+ATOM 1648 CA GLY A 719 13.366 21.375 39.524 1.00 5.41 C
+ATOM 1649 C GLY A 719 12.921 21.629 38.101 1.00 5.85 C
+ATOM 1650 O GLY A 719 11.891 21.110 37.661 1.00 6.86 O
+ATOM 1651 N PHE A 720 13.635 22.524 37.422 1.00 6.00 N
+ATOM 1652 CA PHE A 720 13.355 22.836 36.001 1.00 6.51 C
+ATOM 1653 C PHE A 720 14.225 21.848 35.184 1.00 5.39 C
+ATOM 1654 O PHE A 720 15.464 21.978 35.170 1.00 6.21 O
+ATOM 1655 CB PHE A 720 13.806 24.275 35.649 1.00 7.21 C
+ATOM 1656 CG PHE A 720 12.917 25.392 36.162 1.00 7.00 C
+ATOM 1657 CD1 PHE A 720 11.830 25.166 37.016 1.00 6.87 C
+ATOM 1658 CD2 PHE A 720 13.211 26.707 35.797 1.00 7.42 C
+ATOM 1659 CE1 PHE A 720 11.071 26.216 37.481 1.00 7.71 C
+ATOM 1660 CE2 PHE A 720 12.454 27.767 36.262 1.00 8.09 C
+ATOM 1661 CZ PHE A 720 11.380 27.532 37.104 1.00 8.65 C
+ATOM 1662 N GLN A 721 13.618 20.896 34.480 1.00 6.48 N
+ATOM 1663 CA GLN A 721 14.425 19.919 33.719 1.00 6.29 C
+ATOM 1664 C GLN A 721 15.273 20.559 32.622 1.00 6.69 C
+ATOM 1665 O GLN A 721 16.376 20.105 32.364 1.00 7.22 O
+ATOM 1666 CB GLN A 721 13.573 18.806 33.140 1.00 6.47 C
+ATOM 1667 CG GLN A 721 13.098 17.817 34.207 1.00 7.05 C
+ATOM 1668 CD GLN A 721 12.237 16.706 33.603 1.00 9.40 C
+ATOM 1669 OE1 GLN A 721 12.263 16.467 32.382 1.00 9.61 O
+ATOM 1670 NE2 GLN A 721 11.510 15.984 34.450 1.00 8.66 N
+ATOM 1671 N CYS A 722 14.752 21.614 32.001 1.00 6.63 N
+ATOM 1672 CA CYS A 722 15.479 22.324 30.946 1.00 7.18 C
+ATOM 1673 C CYS A 722 15.826 21.490 29.697 1.00 7.03 C
+ATOM 1674 O CYS A 722 16.964 21.523 29.229 1.00 7.82 O
+ATOM 1675 CB CYS A 722 16.737 23.016 31.503 1.00 7.45 C
+ATOM 1676 SG CYS A 722 16.407 24.311 32.709 1.00 9.11 S
+ATOM 1677 N HIS A 723 14.857 20.733 29.186 1.00 6.91 N
+ATOM 1678 CA HIS A 723 15.068 19.963 27.945 1.00 7.96 C
+ATOM 1679 C HIS A 723 14.607 20.926 26.842 1.00 9.02 C
+ATOM 1680 O HIS A 723 13.426 20.976 26.492 1.00 10.63 O
+ATOM 1681 CB HIS A 723 14.247 18.665 27.956 1.00 8.58 C
+ATOM 1682 CG HIS A 723 14.747 17.659 28.951 1.00 7.86 C
+ATOM 1683 ND1 HIS A 723 16.022 17.139 28.910 1.00 7.88 N
+ATOM 1684 CD2 HIS A 723 14.144 17.085 30.020 1.00 8.64 C
+ATOM 1685 CE1 HIS A 723 16.187 16.286 29.910 1.00 8.80 C
+ATOM 1686 NE2 HIS A 723 15.061 16.238 30.598 1.00 8.02 N
+ATOM 1687 N PHE A 724 15.555 21.739 26.377 1.00 9.16 N
+ATOM 1688 CA PHE A 724 15.308 22.800 25.394 1.00 9.17 C
+ATOM 1689 C PHE A 724 15.734 22.499 23.973 1.00 10.13 C
+ATOM 1690 O PHE A 724 16.539 21.622 23.731 1.00 9.08 O
+ATOM 1691 CB PHE A 724 16.047 24.064 25.834 1.00 10.08 C
+ATOM 1692 CG PHE A 724 15.597 24.621 27.170 1.00 10.27 C
+ATOM 1693 CD1 PHE A 724 14.243 24.799 27.461 1.00 10.77 C
+ATOM 1694 CD2 PHE A 724 16.547 25.040 28.116 1.00 11.48 C
+ATOM 1695 CE1 PHE A 724 13.846 25.395 28.673 1.00 10.84 C
+ATOM 1696 CE2 PHE A 724 16.144 25.640 29.325 1.00 10.76 C
+ATOM 1697 CZ PHE A 724 14.793 25.809 29.587 1.00 10.35 C
+ATOM 1698 N ILE A 725 15.185 23.262 23.026 1.00 10.65 N
+ATOM 1699 CA ILE A 725 15.577 23.106 21.617 1.00 11.34 C
+ATOM 1700 C ILE A 725 16.550 24.246 21.268 1.00 9.92 C
+ATOM 1701 O ILE A 725 16.368 25.377 21.709 1.00 11.49 O
+ATOM 1702 CB ILE A 725 14.363 23.170 20.682 1.00 12.48 C
+ATOM 1703 CG1 ILE A 725 13.355 22.092 21.084 1.00 12.82 C
+ATOM 1704 CG2 ILE A 725 14.812 22.917 19.222 1.00 14.06 C
+ATOM 1705 CD1 ILE A 725 12.065 22.164 20.322 1.00 15.03 C
+ATOM 1706 N ASN A 726 17.570 23.943 20.484 1.00 10.22 N
+ATOM 1707 CA ASN A 726 18.577 24.928 20.077 1.00 10.99 C
+ATOM 1708 C ASN A 726 17.933 26.161 19.430 1.00 12.01 C
+ATOM 1709 O ASN A 726 16.992 26.033 18.636 1.00 11.87 O
+ATOM 1710 CB ASN A 726 19.500 24.282 19.050 1.00 12.13 C
+ATOM 1711 CG ASN A 726 20.780 25.037 18.862 1.00 13.79 C
+ATOM 1712 OD1 ASN A 726 21.349 25.545 19.824 1.00 15.17 O
+ATOM 1713 ND2 ASN A 726 21.281 25.074 17.634 1.00 14.93 N
+ATOM 1714 N GLY A 727 18.437 27.338 19.792 1.00 12.05 N
+ATOM 1715 CA GLY A 727 17.932 28.580 19.227 1.00 13.30 C
+ATOM 1716 C GLY A 727 16.927 29.341 20.074 1.00 14.89 C
+ATOM 1717 O GLY A 727 16.031 30.033 19.555 1.00 14.54 O
+ATOM 1718 N MET A 728 17.073 29.223 21.390 1.00 14.42 N
+ATOM 1719 CA MET A 728 16.201 29.913 22.331 1.00 15.58 C
+ATOM 1720 C MET A 728 16.256 31.426 22.104 1.00 15.24 C
+ATOM 1721 O MET A 728 17.348 32.004 21.985 1.00 14.97 O
+ATOM 1722 CB MET A 728 16.664 29.604 23.753 1.00 16.45 C
+ATOM 1723 CG MET A 728 16.601 28.107 24.080 1.00 18.91 C
+ATOM 1724 SD MET A 728 17.374 27.774 25.678 1.00 22.09 S
+ATOM 1725 CE MET A 728 16.084 28.274 26.690 1.00 20.27 C
+ATOM 1726 N SER A 729 15.088 32.061 22.096 1.00 14.74 N
+ATOM 1727 CA SER A 729 14.999 33.503 21.905 1.00 14.15 C
+ATOM 1728 C SER A 729 15.254 34.291 23.205 1.00 15.12 C
+ATOM 1729 O SER A 729 15.138 33.747 24.321 1.00 14.00 O
+ATOM 1730 CB SER A 729 13.620 33.855 21.353 1.00 15.54 C
+ATOM 1731 OG SER A 729 12.604 33.702 22.338 1.00 16.55 O
+ATOM 1732 N PRO A 730 15.612 35.588 23.090 1.00 14.41 N
+ATOM 1733 CA PRO A 730 15.857 36.381 24.304 1.00 14.54 C
+ATOM 1734 C PRO A 730 14.575 36.524 25.128 1.00 13.63 C
+ATOM 1735 O PRO A 730 14.626 36.617 26.343 1.00 14.91 O
+ATOM 1736 CB PRO A 730 16.294 37.744 23.753 1.00 14.78 C
+ATOM 1737 CG PRO A 730 16.946 37.388 22.469 1.00 15.50 C
+ATOM 1738 CD PRO A 730 16.029 36.333 21.885 1.00 15.01 C
+ATOM 1739 N GLU A 731 13.424 36.550 24.460 1.00 12.95 N
+ATOM 1740 CA GLU A 731 12.166 36.704 25.163 1.00 13.41 C
+ATOM 1741 C GLU A 731 11.867 35.449 25.969 1.00 13.56 C
+ATOM 1742 O GLU A 731 11.321 35.555 27.072 1.00 12.86 O
+ATOM 1743 CB GLU A 731 11.014 36.993 24.197 1.00 14.37 C
+ATOM 1744 CG GLU A 731 11.112 38.340 23.514 1.00 16.83 C
+ATOM 1745 CD GLU A 731 12.227 38.391 22.486 1.00 17.61 C
+ATOM 1746 OE1 GLU A 731 12.365 37.429 21.693 1.00 18.03 O
+ATOM 1747 OE2 GLU A 731 12.977 39.391 22.480 1.00 20.27 O
+ATOM 1748 N TYR A 732 12.209 34.283 25.411 1.00 12.17 N
+ATOM 1749 CA TYR A 732 11.981 33.014 26.103 1.00 12.92 C
+ATOM 1750 C TYR A 732 12.865 33.004 27.343 1.00 12.17 C
+ATOM 1751 O TYR A 732 12.381 32.765 28.462 1.00 11.37 O
+ATOM 1752 CB TYR A 732 12.324 31.833 25.209 1.00 14.49 C
+ATOM 1753 CG TYR A 732 12.007 30.506 25.844 1.00 17.56 C
+ATOM 1754 CD1 TYR A 732 10.685 30.124 26.074 1.00 18.67 C
+ATOM 1755 CD2 TYR A 732 13.014 29.615 26.170 1.00 19.20 C
+ATOM 1756 CE1 TYR A 732 10.364 28.878 26.601 1.00 20.39 C
+ATOM 1757 CE2 TYR A 732 12.706 28.351 26.700 1.00 20.78 C
+ATOM 1758 CZ TYR A 732 11.378 27.992 26.903 1.00 21.47 C
+ATOM 1759 OH TYR A 732 11.058 26.709 27.335 1.00 23.93 O
+ATOM 1760 N LEU A 733 14.144 33.316 27.150 1.00 10.29 N
+ATOM 1761 CA LEU A 733 15.088 33.359 28.252 1.00 10.72 C
+ATOM 1762 C LEU A 733 14.633 34.371 29.299 1.00 11.53 C
+ATOM 1763 O LEU A 733 14.713 34.125 30.501 1.00 10.74 O
+ATOM 1764 CB LEU A 733 16.506 33.642 27.732 1.00 11.69 C
+ATOM 1765 CG LEU A 733 17.125 32.469 26.932 1.00 14.05 C
+ATOM 1766 CD1 LEU A 733 18.189 32.972 25.957 1.00 16.04 C
+ATOM 1767 CD2 LEU A 733 17.747 31.412 27.856 1.00 14.26 C
+ATOM 1768 N ALA A 734 14.098 35.502 28.865 1.00 11.51 N
+ATOM 1769 CA ALA A 734 13.620 36.497 29.813 1.00 11.63 C
+ATOM 1770 C ALA A 734 12.457 35.945 30.658 1.00 11.52 C
+ATOM 1771 O ALA A 734 12.327 36.296 31.846 1.00 12.87 O
+ATOM 1772 CB ALA A 734 13.171 37.789 29.070 1.00 11.61 C
+ATOM 1773 N SER A 735 11.596 35.111 30.064 1.00 11.63 N
+ATOM 1774 CA SER A 735 10.451 34.557 30.813 1.00 10.39 C
+ATOM 1775 C SER A 735 10.890 33.548 31.896 1.00 9.87 C
+ATOM 1776 O SER A 735 10.290 33.487 32.963 1.00 10.17 O
+ATOM 1777 CB SER A 735 9.376 33.993 29.877 1.00 11.08 C
+ATOM 1778 OG SER A 735 9.739 32.755 29.333 1.00 14.25 O
+ATOM 1779 N ILE A 736 11.975 32.833 31.641 1.00 9.66 N
+ATOM 1780 CA ILE A 736 12.531 31.879 32.616 1.00 9.50 C
+ATOM 1781 C ILE A 736 13.033 32.674 33.826 1.00 9.64 C
+ATOM 1782 O ILE A 736 12.774 32.307 34.967 1.00 9.94 O
+ATOM 1783 CB ILE A 736 13.686 31.056 32.015 1.00 9.03 C
+ATOM 1784 CG1 ILE A 736 13.177 30.219 30.832 1.00 10.43 C
+ATOM 1785 CG2 ILE A 736 14.319 30.135 33.090 1.00 10.72 C
+ATOM 1786 CD1 ILE A 736 14.275 29.454 30.087 1.00 10.09 C
+ATOM 1787 N ASP A 737 13.739 33.780 33.583 1.00 9.65 N
+ATOM 1788 CA ASP A 737 14.243 34.625 34.685 1.00 10.27 C
+ATOM 1789 C ASP A 737 13.081 35.164 35.560 1.00 10.28 C
+ATOM 1790 O ASP A 737 13.150 35.132 36.789 1.00 10.54 O
+ATOM 1791 CB ASP A 737 15.073 35.798 34.128 1.00 10.75 C
+ATOM 1792 CG ASP A 737 15.670 36.652 35.224 1.00 10.69 C
+ATOM 1793 OD1 ASP A 737 16.738 36.291 35.738 1.00 12.30 O
+ATOM 1794 OD2 ASP A 737 15.059 37.670 35.598 1.00 13.00 O
+ATOM 1795 N GLN A 738 12.012 35.650 34.934 1.00 9.97 N
+ATOM 1796 CA GLN A 738 10.874 36.163 35.677 1.00 11.34 C
+ATOM 1797 C GLN A 738 10.212 35.022 36.483 1.00 10.08 C
+ATOM 1798 O GLN A 738 9.726 35.237 37.586 1.00 10.31 O
+ATOM 1799 CB GLN A 738 9.842 36.758 34.718 1.00 14.24 C
+ATOM 1800 CG GLN A 738 10.231 38.127 34.181 1.00 20.66 C
+ATOM 1801 CD GLN A 738 9.590 38.453 32.821 1.00 24.70 C
+ATOM 1802 OE1 GLN A 738 8.395 38.203 32.588 1.00 26.26 O
+ATOM 1803 NE2 GLN A 738 10.398 39.024 31.909 1.00 27.40 N
+ATOM 1804 N ASN A 739 10.145 33.836 35.898 1.00 9.32 N
+ATOM 1805 CA ASN A 739 9.543 32.695 36.597 1.00 8.40 C
+ATOM 1806 C ASN A 739 10.381 32.378 37.860 1.00 8.50 C
+ATOM 1807 O ASN A 739 9.824 32.153 38.945 1.00 9.11 O
+ATOM 1808 CB ASN A 739 9.478 31.493 35.653 1.00 8.44 C
+ATOM 1809 CG ASN A 739 8.581 30.398 36.175 1.00 7.63 C
+ATOM 1810 OD1 ASN A 739 7.634 30.661 36.884 1.00 9.79 O
+ATOM 1811 ND2 ASN A 739 8.875 29.165 35.808 1.00 9.40 N
+ATOM 1812 N ILE A 740 11.710 32.437 37.757 1.00 7.69 N
+ATOM 1813 CA ILE A 740 12.579 32.167 38.913 1.00 8.67 C
+ATOM 1814 C ILE A 740 12.304 33.186 40.031 1.00 9.03 C
+ATOM 1815 O ILE A 740 12.253 32.840 41.224 1.00 8.32 O
+ATOM 1816 CB ILE A 740 14.093 32.142 38.509 1.00 8.06 C
+ATOM 1817 CG1 ILE A 740 14.366 30.959 37.577 1.00 8.35 C
+ATOM 1818 CG2 ILE A 740 15.008 32.055 39.733 1.00 9.48 C
+ATOM 1819 CD1 ILE A 740 15.774 30.946 37.015 1.00 9.87 C
+ATOM 1820 N LYS A 741 12.091 34.444 39.646 1.00 8.37 N
+ATOM 1821 CA LYS A 741 11.809 35.507 40.604 1.00 9.50 C
+ATOM 1822 C LYS A 741 10.488 35.297 41.336 1.00 8.92 C
+ATOM 1823 O LYS A 741 10.428 35.558 42.540 1.00 9.78 O
+ATOM 1824 CB LYS A 741 11.887 36.907 39.926 1.00 9.95 C
+ATOM 1825 CG LYS A 741 13.357 37.322 39.686 1.00 11.53 C
+ATOM 1826 CD LYS A 741 13.500 38.544 38.802 1.00 12.32 C
+ATOM 1827 CE LYS A 741 14.943 39.055 38.804 1.00 11.94 C
+ATOM 1828 NZ LYS A 741 15.930 38.097 38.264 1.00 12.61 N
+ATOM 1829 N ARG A 742 9.443 34.812 40.656 1.00 9.44 N
+ATOM 1830 CA ARG A 742 8.182 34.571 41.363 1.00 10.41 C
+ATOM 1831 C ARG A 742 8.317 33.402 42.359 1.00 9.74 C
+ATOM 1832 O ARG A 742 7.667 33.415 43.413 1.00 10.33 O
+ATOM 1833 CB ARG A 742 6.963 34.450 40.446 1.00 10.94 C
+ATOM 1834 CG ARG A 742 6.922 33.285 39.555 1.00 11.90 C
+ATOM 1835 CD ARG A 742 5.526 33.180 38.932 1.00 12.49 C
+ATOM 1836 NE ARG A 742 5.488 32.060 37.992 1.00 12.11 N
+ATOM 1837 CZ ARG A 742 4.447 31.706 37.250 1.00 10.78 C
+ATOM 1838 NH1 ARG A 742 3.314 32.394 37.295 1.00 12.10 N
+ATOM 1839 NH2 ARG A 742 4.559 30.663 36.453 1.00 10.93 N
+ATOM 1840 N TYR A 743 9.172 32.423 42.063 1.00 8.16 N
+ATOM 1841 CA TYR A 743 9.404 31.335 43.033 1.00 8.67 C
+ATOM 1842 C TYR A 743 10.127 31.902 44.265 1.00 8.17 C
+ATOM 1843 O TYR A 743 9.817 31.545 45.394 1.00 8.53 O
+ATOM 1844 CB TYR A 743 10.184 30.159 42.409 1.00 7.56 C
+ATOM 1845 CG TYR A 743 9.268 29.164 41.708 1.00 7.73 C
+ATOM 1846 CD1 TYR A 743 8.431 28.306 42.452 1.00 8.22 C
+ATOM 1847 CD2 TYR A 743 9.228 29.065 40.309 1.00 7.98 C
+ATOM 1848 CE1 TYR A 743 7.584 27.384 41.819 1.00 7.96 C
+ATOM 1849 CE2 TYR A 743 8.388 28.143 39.657 1.00 7.98 C
+ATOM 1850 CZ TYR A 743 7.566 27.307 40.418 1.00 8.03 C
+ATOM 1851 OH TYR A 743 6.721 26.429 39.798 1.00 8.50 O
+ATOM 1852 N ALA A 744 11.065 32.830 44.062 1.00 8.89 N
+ATOM 1853 CA ALA A 744 11.780 33.454 45.197 1.00 9.08 C
+ATOM 1854 C ALA A 744 10.778 34.189 46.108 1.00 9.30 C
+ATOM 1855 O ALA A 744 10.910 34.163 47.335 1.00 10.34 O
+ATOM 1856 CB ALA A 744 12.856 34.443 44.692 1.00 9.52 C
+ATOM 1857 N GLU A 745 9.750 34.795 45.512 1.00 9.74 N
+ATOM 1858 CA GLU A 745 8.760 35.514 46.313 1.00 12.57 C
+ATOM 1859 C GLU A 745 7.935 34.624 47.237 1.00 12.31 C
+ATOM 1860 O GLU A 745 7.335 35.126 48.185 1.00 13.74 O
+ATOM 1861 CB GLU A 745 7.857 36.367 45.452 1.00 15.49 C
+ATOM 1862 CG GLU A 745 8.595 37.519 44.878 1.00 19.73 C
+ATOM 1863 CD GLU A 745 7.738 38.385 43.995 1.00 24.14 C
+ATOM 1864 OE1 GLU A 745 6.619 37.956 43.603 1.00 26.03 O
+ATOM 1865 OE2 GLU A 745 8.211 39.497 43.668 1.00 27.16 O
+ATOM 1866 N ILE A 746 7.852 33.331 46.913 1.00 11.37 N
+ATOM 1867 CA ILE A 746 7.152 32.380 47.764 1.00 12.11 C
+ATOM 1868 C ILE A 746 8.157 31.507 48.551 1.00 11.57 C
+ATOM 1869 O ILE A 746 7.788 30.484 49.128 1.00 12.25 O
+ATOM 1870 CB ILE A 746 6.091 31.519 47.000 1.00 11.99 C
+ATOM 1871 CG1 ILE A 746 6.704 30.659 45.881 1.00 11.66 C
+ATOM 1872 CG2 ILE A 746 5.039 32.431 46.417 1.00 12.97 C
+ATOM 1873 CD1 ILE A 746 5.783 29.522 45.413 1.00 12.87 C
+ATOM 1874 N GLY A 747 9.422 31.918 48.540 1.00 10.61 N
+ATOM 1875 CA GLY A 747 10.471 31.223 49.273 1.00 10.70 C
+ATOM 1876 C GLY A 747 10.912 29.867 48.761 1.00 10.93 C
+ATOM 1877 O GLY A 747 11.399 29.056 49.533 1.00 12.96 O
+ATOM 1878 N VAL A 748 10.796 29.633 47.462 1.00 9.21 N
+ATOM 1879 CA VAL A 748 11.167 28.354 46.876 1.00 8.85 C
+ATOM 1880 C VAL A 748 12.458 28.482 46.075 1.00 9.01 C
+ATOM 1881 O VAL A 748 12.658 29.465 45.373 1.00 10.42 O
+ATOM 1882 CB VAL A 748 9.987 27.831 45.994 1.00 8.85 C
+ATOM 1883 CG1 VAL A 748 10.383 26.626 45.188 1.00 8.99 C
+ATOM 1884 CG2 VAL A 748 8.798 27.486 46.888 1.00 9.07 C
+ATOM 1885 N ILE A 749 13.357 27.520 46.222 1.00 8.82 N
+ATOM 1886 CA ILE A 749 14.599 27.534 45.471 1.00 9.05 C
+ATOM 1887 C ILE A 749 14.389 26.756 44.165 1.00 8.37 C
+ATOM 1888 O ILE A 749 13.512 25.889 44.052 1.00 7.65 O
+ATOM 1889 CB ILE A 749 15.763 26.936 46.256 1.00 12.03 C
+ATOM 1890 CG1 ILE A 749 15.482 25.511 46.622 1.00 12.82 C
+ATOM 1891 CG2 ILE A 749 16.044 27.765 47.505 1.00 11.65 C
+ATOM 1892 CD1 ILE A 749 16.743 24.794 47.035 1.00 17.15 C
+ATOM 1893 N VAL A 750 15.176 27.114 43.160 1.00 7.77 N
+ATOM 1894 CA VAL A 750 15.078 26.510 41.841 1.00 7.23 C
+ATOM 1895 C VAL A 750 16.383 25.831 41.467 1.00 6.52 C
+ATOM 1896 O VAL A 750 17.459 26.385 41.704 1.00 8.27 O
+ATOM 1897 CB VAL A 750 14.802 27.636 40.764 1.00 6.96 C
+ATOM 1898 CG1 VAL A 750 14.816 27.041 39.329 1.00 8.40 C
+ATOM 1899 CG2 VAL A 750 13.488 28.351 41.048 1.00 6.84 C
+ATOM 1900 N SER A 751 16.293 24.615 40.930 1.00 6.22 N
+ATOM 1901 CA SER A 751 17.477 23.917 40.406 1.00 5.59 C
+ATOM 1902 C SER A 751 17.241 23.594 38.934 1.00 6.21 C
+ATOM 1903 O SER A 751 16.122 23.261 38.573 1.00 6.81 O
+ATOM 1904 CB SER A 751 17.750 22.578 41.124 1.00 7.03 C
+ATOM 1905 OG SER A 751 18.212 22.811 42.441 1.00 7.94 O
+ATOM 1906 N PHE A 752 18.279 23.742 38.095 1.00 6.21 N
+ATOM 1907 CA PHE A 752 18.195 23.348 36.677 1.00 7.09 C
+ATOM 1908 C PHE A 752 18.702 21.895 36.792 1.00 6.86 C
+ATOM 1909 O PHE A 752 19.855 21.659 37.111 1.00 6.50 O
+ATOM 1910 CB PHE A 752 19.137 24.203 35.792 1.00 7.61 C
+ATOM 1911 CG PHE A 752 18.696 25.669 35.606 1.00 8.76 C
+ATOM 1912 CD1 PHE A 752 17.445 26.127 36.025 1.00 9.00 C
+ATOM 1913 CD2 PHE A 752 19.561 26.581 34.997 1.00 9.90 C
+ATOM 1914 CE1 PHE A 752 17.064 27.462 35.850 1.00 9.69 C
+ATOM 1915 CE2 PHE A 752 19.181 27.929 34.818 1.00 10.82 C
+ATOM 1916 CZ PHE A 752 17.938 28.361 35.243 1.00 10.74 C
+ATOM 1917 N THR A 753 17.848 20.926 36.480 1.00 6.16 N
+ATOM 1918 CA THR A 753 18.166 19.528 36.756 1.00 5.84 C
+ATOM 1919 C THR A 753 18.536 18.553 35.668 1.00 6.58 C
+ATOM 1920 O THR A 753 19.174 17.548 35.962 1.00 7.31 O
+ATOM 1921 CB THR A 753 16.964 18.878 37.536 1.00 6.41 C
+ATOM 1922 OG1 THR A 753 15.771 19.004 36.746 1.00 7.44 O
+ATOM 1923 CG2 THR A 753 16.726 19.587 38.890 1.00 6.23 C
+ATOM 1924 N GLU A 754 18.147 18.810 34.416 1.00 5.61 N
+ATOM 1925 CA GLU A 754 18.435 17.862 33.360 1.00 5.74 C
+ATOM 1926 C GLU A 754 18.690 18.610 32.051 1.00 6.79 C
+ATOM 1927 O GLU A 754 18.256 18.154 30.979 1.00 7.27 O
+ATOM 1928 CB GLU A 754 17.229 16.915 33.166 1.00 6.30 C
+ATOM 1929 CG GLU A 754 16.721 16.238 34.492 1.00 6.93 C
+ATOM 1930 CD GLU A 754 15.569 15.281 34.278 1.00 8.49 C
+ATOM 1931 OE1 GLU A 754 15.212 14.988 33.108 1.00 7.83 O
+ATOM 1932 OE2 GLU A 754 15.006 14.805 35.308 1.00 8.93 O
+ATOM 1933 N ILE A 755 19.488 19.664 32.126 1.00 6.12 N
+ATOM 1934 CA ILE A 755 19.721 20.492 30.942 1.00 6.47 C
+ATOM 1935 C ILE A 755 20.317 19.793 29.738 1.00 6.37 C
+ATOM 1936 O ILE A 755 21.288 19.049 29.835 1.00 6.40 O
+ATOM 1937 CB ILE A 755 20.709 21.645 31.207 1.00 6.90 C
+ATOM 1938 CG1 ILE A 755 20.310 22.480 32.421 1.00 6.34 C
+ATOM 1939 CG2 ILE A 755 20.781 22.545 29.944 1.00 7.30 C
+ATOM 1940 CD1 ILE A 755 21.484 23.255 32.969 1.00 8.29 C
+ATOM 1941 N ASP A 756 19.664 19.993 28.599 1.00 6.80 N
+ATOM 1942 CA ASP A 756 20.233 19.558 27.313 1.00 7.73 C
+ATOM 1943 C ASP A 756 19.607 20.463 26.250 1.00 7.57 C
+ATOM 1944 O ASP A 756 18.514 21.017 26.457 1.00 7.64 O
+ATOM 1945 CB ASP A 756 20.215 18.041 27.005 1.00 7.66 C
+ATOM 1946 CG ASP A 756 18.854 17.378 27.214 1.00 8.26 C
+ATOM 1947 OD1 ASP A 756 17.811 18.006 27.042 1.00 9.13 O
+ATOM 1948 OD2 ASP A 756 18.861 16.169 27.532 1.00 9.17 O
+ATOM 1949 N ILE A 757 20.365 20.735 25.188 1.00 8.31 N
+ATOM 1950 CA ILE A 757 19.891 21.674 24.130 1.00 9.29 C
+ATOM 1951 C ILE A 757 20.022 20.959 22.781 1.00 8.29 C
+ATOM 1952 O ILE A 757 21.095 20.885 22.202 1.00 8.70 O
+ATOM 1953 CB ILE A 757 20.680 23.012 24.221 1.00 9.49 C
+ATOM 1954 CG1 ILE A 757 20.560 23.592 25.663 1.00 11.33 C
+ATOM 1955 CG2 ILE A 757 20.160 24.006 23.169 1.00 10.97 C
+ATOM 1956 CD1 ILE A 757 21.164 24.998 25.900 1.00 12.95 C
+ATOM 1957 N ARG A 758 18.906 20.384 22.349 1.00 9.24 N
+ATOM 1958 CA ARG A 758 18.882 19.552 21.174 1.00 9.77 C
+ATOM 1959 C ARG A 758 18.886 20.275 19.826 1.00 9.82 C
+ATOM 1960 O ARG A 758 18.187 21.255 19.629 1.00 9.81 O
+ATOM 1961 CB ARG A 758 17.753 18.518 21.297 1.00 10.69 C
+ATOM 1962 CG ARG A 758 16.328 19.072 21.302 1.00 10.83 C
+ATOM 1963 CD ARG A 758 15.340 17.913 21.478 1.00 12.03 C
+ATOM 1964 NE ARG A 758 13.947 18.317 21.460 1.00 12.50 N
+ATOM 1965 CZ ARG A 758 13.278 18.779 22.503 1.00 13.50 C
+ATOM 1966 NH1 ARG A 758 13.866 18.930 23.683 1.00 13.90 N
+ATOM 1967 NH2 ARG A 758 12.003 19.109 22.361 1.00 15.64 N
+ATOM 1968 N ILE A 759 19.646 19.707 18.900 1.00 11.27 N
+ATOM 1969 CA ILE A 759 19.841 20.269 17.556 1.00 12.34 C
+ATOM 1970 C ILE A 759 19.253 19.384 16.450 1.00 13.72 C
+ATOM 1971 O ILE A 759 19.518 18.166 16.408 1.00 13.26 O
+ATOM 1972 CB ILE A 759 21.348 20.432 17.278 1.00 11.56 C
+ATOM 1973 CG1 ILE A 759 21.963 21.382 18.305 1.00 11.50 C
+ATOM 1974 CG2 ILE A 759 21.601 20.969 15.831 1.00 12.61 C
+ATOM 1975 CD1 ILE A 759 23.461 21.443 18.265 1.00 11.85 C
+ATOM 1976 N PRO A 760 18.444 19.986 15.542 1.00 16.07 N
+ATOM 1977 CA PRO A 760 17.818 19.259 14.414 1.00 18.40 C
+ATOM 1978 C PRO A 760 18.946 18.648 13.557 1.00 21.21 C
+ATOM 1979 O PRO A 760 19.933 19.325 13.254 1.00 20.98 O
+ATOM 1980 CB PRO A 760 17.083 20.367 13.653 1.00 18.23 C
+ATOM 1981 CG PRO A 760 16.805 21.415 14.702 1.00 17.98 C
+ATOM 1982 CD PRO A 760 18.044 21.409 15.565 1.00 16.19 C
+ATOM 1983 N GLN A 761 18.813 17.369 13.212 1.00 24.60 N
+ATOM 1984 CA GLN A 761 19.809 16.612 12.453 1.00 29.69 C
+ATOM 1985 C GLN A 761 20.197 17.247 11.123 1.00 31.87 C
+ATOM 1986 O GLN A 761 21.278 16.970 10.580 1.00 32.76 O
+ATOM 1987 CB GLN A 761 19.293 15.193 12.193 1.00 32.52 C
+ATOM 1988 CG GLN A 761 20.344 14.090 12.372 1.00 36.55 C
+ATOM 1989 CD GLN A 761 20.530 13.666 13.843 1.00 38.84 C
+ATOM 1990 OE1 GLN A 761 19.947 12.661 14.293 1.00 38.83 O
+ATOM 1991 NE2 GLN A 761 21.343 14.432 14.596 1.00 39.70 N
+ATOM 1992 N SER A 762 19.289 18.060 10.596 1.00 33.48 N
+ATOM 1993 CA SER A 762 19.478 18.755 9.329 1.00 36.66 C
+ATOM 1994 C SER A 762 20.221 20.107 9.375 1.00 37.70 C
+ATOM 1995 O SER A 762 20.685 20.571 8.328 1.00 38.59 O
+ATOM 1996 CB SER A 762 18.118 18.936 8.644 1.00 37.76 C
+ATOM 1997 OG SER A 762 17.144 19.512 9.524 1.00 40.20 O
+ATOM 1998 N GLU A 763 20.255 20.768 10.543 1.00 37.47 N
+ATOM 1999 CA GLU A 763 20.940 22.066 10.731 1.00 37.43 C
+ATOM 2000 C GLU A 763 22.437 21.825 10.431 1.00 36.05 C
+ATOM 2001 O GLU A 763 22.909 20.686 10.557 1.00 36.12 O
+ATOM 2002 CB GLU A 763 20.793 22.558 12.203 1.00 39.14 C
+ATOM 2003 CG GLU A 763 19.737 23.671 12.502 1.00 41.40 C
+ATOM 2004 CD GLU A 763 19.650 24.099 14.020 1.00 43.76 C
+ATOM 2005 OE1 GLU A 763 20.602 23.877 14.808 1.00 44.89 O
+ATOM 2006 OE2 GLU A 763 18.611 24.668 14.451 1.00 44.77 O
+ATOM 2007 N ASN A 764 23.169 22.857 9.982 1.00 34.17 N
+ATOM 2008 CA ASN A 764 24.617 22.700 9.720 1.00 31.78 C
+ATOM 2009 C ASN A 764 25.263 22.665 11.114 1.00 29.18 C
+ATOM 2010 O ASN A 764 25.092 23.619 11.878 1.00 28.63 O
+ATOM 2011 CB ASN A 764 25.170 23.885 8.907 1.00 32.94 C
+ATOM 2012 CG ASN A 764 26.709 23.948 8.919 1.00 33.58 C
+ATOM 2013 OD1 ASN A 764 27.400 22.994 8.539 1.00 34.94 O
+ATOM 2014 ND2 ASN A 764 27.241 25.064 9.387 1.00 33.52 N
+ATOM 2015 N PRO A 765 26.036 21.593 11.441 1.00 26.45 N
+ATOM 2016 CA PRO A 765 26.706 21.401 12.733 1.00 24.23 C
+ATOM 2017 C PRO A 765 27.561 22.541 13.233 1.00 21.88 C
+ATOM 2018 O PRO A 765 27.385 22.985 14.362 1.00 19.95 O
+ATOM 2019 CB PRO A 765 27.556 20.148 12.505 1.00 25.21 C
+ATOM 2020 CG PRO A 765 26.804 19.404 11.497 1.00 25.28 C
+ATOM 2021 CD PRO A 765 26.391 20.486 10.536 1.00 26.28 C
+ATOM 2022 N ALA A 766 28.483 23.009 12.390 1.00 19.45 N
+ATOM 2023 CA ALA A 766 29.414 24.070 12.768 1.00 17.82 C
+ATOM 2024 C ALA A 766 28.771 25.355 13.302 1.00 15.92 C
+ATOM 2025 O ALA A 766 29.150 25.851 14.368 1.00 16.01 O
+ATOM 2026 CB ALA A 766 30.382 24.357 11.620 1.00 18.46 C
+ATOM 2027 N THR A 767 27.760 25.858 12.612 1.00 14.28 N
+ATOM 2028 CA THR A 767 27.074 27.060 13.069 1.00 14.72 C
+ATOM 2029 C THR A 767 26.005 26.733 14.147 1.00 12.77 C
+ATOM 2030 O THR A 767 25.768 27.537 15.027 1.00 13.61 O
+ATOM 2031 CB THR A 767 26.466 27.874 11.874 1.00 17.10 C
+ATOM 2032 OG1 THR A 767 25.641 27.013 11.073 1.00 19.71 O
+ATOM 2033 CG2 THR A 767 27.602 28.454 10.984 1.00 17.13 C
+ATOM 2034 N ALA A 768 25.359 25.574 14.062 1.00 12.75 N
+ATOM 2035 CA ALA A 768 24.376 25.160 15.085 1.00 12.12 C
+ATOM 2036 C ALA A 768 25.099 25.083 16.457 1.00 10.67 C
+ATOM 2037 O ALA A 768 24.532 25.487 17.464 1.00 11.15 O
+ATOM 2038 CB ALA A 768 23.778 23.818 14.728 1.00 12.11 C
+ATOM 2039 N PHE A 769 26.351 24.631 16.475 1.00 10.85 N
+ATOM 2040 CA PHE A 769 27.145 24.543 17.725 1.00 11.87 C
+ATOM 2041 C PHE A 769 27.425 25.913 18.353 1.00 12.79 C
+ATOM 2042 O PHE A 769 27.554 26.022 19.580 1.00 12.86 O
+ATOM 2043 CB PHE A 769 28.470 23.794 17.530 1.00 12.06 C
+ATOM 2044 CG PHE A 769 28.319 22.291 17.371 1.00 13.63 C
+ATOM 2045 CD1 PHE A 769 27.063 21.690 17.308 1.00 14.14 C
+ATOM 2046 CD2 PHE A 769 29.439 21.487 17.208 1.00 14.70 C
+ATOM 2047 CE1 PHE A 769 26.920 20.310 17.074 1.00 15.21 C
+ATOM 2048 CE2 PHE A 769 29.313 20.086 16.970 1.00 16.17 C
+ATOM 2049 CZ PHE A 769 28.047 19.501 16.902 1.00 14.88 C
+ATOM 2050 N GLN A 770 27.536 26.958 17.530 1.00 10.91 N
+ATOM 2051 CA GLN A 770 27.759 28.305 18.019 1.00 11.24 C
+ATOM 2052 C GLN A 770 26.498 28.859 18.698 1.00 11.07 C
+ATOM 2053 O GLN A 770 26.572 29.516 19.744 1.00 12.05 O
+ATOM 2054 CB GLN A 770 28.172 29.214 16.872 1.00 12.81 C
+ATOM 2055 CG GLN A 770 29.577 29.025 16.450 1.00 15.21 C
+ATOM 2056 CD GLN A 770 29.963 30.063 15.400 1.00 18.23 C
+ATOM 2057 OE1 GLN A 770 29.245 30.243 14.395 1.00 19.22 O
+ATOM 2058 NE2 GLN A 770 31.050 30.790 15.650 1.00 18.11 N
+ATOM 2059 N VAL A 771 25.339 28.595 18.099 1.00 10.67 N
+ATOM 2060 CA VAL A 771 24.056 29.019 18.670 1.00 11.00 C
+ATOM 2061 C VAL A 771 23.861 28.281 20.028 1.00 11.27 C
+ATOM 2062 O VAL A 771 23.481 28.894 21.037 1.00 11.20 O
+ATOM 2063 CB VAL A 771 22.894 28.627 17.752 1.00 11.38 C
+ATOM 2064 CG1 VAL A 771 21.573 28.923 18.421 1.00 11.70 C
+ATOM 2065 CG2 VAL A 771 23.002 29.394 16.405 1.00 13.00 C
+ATOM 2066 N GLN A 772 24.115 26.974 20.016 1.00 10.26 N
+ATOM 2067 CA GLN A 772 24.000 26.138 21.238 1.00 9.83 C
+ATOM 2068 C GLN A 772 24.886 26.697 22.341 1.00 10.09 C
+ATOM 2069 O GLN A 772 24.445 26.783 23.494 1.00 10.98 O
+ATOM 2070 CB GLN A 772 24.400 24.697 20.928 1.00 9.45 C
+ATOM 2071 CG GLN A 772 24.463 23.772 22.153 1.00 8.95 C
+ATOM 2072 CD GLN A 772 24.854 22.368 21.750 1.00 9.15 C
+ATOM 2073 OE1 GLN A 772 26.011 22.105 21.399 1.00 9.98 O
+ATOM 2074 NE2 GLN A 772 23.883 21.456 21.763 1.00 9.31 N
+ATOM 2075 N ALA A 773 26.119 27.091 22.003 1.00 9.30 N
+ATOM 2076 CA ALA A 773 27.046 27.675 22.977 1.00 10.09 C
+ATOM 2077 C ALA A 773 26.479 28.953 23.603 1.00 10.89 C
+ATOM 2078 O ALA A 773 26.584 29.160 24.820 1.00 10.94 O
+ATOM 2079 CB ALA A 773 28.396 27.953 22.343 1.00 10.56 C
+ATOM 2080 N ASN A 774 25.865 29.822 22.793 1.00 11.21 N
+ATOM 2081 CA ASN A 774 25.277 31.037 23.336 1.00 12.75 C
+ATOM 2082 C ASN A 774 24.076 30.746 24.220 1.00 10.52 C
+ATOM 2083 O ASN A 774 23.840 31.467 25.187 1.00 10.75 O
+ATOM 2084 CB ASN A 774 24.861 32.005 22.229 1.00 16.52 C
+ATOM 2085 CG ASN A 774 26.064 32.636 21.521 1.00 21.29 C
+ATOM 2086 OD1 ASN A 774 25.934 33.147 20.395 1.00 24.27 O
+ATOM 2087 ND2 ASN A 774 27.242 32.608 22.175 1.00 23.11 N
+ATOM 2088 N ASN A 775 23.298 29.724 23.864 1.00 10.84 N
+ATOM 2089 CA ASN A 775 22.120 29.359 24.659 1.00 10.65 C
+ATOM 2090 C ASN A 775 22.610 28.848 26.018 1.00 9.82 C
+ATOM 2091 O ASN A 775 22.058 29.231 27.046 1.00 10.74 O
+ATOM 2092 CB ASN A 775 21.281 28.281 23.958 1.00 10.95 C
+ATOM 2093 CG ASN A 775 20.392 28.821 22.819 1.00 12.94 C
+ATOM 2094 OD1 ASN A 775 19.677 28.047 22.190 1.00 13.12 O
+ATOM 2095 ND2 ASN A 775 20.407 30.135 22.578 1.00 14.23 N
+ATOM 2096 N TYR A 776 23.639 27.997 26.023 1.00 9.85 N
+ATOM 2097 CA TYR A 776 24.193 27.500 27.295 1.00 9.62 C
+ATOM 2098 C TYR A 776 24.723 28.673 28.135 1.00 11.08 C
+ATOM 2099 O TYR A 776 24.512 28.734 29.352 1.00 10.65 O
+ATOM 2100 CB TYR A 776 25.315 26.481 27.059 1.00 8.96 C
+ATOM 2101 CG TYR A 776 24.847 25.033 27.023 1.00 9.40 C
+ATOM 2102 CD1 TYR A 776 24.441 24.380 28.197 1.00 9.20 C
+ATOM 2103 CD2 TYR A 776 24.837 24.299 25.831 1.00 8.96 C
+ATOM 2104 CE1 TYR A 776 24.050 23.044 28.173 1.00 8.99 C
+ATOM 2105 CE2 TYR A 776 24.444 22.956 25.797 1.00 8.99 C
+ATOM 2106 CZ TYR A 776 24.055 22.337 26.984 1.00 8.28 C
+ATOM 2107 OH TYR A 776 23.705 21.022 26.977 1.00 9.32 O
+ATOM 2108 N LYS A 777 25.409 29.621 27.489 1.00 10.11 N
+ATOM 2109 CA LYS A 777 25.958 30.770 28.183 1.00 11.54 C
+ATOM 2110 C LYS A 777 24.854 31.610 28.851 1.00 10.21 C
+ATOM 2111 O LYS A 777 24.984 32.031 30.009 1.00 10.63 O
+ATOM 2112 CB LYS A 777 26.743 31.614 27.170 1.00 13.73 C
+ATOM 2113 CG LYS A 777 27.354 32.871 27.756 1.00 18.39 C
+ATOM 2114 CD LYS A 777 28.413 33.408 26.800 1.00 22.43 C
+ATOM 2115 CE LYS A 777 29.155 34.588 27.413 1.00 26.37 C
+ATOM 2116 NZ LYS A 777 30.205 35.077 26.439 1.00 29.09 N
+ATOM 2117 N GLU A 778 23.786 31.888 28.114 1.00 9.53 N
+ATOM 2118 CA GLU A 778 22.670 32.662 28.645 1.00 11.49 C
+ATOM 2119 C GLU A 778 21.989 31.949 29.823 1.00 11.02 C
+ATOM 2120 O GLU A 778 21.608 32.600 30.784 1.00 11.95 O
+ATOM 2121 CB GLU A 778 21.649 32.991 27.545 1.00 13.30 C
+ATOM 2122 CG GLU A 778 22.182 33.976 26.523 1.00 16.77 C
+ATOM 2123 CD GLU A 778 22.744 35.244 27.176 1.00 19.37 C
+ATOM 2124 OE1 GLU A 778 22.050 35.842 28.050 1.00 19.89 O
+ATOM 2125 OE2 GLU A 778 23.896 35.632 26.835 1.00 21.64 O
+ATOM 2126 N LEU A 779 21.847 30.628 29.754 1.00 10.84 N
+ATOM 2127 CA LEU A 779 21.244 29.869 30.862 1.00 11.01 C
+ATOM 2128 C LEU A 779 22.108 30.025 32.137 1.00 9.58 C
+ATOM 2129 O LEU A 779 21.591 30.239 33.256 1.00 9.63 O
+ATOM 2130 CB LEU A 779 21.142 28.388 30.498 1.00 13.34 C
+ATOM 2131 CG LEU A 779 19.865 27.744 29.971 1.00 17.57 C
+ATOM 2132 CD1 LEU A 779 19.989 26.215 30.269 1.00 17.70 C
+ATOM 2133 CD2 LEU A 779 18.611 28.281 30.681 1.00 18.13 C
+ATOM 2134 N MET A 780 23.416 29.900 31.982 1.00 9.14 N
+ATOM 2135 CA MET A 780 24.325 30.090 33.122 1.00 9.68 C
+ATOM 2136 C MET A 780 24.221 31.505 33.690 1.00 10.14 C
+ATOM 2137 O MET A 780 24.249 31.681 34.905 1.00 10.76 O
+ATOM 2138 CB MET A 780 25.762 29.762 32.735 1.00 11.00 C
+ATOM 2139 CG MET A 780 26.753 29.893 33.884 1.00 12.59 C
+ATOM 2140 SD MET A 780 26.314 28.933 35.385 1.00 13.42 S
+ATOM 2141 CE MET A 780 26.988 27.360 34.936 1.00 12.56 C
+ATOM 2142 N LYS A 781 24.100 32.521 32.834 1.00 9.44 N
+ATOM 2143 CA LYS A 781 23.945 33.891 33.334 1.00 10.39 C
+ATOM 2144 C LYS A 781 22.668 34.053 34.152 1.00 9.21 C
+ATOM 2145 O LYS A 781 22.643 34.824 35.112 1.00 9.91 O
+ATOM 2146 CB LYS A 781 23.946 34.907 32.191 1.00 12.88 C
+ATOM 2147 CG LYS A 781 25.324 35.094 31.607 1.00 16.54 C
+ATOM 2148 CD LYS A 781 25.254 35.743 30.233 1.00 19.89 C
+ATOM 2149 CE LYS A 781 24.668 37.148 30.322 1.00 23.51 C
+ATOM 2150 NZ LYS A 781 24.540 37.781 28.957 1.00 25.51 N
+ATOM 2151 N ILE A 782 21.606 33.350 33.775 1.00 9.21 N
+ATOM 2152 CA ILE A 782 20.366 33.425 34.540 1.00 9.91 C
+ATOM 2153 C ILE A 782 20.588 32.769 35.919 1.00 10.45 C
+ATOM 2154 O ILE A 782 20.137 33.292 36.936 1.00 10.45 O
+ATOM 2155 CB ILE A 782 19.197 32.749 33.789 1.00 11.06 C
+ATOM 2156 CG1 ILE A 782 18.809 33.615 32.592 1.00 11.10 C
+ATOM 2157 CG2 ILE A 782 17.965 32.535 34.734 1.00 10.92 C
+ATOM 2158 CD1 ILE A 782 17.815 32.947 31.692 1.00 13.38 C
+ATOM 2159 N CYS A 783 21.317 31.660 35.949 1.00 9.61 N
+ATOM 2160 CA CYS A 783 21.614 30.994 37.200 1.00 11.23 C
+ATOM 2161 C CYS A 783 22.439 31.948 38.107 1.00 12.01 C
+ATOM 2162 O CYS A 783 22.079 32.204 39.259 1.00 12.32 O
+ATOM 2163 CB CYS A 783 22.329 29.660 36.899 1.00 11.86 C
+ATOM 2164 SG CYS A 783 22.967 28.762 38.349 1.00 16.76 S
+ATOM 2165 N LEU A 784 23.471 32.578 37.557 1.00 12.25 N
+ATOM 2166 CA LEU A 784 24.298 33.497 38.329 1.00 13.07 C
+ATOM 2167 C LEU A 784 23.569 34.744 38.847 1.00 13.37 C
+ATOM 2168 O LEU A 784 23.949 35.306 39.876 1.00 15.02 O
+ATOM 2169 CB LEU A 784 25.508 33.926 37.491 1.00 13.57 C
+ATOM 2170 CG LEU A 784 26.463 32.802 37.101 1.00 13.28 C
+ATOM 2171 CD1 LEU A 784 27.409 33.307 36.056 1.00 14.57 C
+ATOM 2172 CD2 LEU A 784 27.252 32.289 38.296 1.00 16.54 C
+ATOM 2173 N ALA A 785 22.522 35.181 38.160 1.00 12.60 N
+ATOM 2174 CA ALA A 785 21.802 36.392 38.560 1.00 13.07 C
+ATOM 2175 C ALA A 785 20.714 36.221 39.611 1.00 13.35 C
+ATOM 2176 O ALA A 785 20.164 37.223 40.102 1.00 14.40 O
+ATOM 2177 CB ALA A 785 21.182 37.043 37.338 1.00 14.37 C
+ATOM 2178 N ASN A 786 20.346 34.973 39.899 1.00 10.77 N
+ATOM 2179 CA ASN A 786 19.277 34.706 40.839 1.00 10.43 C
+ATOM 2180 C ASN A 786 19.801 33.997 42.088 1.00 10.30 C
+ATOM 2181 O ASN A 786 20.245 32.853 42.012 1.00 10.02 O
+ATOM 2182 CB ASN A 786 18.191 33.894 40.144 1.00 10.13 C
+ATOM 2183 CG ASN A 786 17.384 34.733 39.189 1.00 9.46 C
+ATOM 2184 OD1 ASN A 786 16.538 35.509 39.598 1.00 9.43 O
+ATOM 2185 ND2 ASN A 786 17.674 34.599 37.903 1.00 11.23 N
+ATOM 2186 N PRO A 787 19.706 34.656 43.260 1.00 10.14 N
+ATOM 2187 CA PRO A 787 20.200 34.069 44.517 1.00 10.14 C
+ATOM 2188 C PRO A 787 19.551 32.735 44.956 1.00 9.42 C
+ATOM 2189 O PRO A 787 20.155 32.025 45.745 1.00 10.32 O
+ATOM 2190 CB PRO A 787 19.954 35.183 45.556 1.00 10.71 C
+ATOM 2191 CG PRO A 787 19.747 36.388 44.798 1.00 12.81 C
+ATOM 2192 CD PRO A 787 19.105 35.982 43.491 1.00 10.78 C
+ATOM 2193 N ASN A 788 18.313 32.454 44.520 1.00 8.67 N
+ATOM 2194 CA ASN A 788 17.608 31.198 44.851 1.00 8.43 C
+ATOM 2195 C ASN A 788 17.802 30.072 43.817 1.00 9.09 C
+ATOM 2196 O ASN A 788 17.092 29.067 43.854 1.00 9.45 O
+ATOM 2197 CB ASN A 788 16.107 31.437 45.050 1.00 8.26 C
+ATOM 2198 CG ASN A 788 15.388 31.843 43.753 1.00 9.04 C
+ATOM 2199 OD1 ASN A 788 15.906 32.642 42.970 1.00 9.96 O
+ATOM 2200 ND2 ASN A 788 14.193 31.329 43.543 1.00 9.14 N
+ATOM 2201 N CYS A 789 18.758 30.230 42.895 1.00 8.95 N
+ATOM 2202 CA CYS A 789 19.009 29.200 41.863 1.00 10.21 C
+ATOM 2203 C CYS A 789 20.520 28.959 41.830 1.00 12.08 C
+ATOM 2204 O CYS A 789 21.235 29.768 41.237 1.00 14.16 O
+ATOM 2205 CB CYS A 789 18.521 29.701 40.495 1.00 10.58 C
+ATOM 2206 SG CYS A 789 18.843 28.534 39.168 1.00 14.93 S
+ATOM 2207 N ASN A 790 21.012 27.868 42.433 1.00 10.86 N
+ATOM 2208 CA ASN A 790 22.458 27.624 42.486 1.00 12.32 C
+ATOM 2209 C ASN A 790 22.927 26.220 42.100 1.00 11.09 C
+ATOM 2210 O ASN A 790 24.045 25.805 42.441 1.00 11.40 O
+ATOM 2211 CB ASN A 790 22.979 27.983 43.884 1.00 15.28 C
+ATOM 2212 CG ASN A 790 22.597 29.427 44.308 1.00 18.96 C
+ATOM 2213 OD1 ASN A 790 23.163 30.423 43.813 1.00 21.05 O
+ATOM 2214 ND2 ASN A 790 21.627 29.539 45.220 1.00 19.29 N
+ATOM 2215 N THR A 791 22.068 25.484 41.404 1.00 8.83 N
+ATOM 2216 CA THR A 791 22.388 24.124 40.971 1.00 8.04 C
+ATOM 2217 C THR A 791 22.154 24.092 39.452 1.00 6.90 C
+ATOM 2218 O THR A 791 21.069 24.406 38.979 1.00 7.37 O
+ATOM 2219 CB THR A 791 21.458 23.110 41.681 1.00 9.09 C
+ATOM 2220 OG1 THR A 791 21.666 23.196 43.091 1.00 10.63 O
+ATOM 2221 CG2 THR A 791 21.683 21.687 41.192 1.00 8.85 C
+ATOM 2222 N PHE A 792 23.193 23.712 38.720 1.00 7.35 N
+ATOM 2223 CA PHE A 792 23.182 23.679 37.247 1.00 7.22 C
+ATOM 2224 C PHE A 792 23.632 22.268 36.821 1.00 6.18 C
+ATOM 2225 O PHE A 792 24.831 21.980 36.743 1.00 7.60 O
+ATOM 2226 CB PHE A 792 24.184 24.752 36.763 1.00 7.55 C
+ATOM 2227 CG PHE A 792 24.131 25.044 35.269 1.00 8.86 C
+ATOM 2228 CD1 PHE A 792 24.878 24.288 34.353 1.00 9.21 C
+ATOM 2229 CD2 PHE A 792 23.392 26.123 34.795 1.00 9.60 C
+ATOM 2230 CE1 PHE A 792 24.899 24.611 32.981 1.00 8.88 C
+ATOM 2231 CE2 PHE A 792 23.409 26.451 33.404 1.00 9.33 C
+ATOM 2232 CZ PHE A 792 24.163 25.695 32.519 1.00 8.97 C
+ATOM 2233 N VAL A 793 22.672 21.380 36.583 1.00 5.49 N
+ATOM 2234 CA VAL A 793 22.973 20.006 36.194 1.00 5.94 C
+ATOM 2235 C VAL A 793 22.515 19.733 34.768 1.00 6.07 C
+ATOM 2236 O VAL A 793 21.356 20.010 34.408 1.00 6.80 O
+ATOM 2237 CB VAL A 793 22.299 18.964 37.184 1.00 6.86 C
+ATOM 2238 CG1 VAL A 793 22.601 17.531 36.748 1.00 6.89 C
+ATOM 2239 CG2 VAL A 793 22.796 19.194 38.629 1.00 8.58 C
+ATOM 2240 N MET A 794 23.417 19.174 33.978 1.00 6.34 N
+ATOM 2241 CA MET A 794 23.140 18.811 32.572 1.00 7.49 C
+ATOM 2242 C MET A 794 22.860 17.301 32.491 1.00 7.70 C
+ATOM 2243 O MET A 794 23.393 16.505 33.301 1.00 7.76 O
+ATOM 2244 CB MET A 794 24.349 19.183 31.682 1.00 8.28 C
+ATOM 2245 CG MET A 794 24.561 20.683 31.633 1.00 9.87 C
+ATOM 2246 SD MET A 794 26.189 21.211 31.028 1.00 10.70 S
+ATOM 2247 CE MET A 794 27.231 20.747 32.296 1.00 13.21 C
+ATOM 2248 N TRP A 795 22.036 16.888 31.540 1.00 7.39 N
+ATOM 2249 CA TRP A 795 21.716 15.478 31.421 1.00 7.77 C
+ATOM 2250 C TRP A 795 22.749 14.747 30.572 1.00 7.54 C
+ATOM 2251 O TRP A 795 22.438 14.182 29.511 1.00 8.84 O
+ATOM 2252 CB TRP A 795 20.294 15.266 30.899 1.00 9.56 C
+ATOM 2253 CG TRP A 795 19.617 14.024 31.478 1.00 11.66 C
+ATOM 2254 CD1 TRP A 795 19.065 12.987 30.774 1.00 13.21 C
+ATOM 2255 CD2 TRP A 795 19.411 13.716 32.885 1.00 12.73 C
+ATOM 2256 NE1 TRP A 795 18.515 12.066 31.644 1.00 15.19 N
+ATOM 2257 CE2 TRP A 795 18.713 12.484 32.941 1.00 13.84 C
+ATOM 2258 CE3 TRP A 795 19.753 14.363 34.091 1.00 13.15 C
+ATOM 2259 CZ2 TRP A 795 18.340 11.877 34.168 1.00 14.51 C
+ATOM 2260 CZ3 TRP A 795 19.380 13.756 35.335 1.00 13.66 C
+ATOM 2261 CH2 TRP A 795 18.684 12.530 35.348 1.00 14.18 C
+ATOM 2262 N GLY A 796 23.972 14.728 31.100 1.00 7.39 N
+ATOM 2263 CA GLY A 796 25.094 14.097 30.447 1.00 7.06 C
+ATOM 2264 C GLY A 796 26.106 15.165 30.072 1.00 8.00 C
+ATOM 2265 O GLY A 796 25.860 16.352 30.299 1.00 8.37 O
+ATOM 2266 N PHE A 797 27.270 14.752 29.574 1.00 7.64 N
+ATOM 2267 CA PHE A 797 28.286 15.716 29.144 1.00 8.99 C
+ATOM 2268 C PHE A 797 28.901 15.410 27.768 1.00 9.89 C
+ATOM 2269 O PHE A 797 29.568 16.269 27.202 1.00 10.65 O
+ATOM 2270 CB PHE A 797 29.373 15.947 30.209 1.00 9.28 C
+ATOM 2271 CG PHE A 797 30.185 14.717 30.562 1.00 9.57 C
+ATOM 2272 CD1 PHE A 797 31.348 14.400 29.849 1.00 10.53 C
+ATOM 2273 CD2 PHE A 797 29.796 13.890 31.616 1.00 10.81 C
+ATOM 2274 CE1 PHE A 797 32.115 13.273 30.178 1.00 10.77 C
+ATOM 2275 CE2 PHE A 797 30.549 12.761 31.961 1.00 11.04 C
+ATOM 2276 CZ PHE A 797 31.709 12.449 31.244 1.00 11.41 C
+ATOM 2277 N THR A 798 28.712 14.208 27.236 1.00 8.95 N
+ATOM 2278 CA THR A 798 29.241 13.909 25.905 1.00 9.31 C
+ATOM 2279 C THR A 798 28.103 13.454 25.007 1.00 10.39 C
+ATOM 2280 O THR A 798 27.234 12.674 25.413 1.00 9.19 O
+ATOM 2281 CB THR A 798 30.376 12.848 25.901 1.00 9.26 C
+ATOM 2282 OG1 THR A 798 30.632 12.447 24.554 1.00 10.64 O
+ATOM 2283 CG2 THR A 798 29.974 11.579 26.668 1.00 10.15 C
+ATOM 2284 N ASP A 799 28.084 13.983 23.781 1.00 11.12 N
+ATOM 2285 CA ASP A 799 27.085 13.622 22.798 1.00 11.10 C
+ATOM 2286 C ASP A 799 27.049 12.106 22.529 1.00 11.13 C
+ATOM 2287 O ASP A 799 26.093 11.601 21.910 1.00 12.20 O
+ATOM 2288 CB ASP A 799 27.385 14.346 21.487 1.00 11.83 C
+ATOM 2289 CG ASP A 799 27.107 15.831 21.552 1.00 13.37 C
+ATOM 2290 OD1 ASP A 799 26.357 16.288 22.443 1.00 12.18 O
+ATOM 2291 OD2 ASP A 799 27.618 16.552 20.665 1.00 13.71 O
+ATOM 2292 N LYS A 800 28.093 11.389 22.954 1.00 10.53 N
+ATOM 2293 CA LYS A 800 28.183 9.933 22.787 1.00 11.86 C
+ATOM 2294 C LYS A 800 27.056 9.173 23.521 1.00 12.51 C
+ATOM 2295 O LYS A 800 26.574 8.134 23.048 1.00 12.74 O
+ATOM 2296 CB LYS A 800 29.541 9.450 23.312 1.00 13.34 C
+ATOM 2297 CG LYS A 800 29.888 8.015 23.000 1.00 14.39 C
+ATOM 2298 CD LYS A 800 31.345 7.718 23.383 1.00 14.66 C
+ATOM 2299 CE LYS A 800 31.665 6.252 23.133 1.00 16.71 C
+ATOM 2300 NZ LYS A 800 33.111 5.946 23.336 1.00 19.37 N
+ATOM 2301 N TYR A 801 26.656 9.693 24.686 1.00 11.82 N
+ATOM 2302 CA TYR A 801 25.624 9.068 25.527 1.00 11.92 C
+ATOM 2303 C TYR A 801 24.503 10.062 25.838 1.00 10.53 C
+ATOM 2304 O TYR A 801 24.684 10.976 26.653 1.00 11.00 O
+ATOM 2305 CB TYR A 801 26.250 8.569 26.864 1.00 11.88 C
+ATOM 2306 CG TYR A 801 27.460 7.665 26.703 1.00 12.43 C
+ATOM 2307 CD1 TYR A 801 27.371 6.447 26.003 1.00 13.47 C
+ATOM 2308 CD2 TYR A 801 28.691 8.015 27.250 1.00 12.35 C
+ATOM 2309 CE1 TYR A 801 28.475 5.604 25.851 1.00 13.61 C
+ATOM 2310 CE2 TYR A 801 29.802 7.182 27.107 1.00 13.56 C
+ATOM 2311 CZ TYR A 801 29.683 5.977 26.403 1.00 14.17 C
+ATOM 2312 OH TYR A 801 30.767 5.161 26.257 1.00 14.68 O
+ATOM 2313 N THR A 802 23.353 9.883 25.191 1.00 10.49 N
+ATOM 2314 CA THR A 802 22.216 10.763 25.418 1.00 10.35 C
+ATOM 2315 C THR A 802 20.893 10.119 25.030 1.00 9.86 C
+ATOM 2316 O THR A 802 20.807 9.411 24.034 1.00 10.95 O
+ATOM 2317 CB THR A 802 22.375 12.131 24.677 1.00 10.50 C
+ATOM 2318 OG1 THR A 802 21.154 12.890 24.786 1.00 10.71 O
+ATOM 2319 CG2 THR A 802 22.761 11.926 23.190 1.00 9.80 C
+ATOM 2320 N TRP A 803 19.864 10.380 25.828 1.00 9.97 N
+ATOM 2321 CA TRP A 803 18.526 9.865 25.574 1.00 11.28 C
+ATOM 2322 C TRP A 803 17.800 10.641 24.460 1.00 10.83 C
+ATOM 2323 O TRP A 803 16.716 10.221 24.013 1.00 12.09 O
+ATOM 2324 CB TRP A 803 17.663 10.000 26.854 1.00 11.75 C
+ATOM 2325 CG TRP A 803 17.221 11.450 27.176 1.00 12.56 C
+ATOM 2326 CD1 TRP A 803 18.033 12.565 27.259 1.00 12.22 C
+ATOM 2327 CD2 TRP A 803 15.885 11.921 27.412 1.00 13.47 C
+ATOM 2328 NE1 TRP A 803 17.281 13.678 27.513 1.00 12.19 N
+ATOM 2329 CE2 TRP A 803 15.961 13.323 27.609 1.00 13.80 C
+ATOM 2330 CE3 TRP A 803 14.627 11.294 27.468 1.00 15.15 C
+ATOM 2331 CZ2 TRP A 803 14.817 14.122 27.856 1.00 14.95 C
+ATOM 2332 CZ3 TRP A 803 13.491 12.080 27.715 1.00 16.35 C
+ATOM 2333 CH2 TRP A 803 13.599 13.490 27.905 1.00 16.48 C
+ATOM 2334 N ILE A 804 18.366 11.771 24.033 1.00 9.90 N
+ATOM 2335 CA ILE A 804 17.674 12.633 23.065 1.00 11.91 C
+ATOM 2336 C ILE A 804 17.155 12.015 21.760 1.00 12.44 C
+ATOM 2337 O ILE A 804 15.965 12.137 21.465 1.00 13.19 O
+ATOM 2338 CB ILE A 804 18.445 13.979 22.817 1.00 11.48 C
+ATOM 2339 CG1 ILE A 804 18.355 14.855 24.073 1.00 10.60 C
+ATOM 2340 CG2 ILE A 804 17.871 14.726 21.603 1.00 12.27 C
+ATOM 2341 CD1 ILE A 804 16.946 15.332 24.401 1.00 11.47 C
+ATOM 2342 N PRO A 805 18.017 11.307 21.007 1.00 14.23 N
+ATOM 2343 CA PRO A 805 17.589 10.685 19.740 1.00 16.11 C
+ATOM 2344 C PRO A 805 16.423 9.699 19.855 1.00 17.14 C
+ATOM 2345 O PRO A 805 15.598 9.584 18.948 1.00 18.92 O
+ATOM 2346 CB PRO A 805 18.863 9.991 19.260 1.00 16.16 C
+ATOM 2347 CG PRO A 805 19.966 10.905 19.769 1.00 15.92 C
+ATOM 2348 CD PRO A 805 19.480 11.182 21.185 1.00 14.19 C
+ATOM 2349 N GLY A 806 16.338 9.007 20.979 1.00 18.02 N
+ATOM 2350 CA GLY A 806 15.274 8.040 21.177 1.00 19.00 C
+ATOM 2351 C GLY A 806 13.931 8.660 21.504 1.00 20.58 C
+ATOM 2352 O GLY A 806 12.874 8.053 21.292 1.00 22.29 O
+ATOM 2353 N THR A 807 13.945 9.857 22.063 1.00 19.90 N
+ATOM 2354 CA THR A 807 12.688 10.477 22.408 1.00 20.86 C
+ATOM 2355 C THR A 807 12.282 11.526 21.391 1.00 20.03 C
+ATOM 2356 O THR A 807 11.091 11.746 21.139 1.00 20.37 O
+ATOM 2357 CB THR A 807 12.754 11.060 23.818 1.00 23.13 C
+ATOM 2358 OG1 THR A 807 12.976 9.990 24.753 1.00 26.29 O
+ATOM 2359 CG2 THR A 807 11.468 11.776 24.170 1.00 24.19 C
+ATOM 2360 N PHE A 808 13.271 12.167 20.790 1.00 18.29 N
+ATOM 2361 CA PHE A 808 12.987 13.170 19.789 1.00 17.71 C
+ATOM 2362 C PHE A 808 13.743 12.731 18.536 1.00 17.75 C
+ATOM 2363 O PHE A 808 14.864 13.194 18.294 1.00 17.78 O
+ATOM 2364 CB PHE A 808 13.477 14.550 20.263 1.00 17.58 C
+ATOM 2365 CG PHE A 808 12.984 14.937 21.621 1.00 18.68 C
+ATOM 2366 CD1 PHE A 808 11.747 15.558 21.781 1.00 19.72 C
+ATOM 2367 CD2 PHE A 808 13.738 14.651 22.756 1.00 19.53 C
+ATOM 2368 CE1 PHE A 808 11.253 15.894 23.075 1.00 19.96 C
+ATOM 2369 CE2 PHE A 808 13.255 14.981 24.061 1.00 21.13 C
+ATOM 2370 CZ PHE A 808 12.011 15.602 24.215 1.00 20.56 C
+ATOM 2371 N PRO A 809 13.202 11.756 17.776 1.00 18.08 N
+ATOM 2372 CA PRO A 809 13.927 11.336 16.566 1.00 19.03 C
+ATOM 2373 C PRO A 809 14.093 12.542 15.617 1.00 19.40 C
+ATOM 2374 O PRO A 809 13.196 13.393 15.484 1.00 20.53 O
+ATOM 2375 CB PRO A 809 13.060 10.199 15.993 1.00 19.57 C
+ATOM 2376 CG PRO A 809 11.709 10.448 16.576 1.00 19.39 C
+ATOM 2377 CD PRO A 809 11.986 10.954 17.974 1.00 18.78 C
+ATOM 2378 N GLY A 810 15.277 12.654 15.037 1.00 18.26 N
+ATOM 2379 CA GLY A 810 15.567 13.793 14.189 1.00 18.03 C
+ATOM 2380 C GLY A 810 16.421 14.849 14.905 1.00 18.33 C
+ATOM 2381 O GLY A 810 16.886 15.780 14.250 1.00 19.07 O
+ATOM 2382 N TYR A 811 16.627 14.725 16.227 1.00 16.62 N
+ATOM 2383 CA TYR A 811 17.431 15.667 17.029 1.00 15.26 C
+ATOM 2384 C TYR A 811 18.615 14.952 17.647 1.00 14.35 C
+ATOM 2385 O TYR A 811 18.583 13.744 17.807 1.00 14.62 O
+ATOM 2386 CB TYR A 811 16.583 16.278 18.147 1.00 15.39 C
+ATOM 2387 CG TYR A 811 15.597 17.277 17.633 1.00 17.20 C
+ATOM 2388 CD1 TYR A 811 14.356 16.874 17.133 1.00 18.54 C
+ATOM 2389 CD2 TYR A 811 15.917 18.630 17.602 1.00 17.75 C
+ATOM 2390 CE1 TYR A 811 13.457 17.810 16.609 1.00 20.31 C
+ATOM 2391 CE2 TYR A 811 15.046 19.561 17.095 1.00 19.62 C
+ATOM 2392 CZ TYR A 811 13.820 19.153 16.600 1.00 21.15 C
+ATOM 2393 OH TYR A 811 12.973 20.113 16.105 1.00 24.01 O
+ATOM 2394 N GLY A 812 19.651 15.700 18.024 1.00 13.61 N
+ATOM 2395 CA GLY A 812 20.821 15.091 18.628 1.00 12.10 C
+ATOM 2396 C GLY A 812 21.836 16.126 19.066 1.00 10.88 C
+ATOM 2397 O GLY A 812 21.477 17.297 19.255 1.00 11.82 O
+ATOM 2398 N ASN A 813 23.074 15.673 19.287 1.00 11.36 N
+ATOM 2399 CA ASN A 813 24.233 16.506 19.700 1.00 12.67 C
+ATOM 2400 C ASN A 813 23.823 17.600 20.705 1.00 11.40 C
+ATOM 2401 O ASN A 813 24.161 18.779 20.534 1.00 10.15 O
+ATOM 2402 CB ASN A 813 24.856 17.148 18.437 1.00 15.20 C
+ATOM 2403 CG ASN A 813 25.318 16.101 17.399 1.00 18.69 C
+ATOM 2404 OD1 ASN A 813 24.891 16.132 16.232 1.00 22.50 O
+ATOM 2405 ND2 ASN A 813 26.166 15.165 17.824 1.00 19.74 N
+ATOM 2406 N PRO A 814 23.275 17.182 21.863 1.00 9.84 N
+ATOM 2407 CA PRO A 814 22.803 18.139 22.861 1.00 9.16 C
+ATOM 2408 C PRO A 814 23.707 18.607 23.971 1.00 7.36 C
+ATOM 2409 O PRO A 814 23.285 19.485 24.727 1.00 8.08 O
+ATOM 2410 CB PRO A 814 21.614 17.368 23.516 1.00 8.69 C
+ATOM 2411 CG PRO A 814 21.648 15.943 22.916 1.00 9.66 C
+ATOM 2412 CD PRO A 814 23.039 15.809 22.346 1.00 10.13 C
+ATOM 2413 N LEU A 815 24.928 18.080 24.020 1.00 8.09 N
+ATOM 2414 CA LEU A 815 25.825 18.289 25.163 1.00 9.26 C
+ATOM 2415 C LEU A 815 27.119 19.089 24.945 1.00 9.98 C
+ATOM 2416 O LEU A 815 27.347 19.571 23.857 1.00 10.44 O
+ATOM 2417 CB LEU A 815 26.051 16.923 25.847 1.00 8.58 C
+ATOM 2418 CG LEU A 815 24.724 16.170 26.141 1.00 9.21 C
+ATOM 2419 CD1 LEU A 815 24.955 14.714 26.526 1.00 9.54 C
+ATOM 2420 CD2 LEU A 815 23.891 16.923 27.190 1.00 10.37 C
+ATOM 2421 N ILE A 816 27.980 19.197 25.955 1.00 9.94 N
+ATOM 2422 CA ILE A 816 29.161 20.059 25.845 1.00 10.42 C
+ATOM 2423 C ILE A 816 30.452 19.489 25.311 1.00 11.62 C
+ATOM 2424 O ILE A 816 31.414 20.262 25.072 1.00 12.59 O
+ATOM 2425 CB ILE A 816 29.409 20.894 27.130 1.00 10.43 C
+ATOM 2426 CG1 ILE A 816 29.907 20.004 28.273 1.00 10.94 C
+ATOM 2427 CG2 ILE A 816 28.127 21.700 27.517 1.00 10.20 C
+ATOM 2428 CD1 ILE A 816 30.164 20.813 29.562 1.00 12.17 C
+ATOM 2429 N TYR A 817 30.515 18.160 25.194 1.00 10.91 N
+ATOM 2430 CA TYR A 817 31.657 17.467 24.584 1.00 11.73 C
+ATOM 2431 C TYR A 817 31.057 16.658 23.438 1.00 13.04 C
+ATOM 2432 O TYR A 817 29.930 16.125 23.546 1.00 11.41 O
+ATOM 2433 CB TYR A 817 32.340 16.456 25.519 1.00 11.17 C
+ATOM 2434 CG TYR A 817 33.184 17.068 26.592 1.00 11.22 C
+ATOM 2435 CD1 TYR A 817 32.616 17.477 27.793 1.00 10.70 C
+ATOM 2436 CD2 TYR A 817 34.559 17.207 26.429 1.00 12.19 C
+ATOM 2437 CE1 TYR A 817 33.380 17.999 28.807 1.00 12.01 C
+ATOM 2438 CE2 TYR A 817 35.349 17.737 27.451 1.00 12.70 C
+ATOM 2439 CZ TYR A 817 34.741 18.127 28.644 1.00 13.25 C
+ATOM 2440 OH TYR A 817 35.498 18.620 29.690 1.00 15.87 O
+ATOM 2441 N ASP A 818 31.819 16.542 22.349 1.00 13.44 N
+ATOM 2442 CA ASP A 818 31.338 15.771 21.236 1.00 14.99 C
+ATOM 2443 C ASP A 818 31.576 14.300 21.542 1.00 15.86 C
+ATOM 2444 O ASP A 818 32.012 13.962 22.647 1.00 14.85 O
+ATOM 2445 CB ASP A 818 31.922 16.260 19.887 1.00 16.12 C
+ATOM 2446 CG ASP A 818 33.417 15.981 19.714 1.00 17.99 C
+ATOM 2447 OD1 ASP A 818 34.032 15.182 20.450 1.00 16.77 O
+ATOM 2448 OD2 ASP A 818 33.993 16.585 18.780 1.00 19.79 O
+ATOM 2449 N SER A 819 31.243 13.431 20.589 1.00 17.08 N
+ATOM 2450 CA SER A 819 31.396 11.984 20.748 1.00 19.29 C
+ATOM 2451 C SER A 819 32.800 11.488 20.891 1.00 20.46 C
+ATOM 2452 O SER A 819 32.987 10.334 21.280 1.00 21.54 O
+ATOM 2453 CB SER A 819 30.744 11.235 19.598 1.00 21.26 C
+ATOM 2454 OG SER A 819 29.363 11.525 19.575 1.00 25.86 O
+ATOM 2455 N ASN A 820 33.780 12.318 20.525 1.00 21.11 N
+ATOM 2456 CA ASN A 820 35.206 11.968 20.642 1.00 22.86 C
+ATOM 2457 C ASN A 820 35.869 12.641 21.825 1.00 21.96 C
+ATOM 2458 O ASN A 820 37.100 12.669 21.934 1.00 22.33 O
+ATOM 2459 CB ASN A 820 35.972 12.374 19.384 1.00 26.07 C
+ATOM 2460 CG ASN A 820 35.385 11.767 18.155 1.00 29.63 C
+ATOM 2461 OD1 ASN A 820 34.908 12.482 17.258 1.00 32.36 O
+ATOM 2462 ND2 ASN A 820 35.322 10.433 18.130 1.00 31.13 N
+ATOM 2463 N TYR A 821 35.041 13.214 22.694 1.00 19.84 N
+ATOM 2464 CA TYR A 821 35.495 13.919 23.881 1.00 18.97 C
+ATOM 2465 C TYR A 821 36.243 15.233 23.622 1.00 18.33 C
+ATOM 2466 O TYR A 821 37.013 15.715 24.459 1.00 18.20 O
+ATOM 2467 CB TYR A 821 36.231 12.981 24.861 1.00 18.34 C
+ATOM 2468 CG TYR A 821 35.330 11.886 25.421 1.00 17.65 C
+ATOM 2469 CD1 TYR A 821 34.399 12.168 26.423 1.00 16.97 C
+ATOM 2470 CD2 TYR A 821 35.387 10.578 24.920 1.00 17.21 C
+ATOM 2471 CE1 TYR A 821 33.546 11.174 26.919 1.00 16.81 C
+ATOM 2472 CE2 TYR A 821 34.537 9.579 25.406 1.00 17.65 C
+ATOM 2473 CZ TYR A 821 33.619 9.891 26.414 1.00 17.12 C
+ATOM 2474 OH TYR A 821 32.809 8.913 26.946 1.00 15.77 O
+ATOM 2475 N ASN A 822 35.971 15.840 22.473 1.00 18.49 N
+ATOM 2476 CA ASN A 822 36.562 17.139 22.189 1.00 18.20 C
+ATOM 2477 C ASN A 822 35.553 18.103 22.727 1.00 16.51 C
+ATOM 2478 O ASN A 822 34.369 17.969 22.437 1.00 17.16 O
+ATOM 2479 CB ASN A 822 36.668 17.429 20.696 1.00 21.02 C
+ATOM 2480 CG ASN A 822 37.546 16.452 19.969 1.00 23.10 C
+ATOM 2481 OD1 ASN A 822 38.703 16.259 20.326 1.00 25.21 O
+ATOM 2482 ND2 ASN A 822 36.994 15.819 18.932 1.00 24.58 N
+ATOM 2483 N PRO A 823 35.995 19.099 23.496 1.00 16.71 N
+ATOM 2484 CA PRO A 823 35.042 20.082 24.040 1.00 16.17 C
+ATOM 2485 C PRO A 823 34.444 20.875 22.865 1.00 15.63 C
+ATOM 2486 O PRO A 823 35.152 21.224 21.910 1.00 15.91 O
+ATOM 2487 CB PRO A 823 35.924 21.012 24.897 1.00 17.17 C
+ATOM 2488 CG PRO A 823 37.258 20.275 25.053 1.00 17.76 C
+ATOM 2489 CD PRO A 823 37.396 19.453 23.810 1.00 16.99 C
+ATOM 2490 N LYS A 824 33.139 21.085 22.909 1.00 13.57 N
+ATOM 2491 CA LYS A 824 32.423 21.863 21.889 1.00 12.32 C
+ATOM 2492 C LYS A 824 32.449 23.355 22.309 1.00 12.09 C
+ATOM 2493 O LYS A 824 32.884 23.693 23.427 1.00 12.30 O
+ATOM 2494 CB LYS A 824 30.979 21.342 21.770 1.00 11.52 C
+ATOM 2495 CG LYS A 824 30.916 19.968 21.123 1.00 11.54 C
+ATOM 2496 CD LYS A 824 29.569 19.254 21.306 1.00 11.61 C
+ATOM 2497 CE LYS A 824 28.399 20.006 20.747 1.00 11.08 C
+ATOM 2498 NZ LYS A 824 27.131 19.256 21.001 1.00 10.96 N
+ATOM 2499 N PRO A 825 31.969 24.270 21.444 1.00 11.81 N
+ATOM 2500 CA PRO A 825 31.984 25.692 21.821 1.00 11.31 C
+ATOM 2501 C PRO A 825 31.261 25.964 23.155 1.00 10.16 C
+ATOM 2502 O PRO A 825 31.646 26.858 23.906 1.00 11.32 O
+ATOM 2503 CB PRO A 825 31.265 26.355 20.648 1.00 12.10 C
+ATOM 2504 CG PRO A 825 31.716 25.493 19.463 1.00 12.71 C
+ATOM 2505 CD PRO A 825 31.585 24.086 20.026 1.00 12.89 C
+ATOM 2506 N ALA A 826 30.235 25.160 23.438 1.00 10.41 N
+ATOM 2507 CA ALA A 826 29.444 25.299 24.663 1.00 10.86 C
+ATOM 2508 C ALA A 826 30.273 25.212 25.961 1.00 10.74 C
+ATOM 2509 O ALA A 826 30.002 25.940 26.927 1.00 11.82 O
+ATOM 2510 CB ALA A 826 28.311 24.265 24.656 1.00 11.12 C
+ATOM 2511 N TYR A 827 31.287 24.357 25.968 1.00 10.86 N
+ATOM 2512 CA TYR A 827 32.144 24.207 27.139 1.00 12.08 C
+ATOM 2513 C TYR A 827 32.858 25.519 27.469 1.00 12.40 C
+ATOM 2514 O TYR A 827 32.833 25.997 28.592 1.00 12.25 O
+ATOM 2515 CB TYR A 827 33.134 23.065 26.907 1.00 13.27 C
+ATOM 2516 CG TYR A 827 34.136 22.880 28.009 1.00 14.69 C
+ATOM 2517 CD1 TYR A 827 35.315 23.617 28.011 1.00 14.93 C
+ATOM 2518 CD2 TYR A 827 33.916 21.961 29.055 1.00 15.06 C
+ATOM 2519 CE1 TYR A 827 36.276 23.464 29.019 1.00 16.48 C
+ATOM 2520 CE2 TYR A 827 34.870 21.790 30.081 1.00 15.81 C
+ATOM 2521 CZ TYR A 827 36.060 22.556 30.059 1.00 16.30 C
+ATOM 2522 OH TYR A 827 37.025 22.471 31.056 1.00 16.23 O
+ATOM 2523 N ASN A 828 33.457 26.145 26.470 1.00 13.95 N
+ATOM 2524 CA ASN A 828 34.135 27.419 26.727 1.00 15.71 C
+ATOM 2525 C ASN A 828 33.162 28.523 27.054 1.00 13.12 C
+ATOM 2526 O ASN A 828 33.484 29.422 27.802 1.00 13.33 O
+ATOM 2527 CB ASN A 828 34.946 27.853 25.515 1.00 19.94 C
+ATOM 2528 CG ASN A 828 36.112 26.926 25.242 1.00 24.62 C
+ATOM 2529 OD1 ASN A 828 36.814 26.484 26.176 1.00 26.55 O
+ATOM 2530 ND2 ASN A 828 36.338 26.623 23.956 1.00 26.63 N
+ATOM 2531 N ALA A 829 31.987 28.482 26.436 1.00 12.35 N
+ATOM 2532 CA ALA A 829 30.975 29.497 26.676 1.00 12.74 C
+ATOM 2533 C ALA A 829 30.515 29.486 28.143 1.00 12.84 C
+ATOM 2534 O ALA A 829 30.348 30.537 28.752 1.00 13.18 O
+ATOM 2535 CB ALA A 829 29.797 29.326 25.734 1.00 11.32 C
+ATOM 2536 N ILE A 830 30.328 28.295 28.707 1.00 12.98 N
+ATOM 2537 CA ILE A 830 29.935 28.187 30.113 1.00 12.88 C
+ATOM 2538 C ILE A 830 31.096 28.728 31.003 1.00 12.50 C
+ATOM 2539 O ILE A 830 30.866 29.487 31.954 1.00 11.19 O
+ATOM 2540 CB ILE A 830 29.587 26.694 30.459 1.00 12.33 C
+ATOM 2541 CG1 ILE A 830 28.313 26.272 29.725 1.00 12.18 C
+ATOM 2542 CG2 ILE A 830 29.430 26.500 31.959 1.00 12.90 C
+ATOM 2543 CD1 ILE A 830 27.983 24.836 29.935 1.00 12.56 C
+ATOM 2544 N LYS A 831 32.329 28.328 30.681 1.00 14.33 N
+ATOM 2545 CA LYS A 831 33.497 28.783 31.419 1.00 16.26 C
+ATOM 2546 C LYS A 831 33.576 30.330 31.376 1.00 17.49 C
+ATOM 2547 O LYS A 831 33.779 30.972 32.416 1.00 18.07 O
+ATOM 2548 CB LYS A 831 34.765 28.111 30.886 1.00 17.18 C
+ATOM 2549 CG LYS A 831 35.903 28.130 31.896 1.00 19.97 C
+ATOM 2550 CD LYS A 831 37.109 27.261 31.499 1.00 20.31 C
+ATOM 2551 CE LYS A 831 36.844 25.775 31.738 1.00 19.79 C
+ATOM 2552 NZ LYS A 831 38.059 24.922 31.507 1.00 19.41 N
+ATOM 2553 N GLU A 832 33.303 30.938 30.222 1.00 17.44 N
+ATOM 2554 CA GLU A 832 33.295 32.405 30.127 1.00 18.98 C
+ATOM 2555 C GLU A 832 32.231 33.087 30.986 1.00 17.60 C
+ATOM 2556 O GLU A 832 32.498 34.129 31.574 1.00 17.32 O
+ATOM 2557 CB GLU A 832 33.127 32.852 28.693 1.00 22.28 C
+ATOM 2558 CG GLU A 832 34.407 32.709 27.894 1.00 27.15 C
+ATOM 2559 CD GLU A 832 34.180 32.833 26.396 1.00 30.33 C
+ATOM 2560 OE1 GLU A 832 33.091 33.325 25.985 1.00 31.78 O
+ATOM 2561 OE2 GLU A 832 35.075 32.397 25.624 1.00 32.82 O
+ATOM 2562 N ALA A 833 31.013 32.542 31.016 1.00 15.16 N
+ATOM 2563 CA ALA A 833 29.951 33.107 31.855 1.00 15.95 C
+ATOM 2564 C ALA A 833 30.378 33.076 33.332 1.00 16.66 C
+ATOM 2565 O ALA A 833 30.089 34.016 34.063 1.00 17.35 O
+ATOM 2566 CB ALA A 833 28.649 32.343 31.684 1.00 14.48 C
+ATOM 2567 N LEU A 834 31.038 31.990 33.754 1.00 17.48 N
+ATOM 2568 CA LEU A 834 31.506 31.815 35.139 1.00 18.98 C
+ATOM 2569 C LEU A 834 32.620 32.783 35.520 1.00 22.12 C
+ATOM 2570 O LEU A 834 32.789 33.094 36.693 1.00 21.51 O
+ATOM 2571 CB LEU A 834 31.962 30.369 35.383 1.00 17.15 C
+ATOM 2572 CG LEU A 834 30.825 29.329 35.442 1.00 16.47 C
+ATOM 2573 CD1 LEU A 834 31.362 27.896 35.381 1.00 14.97 C
+ATOM 2574 CD2 LEU A 834 29.996 29.568 36.720 1.00 16.96 C
+ATOM 2575 N MET A 835 33.385 33.232 34.527 1.00 25.70 N
+ATOM 2576 CA MET A 835 34.472 34.201 34.735 1.00 29.43 C
+ATOM 2577 C MET A 835 33.964 35.671 34.705 1.00 31.58 C
+ATOM 2578 O MET A 835 34.552 36.495 35.446 1.00 33.91 O
+ATOM 2579 CB MET A 835 35.604 34.002 33.705 1.00 30.09 C
+ATOM 2580 CG MET A 835 36.360 32.687 33.847 1.00 32.15 C
+ATOM 2581 SD MET A 835 37.580 32.273 32.506 1.00 36.39 S
+ATOM 2582 CE MET A 835 36.817 33.081 31.002 1.00 34.53 C
+TER 2583 MET A 835
+ATOM 2584 N ASN B 516 -17.198 33.606 80.565 1.00 24.19 N
+ATOM 2585 CA ASN B 516 -16.794 32.177 80.713 1.00 23.59 C
+ATOM 2586 C ASN B 516 -15.613 31.709 79.850 1.00 21.65 C
+ATOM 2587 O ASN B 516 -15.120 30.608 80.069 1.00 21.50 O
+ATOM 2588 CB ASN B 516 -17.983 31.225 80.484 1.00 26.32 C
+ATOM 2589 CG ASN B 516 -19.046 31.318 81.581 1.00 28.84 C
+ATOM 2590 OD1 ASN B 516 -18.869 32.032 82.589 1.00 30.47 O
+ATOM 2591 ND2 ASN B 516 -20.172 30.620 81.377 1.00 28.93 N
+ATOM 2592 N ALA B 517 -15.194 32.482 78.843 1.00 18.62 N
+ATOM 2593 CA ALA B 517 -14.041 32.076 78.017 1.00 17.01 C
+ATOM 2594 C ALA B 517 -12.742 32.290 78.814 1.00 16.34 C
+ATOM 2595 O ALA B 517 -12.721 33.058 79.778 1.00 16.04 O
+ATOM 2596 CB ALA B 517 -13.986 32.900 76.733 1.00 15.63 C
+ATOM 2597 N LEU B 518 -11.666 31.614 78.431 1.00 15.12 N
+ATOM 2598 CA LEU B 518 -10.394 31.800 79.111 1.00 14.72 C
+ATOM 2599 C LEU B 518 -10.003 33.282 79.170 1.00 14.77 C
+ATOM 2600 O LEU B 518 -9.486 33.756 80.210 1.00 14.43 O
+ATOM 2601 CB LEU B 518 -9.284 31.034 78.384 1.00 15.61 C
+ATOM 2602 CG LEU B 518 -9.208 29.516 78.486 1.00 16.40 C
+ATOM 2603 CD1 LEU B 518 -8.025 28.999 77.638 1.00 16.60 C
+ATOM 2604 CD2 LEU B 518 -9.044 29.134 79.964 1.00 16.46 C
+ATOM 2605 N ARG B 519 -10.239 34.020 78.070 1.00 14.30 N
+ATOM 2606 CA ARG B 519 -9.887 35.444 78.016 1.00 15.23 C
+ATOM 2607 C ARG B 519 -10.591 36.325 79.069 1.00 15.90 C
+ATOM 2608 O ARG B 519 -10.002 37.305 79.554 1.00 15.46 O
+ATOM 2609 CB ARG B 519 -10.104 36.032 76.612 1.00 15.27 C
+ATOM 2610 CG ARG B 519 -11.539 36.053 76.163 1.00 16.66 C
+ATOM 2611 CD ARG B 519 -11.648 36.598 74.766 1.00 19.19 C
+ATOM 2612 NE ARG B 519 -11.233 37.996 74.670 1.00 22.45 N
+ATOM 2613 CZ ARG B 519 -11.153 38.675 73.516 1.00 24.43 C
+ATOM 2614 NH1 ARG B 519 -11.454 38.088 72.337 1.00 25.11 N
+ATOM 2615 NH2 ARG B 519 -10.786 39.940 73.549 1.00 24.68 N
+ATOM 2616 N ASP B 520 -11.829 35.965 79.433 1.00 16.87 N
+ATOM 2617 CA ASP B 520 -12.589 36.726 80.454 1.00 18.63 C
+ATOM 2618 C ASP B 520 -11.969 36.598 81.863 1.00 19.37 C
+ATOM 2619 O ASP B 520 -11.858 37.585 82.602 1.00 20.45 O
+ATOM 2620 CB ASP B 520 -14.049 36.289 80.461 1.00 19.16 C
+ATOM 2621 CG ASP B 520 -14.698 36.424 79.090 1.00 20.40 C
+ATOM 2622 OD1 ASP B 520 -14.551 37.491 78.455 1.00 21.51 O
+ATOM 2623 OD2 ASP B 520 -15.334 35.456 78.629 1.00 21.42 O
+ATOM 2624 N TYR B 521 -11.549 35.393 82.225 1.00 19.60 N
+ATOM 2625 CA TYR B 521 -10.895 35.196 83.521 1.00 21.30 C
+ATOM 2626 C TYR B 521 -9.501 35.805 83.525 1.00 21.32 C
+ATOM 2627 O TYR B 521 -9.049 36.322 84.544 1.00 21.83 O
+ATOM 2628 CB TYR B 521 -10.787 33.715 83.852 1.00 23.03 C
+ATOM 2629 CG TYR B 521 -12.125 33.102 84.122 1.00 26.74 C
+ATOM 2630 CD1 TYR B 521 -12.868 33.476 85.259 1.00 28.38 C
+ATOM 2631 CD2 TYR B 521 -12.684 32.180 83.234 1.00 28.39 C
+ATOM 2632 CE1 TYR B 521 -14.142 32.948 85.499 1.00 29.52 C
+ATOM 2633 CE2 TYR B 521 -13.963 31.644 83.462 1.00 30.27 C
+ATOM 2634 CZ TYR B 521 -14.682 32.038 84.596 1.00 30.65 C
+ATOM 2635 OH TYR B 521 -15.951 31.538 84.797 1.00 32.07 O
+ATOM 2636 N ALA B 522 -8.816 35.726 82.380 1.00 19.75 N
+ATOM 2637 CA ALA B 522 -7.463 36.263 82.250 1.00 18.98 C
+ATOM 2638 C ALA B 522 -7.493 37.764 82.397 1.00 18.24 C
+ATOM 2639 O ALA B 522 -6.710 38.344 83.129 1.00 17.99 O
+ATOM 2640 CB ALA B 522 -6.854 35.863 80.863 1.00 18.58 C
+ATOM 2641 N GLU B 523 -8.431 38.389 81.714 1.00 19.66 N
+ATOM 2642 CA GLU B 523 -8.574 39.833 81.773 1.00 23.96 C
+ATOM 2643 C GLU B 523 -8.827 40.320 83.202 1.00 23.53 C
+ATOM 2644 O GLU B 523 -8.287 41.351 83.625 1.00 22.86 O
+ATOM 2645 CB GLU B 523 -9.728 40.285 80.877 1.00 27.38 C
+ATOM 2646 CG GLU B 523 -9.706 41.770 80.603 1.00 32.86 C
+ATOM 2647 CD GLU B 523 -8.328 42.238 80.121 1.00 36.70 C
+ATOM 2648 OE1 GLU B 523 -7.908 41.815 79.003 1.00 37.99 O
+ATOM 2649 OE2 GLU B 523 -7.656 43.004 80.872 1.00 38.64 O
+ATOM 2650 N ALA B 524 -9.657 39.570 83.924 1.00 23.28 N
+ATOM 2651 CA ALA B 524 -10.023 39.869 85.314 1.00 23.19 C
+ATOM 2652 C ALA B 524 -8.781 39.888 86.211 1.00 22.77 C
+ATOM 2653 O ALA B 524 -8.730 40.622 87.216 1.00 23.22 O
+ATOM 2654 CB ALA B 524 -11.038 38.818 85.825 1.00 22.59 C
+ATOM 2655 N ARG B 525 -7.770 39.115 85.823 1.00 21.90 N
+ATOM 2656 CA ARG B 525 -6.529 39.022 86.590 1.00 21.65 C
+ATOM 2657 C ARG B 525 -5.394 39.897 86.033 1.00 21.56 C
+ATOM 2658 O ARG B 525 -4.266 39.838 86.524 1.00 22.44 O
+ATOM 2659 CB ARG B 525 -6.087 37.558 86.673 1.00 23.09 C
+ATOM 2660 CG ARG B 525 -7.188 36.569 87.116 1.00 25.12 C
+ATOM 2661 CD ARG B 525 -7.754 36.897 88.502 1.00 27.14 C
+ATOM 2662 NE ARG B 525 -6.700 36.901 89.516 1.00 29.34 N
+ATOM 2663 CZ ARG B 525 -6.201 35.814 90.111 1.00 30.54 C
+ATOM 2664 NH1 ARG B 525 -6.666 34.605 89.819 1.00 31.71 N
+ATOM 2665 NH2 ARG B 525 -5.158 35.922 90.932 1.00 31.22 N
+ATOM 2666 N GLY B 526 -5.689 40.689 85.002 1.00 20.68 N
+ATOM 2667 CA GLY B 526 -4.689 41.565 84.402 1.00 21.01 C
+ATOM 2668 C GLY B 526 -3.658 40.900 83.487 1.00 21.39 C
+ATOM 2669 O GLY B 526 -2.560 41.417 83.260 1.00 20.72 O
+ATOM 2670 N ILE B 527 -3.996 39.745 82.945 1.00 20.68 N
+ATOM 2671 CA ILE B 527 -3.049 39.085 82.075 1.00 20.61 C
+ATOM 2672 C ILE B 527 -3.669 38.813 80.691 1.00 18.91 C
+ATOM 2673 O ILE B 527 -4.906 38.825 80.535 1.00 18.67 O
+ATOM 2674 CB ILE B 527 -2.482 37.761 82.717 1.00 23.03 C
+ATOM 2675 CG1 ILE B 527 -3.555 36.686 82.784 1.00 23.34 C
+ATOM 2676 CG2 ILE B 527 -1.876 38.002 84.142 1.00 22.85 C
+ATOM 2677 CD1 ILE B 527 -3.003 35.329 82.359 1.00 24.94 C
+ATOM 2678 N LYS B 528 -2.793 38.662 79.692 1.00 15.53 N
+ATOM 2679 CA LYS B 528 -3.181 38.384 78.312 1.00 14.72 C
+ATOM 2680 C LYS B 528 -2.870 36.926 78.056 1.00 13.09 C
+ATOM 2681 O LYS B 528 -1.785 36.449 78.397 1.00 14.18 O
+ATOM 2682 CB LYS B 528 -2.378 39.266 77.328 1.00 15.94 C
+ATOM 2683 CG LYS B 528 -2.692 40.775 77.453 1.00 17.24 C
+ATOM 2684 CD LYS B 528 -4.198 41.041 77.218 1.00 18.91 C
+ATOM 2685 CE LYS B 528 -4.576 42.501 77.532 1.00 20.63 C
+ATOM 2686 NZ LYS B 528 -5.935 42.849 77.028 1.00 21.53 N
+ATOM 2687 N ILE B 529 -3.824 36.213 77.474 1.00 11.29 N
+ATOM 2688 CA ILE B 529 -3.649 34.804 77.182 1.00 11.08 C
+ATOM 2689 C ILE B 529 -3.780 34.648 75.656 1.00 10.68 C
+ATOM 2690 O ILE B 529 -4.732 35.152 75.041 1.00 12.67 O
+ATOM 2691 CB ILE B 529 -4.659 33.903 78.025 1.00 12.21 C
+ATOM 2692 CG1 ILE B 529 -4.401 32.421 77.740 1.00 14.10 C
+ATOM 2693 CG2 ILE B 529 -6.112 34.294 77.795 1.00 12.98 C
+ATOM 2694 CD1 ILE B 529 -4.851 31.482 78.882 1.00 15.18 C
+ATOM 2695 N GLY B 530 -2.813 33.995 75.034 1.00 10.16 N
+ATOM 2696 CA GLY B 530 -2.864 33.888 73.590 1.00 9.94 C
+ATOM 2697 C GLY B 530 -2.346 32.606 72.996 1.00 9.84 C
+ATOM 2698 O GLY B 530 -2.031 31.631 73.689 1.00 9.14 O
+ATOM 2699 N THR B 531 -2.215 32.636 71.673 1.00 9.09 N
+ATOM 2700 CA THR B 531 -1.760 31.497 70.920 1.00 8.33 C
+ATOM 2701 C THR B 531 -1.186 31.951 69.571 1.00 8.59 C
+ATOM 2702 O THR B 531 -1.491 33.040 69.103 1.00 9.34 O
+ATOM 2703 CB THR B 531 -2.964 30.567 70.613 1.00 8.75 C
+ATOM 2704 OG1 THR B 531 -2.529 29.436 69.850 1.00 9.28 O
+ATOM 2705 CG2 THR B 531 -4.066 31.336 69.841 1.00 9.03 C
+ATOM 2706 N CYS B 532 -0.325 31.134 68.988 1.00 8.86 N
+ATOM 2707 CA CYS B 532 0.166 31.443 67.652 1.00 10.06 C
+ATOM 2708 C CYS B 532 -0.975 30.982 66.730 1.00 11.85 C
+ATOM 2709 O CYS B 532 -1.819 30.115 67.117 1.00 11.33 O
+ATOM 2710 CB CYS B 532 1.455 30.694 67.321 1.00 12.87 C
+ATOM 2711 SG CYS B 532 1.297 28.919 67.163 1.00 15.38 S
+ATOM 2712 N VAL B 533 -1.043 31.573 65.538 1.00 9.92 N
+ATOM 2713 CA VAL B 533 -2.088 31.249 64.568 1.00 10.61 C
+ATOM 2714 C VAL B 533 -1.512 30.355 63.453 1.00 12.36 C
+ATOM 2715 O VAL B 533 -0.493 30.678 62.822 1.00 13.27 O
+ATOM 2716 CB VAL B 533 -2.756 32.551 64.048 1.00 11.29 C
+ATOM 2717 CG1 VAL B 533 -3.845 32.259 62.989 1.00 11.55 C
+ATOM 2718 CG2 VAL B 533 -3.362 33.303 65.241 1.00 11.30 C
+ATOM 2719 N ASN B 534 -2.112 29.172 63.339 1.00 12.50 N
+ATOM 2720 CA ASN B 534 -1.720 28.125 62.391 1.00 13.59 C
+ATOM 2721 C ASN B 534 -2.298 28.406 60.978 1.00 13.85 C
+ATOM 2722 O ASN B 534 -3.255 29.187 60.815 1.00 13.79 O
+ATOM 2723 CB ASN B 534 -2.159 26.726 62.940 1.00 13.37 C
+ATOM 2724 CG ASN B 534 -1.602 26.434 64.371 1.00 14.66 C
+ATOM 2725 OD1 ASN B 534 -0.390 26.258 64.542 1.00 16.83 O
+ATOM 2726 ND2 ASN B 534 -2.472 26.456 65.393 1.00 11.93 N
+ATOM 2727 N TYR B 535 -1.774 27.704 59.976 1.00 14.14 N
+ATOM 2728 CA TYR B 535 -2.199 27.914 58.586 1.00 13.82 C
+ATOM 2729 C TYR B 535 -3.694 27.910 58.232 1.00 14.13 C
+ATOM 2730 O TYR B 535 -4.100 28.646 57.326 1.00 14.06 O
+ATOM 2731 CB TYR B 535 -1.420 26.969 57.635 1.00 16.23 C
+ATOM 2732 CG TYR B 535 -1.819 25.487 57.670 1.00 17.27 C
+ATOM 2733 CD1 TYR B 535 -2.972 25.039 57.003 1.00 18.80 C
+ATOM 2734 CD2 TYR B 535 -1.082 24.556 58.410 1.00 18.96 C
+ATOM 2735 CE1 TYR B 535 -3.394 23.699 57.079 1.00 20.20 C
+ATOM 2736 CE2 TYR B 535 -1.491 23.209 58.502 1.00 19.71 C
+ATOM 2737 CZ TYR B 535 -2.651 22.789 57.838 1.00 21.42 C
+ATOM 2738 OH TYR B 535 -3.104 21.473 57.953 1.00 23.97 O
+ATOM 2739 N PRO B 536 -4.545 27.103 58.933 1.00 14.36 N
+ATOM 2740 CA PRO B 536 -5.977 27.096 58.575 1.00 14.60 C
+ATOM 2741 C PRO B 536 -6.645 28.458 58.615 1.00 15.24 C
+ATOM 2742 O PRO B 536 -7.628 28.691 57.902 1.00 15.74 O
+ATOM 2743 CB PRO B 536 -6.603 26.178 59.635 1.00 15.96 C
+ATOM 2744 CG PRO B 536 -5.504 25.297 60.026 1.00 16.03 C
+ATOM 2745 CD PRO B 536 -4.304 26.202 60.083 1.00 14.64 C
+ATOM 2746 N PHE B 537 -6.157 29.339 59.490 1.00 14.57 N
+ATOM 2747 CA PHE B 537 -6.708 30.682 59.591 1.00 16.35 C
+ATOM 2748 C PHE B 537 -6.652 31.442 58.241 1.00 18.09 C
+ATOM 2749 O PHE B 537 -7.584 32.148 57.880 1.00 18.37 O
+ATOM 2750 CB PHE B 537 -5.937 31.500 60.630 1.00 15.99 C
+ATOM 2751 CG PHE B 537 -6.288 32.961 60.618 1.00 16.06 C
+ATOM 2752 CD1 PHE B 537 -7.435 33.424 61.273 1.00 16.49 C
+ATOM 2753 CD2 PHE B 537 -5.508 33.870 59.906 1.00 16.14 C
+ATOM 2754 CE1 PHE B 537 -7.791 34.780 61.208 1.00 17.50 C
+ATOM 2755 CE2 PHE B 537 -5.856 35.229 59.834 1.00 16.02 C
+ATOM 2756 CZ PHE B 537 -6.987 35.684 60.477 1.00 16.62 C
+ATOM 2757 N TYR B 538 -5.528 31.313 57.540 1.00 20.47 N
+ATOM 2758 CA TYR B 538 -5.301 31.997 56.267 1.00 22.81 C
+ATOM 2759 C TYR B 538 -6.036 31.464 55.042 1.00 26.14 C
+ATOM 2760 O TYR B 538 -6.329 32.233 54.140 1.00 27.49 O
+ATOM 2761 CB TYR B 538 -3.809 32.080 55.999 1.00 20.96 C
+ATOM 2762 CG TYR B 538 -3.090 32.832 57.083 1.00 20.46 C
+ATOM 2763 CD1 TYR B 538 -3.161 34.236 57.154 1.00 20.07 C
+ATOM 2764 CD2 TYR B 538 -2.356 32.148 58.058 1.00 20.31 C
+ATOM 2765 CE1 TYR B 538 -2.514 34.932 58.173 1.00 20.01 C
+ATOM 2766 CE2 TYR B 538 -1.711 32.827 59.076 1.00 20.38 C
+ATOM 2767 CZ TYR B 538 -1.793 34.228 59.126 1.00 21.06 C
+ATOM 2768 OH TYR B 538 -1.145 34.912 60.129 1.00 23.04 O
+ATOM 2769 N ASN B 539 -6.263 30.159 54.950 1.00 29.19 N
+ATOM 2770 CA ASN B 539 -7.000 29.658 53.792 1.00 33.11 C
+ATOM 2771 C ASN B 539 -8.424 29.182 54.100 1.00 33.40 C
+ATOM 2772 O ASN B 539 -9.110 28.625 53.243 1.00 33.76 O
+ATOM 2773 CB ASN B 539 -6.193 28.622 53.001 1.00 35.99 C
+ATOM 2774 CG ASN B 539 -5.560 27.571 53.873 1.00 38.65 C
+ATOM 2775 OD1 ASN B 539 -4.461 27.086 53.566 1.00 40.04 O
+ATOM 2776 ND2 ASN B 539 -6.246 27.190 54.963 1.00 39.00 N
+ATOM 2777 N ASN B 540 -8.877 29.489 55.311 1.00 34.01 N
+ATOM 2778 CA ASN B 540 -10.213 29.149 55.808 1.00 34.78 C
+ATOM 2779 C ASN B 540 -10.744 27.728 55.539 1.00 32.59 C
+ATOM 2780 O ASN B 540 -11.890 27.533 55.146 1.00 33.15 O
+ATOM 2781 CB ASN B 540 -11.235 30.225 55.394 1.00 38.41 C
+ATOM 2782 CG ASN B 540 -11.623 31.146 56.570 1.00 41.06 C
+ATOM 2783 OD1 ASN B 540 -10.752 31.716 57.248 1.00 42.46 O
+ATOM 2784 ND2 ASN B 540 -12.931 31.263 56.837 1.00 42.07 N
+ATOM 2785 N SER B 541 -9.934 26.741 55.884 1.00 29.11 N
+ATOM 2786 CA SER B 541 -10.267 25.349 55.676 1.00 26.26 C
+ATOM 2787 C SER B 541 -10.792 24.648 56.919 1.00 24.42 C
+ATOM 2788 O SER B 541 -11.088 23.460 56.847 1.00 24.37 O
+ATOM 2789 CB SER B 541 -9.014 24.603 55.202 1.00 27.33 C
+ATOM 2790 OG SER B 541 -7.904 24.819 56.084 1.00 28.76 O
+ATOM 2791 N ASP B 542 -10.835 25.346 58.058 1.00 21.69 N
+ATOM 2792 CA ASP B 542 -11.289 24.745 59.322 1.00 20.28 C
+ATOM 2793 C ASP B 542 -12.075 25.780 60.126 1.00 20.58 C
+ATOM 2794 O ASP B 542 -11.529 26.487 60.997 1.00 20.10 O
+ATOM 2795 CB ASP B 542 -10.085 24.238 60.155 1.00 19.19 C
+ATOM 2796 CG ASP B 542 -10.507 23.354 61.336 1.00 18.81 C
+ATOM 2797 OD1 ASP B 542 -11.668 23.468 61.800 1.00 18.76 O
+ATOM 2798 OD2 ASP B 542 -9.677 22.541 61.799 1.00 17.51 O
+ATOM 2799 N PRO B 543 -13.384 25.858 59.870 1.00 20.18 N
+ATOM 2800 CA PRO B 543 -14.262 26.806 60.559 1.00 18.95 C
+ATOM 2801 C PRO B 543 -14.278 26.650 62.078 1.00 17.86 C
+ATOM 2802 O PRO B 543 -14.426 27.643 62.796 1.00 17.77 O
+ATOM 2803 CB PRO B 543 -15.630 26.563 59.907 1.00 20.68 C
+ATOM 2804 CG PRO B 543 -15.549 25.141 59.423 1.00 22.15 C
+ATOM 2805 CD PRO B 543 -14.126 24.992 58.930 1.00 21.42 C
+ATOM 2806 N THR B 544 -14.085 25.435 62.579 1.00 16.90 N
+ATOM 2807 CA THR B 544 -14.080 25.233 64.027 1.00 16.81 C
+ATOM 2808 C THR B 544 -12.856 25.911 64.633 1.00 15.30 C
+ATOM 2809 O THR B 544 -12.952 26.539 65.686 1.00 14.64 O
+ATOM 2810 CB THR B 544 -14.055 23.764 64.395 1.00 18.44 C
+ATOM 2811 OG1 THR B 544 -15.117 23.094 63.710 1.00 21.32 O
+ATOM 2812 CG2 THR B 544 -14.243 23.590 65.918 1.00 18.61 C
+ATOM 2813 N TYR B 545 -11.715 25.784 63.952 1.00 13.89 N
+ATOM 2814 CA TYR B 545 -10.473 26.415 64.404 1.00 13.17 C
+ATOM 2815 C TYR B 545 -10.724 27.927 64.635 1.00 13.84 C
+ATOM 2816 O TYR B 545 -10.448 28.464 65.715 1.00 13.05 O
+ATOM 2817 CB TYR B 545 -9.374 26.207 63.354 1.00 12.36 C
+ATOM 2818 CG TYR B 545 -8.039 26.777 63.739 1.00 11.78 C
+ATOM 2819 CD1 TYR B 545 -7.126 26.017 64.458 1.00 12.10 C
+ATOM 2820 CD2 TYR B 545 -7.700 28.078 63.407 1.00 11.46 C
+ATOM 2821 CE1 TYR B 545 -5.906 26.542 64.852 1.00 12.58 C
+ATOM 2822 CE2 TYR B 545 -6.488 28.612 63.782 1.00 12.30 C
+ATOM 2823 CZ TYR B 545 -5.596 27.843 64.514 1.00 12.47 C
+ATOM 2824 OH TYR B 545 -4.421 28.393 64.980 1.00 13.17 O
+ATOM 2825 N ASN B 546 -11.306 28.590 63.637 1.00 14.02 N
+ATOM 2826 CA ASN B 546 -11.576 30.021 63.725 1.00 14.83 C
+ATOM 2827 C ASN B 546 -12.537 30.404 64.826 1.00 14.45 C
+ATOM 2828 O ASN B 546 -12.362 31.448 65.475 1.00 14.54 O
+ATOM 2829 CB ASN B 546 -12.152 30.556 62.413 1.00 16.88 C
+ATOM 2830 CG ASN B 546 -11.111 30.700 61.323 1.00 19.84 C
+ATOM 2831 OD1 ASN B 546 -10.162 29.924 61.244 1.00 21.24 O
+ATOM 2832 ND2 ASN B 546 -11.298 31.691 60.455 1.00 21.17 N
+ATOM 2833 N SER B 547 -13.576 29.609 65.038 1.00 14.71 N
+ATOM 2834 CA SER B 547 -14.528 30.017 66.070 1.00 16.25 C
+ATOM 2835 C SER B 547 -13.994 29.936 67.504 1.00 14.53 C
+ATOM 2836 O SER B 547 -14.283 30.811 68.310 1.00 14.51 O
+ATOM 2837 CB SER B 547 -15.873 29.328 65.917 1.00 20.24 C
+ATOM 2838 OG SER B 547 -15.771 27.954 66.169 1.00 25.46 O
+ATOM 2839 N ILE B 548 -13.124 28.958 67.773 1.00 13.39 N
+ATOM 2840 CA ILE B 548 -12.511 28.821 69.102 1.00 13.57 C
+ATOM 2841 C ILE B 548 -11.490 29.964 69.283 1.00 12.60 C
+ATOM 2842 O ILE B 548 -11.486 30.649 70.299 1.00 12.28 O
+ATOM 2843 CB ILE B 548 -11.860 27.419 69.269 1.00 14.10 C
+ATOM 2844 CG1 ILE B 548 -12.949 26.354 69.360 1.00 16.45 C
+ATOM 2845 CG2 ILE B 548 -10.973 27.356 70.495 1.00 14.34 C
+ATOM 2846 CD1 ILE B 548 -12.404 24.942 69.294 1.00 18.07 C
+ATOM 2847 N LEU B 549 -10.677 30.201 68.249 1.00 12.20 N
+ATOM 2848 CA LEU B 549 -9.655 31.258 68.240 1.00 11.29 C
+ATOM 2849 C LEU B 549 -10.229 32.614 68.587 1.00 11.08 C
+ATOM 2850 O LEU B 549 -9.733 33.275 69.499 1.00 12.34 O
+ATOM 2851 CB LEU B 549 -8.969 31.340 66.847 1.00 11.37 C
+ATOM 2852 CG LEU B 549 -7.936 32.465 66.583 1.00 12.11 C
+ATOM 2853 CD1 LEU B 549 -6.718 32.351 67.545 1.00 12.34 C
+ATOM 2854 CD2 LEU B 549 -7.472 32.403 65.127 1.00 10.94 C
+ATOM 2855 N GLN B 550 -11.313 33.005 67.905 1.00 11.40 N
+ATOM 2856 CA GLN B 550 -11.904 34.336 68.122 1.00 12.26 C
+ATOM 2857 C GLN B 550 -12.632 34.511 69.454 1.00 12.99 C
+ATOM 2858 O GLN B 550 -12.853 35.624 69.928 1.00 13.63 O
+ATOM 2859 CB GLN B 550 -12.830 34.721 66.950 1.00 11.53 C
+ATOM 2860 CG GLN B 550 -14.103 33.905 66.851 1.00 13.51 C
+ATOM 2861 CD GLN B 550 -14.877 34.133 65.538 1.00 14.34 C
+ATOM 2862 OE1 GLN B 550 -14.377 34.741 64.598 1.00 14.73 O
+ATOM 2863 NE2 GLN B 550 -16.082 33.603 65.469 1.00 13.65 N
+ATOM 2864 N ARG B 551 -12.946 33.384 70.066 1.00 14.27 N
+ATOM 2865 CA ARG B 551 -13.673 33.355 71.317 1.00 15.63 C
+ATOM 2866 C ARG B 551 -12.839 33.276 72.615 1.00 13.74 C
+ATOM 2867 O ARG B 551 -13.121 33.968 73.587 1.00 12.92 O
+ATOM 2868 CB ARG B 551 -14.585 32.131 71.264 1.00 18.02 C
+ATOM 2869 CG ARG B 551 -15.848 32.272 72.048 1.00 23.47 C
+ATOM 2870 CD ARG B 551 -16.653 30.982 72.015 1.00 25.47 C
+ATOM 2871 NE ARG B 551 -15.916 29.913 72.676 1.00 27.78 N
+ATOM 2872 CZ ARG B 551 -15.831 28.679 72.202 1.00 28.83 C
+ATOM 2873 NH1 ARG B 551 -16.440 28.378 71.058 1.00 28.88 N
+ATOM 2874 NH2 ARG B 551 -15.180 27.741 72.883 1.00 29.71 N
+ATOM 2875 N GLU B 552 -11.833 32.416 72.625 1.00 12.53 N
+ATOM 2876 CA GLU B 552 -11.065 32.144 73.847 1.00 12.14 C
+ATOM 2877 C GLU B 552 -9.830 32.951 74.191 1.00 13.21 C
+ATOM 2878 O GLU B 552 -9.421 32.979 75.362 1.00 13.19 O
+ATOM 2879 CB GLU B 552 -10.662 30.665 73.888 1.00 13.36 C
+ATOM 2880 CG GLU B 552 -11.797 29.648 73.798 1.00 15.35 C
+ATOM 2881 CD GLU B 552 -12.562 29.482 75.111 1.00 17.31 C
+ATOM 2882 OE1 GLU B 552 -11.996 29.771 76.196 1.00 16.92 O
+ATOM 2883 OE2 GLU B 552 -13.744 29.071 75.042 1.00 19.91 O
+ATOM 2884 N PHE B 553 -9.232 33.608 73.195 1.00 12.38 N
+ATOM 2885 CA PHE B 553 -7.974 34.337 73.414 1.00 11.49 C
+ATOM 2886 C PHE B 553 -7.987 35.856 73.301 1.00 11.64 C
+ATOM 2887 O PHE B 553 -8.808 36.435 72.568 1.00 11.89 O
+ATOM 2888 CB PHE B 553 -6.927 33.762 72.474 1.00 11.66 C
+ATOM 2889 CG PHE B 553 -6.784 32.283 72.597 1.00 11.81 C
+ATOM 2890 CD1 PHE B 553 -6.033 31.741 73.638 1.00 11.96 C
+ATOM 2891 CD2 PHE B 553 -7.466 31.421 71.730 1.00 12.24 C
+ATOM 2892 CE1 PHE B 553 -5.960 30.352 73.827 1.00 12.42 C
+ATOM 2893 CE2 PHE B 553 -7.403 30.026 71.914 1.00 13.25 C
+ATOM 2894 CZ PHE B 553 -6.644 29.497 72.971 1.00 12.69 C
+ATOM 2895 N SER B 554 -7.073 36.497 74.023 1.00 10.11 N
+ATOM 2896 CA SER B 554 -6.981 37.943 73.970 1.00 10.94 C
+ATOM 2897 C SER B 554 -5.690 38.406 73.288 1.00 10.22 C
+ATOM 2898 O SER B 554 -5.438 39.596 73.208 1.00 10.74 O
+ATOM 2899 CB SER B 554 -7.118 38.550 75.382 1.00 12.22 C
+ATOM 2900 OG SER B 554 -6.208 37.951 76.292 1.00 13.10 O
+ATOM 2901 N MET B 555 -4.909 37.467 72.764 1.00 10.01 N
+ATOM 2902 CA MET B 555 -3.636 37.804 72.113 1.00 10.06 C
+ATOM 2903 C MET B 555 -3.291 36.748 71.063 1.00 9.95 C
+ATOM 2904 O MET B 555 -3.576 35.567 71.239 1.00 9.76 O
+ATOM 2905 CB MET B 555 -2.526 37.882 73.162 1.00 10.43 C
+ATOM 2906 CG MET B 555 -1.166 38.266 72.622 1.00 11.85 C
+ATOM 2907 SD MET B 555 0.055 38.483 73.930 1.00 13.08 S
+ATOM 2908 CE MET B 555 -0.013 40.126 74.164 1.00 12.92 C
+ATOM 2909 N VAL B 556 -2.768 37.200 69.926 1.00 8.47 N
+ATOM 2910 CA VAL B 556 -2.363 36.316 68.843 1.00 9.25 C
+ATOM 2911 C VAL B 556 -0.925 36.658 68.374 1.00 9.32 C
+ATOM 2912 O VAL B 556 -0.420 37.768 68.612 1.00 9.93 O
+ATOM 2913 CB VAL B 556 -3.314 36.399 67.600 1.00 10.90 C
+ATOM 2914 CG1 VAL B 556 -4.637 35.710 67.890 1.00 12.49 C
+ATOM 2915 CG2 VAL B 556 -3.535 37.866 67.174 1.00 11.45 C
+ATOM 2916 N VAL B 557 -0.285 35.691 67.722 1.00 9.40 N
+ATOM 2917 CA VAL B 557 1.076 35.821 67.204 1.00 10.46 C
+ATOM 2918 C VAL B 557 1.117 35.026 65.891 1.00 10.79 C
+ATOM 2919 O VAL B 557 0.472 33.995 65.774 1.00 9.49 O
+ATOM 2920 CB VAL B 557 2.107 35.140 68.156 1.00 10.96 C
+ATOM 2921 CG1 VAL B 557 3.560 35.527 67.742 1.00 11.24 C
+ATOM 2922 CG2 VAL B 557 1.824 35.487 69.575 1.00 13.25 C
+ATOM 2923 N CYS B 558 1.885 35.494 64.910 1.00 11.82 N
+ATOM 2924 CA CYS B 558 2.032 34.781 63.627 1.00 13.00 C
+ATOM 2925 C CYS B 558 3.027 33.645 63.828 1.00 12.84 C
+ATOM 2926 O CYS B 558 4.154 33.871 64.251 1.00 13.31 O
+ATOM 2927 CB CYS B 558 2.636 35.705 62.560 1.00 14.60 C
+ATOM 2928 SG CYS B 558 1.548 36.926 61.859 1.00 20.47 S
+ATOM 2929 N GLU B 559 2.648 32.426 63.486 1.00 13.37 N
+ATOM 2930 CA GLU B 559 3.572 31.310 63.645 1.00 14.15 C
+ATOM 2931 C GLU B 559 4.805 31.412 62.718 1.00 14.08 C
+ATOM 2932 O GLU B 559 5.940 31.205 63.160 1.00 14.45 O
+ATOM 2933 CB GLU B 559 2.845 29.973 63.388 1.00 16.24 C
+ATOM 2934 CG GLU B 559 3.696 28.729 63.771 1.00 18.01 C
+ATOM 2935 CD GLU B 559 3.053 27.406 63.371 1.00 19.86 C
+ATOM 2936 OE1 GLU B 559 1.914 27.422 62.847 1.00 20.95 O
+ATOM 2937 OE2 GLU B 559 3.699 26.355 63.553 1.00 20.80 O
+ATOM 2938 N ASN B 560 4.577 31.821 61.467 1.00 14.12 N
+ATOM 2939 CA ASN B 560 5.644 31.880 60.458 1.00 14.73 C
+ATOM 2940 C ASN B 560 5.604 33.063 59.516 1.00 15.16 C
+ATOM 2941 O ASN B 560 6.581 33.331 58.817 1.00 15.53 O
+ATOM 2942 CB ASN B 560 5.482 30.697 59.486 1.00 18.06 C
+ATOM 2943 CG ASN B 560 5.708 29.359 60.128 1.00 20.15 C
+ATOM 2944 OD1 ASN B 560 6.808 29.066 60.594 1.00 22.68 O
+ATOM 2945 ND2 ASN B 560 4.674 28.517 60.134 1.00 21.39 N
+ATOM 2946 N GLU B 561 4.460 33.720 59.436 1.00 14.16 N
+ATOM 2947 CA GLU B 561 4.251 34.790 58.472 1.00 15.25 C
+ATOM 2948 C GLU B 561 4.968 36.116 58.669 1.00 14.54 C
+ATOM 2949 O GLU B 561 4.843 37.015 57.826 1.00 14.50 O
+ATOM 2950 CB GLU B 561 2.741 35.022 58.285 1.00 18.09 C
+ATOM 2951 CG GLU B 561 1.944 33.776 57.826 1.00 22.17 C
+ATOM 2952 CD GLU B 561 1.848 32.629 58.884 1.00 25.43 C
+ATOM 2953 OE1 GLU B 561 2.054 32.868 60.119 1.00 24.90 O
+ATOM 2954 OE2 GLU B 561 1.552 31.469 58.455 1.00 27.43 O
+ATOM 2955 N MET B 562 5.605 36.295 59.823 1.00 13.22 N
+ATOM 2956 CA MET B 562 6.331 37.531 60.099 1.00 12.76 C
+ATOM 2957 C MET B 562 7.826 37.273 60.310 1.00 12.32 C
+ATOM 2958 O MET B 562 8.553 38.139 60.835 1.00 12.93 O
+ATOM 2959 CB MET B 562 5.694 38.338 61.240 1.00 14.10 C
+ATOM 2960 CG MET B 562 4.468 39.090 60.774 1.00 16.38 C
+ATOM 2961 SD MET B 562 3.634 40.076 62.003 1.00 21.73 S
+ATOM 2962 CE MET B 562 4.774 40.161 63.216 1.00 21.55 C
+ATOM 2963 N LYS B 563 8.286 36.092 59.874 1.00 11.06 N
+ATOM 2964 CA LYS B 563 9.704 35.788 59.912 1.00 11.74 C
+ATOM 2965 C LYS B 563 10.358 36.575 58.747 1.00 11.75 C
+ATOM 2966 O LYS B 563 9.656 37.021 57.842 1.00 11.81 O
+ATOM 2967 CB LYS B 563 9.935 34.291 59.791 1.00 13.77 C
+ATOM 2968 CG LYS B 563 9.915 33.706 61.175 1.00 17.63 C
+ATOM 2969 CD LYS B 563 9.609 32.258 61.163 1.00 20.97 C
+ATOM 2970 CE LYS B 563 9.216 31.875 62.600 1.00 23.47 C
+ATOM 2971 NZ LYS B 563 8.728 30.478 62.708 1.00 26.02 N
+ATOM 2972 N PHE B 564 11.679 36.700 58.755 1.00 11.12 N
+ATOM 2973 CA PHE B 564 12.421 37.472 57.747 1.00 11.52 C
+ATOM 2974 C PHE B 564 12.156 37.049 56.297 1.00 11.68 C
+ATOM 2975 O PHE B 564 11.898 37.920 55.440 1.00 12.27 O
+ATOM 2976 CB PHE B 564 13.919 37.430 58.054 1.00 10.62 C
+ATOM 2977 CG PHE B 564 14.709 38.570 57.454 1.00 10.64 C
+ATOM 2978 CD1 PHE B 564 14.909 38.655 56.069 1.00 11.39 C
+ATOM 2979 CD2 PHE B 564 15.313 39.517 58.283 1.00 11.17 C
+ATOM 2980 CE1 PHE B 564 15.702 39.656 55.529 1.00 11.38 C
+ATOM 2981 CE2 PHE B 564 16.115 40.529 57.752 1.00 11.49 C
+ATOM 2982 CZ PHE B 564 16.311 40.598 56.366 1.00 11.33 C
+ATOM 2983 N ASP B 565 12.218 35.755 56.014 1.00 11.55 N
+ATOM 2984 CA ASP B 565 11.968 35.244 54.659 1.00 12.73 C
+ATOM 2985 C ASP B 565 10.545 35.489 54.113 1.00 13.10 C
+ATOM 2986 O ASP B 565 10.365 35.649 52.913 1.00 15.50 O
+ATOM 2987 CB ASP B 565 12.366 33.753 54.538 1.00 14.97 C
+ATOM 2988 CG ASP B 565 11.423 32.776 55.309 1.00 16.45 C
+ATOM 2989 OD1 ASP B 565 10.766 33.139 56.310 1.00 16.77 O
+ATOM 2990 OD2 ASP B 565 11.370 31.604 54.897 1.00 19.43 O
+ATOM 2991 N ALA B 566 9.547 35.561 54.996 1.00 11.81 N
+ATOM 2992 CA ALA B 566 8.159 35.796 54.618 1.00 10.67 C
+ATOM 2993 C ALA B 566 7.906 37.292 54.388 1.00 10.01 C
+ATOM 2994 O ALA B 566 7.121 37.668 53.512 1.00 10.90 O
+ATOM 2995 CB ALA B 566 7.213 35.268 55.752 1.00 10.89 C
+ATOM 2996 N LEU B 567 8.529 38.140 55.208 1.00 8.45 N
+ATOM 2997 CA LEU B 567 8.330 39.591 55.111 1.00 9.12 C
+ATOM 2998 C LEU B 567 9.139 40.304 54.028 1.00 8.52 C
+ATOM 2999 O LEU B 567 8.656 41.300 53.493 1.00 8.71 O
+ATOM 3000 CB LEU B 567 8.548 40.295 56.465 1.00 9.88 C
+ATOM 3001 CG LEU B 567 7.349 40.360 57.410 1.00 12.51 C
+ATOM 3002 CD1 LEU B 567 7.834 40.833 58.777 1.00 13.75 C
+ATOM 3003 CD2 LEU B 567 6.291 41.317 56.872 1.00 14.56 C
+ATOM 3004 N GLN B 568 10.368 39.859 53.777 1.00 7.45 N
+ATOM 3005 CA GLN B 568 11.220 40.479 52.735 1.00 7.04 C
+ATOM 3006 C GLN B 568 11.800 39.332 51.909 1.00 6.71 C
+ATOM 3007 O GLN B 568 13.005 39.075 51.943 1.00 7.62 O
+ATOM 3008 CB GLN B 568 12.331 41.347 53.370 1.00 7.67 C
+ATOM 3009 CG GLN B 568 12.966 42.303 52.347 1.00 7.80 C
+ATOM 3010 CD GLN B 568 14.152 43.161 52.824 1.00 8.64 C
+ATOM 3011 OE1 GLN B 568 14.828 43.778 51.998 1.00 9.16 O
+ATOM 3012 NE2 GLN B 568 14.400 43.217 54.130 1.00 8.06 N
+ATOM 3013 N PRO B 569 10.960 38.662 51.087 1.00 6.84 N
+ATOM 3014 CA PRO B 569 11.409 37.523 50.275 1.00 7.43 C
+ATOM 3015 C PRO B 569 12.441 37.802 49.204 1.00 7.86 C
+ATOM 3016 O PRO B 569 13.167 36.915 48.783 1.00 9.41 O
+ATOM 3017 CB PRO B 569 10.110 36.933 49.742 1.00 8.23 C
+ATOM 3018 CG PRO B 569 9.247 38.107 49.620 1.00 9.59 C
+ATOM 3019 CD PRO B 569 9.541 38.964 50.846 1.00 7.95 C
+ATOM 3020 N ARG B 570 12.468 39.040 48.737 1.00 8.43 N
+ATOM 3021 CA ARG B 570 13.453 39.494 47.755 1.00 8.17 C
+ATOM 3022 C ARG B 570 13.958 40.818 48.329 1.00 6.99 C
+ATOM 3023 O ARG B 570 13.230 41.501 49.043 1.00 7.01 O
+ATOM 3024 CB ARG B 570 12.807 39.684 46.374 1.00 9.96 C
+ATOM 3025 CG ARG B 570 12.437 38.338 45.710 1.00 12.31 C
+ATOM 3026 CD ARG B 570 11.778 38.518 44.346 1.00 17.09 C
+ATOM 3027 NE ARG B 570 12.655 39.227 43.423 1.00 20.57 N
+ATOM 3028 CZ ARG B 570 12.301 40.311 42.736 1.00 21.54 C
+ATOM 3029 NH1 ARG B 570 11.081 40.827 42.842 1.00 22.34 N
+ATOM 3030 NH2 ARG B 570 13.190 40.872 41.952 1.00 23.62 N
+ATOM 3031 N GLN B 571 15.192 41.196 48.013 1.00 8.40 N
+ATOM 3032 CA GLN B 571 15.737 42.421 48.565 1.00 8.87 C
+ATOM 3033 C GLN B 571 14.886 43.660 48.234 1.00 9.46 C
+ATOM 3034 O GLN B 571 14.588 43.945 47.082 1.00 9.78 O
+ATOM 3035 CB GLN B 571 17.213 42.610 48.190 1.00 10.77 C
+ATOM 3036 CG GLN B 571 17.843 43.731 49.034 1.00 12.60 C
+ATOM 3037 CD GLN B 571 19.333 43.820 48.908 1.00 14.97 C
+ATOM 3038 OE1 GLN B 571 19.949 43.108 48.114 1.00 16.06 O
+ATOM 3039 NE2 GLN B 571 19.932 44.711 49.692 1.00 16.52 N
+ATOM 3040 N ASN B 572 14.463 44.349 49.282 1.00 8.71 N
+ATOM 3041 CA ASN B 572 13.599 45.517 49.214 1.00 10.61 C
+ATOM 3042 C ASN B 572 12.204 45.345 48.679 1.00 10.21 C
+ATOM 3043 O ASN B 572 11.580 46.328 48.247 1.00 10.44 O
+ATOM 3044 CB ASN B 572 14.263 46.736 48.605 1.00 13.96 C
+ATOM 3045 CG ASN B 572 14.777 47.635 49.666 1.00 18.48 C
+ATOM 3046 OD1 ASN B 572 13.999 48.267 50.476 1.00 17.05 O
+ATOM 3047 ND2 ASN B 572 16.092 47.598 49.805 1.00 20.45 N
+ATOM 3048 N VAL B 573 11.710 44.103 48.733 1.00 8.14 N
+ATOM 3049 CA VAL B 573 10.345 43.789 48.355 1.00 8.34 C
+ATOM 3050 C VAL B 573 9.712 43.275 49.674 1.00 8.90 C
+ATOM 3051 O VAL B 573 10.162 42.252 50.220 1.00 10.21 O
+ATOM 3052 CB VAL B 573 10.286 42.725 47.262 1.00 8.79 C
+ATOM 3053 CG1 VAL B 573 8.842 42.353 46.995 1.00 9.66 C
+ATOM 3054 CG2 VAL B 573 10.942 43.267 45.982 1.00 9.16 C
+ATOM 3055 N PHE B 574 8.736 44.006 50.205 1.00 7.99 N
+ATOM 3056 CA PHE B 574 8.078 43.659 51.493 1.00 6.77 C
+ATOM 3057 C PHE B 574 6.664 43.132 51.313 1.00 7.99 C
+ATOM 3058 O PHE B 574 5.846 43.745 50.636 1.00 10.09 O
+ATOM 3059 CB PHE B 574 8.070 44.878 52.422 1.00 7.32 C
+ATOM 3060 CG PHE B 574 9.440 45.270 52.920 1.00 7.71 C
+ATOM 3061 CD1 PHE B 574 10.249 46.123 52.170 1.00 8.33 C
+ATOM 3062 CD2 PHE B 574 9.933 44.754 54.126 1.00 8.83 C
+ATOM 3063 CE1 PHE B 574 11.550 46.477 52.589 1.00 8.99 C
+ATOM 3064 CE2 PHE B 574 11.232 45.083 54.579 1.00 9.25 C
+ATOM 3065 CZ PHE B 574 12.060 45.960 53.800 1.00 9.67 C
+ATOM 3066 N ASP B 575 6.364 41.984 51.898 1.00 7.27 N
+ATOM 3067 CA ASP B 575 5.046 41.391 51.762 1.00 7.41 C
+ATOM 3068 C ASP B 575 4.323 41.467 53.118 1.00 8.04 C
+ATOM 3069 O ASP B 575 4.613 40.664 54.011 1.00 8.93 O
+ATOM 3070 CB ASP B 575 5.204 39.935 51.308 1.00 8.17 C
+ATOM 3071 CG ASP B 575 3.875 39.256 51.045 1.00 8.54 C
+ATOM 3072 OD1 ASP B 575 2.824 39.801 51.413 1.00 9.09 O
+ATOM 3073 OD2 ASP B 575 3.891 38.159 50.463 1.00 11.68 O
+ATOM 3074 N PHE B 576 3.390 42.406 53.259 1.00 7.44 N
+ATOM 3075 CA PHE B 576 2.646 42.581 54.501 1.00 7.81 C
+ATOM 3076 C PHE B 576 1.264 41.928 54.434 1.00 9.90 C
+ATOM 3077 O PHE B 576 0.487 42.032 55.381 1.00 10.71 O
+ATOM 3078 CB PHE B 576 2.434 44.076 54.772 1.00 8.64 C
+ATOM 3079 CG PHE B 576 3.718 44.856 54.952 1.00 10.17 C
+ATOM 3080 CD1 PHE B 576 4.638 44.507 55.958 1.00 11.36 C
+ATOM 3081 CD2 PHE B 576 3.997 45.964 54.144 1.00 11.08 C
+ATOM 3082 CE1 PHE B 576 5.829 45.259 56.155 1.00 12.42 C
+ATOM 3083 CE2 PHE B 576 5.180 46.721 54.337 1.00 12.19 C
+ATOM 3084 CZ PHE B 576 6.095 46.364 55.343 1.00 11.83 C
+ATOM 3085 N SER B 577 0.969 41.214 53.359 1.00 9.74 N
+ATOM 3086 CA SER B 577 -0.359 40.662 53.194 1.00 10.63 C
+ATOM 3087 C SER B 577 -0.943 39.814 54.338 1.00 11.47 C
+ATOM 3088 O SER B 577 -2.049 40.109 54.818 1.00 13.05 O
+ATOM 3089 CB SER B 577 -0.484 39.954 51.843 1.00 11.30 C
+ATOM 3090 OG SER B 577 0.321 38.793 51.767 1.00 14.01 O
+ATOM 3091 N LYS B 578 -0.216 38.783 54.764 1.00 11.88 N
+ATOM 3092 CA LYS B 578 -0.707 37.894 55.824 1.00 11.46 C
+ATOM 3093 C LYS B 578 -0.687 38.548 57.179 1.00 11.71 C
+ATOM 3094 O LYS B 578 -1.656 38.438 57.940 1.00 11.54 O
+ATOM 3095 CB LYS B 578 0.067 36.588 55.810 1.00 14.38 C
+ATOM 3096 CG LYS B 578 -0.262 35.755 54.558 1.00 17.98 C
+ATOM 3097 CD LYS B 578 0.303 34.338 54.636 1.00 22.93 C
+ATOM 3098 CE LYS B 578 0.232 33.567 53.281 1.00 26.31 C
+ATOM 3099 NZ LYS B 578 1.154 32.333 53.220 1.00 28.72 N
+ATOM 3100 N GLY B 579 0.365 39.309 57.469 1.00 9.63 N
+ATOM 3101 CA GLY B 579 0.427 39.986 58.751 1.00 10.41 C
+ATOM 3102 C GLY B 579 -0.703 40.993 58.913 1.00 10.41 C
+ATOM 3103 O GLY B 579 -1.264 41.143 59.997 1.00 11.53 O
+ATOM 3104 N ASP B 580 -1.014 41.738 57.851 1.00 9.62 N
+ATOM 3105 CA ASP B 580 -2.084 42.742 57.908 1.00 9.52 C
+ATOM 3106 C ASP B 580 -3.462 42.061 58.028 1.00 8.94 C
+ATOM 3107 O ASP B 580 -4.379 42.627 58.619 1.00 10.29 O
+ATOM 3108 CB ASP B 580 -2.034 43.661 56.679 1.00 10.90 C
+ATOM 3109 CG ASP B 580 -0.930 44.722 56.760 1.00 12.19 C
+ATOM 3110 OD1 ASP B 580 -0.092 44.715 57.671 1.00 12.06 O
+ATOM 3111 OD2 ASP B 580 -0.908 45.591 55.866 1.00 14.11 O
+ATOM 3112 N GLN B 581 -3.583 40.858 57.469 1.00 9.79 N
+ATOM 3113 CA GLN B 581 -4.826 40.093 57.558 1.00 11.60 C
+ATOM 3114 C GLN B 581 -5.055 39.674 59.029 1.00 10.85 C
+ATOM 3115 O GLN B 581 -6.171 39.828 59.557 1.00 10.57 O
+ATOM 3116 CB GLN B 581 -4.735 38.863 56.681 1.00 14.32 C
+ATOM 3117 CG GLN B 581 -5.973 38.027 56.774 1.00 20.03 C
+ATOM 3118 CD GLN B 581 -5.952 36.833 55.852 1.00 22.59 C
+ATOM 3119 OE1 GLN B 581 -5.033 36.672 55.031 1.00 25.07 O
+ATOM 3120 NE2 GLN B 581 -6.973 35.971 55.979 1.00 24.78 N
+ATOM 3121 N LEU B 582 -3.999 39.188 59.688 1.00 9.78 N
+ATOM 3122 CA LEU B 582 -4.127 38.808 61.096 1.00 10.85 C
+ATOM 3123 C LEU B 582 -4.407 40.028 61.970 1.00 10.87 C
+ATOM 3124 O LEU B 582 -5.257 39.979 62.868 1.00 10.16 O
+ATOM 3125 CB LEU B 582 -2.906 38.030 61.611 1.00 11.35 C
+ATOM 3126 CG LEU B 582 -3.056 37.500 63.053 1.00 11.80 C
+ATOM 3127 CD1 LEU B 582 -4.244 36.573 63.182 1.00 12.94 C
+ATOM 3128 CD2 LEU B 582 -1.809 36.733 63.432 1.00 13.21 C
+ATOM 3129 N LEU B 583 -3.749 41.148 61.690 1.00 9.95 N
+ATOM 3130 CA LEU B 583 -3.992 42.353 62.470 1.00 11.41 C
+ATOM 3131 C LEU B 583 -5.455 42.825 62.407 1.00 11.58 C
+ATOM 3132 O LEU B 583 -6.012 43.218 63.422 1.00 12.02 O
+ATOM 3133 CB LEU B 583 -3.036 43.488 62.065 1.00 12.50 C
+ATOM 3134 CG LEU B 583 -3.218 44.792 62.859 1.00 15.13 C
+ATOM 3135 CD1 LEU B 583 -3.073 44.577 64.361 1.00 17.01 C
+ATOM 3136 CD2 LEU B 583 -2.199 45.836 62.404 1.00 16.30 C
+ATOM 3137 N ALA B 584 -6.058 42.826 61.223 1.00 10.22 N
+ATOM 3138 CA ALA B 584 -7.444 43.257 61.084 1.00 10.59 C
+ATOM 3139 C ALA B 584 -8.355 42.357 61.926 1.00 9.92 C
+ATOM 3140 O ALA B 584 -9.291 42.849 62.563 1.00 10.24 O
+ATOM 3141 CB ALA B 584 -7.879 43.213 59.633 1.00 10.82 C
+ATOM 3142 N PHE B 585 -8.091 41.049 61.886 1.00 9.55 N
+ATOM 3143 CA PHE B 585 -8.855 40.065 62.666 1.00 10.43 C
+ATOM 3144 C PHE B 585 -8.709 40.367 64.174 1.00 10.92 C
+ATOM 3145 O PHE B 585 -9.720 40.415 64.901 1.00 10.36 O
+ATOM 3146 CB PHE B 585 -8.371 38.657 62.318 1.00 10.60 C
+ATOM 3147 CG PHE B 585 -8.915 37.569 63.208 1.00 11.63 C
+ATOM 3148 CD1 PHE B 585 -10.128 36.952 62.926 1.00 12.20 C
+ATOM 3149 CD2 PHE B 585 -8.183 37.122 64.306 1.00 13.33 C
+ATOM 3150 CE1 PHE B 585 -10.609 35.897 63.733 1.00 12.06 C
+ATOM 3151 CE2 PHE B 585 -8.668 36.065 65.111 1.00 12.97 C
+ATOM 3152 CZ PHE B 585 -9.874 35.473 64.810 1.00 11.81 C
+ATOM 3153 N ALA B 586 -7.467 40.631 64.620 1.00 10.74 N
+ATOM 3154 CA ALA B 586 -7.161 40.952 66.032 1.00 11.28 C
+ATOM 3155 C ALA B 586 -7.943 42.190 66.455 1.00 12.87 C
+ATOM 3156 O ALA B 586 -8.618 42.198 67.494 1.00 12.68 O
+ATOM 3157 CB ALA B 586 -5.675 41.195 66.227 1.00 10.15 C
+ATOM 3158 N GLU B 587 -7.955 43.193 65.588 1.00 13.10 N
+ATOM 3159 CA GLU B 587 -8.655 44.411 65.884 1.00 15.27 C
+ATOM 3160 C GLU B 587 -10.167 44.269 66.008 1.00 14.49 C
+ATOM 3161 O GLU B 587 -10.742 44.837 66.924 1.00 15.69 O
+ATOM 3162 CB GLU B 587 -8.245 45.495 64.893 1.00 19.03 C
+ATOM 3163 CG GLU B 587 -6.757 45.847 65.079 1.00 24.09 C
+ATOM 3164 CD GLU B 587 -6.309 47.080 64.310 1.00 27.46 C
+ATOM 3165 OE1 GLU B 587 -6.821 47.329 63.191 1.00 29.14 O
+ATOM 3166 OE2 GLU B 587 -5.407 47.781 64.827 1.00 30.35 O
+ATOM 3167 N ARG B 588 -10.829 43.502 65.151 1.00 13.75 N
+ATOM 3168 CA ARG B 588 -12.291 43.382 65.310 1.00 15.26 C
+ATOM 3169 C ARG B 588 -12.698 42.413 66.457 1.00 14.57 C
+ATOM 3170 O ARG B 588 -13.887 42.309 66.814 1.00 13.80 O
+ATOM 3171 CB ARG B 588 -12.978 43.011 63.975 1.00 17.60 C
+ATOM 3172 CG ARG B 588 -13.005 41.557 63.616 1.00 19.93 C
+ATOM 3173 CD ARG B 588 -13.743 41.335 62.278 1.00 23.51 C
+ATOM 3174 NE ARG B 588 -12.777 41.482 61.201 1.00 27.19 N
+ATOM 3175 CZ ARG B 588 -12.258 40.475 60.494 1.00 27.07 C
+ATOM 3176 NH1 ARG B 588 -12.650 39.225 60.691 1.00 27.91 N
+ATOM 3177 NH2 ARG B 588 -11.164 40.685 59.781 1.00 27.30 N
+ATOM 3178 N ASN B 589 -11.705 41.730 67.042 1.00 13.38 N
+ATOM 3179 CA ASN B 589 -11.946 40.795 68.147 1.00 12.25 C
+ATOM 3180 C ASN B 589 -11.363 41.226 69.480 1.00 12.64 C
+ATOM 3181 O ASN B 589 -11.353 40.456 70.436 1.00 13.35 O
+ATOM 3182 CB ASN B 589 -11.505 39.389 67.768 1.00 11.07 C
+ATOM 3183 CG ASN B 589 -12.458 38.761 66.796 1.00 12.80 C
+ATOM 3184 OD1 ASN B 589 -13.597 38.486 67.156 1.00 14.86 O
+ATOM 3185 ND2 ASN B 589 -12.041 38.599 65.539 1.00 12.82 N
+ATOM 3186 N GLY B 590 -10.959 42.489 69.552 1.00 12.24 N
+ATOM 3187 CA GLY B 590 -10.402 43.037 70.769 1.00 13.06 C
+ATOM 3188 C GLY B 590 -9.165 42.323 71.280 1.00 14.24 C
+ATOM 3189 O GLY B 590 -8.971 42.228 72.499 1.00 16.23 O
+ATOM 3190 N MET B 591 -8.317 41.850 70.370 1.00 12.92 N
+ATOM 3191 CA MET B 591 -7.096 41.155 70.737 1.00 12.23 C
+ATOM 3192 C MET B 591 -5.851 42.000 70.511 1.00 12.53 C
+ATOM 3193 O MET B 591 -5.845 42.905 69.680 1.00 13.18 O
+ATOM 3194 CB MET B 591 -6.951 39.900 69.896 1.00 13.10 C
+ATOM 3195 CG MET B 591 -8.140 38.974 69.927 1.00 13.60 C
+ATOM 3196 SD MET B 591 -7.858 37.701 68.741 1.00 17.58 S
+ATOM 3197 CE MET B 591 -9.104 36.592 69.158 1.00 18.39 C
+ATOM 3198 N GLN B 592 -4.795 41.684 71.251 1.00 12.34 N
+ATOM 3199 CA GLN B 592 -3.506 42.340 71.095 1.00 13.25 C
+ATOM 3200 C GLN B 592 -2.660 41.381 70.277 1.00 12.33 C
+ATOM 3201 O GLN B 592 -3.027 40.226 70.102 1.00 11.66 O
+ATOM 3202 CB GLN B 592 -2.848 42.633 72.445 1.00 15.63 C
+ATOM 3203 CG GLN B 592 -3.569 43.731 73.231 1.00 19.61 C
+ATOM 3204 CD GLN B 592 -2.866 44.121 74.522 1.00 23.55 C
+ATOM 3205 OE1 GLN B 592 -2.036 43.369 75.062 1.00 26.20 O
+ATOM 3206 NE2 GLN B 592 -3.182 45.312 75.021 1.00 25.51 N
+ATOM 3207 N MET B 593 -1.548 41.879 69.743 1.00 12.73 N
+ATOM 3208 CA MET B 593 -0.678 41.082 68.892 1.00 13.26 C
+ATOM 3209 C MET B 593 0.787 41.200 69.262 1.00 11.84 C
+ATOM 3210 O MET B 593 1.217 42.265 69.673 1.00 13.73 O
+ATOM 3211 CB MET B 593 -0.876 41.574 67.445 1.00 15.33 C
+ATOM 3212 CG MET B 593 -0.193 40.760 66.367 1.00 18.86 C
+ATOM 3213 SD MET B 593 -0.944 41.203 64.777 1.00 21.56 S
+ATOM 3214 CE MET B 593 0.054 40.297 63.672 1.00 23.32 C
+ATOM 3215 N ARG B 594 1.526 40.091 69.192 1.00 10.21 N
+ATOM 3216 CA ARG B 594 2.981 40.114 69.413 1.00 10.05 C
+ATOM 3217 C ARG B 594 3.608 39.971 68.005 1.00 10.64 C
+ATOM 3218 O ARG B 594 3.061 39.263 67.153 1.00 11.00 O
+ATOM 3219 CB ARG B 594 3.468 38.924 70.269 1.00 10.64 C
+ATOM 3220 CG ARG B 594 2.907 38.829 71.701 1.00 9.93 C
+ATOM 3221 CD ARG B 594 3.654 37.749 72.492 1.00 9.45 C
+ATOM 3222 NE ARG B 594 4.915 38.253 73.044 1.00 9.36 N
+ATOM 3223 CZ ARG B 594 6.136 37.919 72.616 1.00 9.01 C
+ATOM 3224 NH1 ARG B 594 6.313 37.046 71.612 1.00 8.26 N
+ATOM 3225 NH2 ARG B 594 7.204 38.532 73.149 1.00 10.25 N
+ATOM 3226 N GLY B 595 4.760 40.610 67.784 1.00 8.77 N
+ATOM 3227 CA GLY B 595 5.445 40.517 66.503 1.00 8.49 C
+ATOM 3228 C GLY B 595 6.554 39.488 66.648 1.00 8.79 C
+ATOM 3229 O GLY B 595 7.393 39.586 67.532 1.00 10.49 O
+ATOM 3230 N HIS B 596 6.600 38.516 65.762 1.00 9.22 N
+ATOM 3231 CA HIS B 596 7.590 37.453 65.843 1.00 9.60 C
+ATOM 3232 C HIS B 596 8.020 37.154 64.396 1.00 9.76 C
+ATOM 3233 O HIS B 596 7.191 36.683 63.601 1.00 10.71 O
+ATOM 3234 CB HIS B 596 6.889 36.233 66.489 1.00 10.63 C
+ATOM 3235 CG HIS B 596 7.743 35.013 66.588 1.00 11.00 C
+ATOM 3236 ND1 HIS B 596 8.725 34.866 67.545 1.00 12.07 N
+ATOM 3237 CD2 HIS B 596 7.785 33.893 65.832 1.00 12.33 C
+ATOM 3238 CE1 HIS B 596 9.340 33.712 67.370 1.00 11.28 C
+ATOM 3239 NE2 HIS B 596 8.791 33.101 66.336 1.00 12.31 N
+ATOM 3240 N THR B 597 9.289 37.366 64.029 1.00 9.09 N
+ATOM 3241 CA THR B 597 10.404 37.870 64.862 1.00 8.20 C
+ATOM 3242 C THR B 597 11.358 38.515 63.828 1.00 8.37 C
+ATOM 3243 O THR B 597 11.420 38.064 62.681 1.00 8.84 O
+ATOM 3244 CB THR B 597 11.150 36.695 65.612 1.00 8.91 C
+ATOM 3245 OG1 THR B 597 12.288 37.196 66.322 1.00 8.90 O
+ATOM 3246 CG2 THR B 597 11.614 35.573 64.618 1.00 10.72 C
+ATOM 3247 N LEU B 598 12.155 39.484 64.252 1.00 8.20 N
+ATOM 3248 CA LEU B 598 13.022 40.201 63.320 1.00 8.51 C
+ATOM 3249 C LEU B 598 14.347 39.561 62.955 1.00 9.00 C
+ATOM 3250 O LEU B 598 14.584 39.230 61.790 1.00 11.01 O
+ATOM 3251 CB LEU B 598 13.205 41.658 63.808 1.00 8.63 C
+ATOM 3252 CG LEU B 598 11.890 42.447 63.943 1.00 9.80 C
+ATOM 3253 CD1 LEU B 598 12.060 43.724 64.758 1.00 10.76 C
+ATOM 3254 CD2 LEU B 598 11.312 42.770 62.537 1.00 11.66 C
+ATOM 3255 N ILE B 599 15.186 39.324 63.951 1.00 8.83 N
+ATOM 3256 CA ILE B 599 16.526 38.802 63.730 1.00 10.11 C
+ATOM 3257 C ILE B 599 16.640 37.380 64.287 1.00 11.26 C
+ATOM 3258 O ILE B 599 16.536 37.181 65.510 1.00 11.64 O
+ATOM 3259 CB ILE B 599 17.560 39.752 64.443 1.00 11.43 C
+ATOM 3260 CG1 ILE B 599 17.374 41.210 63.985 1.00 12.37 C
+ATOM 3261 CG2 ILE B 599 18.978 39.250 64.287 1.00 12.44 C
+ATOM 3262 CD1 ILE B 599 17.391 41.424 62.477 1.00 14.29 C
+ATOM 3263 N TRP B 600 16.924 36.423 63.410 1.00 10.90 N
+ATOM 3264 CA TRP B 600 17.030 35.023 63.794 1.00 12.03 C
+ATOM 3265 C TRP B 600 18.036 34.365 62.829 1.00 14.26 C
+ATOM 3266 O TRP B 600 18.325 34.905 61.741 1.00 13.38 O
+ATOM 3267 CB TRP B 600 15.651 34.422 63.642 1.00 12.38 C
+ATOM 3268 CG TRP B 600 15.472 33.058 64.149 1.00 14.20 C
+ATOM 3269 CD1 TRP B 600 16.160 32.425 65.163 1.00 13.82 C
+ATOM 3270 CD2 TRP B 600 14.463 32.156 63.721 1.00 14.94 C
+ATOM 3271 NE1 TRP B 600 15.614 31.172 65.392 1.00 13.80 N
+ATOM 3272 CE2 TRP B 600 14.572 30.985 64.519 1.00 14.98 C
+ATOM 3273 CE3 TRP B 600 13.465 32.223 62.740 1.00 16.49 C
+ATOM 3274 CZ2 TRP B 600 13.711 29.894 64.356 1.00 16.58 C
+ATOM 3275 CZ3 TRP B 600 12.611 31.142 62.581 1.00 17.30 C
+ATOM 3276 CH2 TRP B 600 12.738 29.989 63.387 1.00 17.23 C
+ATOM 3277 N HIS B 601 18.620 33.235 63.237 1.00 14.82 N
+ATOM 3278 CA HIS B 601 19.606 32.537 62.392 1.00 15.97 C
+ATOM 3279 C HIS B 601 18.939 31.582 61.413 1.00 16.70 C
+ATOM 3280 O HIS B 601 19.577 31.100 60.485 1.00 18.39 O
+ATOM 3281 CB HIS B 601 20.634 31.790 63.260 1.00 16.03 C
+ATOM 3282 CG HIS B 601 20.015 30.812 64.207 1.00 16.82 C
+ATOM 3283 ND1 HIS B 601 20.014 29.449 63.982 1.00 18.27 N
+ATOM 3284 CD2 HIS B 601 19.322 31.006 65.358 1.00 16.42 C
+ATOM 3285 CE1 HIS B 601 19.340 28.849 64.953 1.00 16.48 C
+ATOM 3286 NE2 HIS B 601 18.913 29.770 65.799 1.00 17.05 N
+ATOM 3287 N ASN B 602 17.654 31.322 61.605 1.00 18.55 N
+ATOM 3288 CA ASN B 602 16.904 30.424 60.719 1.00 22.20 C
+ATOM 3289 C ASN B 602 15.886 31.201 59.871 1.00 21.73 C
+ATOM 3290 O ASN B 602 15.471 32.314 60.226 1.00 20.04 O
+ATOM 3291 CB ASN B 602 16.079 29.421 61.532 1.00 25.77 C
+ATOM 3292 CG ASN B 602 16.830 28.157 61.879 1.00 30.10 C
+ATOM 3293 OD1 ASN B 602 17.846 27.806 61.256 1.00 32.36 O
+ATOM 3294 ND2 ASN B 602 16.314 27.437 62.890 1.00 31.87 N
+ATOM 3295 N GLN B 603 15.406 30.534 58.826 1.00 22.42 N
+ATOM 3296 CA GLN B 603 14.395 31.091 57.944 1.00 24.17 C
+ATOM 3297 C GLN B 603 14.753 32.450 57.347 1.00 21.86 C
+ATOM 3298 O GLN B 603 13.963 33.410 57.412 1.00 23.34 O
+ATOM 3299 CB GLN B 603 13.018 31.109 58.659 1.00 28.06 C
+ATOM 3300 CG GLN B 603 12.457 29.672 58.897 1.00 32.58 C
+ATOM 3301 CD GLN B 603 11.058 29.628 59.532 1.00 35.43 C
+ATOM 3302 OE1 GLN B 603 10.906 29.290 60.723 1.00 36.62 O
+ATOM 3303 NE2 GLN B 603 10.024 29.934 58.731 1.00 36.92 N
+ATOM 3304 N ASN B 604 15.982 32.544 56.846 1.00 18.56 N
+ATOM 3305 CA ASN B 604 16.452 33.767 56.189 1.00 16.23 C
+ATOM 3306 C ASN B 604 16.356 33.489 54.692 1.00 14.27 C
+ATOM 3307 O ASN B 604 16.548 32.356 54.255 1.00 14.07 O
+ATOM 3308 CB ASN B 604 17.868 34.124 56.631 1.00 14.66 C
+ATOM 3309 CG ASN B 604 17.877 34.696 58.022 1.00 14.54 C
+ATOM 3310 OD1 ASN B 604 16.996 35.459 58.373 1.00 15.26 O
+ATOM 3311 ND2 ASN B 604 18.835 34.312 58.817 1.00 13.65 N
+ATOM 3312 N PRO B 605 15.978 34.498 53.902 1.00 12.62 N
+ATOM 3313 CA PRO B 605 15.847 34.294 52.449 1.00 12.43 C
+ATOM 3314 C PRO B 605 17.184 34.127 51.686 1.00 11.59 C
+ATOM 3315 O PRO B 605 18.258 34.534 52.179 1.00 11.15 O
+ATOM 3316 CB PRO B 605 15.009 35.500 52.017 1.00 11.99 C
+ATOM 3317 CG PRO B 605 15.452 36.579 52.968 1.00 12.18 C
+ATOM 3318 CD PRO B 605 15.597 35.862 54.304 1.00 12.49 C
+ATOM 3319 N SER B 606 17.127 33.458 50.529 1.00 11.63 N
+ATOM 3320 CA SER B 606 18.337 33.195 49.724 1.00 13.09 C
+ATOM 3321 C SER B 606 19.207 34.435 49.438 1.00 11.53 C
+ATOM 3322 O SER B 606 20.438 34.342 49.427 1.00 11.82 O
+ATOM 3323 CB SER B 606 17.971 32.541 48.371 1.00 14.79 C
+ATOM 3324 OG SER B 606 17.408 31.259 48.555 1.00 19.63 O
+ATOM 3325 N TRP B 607 18.571 35.580 49.169 1.00 10.84 N
+ATOM 3326 CA TRP B 607 19.337 36.792 48.860 1.00 10.78 C
+ATOM 3327 C TRP B 607 20.232 37.238 50.018 1.00 11.36 C
+ATOM 3328 O TRP B 607 21.290 37.820 49.807 1.00 11.47 O
+ATOM 3329 CB TRP B 607 18.422 37.947 48.393 1.00 10.08 C
+ATOM 3330 CG TRP B 607 17.477 38.512 49.407 1.00 8.88 C
+ATOM 3331 CD1 TRP B 607 16.163 38.150 49.602 1.00 9.55 C
+ATOM 3332 CD2 TRP B 607 17.740 39.576 50.337 1.00 8.90 C
+ATOM 3333 NE1 TRP B 607 15.608 38.932 50.585 1.00 9.12 N
+ATOM 3334 CE2 TRP B 607 16.547 39.810 51.054 1.00 8.32 C
+ATOM 3335 CE3 TRP B 607 18.876 40.353 50.636 1.00 8.99 C
+ATOM 3336 CZ2 TRP B 607 16.453 40.785 52.045 1.00 9.61 C
+ATOM 3337 CZ3 TRP B 607 18.784 41.323 51.624 1.00 9.37 C
+ATOM 3338 CH2 TRP B 607 17.579 41.532 52.316 1.00 9.92 C
+ATOM 3339 N LEU B 608 19.802 36.940 51.241 1.00 10.63 N
+ATOM 3340 CA LEU B 608 20.568 37.315 52.421 1.00 11.95 C
+ATOM 3341 C LEU B 608 21.662 36.276 52.695 1.00 13.48 C
+ATOM 3342 O LEU B 608 22.845 36.608 52.782 1.00 14.42 O
+ATOM 3343 CB LEU B 608 19.651 37.405 53.645 1.00 13.18 C
+ATOM 3344 CG LEU B 608 20.318 37.931 54.908 1.00 14.66 C
+ATOM 3345 CD1 LEU B 608 20.522 39.419 54.731 1.00 15.22 C
+ATOM 3346 CD2 LEU B 608 19.417 37.670 56.097 1.00 15.06 C
+ATOM 3347 N THR B 609 21.281 35.012 52.809 1.00 14.31 N
+ATOM 3348 CA THR B 609 22.273 33.999 53.110 1.00 16.90 C
+ATOM 3349 C THR B 609 23.336 33.796 52.003 1.00 18.62 C
+ATOM 3350 O THR B 609 24.489 33.476 52.328 1.00 20.10 O
+ATOM 3351 CB THR B 609 21.598 32.684 53.478 1.00 17.54 C
+ATOM 3352 OG1 THR B 609 20.902 32.169 52.341 1.00 20.42 O
+ATOM 3353 CG2 THR B 609 20.595 32.916 54.564 1.00 17.40 C
+ATOM 3354 N ASN B 610 22.956 33.995 50.728 1.00 19.14 N
+ATOM 3355 CA ASN B 610 23.870 33.844 49.586 1.00 20.57 C
+ATOM 3356 C ASN B 610 24.534 35.168 49.153 1.00 21.37 C
+ATOM 3357 O ASN B 610 25.362 35.178 48.236 1.00 21.86 O
+ATOM 3358 CB ASN B 610 23.144 33.229 48.375 1.00 22.27 C
+ATOM 3359 CG ASN B 610 22.830 31.750 48.562 1.00 24.14 C
+ATOM 3360 OD1 ASN B 610 23.452 31.068 49.365 1.00 27.27 O
+ATOM 3361 ND2 ASN B 610 21.861 31.254 47.825 1.00 25.02 N
+ATOM 3362 N GLY B 611 24.217 36.259 49.850 1.00 20.88 N
+ATOM 3363 CA GLY B 611 24.757 37.566 49.522 1.00 21.33 C
+ATOM 3364 C GLY B 611 26.205 37.781 49.886 1.00 22.66 C
+ATOM 3365 O GLY B 611 26.801 36.991 50.600 1.00 23.60 O
+ATOM 3366 N ASN B 612 26.759 38.889 49.417 1.00 24.10 N
+ATOM 3367 CA ASN B 612 28.155 39.252 49.663 1.00 26.44 C
+ATOM 3368 C ASN B 612 28.138 40.470 50.617 1.00 23.91 C
+ATOM 3369 O ASN B 612 27.817 41.585 50.189 1.00 24.46 O
+ATOM 3370 CB ASN B 612 28.787 39.595 48.306 1.00 31.28 C
+ATOM 3371 CG ASN B 612 30.264 39.882 48.408 1.00 35.70 C
+ATOM 3372 OD1 ASN B 612 30.945 39.434 49.353 1.00 37.71 O
+ATOM 3373 ND2 ASN B 612 30.783 40.643 47.435 1.00 37.58 N
+ATOM 3374 N TRP B 613 28.448 40.246 51.902 1.00 20.26 N
+ATOM 3375 CA TRP B 613 28.356 41.304 52.911 1.00 17.27 C
+ATOM 3376 C TRP B 613 29.598 41.588 53.751 1.00 17.04 C
+ATOM 3377 O TRP B 613 30.480 40.742 53.907 1.00 17.35 O
+ATOM 3378 CB TRP B 613 27.250 40.943 53.944 1.00 15.42 C
+ATOM 3379 CG TRP B 613 25.958 40.450 53.374 1.00 13.60 C
+ATOM 3380 CD1 TRP B 613 25.508 39.167 53.381 1.00 13.57 C
+ATOM 3381 CD2 TRP B 613 24.971 41.218 52.671 1.00 12.63 C
+ATOM 3382 NE1 TRP B 613 24.310 39.079 52.720 1.00 13.40 N
+ATOM 3383 CE2 TRP B 613 23.955 40.322 52.269 1.00 13.31 C
+ATOM 3384 CE3 TRP B 613 24.850 42.564 52.341 1.00 12.34 C
+ATOM 3385 CZ2 TRP B 613 22.833 40.730 51.549 1.00 12.48 C
+ATOM 3386 CZ3 TRP B 613 23.726 42.975 51.620 1.00 13.38 C
+ATOM 3387 CH2 TRP B 613 22.735 42.056 51.234 1.00 12.79 C
+ATOM 3388 N ASN B 614 29.600 42.777 54.346 1.00 15.75 N
+ATOM 3389 CA ASN B 614 30.625 43.164 55.306 1.00 15.68 C
+ATOM 3390 C ASN B 614 29.832 43.798 56.451 1.00 14.27 C
+ATOM 3391 O ASN B 614 28.601 43.897 56.373 1.00 13.48 O
+ATOM 3392 CB ASN B 614 31.694 44.108 54.720 1.00 17.65 C
+ATOM 3393 CG ASN B 614 31.102 45.367 54.114 1.00 19.42 C
+ATOM 3394 OD1 ASN B 614 30.322 46.077 54.731 1.00 19.22 O
+ATOM 3395 ND2 ASN B 614 31.475 45.641 52.875 1.00 22.85 N
+ATOM 3396 N ARG B 615 30.510 44.167 57.531 1.00 13.37 N
+ATOM 3397 CA ARG B 615 29.841 44.752 58.691 1.00 13.48 C
+ATOM 3398 C ARG B 615 28.903 45.944 58.381 1.00 13.87 C
+ATOM 3399 O ARG B 615 27.722 45.943 58.751 1.00 12.60 O
+ATOM 3400 CB ARG B 615 30.895 45.115 59.768 1.00 13.89 C
+ATOM 3401 CG ARG B 615 30.379 45.998 60.894 1.00 14.47 C
+ATOM 3402 CD ARG B 615 31.430 46.264 61.969 1.00 14.01 C
+ATOM 3403 NE ARG B 615 30.941 47.232 62.945 1.00 15.48 N
+ATOM 3404 CZ ARG B 615 30.514 46.915 64.168 1.00 17.02 C
+ATOM 3405 NH1 ARG B 615 30.514 45.640 64.590 1.00 17.20 N
+ATOM 3406 NH2 ARG B 615 30.081 47.868 64.976 1.00 18.41 N
+ATOM 3407 N ASP B 616 29.396 46.926 57.631 1.00 13.92 N
+ATOM 3408 CA ASP B 616 28.585 48.107 57.328 1.00 15.04 C
+ATOM 3409 C ASP B 616 27.403 47.845 56.429 1.00 12.93 C
+ATOM 3410 O ASP B 616 26.339 48.419 56.655 1.00 13.21 O
+ATOM 3411 CB ASP B 616 29.436 49.209 56.704 1.00 19.09 C
+ATOM 3412 CG ASP B 616 30.622 49.587 57.578 1.00 23.81 C
+ATOM 3413 OD1 ASP B 616 30.442 49.857 58.793 1.00 25.80 O
+ATOM 3414 OD2 ASP B 616 31.753 49.576 57.048 1.00 27.22 O
+ATOM 3415 N SER B 617 27.583 46.993 55.423 1.00 11.41 N
+ATOM 3416 CA SER B 617 26.497 46.723 54.507 1.00 11.55 C
+ATOM 3417 C SER B 617 25.436 45.844 55.151 1.00 10.98 C
+ATOM 3418 O SER B 617 24.257 46.035 54.874 1.00 11.96 O
+ATOM 3419 CB SER B 617 26.955 46.149 53.161 1.00 10.89 C
+ATOM 3420 OG SER B 617 27.612 44.905 53.274 1.00 12.49 O
+ATOM 3421 N LEU B 618 25.839 44.899 56.002 1.00 10.51 N
+ATOM 3422 CA LEU B 618 24.835 44.054 56.669 1.00 9.68 C
+ATOM 3423 C LEU B 618 24.091 44.854 57.742 1.00 8.95 C
+ATOM 3424 O LEU B 618 22.899 44.644 57.934 1.00 9.53 O
+ATOM 3425 CB LEU B 618 25.422 42.745 57.199 1.00 10.44 C
+ATOM 3426 CG LEU B 618 24.398 41.681 57.617 1.00 10.22 C
+ATOM 3427 CD1 LEU B 618 23.532 41.244 56.428 1.00 11.19 C
+ATOM 3428 CD2 LEU B 618 25.167 40.501 58.111 1.00 10.39 C
+ATOM 3429 N LEU B 619 24.754 45.803 58.407 1.00 9.27 N
+ATOM 3430 CA LEU B 619 24.065 46.654 59.384 1.00 9.59 C
+ATOM 3431 C LEU B 619 22.971 47.497 58.695 1.00 9.15 C
+ATOM 3432 O LEU B 619 21.900 47.715 59.254 1.00 9.16 O
+ATOM 3433 CB LEU B 619 25.054 47.576 60.132 1.00 11.47 C
+ATOM 3434 CG LEU B 619 25.765 47.000 61.370 1.00 12.11 C
+ATOM 3435 CD1 LEU B 619 26.820 48.006 61.875 1.00 13.58 C
+ATOM 3436 CD2 LEU B 619 24.754 46.731 62.471 1.00 11.52 C
+ATOM 3437 N ALA B 620 23.265 47.995 57.481 1.00 10.27 N
+ATOM 3438 CA ALA B 620 22.294 48.791 56.709 1.00 10.21 C
+ATOM 3439 C ALA B 620 21.080 47.922 56.332 1.00 8.39 C
+ATOM 3440 O ALA B 620 19.964 48.397 56.343 1.00 9.50 O
+ATOM 3441 CB ALA B 620 22.945 49.357 55.454 1.00 10.01 C
+ATOM 3442 N VAL B 621 21.303 46.665 55.959 1.00 8.16 N
+ATOM 3443 CA VAL B 621 20.194 45.733 55.662 1.00 8.80 C
+ATOM 3444 C VAL B 621 19.343 45.512 56.946 1.00 9.06 C
+ATOM 3445 O VAL B 621 18.107 45.519 56.886 1.00 8.64 O
+ATOM 3446 CB VAL B 621 20.728 44.378 55.152 1.00 9.89 C
+ATOM 3447 CG1 VAL B 621 19.649 43.294 55.224 1.00 11.35 C
+ATOM 3448 CG2 VAL B 621 21.225 44.536 53.712 1.00 11.09 C
+ATOM 3449 N MET B 622 20.017 45.330 58.090 1.00 8.81 N
+ATOM 3450 CA MET B 622 19.328 45.132 59.363 1.00 9.41 C
+ATOM 3451 C MET B 622 18.439 46.329 59.694 1.00 9.19 C
+ATOM 3452 O MET B 622 17.255 46.195 60.063 1.00 8.80 O
+ATOM 3453 CB MET B 622 20.355 44.923 60.486 1.00 10.30 C
+ATOM 3454 CG MET B 622 19.699 44.714 61.863 1.00 12.65 C
+ATOM 3455 SD MET B 622 20.870 44.771 63.228 1.00 14.79 S
+ATOM 3456 CE MET B 622 21.458 43.241 63.000 1.00 11.02 C
+ATOM 3457 N LYS B 623 19.016 47.517 59.565 1.00 8.91 N
+ATOM 3458 CA LYS B 623 18.293 48.736 59.848 1.00 8.78 C
+ATOM 3459 C LYS B 623 17.055 48.897 58.951 1.00 7.64 C
+ATOM 3460 O LYS B 623 15.992 49.272 59.414 1.00 9.24 O
+ATOM 3461 CB LYS B 623 19.221 49.939 59.680 1.00 11.10 C
+ATOM 3462 CG LYS B 623 18.596 51.191 60.201 1.00 15.22 C
+ATOM 3463 CD LYS B 623 19.573 52.344 60.182 1.00 20.02 C
+ATOM 3464 CE LYS B 623 19.089 53.456 61.133 1.00 24.04 C
+ATOM 3465 NZ LYS B 623 17.591 53.702 61.073 1.00 27.21 N
+ATOM 3466 N ASN B 624 17.220 48.659 57.659 1.00 7.98 N
+ATOM 3467 CA ASN B 624 16.105 48.809 56.705 1.00 8.10 C
+ATOM 3468 C ASN B 624 14.957 47.813 57.004 1.00 7.59 C
+ATOM 3469 O ASN B 624 13.769 48.174 56.982 1.00 7.91 O
+ATOM 3470 CB ASN B 624 16.599 48.640 55.251 1.00 9.28 C
+ATOM 3471 CG ASN B 624 15.500 48.920 54.234 1.00 9.66 C
+ATOM 3472 OD1 ASN B 624 14.875 49.978 54.290 1.00 12.84 O
+ATOM 3473 ND2 ASN B 624 15.246 47.978 53.319 1.00 10.71 N
+ATOM 3474 N HIS B 625 15.317 46.565 57.307 1.00 7.44 N
+ATOM 3475 CA HIS B 625 14.289 45.579 57.609 1.00 7.09 C
+ATOM 3476 C HIS B 625 13.530 45.945 58.884 1.00 7.40 C
+ATOM 3477 O HIS B 625 12.292 46.024 58.890 1.00 7.62 O
+ATOM 3478 CB HIS B 625 14.881 44.187 57.762 1.00 6.77 C
+ATOM 3479 CG HIS B 625 13.843 43.125 57.935 1.00 7.67 C
+ATOM 3480 ND1 HIS B 625 13.170 42.557 56.875 1.00 7.14 N
+ATOM 3481 CD2 HIS B 625 13.347 42.531 59.053 1.00 8.18 C
+ATOM 3482 CE1 HIS B 625 12.321 41.650 57.325 1.00 7.89 C
+ATOM 3483 NE2 HIS B 625 12.411 41.616 58.643 1.00 7.36 N
+ATOM 3484 N ILE B 626 14.272 46.208 59.951 1.00 7.76 N
+ATOM 3485 CA ILE B 626 13.629 46.529 61.223 1.00 8.23 C
+ATOM 3486 C ILE B 626 12.755 47.793 61.122 1.00 8.20 C
+ATOM 3487 O ILE B 626 11.598 47.806 61.544 1.00 8.15 O
+ATOM 3488 CB ILE B 626 14.676 46.672 62.347 1.00 7.96 C
+ATOM 3489 CG1 ILE B 626 15.334 45.311 62.625 1.00 7.85 C
+ATOM 3490 CG2 ILE B 626 14.020 47.292 63.613 1.00 7.56 C
+ATOM 3491 CD1 ILE B 626 16.495 45.372 63.638 1.00 9.00 C
+ATOM 3492 N THR B 627 13.300 48.845 60.512 1.00 8.83 N
+ATOM 3493 CA THR B 627 12.569 50.096 60.386 1.00 8.99 C
+ATOM 3494 C THR B 627 11.324 49.968 59.475 1.00 8.25 C
+ATOM 3495 O THR B 627 10.229 50.445 59.838 1.00 9.27 O
+ATOM 3496 CB THR B 627 13.517 51.253 59.886 1.00 10.23 C
+ATOM 3497 OG1 THR B 627 14.685 51.314 60.737 1.00 11.95 O
+ATOM 3498 CG2 THR B 627 12.801 52.614 59.955 1.00 10.44 C
+ATOM 3499 N THR B 628 11.476 49.343 58.307 1.00 7.56 N
+ATOM 3500 CA THR B 628 10.338 49.226 57.385 1.00 7.60 C
+ATOM 3501 C THR B 628 9.200 48.401 57.996 1.00 8.35 C
+ATOM 3502 O THR B 628 8.036 48.837 57.987 1.00 10.18 O
+ATOM 3503 CB THR B 628 10.757 48.642 56.030 1.00 8.26 C
+ATOM 3504 OG1 THR B 628 11.742 49.510 55.423 1.00 8.68 O
+ATOM 3505 CG2 THR B 628 9.549 48.530 55.110 1.00 9.08 C
+ATOM 3506 N VAL B 629 9.546 47.266 58.605 1.00 7.12 N
+ATOM 3507 CA VAL B 629 8.541 46.404 59.222 1.00 7.87 C
+ATOM 3508 C VAL B 629 7.859 47.062 60.441 1.00 7.48 C
+ATOM 3509 O VAL B 629 6.631 47.124 60.520 1.00 7.41 O
+ATOM 3510 CB VAL B 629 9.170 45.042 59.625 1.00 7.57 C
+ATOM 3511 CG1 VAL B 629 8.162 44.191 60.450 1.00 8.52 C
+ATOM 3512 CG2 VAL B 629 9.588 44.281 58.365 1.00 8.60 C
+ATOM 3513 N MET B 630 8.647 47.576 61.386 1.00 8.63 N
+ATOM 3514 CA MET B 630 8.055 48.171 62.587 1.00 8.49 C
+ATOM 3515 C MET B 630 7.254 49.442 62.338 1.00 9.67 C
+ATOM 3516 O MET B 630 6.261 49.691 63.012 1.00 9.87 O
+ATOM 3517 CB MET B 630 9.100 48.378 63.688 1.00 9.55 C
+ATOM 3518 CG MET B 630 9.647 47.053 64.236 1.00 9.29 C
+ATOM 3519 SD MET B 630 10.804 47.271 65.614 1.00 11.18 S
+ATOM 3520 CE MET B 630 9.753 47.851 66.974 1.00 9.23 C
+ATOM 3521 N THR B 631 7.665 50.248 61.362 1.00 9.87 N
+ATOM 3522 CA THR B 631 6.895 51.458 61.078 1.00 11.08 C
+ATOM 3523 C THR B 631 5.546 51.109 60.434 1.00 9.97 C
+ATOM 3524 O THR B 631 4.566 51.776 60.689 1.00 10.25 O
+ATOM 3525 CB THR B 631 7.656 52.490 60.213 1.00 13.52 C
+ATOM 3526 OG1 THR B 631 7.964 51.919 58.963 1.00 16.64 O
+ATOM 3527 CG2 THR B 631 8.941 52.908 60.873 1.00 13.66 C
+ATOM 3528 N HIS B 632 5.477 50.042 59.643 1.00 9.98 N
+ATOM 3529 CA HIS B 632 4.197 49.631 59.046 1.00 9.75 C
+ATOM 3530 C HIS B 632 3.209 49.237 60.158 1.00 10.02 C
+ATOM 3531 O HIS B 632 2.001 49.388 60.021 1.00 11.14 O
+ATOM 3532 CB HIS B 632 4.380 48.458 58.061 1.00 10.06 C
+ATOM 3533 CG HIS B 632 3.132 48.085 57.313 1.00 10.10 C
+ATOM 3534 ND1 HIS B 632 2.594 48.874 56.313 1.00 9.73 N
+ATOM 3535 CD2 HIS B 632 2.319 47.007 57.415 1.00 9.51 C
+ATOM 3536 CE1 HIS B 632 1.507 48.296 55.835 1.00 10.02 C
+ATOM 3537 NE2 HIS B 632 1.321 47.163 56.487 1.00 10.05 N
+ATOM 3538 N TYR B 633 3.722 48.716 61.264 1.00 11.46 N
+ATOM 3539 CA TYR B 633 2.846 48.310 62.383 1.00 11.94 C
+ATOM 3540 C TYR B 633 2.988 49.243 63.585 1.00 12.64 C
+ATOM 3541 O TYR B 633 2.601 48.889 64.692 1.00 13.10 O
+ATOM 3542 CB TYR B 633 3.189 46.867 62.816 1.00 10.96 C
+ATOM 3543 CG TYR B 633 2.867 45.831 61.756 1.00 10.54 C
+ATOM 3544 CD1 TYR B 633 1.532 45.483 61.481 1.00 10.96 C
+ATOM 3545 CD2 TYR B 633 3.879 45.255 60.968 1.00 9.61 C
+ATOM 3546 CE1 TYR B 633 1.220 44.606 60.440 1.00 9.87 C
+ATOM 3547 CE2 TYR B 633 3.574 44.370 59.930 1.00 9.41 C
+ATOM 3548 CZ TYR B 633 2.237 44.056 59.669 1.00 9.18 C
+ATOM 3549 OH TYR B 633 1.940 43.208 58.628 1.00 11.15 O
+ATOM 3550 N LYS B 634 3.487 50.447 63.360 1.00 12.54 N
+ATOM 3551 CA LYS B 634 3.720 51.370 64.455 1.00 13.74 C
+ATOM 3552 C LYS B 634 2.498 51.586 65.358 1.00 14.58 C
+ATOM 3553 O LYS B 634 1.401 51.921 64.887 1.00 15.20 O
+ATOM 3554 CB LYS B 634 4.265 52.695 63.916 1.00 14.53 C
+ATOM 3555 CG LYS B 634 4.770 53.594 65.021 1.00 17.70 C
+ATOM 3556 CD LYS B 634 5.368 54.888 64.483 1.00 20.50 C
+ATOM 3557 CE LYS B 634 5.751 55.821 65.628 1.00 22.65 C
+ATOM 3558 NZ LYS B 634 6.239 57.119 65.113 1.00 25.30 N
+ATOM 3559 N GLY B 635 2.702 51.355 66.657 1.00 14.21 N
+ATOM 3560 CA GLY B 635 1.643 51.518 67.637 1.00 15.59 C
+ATOM 3561 C GLY B 635 0.550 50.446 67.630 1.00 17.77 C
+ATOM 3562 O GLY B 635 -0.410 50.565 68.394 1.00 18.94 O
+ATOM 3563 N LYS B 636 0.703 49.391 66.821 1.00 17.44 N
+ATOM 3564 CA LYS B 636 -0.293 48.301 66.710 1.00 17.63 C
+ATOM 3565 C LYS B 636 0.141 46.974 67.356 1.00 16.27 C
+ATOM 3566 O LYS B 636 -0.689 46.104 67.568 1.00 15.91 O
+ATOM 3567 CB LYS B 636 -0.566 47.979 65.238 1.00 20.09 C
+ATOM 3568 CG LYS B 636 -0.862 49.160 64.368 1.00 23.71 C
+ATOM 3569 CD LYS B 636 -2.204 49.747 64.676 1.00 26.97 C
+ATOM 3570 CE LYS B 636 -2.486 50.907 63.708 1.00 30.07 C
+ATOM 3571 NZ LYS B 636 -2.237 50.542 62.248 1.00 32.17 N
+ATOM 3572 N ILE B 637 1.443 46.796 67.575 1.00 15.08 N
+ATOM 3573 CA ILE B 637 1.994 45.569 68.137 1.00 14.58 C
+ATOM 3574 C ILE B 637 2.654 45.873 69.471 1.00 15.23 C
+ATOM 3575 O ILE B 637 3.605 46.632 69.560 1.00 17.04 O
+ATOM 3576 CB ILE B 637 2.917 44.883 67.106 1.00 14.19 C
+ATOM 3577 CG1 ILE B 637 2.042 44.422 65.924 1.00 13.98 C
+ATOM 3578 CG2 ILE B 637 3.725 43.744 67.753 1.00 13.23 C
+ATOM 3579 CD1 ILE B 637 2.714 43.582 64.868 1.00 16.19 C
+ATOM 3580 N VAL B 638 2.068 45.318 70.523 1.00 14.15 N
+ATOM 3581 CA VAL B 638 2.503 45.574 71.879 1.00 15.59 C
+ATOM 3582 C VAL B 638 3.874 45.019 72.298 1.00 13.94 C
+ATOM 3583 O VAL B 638 4.617 45.682 73.028 1.00 14.93 O
+ATOM 3584 CB VAL B 638 1.358 45.157 72.885 1.00 16.85 C
+ATOM 3585 CG1 VAL B 638 1.152 43.645 72.902 1.00 16.67 C
+ATOM 3586 CG2 VAL B 638 1.615 45.719 74.271 1.00 20.26 C
+ATOM 3587 N GLU B 639 4.216 43.827 71.830 1.00 10.99 N
+ATOM 3588 CA GLU B 639 5.493 43.218 72.183 1.00 9.19 C
+ATOM 3589 C GLU B 639 6.145 42.704 70.915 1.00 7.39 C
+ATOM 3590 O GLU B 639 5.485 42.046 70.125 1.00 8.96 O
+ATOM 3591 CB GLU B 639 5.270 42.005 73.127 1.00 10.04 C
+ATOM 3592 CG GLU B 639 4.608 42.341 74.474 1.00 11.02 C
+ATOM 3593 CD GLU B 639 4.485 41.144 75.435 1.00 11.32 C
+ATOM 3594 OE1 GLU B 639 5.109 40.077 75.221 1.00 10.22 O
+ATOM 3595 OE2 GLU B 639 3.733 41.303 76.421 1.00 13.42 O
+ATOM 3596 N TRP B 640 7.433 42.958 70.761 1.00 7.03 N
+ATOM 3597 CA TRP B 640 8.187 42.512 69.602 1.00 6.78 C
+ATOM 3598 C TRP B 640 9.332 41.607 69.998 1.00 6.26 C
+ATOM 3599 O TRP B 640 10.123 41.961 70.873 1.00 7.34 O
+ATOM 3600 CB TRP B 640 8.808 43.721 68.837 1.00 8.02 C
+ATOM 3601 CG TRP B 640 7.951 44.265 67.716 1.00 9.48 C
+ATOM 3602 CD1 TRP B 640 7.138 45.365 67.747 1.00 11.27 C
+ATOM 3603 CD2 TRP B 640 7.829 43.715 66.400 1.00 10.06 C
+ATOM 3604 NE1 TRP B 640 6.517 45.527 66.525 1.00 11.62 N
+ATOM 3605 CE2 TRP B 640 6.927 44.532 65.683 1.00 11.50 C
+ATOM 3606 CE3 TRP B 640 8.394 42.598 65.755 1.00 11.75 C
+ATOM 3607 CZ2 TRP B 640 6.580 44.268 64.344 1.00 12.19 C
+ATOM 3608 CZ3 TRP B 640 8.044 42.329 64.414 1.00 12.95 C
+ATOM 3609 CH2 TRP B 640 7.150 43.166 63.737 1.00 12.41 C
+ATOM 3610 N ASP B 641 9.424 40.444 69.366 1.00 5.84 N
+ATOM 3611 CA ASP B 641 10.581 39.593 69.569 1.00 6.75 C
+ATOM 3612 C ASP B 641 11.604 40.154 68.555 1.00 7.38 C
+ATOM 3613 O ASP B 641 11.605 39.768 67.365 1.00 7.36 O
+ATOM 3614 CB ASP B 641 10.300 38.115 69.238 1.00 7.66 C
+ATOM 3615 CG ASP B 641 9.412 37.430 70.286 1.00 9.03 C
+ATOM 3616 OD1 ASP B 641 9.347 37.899 71.436 1.00 8.74 O
+ATOM 3617 OD2 ASP B 641 8.782 36.425 69.898 1.00 11.85 O
+ATOM 3618 N VAL B 642 12.431 41.083 69.021 1.00 6.96 N
+ATOM 3619 CA VAL B 642 13.455 41.679 68.165 1.00 7.28 C
+ATOM 3620 C VAL B 642 14.501 40.657 67.739 1.00 8.76 C
+ATOM 3621 O VAL B 642 14.906 40.619 66.562 1.00 9.49 O
+ATOM 3622 CB VAL B 642 14.148 42.853 68.875 1.00 8.35 C
+ATOM 3623 CG1 VAL B 642 15.314 43.405 68.006 1.00 9.46 C
+ATOM 3624 CG2 VAL B 642 13.129 43.942 69.196 1.00 8.98 C
+ATOM 3625 N ALA B 643 14.953 39.838 68.684 1.00 8.52 N
+ATOM 3626 CA ALA B 643 15.969 38.834 68.427 1.00 8.77 C
+ATOM 3627 C ALA B 643 15.422 37.524 68.976 1.00 9.34 C
+ATOM 3628 O ALA B 643 14.751 37.516 70.019 1.00 9.96 O
+ATOM 3629 CB ALA B 643 17.257 39.205 69.133 1.00 10.13 C
+ATOM 3630 N ASN B 644 15.791 36.429 68.320 1.00 8.94 N
+ATOM 3631 CA ASN B 644 15.297 35.085 68.653 1.00 10.05 C
+ATOM 3632 C ASN B 644 16.406 34.034 68.604 1.00 11.74 C
+ATOM 3633 O ASN B 644 17.149 33.959 67.607 1.00 11.91 O
+ATOM 3634 CB ASN B 644 14.268 34.719 67.579 1.00 12.30 C
+ATOM 3635 CG ASN B 644 13.331 33.618 67.992 1.00 13.65 C
+ATOM 3636 OD1 ASN B 644 13.058 32.697 67.217 1.00 15.12 O
+ATOM 3637 ND2 ASN B 644 12.771 33.736 69.169 1.00 14.52 N
+ATOM 3638 N GLU B 645 16.598 33.305 69.711 1.00 10.75 N
+ATOM 3639 CA GLU B 645 17.563 32.187 69.752 1.00 12.26 C
+ATOM 3640 C GLU B 645 19.009 32.502 69.352 1.00 11.99 C
+ATOM 3641 O GLU B 645 19.642 31.737 68.624 1.00 14.14 O
+ATOM 3642 CB GLU B 645 17.017 31.041 68.886 1.00 11.27 C
+ATOM 3643 CG GLU B 645 15.603 30.637 69.311 1.00 11.77 C
+ATOM 3644 CD GLU B 645 14.979 29.570 68.454 1.00 13.15 C
+ATOM 3645 OE1 GLU B 645 15.652 29.035 67.553 1.00 14.08 O
+ATOM 3646 OE2 GLU B 645 13.787 29.264 68.664 1.00 14.59 O
+ATOM 3647 N CYS B 646 19.534 33.594 69.882 1.00 13.29 N
+ATOM 3648 CA CYS B 646 20.886 34.027 69.571 1.00 13.72 C
+ATOM 3649 C CYS B 646 21.974 33.454 70.470 1.00 14.86 C
+ATOM 3650 O CYS B 646 23.148 33.580 70.144 1.00 15.20 O
+ATOM 3651 CB CYS B 646 20.955 35.555 69.630 1.00 14.57 C
+ATOM 3652 SG CYS B 646 19.801 36.353 68.463 1.00 17.06 S
+ATOM 3653 N MET B 647 21.612 32.890 71.625 1.00 14.53 N
+ATOM 3654 CA MET B 647 22.622 32.331 72.553 1.00 14.16 C
+ATOM 3655 C MET B 647 22.906 30.869 72.217 1.00 14.56 C
+ATOM 3656 O MET B 647 21.986 30.092 71.900 1.00 13.03 O
+ATOM 3657 CB MET B 647 22.130 32.439 74.007 1.00 14.22 C
+ATOM 3658 CG MET B 647 23.179 32.072 75.069 1.00 14.45 C
+ATOM 3659 SD MET B 647 24.552 33.214 75.111 1.00 16.57 S
+ATOM 3660 CE MET B 647 23.781 34.619 75.913 1.00 15.93 C
+ATOM 3661 N ASP B 648 24.179 30.488 72.278 1.00 16.24 N
+ATOM 3662 CA ASP B 648 24.542 29.100 71.997 1.00 17.62 C
+ATOM 3663 C ASP B 648 23.982 28.235 73.141 1.00 18.40 C
+ATOM 3664 O ASP B 648 23.885 28.701 74.267 1.00 17.29 O
+ATOM 3665 CB ASP B 648 26.062 28.949 71.916 1.00 19.79 C
+ATOM 3666 CG ASP B 648 26.490 27.579 71.399 1.00 23.40 C
+ATOM 3667 OD1 ASP B 648 26.476 27.347 70.148 1.00 24.87 O
+ATOM 3668 OD2 ASP B 648 26.843 26.722 72.250 1.00 24.88 O
+ATOM 3669 N ASP B 649 23.611 26.992 72.858 1.00 19.25 N
+ATOM 3670 CA ASP B 649 23.072 26.111 73.908 1.00 22.35 C
+ATOM 3671 C ASP B 649 24.013 25.799 75.086 1.00 22.41 C
+ATOM 3672 O ASP B 649 23.561 25.446 76.183 1.00 22.93 O
+ATOM 3673 CB ASP B 649 22.516 24.842 73.288 1.00 24.41 C
+ATOM 3674 CG ASP B 649 21.257 25.116 72.526 1.00 27.13 C
+ATOM 3675 OD1 ASP B 649 20.400 25.824 73.094 1.00 29.09 O
+ATOM 3676 OD2 ASP B 649 21.134 24.678 71.367 1.00 28.55 O
+ATOM 3677 N SER B 650 25.311 25.949 74.839 1.00 21.60 N
+ATOM 3678 CA SER B 650 26.330 25.748 75.856 1.00 22.16 C
+ATOM 3679 C SER B 650 26.197 26.838 76.924 1.00 22.12 C
+ATOM 3680 O SER B 650 26.574 26.629 78.072 1.00 24.22 O
+ATOM 3681 CB SER B 650 27.741 25.855 75.225 1.00 22.18 C
+ATOM 3682 OG SER B 650 28.036 27.181 74.743 1.00 22.55 O
+ATOM 3683 N GLY B 651 25.680 28.000 76.533 1.00 20.55 N
+ATOM 3684 CA GLY B 651 25.575 29.116 77.439 1.00 19.81 C
+ATOM 3685 C GLY B 651 26.911 29.848 77.450 1.00 21.34 C
+ATOM 3686 O GLY B 651 27.095 30.797 78.216 1.00 21.10 O
+ATOM 3687 N ASN B 652 27.839 29.451 76.572 1.00 21.82 N
+ATOM 3688 CA ASN B 652 29.151 30.087 76.539 1.00 23.47 C
+ATOM 3689 C ASN B 652 29.213 31.411 75.825 1.00 23.65 C
+ATOM 3690 O ASN B 652 30.099 32.216 76.089 1.00 25.89 O
+ATOM 3691 CB ASN B 652 30.218 29.151 75.970 1.00 24.73 C
+ATOM 3692 CG ASN B 652 30.722 28.164 77.000 1.00 26.90 C
+ATOM 3693 OD1 ASN B 652 31.175 27.075 76.660 1.00 28.53 O
+ATOM 3694 ND2 ASN B 652 30.626 28.532 78.269 1.00 26.97 N
+ATOM 3695 N GLY B 653 28.292 31.644 74.912 1.00 22.21 N
+ATOM 3696 CA GLY B 653 28.302 32.898 74.192 1.00 20.01 C
+ATOM 3697 C GLY B 653 27.305 32.838 73.057 1.00 18.18 C
+ATOM 3698 O GLY B 653 26.560 31.869 72.918 1.00 17.45 O
+ATOM 3699 N LEU B 654 27.313 33.867 72.212 1.00 18.11 N
+ATOM 3700 CA LEU B 654 26.372 33.943 71.095 1.00 16.71 C
+ATOM 3701 C LEU B 654 26.649 32.891 70.040 1.00 16.22 C
+ATOM 3702 O LEU B 654 27.809 32.553 69.755 1.00 16.77 O
+ATOM 3703 CB LEU B 654 26.395 35.343 70.470 1.00 17.30 C
+ATOM 3704 CG LEU B 654 25.900 36.425 71.432 1.00 17.68 C
+ATOM 3705 CD1 LEU B 654 26.097 37.812 70.832 1.00 18.63 C
+ATOM 3706 CD2 LEU B 654 24.447 36.163 71.737 1.00 17.10 C
+ATOM 3707 N ARG B 655 25.591 32.386 69.433 1.00 14.24 N
+ATOM 3708 CA ARG B 655 25.787 31.381 68.436 1.00 15.57 C
+ATOM 3709 C ARG B 655 26.223 31.986 67.102 1.00 15.43 C
+ATOM 3710 O ARG B 655 25.984 33.165 66.795 1.00 15.03 O
+ATOM 3711 CB ARG B 655 24.529 30.531 68.275 1.00 18.23 C
+ATOM 3712 CG ARG B 655 23.440 31.174 67.495 1.00 19.93 C
+ATOM 3713 CD ARG B 655 22.447 30.101 67.039 1.00 20.87 C
+ATOM 3714 NE ARG B 655 21.558 29.642 68.103 1.00 20.64 N
+ATOM 3715 CZ ARG B 655 21.242 28.371 68.321 1.00 23.03 C
+ATOM 3716 NH1 ARG B 655 21.768 27.413 67.561 1.00 23.81 N
+ATOM 3717 NH2 ARG B 655 20.299 28.060 69.206 1.00 22.45 N
+ATOM 3718 N SER B 656 26.894 31.150 66.337 1.00 15.72 N
+ATOM 3719 CA SER B 656 27.361 31.503 65.023 1.00 17.68 C
+ATOM 3720 C SER B 656 26.119 31.677 64.126 1.00 17.44 C
+ATOM 3721 O SER B 656 25.168 30.895 64.211 1.00 18.38 O
+ATOM 3722 CB SER B 656 28.254 30.349 64.532 1.00 20.26 C
+ATOM 3723 OG SER B 656 28.464 30.398 63.138 1.00 23.88 O
+ATOM 3724 N SER B 657 26.095 32.739 63.332 1.00 15.21 N
+ATOM 3725 CA SER B 657 24.997 33.009 62.406 1.00 13.99 C
+ATOM 3726 C SER B 657 25.482 34.089 61.450 1.00 13.43 C
+ATOM 3727 O SER B 657 26.530 34.680 61.676 1.00 13.32 O
+ATOM 3728 CB SER B 657 23.740 33.482 63.123 1.00 13.24 C
+ATOM 3729 OG SER B 657 23.880 34.802 63.594 1.00 14.00 O
+ATOM 3730 N ILE B 658 24.719 34.373 60.399 1.00 13.79 N
+ATOM 3731 CA ILE B 658 25.143 35.386 59.434 1.00 13.30 C
+ATOM 3732 C ILE B 658 25.302 36.752 60.092 1.00 12.53 C
+ATOM 3733 O ILE B 658 26.301 37.419 59.860 1.00 12.51 O
+ATOM 3734 CB ILE B 658 24.220 35.420 58.167 1.00 14.46 C
+ATOM 3735 CG1 ILE B 658 24.839 36.303 57.092 1.00 16.14 C
+ATOM 3736 CG2 ILE B 658 22.797 35.874 58.500 1.00 14.70 C
+ATOM 3737 CD1 ILE B 658 23.978 36.392 55.872 1.00 18.29 C
+ATOM 3738 N TRP B 659 24.402 37.105 61.013 1.00 10.81 N
+ATOM 3739 CA TRP B 659 24.474 38.393 61.717 1.00 11.08 C
+ATOM 3740 C TRP B 659 25.700 38.487 62.653 1.00 11.08 C
+ATOM 3741 O TRP B 659 26.455 39.474 62.648 1.00 11.25 O
+ATOM 3742 CB TRP B 659 23.194 38.640 62.546 1.00 11.06 C
+ATOM 3743 CG TRP B 659 21.916 38.444 61.783 1.00 10.91 C
+ATOM 3744 CD1 TRP B 659 21.052 37.388 61.874 1.00 10.47 C
+ATOM 3745 CD2 TRP B 659 21.374 39.327 60.797 1.00 10.96 C
+ATOM 3746 NE1 TRP B 659 20.002 37.559 61.007 1.00 11.17 N
+ATOM 3747 CE2 TRP B 659 20.174 38.743 60.328 1.00 11.36 C
+ATOM 3748 CE3 TRP B 659 21.787 40.554 60.261 1.00 11.25 C
+ATOM 3749 CZ2 TRP B 659 19.378 39.360 59.332 1.00 11.65 C
+ATOM 3750 CZ3 TRP B 659 20.996 41.167 59.273 1.00 11.31 C
+ATOM 3751 CH2 TRP B 659 19.806 40.565 58.823 1.00 10.83 C
+ATOM 3752 N ARG B 660 25.889 37.445 63.456 1.00 11.66 N
+ATOM 3753 CA ARG B 660 26.990 37.408 64.418 1.00 11.69 C
+ATOM 3754 C ARG B 660 28.372 37.384 63.748 1.00 11.69 C
+ATOM 3755 O ARG B 660 29.288 38.083 64.177 1.00 11.78 O
+ATOM 3756 CB ARG B 660 26.825 36.176 65.336 1.00 11.13 C
+ATOM 3757 CG ARG B 660 28.048 35.879 66.226 1.00 11.48 C
+ATOM 3758 CD ARG B 660 28.285 36.967 67.234 1.00 11.67 C
+ATOM 3759 NE ARG B 660 29.482 36.710 68.068 1.00 13.33 N
+ATOM 3760 CZ ARG B 660 30.735 37.084 67.763 1.00 12.99 C
+ATOM 3761 NH1 ARG B 660 30.987 37.720 66.621 1.00 12.36 N
+ATOM 3762 NH2 ARG B 660 31.718 36.930 68.642 1.00 11.79 N
+ATOM 3763 N ASN B 661 28.504 36.577 62.696 1.00 11.73 N
+ATOM 3764 CA ASN B 661 29.795 36.389 62.027 1.00 12.88 C
+ATOM 3765 C ASN B 661 30.263 37.596 61.230 1.00 13.43 C
+ATOM 3766 O ASN B 661 31.425 38.015 61.338 1.00 13.79 O
+ATOM 3767 CB ASN B 661 29.781 35.146 61.119 1.00 14.10 C
+ATOM 3768 CG ASN B 661 29.537 33.842 61.880 1.00 14.86 C
+ATOM 3769 OD1 ASN B 661 29.510 33.816 63.108 1.00 15.44 O
+ATOM 3770 ND2 ASN B 661 29.315 32.761 61.139 1.00 17.33 N
+ATOM 3771 N VAL B 662 29.351 38.160 60.440 1.00 12.43 N
+ATOM 3772 CA VAL B 662 29.676 39.325 59.607 1.00 11.46 C
+ATOM 3773 C VAL B 662 29.799 40.665 60.374 1.00 11.03 C
+ATOM 3774 O VAL B 662 30.749 41.419 60.178 1.00 12.14 O
+ATOM 3775 CB VAL B 662 28.634 39.432 58.447 1.00 11.68 C
+ATOM 3776 CG1 VAL B 662 28.854 40.710 57.624 1.00 12.45 C
+ATOM 3777 CG2 VAL B 662 28.723 38.213 57.554 1.00 11.85 C
+ATOM 3778 N ILE B 663 28.838 40.966 61.243 1.00 10.07 N
+ATOM 3779 CA ILE B 663 28.844 42.214 61.984 1.00 9.48 C
+ATOM 3780 C ILE B 663 29.800 42.201 63.167 1.00 11.93 C
+ATOM 3781 O ILE B 663 30.590 43.125 63.330 1.00 12.90 O
+ATOM 3782 CB ILE B 663 27.411 42.600 62.442 1.00 9.16 C
+ATOM 3783 CG1 ILE B 663 26.531 42.885 61.210 1.00 10.24 C
+ATOM 3784 CG2 ILE B 663 27.436 43.793 63.339 1.00 8.82 C
+ATOM 3785 CD1 ILE B 663 25.063 42.981 61.542 1.00 11.32 C
+ATOM 3786 N GLY B 664 29.708 41.177 64.018 1.00 11.83 N
+ATOM 3787 CA GLY B 664 30.593 41.127 65.164 1.00 11.31 C
+ATOM 3788 C GLY B 664 29.832 40.877 66.436 1.00 12.32 C
+ATOM 3789 O GLY B 664 28.593 40.756 66.450 1.00 12.20 O
+ATOM 3790 N GLN B 665 30.567 40.944 67.534 1.00 12.40 N
+ATOM 3791 CA GLN B 665 29.965 40.643 68.816 1.00 14.96 C
+ATOM 3792 C GLN B 665 28.862 41.572 69.319 1.00 13.96 C
+ATOM 3793 O GLN B 665 28.044 41.146 70.142 1.00 15.64 O
+ATOM 3794 CB GLN B 665 31.048 40.498 69.869 1.00 18.67 C
+ATOM 3795 CG GLN B 665 31.843 41.760 70.044 1.00 24.40 C
+ATOM 3796 CD GLN B 665 32.538 41.800 71.376 1.00 28.62 C
+ATOM 3797 OE1 GLN B 665 33.054 42.853 71.780 1.00 31.12 O
+ATOM 3798 NE2 GLN B 665 32.555 40.654 72.086 1.00 30.07 N
+ATOM 3799 N ASP B 666 28.803 42.799 68.809 1.00 12.47 N
+ATOM 3800 CA ASP B 666 27.822 43.789 69.226 1.00 12.19 C
+ATOM 3801 C ASP B 666 26.601 43.922 68.343 1.00 11.12 C
+ATOM 3802 O ASP B 666 25.861 44.892 68.485 1.00 12.04 O
+ATOM 3803 CB ASP B 666 28.480 45.176 69.299 1.00 14.72 C
+ATOM 3804 CG ASP B 666 29.092 45.617 67.962 1.00 16.50 C
+ATOM 3805 OD1 ASP B 666 29.129 44.821 66.990 1.00 17.17 O
+ATOM 3806 OD2 ASP B 666 29.551 46.783 67.890 1.00 18.36 O
+ATOM 3807 N TYR B 667 26.352 42.962 67.469 1.00 10.69 N
+ATOM 3808 CA TYR B 667 25.217 43.094 66.563 1.00 9.88 C
+ATOM 3809 C TYR B 667 23.862 43.290 67.237 1.00 10.08 C
+ATOM 3810 O TYR B 667 23.039 44.043 66.735 1.00 10.33 O
+ATOM 3811 CB TYR B 667 25.203 41.945 65.560 1.00 10.20 C
+ATOM 3812 CG TYR B 667 24.550 40.665 66.033 1.00 10.07 C
+ATOM 3813 CD1 TYR B 667 25.260 39.712 66.767 1.00 10.11 C
+ATOM 3814 CD2 TYR B 667 23.229 40.375 65.676 1.00 10.82 C
+ATOM 3815 CE1 TYR B 667 24.661 38.503 67.118 1.00 10.19 C
+ATOM 3816 CE2 TYR B 667 22.634 39.174 66.015 1.00 10.04 C
+ATOM 3817 CZ TYR B 667 23.352 38.249 66.729 1.00 10.53 C
+ATOM 3818 OH TYR B 667 22.738 37.052 67.017 1.00 12.33 O
+ATOM 3819 N LEU B 668 23.653 42.679 68.414 1.00 9.75 N
+ATOM 3820 CA LEU B 668 22.369 42.811 69.126 1.00 9.70 C
+ATOM 3821 C LEU B 668 22.126 44.212 69.708 1.00 10.27 C
+ATOM 3822 O LEU B 668 20.966 44.675 69.781 1.00 10.06 O
+ATOM 3823 CB LEU B 668 22.178 41.711 70.208 1.00 12.22 C
+ATOM 3824 CG LEU B 668 21.806 40.262 69.820 1.00 12.76 C
+ATOM 3825 CD1 LEU B 668 21.511 39.436 71.082 1.00 13.67 C
+ATOM 3826 CD2 LEU B 668 20.573 40.239 68.953 1.00 13.16 C
+ATOM 3827 N ASP B 669 23.202 44.906 70.111 1.00 10.21 N
+ATOM 3828 CA ASP B 669 23.038 46.280 70.613 1.00 11.23 C
+ATOM 3829 C ASP B 669 22.387 47.147 69.507 1.00 10.26 C
+ATOM 3830 O ASP B 669 21.503 47.953 69.782 1.00 10.52 O
+ATOM 3831 CB ASP B 669 24.379 46.906 71.018 1.00 13.16 C
+ATOM 3832 CG ASP B 669 24.997 46.258 72.258 1.00 15.42 C
+ATOM 3833 OD1 ASP B 669 24.367 45.385 72.887 1.00 16.23 O
+ATOM 3834 OD2 ASP B 669 26.144 46.616 72.574 1.00 17.42 O
+ATOM 3835 N TYR B 670 22.812 46.937 68.257 1.00 10.27 N
+ATOM 3836 CA TYR B 670 22.260 47.673 67.096 1.00 10.00 C
+ATOM 3837 C TYR B 670 20.797 47.301 66.786 1.00 8.66 C
+ATOM 3838 O TYR B 670 19.973 48.169 66.555 1.00 9.29 O
+ATOM 3839 CB TYR B 670 23.111 47.429 65.850 1.00 11.85 C
+ATOM 3840 CG TYR B 670 24.428 48.165 65.903 1.00 15.11 C
+ATOM 3841 CD1 TYR B 670 24.505 49.495 65.488 1.00 17.50 C
+ATOM 3842 CD2 TYR B 670 25.576 47.560 66.425 1.00 16.66 C
+ATOM 3843 CE1 TYR B 670 25.697 50.216 65.597 1.00 20.33 C
+ATOM 3844 CE2 TYR B 670 26.779 48.276 66.541 1.00 19.78 C
+ATOM 3845 CZ TYR B 670 26.829 49.604 66.126 1.00 21.26 C
+ATOM 3846 OH TYR B 670 27.994 50.349 66.252 1.00 23.68 O
+ATOM 3847 N ALA B 671 20.478 46.004 66.798 1.00 8.48 N
+ATOM 3848 CA ALA B 671 19.109 45.542 66.528 1.00 7.62 C
+ATOM 3849 C ALA B 671 18.139 46.232 67.476 1.00 7.76 C
+ATOM 3850 O ALA B 671 17.111 46.742 67.057 1.00 8.09 O
+ATOM 3851 CB ALA B 671 19.019 44.032 66.671 1.00 7.55 C
+ATOM 3852 N PHE B 672 18.462 46.228 68.775 1.00 7.93 N
+ATOM 3853 CA PHE B 672 17.602 46.860 69.762 1.00 8.10 C
+ATOM 3854 C PHE B 672 17.533 48.389 69.640 1.00 8.52 C
+ATOM 3855 O PHE B 672 16.459 48.966 69.801 1.00 9.28 O
+ATOM 3856 CB PHE B 672 17.966 46.400 71.182 1.00 8.38 C
+ATOM 3857 CG PHE B 672 17.426 45.022 71.517 1.00 8.10 C
+ATOM 3858 CD1 PHE B 672 16.140 44.868 72.047 1.00 8.55 C
+ATOM 3859 CD2 PHE B 672 18.180 43.867 71.249 1.00 9.00 C
+ATOM 3860 CE1 PHE B 672 15.616 43.580 72.298 1.00 8.19 C
+ATOM 3861 CE2 PHE B 672 17.651 42.570 71.500 1.00 8.79 C
+ATOM 3862 CZ PHE B 672 16.366 42.449 72.021 1.00 8.26 C
+ATOM 3863 N ARG B 673 18.666 49.042 69.351 1.00 9.58 N
+ATOM 3864 CA ARG B 673 18.657 50.508 69.159 1.00 11.70 C
+ATOM 3865 C ARG B 673 17.779 50.892 67.945 1.00 9.95 C
+ATOM 3866 O ARG B 673 16.962 51.812 68.027 1.00 11.11 O
+ATOM 3867 CB ARG B 673 20.077 51.067 68.987 1.00 13.66 C
+ATOM 3868 CG ARG B 673 20.870 51.100 70.281 1.00 19.60 C
+ATOM 3869 CD ARG B 673 22.151 51.928 70.161 1.00 23.96 C
+ATOM 3870 NE ARG B 673 23.360 51.175 70.526 1.00 29.34 N
+ATOM 3871 CZ ARG B 673 23.883 51.093 71.757 1.00 31.65 C
+ATOM 3872 NH1 ARG B 673 23.300 51.712 72.796 1.00 33.06 N
+ATOM 3873 NH2 ARG B 673 25.058 50.476 71.937 1.00 32.22 N
+ATOM 3874 N TYR B 674 17.911 50.144 66.849 1.00 9.56 N
+ATOM 3875 CA TYR B 674 17.117 50.401 65.636 1.00 10.17 C
+ATOM 3876 C TYR B 674 15.637 50.216 65.910 1.00 10.03 C
+ATOM 3877 O TYR B 674 14.807 50.997 65.440 1.00 10.31 O
+ATOM 3878 CB TYR B 674 17.519 49.480 64.480 1.00 10.16 C
+ATOM 3879 CG TYR B 674 18.921 49.672 63.980 1.00 10.56 C
+ATOM 3880 CD1 TYR B 674 19.576 50.889 64.126 1.00 11.90 C
+ATOM 3881 CD2 TYR B 674 19.575 48.639 63.318 1.00 10.39 C
+ATOM 3882 CE1 TYR B 674 20.874 51.071 63.609 1.00 12.59 C
+ATOM 3883 CE2 TYR B 674 20.841 48.803 62.792 1.00 12.01 C
+ATOM 3884 CZ TYR B 674 21.493 50.022 62.935 1.00 12.37 C
+ATOM 3885 OH TYR B 674 22.745 50.188 62.363 1.00 13.88 O
+ATOM 3886 N ALA B 675 15.303 49.178 66.680 1.00 9.09 N
+ATOM 3887 CA ALA B 675 13.903 48.911 67.009 1.00 8.90 C
+ATOM 3888 C ALA B 675 13.275 49.994 67.871 1.00 8.27 C
+ATOM 3889 O ALA B 675 12.118 50.383 67.657 1.00 9.81 O
+ATOM 3890 CB ALA B 675 13.776 47.547 67.700 1.00 8.30 C
+ATOM 3891 N ARG B 676 14.032 50.473 68.848 1.00 8.88 N
+ATOM 3892 CA ARG B 676 13.541 51.504 69.740 1.00 10.75 C
+ATOM 3893 C ARG B 676 13.240 52.772 68.934 1.00 12.58 C
+ATOM 3894 O ARG B 676 12.203 53.409 69.145 1.00 13.93 O
+ATOM 3895 CB ARG B 676 14.544 51.796 70.874 1.00 10.88 C
+ATOM 3896 CG ARG B 676 14.094 52.972 71.760 1.00 11.56 C
+ATOM 3897 CD ARG B 676 12.809 52.660 72.561 1.00 13.67 C
+ATOM 3898 NE ARG B 676 13.175 52.159 73.886 1.00 15.94 N
+ATOM 3899 CZ ARG B 676 12.643 51.098 74.499 1.00 17.18 C
+ATOM 3900 NH1 ARG B 676 11.669 50.379 73.929 1.00 15.82 N
+ATOM 3901 NH2 ARG B 676 13.148 50.722 75.687 1.00 17.84 N
+ATOM 3902 N GLU B 677 14.098 53.098 67.974 1.00 14.35 N
+ATOM 3903 CA GLU B 677 13.864 54.303 67.154 1.00 17.65 C
+ATOM 3904 C GLU B 677 12.631 54.157 66.237 1.00 16.14 C
+ATOM 3905 O GLU B 677 11.896 55.131 66.017 1.00 16.57 O
+ATOM 3906 CB GLU B 677 15.080 54.615 66.269 1.00 21.71 C
+ATOM 3907 CG GLU B 677 16.348 55.060 66.984 1.00 28.77 C
+ATOM 3908 CD GLU B 677 17.641 54.817 66.129 1.00 33.03 C
+ATOM 3909 OE1 GLU B 677 17.570 54.865 64.862 1.00 35.20 O
+ATOM 3910 OE2 GLU B 677 18.724 54.551 66.732 1.00 35.50 O
+ATOM 3911 N ALA B 678 12.403 52.955 65.708 1.00 13.53 N
+ATOM 3912 CA ALA B 678 11.284 52.732 64.789 1.00 12.75 C
+ATOM 3913 C ALA B 678 9.926 52.833 65.448 1.00 13.57 C
+ATOM 3914 O ALA B 678 8.974 53.340 64.846 1.00 13.94 O
+ATOM 3915 CB ALA B 678 11.430 51.394 64.071 1.00 12.51 C
+ATOM 3916 N ASP B 679 9.803 52.288 66.652 1.00 12.44 N
+ATOM 3917 CA ASP B 679 8.544 52.375 67.349 1.00 12.87 C
+ATOM 3918 C ASP B 679 8.856 52.459 68.831 1.00 15.16 C
+ATOM 3919 O ASP B 679 9.030 51.457 69.502 1.00 13.57 O
+ATOM 3920 CB ASP B 679 7.629 51.188 67.030 1.00 12.46 C
+ATOM 3921 CG ASP B 679 6.274 51.280 67.730 1.00 12.88 C
+ATOM 3922 OD1 ASP B 679 6.028 52.240 68.509 1.00 13.38 O
+ATOM 3923 OD2 ASP B 679 5.440 50.378 67.478 1.00 13.76 O
+ATOM 3924 N PRO B 680 8.880 53.680 69.365 1.00 17.05 N
+ATOM 3925 CA PRO B 680 9.165 53.962 70.776 1.00 17.95 C
+ATOM 3926 C PRO B 680 8.141 53.373 71.753 1.00 17.24 C
+ATOM 3927 O PRO B 680 8.430 53.252 72.936 1.00 18.25 O
+ATOM 3928 CB PRO B 680 9.126 55.490 70.834 1.00 18.71 C
+ATOM 3929 CG PRO B 680 9.440 55.913 69.428 1.00 20.37 C
+ATOM 3930 CD PRO B 680 8.648 54.924 68.617 1.00 18.67 C
+ATOM 3931 N ASP B 681 6.946 53.040 71.267 1.00 17.74 N
+ATOM 3932 CA ASP B 681 5.887 52.490 72.129 1.00 18.45 C
+ATOM 3933 C ASP B 681 5.852 50.968 72.283 1.00 17.23 C
+ATOM 3934 O ASP B 681 5.142 50.464 73.158 1.00 16.95 O
+ATOM 3935 CB ASP B 681 4.513 52.997 71.687 1.00 21.21 C
+ATOM 3936 CG ASP B 681 4.408 54.540 71.729 1.00 25.17 C
+ATOM 3937 OD1 ASP B 681 4.975 55.167 72.660 1.00 26.58 O
+ATOM 3938 OD2 ASP B 681 3.762 55.125 70.824 1.00 27.13 O
+ATOM 3939 N ALA B 682 6.612 50.248 71.454 1.00 13.98 N
+ATOM 3940 CA ALA B 682 6.659 48.789 71.513 1.00 12.50 C
+ATOM 3941 C ALA B 682 7.575 48.310 72.631 1.00 12.91 C
+ATOM 3942 O ALA B 682 8.613 48.941 72.910 1.00 12.82 O
+ATOM 3943 CB ALA B 682 7.158 48.228 70.204 1.00 12.34 C
+ATOM 3944 N LEU B 683 7.199 47.204 73.283 1.00 11.28 N
+ATOM 3945 CA LEU B 683 8.067 46.610 74.314 1.00 10.10 C
+ATOM 3946 C LEU B 683 8.967 45.681 73.511 1.00 9.22 C
+ATOM 3947 O LEU B 683 8.477 44.869 72.723 1.00 10.13 O
+ATOM 3948 CB LEU B 683 7.256 45.818 75.342 1.00 10.61 C
+ATOM 3949 CG LEU B 683 6.375 46.738 76.175 1.00 12.04 C
+ATOM 3950 CD1 LEU B 683 5.394 45.872 76.989 1.00 13.23 C
+ATOM 3951 CD2 LEU B 683 7.240 47.665 77.047 1.00 13.96 C
+ATOM 3952 N LEU B 684 10.274 45.798 73.700 1.00 8.11 N
+ATOM 3953 CA LEU B 684 11.256 45.028 72.945 1.00 7.87 C
+ATOM 3954 C LEU B 684 11.744 43.823 73.730 1.00 7.93 C
+ATOM 3955 O LEU B 684 12.244 43.990 74.839 1.00 8.95 O
+ATOM 3956 CB LEU B 684 12.452 45.934 72.572 1.00 7.86 C
+ATOM 3957 CG LEU B 684 12.090 47.261 71.873 1.00 8.50 C
+ATOM 3958 CD1 LEU B 684 13.356 47.992 71.512 1.00 9.99 C
+ATOM 3959 CD2 LEU B 684 11.201 46.970 70.640 1.00 7.93 C
+ATOM 3960 N PHE B 685 11.701 42.645 73.105 1.00 7.56 N
+ATOM 3961 CA PHE B 685 12.086 41.366 73.746 1.00 7.46 C
+ATOM 3962 C PHE B 685 13.190 40.579 73.066 1.00 8.44 C
+ATOM 3963 O PHE B 685 13.348 40.607 71.829 1.00 8.27 O
+ATOM 3964 CB PHE B 685 10.868 40.403 73.755 1.00 8.01 C
+ATOM 3965 CG PHE B 685 9.815 40.730 74.786 1.00 8.44 C
+ATOM 3966 CD1 PHE B 685 8.981 41.839 74.637 1.00 9.16 C
+ATOM 3967 CD2 PHE B 685 9.698 39.953 75.944 1.00 9.56 C
+ATOM 3968 CE1 PHE B 685 8.057 42.188 75.619 1.00 10.18 C
+ATOM 3969 CE2 PHE B 685 8.767 40.298 76.946 1.00 10.55 C
+ATOM 3970 CZ PHE B 685 7.952 41.416 76.787 1.00 10.25 C
+ATOM 3971 N TYR B 686 13.940 39.865 73.887 1.00 7.46 N
+ATOM 3972 CA TYR B 686 14.928 38.897 73.437 1.00 7.95 C
+ATOM 3973 C TYR B 686 14.172 37.582 73.782 1.00 8.47 C
+ATOM 3974 O TYR B 686 13.762 37.401 74.939 1.00 9.09 O
+ATOM 3975 CB TYR B 686 16.220 38.986 74.236 1.00 7.80 C
+ATOM 3976 CG TYR B 686 17.156 37.848 73.919 1.00 9.32 C
+ATOM 3977 CD1 TYR B 686 17.921 37.843 72.751 1.00 10.49 C
+ATOM 3978 CD2 TYR B 686 17.181 36.696 74.722 1.00 9.33 C
+ATOM 3979 CE1 TYR B 686 18.663 36.721 72.384 1.00 11.33 C
+ATOM 3980 CE2 TYR B 686 17.920 35.587 74.365 1.00 9.79 C
+ATOM 3981 CZ TYR B 686 18.650 35.600 73.196 1.00 11.43 C
+ATOM 3982 OH TYR B 686 19.318 34.474 72.808 1.00 12.88 O
+ATOM 3983 N ASN B 687 13.990 36.688 72.809 1.00 7.37 N
+ATOM 3984 CA ASN B 687 13.208 35.452 72.982 1.00 7.43 C
+ATOM 3985 C ASN B 687 14.121 34.216 72.796 1.00 8.97 C
+ATOM 3986 O ASN B 687 14.928 34.173 71.854 1.00 9.40 O
+ATOM 3987 CB ASN B 687 12.056 35.478 71.936 1.00 7.96 C
+ATOM 3988 CG ASN B 687 11.060 34.315 72.085 1.00 9.11 C
+ATOM 3989 OD1 ASN B 687 10.861 33.506 71.161 1.00 10.19 O
+ATOM 3990 ND2 ASN B 687 10.405 34.260 73.220 1.00 8.05 N
+ATOM 3991 N ASP B 688 13.999 33.204 73.666 1.00 8.15 N
+ATOM 3992 CA ASP B 688 14.862 32.014 73.554 1.00 8.37 C
+ATOM 3993 C ASP B 688 14.244 30.810 74.325 1.00 8.87 C
+ATOM 3994 O ASP B 688 13.250 30.964 75.056 1.00 8.64 O
+ATOM 3995 CB ASP B 688 16.275 32.319 74.126 1.00 8.61 C
+ATOM 3996 CG ASP B 688 17.407 31.617 73.369 1.00 8.78 C
+ATOM 3997 OD1 ASP B 688 17.213 30.572 72.733 1.00 9.86 O
+ATOM 3998 OD2 ASP B 688 18.541 32.124 73.395 1.00 11.65 O
+ATOM 3999 N TYR B 689 14.787 29.621 74.048 1.00 9.44 N
+ATOM 4000 CA TYR B 689 14.363 28.385 74.703 1.00 10.15 C
+ATOM 4001 C TYR B 689 15.478 27.899 75.670 1.00 10.54 C
+ATOM 4002 O TYR B 689 16.660 28.237 75.537 1.00 9.98 O
+ATOM 4003 CB TYR B 689 14.011 27.298 73.686 1.00 10.64 C
+ATOM 4004 CG TYR B 689 15.154 26.863 72.807 1.00 12.46 C
+ATOM 4005 CD1 TYR B 689 16.035 25.850 73.213 1.00 13.22 C
+ATOM 4006 CD2 TYR B 689 15.402 27.498 71.582 1.00 13.29 C
+ATOM 4007 CE1 TYR B 689 17.144 25.491 72.430 1.00 14.11 C
+ATOM 4008 CE2 TYR B 689 16.491 27.145 70.796 1.00 14.28 C
+ATOM 4009 CZ TYR B 689 17.367 26.146 71.224 1.00 15.76 C
+ATOM 4010 OH TYR B 689 18.484 25.840 70.457 1.00 17.07 O
+ATOM 4011 N ASN B 690 15.072 27.086 76.638 1.00 12.08 N
+ATOM 4012 CA ASN B 690 15.973 26.562 77.647 1.00 12.91 C
+ATOM 4013 C ASN B 690 16.693 27.651 78.431 1.00 12.35 C
+ATOM 4014 O ASN B 690 17.846 27.479 78.828 1.00 12.87 O
+ATOM 4015 CB ASN B 690 16.957 25.543 77.075 1.00 16.85 C
+ATOM 4016 CG ASN B 690 17.572 24.662 78.168 1.00 22.48 C
+ATOM 4017 OD1 ASN B 690 16.922 24.382 79.210 1.00 25.36 O
+ATOM 4018 ND2 ASN B 690 18.827 24.240 77.964 1.00 24.04 N
+ATOM 4019 N ILE B 691 15.990 28.761 78.686 1.00 10.98 N
+ATOM 4020 CA ILE B 691 16.533 29.882 79.485 1.00 9.94 C
+ATOM 4021 C ILE B 691 15.580 30.184 80.661 1.00 10.20 C
+ATOM 4022 O ILE B 691 15.709 31.199 81.332 1.00 11.07 O
+ATOM 4023 CB ILE B 691 16.708 31.182 78.638 1.00 9.80 C
+ATOM 4024 CG1 ILE B 691 15.350 31.632 78.076 1.00 9.14 C
+ATOM 4025 CG2 ILE B 691 17.779 30.953 77.536 1.00 10.15 C
+ATOM 4026 CD1 ILE B 691 15.337 33.064 77.621 1.00 10.14 C
+ATOM 4027 N GLU B 692 14.644 29.270 80.920 1.00 9.37 N
+ATOM 4028 CA GLU B 692 13.645 29.459 81.974 1.00 10.91 C
+ATOM 4029 C GLU B 692 14.082 29.116 83.401 1.00 10.68 C
+ATOM 4030 O GLU B 692 13.560 29.692 84.352 1.00 11.85 O
+ATOM 4031 CB GLU B 692 12.388 28.646 81.657 1.00 11.61 C
+ATOM 4032 CG GLU B 692 11.754 28.957 80.292 1.00 11.88 C
+ATOM 4033 CD GLU B 692 12.297 28.116 79.150 1.00 12.28 C
+ATOM 4034 OE1 GLU B 692 13.223 27.287 79.338 1.00 12.71 O
+ATOM 4035 OE2 GLU B 692 11.770 28.272 78.030 1.00 13.89 O
+ATOM 4036 N ASP B 693 15.022 28.189 83.531 1.00 11.68 N
+ATOM 4037 CA ASP B 693 15.489 27.731 84.863 1.00 12.97 C
+ATOM 4038 C ASP B 693 16.680 28.550 85.359 1.00 12.88 C
+ATOM 4039 O ASP B 693 16.764 29.757 85.077 1.00 12.52 O
+ATOM 4040 CB ASP B 693 15.807 26.224 84.805 1.00 14.04 C
+ATOM 4041 CG ASP B 693 16.938 25.870 83.809 1.00 15.65 C
+ATOM 4042 OD1 ASP B 693 17.634 26.765 83.283 1.00 15.60 O
+ATOM 4043 OD2 ASP B 693 17.135 24.660 83.529 1.00 17.74 O
+ATOM 4044 N LEU B 694 17.552 27.929 86.159 1.00 12.21 N
+ATOM 4045 CA LEU B 694 18.758 28.618 86.636 1.00 12.19 C
+ATOM 4046 C LEU B 694 20.037 27.912 86.112 1.00 12.27 C
+ATOM 4047 O LEU B 694 21.113 27.988 86.707 1.00 13.93 O
+ATOM 4048 CB LEU B 694 18.749 28.752 88.170 1.00 11.38 C
+ATOM 4049 CG LEU B 694 17.626 29.604 88.766 1.00 12.07 C
+ATOM 4050 CD1 LEU B 694 17.505 29.368 90.298 1.00 13.14 C
+ATOM 4051 CD2 LEU B 694 17.836 31.097 88.431 1.00 12.37 C
+ATOM 4052 N GLY B 695 19.920 27.255 84.968 1.00 12.16 N
+ATOM 4053 CA GLY B 695 21.049 26.557 84.380 1.00 12.78 C
+ATOM 4054 C GLY B 695 22.040 27.450 83.626 1.00 13.66 C
+ATOM 4055 O GLY B 695 21.825 28.661 83.500 1.00 13.73 O
+ATOM 4056 N PRO B 696 23.069 26.857 82.998 1.00 14.68 N
+ATOM 4057 CA PRO B 696 24.088 27.627 82.249 1.00 15.00 C
+ATOM 4058 C PRO B 696 23.554 28.590 81.163 1.00 13.65 C
+ATOM 4059 O PRO B 696 23.955 29.755 81.131 1.00 13.72 O
+ATOM 4060 CB PRO B 696 24.993 26.531 81.655 1.00 15.71 C
+ATOM 4061 CG PRO B 696 24.823 25.369 82.628 1.00 17.35 C
+ATOM 4062 CD PRO B 696 23.361 25.405 82.979 1.00 15.69 C
+ATOM 4063 N LYS B 697 22.676 28.105 80.285 1.00 12.21 N
+ATOM 4064 CA LYS B 697 22.130 28.957 79.229 1.00 11.52 C
+ATOM 4065 C LYS B 697 21.305 30.094 79.822 1.00 12.02 C
+ATOM 4066 O LYS B 697 21.386 31.229 79.353 1.00 12.65 O
+ATOM 4067 CB LYS B 697 21.280 28.157 78.257 1.00 10.45 C
+ATOM 4068 CG LYS B 697 21.049 28.902 76.920 1.00 11.25 C
+ATOM 4069 CD LYS B 697 20.106 28.129 76.033 1.00 10.63 C
+ATOM 4070 CE LYS B 697 19.905 28.803 74.657 1.00 11.19 C
+ATOM 4071 NZ LYS B 697 18.918 28.046 73.852 1.00 10.42 N
+ATOM 4072 N SER B 698 20.481 29.799 80.831 1.00 11.81 N
+ATOM 4073 CA SER B 698 19.683 30.833 81.494 1.00 10.89 C
+ATOM 4074 C SER B 698 20.570 31.938 82.137 1.00 11.77 C
+ATOM 4075 O SER B 698 20.271 33.152 82.040 1.00 11.16 O
+ATOM 4076 CB SER B 698 18.777 30.216 82.574 1.00 10.87 C
+ATOM 4077 OG SER B 698 18.252 31.229 83.410 1.00 10.80 O
+ATOM 4078 N ASN B 699 21.647 31.522 82.810 1.00 11.27 N
+ATOM 4079 CA ASN B 699 22.543 32.500 83.440 1.00 12.24 C
+ATOM 4080 C ASN B 699 23.243 33.368 82.400 1.00 12.28 C
+ATOM 4081 O ASN B 699 23.464 34.555 82.639 1.00 13.18 O
+ATOM 4082 CB ASN B 699 23.588 31.818 84.325 1.00 13.86 C
+ATOM 4083 CG ASN B 699 22.960 31.051 85.484 1.00 15.00 C
+ATOM 4084 OD1 ASN B 699 21.883 31.399 85.979 1.00 14.79 O
+ATOM 4085 ND2 ASN B 699 23.614 29.967 85.880 1.00 16.53 N
+ATOM 4086 N ALA B 700 23.632 32.761 81.276 1.00 12.63 N
+ATOM 4087 CA ALA B 700 24.295 33.498 80.165 1.00 13.10 C
+ATOM 4088 C ALA B 700 23.346 34.582 79.607 1.00 12.50 C
+ATOM 4089 O ALA B 700 23.754 35.725 79.417 1.00 12.67 O
+ATOM 4090 CB ALA B 700 24.736 32.529 79.050 1.00 12.51 C
+ATOM 4091 N VAL B 701 22.076 34.247 79.389 1.00 11.96 N
+ATOM 4092 CA VAL B 701 21.106 35.224 78.886 1.00 11.40 C
+ATOM 4093 C VAL B 701 20.800 36.307 79.927 1.00 11.83 C
+ATOM 4094 O VAL B 701 20.739 37.499 79.604 1.00 12.54 O
+ATOM 4095 CB VAL B 701 19.824 34.532 78.356 1.00 11.59 C
+ATOM 4096 CG1 VAL B 701 18.707 35.541 78.109 1.00 10.70 C
+ATOM 4097 CG2 VAL B 701 20.159 33.727 77.090 1.00 10.92 C
+ATOM 4098 N PHE B 702 20.667 35.921 81.195 1.00 10.74 N
+ATOM 4099 CA PHE B 702 20.424 36.914 82.233 1.00 11.38 C
+ATOM 4100 C PHE B 702 21.606 37.927 82.291 1.00 11.37 C
+ATOM 4101 O PHE B 702 21.395 39.133 82.342 1.00 11.85 O
+ATOM 4102 CB PHE B 702 20.204 36.233 83.605 1.00 11.28 C
+ATOM 4103 CG PHE B 702 20.147 37.200 84.744 1.00 10.78 C
+ATOM 4104 CD1 PHE B 702 18.998 37.917 85.000 1.00 11.62 C
+ATOM 4105 CD2 PHE B 702 21.272 37.441 85.514 1.00 11.35 C
+ATOM 4106 CE1 PHE B 702 18.957 38.877 86.013 1.00 12.29 C
+ATOM 4107 CE2 PHE B 702 21.236 38.399 86.523 1.00 12.56 C
+ATOM 4108 CZ PHE B 702 20.076 39.115 86.769 1.00 12.23 C
+ATOM 4109 N ASN B 703 22.837 37.426 82.321 1.00 13.04 N
+ATOM 4110 CA ASN B 703 24.022 38.306 82.368 1.00 14.48 C
+ATOM 4111 C ASN B 703 24.059 39.228 81.126 1.00 14.60 C
+ATOM 4112 O ASN B 703 24.353 40.416 81.250 1.00 14.54 O
+ATOM 4113 CB ASN B 703 25.334 37.494 82.476 1.00 17.09 C
+ATOM 4114 CG ASN B 703 25.473 36.744 83.821 1.00 20.04 C
+ATOM 4115 OD1 ASN B 703 25.000 37.207 84.850 1.00 20.78 O
+ATOM 4116 ND2 ASN B 703 26.149 35.587 83.797 1.00 22.33 N
+ATOM 4117 N MET B 704 23.767 38.673 79.944 1.00 14.23 N
+ATOM 4118 CA MET B 704 23.755 39.457 78.710 1.00 14.02 C
+ATOM 4119 C MET B 704 22.765 40.604 78.831 1.00 13.16 C
+ATOM 4120 O MET B 704 23.086 41.760 78.548 1.00 13.49 O
+ATOM 4121 CB MET B 704 23.352 38.594 77.516 1.00 14.46 C
+ATOM 4122 CG MET B 704 23.258 39.411 76.217 1.00 15.96 C
+ATOM 4123 SD MET B 704 22.794 38.421 74.800 1.00 18.48 S
+ATOM 4124 CE MET B 704 21.079 38.288 75.044 1.00 17.01 C
+ATOM 4125 N ILE B 705 21.555 40.287 79.274 1.00 11.75 N
+ATOM 4126 CA ILE B 705 20.519 41.286 79.406 1.00 12.82 C
+ATOM 4127 C ILE B 705 20.848 42.303 80.496 1.00 13.76 C
+ATOM 4128 O ILE B 705 20.622 43.502 80.325 1.00 14.33 O
+ATOM 4129 CB ILE B 705 19.129 40.630 79.599 1.00 11.77 C
+ATOM 4130 CG1 ILE B 705 18.767 39.854 78.317 1.00 11.57 C
+ATOM 4131 CG2 ILE B 705 18.108 41.683 79.994 1.00 11.98 C
+ATOM 4132 CD1 ILE B 705 17.448 39.162 78.358 1.00 12.17 C
+ATOM 4133 N LYS B 706 21.443 41.826 81.589 1.00 14.31 N
+ATOM 4134 CA LYS B 706 21.827 42.716 82.671 1.00 15.58 C
+ATOM 4135 C LYS B 706 22.849 43.726 82.163 1.00 14.92 C
+ATOM 4136 O LYS B 706 22.726 44.905 82.414 1.00 15.58 O
+ATOM 4137 CB LYS B 706 22.422 41.918 83.821 1.00 16.08 C
+ATOM 4138 CG LYS B 706 22.738 42.768 85.015 1.00 18.75 C
+ATOM 4139 CD LYS B 706 23.272 41.889 86.122 1.00 22.23 C
+ATOM 4140 CE LYS B 706 23.824 42.740 87.258 1.00 25.37 C
+ATOM 4141 NZ LYS B 706 22.818 43.732 87.779 1.00 26.98 N
+ATOM 4142 N SER B 707 23.825 43.251 81.410 1.00 15.08 N
+ATOM 4143 CA SER B 707 24.865 44.096 80.868 1.00 16.51 C
+ATOM 4144 C SER B 707 24.305 45.113 79.880 1.00 17.16 C
+ATOM 4145 O SER B 707 24.687 46.289 79.918 1.00 17.21 O
+ATOM 4146 CB SER B 707 25.924 43.239 80.195 1.00 17.56 C
+ATOM 4147 OG SER B 707 26.993 44.040 79.724 1.00 21.02 O
+ATOM 4148 N MET B 708 23.405 44.668 79.008 1.00 16.82 N
+ATOM 4149 CA MET B 708 22.788 45.564 78.034 1.00 18.53 C
+ATOM 4150 C MET B 708 22.071 46.692 78.758 1.00 19.86 C
+ATOM 4151 O MET B 708 22.191 47.859 78.371 1.00 20.74 O
+ATOM 4152 CB MET B 708 21.798 44.816 77.146 1.00 18.75 C
+ATOM 4153 CG MET B 708 22.433 43.926 76.078 1.00 20.22 C
+ATOM 4154 SD MET B 708 21.141 42.885 75.241 1.00 22.08 S
+ATOM 4155 CE MET B 708 20.147 44.077 74.481 1.00 23.05 C
+ATOM 4156 N LYS B 709 21.321 46.356 79.805 1.00 20.98 N
+ATOM 4157 CA LYS B 709 20.605 47.359 80.601 1.00 23.83 C
+ATOM 4158 C LYS B 709 21.615 48.358 81.215 1.00 24.74 C
+ATOM 4159 O LYS B 709 21.373 49.579 81.201 1.00 26.11 O
+ATOM 4160 CB LYS B 709 19.787 46.687 81.735 1.00 24.85 C
+ATOM 4161 CG LYS B 709 18.375 46.248 81.389 1.00 24.93 C
+ATOM 4162 CD LYS B 709 17.486 47.456 81.329 1.00 25.73 C
+ATOM 4163 CE LYS B 709 16.055 47.090 81.096 1.00 26.19 C
+ATOM 4164 NZ LYS B 709 15.243 48.254 80.665 1.00 27.07 N
+ATOM 4165 N GLU B 710 22.736 47.846 81.728 1.00 24.72 N
+ATOM 4166 CA GLU B 710 23.773 48.682 82.357 1.00 26.83 C
+ATOM 4167 C GLU B 710 24.438 49.651 81.368 1.00 26.23 C
+ATOM 4168 O GLU B 710 24.886 50.728 81.773 1.00 26.73 O
+ATOM 4169 CB GLU B 710 24.881 47.828 82.994 1.00 28.59 C
+ATOM 4170 CG GLU B 710 24.546 47.057 84.258 1.00 31.62 C
+ATOM 4171 CD GLU B 710 25.799 46.373 84.825 1.00 34.03 C
+ATOM 4172 OE1 GLU B 710 26.276 45.376 84.226 1.00 34.95 O
+ATOM 4173 OE2 GLU B 710 26.345 46.867 85.843 1.00 36.16 O
+ATOM 4174 N ARG B 711 24.577 49.225 80.108 1.00 24.14 N
+ATOM 4175 CA ARG B 711 25.176 50.036 79.043 1.00 22.55 C
+ATOM 4176 C ARG B 711 24.196 50.922 78.262 1.00 21.80 C
+ATOM 4177 O ARG B 711 24.581 51.482 77.239 1.00 23.59 O
+ATOM 4178 CB ARG B 711 25.918 49.136 78.065 1.00 22.61 C
+ATOM 4179 CG ARG B 711 26.950 48.323 78.775 1.00 23.96 C
+ATOM 4180 CD ARG B 711 27.713 47.452 77.851 1.00 24.34 C
+ATOM 4181 NE ARG B 711 26.933 46.313 77.378 1.00 24.68 N
+ATOM 4182 CZ ARG B 711 26.481 46.218 76.140 1.00 23.77 C
+ATOM 4183 NH1 ARG B 711 26.698 47.220 75.300 1.00 22.90 N
+ATOM 4184 NH2 ARG B 711 25.794 45.150 75.760 1.00 23.53 N
+ATOM 4185 N GLY B 712 22.947 51.020 78.723 1.00 19.74 N
+ATOM 4186 CA GLY B 712 21.926 51.830 78.068 1.00 19.21 C
+ATOM 4187 C GLY B 712 21.272 51.285 76.794 1.00 17.80 C
+ATOM 4188 O GLY B 712 20.629 52.036 76.066 1.00 19.05 O
+ATOM 4189 N VAL B 713 21.456 50.005 76.491 1.00 15.82 N
+ATOM 4190 CA VAL B 713 20.839 49.421 75.305 1.00 15.17 C
+ATOM 4191 C VAL B 713 19.358 49.233 75.627 1.00 14.59 C
+ATOM 4192 O VAL B 713 19.023 48.677 76.670 1.00 14.63 O
+ATOM 4193 CB VAL B 713 21.474 48.081 74.950 1.00 14.56 C
+ATOM 4194 CG1 VAL B 713 20.737 47.441 73.782 1.00 15.20 C
+ATOM 4195 CG2 VAL B 713 22.921 48.284 74.627 1.00 14.74 C
+ATOM 4196 N PRO B 714 18.452 49.700 74.747 1.00 14.03 N
+ATOM 4197 CA PRO B 714 17.018 49.563 74.999 1.00 14.49 C
+ATOM 4198 C PRO B 714 16.390 48.170 74.854 1.00 15.74 C
+ATOM 4199 O PRO B 714 15.975 47.787 73.763 1.00 19.20 O
+ATOM 4200 CB PRO B 714 16.399 50.564 74.002 1.00 15.01 C
+ATOM 4201 CG PRO B 714 17.340 50.505 72.858 1.00 13.42 C
+ATOM 4202 CD PRO B 714 18.691 50.486 73.515 1.00 13.20 C
+ATOM 4203 N ILE B 715 16.305 47.430 75.957 1.00 14.09 N
+ATOM 4204 CA ILE B 715 15.667 46.114 75.970 1.00 12.23 C
+ATOM 4205 C ILE B 715 14.677 46.138 77.145 1.00 11.74 C
+ATOM 4206 O ILE B 715 15.018 46.584 78.249 1.00 13.13 O
+ATOM 4207 CB ILE B 715 16.690 44.954 76.058 1.00 12.79 C
+ATOM 4208 CG1 ILE B 715 15.952 43.623 76.070 1.00 13.06 C
+ATOM 4209 CG2 ILE B 715 17.611 45.101 77.259 1.00 12.52 C
+ATOM 4210 CD1 ILE B 715 16.844 42.447 75.886 1.00 14.53 C
+ATOM 4211 N ASP B 716 13.439 45.729 76.888 1.00 10.20 N
+ATOM 4212 CA ASP B 716 12.355 45.759 77.892 1.00 9.90 C
+ATOM 4213 C ASP B 716 11.990 44.430 78.527 1.00 9.81 C
+ATOM 4214 O ASP B 716 11.608 44.385 79.697 1.00 10.42 O
+ATOM 4215 CB ASP B 716 11.058 46.338 77.283 1.00 9.93 C
+ATOM 4216 CG ASP B 716 11.262 47.717 76.674 1.00 11.02 C
+ATOM 4217 OD1 ASP B 716 11.666 48.645 77.411 1.00 11.62 O
+ATOM 4218 OD2 ASP B 716 11.041 47.866 75.463 1.00 10.52 O
+ATOM 4219 N GLY B 717 12.097 43.352 77.767 1.00 8.75 N
+ATOM 4220 CA GLY B 717 11.681 42.078 78.307 1.00 8.61 C
+ATOM 4221 C GLY B 717 12.405 40.880 77.766 1.00 9.65 C
+ATOM 4222 O GLY B 717 13.219 40.971 76.817 1.00 8.64 O
+ATOM 4223 N VAL B 718 12.169 39.747 78.424 1.00 7.81 N
+ATOM 4224 CA VAL B 718 12.753 38.502 78.004 1.00 8.03 C
+ATOM 4225 C VAL B 718 11.608 37.526 77.733 1.00 7.73 C
+ATOM 4226 O VAL B 718 10.618 37.491 78.469 1.00 8.36 O
+ATOM 4227 CB VAL B 718 13.781 37.948 79.060 1.00 9.61 C
+ATOM 4228 CG1 VAL B 718 13.081 37.695 80.435 1.00 10.03 C
+ATOM 4229 CG2 VAL B 718 14.463 36.673 78.526 1.00 9.16 C
+ATOM 4230 N GLY B 719 11.709 36.824 76.615 1.00 7.49 N
+ATOM 4231 CA GLY B 719 10.699 35.862 76.238 1.00 7.79 C
+ATOM 4232 C GLY B 719 11.161 34.430 76.516 1.00 8.67 C
+ATOM 4233 O GLY B 719 12.174 33.962 75.969 1.00 8.57 O
+ATOM 4234 N PHE B 720 10.403 33.750 77.400 1.00 8.62 N
+ATOM 4235 CA PHE B 720 10.666 32.349 77.769 1.00 8.70 C
+ATOM 4236 C PHE B 720 9.768 31.521 76.839 1.00 8.33 C
+ATOM 4237 O PHE B 720 8.536 31.540 76.984 1.00 8.72 O
+ATOM 4238 CB PHE B 720 10.212 32.050 79.215 1.00 9.47 C
+ATOM 4239 CG PHE B 720 11.107 32.617 80.327 1.00 10.07 C
+ATOM 4240 CD1 PHE B 720 12.230 33.403 80.069 1.00 9.90 C
+ATOM 4241 CD2 PHE B 720 10.796 32.337 81.654 1.00 10.52 C
+ATOM 4242 CE1 PHE B 720 13.007 33.886 81.091 1.00 10.06 C
+ATOM 4243 CE2 PHE B 720 11.578 32.821 82.695 1.00 10.20 C
+ATOM 4244 CZ PHE B 720 12.683 33.598 82.411 1.00 10.50 C
+ATOM 4245 N GLN B 721 10.365 30.797 75.898 1.00 8.47 N
+ATOM 4246 CA GLN B 721 9.579 29.977 74.967 1.00 8.45 C
+ATOM 4247 C GLN B 721 8.713 28.912 75.672 1.00 9.00 C
+ATOM 4248 O GLN B 721 7.574 28.717 75.302 1.00 10.44 O
+ATOM 4249 CB GLN B 721 10.465 29.337 73.904 1.00 8.10 C
+ATOM 4250 CG GLN B 721 10.888 30.337 72.778 1.00 9.08 C
+ATOM 4251 CD GLN B 721 11.731 29.676 71.711 1.00 10.02 C
+ATOM 4252 OE1 GLN B 721 11.681 28.459 71.519 1.00 10.19 O
+ATOM 4253 NE2 GLN B 721 12.516 30.472 71.001 1.00 10.74 N
+ATOM 4254 N CYS B 722 9.242 28.268 76.708 1.00 9.73 N
+ATOM 4255 CA CYS B 722 8.506 27.254 77.465 1.00 10.36 C
+ATOM 4256 C CYS B 722 8.119 25.989 76.688 1.00 9.67 C
+ATOM 4257 O CYS B 722 6.976 25.508 76.777 1.00 10.50 O
+ATOM 4258 CB CYS B 722 7.289 27.856 78.187 1.00 10.38 C
+ATOM 4259 SG CYS B 722 7.655 29.113 79.456 1.00 11.84 S
+ATOM 4260 N HIS B 723 9.059 25.465 75.900 1.00 10.10 N
+ATOM 4261 CA HIS B 723 8.835 24.201 75.172 1.00 11.99 C
+ATOM 4262 C HIS B 723 9.298 23.099 76.157 1.00 12.75 C
+ATOM 4263 O HIS B 723 10.476 22.692 76.187 1.00 12.33 O
+ATOM 4264 CB HIS B 723 9.609 24.169 73.847 1.00 11.83 C
+ATOM 4265 CG HIS B 723 9.084 25.147 72.838 1.00 11.48 C
+ATOM 4266 ND1 HIS B 723 7.805 25.076 72.312 1.00 11.45 N
+ATOM 4267 CD2 HIS B 723 9.664 26.229 72.266 1.00 10.97 C
+ATOM 4268 CE1 HIS B 723 7.622 26.070 71.462 1.00 10.99 C
+ATOM 4269 NE2 HIS B 723 8.736 26.781 71.416 1.00 10.15 N
+ATOM 4270 N PHE B 724 8.351 22.728 77.027 1.00 12.96 N
+ATOM 4271 CA PHE B 724 8.580 21.774 78.120 1.00 13.75 C
+ATOM 4272 C PHE B 724 8.136 20.327 77.857 1.00 15.38 C
+ATOM 4273 O PHE B 724 7.333 20.054 76.950 1.00 15.22 O
+ATOM 4274 CB PHE B 724 7.874 22.282 79.390 1.00 12.93 C
+ATOM 4275 CG PHE B 724 8.346 23.645 79.875 1.00 12.99 C
+ATOM 4276 CD1 PHE B 724 9.706 23.920 80.042 1.00 13.45 C
+ATOM 4277 CD2 PHE B 724 7.421 24.621 80.254 1.00 12.67 C
+ATOM 4278 CE1 PHE B 724 10.121 25.139 80.591 1.00 12.89 C
+ATOM 4279 CE2 PHE B 724 7.839 25.829 80.799 1.00 12.22 C
+ATOM 4280 CZ PHE B 724 9.193 26.077 80.968 1.00 12.61 C
+ATOM 4281 N ILE B 725 8.699 19.405 78.657 1.00 17.09 N
+ATOM 4282 CA ILE B 725 8.365 17.978 78.601 1.00 17.43 C
+ATOM 4283 C ILE B 725 7.435 17.702 79.796 1.00 16.95 C
+ATOM 4284 O ILE B 725 7.683 18.179 80.913 1.00 17.04 O
+ATOM 4285 CB ILE B 725 9.626 17.069 78.716 1.00 18.98 C
+ATOM 4286 CG1 ILE B 725 10.620 17.371 77.581 1.00 20.07 C
+ATOM 4287 CG2 ILE B 725 9.195 15.581 78.659 1.00 19.55 C
+ATOM 4288 CD1 ILE B 725 11.921 16.514 77.605 1.00 21.31 C
+ATOM 4289 N ASN B 726 6.380 16.932 79.550 1.00 15.42 N
+ATOM 4290 CA ASN B 726 5.386 16.599 80.565 1.00 16.02 C
+ATOM 4291 C ASN B 726 6.039 16.008 81.821 1.00 16.11 C
+ATOM 4292 O ASN B 726 7.022 15.290 81.729 1.00 16.34 O
+ATOM 4293 CB ASN B 726 4.418 15.581 79.962 1.00 17.03 C
+ATOM 4294 CG ASN B 726 3.137 15.472 80.724 1.00 17.60 C
+ATOM 4295 OD1 ASN B 726 2.565 16.468 81.158 1.00 18.65 O
+ATOM 4296 ND2 ASN B 726 2.644 14.255 80.852 1.00 18.82 N
+ATOM 4297 N GLY B 727 5.498 16.321 82.989 1.00 16.88 N
+ATOM 4298 CA GLY B 727 6.055 15.771 84.219 1.00 18.66 C
+ATOM 4299 C GLY B 727 7.124 16.626 84.875 1.00 19.96 C
+ATOM 4300 O GLY B 727 8.087 16.116 85.462 1.00 19.43 O
+ATOM 4301 N MET B 728 6.951 17.939 84.769 1.00 20.59 N
+ATOM 4302 CA MET B 728 7.889 18.902 85.339 1.00 21.97 C
+ATOM 4303 C MET B 728 7.908 18.768 86.859 1.00 21.72 C
+ATOM 4304 O MET B 728 6.850 18.773 87.503 1.00 20.51 O
+ATOM 4305 CB MET B 728 7.475 20.336 84.966 1.00 23.48 C
+ATOM 4306 CG MET B 728 7.326 20.587 83.466 1.00 25.37 C
+ATOM 4307 SD MET B 728 7.157 22.331 83.114 1.00 27.80 S
+ATOM 4308 CE MET B 728 5.541 22.633 83.391 1.00 26.98 C
+ATOM 4309 N SER B 729 9.112 18.706 87.417 1.00 22.11 N
+ATOM 4310 CA SER B 729 9.307 18.570 88.858 1.00 22.52 C
+ATOM 4311 C SER B 729 9.060 19.887 89.612 1.00 23.65 C
+ATOM 4312 O SER B 729 9.118 20.970 89.019 1.00 23.37 O
+ATOM 4313 CB SER B 729 10.728 18.083 89.123 1.00 21.40 C
+ATOM 4314 OG SER B 729 11.654 19.140 88.973 1.00 22.89 O
+ATOM 4315 N PRO B 730 8.773 19.816 90.937 1.00 24.11 N
+ATOM 4316 CA PRO B 730 8.522 21.006 91.771 1.00 23.92 C
+ATOM 4317 C PRO B 730 9.768 21.900 91.858 1.00 23.61 C
+ATOM 4318 O PRO B 730 9.670 23.116 92.015 1.00 23.74 O
+ATOM 4319 CB PRO B 730 8.206 20.399 93.147 1.00 24.83 C
+ATOM 4320 CG PRO B 730 7.609 19.072 92.797 1.00 25.23 C
+ATOM 4321 CD PRO B 730 8.511 18.579 91.708 1.00 24.67 C
+ATOM 4322 N GLU B 731 10.931 21.266 91.802 1.00 23.67 N
+ATOM 4323 CA GLU B 731 12.207 21.960 91.860 1.00 24.84 C
+ATOM 4324 C GLU B 731 12.417 22.715 90.556 1.00 22.71 C
+ATOM 4325 O GLU B 731 12.968 23.807 90.558 1.00 21.75 O
+ATOM 4326 CB GLU B 731 13.347 20.963 92.075 1.00 27.68 C
+ATOM 4327 CG GLU B 731 13.350 20.313 93.474 1.00 32.72 C
+ATOM 4328 CD GLU B 731 12.149 19.358 93.752 1.00 35.58 C
+ATOM 4329 OE1 GLU B 731 11.834 18.478 92.889 1.00 35.97 O
+ATOM 4330 OE2 GLU B 731 11.534 19.491 94.858 1.00 38.04 O
+ATOM 4331 N TYR B 732 11.989 22.126 89.442 1.00 20.86 N
+ATOM 4332 CA TYR B 732 12.136 22.793 88.149 1.00 20.30 C
+ATOM 4333 C TYR B 732 11.243 24.030 88.155 1.00 17.89 C
+ATOM 4334 O TYR B 732 11.718 25.125 87.896 1.00 16.35 O
+ATOM 4335 CB TYR B 732 11.768 21.861 86.995 1.00 22.05 C
+ATOM 4336 CG TYR B 732 12.081 22.424 85.621 1.00 24.55 C
+ATOM 4337 CD1 TYR B 732 13.382 22.790 85.264 1.00 25.89 C
+ATOM 4338 CD2 TYR B 732 11.086 22.531 84.651 1.00 26.21 C
+ATOM 4339 CE1 TYR B 732 13.682 23.241 83.956 1.00 26.45 C
+ATOM 4340 CE2 TYR B 732 11.377 22.974 83.350 1.00 26.88 C
+ATOM 4341 CZ TYR B 732 12.674 23.318 83.010 1.00 26.78 C
+ATOM 4342 OH TYR B 732 12.953 23.661 81.702 1.00 28.02 O
+ATOM 4343 N LEU B 733 9.973 23.861 88.519 1.00 16.12 N
+ATOM 4344 CA LEU B 733 9.027 24.973 88.585 1.00 16.44 C
+ATOM 4345 C LEU B 733 9.496 26.062 89.548 1.00 16.28 C
+ATOM 4346 O LEU B 733 9.299 27.260 89.303 1.00 16.59 O
+ATOM 4347 CB LEU B 733 7.626 24.488 88.974 1.00 17.11 C
+ATOM 4348 CG LEU B 733 6.921 23.629 87.922 1.00 19.01 C
+ATOM 4349 CD1 LEU B 733 5.753 22.864 88.575 1.00 19.91 C
+ATOM 4350 CD2 LEU B 733 6.416 24.510 86.779 1.00 19.38 C
+ATOM 4351 N ALA B 734 10.120 25.654 90.649 1.00 16.27 N
+ATOM 4352 CA ALA B 734 10.634 26.618 91.619 1.00 15.29 C
+ATOM 4353 C ALA B 734 11.773 27.467 91.024 1.00 13.95 C
+ATOM 4354 O ALA B 734 11.872 28.661 91.313 1.00 14.58 O
+ATOM 4355 CB ALA B 734 11.142 25.891 92.851 1.00 15.36 C
+ATOM 4356 N SER B 735 12.660 26.833 90.259 1.00 14.34 N
+ATOM 4357 CA SER B 735 13.778 27.537 89.636 1.00 13.64 C
+ATOM 4358 C SER B 735 13.249 28.538 88.600 1.00 13.09 C
+ATOM 4359 O SER B 735 13.823 29.605 88.423 1.00 13.53 O
+ATOM 4360 CB SER B 735 14.760 26.576 88.999 1.00 14.48 C
+ATOM 4361 OG SER B 735 14.227 26.021 87.819 1.00 18.32 O
+ATOM 4362 N ILE B 736 12.149 28.206 87.938 1.00 11.82 N
+ATOM 4363 CA ILE B 736 11.559 29.146 86.983 1.00 12.18 C
+ATOM 4364 C ILE B 736 11.088 30.397 87.728 1.00 12.46 C
+ATOM 4365 O ILE B 736 11.385 31.530 87.323 1.00 12.79 O
+ATOM 4366 CB ILE B 736 10.368 28.530 86.215 1.00 11.88 C
+ATOM 4367 CG1 ILE B 736 10.858 27.366 85.341 1.00 12.27 C
+ATOM 4368 CG2 ILE B 736 9.678 29.612 85.373 1.00 12.60 C
+ATOM 4369 CD1 ILE B 736 9.759 26.639 84.562 1.00 11.49 C
+ATOM 4370 N ASP B 737 10.357 30.208 88.831 1.00 12.55 N
+ATOM 4371 CA ASP B 737 9.858 31.334 89.601 1.00 12.73 C
+ATOM 4372 C ASP B 737 11.013 32.197 90.123 1.00 12.95 C
+ATOM 4373 O ASP B 737 10.939 33.420 90.105 1.00 13.25 O
+ATOM 4374 CB ASP B 737 8.990 30.831 90.758 1.00 13.88 C
+ATOM 4375 CG ASP B 737 8.468 31.945 91.599 1.00 14.78 C
+ATOM 4376 OD1 ASP B 737 7.429 32.537 91.254 1.00 15.90 O
+ATOM 4377 OD2 ASP B 737 9.113 32.257 92.615 1.00 17.61 O
+ATOM 4378 N GLN B 738 12.088 31.567 90.564 1.00 13.12 N
+ATOM 4379 CA GLN B 738 13.221 32.326 91.066 1.00 16.23 C
+ATOM 4380 C GLN B 738 13.880 33.104 89.930 1.00 13.76 C
+ATOM 4381 O GLN B 738 14.309 34.235 90.123 1.00 13.44 O
+ATOM 4382 CB GLN B 738 14.233 31.391 91.730 1.00 21.24 C
+ATOM 4383 CG GLN B 738 14.024 31.223 93.239 1.00 29.40 C
+ATOM 4384 CD GLN B 738 12.521 31.196 93.677 1.00 34.29 C
+ATOM 4385 OE1 GLN B 738 11.929 32.257 94.025 1.00 37.48 O
+ATOM 4386 NE2 GLN B 738 11.920 29.983 93.711 1.00 35.58 N
+ATOM 4387 N ASN B 739 13.936 32.495 88.749 1.00 12.61 N
+ATOM 4388 CA ASN B 739 14.527 33.155 87.578 1.00 12.62 C
+ATOM 4389 C ASN B 739 13.695 34.407 87.228 1.00 12.16 C
+ATOM 4390 O ASN B 739 14.252 35.490 87.001 1.00 12.27 O
+ATOM 4391 CB ASN B 739 14.602 32.181 86.392 1.00 12.27 C
+ATOM 4392 CG ASN B 739 15.510 32.690 85.271 1.00 12.20 C
+ATOM 4393 OD1 ASN B 739 16.447 33.444 85.515 1.00 13.21 O
+ATOM 4394 ND2 ASN B 739 15.237 32.270 84.048 1.00 11.53 N
+ATOM 4395 N ILE B 740 12.366 34.295 87.251 1.00 10.28 N
+ATOM 4396 CA ILE B 740 11.516 35.455 86.966 1.00 11.01 C
+ATOM 4397 C ILE B 740 11.789 36.593 87.959 1.00 11.58 C
+ATOM 4398 O ILE B 740 11.835 37.764 87.565 1.00 11.38 O
+ATOM 4399 CB ILE B 740 10.002 35.074 86.977 1.00 10.74 C
+ATOM 4400 CG1 ILE B 740 9.718 34.091 85.837 1.00 11.67 C
+ATOM 4401 CG2 ILE B 740 9.086 36.301 86.885 1.00 10.84 C
+ATOM 4402 CD1 ILE B 740 8.283 33.560 85.831 1.00 12.09 C
+ATOM 4403 N LYS B 741 12.022 36.242 89.234 1.00 11.07 N
+ATOM 4404 CA LYS B 741 12.303 37.245 90.266 1.00 12.06 C
+ATOM 4405 C LYS B 741 13.625 37.982 90.073 1.00 10.68 C
+ATOM 4406 O LYS B 741 13.700 39.169 90.314 1.00 11.90 O
+ATOM 4407 CB LYS B 741 12.199 36.615 91.658 1.00 12.80 C
+ATOM 4408 CG LYS B 741 10.772 36.384 92.038 1.00 13.98 C
+ATOM 4409 CD LYS B 741 10.651 35.683 93.363 1.00 15.71 C
+ATOM 4410 CE LYS B 741 9.178 35.737 93.849 1.00 16.67 C
+ATOM 4411 NZ LYS B 741 8.178 34.989 93.003 1.00 16.44 N
+ATOM 4412 N ARG B 742 14.659 37.301 89.597 1.00 11.44 N
+ATOM 4413 CA ARG B 742 15.914 38.011 89.370 1.00 12.02 C
+ATOM 4414 C ARG B 742 15.772 38.991 88.193 1.00 11.76 C
+ATOM 4415 O ARG B 742 16.357 40.051 88.223 1.00 11.82 O
+ATOM 4416 CB ARG B 742 17.135 37.095 89.287 1.00 12.71 C
+ATOM 4417 CG ARG B 742 17.246 36.196 88.085 1.00 13.57 C
+ATOM 4418 CD ARG B 742 18.590 35.459 88.077 1.00 13.12 C
+ATOM 4419 NE ARG B 742 18.631 34.540 86.952 1.00 12.95 N
+ATOM 4420 CZ ARG B 742 19.688 33.843 86.566 1.00 13.35 C
+ATOM 4421 NH1 ARG B 742 20.827 33.923 87.232 1.00 15.24 N
+ATOM 4422 NH2 ARG B 742 19.607 33.040 85.517 1.00 13.30 N
+ATOM 4423 N TYR B 743 14.951 38.667 87.190 1.00 11.44 N
+ATOM 4424 CA TYR B 743 14.682 39.611 86.091 1.00 11.20 C
+ATOM 4425 C TYR B 743 13.912 40.812 86.631 1.00 11.07 C
+ATOM 4426 O TYR B 743 14.167 41.942 86.235 1.00 10.84 O
+ATOM 4427 CB TYR B 743 13.891 38.953 84.951 1.00 9.15 C
+ATOM 4428 CG TYR B 743 14.791 38.242 83.960 1.00 9.10 C
+ATOM 4429 CD1 TYR B 743 15.606 38.969 83.074 1.00 9.20 C
+ATOM 4430 CD2 TYR B 743 14.866 36.843 83.923 1.00 9.34 C
+ATOM 4431 CE1 TYR B 743 16.468 38.320 82.197 1.00 9.22 C
+ATOM 4432 CE2 TYR B 743 15.719 36.180 83.041 1.00 8.94 C
+ATOM 4433 CZ TYR B 743 16.519 36.926 82.181 1.00 9.19 C
+ATOM 4434 OH TYR B 743 17.346 36.270 81.311 1.00 10.26 O
+ATOM 4435 N ALA B 744 12.988 40.583 87.573 1.00 11.82 N
+ATOM 4436 CA ALA B 744 12.223 41.700 88.150 1.00 12.25 C
+ATOM 4437 C ALA B 744 13.164 42.662 88.844 1.00 12.70 C
+ATOM 4438 O ALA B 744 12.972 43.870 88.760 1.00 13.31 O
+ATOM 4439 CB ALA B 744 11.134 41.214 89.127 1.00 11.58 C
+ATOM 4440 N GLU B 745 14.222 42.136 89.462 1.00 13.93 N
+ATOM 4441 CA GLU B 745 15.184 42.992 90.172 1.00 17.54 C
+ATOM 4442 C GLU B 745 15.967 43.942 89.249 1.00 17.48 C
+ATOM 4443 O GLU B 745 16.493 44.971 89.715 1.00 17.16 O
+ATOM 4444 CB GLU B 745 16.163 42.165 91.004 1.00 20.52 C
+ATOM 4445 CG GLU B 745 15.561 41.537 92.240 1.00 26.59 C
+ATOM 4446 CD GLU B 745 16.448 40.429 92.793 1.00 30.86 C
+ATOM 4447 OE1 GLU B 745 17.698 40.640 92.823 1.00 32.41 O
+ATOM 4448 OE2 GLU B 745 15.898 39.337 93.155 1.00 34.10 O
+ATOM 4449 N ILE B 746 16.099 43.580 87.969 1.00 15.40 N
+ATOM 4450 CA ILE B 746 16.788 44.441 87.024 1.00 15.27 C
+ATOM 4451 C ILE B 746 15.819 45.225 86.111 1.00 14.60 C
+ATOM 4452 O ILE B 746 16.255 45.848 85.151 1.00 15.33 O
+ATOM 4453 CB ILE B 746 17.884 43.703 86.198 1.00 14.95 C
+ATOM 4454 CG1 ILE B 746 17.284 42.583 85.358 1.00 14.09 C
+ATOM 4455 CG2 ILE B 746 18.975 43.198 87.130 1.00 15.28 C
+ATOM 4456 CD1 ILE B 746 18.214 42.087 84.270 1.00 14.48 C
+ATOM 4457 N GLY B 747 14.530 45.232 86.477 1.00 13.85 N
+ATOM 4458 CA GLY B 747 13.495 45.971 85.770 1.00 14.02 C
+ATOM 4459 C GLY B 747 13.072 45.408 84.428 1.00 14.60 C
+ATOM 4460 O GLY B 747 12.550 46.144 83.601 1.00 16.93 O
+ATOM 4461 N VAL B 748 13.173 44.097 84.267 1.00 13.32 N
+ATOM 4462 CA VAL B 748 12.840 43.434 83.008 1.00 12.70 C
+ATOM 4463 C VAL B 748 11.552 42.606 83.126 1.00 13.76 C
+ATOM 4464 O VAL B 748 11.341 41.888 84.111 1.00 13.51 O
+ATOM 4465 CB VAL B 748 14.035 42.538 82.567 1.00 12.42 C
+ATOM 4466 CG1 VAL B 748 13.669 41.653 81.392 1.00 13.27 C
+ATOM 4467 CG2 VAL B 748 15.233 43.385 82.214 1.00 12.18 C
+ATOM 4468 N ILE B 749 10.677 42.754 82.137 1.00 12.55 N
+ATOM 4469 CA ILE B 749 9.418 42.030 82.044 1.00 12.80 C
+ATOM 4470 C ILE B 749 9.704 40.608 81.503 1.00 11.83 C
+ATOM 4471 O ILE B 749 10.644 40.391 80.732 1.00 11.00 O
+ATOM 4472 CB ILE B 749 8.492 42.730 80.994 1.00 15.78 C
+ATOM 4473 CG1 ILE B 749 8.234 44.184 81.367 1.00 18.81 C
+ATOM 4474 CG2 ILE B 749 7.179 41.992 80.819 1.00 17.05 C
+ATOM 4475 CD1 ILE B 749 7.621 44.370 82.718 1.00 20.74 C
+ATOM 4476 N VAL B 750 8.855 39.654 81.867 1.00 10.40 N
+ATOM 4477 CA VAL B 750 8.974 38.284 81.378 1.00 10.33 C
+ATOM 4478 C VAL B 750 7.656 37.861 80.707 1.00 9.86 C
+ATOM 4479 O VAL B 750 6.576 38.100 81.250 1.00 11.49 O
+ATOM 4480 CB VAL B 750 9.251 37.295 82.544 1.00 10.64 C
+ATOM 4481 CG1 VAL B 750 9.186 35.849 82.042 1.00 11.68 C
+ATOM 4482 CG2 VAL B 750 10.601 37.614 83.180 1.00 10.22 C
+ATOM 4483 N SER B 751 7.738 37.325 79.497 1.00 8.47 N
+ATOM 4484 CA SER B 751 6.548 36.805 78.828 1.00 8.18 C
+ATOM 4485 C SER B 751 6.761 35.318 78.537 1.00 8.82 C
+ATOM 4486 O SER B 751 7.898 34.913 78.189 1.00 9.45 O
+ATOM 4487 CB SER B 751 6.297 37.529 77.490 1.00 9.10 C
+ATOM 4488 OG SER B 751 5.838 38.839 77.714 1.00 9.79 O
+ATOM 4489 N PHE B 752 5.715 34.490 78.713 1.00 7.78 N
+ATOM 4490 CA PHE B 752 5.819 33.077 78.329 1.00 8.95 C
+ATOM 4491 C PHE B 752 5.320 33.172 76.882 1.00 8.52 C
+ATOM 4492 O PHE B 752 4.166 33.485 76.649 1.00 8.94 O
+ATOM 4493 CB PHE B 752 4.905 32.170 79.190 1.00 11.03 C
+ATOM 4494 CG PHE B 752 5.323 32.071 80.636 1.00 12.89 C
+ATOM 4495 CD1 PHE B 752 6.602 32.457 81.055 1.00 14.37 C
+ATOM 4496 CD2 PHE B 752 4.422 31.585 81.591 1.00 15.38 C
+ATOM 4497 CE1 PHE B 752 6.983 32.361 82.418 1.00 16.19 C
+ATOM 4498 CE2 PHE B 752 4.783 31.483 82.966 1.00 15.58 C
+ATOM 4499 CZ PHE B 752 6.062 31.870 83.375 1.00 16.18 C
+ATOM 4500 N THR B 753 6.176 32.846 75.923 1.00 8.05 N
+ATOM 4501 CA THR B 753 5.840 33.077 74.517 1.00 8.09 C
+ATOM 4502 C THR B 753 5.413 31.937 73.600 1.00 8.55 C
+ATOM 4503 O THR B 753 4.706 32.188 72.606 1.00 9.14 O
+ATOM 4504 CB THR B 753 7.048 33.766 73.794 1.00 8.43 C
+ATOM 4505 OG1 THR B 753 8.201 32.923 73.925 1.00 9.37 O
+ATOM 4506 CG2 THR B 753 7.358 35.168 74.382 1.00 9.01 C
+ATOM 4507 N GLU B 754 5.848 30.712 73.867 1.00 7.13 N
+ATOM 4508 CA GLU B 754 5.535 29.613 72.972 1.00 8.03 C
+ATOM 4509 C GLU B 754 5.264 28.325 73.740 1.00 8.68 C
+ATOM 4510 O GLU B 754 5.714 27.248 73.314 1.00 8.71 O
+ATOM 4511 CB GLU B 754 6.744 29.367 72.041 1.00 9.32 C
+ATOM 4512 CG GLU B 754 7.294 30.669 71.376 1.00 9.63 C
+ATOM 4513 CD GLU B 754 8.411 30.421 70.386 1.00 9.79 C
+ATOM 4514 OE1 GLU B 754 8.742 29.250 70.094 1.00 9.53 O
+ATOM 4515 OE2 GLU B 754 8.978 31.425 69.902 1.00 10.55 O
+ATOM 4516 N ILE B 755 4.452 28.423 74.787 1.00 9.06 N
+ATOM 4517 CA ILE B 755 4.211 27.256 75.638 1.00 9.77 C
+ATOM 4518 C ILE B 755 3.594 26.046 74.981 1.00 9.16 C
+ATOM 4519 O ILE B 755 2.610 26.147 74.280 1.00 9.12 O
+ATOM 4520 CB ILE B 755 3.289 27.574 76.834 1.00 9.61 C
+ATOM 4521 CG1 ILE B 755 3.800 28.782 77.616 1.00 9.39 C
+ATOM 4522 CG2 ILE B 755 3.171 26.329 77.763 1.00 10.33 C
+ATOM 4523 CD1 ILE B 755 2.705 29.437 78.473 1.00 10.97 C
+ATOM 4524 N ASP B 756 4.226 24.902 75.226 1.00 11.27 N
+ATOM 4525 CA ASP B 756 3.693 23.583 74.867 1.00 11.75 C
+ATOM 4526 C ASP B 756 4.331 22.530 75.815 1.00 12.16 C
+ATOM 4527 O ASP B 756 5.456 22.720 76.298 1.00 10.54 O
+ATOM 4528 CB ASP B 756 3.674 23.216 73.363 1.00 12.55 C
+ATOM 4529 CG ASP B 756 4.978 23.436 72.667 1.00 13.13 C
+ATOM 4530 OD1 ASP B 756 6.040 23.308 73.286 1.00 12.24 O
+ATOM 4531 OD2 ASP B 756 4.919 23.702 71.453 1.00 13.93 O
+ATOM 4532 N ILE B 757 3.527 21.534 76.211 1.00 12.16 N
+ATOM 4533 CA ILE B 757 3.987 20.499 77.156 1.00 12.97 C
+ATOM 4534 C ILE B 757 3.793 19.129 76.482 1.00 12.86 C
+ATOM 4535 O ILE B 757 2.687 18.579 76.468 1.00 11.90 O
+ATOM 4536 CB ILE B 757 3.240 20.639 78.510 1.00 13.23 C
+ATOM 4537 CG1 ILE B 757 3.386 22.081 79.034 1.00 12.89 C
+ATOM 4538 CG2 ILE B 757 3.799 19.621 79.528 1.00 13.62 C
+ATOM 4539 CD1 ILE B 757 2.873 22.336 80.436 1.00 14.34 C
+ATOM 4540 N ARG B 758 4.875 18.646 75.863 1.00 13.17 N
+ATOM 4541 CA ARG B 758 4.859 17.413 75.080 1.00 14.61 C
+ATOM 4542 C ARG B 758 4.885 16.126 75.885 1.00 14.48 C
+ATOM 4543 O ARG B 758 5.654 15.979 76.831 1.00 14.28 O
+ATOM 4544 CB ARG B 758 5.951 17.430 73.998 1.00 14.64 C
+ATOM 4545 CG ARG B 758 7.386 17.421 74.482 1.00 16.53 C
+ATOM 4546 CD ARG B 758 8.321 17.662 73.290 1.00 16.65 C
+ATOM 4547 NE ARG B 758 9.726 17.572 73.651 1.00 18.67 N
+ATOM 4548 CZ ARG B 758 10.480 18.602 74.031 1.00 19.31 C
+ATOM 4549 NH1 ARG B 758 9.967 19.823 74.115 1.00 19.80 N
+ATOM 4550 NH2 ARG B 758 11.757 18.409 74.336 1.00 20.42 N
+ATOM 4551 N ILE B 759 4.017 15.211 75.475 1.00 16.39 N
+ATOM 4552 CA ILE B 759 3.817 13.915 76.129 1.00 18.18 C
+ATOM 4553 C ILE B 759 4.444 12.758 75.372 1.00 21.26 C
+ATOM 4554 O ILE B 759 4.183 12.570 74.184 1.00 20.83 O
+ATOM 4555 CB ILE B 759 2.309 13.616 76.264 1.00 17.34 C
+ATOM 4556 CG1 ILE B 759 1.641 14.677 77.125 1.00 16.21 C
+ATOM 4557 CG2 ILE B 759 2.094 12.242 76.875 1.00 18.07 C
+ATOM 4558 CD1 ILE B 759 0.192 14.502 77.226 1.00 15.54 C
+ATOM 4559 N PRO B 760 5.274 11.953 76.054 1.00 24.72 N
+ATOM 4560 CA PRO B 760 5.931 10.802 75.428 1.00 28.37 C
+ATOM 4561 C PRO B 760 4.848 9.853 74.935 1.00 32.38 C
+ATOM 4562 O PRO B 760 3.864 9.603 75.626 1.00 31.63 O
+ATOM 4563 CB PRO B 760 6.726 10.204 76.584 1.00 27.79 C
+ATOM 4564 CG PRO B 760 7.056 11.420 77.431 1.00 27.34 C
+ATOM 4565 CD PRO B 760 5.717 12.115 77.448 1.00 25.62 C
+ATOM 4566 N GLN B 761 5.030 9.354 73.726 1.00 38.35 N
+ATOM 4567 CA GLN B 761 4.074 8.468 73.067 1.00 45.19 C
+ATOM 4568 C GLN B 761 3.734 7.138 73.763 1.00 47.15 C
+ATOM 4569 O GLN B 761 4.488 6.613 74.600 1.00 47.14 O
+ATOM 4570 CB GLN B 761 4.549 8.214 71.625 1.00 48.30 C
+ATOM 4571 CG GLN B 761 3.638 7.354 70.757 1.00 52.30 C
+ATOM 4572 CD GLN B 761 4.324 6.907 69.453 1.00 54.85 C
+ATOM 4573 OE1 GLN B 761 4.493 5.694 69.200 1.00 55.99 O
+ATOM 4574 NE2 GLN B 761 4.727 7.885 68.621 1.00 55.44 N
+ATOM 4575 N SER B 762 2.570 6.610 73.394 1.00 49.80 N
+ATOM 4576 CA SER B 762 2.056 5.354 73.926 1.00 52.87 C
+ATOM 4577 C SER B 762 2.028 5.194 75.454 1.00 54.47 C
+ATOM 4578 O SER B 762 1.681 4.116 75.970 1.00 54.98 O
+ATOM 4579 CB SER B 762 2.682 4.143 73.221 1.00 53.26 C
+ATOM 4580 OG SER B 762 1.813 3.671 72.190 1.00 54.16 O
+ATOM 4581 N GLU B 763 2.397 6.256 76.177 1.00 55.86 N
+ATOM 4582 CA GLU B 763 2.296 6.241 77.629 1.00 56.40 C
+ATOM 4583 C GLU B 763 0.781 6.507 77.805 1.00 55.89 C
+ATOM 4584 O GLU B 763 0.125 7.082 76.908 1.00 55.54 O
+ATOM 4585 CB GLU B 763 3.137 7.352 78.288 1.00 57.68 C
+ATOM 4586 CG GLU B 763 2.451 8.728 78.372 1.00 59.42 C
+ATOM 4587 CD GLU B 763 3.033 9.632 79.454 1.00 60.72 C
+ATOM 4588 OE1 GLU B 763 3.672 9.119 80.404 1.00 61.37 O
+ATOM 4589 OE2 GLU B 763 2.837 10.868 79.360 1.00 61.91 O
+ATOM 4590 N ASN B 764 0.224 6.058 78.925 1.00 55.04 N
+ATOM 4591 CA ASN B 764 -1.203 6.212 79.197 1.00 53.96 C
+ATOM 4592 C ASN B 764 -1.719 7.648 79.052 1.00 52.97 C
+ATOM 4593 O ASN B 764 -1.371 8.519 79.863 1.00 53.14 O
+ATOM 4594 CB ASN B 764 -1.508 5.688 80.606 1.00 54.70 C
+ATOM 4595 CG ASN B 764 -2.999 5.633 80.902 1.00 55.04 C
+ATOM 4596 OD1 ASN B 764 -3.810 5.341 80.014 1.00 55.45 O
+ATOM 4597 ND2 ASN B 764 -3.369 5.919 82.156 1.00 55.03 N
+ATOM 4598 N PRO B 765 -2.556 7.913 78.021 1.00 51.91 N
+ATOM 4599 CA PRO B 765 -3.135 9.245 77.763 1.00 50.40 C
+ATOM 4600 C PRO B 765 -3.956 9.737 78.954 1.00 49.00 C
+ATOM 4601 O PRO B 765 -4.058 10.942 79.190 1.00 49.31 O
+ATOM 4602 CB PRO B 765 -4.028 8.998 76.550 1.00 50.63 C
+ATOM 4603 CG PRO B 765 -3.266 7.936 75.804 1.00 51.31 C
+ATOM 4604 CD PRO B 765 -2.910 6.982 76.933 1.00 51.55 C
+ATOM 4605 N ALA B 766 -4.510 8.794 79.717 1.00 46.61 N
+ATOM 4606 CA ALA B 766 -5.320 9.109 80.901 1.00 44.46 C
+ATOM 4607 C ALA B 766 -4.562 9.852 82.015 1.00 42.12 C
+ATOM 4608 O ALA B 766 -4.892 11.008 82.307 1.00 42.15 O
+ATOM 4609 CB ALA B 766 -5.943 7.843 81.455 1.00 45.41 C
+ATOM 4610 N THR B 767 -3.591 9.180 82.660 1.00 38.97 N
+ATOM 4611 CA THR B 767 -2.790 9.800 83.734 1.00 35.17 C
+ATOM 4612 C THR B 767 -1.850 10.875 83.180 1.00 30.96 C
+ATOM 4613 O THR B 767 -1.616 11.878 83.844 1.00 28.79 O
+ATOM 4614 CB THR B 767 -2.002 8.766 84.608 1.00 35.84 C
+ATOM 4615 OG1 THR B 767 -1.064 8.031 83.810 1.00 36.68 O
+ATOM 4616 CG2 THR B 767 -2.970 7.797 85.268 1.00 36.27 C
+ATOM 4617 N ALA B 768 -1.342 10.655 81.963 1.00 27.74 N
+ATOM 4618 CA ALA B 768 -0.483 11.629 81.279 1.00 24.83 C
+ATOM 4619 C ALA B 768 -1.229 12.984 81.152 1.00 23.22 C
+ATOM 4620 O ALA B 768 -0.654 14.026 81.471 1.00 22.86 O
+ATOM 4621 CB ALA B 768 -0.092 11.116 79.913 1.00 24.23 C
+ATOM 4622 N PHE B 769 -2.493 12.975 80.713 1.00 20.89 N
+ATOM 4623 CA PHE B 769 -3.283 14.211 80.600 1.00 19.93 C
+ATOM 4624 C PHE B 769 -3.511 14.913 81.935 1.00 18.70 C
+ATOM 4625 O PHE B 769 -3.710 16.121 81.964 1.00 17.80 O
+ATOM 4626 CB PHE B 769 -4.645 13.959 79.949 1.00 21.55 C
+ATOM 4627 CG PHE B 769 -4.586 13.753 78.466 1.00 22.97 C
+ATOM 4628 CD1 PHE B 769 -3.371 13.691 77.801 1.00 23.39 C
+ATOM 4629 CD2 PHE B 769 -5.756 13.604 77.735 1.00 24.57 C
+ATOM 4630 CE1 PHE B 769 -3.301 13.481 76.429 1.00 24.28 C
+ATOM 4631 CE2 PHE B 769 -5.705 13.392 76.346 1.00 26.20 C
+ATOM 4632 CZ PHE B 769 -4.461 13.330 75.697 1.00 25.58 C
+ATOM 4633 N GLN B 770 -3.542 14.163 83.042 1.00 18.31 N
+ATOM 4634 CA GLN B 770 -3.711 14.808 84.345 1.00 18.14 C
+ATOM 4635 C GLN B 770 -2.418 15.494 84.784 1.00 16.17 C
+ATOM 4636 O GLN B 770 -2.445 16.564 85.351 1.00 16.35 O
+ATOM 4637 CB GLN B 770 -4.135 13.818 85.431 1.00 19.86 C
+ATOM 4638 CG GLN B 770 -5.498 13.158 85.189 1.00 22.96 C
+ATOM 4639 CD GLN B 770 -6.679 14.133 85.178 1.00 23.79 C
+ATOM 4640 OE1 GLN B 770 -6.592 15.292 85.660 1.00 24.20 O
+ATOM 4641 NE2 GLN B 770 -7.807 13.655 84.659 1.00 24.09 N
+ATOM 4642 N VAL B 771 -1.283 14.861 84.558 1.00 15.93 N
+ATOM 4643 CA VAL B 771 -0.002 15.461 84.942 1.00 16.39 C
+ATOM 4644 C VAL B 771 0.194 16.752 84.117 1.00 16.18 C
+ATOM 4645 O VAL B 771 0.602 17.774 84.647 1.00 15.18 O
+ATOM 4646 CB VAL B 771 1.174 14.486 84.658 1.00 18.42 C
+ATOM 4647 CG1 VAL B 771 2.521 15.208 84.859 1.00 18.28 C
+ATOM 4648 CG2 VAL B 771 1.072 13.234 85.564 1.00 18.63 C
+ATOM 4649 N GLN B 772 -0.159 16.687 82.833 1.00 15.51 N
+ATOM 4650 CA GLN B 772 -0.038 17.843 81.940 1.00 15.01 C
+ATOM 4651 C GLN B 772 -0.901 18.981 82.469 1.00 14.06 C
+ATOM 4652 O GLN B 772 -0.460 20.137 82.508 1.00 14.18 O
+ATOM 4653 CB GLN B 772 -0.442 17.445 80.515 1.00 13.63 C
+ATOM 4654 CG GLN B 772 -0.514 18.615 79.542 1.00 13.41 C
+ATOM 4655 CD GLN B 772 -0.966 18.177 78.169 1.00 13.57 C
+ATOM 4656 OE1 GLN B 772 -2.134 17.838 77.973 1.00 13.87 O
+ATOM 4657 NE2 GLN B 772 -0.042 18.167 77.208 1.00 13.14 N
+ATOM 4658 N ALA B 773 -2.121 18.660 82.910 1.00 13.77 N
+ATOM 4659 CA ALA B 773 -3.019 19.673 83.470 1.00 12.95 C
+ATOM 4660 C ALA B 773 -2.393 20.344 84.688 1.00 13.59 C
+ATOM 4661 O ALA B 773 -2.486 21.565 84.851 1.00 13.84 O
+ATOM 4662 CB ALA B 773 -4.358 19.051 83.860 1.00 13.73 C
+ATOM 4663 N ASN B 774 -1.794 19.536 85.570 1.00 15.01 N
+ATOM 4664 CA ASN B 774 -1.145 20.053 86.784 1.00 16.44 C
+ATOM 4665 C ASN B 774 0.021 20.956 86.398 1.00 15.21 C
+ATOM 4666 O ASN B 774 0.223 22.001 87.019 1.00 14.48 O
+ATOM 4667 CB ASN B 774 -0.611 18.929 87.680 1.00 19.87 C
+ATOM 4668 CG ASN B 774 -1.725 18.053 88.277 1.00 24.16 C
+ATOM 4669 OD1 ASN B 774 -2.867 18.508 88.523 1.00 25.82 O
+ATOM 4670 ND2 ASN B 774 -1.388 16.782 88.528 1.00 25.88 N
+ATOM 4671 N ASN B 775 0.778 20.536 85.371 1.00 15.53 N
+ATOM 4672 CA ASN B 775 1.931 21.311 84.850 1.00 14.59 C
+ATOM 4673 C ASN B 775 1.465 22.679 84.282 1.00 13.48 C
+ATOM 4674 O ASN B 775 2.056 23.706 84.611 1.00 13.68 O
+ATOM 4675 CB ASN B 775 2.706 20.498 83.797 1.00 14.91 C
+ATOM 4676 CG ASN B 775 3.640 19.443 84.402 1.00 15.08 C
+ATOM 4677 OD1 ASN B 775 4.377 18.800 83.675 1.00 16.43 O
+ATOM 4678 ND2 ASN B 775 3.637 19.288 85.723 1.00 16.45 N
+ATOM 4679 N TYR B 776 0.390 22.711 83.493 1.00 12.69 N
+ATOM 4680 CA TYR B 776 -0.140 23.990 82.966 1.00 12.56 C
+ATOM 4681 C TYR B 776 -0.643 24.866 84.099 1.00 12.94 C
+ATOM 4682 O TYR B 776 -0.454 26.078 84.095 1.00 12.66 O
+ATOM 4683 CB TYR B 776 -1.299 23.768 81.973 1.00 12.26 C
+ATOM 4684 CG TYR B 776 -0.868 23.649 80.523 1.00 13.33 C
+ATOM 4685 CD1 TYR B 776 -0.477 24.783 79.793 1.00 13.73 C
+ATOM 4686 CD2 TYR B 776 -0.861 22.408 79.871 1.00 12.42 C
+ATOM 4687 CE1 TYR B 776 -0.088 24.674 78.441 1.00 13.59 C
+ATOM 4688 CE2 TYR B 776 -0.479 22.282 78.515 1.00 13.95 C
+ATOM 4689 CZ TYR B 776 -0.093 23.433 77.805 1.00 13.89 C
+ATOM 4690 OH TYR B 776 0.254 23.340 76.473 1.00 13.64 O
+ATOM 4691 N LYS B 777 -1.341 24.247 85.061 1.00 13.98 N
+ATOM 4692 CA LYS B 777 -1.865 24.971 86.211 1.00 14.22 C
+ATOM 4693 C LYS B 777 -0.728 25.615 87.024 1.00 13.19 C
+ATOM 4694 O LYS B 777 -0.839 26.763 87.402 1.00 13.79 O
+ATOM 4695 CB LYS B 777 -2.699 24.035 87.101 1.00 15.67 C
+ATOM 4696 CG LYS B 777 -3.333 24.755 88.254 1.00 18.09 C
+ATOM 4697 CD LYS B 777 -4.344 23.878 88.932 1.00 20.55 C
+ATOM 4698 CE LYS B 777 -5.259 24.737 89.777 1.00 23.88 C
+ATOM 4699 NZ LYS B 777 -6.266 23.903 90.503 1.00 25.60 N
+ATOM 4700 N GLU B 778 0.371 24.899 87.262 1.00 14.09 N
+ATOM 4701 CA GLU B 778 1.480 25.468 88.036 1.00 16.38 C
+ATOM 4702 C GLU B 778 2.127 26.642 87.278 1.00 16.22 C
+ATOM 4703 O GLU B 778 2.487 27.666 87.878 1.00 15.46 O
+ATOM 4704 CB GLU B 778 2.539 24.410 88.367 1.00 18.97 C
+ATOM 4705 CG GLU B 778 2.114 23.359 89.398 1.00 22.95 C
+ATOM 4706 CD GLU B 778 1.516 23.959 90.657 1.00 25.33 C
+ATOM 4707 OE1 GLU B 778 2.165 24.850 91.267 1.00 25.33 O
+ATOM 4708 OE2 GLU B 778 0.375 23.553 91.020 1.00 28.22 O
+ATOM 4709 N LEU B 779 2.240 26.498 85.955 1.00 14.80 N
+ATOM 4710 CA LEU B 779 2.808 27.559 85.113 1.00 15.27 C
+ATOM 4711 C LEU B 779 1.961 28.840 85.213 1.00 13.72 C
+ATOM 4712 O LEU B 779 2.506 29.945 85.360 1.00 13.17 O
+ATOM 4713 CB LEU B 779 2.859 27.054 83.672 1.00 17.27 C
+ATOM 4714 CG LEU B 779 4.069 27.298 82.786 1.00 19.73 C
+ATOM 4715 CD1 LEU B 779 5.385 26.983 83.511 1.00 20.00 C
+ATOM 4716 CD2 LEU B 779 3.884 26.430 81.564 1.00 20.09 C
+ATOM 4717 N MET B 780 0.633 28.702 85.131 1.00 12.38 N
+ATOM 4718 CA MET B 780 -0.266 29.853 85.258 1.00 13.07 C
+ATOM 4719 C MET B 780 -0.180 30.489 86.663 1.00 14.32 C
+ATOM 4720 O MET B 780 -0.276 31.707 86.796 1.00 14.53 O
+ATOM 4721 CB MET B 780 -1.717 29.487 84.937 1.00 13.50 C
+ATOM 4722 CG MET B 780 -2.683 30.659 85.072 1.00 13.47 C
+ATOM 4723 SD MET B 780 -2.258 32.124 84.052 1.00 15.61 S
+ATOM 4724 CE MET B 780 -2.951 31.613 82.548 1.00 14.16 C
+ATOM 4725 N LYS B 781 -0.032 29.669 87.708 1.00 14.75 N
+ATOM 4726 CA LYS B 781 0.124 30.197 89.067 1.00 15.67 C
+ATOM 4727 C LYS B 781 1.414 31.042 89.209 1.00 14.34 C
+ATOM 4728 O LYS B 781 1.419 32.091 89.868 1.00 14.63 O
+ATOM 4729 CB LYS B 781 0.058 29.049 90.087 1.00 18.22 C
+ATOM 4730 CG LYS B 781 -1.392 28.764 90.547 1.00 20.69 C
+ATOM 4731 CD LYS B 781 -1.642 27.309 90.944 1.00 24.31 C
+ATOM 4732 CE LYS B 781 -0.798 26.833 92.129 1.00 26.56 C
+ATOM 4733 NZ LYS B 781 -1.228 27.442 93.425 1.00 28.92 N
+ATOM 4734 N ILE B 782 2.490 30.602 88.564 1.00 14.47 N
+ATOM 4735 CA ILE B 782 3.763 31.342 88.569 1.00 14.49 C
+ATOM 4736 C ILE B 782 3.540 32.706 87.871 1.00 14.67 C
+ATOM 4737 O ILE B 782 4.006 33.736 88.352 1.00 14.51 O
+ATOM 4738 CB ILE B 782 4.873 30.528 87.836 1.00 15.03 C
+ATOM 4739 CG1 ILE B 782 5.274 29.330 88.702 1.00 15.13 C
+ATOM 4740 CG2 ILE B 782 6.083 31.412 87.513 1.00 14.48 C
+ATOM 4741 CD1 ILE B 782 6.159 28.336 87.999 1.00 16.57 C
+ATOM 4742 N CYS B 783 2.822 32.701 86.747 1.00 14.34 N
+ATOM 4743 CA CYS B 783 2.509 33.931 86.019 1.00 15.33 C
+ATOM 4744 C CYS B 783 1.722 34.895 86.913 1.00 16.01 C
+ATOM 4745 O CYS B 783 2.095 36.053 87.071 1.00 16.32 O
+ATOM 4746 CB CYS B 783 1.714 33.586 84.753 1.00 15.91 C
+ATOM 4747 SG CYS B 783 1.194 34.967 83.726 1.00 20.16 S
+ATOM 4748 N LEU B 784 0.706 34.374 87.594 1.00 16.28 N
+ATOM 4749 CA LEU B 784 -0.127 35.183 88.482 1.00 17.40 C
+ATOM 4750 C LEU B 784 0.607 35.727 89.700 1.00 17.91 C
+ATOM 4751 O LEU B 784 0.273 36.809 90.198 1.00 19.36 O
+ATOM 4752 CB LEU B 784 -1.339 34.373 88.954 1.00 17.52 C
+ATOM 4753 CG LEU B 784 -2.382 34.063 87.874 1.00 17.20 C
+ATOM 4754 CD1 LEU B 784 -3.386 33.093 88.432 1.00 18.30 C
+ATOM 4755 CD2 LEU B 784 -3.062 35.331 87.397 1.00 17.96 C
+ATOM 4756 N ALA B 785 1.584 34.969 90.192 1.00 18.24 N
+ATOM 4757 CA ALA B 785 2.361 35.352 91.372 1.00 17.84 C
+ATOM 4758 C ALA B 785 3.404 36.442 91.155 1.00 19.56 C
+ATOM 4759 O ALA B 785 3.809 37.103 92.116 1.00 20.73 O
+ATOM 4760 CB ALA B 785 3.071 34.119 91.948 1.00 18.50 C
+ATOM 4761 N ASN B 786 3.885 36.597 89.916 1.00 17.87 N
+ATOM 4762 CA ASN B 786 4.939 37.564 89.618 1.00 17.02 C
+ATOM 4763 C ASN B 786 4.407 38.787 88.887 1.00 17.01 C
+ATOM 4764 O ASN B 786 3.885 38.692 87.772 1.00 18.13 O
+ATOM 4765 CB ASN B 786 6.060 36.869 88.840 1.00 15.09 C
+ATOM 4766 CG ASN B 786 6.839 35.870 89.704 1.00 14.64 C
+ATOM 4767 OD1 ASN B 786 7.671 36.274 90.506 1.00 14.93 O
+ATOM 4768 ND2 ASN B 786 6.571 34.577 89.536 1.00 13.68 N
+ATOM 4769 N PRO B 787 4.564 39.967 89.488 1.00 17.46 N
+ATOM 4770 CA PRO B 787 4.077 41.213 88.877 1.00 17.30 C
+ATOM 4771 C PRO B 787 4.686 41.629 87.527 1.00 16.47 C
+ATOM 4772 O PRO B 787 4.074 42.400 86.808 1.00 16.34 O
+ATOM 4773 CB PRO B 787 4.312 42.259 89.971 1.00 18.37 C
+ATOM 4774 CG PRO B 787 5.471 41.698 90.760 1.00 19.15 C
+ATOM 4775 CD PRO B 787 5.183 40.214 90.809 1.00 18.17 C
+ATOM 4776 N ASN B 788 5.884 41.134 87.213 1.00 15.02 N
+ATOM 4777 CA ASN B 788 6.555 41.449 85.943 1.00 14.29 C
+ATOM 4778 C ASN B 788 6.289 40.392 84.867 1.00 14.27 C
+ATOM 4779 O ASN B 788 6.941 40.414 83.846 1.00 13.45 O
+ATOM 4780 CB ASN B 788 8.071 41.592 86.147 1.00 12.55 C
+ATOM 4781 CG ASN B 788 8.729 40.298 86.555 1.00 12.66 C
+ATOM 4782 OD1 ASN B 788 8.180 39.549 87.361 1.00 13.26 O
+ATOM 4783 ND2 ASN B 788 9.901 40.026 86.022 1.00 12.71 N
+ATOM 4784 N CYS B 789 5.326 39.494 85.075 1.00 15.09 N
+ATOM 4785 CA CYS B 789 5.045 38.444 84.104 1.00 16.88 C
+ATOM 4786 C CYS B 789 3.561 38.501 83.863 1.00 18.35 C
+ATOM 4787 O CYS B 789 2.783 38.098 84.715 1.00 20.01 O
+ATOM 4788 CB CYS B 789 5.467 37.079 84.661 1.00 17.51 C
+ATOM 4789 SG CYS B 789 5.184 35.693 83.514 1.00 22.69 S
+ATOM 4790 N ASN B 790 3.155 39.013 82.707 1.00 18.24 N
+ATOM 4791 CA ASN B 790 1.736 39.164 82.417 1.00 19.40 C
+ATOM 4792 C ASN B 790 1.251 38.738 81.029 1.00 16.05 C
+ATOM 4793 O ASN B 790 0.138 39.080 80.630 1.00 14.67 O
+ATOM 4794 CB ASN B 790 1.338 40.609 82.672 1.00 24.02 C
+ATOM 4795 CG ASN B 790 1.751 41.085 84.074 1.00 28.09 C
+ATOM 4796 OD1 ASN B 790 2.754 41.800 84.220 1.00 30.79 O
+ATOM 4797 ND2 ASN B 790 0.993 40.677 85.110 1.00 29.63 N
+ATOM 4798 N THR B 791 2.042 37.914 80.359 1.00 12.89 N
+ATOM 4799 CA THR B 791 1.730 37.442 79.023 1.00 11.55 C
+ATOM 4800 C THR B 791 1.925 35.935 79.031 1.00 10.00 C
+ATOM 4801 O THR B 791 3.018 35.451 79.343 1.00 10.08 O
+ATOM 4802 CB THR B 791 2.699 38.112 78.054 1.00 12.18 C
+ATOM 4803 OG1 THR B 791 2.437 39.513 78.077 1.00 14.27 O
+ATOM 4804 CG2 THR B 791 2.568 37.563 76.635 1.00 12.32 C
+ATOM 4805 N PHE B 792 0.854 35.216 78.685 1.00 9.31 N
+ATOM 4806 CA PHE B 792 0.834 33.757 78.696 1.00 9.88 C
+ATOM 4807 C PHE B 792 0.400 33.268 77.303 1.00 9.81 C
+ATOM 4808 O PHE B 792 -0.806 33.196 77.009 1.00 10.08 O
+ATOM 4809 CB PHE B 792 -0.182 33.314 79.781 1.00 10.18 C
+ATOM 4810 CG PHE B 792 -0.103 31.855 80.152 1.00 11.69 C
+ATOM 4811 CD1 PHE B 792 0.732 31.434 81.198 1.00 12.53 C
+ATOM 4812 CD2 PHE B 792 -0.904 30.900 79.495 1.00 12.16 C
+ATOM 4813 CE1 PHE B 792 0.767 30.072 81.593 1.00 13.77 C
+ATOM 4814 CE2 PHE B 792 -0.883 29.538 79.873 1.00 13.10 C
+ATOM 4815 CZ PHE B 792 -0.045 29.121 80.927 1.00 13.08 C
+ATOM 4816 N VAL B 793 1.367 32.961 76.437 1.00 9.05 N
+ATOM 4817 CA VAL B 793 1.070 32.516 75.061 1.00 9.67 C
+ATOM 4818 C VAL B 793 1.502 31.066 74.783 1.00 8.71 C
+ATOM 4819 O VAL B 793 2.639 30.678 75.046 1.00 9.22 O
+ATOM 4820 CB VAL B 793 1.732 33.489 73.960 1.00 9.67 C
+ATOM 4821 CG1 VAL B 793 1.468 32.975 72.511 1.00 9.09 C
+ATOM 4822 CG2 VAL B 793 1.180 34.905 74.121 1.00 10.35 C
+ATOM 4823 N MET B 794 0.567 30.274 74.293 1.00 8.06 N
+ATOM 4824 CA MET B 794 0.821 28.882 73.971 1.00 9.34 C
+ATOM 4825 C MET B 794 1.089 28.759 72.463 1.00 9.84 C
+ATOM 4826 O MET B 794 0.570 29.570 71.672 1.00 9.87 O
+ATOM 4827 CB MET B 794 -0.392 28.023 74.394 1.00 9.85 C
+ATOM 4828 CG MET B 794 -0.589 28.029 75.939 1.00 12.49 C
+ATOM 4829 SD MET B 794 -2.232 27.531 76.502 1.00 13.56 S
+ATOM 4830 CE MET B 794 -3.162 28.921 75.976 1.00 14.10 C
+ATOM 4831 N TRP B 795 1.885 27.768 72.068 1.00 9.89 N
+ATOM 4832 CA TRP B 795 2.209 27.588 70.653 1.00 10.89 C
+ATOM 4833 C TRP B 795 1.152 26.732 69.977 1.00 9.07 C
+ATOM 4834 O TRP B 795 1.444 25.661 69.459 1.00 11.22 O
+ATOM 4835 CB TRP B 795 3.620 27.004 70.465 1.00 12.28 C
+ATOM 4836 CG TRP B 795 4.347 27.586 69.250 1.00 14.30 C
+ATOM 4837 CD1 TRP B 795 4.950 26.885 68.240 1.00 15.74 C
+ATOM 4838 CD2 TRP B 795 4.512 28.994 68.922 1.00 14.78 C
+ATOM 4839 NE1 TRP B 795 5.480 27.769 67.300 1.00 17.03 N
+ATOM 4840 CE2 TRP B 795 5.230 29.060 67.699 1.00 16.49 C
+ATOM 4841 CE3 TRP B 795 4.117 30.200 69.545 1.00 14.93 C
+ATOM 4842 CZ2 TRP B 795 5.569 30.296 67.087 1.00 16.88 C
+ATOM 4843 CZ3 TRP B 795 4.450 31.428 68.936 1.00 16.14 C
+ATOM 4844 CH2 TRP B 795 5.170 31.461 67.723 1.00 16.14 C
+ATOM 4845 N GLY B 796 -0.078 27.236 69.991 1.00 10.65 N
+ATOM 4846 CA GLY B 796 -1.222 26.550 69.410 1.00 9.77 C
+ATOM 4847 C GLY B 796 -2.243 26.275 70.511 1.00 10.78 C
+ATOM 4848 O GLY B 796 -1.986 26.544 71.688 1.00 11.56 O
+ATOM 4849 N PHE B 797 -3.427 25.802 70.143 1.00 10.22 N
+ATOM 4850 CA PHE B 797 -4.438 25.471 71.152 1.00 10.47 C
+ATOM 4851 C PHE B 797 -5.055 24.081 70.936 1.00 11.11 C
+ATOM 4852 O PHE B 797 -5.619 23.506 71.865 1.00 12.17 O
+ATOM 4853 CB PHE B 797 -5.500 26.558 71.296 1.00 10.07 C
+ATOM 4854 CG PHE B 797 -6.307 26.813 70.056 1.00 11.57 C
+ATOM 4855 CD1 PHE B 797 -5.892 27.778 69.134 1.00 12.54 C
+ATOM 4856 CD2 PHE B 797 -7.500 26.127 69.824 1.00 12.64 C
+ATOM 4857 CE1 PHE B 797 -6.656 28.063 67.996 1.00 12.91 C
+ATOM 4858 CE2 PHE B 797 -8.278 26.405 68.677 1.00 13.41 C
+ATOM 4859 CZ PHE B 797 -7.839 27.383 67.768 1.00 13.02 C
+ATOM 4860 N THR B 798 -4.929 23.524 69.735 1.00 10.30 N
+ATOM 4861 CA THR B 798 -5.455 22.184 69.458 1.00 11.03 C
+ATOM 4862 C THR B 798 -4.378 21.200 69.012 1.00 11.46 C
+ATOM 4863 O THR B 798 -3.500 21.535 68.210 1.00 11.08 O
+ATOM 4864 CB THR B 798 -6.627 22.199 68.425 1.00 10.50 C
+ATOM 4865 OG1 THR B 798 -6.972 20.858 68.104 1.00 11.94 O
+ATOM 4866 CG2 THR B 798 -6.234 22.921 67.103 1.00 11.96 C
+ATOM 4867 N ASP B 799 -4.416 19.989 69.559 1.00 12.04 N
+ATOM 4868 CA ASP B 799 -3.458 18.941 69.197 1.00 13.36 C
+ATOM 4869 C ASP B 799 -3.493 18.599 67.710 1.00 13.69 C
+ATOM 4870 O ASP B 799 -2.619 17.874 67.223 1.00 14.84 O
+ATOM 4871 CB ASP B 799 -3.707 17.653 70.003 1.00 13.03 C
+ATOM 4872 CG ASP B 799 -3.376 17.808 71.476 1.00 14.37 C
+ATOM 4873 OD1 ASP B 799 -2.672 18.771 71.858 1.00 13.46 O
+ATOM 4874 OD2 ASP B 799 -3.821 16.937 72.258 1.00 15.05 O
+ATOM 4875 N LYS B 800 -4.535 19.051 67.012 1.00 14.32 N
+ATOM 4876 CA LYS B 800 -4.644 18.827 65.563 1.00 15.02 C
+ATOM 4877 C LYS B 800 -3.525 19.581 64.774 1.00 15.94 C
+ATOM 4878 O LYS B 800 -3.046 19.098 63.744 1.00 16.72 O
+ATOM 4879 CB LYS B 800 -6.006 19.305 65.085 1.00 16.19 C
+ATOM 4880 CG LYS B 800 -6.331 18.996 63.633 1.00 17.38 C
+ATOM 4881 CD LYS B 800 -7.754 19.402 63.360 1.00 18.95 C
+ATOM 4882 CE LYS B 800 -8.214 18.922 62.004 1.00 21.14 C
+ATOM 4883 NZ LYS B 800 -9.547 19.507 61.636 1.00 23.77 N
+ATOM 4884 N TYR B 801 -3.087 20.737 65.274 1.00 15.47 N
+ATOM 4885 CA TYR B 801 -2.051 21.529 64.590 1.00 14.06 C
+ATOM 4886 C TYR B 801 -0.923 21.860 65.546 1.00 14.12 C
+ATOM 4887 O TYR B 801 -1.091 22.710 66.440 1.00 13.84 O
+ATOM 4888 CB TYR B 801 -2.638 22.832 64.043 1.00 13.16 C
+ATOM 4889 CG TYR B 801 -3.825 22.640 63.127 1.00 12.66 C
+ATOM 4890 CD1 TYR B 801 -3.677 22.070 61.858 1.00 13.56 C
+ATOM 4891 CD2 TYR B 801 -5.089 23.007 63.538 1.00 12.59 C
+ATOM 4892 CE1 TYR B 801 -4.797 21.872 61.019 1.00 13.37 C
+ATOM 4893 CE2 TYR B 801 -6.194 22.823 62.730 1.00 13.14 C
+ATOM 4894 CZ TYR B 801 -6.052 22.256 61.471 1.00 12.89 C
+ATOM 4895 OH TYR B 801 -7.176 22.107 60.697 1.00 13.83 O
+ATOM 4896 N THR B 802 0.211 21.177 65.374 1.00 14.89 N
+ATOM 4897 CA THR B 802 1.389 21.405 66.214 1.00 15.78 C
+ATOM 4898 C THR B 802 2.699 20.926 65.585 1.00 16.56 C
+ATOM 4899 O THR B 802 2.750 19.895 64.927 1.00 16.66 O
+ATOM 4900 CB THR B 802 1.233 20.786 67.650 1.00 15.47 C
+ATOM 4901 OG1 THR B 802 2.484 20.925 68.351 1.00 15.40 O
+ATOM 4902 CG2 THR B 802 0.827 19.306 67.583 1.00 14.22 C
+ATOM 4903 N TRP B 803 3.760 21.688 65.818 1.00 17.57 N
+ATOM 4904 CA TRP B 803 5.082 21.363 65.286 1.00 19.37 C
+ATOM 4905 C TRP B 803 5.791 20.230 66.063 1.00 20.30 C
+ATOM 4906 O TRP B 803 6.753 19.645 65.565 1.00 20.42 O
+ATOM 4907 CB TRP B 803 5.982 22.614 65.333 1.00 19.81 C
+ATOM 4908 CG TRP B 803 6.433 22.992 66.735 1.00 20.80 C
+ATOM 4909 CD1 TRP B 803 5.634 23.220 67.837 1.00 20.26 C
+ATOM 4910 CD2 TRP B 803 7.782 23.167 67.183 1.00 22.32 C
+ATOM 4911 NE1 TRP B 803 6.409 23.519 68.929 1.00 20.02 N
+ATOM 4912 CE2 TRP B 803 7.728 23.494 68.564 1.00 22.08 C
+ATOM 4913 CE3 TRP B 803 9.039 23.086 66.553 1.00 23.62 C
+ATOM 4914 CZ2 TRP B 803 8.891 23.735 69.333 1.00 23.52 C
+ATOM 4915 CZ3 TRP B 803 10.195 23.333 67.316 1.00 24.55 C
+ATOM 4916 CH2 TRP B 803 10.108 23.652 68.697 1.00 24.30 C
+ATOM 4917 N ILE B 804 5.318 19.923 67.273 1.00 21.12 N
+ATOM 4918 CA ILE B 804 5.970 18.921 68.134 1.00 20.98 C
+ATOM 4919 C ILE B 804 6.266 17.526 67.566 1.00 22.84 C
+ATOM 4920 O ILE B 804 7.415 17.116 67.555 1.00 23.13 O
+ATOM 4921 CB ILE B 804 5.247 18.809 69.507 1.00 19.92 C
+ATOM 4922 CG1 ILE B 804 5.380 20.128 70.275 1.00 18.56 C
+ATOM 4923 CG2 ILE B 804 5.813 17.651 70.324 1.00 19.45 C
+ATOM 4924 CD1 ILE B 804 6.790 20.518 70.613 1.00 18.51 C
+ATOM 4925 N PRO B 805 5.248 16.788 67.082 1.00 25.30 N
+ATOM 4926 CA PRO B 805 5.444 15.437 66.525 1.00 27.68 C
+ATOM 4927 C PRO B 805 6.494 15.284 65.399 1.00 29.75 C
+ATOM 4928 O PRO B 805 7.156 14.236 65.288 1.00 30.66 O
+ATOM 4929 CB PRO B 805 4.046 15.080 65.997 1.00 27.28 C
+ATOM 4930 CG PRO B 805 3.126 15.841 66.888 1.00 27.38 C
+ATOM 4931 CD PRO B 805 3.822 17.171 67.012 1.00 26.60 C
+ATOM 4932 N GLY B 806 6.596 16.306 64.548 1.00 31.03 N
+ATOM 4933 CA GLY B 806 7.527 16.275 63.434 1.00 32.01 C
+ATOM 4934 C GLY B 806 8.925 16.603 63.871 1.00 32.94 C
+ATOM 4935 O GLY B 806 9.890 16.026 63.361 1.00 34.39 O
+ATOM 4936 N THR B 807 9.028 17.481 64.862 1.00 32.98 N
+ATOM 4937 CA THR B 807 10.317 17.915 65.374 1.00 33.29 C
+ATOM 4938 C THR B 807 10.863 17.024 66.486 1.00 32.68 C
+ATOM 4939 O THR B 807 12.078 16.842 66.573 1.00 32.75 O
+ATOM 4940 CB THR B 807 10.235 19.380 65.855 1.00 34.33 C
+ATOM 4941 OG1 THR B 807 9.711 20.191 64.794 1.00 35.43 O
+ATOM 4942 CG2 THR B 807 11.613 19.913 66.263 1.00 34.66 C
+ATOM 4943 N PHE B 808 9.971 16.483 67.324 1.00 31.92 N
+ATOM 4944 CA PHE B 808 10.337 15.587 68.444 1.00 31.68 C
+ATOM 4945 C PHE B 808 9.609 14.276 68.259 1.00 31.40 C
+ATOM 4946 O PHE B 808 8.563 14.043 68.865 1.00 30.57 O
+ATOM 4947 CB PHE B 808 9.911 16.149 69.811 1.00 31.77 C
+ATOM 4948 CG PHE B 808 10.411 17.514 70.081 1.00 31.96 C
+ATOM 4949 CD1 PHE B 808 11.698 17.707 70.552 1.00 31.92 C
+ATOM 4950 CD2 PHE B 808 9.605 18.621 69.827 1.00 32.32 C
+ATOM 4951 CE1 PHE B 808 12.182 18.994 70.765 1.00 32.91 C
+ATOM 4952 CE2 PHE B 808 10.077 19.905 70.037 1.00 32.92 C
+ATOM 4953 CZ PHE B 808 11.370 20.099 70.506 1.00 32.77 C
+ATOM 4954 N PRO B 809 10.136 13.403 67.398 1.00 32.31 N
+ATOM 4955 CA PRO B 809 9.504 12.104 67.148 1.00 32.09 C
+ATOM 4956 C PRO B 809 9.267 11.323 68.451 1.00 31.24 C
+ATOM 4957 O PRO B 809 10.145 11.253 69.324 1.00 31.30 O
+ATOM 4958 CB PRO B 809 10.522 11.407 66.239 1.00 32.94 C
+ATOM 4959 CG PRO B 809 11.161 12.560 65.492 1.00 33.18 C
+ATOM 4960 CD PRO B 809 11.362 13.569 66.591 1.00 32.99 C
+ATOM 4961 N GLY B 810 8.071 10.755 68.576 1.00 30.21 N
+ATOM 4962 CA GLY B 810 7.739 10.007 69.771 1.00 29.70 C
+ATOM 4963 C GLY B 810 7.009 10.834 70.821 1.00 29.12 C
+ATOM 4964 O GLY B 810 6.656 10.304 71.874 1.00 29.39 O
+ATOM 4965 N TYR B 811 6.803 12.125 70.553 1.00 26.89 N
+ATOM 4966 CA TYR B 811 6.101 13.017 71.467 1.00 24.69 C
+ATOM 4967 C TYR B 811 4.884 13.623 70.765 1.00 23.98 C
+ATOM 4968 O TYR B 811 4.852 13.732 69.541 1.00 24.55 O
+ATOM 4969 CB TYR B 811 7.022 14.139 71.912 1.00 24.94 C
+ATOM 4970 CG TYR B 811 8.024 13.720 72.937 1.00 26.32 C
+ATOM 4971 CD1 TYR B 811 9.213 13.124 72.558 1.00 28.16 C
+ATOM 4972 CD2 TYR B 811 7.788 13.912 74.287 1.00 26.95 C
+ATOM 4973 CE1 TYR B 811 10.151 12.721 73.500 1.00 29.23 C
+ATOM 4974 CE2 TYR B 811 8.716 13.515 75.237 1.00 28.37 C
+ATOM 4975 CZ TYR B 811 9.898 12.916 74.841 1.00 29.23 C
+ATOM 4976 OH TYR B 811 10.828 12.478 75.774 1.00 31.35 O
+ATOM 4977 N GLY B 812 3.895 14.043 71.541 1.00 21.75 N
+ATOM 4978 CA GLY B 812 2.717 14.635 70.956 1.00 19.68 C
+ATOM 4979 C GLY B 812 1.759 15.171 71.995 1.00 17.54 C
+ATOM 4980 O GLY B 812 2.151 15.426 73.141 1.00 16.68 O
+ATOM 4981 N ASN B 813 0.522 15.408 71.552 1.00 17.30 N
+ATOM 4982 CA ASN B 813 -0.588 15.922 72.373 1.00 17.61 C
+ATOM 4983 C ASN B 813 -0.136 16.941 73.398 1.00 16.29 C
+ATOM 4984 O ASN B 813 -0.463 16.823 74.577 1.00 15.44 O
+ATOM 4985 CB ASN B 813 -1.273 14.747 73.061 1.00 20.42 C
+ATOM 4986 CG ASN B 813 -1.817 13.734 72.059 1.00 23.17 C
+ATOM 4987 OD1 ASN B 813 -1.592 12.535 72.201 1.00 26.16 O
+ATOM 4988 ND2 ASN B 813 -2.488 14.218 71.012 1.00 24.03 N
+ATOM 4989 N PRO B 814 0.433 18.070 72.921 1.00 14.90 N
+ATOM 4990 CA PRO B 814 0.954 19.122 73.798 1.00 13.23 C
+ATOM 4991 C PRO B 814 0.083 20.288 74.245 1.00 11.85 C
+ATOM 4992 O PRO B 814 0.526 21.079 75.081 1.00 11.52 O
+ATOM 4993 CB PRO B 814 2.133 19.685 72.965 1.00 13.04 C
+ATOM 4994 CG PRO B 814 2.069 18.949 71.596 1.00 13.90 C
+ATOM 4995 CD PRO B 814 0.665 18.434 71.511 1.00 14.00 C
+ATOM 4996 N LEU B 815 -1.148 20.360 73.735 1.00 11.48 N
+ATOM 4997 CA LEU B 815 -2.004 21.525 73.935 1.00 11.95 C
+ATOM 4998 C LEU B 815 -3.287 21.353 74.752 1.00 12.39 C
+ATOM 4999 O LEU B 815 -3.541 20.290 75.290 1.00 12.46 O
+ATOM 5000 CB LEU B 815 -2.255 22.173 72.539 1.00 12.42 C
+ATOM 5001 CG LEU B 815 -0.948 22.398 71.733 1.00 12.81 C
+ATOM 5002 CD1 LEU B 815 -1.218 22.657 70.227 1.00 12.19 C
+ATOM 5003 CD2 LEU B 815 -0.123 23.501 72.377 1.00 12.72 C
+ATOM 5004 N ILE B 816 -4.102 22.399 74.830 1.00 12.45 N
+ATOM 5005 CA ILE B 816 -5.288 22.344 75.700 1.00 12.32 C
+ATOM 5006 C ILE B 816 -6.593 21.766 75.170 1.00 13.12 C
+ATOM 5007 O ILE B 816 -7.504 21.516 75.958 1.00 12.16 O
+ATOM 5008 CB ILE B 816 -5.505 23.674 76.426 1.00 11.35 C
+ATOM 5009 CG1 ILE B 816 -5.921 24.777 75.442 1.00 11.75 C
+ATOM 5010 CG2 ILE B 816 -4.204 24.049 77.156 1.00 11.91 C
+ATOM 5011 CD1 ILE B 816 -6.129 26.135 76.091 1.00 11.96 C
+ATOM 5012 N TYR B 817 -6.705 21.629 73.845 1.00 12.59 N
+ATOM 5013 CA TYR B 817 -7.879 21.021 73.200 1.00 13.02 C
+ATOM 5014 C TYR B 817 -7.342 19.823 72.445 1.00 13.70 C
+ATOM 5015 O TYR B 817 -6.225 19.879 71.917 1.00 13.00 O
+ATOM 5016 CB TYR B 817 -8.554 21.954 72.183 1.00 11.95 C
+ATOM 5017 CG TYR B 817 -9.378 23.065 72.777 1.00 12.46 C
+ATOM 5018 CD1 TYR B 817 -8.806 24.283 73.106 1.00 12.87 C
+ATOM 5019 CD2 TYR B 817 -10.738 22.916 72.975 1.00 13.28 C
+ATOM 5020 CE1 TYR B 817 -9.566 25.330 73.613 1.00 14.08 C
+ATOM 5021 CE2 TYR B 817 -11.519 23.965 73.485 1.00 14.49 C
+ATOM 5022 CZ TYR B 817 -10.922 25.169 73.800 1.00 14.41 C
+ATOM 5023 OH TYR B 817 -11.678 26.214 74.293 1.00 17.30 O
+ATOM 5024 N ASP B 818 -8.104 18.728 72.381 1.00 14.85 N
+ATOM 5025 CA ASP B 818 -7.616 17.563 71.643 1.00 16.43 C
+ATOM 5026 C ASP B 818 -7.846 17.760 70.130 1.00 16.31 C
+ATOM 5027 O ASP B 818 -8.350 18.805 69.716 1.00 15.53 O
+ATOM 5028 CB ASP B 818 -8.186 16.235 72.200 1.00 18.38 C
+ATOM 5029 CG ASP B 818 -9.694 16.070 71.981 1.00 21.65 C
+ATOM 5030 OD1 ASP B 818 -10.273 16.729 71.090 1.00 21.34 O
+ATOM 5031 OD2 ASP B 818 -10.320 15.247 72.704 1.00 22.85 O
+ATOM 5032 N SER B 819 -7.494 16.775 69.314 1.00 17.84 N
+ATOM 5033 CA SER B 819 -7.662 16.894 67.858 1.00 20.05 C
+ATOM 5034 C SER B 819 -9.087 16.963 67.328 1.00 19.93 C
+ATOM 5035 O SER B 819 -9.294 17.194 66.153 1.00 20.99 O
+ATOM 5036 CB SER B 819 -6.882 15.795 67.147 1.00 21.39 C
+ATOM 5037 OG SER B 819 -7.140 14.537 67.749 1.00 24.71 O
+ATOM 5038 N ASN B 820 -10.069 16.758 68.197 1.00 21.12 N
+ATOM 5039 CA ASN B 820 -11.488 16.839 67.829 1.00 22.22 C
+ATOM 5040 C ASN B 820 -12.129 18.084 68.452 1.00 21.08 C
+ATOM 5041 O ASN B 820 -13.359 18.221 68.466 1.00 22.16 O
+ATOM 5042 CB ASN B 820 -12.253 15.598 68.320 1.00 25.06 C
+ATOM 5043 CG ASN B 820 -11.766 14.302 67.670 1.00 27.40 C
+ATOM 5044 OD1 ASN B 820 -11.707 14.190 66.445 1.00 29.11 O
+ATOM 5045 ND2 ASN B 820 -11.420 13.310 68.499 1.00 29.44 N
+ATOM 5046 N TYR B 821 -11.291 18.988 68.967 1.00 19.08 N
+ATOM 5047 CA TYR B 821 -11.729 20.226 69.622 1.00 18.23 C
+ATOM 5048 C TYR B 821 -12.476 20.047 70.959 1.00 18.48 C
+ATOM 5049 O TYR B 821 -13.281 20.892 71.362 1.00 17.31 O
+ATOM 5050 CB TYR B 821 -12.497 21.139 68.654 1.00 17.94 C
+ATOM 5051 CG TYR B 821 -11.631 21.643 67.517 1.00 18.24 C
+ATOM 5052 CD1 TYR B 821 -10.721 22.692 67.716 1.00 17.86 C
+ATOM 5053 CD2 TYR B 821 -11.696 21.053 66.242 1.00 18.01 C
+ATOM 5054 CE1 TYR B 821 -9.897 23.143 66.667 1.00 17.54 C
+ATOM 5055 CE2 TYR B 821 -10.872 21.493 65.193 1.00 17.47 C
+ATOM 5056 CZ TYR B 821 -9.982 22.540 65.427 1.00 17.99 C
+ATOM 5057 OH TYR B 821 -9.181 22.995 64.420 1.00 18.19 O
+ATOM 5058 N ASN B 822 -12.185 18.943 71.650 1.00 18.75 N
+ATOM 5059 CA ASN B 822 -12.779 18.709 72.975 1.00 19.28 C
+ATOM 5060 C ASN B 822 -11.754 19.255 73.981 1.00 17.43 C
+ATOM 5061 O ASN B 822 -10.556 18.973 73.854 1.00 17.13 O
+ATOM 5062 CB ASN B 822 -12.917 17.200 73.285 1.00 21.82 C
+ATOM 5063 CG ASN B 822 -13.819 16.452 72.315 1.00 24.37 C
+ATOM 5064 OD1 ASN B 822 -14.943 16.859 72.065 1.00 25.89 O
+ATOM 5065 ND2 ASN B 822 -13.328 15.324 71.792 1.00 26.55 N
+ATOM 5066 N PRO B 823 -12.198 20.026 74.996 1.00 17.57 N
+ATOM 5067 CA PRO B 823 -11.224 20.539 75.982 1.00 17.11 C
+ATOM 5068 C PRO B 823 -10.587 19.365 76.757 1.00 17.01 C
+ATOM 5069 O PRO B 823 -11.275 18.399 77.153 1.00 17.73 O
+ATOM 5070 CB PRO B 823 -12.087 21.355 76.953 1.00 17.95 C
+ATOM 5071 CG PRO B 823 -13.306 21.729 76.149 1.00 19.34 C
+ATOM 5072 CD PRO B 823 -13.566 20.505 75.288 1.00 18.84 C
+ATOM 5073 N LYS B 824 -9.278 19.426 76.925 1.00 14.87 N
+ATOM 5074 CA LYS B 824 -8.536 18.431 77.675 1.00 13.87 C
+ATOM 5075 C LYS B 824 -8.486 18.897 79.151 1.00 13.32 C
+ATOM 5076 O LYS B 824 -8.876 20.028 79.486 1.00 12.53 O
+ATOM 5077 CB LYS B 824 -7.120 18.347 77.084 1.00 13.22 C
+ATOM 5078 CG LYS B 824 -7.124 17.753 75.712 1.00 14.11 C
+ATOM 5079 CD LYS B 824 -5.809 17.909 74.982 1.00 14.34 C
+ATOM 5080 CE LYS B 824 -4.653 17.378 75.786 1.00 14.18 C
+ATOM 5081 NZ LYS B 824 -3.327 17.574 75.095 1.00 13.36 N
+ATOM 5082 N PRO B 825 -8.014 18.030 80.058 1.00 13.35 N
+ATOM 5083 CA PRO B 825 -7.949 18.467 81.461 1.00 13.21 C
+ATOM 5084 C PRO B 825 -7.157 19.795 81.597 1.00 13.10 C
+ATOM 5085 O PRO B 825 -7.528 20.660 82.400 1.00 13.72 O
+ATOM 5086 CB PRO B 825 -7.209 17.306 82.143 1.00 13.95 C
+ATOM 5087 CG PRO B 825 -7.699 16.129 81.392 1.00 14.41 C
+ATOM 5088 CD PRO B 825 -7.685 16.600 79.929 1.00 13.57 C
+ATOM 5089 N ALA B 826 -6.107 19.974 80.787 1.00 11.95 N
+ATOM 5090 CA ALA B 826 -5.297 21.194 80.843 1.00 12.05 C
+ATOM 5091 C ALA B 826 -6.130 22.475 80.691 1.00 12.16 C
+ATOM 5092 O ALA B 826 -5.827 23.490 81.340 1.00 12.66 O
+ATOM 5093 CB ALA B 826 -4.196 21.147 79.793 1.00 10.96 C
+ATOM 5094 N TYR B 827 -7.173 22.434 79.847 1.00 11.91 N
+ATOM 5095 CA TYR B 827 -8.040 23.605 79.645 1.00 12.80 C
+ATOM 5096 C TYR B 827 -8.729 24.038 80.954 1.00 13.40 C
+ATOM 5097 O TYR B 827 -8.669 25.208 81.352 1.00 13.91 O
+ATOM 5098 CB TYR B 827 -9.085 23.324 78.544 1.00 12.99 C
+ATOM 5099 CG TYR B 827 -10.097 24.434 78.341 1.00 13.59 C
+ATOM 5100 CD1 TYR B 827 -11.264 24.495 79.111 1.00 13.68 C
+ATOM 5101 CD2 TYR B 827 -9.880 25.455 77.390 1.00 13.71 C
+ATOM 5102 CE1 TYR B 827 -12.182 25.538 78.953 1.00 14.46 C
+ATOM 5103 CE2 TYR B 827 -10.809 26.517 77.223 1.00 13.60 C
+ATOM 5104 CZ TYR B 827 -11.953 26.557 78.005 1.00 14.52 C
+ATOM 5105 OH TYR B 827 -12.855 27.601 77.862 1.00 14.77 O
+ATOM 5106 N ASN B 828 -9.349 23.065 81.633 1.00 14.50 N
+ATOM 5107 CA ASN B 828 -10.047 23.304 82.893 1.00 15.11 C
+ATOM 5108 C ASN B 828 -9.089 23.745 83.996 1.00 13.45 C
+ATOM 5109 O ASN B 828 -9.409 24.659 84.776 1.00 15.04 O
+ATOM 5110 CB ASN B 828 -10.786 22.026 83.327 1.00 16.82 C
+ATOM 5111 CG ASN B 828 -11.837 21.582 82.301 1.00 18.57 C
+ATOM 5112 OD1 ASN B 828 -12.602 22.410 81.802 1.00 20.27 O
+ATOM 5113 ND2 ASN B 828 -11.851 20.293 81.961 1.00 18.96 N
+ATOM 5114 N ALA B 829 -7.907 23.126 84.028 1.00 13.06 N
+ATOM 5115 CA ALA B 829 -6.880 23.438 85.023 1.00 13.63 C
+ATOM 5116 C ALA B 829 -6.400 24.920 84.955 1.00 15.02 C
+ATOM 5117 O ALA B 829 -6.244 25.590 85.985 1.00 15.49 O
+ATOM 5118 CB ALA B 829 -5.733 22.492 84.885 1.00 13.76 C
+ATOM 5119 N ILE B 830 -6.211 25.446 83.740 1.00 14.74 N
+ATOM 5120 CA ILE B 830 -5.801 26.835 83.573 1.00 14.70 C
+ATOM 5121 C ILE B 830 -6.945 27.727 84.041 1.00 14.57 C
+ATOM 5122 O ILE B 830 -6.729 28.709 84.761 1.00 15.31 O
+ATOM 5123 CB ILE B 830 -5.508 27.167 82.097 1.00 14.89 C
+ATOM 5124 CG1 ILE B 830 -4.290 26.391 81.605 1.00 15.56 C
+ATOM 5125 CG2 ILE B 830 -5.310 28.682 81.932 1.00 15.58 C
+ATOM 5126 CD1 ILE B 830 -4.022 26.563 80.130 1.00 14.61 C
+ATOM 5127 N LYS B 831 -8.166 27.375 83.634 1.00 16.73 N
+ATOM 5128 CA LYS B 831 -9.343 28.131 84.025 1.00 19.33 C
+ATOM 5129 C LYS B 831 -9.486 28.174 85.547 1.00 20.65 C
+ATOM 5130 O LYS B 831 -9.744 29.232 86.119 1.00 20.20 O
+ATOM 5131 CB LYS B 831 -10.602 27.569 83.374 1.00 20.56 C
+ATOM 5132 CG LYS B 831 -11.751 28.543 83.488 1.00 23.03 C
+ATOM 5133 CD LYS B 831 -12.956 28.188 82.609 1.00 24.21 C
+ATOM 5134 CE LYS B 831 -12.799 28.652 81.144 1.00 24.55 C
+ATOM 5135 NZ LYS B 831 -14.046 28.359 80.388 1.00 23.63 N
+ATOM 5136 N GLU B 832 -9.266 27.049 86.220 1.00 22.27 N
+ATOM 5137 CA GLU B 832 -9.357 27.087 87.670 1.00 25.20 C
+ATOM 5138 C GLU B 832 -8.202 27.859 88.319 1.00 24.81 C
+ATOM 5139 O GLU B 832 -8.416 28.507 89.341 1.00 25.44 O
+ATOM 5140 CB GLU B 832 -9.578 25.711 88.288 1.00 29.12 C
+ATOM 5141 CG GLU B 832 -8.550 24.666 87.997 1.00 33.16 C
+ATOM 5142 CD GLU B 832 -9.028 23.279 88.451 1.00 36.14 C
+ATOM 5143 OE1 GLU B 832 -10.268 23.039 88.437 1.00 38.01 O
+ATOM 5144 OE2 GLU B 832 -8.171 22.431 88.805 1.00 36.98 O
+ATOM 5145 N ALA B 833 -7.001 27.842 87.729 1.00 22.57 N
+ATOM 5146 CA ALA B 833 -5.900 28.642 88.277 1.00 22.13 C
+ATOM 5147 C ALA B 833 -6.281 30.149 88.190 1.00 22.23 C
+ATOM 5148 O ALA B 833 -5.885 30.949 89.044 1.00 22.19 O
+ATOM 5149 CB ALA B 833 -4.587 28.366 87.522 1.00 21.19 C
+ATOM 5150 N LEU B 834 -7.082 30.520 87.192 1.00 22.57 N
+ATOM 5151 CA LEU B 834 -7.511 31.913 87.012 1.00 24.54 C
+ATOM 5152 C LEU B 834 -8.666 32.376 87.908 1.00 27.15 C
+ATOM 5153 O LEU B 834 -8.841 33.574 88.111 1.00 26.87 O
+ATOM 5154 CB LEU B 834 -7.858 32.195 85.544 1.00 23.15 C
+ATOM 5155 CG LEU B 834 -6.680 32.214 84.554 1.00 22.56 C
+ATOM 5156 CD1 LEU B 834 -7.187 32.233 83.106 1.00 22.53 C
+ATOM 5157 CD2 LEU B 834 -5.782 33.414 84.863 1.00 22.42 C
+ATOM 5158 N MET B 835 -9.470 31.439 88.403 1.00 30.86 N
+ATOM 5159 CA MET B 835 -10.607 31.776 89.272 1.00 35.01 C
+ATOM 5160 C MET B 835 -10.230 31.951 90.757 1.00 37.17 C
+ATOM 5161 O MET B 835 -10.838 32.844 91.390 1.00 40.31 O
+ATOM 5162 CB MET B 835 -11.737 30.736 89.140 1.00 35.66 C
+ATOM 5163 CG MET B 835 -12.433 30.741 87.801 1.00 37.03 C
+ATOM 5164 SD MET B 835 -13.730 29.495 87.637 1.00 40.25 S
+ATOM 5165 CE MET B 835 -12.842 27.973 87.858 1.00 39.14 C
+TER 5166 MET B 835
+HETATM 5167 O HOH A 1 19.092 16.066 38.353 1.00 8.41 O
+HETATM 5168 O HOH A 2 16.547 15.324 37.747 1.00 10.99 O
+HETATM 5169 O HOH A 3 6.695 26.587 37.079 1.00 10.88 O
+HETATM 5170 O HOH A 4 21.016 14.368 27.070 1.00 9.39 O
+HETATM 5171 O HOH A 5 26.848 12.043 28.407 1.00 11.87 O
+HETATM 5172 O HOH A 6 16.554 18.864 24.735 1.00 10.02 O
+HETATM 5173 O HOH A 7 17.849 7.210 38.783 1.00 11.25 O
+HETATM 5174 O HOH A 8 22.442 31.746 41.652 1.00 10.49 O
+HETATM 5175 O HOH A 9 12.873 5.300 43.714 1.00 13.36 O
+HETATM 5176 O HOH A 10 28.212 23.884 21.381 1.00 12.39 O
+HETATM 5177 O HOH A 11 26.566 18.819 28.818 1.00 12.51 O
+HETATM 5178 O HOH A 12 12.060 21.152 29.865 1.00 11.47 O
+HETATM 5179 O HOH A 13 23.092 11.560 28.962 1.00 11.17 O
+HETATM 5180 O HOH A 14 4.780 26.137 30.520 1.00 13.73 O
+HETATM 5181 O HOH A 15 20.446 10.150 41.932 1.00 12.80 O
+HETATM 5182 O HOH A 16 4.726 16.351 33.332 1.00 13.00 O
+HETATM 5183 O HOH A 17 4.136 11.222 37.765 1.00 16.90 O
+HETATM 5184 O HOH A 18 15.499 20.594 54.780 1.00 24.58 O
+HETATM 5185 O HOH A 19 7.268 -9.116 44.308 1.00 29.35 O
+HETATM 5186 O HOH A 20 7.544 5.719 41.181 1.00 15.25 O
+HETATM 5187 O HOH A 21 13.538 17.088 54.162 1.00 14.09 O
+HETATM 5188 O HOH A 22 13.111 12.935 34.616 1.00 14.25 O
+HETATM 5189 O HOH A 23 20.604 10.554 28.677 1.00 14.46 O
+HETATM 5190 O HOH A 24 19.507 25.637 43.636 1.00 15.05 O
+HETATM 5191 O HOH A 25 15.385 35.310 42.122 1.00 14.26 O
+HETATM 5192 O HOH A 26 2.601 10.075 39.424 1.00 21.42 O
+HETATM 5193 O HOH A 27 -0.118 12.637 38.816 1.00 21.59 O
+HETATM 5194 O HOH A 28 15.716 -12.816 48.256 1.00 20.09 O
+HETATM 5195 O HOH A 29 10.776 6.101 39.875 1.00 23.05 O
+HETATM 5196 O HOH A 30 8.907 8.721 56.594 1.00 18.76 O
+HETATM 5197 O HOH A 31 23.742 6.677 37.172 1.00 18.33 O
+HETATM 5198 O HOH A 32 18.178 11.281 52.509 1.00 21.24 O
+HETATM 5199 O HOH A 33 25.243 15.395 48.630 1.00 18.18 O
+HETATM 5200 O HOH A 34 20.716 35.408 30.200 1.00 19.39 O
+HETATM 5201 O HOH A 35 -1.257 17.902 46.345 1.00 38.64 O
+HETATM 5202 O HOH A 36 -1.323 15.788 45.629 1.00 17.53 O
+HETATM 5203 O HOH A 37 38.194 8.865 41.568 1.00 19.01 O
+HETATM 5204 O HOH A 38 39.358 19.261 39.040 1.00 18.54 O
+HETATM 5205 O HOH A 39 8.252 -7.125 39.541 1.00 37.34 O
+HETATM 5206 O HOH A 40 0.596 -2.149 51.896 1.00 20.47 O
+HETATM 5207 O HOH A 41 5.058 35.215 43.457 1.00 19.05 O
+HETATM 5208 O HOH A 42 32.964 3.818 43.801 1.00 20.97 O
+HETATM 5209 O HOH A 43 13.187 26.786 50.046 1.00 22.21 O
+HETATM 5210 O HOH A 44 21.565 -1.196 42.342 1.00 37.73 O
+HETATM 5211 O HOH A 45 20.869 1.321 43.607 1.00 20.34 O
+HETATM 5212 O HOH A 46 19.833 2.013 55.684 1.00 22.80 O
+HETATM 5213 O HOH A 47 20.435 14.846 53.291 1.00 20.43 O
+HETATM 5214 O HOH A 48 17.879 -3.555 40.884 1.00 20.82 O
+HETATM 5215 O HOH A 49 20.177 -0.969 39.757 1.00 40.33 O
+HETATM 5216 O HOH A 50 40.921 12.713 36.021 1.00 22.72 O
+HETATM 5217 O HOH A 51 -6.127 14.921 38.193 1.00 22.03 O
+HETATM 5218 O HOH A 52 5.904 32.134 28.591 1.00 20.98 O
+HETATM 5219 O HOH A 53 19.425 31.579 20.062 1.00 20.63 O
+HETATM 5220 O HOH A 54 -2.387 29.470 46.859 1.00 46.67 O
+HETATM 5221 O HOH A 55 3.159 29.874 49.502 1.00 36.83 O
+HETATM 5222 O HOH A 56 27.217 12.578 17.477 1.00 54.14 O
+HETATM 5223 O HOH A 57 7.481 -0.149 49.531 1.00 24.25 O
+HETATM 5224 O HOH A 58 28.883 15.229 18.637 1.00 23.58 O
+HETATM 5225 O HOH A 59 14.787 10.400 34.262 1.00 30.92 O
+HETATM 5226 O HOH A 60 2.668 25.328 28.877 1.00 20.67 O
+HETATM 5227 O HOH A 61 -1.920 3.649 55.031 1.00 29.89 O
+HETATM 5228 O HOH A 62 13.056 34.213 48.924 1.00 20.61 O
+HETATM 5229 O HOH A 63 30.555 19.691 45.878 1.00 23.31 O
+HETATM 5230 O HOH A 64 9.726 -12.345 45.837 1.00 52.60 O
+HETATM 5231 O HOH A 65 11.462 14.594 30.550 1.00 20.10 O
+HETATM 5232 O HOH A 66 31.017 23.755 42.397 1.00 20.53 O
+HETATM 5233 O HOH A 67 34.275 20.969 45.124 1.00 62.40 O
+HETATM 5234 O HOH A 68 -3.557 12.117 32.379 1.00 26.80 O
+HETATM 5235 O HOH A 69 24.422 37.005 35.363 1.00 24.42 O
+HETATM 5236 O HOH A 70 19.422 14.148 58.502 1.00 24.64 O
+HETATM 5237 O HOH A 71 28.709 4.427 49.649 1.00 31.62 O
+HETATM 5238 O HOH A 72 -8.556 3.438 45.752 1.00 26.90 O
+HETATM 5239 O HOH A 73 8.436 37.602 38.187 1.00 24.69 O
+HETATM 5240 O HOH A 74 14.202 22.999 54.415 1.00 27.61 O
+HETATM 5241 O HOH A 75 22.776 5.728 39.031 1.00 33.26 O
+HETATM 5242 O HOH A 76 1.523 4.744 36.455 1.00 23.96 O
+HETATM 5243 O HOH A 77 -1.746 21.683 45.895 1.00 48.37 O
+HETATM 5244 O HOH A 78 23.407 5.406 30.290 1.00 25.76 O
+HETATM 5245 O HOH A 79 7.093 -2.281 50.146 1.00 32.64 O
+HETATM 5246 O HOH A 80 33.930 3.884 32.329 1.00 30.08 O
+HETATM 5247 O HOH A 81 2.010 33.839 34.492 1.00 34.48 O
+HETATM 5248 O HOH A 82 29.362 32.016 23.290 1.00 47.11 O
+HETATM 5249 O HOH A 83 23.676 24.045 45.153 1.00 27.85 O
+HETATM 5250 O HOH A 84 21.703 16.882 15.491 1.00 26.92 O
+HETATM 5251 O HOH A 85 9.152 -10.205 47.883 1.00 26.01 O
+HETATM 5252 O HOH A 86 15.592 -2.231 36.166 1.00 53.96 O
+HETATM 5253 O HOH A 87 15.498 1.987 36.271 1.00 23.00 O
+HETATM 5254 O HOH A 88 39.603 6.631 33.944 1.00 27.66 O
+HETATM 5255 O HOH A 89 40.914 21.324 38.776 1.00 27.64 O
+HETATM 5256 O HOH A 90 12.162 25.478 52.725 1.00 44.31 O
+HETATM 5257 O HOH A 91 19.220 34.017 22.750 1.00 27.31 O
+HETATM 5258 O HOH A 92 6.912 30.644 26.694 1.00 35.20 O
+HETATM 5259 O HOH A 93 18.358 39.492 38.732 1.00 34.32 O
+HETATM 5260 O HOH A 94 9.309 37.483 27.619 1.00 25.77 O
+HETATM 5261 O HOH A 95 21.599 32.959 23.298 1.00 30.21 O
+HETATM 5262 O HOH A 96 9.265 26.009 29.284 1.00 26.25 O
+HETATM 5263 O HOH A 97 6.409 24.377 53.507 1.00 27.94 O
+HETATM 5264 O HOH A 98 16.490 0.624 25.160 1.00 45.41 O
+HETATM 5265 O HOH A 99 12.294 24.586 24.024 1.00 31.39 O
+HETATM 5266 O HOH A 100 -0.558 35.651 23.290 1.00 40.90 O
+HETATM 5267 O HOH A 101 10.378 36.004 20.806 1.00 29.72 O
+HETATM 5268 O HOH A 102 0.820 4.907 55.236 1.00 26.94 O
+HETATM 5269 O HOH A 103 10.929 23.202 27.909 1.00 29.96 O
+HETATM 5270 O HOH A 104 34.869 25.034 23.866 1.00 34.46 O
+HETATM 5271 O HOH A 105 29.015 31.319 20.245 1.00 27.16 O
+HETATM 5272 O HOH A 106 -5.686 17.155 39.523 1.00 33.77 O
+HETATM 5273 O HOH A 107 32.869 28.993 22.367 1.00 36.40 O
+HETATM 5274 O HOH A 108 34.677 32.045 38.500 1.00 30.03 O
+HETATM 5275 O HOH A 109 13.198 -15.131 44.935 1.00 29.68 O
+HETATM 5276 O HOH A 110 12.591 29.994 21.864 1.00 33.35 O
+HETATM 5277 O HOH A 111 16.700 24.364 16.393 1.00 29.43 O
+HETATM 5278 O HOH A 112 -8.993 0.342 53.572 1.00 32.01 O
+HETATM 5279 O HOH A 113 14.714 8.182 24.960 1.00 27.93 O
+HETATM 5280 O HOH A 114 -6.406 -1.567 52.940 1.00 27.23 O
+HETATM 5281 O HOH A 115 11.896 -12.296 48.647 1.00 31.24 O
+HETATM 5282 O HOH A 117 16.646 37.574 27.637 1.00 30.21 O
+HETATM 5283 O HOH A 118 1.849 -7.405 43.658 1.00 41.55 O
+HETATM 5284 O HOH A 119 20.364 19.716 51.572 1.00 36.09 O
+HETATM 5285 O HOH A 120 34.702 7.045 49.332 1.00 34.10 O
+HETATM 5286 O HOH A 121 4.499 1.315 55.561 1.00 27.33 O
+HETATM 5287 O HOH A 122 23.272 7.551 23.076 1.00 36.91 O
+HETATM 5288 O HOH A 123 13.808 37.251 19.174 1.00 30.43 O
+HETATM 5289 O HOH A 124 6.198 1.801 34.892 1.00 41.36 O
+HETATM 5290 O HOH A 125 17.488 2.333 55.180 1.00 29.71 O
+HETATM 5291 O HOH A 126 10.819 16.363 28.058 1.00 26.83 O
+HETATM 5292 O HOH A 127 6.489 16.464 58.027 1.00 50.52 O
+HETATM 5293 O HOH A 128 0.685 14.739 29.910 1.00 34.22 O
+HETATM 5294 O HOH A 129 2.169 34.573 39.079 1.00 42.85 O
+HETATM 5295 O HOH A 130 22.765 -5.966 42.543 1.00 36.13 O
+HETATM 5296 O HOH A 131 -0.127 8.255 56.541 1.00 26.47 O
+HETATM 5297 O HOH A 132 23.050 4.084 55.966 1.00 29.27 O
+HETATM 5298 O HOH A 133 20.862 3.875 57.453 1.00 34.13 O
+HETATM 5299 O HOH A 134 18.761 37.433 34.517 1.00 29.60 O
+HETATM 5300 O HOH A 135 23.871 18.365 14.972 1.00 32.09 O
+HETATM 5301 O HOH A 136 5.399 -3.221 51.305 1.00 39.04 O
+HETATM 5302 O HOH A 137 7.119 2.455 56.866 1.00 36.07 O
+HETATM 5303 O HOH A 138 27.506 0.575 51.281 1.00 36.84 O
+HETATM 5304 O HOH A 139 -3.543 -4.594 48.767 1.00 36.17 O
+HETATM 5305 O HOH A 140 3.503 2.815 36.219 1.00 33.83 O
+HETATM 5306 O HOH A 141 23.587 12.725 19.741 1.00 37.32 O
+HETATM 5307 O HOH A 142 8.989 20.839 58.051 1.00 45.44 O
+HETATM 5308 O HOH A 143 -2.534 29.744 33.113 1.00 32.75 O
+HETATM 5309 O HOH A 144 42.125 14.677 33.630 1.00 32.27 O
+HETATM 5310 O HOH A 145 -4.053 24.702 31.413 1.00 35.35 O
+HETATM 5311 O HOH A 146 14.122 11.847 31.761 1.00 49.01 O
+HETATM 5312 O HOH A 147 38.926 20.684 41.620 1.00 35.01 O
+HETATM 5313 O HOH A 148 -2.189 28.843 44.760 1.00 34.22 O
+HETATM 5314 O HOH A 149 11.249 -5.769 38.861 1.00 33.94 O
+HETATM 5315 O HOH A 150 5.649 32.761 53.301 1.00 58.68 O
+HETATM 5316 O HOH A 151 34.260 19.510 18.932 1.00 45.80 O
+HETATM 5317 O HOH A 152 14.769 17.390 12.522 1.00 43.82 O
+HETATM 5318 O HOH A 153 17.932 38.737 41.838 1.00 39.87 O
+HETATM 5319 O HOH A 154 25.739 26.223 45.840 1.00 37.55 O
+HETATM 5320 O HOH A 155 -2.117 29.274 55.092 1.00 30.50 O
+HETATM 5321 O HOH A 156 20.094 27.178 46.240 1.00 36.06 O
+HETATM 5322 O HOH A 157 9.113 1.258 56.545 1.00 40.12 O
+HETATM 5323 O HOH A 158 6.571 -10.608 50.078 1.00 67.84 O
+HETATM 5324 O HOH A 159 21.958 17.171 53.835 1.00 43.16 O
+HETATM 5325 O HOH A 160 21.936 0.334 35.813 1.00 33.02 O
+HETATM 5326 O HOH A 161 30.796 2.327 26.399 1.00 40.57 O
+HETATM 5327 O HOH A 162 27.662 12.787 50.246 1.00 40.50 O
+HETATM 5328 O HOH A 163 24.545 4.927 51.745 1.00 33.99 O
+HETATM 5329 O HOH A 164 16.496 6.307 24.788 1.00 52.52 O
+HETATM 5330 O HOH A 165 10.587 5.893 19.970 1.00 62.37 O
+HETATM 5331 O HOH A 166 -4.880 -1.513 41.940 1.00 31.35 O
+HETATM 5332 O HOH A 167 20.024 0.406 37.436 1.00 48.29 O
+HETATM 5333 O HOH A 168 39.002 12.977 48.816 1.00 49.88 O
+HETATM 5334 O HOH A 169 0.794 -5.344 50.407 1.00 58.54 O
+HETATM 5335 O HOH A 170 0.007 31.739 30.043 1.00 46.58 O
+HETATM 5336 O HOH A 172 3.209 -2.131 52.735 1.00 40.23 O
+HETATM 5337 O HOH A 173 0.772 18.965 45.987 1.00 39.51 O
+HETATM 5338 O HOH A 174 21.308 26.731 14.581 1.00 40.41 O
+HETATM 5339 O HOH A 175 13.671 31.289 51.094 1.00 62.43 O
+HETATM 5340 O HOH A 176 19.499 31.838 17.380 1.00 40.40 O
+HETATM 5341 O HOH A 177 11.886 2.295 56.480 1.00 50.97 O
+HETATM 5342 O HOH A 178 -4.252 27.303 50.245 1.00 44.66 O
+HETATM 5343 O HOH A 179 33.747 2.693 38.480 1.00 56.68 O
+HETATM 5344 O HOH A 180 3.291 21.885 28.023 1.00 50.12 O
+HETATM 5345 O HOH A 181 3.541 17.959 57.150 1.00 44.20 O
+HETATM 5346 O HOH A 182 8.161 37.710 29.626 1.00 38.49 O
+HETATM 5347 O HOH A 183 36.581 4.951 39.491 1.00 57.60 O
+HETATM 5348 O HOH A 184 23.646 7.936 56.692 1.00 50.35 O
+HETATM 5349 O HOH A 185 20.888 5.996 58.401 1.00 49.14 O
+HETATM 5350 O HOH A 186 12.407 12.817 61.829 1.00 37.44 O
+HETATM 5351 O HOH A 187 10.633 7.767 59.564 1.00 57.80 O
+HETATM 5352 O HOH A 188 17.889 9.445 30.740 1.00 36.98 O
+HETATM 5353 O HOH A 189 -0.529 19.933 56.089 1.00 45.89 O
+HETATM 5354 O HOH A 190 -9.019 3.505 47.871 1.00 52.05 O
+HETATM 5355 O HOH A 191 11.262 10.043 62.269 1.00 59.72 O
+HETATM 5356 O HOH A 192 39.452 25.983 29.260 1.00 54.32 O
+HETATM 5357 O HOH A 193 19.149 8.933 43.975 1.00 38.24 O
+HETATM 5358 O HOH A 194 8.192 32.808 26.669 1.00 29.09 O
+HETATM 5359 O HOH A 195 37.946 19.507 28.973 1.00 32.28 O
+HETATM 5360 O HOH A 196 17.677 11.123 15.895 1.00 30.03 O
+HETATM 5361 O HOH A 197 11.649 18.259 19.548 1.00 29.78 O
+HETATM 5362 O HOH A 198 22.936 18.625 12.852 1.00 45.21 O
+HETATM 5363 O HOH A 199 4.925 27.501 26.975 1.00 40.52 O
+HETATM 5364 O HOH A 200 27.861 -0.948 46.279 1.00 39.96 O
+HETATM 5365 O HOH A 201 11.237 14.317 16.719 1.00 32.61 O
+HETATM 5366 O HOH A 202 14.389 27.100 17.986 1.00 41.75 O
+HETATM 5367 O HOH A 203 36.932 27.545 43.214 1.00 33.49 O
+HETATM 5368 O HOH A 204 23.782 33.225 42.152 1.00 29.05 O
+HETATM 5369 O HOH A 205 -8.578 2.201 51.265 1.00 38.86 O
+HETATM 5370 O HOH A 206 25.560 30.029 46.884 1.00 38.81 O
+HETATM 5371 O HOH A 207 5.702 41.367 43.293 1.00 42.92 O
+HETATM 5372 O HOH A 208 -0.142 33.950 43.771 1.00 53.04 O
+HETATM 5373 O HOH A 209 23.466 17.507 9.102 1.00 35.29 O
+HETATM 5374 O HOH A 210 9.336 -5.342 37.057 1.00 38.16 O
+HETATM 5375 O HOH A 211 19.208 35.232 20.240 1.00 42.67 O
+HETATM 5376 O HOH A 212 21.847 22.379 46.946 1.00 47.09 O
+HETATM 5377 O HOH A 213 9.829 6.136 29.064 1.00 65.53 O
+HETATM 5378 O HOH A 214 18.300 -6.924 42.238 1.00 37.37 O
+HETATM 5379 O HOH A 215 33.657 21.753 17.638 1.00 41.06 O
+HETATM 5380 O HOH A 216 24.615 22.655 47.482 1.00 49.77 O
+HETATM 5381 O HOH A 218 13.895 22.801 16.048 1.00 53.98 O
+HETATM 5382 O HOH A 219 39.088 15.547 25.983 1.00 43.98 O
+HETATM 5383 O HOH A 220 -11.751 3.015 55.532 1.00 43.41 O
+HETATM 5384 O HOH A 221 22.192 13.305 58.897 1.00 47.00 O
+HETATM 5385 O HOH A 222 7.462 34.947 27.625 1.00 61.29 O
+HETATM 5386 O HOH A 223 18.127 36.940 30.127 1.00 67.74 O
+HETATM 5387 O HOH A 224 -10.173 19.602 47.111 1.00 50.12 O
+HETATM 5388 O HOH A 225 4.064 36.393 29.795 1.00 46.94 O
+HETATM 5389 O HOH A 226 25.689 34.637 24.853 1.00 47.62 O
+HETATM 5390 O HOH A 227 0.721 23.404 27.132 1.00 54.99 O
+HETATM 5391 O HOH A 228 2.351 8.980 59.016 1.00 58.70 O
+HETATM 5392 O HOH A 229 31.985 15.324 49.189 1.00 47.31 O
+HETATM 5393 O HOH A 230 -2.100 28.189 25.481 1.00 40.69 O
+HETATM 5394 O HOH A 231 32.843 18.552 17.241 1.00 52.37 O
+HETATM 5395 O HOH A 233 29.776 14.554 49.741 1.00 49.91 O
+HETATM 5396 O HOH A 281 7.680 33.949 50.969 1.00 35.24 O
+HETATM 5397 O HOH A 320 8.488 31.677 52.565 1.00 48.35 O
+HETATM 5398 O HOH A 381 11.970 40.004 36.107 1.00 63.40 O
+HETATM 5399 O HOH A 393 3.686 32.305 55.795 1.00 52.51 O
+HETATM 5400 O HOH A 397 8.329 15.693 60.042 1.00 40.55 O
+HETATM 5401 O HOH B 116 14.748 32.161 49.397 1.00 33.95 O
+HETATM 5402 O HOH B 171 -13.355 33.644 62.184 1.00 36.78 O
+HETATM 5403 O HOH B 217 2.042 27.943 56.451 1.00 49.17 O
+HETATM 5404 O HOH B 232 23.316 37.776 44.397 1.00 54.35 O
+HETATM 5405 O HOH B 234 7.439 33.931 70.275 1.00 13.96 O
+HETATM 5406 O HOH B 235 4.950 34.580 70.985 1.00 9.48 O
+HETATM 5407 O HOH B 236 17.406 33.585 81.547 1.00 11.47 O
+HETATM 5408 O HOH B 237 2.790 23.259 69.848 1.00 13.63 O
+HETATM 5409 O HOH B 238 -3.132 24.633 67.352 1.00 14.12 O
+HETATM 5410 O HOH B 239 7.256 20.906 74.244 1.00 12.97 O
+HETATM 5411 O HOH B 240 6.141 34.693 62.166 1.00 12.01 O
+HETATM 5412 O HOH B 241 1.520 38.468 86.779 1.00 18.06 O
+HETATM 5413 O HOH B 242 11.028 39.577 60.147 1.00 10.91 O
+HETATM 5414 O HOH B 243 -4.432 17.839 79.654 1.00 16.15 O
+HETATM 5415 O HOH B 244 -2.688 25.067 74.176 1.00 14.23 O
+HETATM 5416 O HOH B 245 11.975 26.111 76.290 1.00 14.46 O
+HETATM 5417 O HOH B 246 0.668 24.848 67.007 1.00 15.74 O
+HETATM 5418 O HOH B 247 19.334 26.853 81.210 1.00 14.18 O
+HETATM 5419 O HOH B 248 3.648 37.842 64.940 1.00 15.53 O
+HETATM 5420 O HOH B 249 19.295 29.547 71.414 1.00 13.45 O
+HETATM 5421 O HOH B 250 19.739 33.736 66.200 1.00 13.96 O
+HETATM 5422 O HOH B 251 10.409 50.429 71.603 1.00 12.57 O
+HETATM 5423 O HOH B 252 16.710 39.734 45.860 1.00 15.46 O
+HETATM 5424 O HOH B 253 16.553 37.176 60.564 1.00 13.25 O
+HETATM 5425 O HOH B 254 8.529 50.879 74.969 1.00 25.19 O
+HETATM 5426 O HOH B 255 10.888 30.771 67.958 1.00 13.04 O
+HETATM 5427 O HOH B 256 3.048 24.482 65.840 1.00 19.01 O
+HETATM 5428 O HOH B 257 4.569 40.198 80.273 1.00 17.08 O
+HETATM 5429 O HOH B 258 8.678 38.807 90.088 1.00 17.50 O
+HETATM 5430 O HOH B 259 21.484 35.524 64.927 1.00 16.89 O
+HETATM 5431 O HOH B 260 24.313 34.995 67.752 1.00 17.87 O
+HETATM 5432 O HOH B 261 16.140 46.312 92.123 1.00 17.48 O
+HETATM 5433 O HOH B 262 13.207 35.833 61.126 1.00 18.17 O
+HETATM 5434 O HOH B 263 15.243 52.558 63.195 1.00 17.75 O
+HETATM 5435 O HOH B 264 0.163 32.984 61.648 1.00 23.96 O
+HETATM 5436 O HOH B 265 5.728 48.294 65.677 1.00 18.54 O
+HETATM 5437 O HOH B 266 -1.157 44.752 69.959 1.00 15.58 O
+HETATM 5438 O HOH B 267 3.724 26.851 90.744 1.00 34.21 O
+HETATM 5439 O HOH B 268 25.322 41.822 70.766 1.00 18.87 O
+HETATM 5440 O HOH B 269 22.368 28.479 89.791 1.00 42.69 O
+HETATM 5441 O HOH B 270 33.001 37.560 63.743 1.00 19.24 O
+HETATM 5442 O HOH B 271 -15.598 35.487 74.136 1.00 24.16 O
+HETATM 5443 O HOH B 272 15.779 35.134 47.670 1.00 19.08 O
+HETATM 5444 O HOH B 273 23.387 47.303 52.383 1.00 20.94 O
+HETATM 5445 O HOH B 274 18.985 40.119 89.870 1.00 18.71 O
+HETATM 5446 O HOH B 275 -8.927 39.704 58.662 1.00 20.35 O
+HETATM 5447 O HOH B 276 11.085 46.543 81.325 1.00 23.40 O
+HETATM 5448 O HOH B 277 3.054 39.302 56.021 1.00 17.08 O
+HETATM 5449 O HOH B 278 3.717 40.980 58.037 1.00 54.48 O
+HETATM 5450 O HOH B 279 4.414 51.406 56.325 1.00 20.95 O
+HETATM 5451 O HOH B 280 3.554 49.374 69.340 1.00 18.98 O
+HETATM 5452 O HOH B 282 5.964 36.269 51.647 1.00 24.09 O
+HETATM 5453 O HOH B 283 -16.931 32.157 67.784 1.00 19.86 O
+HETATM 5454 O HOH B 284 30.273 34.109 69.896 1.00 27.55 O
+HETATM 5455 O HOH B 285 17.909 25.368 87.302 1.00 22.41 O
+HETATM 5456 O HOH B 286 4.627 16.633 87.139 1.00 25.53 O
+HETATM 5457 O HOH B 287 26.196 41.503 83.409 1.00 36.02 O
+HETATM 5458 O HOH B 288 21.155 45.378 84.765 1.00 58.15 O
+HETATM 5459 O HOH B 289 -5.403 14.908 71.017 1.00 30.95 O
+HETATM 5460 O HOH B 290 16.644 45.051 54.435 1.00 23.77 O
+HETATM 5461 O HOH B 291 -6.941 12.973 72.619 1.00 52.40 O
+HETATM 5462 O HOH B 292 9.060 30.383 65.526 1.00 22.62 O
+HETATM 5463 O HOH B 293 21.271 25.064 80.228 1.00 25.31 O
+HETATM 5464 O HOH B 294 25.858 50.682 57.897 1.00 22.54 O
+HETATM 5465 O HOH B 295 10.623 45.024 87.931 1.00 26.40 O
+HETATM 5466 O HOH B 296 -6.774 42.107 74.510 1.00 24.24 O
+HETATM 5467 O HOH B 297 15.913 37.013 45.657 1.00 19.18 O
+HETATM 5468 O HOH B 298 12.296 26.556 69.298 1.00 33.13 O
+HETATM 5469 O HOH B 299 -11.174 24.972 103.032 1.00 39.27 O
+HETATM 5470 O HOH B 300 -6.979 38.806 78.745 1.00 22.20 O
+HETATM 5471 O HOH B 301 27.406 28.484 67.612 1.00 23.66 O
+HETATM 5472 O HOH B 302 -0.194 32.304 92.017 1.00 25.56 O
+HETATM 5473 O HOH B 303 4.299 54.492 68.362 1.00 24.64 O
+HETATM 5474 O HOH B 304 -4.671 45.393 58.631 1.00 30.42 O
+HETATM 5475 O HOH B 305 32.572 41.587 58.308 1.00 22.61 O
+HETATM 5476 O HOH B 306 15.746 35.199 92.710 1.00 39.94 O
+HETATM 5477 O HOH B 307 9.786 51.023 77.206 1.00 28.25 O
+HETATM 5478 O HOH B 308 1.198 34.868 60.798 1.00 27.56 O
+HETATM 5479 O HOH B 309 22.558 32.369 59.801 1.00 29.00 O
+HETATM 5480 O HOH B 310 25.400 42.476 76.931 1.00 25.48 O
+HETATM 5481 O HOH B 311 0.344 26.020 61.106 1.00 25.50 O
+HETATM 5482 O HOH B 312 16.934 45.332 52.204 1.00 29.10 O
+HETATM 5483 O HOH B 313 -9.369 14.371 77.379 1.00 32.14 O
+HETATM 5484 O HOH B 314 22.064 31.046 89.021 1.00 24.06 O
+HETATM 5485 O HOH B 315 -8.528 18.349 89.376 1.00 24.13 O
+HETATM 5486 O HOH B 316 0.435 41.693 78.630 1.00 30.11 O
+HETATM 5487 O HOH B 317 1.584 11.798 73.120 1.00 30.98 O
+HETATM 5488 O HOH B 318 15.362 43.173 44.621 1.00 29.60 O
+HETATM 5489 O HOH B 319 8.197 32.118 57.027 1.00 24.67 O
+HETATM 5490 O HOH B 321 31.199 30.185 61.722 1.00 27.44 O
+HETATM 5491 O HOH B 322 -17.072 35.205 76.460 1.00 33.00 O
+HETATM 5492 O HOH B 323 12.274 49.073 80.223 1.00 24.99 O
+HETATM 5493 O HOH B 324 5.117 19.230 89.825 1.00 43.15 O
+HETATM 5494 O HOH B 325 15.811 23.228 87.244 1.00 54.03 O
+HETATM 5495 O HOH B 326 6.000 35.770 94.387 1.00 36.90 O
+HETATM 5496 O HOH B 327 15.101 24.717 92.228 1.00 29.30 O
+HETATM 5497 O HOH B 328 2.662 20.353 88.312 1.00 32.78 O
+HETATM 5498 O HOH B 329 14.429 25.585 80.968 1.00 32.30 O
+HETATM 5499 O HOH B 330 18.044 50.215 78.997 1.00 27.16 O
+HETATM 5500 O HOH B 331 19.334 45.805 90.182 1.00 32.88 O
+HETATM 5501 O HOH B 332 11.036 20.470 80.505 1.00 33.35 O
+HETATM 5502 O HOH B 333 -19.123 34.039 78.213 1.00 32.04 O
+HETATM 5503 O HOH B 334 14.295 18.329 87.940 1.00 59.00 O
+HETATM 5504 O HOH B 335 23.125 51.158 59.146 1.00 31.00 O
+HETATM 5505 O HOH B 336 13.007 24.411 78.260 1.00 31.11 O
+HETATM 5506 O HOH B 337 -15.858 22.514 82.572 1.00 52.70 O
+HETATM 5507 O HOH B 338 -5.591 16.928 87.148 1.00 29.28 O
+HETATM 5508 O HOH B 339 29.824 35.939 71.739 1.00 27.30 O
+HETATM 5509 O HOH B 340 -4.663 20.149 87.918 1.00 35.03 O
+HETATM 5510 O HOH B 341 -10.607 35.253 86.978 1.00 34.60 O
+HETATM 5511 O HOH B 342 21.277 41.352 89.613 1.00 49.69 O
+HETATM 5512 O HOH B 343 11.461 18.437 85.397 1.00 26.10 O
+HETATM 5513 O HOH B 344 4.475 11.775 80.888 1.00 27.10 O
+HETATM 5514 O HOH B 345 32.910 48.668 54.258 1.00 28.47 O
+HETATM 5515 O HOH B 346 4.364 18.122 63.520 1.00 32.48 O
+HETATM 5516 O HOH B 347 32.630 46.727 56.890 1.00 33.74 O
+HETATM 5517 O HOH B 348 16.288 41.179 43.225 1.00 58.25 O
+HETATM 5518 O HOH B 349 9.666 45.043 85.325 1.00 30.90 O
+HETATM 5519 O HOH B 350 11.805 24.177 95.869 1.00 48.75 O
+HETATM 5520 O HOH B 351 22.242 38.779 47.166 1.00 29.13 O
+HETATM 5521 O HOH B 352 3.453 48.208 74.453 1.00 40.58 O
+HETATM 5522 O HOH B 353 -11.224 45.171 61.549 1.00 55.91 O
+HETATM 5523 O HOH B 354 19.387 51.335 56.032 1.00 27.93 O
+HETATM 5524 O HOH B 355 2.032 23.410 62.979 1.00 46.81 O
+HETATM 5525 O HOH B 356 7.467 15.700 94.184 1.00 35.08 O
+HETATM 5526 O HOH B 357 18.756 30.581 52.741 1.00 31.41 O
+HETATM 5527 O HOH B 358 6.487 51.054 56.822 1.00 29.31 O
+HETATM 5528 O HOH B 359 13.121 24.203 71.251 1.00 46.50 O
+HETATM 5529 O HOH B 360 17.500 53.923 70.154 1.00 32.36 O
+HETATM 5530 O HOH B 361 23.444 25.786 69.799 1.00 38.24 O
+HETATM 5531 O HOH B 362 22.194 35.799 89.283 1.00 30.53 O
+HETATM 5532 O HOH B 363 -1.186 36.601 50.287 1.00 48.92 O
+HETATM 5533 O HOH B 364 24.144 52.464 62.699 1.00 31.31 O
+HETATM 5534 O HOH B 365 2.291 53.667 59.537 1.00 40.22 O
+HETATM 5535 O HOH B 366 0.425 51.643 58.771 1.00 32.98 O
+HETATM 5536 O HOH B 367 5.091 31.699 92.420 1.00 35.57 O
+HETATM 5537 O HOH B 368 32.321 45.942 91.655 1.00 52.87 O
+HETATM 5538 O HOH B 369 18.563 46.577 51.453 1.00 27.08 O
+HETATM 5539 O HOH B 370 17.280 52.655 56.855 1.00 35.97 O
+HETATM 5540 O HOH B 371 -3.601 46.622 54.884 1.00 40.65 O
+HETATM 5541 O HOH B 372 28.288 44.309 50.784 1.00 50.16 O
+HETATM 5542 O HOH B 373 21.146 32.821 57.676 1.00 39.27 O
+HETATM 5543 O HOH B 374 0.107 15.141 68.731 1.00 44.32 O
+HETATM 5544 O HOH B 375 15.916 52.384 77.418 1.00 38.73 O
+HETATM 5545 O HOH B 376 26.382 29.240 84.737 1.00 34.99 O
+HETATM 5546 O HOH B 377 -18.219 29.808 69.614 1.00 32.85 O
+HETATM 5547 O HOH B 378 28.556 28.222 80.228 1.00 38.74 O
+HETATM 5548 O HOH B 379 9.034 28.051 67.305 1.00 32.99 O
+HETATM 5549 O HOH B 380 26.642 25.242 95.920 1.00 39.74 O
+HETATM 5550 O HOH B 382 10.488 33.782 51.265 1.00 34.16 O
+HETATM 5551 O HOH B 383 18.477 47.625 85.435 1.00 33.25 O
+HETATM 5552 O HOH B 384 -10.288 15.489 75.489 1.00 43.76 O
+HETATM 5553 O HOH B 385 6.985 6.114 76.686 1.00 40.24 O
+HETATM 5554 O HOH B 386 9.284 40.209 92.226 1.00 26.97 O
+HETATM 5555 O HOH B 387 2.426 43.260 77.203 1.00 37.48 O
+HETATM 5556 O HOH B 388 21.594 49.319 85.641 1.00 63.27 O
+HETATM 5557 O HOH B 389 3.891 42.665 81.958 1.00 28.85 O
+HETATM 5558 O HOH B 390 14.554 52.382 55.766 1.00 33.31 O
+HETATM 5559 O HOH B 391 19.390 40.711 45.920 1.00 34.09 O
+HETATM 5560 O HOH B 392 1.779 49.905 71.347 1.00 43.27 O
+HETATM 5561 O HOH B 394 -7.135 21.945 57.471 1.00 38.93 O
+HETATM 5562 O HOH B 395 -4.084 46.475 67.409 1.00 35.80 O
+HETATM 5563 O HOH B 396 -0.011 52.405 62.898 1.00 44.36 O
+HETATM 5564 O HOH B 398 11.370 15.515 60.542 1.00 46.65 O
+HETATM 5565 O HOH B 399 28.570 37.378 53.924 1.00 58.86 O
+HETATM 5566 O HOH B 400 0.768 30.031 56.195 1.00 48.36 O
+HETATM 5567 O HOH B 401 -12.502 46.812 64.587 1.00 41.50 O
+HETATM 5568 O HOH B 402 25.213 40.882 48.238 1.00 46.86 O
+HETATM 5569 O HOH B 403 25.580 22.893 84.946 1.00 45.70 O
+HETATM 5570 O HOH B 404 -2.249 11.540 87.002 1.00 31.82 O
+HETATM 5571 O HOH B 405 25.308 49.851 52.412 1.00 37.89 O
+HETATM 5572 O HOH B 406 24.661 42.533 73.312 1.00 42.30 O
+HETATM 5573 O HOH B 407 2.972 11.241 82.743 1.00 44.00 O
+HETATM 5574 O HOH B 408 13.602 48.749 82.587 1.00 35.11 O
+HETATM 5575 O HOH B 409 27.776 57.429 37.966 1.00 38.85 O
+HETATM 5576 O HOH B 410 12.082 51.920 56.347 1.00 40.47 O
+HETATM 5577 O HOH B 411 27.993 46.209 81.546 1.00 34.53 O
+HETATM 5578 O HOH B 412 -12.836 35.702 59.217 1.00 56.62 O
+HETATM 5579 O HOH B 413 14.774 23.856 76.256 1.00 54.46 O
+HETATM 5580 O HOH B 414 17.265 54.862 74.559 1.00 41.62 O
+HETATM 5581 O HOH B 415 14.436 24.254 94.784 1.00 49.31 O
+HETATM 5582 O HOH B 416 31.277 34.474 57.710 1.00 48.63 O
+HETATM 5583 O HOH B 417 3.921 54.887 60.562 1.00 38.97 O
+HETATM 5584 O HOH B 418 7.279 57.053 60.698 1.00 42.99 O
+HETATM 5585 O HOH B 419 12.783 56.454 69.886 1.00 59.67 O
+HETATM 5586 O HOH B 420 9.287 54.924 62.562 1.00 55.31 O
+HETATM 5587 O HOH B 421 6.435 26.733 64.945 1.00 45.61 O
+HETATM 5588 O HOH B 422 27.163 48.475 71.511 1.00 36.69 O
+HETATM 5589 O HOH B 423 32.717 39.475 56.975 1.00 66.63 O
+HETATM 5590 O HOH B 424 13.945 54.932 62.936 1.00 44.37 O
+HETATM 5591 O HOH B 425 -16.352 27.758 82.727 1.00 59.88 O
+HETATM 5592 O HOH B 426 -10.226 28.273 58.851 1.00 22.92 O
+HETATM 5593 O HOH B 427 15.345 37.556 43.119 1.00 30.79 O
+HETATM 5594 O HOH B 428 14.902 34.782 60.183 1.00 29.59 O
+HETATM 5595 O HOH B 429 12.342 40.180 92.912 1.00 35.70 O
+HETATM 5596 O HOH B 430 18.635 30.601 57.111 1.00 30.88 O
+HETATM 5597 O HOH B 431 -7.115 10.825 84.024 1.00 40.05 O
+HETATM 5598 O HOH B 432 22.562 46.248 86.460 1.00 37.42 O
+HETATM 5599 O HOH B 433 14.941 53.849 75.753 1.00 44.97 O
+HETATM 5600 O HOH B 434 6.418 51.509 76.317 1.00 42.82 O
+HETATM 5601 O HOH B 435 -3.377 13.540 89.150 1.00 49.63 O
+HETATM 5602 O HOH B 436 17.524 26.763 66.833 1.00 45.16 O
+HETATM 5603 O HOH B 437 14.163 52.054 80.027 1.00 42.40 O
+HETATM 5604 O HOH B 438 -14.268 19.606 63.930 1.00 53.29 O
+HETATM 5605 O HOH B 439 24.388 33.353 87.899 1.00 51.55 O
+HETATM 5606 O HOH B 440 26.499 35.132 53.196 1.00 50.30 O
+HETATM 5607 O HOH B 441 20.910 24.375 68.203 1.00 41.47 O
+HETATM 5608 O HOH B 442 12.592 22.023 74.150 1.00 48.62 O
+HETATM 5609 O HOH B 443 27.810 51.436 60.171 1.00 47.01 O
+HETATM 5610 O HOH B 444 20.572 32.850 90.940 1.00 39.22 O
+HETATM 5611 O HOH B 445 7.283 45.036 85.904 1.00 47.83 O
+HETATM 5612 O HOH B 446 19.416 49.282 52.360 1.00 62.10 O
+HETATM 5613 O HOH B 447 -6.500 47.108 60.081 1.00 46.04 O
+HETATM 5614 O HOH B 448 29.110 49.027 69.273 1.00 40.84 O
+HETATM 5615 O HOH B 449 23.798 27.669 65.029 1.00 46.57 O
+HETATM 5616 O HOH B 450 -15.229 44.157 67.678 1.00 50.74 O
+HETATM 5617 O HOH B 451 18.882 25.750 65.244 1.00 45.94 O
+HETATM 5618 O HOH B 452 16.513 52.748 52.843 1.00 51.82 O
+HETATM 5619 O HOH B 453 30.078 50.954 62.668 1.00 65.77 O
+HETATM 5620 O HOH B 454 -13.923 24.553 83.514 1.00 42.38 O
+HETATM 5621 O HOH B 455 11.887 26.977 67.039 1.00 50.06 O
+HETATM 5622 O HOH B 456 4.457 32.773 95.166 1.00 54.07 O
+HETATM 5623 O HOH B 457 22.641 45.784 49.039 1.00 62.26 O
+MASTER 336 2 0 28 20 0 0 9 5621 2 0 54
+END
--- /dev/null
+package jalview.ext.jmol;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+import jalview.gui.SequenceRenderer;
+import jalview.structure.StructureMappingcommandSet;
+import jalview.structure.StructureSelectionManager;
+
+import org.testng.annotations.Test;
+
+public class JmolCommandsTest
+{
+
+ @Test(groups = { "Functional" })
+ public void testGetColourBySequenceCommand_noFeatures()
+ {
+ SequenceI seq1 = new Sequence("seq1", "MHRSQTRALK");
+ SequenceI seq2 = new Sequence("seq2", "MRLEITQSGD");
+ AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
+ AlignFrame af = new AlignFrame(al, 800, 500);
+ SequenceRenderer sr = new SequenceRenderer(af.getViewport());
+ SequenceI[][] seqs = new SequenceI[][] { { seq1 }, { seq2 } };
+ String[] files = new String[] { "seq1.pdb", "seq2.pdb" };
+ StructureSelectionManager ssm = new StructureSelectionManager();
+
+ // need some mappings!
+
+ StructureMappingcommandSet[] commands = JmolCommands
+ .getColourBySequenceCommand(ssm, files, seqs, sr, null, al);
+ }
+}
* @author jimp
*
*/
-public class PDBFileWithJmolTest
+public class JmolParserTest
{
/*
* 1GAQ has been reduced to alpha carbons only
* 1QCF is the full PDB file including headers, HETATM etc
*/
String[] testFile = new String[] { "./examples/1GAQ.txt",
- "./test/jalview/ext/jmol/1QCF.pdb" }; // ,
+ "./test/jalview/ext/jmol/1xyz.pdb",
+ "./test/jalview/ext/jmol/1qcf.pdb" };
//@formatter:off
// a modified and very cut-down extract of 4UJ4
{
PDBfile mctest = new PDBfile(false, false, false, pdbStr,
AppletFormatAdapter.FILE);
- PDBFileWithJmol jtest = new PDBFileWithJmol(pdbStr,
+ JmolParser jtest = new JmolParser(false, false, false, pdbStr,
jalview.io.AppletFormatAdapter.FILE);
Vector<SequenceI> seqs = jtest.getSeqs(), mcseqs = mctest.getSeqs();
{
PDBfile mctest = new PDBfile(false, false, false, pdbWithChainBreak,
AppletFormatAdapter.PASTE);
- PDBFileWithJmol jtest = new PDBFileWithJmol(pdbWithChainBreak,
+ boolean annotFromStructure = false;
+ boolean localSecondaryStruct = false;
+ boolean serviceSecondaryStruct = false;
+ JmolParser jtest = new JmolParser(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct,
+ pdbWithChainBreak,
jalview.io.AppletFormatAdapter.PASTE);
Vector<SequenceI> seqs = jtest.getSeqs();
Vector<SequenceI> mcseqs = mctest.getSeqs();
{
PDBfile mctest = new PDBfile(false, false, false, pdbWithAltLoc,
AppletFormatAdapter.PASTE);
- PDBFileWithJmol jtest = new PDBFileWithJmol(pdbWithAltLoc,
+ boolean annotFromStructure = false;
+ boolean localSecondaryStruct = false;
+ boolean serviceSecondaryStruct = false;
+ JmolParser jtest = new JmolParser(annotFromStructure,
+ localSecondaryStruct, serviceSecondaryStruct, pdbWithAltLoc,
jalview.io.AppletFormatAdapter.PASTE);
Vector<SequenceI> seqs = jtest.getSeqs();
Vector<SequenceI> mcseqs = mctest.getSeqs();
@Test(groups = "Functional")
public void testSetSecondaryStructure()
{
- PDBFileWithJmol testee = new PDBFileWithJmol();
+ JmolParser testee = new JmolParser();
char[] struct = new char[10];
char[] structCode = new char[10];
struct[0] = '1';
--- /dev/null
+package jalview.ext.so;
+
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.ext.so.SequenceOntology;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyI;
+
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class SequenceOntologyTest
+{
+ private SequenceOntologyI so;
+
+ @BeforeClass
+ public void setUp() {
+ long now = System.currentTimeMillis();
+ SequenceOntologyFactory.setInstance(new SequenceOntology());
+ long elapsed = System.currentTimeMillis() - now;
+ System.out.println("Load and cache of Sequence Ontology took "
+ + elapsed + "ms");
+ so = SequenceOntologyFactory.getInstance();
+ }
+
+ @AfterClass
+ public void tearDown()
+ {
+ SequenceOntologyFactory.setInstance(null);
+ }
+
+ @Test(groups = "Functional")
+ public void testIsA()
+ {
+ assertFalse(so.isA(null, null));
+ assertFalse(so.isA(null, "SO:0000087"));
+ assertFalse(so.isA("SO:0000087", null));
+ assertFalse(so.isA("complete", "garbage"));
+
+ assertTrue(so.isA("SO:0000087", "SO:0000704"));
+ assertFalse(so.isA("SO:0000704", "SO:0000087"));
+ assertTrue(so.isA("SO:0000736", "SO:0000735"));
+
+ // same thing:
+ assertTrue(so.isA("micronuclear_sequence", "micronuclear_sequence"));
+ // direct parent:
+ assertTrue(so.isA("micronuclear_sequence", "organelle_sequence"));
+ // grandparent:
+ assertTrue(so.isA("micronuclear_sequence", "sequence_location"));
+ // great-grandparent:
+ assertTrue(so.isA("micronuclear_sequence", "sequence_attribute"));
+
+ // same thing by name / description:
+ assertTrue(so.isA("micronuclear_sequence", "SO:0000084"));
+ assertTrue(so.isA("SO:0000084", "micronuclear_sequence"));
+ assertTrue(so.isA("SO:0000084", "SO:0000084"));
+
+ // SO name to description:
+ assertTrue(so.isA("SO:0000084", "organelle_sequence"));
+ assertTrue(so.isA("SO:0000084", "sequence_location"));
+ assertTrue(so.isA("SO:0000084", "sequence_attribute"));
+
+ // description to SO name:
+ assertTrue(so.isA("micronuclear_sequence", "SO:0000736"));
+ assertTrue(so.isA("micronuclear_sequence", "SO:0000735"));
+ assertTrue(so.isA("micronuclear_sequence", "SO:0000400"));
+ }
+
+ @Test(groups = "Functional")
+ public void testIsCDS()
+ {
+ assertTrue(so.isA("CDS", "CDS"));
+ assertTrue(so.isA("CDS_predicted", "CDS"));
+ assertTrue(so.isA("transposable_element_CDS", "CDS"));
+ assertTrue(so.isA("edited_CDS", "CDS"));
+ assertTrue(so.isA("CDS_independently_known", "CDS"));
+ assertTrue(so.isA("CDS_fragment", "CDS"));
+ assertFalse(so.isA("CDS_region", "CDS"));// part_of
+ assertFalse(so.isA("polypeptide", "CDS")); // derives_from
+ }
+}
--- /dev/null
+package jalview.fts.core;
+
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class FTSRestClientTest
+{
+ private FTSRestClient ftsRestClient;
+
+ @BeforeMethod(alwaysRun = true)
+ public void setup()
+ {
+ ftsRestClient = new FTSRestClient()
+ {
+
+ @Override
+ public String getColumnDataConfigFileName()
+ {
+ return "/fts/uniprot_data_columns.txt";
+ }
+
+ @Override
+ public FTSRestResponse executeRequest(FTSRestRequest ftsRequest)
+ throws Exception
+ {
+ return null;
+ }
+ };
+ }
+
+ @Test(groups = { "Functional" })
+ public void getPrimaryKeyColumIndexTest()
+ {
+ Collection<FTSDataColumnI> wantedFields = ftsRestClient
+ .getAllDefaulDisplayedDataColumns();
+ int foundIndex = -1;
+ try
+ {
+ Assert.assertEquals(foundIndex, -1);
+ foundIndex = ftsRestClient.getPrimaryKeyColumIndex(wantedFields,
+ false);
+ Assert.assertEquals(foundIndex, 0);
+ foundIndex = ftsRestClient
+ .getPrimaryKeyColumIndex(wantedFields, true);
+ Assert.assertEquals(foundIndex, 1);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ Assert.fail("Exception thrown while testing...");
+ }
+ }
+
+ @Test(groups = { "Functional" })
+ public void getAllDefaulDisplayedDataColumns()
+ {
+ Assert.assertNotNull(ftsRestClient.getAllDefaulDisplayedDataColumns());
+ Assert.assertTrue(!ftsRestClient.getAllDefaulDisplayedDataColumns()
+ .isEmpty());
+ Assert.assertEquals(ftsRestClient.getAllDefaulDisplayedDataColumns()
+ .size(), 7);
+ }
+
+ @Test(groups = { "Functional" })
+ public void getDataColumnsFieldsAsCommaDelimitedString()
+ {
+ Collection<FTSDataColumnI> wantedFields = ftsRestClient
+ .getAllDefaulDisplayedDataColumns();
+ String actual = ftsRestClient
+ .getDataColumnsFieldsAsCommaDelimitedString(wantedFields);
+ Assert.assertEquals(actual,
+ "id,entry name,protein names,genes,organism,length,reviewed");
+ }
+
+
+ @Test(groups = { "Functional" })
+ public void getAllFTSDataColumns()
+ {
+ Collection<FTSDataColumnI> allFields = ftsRestClient
+ .getAllFTSDataColumns();
+ Assert.assertNotNull(allFields);
+ Assert.assertEquals(allFields.size(), 117);
+ }
+
+ @Test(groups = { "Functional" })
+ public void getSearchableDataColumns()
+ {
+ Collection<FTSDataColumnI> searchalbeFields = ftsRestClient
+ .getSearchableDataColumns();
+ Assert.assertNotNull(searchalbeFields);
+ Assert.assertEquals(searchalbeFields.size(), 30);
+ }
+
+ @Test(groups = { "Functional" })
+ public void getPrimaryKeyColumn()
+ {
+ FTSDataColumnI expectedPKColumn;
+ try
+ {
+ expectedPKColumn = ftsRestClient
+ .getDataColumnByNameOrCode("Uniprot Id");
+ Assert.assertNotNull(ftsRestClient.getPrimaryKeyColumn());
+ Assert.assertEquals(ftsRestClient.getPrimaryKeyColumn(),
+ expectedPKColumn);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ Assert.fail("Exception thrown while testing...");
+ }
+ }
+
+ @Test(groups = { "Functional" })
+ public void getDataColumnByNameOrCode()
+ {
+ try
+ {
+ FTSDataColumnI foundDataCol = ftsRestClient
+ .getDataColumnByNameOrCode("genes");
+ Assert.assertNotNull(foundDataCol);
+ Assert.assertEquals(foundDataCol.getName(), "Gene Names");
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ Assert.fail("Exception thrown while testing...");
+ }
+ }
+
+ @Test(groups = { "Functional" })
+ public void getDataColumnGroupById()
+ {
+ FTSDataColumnGroupI foundDataColGroup;
+ try
+ {
+ foundDataColGroup = ftsRestClient.getDataColumnGroupById("g3");
+ Assert.assertNotNull(foundDataColGroup);
+ Assert.assertEquals(foundDataColGroup.getName(), "Names & Taxonomy");
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Test(groups = { "Functional" })
+ public void getDefaultResponsePageSize()
+ {
+ int defaultResSize = ftsRestClient.getDefaultResponsePageSize();
+ Assert.assertEquals(defaultResSize, 100);
+ }
+
+ @Test(groups = { "Functional" })
+ public void getColumnMinWidthTest()
+ {
+ try
+ {
+ FTSDataColumnI foundDataCol = ftsRestClient
+ .getDataColumnByNameOrCode("Protein names");
+ Assert.assertNotNull(foundDataCol);
+ int actualColMinWidth = foundDataCol.getMinWidth();
+ Assert.assertEquals(actualColMinWidth, 300);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ Assert.fail("Exception thrown while testing...");
+ }
+ }
+
+ @Test(groups = { "Functional" })
+ public void getColumnMaxWidthTest()
+ {
+ try
+ {
+ FTSDataColumnI foundDataCol = ftsRestClient
+ .getDataColumnByNameOrCode("Protein names");
+ Assert.assertNotNull(foundDataCol);
+ int actualColMinWidth = foundDataCol.getMaxWidth();
+ Assert.assertEquals(actualColMinWidth, 1500);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ Assert.fail("Exception thrown while testing...");
+ }
+ }
+
+ @Test(groups = { "Functional" })
+ public void getColumnPreferredWidthTest()
+ {
+ try
+ {
+ FTSDataColumnI foundDataCol = ftsRestClient
+ .getDataColumnByNameOrCode("Protein names");
+ Assert.assertNotNull(foundDataCol);
+ int actualColMinWidth = foundDataCol.getPreferredWidth();
+ Assert.assertEquals(actualColMinWidth, 500);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ Assert.fail("Exception thrown while testing...");
+ }
+ }
+
+ @Test(groups = { "Functional" })
+ public void getColumnClassTest()
+ {
+ try
+ {
+ FTSDataColumnI foundDataCol = ftsRestClient
+ .getDataColumnByNameOrCode("Protein names");
+ Assert.assertNotNull(foundDataCol);
+ Assert.assertEquals(foundDataCol.getDataColumnClass(), String.class);
+ foundDataCol = ftsRestClient.getDataColumnByNameOrCode("length");
+ Assert.assertNotNull(foundDataCol);
+ Assert.assertEquals(foundDataCol.getDataColumnClass(), Integer.class);
+ // foundDataCol = ftsRestClient.getDataColumnByNameOrCode("length");
+ // Assert.assertNotNull(foundDataCol);
+ // Assert.assertEquals(foundDataCol.getDataColumnClass(), Double.class);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ Assert.fail("Exception thrown while testing...");
+ }
+ }
+
+ @Test(groups = { "Functional" })
+ public void coverageForEqualsAndHashFunction()
+ {
+ Set<FTSDataColumnI> uniqueSet = new HashSet<FTSDataColumnI>();
+ Collection<FTSDataColumnI> searchableCols = ftsRestClient
+ .getSearchableDataColumns();
+ for (FTSDataColumnI foundCol : searchableCols)
+ {
+ uniqueSet.add(foundCol);
+ uniqueSet.add(foundCol);
+ }
+ Assert.assertTrue(!uniqueSet.isEmpty());
+ Assert.assertEquals(uniqueSet.size(), 30);
+ }
+
+ @Test(groups = { "Functional" })
+ public void coverageForMiscellaneousBranches()
+ {
+ String actual = ftsRestClient.getPrimaryKeyColumn().toString();
+ Assert.assertEquals(actual, "Uniprot Id");
+
+ String actualGroupStr;
+ try
+ {
+ actualGroupStr = ftsRestClient.getDataColumnGroupById("g4")
+ .toString();
+ Assert.assertEquals(actualGroupStr, "Procedures & Softwares");
+ actualGroupStr = ftsRestClient.getDataColumnGroupById(
+ "unavailable group").toString();
+ } catch (Exception e)
+ {
+ Assert.assertTrue(true);
+ }
+
+ String actualResourseFile = ftsRestClient
+ .getResourceFile("/fts/uniprot_data_columns.txt");
+ Assert.assertNotNull(actualResourseFile);
+ Assert.assertTrue(actualResourseFile.length() > 31);
+ }
+
+ @Test(groups = { "Functional" }, expectedExceptions = Exception.class)
+ public void coverageForExceptionBranches() throws Exception
+ {
+ try
+ {
+ ftsRestClient.getDataColumnByNameOrCode("unavailable column");
+ } catch (Exception e)
+ {
+ System.out.println(e.getMessage());
+ String expectedMessage = "Couldn't find data column with name : unavailable column";
+ Assert.assertEquals(e.getMessage(), expectedMessage);
+ }
+ try
+ {
+ ftsRestClient.getDataColumnGroupById("unavailable column group Id");
+ } catch (Exception e)
+ {
+ System.out.println(e.getMessage());
+ String expectedMessage = "Couldn't find data column group with id : unavailable column group Id";
+ Assert.assertEquals(e.getMessage(), expectedMessage);
+ }
+
+ ftsRestClient.getDataColumnByNameOrCode("unavailable column");
+
+ ftsRestClient.getResourceFile("unavailable resource file");
+
+ }
+
+}
* along with Jalview. If not, see <http://www.gnu.org/licenses/>.
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
-package jalview.gui;
+package jalview.fts.service.pdb;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
+import jalview.fts.service.pdb.PDBFTSPanel;
+
import javax.swing.JInternalFrame;
import javax.swing.JTextField;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-public class PDBSearchPanelTest
+public class PDBFTSPanelTest
{
@BeforeMethod(alwaysRun = true)
@Test(groups = { "Functional" })
public void populateCmbSearchTargetOptionsTest()
{
- PDBSearchPanel searchPanel = new PDBSearchPanel(null);
+ PDBFTSPanel searchPanel = new PDBFTSPanel(null);
assertTrue(searchPanel.getCmbSearchTarget().getItemCount() > 0);
searchPanel.populateCmbSearchTargetOptions();
}
public void testDecodeSearchTerm()
{
String expectedString = "1xyz OR text:2xyz OR text:3xyz";
- String outcome = PDBSearchPanel.decodeSearchTerm("1xyz:A;2xyz;3xyz",
+ String outcome = PDBFTSPanel.decodeSearchTerm("1xyz:A;2xyz;3xyz",
"text");
// System.out.println("1 >>>>>>>>>>> " + outcome);
assertEquals(expectedString, outcome);
expectedString = "1xyz";
- outcome = PDBSearchPanel.decodeSearchTerm("1xyz", "text");
+ outcome = PDBFTSPanel.decodeSearchTerm("1xyz", "text");
// System.out.println("2 >>>>>>>>>>> " + outcome);
assertEquals(expectedString, outcome);
}
{
String expectedString = "1xyz:A";
- String outcome = PDBSearchPanel.getPDBIdwithSpecifiedChain("1xyz",
+ String outcome = PDBFTSPanel.getPDBIdwithSpecifiedChain("1xyz",
"2xyz;3xyz;1xyz:A");
System.out.println("1 >>>>>>>>>>> " + outcome);
assertEquals(expectedString, outcome);
expectedString = "2xyz";
- outcome = PDBSearchPanel.getPDBIdwithSpecifiedChain("2xyz",
+ outcome = PDBFTSPanel.getPDBIdwithSpecifiedChain("2xyz",
"1xyz:A;2xyz;3xyz");
System.out.println("2 >>>>>>>>>>> " + outcome);
assertEquals(expectedString, outcome);
expectedString = "2xyz:A";
- outcome = PDBSearchPanel.getPDBIdwithSpecifiedChain("2xyz", "2xyz:A");
+ outcome = PDBFTSPanel.getPDBIdwithSpecifiedChain("2xyz", "2xyz:A");
System.out.println("3 >>>>>>>>>>> " + outcome);
assertEquals(expectedString, outcome);
}
- @Test(groups = { "Network", "External" }, timeOut = 5000)
+ @Test(groups = { "External" }, timeOut = 7000)
public void txt_search_ActionPerformedTest()
{
- PDBSearchPanel searchPanel = new PDBSearchPanel(null);
+ PDBFTSPanel searchPanel = new PDBFTSPanel(null);
JInternalFrame mainFrame = searchPanel.getMainFrame();
JTextField txt_search = searchPanel.getTxtSearch();
assertTrue(mainFrame.getTitle().length() == 20);
assertTrue(mainFrame.getTitle()
.equalsIgnoreCase("PDB Sequence Fetcher"));
-
txt_search.setText("ABC");
-
+ try
+ {
+ // wait for web-service to handle response
+ Thread.sleep(3000);
+ } catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
assertTrue(mainFrame.getTitle().length() > 20);
assertTrue(!mainFrame.getTitle().equalsIgnoreCase(
"PDB Sequence Fetcher"));
* along with Jalview. If not, see <http://www.gnu.org/licenses/>.
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
-package jalview.ws.dbsources;
+package jalview.fts.service.pdb;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
-import jalview.ws.uimodel.PDBRestRequest;
-import jalview.ws.uimodel.PDBRestResponse;
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
import java.io.BufferedReader;
import java.io.FileReader;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
-public class PDBRestClientTest
+public class PDBFTSRestClientTest
{
@BeforeMethod(alwaysRun = true)
@Test(groups = { "External", "Network" })
public void executeRequestTest()
{
- List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
- wantedFields.add(PDBDocField.MOLECULE_TYPE);
- wantedFields.add(PDBDocField.PDB_ID);
- wantedFields.add(PDBDocField.GENUS);
- wantedFields.add(PDBDocField.GENE_NAME);
- wantedFields.add(PDBDocField.TITLE);
-
- PDBRestRequest request = new PDBRestRequest();
+ List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
+ try
+ {
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("molecule_type"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("pdb_id"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("genus"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("gene_name"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("title"));
+ } catch (Exception e1)
+ {
+ e1.printStackTrace();
+ }
+
+ FTSRestRequest request = new FTSRestRequest();
request.setAllowEmptySeq(false);
request.setResponseSize(100);
request.setFieldToSearchBy("text:");
request.setSearchTerm("abc");
request.setWantedFields(wantedFields);
- PDBRestResponse response;
+ FTSRestResponse response;
try
{
- response = new PDBRestClient().executeRequest(request);
+ response = PDBFTSRestClient.getInstance().executeRequest(request);
} catch (Exception e)
{
e.printStackTrace();
@Test(groups = { "Functional" })
public void getPDBDocFieldsAsCommaDelimitedStringTest()
{
- List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
- wantedFields.add(PDBDocField.MOLECULE_TYPE);
- wantedFields.add(PDBDocField.PDB_ID);
- wantedFields.add(PDBDocField.GENUS);
- wantedFields.add(PDBDocField.GENE_NAME);
- wantedFields.add(PDBDocField.TITLE);
+ List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
+ try
+ {
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("molecule_type"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("pdb_id"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("genus"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("gene_name"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("title"));
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
String expectedResult = "molecule_type,pdb_id,genus,gene_name,title";
- String actualResult = PDBRestClient
- .getPDBDocFieldsAsCommaDelimitedString(wantedFields);
+ String actualResult = PDBFTSRestClient.getInstance()
+ .getDataColumnsFieldsAsCommaDelimitedString(wantedFields);
assertEquals("", expectedResult, actualResult);
}
@Test(groups = { "External, Network" })
public void parsePDBJsonExceptionStringTest()
{
- List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
- wantedFields.add(PDBDocField.MOLECULE_TYPE);
- wantedFields.add(PDBDocField.PDB_ID);
- wantedFields.add(PDBDocField.GENUS);
- wantedFields.add(PDBDocField.GENE_NAME);
- wantedFields.add(PDBDocField.TITLE);
-
- PDBRestRequest request = new PDBRestRequest();
+ List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
+ try
+ {
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("molecule_type"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("pdb_id"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("genus"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("gene_name"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("title"));
+ } catch (Exception e1)
+ {
+ e1.printStackTrace();
+ }
+
+ FTSRestRequest request = new FTSRestRequest();
request.setAllowEmptySeq(false);
request.setResponseSize(100);
request.setFieldToSearchBy("text:");
e.printStackTrace();
}
- String parsedErrorResponse = PDBRestClient
+ String parsedErrorResponse = PDBFTSRestClient
.parseJsonExceptionString(jsonErrorResponse);
String expectedErrorMsg = "\n============= PDB Rest Client RunTime error =============\n"
}
@Test(
- groups = { "External", "Network" },
+ groups = { "External" },
expectedExceptions = Exception.class)
public void testForExpectedRuntimeException() throws Exception
{
- List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
- wantedFields.add(PDBDocField.PDB_ID);
+ List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("pdb_id"));
- PDBRestRequest request = new PDBRestRequest();
+ FTSRestRequest request = new FTSRestRequest();
request.setFieldToSearchBy("text:");
request.setSearchTerm("abc OR text:go:abc");
request.setWantedFields(wantedFields);
- new PDBRestClient().executeRequest(request);
+ PDBFTSRestClient.getInstance().executeRequest(request);
}
+ // JBP: Is this actually external ? Looks like it is mocked
@Test(groups = { "External" })
public void parsePDBJsonResponseTest()
{
- List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
- wantedFields.add(PDBDocField.MOLECULE_TYPE);
- wantedFields.add(PDBDocField.PDB_ID);
- wantedFields.add(PDBDocField.GENUS);
- wantedFields.add(PDBDocField.GENE_NAME);
- wantedFields.add(PDBDocField.TITLE);
-
- PDBRestRequest request = new PDBRestRequest();
+ List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
+ try
+ {
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("molecule_type"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("pdb_id"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("genus"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("gene_name"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("title"));
+ } catch (Exception e1)
+ {
+ e1.printStackTrace();
+ }
+
+ FTSRestRequest request = new FTSRestRequest();
request.setAllowEmptySeq(false);
request.setWantedFields(wantedFields);
{
e.printStackTrace();
}
- PDBRestResponse response = PDBRestClient.parsePDBJsonResponse(
+ FTSRestResponse response = PDBFTSRestClient.parsePDBJsonResponse(
jsonString, request);
assertTrue(response.getSearchSummary() != null);
assertTrue(response.getNumberOfItemsFound() == 931);
@Test(groups = { "Functional" })
public void getPDBIdColumIndexTest()
{
- List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
- wantedFields.add(PDBDocField.MOLECULE_TYPE);
- wantedFields.add(PDBDocField.GENUS);
- wantedFields.add(PDBDocField.GENE_NAME);
- wantedFields.add(PDBDocField.TITLE);
- wantedFields.add(PDBDocField.PDB_ID);
- assertEquals(5, PDBRestClient.getPDBIdColumIndex(wantedFields, true));
- assertEquals(4, PDBRestClient.getPDBIdColumIndex(wantedFields, false));
+ List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
+ try
+ {
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("molecule_type"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("genus"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("gene_name"));
+ wantedFields.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("title"));
+ wantedFields
+.add(PDBFTSRestClient.getInstance()
+ .getDataColumnByNameOrCode("pdb_id"));
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ try
+ {
+ assertEquals(5,
+ PDBFTSRestClient.getInstance()
+ .getPrimaryKeyColumIndex(wantedFields, true));
+ assertEquals(4,
+ PDBFTSRestClient.getInstance()
+ .getPrimaryKeyColumIndex(wantedFields, false));
+ } catch (Exception e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
@Test(groups = { "External" })
// Build request parameters for the REST Request
WebResource webResource = client
- .resource(PDBRestClient.PDB_SEARCH_ENDPOINT)
+ .resource(PDBFTSRestClient.PDB_SEARCH_ENDPOINT)
.queryParam("wt", "json").queryParam("rows", String.valueOf(1))
.queryParam("q", "text:abc AND molecule_sequence:['' TO *]");
JSONObject pdbJsonDoc = docIter.next();
- for (PDBDocField field : PDBDocField.values())
+ for (FTSDataColumnI field : PDBFTSRestClient.getInstance()
+ .getAllFTSDataColumns())
{
- if (field == PDBDocField.ALL)
+ if (field.getName().equalsIgnoreCase("ALL"))
{
continue;
}
--- /dev/null
+package jalview.gui;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+
+import java.util.List;
+
+import org.testng.annotations.Test;
+
+public class AlignFrameTest
+{
+
+ @Test
+ public void testHideFeatureColumns()
+ {
+ SequenceI seq1 = new Sequence("Seq1", "ABCDEFGHIJ");
+ SequenceI seq2 = new Sequence("Seq2", "ABCDEFGHIJ");
+ seq1.addSequenceFeature(new SequenceFeature("Metal", "", 1, 5,
+ Float.NaN, null));
+ seq2.addSequenceFeature(new SequenceFeature("Metal", "", 6, 10,
+ Float.NaN, null));
+ seq1.addSequenceFeature(new SequenceFeature("Turn", "", 2, 4,
+ Float.NaN, null));
+ seq2.addSequenceFeature(new SequenceFeature("Turn", "", 7, 9,
+ Float.NaN, null));
+ AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
+ AlignFrame af = new AlignFrame(al, al.getWidth(), al.getHeight());
+
+ /*
+ * hiding a feature not present does nothing
+ */
+ assertFalse(af.hideFeatureColumns("exon", true));
+ assertTrue(af.getViewport().getColumnSelection().isEmpty());
+ assertTrue(af.getViewport().getColumnSelection().getHiddenColumns()
+ .isEmpty());
+ assertFalse(af.hideFeatureColumns("exon", false));
+ assertTrue(af.getViewport().getColumnSelection().isEmpty());
+ assertTrue(af.getViewport().getColumnSelection().getHiddenColumns()
+ .isEmpty());
+
+ /*
+ * hiding a feature in all columns does nothing
+ */
+ assertFalse(af.hideFeatureColumns("Metal", true));
+ assertTrue(af.getViewport().getColumnSelection().isEmpty());
+ List<int[]> hidden = af.getViewport().getColumnSelection()
+ .getHiddenColumns();
+ assertTrue(hidden.isEmpty());
+
+ /*
+ * hide a feature present in some columns
+ * sequence positions [2-4], [7-9] are column positions
+ * [1-3], [6-8] base zero
+ */
+ assertTrue(af.hideFeatureColumns("Turn", true));
+ hidden = af.getViewport().getColumnSelection()
+ .getHiddenColumns();
+ assertEquals(2, hidden.size());
+ assertEquals(1, hidden.get(0)[0]);
+ assertEquals(3, hidden.get(0)[1]);
+ assertEquals(6, hidden.get(1)[0]);
+ assertEquals(8, hidden.get(1)[1]);
+ }
+}
import jalview.io.FormatAdapter;
import jalview.structure.StructureSelectionManager;
-import java.util.LinkedHashSet;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
AlignedCodonFrame acf1 = new AlignedCodonFrame();
AlignedCodonFrame acf2 = new AlignedCodonFrame();
- Set<AlignedCodonFrame> mappings = new LinkedHashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings = new ArrayList<AlignedCodonFrame>();
mappings.add(acf1);
mappings.add(acf2);
af1.getViewport().getAlignment().setCodonFrames(mappings);
*/
StructureSelectionManager ssm = StructureSelectionManager
.getStructureSelectionManager(Desktop.instance);
- assertEquals(2, ssm.seqmappings.size());
- assertTrue(ssm.seqmappings.contains(acf1));
- assertTrue(ssm.seqmappings.contains(acf2));
+ assertEquals(2, ssm.getSequenceMappings().size());
+ assertTrue(ssm.getSequenceMappings().contains(acf1));
+ assertTrue(ssm.getSequenceMappings().contains(acf2));
/*
* Close the second view. Verify that mappings are not removed as the first
* view still holds a reference to them.
*/
af1.closeMenuItem_actionPerformed(false);
- assertEquals(2, ssm.seqmappings.size());
- assertTrue(ssm.seqmappings.contains(acf1));
- assertTrue(ssm.seqmappings.contains(acf2));
+ assertEquals(2, ssm.getSequenceMappings().size());
+ assertTrue(ssm.getSequenceMappings().contains(acf1));
+ assertTrue(ssm.getSequenceMappings().contains(acf2));
}
/**
AlignedCodonFrame acf2 = new AlignedCodonFrame();
AlignedCodonFrame acf3 = new AlignedCodonFrame();
- Set<AlignedCodonFrame> mappings1 = new LinkedHashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings1 = new ArrayList<AlignedCodonFrame>();
mappings1.add(acf1);
af1.getViewport().getAlignment().setCodonFrames(mappings1);
- Set<AlignedCodonFrame> mappings2 = new LinkedHashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings2 = new ArrayList<AlignedCodonFrame>();
mappings2.add(acf2);
mappings2.add(acf3);
af2.getViewport().getAlignment().setCodonFrames(mappings2);
* AlignFrame1 has mapping acf1, AlignFrame2 has acf2 and acf3
*/
- Set<AlignedCodonFrame> ssmMappings = ssm.seqmappings;
+ List<AlignedCodonFrame> ssmMappings = ssm.getSequenceMappings();
assertEquals(0, ssmMappings.size());
ssm.registerMapping(acf1);
assertEquals(1, ssmMappings.size());
AlignedCodonFrame acf2 = new AlignedCodonFrame();
AlignedCodonFrame acf3 = new AlignedCodonFrame();
- Set<AlignedCodonFrame> mappings1 = new LinkedHashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings1 = new ArrayList<AlignedCodonFrame>();
mappings1.add(acf1);
mappings1.add(acf2);
af1.getViewport().getAlignment().setCodonFrames(mappings1);
- Set<AlignedCodonFrame> mappings2 = new LinkedHashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings2 = new ArrayList<AlignedCodonFrame>();
mappings2.add(acf2);
mappings2.add(acf3);
af2.getViewport().getAlignment().setCodonFrames(mappings2);
* AlignFrame1 has mappings acf1 and acf2, AlignFrame2 has acf2 and acf3
*/
- Set<AlignedCodonFrame> ssmMappings = ssm.seqmappings;
+ List<AlignedCodonFrame> ssmMappings = ssm.getSequenceMappings();
assertEquals(0, ssmMappings.size());
ssm.registerMapping(acf1);
assertEquals(1, ssmMappings.size());
public void buildQueryTest()
{
String query = StructureChooser.buildQuery(seq);
- System.out.println(">>>>>>>>>> query : " + query);
+ assertEquals("pdb_id:1tim", query);
+ System.out.println("seq >>>> " + seq);
+ seq.getAllPDBEntries().clear();
+ query = StructureChooser.buildQuery(seq);
assertEquals(
- "4kqy OR text:1tim OR text:XYZ_1 OR text:XYZ_2 OR text:XYZ_3 OR text:XYZ_4",
+ "text:XYZ_1 OR text:XYZ_2 OR text:XYZ_3 OR text:XYZ_4 OR text:4kqy",
query);
+ seq.setDBRefs(null);
+ query = StructureChooser.buildQuery(seq);
+ assertEquals("text:4kqy", query);
}
@Test(groups = { "Functional" })
sc.setStructuresDiscovered(true);
sc.populateFilterComboBox();
+ try
+ {
+ Thread.sleep(2000);
+ } catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
optionsSize = sc.getCmbFilterOption().getItemCount();
assertTrue(optionsSize > 3); // if structures are found, filter options
// should be populated
import java.io.File;
-import org.junit.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
{
for (int q = p + 1; q < avec.length; q++)
{
- Assert.assertNotEquals("Found a duplicate annotation row "
- + avec[p].label, avec[p], avec[q]);
+ assertTrue("Found a duplicate annotation row "
+ + avec[p].label, avec[p] != avec[q]);
}
}
}
FormatAdapter rf = new FormatAdapter();
AlignmentI al = rf.readFile(ff, AppletFormatAdapter.FILE,
- new IdentifyFile().Identify(ff, AppletFormatAdapter.FILE));
+ new IdentifyFile().identify(ff, AppletFormatAdapter.FILE));
// make sure dataset is initialised ? not sure about this
for (int i = 0; i < al.getSequencesArray().length; ++i)
package jalview.io;
import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import jalview.api.FeatureColourI;
+import jalview.api.FeatureRenderer;
+import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceDummy;
import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
import jalview.gui.AlignFrame;
import java.awt.Color;
public class FeaturesFileTest
{
- static String TestFiles[][] = { { "Test example features import/export",
- "examples/uniref50.fa", "examples/exampleFeatures.txt" } };
+ private static String simpleGffFile = "examples/testdata/simpleGff3.gff";
@Test(groups = { "Functional" })
public void testParse() throws Exception
{
- testFeaturesFileIO("Features file test");
- }
-
- public static AlignmentI readAlignmentFile(File f) throws IOException
- {
- System.out.println("Reading file: " + f);
- String ff = f.getPath();
- FormatAdapter rf = new FormatAdapter();
-
- AlignmentI al = rf.readFile(ff, AppletFormatAdapter.FILE,
- new IdentifyFile().Identify(ff, AppletFormatAdapter.FILE));
-
- al.setDataset(null); // creates dataset sequences
- assertNotNull("Couldn't read supplied alignment data.", al);
- return al;
- }
-
- /**
- * Helper method for testing
- *
- * @param testname
- * @param f
- * alignment file
- * @param featFile
- * features file to load on to the alignment
- * @throws IOException
- */
- public static void testFeaturesFileIO(String testname) throws IOException
- {
File f = new File("examples/uniref50.fa");
AlignmentI al = readAlignmentFile(f);
AlignFrame af = new AlignFrame(al, 500, 500);
.getFeatureColours();
FeaturesFile featuresFile = new FeaturesFile(
"examples/exampleFeatures.txt", FormatAdapter.FILE);
- assertTrue("Test " + testname + "\nFailed to parse features file.",
+ assertTrue("Test " + "Features file test"
+ + "\nFailed to parse features file.",
featuresFile.parse(al.getDataset(), colours, true));
/*
assertEquals("netphos", sf.featureGroup);
assertEquals("PHOSPHORYLATION (T)", sf.type);
}
+
+ /**
+ * Test parsing a features file with a mix of Jalview and GFF formatted
+ * content
+ *
+ * @throws Exception
+ */
+ @Test(groups = { "Functional" })
+ public void testParse_mixedJalviewGff() throws Exception
+ {
+ File f = new File("examples/uniref50.fa");
+ AlignmentI al = readAlignmentFile(f);
+ AlignFrame af = new AlignFrame(al, 500, 500);
+ Map<String, FeatureColourI> colours = af.getFeatureRenderer()
+ .getFeatureColours();
+ // GFF2 uses space as name/value separator in column 9
+ String gffData = "METAL\tcc9900\n" + "GFF\n"
+ + "FER_CAPAA\tuniprot\tMETAL\t44\t45\t4.0\t.\t.\tNote Iron-sulfur; Note 2Fe-2S\n"
+ + "FER1_SOLLC\tuniprot\tPfam\t55\t130\t2.0\t.\t.";
+ FeaturesFile featuresFile = new FeaturesFile(gffData,
+ FormatAdapter.PASTE);
+ assertTrue("Failed to parse features file",
+ featuresFile.parse(al.getDataset(), colours, true));
+
+ // verify colours read or synthesized
+ colours = af.getFeatureRenderer().getFeatureColours();
+ assertEquals("1 feature group colours not found", 1, colours.size());
+ assertEquals(colours.get("METAL").getColour(), new Color(0xcc9900));
+
+ // verify feature on FER_CAPAA
+ SequenceFeature[] sfs = al.getSequenceAt(0).getDatasetSequence()
+ .getSequenceFeatures();
+ assertEquals(1, sfs.length);
+ SequenceFeature sf = sfs[0];
+ assertEquals("Iron-sulfur,2Fe-2S", sf.description);
+ assertEquals(44, sf.begin);
+ assertEquals(45, sf.end);
+ assertEquals("uniprot", sf.featureGroup);
+ assertEquals("METAL", sf.type);
+ assertEquals(4f, sf.getScore(), 0.001f);
+
+ // verify feature on FER1_SOLLC
+ sfs = al.getSequenceAt(2).getDatasetSequence().getSequenceFeatures();
+ assertEquals(1, sfs.length);
+ sf = sfs[0];
+ assertEquals("uniprot", sf.description);
+ assertEquals(55, sf.begin);
+ assertEquals(130, sf.end);
+ assertEquals("uniprot", sf.featureGroup);
+ assertEquals("Pfam", sf.type);
+ assertEquals(2f, sf.getScore(), 0.001f);
+ }
+
+ public static AlignmentI readAlignmentFile(File f) throws IOException
+ {
+ System.out.println("Reading file: " + f);
+ String ff = f.getPath();
+ FormatAdapter rf = new FormatAdapter();
+
+ AlignmentI al = rf.readFile(ff, FormatAdapter.FILE,
+ new IdentifyFile().identify(ff, FormatAdapter.FILE));
+
+ al.setDataset(null); // creates dataset sequences
+ assertNotNull("Couldn't read supplied alignment data.", al);
+ return al;
+ }
+
+ /**
+ * Test parsing a features file with GFF formatted content only
+ *
+ * @throws Exception
+ */
+ @Test(groups = { "Functional" })
+ public void testParse_pureGff3() throws Exception
+ {
+ File f = new File("examples/uniref50.fa");
+ AlignmentI al = readAlignmentFile(f);
+ AlignFrame af = new AlignFrame(al, 500, 500);
+ Map<String, FeatureColourI> colours = af.getFeatureRenderer()
+ .getFeatureColours();
+ // GFF3 uses '=' separator for name/value pairs in colum 9
+ String gffData = "##gff-version 3\n"
+ + "FER_CAPAA\tuniprot\tMETAL\t39\t39\t0.0\t.\t.\t"
+ + "Note=Iron-sulfur (2Fe-2S);Note=another note;evidence=ECO:0000255|PROSITE-ProRule:PRU00465\n"
+ + "FER1_SOLLC\tuniprot\tPfam\t55\t130\t3.0\t.\t.\tID=$23";
+ FeaturesFile featuresFile = new FeaturesFile(gffData,
+ FormatAdapter.PASTE);
+ assertTrue("Failed to parse features file",
+ featuresFile.parse(al.getDataset(), colours, true));
+
+ // verify feature on FER_CAPAA
+ SequenceFeature[] sfs = al.getSequenceAt(0).getDatasetSequence()
+ .getSequenceFeatures();
+ assertEquals(1, sfs.length);
+ SequenceFeature sf = sfs[0];
+ // description parsed from Note attribute
+ assertEquals("Iron-sulfur (2Fe-2S),another note", sf.description);
+ assertEquals(39, sf.begin);
+ assertEquals(39, sf.end);
+ assertEquals("uniprot", sf.featureGroup);
+ assertEquals("METAL", sf.type);
+ assertEquals(
+ "Note=Iron-sulfur (2Fe-2S);Note=another note;evidence=ECO:0000255|PROSITE-ProRule:PRU00465",
+ sf.getValue("ATTRIBUTES"));
+
+ // verify feature on FER1_SOLLC1
+ sfs = al.getSequenceAt(2).getDatasetSequence().getSequenceFeatures();
+ assertEquals(1, sfs.length);
+ sf = sfs[0];
+ // ID used for description if available
+ assertEquals("$23", sf.description);
+ assertEquals(55, sf.begin);
+ assertEquals(130, sf.end);
+ assertEquals("uniprot", sf.featureGroup);
+ assertEquals("Pfam", sf.type);
+ assertEquals(3f, sf.getScore(), 0.001f);
+ }
+
+ /**
+ * Test parsing a features file with Jalview format features (but no colour
+ * descriptors or startgroup to give the hint not to parse as GFF)
+ *
+ * @throws Exception
+ */
+ @Test(groups = { "Functional" })
+ public void testParse_jalviewFeaturesOnly() throws Exception
+ {
+ File f = new File("examples/uniref50.fa");
+ AlignmentI al = readAlignmentFile(f);
+ AlignFrame af = new AlignFrame(al, 500, 500);
+ Map<String, FeatureColourI> colours = af.getFeatureRenderer()
+ .getFeatureColours();
+
+ /*
+ * one feature on FER_CAPAA and one on sequence 3 (index 2) FER1_SOLLC
+ */
+ String featureData = "Iron-sulfur (2Fe-2S)\tFER_CAPAA\t-1\t39\t39\tMETAL\n"
+ + "Iron-phosphorus (2Fe-P)\tID_NOT_SPECIFIED\t2\t86\t87\tMETALLIC\n";
+ FeaturesFile featuresFile = new FeaturesFile(featureData,
+ FormatAdapter.PASTE);
+ assertTrue("Failed to parse features file",
+ featuresFile.parse(al.getDataset(), colours, true));
+
+ // verify FER_CAPAA feature
+ SequenceFeature[] sfs = al.getSequenceAt(0).getDatasetSequence()
+ .getSequenceFeatures();
+ assertEquals(1, sfs.length);
+ SequenceFeature sf = sfs[0];
+ assertEquals("Iron-sulfur (2Fe-2S)", sf.description);
+ assertEquals(39, sf.begin);
+ assertEquals(39, sf.end);
+ assertEquals("METAL", sf.type);
+
+ // verify FER1_SOLLC feature
+ sfs = al.getSequenceAt(2).getDatasetSequence().getSequenceFeatures();
+ assertEquals(1, sfs.length);
+ sf = sfs[0];
+ assertEquals("Iron-phosphorus (2Fe-P)", sf.description);
+ assertEquals(86, sf.begin);
+ assertEquals(87, sf.end);
+ assertEquals("METALLIC", sf.type);
+ }
+
+ private void checkDatasetfromSimpleGff3(AlignmentI dataset)
+ {
+ assertEquals("no sequences extracted from GFF3 file", 2,
+ dataset.getHeight());
+
+ SequenceI seq1 = dataset.findName("seq1");
+ SequenceI seq2 = dataset.findName("seq2");
+ assertNotNull(seq1);
+ assertNotNull(seq2);
+ assertFalse(
+ "Failed to replace dummy seq1 with real sequence",
+ seq1 instanceof SequenceDummy
+ && ((SequenceDummy) seq1).isDummy());
+ assertFalse(
+ "Failed to replace dummy seq2 with real sequence",
+ seq2 instanceof SequenceDummy
+ && ((SequenceDummy) seq2).isDummy());
+ String placeholderseq = new SequenceDummy("foo").getSequenceAsString();
+ assertFalse("dummy replacement buggy for seq1",
+ placeholderseq.equals(seq1.getSequenceAsString()));
+ assertFalse("dummy replacement buggy for seq2",
+ placeholderseq.equals(seq2.getSequenceAsString()));
+ assertNotNull("No features added to seq1", seq1.getSequenceFeatures());
+ assertEquals("Wrong number of features", 3,
+ seq1.getSequenceFeatures().length);
+ assertNull(seq2.getSequenceFeatures());
+ assertEquals(
+ "Wrong number of features",
+ 0,
+ seq2.getSequenceFeatures() == null ? 0 : seq2
+ .getSequenceFeatures().length);
+ assertTrue(
+ "Expected at least one CDNA/Protein mapping for seq1",
+ dataset.getCodonFrame(seq1) != null
+ && dataset.getCodonFrame(seq1).size() > 0);
+
+ }
+
+ @Test(groups = { "Functional" })
+ public void readGff3File() throws IOException
+ {
+ FeaturesFile gffreader = new FeaturesFile(true, simpleGffFile,
+ FormatAdapter.FILE);
+ Alignment dataset = new Alignment(gffreader.getSeqsAsArray());
+ gffreader.addProperties(dataset);
+ checkDatasetfromSimpleGff3(dataset);
+ }
+
+ @Test(groups = { "Functional" })
+ public void simpleGff3FileClass() throws IOException
+ {
+ AlignmentI dataset = new Alignment(new SequenceI[] {});
+ FeaturesFile ffile = new FeaturesFile(simpleGffFile,
+ FormatAdapter.FILE);
+
+ boolean parseResult = ffile.parse(dataset, null, false, false);
+ assertTrue("return result should be true", parseResult);
+ checkDatasetfromSimpleGff3(dataset);
+ }
+
+ @Test(groups = { "Functional" })
+ public void simpleGff3FileLoader() throws IOException
+ {
+ AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded(
+ simpleGffFile, FormatAdapter.FILE);
+ assertTrue(
+ "Didn't read the alignment into an alignframe from Gff3 File",
+ af != null);
+ checkDatasetfromSimpleGff3(af.getViewport().getAlignment());
+ }
+
+ @Test(groups = { "Functional" })
+ public void simpleGff3RelaxedIdMatching() throws IOException
+ {
+ AlignmentI dataset = new Alignment(new SequenceI[] {});
+ FeaturesFile ffile = new FeaturesFile(simpleGffFile,
+ FormatAdapter.FILE);
+
+ boolean parseResult = ffile.parse(dataset, null, false, true);
+ assertTrue("return result (relaxedID matching) should be true",
+ parseResult);
+ checkDatasetfromSimpleGff3(dataset);
+ }
+
+ @Test(groups = { "Functional" })
+ public void testPrintJalviewFormat() throws Exception
+ {
+ File f = new File("examples/uniref50.fa");
+ AlignmentI al = readAlignmentFile(f);
+ AlignFrame af = new AlignFrame(al, 500, 500);
+ Map<String, FeatureColourI> colours = af.getFeatureRenderer()
+ .getFeatureColours();
+ String features = "METAL\tcc9900\n"
+ + "GAMMA-TURN\tred|0,255,255|20.0|95.0|below|66.0\n"
+ + "Pfam\tred\n"
+ + "STARTGROUP\tuniprot\n"
+ + "Iron\tFER_CAPAA\t-1\t39\t39\tMETAL\n"
+ + "Turn\tFER_CAPAA\t-1\t36\t38\tGAMMA-TURN\n"
+ + "<html>Pfam domain<a href=\"http://pfam.sanger.ac.uk/family/PF00111\">Pfam_3_4</a></html>\tFER_CAPAA\t-1\t20\t20\tPfam\n"
+ + "ENDGROUP\tuniprot\n";
+ FeaturesFile featuresFile = new FeaturesFile(features,
+ FormatAdapter.PASTE);
+ featuresFile.parse(al.getDataset(), colours, false);
+
+ /*
+ * first with no features displayed
+ */
+ FeatureRenderer fr = af.alignPanel.getFeatureRenderer();
+ Map<String, FeatureColourI> visible = fr
+ .getDisplayedFeatureCols();
+ String exported = featuresFile.printJalviewFormat(
+ al.getSequencesArray(), visible);
+ String expected = "No Features Visible";
+ assertEquals(expected, exported);
+
+ /*
+ * set METAL (in uniprot group) and GAMMA-TURN visible, but not Pfam
+ */
+ fr.setVisible("METAL");
+ fr.setVisible("GAMMA-TURN");
+ visible = fr.getDisplayedFeatureCols();
+ exported = featuresFile.printJalviewFormat(al.getSequencesArray(),
+ visible);
+ expected = "METAL\tcc9900\n"
+ + "GAMMA-TURN\tff0000|00ffff|20.0|95.0|below|66.0\n"
+ + "\nSTARTGROUP\tuniprot\n"
+ + "Iron\tFER_CAPAA\t-1\t39\t39\tMETAL\t0.0\n"
+ + "Turn\tFER_CAPAA\t-1\t36\t38\tGAMMA-TURN\t0.0\n"
+ + "ENDGROUP\tuniprot\n";
+ assertEquals(expected, exported);
+
+ /*
+ * now set Pfam visible
+ */
+ fr.setVisible("Pfam");
+ visible = fr.getDisplayedFeatureCols();
+ exported = featuresFile.printJalviewFormat(al.getSequencesArray(),
+ visible);
+ /*
+ * note the order of feature types is uncontrolled - derives from
+ * FeaturesDisplayed.featuresDisplayed which is a HashSet
+ */
+ expected = "METAL\tcc9900\n"
+ + "Pfam\tff0000\n"
+ + "GAMMA-TURN\tff0000|00ffff|20.0|95.0|below|66.0\n"
+ + "\nSTARTGROUP\tuniprot\n"
+ + "Iron\tFER_CAPAA\t-1\t39\t39\tMETAL\t0.0\n"
+ + "Turn\tFER_CAPAA\t-1\t36\t38\tGAMMA-TURN\t0.0\n"
+ + "<html>Pfam domain<a href=\"http://pfam.sanger.ac.uk/family/PF00111\">Pfam_3_4</a></html>\tFER_CAPAA\t-1\t20\t20\tPfam\t0.0\n"
+ + "ENDGROUP\tuniprot\n";
+ assertEquals(expected, exported);
+ }
}
{
AssertJUnit.assertTrue("Couldn't resolve " + src + " as a valid file",
fp.isValid());
- String type = new IdentifyFile().Identify(fp);
+ String type = new IdentifyFile().identify(fp);
AssertJUnit.assertTrue("Data from '" + src + "' Expected to be '" + fmt
+ "' identified as '" + type + "'", type.equalsIgnoreCase(fmt));
}
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.io;
-
-import static org.testng.AssertJUnit.assertEquals;
-import static org.testng.AssertJUnit.assertFalse;
-import static org.testng.AssertJUnit.assertNotNull;
-import static org.testng.AssertJUnit.assertNull;
-import static org.testng.AssertJUnit.assertTrue;
-
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.SequenceDummy;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-
-import java.io.IOException;
-
-import org.testng.annotations.Test;
-
-public class Gff3tests
-{
-
- private static String exonerateSeqs = "examples/testdata/exonerateseqs.fa",
- exonerateOutput = "examples/testdata/exonerateoutput.gff",
- simpleGff3file = "examples/testdata/simpleGff3.gff";
-
- @Test(groups = { "Functional" })
- public void testExonerateImport()
- {
- // exonerate does not tag sequences after features, so we have a more
- // conventional annotation import test here
-
- FileLoader loader = new FileLoader(false);
-
- AlignFrame af = loader.LoadFileWaitTillLoaded(exonerateSeqs,
- FormatAdapter.FILE);
-
- assertEquals("Unexpected number of DNA protein associations", 0, af
- .getViewport().getAlignment().getCodonFrames().size());
-
- af.loadJalviewDataFile(exonerateOutput, FormatAdapter.FILE, null, null);
-
- assertTrue("Expected at least one DNA protein association", af
- .getViewport().getAlignment().getDataset().getCodonFrames()
- .size() > 0);
-
- }
-
- @Test(groups = { "Functional" })
- public void simpleGff3FileIdentify()
- {
- assertEquals("Didn't recognise file correctly.", IdentifyFile.GFF3File,
- new IdentifyFile().Identify(simpleGff3file, FormatAdapter.FILE));
- }
-
- @Test(groups = { "Functional" })
- public void simpleGff3FileClass() throws IOException
- {
- AlignmentI dataset = new Alignment(new SequenceI[] {});
- FeaturesFile ffile = new FeaturesFile(simpleGff3file,
- FormatAdapter.FILE);
-
- boolean parseResult = ffile.parse(dataset, null, null, false, false);
- assertTrue("return result should be true", parseResult);
- checkDatasetfromSimpleGff3(dataset);
- }
-
- @Test(groups = { "Functional" })
- public void simpleGff3FileLoader() throws IOException
- {
- AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded(
- simpleGff3file, FormatAdapter.FILE);
- assertTrue(
- "Didn't read the alignment into an alignframe from Gff3 File",
- af != null);
- checkDatasetfromSimpleGff3(af.getViewport().getAlignment().getDataset());
- }
-
- @Test(groups = { "Functional" })
- public void simpleGff3RelaxedIdMatching() throws IOException
- {
- AlignmentI dataset = new Alignment(new SequenceI[] {});
- FeaturesFile ffile = new FeaturesFile(simpleGff3file,
- FormatAdapter.FILE);
-
- boolean parseResult = ffile.parse(dataset, null, null, false, true);
- assertTrue("return result (relaxedID matching) should be true",
- parseResult);
- checkDatasetfromSimpleGff3(dataset);
- }
-
- @Test(groups = { "Functional" })
- public void readGff3File() throws IOException
- {
- Gff3File gff3reader = new Gff3File(simpleGff3file, FormatAdapter.FILE);
- Alignment dataset = new Alignment(gff3reader.getSeqsAsArray());
- gff3reader.addProperties(dataset);
- checkDatasetfromSimpleGff3(dataset);
-
- }
-
- private void checkDatasetfromSimpleGff3(AlignmentI dataset)
- {
- assertEquals("no sequences extracted from GFF3 file", 2,
- dataset.getHeight());
-
- SequenceI seq1 = dataset.findName("seq1"), seq2 = dataset
- .findName("seq2");
- assertNotNull(seq1);
- assertNotNull(seq2);
- assertFalse(
- "Failed to replace dummy seq1 with real sequence",
- seq1 instanceof SequenceDummy
- && ((SequenceDummy) seq1).isDummy());
- assertFalse(
- "Failed to replace dummy seq2 with real sequence",
- seq2 instanceof SequenceDummy
- && ((SequenceDummy) seq2).isDummy());
- String placeholderseq = new SequenceDummy("foo").getSequenceAsString();
- assertFalse("dummy replacement buggy for seq1",
- placeholderseq.equals(seq1.getSequenceAsString()));
- assertFalse("dummy replacement buggy for seq2",
- placeholderseq.equals(seq2.getSequenceAsString()));
- assertNotNull("No features added to seq1", seq1.getSequenceFeatures());// !=
- // null);
- assertEquals("Wrong number of features", 3,
- seq1.getSequenceFeatures().length);
- assertNull(seq2.getSequenceFeatures());
- assertEquals(
- "Wrong number of features",
- 0,
- seq2.getSequenceFeatures() == null ? 0 : seq2
- .getSequenceFeatures().length);
- assertTrue(
- "Expected at least one CDNA/Protein mapping for seq1",
- dataset.getCodonFrame(seq1) != null
- && dataset.getCodonFrame(seq1).size() > 0);
-
- }
- // @Test(groups ={ "Functional" })
- // public final void testPrintGFFFormatSequenceIArrayMapOfStringObject()
- // {
- // fail("Not yet implemented");
- // }
- //
- // @Test(groups ={ "Functional" })
- // public final void testAlignFileBooleanStringString()
- // {
- // fail("Not yet implemented");
- // }
-
-}
*/
package jalview.io;
-import static org.junit.Assert.fail;
-
import org.testng.annotations.Test;
public class HtmlFileTest
@Test(groups = { "Functional" }, enabled = false)
public void test()
{
- fail("Not yet implemented");
+ org.testng.AssertJUnit.fail("Not yet implemented");
}
}
*/
package jalview.io;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
{
@Test(groups = { "Functional" }, dataProvider = "identifyFiles")
- public void Identify(String data, String expectedFileType)
+ public void testIdentify(String data, String expectedFileType)
{
String protocol = AppletFormatAdapter.FILE;
IdentifyFile ider = new IdentifyFile();
- String actualFiletype = ider.Identify(data, protocol);
+ String actualFiletype = ider.identify(data, protocol);
Assert.assertEquals(actualFiletype, expectedFileType,
"File identification Failed!");
}
+ /**
+ * Additional tests for Jalview features file
+ */
+ @Test(groups = "Functional")
+ public void testIdentify_featureFile()
+ {
+ IdentifyFile ider = new IdentifyFile();
+
+ /*
+ * Jalview format with features only, no feature colours
+ */
+ String data = "Iron-sulfur (2Fe-2S)\tFER_CAPAA\t-1\t39\t39\tMETAL\n"
+ + "Iron-phosphorus (2Fe-P)\tID_NOT_SPECIFIED\t2\t86\t87\tMETALLIC\n";
+ assertEquals(IdentifyFile.FeaturesFile,
+ ider.identify(data, AppletFormatAdapter.PASTE));
+
+ /*
+ * Jalview feature colour followed by GFF format feature data
+ */
+ data = "METAL\tcc9900\n" + "GFF\n"
+ + "FER_CAPAA\tuniprot\tMETAL\t44\t45\t4.0\t.\t.\n";
+ assertEquals(IdentifyFile.FeaturesFile,
+ ider.identify(data, AppletFormatAdapter.PASTE));
+
+ /*
+ * Feature with '<' in the name (JAL-2098)
+ */
+ data = "kD < 3\tred\n" + "Low kD\tFER_CAPAA\t-1\t39\t39\tkD < 3\n";
+ assertEquals(IdentifyFile.FeaturesFile,
+ ider.identify(data, AppletFormatAdapter.PASTE));
+ }
+
@DataProvider(name = "identifyFiles")
public Object[][] IdentifyFileDP()
{
{ "examples/testdata/test.html", "HTML" },
{ "examples/testdata/test.pileup", "PileUp" },
{ "examples/testdata/test.blc", "BLC" },
- { "examples/testdata/simplegff3.gff", "GFF v2 or v3" },
+ { "examples/exampleFeatures.txt", IdentifyFile.FeaturesFile },
+ { "examples/testdata/simpleGff3.gff", IdentifyFile.FeaturesFile },
{ "examples/testdata/test.jvp", "Jalview" },
+ { "examples/testdata/test.cif", "mmCIF" },
{
"examples/testdata/cullpdb_pc25_res3.0_R0.3_d150729_chains9361.fasta.15316",
"FASTA" },
};
}
+ @Test(groups = "Functional")
+ public void testLooksLikeFeatureData()
+ {
+ IdentifyFile id = new IdentifyFile();
+ assertFalse(id.looksLikeFeatureData(null));
+ assertFalse(id.looksLikeFeatureData(""));
+ // too few columns:
+ assertFalse(id.looksLikeFeatureData("1 \t 2 \t 3 \t 4 \t 5"));
+ // GFF format:
+ assertTrue(id
+ .looksLikeFeatureData("Seq1\tlocal\tHelix\t2456\t2462\tss"));
+ // Jalview format:
+ assertTrue(id.looksLikeFeatureData("Helix\tSeq1\t-1\t2456\t2462\tss"));
+ // non-numeric start column:
+ assertFalse(id.looksLikeFeatureData("Helix\tSeq1\t-1\t.\t2462\tss"));
+ // non-numeric start column:
+ assertFalse(id.looksLikeFeatureData("Helix\tSeq1\t-1\t2456\t.\tss"));
+ }
}
--- /dev/null
+package jalview.io;
+
+import static org.testng.AssertJUnit.assertEquals;
+
+import jalview.datamodel.SequenceFeature;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.testng.annotations.Test;
+
+public class SequenceAnnotationReportTest
+{
+ @Test(groups = "Functional")
+ public void testAppendFeature_disulfideBond()
+ {
+ SequenceAnnotationReport sar = new SequenceAnnotationReport(null);
+ StringBuffer sb = new StringBuffer();
+ sb.append("123456");
+ SequenceFeature sf = new SequenceFeature("disulfide bond", "desc", 1,
+ 3, 1.2f, "group");
+
+ // residuePos == 2 does not match start or end of feature, nothing done:
+ sar.appendFeature(sb, 2, null, sf);
+ assertEquals("123456", sb.toString());
+
+ // residuePos == 1 matches start of feature, text appended (but no <br>)
+ // feature score is not included
+ sar.appendFeature(sb, 1, null, sf);
+ assertEquals("123456disulfide bond 1:3", sb.toString());
+
+ // residuePos == 3 matches end of feature, text appended
+ // <br> is prefixed once sb.length() > 6
+ sar.appendFeature(sb, 3, null, sf);
+ assertEquals("123456disulfide bond 1:3<br>disulfide bond 1:3",
+ sb.toString());
+ }
+
+ @Test(groups = "Functional")
+ public void testAppendFeature_status()
+ {
+ SequenceAnnotationReport sar = new SequenceAnnotationReport(null);
+ StringBuffer sb = new StringBuffer();
+ SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3,
+ Float.NaN, "group");
+ sf.setStatus("Confirmed");
+
+ sar.appendFeature(sb, 1, null, sf);
+ assertEquals("METAL 1 3; Fe2-S; (Confirmed)", sb.toString());
+ }
+
+ @Test(groups = "Functional")
+ public void testAppendFeature_withScore()
+ {
+ SequenceAnnotationReport sar = new SequenceAnnotationReport(null);
+ StringBuffer sb = new StringBuffer();
+ SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3, 1.3f,
+ "group");
+
+ Map<String, float[][]> minmax = new Hashtable<String, float[][]>();
+ sar.appendFeature(sb, 1, minmax, sf);
+ /*
+ * map has no entry for this feature type - score is not shown:
+ */
+ assertEquals("METAL 1 3; Fe2-S", sb.toString());
+
+ /*
+ * map has entry for this feature type - score is shown:
+ */
+ minmax.put("METAL", new float[][] { { 0f, 1f }, null });
+ sar.appendFeature(sb, 1, minmax, sf);
+ // <br> is appended to a buffer > 6 in length
+ assertEquals("METAL 1 3; Fe2-S<br>METAL 1 3; Fe2-S Score=1.3",
+ sb.toString());
+
+ /*
+ * map has min == max for this feature type - score is not shown:
+ */
+ minmax.put("METAL", new float[][] { { 2f, 2f }, null });
+ sb.setLength(0);
+ sar.appendFeature(sb, 1, minmax, sf);
+ assertEquals("METAL 1 3; Fe2-S", sb.toString());
+ }
+
+ @Test(groups = "Functional")
+ public void testAppendFeature_noScore()
+ {
+ SequenceAnnotationReport sar = new SequenceAnnotationReport(null);
+ StringBuffer sb = new StringBuffer();
+ SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3,
+ Float.NaN, "group");
+
+ sar.appendFeature(sb, 1, null, sf);
+ assertEquals("METAL 1 3; Fe2-S", sb.toString());
+ }
+
+ @Test(groups = "Functional")
+ public void testAppendFeature_clinicalSignificance()
+ {
+ SequenceAnnotationReport sar = new SequenceAnnotationReport(null);
+ StringBuffer sb = new StringBuffer();
+ SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3,
+ Float.NaN, "group");
+ sf.setValue("clinical_significance", "Benign");
+
+ sar.appendFeature(sb, 1, null, sf);
+ assertEquals("METAL 1 3; Fe2-S; Benign", sb.toString());
+ }
+
+ @Test(groups = "Functional")
+ public void testAppendFeature_withScoreStatusClinicalSignificance()
+ {
+ SequenceAnnotationReport sar = new SequenceAnnotationReport(null);
+ StringBuffer sb = new StringBuffer();
+ SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3, 1.3f,
+ "group");
+ sf.setStatus("Confirmed");
+ sf.setValue("clinical_significance", "Benign");
+ Map<String, float[][]> minmax = new Hashtable<String, float[][]>();
+ minmax.put("METAL", new float[][] { { 0f, 1f }, null });
+ sar.appendFeature(sb, 1, minmax, sf);
+
+ assertEquals("METAL 1 3; Fe2-S Score=1.3; (Confirmed); Benign",
+ sb.toString());
+ }
+
+ @Test(groups = "Functional")
+ public void testAppendFeature_DescEqualsType()
+ {
+ SequenceAnnotationReport sar = new SequenceAnnotationReport(null);
+ StringBuffer sb = new StringBuffer();
+ SequenceFeature sf = new SequenceFeature("METAL", "METAL", 1, 3,
+ Float.NaN, "group");
+
+ // description is not included if it duplicates type:
+ sar.appendFeature(sb, 1, null, sf);
+ assertEquals("METAL 1 3", sb.toString());
+
+ sb.setLength(0);
+ sf.setDescription("Metal");
+ // test is case-sensitive:
+ sar.appendFeature(sb, 1, null, sf);
+ assertEquals("METAL 1 3; Metal", sb.toString());
+ }
+
+ @Test(groups = "Functional")
+ public void testAppendFeature_stripHtml()
+ {
+ SequenceAnnotationReport sar = new SequenceAnnotationReport(null);
+ StringBuffer sb = new StringBuffer();
+ SequenceFeature sf = new SequenceFeature("METAL",
+ "<html><body>hello<em>world</em></body></html>", 1, 3,
+ Float.NaN, "group");
+
+ sar.appendFeature(sb, 1, null, sf);
+ // !! strips off </body> but not <body> ??
+ assertEquals("METAL 1 3; <body>hello<em>world</em>",
+ sb.toString());
+
+ sb.setLength(0);
+ sf.setDescription("<br>&kHD>6");
+ sar.appendFeature(sb, 1, null, sf);
+ // if no <html> tag, html-encodes > and < (only):
+ assertEquals("METAL 1 3; <br>&kHD>6", sb.toString());
+ }
+}
{
AppletFormatAdapter af = new AppletFormatAdapter();
AlignmentI al = af.readFile(PfamFile, af.FILE,
- new IdentifyFile().Identify(PfamFile, af.FILE));
+ new IdentifyFile().identify(PfamFile, af.FILE));
int numpdb = 0;
for (SequenceI sq : al.getSequences())
{
AppletFormatAdapter rf = new AppletFormatAdapter();
AlignmentI al = rf.readFile(ff, AppletFormatAdapter.FILE,
- new IdentifyFile().Identify(ff, AppletFormatAdapter.FILE));
+ new IdentifyFile().identify(ff, AppletFormatAdapter.FILE));
assertNotNull("Couldn't read supplied alignment data.", al);
AppletFormatAdapter.PASTE, ioformat);
assertNotNull("Couldn't parse reimported alignment data.", al_input);
- String identifyoutput = new IdentifyFile().Identify(outputfile,
+ String identifyoutput = new IdentifyFile().identify(outputfile,
AppletFormatAdapter.PASTE);
assertNotNull("Identify routine failed for outputformat " + ioformat,
identifyoutput);
--- /dev/null
+package jalview.io.gff;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
+
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Mapping;
+import jalview.datamodel.MappingType;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+import jalview.io.FileLoader;
+import jalview.io.FormatAdapter;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.testng.annotations.Test;
+
+public class ExonerateHelperTest
+{
+ @Test(groups = "Functional")
+ public void testGetMappingType()
+ {
+ // protein-to-dna:
+ assertSame(MappingType.PeptideToNucleotide,
+ ExonerateHelper
+ .getMappingType("exonerate:protein2genome:local"));
+ assertSame(MappingType.PeptideToNucleotide,
+ ExonerateHelper.getMappingType("exonerate:protein2dna:local"));
+
+ // dna-to-dna:
+ assertSame(MappingType.NucleotideToNucleotide,
+ ExonerateHelper.getMappingType("coding2coding"));
+ assertSame(MappingType.NucleotideToNucleotide,
+ ExonerateHelper.getMappingType("coding2genome"));
+ assertSame(MappingType.NucleotideToNucleotide,
+ ExonerateHelper.getMappingType("cdna2genome"));
+ assertSame(MappingType.NucleotideToNucleotide,
+ ExonerateHelper.getMappingType("genome2genome"));
+ assertNull(ExonerateHelper.getMappingType("affine:local"));
+ }
+
+ /**
+ * Test processing one exonerate GFF line for the case where the mapping is
+ * protein2dna, similarity feature is on the query (the protein), match to the
+ * forward strand, target sequence is in neither the alignment nor the 'new
+ * sequences'
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessGffSimilarity_protein2dna_forward_querygff()
+ throws IOException
+ {
+ ExonerateHelper testee = new ExonerateHelper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ String[] gff = "Seq\texonerate:protein2dna:local\tsimilarity\t3\t10\t.\t+\t.\talignment_id 0 ; Target dna1 ; Align 3 400 8"
+ .split("\\t");
+ SequenceI seq = new Sequence("Seq", "PQRASTGKEEDVMIWCHQN");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] {});
+ Map<String, List<String>> set = Gff2Helper.parseNameValuePairs(gff[8]);
+
+ /*
+ * this should create a mapping from Seq2/3-10 to virtual sequence
+ * dna1 (added to newseqs) positions 400-423
+ */
+ testee.processGffSimilarity(set, seq, gff, align, newseqs, false);
+ assertEquals(1, newseqs.size());
+ assertTrue(newseqs.get(0) instanceof SequenceDummy);
+ assertEquals("dna1", newseqs.get(0).getName());
+ assertEquals(1, align.getCodonFrames().size());
+ AlignedCodonFrame mapping = align.getCodonFrames().iterator().next();
+ assertEquals(1, mapping.getAaSeqs().length);
+ assertSame(seq.getDatasetSequence(), mapping.getAaSeqs()[0]);
+ assertEquals(1, mapping.getdnaSeqs().length);
+ assertSame(newseqs.get(0), mapping.getdnaSeqs()[0]);
+ assertEquals(1, mapping.getdnaToProt().length);
+ assertEquals(1, mapping.getdnaToProt()[0].getFromRanges().size());
+ assertArrayEquals(new int[] { 400, 423 }, mapping.getdnaToProt()[0]
+ .getFromRanges().get(0));
+ assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
+ assertArrayEquals(new int[] { 3, 10 }, mapping.getdnaToProt()[0]
+ .getToRanges().get(0));
+ }
+
+ /**
+ * Test processing one exonerate GFF line for the case where the mapping is
+ * protein2dna, similarity feature is on the query (the protein), match to the
+ * reverse strand
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessGffSimilarity_protein2dna_reverse_querygff()
+ throws IOException
+ {
+ ExonerateHelper testee = new ExonerateHelper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ String[] gff = "Seq\texonerate:protein2dna:local\tsimilarity\t3\t10\t0\t-\t.\talignment_id 0 ; Target dna1 ; Align 3 400 8"
+ .split("\\t");
+ SequenceI seq = new Sequence("Seq", "PQRASTGKEEDVMIWCHQN");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] {});
+ Map<String, List<String>> set = Gff2Helper.parseNameValuePairs(gff[8]);
+
+ /*
+ * this should create a mapping from Seq2/3-10 to virtual sequence
+ * dna1 (added to newseqs) positions 400-377 (reverse)
+ */
+ testee.processGffSimilarity(set, seq, gff, align, newseqs, false);
+ assertEquals(1, newseqs.size());
+ assertTrue(newseqs.get(0) instanceof SequenceDummy);
+ assertEquals("dna1", newseqs.get(0).getName());
+ assertEquals(1, align.getCodonFrames().size());
+ AlignedCodonFrame mapping = align.getCodonFrames().iterator().next();
+ assertEquals(1, mapping.getAaSeqs().length);
+ assertSame(seq.getDatasetSequence(), mapping.getAaSeqs()[0]);
+ assertEquals(1, mapping.getdnaSeqs().length);
+ assertSame(newseqs.get(0), mapping.getdnaSeqs()[0]);
+ assertEquals(1, mapping.getdnaToProt().length);
+ assertEquals(1, mapping.getdnaToProt()[0].getFromRanges().size());
+ assertArrayEquals(new int[] { 400, 377 }, mapping.getdnaToProt()[0]
+ .getFromRanges().get(0));
+ assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
+ assertArrayEquals(new int[] { 3, 10 }, mapping.getdnaToProt()[0]
+ .getToRanges().get(0));
+ }
+
+ /**
+ * Test processing one exonerate GFF line for the case where the mapping is
+ * protein2dna, similarity feature is on the target (the dna), match to the
+ * forward strand
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessGffSimilarity_protein2dna_forward_targetgff()
+ throws IOException
+ {
+ ExonerateHelper testee = new ExonerateHelper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ String[] gff = "dna1\texonerate:protein2dna:local\tsimilarity\t400\t423\t0\t+\t.\talignment_id 0 ; Query Prot1 ; Align 400 3 24"
+ .split("\\t");
+ SequenceI seq = new Sequence("dna1/391-430",
+ "CGATCCGATCCGATCCGATCCGATCCGATCCGATCCGATC");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] { seq });
+ // GFF feature on the target describes mapping from base 400 for
+ // count 24 to position 3
+ Map<String, List<String>> set = Gff2Helper.parseNameValuePairs(gff[8]);
+
+ /*
+ * this should create a mapping from virtual sequence dna1 (added to
+ * newseqs) positions 400-423 to Prot1/3-10
+ */
+ testee.processGffSimilarity(set, seq, gff, align, newseqs, false);
+ assertEquals(1, newseqs.size());
+ assertTrue(newseqs.get(0) instanceof SequenceDummy);
+ assertEquals("Prot1", newseqs.get(0).getName());
+ assertEquals(1, align.getCodonFrames().size());
+ AlignedCodonFrame mapping = align.getCodonFrames().iterator().next();
+ assertEquals(1, mapping.getAaSeqs().length);
+ assertSame(newseqs.get(0), mapping.getAaSeqs()[0]);
+ assertSame(seq.getDatasetSequence(), mapping.getdnaSeqs()[0]);
+ assertEquals(1, mapping.getdnaSeqs().length);
+ assertEquals(1, mapping.getdnaToProt().length);
+ assertEquals(1, mapping.getdnaToProt()[0].getFromRanges().size());
+ assertArrayEquals(new int[] { 400, 423 }, mapping.getdnaToProt()[0]
+ .getFromRanges().get(0));
+ assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
+ assertArrayEquals(new int[] { 3, 10 }, mapping.getdnaToProt()[0]
+ .getToRanges().get(0));
+ }
+
+ /**
+ * Test processing one exonerate GFF line for the case where the mapping is
+ * protein2dna, similarity feature is on the target (the dna), match to the
+ * reverse strand
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessGffSimilarity_protein2dna_reverse_targetgff()
+ throws IOException
+ {
+ ExonerateHelper testee = new ExonerateHelper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ String[] gff = "dna1\texonerate:protein2dna:local\tsimilarity\t377\t400\t0\t-\t.\talignment_id 0 ; Query Prot1 ; Align 400 3 24"
+ .split("\\t");
+ SequenceI seq = new Sequence("dna1/371-410",
+ "CGATCCGATCCGATCCGATCCGATCCGATCCGATCCGATC");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] { seq });
+ // GFF feature on the target describes mapping from base 400 for
+ // count 24 to position 3
+ Map<String, List<String>> set = Gff2Helper.parseNameValuePairs(gff[8]);
+
+ /*
+ * this should create a mapping from virtual sequence dna1 (added to
+ * newseqs) positions 400-377 (reverse) to Prot1/3-10
+ */
+ testee.processGffSimilarity(set, seq, gff, align, newseqs, false);
+ assertEquals(1, newseqs.size());
+ assertTrue(newseqs.get(0) instanceof SequenceDummy);
+ assertEquals("Prot1", newseqs.get(0).getName());
+ assertEquals(1, align.getCodonFrames().size());
+ AlignedCodonFrame mapping = align.getCodonFrames().iterator().next();
+ assertEquals(1, mapping.getAaSeqs().length);
+ assertSame(newseqs.get(0), mapping.getAaSeqs()[0]);
+ assertSame(seq.getDatasetSequence(), mapping.getdnaSeqs()[0]);
+ assertEquals(1, mapping.getdnaSeqs().length);
+ assertEquals(1, mapping.getdnaToProt().length);
+ assertEquals(1, mapping.getdnaToProt()[0].getFromRanges().size());
+ assertArrayEquals(new int[] { 400, 377 }, mapping.getdnaToProt()[0]
+ .getFromRanges().get(0));
+ assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
+ assertArrayEquals(new int[] { 3, 10 }, mapping.getdnaToProt()[0]
+ .getToRanges().get(0));
+ }
+
+ /**
+ * Tests loading exonerate GFF2 output, including 'similarity' alignment
+ * feature, on to sequences
+ */
+ @Test(groups = { "Functional" })
+ public void testAddExonerateGffToAlignment()
+ {
+ FileLoader loader = new FileLoader(false);
+ AlignFrame af = loader.LoadFileWaitTillLoaded(
+ "examples/testdata/exonerateseqs.fa",
+ FormatAdapter.FILE);
+
+ af.loadJalviewDataFile("examples/testdata/exonerateoutput.gff",
+ FormatAdapter.FILE, null, null);
+
+ /*
+ * verify one mapping to a dummy sequence, one to a real one
+ */
+ List<AlignedCodonFrame> mappings = af
+ .getViewport().getAlignment().getDataset().getCodonFrames();
+ assertEquals(2, mappings.size());
+ Iterator<AlignedCodonFrame> iter = mappings.iterator();
+
+ // first mapping is to dummy sequence
+ AlignedCodonFrame mapping = iter.next();
+ Mapping[] mapList = mapping.getProtMappings();
+ assertEquals(1, mapList.length);
+ assertTrue(mapList[0].getTo() instanceof SequenceDummy);
+ assertEquals("DDB_G0269124", mapList[0].getTo().getName());
+
+ // 143 in protein should map to codon [11270, 11269, 11268] in dna
+ int[] mappedRegion = mapList[0].getMap().locateInFrom(143, 143);
+ assertArrayEquals(new int[] { 11270, 11268 }, mappedRegion);
+
+ // second mapping is to a sequence in the alignment
+ mapping = iter.next();
+ mapList = mapping.getProtMappings();
+ assertEquals(1, mapList.length);
+ SequenceI proteinSeq = af.getViewport().getAlignment()
+ .findName("DDB_G0280897");
+ assertSame(proteinSeq.getDatasetSequence(), mapList[0].getTo());
+ assertEquals(1, mapping.getdnaToProt().length);
+
+ // 143 in protein should map to codon [11270, 11269, 11268] in dna
+ mappedRegion = mapList[0].getMap().locateInFrom(143, 143);
+ assertArrayEquals(new int[] { 11270, 11268 }, mappedRegion);
+
+ // 182 in protein should map to codon [11153, 11152, 11151] in dna
+ mappedRegion = mapList[0].getMap().locateInFrom(182, 182);
+ assertArrayEquals(new int[] { 11153, 11151 }, mappedRegion);
+
+ // and the reverse mapping:
+ mappedRegion = mapList[0].getMap().locateInTo(11151, 11153);
+ assertArrayEquals(new int[] { 182, 182 }, mappedRegion);
+
+ // 11150 in dna should _not_ map to protein
+ mappedRegion = mapList[0].getMap().locateInTo(11150, 11150);
+ assertNull(mappedRegion);
+
+ // similarly 183 in protein should _not_ map to dna
+ mappedRegion = mapList[0].getMap().locateInFrom(183, 183);
+ assertNull(mappedRegion);
+ }
+}
--- /dev/null
+package jalview.io.gff;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
+
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.testng.annotations.Test;
+
+public class Gff3HelperTest
+{
+
+ /**
+ * Test processing one PASA GFF line giving a match from forward strand to
+ * forward strand
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessCdnaMatch_forwardToForward() throws IOException
+ {
+ GffHelperBase testee = new Gff3Helper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ String[] gff = "gi|68711\tblat-pasa\tcDNA_match\t12923\t13060\t98.55\t+\t.\tID=align_68;Target=gi|N37351 1 138 +"
+ .split("\\t");
+ SequenceI seq = new Sequence("gi|68711",
+ "GAATTCGTTCATGTAGGTTGATTTTTATT");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] {});
+
+ /*
+ * this should create a mapping from gi|68711/12923-13060
+ * to virtual sequence gi|N37351 (added to newseqs) positions 1-138
+ */
+ testee.processGff(seq, gff, align, newseqs, false);
+ assertEquals(1, newseqs.size());
+ assertTrue(newseqs.get(0) instanceof SequenceDummy);
+ assertEquals("gi|N37351", newseqs.get(0).getName());
+ assertEquals(1, align.getCodonFrames().size());
+ AlignedCodonFrame mapping = align.getCodonFrames().iterator().next();
+
+ /*
+ * 'dnaseqs' (map from) is here [gi|68711]
+ * 'aaseqs' (map to) is here [gi|N37351]
+ */
+ // TODO use more suitable naming in AlignedCodonFrame
+ assertEquals(1, mapping.getAaSeqs().length);
+ assertSame(seq.getDatasetSequence(), mapping.getdnaSeqs()[0]);
+ assertEquals(1, mapping.getdnaSeqs().length);
+ assertSame(newseqs.get(0), mapping.getAaSeqs()[0]);
+ assertEquals(1, mapping.getdnaToProt().length);
+ assertEquals(1, mapping.getdnaToProt()[0].getFromRanges().size());
+ assertArrayEquals(new int[] { 12923, 13060 }, mapping.getdnaToProt()[0]
+ .getFromRanges().get(0));
+ assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
+ assertArrayEquals(new int[] { 1, 138 }, mapping.getdnaToProt()[0]
+ .getToRanges().get(0));
+ }
+
+ /**
+ * Test processing one PASA GFF line giving a match from forward strand to
+ * reverse strand
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessCdnaMatch_forwardToReverse() throws IOException
+ {
+ GffHelperBase testee = new Gff3Helper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ String[] gff = "gi|68711\tblat-pasa\tcDNA_match\t12923\t13060\t98.55\t+\t.\tID=align_68;Target=gi|N37351 1 138 -"
+ .split("\\t");
+ SequenceI seq = new Sequence("gi|68711",
+ "GAATTCGTTCATGTAGGTTGATTTTTATT");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] {});
+
+ /*
+ * this should create a mapping from gi|68711/12923-13060
+ * to virtual sequence gi|N37351 (added to newseqs) positions 138-1
+ */
+ testee.processGff(seq, gff, align, newseqs, false);
+ assertEquals(1, newseqs.size());
+ assertTrue(newseqs.get(0) instanceof SequenceDummy);
+ assertEquals("gi|N37351", newseqs.get(0).getName());
+ assertEquals(1, align.getCodonFrames().size());
+ AlignedCodonFrame mapping = align.getCodonFrames().iterator().next();
+
+ /*
+ * 'dnaseqs' (map from) is here [gi|68711]
+ * 'aaseqs' (map to) is here [gi|N37351]
+ */
+ // TODO use more suitable naming in AlignedCodonFrame
+ assertEquals(1, mapping.getAaSeqs().length);
+ assertSame(seq.getDatasetSequence(), mapping.getdnaSeqs()[0]);
+ assertEquals(1, mapping.getdnaSeqs().length);
+ assertSame(newseqs.get(0), mapping.getAaSeqs()[0]);
+ assertEquals(1, mapping.getdnaToProt().length);
+ assertEquals(1, mapping.getdnaToProt()[0].getFromRanges().size());
+ assertArrayEquals(new int[] { 12923, 13060 }, mapping.getdnaToProt()[0]
+ .getFromRanges().get(0));
+ assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
+ assertArrayEquals(new int[] { 138, 1 }, mapping.getdnaToProt()[0]
+ .getToRanges().get(0));
+ }
+
+ /**
+ * Test processing one PASA GFF line giving a match from reverse complement
+ * strand to forward strand
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessCdnaMatch_reverseToForward() throws IOException
+ {
+ GffHelperBase testee = new Gff3Helper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ String[] gff = "gi|68711\tblat-pasa\tcDNA_match\t12923\t13060\t98.55\t-\t.\tID=align_68;Target=gi|N37351 1 138 +"
+ .split("\\t");
+ SequenceI seq = new Sequence("gi|68711",
+ "GAATTCGTTCATGTAGGTTGATTTTTATT");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] {});
+
+ /*
+ * (For now) we don't process reverse complement mappings; to do this
+ * would require (a) creating a virtual sequence placeholder for the
+ * reverse complement (b) resolving the sequence by its id from some
+ * source (GFF ##FASTA or other) (c) creating the reverse complement
+ * sequence (d) updating the mapping to be to the reverse complement
+ */
+ SequenceFeature sf = testee.processGff(seq, gff, align, newseqs, false);
+ assertNull(sf);
+ assertTrue(newseqs.isEmpty());
+ }
+
+ /**
+ * Test processing two PASA GFF lines representing a spliced mapping
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessCdnaMatch_spliced() throws IOException
+ {
+ GffHelperBase testee = new Gff3Helper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ SequenceI seq = new Sequence("gi|68711",
+ "GAATTCGTTCATGTAGGTTGATTTTTATT");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] {});
+
+ // mapping from gi|68711 12923-13060 to gi|N37351 1-138
+ String[] gff = "gi|68711\tblat-pasa\tcDNA_match\t12923\t13060\t98.55\t+\t.\tID=align_68;Target=gi|N37351 1 138 +"
+ .split("\\t");
+ testee.processGff(seq, gff, align, newseqs, false);
+ // mapping from gi|68711 13411-13550 to gi|N37351 139-278
+ gff = "gi|68711\tblat-pasa\tcDNA_match\t13411\t13550\t98.55\t+\t.\tID=align_68;Target=gi|N37351 139 278 +"
+ .split("\\t");
+ testee.processGff(seq, gff, align, newseqs, false);
+
+ assertEquals(1, newseqs.size());
+ assertTrue(newseqs.get(0) instanceof SequenceDummy);
+ assertEquals("gi|N37351", newseqs.get(0).getName());
+
+ // only 1 AlignedCodonFrame added to the alignment with both mappings!
+ // (this is important for 'align cdna to genome' to work correctly)
+ assertEquals(1, align.getCodonFrames().size());
+ AlignedCodonFrame mapping = align.getCodonFrames().get(0);
+
+ /*
+ * 'dnaseqs' (map from) is here [gi|68711]
+ * 'aaseqs' (map to) is here [gi|N37351]
+ */
+ // TODO use more suitable naming in AlignedCodonFrame
+ assertEquals(1, mapping.getAaSeqs().length);
+ assertSame(seq.getDatasetSequence(), mapping.getdnaSeqs()[0]);
+ assertEquals(1, mapping.getdnaSeqs().length);
+ assertSame(newseqs.get(0), mapping.getAaSeqs()[0]);
+ assertEquals(1, mapping.getdnaToProt().length);
+ assertEquals(2, mapping.getdnaToProt()[0].getFromRanges().size());
+ // the two spliced dna ranges are combined in one MapList
+ assertArrayEquals(new int[] { 12923, 13060 },
+ mapping.getdnaToProt()[0]
+ .getFromRanges().get(0));
+ assertArrayEquals(new int[] { 13411, 13550 }, mapping.getdnaToProt()[0]
+ .getFromRanges().get(1));
+ assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
+ // the two cdna ranges are merged into one contiguous region
+ assertArrayEquals(new int[] { 1, 278 }, mapping.getdnaToProt()[0]
+ .getToRanges().get(0));
+ }
+
+}
--- /dev/null
+package jalview.io.gff;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import org.testng.annotations.Test;
+
+public class GffHelperBaseTest
+{
+
+ /**
+ * Test the method that parses lines like <br>
+ * ID=2345;Name=Something,Another thing;Notes=Hello;Notes=World
+ */
+ @Test(groups = { "Functional" })
+ public void testParseNameValuePairs()
+ {
+ assertTrue(GffHelperBase.parseNameValuePairs(null, ";", ' ', ",")
+ .isEmpty());
+ assertTrue(GffHelperBase.parseNameValuePairs("", ";", ' ', ",")
+ .isEmpty());
+ assertTrue(GffHelperBase.parseNameValuePairs("hello=world", ";", ' ',
+ ",").isEmpty());
+
+ Map<String, List<String>> map = GffHelperBase.parseNameValuePairs(
+ "hello world", ";", ' ', ", ");
+ assertEquals(1, map.size());
+ assertEquals(1, map.get("hello").size());
+ assertEquals("world", map.get("hello").get(0));
+
+ map = GffHelperBase
+ .parseNameValuePairs(
+ "Method= manual curation ;nothing; Notes=F2 S ; Notes=Metal,Shiny; Type=",
+ ";", '=', ",");
+
+ // Type is ignored as no value was supplied
+ assertEquals(2, map.size());
+
+ assertEquals(1, map.get("Method").size());
+ assertEquals("manual curation", map.get("Method").get(0)); // trimmed
+
+ assertEquals(3, map.get("Notes").size());
+ assertEquals("F2 S", map.get("Notes").get(0));
+ assertEquals("Metal", map.get("Notes").get(1));
+ assertEquals("Shiny", map.get("Notes").get(2));
+ }
+
+ /**
+ * Test for the method that tries to trim mappings to equivalent lengths
+ */
+ @Test(groups = "Functional")
+ public void testTrimMapping()
+ {
+ int[] from = { 1, 12 };
+ int[] to = { 20, 31 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 1));
+ assertEquals("[1, 12]", Arrays.toString(from)); // unchanged
+ assertEquals("[20, 31]", Arrays.toString(to)); // unchanged
+
+ // from too long:
+ from = new int[] { 1, 13 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 1));
+ assertEquals("[1, 12]", Arrays.toString(from)); // trimmed
+ assertEquals("[20, 31]", Arrays.toString(to)); // unchanged
+
+ // to too long:
+ to = new int[] { 20, 33 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 1));
+ assertEquals("[1, 12]", Arrays.toString(from)); // unchanged
+ assertEquals("[20, 31]", Arrays.toString(to)); // trimmed
+
+ // from reversed:
+ from = new int[] { 12, 1 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 1));
+ assertEquals("[12, 1]", Arrays.toString(from)); // unchanged
+ assertEquals("[20, 31]", Arrays.toString(to)); // unchanged
+
+ // to reversed:
+ to = new int[] { 31, 20 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 1));
+ assertEquals("[12, 1]", Arrays.toString(from)); // unchanged
+ assertEquals("[31, 20]", Arrays.toString(to)); // unchanged
+
+ // from reversed and too long:
+ from = new int[] { 14, 1 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 1));
+ assertEquals("[14, 3]", Arrays.toString(from)); // end trimmed
+ assertEquals("[31, 20]", Arrays.toString(to)); // unchanged
+
+ // to reversed and too long:
+ to = new int[] { 31, 10 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 1));
+ assertEquals("[14, 3]", Arrays.toString(from)); // unchanged
+ assertEquals("[31, 20]", Arrays.toString(to)); // end trimmed
+
+ // cdna to peptide (matching)
+ from = new int[] { 1, 18 };
+ to = new int[] { 4, 9 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 3, 1));
+ assertEquals("[1, 18]", Arrays.toString(from)); // unchanged
+ assertEquals("[4, 9]", Arrays.toString(to)); // unchanged
+
+ // overlong cdna to peptide
+ from = new int[] { 1, 20 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 3, 1));
+ assertEquals("[1, 18]", Arrays.toString(from)); // end trimmed
+ assertEquals("[4, 9]", Arrays.toString(to)); // unchanged
+
+ // overlong cdna (reversed) to peptide
+ from = new int[] { 20, 1 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 3, 1));
+ assertEquals("[20, 3]", Arrays.toString(from)); // end trimmed
+ assertEquals("[4, 9]", Arrays.toString(to)); // unchanged
+
+ // overlong cdna (reversed) to peptide (reversed)
+ from = new int[] { 20, 1 };
+ to = new int[] { 9, 4 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 3, 1));
+ assertEquals("[20, 3]", Arrays.toString(from)); // end trimmed
+ assertEquals("[9, 4]", Arrays.toString(to)); // unchanged
+
+ // peptide to cdna (matching)
+ from = new int[] { 4, 9 };
+ to = new int[] { 1, 18 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 3));
+ assertEquals("[4, 9]", Arrays.toString(from)); // unchanged
+ assertEquals("[1, 18]", Arrays.toString(to)); // unchanged
+
+ // peptide to overlong cdna
+ to = new int[] { 1, 20 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 3));
+ assertEquals("[4, 9]", Arrays.toString(from)); // unchanged
+ assertEquals("[1, 18]", Arrays.toString(to)); // end trimmed
+
+ // peptide to overlong cdna (reversed)
+ to = new int[] { 20, 1 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 3));
+ assertEquals("[4, 9]", Arrays.toString(from)); // unchanged
+ assertEquals("[20, 3]", Arrays.toString(to)); // end trimmed
+
+ // peptide (reversed) to overlong cdna (reversed)
+ from = new int[] { 9, 4 };
+ to = new int[] { 20, 1 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 3));
+ assertEquals("[9, 4]", Arrays.toString(from)); // unchanged
+ assertEquals("[20, 3]", Arrays.toString(to)); // end trimmed
+
+ // overlong peptide to word-length cdna
+ from = new int[] { 4, 10 };
+ to = new int[] { 1, 18 };
+ assertTrue(GffHelperBase.trimMapping(from, to, 1, 3));
+ assertEquals("[4, 9]", Arrays.toString(from)); // end trimmed
+ assertEquals("[1, 18]", Arrays.toString(to)); // unchanged
+
+ // overlong peptide to non-word-length cdna
+ from = new int[] { 4, 10 };
+ to = new int[] { 1, 19 };
+ assertFalse(GffHelperBase.trimMapping(from, to, 1, 3));
+ assertEquals("[4, 10]", Arrays.toString(from)); // unchanged
+ assertEquals("[1, 19]", Arrays.toString(to)); // unchanged
+
+ }
+}
--- /dev/null
+package jalview.io.gff;
+
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+
+import org.testng.annotations.Test;
+
+public class GffHelperFactoryTest
+{
+
+ @Test(groups = "Functional")
+ public void testGetHelper()
+ {
+ assertNull(GffHelperFactory.getHelper(null));
+
+ String tabRegex = "\\t";
+
+ /*
+ * column 3 = 'similarity' indicates exonerate GFF alignment data
+ */
+ String gff = "submitted\taffine:local\tsimilarity\t20\t30\t99\t+\t.\t";
+ // no attributes (column 9 data):
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof Gff2Helper);
+
+ // attributes set but unhandled featureGroup - get generic handler
+ gff = "submitted\taffine:local\tsimilarity\t20\t30\t99\t+\t.\tID=$1";
+ assertSame(GffHelperFactory.getHelper(gff.split(tabRegex)).getClass(),
+ Gff3Helper.class);
+
+ // handled featureGroup (exonerate model) values
+ gff = "submitted\texonerate:protein2dna:local\tsimilarity\t20\t30\t99\t+\t.\tID=$1";
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof ExonerateHelper);
+
+ gff = "submitted\tprotein2genome\tsimilarity\t20\t30\t99\t+\t.\tID=$1";
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof ExonerateHelper);
+
+ gff = "submitted\tcoding2coding\tsimilarity\t20\t30\t99\t+\t.\tID=$1";
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof ExonerateHelper);
+
+ gff = "submitted\tcoding2genome\tsimilarity\t20\t30\t99\t+\t.\tID=$1";
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof ExonerateHelper);
+
+ gff = "submitted\tcdna2genome\tsimilarity\t20\t30\t99\t+\t.\tID=$1";
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof ExonerateHelper);
+
+ gff = "submitted\tgenome2genome\tsimilarity\t20\t30\t99\t+\t.\tID=$1";
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof ExonerateHelper);
+
+ // not case-sensitive:
+ gff = "submitted\tgenome2genome\tSIMILARITY\t20\t30\t99\t+\t.\tID=$1";
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof ExonerateHelper);
+
+ /*
+ * InterProScan has 'protein_match' in column 3
+ */
+ gff = "Submitted\tPANTHER\tprotein_match\t1\t1174\t0.0\t+\t.\tName=PTHR32154";
+ assertTrue(GffHelperFactory.getHelper(gff.split(tabRegex)) instanceof InterProScanHelper);
+
+ /*
+ * nothing specific - return the generic GFF3 class if Name=Value is present in col9
+ */
+ gff = "nothing\tinteresting\there\t20\t30\t99\t+\t.\tID=1";
+ GffHelperI helper = GffHelperFactory.getHelper(gff.split(tabRegex));
+ assertSame(helper.getClass(), Gff3Helper.class);
+
+ // return the generic GFF2 class if "Name Value" is present in col9
+ gff = "nothing\tinteresting\there\t20\t30\t99\t+\t.\tID 1";
+ helper = GffHelperFactory.getHelper(gff.split(tabRegex));
+ assertSame(helper.getClass(), Gff2Helper.class);
+ }
+}
--- /dev/null
+package jalview.io.gff;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
+
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Mapping;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+import jalview.io.FileLoader;
+import jalview.io.FormatAdapter;
+
+import java.util.List;
+
+import org.testng.annotations.Test;
+
+/**
+ * Tests of use cases that include parsing GFF (version 2 or 3) features that
+ * describe mappings between protein and cDNA. The format of the GFF varies
+ * depending on which tool generated it.
+ */
+public class GffTests
+{
+ /**
+ * Test the case where we load a protein ('query') sequence, then exonerateGff
+ * describing its mapping to cDNA, and then a DNA sequence including the
+ * mapped region
+ */
+ @Test(groups = "Functional")
+ public void testResolveExonerateGff()
+ {
+ String proteinSeq = ">prot1/10-16\nYCWRSGA";
+ AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded(
+ proteinSeq, FormatAdapter.PASTE);
+
+ /*
+ * exonerate GFF output mapping residues 11-15 (CWRSG)
+ * to bases 24-10 in sequence 'dna1' (reverse strand)
+ */
+ String exonerateGff = "##gff-version 2\n"
+ + "prot1\tprotein2genome\tsimilarity\t11\t15\t99\t-\t.\talignment_id 0 ; Target dna1 ; Align 11 24 5";
+ af.loadJalviewDataFile(exonerateGff, FormatAdapter.PASTE, null, null);
+
+ /*
+ * check we have a mapping from prot1 to SequenceDummy 'dna1'
+ */
+ AlignmentI dataset = af.getViewport().getAlignment().getDataset();
+ assertEquals(1, dataset.getSequences().size());
+ assertEquals("prot1", dataset.getSequenceAt(0).getName());
+ assertEquals("YCWRSGA", dataset.getSequenceAt(0).getSequenceAsString());
+ List<AlignedCodonFrame> mappings = dataset.getCodonFrames();
+ assertEquals(1, mappings.size());
+ AlignedCodonFrame mapping = mappings.iterator().next();
+ SequenceI mappedDna = mapping.getDnaForAaSeq(dataset.getSequenceAt(0));
+ assertTrue(mappedDna instanceof SequenceDummy);
+ assertEquals("dna1", mappedDna.getName());
+ Mapping[] mapList = mapping.getProtMappings();
+ assertEquals(1, mapList.length);
+ // 11 in protein should map to codon [24, 23, 22] in dna
+ int[] mappedRegion = mapList[0].getMap().locateInFrom(11, 11);
+ assertArrayEquals(new int[] { 24, 22 }, mappedRegion);
+ // 15 in protein should map to codon [12, 11, 10] in dna
+ mappedRegion = mapList[0].getMap().locateInFrom(15, 15);
+ assertArrayEquals(new int[] { 12, 10 }, mappedRegion);
+
+ SequenceI dna1 = new Sequence("dna1", "AAACCCGGGTTTAAACCCGGGTTT");
+ AlignmentI al = new Alignment(new SequenceI[] { dna1 });
+ al.setDataset(null);
+
+ /*
+ * Now 'realise' the virtual mapping to the real DNA sequence;
+ * interactively this could be by a drag or fetch of the sequence data
+ * on to the alignment
+ */
+ mapping.realiseWith(dna1);
+ // verify the mapping is now from the real, not the dummy sequence
+ assertSame(dna1.getDatasetSequence(),
+ mapping.getDnaForAaSeq(dataset.getSequenceAt(0)));
+ }
+}
--- /dev/null
+package jalview.io.gff;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
+
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceI;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.testng.annotations.Test;
+
+public class InterProScanHelperTest
+{
+
+ /**
+ * Test processing one InterProScan GFF line
+ *
+ * @throws IOException
+ */
+ @Test(groups = "Functional")
+ public void testProcessProteinMatch() throws IOException
+ {
+ InterProScanHelper testee = new InterProScanHelper();
+ List<SequenceI> newseqs = new ArrayList<SequenceI>();
+ String[] gff = "Submitted\tPfam\tprotein_match\t5\t30\t0\t+\t.\tName=PF12838;Target=Submitted 5 30;signature_desc=4Fe-4S dicluster domain;ID=match$17_5_30"
+ .split("\\t");
+ SequenceI seq = new Sequence("Prot1", "PQRASTGKEEDVMIWCHQN");
+ seq.createDatasetSequence();
+ AlignmentI align = new Alignment(new SequenceI[] {});
+ Map<String, List<String>> set = Gff3Helper.parseNameValuePairs(gff[8]);
+
+ /*
+ * this should create a mapping from Prot1/5-30 to virtual sequence
+ * match$17_5_30 (added to newseqs) positions 1-26
+ */
+ testee.processProteinMatch(set, seq, gff, align, newseqs, false);
+ assertEquals(1, newseqs.size());
+ assertTrue(newseqs.get(0) instanceof SequenceDummy);
+ assertEquals("match$17_5_30", newseqs.get(0).getName());
+ assertEquals(1, align.getCodonFrames().size());
+ AlignedCodonFrame mapping = align.getCodonFrames().iterator().next();
+
+ /*
+ * 'dnaseqs' (map from) is here [Prot1]
+ * 'aaseqs' (map to) is here [match$17_5_30]
+ */
+ // TODO use more suitable naming in AlignedCodonFrame
+ assertEquals(1, mapping.getAaSeqs().length);
+ assertSame(seq.getDatasetSequence(), mapping.getdnaSeqs()[0]);
+ assertEquals(1, mapping.getdnaSeqs().length);
+ assertSame(newseqs.get(0), mapping.getAaSeqs()[0]);
+ assertEquals(1, mapping.getdnaToProt().length);
+ assertEquals(1, mapping.getdnaToProt()[0].getFromRanges().size());
+ assertArrayEquals(new int[] { 5, 30 }, mapping.getdnaToProt()[0]
+ .getFromRanges().get(0));
+ assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
+ assertArrayEquals(new int[] { 1, 26 }, mapping.getdnaToProt()[0]
+ .getToRanges().get(0));
+ }
+
+}
*/
fc = new FeatureColour(Color.GREEN, Color.RED, 12f, 25f);
String greenHex = Format.getHexString(Color.GREEN);
- String expected = String.format("domain\t%s|%s|12.0|25.0|none",
+ String expected = String.format("domain\t%s|%s|abso|12.0|25.0|none",
greenHex, redHex);
assertEquals(expected, fc.toJalviewFormat("domain"));
* colour ranges over the actual score ranges (not min/max)
*/
fc.setAutoScaled(true);
- expected = String.format("domain\t%s|%s|abso|12.0|25.0|none", greenHex,
+ expected = String.format("domain\t%s|%s|12.0|25.0|none", greenHex,
redHex);
assertEquals(expected, fc.toJalviewFormat("domain"));
*/
fc.setThreshold(12.5f);
fc.setBelowThreshold(true);
- expected = String.format("domain\t%s|%s|abso|12.0|25.0|below|12.5",
+ expected = String.format("domain\t%s|%s|12.0|25.0|below|12.5",
greenHex, redHex);
assertEquals(expected, fc.toJalviewFormat("domain"));
*/
fc.setThreshold(12.5f);
fc.setAboveThreshold(true);
+ fc.setAutoScaled(false);
expected = String.format("domain\t%s|%s|abso|12.0|25.0|above|12.5",
greenHex, redHex);
assertEquals(expected, fc.toJalviewFormat("domain"));
import jalview.gui.AlignFrame;
import jalview.io.FileLoader;
import jalview.io.FormatAdapter;
+import jalview.io.StructureFile;
import org.testng.Assert;
import org.testng.AssertJUnit;
import org.testng.annotations.Test;
-import MCview.PDBfile;
-
public class Mapping
{
{ 303, 315 }, sheets[] = new int[] { 267, 268, 269, 270 };
StructureSelectionManager ssm = new jalview.structure.StructureSelectionManager();
- PDBfile pmap = ssm.setMapping(true, new SequenceI[] { uprot },
+ StructureFile pmap = ssm.setMapping(true, new SequenceI[] { uprot },
new String[] { "A" }, "test/jalview/ext/jmol/1QCF.pdb",
jalview.io.FormatAdapter.FILE);
assertTrue(pmap != null);
StructureSelectionManager ssm = new jalview.structure.StructureSelectionManager();
// Associate the 1GAQ pdb file with the subsequence 'imported' from another
// source
- PDBfile pde = ssm.setMapping(true, new SequenceI[] { sq }, new String[]
+ StructureFile pde = ssm.setMapping(true, new SequenceI[] { sq },
+ new String[]
{ "A" }, inFile = "examples/1gaq.txt", jalview.io.FormatAdapter.FILE);
assertTrue("PDB File couldn't be found", pde != null);
StructureMapping[] mp = ssm.getMapping(inFile);
FormatAdapter.PASTE, "FASTA");
SequenceI newseq = seqf.getViewport().getAlignment().getSequenceAt(0);
StructureSelectionManager ssm = new jalview.structure.StructureSelectionManager();
- PDBfile pmap = ssm.setMapping(true, new SequenceI[] { newseq },
+ StructureFile pmap = ssm.setMapping(true, new SequenceI[] { newseq },
new String[] { null }, "examples/3W5V.pdb",
jalview.io.FormatAdapter.FILE);
if (pmap == null)
@Test(groups = { "Functional" })
public void compareTransferredToRefPDBAnnot() throws Exception
{
+ StructureViewSettings.setShowSeqFeatures(true);
AlignFrame ref = new FileLoader(false)
.LoadFileWaitTillLoaded("test/jalview/ext/jmol/1QCF.pdb",
jalview.io.FormatAdapter.FILE);
StructureSelectionManager ssm = new jalview.structure.StructureSelectionManager();
ssm.setProcessSecondaryStructure(true);
ssm.setAddTempFacAnnot(true);
- PDBfile pmap = ssm.setMapping(true, new SequenceI[] { newseq },
+ StructureFile pmap = ssm.setMapping(true, new SequenceI[] { newseq },
new String[] { null }, "test/jalview/ext/jmol/1QCF.pdb",
jalview.io.FormatAdapter.FILE);
assertTrue(pmap != null);
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
import jalview.io.FormatAdapter;
+import jalview.io.StructureFile;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import MCview.PDBfile;
-
public class StructureSelectionManagerTest
{
private StructureSelectionManager ssm;
@BeforeMethod(alwaysRun = true)
public void setUp()
{
+ StructureViewSettings.setShowSeqFeatures(true);
ssm = new StructureSelectionManager();
}
AlignedCodonFrame acf2 = new AlignedCodonFrame();
ssm.registerMapping(acf1);
- assertEquals(1, ssm.seqmappings.size());
- assertTrue(ssm.seqmappings.contains(acf1));
+ assertEquals(1, ssm.getSequenceMappings().size());
+ assertTrue(ssm.getSequenceMappings().contains(acf1));
ssm.registerMapping(acf2);
- assertEquals(2, ssm.seqmappings.size());
- assertTrue(ssm.seqmappings.contains(acf1));
- assertTrue(ssm.seqmappings.contains(acf2));
+ assertEquals(2, ssm.getSequenceMappings().size());
+ assertTrue(ssm.getSequenceMappings().contains(acf1));
+ assertTrue(ssm.getSequenceMappings().contains(acf2));
/*
* Re-adding the first mapping does nothing
*/
ssm.registerMapping(acf1);
- assertEquals(2, ssm.seqmappings.size());
- assertTrue(ssm.seqmappings.contains(acf1));
- assertTrue(ssm.seqmappings.contains(acf2));
+ assertEquals(2, ssm.getSequenceMappings().size());
+ assertTrue(ssm.getSequenceMappings().contains(acf1));
+ assertTrue(ssm.getSequenceMappings().contains(acf2));
}
@Test(groups = { "Functional" })
AlignedCodonFrame acf2 = new AlignedCodonFrame();
AlignedCodonFrame acf3 = new AlignedCodonFrame();
- Set<AlignedCodonFrame> set1 = new HashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> set1 = new ArrayList<AlignedCodonFrame>();
set1.add(acf1);
set1.add(acf2);
- Set<AlignedCodonFrame> set2 = new HashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> set2 = new ArrayList<AlignedCodonFrame>();
set2.add(acf2);
set2.add(acf3);
ssm.registerMappings(set2);
ssm.registerMappings(set2);
- assertEquals(3, ssm.seqmappings.size());
- assertTrue(ssm.seqmappings.contains(acf1));
- assertTrue(ssm.seqmappings.contains(acf2));
- assertTrue(ssm.seqmappings.contains(acf3));
+ assertEquals(3, ssm.getSequenceMappings().size());
+ assertTrue(ssm.getSequenceMappings().contains(acf1));
+ assertTrue(ssm.getSequenceMappings().contains(acf2));
+ assertTrue(ssm.getSequenceMappings().contains(acf3));
}
/**
StructureSelectionManager sm = new StructureSelectionManager();
sm.setProcessSecondaryStructure(true);
sm.setAddTempFacAnnot(true);
- PDBfile pmap = sm.setMapping(true, new SequenceI[] { seq },
+ StructureFile pmap = sm.setMapping(true, new SequenceI[] { seq },
new String[] { null }, "examples/1gaq.txt", FormatAdapter.FILE);
assertTrue(pmap != null);
--- /dev/null
+package jalview.util;
+
+import static org.testng.AssertJUnit.assertEquals;
+
+import java.util.Arrays;
+
+import org.testng.annotations.Test;
+
+public class ArrayUtilsTest
+{
+ @Test(groups="Functional")
+ public void testReverseIntArray() {
+
+ // null value: should be no exception
+ ArrayUtils.reverseIntArray((int[]) null);
+
+ // empty array: should be no exception
+ int[] arr = new int[] {};
+ ArrayUtils.reverseIntArray(arr);
+
+ // even length array
+ arr = new int[] { 1, 2, 3, 4 };
+ ArrayUtils.reverseIntArray(arr);
+ assertEquals("[4, 3, 2, 1]", Arrays.toString(arr));
+
+ // odd length array
+ arr = new int[] { 1, 2, 3, 4, 5 };
+ ArrayUtils.reverseIntArray(arr);
+ assertEquals("[5, 4, 3, 2, 1]", Arrays.toString(arr));
+ }
+}
assertEquals("#800080", ColorUtils.toTkCode(new Color(128, 0, 128))); // purple
assertEquals("#00ff00", ColorUtils.toTkCode(new Color(0, 255, 0))); // lime
}
+
+ @Test(groups = { "Functional" })
+ public void testGetGraduatedColour()
+ {
+ Color minColour = new Color(100, 100, 100);
+ Color maxColour = new Color(180, 200, 220);
+
+ /*
+ * value half-way between min and max
+ */
+ Color col = ColorUtils.getGraduatedColour(20f, 10f, minColour, 30f,
+ maxColour);
+ assertEquals(140, col.getRed());
+ assertEquals(150, col.getGreen());
+ assertEquals(160, col.getBlue());
+
+ /*
+ * value two-thirds of the way between min and max
+ */
+ col = ColorUtils
+ .getGraduatedColour(30f, 10f, minColour, 40f, maxColour);
+ assertEquals(153, col.getRed());
+ // Color constructor rounds float value to nearest int
+ assertEquals(167, col.getGreen());
+ assertEquals(180, col.getBlue());
+
+ /*
+ * value = min
+ */
+ col = ColorUtils
+ .getGraduatedColour(10f, 10f, minColour, 30f, maxColour);
+ assertEquals(minColour, col);
+
+ /*
+ * value = max
+ */
+ col = ColorUtils
+ .getGraduatedColour(30f, 10f, minColour, 30f, maxColour);
+ assertEquals(maxColour, col);
+
+ /*
+ * value < min
+ */
+ col = ColorUtils.getGraduatedColour(0f, 10f, minColour, 30f, maxColour);
+ assertEquals(minColour, col);
+
+ /*
+ * value > max
+ */
+ col = ColorUtils
+ .getGraduatedColour(40f, 10f, minColour, 30f,
+ maxColour);
+ assertEquals(maxColour, col);
+
+ /*
+ * min = max
+ */
+ col = ColorUtils
+ .getGraduatedColour(40f, 10f, minColour, 10f, maxColour);
+ assertEquals(minColour, col);
+ }
}
* AGCTU. Test is not case-sensitive and ignores gaps.
*/
@Test(groups = { "Functional" })
- public void testIsNucleotide()
+ public void testIsNucleotide_sequences()
{
SequenceI seq = new Sequence("eightypercent", "agctuAGCPV");
assertFalse(Comparison.isNucleotide(new SequenceI[] { seq }));
0.001f);
}
+ @Test(groups = { "Functional" })
+ public void testIsNucleotide()
+ {
+ assertTrue(Comparison.isNucleotide('a'));
+ assertTrue(Comparison.isNucleotide('A'));
+ assertTrue(Comparison.isNucleotide('c'));
+ assertTrue(Comparison.isNucleotide('C'));
+ assertTrue(Comparison.isNucleotide('g'));
+ assertTrue(Comparison.isNucleotide('G'));
+ assertTrue(Comparison.isNucleotide('t'));
+ assertTrue(Comparison.isNucleotide('T'));
+ assertTrue(Comparison.isNucleotide('u'));
+ assertTrue(Comparison.isNucleotide('U'));
+ assertFalse(Comparison.isNucleotide('-'));
+ assertFalse(Comparison.isNucleotide('P'));
+ }
+
/**
* Test the percentage identity calculation for two sequences
*/
assertEquals(87.5f, Comparison.PID(seq1, seq2, 0, length, false, true),
0.001f);
}
+
+ @Test(groups = { "Functional" })
+ public void testIsNucleotideSequence()
+ {
+ assertFalse(Comparison.isNucleotideSequence(null, true));
+ assertTrue(Comparison.isNucleotideSequence("", true));
+ assertTrue(Comparison.isNucleotideSequence("aAgGcCtTuU", true));
+ assertTrue(Comparison.isNucleotideSequence("aAgGcCtTuU", false));
+ assertFalse(Comparison.isNucleotideSequence("xAgGcCtTuU", false));
+ assertFalse(Comparison.isNucleotideSequence("aAgGcCtTuUx", false));
+ assertTrue(Comparison.isNucleotideSequence("a A-g.GcCtTuU", true));
+ assertFalse(Comparison.isNucleotideSequence("a A-g.GcCtTuU", false));
+ }
}
assertEquals("UNIPROT", DBRefUtils.getCanonicalName("UNIPROTKB/TREMBL"));
assertEquals("UNIPROTKB/SWISS-CHEESE",
DBRefUtils.getCanonicalName("UNIPROTKB/SWISS-CHEESE"));
+ assertEquals("ENSEMBL", DBRefUtils.getCanonicalName("Ensembl"));
}
@Test(groups = { "Functional" })
assertEquals("EMBL", ref.getSource());
assertEquals("1.2", ref.getVersion());
assertEquals("a7890", ref.getAccessionId());
- assertNull(seq.getAllPDBEntries());
+ assertTrue(seq.getAllPDBEntries().isEmpty());
}
/**
assertSame(ref1, matches[0]);
assertSame(ref2, matches[1]);
}
+
+ /**
+ * Test the method that searches for matching references based on accession id
+ * only
+ */
+ @Test(groups = { "Functional" })
+ public void testSearchRefs_accessionid()
+ {
+
+ DBRefEntry ref1 = new DBRefEntry("Uniprot", "1", "A1234"); // matches
+ DBRefEntry ref2 = new DBRefEntry("embl", "1", "A1234"); // matches
+ // constructor does not upper-case accession id
+ DBRefEntry ref3 = new DBRefEntry("EMBL", "1", "a1234"); // no match
+ DBRefEntry ref4 = new DBRefEntry("EMBLCDS", "1", "A1235"); // no match
+ // ref5 matches although it has a mapping - ignored
+ DBRefEntry ref5 = new DBRefEntry("EMBL", "1", "A1234");
+ ref5.setMap(new Mapping(new MapList(new int[] { 1, 1 }, new int[] { 1,
+ 1 }, 1, 1)));
+
+ DBRefEntry[] matches = DBRefUtils.searchRefs(new DBRefEntry[] { ref1,
+ ref2, ref3, ref4, ref5 }, "A1234");
+ assertEquals(3, matches.length);
+ assertSame(ref1, matches[0]);
+ assertSame(ref2, matches[1]);
+ assertSame(ref5, matches[2]);
+ }
}
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
import java.util.ArrayList;
import java.util.Arrays;
assertEquals("{[2, 3], [5, 7], [9, 10], [12, 12], [14, 14], [16, 18]}",
prettyPrint(ml2.getFromRanges()));
assertEquals("{[1, 1], [3, 4], [6, 6]}", prettyPrint(ml2.getToRanges()));
+
+ /*
+ * reverse direction
+ */
+ codons = new int[] { 9, 6 };
+ protein = new int[] { 100, 91, 80, 79 };
+ ml = new MapList(codons, protein, 3, 1);
+ assertEquals(6, ml.getFromLowest());
+ assertEquals(9, ml.getFromHighest());
+ assertEquals(79, ml.getToLowest());
+ assertEquals(100, ml.getToHighest());
+ }
+
+ /**
+ * Test constructor can merge consecutive ranges
+ */
+ @Test(groups = { "Functional" })
+ public void testConstructor_mergeRanges()
+ {
+ int[] codons = { 2, 3, 3, 7, 9, 10, 12, 12, 14, 14, 16, 17 };
+ int[] protein = { 1, 1, 1, 3, 6, 6 };
+ MapList ml = new MapList(codons, protein, 3, 1);
+ assertEquals(3, ml.getFromRatio());
+ assertEquals(2, ml.getFromLowest());
+ assertEquals(17, ml.getFromHighest());
+ assertEquals(1, ml.getToLowest());
+ assertEquals(6, ml.getToHighest());
+ assertEquals("{[2, 7], [9, 10], [12, 12], [14, 14], [16, 17]}",
+ prettyPrint(ml.getFromRanges()));
+ assertEquals("{[1, 3], [6, 6]}", prettyPrint(ml.getToRanges()));
}
/**
MapList ml = new MapList(new int[] { 1, 5, 10, 15, 25, 20 }, new int[] {
51, 1 }, 1, 3);
String s = ml.toString();
- assertEquals("From (1:3) [ [1, 5] [10, 15] [25, 20] ] To [ [51, 1] ]",
+ assertEquals("[ [1, 5] [10, 15] [25, 20] ] 1:3 to [ [51, 1] ]",
s);
}
+
+ @Test(groups = { "Functional" })
+ public void testAddMapList()
+ {
+ MapList ml = new MapList(new int[] { 11, 15, 20, 25, 35, 30 },
+ new int[] { 72, 22 }, 1, 3);
+ assertEquals(11, ml.getFromLowest());
+ assertEquals(35, ml.getFromHighest());
+ assertEquals(22, ml.getToLowest());
+ assertEquals(72, ml.getToHighest());
+
+ MapList ml2 = new MapList(new int[] { 2, 4, 37, 40 }, new int[] { 12,
+ 17, 78, 83, 88, 96 }, 1, 3);
+ ml.addMapList(ml2);
+ assertEquals(2, ml.getFromLowest());
+ assertEquals(40, ml.getFromHighest());
+ assertEquals(12, ml.getToLowest());
+ assertEquals(96, ml.getToHighest());
+
+ String s = ml.toString();
+ assertEquals(
+ "[ [11, 15] [20, 25] [35, 30] [2, 4] [37, 40] ] 1:3 to [ [72, 22] [12, 17] [78, 83] [88, 96] ]",
+ s);
+ }
+
+ @Test(groups = { "Functional" })
+ public void testAddMapList_contiguous()
+ {
+ MapList ml = new MapList(new int[] { 11, 15 }, new int[] { 72, 58 }, 1,
+ 3);
+
+ MapList ml2 = new MapList(new int[] { 15, 16 }, new int[] { 58, 53 },
+ 1, 3);
+ ml.addMapList(ml2);
+ assertEquals("[ [11, 16] ] 1:3 to [ [72, 53] ]", ml.toString());
+ }
+
+ @Test(groups = "Functional")
+ public void testAddRange()
+ {
+ int[] range = { 1, 5 };
+ List<int[]> ranges = new ArrayList<int[]>();
+
+ // add to empty list:
+ MapList.addRange(range, ranges);
+ assertEquals(1, ranges.size());
+ assertSame(range, ranges.get(0));
+
+ // extend contiguous (same position):
+ MapList.addRange(new int[] { 5, 10 }, ranges);
+ assertEquals(1, ranges.size());
+ assertEquals(1, ranges.get(0)[0]);
+ assertEquals(10, ranges.get(0)[1]);
+
+ // extend contiguous (next position):
+ MapList.addRange(new int[] { 11, 15 }, ranges);
+ assertEquals(1, ranges.size());
+ assertEquals(1, ranges.get(0)[0]);
+ assertEquals(15, ranges.get(0)[1]);
+
+ // change direction: range is not merged:
+ MapList.addRange(new int[] { 16, 10 }, ranges);
+ assertEquals(2, ranges.size());
+ assertEquals(16, ranges.get(1)[0]);
+ assertEquals(10, ranges.get(1)[1]);
+
+ // extend reverse contiguous (same position):
+ MapList.addRange(new int[] { 10, 8 }, ranges);
+ assertEquals(2, ranges.size());
+ assertEquals(16, ranges.get(1)[0]);
+ assertEquals(8, ranges.get(1)[1]);
+
+ // extend reverse contiguous (next position):
+ MapList.addRange(new int[] { 7, 6 }, ranges);
+ assertEquals(2, ranges.size());
+ assertEquals(16, ranges.get(1)[0]);
+ assertEquals(6, ranges.get(1)[1]);
+
+ // change direction: range is not merged:
+ MapList.addRange(new int[] { 6, 9 }, ranges);
+ assertEquals(3, ranges.size());
+ assertEquals(6, ranges.get(2)[0]);
+ assertEquals(9, ranges.get(2)[1]);
+
+ // not contiguous: not merged
+ MapList.addRange(new int[] { 11, 12 }, ranges);
+ assertEquals(4, ranges.size());
+ assertEquals(11, ranges.get(3)[0]);
+ assertEquals(12, ranges.get(3)[1]);
+ }
+
+ /**
+ * Check state after construction
+ */
+ @Test(groups = { "Functional" })
+ public void testConstructor_withLists()
+ {
+ /*
+ * reverse direction
+ */
+ int[][] codons = new int[][] { { 9, 6 } };
+ int[][] protein = new int[][] { { 100, 91 }, { 80, 79 } };
+ MapList ml = new MapList(Arrays.asList(codons), Arrays.asList(protein),
+ 3, 1);
+ assertEquals(6, ml.getFromLowest());
+ assertEquals(9, ml.getFromHighest());
+ assertEquals(79, ml.getToLowest());
+ assertEquals(100, ml.getToHighest());
+ }
+
+ /**
+ * Test that method that inspects for the (first) forward or reverse from
+ * range. Single position ranges are ignored.
+ */
+ @Test(groups = { "Functional" })
+ public void testIsFromForwardStrand()
+ {
+ // [3-9] declares forward strand
+ MapList ml = new MapList(new int[] { 2, 2, 3, 9, 12, 11 },
+ new int[] { 20, 11 }, 1, 1);
+ assertTrue(ml.isFromForwardStrand());
+
+ // [11-5] declares reverse strand ([13-14] is ignored)
+ ml = new MapList(new int[] { 2, 2, 11, 5, 13, 14 },
+ new int[] { 20, 11 }, 1, 1);
+ assertFalse(ml.isFromForwardStrand());
+
+ // all single position ranges - defaults to forward strand
+ ml = new MapList(new int[] { 2, 2, 4, 4, 6, 6 }, new int[] { 3, 1 }, 1,
+ 1);
+ assertTrue(ml.isFromForwardStrand());
+ }
+
+ /**
+ * Test the method that merges a list of ranges where possible
+ */
+ @Test(groups = { "Functional" })
+ public void testCoalesceRanges()
+ {
+ assertNull(MapList.coalesceRanges(null));
+ List<int[]> ranges = new ArrayList<int[]>();
+ assertSame(ranges, MapList.coalesceRanges(ranges));
+ ranges.add(new int[] { 1, 3 });
+ assertSame(ranges, MapList.coalesceRanges(ranges));
+
+ // add non-contiguous range:
+ ranges.add(new int[] { 5, 6 });
+ assertSame(ranges, MapList.coalesceRanges(ranges));
+
+ // 'contiguous' range in opposite direction is not merged:
+ ranges.add(new int[] { 7, 6 });
+ assertSame(ranges, MapList.coalesceRanges(ranges));
+
+ // merging in forward direction:
+ ranges.clear();
+ ranges.add(new int[] { 1, 3 });
+ ranges.add(new int[] { 4, 5 });
+ ranges.add(new int[] { 5, 5 });
+ ranges.add(new int[] { 5, 7 });
+ List<int[]> merged = MapList.coalesceRanges(ranges);
+ assertEquals(1, merged.size());
+ assertArrayEquals(new int[] { 1, 7 }, merged.get(0));
+ // verify input list is unchanged
+ assertEquals(4, ranges.size());
+ assertArrayEquals(new int[] { 1, 3 }, ranges.get(0));
+ assertArrayEquals(new int[] { 4, 5 }, ranges.get(1));
+ assertArrayEquals(new int[] { 5, 5 }, ranges.get(2));
+ assertArrayEquals(new int[] { 5, 7 }, ranges.get(3));
+
+ // merging in reverse direction:
+ ranges.clear();
+ ranges.add(new int[] { 7, 5 });
+ ranges.add(new int[] { 5, 4 });
+ ranges.add(new int[] { 4, 4 });
+ ranges.add(new int[] { 3, 1 });
+ merged = MapList.coalesceRanges(ranges);
+ assertEquals(1, merged.size());
+ assertArrayEquals(new int[] { 7, 1 }, merged.get(0));
+
+ // merging with switches of direction:
+ ranges.clear();
+ ranges.add(new int[] { 1, 3 });
+ ranges.add(new int[] { 4, 5 });
+ ranges.add(new int[] { 5, 5 });
+ ranges.add(new int[] { 6, 6 });
+ ranges.add(new int[] { 12, 10 });
+ ranges.add(new int[] { 9, 8 });
+ ranges.add(new int[] { 8, 8 });
+ ranges.add(new int[] { 7, 7 });
+ merged = MapList.coalesceRanges(ranges);
+ assertEquals(2, merged.size());
+ assertArrayEquals(new int[] { 1, 6 }, merged.get(0));
+ assertArrayEquals(new int[] { 12, 7 }, merged.get(1));
+ }
+
+ /**
+ * Test the method that merges a list of ranges where possible
+ */
+ @Test(groups = { "Functional" })
+ public void testCoalesceRanges_withOverlap()
+ {
+ List<int[]> ranges = new ArrayList<int[]>();
+ ranges.add(new int[] { 1, 3 });
+ ranges.add(new int[] { 2, 5 });
+
+ /*
+ * [2, 5] should extend [1, 3]
+ */
+ List<int[]> merged = MapList.coalesceRanges(ranges);
+ assertEquals(1, merged.size());
+ assertArrayEquals(new int[] { 1, 5 }, merged.get(0));
+
+ /*
+ * a subsumed interval should be dropped
+ */
+ ranges.clear();
+ ranges.add(new int[] { 1, 6 });
+ ranges.add(new int[] { 2, 4 });
+ merged = MapList.coalesceRanges(ranges);
+ assertEquals(1, merged.size());
+ assertArrayEquals(new int[] { 1, 6 }, merged.get(0));
+
+ ranges.clear();
+ ranges.add(new int[] { 1, 5 });
+ ranges.add(new int[] { 1, 6 });
+ merged = MapList.coalesceRanges(ranges);
+ assertEquals(1, merged.size());
+ assertArrayEquals(new int[] { 1, 6 }, merged.get(0));
+
+ /*
+ * merge duplicate ranges
+ */
+ ranges.clear();
+ ranges.add(new int[] { 1, 3 });
+ ranges.add(new int[] { 1, 3 });
+ merged = MapList.coalesceRanges(ranges);
+ assertEquals(1, merged.size());
+ assertArrayEquals(new int[] { 1, 3 }, merged.get(0));
+
+ /*
+ * reverse direction
+ */
+ ranges.clear();
+ ranges.add(new int[] { 9, 5 });
+ ranges.add(new int[] { 9, 4 });
+ ranges.add(new int[] { 8, 3 });
+ ranges.add(new int[] { 3, 2 });
+ ranges.add(new int[] { 1, 0 });
+ merged = MapList.coalesceRanges(ranges);
+ assertEquals(1, merged.size());
+ assertArrayEquals(new int[] { 9, 0 }, merged.get(0));
+ }
}
package jalview.util;
import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
import java.awt.Color;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Set;
import org.testng.annotations.Test;
MapList map = new MapList(new int[] { 5, 10 }, new int[] { 12, 13 }, 3,
1);
acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
- Set<AlignedCodonFrame> acfList = Collections.singleton(acf);
+ List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
+ { acf });
/*
* Check protein residue 12 maps to codon 5-7, 13 to codon 8-10
MapList map = new MapList(new int[] { 6, 6, 8, 9, 11, 11, 13, 13, 15,
15 }, new int[] { 8, 9 }, 3, 1);
acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
- Set<AlignedCodonFrame> acfList = Collections.singleton(acf);
+ List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
+ { acf });
/*
* Check protein residue 8 maps to [6, 8, 9]
acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(), protein
.getSequenceAt(seq).getDatasetSequence(), map);
}
- Set<AlignedCodonFrame> acfList = Collections.singleton(acf);
+ List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
+ { acf });
AlignViewportI dnaView = new AlignViewport(cdna);
AlignViewportI proteinView = new AlignViewport(protein);
protected void setupMappedAlignments() throws IOException
{
/*
- * Set up dna and protein Seq1/2/3 with mappings (held on the protein
- * viewport). Lower case for introns.
+ * Map (upper-case = coding):
+ * Seq1/10-18 AC-GctGtC-T to Seq1/40 -K-P
+ * Seq2/20-27 Tc-GA-G-T-T to Seq2/20-27 L--Q
+ * Seq3/30-38 TtTT-AaCGg- to Seq3/60-61\nG--S
*/
AlignmentI cdna = loadAlignment(">Seq1/10-18\nAC-GctGtC-T\n"
+ ">Seq2/20-27\nTc-GA-G-T-Tc\n" + ">Seq3/30-38\nTtTT-AaCGg-\n",
61 }, 3, 1);
acf.addMap(cdna.getSequenceAt(2).getDatasetSequence(), protein
.getSequenceAt(2).getDatasetSequence(), map);
- Set<AlignedCodonFrame> acfList = Collections.singleton(acf);
+ List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
+ { acf });
dnaView = new AlignViewport(cdna);
proteinView = new AlignViewport(protein);
"[1, 2, 3, 4, 7, 8, 9, 12]",
Arrays.toString(MappingUtils.flattenRanges(new int[] { 1, 4, 7,
9, 12, 12 })));
- // unpaired start position is ignored:
+ // trailing unpaired start position is ignored:
assertEquals(
"[1, 2, 3, 4, 7, 8, 9, 12]",
Arrays.toString(MappingUtils.flattenRanges(new int[] { 1, 4, 7,
acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(), protein
.getSequenceAt(seq).getDatasetSequence(), map);
}
- Set<AlignedCodonFrame> acfList = Collections.singleton(acf);
+ List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
+ { acf });
AlignViewportI dnaView = new AlignViewport(cdna);
AlignViewportI proteinView = new AlignViewport(protein);
acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(), protein
.getSequenceAt(seq).getDatasetSequence(), map);
}
- Set<AlignedCodonFrame> acfList = Collections.singleton(acf);
+ List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
+ { acf });
AlignViewportI dnaView = new AlignViewport(cdna);
AlignViewportI proteinView = new AlignViewport(protein);
AlignedCodonFrame acf3 = new AlignedCodonFrame();
acf3.addMap(seq3.getDatasetSequence(), seq1.getDatasetSequence(), map);
- Set<AlignedCodonFrame> mappings = new HashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings = new ArrayList<AlignedCodonFrame>();
mappings.add(acf1);
mappings.add(acf2);
mappings.add(acf3);
AlignedCodonFrame acf = new AlignedCodonFrame();
MapList map = new MapList(new int[] { 8, 16 }, new int[] { 5, 7 }, 3, 1);
acf.addMap(dna.getDatasetSequence(), protein.getDatasetSequence(), map);
- Set<AlignedCodonFrame> mappings = new LinkedHashSet<AlignedCodonFrame>();
+ List<AlignedCodonFrame> mappings = new ArrayList<AlignedCodonFrame>();
mappings.add(acf);
AlignmentI prot = new Alignment(new SequenceI[] { protein });
}
/**
+ * Tests for the method that converts a series of [start, end] ranges to
+ * single positions, where the mapping is to a reverse strand i.e. start is
+ * greater than end point mapped to
+ */
+ @Test(groups = { "Functional" })
+ public void testFlattenRanges_reverseStrand()
+ {
+ assertEquals("[4, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[] { 4, 1 })));
+ assertEquals(
+ "[4, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[] { 4, 3, 2,
+ 1 })));
+ assertEquals(
+ "[4, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[] { 4, 4, 3,
+ 3, 2, 2, 1, 1 })));
+ assertEquals(
+ "[12, 9, 8, 7, 4, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[] { 12, 12,
+ 9, 7, 4, 1 })));
+ // forwards and backwards anyone?
+ assertEquals(
+ "[4, 5, 6, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[] { 4, 6, 3,
+ 1 })));
+ // backwards and forwards
+ assertEquals(
+ "[3, 2, 1, 4, 5, 6]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[] { 3, 1, 4,
+ 6 })));
+ // trailing unpaired start position is ignored:
+ assertEquals(
+ "[12, 9, 8, 7, 4, 3, 2]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[] { 12, 12,
+ 9, 7, 4, 2, 1 })));
+ }
+
+ /**
* Test mapping a column selection including hidden columns
*
* @throws IOException
{
setupMappedAlignments();
- ColumnSelection colsel = new ColumnSelection();
+ ColumnSelection proteinSelection = new ColumnSelection();
/*
* Column 0 in protein picks up Seq2/L, Seq3/G which map to cols 0-4 and 0-3
* in dna respectively, overall 0-4
*/
- colsel.hideColumns(0);
- ColumnSelection cs = MappingUtils.mapColumnSelection(colsel,
+ proteinSelection.hideColumns(0);
+ ColumnSelection dnaSelection = MappingUtils.mapColumnSelection(proteinSelection,
proteinView, dnaView);
- assertEquals("[]", cs.getSelected().toString());
- List<int[]> hidden = cs.getHiddenColumns();
+ assertEquals("[]", dnaSelection.getSelected().toString());
+ List<int[]> hidden = dnaSelection.getHiddenColumns();
assertEquals(1, hidden.size());
assertEquals("[0, 4]", Arrays.toString(hidden.get(0)));
/*
* Column 1 in protein picks up Seq1/K which maps to cols 0-3 in dna
*/
- colsel.revealAllHiddenColumns();
- colsel.hideColumns(1);
- cs = MappingUtils.mapColumnSelection(colsel, proteinView, dnaView);
- hidden = cs.getHiddenColumns();
+ proteinSelection.revealAllHiddenColumns();
+ // the unhidden columns are now marked selected!
+ assertEquals("[0]", proteinSelection.getSelected().toString());
+ // deselect these or hideColumns will be expanded to include 0
+ proteinSelection.clear();
+ proteinSelection.hideColumns(1);
+ dnaSelection = MappingUtils.mapColumnSelection(proteinSelection, proteinView, dnaView);
+ hidden = dnaSelection.getHiddenColumns();
assertEquals(1, hidden.size());
assertEquals("[0, 3]", Arrays.toString(hidden.get(0)));
/*
* Column 2 in protein picks up gaps only - no mapping
*/
- colsel.revealAllHiddenColumns();
- colsel.clear();
- colsel.hideColumns(2);
- cs = MappingUtils.mapColumnSelection(colsel, proteinView, dnaView);
- assertTrue(cs.getHiddenColumns().isEmpty());
+ proteinSelection.revealAllHiddenColumns();
+ proteinSelection.clear();
+ proteinSelection.hideColumns(2);
+ dnaSelection = MappingUtils.mapColumnSelection(proteinSelection, proteinView, dnaView);
+ assertTrue(dnaSelection.getHiddenColumns().isEmpty());
/*
* Column 3 in protein picks up Seq1/P, Seq2/Q, Seq3/S which map to columns
* 6-9, 6-10, 5-8 respectively, overall to 5-10
*/
- colsel.revealAllHiddenColumns();
- colsel.clear();
- colsel.hideColumns(3); // 5-10 hidden in dna
- colsel.addElement(1); // 0-3 selected in dna
- cs = MappingUtils.mapColumnSelection(colsel, proteinView, dnaView);
- assertEquals("[0, 1, 2, 3]", cs.getSelected().toString());
- hidden = cs.getHiddenColumns();
+ proteinSelection.revealAllHiddenColumns();
+ proteinSelection.clear();
+ proteinSelection.hideColumns(3); // 5-10 hidden in dna
+ proteinSelection.addElement(1); // 0-3 selected in dna
+ dnaSelection = MappingUtils.mapColumnSelection(proteinSelection, proteinView, dnaView);
+ assertEquals("[0, 1, 2, 3]", dnaSelection.getSelected().toString());
+ hidden = dnaSelection.getHiddenColumns();
assertEquals(1, hidden.size());
assertEquals("[5, 10]", Arrays.toString(hidden.get(0)));
/*
* Combine hiding columns 1 and 3 to get discontiguous hidden columns
*/
- colsel.revealAllHiddenColumns();
- colsel.clear();
- colsel.hideColumns(1);
- colsel.hideColumns(3);
- cs = MappingUtils.mapColumnSelection(colsel, proteinView, dnaView);
- hidden = cs.getHiddenColumns();
+ proteinSelection.revealAllHiddenColumns();
+ proteinSelection.clear();
+ proteinSelection.hideColumns(1);
+ proteinSelection.hideColumns(3);
+ dnaSelection = MappingUtils.mapColumnSelection(proteinSelection, proteinView, dnaView);
+ hidden = dnaSelection.getHiddenColumns();
assertEquals(2, hidden.size());
assertEquals("[0, 3]", Arrays.toString(hidden.get(0)));
assertEquals("[5, 10]", Arrays.toString(hidden.get(1)));
}
+
+ @Test(groups = { "Functional" })
+ public void testGetLength()
+ {
+ assertEquals(0, MappingUtils.getLength(null));
+
+ /*
+ * [start, end] ranges
+ */
+ List<int[]> ranges = new ArrayList<int[]>();
+ assertEquals(0, MappingUtils.getLength(ranges));
+ ranges.add(new int[] { 1, 1 });
+ assertEquals(1, MappingUtils.getLength(ranges));
+ ranges.add(new int[] { 2, 10 });
+ assertEquals(10, MappingUtils.getLength(ranges));
+ ranges.add(new int[] { 20, 10 });
+ assertEquals(21, MappingUtils.getLength(ranges));
+
+ /*
+ * [start, end, start, end...] ranges
+ */
+ ranges.clear();
+ ranges.add(new int[] { 1, 5, 8, 4 });
+ ranges.add(new int[] { 8, 2 });
+ ranges.add(new int[] { 12, 12 });
+ assertEquals(18, MappingUtils.getLength(ranges));
+ }
+
+ @Test(groups = { "Functional" })
+ public void testContains()
+ {
+ assertFalse(MappingUtils.contains(null, 1));
+ List<int[]> ranges = new ArrayList<int[]>();
+ assertFalse(MappingUtils.contains(ranges, 1));
+
+ ranges.add(new int[] { 1, 4 });
+ ranges.add(new int[] { 6, 6 });
+ ranges.add(new int[] { 8, 10 });
+ ranges.add(new int[] { 30, 20 });
+ ranges.add(new int[] { -16, -44 });
+
+ assertFalse(MappingUtils.contains(ranges, 0));
+ assertTrue(MappingUtils.contains(ranges, 1));
+ assertTrue(MappingUtils.contains(ranges, 2));
+ assertTrue(MappingUtils.contains(ranges, 3));
+ assertTrue(MappingUtils.contains(ranges, 4));
+ assertFalse(MappingUtils.contains(ranges, 5));
+
+ assertTrue(MappingUtils.contains(ranges, 6));
+ assertFalse(MappingUtils.contains(ranges, 7));
+
+ assertTrue(MappingUtils.contains(ranges, 8));
+ assertTrue(MappingUtils.contains(ranges, 9));
+ assertTrue(MappingUtils.contains(ranges, 10));
+
+ assertFalse(MappingUtils.contains(ranges, 31));
+ assertTrue(MappingUtils.contains(ranges, 30));
+ assertTrue(MappingUtils.contains(ranges, 29));
+ assertTrue(MappingUtils.contains(ranges, 20));
+ assertFalse(MappingUtils.contains(ranges, 19));
+
+ assertFalse(MappingUtils.contains(ranges, -15));
+ assertTrue(MappingUtils.contains(ranges, -16));
+ assertTrue(MappingUtils.contains(ranges, -44));
+ assertFalse(MappingUtils.contains(ranges, -45));
+ }
+
+ /**
+ * Test the method that drops positions from the start of a mapped range
+ */
+ @Test(groups = "Functional")
+ public void testRemoveStartPositions()
+ {
+ int[] ranges = new int[] { 1, 10 };
+ int[] adjusted = MappingUtils.removeStartPositions(0, ranges);
+ assertEquals("[1, 10]", Arrays.toString(adjusted));
+
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[2, 10]", Arrays.toString(adjusted));
+ assertEquals("[1, 10]", Arrays.toString(ranges));
+
+ ranges = adjusted;
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[3, 10]", Arrays.toString(adjusted));
+ assertEquals("[2, 10]", Arrays.toString(ranges));
+
+ ranges = new int[] { 2, 3, 10, 12 };
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[3, 3, 10, 12]", Arrays.toString(adjusted));
+ assertEquals("[2, 3, 10, 12]", Arrays.toString(ranges));
+
+ ranges = new int[] { 2, 2, 8, 12 };
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[8, 12]", Arrays.toString(adjusted));
+ assertEquals("[2, 2, 8, 12]", Arrays.toString(ranges));
+
+ ranges = new int[] { 2, 2, 8, 12 };
+ adjusted = MappingUtils.removeStartPositions(2, ranges);
+ assertEquals("[9, 12]", Arrays.toString(adjusted));
+ assertEquals("[2, 2, 8, 12]", Arrays.toString(ranges));
+
+ ranges = new int[] { 2, 2, 4, 4, 9, 12 };
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[4, 4, 9, 12]", Arrays.toString(adjusted));
+ assertEquals("[2, 2, 4, 4, 9, 12]", Arrays.toString(ranges));
+
+ ranges = new int[] { 2, 2, 4, 4, 9, 12 };
+ adjusted = MappingUtils.removeStartPositions(2, ranges);
+ assertEquals("[9, 12]", Arrays.toString(adjusted));
+ assertEquals("[2, 2, 4, 4, 9, 12]", Arrays.toString(ranges));
+
+ ranges = new int[] { 2, 3, 9, 12 };
+ adjusted = MappingUtils.removeStartPositions(3, ranges);
+ assertEquals("[10, 12]", Arrays.toString(adjusted));
+ assertEquals("[2, 3, 9, 12]", Arrays.toString(ranges));
+ }
+
+ /**
+ * Test the method that drops positions from the start of a mapped range, on
+ * the reverse strand
+ */
+ @Test(groups = "Functional")
+ public void testRemoveStartPositions_reverseStrand()
+ {
+ int[] ranges = new int[] { 10, 1 };
+ int[] adjusted = MappingUtils.removeStartPositions(0, ranges);
+ assertEquals("[10, 1]", Arrays.toString(adjusted));
+ assertEquals("[10, 1]", Arrays.toString(ranges));
+
+ ranges = adjusted;
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[9, 1]", Arrays.toString(adjusted));
+ assertEquals("[10, 1]", Arrays.toString(ranges));
+
+ ranges = adjusted;
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[8, 1]", Arrays.toString(adjusted));
+ assertEquals("[9, 1]", Arrays.toString(ranges));
+
+ ranges = new int[] { 12, 11, 9, 6 };
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[11, 11, 9, 6]", Arrays.toString(adjusted));
+ assertEquals("[12, 11, 9, 6]", Arrays.toString(ranges));
+
+ ranges = new int[] { 12, 12, 8, 4 };
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[8, 4]", Arrays.toString(adjusted));
+ assertEquals("[12, 12, 8, 4]", Arrays.toString(ranges));
+
+ ranges = new int[] { 12, 12, 8, 4 };
+ adjusted = MappingUtils.removeStartPositions(2, ranges);
+ assertEquals("[7, 4]", Arrays.toString(adjusted));
+ assertEquals("[12, 12, 8, 4]", Arrays.toString(ranges));
+
+ ranges = new int[] { 12, 12, 10, 10, 8, 4 };
+ adjusted = MappingUtils.removeStartPositions(1, ranges);
+ assertEquals("[10, 10, 8, 4]", Arrays.toString(adjusted));
+ assertEquals("[12, 12, 10, 10, 8, 4]", Arrays.toString(ranges));
+
+ ranges = new int[] { 12, 12, 10, 10, 8, 4 };
+ adjusted = MappingUtils.removeStartPositions(2, ranges);
+ assertEquals("[8, 4]", Arrays.toString(adjusted));
+ assertEquals("[12, 12, 10, 10, 8, 4]", Arrays.toString(ranges));
+
+ ranges = new int[] { 12, 11, 8, 4 };
+ adjusted = MappingUtils.removeStartPositions(3, ranges);
+ assertEquals("[7, 4]", Arrays.toString(adjusted));
+ assertEquals("[12, 11, 8, 4]", Arrays.toString(ranges));
+ }
+
}
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import org.testng.annotations.Test;
assertEquals("a*b*c*cde", StringUtils.arrayToSeparatorList(new String[]
{ "a", "b*c", "cde" }, "*"));
}
+
+ @Test(groups = { "Functional" })
+ public void testListToDelimitedString()
+ {
+ assertEquals("", StringUtils.listToDelimitedString(null, ";"));
+ List<String> list = new ArrayList<String>();
+ assertEquals("", StringUtils.listToDelimitedString(list, ";"));
+ list.add("now");
+ assertEquals("now", StringUtils.listToDelimitedString(list, ";"));
+ list.add("is");
+ assertEquals("now;is", StringUtils.listToDelimitedString(list, ";"));
+ assertEquals("now ; is", StringUtils.listToDelimitedString(list, " ; "));
+ list.add("the");
+ list.add("winter");
+ list.add("of");
+ list.add("our");
+ list.add("discontent");
+ assertEquals("now is the winter of our discontent",
+ StringUtils.listToDelimitedString(list, " "));
+ }
+
+ @Test(groups = { "Functional" })
+ public void testParseInt()
+ {
+ assertEquals(0, StringUtils.parseInt(null));
+ assertEquals(0, StringUtils.parseInt(""));
+ assertEquals(0, StringUtils.parseInt("x"));
+ assertEquals(0, StringUtils.parseInt("1.2"));
+ assertEquals(33, StringUtils.parseInt("33"));
+ assertEquals(33, StringUtils.parseInt("+33"));
+ assertEquals(-123, StringUtils.parseInt("-123"));
+ // too big for an int:
+ assertEquals(0,
+ StringUtils.parseInt(String.valueOf(Integer.MAX_VALUE) + "1"));
+ }
}
--- /dev/null
+package jalview.ws;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.DBRefSource;
+import jalview.datamodel.SequenceI;
+import jalview.ws.seqfetcher.ASequenceFetcher;
+import jalview.ws.seqfetcher.DbSourceProxy;
+
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Vector;
+
+public class SequenceFetcherTest
+{
+
+ /**
+ * simple run method to test dbsources.
+ *
+ * @param argv
+ */
+ public static void main(String[] argv)
+ {
+ // TODO: extracted from SequenceFetcher - convert to proper unit test with
+ // assertions
+
+ AlignmentI ds = null;
+ Vector<Object[]> noProds = new Vector<Object[]>();
+ String usage = "SequenceFetcher.main [-nodas] [<DBNAME> [<ACCNO>]]\n"
+ + "With no arguments, all DbSources will be queried with their test Accession number.\n"
+ + "With one argument, the argument will be resolved to one or more db sources and each will be queried with their test accession only.\n"
+ + "If given two arguments, SequenceFetcher will try to find the DbFetcher corresponding to <DBNAME> and retrieve <ACCNO> from it.\n"
+ + "The -nodas option will exclude DAS sources from the database fetchers Jalview will try to use.";
+ boolean withDas = true;
+ if (argv != null && argv.length > 0
+ && argv[0].toLowerCase().startsWith("-nodas"))
+ {
+ withDas = false;
+ String targs[] = new String[argv.length - 1];
+ System.arraycopy(argv, 1, targs, 0, targs.length);
+ argv = targs;
+ }
+ if (argv != null && argv.length > 0)
+ {
+ List<DbSourceProxy> sps = new SequenceFetcher(withDas)
+ .getSourceProxy(argv[0]);
+
+ if (sps != null)
+ {
+ for (DbSourceProxy sp : sps)
+ {
+ AlignmentI al = null;
+ try
+ {
+ al = sp.getSequenceRecords(argv.length > 1 ? argv[1] : sp
+ .getTestQuery());
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ System.err.println("Error when retrieving "
+ + (argv.length > 1 ? argv[1] : sp.getTestQuery())
+ + " from " + argv[0] + "\nUsage: " + usage);
+ }
+ SequenceI[] prod = al.getSequencesArray();
+ if (al != null)
+ {
+ for (int p = 0; p < prod.length; p++)
+ {
+ System.out.println("Prod " + p + ": "
+ + prod[p].getDisplayId(true) + " : "
+ + prod[p].getDescription());
+ }
+ }
+ }
+ return;
+ }
+ else
+ {
+ System.err.println("Can't resolve " + argv[0]
+ + " as a database name. Allowed values are :\n"
+ + new SequenceFetcher().getSupportedDb());
+ }
+ System.out.println(usage);
+ return;
+ }
+ ASequenceFetcher sfetcher = new SequenceFetcher(withDas);
+ String[] dbSources = sfetcher.getSupportedDb();
+ for (int dbsource = 0; dbsource < dbSources.length; dbsource++)
+ {
+ String db = dbSources[dbsource];
+ // skip me
+ if (db.equals(DBRefSource.PDB))
+ {
+ continue;
+ }
+ for (DbSourceProxy sp : sfetcher.getSourceProxy(db))
+ {
+ System.out.println("Source: " + sp.getDbName() + " (" + db
+ + "): retrieving test:" + sp.getTestQuery());
+ AlignmentI al = null;
+ try
+ {
+ al = sp.getSequenceRecords(sp.getTestQuery());
+ if (al != null && al.getHeight() > 0)
+ {
+ boolean dna = sp.isDnaCoding();
+ // try and find products
+ String types[] = jalview.analysis.CrossRef
+ .findSequenceXrefTypes(dna, al.getSequencesArray());
+ if (types != null)
+ {
+ System.out.println("Xref Types for: "
+ + (dna ? "dna" : "prot"));
+ for (int t = 0; t < types.length; t++)
+ {
+ System.out.println("Type: " + types[t]);
+ SequenceI[] prod = jalview.analysis.CrossRef
+ .findXrefSequences(al.getSequencesArray(), dna,
+ types[t], null)
+ .getSequencesArray();
+ System.out.println("Found "
+ + ((prod == null) ? "no" : "" + prod.length)
+ + " products");
+ if (prod != null)
+ {
+ for (int p = 0; p < prod.length; p++)
+ {
+ System.out.println("Prod " + p + ": "
+ + prod[p].getDisplayId(true));
+ }
+ }
+ }
+ }
+ else
+ {
+ noProds.addElement((dna ? new Object[] { al, al }
+ : new Object[] { al }));
+ }
+
+ }
+ } catch (Exception ex)
+ {
+ System.out.println("ERROR:Failed to retrieve test query.");
+ ex.printStackTrace(System.out);
+ }
+
+ if (al == null)
+ {
+ System.out.println("ERROR:No alignment retrieved.");
+ StringBuffer raw = sp.getRawRecords();
+ if (raw != null)
+ {
+ System.out.println(raw.toString());
+ }
+ else
+ {
+ System.out.println("ERROR:No Raw results.");
+ }
+ }
+ else
+ {
+ System.out.println("Retrieved " + al.getHeight() + " sequences.");
+ for (int s = 0; s < al.getHeight(); s++)
+ {
+ SequenceI sq = al.getSequenceAt(s);
+ while (sq.getDatasetSequence() != null)
+ {
+ sq = sq.getDatasetSequence();
+
+ }
+ if (ds == null)
+ {
+ ds = new Alignment(new SequenceI[] { sq });
+
+ }
+ else
+ {
+ ds.addSequence(sq);
+ }
+ }
+ }
+ System.out.flush();
+ System.err.flush();
+
+ }
+ if (noProds.size() > 0)
+ {
+ Enumeration<Object[]> ts = noProds.elements();
+ while (ts.hasMoreElements())
+
+ {
+ Object[] typeSq = ts.nextElement();
+ boolean dna = (typeSq.length > 1);
+ AlignmentI al = (AlignmentI) typeSq[0];
+ System.out.println("Trying getProducts for "
+ + al.getSequenceAt(0).getDisplayId(true));
+ System.out.println("Search DS Xref for: "
+ + (dna ? "dna" : "prot"));
+ // have a bash at finding the products amongst all the retrieved
+ // sequences.
+ SequenceI[] seqs = al.getSequencesArray();
+ Alignment prodal = jalview.analysis.CrossRef.findXrefSequences(
+ seqs, dna, null, ds);
+ System.out.println("Found "
+ + ((prodal == null) ? "no" : "" + prodal.getHeight())
+ + " products");
+ if (prodal != null)
+ {
+ SequenceI[] prod = prodal.getSequencesArray(); // note
+ // should
+ // test
+ // rather
+ // than
+ // throw
+ // away
+ // codon
+ // mapping
+ // (if
+ // present)
+ for (int p = 0; p < prod.length; p++)
+ {
+ System.out.println("Prod " + p + ": "
+ + prod[p].getDisplayId(true));
+ }
+ }
+ }
+
+ }
+
+ }
+ }
+
+}
assertEquals("signal peptide", sf.getType());
assertNull(sf.getDescription());
assertNull(sf.getStatus());
- assertEquals(1, sf.getPosition()); // wrong - Castor bug??
+ assertEquals(1, sf.getPosition());
assertEquals(1, sf.getBegin());
assertEquals(18, sf.getEnd());
sf = features.get(1);
assertEquals("propeptide", sf.getType());
assertEquals("Activation peptide", sf.getDescription());
- assertEquals(19, sf.getPosition()); // wrong - Castor bug??
+ assertEquals(19, sf.getPosition());
assertEquals(19, sf.getBegin());
assertEquals(20, sf.getEnd());
sf = features.get(2);
assertEquals("chain", sf.getType());
assertEquals("Granzyme B", sf.getDescription());
- assertEquals(21, sf.getPosition()); // wrong - Castor bug??
+ assertEquals(21, sf.getPosition());
assertEquals(21, sf.getBegin());
assertEquals(247, sf.getEnd());
}
/**
- * Test the method that formats the sequence name in Fasta style
+ * Test the method that formats the sequence id
*/
@Test(groups = { "Functional" })
- public void testConstructSequenceFastaHeader()
+ public void testGetUniprotEntryId()
{
- Uniprot u = new Uniprot();
- Reader reader = new StringReader(UNIPROT_XML);
- Vector<UniprotEntry> entries = u.getUniprotEntries(reader);
- UniprotEntry entry = entries.get(0);
-
- // source + accession ids + names
- String expectedName = "UniProt/Swiss-Prot|A9CKP4|A9CKP5|A9CKP4_AGRT5|A9CKP4_AGRT6";
- // protein names
- String expectedDescription = "Mitogen-activated protein kinase 13 Henry ";
+ UniprotEntry entry = new Uniprot().getUniprotEntries(
+ new StringReader(UNIPROT_XML)).get(0);
+ /*
+ * name formatted as source | accession ids | names
+ * source database converted to Jalview canonical name
+ */
+ String expectedName = "UNIPROT|A9CKP4|A9CKP5|A9CKP4_AGRT5|A9CKP4_AGRT6";
assertEquals(expectedName, Uniprot.getUniprotEntryId(entry));
+ }
+
+ /**
+ * Test the method that formats the sequence description
+ */
+ @Test(groups = { "Functional" })
+ public void testGetUniprotEntryDescription()
+ {
+ UniprotEntry entry = new Uniprot().getUniprotEntries(
+ new StringReader(UNIPROT_XML)).get(0);
+
+ /*
+ * recommended names concatenated with space separator
+ */
+ String expectedDescription = "Mitogen-activated protein kinase 13 Henry";
assertEquals(expectedDescription,
Uniprot.getUniprotEntryDescription(entry));
}
--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.ws.dbsources;
+
+import jalview.datamodel.AlignmentI;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class XfamFetcherTest
+{
+ @Test(groups = { "External" })
+ public void testRfamSeed() throws Exception
+ {
+ // RfamFull rff = new RfamFull();
+ RfamSeed rfs = new RfamSeed();
+
+ AlignmentI seedrf = rfs.getSequenceRecords(rfs.getTestQuery());
+ Assert.assertNotNull(seedrf, "Seed Alignment for " + rfs.getTestQuery()
+ + " didn't retrieve.");
+ Assert.assertTrue(seedrf.getHeight() > 1,
+ "Seed Alignment for " + rfs.getTestQuery()
+ + " didn't contain more than one sequence.");
+ }
+
+ @Test(groups = { "External" })
+ public void testPfamFullAndSeed() throws Exception
+ {
+ PfamFull pff = new PfamFull();
+ PfamSeed pfseed = new PfamSeed();
+
+ AlignmentI fullpf = pff.getSequenceRecords(pff.getTestQuery());
+ Assert.assertNotNull(fullpf, "Full Alignment for " + pff.getTestQuery()
+ + " didn't retrieve.");
+ Assert.assertTrue(fullpf.getHeight() > 1,
+ "Full Alignment for " + pff.getTestQuery()
+ + " didn't have more than one sequence.");
+ AlignmentI seedpf = pfseed.getSequenceRecords(pff.getTestQuery());
+ Assert.assertNotNull(seedpf, "Seed Alignment for " + pff.getTestQuery()
+ + " didn't retrieve.");
+
+ Assert.assertTrue(seedpf.getHeight() < fullpf.getHeight(),
+ "Expected Full alignment to have more sequences than seed for "
+ + pff.getTestQuery());
+ }
+}
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-@Test(groups = { "Network" })
+@Test(groups = { "External" })
public class DisorderAnnotExportImport
{
public static String testseqs = "examples/uniref50.fa";
*/
package jalview.ws.jabaws;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
import jalview.ws.jws2.Jws2Discoverer;
import java.util.Vector;
+import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@Test(groups = { "Functional" }, enabled = false)
public void testAnnotExport()
{
- fail("Not yet implemented");
+ Assert.fail("Not yet implemented");
}
public static jalview.ws.jws2.Jws2Discoverer getJabawsDiscoverer()
} catch (Exception e)
{
e.printStackTrace();
- fail("Aborting. Problem discovering services. Tried " + svcurls);
+ Assert.fail("Aborting. Problem discovering services. Tried "
+ + svcurls);
}
- assertTrue("Failed to discover any services at ", disc.getServices()
- .size() > 0);
+ Assert.assertTrue(disc.getServices().size() > 0,
+ "Failed to discover any services at ");
return disc;
}
import jalview.datamodel.SequenceI;
import jalview.util.DBRefUtils;
import jalview.ws.SequenceFetcher;
+import jalview.ws.dbsources.Pdb;
+import jalview.ws.dbsources.Uniprot;
import java.util.ArrayList;
import java.util.List;
/**
* Tests that standard protein database sources include Uniprot (as the first)
- * and also PDB. (Additional sources are dependent on available of DAS
+ * and also PDB. (Additional sources are dependent on availability of DAS
* services.)
*/
@Test(groups = { "Functional" })
{
String[] defdb = DBRefSource.PROTEINDBS;
List<DbSourceProxy> srces = new ArrayList<DbSourceProxy>();
+ SequenceFetcher sfetcher = new SequenceFetcher();
+ boolean pdbFound = false;
+
for (String ddb : defdb)
{
- SequenceFetcher sfetcher = new SequenceFetcher();
List<DbSourceProxy> srcesfordb = sfetcher.getSourceProxy(ddb);
if (srcesfordb != null)
{
+ // TODO is this right? get duplicate entries
srces.addAll(srcesfordb);
}
}
int i = 0;
int uniprotPos = -1;
- int pdbPos = -1;
- // append the selected sequence sources to the default dbs
for (DbSourceProxy s : srces)
{
- if (s instanceof jalview.ws.dbsources.Uniprot)
+ if (s instanceof Uniprot && uniprotPos == -1)
{
uniprotPos = i;
}
- if (s instanceof jalview.ws.dbsources.Pdb)
+ if (s instanceof Pdb)
{
- pdbPos = i;
+ pdbFound = true;
}
i++;
}
+ srces.size() + " sources (source was at position "
+ uniprotPos + ")", uniprotPos == 0);
assertTrue("Failed to find PDB source amongst " + srces.size()
- + " sources", pdbPos >= 0);
+ + " sources", pdbFound);
}
/**
sfs[0].getType()));
assertEquals(embl.getDbSource(), sfs[0].getFeatureGroup());
DBRefEntry[] dr = DBRefUtils.selectRefs(seq.getDBRefs(),
- DBRefSource.PROTEINSEQ);
+ new String[] { DBRefSource.UNIPROT, DBRefSource.UNIPROTKB,
+ DBRefSource.EMBLCDSProduct, DBRefSource.ENSEMBL });
assertNotNull(dr);
assertEquals("Expected a single Uniprot cross reference", 1, dr.length);
assertEquals("Expected cross reference map to be one amino acid", dr[0]
assertEquals("Expected local reference map to be 3 nucleotides", dr[0]
.getMap().getWidth(), 3);
AlignmentI sprods = CrossRef.findXrefSequences(
- alsq.getSequencesArray(), true, dr[0].getSource(),
- alsq.getDataset());
+ alsq.getSequencesArray(), true, dr[0].getSource(), alsq);
assertNotNull(
"Couldn't recover cross reference sequence from dataset. Was it ever added ?",
sprods);
File testSiftsFile = new File("test/jalview/io/" + testPDBId
+ ".xml.gz");
PDBfile pdbFile = new PDBfile(false, false, false);
- pdbFile.id = testPDBId;
+ pdbFile.setId(testPDBId);
siftsClient = new SiftsClient(pdbFile, testSiftsFile);
}
<string><![CDATA[664]]></string>
</property>
<property name="sourceName">
- <string><![CDATA[groovy-all-1.8.2.jar]]></string>
+ <string><![CDATA[groovy-all-2.4.6-indy.jar]]></string>
</property>
<property name="overrideUnixPermissions">
<boolean>false</boolean>
<boolean>true</boolean>
</property>
<property name="destinationName">
- <string><![CDATA[groovy-all-1.8.2.jar]]></string>
+ <string><![CDATA[groovy-all-2.4.6-indy.jar]]></string>
</property>
<property name="fileSize">
<long>6149494</long>
</property>
</object>
</method>
+ <method name="addElement">
+ <object class="com.zerog.ia.installer.actions.InstallZipfile" objectID="1000ddddfab93">
+ <property name="belongsToUninstallPhase">
+ <boolean>false</boolean>
+ </property>
+ <property name="rollbackEnabledCancel">
+ <boolean>true</boolean>
+ </property>
+ <property name="rollbackEnabledError">
+ <boolean>true</boolean>
+ </property>
+ <property name="ruleExpression">
+ <string><![CDATA[]]></string>
+ </property>
+ <property name="unixPermissions">
+ <string><![CDATA[664]]></string>
+ </property>
+ <property name="sourceName">
+ <string><![CDATA[htsjdk-1.133.jar]]></string>
+ </property>
+ <property name="overrideUnixPermissions">
+ <boolean>false</boolean>
+ </property>
+ <property name="sourcePath">
+ <string><![CDATA[/home/cruisecontrol/jalview/lib/]]></string>
+ </property>
+ <property name="shouldUninstall">
+ <boolean>true</boolean>
+ </property>
+ <property name="rollbackEnabledCancel">
+ <boolean>true</boolean>
+ </property>
+ <property name="rollbackEnabledError">
+ <boolean>true</boolean>
+ </property>
+ <property name="destinationName">
+ <string><![CDATA[htsjdk-1.133.jar]]></string>
+ </property>
+ <property name="fileSize">
+ <long>16046</long>
+ </property>
+ <property name="macBinary">
+ <boolean>false</boolean>
+ </property>
+ <property name="targetCheckKind">
+ <int>0</int>
+ </property>
+ <property name="ruleExpression">
+ <string><![CDATA[]]></string>
+ </property>
+ </object>
+ </method>
</object>
</property>
<property name="rulesFailedMessage">
<object refID="1f46cffffab93"/>
<object refID="1f46efeefab93"/>
<object refID="1936efeefab93"/>
+ <object refID="1000ddddfab93"/>
<object refID="10936efeefab93"/>
<object refID="11936efeefab93"/>
<object refID="12936efeefab93"/>
<object refID="1f46cffffab93"/>
<object refID="1f46efeefab93"/>
<object refID="1936efeefab93"/>
+ <object refID="1000ddddfab93"/>
<object refID="10936efeefab93"/>
<object refID="11936efeefab93"/>
<object refID="12936efeefab93"/>