Merge branch 'patch/JAL-3874_newJmolAndGradleDedup' into develop
authorJim Procter <j.procter@dundee.ac.uk>
Thu, 23 Sep 2021 13:04:02 +0000 (14:04 +0100)
committerJim Procter <j.procter@dundee.ac.uk>
Thu, 23 Sep 2021 13:04:02 +0000 (14:04 +0100)
154 files changed:
help/help/help.jhm
help/help/helpTOC.xml
help/help/html/features/clarguments.html
help/help/html/features/commandline.html
help/help/html/features/groovy.html
help/help/html/features/jvlfiles.html
help/help/html/features/preferences.html
help/help/html/features/search.html
help/help/html/features/search.png
help/help/html/features/seqfetch.html
help/help/html/groovy/featuresCounter.html
help/help/html/index.html
help/help/html/keys.html
help/help/html/logging.html [new file with mode: 0644]
help/help/html/memory.html
help/help/html/releases.html
help/help/html/webServices/newsreader.html
help/help/html/whatsNew.html
resources/fts/tdbeacons_data_columns.txt
resources/lang/Messages.properties
src/jalview/analysis/AlignSeq.java
src/jalview/analysis/AlignmentUtils.java
src/jalview/analysis/AnnotationSorter.java
src/jalview/analysis/Conservation.java
src/jalview/analysis/Finder.java
src/jalview/analysis/GeneticCodes.java
src/jalview/analysis/SequenceIdMatcher.java
src/jalview/bin/Cache.java
src/jalview/bin/HiDPISetting.java
src/jalview/bin/Jalview.java
src/jalview/bin/JalviewLite.java
src/jalview/bin/Launcher.java
src/jalview/bin/MemorySetting.java
src/jalview/commands/ChangeCaseCommand.java
src/jalview/commands/EditCommand.java
src/jalview/datamodel/AlignmentAnnotation.java
src/jalview/datamodel/DBRefEntry.java
src/jalview/datamodel/DBRefSource.java
src/jalview/datamodel/MappedFeatures.java
src/jalview/datamodel/PDBEntry.java
src/jalview/datamodel/Sequence.java
src/jalview/datamodel/SequenceI.java
src/jalview/datamodel/features/FeatureMatcher.java
src/jalview/datamodel/features/FeatureMatcherSet.java
src/jalview/ext/ensembl/EnsemblInfo.java
src/jalview/ext/jmol/JmolParser.java
src/jalview/ext/rbvi/chimera/ChimeraCommands.java
src/jalview/fts/core/FTSRestClient.java
src/jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/AnnotationExporter.java
src/jalview/gui/AnnotationLabels.java
src/jalview/gui/AppJmol.java
src/jalview/gui/BlogReader.java
src/jalview/gui/Desktop.java
src/jalview/gui/FeatureSettings.java
src/jalview/gui/Finder.java
src/jalview/gui/JDatabaseTree.java
src/jalview/gui/PopupMenu.java
src/jalview/gui/Preferences.java
src/jalview/gui/SeqPanel.java
src/jalview/gui/StructureChooser.java
src/jalview/gui/TreePanel.java
src/jalview/gui/UserDefinedColours.java
src/jalview/gui/WebserviceInfo.java
src/jalview/gui/structurechooser/PDBStructureChooserQuerySource.java
src/jalview/gui/structurechooser/StructureChooserQuerySource.java
src/jalview/gui/structurechooser/TDBResultAnalyser.java
src/jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.java
src/jalview/io/AppletFormatAdapter.java
src/jalview/io/EmblFlatFile.java
src/jalview/io/FeaturesFile.java
src/jalview/io/FileFormat.java
src/jalview/io/FileFormats.java
src/jalview/io/FlatFile.java [new file with mode: 0644]
src/jalview/io/FormatAdapter.java
src/jalview/io/GenBankFile.java [new file with mode: 0644]
src/jalview/io/IdentifyFile.java
src/jalview/io/JPredFile.java
src/jalview/io/JSONFile.java
src/jalview/io/JalviewFileFilter.java
src/jalview/io/JalviewFileView.java
src/jalview/io/JnetAnnotationMaker.java
src/jalview/io/MSFfile.java
src/jalview/io/NewickFile.java
src/jalview/io/SequenceAnnotationReport.java
src/jalview/io/StockholmFile.java
src/jalview/io/StructureFile.java
src/jalview/io/gff/ExonerateHelper.java
src/jalview/io/packed/ParsePackedSet.java
src/jalview/io/vcf/VCFLoader.java
src/jalview/javascript/log4j/Level.java
src/jalview/json/binding/biojson/v1/ColourSchemeMapper.java
src/jalview/project/Jalview2XML.java
src/jalview/renderer/AnnotationRenderer.java
src/jalview/schemes/ColourSchemeLoader.java
src/jalview/schemes/ColourSchemes.java
src/jalview/schemes/FeatureColour.java
src/jalview/schemes/ResidueProperties.java
src/jalview/schemes/UserColourScheme.java
src/jalview/structure/StructureImportSettings.java
src/jalview/structures/models/AAStructureBindingModel.java
src/jalview/util/CaseInsensitiveString.java
src/jalview/util/ColorUtils.java
src/jalview/util/DBRefUtils.java
src/jalview/util/DnaUtils.java
src/jalview/util/MessageManager.java
src/jalview/util/ParseHtmlBodyAndLinks.java
src/jalview/util/StringUtils.java
src/jalview/util/matcher/Matcher.java
src/jalview/ws/DBRefFetcher.java
src/jalview/ws/dbsources/EmblFlatfileSource.java
src/jalview/ws/dbsources/EmblXmlSource.java
src/jalview/ws/dbsources/TDBeacons.java
src/jalview/ws/dbsources/Uniprot.java
src/jalview/ws/dbsources/Xfam.java
src/jalview/ws/ebi/EBIFetchClient.java
src/jalview/ws/io/mime/MimeTypes.java
src/jalview/ws/jws1/JPredClient.java
src/jalview/ws/jws1/MsaWSClient.java
src/jalview/ws/jws2/MsaWSClient.java
src/jalview/ws/jws2/SequenceAnnotationWSClient.java
src/jalview/ws/rest/InputType.java
src/jalview/ws/rest/RestJobThread.java
src/jalview/ws/sifts/SiftsClient.java
src/mc_view/PDBChain.java
src/mc_view/PDBfile.java
test/jalview/analysis/AlignmentGenerator.java
test/jalview/analysis/RnaTest.java
test/jalview/commands/EditCommandTest.java
test/jalview/datamodel/PDBEntryTest.java
test/jalview/datamodel/ResidueCountTest.java
test/jalview/datamodel/SequenceTest.java
test/jalview/ext/ensembl/EnsemblCdnaTest.java
test/jalview/ext/ensembl/EnsemblGeneTest.java
test/jalview/ext/jmol/JmolParserTest.java
test/jalview/ext/paradise/TestAnnotate3D.java
test/jalview/fts/threedbeacons/TDBeaconsFTSRestClientTest.java
test/jalview/fts/threedbeacons/p01308_tdb_resp.txt
test/jalview/gui/StructureChooserTest.java
test/jalview/io/EmblFlatFileTest.java
test/jalview/io/FileFormatsTest.java
test/jalview/io/GenBankFileTest.java [new file with mode: 0644]
test/jalview/io/IdentifyFileTest.java
test/jalview/io/J03321.embl.txt
test/jalview/io/J03321.gb [new file with mode: 0644]
test/jalview/ws/gui/Jws2ParamView.java
test/jalview/ws/jabaws/DisorderAnnotExportImport.java
test/jalview/ws/jabaws/RNAStructExportImport.java
test/jalview/ws/jws2/ParameterUtilsTest.java
test/junit/extensions/PrivilegedAccessor.java
test/mc_view/PDBChainTest.java
utils/debian/build_gradle.patch [new file with mode: 0644]
utils/debian/debian_build.gradle [new file with mode: 0644]

index 99d010d..7dbb76d 100755 (executable)
    
    <mapID target="importvcf" url="html/features/importvcf.html" />
    <mapID target="importvcf.attribs" url="html/features/importvcf.html#attribs" />
+   <mapID target="logging" url="html/logging.html" />
 </map>
index a0c7fe6..a72f5ac 100755 (executable)
@@ -27,7 +27,7 @@
         <tocitem text="Virtual Features in CDS/Protein Views" target="splitframe.virtualfeats"/>
                                <tocitem text="VCF Variant Attributes" target="importvcf.attribs"/>
                                <tocitem text="Feature Filters and Attribute Colourschemes" target="features.featureschemes" />
-                               
+        <tocitem text="The Java Console, Logging and Reporting Bugs" target="logging" />
                </tocitem>
                
                <tocitem text="Editing Alignments" target="edit" />
                        </tocitem>
                </tocitem>
                <tocitem text="Preferences" target="preferences" />
+    <tocitem text="The Java Console, Logging and Reporting Bugs" target="logging" />
                <tocitem text="Scripting with Groovy" target="groovy">
                        <tocitem text="Groovy Features Counter example" target="groovy.featurescounter"/>
                </tocitem>
index 0d800cf..1eecfb9 100644 (file)
   parameters, then include it at the beginning of the command line to
   ensure they are processed before any remaining arguments.
   <br>
+  Typical command line execution follows the following pattern:
+  <pre>
+  jalview -open &lt;Alignment File/URL&gt; [additional import arguments] [export arguments]
+  </pre>
+  
   <table width="100%" border="1" cellspacing="0" cellpadding="0">
     <tr>
       <td width="27%"><div align="center">-nodisplay</div></td>
           User Interface. (automatically disables questionnaire, version
           and usage stats checks)</div></td>
     </tr>
-
+    <tr>
+      <td><div align="center">-open FILE/URL</div></td>
+      <td><div align="left">Specify the alignment file to
+          open or process by providing additional arguments.</div></td>
+    </tr>
     <tr>
       <td><div align="center">-props FILE/URL</div></td>
       <td><div align="left">Use the given Jalview properties
index e00d390..0ef78f9 100644 (file)
@@ -38,7 +38,7 @@
 
   <ul>
     <li>Standard installation on Linux/Unix:<pre>
-       /PATH_TO_JALVIEW/Jalview -open http://www.jalview.org/examples/jpred_msa.fasta -annotations http://www.jalview.org/examples/jpred_msa.seq.concise -colour Clustal</pre>
+       /PATH_TO_JALVIEW/Jalview -open https://www.jalview.org/examples/jpred_msa.fasta -annotations https://www.jalview.org/examples/jpred_msa.seq.concise -colour Clustal</pre>
     </li>
     <li>Standard installation on Windows:<pre>
       \PATH_TO_JALVIEW\Jalview.exe -open %HOMEPATH%\myalignment.fa</pre>
@@ -65,10 +65,31 @@ open /Applications/Jalview.app --args -open ~/myalignment.fa</pre><em>(put
   </p>
   <p>
     <strong>Passing JVM Arguments to Jalview</strong><br /> If you need
-    to modify parameters for Jalview's Java Virtual Machine, then take a
-    look at the instructions for how to <a href="../memory.html#jvm">setting
-      the JVM's maximum memory</a>.
+    to modify parameters for Jalview's Java Virtual Machine, or
+    configure system properties, then take a look at the instructions
+    for how to <a href="../memory.html#jvm">setting the JVM's
+      maximum memory</a>.<br /> 
+  <p>
+    <strong>Changing Jalview's 'Look and Feel'</strong> <br />If you
+    are experiencing issues with the font size or layout of Jalview's
+    GUI, you can try changing Jalview's 'Look and feel' by
+    specifying a custom system property 'laf' on startup (see <a
+      href="../memory.html#jvm">setting the JVM's memory</a> for
+    instructions on how to do this for your platform). <br />For the
+    Jalview standalone executable jar, simply provide one of the
+    property settings before the -jar argument
   </p>
+  <ul>
+    <li>-Dlaf=system (default look and feel for the OS)</li>
+    <li>-Dlaf=crossplatform (Java's Metal Look and Feel)</li>
+    <li>-Dlaf=nimbus (Java's alternative Nimbus Look and Feel)</li>
+    <li>-Dlaf=mac (only has an effect on OSX)</li>
+    <li>-Dlaf=gtk (only has an effect on Linux)</li>
+  </ul>
+  The currently configured look and feel is logged to Jalview's console.
+  Once the look and feel has been changed, it will be stored in
+  Jalview's .jalview_properties file for future Jalview sessions.
+
   <p>&nbsp;</p>
   <p>&nbsp;</p>
 </body>
index ead4436..cc91154 100644 (file)
@@ -39,7 +39,7 @@
     installation of Groovy. Just select <strong>Tools&#8594;Groovy
       Console...</strong> 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
+      href="https://groovy-lang.org/groovyconsole.html">Groovy
       Console</a> appear. This allows you to interactively execute Groovy
     scripts whilst Jalview is running. We've also provided a <strong>Calculations&#8594;Execute
       Groovy Script</strong> button so you can execute the currently loaded
@@ -101,7 +101,7 @@ print currentAlFrame.getTitle();</pre>
     InstallAnywhere version of Jalview, you can find additional groovy
     scripts in the examples/groovy subfolder of the installation
     directory. The examples are also available at <a
-      href="http://www.jalview.org/examples/groovy">http://www.jalview.org/examples/groovy</a>.
+      href="https://www.jalview.org/examples/groovy">https://www.jalview.org/examples/groovy</a>.
   </p>
   <p>
     <em>Using Groovy to add new Alignment Calculations</em><br />We've
@@ -115,8 +115,8 @@ print currentAlFrame.getTitle();</pre>
     <em>Creating custom colourschemes</em><br/>
     You can create your own alignment colourschemes with a groovy script. We've provided two examples:<br/>
     <ul>
-    <li><a href="http://www.jalview.org/examples/groovy/colourConserved.groovy">colourConserved.groovy</a> creates an 'Conserved' colourscheme - similar to the classic <a href="http://www.nrbsc.org/old/gfx/genedoc/">GeneDOC</a> shading model.</li>
-    <li><a href="http://www.jalview.org/examples/groovy/colourUnconserved.groovy">colourUnconserved.groovy</a> creates an 'Unconserved' colourscheme, where any unconserved residues are coloured pink.</li>
+    <li><a href="https://www.jalview.org/examples/groovy/colourConserved.groovy">colourConserved.groovy</a> creates an 'Conserved' colourscheme - similar to the classic <a href="http://www.nrbsc.org/old/gfx/genedoc/">GeneDOC</a> shading model.</li>
+    <li><a href="https://www.jalview.org/examples/groovy/colourUnconserved.groovy">colourUnconserved.groovy</a> creates an 'Unconserved' colourscheme, where any unconserved residues are coloured pink.</li>
     
     </ul>
   </p>
index 27742b3..e23af30 100644 (file)
   <pre>
 # Jalview Launch File
 # Please install the Jalview Desktop from 
-# http://www.jalview.org/getdown/release
+# https://www.jalview.org/getdown/release
 # and then try to open this file again
 jalview.apparg=-open
-jalview.apparg=http://www.jalview.org/examples/jpred_msa.fasta
+jalview.apparg=https://www.jalview.org/examples/jpred_msa.fasta
 jalview.apparg=-annotations
-jalview.apparg=http://www.jalview.org/examples/jpred_msa.seq.concise
+jalview.apparg=https://www.jalview.org/examples/jpred_msa.seq.concise
 jalview.apparg=-colour
 jalview.apparg=Clustal
 </pre>
@@ -62,7 +62,7 @@ jalview.apparg=Clustal
 # Please install the Jalview Desktop from 
 # http://www.jalview.org/getdown/release
 # and then try to open this file again
-appbase=http://www.jalview.org/getdown/archive/2_10_5/
+appbase=https://www.jalview.org/getdown/archive/2_10_5/
 </pre>
   For security, the Jalview application will only allow
   <em>appbase</em> URLs from www.jalview.org.
index 58b06db..5a3fe7a 100755 (executable)
     <em>Add Temperature Factor annotation to alignment</em> - if
     selected, values extracted from the Temperature Factor column for
     the backbone atoms in the PDB file will be extracted as annotation
-    lines shown on the alignment.
+    lines shown on the alignment.<br/><em>Since 2.11.2, scores from the Temperature Column for structures imported via the 3D-Beacons network may be shown instead as model quality or reliability scores.</em>
   <p>
-    <em>Default structure viewer</em> - choose Jmol or CHIMERA for
+    <em>Default structure viewer</em> - choose Jmol, CHIMERA, CHIMERAX or PYMOL for
     viewing 3D structures.
   <p>
-    <em>Path to Chimera program</em> - Optional, as Jalview will search
-    standard installation paths for Windows, Linux or MacOS. If you have
-    installed Chimera in a non-standard location, you can specify it
-    here, by entering the full path to the Chimera executable program.
-    Double-click this field to open a file chooser dialog.
-  <p>
+    <em>Path to Chimera/X/Pymol program</em> - Optional, as Jalview will search
+    standard installation paths for Windows, Linux or MacOS. If Jalview cannot locate the installation for your selected structure viewer, a dialog will be shown. If you have
+    installed the chosen viewer in a non-standard location, you can specify it
+    here, by entering the full path to its executable.<br/>For Chimera, locate the path to the chimera program, similarly for ChimeraX and Pymol. Rather than typing in the path, you can also <em>double-click this field</em> to open a file chooser dialog.</p>
   <p>
     <em>PDB Fields shown in Search and Structure Summaries</em> - ticks
     in this table indicate fields shown by default when browsing results
index eec68ee..837d7b3 100755 (executable)
@@ -36,7 +36,7 @@ td {
   </p>
   <p>The search box is displayed by pressing Control and F or
     selecting &quot;Find...&quot; from the &quot;Search&quot; menu.</p>
-  <img src="search.png" width="398" height="124">
+  <img src="search.png" width="400" height="152">
   <p>&quot;Find next&quot; will find the next occurrence of the
     specified and adjust the alignment window view to show it, and
     &quot;Find all&quot; highlights all matches for a pattern. The
@@ -48,18 +48,19 @@ td {
       of posix and perl style regex - see below for a summary)</li>
     <li>Gaps are ignored when matching the query to the sequences
       in the alignment.</li>
+    <li>Hidden columns can optionally be ignored (<em>since Jalview 2.11</em>)</li>
     <li>The search is applied to both sequences and their IDs, and
       optionally also to the description string (<em>since Jalview
         2.10</em>)
     </li>
     <li>If a region is selected, then search will <strong>only</strong>
-      be performed on that region.
+      be performed on that region.<br />
+    <em>Tip: to quickly clear the current selection, click the
+        alignment view you wish to search, then press 'Escape'.</em>
     </li>
-    <li>To quickly clear the current selection, press the
-      &quot;Escape&quot; key.</li>
     <li>Tick the &quot;Match Case&quot; box to perform a case
       sensitive search.</li>
-    <li>To access a <a ref="#queryhistory">previously used
+    <li>To access a <a href="#queryhistory">previously used
         query</a> press the down arrow or click on the button on the right
       of the text field.
   </ul>
@@ -155,12 +156,13 @@ td {
     stored along with your Jalview user preferences. To open the search
     history, click on the button to the right of the query field, or
     press the down arrow key.</p>
-  <img src="searchhist.png" width="404" height="185" align="left" />
-  <p>The search history keeps up to 99 queries by default. To clear
+  <p><img src="searchhist.png" width="404" height="185" />
+  </p><p>The search history keeps up to 99 queries by default. To clear
     the history, or modify the size of the history, right-click the text
     box.</p>
-  <img src="searchclearhist.png" width="402" height="127" align="left" />
-  <p>
+  <p><img src="searchclearhist.png" width="402" height="127"/>
+  </p>
+<p width="100%">
     <strong>Other dialogs that provide a query history</strong>
   </p>
   <p>
index 89adb1a..47c18f4 100644 (file)
Binary files a/help/help/html/features/search.png and b/help/help/html/features/search.png differ
index e726c49..4e9a75f 100755 (executable)
       &quot;OK&quot; to initiate the retrieval.</li>
   </ol>
 
-  <p>If you use the WSDBFetch sequence fetcher services (EMBL,
-    UniProt, PFAM, and RFAM) in work for publication, please cite:</p>
-  <p>
-    Pillai S., Silventoinen V., Kallio K., Senger M., Sobhany S., Tate
-    J., Velankar S., Golovin A., Henrick K., Rice P., Stoehr P., Lopez
-    R. <br> SOAP-based services provided by the European
-    Bioinformatics Institute.<br> Nucleic Acids Res. 33(1):W25-W28
-    (2005) <br> <br>
-  </p>
+  <p>If you use the Sequence Fetcher, please remember to cite the
+    corresponding services (linked to below):</p>
+  <ul>
+    <li>Ensembl - <a
+      href="https://github.com/Ensembl/ensembl-rest/wiki#citing">The
+        Ensembl REST API</a></li>
+    <li>EMBL/EMBLCDS - Provided by the <a
+      href="https://www.ebi.ac.uk/ena/browser/api/#/ENA_Browser_Data_API/getFlatFileUsingGET">European
+        Nucleotide Archive's ENA Data API</a><br />
+    <em>Note: Versions of Jalview prior to 2.11.1.1 employed the
+        XML endpoint of the ENA browser, which was retired in August
+        2020.</em></li>
+    <li>Uniprot - Free Text Search and Retrieval via the <a
+      href="https://www.uniprot.org/help/api">Uniprot REST API</a></li>
+    <li>PDB - Free Text Search via the <a
+      href="https://www.ebi.ac.uk/pdbe/api/doc/search.html">PDBe
+        REST API</a> and retrieval via <a
+      href="https://www.ebi.ac.uk/Tools/dbfetch/">WSDbFetch</a><br />
+      Pillai S., Silventoinen V., Kallio K., Senger M., Sobhany S., Tate
+      J., Velankar S., Golovin A., Henrick K., Rice P., Stoehr P., Lopez
+      R. <br> SOAP-based services provided by the European
+      Bioinformatics Institute.<br> Nucleic Acids Res.
+      33(1):W25-W28 (2005) <br> <br>
+    </li>
+  </ul>
 </body>
 </html>
index 3b6705b..bd7144e 100644 (file)
@@ -43,7 +43,7 @@
   </ol>
   <strong>Please note: The 2.10.2 feature counting interface is not compatible with earlier versions.</strong><br/><br/>
   <em><a
-    href="http://www.jalview.org/examples/groovy/featuresCounter.groovy">http://www.jalview.org/examples/groovy/featuresCounter.groovy</a>
+    href="https://www.jalview.org/examples/groovy/featuresCounter.groovy">https://www.jalview.org/examples/groovy/featuresCounter.groovy</a>
     - rendered with <a href="http://hilite.me">hilite.me</a></em>
   <!-- HTML generated using hilite.me --><div style="background: #f8f8f8; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%"><span style="color: #408080; font-style: italic">/*</span>
 <span style="color: #408080; font-style: italic"> * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)</span>
index 442c508..a6bb1b6 100755 (executable)
@@ -45,7 +45,7 @@
   <p>
     For more information, you might also want to take a look at the
     documentation section of the Jalview website (<a
-      href="http://www.jalview.org/about/documentation">http://www.jalview.org/about/documentation</a>).
+      href="https://www.jalview.org/about/documentation">https://www.jalview.org/about/documentation</a>).
   </p>
   <p>
     If you are using the Jalview Desktop application and are looking for
     google the online version of these pages. If you don't find what you
     are looking for, or want to report a bug or make a feature request,
     then get in contact over at <a
-      href="http://www.jalview.org/community">http://www.jalview.org/community</a>
+      href="https://www.jalview.org/community">https://www.jalview.org/community</a>
+  </p>
+  <p>
+    <strong>Logging, troubleshooting and reporting bugs</strong><br />If
+    something seems to be wrong with your Jalview installation, or you
+    think you've found a problem, take a look at <a href="logging.html">Jalview's
+      logging and bug reporting</a> documentation.
   </p>
-
   <p>
     <strong>Citing Jalview</strong><br />If you use Jalview in your
     work, please cite the Jalview 2 paper in Bioinformatics:
index 29b6813..0faa1d5 100755 (executable)
       <td><strong>Cursor Keys<br> (Arrow Keys)
       </strong></td>
       <td>Cursor</td>
-      <td>Move cursor around alignment</td>
+      <td>Move cursor around alignment.<br /> Press SHIFT to move
+        cursor from an aligned region to next gap, or to the next
+        aligned region when at a gap.
+      </td>
     </tr>
     <tr>
       <td><strong>Cursor Keys<br> (Arrow Keys)
diff --git a/help/help/html/logging.html b/help/help/html/logging.html
new file mode 100644 (file)
index 0000000..0975a47
--- /dev/null
@@ -0,0 +1,212 @@
+<html>
+<!--
+ * 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.
+ -->
+<head>
+<title>The Java Console, Logging and Reporting Bugs</title>
+</head>
+<body>
+  <p>
+    <strong>The Java Console, Logging and Reporting Bugs<br /></strong>
+  </p>
+  <p>
+    Like most programs, Jalview contains bugs, despite our best efforts.
+    However, Jalview also produces a series of messages during its
+    operation, often referred to as 'logs'. These logs provide a record
+    of Jalview's operation. They can also be extremely useful when <a
+      href="#reportingbugs">reporting bugs</a>, since they help the
+    Jalview developers diagnose and find a workaround for specific
+    problems that you might encounter.
+  </p>
+  <p>
+    The primary place to look for logs is in the <a href="#java_console">Java
+      Console</a> which you can open from within Jalview by going to the <em>Tools</em>
+    menu and checking the box next to <em>Show Java Console</em>. This
+    option is stored in your Jalview preferences file and so is
+    remembered across Jalview sessions.
+  </p>
+  <p>The Java Console will show you information about what the
+    Jalview application is doing (often in the background) whilst it is
+    running.</p>
+  <p>However, when tracking down problems preventing Jalview from
+    starting up properly, you need to look at the startup logs - which
+    are not shown in the Jalview Console. The location of these depends
+    on how you launched Jalview:</p>
+  <p>
+    <strong>Jalview Desktop Installation Launch Logs</strong><br />If you are using
+    a standard desktop version of Jalview installed from one of our
+    install4j installers, then messages about Jalview's initial launch
+    can be found in
+  <pre>JALVIEW_APP_DIR/launcher.log</pre>
+  where
+  <em>JALVIEW_APP_DIR</em> is the directory that Jalview's application
+  was installed into.
+  <br /> For Jalview 2.11.0 onwards:
+  <ul>
+    <li>In Windows this is <em>%APPDATA%\Local\Jalview</em> by
+      default
+    </li>
+    <li>In macOS this is <em>/Applications/Jalview.app/Contents/Resources/app</em>
+      by default
+    </li>
+    <li>In Linux and other Unix OSes this is <em>~/opt/jalview</em>
+      by default
+    </li>
+  </ul>
+  <p><strong>Jalview Executable Jar Launch Logs</strong><br/>If you are using the Jalview executable jar file (also
+  used by bioconda and OSX homebrew installations) then the default run class (
+  <em>jalview.bin.Launcher</em> -- a minimised launcher that will set
+  memory and linux dpi settings before re-launching
+  <em>jalview.bin.Jalview</em>), will output logging information to
+  STDOUT and STDERR.
+  </p>
+
+  <p><strong>
+    <a name="java_console">Java Console and Log Level</a>
+  </strong></p>
+  <p>
+    The Java Console is opened by selecting <strong>Tools
+      &rarr; Show Java Console</strong>. The visibility of the console is stored
+    in your preferences, so if you quit Jalview with the console open,
+    it will be shown the next time you start Jalview. You can close the
+    console by selecting the same menu option again, or just closing the
+    console window.
+  </p>
+  <p>The Java Console's text display always shows information about
+    your system and Jalview installation details. The rest are the most
+    recent messages output during your Jalview session. Some messages
+    are only captured by the console when it is open, so to get a full
+    log for debugging a problem, enable the console and then restart
+    Jalview.</p>
+
+  <p>
+    You can temporarily control the detail of what appears as output by
+    selecting a <em>Log level</em> using the drop-down list at the
+    bottom left of the console. There are several levels to choose from:
+    The most verbose is TRACE, followed by DEBUG, INFO, WARN. When the
+    Console is opened, the default level will be chosen (INFO).
+  </p>
+  <p>
+    <strong>Note! If you change the log level in the Java
+      Console, this change will only persist for as long as the console
+      is open. Once you close the console the log level will revert back
+      to what it had been when you opened the console (usually INFO).</strong>
+  </p>
+  <p><strong>Permanently changing Jalview's default log level</strong><br/>
+    You can change the default log level by editing the Jalview
+    preferences file, <em>.jalview_properties</em>, found in your home
+    directory (on Windows: %HOMEPATH%, or the folder above 'My
+    Documents'; on macOS: ~ or /Users/<em>username</em>; on linux/unix:
+    ~ or /home/<em>username</em>), and setting the property <em>logs.Jalview.level</em>
+    to the log level you prefer, e.g.
+  <pre>
+  logs.Jalview.level=DEBUG
+  </pre>
+  You can also set the property
+  <pre>
+  logs.Axis.level=DEBUG
+  </pre>
+  <p>to get debug information for Jalview's JPred service. The Axis log
+  level cannot be set from within the Java Console.
+  </p>
+  <p>
+    You can also set the <em>logs.jalview.level</em> property to a log level
+    not usually presented in the Java Console (though restricted to log
+    levels used by Apache Log4j -- see <a
+      href="https://logging.apache.org/log4j/2.x/manual/customloglevels.html">Log4j
+      Custom Log Levels</a> for details of the standard log levels
+    available). Jalview does not currently define any custom log levels.
+    If you do set the property with a log level that is normally not
+    visible in the Java Console this should be respected and visibly
+    selected when you open the console.
+  </p>
+  <p>
+    The <em>Clear</em> button at the bottom of the console will clear
+    all logging messages except for the initial system information which
+    is rewritten to the console.
+  </p>
+  <p>
+    The <em>Copy to clipboard</em> button at the bottom right of the
+    console will copy all of the text in the console to your system
+    clipboard, ready to paste into another application (e.g. email
+    composer or issue tracker).
+  </p>
+
+  <p><strong><a name="reportingbugs">Reporting Bugs</a></strong></p>
+
+  <p>
+    If you come across a problem in Jalview where something is not
+    working as described, or how you think it should, you should first
+    check the <a href="https://www.jalview.org/faq">Jalview FAQ</a> to
+    see if this is a known problem and if there is a suggested
+    workaround.
+  </p>
+  <p>
+    If there is no FAQ answer covering your problem then you can submit
+    a bug report on the <a href="https://issues.jalview.org/">Jalview
+      Issue Tracker</a>. It is good practice to search the issue tracker
+    first to see if the issue has already been reported. If an issue
+    already exists please continue to add your own comments to the issue
+    which may well help narrow down the problem, if not then you can
+    create an account and submit a new bug report:
+  </p>
+  <p>
+    Make sure that you set Project to <em>Jalview (JAL)</em>, and Issue
+    Type to <em>Bug</em> or <em>New Feature</em> or <em>Improvement</em>
+    appropriately.<br /> Give a one line summary of the issue in the <em>Summary</em>.
+    <br /> In the <em>Environment</em> text box you can describe the
+    system you are using. This is usually most easily done by opening
+    the Java Console, clicking the <em>Clear</em> button, and then
+    immediately on the <em>Copy to clipboard</em> button, and then
+    pasting the clipboard into the text box.
+  </p>
+  <p>
+    You can then give more detailed information about how to recreate
+    the problem in the <em>Description</em> text box. If you want to
+    attach any screenshots or example alignment files that demonstrate
+    the problem then you can drag them to the Create Issue dialog in
+    your browser, or use the <em>Attachment</em> browse facility to
+    locate them on your computer.
+  </p>
+
+  <p>
+    To help the Jalview team with diagnosing a particular issue, it is
+    really helpful if you can also add more detailed logs output whilst
+    re-creating the problem. To do this, open the Java Console, click
+    the <em>Clear</em> button and select TRACE in the <em>Log level</em>
+    drop down list. <br /> Whilst leaving the console open, perform the
+    task in Jalview that re-creates the problem. <br /> Then you can
+    copy the debug information in the Java Console by clicking on the <em>Copy
+      to clipboard</em> button and then paste that into the Description, or a
+    Comment of your issue.
+  </p>
+
+  <p>
+    For other queries or comments about Jalview, remember you can
+    contact the Jalview team using email via the
+    <a href="https://www.jalview.org/mailman/listinfo/jalview-discuss">Jalview
+      discussion list</a>, on Twitter <a
+      href="https://twitter.com/Jalview/">@Jalview</a>, or for technical
+    discussions, via the Jalview developer's chatroom at
+    <a href="https://gitter.im/jalview/developers">https://gitter.im/jalview/developers</a>.
+  </p>
+
+</body>
+</html>
index 0374dcb..7d6fb85 100755 (executable)
@@ -80,7 +80,7 @@
       arguments, but you must put the <em>jvl</em> file first, e.g. <pre>
       /PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvl /path/to/alignments/myalignment.fa</pre> Alternatively, you can use the standard Jalview command line
       arguments with or without the jvl file (first), e.g. <pre>
-       /PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvl -open http://www.jalview.org/examples/jpred_msa.fasta -annotations http://www.jalview.org/examples/jpred_msa.seq.concise -colour Clustal</pre> You can use command line arguments to control memory
+       /PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvl -open https://www.jalview.org/examples/jpred_msa.fasta -annotations https://www.jalview.org/examples/jpred_msa.seq.concise -colour Clustal</pre> You can use command line arguments to control memory
       settings in Windows and macOS too: <br /> In Windows you must
       use, e.g. <pre>
       \PATH_TO_JALVIEW\Jalview.exe %HOMEPATH%\mymemorysetting.jvl -open %HOMEPATH%\myalignment.fa</pre> In macOS you can use the macOS <em>open</em> command like this: <pre>
index c83741a..fe4d257 100755 (executable)
@@ -1,3 +1,4 @@
+
 <html>
 <!--
  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
@@ -51,23 +52,351 @@ li:before {
   </p>
   <table border="1">
     <tr>
-      <th nowrap><em>Release</em></th>
+      <th nowrap><a id="Jalview.$$Version-Rel$$"><em>Release</em></th>
       <th><em>New Features</em></th>
       <th><em>Issues Resolved</em></th>
     </tr>
     <tr>
       <td width="60" align="center" nowrap><strong><a
+          id="Jalview.2.11.2">2.11.2</a><a id="Jalview.2.11.2.0">.0</a><br />
+          <em>29/09/2021</em></strong></td>
+      <td align="left" valign="top">
+       <ul>
+         <li><!-- --></li>
+       </ul>
+       <em>Development</em>
+        <ul>
+          <li>Updated building instructions</li>
+        </ul></td>
+      <td>
+        <ul>
+          <li>
+            <!-- JAL-3840 -->Occupancy calculation is incorrect for
+            alignment columns with over -1+2^32 gaps (breaking filtering
+            and display)
+          </li>
+          <li>
+            <!-- JAL-3833 -->Caps on Hi-DPI scaling to prevent crazy
+            scale factors being set with buggy window-managers (linux
+            only)
+          </li>
+        </ul> <em>Development</em>
+        <ul>
+          <li>Fixed non-fatal gradle errors during build</li>
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td width="60" align="center" nowrap><strong><a
+          id="Jalview.2.11.1">2.11.1</a><a id="Jalview.2.11.1.4">.4</a><br />
+          <em>09/03/2021</em></strong></td>
+      <td align="left" valign="top"><em>Improved control of
+          Jalview's use of network services via jalview_properties</em>
+        <ul>
+          <li>
+            <!-- JAL-3814 -->New .jalview_properties token controlling
+            launch of the news browser (like -nonews argument)
+          </li>
+          <li>
+            <!-- JAL-3813 -->New .jalview_properties token controlling
+            download of linkout URLs from
+            www.jalview.org/services/identifiers
+          </li>
+          <li>
+            <!-- JAL-3812 -->New .jalview_properties token controlling
+            download of BIOJSHTML templates
+          </li>
+          <li>
+            <!-- JAL-3811 -->New 'Discover Web Services' option to
+            trigger a one off JABAWS discovery if autodiscovery was
+            disabled
+          </li>
+        </ul></td>
+      <td align="left" valign="top">
+        <ul>
+          <li>
+            <!-- JAL-3818 -->Intermittent deadlock opening structure in
+            Jmol
+          </li>
+        </ul> <em>New Known defects</em>
+        <ul>
+          <li>
+            <!-- JAL-3705 -->Protein Cross-Refs for Gene Sequence not
+            always restored from project (since 2.10.3)
+          </li>
+          <li>
+            <!-- JAL-3806 -->Selections from tree built from CDS aren't
+            propagated to Protein alignment (since 2.11.1.3)
+          </li>
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td width="60" align="center" nowrap><strong><a
+          id="Jalview.2.11.1">2.11.1</a><a id="Jalview.2.11.1.3">.3</a><br />
+          <em>29/10/2020</em></strong></td>
+      <td align="left" valign="top">
+        <ul>
+
+        </ul>
+      </td>
+      <td align="left" valign="top">
+        <ul>
+          <li>
+            <!-- JAL-3765 -->Find doesn't always highlight all matching
+            positions in a sequence (bug introduced in 2.11.1.2)
+          </li>
+          <li>
+            <!-- JAL-3760 -->Alignments containing one or more protein
+            sequences can be classed as nucleotide
+          </li>
+          <li>
+            <!-- JAL-3748 -->CDS alignment doesn't match original CDS
+            sequences after alignment of protein products (known defect
+            first reported for 2.11.1.0)
+          </li>
+          <li>
+            <!-- JAL-3725 -->No tooltip or popup menu for genomic
+            features outwith CDS shown overlaid on protein
+          </li>
+          <li>
+            <!-- JAL-3751 -->Overlapping CDS in ENA accessions are not
+            correctly mapped by Jalview (e.g. affects viral CDS with
+            ribosomal slippage, since 2.9.0)
+          </li>
+          <li>
+            <!-- JAL-3763 -->Spliced transcript CDS sequences don't show
+            CDS features
+          </li>
+          <li>
+            <!-- JAL-3700 -->Selections in CDS sequence panel don't
+            always select corresponding protein sequences
+          </li>
+          <li>
+            <!-- JAL-3759 --> <em>Make groups from selection</em> for a
+            column selection doesn't always ignore hidden columns
+          </li>
+        </ul> <em>Installer</em>
+        <ul>
+          <li>
+            <!-- JAL-3611 -->Space character in Jalview install path on
+            Windows prevents install4j launching getdown
+          </li>
+        </ul> <em>Development</em>
+        <ul>
+          <li>
+            <!-- JAL-3248 -->Fixed typos and specified compatible gradle
+            version numbers in doc/building.md
+          </li>
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td width="60" align="center" nowrap><strong><a
+          id="Jalview.2.11.1">2.11.1</a><a id="Jalview.2.11.1.2">.2</a><br />
+          <em>25/09/2020</em></strong></td>
+      <td align="left" valign="top">
+        <ul>
+        </ul>
+      </td>
+      <td align="left" valign="top">
+        <ul>
+          <li>
+            <!-- JAL-3757 -->Fresh install of Jalview 2.11.1.1 reports
+            "Encountered problems opening
+            https://www.jalview.org/examples/exampleFile_2_7.jvp"
+          </li>
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td width="60" align="center" nowrap><strong><a
           id="Jalview.2.11.1">2.11.1</a><a id="Jalview.2.11.1.1">.1</a><br />
-          <em>13/07/2020</em></strong></td>
+          <em>17/09/2020</em></strong></td>
       <td align="left" valign="top">
         <ul>
-        <!-- -->
-       </ul>
+          <li>
+            <!-- JAL-3638 -->Shift+arrow keys navigate to next gap or
+            residue in cursor mode
+          </li>
+          <li>
+            <!-- JAL-3695 -->Support import of VCF 4.3 by updating
+            HTSJDK from 2.12 to 2.23
+          </li>
+          <li>
+            <!-- JAL-3621 -->IntervalStore library updated to v.1.1:
+            optimisations and improvements suggested by Bob Hanson and
+            improved compatibility with JalviewJS
+          </li>
+          <li>
+            <!-- JAL-3615 -->Retrieve GZipped stockholm formatted
+            alignments from Pfam and Rfam
+          </li>
+          <li>
+            <!-- JAL-2656 -->Recognise GZipped content for URLs and File
+            import (no longer based on .gz extension)
+          </li>
+          <li>
+            <!-- JAL-3570 -->Updated Spanish Translation for 2.11.1
+          </li>
+          <li>
+            <!-- JAL-3692 -->Migrate EMBL record retrieval to use latest
+            ENA Browser (https://www.ebi.ac.uk/ena/browser/home) and
+            EMBL flat file
+          </li>
+          <li>
+            <!-- JAL-3667 -->Improved warning messages, debug logging
+            and fixed Retry action when Jalview encounters errors when
+            saving or making backup files.
+          </li>
+          <li>
+            <!-- JAL-3676 -->Enhanced Jalview Java Console:
+            <ul>
+              <li>Jalview's logging level can be configured</li>
+              <li>Copy to Clipboard Buttion</li>
+            </ul>
+          </li>
+          <li>
+            <!-- JAL-3541 -->Improved support for Hi-DPI (4K) screens
+            when running on Linux (Requires Java 11+)
+          </li>
+        </ul> <em>Launching Jalview</em>
+        <ul>
+          <li>
+            <!-- JAL-3608 -->Configure Jalview Desktop's look and feel
+            through a system property
+          </li>
+          <li>
+            <!-- JAL-3477 -->Improved built-in documentation and command
+            line help for configuring Jalview's memory
+          </li>                   
+        </ul>
       </td>
       <td align="left" valign="top">
         <ul>
-         <li><!-- JAL-3493 -->Escape does not clear highlights on the alignment (Since Jalview 2.10.3)</li>
-       </ul>
+          <li>
+            <!-- JAL-3691 -->Conservation and Quality tracks are shown
+            but not calculated and no protein or DNA score models are
+            available for tree/PCA calculation when launched with
+            Turkish language locale
+          </li>
+          <li>
+            <!-- JAL-3493 -->Escape does not clear highlights on the
+            alignment (Since Jalview 2.10.3)
+          </li>
+          <li>
+            <!--  JAL-3680 -->Alt+Left or Right arrow in cursor mode
+            doesn't slide selected sequences, just sequence under cursor
+          </li>
+          <li>
+            <!-- JAL-3732 -->Alt+Up/Down in cursor mode doesn't move
+            sequence under the cursor
+          </li>
+          <li>
+            <!-- JAL-3613 -->Peptide-to-CDS tracking broken when
+            multiple EMBL gene products shown for a single contig
+          </li>
+          <li>
+            <!-- JAL-3696 -->Errors encountered when processing variants
+            from VCF files yield "Error processing VCF: Format specifier
+            '%s'" on the console
+          </li>
+          <li>
+            <!-- JAL-3697 -->Count of features not shown can be wrong
+            when there are both local and complementary features mapped
+            to the position under the cursor
+          </li>
+          <li>
+            <!-- JAL-3673 -->Sequence ID for reference sequence is
+            clipped when Right align Sequence IDs enabled
+          </li>
+          <li>
+            <!-- JAL-2983 -->Slider with negative range values not
+            rendered correctly in VAqua4 (Since 2.10.4)
+          </li>
+          <li>
+            <!-- JAL-3685 -->Single quotes not displayed correctly in
+            internationalised text for some messages and log output
+          </li>
+          <li>
+            <!-- JAL-3490 -->Find doesn't report matches that span
+            hidden gapped columns
+          </li>
+          <li>
+            <!-- JAL-3597 -->Resolved memory leaks in Tree and PCA
+            panels, Alignment viewport and annotation renderer.
+          </li>
+          <li>
+            <!-- JAL-3561 -->Jalview ignores file format parameter
+            specifying output format when exporting an alignment via the
+            command line
+          </li>
+          <li>
+            <!-- JAL-3667 -->Windows 10: For a minority of users, if
+            backups are not enabled, Jalview sometimes fails to
+            overwrite an existing file and raises a warning dialog. (in
+            2.11.0, and 2.11.1.0, the workaround is to try to save the
+            file again, and if that fails, delete the original file and
+            save in place.)
+          </li>
+          <li>
+            <!-- JAL-3750 -->Cannot process alignments from HTTPS urls
+            via command line
+          </li>
+          <li>
+            <!-- JAL-3741 -->References to http://www.jalview.org in
+            program and documentation
+          </li>
+        </ul> <em>Launching Jalview</em>
+        <ul>
+          <li>
+            <!-- JAL-3718 -->Jalview application fails when launched the
+            first time for a version that has different jars to the
+            previous launched version.
+          </li>
+        </ul> <em>Developing Jalview</em>
+        <ul>
+          <li>
+            <!-- JAL-3541 -->Fixed issue with cleaning up old coverage
+            data, causing cloverReport gradle task to fail with an
+            OutOfMemory error.
+          </li>
+          <li>
+            <!-- JAL-3280 -->Migrated the Jalview Version Checker to
+            monitor the release channel
+          </li>
+        </ul> <em>New Known defects</em>
+        <ul>
+          <li>
+            <!-- JAL-3748 -->CDS shown in result of submitting proteins
+            in a CDS/Protein alignment to a web service is wrong when
+            proteins share a common transcript sequence (e.g.
+            genome of RNA viruses)
+          </li>
+          <li>
+            <!-- JAL-3576 -->Co-located features exported and re-imported
+            are ordered differently when shown on alignment and in
+            tooltips. (Also affects v2.11.1.0)
+          </li>
+          <li>
+            <!-- JAL-3702 -->Drag and drop of alignment file onto
+            alignment window when in a HiDPI scaled mode in Linux only
+            works for the top left quadrant of the alignment window
+          </li>
+          <li>
+            <!-- JAL-3701 -->Stale build data in jalview standalone jar
+            builds (only affects 2.11.1.1 branch)
+          </li>
+          <li>
+            <!-- JAL-3127 -->Sequence ID colourscheme not re-applied
+            when alignment view restored from project (since Jalview 2.11.0)
+          </li>
+          <li>
+            <!-- JAL-3749 -->Duplicate CDS sequences are generated when
+            protein products for certain ENA records are repeatedly
+            shown via Calculate-&gt;Show Cross Refs
+          </li>
+        </ul>
       </td>
     </tr>
     <tr>
index c3c1d3f..2e8b69a 100644 (file)
@@ -25,7 +25,7 @@
   <p>
     <strong>The Jalview Desktop RSS News Reader</strong><br /> The
     Jalview Desktop includes a built in news reader for the <a
-      href="http://www.jalview.org/feeds/desktop/rss">Jalview
+      href="https://www.jalview.org/feeds/desktop/rss">Jalview
       Desktop News Channel</a>.
   </p>
 
@@ -48,9 +48,9 @@
   <br />
   <p>
     The <em>Jalview news reader</em> was introduced in <a
-      href="http://www.jalview.org/releaseHistory.html#Jalview2.7">Jalview
+      href="https://www.jalview.org/releaseHistory.html#Jalview2.7">Jalview
       version 2.7</a>. Its implementation is based on <a
-      href="http://jswingreader.sourceforge.net/">JSwingReader</a>.
+      href="https://jswingreader.sourceforge.net/">JSwingReader</a>.
   </p>
   <br />
   <em>If you need to prevent the news-reader opening, then add the
index 0f0c7f1..0cf5661 100755 (executable)
 </head>
 <body>
   <p>
-    <strong>Jalview 2.11.1.0</strong>
+    <strong>Welcome to Jalview Version $$Version-Rel$$ !!</strong>
+    <br />Please take a
+    look at the <a href="releases.html#Jalview.$$Version-Rel$$">release
+      notes</a> for this build. Read on for the highlights.
   </p>
   <p>
-    Jalview 2.11.1.0 is the first minor release for the 2.11 series.
-    Along with a number of critical bug fixes and improvements it brings
-    new functionality for mapping sequence features between CDS and
-    Protein alignments. It is also the first release made under a new <em>four</em>
-    number versioning scheme, which will allow us to keep track of
-    patches and bug fixes.
+    <strong>Highlights in 2.11.2</strong>
+  </p>
+  <p><strong>New features for working with 3D Structure</strong><br/>
+    Jalview 2.11.2 features a number of new capabilities:<ul><li><strong>Linked viewing with <em>ChimeraX</em> and <em>PyMol</em></strong><br/>Simply configure your prefered viewer for 3D molecular data in <a href="features/preferences.html#structure">Jalview's structure preferences</a>, make sure that Jalview can locate the viewer's installation, and open a new view via the 3D Structure Chooser!</li>
+      <li><strong>View predicted protein structures via 3D-Beacons</strong><br/>
+       Jalview 2.11.2's <a href="features/structurechooser.html">Structure Chooser includes a client for the 3D-Beacons Network</a>, a new service that allows predicted and observed 3D models for proteins in Uniprot from a range of resources, including AlphaFold DB, SWISS-MODEL and a growing number of other resources. 
+      </li>
+  <p><strong>Retrieval
   </p>
-  <ul>
-    <li><strong>Virtual Features</strong><br />In previous
-      versions of Jalview, specific nucleotide sequence features such as
-      genomic variants and exons were transferred to protein products on
-      import. Jalview 2.11.1 instead provides 'virtual features' that
-      can be enabled and overlaid on linked CDS/Protein views via their
-      <a href="features/splitView.html#virtualfeats">Sequence
-        Features dialog</a>. This allows more analyses of nucleotide and
-      peptide sequence features on alignments in a more flexible and
-      memory efficient way than in earlier versions.<br />
-    <em>Note: Virtual features work best when variants are
-        annotated with CSQ fields. Please <a
-        href="features/importvcf.html#computepepvariants">see this
-          Groovy script workaround</a> if you are working with VCF files
-        without CSQ fields.
-    </em></li>
-    <li><strong>Improved VCF data import</strong><br /> <a
-      href="features/importvcf.html#attribs">Standard attributes for
-        filtering variants</a> (e.g. position, QUAL field etc) are now
-      extracted from VCF files. This new feature was suggested by a user
-      at the Jalview booth during ISMB 2019.</li>
-    <li><strong>Extended feature attributes are exported
-        in GFF3</strong><br />Complex attributes from VCF files can be exported
-      and imported via GFF3</li>
-    <li><strong>Updated Jalview Installer and Launcher</strong><br />Jalview's
-      installation packages are now built with Install4j 8, which brings
-      better support for Linux and improved control of file
-      associations. New <a href="memory.html#jvm">parameters on the
-        Jalview launcher</a> allow an upper memory limit to be specified <em>via</em>
-      a Jalview launch file, to prevent it from hogging your system.</li>
-  </ul>
   <p>
-    See the <a href="releases.html#Jalview.2.11.1.0">2.11.1.0
-      release notes</a> for full details of bugs fixed and new known issues.
+    For the full release notes, see <a
+      href="releases.html#Jalview.2.11.1.4">the Jalview 2.11.1.4
+      release notes</a>.
   </p>
   <p>
-    <em>JalviewJS News</em><br />With the release of Jalview 2.11.1.0,
-    the team are now focused on bringing JalviewJS to full production.
-    To follow our progress take a look at <em>http://www.jalview.org/jalview-js/</em>
-    and follow updates on our new <a
-      href="https://github.com/jalview/jalview-js/">JalviewJS
-      Releases github repository</a>.
+    <strong>Known Issues</strong>
   </p>
+  <p>New known issues in this release affect recovery of CDS/Protein
+    relationships from project files, and interactive selection of
+    protein sequences from a tree built on linked nucleotide sequences.
+    We will provide patches for these issues as soon as possible.</p>
+  </ul>
 </body>
 </html>
index dd6bec5..4ebcc1b 100644 (file)
@@ -58,5 +58,5 @@ Sequence Identity;sequence_identity;double|T|1;g2;80;150;85;false;false
 Created Date;created;string;g3;80;150;85;true;false
 UniProt Accession;uniprot_accession;String;g1;50;400;95;false;true
 Url;model_url;String;g3;100;150;105;true;false
-Page URL;model_page_url;String;g3;100;150;105;false;false
+Page URL;model_page_url;String;g3;100;150;105;true;false
 Ensemble Sample Url;ensembl_sample_url;String;g3;100;150;105;false;false
index 4bc88e8..fabd577 100644 (file)
@@ -512,6 +512,11 @@ label.load_tree_file = Load a tree file
 label.retrieve_parse_sequence_database_records_alignment_or_selected_sequences = Retrieve and parse sequence database records for the alignment or the currently selected sequences
 label.standard_databases = Standard Databases
 label.fetch_embl_uniprot = Fetch from EMBL/EMBLCDS or Uniprot/PDB and any selected DAS sources
+label.fetch_uniprot_references = Fetch Uniprot references
+label.search_3dbeacons = Find models with 3D-Beacons
+label.3dbeacons = 3D-Beacons
+label.fetch_references_for = Fetch database references for {0} sequences ?
+label.fetch_references_for_3dbeacons = 3D Beacons needs Uniprot References. Fetch database references for {0} sequences ?
 label.reset_min_max_colours_to_defaults = Reset min and max colours to defaults from user preferences.
 label.align_structures_using_linked_alignment_views = Superpose structures using {0} selected alignment view(s)
 label.threshold_feature_display_by_score = Threshold the feature display by score.
index 1b2578e..2fb6ce1 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.analysis.scoremodels.PIDModel;
 import jalview.analysis.scoremodels.ScoreMatrix;
 import jalview.analysis.scoremodels.ScoreModels;
@@ -148,7 +150,7 @@ public class AlignSeq
   public AlignSeq(SequenceI s1, String string1, SequenceI s2,
           String string2, String type)
   {
-    seqInit(s1, string1.toUpperCase(), s2, string2.toUpperCase(), type);
+    seqInit(s1, string1.toUpperCase(Locale.ROOT), s2, string2.toUpperCase(Locale.ROOT), type);
   }
 
   /**
index 0c40873..23c5d64 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.commands.RemoveGapColCommand;
 import jalview.datamodel.AlignedCodon;
 import jalview.datamodel.AlignedCodonFrame;
@@ -181,9 +183,9 @@ public class AlignmentUtils
       // TODO use Character.toLowerCase to avoid creating String objects?
       char[] upstream = new String(ds
               .getSequence(s.getStart() - 1 - ustream_ds, s.getStart() - 1))
-                      .toLowerCase().toCharArray();
+                      .toLowerCase(Locale.ROOT).toCharArray();
       char[] downstream = new String(
-              ds.getSequence(s_end - 1, s_end + dstream_ds)).toLowerCase()
+              ds.getSequence(s_end - 1, s_end + dstream_ds)).toLowerCase(Locale.ROOT)
                       .toCharArray();
       char[] coreseq = s.getSequence();
       char[] nseq = new char[offset + upstream.length + downstream.length
@@ -462,7 +464,7 @@ public class AlignmentUtils
     if (cdnaLength != mappedLength && cdnaLength > 2)
     {
       String lastCodon = String.valueOf(cdnaSeqChars,
-              cdnaLength - CODON_LENGTH, CODON_LENGTH).toUpperCase();
+              cdnaLength - CODON_LENGTH, CODON_LENGTH).toUpperCase(Locale.ROOT);
       for (String stop : ResidueProperties.STOP_CODONS)
       {
         if (lastCodon.equals(stop))
@@ -479,7 +481,7 @@ public class AlignmentUtils
      */
     int startOffset = 0;
     if (cdnaLength != mappedLength && cdnaLength > 2
-            && String.valueOf(cdnaSeqChars, 0, CODON_LENGTH).toUpperCase()
+            && String.valueOf(cdnaSeqChars, 0, CODON_LENGTH).toUpperCase(Locale.ROOT)
                     .equals(ResidueProperties.START))
     {
       startOffset += CODON_LENGTH;
index 2f556f1..c9ed570 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
@@ -368,7 +370,7 @@ public class AnnotationSorter
     {
       return 1;
     }
-    return label1.toUpperCase().compareTo(label2.toUpperCase());
+    return label1.toUpperCase(Locale.ROOT).compareTo(label2.toUpperCase(Locale.ROOT));
   }
 
   /**
index ff38c08..6cc9dd3 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.analysis.scoremodels.ScoreMatrix;
 import jalview.analysis.scoremodels.ScoreModels;
 import jalview.datamodel.AlignmentAnnotation;
@@ -312,7 +314,7 @@ public class Conservation
   protected static void recordConservation(Map<String, Integer> resultMap,
           String res)
   {
-    res = res.toUpperCase();
+    res = res.toUpperCase(Locale.ROOT);
     for (Entry<String, Map<String, Integer>> property : ResidueProperties.propHash
             .entrySet())
     {
index d52e42a..bf86a86 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.api.AlignViewportI;
 import jalview.api.FinderI;
 import jalview.datamodel.AlignmentI;
@@ -148,7 +150,7 @@ public class Finder implements FinderI
     idMatches = new ArrayList<>();
 
     String searchString = matchCase ? theSearchString
-            : theSearchString.toUpperCase();
+            : theSearchString.toUpperCase(Locale.ROOT);
     Regex searchPattern = new Regex(searchString);
     searchPattern.setIgnoreCase(!matchCase);
 
index df1dd82..8d69b0b 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.bin.Cache;
 
 import java.io.BufferedReader;
@@ -198,13 +200,13 @@ public final class GeneticCodes
       while (line != null)
       {
         line = readLine(dataIn);
-        if (line != null && !"DNA".equals(line.toUpperCase()))
+        if (line != null && !"DNA".equals(line.toUpperCase(Locale.ROOT)))
         {
           String[] tokens = line.split("\\t");
           if (tokens.length == 2)
           {
-          ambiguityCodes.put(tokens[0].toUpperCase(),
-                  tokens[1].toUpperCase());
+          ambiguityCodes.put(tokens[0].toUpperCase(Locale.ROOT),
+                  tokens[1].toUpperCase(Locale.ROOT));
           }
           else
           {
@@ -341,13 +343,13 @@ public final class GeneticCodes
       @Override
       public String translateCanonical(String codon)
       {
-        return codons.get(codon.toUpperCase());
+        return codons.get(codon.toUpperCase(Locale.ROOT));
       }
 
       @Override
       public String translate(String codon)
       {
-        String upper = codon.toUpperCase();
+        String upper = codon.toUpperCase(Locale.ROOT);
         String peptide = translateCanonical(upper);
 
         /*
index a85c7f3..3ec162d 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.SequenceI;
 
@@ -289,7 +291,7 @@ public class SequenceIdMatcher
     {
       if (s != null)
       {
-        id = s.toLowerCase();
+        id = s.toLowerCase(Locale.ROOT);
       }
       else
       {
@@ -319,7 +321,7 @@ public class SequenceIdMatcher
       {
         if (s instanceof String)
         {
-          return this.stringequals(((String) s).toLowerCase());
+          return this.stringequals(((String) s).toLowerCase(Locale.ROOT));
         }
       }
 
index 216b498..29f0d84 100755 (executable)
@@ -182,8 +182,8 @@ import jalview.ws.sifts.SiftsSettings;
  * when shading by annotation</li>
  * <li>ANNOTATIONCOLOUR_MAX (red) Shade used for maximum value of annotation
  * when shading by annotation</li>
- * <li>www.jalview.org (http://www.jalview.org) a property enabling all HTTP
- * requests to be redirected to a mirror of http://www.jalview.org</li>
+ * <li>www.jalview.org (https://www.jalview.org) a property enabling all HTTP
+ * requests to be redirected to a mirror of https://www.jalview.org</li>
  * <li>FIGURE_AUTOIDWIDTH (false) Expand the left hand column of an exported
  * alignment figure to accommodate even the longest sequence ID or annotation
  * label.</li>
@@ -523,7 +523,7 @@ public class Cache
                     DEFAULT_CACHE_THRESHOLD_IN_DAYS));
 
     IdOrgSettings.setUrl(getDefault("ID_ORG_HOSTURL",
-            "http://www.jalview.org/services/identifiers"));
+            "https://www.jalview.org/services/identifiers"));
     IdOrgSettings.setDownloadLocation(ID_ORG_FILE);
 
     StructureImportSettings.setDefaultStructureFileFormat(jalview.bin.Cache
index 38b7587..6219179 100644 (file)
@@ -1,5 +1,7 @@
 package jalview.bin;
 
+import java.util.Locale;
+
 import java.awt.HeadlessException;
 
 public class HiDPISetting
@@ -45,7 +47,7 @@ public class HiDPISetting
   static
   {
     String system = System.getProperty("os.name") == null ? null
-            : System.getProperty("os.name").toLowerCase();
+            : System.getProperty("os.name").toLowerCase(Locale.ROOT);
     if (system != null)
     {
       isLinux = system.indexOf("linux") > -1;
index 4c21624..fe48283 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.bin;
 
+import java.util.Locale;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -453,7 +455,7 @@ public class Jalview
               // String defurl =
               // "http://anaplog.compbio.dundee.ac.uk/cgi-bin/questionnaire.pl";
               // //
-              String defurl = "http://www.jalview.org/cgi-bin/questionnaire.pl";
+              String defurl = "https://www.jalview.org/cgi-bin/questionnaire.pl";
               Cache.log.debug(
                       "Starting questionnaire with default url: " + defurl);
               desktop.checkForQuestionnaire(defurl);
@@ -782,14 +784,18 @@ public class Jalview
      * @j2sIgnore
      */
     {
-      file = Cache.getDefault("STARTUP_FILE",
-              Cache.getDefault("www.jalview.org", "http://www.jalview.org")
-                      + "/examples/exampleFile_2_7.jar");
+      file = jalview.bin.Cache.getDefault("STARTUP_FILE",
+              jalview.bin.Cache.getDefault("www.jalview.org",
+                      "https://www.jalview.org")
+                      + "/examples/exampleFile_2_7.jvp");
       if (file.equals(
-              "http://www.jalview.org/examples/exampleFile_2_3.jar"))
+              "http://www.jalview.org/examples/exampleFile_2_3.jar") || file.equals(
+                      "http://www.jalview.org/examples/exampleFile_2_7.jar"))
       {
+        file.replace("http:", "https:");
         // hardwire upgrade of the startup file
-        file.replace("_2_3.jar", "_2_7.jar");
+        file.replace("_2_3", "_2_7");
+        file.replace("2_7.jar", "2_7.jvp");
         // and remove the stale setting
         Cache.removeProperty("STARTUP_FILE");
       }
@@ -979,9 +985,9 @@ public class Jalview
       for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels())
       {
         if (info.getName() != null && nameStartsWith
-                ? info.getName().toLowerCase()
-                        .startsWith(name.toLowerCase())
-                : info.getName().toLowerCase().equals(name.toLowerCase()))
+                ? info.getName().toLowerCase(Locale.ROOT)
+                        .startsWith(name.toLowerCase(Locale.ROOT))
+                : info.getName().toLowerCase(Locale.ROOT).equals(name.toLowerCase(Locale.ROOT)))
         {
           className = info.getClassName();
           break;
@@ -1038,7 +1044,7 @@ public class Jalview
     System.setProperty("apple.laf.useScreenMenuBar", "true");
     set = setQuaquaLookAndFeel();
     if ((!set) || !UIManager.getLookAndFeel().getClass().toString()
-            .toLowerCase().contains("quaqua"))
+            .toLowerCase(Locale.ROOT).contains("quaqua"))
     {
       set = setVaquaLookAndFeel();
     }
@@ -1085,7 +1091,7 @@ public class Jalview
                     + "-groovy FILE\tExecute groovy script in FILE, after all other arguments have been processed (if FILE is the text 'STDIN' then the file will be read from STDIN)\n"
                     + "-jvmmempc=PERCENT\tOnly available with standalone executable jar or jalview.bin.Launcher. Limit maximum heap size (memory) to PERCENT% of total physical memory detected. This defaults to 90 if total physical memory can be detected. See https://www.jalview.org/help/html/memory.html for more details.\n"
                     + "-jvmmemmax=MAXMEMORY\tOnly available with standalone executable jar or jalview.bin.Launcher. Limit maximum heap size (memory) to MAXMEMORY. MAXMEMORY can be specified in bytes, kilobytes(k), megabytes(m), gigabytes(g) or if you're lucky enough, terabytes(t). This defaults to 32g if total physical memory can be detected, or to 8g if total physical memory cannot be detected. See https://www.jalview.org/help/html/memory.html for more details.\n"
-                    + "\n~Read documentation in Application or visit http://www.jalview.org for description of Features and Annotations file~\n\n");
+                    + "\n~Read documentation in Application or visit https://www.jalview.org for description of Features and Annotations file~\n\n");
   }
 
   private static void startUsageStats(final Desktop desktop)
index e7f2a53..871ca54 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.bin;
 
+import java.util.Locale;
+
 import jalview.analysis.AlignmentUtils;
 import jalview.api.StructureSelectionManagerProvider;
 import jalview.appletgui.AlignFrame;
@@ -208,7 +210,7 @@ public class JalviewLite extends Applet
       final int pos = apos;
       // use vamsas listener to broadcast to all listeners in scope
       if (alignedPosition != null && (alignedPosition.trim().length() == 0
-              || alignedPosition.toLowerCase().indexOf("false") > -1))
+              || alignedPosition.toLowerCase(Locale.ROOT).indexOf("false") > -1))
       {
         java.awt.EventQueue.invokeLater(new Runnable()
         {
@@ -412,7 +414,7 @@ public class JalviewLite extends Applet
             r--;
           } catch (NumberFormatException ex)
           {
-            if (cl.toLowerCase().equals("sequence"))
+            if (cl.toLowerCase(Locale.ROOT).equals("sequence"))
             {
               // we are in the dataset sequence's coordinate frame.
               inseqpos = true;
@@ -1440,7 +1442,7 @@ public class JalviewLite extends Applet
     String externalsviewer = getParameter("externalstructureviewer");
     if (externalsviewer != null)
     {
-      useXtrnalSviewer = externalsviewer.trim().toLowerCase().equals(TRUE);
+      useXtrnalSviewer = externalsviewer.trim().toLowerCase(Locale.ROOT).equals(TRUE);
     }
     /**
      * if true disable the check for jmol
@@ -2691,7 +2693,7 @@ public class JalviewLite extends Applet
           final String groups, boolean state)
   {
     final boolean st = state;// !(state==null || state.equals("") ||
-    // state.toLowerCase().equals("false"));
+    // state.toLowerCase(Locale.ROOT).equals("false"));
     java.awt.EventQueue.invokeLater(new Runnable()
     {
       @Override
index b8d31c2..e13f2dd 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.bin;
 
+import java.util.Locale;
+
 import java.io.File;
 import java.io.IOException;
 import java.lang.management.ManagementFactory;
@@ -190,7 +192,7 @@ public class Launcher
       process.waitFor();
     } catch (IOException e)
     {
-      if (e.getMessage().toLowerCase().contains("memory"))
+      if (e.getMessage().toLowerCase(Locale.ROOT).contains("memory"))
       {
         System.out.println("Caught a memory exception: " + e.getMessage());
         // Probably the "Cannot allocate memory" error, try without the memory
index 5d7f14c..52f0c9e 100644 (file)
@@ -31,6 +31,8 @@ package jalview.bin;
  * @author bsoares
  *
  */
+import java.util.Locale;
+
 public class MemorySetting
 {
   public static final String MAX_HEAPSIZE_PERCENT_PROPERTY_NAME = "jvmmempc";
@@ -101,7 +103,7 @@ public class MemorySetting
     if (jvmmemmax != null && jvmmemmax.length() > 0)
     {
       long multiplier = 1;
-      switch (jvmmemmax.toLowerCase().substring(jvmmemmax.length() - 1))
+      switch (jvmmemmax.toLowerCase(Locale.ROOT).substring(jvmmemmax.length() - 1))
       {
       case "t":
         multiplier = 1099511627776L; // 2^40
index 7f7142f..2d61705 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.commands;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
 
@@ -101,13 +103,13 @@ public class ChangeCaseCommand implements CommandI
         if ((caseChange == TO_UPPER && doCommand)
                 || (caseChange == TO_LOWER && !doCommand))
         {
-          newSeq.append(sequence.substring(start, end).toUpperCase());
+          newSeq.append(sequence.substring(start, end).toUpperCase(Locale.ROOT));
         }
 
         else if ((caseChange == TO_LOWER && doCommand)
                 || (caseChange == TO_UPPER && !doCommand))
         {
-          newSeq.append(sequence.substring(start, end).toLowerCase());
+          newSeq.append(sequence.substring(start, end).toLowerCase(Locale.ROOT));
         }
 
         else
index d0790c8..30595bc 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.commands;
 
+import java.util.Locale;
+
 import jalview.analysis.AlignSeq;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
@@ -789,7 +791,7 @@ public class EditCommand implements CommandI
       String nogapold = AlignSeq.extractGaps(Comparison.GapChars,
               new String(command.string[i]));
 
-      if (!nogaprep.toLowerCase().equals(nogapold.toLowerCase()))
+      if (!nogaprep.toLowerCase(Locale.ROOT).equals(nogapold.toLowerCase(Locale.ROOT)))
       {
         // we may already have dataset and limits stashed...
         if (newDSWasNeeded || newStartEndWasNeeded)
@@ -838,7 +840,7 @@ public class EditCommand implements CommandI
             // old ds and edited ds are different, so
             // create the new dataset sequence
             SequenceI newds = new Sequence(oldds);
-            newds.setSequence(fullseq.toUpperCase());
+            newds.setSequence(fullseq.toUpperCase(Locale.ROOT));
 
             if (command.oldds == null)
             {
@@ -891,7 +893,7 @@ public class EditCommand implements CommandI
               // new
               // start/end
               String nogapalseq = AlignSeq.extractGaps(Comparison.GapChars,
-                      command.seqs[i].getSequenceAsString().toUpperCase());
+                      command.seqs[i].getSequenceAsString().toUpperCase(Locale.ROOT));
               int newStart = command.seqs[i].getDatasetSequence()
                       .getSequenceAsString().indexOf(nogapalseq);
               if (newStart == -1)
index 2ee4503..d41cdd4 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel;
 
+import java.util.Locale;
+
 import jalview.analysis.Rna;
 import jalview.analysis.SecStrConsensus.SimpleBP;
 import jalview.analysis.WUSSParseException;
@@ -1225,7 +1227,7 @@ public class AlignmentAnnotation
   {
     if (seqname && this.sequenceRef != null)
     {
-      int i = description.toLowerCase().indexOf("<html>");
+      int i = description.toLowerCase(Locale.ROOT).indexOf("<html>");
       if (i > -1)
       {
         // move the html tag to before the sequence reference.
index 511287b..4a5c888 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel;
 
+import java.util.Locale;
+
 import jalview.api.DBRefEntryI;
 import jalview.util.DBRefUtils;
 import jalview.util.MapList;
@@ -95,7 +97,7 @@ public class DBRefEntry implements DBRefEntryI
           Mapping map,boolean isCanonical)
   {
        
-    this.source = source.toUpperCase();
+    this.source = source.toUpperCase(Locale.ROOT);
     setVersion(version);
     this.accessionId = accessionId;
     this.map = map;
@@ -306,7 +308,7 @@ public class DBRefEntry implements DBRefEntryI
   public void setAccessionId(String accessionId)
   {
          this.accessionId = accessionId;
-//    this.accessionId = (accessionId == null ? "" : accessionId).toUpperCase();
+//    this.accessionId = (accessionId == null ? "" : accessionId).toUpperCase(Locale.ROOT);
   }
 
   /**
@@ -317,7 +319,7 @@ public class DBRefEntry implements DBRefEntryI
   {
          this.source = source;
          
-//    this.source = (source == null ? "" : source).toUpperCase();
+//    this.source = (source == null ? "" : source).toUpperCase(Locale.ROOT);
 //    this.canonicalSourceName =       DBRefUtils.getCanonicalName(this.source);
 //    this.sourceKey = DBRefSource.getSourceKey(this.canonicalSourceName);
   }
@@ -326,7 +328,7 @@ public class DBRefEntry implements DBRefEntryI
   public void setVersion(String version)
   {
     this.version = version;
-    this.ucversion = (version == null ? null : version.toUpperCase());
+    this.ucversion = (version == null ? null : version.toUpperCase(Locale.ROOT));
   }
 
   @Override
index 2f94884..2d2ae4f 100755 (executable)
@@ -36,29 +36,31 @@ package jalview.datamodel;
  * @author JimP
  * 
  */
+import java.util.Locale;
+
 public class DBRefSource
 {
   
   
   
   public static final String UNIPROT = "UNIPROT";
-  public static final String UP_NAME = "UNIPROT_NAME".toUpperCase();
+  public static final String UP_NAME = "UNIPROT_NAME".toUpperCase(Locale.ROOT);
   /**
    * Uniprot Knowledgebase/TrEMBL as served from EMBL protein products.
    */
-  public static final String UNIPROTKB = "UniProtKB/TrEMBL".toUpperCase();
+  public static final String UNIPROTKB = "UniProtKB/TrEMBL".toUpperCase(Locale.ROOT);
 
   public static final String ENSEMBL        = "ENSEMBL";
   public static final String ENSEMBLGENOMES = "ENSEMBLGENOMES";
   
   public static final String EMBL           = "EMBL";
   public static final String EMBLCDS        = "EMBLCDS";
-  public static final String EMBLCDSProduct = "EMBLCDSProtein".toUpperCase();
+  public static final String EMBLCDSProduct = "EMBLCDSProtein".toUpperCase(Locale.ROOT);
 
   public static final String PDB    = "PDB";
   public static final String PFAM   = "PFAM";
   public static final String RFAM   = "RFAM";
-  public static final String GENEDB = "GeneDB".toUpperCase();
+  public static final String GENEDB = "GeneDB".toUpperCase(Locale.ROOT);
 
   public static final String PDB_CANONICAL_NAME = PDB;
 
@@ -146,7 +148,7 @@ public class DBRefSource
     // see if there is a primary reference that derived this reference.
     for (int i = allSources.length; --i >= 0;)
     {
-      if (ucversion.startsWith(allSources[i])) // BH 2019.01.25 .toUpperCase() unnecessary here for allSources
+      if (ucversion.startsWith(allSources[i])) // BH 2019.01.25 .toUpperCase(Locale.ROOT) unnecessary here for allSources
       {
         // by convention, many secondary references inherit the primary
         // reference's
index d652a97..f145d93 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel;
 
+import java.util.Locale;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -199,12 +201,12 @@ public class MappedFeatures
      * e.g. C,G,T gives variants G and T for base C
      */
     Set<String> variantPeptides = new HashSet<>();
-    String[] alleles = alls.toUpperCase().split(",");
+    String[] alleles = alls.toUpperCase(Locale.ROOT).split(",");
     StringBuilder vars = new StringBuilder();
 
     for (String allele : alleles)
     {
-      allele = allele.trim().toUpperCase();
+      allele = allele.trim().toUpperCase(Locale.ROOT);
       if (allele.length() > 1 || "-".equals(allele))
       {
         continue; // multi-locus variant
@@ -220,7 +222,7 @@ public class MappedFeatures
        */
       final int i = cdsPos == codonPos[0] ? 0
               : (cdsPos == codonPos[1] ? 1 : 2);
-      variantCodon[i] = allele.toUpperCase().charAt(0);
+      variantCodon[i] = allele.toUpperCase(Locale.ROOT).charAt(0);
       if (variantCodon[i] == baseCodon[i])
       {
         continue;
index 672a59e..fc4ee46 100755 (executable)
@@ -38,6 +38,8 @@ public class PDBEntry
 
   private static final int PDB_ID_LENGTH = 4;
 
+  private static final String FAKED_ID = "faked_pdbid";
+
   private String file;
 
   private String type;
@@ -384,21 +386,40 @@ public class PDBEntry
       return false; // shouldn't happen
     }
 
-    /*
-     * id has to match (ignoring case)
-     */
-    if (!getId().equalsIgnoreCase(newId))
-    {
-      return false;
-    }
+    boolean idMatches = getId().equalsIgnoreCase(newId);
 
     /*
      * Don't update if associated with different structure files
      */
     String newFile = newEntry.getFile();
-    if (newFile != null && getFile() != null && !newFile.equals(getFile()))
+    if (newFile != null && getFile() != null)
     {
-      return false;
+      if (!newFile.equals(getFile()))
+      {
+        return false;
+      }
+      else
+      {
+        // files match.
+        if (!idMatches)
+        {
+          // this shouldn't happen, but could do if the id from the
+          // file is not the same as the id from the authority that provided
+          // the file
+          if (!newEntry.fakedPDBId())
+          {
+            return false;
+          } // otherwise we can update
+        }
+      }
+    }
+    else
+    {
+      // one has data, one doesn't ..
+      if (!idMatches)
+      {
+        return false;
+      } // otherwise maybe can update
     }
 
     /*
@@ -453,6 +474,11 @@ public class PDBEntry
        */
       String key = newProps.nextElement();
       Object value = newEntry.getProperty(key);
+      if (FAKED_ID.equals(key))
+      {
+        // we never update the fake ID property
+        continue;
+      }
       if (!value.equals(getProperty(key)))
       {
         setProperty(key, value);
@@ -461,16 +487,58 @@ public class PDBEntry
     return true;
   }
   
+  /**
+   * set when Jalview has manufactured the ID using a local filename
+   * @return
+   */
+  public boolean fakedPDBId()
+  {
+    if (_hasProperty(FAKED_ID))
+    {
+      return true;
+    }
+    return false;
+  }
+  public void setFakedPDBId(boolean faked)
+  {
+    if (faked)
+    {
+      setProperty(FAKED_ID, Boolean.TRUE);
+    }
+    else 
+    {
+      if (properties!=null) {
+        properties.remove(FAKED_ID);
+      }
+    }
+  }
+
+  private boolean _hasProperty(final String key)
+  {
+    return (properties != null && properties.containsKey(key));
+  }
+
+  private static final String RETRIEVE_FROM = "RETRIEVE_FROM";
+
+  private static final String PROVIDER = "PROVIDER";
+
+  private static final String MODELPAGE = "PROVIDERPAGE";
 
-  private static final String RETRIEVE_FROM="RETRIEVE_FROM";
   /**
    * Permanent URI for retrieving the original structure data
+   * 
    * @param urlStr
    */
   public void setRetrievalUrl(String urlStr)
   {
     setProperty(RETRIEVE_FROM, urlStr);
   }
+
+  public boolean hasRetrievalUrl()
+  {
+    return _hasProperty(RETRIEVE_FROM);
+  }
+
   /**
    * get the Permanent URI for retrieving the original structure data
    */
@@ -479,8 +547,50 @@ public class PDBEntry
     return (String) getProperty(RETRIEVE_FROM);
   }
 
-  public boolean hasRetrievalUrl()
+  /**
+   * Data provider name - from 3D Beacons
+   * 
+   * @param provider
+   */
+  public void setProvider(String provider)
+  {
+    setProperty(PROVIDER, provider);
+  }
+
+  /**
+   * Get Data provider name - from 3D Beacons
+   * 
+   */
+  public String getProvider()
+  {
+    return (String) getProperty(PROVIDER);
+  }
+
+  /**
+   * Permanent URI for retrieving the original structure data
+   * 
+   * @param urlStr
+   */
+  public void setProviderPage(String urlStr)
+  {
+    setProperty(MODELPAGE, urlStr);
+  }
+
+  /**
+   * get the Permanent URI for retrieving the original structure data
+   */
+  public String getProviderPage()
+  {
+    return (String) getProperty(MODELPAGE);
+  }
+
+  public boolean hasProviderPage()
+  {
+    return _hasProperty(MODELPAGE);
+  }
+
+  public boolean hasProvider()
   {
-    return (properties!=null && properties.containsKey(RETRIEVE_FROM));
+    return _hasProperty(PROVIDER);
   }
 }
index 552349f..d52e049 100755 (executable)
@@ -1799,13 +1799,30 @@ public class Sequence extends ASequence implements SequenceI
   public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
           String label)
   {
+    return getAlignmentAnnotations(calcId, label, null, true);
+  }
+
+  @Override
+  public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+          String label, String description)
+  {
+    return getAlignmentAnnotations(calcId, label, description, false);
+  }
+
+  private List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+          String label, String description, boolean ignoreDescription)
+  {
     List<AlignmentAnnotation> result = new ArrayList<>();
     if (this.annotation != null)
     {
       for (AlignmentAnnotation ann : annotation)
       {
-        if (ann.calcId != null && ann.calcId.equals(calcId)
-                && ann.label != null && ann.label.equals(label))
+        if ((ann.calcId != null && ann.calcId.equals(calcId))
+                && (ann.label != null && ann.label.equals(label))
+                && ((ignoreDescription && description == null)
+                        || (ann.description != null
+                                && ann.description.equals(description))))
+
         {
           result.add(ann);
         }
index 933f332..7c3eb41 100755 (executable)
@@ -446,6 +446,17 @@ public interface SequenceI extends ASequenceI
           String label);
 
   /**
+   * Returns a (possibly empty) list of any annotations that match on given
+   * calcId (source), label (type) and description (observation instance).
+   * Null values do not match.
+   * 
+   * @param calcId
+   * @param label
+   * @param description
+   */
+  public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+          String label, String description);
+  /**
    * create a new dataset sequence (if necessary) for this sequence and sets
    * this sequence to refer to it. This call will move any features or
    * references on the sequence onto the dataset. It will also make a duplicate
index e9fb9b2..69f80f2 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel.features;
 
+import java.util.Locale;
+
 import jalview.datamodel.SequenceFeature;
 import jalview.util.MessageManager;
 import jalview.util.matcher.Condition;
@@ -163,12 +165,12 @@ public class FeatureMatcher implements FeatureMatcherI
       firstField = descriptor.substring(0, nextSpacePos);
       leftToParse = descriptor.substring(nextSpacePos + 1).trim();
     }
-    String lower = firstField.toLowerCase();
-    if (lower.startsWith(LABEL.toLowerCase()))
+    String lower = firstField.toLowerCase(Locale.ROOT);
+    if (lower.startsWith(LABEL.toLowerCase(Locale.ROOT)))
     {
       byLabel = true;
     }
-    else if (lower.startsWith(SCORE.toLowerCase()))
+    else if (lower.startsWith(SCORE.toLowerCase(Locale.ROOT)))
     {
       byScore = true;
     }
@@ -351,7 +353,7 @@ public class FeatureMatcher implements FeatureMatcherI
     }
 
     Condition condition = matcher.getCondition();
-    sb.append(SPACE).append(condition.toString().toLowerCase());
+    sb.append(SPACE).append(condition.toString().toLowerCase(Locale.ROOT));
     if (condition.isNumeric())
     {
       sb.append(SPACE).append(matcher.getPattern());
index 3743278..ee4bf12 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel.features;
 
+import java.util.Locale;
+
 import jalview.datamodel.SequenceFeature;
 import jalview.util.MessageManager;
 
@@ -257,7 +259,7 @@ public class FeatureMatcherSet implements FeatureMatcherSetI
       if (!first)
       {
         String joiner = andConditions ? AND_18N : OR_I18N;
-        sb.append(SPACE).append(joiner.toLowerCase()).append(SPACE);
+        sb.append(SPACE).append(joiner.toLowerCase(Locale.ROOT)).append(SPACE);
       }
       first = false;
       if (multiple)
index 97ad242..e2d2725 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ext.ensembl;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefSource;
 import jalview.util.JSONUtils;
@@ -94,7 +96,7 @@ public class EnsemblInfo extends EnsemblRestClient
     {
       fetchDivisions();
     }
-    return divisions.get(division.toUpperCase());
+    return divisions.get(division.toUpperCase(Locale.ROOT));
   }
 
   /**
@@ -108,7 +110,7 @@ public class EnsemblInfo extends EnsemblRestClient
     /*
      * for convenience, pre-fill ensembl.org as the domain for "ENSEMBL"
      */
-    divisions.put(DBRefSource.ENSEMBL.toUpperCase(), ensemblDomain);
+    divisions.put(DBRefSource.ENSEMBL.toUpperCase(Locale.ROOT), ensemblDomain);
     try
     {
       @SuppressWarnings("unchecked")
@@ -118,7 +120,7 @@ public class EnsemblInfo extends EnsemblRestClient
       while (rvals.hasNext())
       {
         String division = rvals.next().toString();
-        divisions.put(division.toUpperCase(), ensemblGenomesDomain);
+        divisions.put(division.toUpperCase(Locale.ROOT), ensemblGenomesDomain);
       }
     } catch (IOException | ParseException | NumberFormatException e)
     {
index ae8ff7a..2a43244 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ext.jmol;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.PDBEntry;
@@ -115,7 +117,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       // }
       // ;
       // instead, we distinguish .cif from non-.cif by filename
-      setStructureFileType(getDataName().toLowerCase().endsWith(".cif")
+      setStructureFileType(getDataName().toLowerCase(Locale.ROOT).endsWith(".cif")
               ? PDBEntry.Type.MMCIF.toString()
               : "PDB");
 
@@ -160,7 +162,31 @@ public class JmolParser extends StructureFile implements JmolStatusListener
     return validator;
   }
 
-
+  PDBEntry.Type jmolFiletype=null;
+  /**
+   * resolve a jmol filetype string and update the jmolFiletype field accordingly
+   * @param jmolIdentifiedFileType
+   * @return true if filetype was identified as MMCIF, PDB
+   */
+  public boolean updateFileType(String jmolIdentifiedFileType)
+  {
+    if (jmolIdentifiedFileType == null 
+            || jmolIdentifiedFileType.trim().equals(""))
+    {
+      return false;
+    }
+    if ("mmcif".equalsIgnoreCase(jmolIdentifiedFileType)) {
+      jmolFiletype = PDBEntry.Type.MMCIF;
+      return true;
+    }
+    if ("pdb".equalsIgnoreCase(jmolIdentifiedFileType))
+    {
+      jmolFiletype = PDBEntry.Type.PDB;
+      return true;
+    } 
+    return false;
+  }
+  
   public void transformJmolModelToJalview(ModelSet ms) throws IOException
   {
     try
@@ -171,8 +197,15 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       List<SequenceI> prot = new ArrayList<SequenceI>();
       PDBChain tmpchain;
       String pdbId = (String) ms.getInfo(0, "title");
-      String isMMCIF = (String) ms.getInfo(0, "fileType");
-
+      boolean isMMCIF = false;
+      String jmolFileType_String = (String) ms.getInfo(0, "fileType");
+      if (updateFileType(jmolFileType_String))
+      {
+        setStructureFileType(jmolFiletype.toString());
+      }
+      
+      isMMCIF = PDBEntry.Type.MMCIF.equals(jmolFiletype);
+      
       if (pdbId == null)
       {
         setId(safeName(getDataName()));
@@ -182,7 +215,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       {
         setId(pdbId);
         setPDBIdAvailable(true);
-        alphaFoldModel = alphaFold.search(pdbId) && isMMCIF!=null && isMMCIF.equalsIgnoreCase("mmcif");  
+        alphaFoldModel = alphaFold.search(pdbId) && isMMCIF;  
 
       }
       List<Atom> significantAtoms = convertSignificantAtoms(ms);
@@ -199,7 +232,13 @@ public class JmolParser extends StructureFile implements JmolStatusListener
           tmpchain.atoms.addElement(tmpatom);
         } else
         {
-          tmpchain = new PDBChain(getId(), tmpatom.chain,isAlphafoldModel());
+          String tempFString=null;
+          if (isAlphafoldModel())
+          {
+            tempFString = "Alphafold Reliability";
+          }
+
+          tmpchain = new PDBChain(getId(), tmpatom.chain,tempFString);
           getChains().add(tmpchain);
           tmpchain.atoms.addElement(tmpatom);
         }
index ced22fa..02b7136 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ext.rbvi.chimera;
 
+import java.util.Locale;
+
 import java.awt.Color;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -181,7 +183,7 @@ public class ChimeraCommands extends StructureCommandsBase
      * Chimera treats an attribute name ending in 'color' as colour-valued;
      * Jalview doesn't, so prevent this by appending an underscore
      */
-    if (attName.toUpperCase().endsWith("COLOR"))
+    if (attName.toUpperCase(Locale.ROOT).endsWith("COLOR"))
     {
       attName += "_";
     }
index b1cfc53..0bca070 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.fts.core;
 
+import java.util.Locale;
+
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -171,7 +173,7 @@ public abstract class FTSRestClient implements FTSRestClientI
               public DataTypeI getDataType()
               {
                 final String[] dataTypeString = lineData[2].split("\\|");
-                final String classString = dataTypeString[0].toUpperCase();
+                final String classString = dataTypeString[0].toUpperCase(Locale.ROOT);
 
                 return new DataTypeI()
                 {
@@ -182,7 +184,7 @@ public abstract class FTSRestClient implements FTSRestClientI
                     if (dataTypeString.length > 1
                             && dataTypeString[1] != null)
                     {
-                      switch (dataTypeString[1].toUpperCase())
+                      switch (dataTypeString[1].toUpperCase(Locale.ROOT))
                       {
                       case "T":
                       case "TRUE":
index 08edcdf..c05306a 100644 (file)
@@ -127,22 +127,23 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
     } catch (Exception e)
     {
       String exceptionMsg = e.getMessage();
-      if (exceptionMsg.contains("SocketException"))
+      if (exceptionMsg != null)
       {
-        // No internet connection
-        throw new Exception(MessageManager.getString(
-                "exception.unable_to_detect_internet_connection"));
-      }
-      else if (exceptionMsg.contains("UnknownHostException"))
-      {
-        // The server is unreachable
-        throw new Exception(MessageManager.formatMessage(
-                "exception.fts_server_unreachable", "3DB Hub"));
-      }
-      else
-      {
-        throw e;
+        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 is unreachable
+          throw new Exception(MessageManager.formatMessage(
+                  "exception.fts_server_unreachable", "3DB Hub"));
+        }
       }
+      throw e;
+      
     }
 
   }
index 61ee231..8deff01 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
@@ -484,9 +486,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                 }
               }
             });
-    if (Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase()
+    if (Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase(Locale.ROOT)
             .indexOf("devel") > -1
-            || Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase()
+            || Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase(Locale.ROOT)
                     .indexOf("test") > -1)
     {
       formatMenu.add(vsel);
@@ -565,7 +567,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           }
           if (viewport.cursorMode)
           {
-            alignPanel.getSeqPanel().moveCursor(0, 1);
+            alignPanel.getSeqPanel().moveCursor(0, 1, evt.isShiftDown());
           }
           break;
 
@@ -576,7 +578,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           }
           if (viewport.cursorMode)
           {
-            alignPanel.getSeqPanel().moveCursor(0, -1);
+            alignPanel.getSeqPanel().moveCursor(0, -1,evt.isShiftDown());
           }
 
           break;
@@ -589,7 +591,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           }
           else
           {
-            alignPanel.getSeqPanel().moveCursor(-1, 0);
+            alignPanel.getSeqPanel().moveCursor(-1, 0, evt.isShiftDown());
           }
 
           break;
@@ -601,7 +603,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           }
           else
           {
-            alignPanel.getSeqPanel().moveCursor(1, 0);
+            alignPanel.getSeqPanel().moveCursor(1, 0, evt.isShiftDown());
           }
           break;
 
@@ -4297,7 +4299,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                       jws2servs.attachWSMenuEntry(webService, me);
                       for (Jws2Instance sv : jws2servs.getServices())
                       {
-                        if (sv.description.toLowerCase().contains("jpred"))
+                        if (sv.description.toLowerCase(Locale.ROOT).contains("jpred"))
                         {
                           for (JMenuItem jmi : legacyItems)
                           {
index d84287f..568ca47 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import jalview.api.FeatureRenderer;
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentAnnotation;
@@ -337,7 +339,7 @@ public class AnnotationExporter extends JPanel
 
     boolean nucleotide = ap.av.isNucleotide();
     String complement = nucleotide
-            ? MessageManager.getString("label.protein").toLowerCase()
+            ? MessageManager.getString("label.protein").toLowerCase(Locale.ROOT)
             : "CDS";
     JLabel label = new JLabel(
             MessageManager.formatMessage("label.include_linked_features",
index 5a681f1..21c45e9 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import jalview.analysis.AlignSeq;
 import jalview.analysis.AlignmentUtils;
 import jalview.datamodel.Alignment;
@@ -754,12 +756,12 @@ public class AnnotationLabels extends JPanel
       // jalview.gui.SeqPanel.mouseMoved(..) that formats sequence feature
       // tooltips
       String desc = aa.getDescription(true).trim();
-      if (!desc.toLowerCase().startsWith(HTML_START_TAG))
+      if (!desc.toLowerCase(Locale.ROOT).startsWith(HTML_START_TAG))
       {
         tooltip.append(HTML_START_TAG);
         desc = desc.replace("<", "&lt;");
       }
-      else if (desc.toLowerCase().endsWith(HTML_END_TAG))
+      else if (desc.toLowerCase(Locale.ROOT).endsWith(HTML_END_TAG))
       {
         desc = desc.substring(0, desc.length() - HTML_END_TAG.length());
       }
index 458abc6..217d2b1 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Dimension;
@@ -434,7 +436,7 @@ public class AppJmol extends StructureViewerBase
         jmb.jmolViewer.renderScreenImage(g, width, height);
       }
     };
-    String view = MessageManager.getString("action.view").toLowerCase();
+    String view = MessageManager.getString("action.view").toLowerCase(Locale.ROOT);
     ImageExporter exporter = new ImageExporter(writer,
             getProgressIndicator(), type, getTitle());
     exporter.doExport(null, this, width, height, view);
index 757bb01..8ba3dce 100644 (file)
@@ -256,7 +256,7 @@ public class BlogReader extends JPanel
     chan.setURL(
             jalview.bin.Cache.getDefault("JALVIEW_NEWS_RSS",
                     jalview.bin.Cache.getDefault("www.jalview.org",
-                            "http://www.jalview.org")
+                            "https://www.jalview.org")
                             + "/feeds/desktop/rss"));
     loadLastM();
     _channelModel.addChannel(chan);
index 67ef952..666fb4e 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Dimension;
@@ -1055,7 +1057,7 @@ public class Desktop extends jalview.jbgui.GDesktop
         String url = (history instanceof JTextField ? ((JTextField) history).getText()
             : ((JComboBox<String>) history).getEditor().getItem().toString().trim());
 
-        if (url.toLowerCase().endsWith(".jar")) {
+        if (url.toLowerCase(Locale.ROOT).endsWith(".jar")) {
           if (viewport != null) {
             new FileLoader().LoadFile(viewport, url, DataSourceType.URL, FileFormat.Jalview);
           } else {
@@ -1181,7 +1183,7 @@ public class Desktop extends jalview.jbgui.GDesktop
       // message.append("<br>...Checking latest version...</br>");
     } else if (!latestVersion.equals(Cache.getProperty("VERSION"))) {
       boolean red = false;
-      if (Cache.getProperty("VERSION").toLowerCase().indexOf("automated build") == -1) {
+      if (Cache.getProperty("VERSION").toLowerCase(Locale.ROOT).indexOf("automated build") == -1) {
         red = true;
         // Displayed when code version and jnlp version do not match and code
         // version is not a development build
@@ -2669,7 +2671,7 @@ public class Desktop extends jalview.jbgui.GDesktop
             continue;
           }
           java.net.URI uri = new java.net.URI(s);
-          if (uri.getScheme().toLowerCase().startsWith("http")) {
+          if (uri.getScheme().toLowerCase(Locale.ROOT).startsWith("http")) {
             protocols.add(DataSourceType.URL);
             files.add(uri.toString());
           } else {
@@ -2706,7 +2708,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
       // resolve any .lnk files in the file drop
       for (int f = 0; f < files.size(); f++) {
-        String source = files.get(f).toString().toLowerCase();
+        String source = files.get(f).toString().toLowerCase(Locale.ROOT);
         if (protocols.get(f).equals(DataSourceType.FILE)
             && (source.endsWith(".lnk") || source.endsWith(".url") || source.endsWith(".site"))) {
           try {
index e636455..572ada6 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
@@ -1529,7 +1531,7 @@ public class FeatureSettings extends JPanel
     String text = MessageManager.formatMessage("label.show_linked_features",
             nucleotide
                     ? MessageManager.getString("label.protein")
-                            .toLowerCase()
+                            .toLowerCase(Locale.ROOT)
                     : "CDS");
     showComplement = new JCheckBox(text);
     showComplement.addActionListener(new ActionListener()
index df56986..93dcadf 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.FocusAdapter;
@@ -335,7 +337,7 @@ public class Finder extends GFinder
           if (idMatch.size() > 0 && searchResults.getCount() > 0)
           {
             message.append(" ").append(
-                    MessageManager.getString("label.and").toLowerCase())
+                    MessageManager.getString("label.and").toLowerCase(Locale.ROOT))
                     .append(" ");
           }
           message.append(MessageManager.formatMessage(
index 8d62433..7bdcb2e 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import jalview.util.MessageManager;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
@@ -227,11 +229,11 @@ public class JDatabaseTree extends JalviewDialog implements KeyListener
         if (child.getUserObject() instanceof DbSourceProxy)
         {
           names[i] = ((DbSourceProxy) child.getUserObject()).getDbName()
-                  .toLowerCase();
+                  .toLowerCase(Locale.ROOT);
         }
         else
         {
-          names[i] = ((String) child.getUserObject()).toLowerCase();
+          names[i] = ((String) child.getUserObject()).toLowerCase(Locale.ROOT);
           sortTreeNodes(child);
         }
       }
index 2a7fb9f..6b32efa 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.event.ActionEvent;
@@ -1125,7 +1127,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
         for (int d = 0; d < nd; d++)
         {
           DBRefEntry e = dbr.get(d);
-          String src = e.getSource(); // jalview.util.DBRefUtils.getCanonicalName(dbr[d].getSource()).toUpperCase();
+          String src = e.getSource(); // jalview.util.DBRefUtils.getCanonicalName(dbr[d].getSource()).toUpperCase(Locale.ROOT);
           Object[] sarray = commonDbrefs.get(src);
           if (sarray == null)
           {
@@ -1171,7 +1173,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
       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 = commonDbrefs.get(ltarget.toUpperCase());
+      Object[] idset = commonDbrefs.get(ltarget.toUpperCase(Locale.ROOT));
       String[] seqstr, ids; // input to makeUrl
       if (idset != null)
       {
index 834d779..e3e3932 100755 (executable)
@@ -355,8 +355,8 @@ public class Preferences extends GPreferences
     startupCheckbox
             .setSelected(Cache.getDefault("SHOW_STARTUP_FILE", true));
     startupFileTextfield.setText(Cache.getDefault("STARTUP_FILE",
-            Cache.getDefault("www.jalview.org", "http://www.jalview.org")
-                    + "/examples/exampleFile_2_3.jar"));
+            Cache.getDefault("www.jalview.org", "https://www.jalview.org")
+                    + "/examples/exampleFile_2_7.jvp"));
 
     /*
      * Set Colours tab defaults
index 163ae25..454a730 100644 (file)
@@ -483,47 +483,80 @@ public class SeqPanel extends JPanel
 
   void moveCursor(int dx, int dy)
   {
-    seqCanvas.cursorX += dx;
-    seqCanvas.cursorY += dy;
-
+    moveCursor(dx, dy,false);
+  }
+  void moveCursor(int dx, int dy, boolean nextWord)
+  {
     HiddenColumns hidden = av.getAlignment().getHiddenColumns();
 
-    if (av.hasHiddenColumns() && !hidden.isVisible(seqCanvas.cursorX))
+    if (nextWord)
     {
-      int original = seqCanvas.cursorX - dx;
       int maxWidth = av.getAlignment().getWidth();
-
-      if (!hidden.isVisible(seqCanvas.cursorX))
-      {
-        int visx = hidden.absoluteToVisibleColumn(seqCanvas.cursorX - dx);
-        int[] region = hidden.getRegionWithEdgeAtRes(visx);
-
-        if (region != null) // just in case
+      int maxHeight=av.getAlignment().getHeight();
+      SequenceI seqAtRow = av.getAlignment().getSequenceAt(seqCanvas.cursorY);
+      // look for next gap or residue
+      boolean isGap = Comparison.isGap(seqAtRow.getCharAt(seqCanvas.cursorX));
+      int p = seqCanvas.cursorX,lastP,r=seqCanvas.cursorY,lastR;
+      do
+      {
+        lastP = p;
+        lastR = r;
+        if (dy != 0)
         {
-          if (dx == 1)
+          r += dy;
+          if (r < 0)
           {
-            // moving right
-            seqCanvas.cursorX = region[1] + 1;
+            r = 0;
           }
-          else if (dx == -1)
+          if (r >= maxHeight)
           {
-            // moving left
-            seqCanvas.cursorX = region[0] - 1;
+            r = maxHeight - 1;
           }
+          seqAtRow = av.getAlignment().getSequenceAt(r);
         }
-        seqCanvas.cursorX = (seqCanvas.cursorX < 0) ? 0 : seqCanvas.cursorX;
-      }
+        p = nextVisible(hidden, maxWidth, p, dx);
+      } while ((dx != 0 ? p != lastP : r != lastR)
+              && isGap == Comparison.isGap(seqAtRow.getCharAt(p)));
+      seqCanvas.cursorX=p;
+      seqCanvas.cursorY=r;
+    } else {
+      int maxWidth = av.getAlignment().getWidth();
+      seqCanvas.cursorX = nextVisible(hidden, maxWidth, seqCanvas.cursorX, dx);
+      seqCanvas.cursorY += dy;
+    }
+    scrollToVisible(false);
+  }
 
-      if (seqCanvas.cursorX >= maxWidth
-              || !hidden.isVisible(seqCanvas.cursorX))
+  private int nextVisible(HiddenColumns hidden,int maxWidth, int original, int dx)
+  {
+    int newCursorX=original+dx;
+    if (av.hasHiddenColumns() && !hidden.isVisible(newCursorX))
+    {
+      int visx = hidden.absoluteToVisibleColumn(newCursorX - dx);
+      int[] region = hidden.getRegionWithEdgeAtRes(visx);
+
+      if (region != null) // just in case
       {
-        seqCanvas.cursorX = original;
+        if (dx == 1)
+        {
+          // moving right
+          newCursorX = region[1] + 1;
+        }
+        else if (dx == -1)
+        {
+          // moving left
+          newCursorX = region[0] - 1;
+        }
       }
     }
-
-    scrollToVisible(false);
+    newCursorX = (newCursorX < 0) ? 0 : newCursorX;
+    if (newCursorX >= maxWidth
+            || !hidden.isVisible(newCursorX))
+    {
+      newCursorX = original;
+    }
+    return newCursorX;
   }
-
   /**
    * Scroll to make the cursor visible in the viewport.
    * 
index 6bcac24..9f9de6e 100644 (file)
 
 package jalview.gui;
 
+import java.util.Locale;
+
+import java.awt.event.ItemEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.concurrent.Executors;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.table.AbstractTableModel;
+
 import jalview.api.structures.JalviewStructureDisplayI;
 import jalview.bin.Cache;
 import jalview.bin.Jalview;
-import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.DBRefSource;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 import jalview.fts.api.FTSData;
@@ -37,6 +52,7 @@ import jalview.fts.core.FTSRestResponse;
 import jalview.fts.service.pdb.PDBFTSRestClient;
 import jalview.gui.structurechooser.PDBStructureChooserQuerySource;
 import jalview.gui.structurechooser.StructureChooserQuerySource;
+import jalview.gui.structurechooser.ThreeDBStructureChooserQuerySource;
 import jalview.io.DataSourceType;
 import jalview.jbgui.FilterOption;
 import jalview.jbgui.GStructureChooser;
@@ -44,25 +60,10 @@ import jalview.structure.StructureMapping;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.MessageManager;
 import jalview.ws.DBRefFetcher;
+import jalview.ws.DBRefFetcher.FetchFinishedListenerI;
+import jalview.ws.seqfetcher.DbSourceProxy;
 import jalview.ws.sifts.SiftsSettings;
 
-import java.awt.event.ItemEvent;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JTable;
-import javax.swing.SwingUtilities;
-import javax.swing.table.AbstractTableModel;
-
 /**
  * Provides the behaviors for the Structure chooser Panel
  * 
@@ -75,6 +76,11 @@ public class StructureChooser extends GStructureChooser
 {
   private static final String AUTOSUPERIMPOSE = "AUTOSUPERIMPOSE";
 
+  /**
+   * transient combo box choice for initiating 3db fetch
+   */
+  private static final String VIEWS_QUERYING_TDB = "QUERY_3DB";
+
   private SequenceI selectedSequence;
 
   private SequenceI[] selectedSequences;
@@ -99,25 +105,75 @@ public class StructureChooser extends GStructureChooser
 
   private Collection<FTSData> lastDiscoveredStructuresSet;
 
+  private boolean canQueryTDB = false;
+
+  private boolean notQueriedTDBYet = true;
+
+  List<SequenceI> seqsWithoutSourceDBRef = null;
+
   private static StructureViewer lastTargetedView = null;
 
   public StructureChooser(SequenceI[] selectedSeqs, SequenceI selectedSeq,
           AlignmentPanel ap)
   {
     // which FTS engine to use
-    data = StructureChooserQuerySource
-            .getQuerySourceFor(selectedSeqs);
+    data = StructureChooserQuerySource.getQuerySourceFor(selectedSeqs);
     initDialog();
-    
+
     this.ap = ap;
     this.selectedSequence = selectedSeq;
     this.selectedSequences = selectedSeqs;
     this.progressIndicator = (ap == null) ? null : ap.alignFrame;
     init();
-    
+
   }
 
   /**
+   * sets canQueryTDB if protein sequences without a canonical uniprot ref or at
+   * least one structure are discovered.
+   */
+  private void populateSeqsWithoutSourceDBRef()
+  {
+    seqsWithoutSourceDBRef = new ArrayList<SequenceI>();
+    boolean needCanonical = false;
+    for (SequenceI seq : selectedSequences)
+    {
+      if (seq.isProtein())
+      {
+        int dbRef = ThreeDBStructureChooserQuerySource
+                .checkUniprotRefs(seq.getDBRefs());
+        if (dbRef < 0)
+        {
+          if (dbRef == -1)
+          {
+            // need to retrieve canonicals
+            needCanonical = true;
+            seqsWithoutSourceDBRef.add(seq);
+          }
+          else
+          {
+            // could be a sequence with pdb ref
+            if (seq.getAllPDBEntries() == null
+                    || seq.getAllPDBEntries().size() == 0)
+            {
+              seqsWithoutSourceDBRef.add(seq);
+            }
+          }
+        }
+      }
+    }
+    // retrieve database refs for protein sequences
+    if (!seqsWithoutSourceDBRef.isEmpty())
+    {
+      canQueryTDB = true;
+      if (needCanonical)
+      {
+        notQueriedTDBYet = false;
+      }
+    }
+  };
+
+  /**
    * Initializes parameters used by the Structure Chooser Panel
    */
   protected void init()
@@ -129,38 +185,138 @@ public class StructureChooser extends GStructureChooser
 
     chk_superpose.setSelected(Cache.getDefault(AUTOSUPERIMPOSE, true));
 
+    Executors.defaultThreadFactory().newThread(new Runnable()
+    {
+      public void run()
+      {
+        populateSeqsWithoutSourceDBRef();
+        initialStructureDiscovery();
+      }
+
+    }).start();
+
+  }
+
+  // called by init
+  private void initialStructureDiscovery()
+  {
+    // check which FTS engine to use
+    data = StructureChooserQuerySource.getQuerySourceFor(selectedSequences);
+
     // ensure a filter option is in force for search
     populateFilterComboBox(true, cachedPDBExists);
-    Thread discoverPDBStructuresThread = new Thread(new Runnable()
+
+    // looks for any existing structures already loaded
+    // for the sequences (the cached ones)
+    // then queries the StructureChooserQuerySource to
+    // discover more structures.
+    //
+    // Possible optimisation is to only begin querying
+    // the structure chooser if there are no cached structures.
+
+    long startTime = System.currentTimeMillis();
+    updateProgressIndicator(
+            MessageManager.getString("status.loading_cached_pdb_entries"),
+            startTime);
+    loadLocalCachedPDBEntries();
+    updateProgressIndicator(null, startTime);
+    updateProgressIndicator(
+            MessageManager.getString("status.searching_for_pdb_structures"),
+            startTime);
+    fetchStructuresMetaData();
+    // revise filter options if no results were found
+    populateFilterComboBox(isStructuresDiscovered(), cachedPDBExists);
+    discoverStructureViews();
+    updateProgressIndicator(null, startTime);
+    mainFrame.setVisible(true);
+    updateCurrentView();
+  }
+
+  private void promptForTDBFetch()
+  {
+    final long progressId = System.currentTimeMillis();
+
+    // final action after prompting and discovering db refs
+    final Runnable strucDiscovery = new Runnable()
     {
       @Override
       public void run()
       {
-        // looks for any existing structures already loaded 
-        // for the sequences (the cached ones) 
-        // then queries the StructureChooserQuerySource to 
-        // discover more structures.
-        // 
-        // Possible optimisation is to only begin querying
-        // the structure chooser if there are no cached structures.
+        // TODO: warn if no accessions discovered
+        populateSeqsWithoutSourceDBRef();
+        // redo initial discovery - this time with 3d beacons
+        // Executors.
+        previousWantedFields=null;
         
-        long startTime = System.currentTimeMillis();
-        updateProgressIndicator(MessageManager
-                .getString("status.loading_cached_pdb_entries"), startTime);
-        loadLocalCachedPDBEntries();
-        updateProgressIndicator(null, startTime);
-        updateProgressIndicator(MessageManager.getString(
-                "status.searching_for_pdb_structures"), startTime);
-        fetchStructuresMetaData();
-        // revise filter options if no results were found
-        populateFilterComboBox(isStructuresDiscovered(), cachedPDBExists);
-        discoverStructureViews();
-        updateProgressIndicator(null, startTime);
-        mainFrame.setVisible(true);
-        updateCurrentView();
+        initialStructureDiscovery();
       }
-    });
-    discoverPDBStructuresThread.start();
+    };
+
+    final FetchFinishedListenerI afterDbRefFetch = new FetchFinishedListenerI()
+    {
+      
+      @Override
+      public void finished()
+      {
+        // filter has been selected, so we set flag to remove ourselves
+        notQueriedTDBYet = false;
+        // new thread to discover structures - via 3d beacons
+        Executors.defaultThreadFactory().newThread(strucDiscovery).start();
+        
+      }
+    };
+    
+    // fetch db refs if OK pressed
+    final Runnable discoverCanonicalDBrefs = new Runnable() 
+    {
+      @Override
+      public void run()
+      {
+        populateSeqsWithoutSourceDBRef();
+
+        final int y = seqsWithoutSourceDBRef.size();
+        if (y > 0)
+        {
+          final SequenceI[] seqWithoutSrcDBRef = seqsWithoutSourceDBRef
+                  .toArray(new SequenceI[y]);
+          DBRefFetcher dbRefFetcher = new DBRefFetcher(seqWithoutSrcDBRef,
+                  progressBar, new DbSourceProxy[]
+                  { new jalview.ws.dbsources.Uniprot() }, null, false);
+          dbRefFetcher.addListener(afterDbRefFetch);
+          // ideally this would also gracefully run with callbacks
+          dbRefFetcher.fetchDBRefs(true);
+        } else {
+          // call finished action directly
+          afterDbRefFetch.finished();
+        }
+      }
+
+    };
+    final Runnable revertview = new Runnable() {
+      public void run() {
+        if (lastSelected!=null) {
+          cmb_filterOption.setSelectedItem(lastSelected);
+        }
+      };
+    };
+    // need cancel and no to result in the discoverPDB action - mocked is
+    // 'cancel'
+    JvOptionPane.newOptionDialog(this)
+            .setResponseHandler(JvOptionPane.OK_OPTION,
+                    discoverCanonicalDBrefs)
+            .setResponseHandler(JvOptionPane.CANCEL_OPTION, revertview)
+            .setResponseHandler(JvOptionPane.NO_OPTION, revertview)
+            .showDialog(
+                    MessageManager.formatMessage(
+                            "label.fetch_references_for_3dbeacons",
+                            seqsWithoutSourceDBRef.size()),
+                    MessageManager
+                            .getString("label.3dbeacons"),
+                    JvOptionPane.YES_NO_OPTION, JvOptionPane.PLAIN_MESSAGE,
+                    null, new Object[]
+                    { MessageManager.getString("action.ok"),
+                        MessageManager.getString("action.cancel") },
+                    MessageManager.getString("action.ok"));
   }
 
   /**
@@ -256,8 +412,9 @@ public class StructureChooser extends GStructureChooser
         resultList = data.fetchStructuresMetaData(seq, wantedFields,
                 selectedFilterOpt, !chk_invertFilter.isSelected());
         // null response means the FTSengine didn't yield a query for this
-        // consider designing a special exception if we really wanted to be OOCrazy
-        if (resultList==null)
+        // consider designing a special exception if we really wanted to be
+        // OOCrazy
+        if (resultList == null)
         {
           continue;
         }
@@ -282,9 +439,9 @@ public class StructureChooser extends GStructureChooser
     {
       getResultTable()
               .setModel(data.getTableModel(discoveredStructuresSet));
-      
+
       noOfStructuresFound = discoveredStructuresSet.size();
-      lastDiscoveredStructuresSet=discoveredStructuresSet;
+      lastDiscoveredStructuresSet = discoveredStructuresSet;
       mainFrame.setTitle(MessageManager.formatMessage(
               "label.structure_chooser_no_of_structures",
               noOfStructuresFound, totalTime));
@@ -357,8 +514,9 @@ public class StructureChooser extends GStructureChooser
           FTSRestResponse resultList;
           try
           {
-            resultList = data.selectFirstRankedQuery(seq, discoveredStructuresSet,wantedFields,
-                    fieldToFilterBy, !chk_invertFilter.isSelected());
+            resultList = data.selectFirstRankedQuery(seq,
+                    discoveredStructuresSet, wantedFields, fieldToFilterBy,
+                    !chk_invertFilter.isSelected());
 
           } catch (Exception e)
           {
@@ -383,7 +541,7 @@ public class StructureChooser extends GStructureChooser
           reorderedStructuresSet.addAll(discoveredStructuresSet);
           getResultTable()
                   .setModel(data.getTableModel(reorderedStructuresSet));
-          
+
           FTSRestResponse.configureTableColumn(getResultTable(),
                   wantedFields, tempUserPrefs);
           getResultTable().getColumn("Ref Sequence").setPreferredWidth(120);
@@ -457,6 +615,7 @@ public class StructureChooser extends GStructureChooser
   {
     populateFilterComboBox(haveData, cachedPDBExist, null);
   }
+
   /**
    * Populates the filter combo-box options dynamically depending on discovered
    * structures
@@ -464,45 +623,57 @@ public class StructureChooser extends GStructureChooser
   protected void populateFilterComboBox(boolean haveData,
           boolean cachedPDBExist, FilterOption lastSel)
   {
-    
+
     /*
      * temporarily suspend the change listener behaviour
      */
     cmb_filterOption.removeItemListener(this);
-    int selSet=-1;
+    int selSet = -1;
     cmb_filterOption.removeAllItems();
     if (haveData)
     {
-      List<FilterOption> filters = data.getAvailableFilterOptions(VIEWS_FILTER);
-      data.updateAvailableFilterOptions(VIEWS_FILTER, filters, lastDiscoveredStructuresSet);
-      int p=0;
-      for (FilterOption filter:filters)
+      List<FilterOption> filters = data
+              .getAvailableFilterOptions(VIEWS_FILTER);
+      data.updateAvailableFilterOptions(VIEWS_FILTER, filters,
+              lastDiscoveredStructuresSet);
+      int p = 0;
+      for (FilterOption filter : filters)
       {
-        if (lastSel!=null && filter.equals(lastSel)) {
-          selSet=p;
+        if (lastSel != null && filter.equals(lastSel))
+        {
+          selSet = p;
         }
         p++;
         cmb_filterOption.addItem(filter);
       }
     }
+
     cmb_filterOption.addItem(
             new FilterOption(MessageManager.getString("label.enter_pdb_id"),
-                    "-", VIEWS_ENTER_ID, false,null));
+                    "-", VIEWS_ENTER_ID, false, null));
     cmb_filterOption.addItem(
             new FilterOption(MessageManager.getString("label.from_file"),
-                    "-", VIEWS_FROM_FILE, false,null));
+                    "-", VIEWS_FROM_FILE, false, null));
+    if (canQueryTDB && notQueriedTDBYet)
+    {
+      FilterOption queryTDBOption = new FilterOption(
+              MessageManager.getString("label.search_3dbeacons"), "-",
+              VIEWS_QUERYING_TDB, false, null);
+      cmb_filterOption.addItem(queryTDBOption);
+    }
 
     if (cachedPDBExist)
     {
       FilterOption cachedOption = new FilterOption(
               MessageManager.getString("label.cached_structures"), "-",
-              VIEWS_LOCAL_PDB, false,null);
+              VIEWS_LOCAL_PDB, false, null);
       cmb_filterOption.addItem(cachedOption);
-      if (selSet==-1) {
+      if (selSet == -1)
+      {
         cmb_filterOption.setSelectedItem(cachedOption);
       }
     }
-    if (selSet>-1)
+    if (selSet > -1)
     {
       cmb_filterOption.setSelectedIndex(selSet);
     }
@@ -516,24 +687,45 @@ public class StructureChooser extends GStructureChooser
   {
     FilterOption selectedFilterOpt = ((FilterOption) cmb_filterOption
             .getSelectedItem());
+    
+    // first check if we need to rebuild dialog
+    if (selectedFilterOpt.getView() == VIEWS_QUERYING_TDB)
+    {
+      promptForTDBFetch();
+      return;
+    }
+    if (lastSelected == selectedFilterOpt)
+    {
+      // don't need to do anything, probably
+      return;
+    }
+    // otherwise, record selection
+    // and update the layout and dialog accordingly
+    lastSelected = selectedFilterOpt;
+
     layout_switchableViews.show(pnl_switchableViews,
             selectedFilterOpt.getView());
     String filterTitle = mainFrame.getTitle();
     mainFrame.setTitle(frameTitle);
     chk_invertFilter.setVisible(false);
+    
     if (selectedFilterOpt.getView() == VIEWS_FILTER)
     {
       mainFrame.setTitle(filterTitle);
       // TDB Query has no invert as yet
-      chk_invertFilter.setVisible(selectedFilterOpt.getQuerySource() instanceof PDBStructureChooserQuerySource);
-      
-      if (data!=selectedFilterOpt.getQuerySource() || data.needsRefetch(selectedFilterOpt)) 
+      chk_invertFilter.setVisible(selectedFilterOpt
+              .getQuerySource() instanceof PDBStructureChooserQuerySource);
+
+      if (data != selectedFilterOpt.getQuerySource()
+              || data.needsRefetch(selectedFilterOpt))
       {
         data = selectedFilterOpt.getQuerySource();
         // rebuild the views completely, since prefs will also change
         tabRefresh();
         return;
-      } else {
+      }
+      else
+      {
         filterResultSet(selectedFilterOpt.getValue());
       }
     }
@@ -672,7 +864,7 @@ public class StructureChooser extends GStructureChooser
   {
     validateSelections();
   }
-
+  private FilterOption lastSelected=null;
   /**
    * Handles the state change event for the 'filter' combo-box and 'invert'
    * check-box
@@ -780,7 +972,8 @@ public class StructureChooser extends GStructureChooser
           int[] selectedRows = restable.getSelectedRows();
           PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length];
           List<SequenceI> selectedSeqsToView = new ArrayList<>();
-          pdbEntriesToView = data.collectSelectedRows(restable,selectedRows,selectedSeqsToView);
+          pdbEntriesToView = data.collectSelectedRows(restable,
+                  selectedRows, selectedSeqsToView);
 
           SequenceI[] selectedSeqs = selectedSeqsToView
                   .toArray(new SequenceI[selectedSeqsToView.size()]);
@@ -799,8 +992,9 @@ public class StructureChooser extends GStructureChooser
           List<SequenceI> selectedSeqsToView = new ArrayList<>();
           for (int row : selectedRows)
           {
-            PDBEntry pdbEntry = (PDBEntry) tbl_local_pdb.getValueAt(row,
-                    pdbIdColIndex);
+            PDBEntry pdbEntry = ((PDBEntryTableModel) tbl_local_pdb
+                    .getModel()).getPDBEntryAt(row).getPdbEntry();
+
             pdbEntriesToView[count++] = pdbEntry;
             SequenceI selectedSeq = (SequenceI) tbl_local_pdb
                     .getValueAt(row, refSeqColIndex);
@@ -827,7 +1021,7 @@ public class StructureChooser extends GStructureChooser
             if (pdbIdStr.split(":").length > 1)
             {
               pdbEntry.setId(pdbIdStr.split(":")[0]);
-              pdbEntry.setChainCode(pdbIdStr.split(":")[1].toUpperCase());
+              pdbEntry.setChainCode(pdbIdStr.split(":")[1].toUpperCase(Locale.ROOT));
             }
             else
             {
@@ -1054,7 +1248,7 @@ public class StructureChooser extends GStructureChooser
             // TODO move this pdb id search into the PDB specific
             // FTSSearchEngine
             // for moment, it will work fine as is because it is self-contained
-            String searchTerm = text.toLowerCase();
+            String searchTerm = text.toLowerCase(Locale.ROOT);
             searchTerm = searchTerm.split(":")[0];
             // System.out.println(">>>>> search term : " + searchTerm);
             List<FTSDataColumnI> wantedFields = new ArrayList<>();
@@ -1101,7 +1295,7 @@ public class StructureChooser extends GStructureChooser
         public void run()
         {
           fetchStructuresMetaData();
-          //populateFilterComboBox(true, cachedPDBExists);
+          // populateFilterComboBox(true, cachedPDBExists);
 
           filterResultSet(
                   ((FilterOption) cmb_filterOption.getSelectedItem())
@@ -1159,7 +1353,7 @@ public class StructureChooser extends GStructureChooser
         value = entry.getSequence();
         break;
       case 1:
-        value = entry.getPdbEntry();
+        value = entry.getQualifiedId();
         break;
       case 2:
         value = entry.getPdbEntry().getChainCode() == null ? "_"
@@ -1200,6 +1394,15 @@ public class StructureChooser extends GStructureChooser
       this.pdbEntry = pdbEntry;
     }
 
+    public String getQualifiedId()
+    {
+      if (pdbEntry.hasProvider())
+      {
+        return pdbEntry.getProvider() + ":" + pdbEntry.getId();
+      }
+      return pdbEntry.toString();
+    }
+
     public SequenceI getSequence()
     {
       return sequence;
@@ -1241,6 +1444,18 @@ public class StructureChooser extends GStructureChooser
   protected void setFTSDocFieldPrefs(FTSDataColumnPreferences newPrefs)
   {
     data.setDocFieldPrefs(newPrefs);
-    
+
+  }
+
+  /**
+   * 
+   * @return true when all initialisation threads have finished and dialog is
+   *         visible
+   */
+  public boolean isDialogVisible()
+  {
+    return mainFrame != null && data != null && cmb_filterOption != null
+            && mainFrame.isVisible()
+            && cmb_filterOption.getSelectedItem() != null;
   }
 }
index 2d8e729..b730df4 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import jalview.analysis.AlignmentSorter;
 import jalview.analysis.AverageDistanceTree;
 import jalview.analysis.NJTree;
@@ -693,7 +695,7 @@ public class TreePanel extends GTreePanel
     String tree = MessageManager.getString("label.tree");
     ImageExporter exporter = new ImageExporter(writer, null, imageFormat,
             tree);
-    exporter.doExport(null, this, width, height, tree.toLowerCase());
+    exporter.doExport(null, this, width, height, tree.toLowerCase(Locale.ROOT));
   }
 
   /**
@@ -723,7 +725,7 @@ public class TreePanel extends GTreePanel
             // search dbrefs, features and annotation
             List<DBRefEntry> refs = jalview.util.DBRefUtils
                     .selectRefs(sq.getDBRefs(), new String[]
-                    { labelClass.toUpperCase() });
+                    { labelClass.toUpperCase(Locale.ROOT) });
             if (refs != null)
             {
               for (int i = 0, ni = refs.size(); i < ni; i++)
@@ -786,7 +788,7 @@ public class TreePanel extends GTreePanel
      * i18n description of Neighbour Joining or Average Distance method
      */
     String treecalcnm = MessageManager
-            .getString("label.tree_calc_" + treeType.toLowerCase());
+            .getString("label.tree_calc_" + treeType.toLowerCase(Locale.ROOT));
 
     /*
      * short score model name (long description can be too long)
index 4846049..c3f132b 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import jalview.bin.Cache;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
@@ -205,8 +207,8 @@ public class UserDefinedColours extends GUserDefinedColours
       {
         int row = i / cols + 1;
         int index = (row * cols) + i;
-        JButton button = makeButton(ResidueProperties.aa[i].toLowerCase(),
-                ResidueProperties.aa[i].toLowerCase(), lowerCaseButtons, i);
+        JButton button = makeButton(ResidueProperties.aa[i].toLowerCase(Locale.ROOT),
+                ResidueProperties.aa[i].toLowerCase(Locale.ROOT), lowerCaseButtons, i);
 
         buttonPanel.add(button, index);
       }
index 0773a7b..ee1b473 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.gui;
 
+import java.util.Locale;
+
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Dimension;
@@ -545,7 +547,7 @@ public class WebserviceInfo extends GWebserviceInfo
     {
       return null;
     }
-    String lowertxt = text.toLowerCase();
+    String lowertxt = text.toLowerCase(Locale.ROOT);
     int htmlpos = leaveFirst ? -1 : lowertxt.indexOf("<body");
 
     int htmlend = leaveLast ? -1 : lowertxt.indexOf("</body");
@@ -574,7 +576,7 @@ public class WebserviceInfo extends GWebserviceInfo
     {
       return "";
     }
-    String lowertxt = text.toLowerCase();
+    String lowertxt = text.toLowerCase(Locale.ROOT);
     int htmlpos = lowertxt.indexOf("<body");
     int htmlend = lowertxt.indexOf("</body");
     int doctype = lowertxt.indexOf("<!doctype");
index 0f38e9f..727d8e0 100644 (file)
@@ -1,5 +1,7 @@
 package jalview.gui.structurechooser;
 
+import java.util.Locale;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -78,7 +80,7 @@ public class PDBStructureChooserQuerySource
       {
         if (isValidSeqName(entry.getId()))
         {
-          String id = entry.getId().toLowerCase();
+          String id = entry.getId().toLowerCase(Locale.ROOT);
           queryBuilder.append("pdb_id:").append(id).append(" OR ");
           isPDBRefsFound = true;
           pdbids.add(id);
@@ -106,7 +108,7 @@ public class PDBStructureChooserQuerySource
           else if (dbRef.getSource().equalsIgnoreCase(DBRefSource.PDB))
           {
 
-            String id = getDBRefId(dbRef).toLowerCase();
+            String id = getDBRefId(dbRef).toLowerCase(Locale.ROOT);
             if (!pdbids.contains(id))
             {
               queryBuilder.append("pdb_id:").append(id).append(" OR ");
@@ -126,7 +128,7 @@ public class PDBStructureChooserQuerySource
     {
       String seqName = seq.getName();
       seqName = sanitizeSeqName(seqName);
-      String[] names = seqName.toLowerCase().split("\\|");
+      String[] names = seqName.toLowerCase(Locale.ROOT).split("\\|");
       for (String name : names)
       {
         // System.out.println("Found name : " + name);
@@ -185,7 +187,7 @@ public class PDBStructureChooserQuerySource
     {
       return false;
     }
-    seqName = seqName.toLowerCase();
+    seqName = seqName.toLowerCase(Locale.ROOT);
     for (String ignoredEntry : ignoreList.split(","))
     {
       if (seqName.contains(ignoredEntry))
@@ -238,19 +240,19 @@ public class PDBStructureChooserQuerySource
   public List<FilterOption> getAvailableFilterOptions(String VIEWS_FILTER)
   {
     List<FilterOption> filters = new ArrayList<FilterOption>();
-    filters.add(new FilterOption(
+    filters.add(new FilterOption("PDBe "+
             MessageManager.getString("label.best_quality"),
             "overall_quality", VIEWS_FILTER, false,this));
-    filters.add(new FilterOption(
+    filters.add(new FilterOption("PDBe "+
             MessageManager.getString("label.best_resolution"),
             "resolution", VIEWS_FILTER, false,this));
-    filters.add(new FilterOption(
+    filters.add(new FilterOption("PDBe "+
             MessageManager.getString("label.most_protein_chain"),
             "number_of_protein_chains", VIEWS_FILTER, false,this));
-    filters.add(new FilterOption(
+    filters.add(new FilterOption("PDBe "+
             MessageManager.getString("label.most_bound_molecules"),
             "number_of_bound_molecules", VIEWS_FILTER, false,this));
-    filters.add(new FilterOption(
+    filters.add(new FilterOption("PDBe "+
             MessageManager.getString("label.most_polymer_residues"),
             "number_of_polymer_residues", VIEWS_FILTER, true,this));
   
index b5646db..1aad2e0 100644 (file)
@@ -1,5 +1,7 @@
 package jalview.gui.structurechooser;
 
+import java.util.Locale;
+
 import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
@@ -42,7 +44,7 @@ public abstract class StructureChooserQuerySource
 
   public static StructureChooserQuerySource getPDBfts()
   {
-          return new PDBStructureChooserQuerySource();
+    return new PDBStructureChooserQuerySource();
   }
 
   public static StructureChooserQuerySource getTDBfts()
@@ -65,7 +67,6 @@ public abstract class StructureChooserQuerySource
     return docFieldPrefs;
   }
 
-
   /**
    * Builds a query string for a given sequences using its DBRef entries
    * 
@@ -75,7 +76,6 @@ public abstract class StructureChooserQuerySource
    */
 
   public abstract String buildQuery(SequenceI seq);
-  
 
   /**
    * Remove the following special characters from input string +, -, &, !, (, ),
@@ -110,7 +110,7 @@ public abstract class StructureChooserQuerySource
     {
       return false;
     }
-    seqName = seqName.toLowerCase();
+    seqName = seqName.toLowerCase(Locale.ROOT);
     for (String ignoredEntry : ignoreList.split(","))
     {
       if (seqName.contains(ignoredEntry))
@@ -167,7 +167,8 @@ public abstract class StructureChooserQuerySource
    * 
    * @param seq
    *          - seq to generate a query for
-   * @param discoveredStructuresSet - existing set of entries - allows client side selection
+   * @param discoveredStructuresSet
+   *          - existing set of entries - allows client side selection
    * @param wantedFields
    *          - fields to retrieve
    * @param selectedFilterOpt
@@ -178,7 +179,8 @@ public abstract class StructureChooserQuerySource
    * @throws Exception
    */
   public abstract FTSRestResponse selectFirstRankedQuery(SequenceI seq,
-          Collection<FTSData> discoveredStructuresSet, Collection<FTSDataColumnI> wantedFields, String fieldToFilterBy,
+          Collection<FTSData> discoveredStructuresSet,
+          Collection<FTSDataColumnI> wantedFields, String fieldToFilterBy,
           boolean b) throws Exception;
 
   /**
@@ -200,15 +202,17 @@ public abstract class StructureChooserQuerySource
 
   /**
    * @param VIEWS_FILTER
-   *          - a String key that can be used by the caller to tag the returned filter
-   *          options to distinguish them in a collection
+   *          - a String key that can be used by the caller to tag the returned
+   *          filter options to distinguish them in a collection
    * @return list of FilterOption - convention is that the last one in the list
    *         will be constructed with 'addSeparator==true'
    */
-  public abstract List<FilterOption> getAvailableFilterOptions(String VIEWS_FILTER);
+  public abstract List<FilterOption> getAvailableFilterOptions(
+          String VIEWS_FILTER);
 
   /**
    * construct a structure chooser query source for the given set of sequences
+   * 
    * @param selectedSeqs
    * @return PDBe or 3DB query source
    */
@@ -216,22 +220,39 @@ public abstract class StructureChooserQuerySource
           SequenceI[] selectedSeqs)
   {
     ThreeDBStructureChooserQuerySource tdbSource = new ThreeDBStructureChooserQuerySource();
-    boolean hasUniprot=false;
-    boolean hasNA=false,hasProtein=false;
-    for (SequenceI seq:selectedSeqs)
+    boolean hasUniprot = false, hasCanonical = false;
+    boolean hasNA = false, hasProtein = false;
+    int protWithoutUni = 0;
+    int protWithoutCanon = 0;
+    for (SequenceI seq : selectedSeqs)
     {
-      hasNA|=!seq.isProtein();
+      hasNA |= !seq.isProtein();
       hasProtein |= seq.isProtein();
       if (seq.isProtein())
       {
-        String query = tdbSource.buildQuery(seq);
-        if (query!=null && query.length()>0)
+        int refsAvailable = ThreeDBStructureChooserQuerySource
+                .checkUniprotRefs(seq.getDBRefs());
+        if (refsAvailable > -2)
         {
-          hasUniprot=true;
+          if (refsAvailable > -1)
+          {
+            hasCanonical = true;
+          } else {
+            protWithoutCanon++;
+          }
+          hasUniprot = true;
+        } else {
+          protWithoutUni++;
+          
         }
       }
     }
-    if (hasProtein && hasUniprot && !hasNA)
+    //
+    // logic: all canonicals - no fetchdb
+    // some uniprot no canonicals: defer to PDB, user can optionally fetch
+    //
+    if (hasProtein && hasCanonical && !hasNA && protWithoutCanon == 0 && protWithoutUni == 0)
+
     {
       return tdbSource;
     }
@@ -239,17 +260,17 @@ public abstract class StructureChooserQuerySource
   }
 
   /**
-   * some filter options may mean the original query needs to be executed again. 
+   * some filter options may mean the original query needs to be executed again.
+   * 
    * @param selectedFilterOpt
    * @return true if the fetchStructuresMetadata method needs to be called again
    */
   public abstract boolean needsRefetch(FilterOption selectedFilterOpt);
 
-  
-  
   public void updateAvailableFilterOptions(String VIEWS_FILTER,
           List<FilterOption> xtantOptions, Collection<FTSData> lastFTSData)
   {
     // TODO Auto-generated method stub
-    
-  }}
\ No newline at end of file
+
+  }
+}
\ No newline at end of file
index ffac9c4..d3896a5 100644 (file)
@@ -1,5 +1,7 @@
 package jalview.gui.structurechooser;
 
+import java.util.Locale;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
@@ -85,7 +87,7 @@ public class TDBResultAnalyser
     {
       return 0;
     }
-    String upper_cat = cat.toUpperCase();
+    String upper_cat = cat.toUpperCase(Locale.ROOT);
     int idx = EXP_CATEGORIES.indexOf(upper_cat);
     if (idx == -1)
     {
@@ -136,11 +138,11 @@ public class TDBResultAnalyser
         int o1_s = (Integer) o1data[idx_ups];
         int o1_e = (Integer) o1data[idx_upe];
         int o1_cat = scoreCategory((String) o1data[idx_mcat]);
-        String o1_prov= ((String) o1data[idx_mprov]).toUpperCase();
+        String o1_prov= ((String) o1data[idx_mprov]).toUpperCase(Locale.ROOT);
         int o2_s = (Integer) o2data[idx_ups];
         int o2_e = (Integer) o2data[idx_upe];
         int o2_cat = scoreCategory((String) o2data[idx_mcat]);
-        String o2_prov= ((String) o2data[idx_mprov]).toUpperCase();
+        String o2_prov= ((String) o2data[idx_mprov]).toUpperCase(Locale.ROOT);
         
 
         if (o1_cat == o2_cat)
@@ -177,8 +179,8 @@ public class TDBResultAnalyser
                   return nonNullFirst(idx_mqual, o1data, o2data);
                 }
                 // models, so rank on qmean - b
-                float o1_mq = (Float) o1data[idx_mqual];
-                float o2_mq = (Float) o2data[idx_mqual];
+                double o1_mq = (Double) o1data[idx_mqual];
+                double o2_mq = (Double) o2data[idx_mqual];
                 return (o2_mq < o1_mq) ? 1 : (o2_mq == o1_mq) ? 0 : -1;
               }
             }
@@ -250,6 +252,10 @@ public class TDBResultAnalyser
         cover.andNot(scover);
       }
     }
+    if (selected.size()==0)
+    {
+      return selected;
+    }
     // final step is to sort on length - this might help the superposition
     // process
     Collections.sort(selected, new Comparator<FTSData>()
index ff414dd..7a311f8 100644 (file)
@@ -3,7 +3,6 @@ package jalview.gui.structurechooser;
 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.LinkedHashSet;
@@ -26,7 +25,6 @@ import jalview.fts.core.FTSRestRequest;
 import jalview.fts.core.FTSRestResponse;
 import jalview.fts.service.threedbeacons.TDBeaconsFTSRestClient;
 import jalview.jbgui.FilterOption;
-import jalview.util.MessageManager;
 
 /**
  * logic for querying the 3DBeacons API for structures of sequences
@@ -87,26 +85,38 @@ public class ThreeDBStructureChooserQuerySource
     Set<String> pdbids = new HashSet<>();
 
     List<DBRefEntry> refs = seq.getDBRefs();
+    int ib = checkUniprotRefs(refs);
+    if (ib>-1)
+    {
+      return getDBRefId(refs.get(ib));
+    }
+    return null;
+  }
+
+  /**
+   * Searches DBRefEntry for uniprot refs
+   * @param seq
+   * @return -2 if no uniprot refs, -1 if no canonical ref., otherwise index of Uniprot canonical DBRefEntry 
+   */
+  public static int checkUniprotRefs(List<DBRefEntry> refs)
+  {
+    boolean hasUniprot = false;
     if (refs != null && refs.size() != 0)
     {
       for (int ib = 0, nb = refs.size(); ib < nb; ib++)
       {
         DBRefEntry dbRef = refs.get(ib);
-        if (isValidSeqName(getDBRefId(dbRef))
-                && queryBuilder.length() < MAX_QLENGTH)
+        if (dbRef.getSource().equalsIgnoreCase(DBRefSource.UNIPROT))
         {
-          if (dbRef.getSource().equalsIgnoreCase(DBRefSource.UNIPROT)
-                  && dbRef.isCanonical())
+          hasUniprot = true;
+          if (dbRef.isCanonical())
           {
-            // TODO: pick best Uniprot accession
-            isUniProtRefsFound = true;
-            return getDBRefId(dbRef);
-
+            return ib;
           }
         }
       }
     }
-    return null;
+    return hasUniprot ? -1 : -2;
   }
 
   /**
@@ -128,7 +138,7 @@ public class ThreeDBStructureChooserQuerySource
     {
       return false;
     }
-    seqName = seqName.toLowerCase();
+    seqName = seqName.toLowerCase(Locale.ROOT);
     for (String ignoredEntry : ignoreList.split(","))
     {
       if (seqName.contains(ignoredEntry))
@@ -165,17 +175,19 @@ public class ThreeDBStructureChooserQuerySource
           FilterOption selectedFilterOpt, boolean b) throws Exception
   {
     FTSRestResponse resultList;
-    if (selectedFilterOpt!=null && tdBeaconsFilter(selectedFilterOpt.getValue()))
+    if (selectedFilterOpt != null
+            && tdBeaconsFilter(selectedFilterOpt.getValue()))
     {
       FTSRestRequest tdbRequest = getTDBeaconsRequest(seq, wantedFields);
       resultList = tdbRestClient.executeRequest(tdbRequest);
-
+      
       lastTdbRequest = tdbRequest;
-
-      // Query the PDB and add additional metadata
-      FTSRestResponse pdbResponse = fetchStructuresMetaDataFor(
-              getPDBQuerySource(), resultList);
-      FTSRestResponse joinedResp = joinResponses(resultList, pdbResponse);
+      if (resultList!=null)
+      { // Query the PDB and add additional metadata
+        FTSRestResponse pdbResponse = fetchStructuresMetaDataFor(
+                getPDBQuerySource(), resultList);
+        FTSRestResponse joinedResp = joinResponses(resultList, pdbResponse);
+      }
       return resultList;
     }
     // use the PDBFTS directly
@@ -183,7 +195,7 @@ public class ThreeDBStructureChooserQuerySource
             wantedFields, selectedFilterOpt, b);
     lastTdbRequest = getPDBQuerySource().lastPdbRequest;
     lastPdbRequest = lastTdbRequest; // both queries the same - indicates we
-                                     // rank using PDBe
+    // rank using PDBe
     return resultList;
 
   }
@@ -235,22 +247,39 @@ public class ThreeDBStructureChooserQuerySource
   public void updateAvailableFilterOptions(String VIEWS_FILTER,
           List<FilterOption> xtantOptions, Collection<FTSData> tdbEntries)
   {
-    if (tdbEntries !=null && lastTdbRequest != null)
+    if (tdbEntries != null && lastTdbRequest != null)
     {
       int prov_idx = lastTdbRequest.getFieldIndex("Provider");
-
+      boolean hasPDBe=false;
       for (FTSData row : tdbEntries)
       {
         String provider = (String) row.getSummaryData()[prov_idx];
-        FilterOption providerOpt = new FilterOption("3DB Provider - " + provider,
-                FILTER_SOURCE_PREFIX + provider, VIEWS_FILTER,
-                false, this);
+        FilterOption providerOpt = new FilterOption(
+                "3DB Provider - " + provider,
+                FILTER_SOURCE_PREFIX + provider, VIEWS_FILTER, false, this);
         if (!xtantOptions.contains(providerOpt))
         {
-          xtantOptions.add(1,
-                  providerOpt);
-          tdBeaconsFilters.add(FILTER_SOURCE_PREFIX+provider);
-
+          xtantOptions.add(1, providerOpt);
+          tdBeaconsFilters.add(FILTER_SOURCE_PREFIX + provider);
+          if ("PDBe".equalsIgnoreCase(provider))
+          {
+            hasPDBe=true;
+          }
+        }
+      }
+      if (!hasPDBe)
+      {
+        // remove the PDBe options from the available filters
+        int op=0;
+        while (op<xtantOptions.size())
+        {
+          FilterOption filter = xtantOptions.get(op);
+          if (filter.getQuerySource() instanceof PDBStructureChooserQuerySource)
+          {
+            xtantOptions.remove(op);
+          } else {
+            op++;
+          }
         }
       }
     }
@@ -280,8 +309,9 @@ public class ThreeDBStructureChooserQuerySource
   @Override
   public boolean needsRefetch(FilterOption selectedFilterOpt)
   {
-    return selectedFilterOpt==null || !tdBeaconsFilter(selectedFilterOpt.getValue())
-            && lastPdbRequest != lastTdbRequest;
+    return selectedFilterOpt == null
+            || !tdBeaconsFilter(selectedFilterOpt.getValue())
+                    && lastPdbRequest != lastTdbRequest;
   }
 
   /**
@@ -304,7 +334,7 @@ public class ThreeDBStructureChooserQuerySource
           Collection<FTSDataColumnI> wantedFields, String fieldToFilterBy,
           boolean b) throws Exception
   {
-    if (fieldToFilterBy!=null && tdBeaconsFilter(fieldToFilterBy))
+    if (fieldToFilterBy != null && tdBeaconsFilter(fieldToFilterBy))
     {
       TDBResultAnalyser analyser = new TDBResultAnalyser(seq,
               collectedResults, lastTdbRequest, fieldToFilterBy,
@@ -336,6 +366,7 @@ public class ThreeDBStructureChooserQuerySource
     int idColumnIndex = restable.getColumn("Model id").getModelIndex();
     int urlColumnIndex = restable.getColumn("Url").getModelIndex();
     int typeColumnIndex = restable.getColumn("Provider").getModelIndex();
+    int humanUrl = restable.getColumn("Page URL").getModelIndex();
     int categoryColumnIndex = restable.getColumn("Model Category")
             .getModelIndex();
     final int up_start_idx = restable.getColumn("Uniprot Start")
@@ -372,6 +403,8 @@ public class ThreeDBStructureChooserQuerySource
       String urlStr = restable.getValueAt(row, urlColumnIndex).toString();
       String typeColumn = restable.getValueAt(row, typeColumnIndex)
               .toString();
+      String modelPage = humanUrl < 1 ? null
+              : (String) restable.getValueAt(row, humanUrl);
       SequenceI selectedSeq = (SequenceI) restable.getValueAt(row,
               refSeqColIndex);
       selectedSeqsToView.add(selectedSeq);
@@ -386,12 +419,16 @@ public class ThreeDBStructureChooserQuerySource
         pdbEntry = new PDBEntry();
         pdbEntry.setId(pdbIdStr);
         boolean hasCif = urlStr.toLowerCase(Locale.ENGLISH).endsWith("cif");
-        boolean probablyPdb = urlStr.toLowerCase(Locale.ENGLISH).contains("pdb");
-        pdbEntry.setType(hasCif ? PDBEntry.Type.MMCIF : probablyPdb ? PDBEntry.Type.PDB : PDBEntry.Type.FILE);
+        boolean probablyPdb = urlStr.toLowerCase(Locale.ENGLISH)
+                .contains("pdb");
+        pdbEntry.setType(hasCif ? PDBEntry.Type.MMCIF
+                : probablyPdb ? PDBEntry.Type.PDB : PDBEntry.Type.FILE);
         if (!"PDBe".equalsIgnoreCase(typeColumn))
         {
           pdbEntry.setRetrievalUrl(urlStr);
         }
+        pdbEntry.setProvider(typeColumn);
+        pdbEntry.setProviderPage(modelPage);
         selectedSeq.getDatasetSequence().addPDBId(pdbEntry);
       }
       pdbEntriesToView[count++] = pdbEntry;
@@ -443,7 +480,7 @@ public class ThreeDBStructureChooserQuerySource
   {
 
     String pdb_Query = buildPDBFTSQueryFor(upResponse);
-    if (pdb_Query.length()==0)
+    if (pdb_Query.length() == 0)
     {
       return null;
     }
@@ -456,7 +493,7 @@ public class ThreeDBStructureChooserQuerySource
     pdbRequest.setWantedFields(
             pdbquery.getDocFieldPrefs().getStructureSummaryFields());
     pdbRequest.setSearchTerm(pdb_Query + ")");
-    
+
     resultList = pdbquery.executePDBFTSRestRequest(pdbRequest);
 
     lastPdbRequest = pdbRequest;
@@ -466,11 +503,14 @@ public class ThreeDBStructureChooserQuerySource
   public FTSRestResponse joinResponses(FTSRestResponse upResponse,
           FTSRestResponse pdbResponse)
   {
+    boolean hasPdbResp = lastPdbRequest != null;
+
     int idx_provider = getLastFTSRequest().getFieldIndex("Provider");
     // join on
     int idx_modelId = getLastFTSRequest().getFieldIndex("Model id");
-    int pdbIdx = lastPdbRequest.getFieldIndex("PDB Id");
-    int pdbTitle_idx = lastPdbRequest.getFieldIndex("Title");
+    int pdbIdx = hasPdbResp ? lastPdbRequest.getFieldIndex("PDB Id") : -1;
+    int pdbTitle_idx = hasPdbResp ? lastPdbRequest.getFieldIndex("Title")
+            : -1;
     int tdbTitle_idx = getLastFTSRequest().getFieldIndex("Title");
 
     List<FTSData> joinedRows = new ArrayList<FTSData>();
@@ -480,15 +520,24 @@ public class ThreeDBStructureChooserQuerySource
       String provider = (String) row.getSummaryData()[idx_provider];
       if ("PDBe".equalsIgnoreCase(provider))
       {
-        for (final FTSData pdbrow : pdbResponse.getSearchSummary())
+        if (!hasPdbResp)
         {
-          String pdbid = (String) pdbrow.getSummaryData()[pdbIdx];
-          if (id.equalsIgnoreCase(pdbid))
+          System.out.println(
+                  "Warning: seems like we couldn't get to the PDBe search interface.");
+        }
+        else
+        {
+          for (final FTSData pdbrow : pdbResponse.getSearchSummary())
           {
-            row.getSummaryData()[tdbTitle_idx] = pdbrow
-                    .getSummaryData()[pdbTitle_idx];
+            String pdbid = (String) pdbrow.getSummaryData()[pdbIdx];
+            if (id.equalsIgnoreCase(pdbid))
+            {
+              row.getSummaryData()[tdbTitle_idx] = pdbrow
+                      .getSummaryData()[pdbTitle_idx];
+            }
           }
         }
+
       }
       else
       {
index 4916bb3..e9c9ce2 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import jalview.api.AlignExportSettingsI;
 import jalview.api.AlignmentViewPanel;
 import jalview.datamodel.Alignment;
@@ -443,7 +445,7 @@ public class AppletFormatAdapter
     
     String data = dataObject.toString();
     DataSourceType protocol = DataSourceType.PASTE;
-    String ft = data.toLowerCase().trim();
+    String ft = data.toLowerCase(Locale.ROOT).trim();
     if (ft.indexOf("http:") == 0 || ft.indexOf("https:") == 0
             || ft.indexOf("file:") == 0)
     {
index 92af0df..19496ef 100644 (file)
@@ -1,28 +1,10 @@
 package jalview.io;
 
 import java.io.IOException;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TreeMap;
 
 import jalview.bin.Cache;
 import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.DBRefSource;
-import jalview.datamodel.FeatureProperties;
-import jalview.datamodel.Mapping;
-import jalview.datamodel.Sequence;
-import jalview.datamodel.SequenceFeature;
-import jalview.datamodel.SequenceI;
 import jalview.util.DBRefUtils;
-import jalview.util.DnaUtils;
-import jalview.util.MapList;
-import jalview.util.MappingUtils;
 
 /**
  * A class that provides selective parsing of the EMBL flatfile format.
@@ -43,66 +25,10 @@ import jalview.util.MappingUtils;
  * @see ftp://ftp.ebi.ac.uk/pub/databases/ena/sequence/release/doc/usrman.txt
  * @see ftp://ftp.ebi.ac.uk/pub/databases/embl/doc/FT_current.html
  */
-public class EmblFlatFile extends AlignFile // FileParse
+public class EmblFlatFile extends FlatFile
 {
-  private static final String QUOTE = "\"";
-
-  private static final String DOUBLED_QUOTE = QUOTE + QUOTE;
-
-  /**
-   * when true, interpret the mol_type 'source' feature attribute and generate
-   * an RNA sequence from the DNA record
-   */
-  private boolean produceRna = true;
-
   /**
-   * A data bean class to hold values parsed from one CDS Feature (FT)
-   */
-  class CdsData
-  {
-    String translation; // from CDS feature /translation
-
-    String cdsLocation; // CDS /location raw value
-
-    int codonStart = 1; // from CDS /codon_start
-
-    String proteinName; // from CDS /product; used for protein description
-
-    String proteinId; // from CDS /protein_id
-
-    List<DBRefEntry> xrefs = new ArrayList<>(); // from CDS /db_xref qualifiers
-
-    Map<String, String> cdsProps = new Hashtable<>(); // CDS other qualifiers
-  }
-
-  private static final String WHITESPACE = "\\s+";
-
-  private String sourceDb;
-
-  /*
-   * values parsed from the EMBL flatfile record
-   */
-  private String accession; // from ID (first token)
-
-  private String version; // from ID (second token)
-
-  private String description; // from (first) DE line
-
-  private int length = 128; // from ID (7th token), with usable default
-
-  private List<DBRefEntry> dbrefs; // from DR
-
-  private boolean sequenceStringIsRNA = false;
-
-  private String sequenceString; // from SQ lines
-
-  /*
-   * parsed CDS data fields, keyed by protein_id
-   */
-  private Map<String, CdsData> cds;
-
-  /**
-   * Constructor
+   * Constructor given a data source and the id of the source database
    * 
    * @param fp
    * @param sourceId
@@ -110,14 +36,7 @@ public class EmblFlatFile extends AlignFile // FileParse
    */
   public EmblFlatFile(FileParse fp, String sourceId) throws IOException
   {
-    super(false, fp); // don't parse immediately
-    this.sourceDb = sourceId;
-    dbrefs = new ArrayList<>();
-
-    /*
-     * using TreeMap gives CDS sequences in alphabetical, so readable, order
-     */
-    cds = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+    super(fp, sourceId);
   }
 
   /**
@@ -126,6 +45,7 @@ public class EmblFlatFile extends AlignFile // FileParse
    * 
    * @throws IOException
    */
+  @Override
   public void parse() throws IOException
   {
     String line = nextLine();
@@ -145,11 +65,11 @@ public class EmblFlatFile extends AlignFile // FileParse
       }
       else if (line.startsWith("SQ"))
       {
-        line = parseSQ();
+        line = parseSequence();
       }
       else if (line.startsWith("FT"))
       {
-        line = parseFT(line);
+        line = parseFeature(line.substring(2));
       }
       else
       {
@@ -281,683 +201,9 @@ public class EmblFlatFile extends AlignFile // FileParse
     return nextLine();
   }
 
-  /**
-   * Reads and saves the sequence, read from the lines following the SQ line.
-   * Whitespace and position counters are discarded. Returns the next line
-   * following the sequence data (the next line that doesn't start with
-   * whitespace).
-   * 
-   * @throws IOException
-   */
-  String parseSQ() throws IOException
-  {
-    StringBuilder sb = new StringBuilder(this.length);
-    String line = nextLine();
-    while (line != null && line.startsWith(" "))
-    {
-      line = line.trim();
-      String[] blocks = line.split(WHITESPACE);
-
-      /*
-       * omit the last block (position counter) on each line
-       */
-      for (int i = 0; i < blocks.length - 1; i++)
-      {
-        sb.append(blocks[i]);
-      }
-      line = nextLine();
-    }
-    this.sequenceString = sb.toString();
-
-    return line;
-  }
-
-  /**
-   * Processes an FT line. If it declares a feature type of interest (currently,
-   * only CDS is processed), processes all of the associated lines (feature
-   * qualifiers), and returns the next line after that, otherwise simply returns
-   * the next line.
-   * 
-   * @param line
-   * @return
-   * @throws IOException
-   */
-  String parseFT(String line) throws IOException
-  {
-    String[] tokens = line.split(WHITESPACE);
-    if (tokens.length < 3
-            || (!"CDS".equals(tokens[1]) && !"source".equals(tokens[1])))
-    {
-      return nextLine();
-    }
-
-    if (tokens[1].equals("source"))
-    {
-      return parseSourceQualifiers(tokens);
-    }
-
-    /*
-     * parse location - which may be over more than one line e.g. EAW51554
-     */
-    CdsData data = new CdsData();
-    data.cdsLocation = tokens[2];
-    // TODO location can be over >1 line e.g. EAW51554
-
-    line = nextLine();
-    while (line != null)
-    {
-      if (!line.startsWith("FT    ")) // 4 spaces
-      {
-        // e.g. start of next feature "FT source..."
-        break;
-      }
-
-      /*
-       * extract qualifier, e.g. FT    /protein_id="CAA37824.1"
-       * - the value may extend over more than one line
-       * - if the value has enclosing quotes, these are removed
-       * - escaped double quotes ("") are reduced to a single character
-       */
-      int slashPos = line.indexOf('/');
-      if (slashPos == -1)
-      {
-        Cache.log.error("Unexpected EMBL line ignored: " + line);
-        line = nextLine();
-        continue;
-      }
-      int eqPos = line.indexOf('=', slashPos + 1);
-      if (eqPos == -1)
-      {
-        // can happen, e.g. /ribosomal_slippage
-        // Cache.log.error("Unexpected EMBL line ignored: " + line);
-        line = nextLine();
-        continue;
-      }
-      String qualifier = line.substring(slashPos + 1, eqPos);
-      String value = line.substring(eqPos + 1);
-      value = removeQuotes(value);
-      StringBuilder sb = new StringBuilder().append(value);
-      line = parseFeatureQualifier(sb, qualifier);
-      String featureValue = sb.toString();
-
-      if ("protein_id".equals(qualifier))
-      {
-        data.proteinId = featureValue;
-      }
-      else if ("codon_start".equals(qualifier))
-      {
-        try
-        {
-          data.codonStart = Integer.parseInt(featureValue.trim());
-        } catch (NumberFormatException e)
-        {
-          Cache.log.error("Invalid codon_start in XML for " + this.accession
-                  + ": " + e.getMessage());
-        }
-      }
-      else if ("db_xref".equals(qualifier))
-      {
-        String[] parts = featureValue.split(":");
-        if (parts.length == 2)
-        {
-          String db = parts[0].trim();
-          db = DBRefUtils.getCanonicalName(db);
-          DBRefEntry dbref = new DBRefEntry(db, "0", parts[1].trim());
-          data.xrefs.add(dbref);
-        }
-      }
-      else if ("product".equals(qualifier))
-      {
-        data.proteinName = featureValue;
-      }
-      else if ("translation".equals(qualifier))
-      {
-        data.translation = featureValue;
-      }
-      else if (!"".equals(featureValue))
-      {
-        // throw anything else into the additional properties hash
-        data.cdsProps.put(qualifier, featureValue);
-      }
-    }
-
-    if (data.proteinId != null)
-    {
-      this.cds.put(data.proteinId, data);
-    }
-    else
-    {
-      Cache.log.error("Ignoring CDS feature with no protein_id for "
-              + sourceDb + ":" + accession);
-    }
-
-    return line;
-  }
-
-  /**
-   * process attributes for 'source' until the next FT feature entry only
-   * interested in 'mol_type'
-   * 
-   * @param tokens
-   * @return
-   * @throws IOException
-   */
-  private String parseSourceQualifiers(String[] tokens) throws IOException
-  {
-    if (!"source".equals(tokens[1]))
-    {
-      throw (new RuntimeException("Not given a source qualifier"));
-    }
-    // search for mol_type attribute
-
-    StringBuilder sb = new StringBuilder().append(tokens[2]); // extent of
-                                                              // sequence
-
-    String line = parseFeatureQualifier(sb, "source");
-    while (line != null)
-    {
-      if (!line.startsWith("FT    ")) // four spaces, end of this feature table
-                                      // entry
-      {
-        return line;
-      }
-
-      int p = line.indexOf("\\mol_type");
-      int qs = line.indexOf("\"", p);
-      int qe = line.indexOf("\"", qs + 1);
-      String qualifier = line.substring(qs, qe).toLowerCase();
-      if (qualifier.indexOf("rna") > -1)
-      {
-        sequenceStringIsRNA = true;
-      }
-      if (qualifier.indexOf("dna") > -1)
-      {
-        sequenceStringIsRNA = false;
-      }
-      line = parseFeatureQualifier(sb, "source");
-    }
-    return line;
-  }
-
-  /**
-   * Removes leading or trailing double quotes (") unless doubled, and changes
-   * any 'escaped' (doubled) double quotes to single characters. As per the
-   * Feature Table specification for Qualifiers, Free Text.
-   * 
-   * @param value
-   * @return
-   */
-  static String removeQuotes(String value)
-  {
-    if (value == null)
-    {
-      return null;
-    }
-    if (value.startsWith(QUOTE) && !value.startsWith(DOUBLED_QUOTE))
-    {
-      value = value.substring(1);
-    }
-    if (value.endsWith(QUOTE) && !value.endsWith(DOUBLED_QUOTE))
-    {
-      value = value.substring(0, value.length() - 1);
-    }
-    value = value.replace(DOUBLED_QUOTE, QUOTE);
-    return value;
-  }
-
-  /**
-   * Reads the value of a feature (FT) qualifier from one or more lines of the
-   * file, and returns the next line after that. Values are appended to the
-   * string buffer, which should be already primed with the value read from the
-   * first line for the qualifier (with any leading double quote removed).
-   * Enclosing double quotes are removed, and escaped (repeated) double quotes
-   * reduced to one only. For example for
-   * 
-   * <pre>
-   * FT      /note="gene_id=hCG28070.3 
-   * FT      ""foobar"" isoform=CRA_b"
-   * the returned value is
-   * gene_id=hCG28070.3 "foobar" isoform=CRA_b
-   * </pre>
-   * 
-   * Note the side-effect of this method, to advance data reading to the next
-   * line after the feature qualifier.
-   * 
-   * @param sb
-   *          a string buffer primed with the first line of the value
-   * @param qualifierName
-   * @return
-   * @throws IOException
-   */
-  String parseFeatureQualifier(StringBuilder sb, String qualifierName)
-          throws IOException
-  {
-    String line;
-    while ((line = nextLine()) != null)
-    {
-      if (!line.startsWith("FT    "))
-      {
-        break; // reached next feature or other input line
-      }
-      String[] tokens = line.split(WHITESPACE);
-      if (tokens.length < 2)
-      {
-        Cache.log.error("Ignoring bad EMBL line for " + this.accession
-                + ": " + line);
-        break;
-      }
-      if (tokens[1].startsWith("/"))
-      {
-        break; // next feature qualifier
-      }
-
-      /*
-       * heuristic rule: most multi-line value (e.g. /product) are text,
-       * so add a space for word boundary at a new line; not for translation
-       */
-      if (!"translation".equals(qualifierName))
-      {
-        sb.append(" ");
-      }
-
-      /*
-       * remove trailing " and unescape doubled ""
-       */
-      String data = removeQuotes(tokens[1]);
-      sb.append(data);
-    }
-
-    return line;
-  }
-
-  /**
-   * Constructs and saves the sequence from parsed components
-   */
-  void buildSequence()
-  {
-    if (this.accession == null || this.sequenceString == null)
-    {
-      Cache.log.error("Failed to parse data from EMBL");
-      return;
-    }
-
-    String name = this.accession;
-    if (this.sourceDb != null)
-    {
-      name = this.sourceDb + "|" + name;
-    }
-
-    if (produceRna && sequenceStringIsRNA)
-    {
-      sequenceString = sequenceString.replace('T', 'U').replace('t', 'u');
-    }
-
-    SequenceI seq = new Sequence(name, this.sequenceString);
-    seq.setDescription(this.description);
-
-    /*
-     * add a DBRef to itself
-     */
-    DBRefEntry selfRef = new DBRefEntry(sourceDb, version, accession);
-    int[] startEnd = new int[] { 1, seq.getLength() };
-    selfRef.setMap(new Mapping(null, startEnd, startEnd, 1, 1));
-    seq.addDBRef(selfRef);
-
-    for (DBRefEntry dbref : this.dbrefs)
-    {
-      seq.addDBRef(dbref);
-    }
-
-    processCDSFeatures(seq);
-
-    seq.deriveSequence();
-
-    addSequence(seq);
-  }
-
-  /**
-   * Process the CDS features, including generation of cross-references and
-   * mappings to the protein products (translation)
-   * 
-   * @param seq
-   */
-  protected void processCDSFeatures(SequenceI seq)
-  {
-    /*
-     * record protein products found to avoid duplication i.e. >1 CDS with 
-     * the same /protein_id [though not sure I can find an example of this]
-     */
-    Map<String, SequenceI> proteins = new HashMap<>();
-    for (CdsData data : cds.values())
-    {
-      processCDSFeature(seq, data, proteins);
-    }
-  }
-
-  /**
-   * Processes data for one parsed CDS feature to
-   * <ul>
-   * <li>create a protein product sequence for the translation</li>
-   * <li>create a cross-reference to protein with mapping from dna</li>
-   * <li>add a CDS feature to the sequence for each CDS start-end range</li>
-   * <li>add any CDS dbrefs to the sequence and to the protein product</li>
-   * </ul>
-   * 
-   * @param SequenceI
-   *          dna
-   * @param proteins
-   *          map of protein products so far derived from CDS data
-   */
-  void processCDSFeature(SequenceI dna, CdsData data,
-          Map<String, SequenceI> proteins)
-  {
-    /*
-     * parse location into a list of [start, end, start, end] positions
-     */
-    int[] exons = getCdsRanges(this.accession, data.cdsLocation);
-
-    MapList maplist = buildMappingToProtein(dna, exons, data);
-
-    int exonNumber = 0;
-
-    for (int xint = 0; exons != null && xint < exons.length - 1; xint += 2)
-    {
-      int exonStart = exons[xint];
-      int exonEnd = exons[xint + 1];
-      int begin = Math.min(exonStart, exonEnd);
-      int end = Math.max(exonStart, exonEnd);
-      exonNumber++;
-      String desc = String.format("Exon %d for protein EMBLCDS:%s",
-              exonNumber, data.proteinId);
-
-      SequenceFeature sf = new SequenceFeature("CDS", desc, begin, end,
-              this.sourceDb);
-      for (Entry<String, String> val : data.cdsProps.entrySet())
-      {
-        sf.setValue(val.getKey(), val.getValue());
-      }
-
-      sf.setEnaLocation(data.cdsLocation);
-      boolean forwardStrand = exonStart <= exonEnd;
-      sf.setStrand(forwardStrand ? "+" : "-");
-      sf.setPhase(String.valueOf(data.codonStart - 1));
-      sf.setValue(FeatureProperties.EXONPOS, exonNumber);
-      sf.setValue(FeatureProperties.EXONPRODUCT, data.proteinName);
-
-      dna.addSequenceFeature(sf);
-    }
-
-    boolean hasUniprotDbref = false;
-    for (DBRefEntry xref : data.xrefs)
-    {
-      dna.addDBRef(xref);
-      if (xref.getSource().equals(DBRefSource.UNIPROT))
-      {
-        /*
-         * construct (or find) the sequence for (data.protein_id, data.translation)
-         */
-        SequenceI protein = buildProteinProduct(dna, xref, data, proteins);
-        Mapping map = new Mapping(protein, maplist);
-        map.setMappedFromId(data.proteinId);
-        xref.setMap(map);
-
-        /*
-         * add DBRefs with mappings from dna to protein and the inverse
-         */
-        DBRefEntry db1 = new DBRefEntry(sourceDb, version, accession);
-        db1.setMap(new Mapping(dna, maplist.getInverse()));
-        protein.addDBRef(db1);
-
-        hasUniprotDbref = true;
-      }
-    }
-
-    /*
-     * if we have a product (translation) but no explicit Uniprot dbref
-     * (example: EMBL M19487 protein_id AAB02592.1)
-     * then construct mappings to an assumed EMBLCDSPROTEIN accession
-     */
-    if (!hasUniprotDbref)
-    {
-      SequenceI protein = proteins.get(data.proteinId);
-      if (protein == null)
-      {
-        protein = new Sequence(data.proteinId, data.translation);
-        protein.setDescription(data.proteinName);
-        proteins.put(data.proteinId, protein);
-      }
-      // assuming CDSPROTEIN sequence version = dna version (?!)
-      DBRefEntry db1 = new DBRefEntry(DBRefSource.EMBLCDSProduct,
-              this.version, data.proteinId);
-      protein.addDBRef(db1);
-
-      DBRefEntry dnaToEmblProteinRef = new DBRefEntry(
-              DBRefSource.EMBLCDSProduct, this.version, data.proteinId);
-      Mapping map = new Mapping(protein, maplist);
-      map.setMappedFromId(data.proteinId);
-      dnaToEmblProteinRef.setMap(map);
-      dna.addDBRef(dnaToEmblProteinRef);
-    }
-
-    /*
-     * comment brought forward from EmblXmlSource, lines 447-451:
-     * TODO: if retrieved from EMBLCDS, add a DBRef back to the parent EMBL
-     * sequence with the exon  map; if given a dataset reference, search
-     * dataset for parent EMBL sequence if it exists and set its map;
-     * make a new feature annotating the coding contig
-     */
-  }
-
-  /**
-   * Computes a mapping from CDS positions in DNA sequence to protein product
-   * positions, with allowance for stop codon or incomplete start codon
-   * 
-   * @param dna
-   * @param exons
-   * @param data
-   * @return
-   */
-  MapList buildMappingToProtein(final SequenceI dna, final int[] exons,
-          final CdsData data)
-  {
-    MapList dnaToProteinMapping = null;
-    int peptideLength = data.translation.length();
-
-    int[] proteinRange = new int[] { 1, peptideLength };
-    if (exons != null && exons.length > 0)
-    {
-      /*
-       * We were able to parse 'location'; do a final 
-       * product length truncation check
-       */
-      int[] cdsRanges = adjustForProteinLength(peptideLength, exons);
-      dnaToProteinMapping = new MapList(cdsRanges, proteinRange, 3, 1);
-    }
-    else
-    {
-      /*
-       * workaround until we handle all 'location' formats fully
-       * e.g. X53828.1:60..1058 or <123..>289
-       */
-      Cache.log.error(String.format(
-              "Implementation Notice: EMBLCDS location '%s'not properly supported yet"
-                      + " - Making up the CDNA region of (%s:%s)... may be incorrect",
-              data.cdsLocation, sourceDb, this.accession));
-
-      int completeCodonsLength = 1 - data.codonStart + dna.getLength();
-      int mappedDnaEnd = dna.getEnd();
-      if (peptideLength * 3 == completeCodonsLength)
-      {
-        // this might occur for CDS sequences where no features are marked
-        Cache.log.warn("Assuming no stop codon at end of cDNA fragment");
-        mappedDnaEnd = dna.getEnd();
-      }
-      else if ((peptideLength + 1) * 3 == completeCodonsLength)
-      {
-        Cache.log.warn("Assuming stop codon at end of cDNA fragment");
-        mappedDnaEnd = dna.getEnd() - 3;
-      }
-
-      if (mappedDnaEnd != -1)
-      {
-        int[] cdsRanges = new int[] {
-            dna.getStart() + (data.codonStart - 1), mappedDnaEnd };
-        dnaToProteinMapping = new MapList(cdsRanges, proteinRange, 3, 1);
-      }
-    }
-
-    return dnaToProteinMapping;
-  }
-
-  /**
-   * Constructs a sequence for the protein product for the CDS data (if there is
-   * one), and dbrefs with mappings from CDS to protein and the reverse
-   * 
-   * @param dna
-   * @param xref
-   * @param data
-   * @param proteins
-   * @return
-   */
-  SequenceI buildProteinProduct(SequenceI dna, DBRefEntry xref,
-          CdsData data, Map<String, SequenceI> proteins)
-  {
-    /*
-     * check we have some data to work with
-     */
-    if (data.proteinId == null || data.translation == null)
-    {
-      return null;
-    }
-
-    /*
-     * Construct the protein sequence (if not already seen)
-     */
-    String proteinSeqName = xref.getSource() + "|" + xref.getAccessionId();
-    SequenceI protein = proteins.get(proteinSeqName);
-    if (protein == null)
-    {
-      protein = new Sequence(proteinSeqName, data.translation, 1,
-              data.translation.length());
-      protein.setDescription(data.proteinName != null ? data.proteinName
-              : "Protein Product from " + sourceDb);
-      proteins.put(proteinSeqName, protein);
-    }
-
-    return protein;
-  }
-
-  /**
-   * Returns the CDS location as a single array of [start, end, start, end...]
-   * positions. If on the reverse strand, these will be in descending order.
-   * 
-   * @param accession
-   * @param location
-   * @return
-   */
-  protected int[] getCdsRanges(String accession, String location)
-  {
-    if (location == null)
-    {
-      return new int[] {};
-    }
-
-    try
-    {
-      List<int[]> ranges = DnaUtils.parseLocation(location);
-      return MappingUtils.rangeListToArray(ranges);
-    } catch (ParseException e)
-    {
-      Cache.log.warn(
-              String.format("Not parsing inexact CDS location %s in ENA %s",
-                      location, accession));
-      return new int[] {};
-    }
-  }
-
-  /**
-   * Output (print) is not implemented for EMBL flat file format
-   */
   @Override
-  public String print(SequenceI[] seqs, boolean jvsuffix)
-  {
-    return null;
-  }
-
-  /**
-   * Truncates (if necessary) the exon intervals to match 3 times the length of
-   * the protein; also accepts 3 bases longer (for stop codon not included in
-   * protein)
-   * 
-   * @param proteinLength
-   * @param exon
-   *          an array of [start, end, start, end...] intervals
-   * @return the same array (if unchanged) or a truncated copy
-   */
-  static int[] adjustForProteinLength(int proteinLength, int[] exon)
+  protected boolean isFeatureContinuationLine(String line)
   {
-    if (proteinLength <= 0 || exon == null)
-    {
-      return exon;
-    }
-    int expectedCdsLength = proteinLength * 3;
-    int exonLength = MappingUtils.getLength(Arrays.asList(exon));
-
-    /*
-     * if exon length matches protein, or is shorter, or longer by the 
-     * length of a stop codon (3 bases), then leave it unchanged
-     */
-    if (expectedCdsLength >= exonLength
-            || expectedCdsLength == exonLength - 3)
-    {
-      return exon;
-    }
-
-    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)
-    {
-      cdspos += Math.abs(exon[x + 1] - exon[x]) + 1;
-      if (expectedCdsLength <= cdspos)
-      {
-        // advanced beyond last codon.
-        sxpos = x;
-        if (expectedCdsLength != cdspos)
-        {
-          // System.err
-          // .println("Truncating final exon interval on region by "
-          // + (cdspos - cdslength));
-        }
-
-        /*
-         * 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 + expectedCdsLength;
-        }
-        else
-        {
-          endxon = exon[x + 1] + cdspos - expectedCdsLength;
-        }
-        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;
+    return line.startsWith("FT    "); // 4 spaces
   }
 }
index c08c84e..dda59a7 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import java.awt.Color;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -234,7 +236,7 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
         // skip comments/process pragmas
         if (line.length() == 0 || line.startsWith("#"))
         {
-          if (line.toLowerCase().startsWith("##"))
+          if (line.toLowerCase(Locale.ROOT).startsWith("##"))
           {
             processGffPragma(line, gffProps, align, newseqs);
           }
@@ -346,7 +348,7 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
     String line;
     while ((line = nextLine()) != null)
     {
-      if (line.toUpperCase().startsWith(ENDFILTERS))
+      if (line.toUpperCase(Locale.ROOT).startsWith(ENDFILTERS))
       {
         return;
       }
index cb61740..1d240b2 100644 (file)
  */
 package jalview.io;
 
+import java.io.IOException;
+
 import jalview.datamodel.AlignmentI;
+import jalview.datamodel.DBRefSource;
 import jalview.datamodel.PDBEntry;
 import jalview.ext.jmol.JmolParser;
 import jalview.structure.StructureImportSettings;
 
-import java.io.IOException;
-
 public enum FileFormat implements FileFormatI
 {
   Fasta("Fasta", "fa, fasta, mfa, fastq", true, true)
@@ -243,6 +244,37 @@ public enum FileFormat implements FileFormatI
       return new PhylipFile();
     }
   },
+  GenBank("GenBank Flatfile", "gb", true, false)
+  {
+    @Override
+    public AlignmentFileReaderI getReader(FileParse source)
+            throws IOException
+    {
+      return new GenBankFile(source, "GenBank");
+    }
+
+    @Override
+    public AlignmentFileWriterI getWriter(AlignmentI al)
+    {
+      return null;
+    }
+  },
+  Embl("ENA Flatfile", "txt", true, false)
+  {
+    @Override
+    public AlignmentFileReaderI getReader(FileParse source)
+            throws IOException
+    {
+      // Always assume we import from EMBL for now
+      return new EmblFlatFile(source, DBRefSource.EMBL);
+    }
+
+    @Override
+    public AlignmentFileWriterI getWriter(AlignmentI al)
+    {
+      return null;
+    }
+  },
   Jnet("JnetFile", "", false, false)
   {
     @Override
@@ -407,8 +439,8 @@ public enum FileFormat implements FileFormatI
    * @param shortName
    * @param extensions
    *          comma-separated list of file extensions associated with the format
-   * @param isReadable
-   * @param isWritable
+   * @param isReadable - can be recognised by IdentifyFile and imported with the given reader
+   * @param isWritable - can be exported with the returned writer
    */
   private FileFormat(String shortName, String extensions,
           boolean isReadable, boolean isWritable)
index aadcdb9..9e0a7f7 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -102,7 +104,7 @@ public class FileFormats
   protected void registerFileFormat(FileFormatI format,
           boolean isIdentifiable)
   {
-    String name = format.getName().toUpperCase();
+    String name = format.getName().toUpperCase(Locale.ROOT);
     if (formats.containsKey(name))
     {
       System.err.println("Overwriting file format: " + format.getName());
@@ -121,7 +123,7 @@ public class FileFormats
    */
   public void deregisterFileFormat(String name)
   {
-    FileFormatI ff = formats.remove(name.toUpperCase());
+    FileFormatI ff = formats.remove(name.toUpperCase(Locale.ROOT));
     identifiable.remove(ff);
   }
 
@@ -174,7 +176,7 @@ public class FileFormats
    */
   public FileFormatI forName(String format)
   {
-    return format == null ? null : formats.get(format.toUpperCase());
+    return format == null ? null : formats.get(format.toUpperCase(Locale.ROOT));
   }
 
   /**
diff --git a/src/jalview/io/FlatFile.java b/src/jalview/io/FlatFile.java
new file mode 100644 (file)
index 0000000..55fdd37
--- /dev/null
@@ -0,0 +1,768 @@
+package jalview.io;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import jalview.bin.Cache;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.DBRefSource;
+import jalview.datamodel.FeatureProperties;
+import jalview.datamodel.Mapping;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.util.DBRefUtils;
+import jalview.util.DnaUtils;
+import jalview.util.MapList;
+import jalview.util.MappingUtils;
+
+/**
+ * A base class to support parsing of GenBank, EMBL or DDBJ flat file format
+ * data. Example files (rather than formal specifications) are provided at
+ * 
+ * <pre>
+ * https://ena-docs.readthedocs.io/en/latest/submit/fileprep/flat-file-example.html
+ * https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html
+ * </pre>
+ * 
+ * or to compare the same entry, see
+ * 
+ * <pre>
+ * https://www.ebi.ac.uk/ena/browser/api/embl/X81322.1
+ * https://www.ncbi.nlm.nih.gov/nuccore/X81322.1
+ * </pre>
+ * 
+ * The feature table part of the file has a common definition, only the start of
+ * each line is formatted differently in GenBank and EMBL. See
+ * http://www.insdc.org/files/feature_table.html#7.1.
+ */
+public abstract class FlatFile extends AlignFile
+{
+  protected static final String LOCATION = "location";
+
+  protected static final String QUOTE = "\"";
+
+  protected static final String DOUBLED_QUOTE = QUOTE + QUOTE;
+
+  protected static final String WHITESPACE = "\\s+";
+
+  /**
+   * Removes leading or trailing double quotes (") unless doubled, and changes
+   * any 'escaped' (doubled) double quotes to single characters. As per the
+   * Feature Table specification for Qualifiers, Free Text.
+   * 
+   * @param value
+   * @return
+   */
+  protected static String removeQuotes(String value)
+  {
+    if (value == null)
+    {
+      return null;
+    }
+    if (value.startsWith(QUOTE) && !value.startsWith(DOUBLED_QUOTE))
+    {
+      value = value.substring(1);
+    }
+    if (value.endsWith(QUOTE) && !value.endsWith(DOUBLED_QUOTE))
+    {
+      value = value.substring(0, value.length() - 1);
+    }
+    value = value.replace(DOUBLED_QUOTE, QUOTE);
+    return value;
+  }
+
+  /**
+   * Truncates (if necessary) the exon intervals to match 3 times the length of
+   * the protein; also accepts 3 bases longer (for stop codon not included in
+   * protein)
+   * 
+   * @param proteinLength
+   * @param exon
+   *          an array of [start, end, start, end...] intervals
+   * @return the same array (if unchanged) or a truncated copy
+   */
+  protected static int[] adjustForProteinLength(int proteinLength,
+          int[] exon)
+  {
+    if (proteinLength <= 0 || exon == null)
+    {
+      return exon;
+    }
+    int expectedCdsLength = proteinLength * 3;
+    int exonLength = MappingUtils.getLength(Arrays.asList(exon));
+
+    /*
+     * if exon length matches protein, or is shorter, or longer by the 
+     * length of a stop codon (3 bases), then leave it unchanged
+     */
+    if (expectedCdsLength >= exonLength
+            || expectedCdsLength == exonLength - 3)
+    {
+      return exon;
+    }
+
+    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)
+    {
+      cdspos += Math.abs(exon[x + 1] - exon[x]) + 1;
+      if (expectedCdsLength <= cdspos)
+      {
+        // advanced beyond last codon.
+        sxpos = x;
+        if (expectedCdsLength != cdspos)
+        {
+          // System.err
+          // .println("Truncating final exon interval on region by "
+          // + (cdspos - cdslength));
+        }
+
+        /*
+         * 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 + expectedCdsLength;
+        }
+        else
+        {
+          endxon = exon[x + 1] + cdspos - expectedCdsLength;
+        }
+        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;
+  }
+
+  /*
+   * values parsed from the data file
+   */
+  protected String sourceDb;
+
+  protected String accession;
+
+  protected String version;
+
+  protected String description;
+
+  protected int length = 128;
+
+  protected List<DBRefEntry> dbrefs;
+
+  protected String sequenceString;
+
+  protected Map<String, CdsData> cds;
+
+  /**
+   * Constructor
+   * 
+   * @param fp
+   * @param sourceId
+   * @throws IOException
+   */
+  public FlatFile(FileParse fp, String sourceId) throws IOException
+  {
+    super(false, fp); // don't parse immediately
+    this.sourceDb = sourceId;
+    dbrefs = new ArrayList<>();
+
+    /*
+     * using TreeMap gives CDS sequences in alphabetical, so readable, order
+     */
+    cds = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+    
+    parse();
+  }
+
+  /**
+   * Parses one (GenBank or EMBL format) CDS feature, saves the parsed data, and
+   * returns the next line
+   * 
+   * @param location
+   * @return
+   * @throws IOException
+   */
+  protected String parseCDSFeature(String location) throws IOException
+  {
+    String line;
+
+    /*
+     * parse location, which can be over >1 line e.g. EAW51554
+     */
+    CdsData data = new CdsData();
+    StringBuilder sb = new StringBuilder().append(location);
+    line = parseFeatureQualifier(sb, false);
+    data.cdsLocation = sb.toString();
+
+    while (line != null)
+    {
+      if (!isFeatureContinuationLine(line))
+      {
+        // e.g. start of next feature "FT source..."
+        break;
+      }
+
+      /*
+       * extract qualifier, e.g. FT    /protein_id="CAA37824.1"
+       * - the value may extend over more than one line
+       * - if the value has enclosing quotes, these are removed
+       * - escaped double quotes ("") are reduced to a single character
+       */
+      int slashPos = line.indexOf('/');
+      if (slashPos == -1)
+      {
+        Cache.log.error("Unexpected EMBL line ignored: " + line);
+        line = nextLine();
+        continue;
+      }
+      int eqPos = line.indexOf('=', slashPos + 1);
+      if (eqPos == -1)
+      {
+        // can happen, e.g. /ribosomal_slippage
+        line = nextLine();
+        continue;
+      }
+      String qualifier = line.substring(slashPos + 1, eqPos);
+      String value = line.substring(eqPos + 1);
+      value = removeQuotes(value);
+      sb = new StringBuilder().append(value);
+      boolean asText = !"translation".equals(qualifier);
+      line = parseFeatureQualifier(sb, asText);
+      String featureValue = sb.toString();
+
+      if ("protein_id".equals(qualifier))
+      {
+        data.proteinId = featureValue;
+      }
+      else if ("codon_start".equals(qualifier))
+      {
+        try
+        {
+          data.codonStart = Integer.parseInt(featureValue.trim());
+        } catch (NumberFormatException e)
+        {
+          Cache.log.error("Invalid codon_start in XML for " + this.accession
+                  + ": " + e.getMessage());
+        }
+      }
+      else if ("db_xref".equals(qualifier))
+      {
+        String[] parts = featureValue.split(":");
+        if (parts.length == 2)
+        {
+          String db = parts[0].trim();
+          db = DBRefUtils.getCanonicalName(db);
+          DBRefEntry dbref = new DBRefEntry(db, "0", parts[1].trim());
+          data.xrefs.add(dbref);
+        }
+      }
+      else if ("product".equals(qualifier))
+      {
+        data.proteinName = featureValue;
+      }
+      else if ("translation".equals(qualifier))
+      {
+        data.translation = featureValue;
+      }
+      else if (!"".equals(featureValue))
+      {
+        // throw anything else into the additional properties hash
+        data.cdsProps.put(qualifier, featureValue);
+      }
+    }
+
+    if (data.proteinId != null)
+    {
+      this.cds.put(data.proteinId, data);
+    }
+    else
+    {
+      Cache.log.error("Ignoring CDS feature with no protein_id for "
+              + sourceDb + ":" + accession);
+    }
+
+    return line;
+  }
+
+  protected abstract boolean isFeatureContinuationLine(String line);
+
+  /**
+   * Output (print) is not (yet) implemented for flat file format
+   */
+  @Override
+  public String print(SequenceI[] seqs, boolean jvsuffix)
+  {
+    return null;
+  }
+
+  /**
+   * Constructs and saves the sequence from parsed components
+   */
+  protected void buildSequence()
+  {
+    if (this.accession == null || this.sequenceString == null)
+    {
+      Cache.log.error("Failed to parse data from EMBL");
+      return;
+    }
+
+    String name = this.accession;
+    if (this.sourceDb != null)
+    {
+      name = this.sourceDb + "|" + name;
+    }
+    SequenceI seq = new Sequence(name, this.sequenceString);
+    seq.setDescription(this.description);
+
+    /*
+     * add a DBRef to itself
+     */
+    DBRefEntry selfRef = new DBRefEntry(sourceDb, version, accession);
+    int[] startEnd = new int[] { 1, seq.getLength() };
+    selfRef.setMap(new Mapping(null, startEnd, startEnd, 1, 1));
+    seq.addDBRef(selfRef);
+
+    for (DBRefEntry dbref : this.dbrefs)
+    {
+      seq.addDBRef(dbref);
+    }
+
+    processCDSFeatures(seq);
+
+    seq.deriveSequence();
+
+    addSequence(seq);
+  }
+
+  /**
+   * Process the CDS features, including generation of cross-references and
+   * mappings to the protein products (translation)
+   * 
+   * @param seq
+   */
+  protected void processCDSFeatures(SequenceI seq)
+  {
+    /*
+     * record protein products found to avoid duplication i.e. >1 CDS with 
+     * the same /protein_id [though not sure I can find an example of this]
+     */
+    Map<String, SequenceI> proteins = new HashMap<>();
+    for (CdsData data : cds.values())
+    {
+      processCDSFeature(seq, data, proteins);
+    }
+  }
+
+  /**
+   * Processes data for one parsed CDS feature to
+   * <ul>
+   * <li>create a protein product sequence for the translation</li>
+   * <li>create a cross-reference to protein with mapping from dna</li>
+   * <li>add a CDS feature to the sequence for each CDS start-end range</li>
+   * <li>add any CDS dbrefs to the sequence and to the protein product</li>
+   * </ul>
+   * 
+   * @param SequenceI
+   *          dna
+   * @param proteins
+   *          map of protein products so far derived from CDS data
+   */
+  void processCDSFeature(SequenceI dna, CdsData data,
+          Map<String, SequenceI> proteins)
+  {
+    /*
+     * parse location into a list of [start, end, start, end] positions
+     */
+    int[] exons = getCdsRanges(this.accession, data.cdsLocation);
+
+    MapList maplist = buildMappingToProtein(dna, exons, data);
+
+    int exonNumber = 0;
+
+    for (int xint = 0; exons != null && xint < exons.length - 1; xint += 2)
+    {
+      int exonStart = exons[xint];
+      int exonEnd = exons[xint + 1];
+      int begin = Math.min(exonStart, exonEnd);
+      int end = Math.max(exonStart, exonEnd);
+      exonNumber++;
+      String desc = String.format("Exon %d for protein EMBLCDS:%s",
+              exonNumber, data.proteinId);
+
+      SequenceFeature sf = new SequenceFeature("CDS", desc, begin, end,
+              this.sourceDb);
+      for (Entry<String, String> val : data.cdsProps.entrySet())
+      {
+        sf.setValue(val.getKey(), val.getValue());
+      }
+
+      sf.setEnaLocation(data.cdsLocation);
+      boolean forwardStrand = exonStart <= exonEnd;
+      sf.setStrand(forwardStrand ? "+" : "-");
+      sf.setPhase(String.valueOf(data.codonStart - 1));
+      sf.setValue(FeatureProperties.EXONPOS, exonNumber);
+      sf.setValue(FeatureProperties.EXONPRODUCT, data.proteinName);
+
+      dna.addSequenceFeature(sf);
+    }
+
+    boolean hasUniprotDbref = false;
+    for (DBRefEntry xref : data.xrefs)
+    {
+      dna.addDBRef(xref);
+      if (xref.getSource().equals(DBRefSource.UNIPROT))
+      {
+        /*
+         * construct (or find) the sequence for (data.protein_id, data.translation)
+         */
+        SequenceI protein = buildProteinProduct(dna, xref, data, proteins);
+        Mapping map = new Mapping(protein, maplist);
+        map.setMappedFromId(data.proteinId);
+        xref.setMap(map);
+
+        /*
+         * add DBRefs with mappings from dna to protein and the inverse
+         */
+        DBRefEntry db1 = new DBRefEntry(sourceDb, version, accession);
+        db1.setMap(new Mapping(dna, maplist.getInverse()));
+        protein.addDBRef(db1);
+
+        hasUniprotDbref = true;
+      }
+    }
+
+    /*
+     * if we have a product (translation) but no explicit Uniprot dbref
+     * (example: EMBL M19487 protein_id AAB02592.1)
+     * then construct mappings to an assumed EMBLCDSPROTEIN accession
+     */
+    if (!hasUniprotDbref)
+    {
+      SequenceI protein = proteins.get(data.proteinId);
+      if (protein == null)
+      {
+        protein = new Sequence(data.proteinId, data.translation);
+        protein.setDescription(data.proteinName);
+        proteins.put(data.proteinId, protein);
+      }
+      // assuming CDSPROTEIN sequence version = dna version (?!)
+      DBRefEntry db1 = new DBRefEntry(DBRefSource.EMBLCDSProduct,
+              this.version, data.proteinId);
+      protein.addDBRef(db1);
+
+      DBRefEntry dnaToEmblProteinRef = new DBRefEntry(
+              DBRefSource.EMBLCDSProduct, this.version, data.proteinId);
+      Mapping map = new Mapping(protein, maplist);
+      map.setMappedFromId(data.proteinId);
+      dnaToEmblProteinRef.setMap(map);
+      dna.addDBRef(dnaToEmblProteinRef);
+    }
+
+    /*
+     * comment brought forward from EmblXmlSource, lines 447-451:
+     * TODO: if retrieved from EMBLCDS, add a DBRef back to the parent EMBL
+     * sequence with the exon  map; if given a dataset reference, search
+     * dataset for parent EMBL sequence if it exists and set its map;
+     * make a new feature annotating the coding contig
+     */
+  }
+
+  /**
+   * Computes a mapping from CDS positions in DNA sequence to protein product
+   * positions, with allowance for stop codon or incomplete start codon
+   * 
+   * @param dna
+   * @param exons
+   * @param data
+   * @return
+   */
+  MapList buildMappingToProtein(final SequenceI dna, final int[] exons,
+          final CdsData data)
+  {
+    MapList dnaToProteinMapping = null;
+    int peptideLength = data.translation.length();
+
+    int[] proteinRange = new int[] { 1, peptideLength };
+    if (exons != null && exons.length > 0)
+    {
+      /*
+       * We were able to parse 'location'; do a final 
+       * product length truncation check
+       */
+      int[] cdsRanges = adjustForProteinLength(peptideLength, exons);
+      dnaToProteinMapping = new MapList(cdsRanges, proteinRange, 3, 1);
+    }
+    else
+    {
+      /*
+       * workaround until we handle all 'location' formats fully
+       * e.g. X53828.1:60..1058 or <123..>289
+       */
+      Cache.log.error(String.format(
+              "Implementation Notice: EMBLCDS location '%s'not properly supported yet"
+                      + " - Making up the CDNA region of (%s:%s)... may be incorrect",
+              data.cdsLocation, sourceDb, this.accession));
+
+      int completeCodonsLength = 1 - data.codonStart + dna.getLength();
+      int mappedDnaEnd = dna.getEnd();
+      if (peptideLength * 3 == completeCodonsLength)
+      {
+        // this might occur for CDS sequences where no features are marked
+        Cache.log.warn("Assuming no stop codon at end of cDNA fragment");
+        mappedDnaEnd = dna.getEnd();
+      }
+      else if ((peptideLength + 1) * 3 == completeCodonsLength)
+      {
+        Cache.log.warn("Assuming stop codon at end of cDNA fragment");
+        mappedDnaEnd = dna.getEnd() - 3;
+      }
+
+      if (mappedDnaEnd != -1)
+      {
+        int[] cdsRanges = new int[] {
+            dna.getStart() + (data.codonStart - 1), mappedDnaEnd };
+        dnaToProteinMapping = new MapList(cdsRanges, proteinRange, 3, 1);
+      }
+    }
+
+    return dnaToProteinMapping;
+  }
+
+  /**
+   * Constructs a sequence for the protein product for the CDS data (if there is
+   * one), and dbrefs with mappings from CDS to protein and the reverse
+   * 
+   * @param dna
+   * @param xref
+   * @param data
+   * @param proteins
+   * @return
+   */
+  SequenceI buildProteinProduct(SequenceI dna, DBRefEntry xref,
+          CdsData data, Map<String, SequenceI> proteins)
+  {
+    /*
+     * check we have some data to work with
+     */
+    if (data.proteinId == null || data.translation == null)
+    {
+      return null;
+    }
+
+    /*
+     * Construct the protein sequence (if not already seen)
+     */
+    String proteinSeqName = xref.getSource() + "|" + xref.getAccessionId();
+    SequenceI protein = proteins.get(proteinSeqName);
+    if (protein == null)
+    {
+      protein = new Sequence(proteinSeqName, data.translation, 1,
+              data.translation.length());
+      protein.setDescription(data.proteinName != null ? data.proteinName
+              : "Protein Product from " + sourceDb);
+      proteins.put(proteinSeqName, protein);
+    }
+
+    return protein;
+  }
+
+  /**
+   * Returns the CDS location as a single array of [start, end, start, end...]
+   * positions. If on the reverse strand, these will be in descending order.
+   * 
+   * @param accession
+   * @param location
+   * @return
+   */
+  protected int[] getCdsRanges(String accession, String location)
+  {
+    if (location == null)
+    {
+      return new int[] {};
+    }
+
+    try
+    {
+      List<int[]> ranges = DnaUtils.parseLocation(location);
+      return MappingUtils.rangeListToArray(ranges);
+    } catch (ParseException e)
+    {
+      Cache.log.warn(
+              String.format("Not parsing inexact CDS location %s in ENA %s",
+                      location, accession));
+      return new int[] {};
+    }
+  }
+
+  /**
+   * Reads the value of a feature (FT) qualifier from one or more lines of the
+   * file, and returns the next line after that. Values are appended to the
+   * string buffer, which should be already primed with the value read from the
+   * first line for the qualifier (with any leading double quote removed).
+   * Enclosing double quotes are removed, and escaped (repeated) double quotes
+   * reduced to one only. For example for
+   * 
+   * <pre>
+   * FT      /note="gene_id=hCG28070.3 
+   * FT      ""foobar"" isoform=CRA_b"
+   * the returned value is
+   * gene_id=hCG28070.3 "foobar" isoform=CRA_b
+   * </pre>
+   * 
+   * Note the side-effect of this method, to advance data reading to the next
+   * line after the feature qualifier (which could be another qualifier, a
+   * different feature, a non-feature line, or null at end of file).
+   * 
+   * @param sb
+   *          a string buffer primed with the first line of the value
+   * @param asText
+   * @return
+   * @throws IOException
+   */
+  String parseFeatureQualifier(StringBuilder sb, boolean asText)
+          throws IOException
+  {
+    String line;
+    while ((line = nextLine()) != null)
+    {
+      if (!isFeatureContinuationLine(line))
+      {
+        break; // reached next feature or other input line
+      }
+      String[] tokens = line.split(WHITESPACE);
+      if (tokens.length < 2)
+      {
+        Cache.log.error("Ignoring bad EMBL line for " + this.accession
+                + ": " + line);
+        break;
+      }
+      if (tokens[1].startsWith("/"))
+      {
+        break; // next feature qualifier
+      }
+
+      /*
+       * if text (e.g. /product), add a word separator for a new line,
+       * else (e.g. /translation) don't
+       */
+      if (asText)
+      {
+        sb.append(" ");
+      }
+
+      /*
+       * remove trailing " and unescape doubled ""
+       */
+      String data = removeQuotes(tokens[1]);
+      sb.append(data);
+    }
+
+    return line;
+  }
+
+  /**
+   * Reads and saves the sequence, read from the lines following the ORIGIN
+   * (GenBank) or SQ (EMBL) line. Whitespace and position counters are
+   * discarded. Returns the next line following the sequence data (the next line
+   * that doesn't start with whitespace).
+   * 
+   * @throws IOException
+   */
+  protected String parseSequence() throws IOException
+  {
+    StringBuilder sb = new StringBuilder(this.length);
+    String line = nextLine();
+    while (line != null && line.startsWith(" "))
+    {
+      line = line.trim();
+      String[] blocks = line.split(WHITESPACE);
+
+      /*
+       * the first or last block on each line might be a position count - omit
+       */
+      for (int i = 0; i < blocks.length; i++)
+      {
+        try
+        {
+          Long.parseLong(blocks[i]);
+          // position counter - ignore it
+        } catch (NumberFormatException e)
+        {
+          // sequence data - append it
+          sb.append(blocks[i]);
+        }
+      }
+      line = nextLine();
+    }
+    this.sequenceString = sb.toString();
+
+    return line;
+  }
+
+  /**
+   * Processes a feature line. If it declares a feature type of interest
+   * (currently, only CDS is processed), processes all of the associated lines
+   * (feature qualifiers), and returns the next line after that, otherwise
+   * simply returns the next line.
+   * 
+   * @param line
+   *          the first line for the feature (with initial FT omitted for EMBL
+   *          format)
+   * @return
+   * @throws IOException
+   */
+  protected String parseFeature(String line) throws IOException
+  {
+    String[] tokens = line.trim().split(WHITESPACE);
+    if (tokens.length < 2 || !"CDS".equals(tokens[0]))
+    {
+      return nextLine();
+    }
+
+    return parseCDSFeature(tokens[1]);
+  }
+}
+
+/**
+ * A data bean class to hold values parsed from one CDS Feature
+ */
+class CdsData
+{
+  String translation; // from /translation qualifier
+
+  String cdsLocation; // the raw value e.g. join(1..1234,2012..2837)
+
+  int codonStart = 1; // from /codon_start qualifier
+
+  String proteinName; // from /product qualifier; used for protein description
+
+  String proteinId; // from /protein_id qualifier
+
+  List<DBRefEntry> xrefs = new ArrayList<>(); // from /db_xref qualifiers
+
+  Map<String, String> cdsProps = new Hashtable<>(); // other qualifiers
+}
index 85cf48a..31751f5 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import jalview.api.AlignExportSettingsI;
 import jalview.api.AlignmentViewPanel;
 import jalview.bin.Cache;
@@ -162,7 +164,7 @@ public class FormatAdapter extends AppletFormatAdapter
 
   public boolean getCacheSuffixDefault(FileFormatI format)
   {
-    return Cache.getDefault(format.getName().toUpperCase() + "_JVSUFFIX",
+    return Cache.getDefault(format.getName().toUpperCase(Locale.ROOT) + "_JVSUFFIX",
             true);
   }
 
diff --git a/src/jalview/io/GenBankFile.java b/src/jalview/io/GenBankFile.java
new file mode 100644 (file)
index 0000000..ba7b4b4
--- /dev/null
@@ -0,0 +1,189 @@
+package jalview.io;
+
+import java.io.IOException;
+
+/**
+ * A class that provides selective parsing of the GenBank flatfile format.
+ * <p>
+ * The initial implementation is limited to extracting fields used by Jalview
+ * after fetching an EMBL or EMBLCDS entry:
+ * 
+ * <pre>
+ * accession, version, sequence, xref
+ * and (for CDS feature) location, protein_id, product, codon_start, translation
+ * </pre>
+ * 
+ * @author gmcarstairs
+ * @see https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html
+ */
+public class GenBankFile extends FlatFile
+{
+  private static final String DEFINITION = "DEFINITION";
+
+  /**
+   * Constructor given a data source and the id of the source database
+   * 
+   * @param fp
+   * @param sourceId
+   * @throws IOException
+   */
+  public GenBankFile(FileParse fp, String sourceId) throws IOException
+  {
+    super(fp, sourceId);
+  }
+
+  /**
+   * Parses the flatfile, and if successful, saves as an annotated sequence
+   * which may be retrieved by calling {@code getSequence()}
+   * 
+   * @throws IOException
+   * @see https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html
+   */
+  @Override
+  public void parse() throws IOException
+  {
+    String line = nextLine();
+    while (line != null)
+    {
+      if (line.startsWith("LOCUS"))
+      {
+        line = parseLocus(line);
+      }
+      else if (line.startsWith(DEFINITION))
+      {
+        line = parseDefinition(line);
+      }
+      else if (line.startsWith("ACCESSION"))
+      {
+        this.accession = line.split(WHITESPACE)[1];
+        line = nextLine();
+      }
+      else if (line.startsWith("VERSION"))
+      {
+        line = parseVersion(line);
+      }
+      else if (line.startsWith("ORIGIN"))
+      {
+        line = parseSequence();
+      }
+      else if (line.startsWith("FEATURES"))
+      {
+        line = nextLine();
+        while (line.startsWith(" "))
+        {
+          line = parseFeature(line);
+        }
+      }
+      else
+      {
+        line = nextLine();
+      }
+    }
+    buildSequence();
+  }
+
+  /**
+   * Extracts and saves the primary accession and version (SV value) from an ID
+   * line, or null if not found. Returns the next line after the one processed.
+   * 
+   * @param line
+   * @throws IOException
+   */
+  String parseLocus(String line) throws IOException
+  {
+    String[] tokens = line.split(WHITESPACE);
+
+    /*
+     * first should be "LOCUS"
+     */
+    if (tokens.length < 2 || !"LOCUS".equals(tokens[0]))
+    {
+      return nextLine();
+    }
+    /*
+     * second is primary accession
+     */
+    String token = tokens[1].trim();
+    if (!token.isEmpty())
+    {
+      this.accession = token;
+    }
+
+    // not going to guess the rest just yet, but third is length with unit (bp)
+
+    return nextLine();
+  }
+
+  /**
+   * Reads sequence description from DEFINITION lines. Any trailing period is
+   * discarded. Returns the next line after the definition line(s).
+   * 
+   * @param line
+   * @return
+   * @throws IOException
+   */
+  String parseDefinition(String line) throws IOException
+  {
+    String desc = line.substring(DEFINITION.length()).trim();
+    if (desc.endsWith("."))
+    {
+      desc = desc.substring(0, desc.length() - 1);
+    }
+
+    /*
+     * pass over any additional DE lines
+     */
+    while ((line = nextLine()) != null)
+    {
+      if (line.startsWith(" "))
+      {
+        // definition continuation line
+        desc += line.trim();
+      }
+      else
+      {
+        break;
+      }
+    }
+    this.description = desc;
+
+    return line;
+  }
+
+  /**
+   * Parses the VERSION line e.g.
+   * 
+   * <pre>
+   * VERSION     X81322.1
+   * </pre>
+   * 
+   * and returns the next line
+   * 
+   * @param line
+   * @throws IOException
+   */
+  String parseVersion(String line) throws IOException
+  {
+    /*
+     * extract version part of <accession>.<version>
+     * https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html#VersionB
+     */
+    String[] tokens = line.split(WHITESPACE);
+    if (tokens.length > 1)
+    {
+      tokens = tokens[1].split("\\.");
+      if (tokens.length > 1)
+      {
+        this.version = tokens[1];
+      }
+    }
+
+    return nextLine();
+  }
+
+  @Override
+  protected boolean isFeatureContinuationLine(String line)
+  {
+    return line.startsWith("      "); // 6 spaces
+  }
+}
index b312474..5a3d700 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import java.io.File;
 import java.io.IOException;
 
@@ -178,13 +180,26 @@ public class IdentifyFile
             break;
           }
         }
-        data = data.toUpperCase();
+        data = data.toUpperCase(Locale.ROOT);
 
         if (data.startsWith(ScoreMatrixFile.SCOREMATRIX))
         {
           reply = FileFormat.ScoreMatrix;
           break;
         }
+        if (data.startsWith("LOCUS"))
+        {
+          reply = FileFormat.GenBank;
+          break;
+        }
+        if (data.startsWith("ID "))
+        {
+          if (data.substring(2).trim().split(";").length == 7)
+          {
+            reply = FileFormat.Embl;
+            break;
+          }
+        }
         if (data.startsWith("H ") && !aaIndexHeaderRead)
         {
           aaIndexHeaderRead = true;
@@ -319,7 +334,7 @@ public class IdentifyFile
         if ((lessThan > -1)) // possible Markup Language data i.e HTML,
                              // RNAML, XML
         {
-          String upper = data.toUpperCase();
+          String upper = data.toUpperCase(Locale.ROOT);
           if (upper.substring(lessThan).startsWith("<HTML"))
           {
             reply = FileFormat.Html;
index 6af92b7..ab2c00a 100755 (executable)
@@ -25,6 +25,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Sequence;
@@ -409,7 +411,7 @@ public class JPredFile extends AlignFile
     // check that no stray annotations have been added at the end.
     {
       SequenceI sq = seqs.elementAt(j - 1);
-      if (sq.getName().toUpperCase().startsWith("JPRED"))
+      if (sq.getName().toUpperCase(Locale.ROOT).startsWith("JPRED"))
       {
         annotSeqs.addElement(sq);
         seqs.removeElementAt(--j);
index e0f28bb..022148a 100644 (file)
@@ -70,7 +70,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 {
   private static String version = new BuildDetails().getVersion();
 
-  private String webstartUrl = "http://www.jalview.org/services/launchApp";
+  private String webstartUrl = "https://www.jalview.org/services/launchApp";
 
   private String application = "Jalview";
 
index bc20342..28dd2eb 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import java.io.File;
 import java.util.Hashtable;
 import java.util.Iterator;
@@ -134,7 +136,7 @@ public class JalviewFileFilter extends FileFilter
 
       if ((i > 0) && (i < (filename.length() - 1)))
       {
-        return filename.substring(i + 1).toLowerCase();
+        return filename.substring(i + 1).toLowerCase(Locale.ROOT);
       }
 
       ;
@@ -150,7 +152,7 @@ public class JalviewFileFilter extends FileFilter
       filters = new LinkedHashMap<>(5);
     }
 
-    filters.put(extension.toLowerCase(), this);
+    filters.put(extension.toLowerCase(Locale.ROOT), this);
     fullDescription = null;
   }
 
index 52d130c..b90bd7a 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import jalview.util.MessageManager;
 
 import java.io.File;
@@ -47,7 +49,7 @@ public class JalviewFileView extends FileView
       String exts = ff.getExtensions();
       for (String ext : exts.split(","))
       {
-        ext = ext.trim().toLowerCase();
+        ext = ext.trim().toLowerCase(Locale.ROOT);
         extensions.put(ext,
                 desc + ("jar".equals(ext) ? " (old)" : ""));
       }
@@ -136,7 +138,7 @@ public class JalviewFileView extends FileView
 
     if ((i > 0) && (i < (s.length() - 1)))
     {
-      ext = s.substring(i + 1).toLowerCase();
+      ext = s.substring(i + 1).toLowerCase(Locale.ROOT);
     }
 
     return ext;
index 6828202..27fc869 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
@@ -88,7 +90,7 @@ public class JnetAnnotationMaker
 
     while (i < preds.length)
     {
-      String id = preds[i].getName().toUpperCase();
+      String id = preds[i].getName().toUpperCase(Locale.ROOT);
 
       if (id.startsWith("LUPAS") || id.startsWith("JNET")
               || id.startsWith("JPRED"))
index df2bed2..e954703 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
 import jalview.util.Comparison;
@@ -184,7 +186,7 @@ public class MSFfile extends AlignFile
   public int checkSum(String seq)
   {
     int check = 0;
-    String sequence = seq.toUpperCase();
+    String sequence = seq.toUpperCase(Locale.ROOT);
 
     for (int i = 0; i < sequence.length(); i++)
     {
index f3eaa45..ec5d267 100755 (executable)
@@ -26,6 +26,8 @@
 // TODO: Extended SequenceNodeI to hold parsed NHX strings
 package jalview.io;
 
+import java.util.Locale;
+
 import jalview.datamodel.SequenceNode;
 import jalview.util.MessageManager;
 
@@ -656,7 +658,7 @@ public class NewickFile extends FileParse
           try
           {
             // parse out code/value pairs
-            if (code.toLowerCase().equals("b"))
+            if (code.toLowerCase(Locale.ROOT).equals("b"))
             {
               int v = -1;
               Float iv = Float.valueOf(value);
index 8e4e783..62b723d 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.LinkedHashMap;
@@ -273,7 +275,7 @@ public class SequenceAnnotationReport
          * truncate overlong descriptions unless they contain an href
          * before the truncation point (as truncation could leave corrupted html)
          */
-        int linkindex = description.toLowerCase().indexOf("<a ");
+        int linkindex = description.toLowerCase(Locale.ROOT).indexOf("<a ");
         boolean hasLink = linkindex > -1
                 && linkindex < MAX_DESCRIPTION_LENGTH;
         if (description.length() > MAX_DESCRIPTION_LENGTH && !hasLink)
@@ -400,8 +402,8 @@ public class SequenceAnnotationReport
                       + "\" target=\""
                       + urllink.get(0)
                       + "\">"
-                      + (urllink.get(0).toLowerCase()
-                              .equals(urllink.get(1).toLowerCase()) ? urllink
+                      + (urllink.get(0).toLowerCase(Locale.ROOT)
+                              .equals(urllink.get(1).toLowerCase(Locale.ROOT)) ? urllink
                               .get(0) : (urllink.get(0) + ":" + urllink
                                               .get(1)))
                       + "</a><br/>");
index 8b26757..c8c9c8a 100644 (file)
@@ -23,6 +23,8 @@
  */
 package jalview.io;
 
+import java.util.Locale;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -1110,7 +1112,7 @@ public class StockholmFile extends AlignFile
         }
         else
         {
-          key = type2id(aa.label.toLowerCase());
+          key = type2id(aa.label.toLowerCase(Locale.ROOT));
           if (key == null)
           {
             label = aa.label;
index 084f886..94a832b 100644 (file)
@@ -119,6 +119,7 @@ public abstract class StructureFile extends AlignFile
     pdbSequence.setName(getId() + "|" + pdbSequence.getName());
     PDBEntry entry = new PDBEntry();
     entry.setId(getId());
+    entry.setFakedPDBId(!isPPDBIdAvailable());
     entry.setType(getStructureFileType());
     if (chain.id != null)
     {
index da0c245..9ce4cc6 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.io.gff;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignedCodonFrame;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.MappingType;
@@ -341,7 +343,7 @@ public class ExonerateHelper extends Gff2Helper
     // e.g. exonerate:protein2genome:local
     if (model != null)
     {
-      String mdl = model.toLowerCase();
+      String mdl = model.toLowerCase(Locale.ROOT);
       if (mdl.contains(PROTEIN2DNA) || mdl.contains(PROTEIN2GENOME)
               || mdl.contains(CODING2CODING) || mdl.contains(CODING2GENOME)
               || mdl.contains(CDNA2GENOME) || mdl.contains(GENOME2GENOME))
index d40446d..37dd66b 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.io.packed;
 
+import java.util.Locale;
+
 import jalview.api.FeatureColourI;
 import jalview.datamodel.AlignmentI;
 import jalview.io.AppletFormatAdapter;
@@ -235,7 +237,7 @@ public class ParsePackedSet
       String type = args[i++];
       final String file = args[i++];
       final JvDataType jtype = DataProvider.JvDataType
-              .valueOf(type.toUpperCase());
+              .valueOf(type.toUpperCase(Locale.ROOT));
       if (jtype != null)
       {
         final FileParse fp;
@@ -254,7 +256,7 @@ public class ParsePackedSet
       else
       {
         System.out.println("Couldn't parse source type token '"
-                + type.toUpperCase() + "'");
+                + type.toUpperCase(Locale.ROOT) + "'");
       }
     }
     if (i < args.length)
index f965c4e..dadb532 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.io.vcf;
 
+import java.util.Locale;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -431,7 +433,7 @@ public class VCFLoader
               + DEFAULT_REFERENCE + ":" + DEFAULT_SPECIES);
       reference = DEFAULT_REFERENCE; // default to GRCh37 if not specified
     }
-    reference = reference.toLowerCase();
+    reference = reference.toLowerCase(Locale.ROOT);
 
     /*
      * for a non-human species, or other assembly identifier,
@@ -446,7 +448,7 @@ public class VCFLoader
       String[] tokens = token.split("=");
       if (tokens.length == 2)
       {
-        if (reference.contains(tokens[0].trim().toLowerCase()))
+        if (reference.contains(tokens[0].trim().toLowerCase(Locale.ROOT)))
         {
           vcfAssembly = tokens[1].trim();
           break;
@@ -463,7 +465,7 @@ public class VCFLoader
         String[] tokens = token.split("=");
         if (tokens.length == 2)
         {
-          if (reference.contains(tokens[0].trim().toLowerCase()))
+          if (reference.contains(tokens[0].trim().toLowerCase(Locale.ROOT)))
           {
             vcfSpecies = tokens[1].trim();
             break;
@@ -568,7 +570,7 @@ public class VCFLoader
   {
     for (Pattern p : filters)
     {
-      if (p.matcher(id.toUpperCase()).matches())
+      if (p.matcher(id.toUpperCase(Locale.ROOT)).matches())
       {
         return true;
       }
@@ -662,7 +664,7 @@ public class VCFLoader
     {
       try
       {
-      patterns.add(Pattern.compile(token.toUpperCase()));
+      patterns.add(Pattern.compile(token.toUpperCase(Locale.ROOT)));
       } catch (PatternSyntaxException e)
       {
         System.err.println("Invalid pattern ignored: " + token);
@@ -1033,7 +1035,7 @@ public class VCFLoader
      */
     String consequence = getConsequenceForAlleleAndFeature(variant, CSQ_FIELD,
             altAlleleIndex, csqAlleleFieldIndex,
-            csqAlleleNumberFieldIndex, seq.getName().toLowerCase(),
+            csqAlleleNumberFieldIndex, seq.getName().toLowerCase(Locale.ROOT),
             csqFeatureFieldIndex);
 
     /*
@@ -1226,7 +1228,7 @@ public class VCFLoader
       {
         String featureIdentifier = csqFields[featureFieldIndex];
         if (featureIdentifier.length() > 4
-                && seqName.indexOf(featureIdentifier.toLowerCase()) > -1)
+                && seqName.indexOf(featureIdentifier.toLowerCase(Locale.ROOT)) > -1)
         {
           /*
            * feature (transcript) matched - now check for allele match
index 5691a47..582f2de 100644 (file)
@@ -1,5 +1,7 @@
 package jalview.javascript.log4j;
 
+import java.util.Locale;
+
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
@@ -162,7 +164,7 @@ public class Level extends Priority implements Serializable
     {
       return defaultLevel;
     }
-    String s = sArg.toUpperCase();
+    String s = sArg.toUpperCase(Locale.ROOT);
 
     if (s.equals(ALL_NAME))
     {
index b3422ab..6b877bf 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.json.binding.biojson.v1;
 
+import java.util.Locale;
+
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.schemes.Blosum62ColourScheme;
 import jalview.schemes.BuriedColourScheme;
@@ -62,7 +64,7 @@ public class ColourSchemeMapper
   public static ColourSchemeI getJalviewColourScheme(
           String colourSchemeName, AnnotatedCollectionI annotCol)
   {
-    switch (colourSchemeName.toUpperCase())
+    switch (colourSchemeName.toUpperCase(Locale.ROOT))
     {
     case "ZAPPO":
       return csZappo;
index ffd942f..9b6741b 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.project;
 
+import java.util.Locale;
+
 import static jalview.math.RotatableMatrix.Axis.X;
 import static jalview.math.RotatableMatrix.Axis.Y;
 import static jalview.math.RotatableMatrix.Axis.Z;
@@ -2076,8 +2078,8 @@ public class Jalview2XML
       final PDBEntry pdbentry = bindingModel.getPdbEntry(peid);
       final String pdbId = pdbentry.getId();
       if (!pdbId.equals(entry.getId())
-              && !(entry.getId().length() > 4 && entry.getId().toLowerCase()
-                      .startsWith(pdbId.toLowerCase())))
+              && !(entry.getId().length() > 4 && entry.getId().toLowerCase(Locale.ROOT)
+                      .startsWith(pdbId.toLowerCase(Locale.ROOT))))
       {
         /*
          * not interested in a binding to a different PDB entry here
@@ -2645,7 +2647,7 @@ public class Jalview2XML
         for (int i = 0; i < colours.length; i++)
         {
           Colour col = new Colour();
-          col.setName(ResidueProperties.aa[i].toLowerCase());
+          col.setName(ResidueProperties.aa[i].toLowerCase(Locale.ROOT));
           col.setRGB(jalview.util.Format.getHexString(colours[i]));
           // jbucs.addColour(col);
           jbucs.getColour().add(col);
index fa2900d..deb2b6f 100644 (file)
@@ -1516,6 +1516,8 @@ public class AnnotationRenderer
                       .deriveFont(AffineTransform.getScaleInstance(sx, sy));
               g.setFont(font);
               g.drawChars(dc, 0, dc.length, x * charWidth, hght);
+              g.setFont(ofont);
+
               ht += newHeight;
             }
           }
index 141ef10..061ccd4 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.schemes;
 
+import java.util.Locale;
+
 import jalview.xml.binding.jalview.JalviewUserColours;
 
 import java.awt.Color;
@@ -92,7 +94,7 @@ public class ColourSchemeLoader
 
         Color color = new Color(
                 Integer.parseInt(jucs.getColour().get(i).getRGB(), 16));
-        if (name.toLowerCase().equals(name))
+        if (name.toLowerCase(Locale.ROOT).equals(name))
         {
           caseSensitive = true;
           lowerCase[index] = color;
index d31fbba..faada0e 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.schemes;
 
+import java.util.Locale;
+
 import jalview.api.AlignViewportI;
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.SequenceCollectionI;
@@ -104,7 +106,7 @@ public class ColourSchemes
      * name is lower-case for non-case-sensitive lookup
      * (name in the colour keeps its true case)
      */
-    String lower = name.toLowerCase();
+    String lower = name.toLowerCase(Locale.ROOT);
     if (schemes.containsKey(lower))
     {
       System.err
@@ -122,7 +124,7 @@ public class ColourSchemes
   {
     if (name != null)
     {
-      schemes.remove(name.toLowerCase());
+      schemes.remove(name.toLowerCase(Locale.ROOT));
     }
   }
 
@@ -148,7 +150,7 @@ public class ColourSchemes
     {
       return null;
     }
-    ColourSchemeI cs = schemes.get(name.toLowerCase());
+    ColourSchemeI cs = schemes.get(name.toLowerCase(Locale.ROOT));
     return cs == null ? null
             : cs.getInstance(viewport, forData);
   }
@@ -193,6 +195,6 @@ public class ColourSchemes
     {
       return false;
     }
-    return schemes.containsKey(name.toLowerCase());
+    return schemes.containsKey(name.toLowerCase(Locale.ROOT));
   }
 }
index 0d36f4f..e5bda58 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.schemes;
 
+import java.util.Locale;
+
 import jalview.api.FeatureColourI;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.features.FeatureMatcher;
@@ -194,19 +196,19 @@ public class FeatureColour implements FeatureColourI
               "Expected either 'label' or a colour specification in the line: "
                       + descriptor);
     }
-    if (nextToken.toLowerCase().startsWith(LABEL))
+    if (nextToken.toLowerCase(Locale.ROOT).startsWith(LABEL))
     {
       byLabel = true;
       // get the token after the next delimiter:
       mincol = (gcol.hasMoreTokens() ? gcol.nextToken() : null);
       mincol = (gcol.hasMoreTokens() ? gcol.nextToken() : null);
     }
-    else if (nextToken.toLowerCase().startsWith(SCORE))
+    else if (nextToken.toLowerCase(Locale.ROOT).startsWith(SCORE))
     {
       mincol = (gcol.hasMoreTokens() ? gcol.nextToken() : null);
       mincol = (gcol.hasMoreTokens() ? gcol.nextToken() : null);
     }
-    else if (nextToken.toLowerCase().startsWith(ATTRIBUTE))
+    else if (nextToken.toLowerCase(Locale.ROOT).startsWith(ATTRIBUTE))
     {
       byAttribute = true;
       attName = (gcol.hasMoreTokens() ? gcol.nextToken() : null);
@@ -304,7 +306,7 @@ public class FeatureColour implements FeatureColourI
       }
 
       gcol.nextToken(); // skip next '|'
-      if (tok.toLowerCase().startsWith(ABSOLUTE))
+      if (tok.toLowerCase(Locale.ROOT).startsWith(ABSOLUTE))
       {
         minval = gcol.nextToken();
         gcol.nextToken(); // skip next '|'
@@ -380,17 +382,17 @@ public class FeatureColour implements FeatureColourI
       {
         // threshold type and possibly a threshold value
         ttype = gcol.nextToken();
-        if (ttype.toLowerCase().startsWith(BELOW))
+        if (ttype.toLowerCase(Locale.ROOT).startsWith(BELOW))
         {
           featureColour.setBelowThreshold(true);
         }
-        else if (ttype.toLowerCase().startsWith(ABOVE))
+        else if (ttype.toLowerCase(Locale.ROOT).startsWith(ABOVE))
         {
           featureColour.setAboveThreshold(true);
         }
         else
         {
-          if (!ttype.toLowerCase().startsWith("no"))
+          if (!ttype.toLowerCase(Locale.ROOT).startsWith("no"))
           {
             System.err.println(
                     "Ignoring unrecognised threshold type : " + ttype);
index 5f84ca0..2eb303d 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.schemes;
 
+import java.util.Locale;
+
 import jalview.analysis.GeneticCodes;
 
 import java.awt.Color;
@@ -2347,7 +2349,7 @@ public class ResidueProperties
         {
           continue;
         }
-        nuc = nuc.toUpperCase();
+        nuc = nuc.toUpperCase(Locale.ROOT);
         if (!result.contains(nuc))
         {
           result.add(nuc);
@@ -2366,7 +2368,7 @@ public class ResidueProperties
         {
           continue;
         }
-        res = res.toUpperCase();
+        res = res.toUpperCase(Locale.ROOT);
         if (!result.contains(res))
         {
           result.add(res);
@@ -2391,7 +2393,7 @@ public class ResidueProperties
       return '0';
     }
     Integer index = ResidueProperties.aa3Hash
-            .get(threeLetterCode.toUpperCase());
+            .get(threeLetterCode.toUpperCase(Locale.ROOT));
     return index == null ? '0' : aa[index].charAt(0);
   }
 }
index d77f2f5..d55ffbf 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.schemes;
 
+import java.util.Locale;
+
 import jalview.api.AlignViewportI;
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.util.ColorUtils;
@@ -215,7 +217,7 @@ public class UserColourScheme extends ResidueColourScheme
             continue;
           }
 
-          if (residue.equals(residue.toLowerCase()))
+          if (residue.equals(residue.toLowerCase(Locale.ROOT)))
           {
             if (lowerCaseColours == null)
             {
@@ -306,7 +308,7 @@ public class UserColourScheme extends ResidueColourScheme
         c = lowerCaseColours[index];
         if (c != null && !c.equals(Color.white))
         {
-          residue = residue.toLowerCase();
+          residue = residue.toLowerCase(Locale.ROOT);
           if (colours.get(c) == null)
           {
             colours.put(c, new ArrayList<String>());
index 9662fee..cbd59b1 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.structure;
 
+import java.util.Locale;
+
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.PDBEntry.Type;
 
@@ -130,7 +132,7 @@ public class StructureImportSettings
           String defaultStructureFileFormat)
   {
     StructureImportSettings.defaultStructureFileFormat = PDBEntry.Type
-            .valueOf(defaultStructureFileFormat.toUpperCase());
+            .valueOf(defaultStructureFileFormat.toUpperCase(Locale.ROOT));
   }
 
   public static String getDefaultPDBFileParser()
@@ -147,7 +149,7 @@ public class StructureImportSettings
   public static void setDefaultPDBFileParser(String defaultPDBFileParser)
   {
     StructureImportSettings.defaultPDBFileParser = StructureParser
-            .valueOf(defaultPDBFileParser.toUpperCase());
+            .valueOf(defaultPDBFileParser.toUpperCase(Locale.ROOT));
   }
 
 }
index 44773e9..748381f 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.structures.models;
 
+import java.util.Locale;
+
 import java.awt.Color;
 import java.io.File;
 import java.io.IOException;
@@ -931,7 +933,7 @@ public abstract class AAStructureBindingModel
           for (String reply : replies)
           {
             // return this error (Chimera only) to the user
-            if (reply.toLowerCase().contains("unequal numbers of atoms"))
+            if (reply.toLowerCase(Locale.ROOT).contains("unequal numbers of atoms"))
             {
               error += "; " + reply;
             }
index a01c035..536671d 100644 (file)
@@ -25,6 +25,8 @@ package jalview.util;
  * want to preserve case, but do not want to duplicate upper and lower case
  * variants
  */
+import java.util.Locale;
+
 public final class CaseInsensitiveString
 {
   String value;
@@ -72,6 +74,6 @@ public final class CaseInsensitiveString
   public int hashCode()
   {
     return value == null ? super.hashCode()
-            : value.toUpperCase().hashCode();
+            : value.toUpperCase(Locale.ROOT).hashCode();
   }
 }
index 60129fb..5db333f 100644 (file)
@@ -24,6 +24,8 @@
 
 package jalview.util;
 
+import java.util.Locale;
+
 import java.awt.Color;
 import java.util.HashMap;
 import java.util.Map;
@@ -324,7 +326,7 @@ public class ColorUtils
       return null;
     }
     Color col = null;
-    name = name.toLowerCase();
+    name = name.toLowerCase(Locale.ROOT);
 
     // or make a static map; or use reflection on the field name
     switch (name)
index ae0243e..bcb0bd3 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.util;
 
+import java.util.Locale;
+
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.HashMap;
@@ -73,7 +75,7 @@ public class DBRefUtils
            // guarantee we always have lowercase entries for canonical string lookups
            for (String k : canonicalSourceNameLookup.keySet())
            {
-             canonicalSourceNameLookup.put(k.toLowerCase(),
+             canonicalSourceNameLookup.put(k.toLowerCase(Locale.ROOT),
                      canonicalSourceNameLookup.get(k));
            }
    }
@@ -98,7 +100,7 @@ public class DBRefUtils
        HashSet<String> srcs = new HashSet<String>();
        for (String src : sources) 
        {
-         srcs.add(src.toUpperCase());
+         srcs.add(src.toUpperCase(Locale.ROOT));
        }
 
        int nrefs = dbrefs.size();
@@ -107,7 +109,7 @@ public class DBRefUtils
        {
          DBRefEntry dbr = dbrefs.get(ib);
          String source = getCanonicalName(dbr.getSource());
-         if (srcs.contains(source.toUpperCase())) 
+         if (srcs.contains(source.toUpperCase(Locale.ROOT))) 
          {
            res.add(dbr);
          }
@@ -181,7 +183,7 @@ public class DBRefUtils
          {
                return null;
          }
-         String canonical = canonicalSourceNameLookup.get(source.toLowerCase());
+         String canonical = canonicalSourceNameLookup.get(source.toLowerCase(Locale.ROOT));
          return canonical == null ? source : canonical;
        }
 
index 284ec10..654b03a 100644 (file)
@@ -47,6 +47,7 @@ public class DnaUtils
   public static List<int[]> parseLocation(String location)
           throws ParseException
   {
+    location = location.trim(); // failsafe for untidy input data
     if (location.startsWith("join("))
     {
       return parseJoin(location);
index bb94566..ba7da10 100644 (file)
@@ -162,7 +162,7 @@ public class MessageManager
    */
   public static String getStringOrReturn(String keyroot, String name)
   {
-    String smkey = keyroot + name.toLowerCase().replaceAll(" ", "");
+    String smkey = keyroot + name.toLowerCase(Locale.ROOT).replaceAll(" ", "");
     try
     {
       name = rb.getString(smkey);
index 6713bbc..0f2d01d 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.util;
 
+import java.util.Locale;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.StringTokenizer;
@@ -103,7 +105,7 @@ public class ParseHtmlBodyAndLinks
       return;
     }
     StringBuilder sb = new StringBuilder(description.length());
-    if (description.toUpperCase().indexOf("<HTML>") == -1)
+    if (description.toUpperCase(Locale.ROOT).indexOf("<HTML>") == -1)
     {
       htmlContent = false;
     }
@@ -129,7 +131,7 @@ public class ParseHtmlBodyAndLinks
         token = token.substring(0, startTag);
       }
 
-      if (tag != null && tag.toUpperCase().startsWith("A HREF="))
+      if (tag != null && tag.toUpperCase(Locale.ROOT).startsWith("A HREF="))
       {
         if (token.length() > 0)
         {
index 1f114a8..bf5b87a 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.util;
 
+import java.util.Locale;
+
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
@@ -409,9 +411,9 @@ public class StringUtils
     }
     if (s.length() <= 1)
     {
-      return s.toUpperCase();
+      return s.toUpperCase(Locale.ROOT);
     }
-    return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
+    return s.substring(0, 1).toUpperCase(Locale.ROOT) + s.substring(1).toLowerCase(Locale.ROOT);
   }
 
   /**
@@ -427,7 +429,7 @@ public class StringUtils
     {
       return null;
     }
-    String tmp2up = text.toUpperCase();
+    String tmp2up = text.toUpperCase(Locale.ROOT);
     int startTag = tmp2up.indexOf("<HTML>");
     if (startTag > -1)
     {
index 51e1828..e43ead2 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.util.matcher;
 
+import java.util.Locale;
+
 import java.util.Objects;
 
 /**
@@ -102,7 +104,7 @@ public class Matcher implements MatcherI
       patternType = PatternType.String;
     }
 
-    uppercasePattern = pattern == null ? null : pattern.toUpperCase();
+    uppercasePattern = pattern == null ? null : pattern.toUpperCase(Locale.ROOT);
 
     // if we add regex conditions (e.g. matchesPattern), then
     // pattern should hold the raw regex, and
@@ -172,7 +174,7 @@ public class Matcher implements MatcherI
   boolean matchesString(String compareTo)
   {
     boolean matched = false;
-    String upper = compareTo.toUpperCase().trim();
+    String upper = compareTo.toUpperCase(Locale.ROOT).trim();
     switch(condition) {
     case Matches:
       matched = upper.equals(uppercasePattern);
index 7daa7b4..9420465 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws;
 
+import java.util.Locale;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Enumeration;
@@ -243,7 +245,7 @@ public class DBRefFetcher implements Runnable
    */
   void addSeqId(SequenceI seq, String key)
   {
-    key = key.toUpperCase();
+    key = key.toUpperCase(Locale.ROOT);
 
     Vector<SequenceI> seqs;
     if (seqRefs.containsKey(key))
@@ -397,7 +399,7 @@ public class DBRefFetcher implements Runnable
                DBRefEntry upref = uprefs.get(j);
                 addSeqId(sequence, upref.getAccessionId());
                 queries.addElement(
-                        upref.getAccessionId().toUpperCase());
+                        upref.getAccessionId().toUpperCase(Locale.ROOT));
               }
             }
             else
@@ -436,7 +438,7 @@ public class DBRefFetcher implements Runnable
                           "Validated ID against PICR... (for what its worth):"
                                   + token);
                   addSeqId(sequence, token);
-                  queries.addElement(token.toUpperCase());
+                  queries.addElement(token.toUpperCase(Locale.ROOT));
                 }
                 else
                 {
@@ -444,7 +446,7 @@ public class DBRefFetcher implements Runnable
                   // System.out.println("Not querying source with
                   // token="+token+"\n");
                   addSeqId(sequence, token);
-                  queries.addElement(token.toUpperCase());
+                  queries.addElement(token.toUpperCase(Locale.ROOT));
                 }
               }
             }
@@ -540,7 +542,7 @@ public class DBRefFetcher implements Runnable
        DBRefEntry ref = entryRefs.get(j);
         String accessionId = ref.getAccessionId();
         // match up on accessionId
-        if (seqRefs.containsKey(accessionId.toUpperCase()))
+        if (seqRefs.containsKey(accessionId.toUpperCase(Locale.ROOT)))
         {
           Vector<SequenceI> seqs = seqRefs.get(accessionId);
           for (int jj = 0; jj < seqs.size(); jj++)
@@ -592,7 +594,7 @@ public class DBRefFetcher implements Runnable
       // sequenceMatches now contains the set of all sequences associated with
       // the returned db record
       final String retrievedSeqString = retrievedSeq.getSequenceAsString();
-      String entrySeq = retrievedSeqString.toUpperCase();
+      String entrySeq = retrievedSeqString.toUpperCase(Locale.ROOT);
       for (int m = 0; m < sequenceMatches.size(); m++)
       {
         sequence = sequenceMatches.elementAt(m);
@@ -611,7 +613,7 @@ public class DBRefFetcher implements Runnable
         boolean remoteEnclosesLocal = false;
         String nonGapped = AlignSeq
                 .extractGaps("-. ", sequence.getSequenceAsString())
-                .toUpperCase();
+                .toUpperCase(Locale.ROOT);
         int absStart = entrySeq.indexOf(nonGapped);
         if (absStart == -1)
         {
@@ -731,10 +733,10 @@ public class DBRefFetcher implements Runnable
               String ngAlsq = AlignSeq
                       .extractGaps("-. ",
                               alseqs[alsq].getSequenceAsString())
-                      .toUpperCase();
+                      .toUpperCase(Locale.ROOT);
               int oldstrt = alseqs[alsq].getStart();
               alseqs[alsq].setStart(sequence.getSequenceAsString()
-                      .toUpperCase().indexOf(ngAlsq) + sequence.getStart());
+                      .toUpperCase(Locale.ROOT).indexOf(ngAlsq) + sequence.getStart());
               if (oldstrt != alseqs[alsq].getStart())
               {
                 alseqs[alsq].setEnd(
index 6536958..7d3c6dd 100644 (file)
@@ -1,5 +1,7 @@
 package jalview.ws.dbsources;
 
+import java.util.Locale;
+
 import java.io.File;
 import java.io.IOException;
 
@@ -73,13 +75,13 @@ public abstract class EmblFlatfileSource extends EbiFileRetrievedProxy
     try
     {
       reply = dbFetch.fetchDataAsFile(
-              dbName.toLowerCase() + ":" + query.trim(), null, "gz");
+              dbName.toLowerCase(Locale.ROOT) + ":" + query.trim(), null, "gz");
     } catch (Exception e)
     {
       stopQuery();
       throw new Exception(
               String.format("EBI EMBL retrieval failed for %s:%s",
-                      dbName.toLowerCase(), query.trim()),
+                      dbName.toLowerCase(Locale.ROOT), query.trim()),
               e);
     }
     return getEmblSequenceRecords(dbName, query, reply);
index 97d7c9f..c2d661b 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.dbsources;
 
+import java.util.Locale;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
@@ -102,14 +104,14 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
     try
     {
       reply = dbFetch.fetchDataAsFile(
-              emprefx.toLowerCase() + ":" + query.trim(), "display=xml",
+              emprefx.toLowerCase(Locale.ROOT) + ":" + query.trim(), "display=xml",
               "xml");
     } catch (Exception e)
     {
       stopQuery();
       throw new Exception(
               String.format("EBI EMBL XML retrieval failed for %s:%s",
-                      emprefx.toLowerCase(), query.trim()),
+                      emprefx.toLowerCase(Locale.ROOT), query.trim()),
               e);
     }
     return getEmblSequenceRecords(emprefx, query, reply);
index b2fbc17..345e217 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.dbsources;
 
+import java.util.Locale;
+
 import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
@@ -142,7 +144,7 @@ public class TDBeacons extends DbSourceProxyImpl
     startQuery();
     try
     {
-      queries = queries.toUpperCase().replaceAll(
+      queries = queries.toUpperCase(Locale.ROOT).replaceAll(
               "(UNIPROT\\|?|UNIPROT_|UNIREF\\d+_|UNIREF\\d+\\|?)", "");
       AlignmentI al = null;
 
index 2fc5893..a80a530 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.dbsources;
 
+import java.util.Locale;
+
 import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
@@ -139,7 +141,7 @@ public class Uniprot extends DbSourceProxyImpl
     startQuery();
     try
     {
-      queries = queries.toUpperCase().replaceAll(
+      queries = queries.toUpperCase(Locale.ROOT).replaceAll(
               "(UNIPROT\\|?|UNIPROT_|UNIREF\\d+_|UNIREF\\d+\\|?)", "");
       AlignmentI al = null;
 
index f0cb14b..9340f65 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.dbsources;
 
+import java.util.Locale;
+
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
@@ -75,11 +77,11 @@ public abstract class Xfam extends DbSourceProxyImpl
     {
       rcds.getSequenceAt(s).addDBRef(new DBRefEntry(getXfamSource(),
               // getDbSource(),
-              getDbVersion(), queries.trim().toUpperCase()));
+              getDbVersion(), queries.trim().toUpperCase(Locale.ROOT)));
       if (!getDbSource().equals(getXfamSource()))
       { // add the specific ref too
         rcds.getSequenceAt(s).addDBRef(new DBRefEntry(getDbSource(),
-                getDbVersion(), queries.trim().toUpperCase()));
+                getDbVersion(), queries.trim().toUpperCase(Locale.ROOT)));
       }
     }
     stopQuery();
@@ -88,7 +90,7 @@ public abstract class Xfam extends DbSourceProxyImpl
 
   String getURL(String queries)
   {
-    return getURLPrefix() + "/family/" + queries.trim().toUpperCase()
+    return getURLPrefix() + "/family/" + queries.trim().toUpperCase(Locale.ROOT)
             + getURLSuffix();
   }
 
index b773d4e..1d04351 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.ebi;
 
+import java.util.Locale;
+
 import jalview.datamodel.DBRefSource;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
@@ -280,12 +282,12 @@ public class EBIFetchClient
             || database.equalsIgnoreCase(DBRefSource.EMBLCDS))
     {
       url = "https://www.ebi.ac.uk/ena/browser/api/embl/"
-              + ids.toLowerCase() + "?download=true&gzip=true";
+              + ids.toLowerCase(Locale.ROOT) + "?download=true&gzip=true";
     }
     else
     {
       url = "https://www.ebi.ac.uk/Tools/dbfetch/dbfetch/"
-              + database.toLowerCase() + "/" + ids.toLowerCase()
+              + database.toLowerCase(Locale.ROOT) + "/" + ids.toLowerCase(Locale.ROOT)
               + (format != null ? "/" + format : "");
     }
     return url;
index 83252d8..7e6e660 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.io.mime;
 
+import java.util.Locale;
+
 import jalview.io.packed.DataProvider.JvDataType;
 
 /**
@@ -53,7 +55,7 @@ public class MimeTypes
    */
   public static JvDataType getTypeOf(String mimeType)
   {
-    String mt = mimeType.toLowerCase();
+    String mt = mimeType.toLowerCase(Locale.ROOT);
     for (int i = 0; i < typemap.length; i += 2)
     {
       if (typemap[i].equals(mt))
index 3b7bdb6..e9c2aea 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.jws1;
 
+import java.util.Locale;
+
 import jalview.analysis.AlignSeq;
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentView;
@@ -183,7 +185,7 @@ public class JPredClient extends WS1Client
 
   private String getPredictionName(String webServiceName)
   {
-    if (webServiceName.toLowerCase()
+    if (webServiceName.toLowerCase(Locale.ROOT)
             .indexOf("secondary structure prediction") > -1)
     {
       return webServiceName;
index 4a09625..dad314b 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.jws1;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentView;
 import jalview.gui.AlignFrame;
@@ -119,7 +121,7 @@ public class MsaWSClient extends WS1Client
 
     wsInfo.setProgressText(((submitGaps) ? "Re-alignment" : "Alignment")
             + " of " + altitle + "\nJob details\n");
-    String jobtitle = WebServiceName.toLowerCase();
+    String jobtitle = WebServiceName.toLowerCase(Locale.ROOT);
     if (jobtitle.endsWith("alignment"))
     {
       if (submitGaps && (!jobtitle.endsWith("realignment")
index e33b4bd..8ed4a36 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.jws2;
 
+import java.util.Locale;
+
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
@@ -148,7 +150,7 @@ public class MsaWSClient extends Jws2Client
 
     wsInfo.setProgressText(((submitGaps) ? "Re-alignment" : "Alignment")
             + " of " + altitle + "\nJob details\n");
-    String jobtitle = WebServiceName.toLowerCase();
+    String jobtitle = WebServiceName.toLowerCase(Locale.ROOT);
     if (jobtitle.endsWith("alignment"))
     {
       if (submitGaps && (!jobtitle.endsWith("realignment")
index 45bddac..a30a09c 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.jws2;
 
+import java.util.Locale;
+
 import jalview.api.AlignCalcWorkerI;
 import jalview.gui.AlignFrame;
 import jalview.gui.Desktop;
@@ -128,7 +130,7 @@ public class SequenceAnnotationWSClient extends Jws2Client
         worker.updateParameters(this.preset, paramset);
       }
     }
-    if (sh.action.toLowerCase().contains("disorder"))
+    if (sh.action.toLowerCase(Locale.ROOT).contains("disorder"))
     {
       // build IUPred style client. take sequences, returns annotation per
       // sequence.
index 88431a6..a96b6d9 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.rest;
 
+import java.util.Locale;
+
 import jalview.ws.params.ArgumentI;
 import jalview.ws.params.InvalidArgumentException;
 import jalview.ws.params.OptionI;
@@ -232,7 +234,7 @@ public abstract class InputType
         {
           valid = false;
           warnings.append("Invalid value for parameter "
-                  + mtch.group(1).toLowerCase() + " '" + mtch.group(2)
+                  + mtch.group(1).toLowerCase(Locale.ROOT) + " '" + mtch.group(2)
                   + "' (expected an integer)\n");
         }
 
index acb7904..20b517b 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.rest;
 
+import java.util.Locale;
+
 import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
@@ -401,7 +403,7 @@ public class RestJobThread extends AWSThread
      */
     String f;
     StringBuffer content = new StringBuffer(f = EntityUtils.toString(en));
-    f = f.toLowerCase();
+    f = f.toLowerCase(Locale.ROOT);
     int body = f.indexOf("<body");
     if (body > -1)
     {
index ae58082..5a03aea 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.sifts;
 
+import java.util.Locale;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -219,7 +221,7 @@ public class SiftsClient implements SiftsClientI
     }
 
     String siftsFileName = SiftsSettings.getSiftDownloadDirectory()
-            + pdbId.toLowerCase() + ".xml.gz";
+            + pdbId.toLowerCase(Locale.ROOT) + ".xml.gz";
     File siftsFile = new File(siftsFileName);
     if (siftsFile.exists())
     {
@@ -233,7 +235,7 @@ public class SiftsClient implements SiftsClientI
         BackupFiles.moveFileToFile(siftsFile, oldSiftsFile);
         try
         {
-          siftsFile = downloadSiftsFile(pdbId.toLowerCase());
+          siftsFile = downloadSiftsFile(pdbId.toLowerCase(Locale.ROOT));
           oldSiftsFile.delete();
           return siftsFile;
         } catch (IOException e)
@@ -250,7 +252,7 @@ public class SiftsClient implements SiftsClientI
     }
     try
     {
-      siftsFile = downloadSiftsFile(pdbId.toLowerCase());
+      siftsFile = downloadSiftsFile(pdbId.toLowerCase(Locale.ROOT));
     } catch (IOException e)
     {
       throw new SiftsException(e.getMessage());
@@ -356,7 +358,7 @@ public class SiftsClient implements SiftsClientI
   public static boolean deleteSiftsFileByPDBId(String pdbId)
   {
     File siftsFile = new File(SiftsSettings.getSiftDownloadDirectory()
-            + pdbId.toLowerCase() + ".xml.gz");
+            + pdbId.toLowerCase(Locale.ROOT) + ".xml.gz");
     if (siftsFile.exists())
     {
       return siftsFile.delete();
@@ -431,7 +433,7 @@ public class SiftsClient implements SiftsClientI
         for (MapRegion mapRegion : mapRegions)
         {
           accessions
-                  .add(mapRegion.getDb().getDbAccessionId().toLowerCase());
+                  .add(mapRegion.getDb().getDbAccessionId().toLowerCase(Locale.ROOT));
         }
       }
     }
@@ -501,9 +503,9 @@ public class SiftsClient implements SiftsClientI
     HashSet<String> dbRefAccessionIdsString = new HashSet<String>();
     for (DBRefEntry dbref : seq.getDBRefs())
     {
-      dbRefAccessionIdsString.add(dbref.getAccessionId().toLowerCase());
+      dbRefAccessionIdsString.add(dbref.getAccessionId().toLowerCase(Locale.ROOT));
     }
-    dbRefAccessionIdsString.add(sourceDBRef.getAccessionId().toLowerCase());
+    dbRefAccessionIdsString.add(sourceDBRef.getAccessionId().toLowerCase(Locale.ROOT));
 
     curDBRefAccessionIdsString = dbRefAccessionIdsString;
     curSourceDBRef = sourceDBRef.getAccessionId();
@@ -891,14 +893,14 @@ public class SiftsClient implements SiftsClientI
   {
     boolean isStrictMatch = true;
     return isStrictMatch ? curSourceDBRef.equalsIgnoreCase(accession)
-            : curDBRefAccessionIdsString.contains(accession.toLowerCase());
+            : curDBRefAccessionIdsString.contains(accession.toLowerCase(Locale.ROOT));
   }
 
   private boolean isFoundInSiftsEntry(String accessionId)
   {
     Set<String> siftsDBRefs = getAllMappingAccession();
     return accessionId != null
-            && siftsDBRefs.contains(accessionId.toLowerCase());
+            && siftsDBRefs.contains(accessionId.toLowerCase(Locale.ROOT));
   }
 
   /**
index 60c289e..e1c90f3 100755 (executable)
@@ -78,11 +78,27 @@ public class PDBChain
 
   public String pdbid = "";
 
-  public PDBChain(String thePdbid, String theId, boolean isAlphaFoldModel)
+  String tfacName = "Temperature Factor";
+
+
+  public PDBChain(String thePdbid, String theId, String tempFactorColumnName)
   {
     this.pdbid = thePdbid == null ? thePdbid : thePdbid.toLowerCase();
     this.id = theId;
-    this.alphaFoldModel = isAlphaFoldModel;
+    if (tempFactorColumnName!=null && tempFactorColumnName.length()>0)
+    {
+      tfacName = tempFactorColumnName;
+    }
+  }
+
+  /**
+   * import chain data assuming Temperature Factor is in the Temperature Factor column
+   * @param thePdbid
+   * @param theId
+   */
+  public PDBChain(String thePdbid, String theId)
+  {
+    this(thePdbid,theId, null);
   }
 
   /**
@@ -92,8 +108,6 @@ public class PDBChain
 
   public Mapping shadowMap;
 
-  private boolean alphaFoldModel;
-
   public void setNewlineString(String nl)
   {
     newline = nl;
@@ -493,23 +507,17 @@ public class PDBChain
         min = Math.min(min, annots[i].value);
         resAnnotation.setElementAt(null, i);
       }
-      String tfacName = "Temperature Factor";
-      if (isAlphaFoldModel())
-      {
-        tfacName = "Alphafold Reliability";
-      }
       AlignmentAnnotation tfactorann = new AlignmentAnnotation(
               tfacName, tfacName + " for " + pdbid + id,
               annots, min, max, AlignmentAnnotation.LINE_GRAPH);
+      
+      tfactorann.setCalcId(getClass().getName());
+
       tfactorann.setSequenceRef(sequence);
       sequence.addAlignmentAnnotation(tfactorann);
     }
   }
 
-  private boolean isAlphaFoldModel()
-  {
-    return alphaFoldModel;
-  }
 
   /**
    * Colour start/end of bonds by charge
@@ -627,8 +635,10 @@ public class PDBChain
 
         for (AlignmentAnnotation ana : shadow.getAnnotation())
         {
-          List<AlignmentAnnotation> transfer = sq
-                  .getAlignmentAnnotations(ana.getCalcId(), ana.label);
+          // match on calcId, label and description so annotations from
+          // different structures are preserved
+          List<AlignmentAnnotation> transfer = sq.getAlignmentAnnotations(
+                  ana.getCalcId(), ana.label, ana.description);
           if (transfer == null || transfer.size() == 0)
           {
             ana = new AlignmentAnnotation(ana);
@@ -648,8 +658,11 @@ public class PDBChain
         {
           for (AlignmentAnnotation ana : sequence.getAnnotation())
           {
+            // match on calcId, label and description so annotations from
+            // different structures are preserved
             List<AlignmentAnnotation> transfer = dsq
-                    .getAlignmentAnnotations(ana.getCalcId(), ana.label);
+                    .getAlignmentAnnotations(ana.getCalcId(), ana.label,
+                            ana.description);
             if (transfer == null || transfer.size() == 0)
             {
               ana = new AlignmentAnnotation(ana);
index 24e0435..0eb14cd 100755 (executable)
@@ -154,8 +154,8 @@ public class PDBfile extends StructureFile
             tmpchain.atoms.addElement(tmpatom);
           } else
           {
-            // PDBfile never handles alphafold models, so false
-            tmpchain = new PDBChain(getId(), tmpatom.chain, false);
+            // PDBfile never handles alphafold models
+            tmpchain = new PDBChain(getId(), tmpatom.chain);
             getChains().add(tmpchain);
             tmpchain.atoms.addElement(tmpatom);
           }
index 9d3877c..d01b23e 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
@@ -91,7 +93,7 @@ public class AlignmentGenerator
       ps = new PrintStream(new File(args[6]));
     }
 
-    boolean nucleotide = args[0].toLowerCase().startsWith("n");
+    boolean nucleotide = args[0].toLowerCase(Locale.ROOT).startsWith("n");
     int width = Integer.parseInt(args[1]);
     int height = Integer.parseInt(args[2]);
     long randomSeed = Long.valueOf(args[3]);
index 1faf3f2..cc35976 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertNull;
@@ -182,7 +184,7 @@ public class RnaTest
         char second = bases.charAt(j);
         boolean result = Rna.isCanonicalOrWobblePair(first, second);
         String pair = new String(new char[] { first, second })
-                .toUpperCase();
+                .toUpperCase(Locale.ROOT);
         if (pair.equals("AT") || pair.equals("TA") || pair.equals("AU")
                 || pair.equals("UA") || pair.equals("GC")
                 || pair.equals("CG") || pair.equals("GT")
@@ -211,7 +213,7 @@ public class RnaTest
         char second = bases.charAt(j);
         boolean result = Rna.isCanonicalPair(first, second);
         String pair = new String(new char[] { first, second })
-                .toUpperCase();
+                .toUpperCase(Locale.ROOT);
         if (pair.equals("AT") || pair.equals("TA") || pair.equals("AU")
                 || pair.equals("UA") || pair.equals("GC")
                 || pair.equals("CG"))
index 348d871..91f844e 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.commands;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
@@ -286,7 +288,7 @@ public class EditCommandTest
     assertEquals("abcdefghjk", seqs[0].getSequenceAsString());
     assertEquals("fghjZ-xYopq", seqs[1].getSequenceAsString());
     // Dataset Sequence should always be uppercase
-    assertEquals("fghjZxYopq".toUpperCase(),
+    assertEquals("fghjZxYopq".toUpperCase(Locale.ROOT),
             seqs[1].getDatasetSequence().getSequenceAsString());
     assertEquals("qrstuvwxyz", seqs[2].getSequenceAsString());
     assertEquals("1234567890", seqs[3].getSequenceAsString());
@@ -317,7 +319,7 @@ public class EditCommandTest
     assertEquals(1, seq.getStart());
     assertEquals(8, seq.getEnd());
     // Dataset sequence always uppercase
-    assertEquals("ABxyZDEF".toUpperCase(),
+    assertEquals("ABxyZDEF".toUpperCase(Locale.ROOT),
             seq.getDatasetSequence().getSequenceAsString());
     assertEquals(8, seq.getDatasetSequence().getEnd());
 
@@ -343,7 +345,7 @@ public class EditCommandTest
     assertEquals(1, seq.getStart());
     assertEquals(8, seq.getEnd());
     // dataset sequence should be Uppercase
-    assertEquals("ABxyZDEF".toUpperCase(),
+    assertEquals("ABxyZDEF".toUpperCase(Locale.ROOT),
             seq.getDatasetSequence().getSequenceAsString());
     assertEquals(8, seq.getDatasetSequence().getEnd());
 
@@ -367,7 +369,7 @@ public class EditCommandTest
     // and ds is preserved
     assertTrue(dsseq == seqs[1].getDatasetSequence());
     // and it is unchanged and UPPERCASE !
-    assertEquals("fghjklmnopq".toUpperCase(), dsseq.getSequenceAsString());
+    assertEquals("fghjklmnopq".toUpperCase(Locale.ROOT), dsseq.getSequenceAsString());
     // and that alignment sequence start has been adjusted
     assertEquals(5, seqs[1].getStart());
     assertEquals(11, seqs[1].getEnd());
@@ -394,7 +396,7 @@ public class EditCommandTest
     // and ds is preserved
     assertTrue(dsseq == seqs[1].getDatasetSequence());
     // and it is unchanged AND UPPERCASE !
-    assertEquals("fghjklmnopq".toUpperCase(), dsseq.getSequenceAsString());
+    assertEquals("fghjklmnopq".toUpperCase(Locale.ROOT), dsseq.getSequenceAsString());
     // and that alignment sequence start has been adjusted
     assertEquals(5, seqs[1].getStart());
     assertEquals(11, seqs[1].getEnd());
index cf4294e..198cde3 100644 (file)
@@ -208,7 +208,7 @@ public class PDBEntryTest
     assertTrue(pdb1.updateFrom(pdb2));
     assertEquals(pdb1.getFile(), "filePath");
     assertEquals(pdb1.getType(), Type.FILE.toString());
-
+    assertEquals(pdb1.getChainCode(),"B");
     /*
      * change of file is not allowed
      */
index e90e1a9..a6e7429 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel;
 
+import java.util.Locale;
+
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
@@ -181,7 +183,7 @@ public class ResidueCountTest
     ResidueCount rc = new ResidueCount(false);
     // expected characters (upper or lower case):
     String aas = "ACDEFGHIKLMNPQRSTVWXY";
-    String lower = aas.toLowerCase();
+    String lower = aas.toLowerCase(Locale.ROOT);
     for (int i = 0; i < aas.length(); i++)
     {
       rc.put(aas.charAt(i), i);
@@ -206,7 +208,7 @@ public class ResidueCountTest
     ResidueCount rc = new ResidueCount(true);
     // expected characters (upper or lower case):
     String nucs = "ACGTUN";
-    String lower = nucs.toLowerCase();
+    String lower = nucs.toLowerCase(Locale.ROOT);
     for (int i = 0; i < nucs.length(); i++)
     {
       rc.put(nucs.charAt(i), i);
index 6d07113..2b44261 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertNotNull;
@@ -192,6 +194,35 @@ public class SequenceTest
     assertTrue(seq.getAlignmentAnnotations(null, null).isEmpty());
   }
 
+
+  @Test(groups = { "Functional" })
+  public void testGetAlignmentAnnotations_forCalcIdLabelAndDescription()
+  {
+    addAnnotation("label1", "desc1", "calcId1", 1f);
+    AlignmentAnnotation ann2 = addAnnotation("label2", "desc2", "calcId2",
+            1f);
+    addAnnotation("label2", "desc3", "calcId3", 1f);
+    AlignmentAnnotation ann4 = addAnnotation("label2", "desc3", "calcId2",
+            1f);
+    addAnnotation("label5", "desc3", null, 1f);
+    addAnnotation(null, "desc3", "calcId3", 1f);
+
+    List<AlignmentAnnotation> anns = seq.getAlignmentAnnotations("calcId2",
+            "label2", "desc3");
+    assertEquals(1, anns.size());
+    assertSame(ann4, anns.get(0));
+    /**
+     * null matching should fail
+     */
+    assertTrue(seq.getAlignmentAnnotations("calcId3", "label2",null).isEmpty());
+    
+    assertTrue(seq.getAlignmentAnnotations("calcId2", "label3",null).isEmpty());
+    assertTrue(seq.getAlignmentAnnotations("calcId3", "label5",null).isEmpty());
+    assertTrue(seq.getAlignmentAnnotations("calcId2", null,null).isEmpty());
+    assertTrue(seq.getAlignmentAnnotations(null, "label3",null).isEmpty());
+    assertTrue(seq.getAlignmentAnnotations(null, null,null).isEmpty());
+  }
+
   /**
    * Tests for addAlignmentAnnotation. Note this method has the side-effect of
    * setting the sequenceRef on the annotation. Adding the same annotation twice
@@ -783,7 +814,7 @@ public class SequenceTest
     } catch (IllegalArgumentException e)
     {
       // TODO Jalview error/exception class for raising implementation errors
-      assertTrue(e.getMessage().toLowerCase()
+      assertTrue(e.getMessage().toLowerCase(Locale.ROOT)
               .contains("implementation error"));
     }
     assertTrue(sq.getSequenceFeatures().isEmpty());
@@ -1431,6 +1462,21 @@ public class SequenceTest
     seq.addPDBId(pdbe5);
     assertEquals(4, seq.getAllPDBEntries().size());
     assertSame(pdbe5, seq.getAllPDBEntries().get(3));
+    
+    // add with a fake pdbid 
+    // (models don't have an embedded ID)
+    String realId = "RealIDQ";
+    PDBEntry pdbe6 = new PDBEntry(realId,null,Type.PDB,"real/localpath");
+    PDBEntry pdbe7 = new PDBEntry("RealID/real/localpath","C",Type.MMCIF,"real/localpath");
+    pdbe7.setFakedPDBId(true);
+    seq.addPDBId(pdbe6);
+    assertEquals(5,seq.getAllPDBEntries().size());
+    seq.addPDBId(pdbe7);
+    assertEquals(5,seq.getAllPDBEntries().size());
+    assertFalse(pdbe6.fakedPDBId());
+    assertSame(pdbe6,seq.getAllPDBEntries().get(4));
+    assertEquals("C",pdbe6.getChainCode());
+    assertEquals(realId, pdbe6.getId());
   }
 
   @Test(
index 9e9d9a4..c927f04 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ext.ensembl;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertNull;
@@ -230,7 +232,7 @@ public class EnsemblCdnaTest
     assertTrue(testee.retainFeature(sf, accId));
 
     // test is not case-sensitive
-    assertTrue(testee.retainFeature(sf, accId.toLowerCase()));
+    assertTrue(testee.retainFeature(sf, accId.toLowerCase(Locale.ROOT)));
 
     // feature with wrong parent is not retained
     sf.setValue("Parent", "XYZ");
index ef12ed4..e16197a 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ext.ensembl;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertTrue;
@@ -161,7 +163,7 @@ public class EnsemblGeneTest
     SequenceFeature sf3 = new SequenceFeature("NMD_transcript_variant", "",
             22000, 22500, 0f, null);
     // id matching should not be case-sensitive
-    sf3.setValue("Parent", geneId.toLowerCase());
+    sf3.setValue("Parent", geneId.toLowerCase(Locale.ROOT));
     sf3.setValue("id", "transcript3");
     genomic.addSequenceFeature(sf3);
 
index 2832135..10882d3 100644 (file)
@@ -277,6 +277,10 @@ public class JmolParserTest
     assertEquals(structureData.getId(), "localstruct");
     assertNotNull(structureData.getSeqs());
     /*
+     * local structures have a fake ID
+     */
+    assertTrue(structureData.getSeqs().get(0).getAllPDBEntries().get(0).fakedPDBId());
+    /*
      * the ID is also the group for features derived from structure data 
      */
     String featureGroup = structureData.getSeqs().get(0)
index 7d0916b..80fffff 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ext.paradise;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.datamodel.AlignmentI;
@@ -151,11 +153,11 @@ public class TestAnnotate3D
         {
           {
             SequenceI struseq = null;
-            String sq_ = sq.getSequenceAsString().toLowerCase();
+            String sq_ = sq.getSequenceAsString().toLowerCase(Locale.ROOT);
             for (SequenceI _struseq : pdbf.getSeqsAsArray())
             {
               final String lowerCase = _struseq.getSequenceAsString()
-                      .toLowerCase();
+                      .toLowerCase(Locale.ROOT);
               if (lowerCase.equals(sq_))
               {
                 struseq = _struseq;
index c1b4d1b..ef079d1 100644 (file)
@@ -77,7 +77,7 @@ public class TDBeaconsFTSRestClientTest
             .isEmpty());
     Assert.assertEquals(
             ftsRestClient.getAllDefaultDisplayedFTSDataColumns().size(),
-            13);
+            14);
   }
 
   @Test(groups = { "Functional" })
@@ -112,7 +112,7 @@ public class TDBeaconsFTSRestClientTest
     String actual = ftsRestClient
             .getDataColumnsFieldsAsCommaDelimitedString(wantedFields);
     Assert.assertEquals(actual,
-            "uniprot_start,uniprot_end,provider,model_identifier,model_category,model_title,resolution,confidence_avg_local_score,confidence_type,confidence_version,coverage,created,model_url");
+            "uniprot_start,uniprot_end,provider,model_identifier,model_category,model_title,resolution,confidence_avg_local_score,confidence_type,confidence_version,coverage,created,model_url,model_page_url");
   }
 
   @Test(groups = { "Functional" })
@@ -279,7 +279,7 @@ public class TDBeaconsFTSRestClientTest
   }
 
   private static String[][] mocks = { { "P38398.json",
-      "{\"uniprot_entry\":{\"sequence_length\":1863,\"ac\":\"P38398\",\"id\":\"BRCA1_HUMAN\"},\"structures\":[{\"model_identifier\":\"4igk\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2012-12-17\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":1.75,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4igk_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4igk\"},{\"model_identifier\":\"1t15\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-04-15\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":1.85,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t15_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1t15\"},{\"model_identifier\":\"4ifi\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2012-12-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.2,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4ifi_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4ifi\"},{\"model_identifier\":\"1t29\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-04-20\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.3,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t29_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1t29\"},{\"model_identifier\":\"3pxb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxb_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxb\"},{\"model_identifier\":\"4y2g\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2015-02-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4y2g_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4y2g\"},{\"model_identifier\":\"1y98\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-12-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1y98_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1y98\"},{\"model_identifier\":\"1jnx\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2001-07-26\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1jnx_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1jnx\"},{\"model_identifier\":\"3pxa\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.55,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxa_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxa\"},{\"model_identifier\":\"3k0h\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2009-09-24\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.7,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k0h_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3k0h\"},{\"model_identifier\":\"3k0k\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2009-09-24\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.7,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k0k_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3k0k\"},{\"model_identifier\":\"1n5o\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2002-11-06\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1n5o_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1n5o\"},{\"model_identifier\":\"3pxc\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxc_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxc\"},{\"model_identifier\":\"3pxd\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxd_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxd\"},{\"model_identifier\":\"1t2u\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-04-22\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t2u_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1t2u\"},{\"model_identifier\":\"3k15\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2009-09-25\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k15_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3k15\"},{\"model_identifier\":\"3pxe\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.85,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxe_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxe\"},{\"model_identifier\":\"3k16\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2009-09-25\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.0,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k16_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3k16\"},{\"model_identifier\":\"4ofb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2014-01-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.05,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4ofb_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4ofb\"},{\"model_identifier\":\"3coj\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2008-03-28\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.21,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3coj_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3coj\"},{\"model_identifier\":\"7lyb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2021-03-06\",\"sequence_identity\":100.0,\"uniprot_start\":1,\"uniprot_end\":100,\"resolution\":3.28,\"coverage\":5.37,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/7lyb_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/7lyb\"},{\"model_identifier\":\"1t2v\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-04-22\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.3,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t2v_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1t2v\"},{\"model_identifier\":\"4y18\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2015-02-06\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4y18_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4y18\"},{\"model_identifier\":\"4jlu\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2013-03-13\",\"sequence_identity\":100.0,\"uniprot_start\":1649,\"uniprot_end\":1859,\"resolution\":3.5,\"coverage\":11.33,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4jlu_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4jlu\"},{\"model_identifier\":\"4u4a\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2014-07-23\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.51,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4u4a_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4u4a\"},{\"model_identifier\":\"2ing\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2006-10-07\",\"sequence_identity\":100.0,\"uniprot_start\":1649,\"uniprot_end\":1859,\"resolution\":3.6,\"coverage\":11.33,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/2ing_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/2ing\"},{\"model_identifier\":\"7jzv\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2020-09-02\",\"sequence_identity\":99.0,\"uniprot_start\":2,\"uniprot_end\":104,\"resolution\":3.9,\"coverage\":5.53,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/7jzv_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/7jzv\"},{\"model_identifier\":\"6g2i\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2018-03-23\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":5.9,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/6g2i_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/6g2i\"},{\"model_identifier\":\"1jm7\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2001-07-17\",\"sequence_identity\":100.0,\"uniprot_start\":1,\"uniprot_end\":110,\"resolution\":null,\"coverage\":5.9,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1jm7_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1jm7\"},{\"model_identifier\":\"1oqa\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2003-03-07\",\"sequence_identity\":100.0,\"uniprot_start\":1755,\"uniprot_end\":1863,\"resolution\":null,\"coverage\":5.85,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1oqa_updated.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1oqa\"},{\"model_identifier\":\"614057b7a2b5cc6a7fcb50bd\",\"model_category\":\"TEMPLATE-BASED\",\"provider\":\"SWISS-MODEL\",\"created\":\"2021-09-14\",\"sequence_identity\":1.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"coverage\":0.115,\"confidence_version\":\"4.2.0\",\"confidence_avg_local_score\":0.776,\"model_url\":\"https://swissmodel.expasy.org/3d-beacons/uniprot/P38398.pdb?range=1646-1859&template=6g2i.1.K&provider=swissmodel\",\"model_format\":\"PDB\",\"confidence_type\":\"QMEANDisCo\"},{\"model_identifier\":\"614057b7a2b5cc6a7fcb50c1\",\"model_category\":\"TEMPLATE-BASED\",\"provider\":\"SWISS-MODEL\",\"created\":\"2021-09-14\",\"sequence_identity\":1.0,\"uniprot_start\":1,\"uniprot_end\":103,\"coverage\":0.055,\"confidence_version\":\"4.2.0\",\"confidence_avg_local_score\":0.655,\"model_url\":\"https://swissmodel.expasy.org/3d-beacons/uniprot/P38398.pdb?range=1-103&template=1jm7.1.A&provider=swissmodel\",\"model_format\":\"PDB\",\"confidence_type\":\"QMEANDisCo\"},{\"model_identifier\":\"AF-P38398-F1\",\"model_category\":\"DEEP-LEARNING\",\"provider\":\"AlphaFold DB\",\"created\":\"2021-07-01\",\"sequence_identity\":1.0,\"uniprot_start\":1,\"uniprot_end\":1863,\"coverage\":100.0,\"model_url\":\"https://alphafold.ebi.ac.uk/files/AF-P38398-F1-model_v1.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://alphafold.ebi.ac.uk/entry/P38398\"}]}" },
+      "{\"uniprot_entry\":{\"sequence_length\":1863,\"ac\":\"P38398\",\"id\":\"BRCA1_HUMAN\"},\"structures\":[{\"model_identifier\":\"4igk\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2012-12-17\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":1.75,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4igk_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4igk\"},{\"model_identifier\":\"1t15\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-04-15\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":1.85,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t15_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1t15\"},{\"model_identifier\":\"4ifi\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2012-12-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.2,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4ifi_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4ifi\"},{\"model_identifier\":\"1t29\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-04-20\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.3,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t29_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1t29\"},{\"model_identifier\":\"3pxb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxb_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxb\"},{\"model_identifier\":\"4y2g\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2015-02-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4y2g_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4y2g\"},{\"model_identifier\":\"1y98\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-12-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1y98_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1y98\"},{\"model_identifier\":\"1jnx\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2001-07-26\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1jnx_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1jnx\"},{\"model_identifier\":\"3pxa\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.55,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxa_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxa\"},{\"model_identifier\":\"3k0h\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2009-09-24\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.7,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k0h_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3k0h\"},{\"model_identifier\":\"3k0k\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2009-09-24\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.7,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k0k_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3k0k\"},{\"model_identifier\":\"1n5o\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2002-11-06\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1n5o_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1n5o\"},{\"model_identifier\":\"3pxc\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxc_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxc\"},{\"model_identifier\":\"3pxd\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxd_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxd\"},{\"model_identifier\":\"1t2u\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-04-22\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t2u_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1t2u\"},{\"model_identifier\":\"3k15\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2009-09-25\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k15_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3k15\"},{\"model_identifier\":\"3pxe\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.85,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxe_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3pxe\"},{\"model_identifier\":\"3k16\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2009-09-25\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.0,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k16_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3k16\"},{\"model_identifier\":\"4ofb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2014-01-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.05,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4ofb_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4ofb\"},{\"model_identifier\":\"3coj\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2008-03-28\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.21,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3coj_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/3coj\"},{\"model_identifier\":\"7lyb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2021-03-06\",\"sequence_identity\":100.0,\"uniprot_start\":1,\"uniprot_end\":100,\"resolution\":3.28,\"coverage\":5.37,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/7lyb_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"ELECTRON MICROSCOPY\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/7lyb\"},{\"model_identifier\":\"1t2v\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2004-04-22\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.3,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t2v_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1t2v\"},{\"model_identifier\":\"4y18\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2015-02-06\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4y18_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4y18\"},{\"model_identifier\":\"4jlu\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2013-03-13\",\"sequence_identity\":100.0,\"uniprot_start\":1649,\"uniprot_end\":1859,\"resolution\":3.5,\"coverage\":11.33,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4jlu_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4jlu\"},{\"model_identifier\":\"4u4a\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2014-07-23\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.51,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4u4a_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/4u4a\"},{\"model_identifier\":\"2ing\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2006-10-07\",\"sequence_identity\":100.0,\"uniprot_start\":1649,\"uniprot_end\":1859,\"resolution\":3.6,\"coverage\":11.33,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/2ing_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"X-RAY DIFFRACTION\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/2ing\"},{\"model_identifier\":\"7jzv\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2020-09-02\",\"sequence_identity\":99.0,\"uniprot_start\":2,\"uniprot_end\":104,\"resolution\":3.9,\"coverage\":5.53,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/7jzv_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"ELECTRON MICROSCOPY\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/7jzv\"},{\"model_identifier\":\"6g2i\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2018-03-23\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":5.9,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/6g2i_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"ELECTRON MICROSCOPY\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/6g2i\"},{\"model_identifier\":\"1jm7\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2001-07-17\",\"sequence_identity\":100.0,\"uniprot_start\":1,\"uniprot_end\":110,\"resolution\":null,\"coverage\":5.9,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1jm7_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"SOLUTION NMR\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1jm7\"},{\"model_identifier\":\"1oqa\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBe\",\"created\":\"2003-03-07\",\"sequence_identity\":100.0,\"uniprot_start\":1755,\"uniprot_end\":1863,\"resolution\":null,\"coverage\":5.85,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1oqa_updated.cif\",\"model_format\":\"MMCIF\",\"experimental_method\":\"SOLUTION NMR\",\"model_page_url\":\"https://www.ebi.ac.uk/pdbe/entry/pdb/1oqa\"},{\"model_identifier\":\"614833627ca5054bb52d2f3f\",\"model_category\":\"TEMPLATE-BASED\",\"provider\":\"SWISS-MODEL\",\"created\":\"2021-09-20\",\"sequence_identity\":1.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"coverage\":0.115,\"confidence_version\":\"4.2.0\",\"confidence_avg_local_score\":0.776,\"model_url\":\"https://swissmodel.expasy.org/3d-beacons/uniprot/P38398.pdb?range=1646-1859&template=6g2i.1.K&provider=swissmodel\",\"model_format\":\"PDB\",\"model_page_url\":\"https://swissmodel.expasy.org/repository/uniprot/P38398?provider=swissmodelrange=1646-1859&template=6g2i.1.K\",\"confidence_type\":\"QMEANDisCo\"},{\"model_identifier\":\"614833627ca5054bb52d2f43\",\"model_category\":\"TEMPLATE-BASED\",\"provider\":\"SWISS-MODEL\",\"created\":\"2021-09-20\",\"sequence_identity\":1.0,\"uniprot_start\":1,\"uniprot_end\":103,\"coverage\":0.055,\"confidence_version\":\"4.2.0\",\"confidence_avg_local_score\":0.655,\"model_url\":\"https://swissmodel.expasy.org/3d-beacons/uniprot/P38398.pdb?range=1-103&template=1jm7.1.A&provider=swissmodel\",\"model_format\":\"PDB\",\"model_page_url\":\"https://swissmodel.expasy.org/repository/uniprot/P38398?provider=swissmodelrange=1-103&template=1jm7.1.A\",\"confidence_type\":\"QMEANDisCo\"},{\"model_identifier\":\"AF-P38398-F1\",\"model_category\":\"DEEP-LEARNING\",\"provider\":\"AlphaFold DB\",\"created\":\"2021-07-01\",\"sequence_identity\":1.0,\"uniprot_start\":1,\"uniprot_end\":1863,\"coverage\":100.0,\"model_url\":\"https://alphafold.ebi.ac.uk/files/AF-P38398-F1-model_v1.cif\",\"model_format\":\"MMCIF\",\"model_page_url\":\"https://alphafold.ebi.ac.uk/entry/P38398\"}]}" },
       { "P01308.json",null}};
 
   private static void setMockData()
@@ -308,6 +308,8 @@ public class TDBeaconsFTSRestClientTest
    * check that the mock request and response are the same as the response from
    * a live 3D-beacons endpoint
    * 
+   * Note - servers often have rapidly changing ids / URIs so this might fail, but the overall structure will remain. 
+   * 
    * @throws Exception
    */
   @Test(groups = { "Network", "Integration" })
index 26d4abd..12f40ca 100644 (file)
@@ -1 +1 @@
-{"uniprot_entry":{"sequence_length":110,"ac":"P01308","id":"INS_HUMAN"},"structures":[{"model_identifier":"3w7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":0.92,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w7y_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w7y"},{"model_identifier":"3w7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":0.92,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w7y_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w7y"},{"model_identifier":"5e7w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-10-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":0.9519,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5e7w_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5e7w"},{"model_identifier":"5e7w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-10-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":0.9519,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5e7w_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5e7w"},{"model_identifier":"5hqi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":0.97,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hqi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hqi"},{"model_identifier":"5hqi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":0.97,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hqi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hqi"},{"model_identifier":"1mso","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-09-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mso_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mso"},{"model_identifier":"1mso","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-09-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mso_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mso"},{"model_identifier":"3hyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-06-22","sequence_identity":100.0,"uniprot_start":35,"uniprot_end":41,"resolution":1.0,"coverage":8.14,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3hyd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3hyd"},{"model_identifier":"6ver","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":91.0,"uniprot_start":25,"uniprot_end":46,"resolution":1.047,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ver_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ver"},{"model_identifier":"6ver","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.047,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ver_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ver"},{"model_identifier":"4fka","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-06-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.08,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4fka_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4fka"},{"model_identifier":"4fka","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-06-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.08,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4fka_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4fka"},{"model_identifier":"3tt8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-09-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.12,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3tt8_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3tt8"},{"model_identifier":"3tt8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-09-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.12,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3tt8_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3tt8"},{"model_identifier":"3w7z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.15,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w7z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w7z"},{"model_identifier":"3w7z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.15,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w7z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w7z"},{"model_identifier":"5usp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.174,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5usp_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5usp"},{"model_identifier":"5usp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.174,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5usp_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5usp"},{"model_identifier":"5uoz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.17463871031,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uoz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uoz"},{"model_identifier":"5uoz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.17463871031,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uoz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uoz"},{"model_identifier":"5urt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-12","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.18,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5urt_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5urt"},{"model_identifier":"5urt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.18,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5urt_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5urt"},{"model_identifier":"1g7a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-11-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1g7a_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1g7a"},{"model_identifier":"4ajx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.2,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ajx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ajx"},{"model_identifier":"1g7a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-11-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1g7a_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1g7a"},{"model_identifier":"4ajx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ajx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ajx"},{"model_identifier":"5uu2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-15","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.223,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu2"},{"model_identifier":"5uu2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.223,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu2"},{"model_identifier":"6gv0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-06-20","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.26,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6gv0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6gv0"},{"model_identifier":"6gv0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-06-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.26,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6gv0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6gv0"},{"model_identifier":"5hrq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-24","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.28,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hrq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hrq"},{"model_identifier":"5hrq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.28,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hrq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hrq"},{"model_identifier":"1g7b","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-11-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1g7b_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1g7b"},{"model_identifier":"5usv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-14","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5usv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5usv"},{"model_identifier":"3bxq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-01-14","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3bxq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3bxq"},{"model_identifier":"1g7b","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-11-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1g7b_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1g7b"},{"model_identifier":"5usv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5usv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5usv"},{"model_identifier":"3bxq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-01-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3bxq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3bxq"},{"model_identifier":"5uqa","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.31000248093,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uqa_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uqa"},{"model_identifier":"5uqa","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.31000248093,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uqa_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uqa"},{"model_identifier":"5hpr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.33,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hpr_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hpr"},{"model_identifier":"5hpr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.33,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hpr_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hpr"},{"model_identifier":"5udp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-12-28","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.348,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5udp_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5udp"},{"model_identifier":"5udp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-12-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.348,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5udp_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5udp"},{"model_identifier":"3fq9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-01-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.35,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3fq9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3fq9"},{"model_identifier":"5ena","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.35,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5ena_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5ena"},{"model_identifier":"3exx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-10-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.35,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3exx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3exx"},{"model_identifier":"6s34","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-24","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.35,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s34_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s34"},{"model_identifier":"5ena","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.35,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5ena_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5ena"},{"model_identifier":"3exx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-10-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.35,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3exx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3exx"},{"model_identifier":"6s34","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.35,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s34_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s34"},{"model_identifier":"3fq9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-01-07","sequence_identity":95.0,"uniprot_start":91,"uniprot_end":110,"resolution":1.35,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3fq9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3fq9"},{"model_identifier":"6tc2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-11-04","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":1.36,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6tc2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6tc2"},{"model_identifier":"2omh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.36,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omh"},{"model_identifier":"2omh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.36,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omh"},{"model_identifier":"4nib","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-11-05","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4nib_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4nib"},{"model_identifier":"4cy7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-10","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cy7_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cy7"},{"model_identifier":"3w80","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w80_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w80"},{"model_identifier":"1ben","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-02-15","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ben_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ben"},{"model_identifier":"7nhu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2021-02-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.4,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7nhu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7nhu"},{"model_identifier":"4nib","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-11-05","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4nib_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4nib"},{"model_identifier":"4cy7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cy7_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cy7"},{"model_identifier":"7nhu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2021-02-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7nhu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7nhu"},{"model_identifier":"3w80","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w80_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w80"},{"model_identifier":"1ben","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-02-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ben_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ben"},{"model_identifier":"6vet","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":91.0,"uniprot_start":25,"uniprot_end":46,"resolution":1.46,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6vet_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6vet"},{"model_identifier":"6vet","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.46,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6vet_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6vet"},{"model_identifier":"4ey1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.471,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ey1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ey1"},{"model_identifier":"4ey9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.471,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ey9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ey9"},{"model_identifier":"4eyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.471,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyd"},{"model_identifier":"4ey1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.471,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ey1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ey1"},{"model_identifier":"4ey9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.471,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ey9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ey9"},{"model_identifier":"4eyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.471,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyd"},{"model_identifier":"4xc4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-12-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.499,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4xc4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4xc4"},{"model_identifier":"4xc4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-12-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.499,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4xc4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4xc4"},{"model_identifier":"1zeh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-05-01","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1zeh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1zeh"},{"model_identifier":"2wrx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrx"},{"model_identifier":"2ws6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws6"},{"model_identifier":"2ws6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws6"},{"model_identifier":"4cxl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-07","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cxl_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cxl"},{"model_identifier":"5en9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5en9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5en9"},{"model_identifier":"4p65","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-03-21","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4p65_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4p65"},{"model_identifier":"2c8r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2005-12-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.5,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2c8r_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2c8r"},{"model_identifier":"6s4j","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-28","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.5,"coverage":32.56,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s4j_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s4j"},{"model_identifier":"1zeh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1zeh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1zeh"},{"model_identifier":"2wrx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrx"},{"model_identifier":"2ws6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws6"},{"model_identifier":"2c8r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2005-12-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2c8r_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2c8r"},{"model_identifier":"4cxl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cxl_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cxl"},{"model_identifier":"5en9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5en9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5en9"},{"model_identifier":"4p65","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-03-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4p65_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4p65"},{"model_identifier":"6s4j","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-28","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s4j_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s4j"},{"model_identifier":"6s4i","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.511,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s4i_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s4i"},{"model_identifier":"6s4i","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-28","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.511,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s4i_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s4i"},{"model_identifier":"2omg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.52,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omg_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omg"},{"model_identifier":"2omg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.52,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omg_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omg"},{"model_identifier":"4eyn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.532,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyn_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyn"},{"model_identifier":"4eyn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.532,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyn_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyn"},{"model_identifier":"5bqq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-29","sequence_identity":96.0,"uniprot_start":25,"uniprot_end":52,"resolution":1.54,"coverage":32.56,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bqq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bqq"},{"model_identifier":"5bqq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.54,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bqq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bqq"},{"model_identifier":"4exx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.55,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4exx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4exx"},{"model_identifier":"5t7r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-09-05","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.55,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5t7r_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5t7r"},{"model_identifier":"4exx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.55,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4exx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4exx"},{"model_identifier":"5t7r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-09-05","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.55,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5t7r_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5t7r"},{"model_identifier":"2wru","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":1.57,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wru_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wru"},{"model_identifier":"2wru","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.57,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wru_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wru"},{"model_identifier":"6o17","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.58,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6o17_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6o17"},{"model_identifier":"6o17","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.58,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6o17_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6o17"},{"model_identifier":"4une","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.59,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4une_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4une"},{"model_identifier":"4une","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.59,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4une_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4une"},{"model_identifier":"4eyp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.591,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyp_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyp"},{"model_identifier":"4f1b","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.591,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1b_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1b"},{"model_identifier":"4eyp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.591,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyp_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyp"},{"model_identifier":"4f1b","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.591,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1b_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1b"},{"model_identifier":"1zeg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-05-01","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1zeg_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1zeg"},{"model_identifier":"2ws1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws1"},{"model_identifier":"3zu1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-07-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zu1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zu1"},{"model_identifier":"1trz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1993-11-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1trz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1trz"},{"model_identifier":"4iuz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-22","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iuz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iuz"},{"model_identifier":"3i3z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-07-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.6,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3i3z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3i3z"},{"model_identifier":"1uz9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-03-08","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.6,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1uz9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1uz9"},{"model_identifier":"3e7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-08-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.6,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3e7y_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3e7y"},{"model_identifier":"3i3z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-07-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3i3z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3i3z"},{"model_identifier":"1zeg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1zeg_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1zeg"},{"model_identifier":"2ws1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws1"},{"model_identifier":"1uz9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-03-08","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1uz9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1uz9"},{"model_identifier":"3zu1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-07-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zu1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zu1"},{"model_identifier":"3e7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-08-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3e7y_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3e7y"},{"model_identifier":"1trz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1993-11-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1trz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1trz"},{"model_identifier":"4iuz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-22","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iuz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iuz"},{"model_identifier":"6tyh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-08","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.60001899481,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6tyh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6tyh"},{"model_identifier":"6tyh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-08","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.60001899481,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6tyh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6tyh"},{"model_identifier":"6nwv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-07","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.601,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6nwv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6nwv"},{"model_identifier":"6nwv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.601,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6nwv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6nwv"},{"model_identifier":"1guj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-01-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.62,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1guj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1guj"},{"model_identifier":"1guj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-01-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.62,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1guj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1guj"},{"model_identifier":"4f1d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1d_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1d"},{"model_identifier":"4f1g","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1g_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1g"},{"model_identifier":"4f4t","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f4t_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f4t"},{"model_identifier":"4f4v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f4v_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f4v"},{"model_identifier":"4f51","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f51_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f51"},{"model_identifier":"4f1d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1d_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1d"},{"model_identifier":"4f1g","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1g_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1g"},{"model_identifier":"4f4t","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f4t_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f4t"},{"model_identifier":"4f4v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f4v_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f4v"},{"model_identifier":"4f51","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f51_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f51"},{"model_identifier":"4ex1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.657,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ex1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ex1"},{"model_identifier":"4ex1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.657,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ex1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ex1"},{"model_identifier":"4iyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.66,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iyd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iyd"},{"model_identifier":"4iyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":1.66,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iyd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iyd"},{"model_identifier":"3utq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-11-26","sequence_identity":100.0,"uniprot_start":15,"uniprot_end":24,"resolution":1.67,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3utq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3utq"},{"model_identifier":"4f0o","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-04","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.672,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f0o_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f0o"},{"model_identifier":"4f0o","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.672,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f0o_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f0o"},{"model_identifier":"4f8f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.676,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f8f_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f8f"},{"model_identifier":"4f8f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.676,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f8f_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f8f"},{"model_identifier":"4f0n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-04","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.679,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f0n_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f0n"},{"model_identifier":"4f0n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.679,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f0n_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f0n"},{"model_identifier":"5c0d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-06-12","sequence_identity":90.0,"uniprot_start":15,"uniprot_end":24,"resolution":1.68,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5c0d_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5c0d"},{"model_identifier":"4f1f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.684,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1f_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1f"},{"model_identifier":"4f1f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.684,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1f_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1f"},{"model_identifier":"3zi3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-02","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zi3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zi3"},{"model_identifier":"4f1c","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1c_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1c"},{"model_identifier":"4cxn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-07","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cxn_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cxn"},{"model_identifier":"5cny","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5cny_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5cny"},{"model_identifier":"5co2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co2"},{"model_identifier":"2oly","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2oly_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2oly"},{"model_identifier":"2olz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2olz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2olz"},{"model_identifier":"5boq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-27","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5boq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5boq"},{"model_identifier":"5viz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-04-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.7,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5viz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5viz"},{"model_identifier":"3e7z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-08-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.7,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3e7z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3e7z"},{"model_identifier":"3zi3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zi3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zi3"},{"model_identifier":"4f1c","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1c_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1c"},{"model_identifier":"4cxn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cxn_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cxn"},{"model_identifier":"5cny","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5cny_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5cny"},{"model_identifier":"3e7z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-08-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3e7z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3e7z"},{"model_identifier":"5co2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co2"},{"model_identifier":"2oly","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2oly_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2oly"},{"model_identifier":"2olz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2olz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2olz"},{"model_identifier":"5boq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5boq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5boq"},{"model_identifier":"5viz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-04-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":1.7,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5viz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5viz"},{"model_identifier":"4rxw","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-12-12","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.73,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4rxw_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4rxw"},{"model_identifier":"4rxw","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-12-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.73,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4rxw_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4rxw"},{"model_identifier":"5bts","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-06-03","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.77,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bts_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bts"},{"model_identifier":"5bts","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-06-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.77,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bts_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bts"},{"model_identifier":"4gbc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.778,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbc_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbc"},{"model_identifier":"4gbc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.778,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbc_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbc"},{"model_identifier":"1ev3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.78,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ev3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ev3"},{"model_identifier":"1ev3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.78,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ev3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ev3"},{"model_identifier":"4ewz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.791,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ewz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ewz"},{"model_identifier":"4ewz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.791,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ewz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ewz"},{"model_identifier":"4f1a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1a_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1a"},{"model_identifier":"2vjz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2vjz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2vjz"},{"model_identifier":"1rwe","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-12-16","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1rwe_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1rwe"},{"model_identifier":"5co6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co6"},{"model_identifier":"6p4z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-05-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6p4z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6p4z"},{"model_identifier":"1xda","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-12-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.8,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xda_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xda"},{"model_identifier":"4ajz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.8,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ajz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ajz"},{"model_identifier":"4iyf","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.8,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iyf_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iyf"},{"model_identifier":"2ceu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-02-10","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":1.8,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ceu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ceu"},{"model_identifier":"4f1a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1a_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1a"},{"model_identifier":"2ceu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-02-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ceu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ceu"},{"model_identifier":"2vjz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2vjz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2vjz"},{"model_identifier":"1rwe","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-12-16","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1rwe_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1rwe"},{"model_identifier":"1xda","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-12-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xda_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xda"},{"model_identifier":"5co6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co6"},{"model_identifier":"4ajz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ajz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ajz"},{"model_identifier":"6p4z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-05-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6p4z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6p4z"},{"model_identifier":"4iyf","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":1.8,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iyf_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iyf"},{"model_identifier":"4ung","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.81,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ung_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ung"},{"model_identifier":"4ung","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.81,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ung_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ung"},{"model_identifier":"6h3m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-07-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.821,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6h3m_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6h3m"},{"model_identifier":"6h3m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-07-19","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.821,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6h3m_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6h3m"},{"model_identifier":"3inc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-12","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.85,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3inc_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3inc"},{"model_identifier":"3i40","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-07-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.85,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3i40_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3i40"},{"model_identifier":"6ves","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":95.0,"uniprot_start":25,"uniprot_end":46,"resolution":1.85,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ves_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ves"},{"model_identifier":"3i40","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-07-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.85,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3i40_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3i40"},{"model_identifier":"6ves","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.85,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ves_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ves"},{"model_identifier":"3inc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.85,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3inc_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3inc"},{"model_identifier":"4z77","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-04-06","sequence_identity":89.0,"uniprot_start":39,"uniprot_end":47,"resolution":1.85,"coverage":10.47,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4z77_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4z77"},{"model_identifier":"4ex0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.86,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ex0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ex0"},{"model_identifier":"4ex0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.86,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ex0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ex0"},{"model_identifier":"4gbn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.872,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbn_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbn"},{"model_identifier":"4gbn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.872,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbn_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbn"},{"model_identifier":"5mt9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.88,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mt9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mt9"},{"model_identifier":"5mt9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.88,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mt9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mt9"},{"model_identifier":"4z76","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-04-06","sequence_identity":89.0,"uniprot_start":39,"uniprot_end":47,"resolution":1.88,"coverage":10.47,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4z76_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4z76"},{"model_identifier":"3ilg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3ilg_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3ilg"},{"model_identifier":"3zqr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-06-10","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zqr_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zqr"},{"model_identifier":"3kq6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3kq6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3kq6"},{"model_identifier":"1ev6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ev6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ev6"},{"model_identifier":"1evr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1evr_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1evr"},{"model_identifier":"1tyl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-06-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1tyl_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1tyl"},{"model_identifier":"1tym","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-06-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1tym_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1tym"},{"model_identifier":"5bpo","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-28","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bpo_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bpo"},{"model_identifier":"1htv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-01-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":51,"resolution":1.9,"coverage":31.4,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1htv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1htv"},{"model_identifier":"2ws4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":1.9,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws4"},{"model_identifier":"1htv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-01-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1htv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1htv"},{"model_identifier":"2ws4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws4"},{"model_identifier":"3ilg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3ilg_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3ilg"},{"model_identifier":"3zqr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-06-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zqr_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zqr"},{"model_identifier":"3kq6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-17","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3kq6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3kq6"},{"model_identifier":"1ev6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ev6_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ev6"},{"model_identifier":"1evr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1evr_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1evr"},{"model_identifier":"1tyl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-06-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1tyl_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1tyl"},{"model_identifier":"1tym","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-06-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1tym_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1tym"},{"model_identifier":"5bpo","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bpo_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bpo"},{"model_identifier":"5co9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.92,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co9"},{"model_identifier":"5co9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.92,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co9"},{"model_identifier":"1os3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-03-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.95,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1os3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1os3"},{"model_identifier":"2c8q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2005-12-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.95,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2c8q_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2c8q"},{"model_identifier":"2c8q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2005-12-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.95,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2c8q_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2c8q"},{"model_identifier":"1os3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-03-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.95,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1os3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1os3"},{"model_identifier":"2om1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.97,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2om1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2om1"},{"model_identifier":"3zs2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-06-21","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.97,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zs2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zs2"},{"model_identifier":"2om1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.97,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2om1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2om1"},{"model_identifier":"3zs2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-06-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.97,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zs2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zs2"},{"model_identifier":"5uu4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-16","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.973,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu4"},{"model_identifier":"5uu4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.973,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu4"},{"model_identifier":"3u4n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-10-10","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.98,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3u4n_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3u4n"},{"model_identifier":"4efx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-03-30","sequence_identity":96.0,"uniprot_start":25,"uniprot_end":52,"resolution":1.98,"coverage":32.56,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4efx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4efx"},{"model_identifier":"3u4n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-10-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.98,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3u4n_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3u4n"},{"model_identifier":"4efx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-03-30","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.98,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4efx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4efx"},{"model_identifier":"1q4v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-08-04","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1q4v_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1q4v"},{"model_identifier":"3p2x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-10-04","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3p2x_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3p2x"},{"model_identifier":"2qiu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-07-05","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2qiu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2qiu"},{"model_identifier":"3v19","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-12-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3v19_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3v19"},{"model_identifier":"1j73","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-05-15","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1j73_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1j73"},{"model_identifier":"1qiz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qiz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qiz"},{"model_identifier":"1znj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-09-23","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1znj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1znj"},{"model_identifier":"2r36","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r36_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r36"},{"model_identifier":"2w44","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-11-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":2.0,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2w44_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2w44"},{"model_identifier":"2qiu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-07-05","sequence_identity":100.0,"uniprot_start":89,"uniprot_end":110,"resolution":2.0,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2qiu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2qiu"},{"model_identifier":"2r36","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":89,"uniprot_end":110,"resolution":2.0,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r36_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r36"},{"model_identifier":"1q4v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-08-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1q4v_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1q4v"},{"model_identifier":"3p2x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-10-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3p2x_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3p2x"},{"model_identifier":"3v19","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-12-09","sequence_identity":86.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3v19_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3v19"},{"model_identifier":"1j73","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-05-15","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1j73_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1j73"},{"model_identifier":"1qiz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qiz_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qiz"},{"model_identifier":"1znj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-09-23","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1znj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1znj"},{"model_identifier":"2w44","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-11-21","sequence_identity":100.0,"uniprot_start":94,"uniprot_end":110,"resolution":2.0,"coverage":19.77,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2w44_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2w44"},{"model_identifier":"2omq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":36,"uniprot_end":41,"resolution":2.0,"coverage":6.98,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omq"},{"model_identifier":"4fg3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-06-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.001,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4fg3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4fg3"},{"model_identifier":"4fg3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-06-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.001,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4fg3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4fg3"},{"model_identifier":"4akj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-23","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":2.01,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4akj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4akj"},{"model_identifier":"4akj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-23","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.01,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4akj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4akj"},{"model_identifier":"5mt3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.02,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mt3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mt3"},{"model_identifier":"5mt3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.02,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mt3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mt3"},{"model_identifier":"2om0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.05,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2om0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2om0"},{"model_identifier":"3q6e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-12-31","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.05,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3q6e_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3q6e"},{"model_identifier":"2om0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.05,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2om0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2om0"},{"model_identifier":"3q6e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-12-31","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.05,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3q6e_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3q6e"},{"model_identifier":"5uss","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.061,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uss_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uss"},{"model_identifier":"5uss","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.061,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uss_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uss"},{"model_identifier":"1w8p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-09-24","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.08,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1w8p_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1w8p"},{"model_identifier":"2r35","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.08,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r35_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r35"},{"model_identifier":"2r35","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":89,"uniprot_end":110,"resolution":2.08,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r35_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r35"},{"model_identifier":"1w8p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-09-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.08,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1w8p_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1w8p"},{"model_identifier":"2ws0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.1,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws0"},{"model_identifier":"2ws0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.1,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws0"},{"model_identifier":"2wrv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":2.15,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrv"},{"model_identifier":"2wrv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.15,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrv"},{"model_identifier":"6z7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-06-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6z7y_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6z7y"},{"model_identifier":"5mam","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-11-03","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mam_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mam"},{"model_identifier":"3v1g","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-12-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3v1g_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3v1g"},{"model_identifier":"2vk0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2vk0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2vk0"},{"model_identifier":"3ir0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3ir0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3ir0"},{"model_identifier":"5hpu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hpu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hpu"},{"model_identifier":"2g56","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-02-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2g56_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2g56"},{"model_identifier":"6gnq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-05-31","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6gnq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6gnq"},{"model_identifier":"6z7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-06-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6z7y_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6z7y"},{"model_identifier":"5mam","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-11-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mam_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mam"},{"model_identifier":"3v1g","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-12-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3v1g_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3v1g"},{"model_identifier":"2vk0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2vk0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2vk0"},{"model_identifier":"3ir0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3ir0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3ir0"},{"model_identifier":"5hpu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hpu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hpu"},{"model_identifier":"6gnq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-05-31","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6gnq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6gnq"},{"model_identifier":"4ewx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.201,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ewx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ewx"},{"model_identifier":"4ewx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.201,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ewx_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ewx"},{"model_identifier":"2omi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.24,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omi"},{"model_identifier":"2omi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.24,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omi"},{"model_identifier":"5uu3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-16","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu3"},{"model_identifier":"1os4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-03-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1os4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1os4"},{"model_identifier":"2g54","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-02-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2g54_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2g54"},{"model_identifier":"6ck2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-27","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ck2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ck2"},{"model_identifier":"2r34","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r34_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r34"},{"model_identifier":"2r34","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":89,"uniprot_end":110,"resolution":2.25,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r34_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r34"},{"model_identifier":"5uu3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.25,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu3"},{"model_identifier":"1os4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-03-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.25,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1os4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1os4"},{"model_identifier":"6ck2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.25,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ck2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ck2"},{"model_identifier":"4ak0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":2.28,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ak0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ak0"},{"model_identifier":"4ak0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.28,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ak0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ak0"},{"model_identifier":"3p33","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-10-04","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3p33_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3p33"},{"model_identifier":"5ems","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-06","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5ems_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5ems"},{"model_identifier":"1qiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qiy"},{"model_identifier":"1lph","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1995-04-19","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1lph_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1lph"},{"model_identifier":"3rov","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-04-26","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3rov_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3rov"},{"model_identifier":"4eww","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eww_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eww"},{"model_identifier":"1xw7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-10-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xw7_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xw7"},{"model_identifier":"3p33","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-10-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3p33_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3p33"},{"model_identifier":"5ems","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5ems_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5ems"},{"model_identifier":"1qiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qiy"},{"model_identifier":"1lph","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1995-04-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1lph_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1lph"},{"model_identifier":"3rov","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-04-26","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3rov_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3rov"},{"model_identifier":"4eww","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eww_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eww"},{"model_identifier":"1xw7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-10-29","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xw7_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xw7"},{"model_identifier":"4z78","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-04-06","sequence_identity":100.0,"uniprot_start":39,"uniprot_end":48,"resolution":2.304,"coverage":11.63,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4z78_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4z78"},{"model_identifier":"4wdi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-09-08","sequence_identity":100.0,"uniprot_start":39,"uniprot_end":47,"resolution":2.313,"coverage":10.47,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4wdi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4wdi"},{"model_identifier":"1qj0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qj0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qj0"},{"model_identifier":"4gbk","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbk_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbk"},{"model_identifier":"1qj0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qj0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qj0"},{"model_identifier":"4gbk","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbk_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbk"},{"model_identifier":"1jk8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-07-11","sequence_identity":100.0,"uniprot_start":35,"uniprot_end":47,"resolution":2.4,"coverage":15.12,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jk8_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jk8"},{"model_identifier":"5uru","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.41,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uru_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uru"},{"model_identifier":"2wrw","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":2.41,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrw_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrw"},{"model_identifier":"2wrw","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.41,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrw_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrw"},{"model_identifier":"5uru","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.41,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uru_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uru"},{"model_identifier":"6z7w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-06-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.42,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6z7w_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6z7w"},{"model_identifier":"6z7w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-06-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.42,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6z7w_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6z7w"},{"model_identifier":"1jca","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-06-08","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jca_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jca"},{"model_identifier":"3jsd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-10","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3jsd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3jsd"},{"model_identifier":"1b9e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-11-12","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1b9e_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1b9e"},{"model_identifier":"4gbl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbl_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbl"},{"model_identifier":"1jca","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-06-08","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jca_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jca"},{"model_identifier":"3jsd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3jsd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3jsd"},{"model_identifier":"1b9e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-11-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1b9e_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1b9e"},{"model_identifier":"4gbl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbl_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbl"},{"model_identifier":"4y19","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-02-07","sequence_identity":100.0,"uniprot_start":75,"uniprot_end":90,"resolution":2.5,"coverage":18.6,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4y19_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4y19"},{"model_identifier":"4gbi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.502,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbi"},{"model_identifier":"4gbi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.502,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbi"},{"model_identifier":"2ws7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":96.0,"uniprot_start":25,"uniprot_end":50,"resolution":2.59,"coverage":30.23,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws7_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws7"},{"model_identifier":"2ws7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.59,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws7_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws7"},{"model_identifier":"2wby","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-03-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":2.6,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wby_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wby"},{"model_identifier":"2wby","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-03-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":43,"resolution":2.6,"coverage":22.09,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wby_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wby"},{"model_identifier":"3utt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-11-26","sequence_identity":100.0,"uniprot_start":15,"uniprot_end":24,"resolution":2.6,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3utt_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3utt"},{"model_identifier":"3uts","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-11-26","sequence_identity":100.0,"uniprot_start":15,"uniprot_end":24,"resolution":2.712,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3uts_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3uts"},{"model_identifier":"4unh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.75,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4unh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4unh"},{"model_identifier":"4unh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.75,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4unh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4unh"},{"model_identifier":"2wc0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-03-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wc0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wc0"},{"model_identifier":"2wc0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-03-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wc0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wc0"},{"model_identifier":"5wdm","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-07-05","sequence_identity":57.0,"uniprot_start":25,"uniprot_end":110,"resolution":2.803,"coverage":66.28,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5wdm_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5wdm"},{"model_identifier":"6vep","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6vep_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6vep"},{"model_identifier":"6vep","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6vep_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6vep"},{"model_identifier":"5hyj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-02-01","sequence_identity":90.0,"uniprot_start":15,"uniprot_end":24,"resolution":3.06,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hyj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hyj"},{"model_identifier":"6hn5","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-09-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":3.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6hn5_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6hn5"},{"model_identifier":"6hn5","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-09-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":3.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6hn5_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6hn5"},{"model_identifier":"5cjo","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":3.287,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5cjo_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5cjo"},{"model_identifier":"4oga","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-01-15","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":3.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4oga_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4oga"},{"model_identifier":"4oga","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-01-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":3.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4oga_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4oga"},{"model_identifier":"6b70","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-10-03","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":3.7,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6b70_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6b70"},{"model_identifier":"6b3q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-09-22","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":3.7,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6b3q_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6b3q"},{"model_identifier":"6bfc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-10-26","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":3.7,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6bfc_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6bfc"},{"model_identifier":"7bw8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-04-14","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":110,"resolution":3.8,"coverage":86.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7bw8_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7bw8"},{"model_identifier":"3w11","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":3.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w11_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w11"},{"model_identifier":"3w11","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":3.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w11_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w11"},{"model_identifier":"5wob","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-08-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":3.95,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5wob_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5wob"},{"model_identifier":"4y1a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-02-07","sequence_identity":100.0,"uniprot_start":75,"uniprot_end":90,"resolution":4.0,"coverage":18.6,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4y1a_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4y1a"},{"model_identifier":"7bw7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-04-13","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":110,"resolution":4.1,"coverage":86.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7bw7_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7bw7"},{"model_identifier":"6sof","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":4.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6sof_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6sof"},{"model_identifier":"6ce9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ce9_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ce9"},{"model_identifier":"6sof","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6sof_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6sof"},{"model_identifier":"3w12","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":4.301,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w12_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w12"},{"model_identifier":"3w12","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.301,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w12_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w12"},{"model_identifier":"3w13","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":4.303,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w13_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w13"},{"model_identifier":"3w13","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.303,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w13_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w13"},{"model_identifier":"6jk8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-27","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":4.7,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6jk8_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6jk8"},{"model_identifier":"6ceb","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ceb_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ceb"},{"model_identifier":"7bwa","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-04-14","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":110,"resolution":4.9,"coverage":86.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7bwa_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7bwa"},{"model_identifier":"6ce7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":7.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ce7_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ce7"},{"model_identifier":"6jr3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-04-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":14.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6jr3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6jr3"},{"model_identifier":"6jr3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-04-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":14.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6jr3_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6jr3"},{"model_identifier":"2kqp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-12","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":110,"resolution":null,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kqp_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kqp"},{"model_identifier":"1efe","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-02-08","sequence_identity":65.0,"uniprot_start":25,"uniprot_end":110,"resolution":null,"coverage":69.77,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1efe_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1efe"},{"model_identifier":"6u46","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-23","sequence_identity":61.0,"uniprot_start":25,"uniprot_end":109,"resolution":null,"coverage":67.44,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6u46_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6u46"},{"model_identifier":"1sju","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-10-09","sequence_identity":56.0,"uniprot_start":25,"uniprot_end":110,"resolution":null,"coverage":58.14,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sju_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sju"},{"model_identifier":"5mwq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-19","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":56,"resolution":null,"coverage":37.21,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mwq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mwq"},{"model_identifier":"6k59","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-05-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":56,"resolution":null,"coverage":37.21,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6k59_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6k59"},{"model_identifier":"1t0c","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-08","sequence_identity":100.0,"uniprot_start":57,"uniprot_end":87,"resolution":null,"coverage":36.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t0c_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t0c"},{"model_identifier":"5mhd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-11-24","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":55,"resolution":null,"coverage":36.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mhd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mhd"},{"model_identifier":"2lgb","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-07-25","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":55,"resolution":null,"coverage":36.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2lgb_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2lgb"},{"model_identifier":"2mvd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-10-02","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mvd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mvd"},{"model_identifier":"2mvc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-10-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mvc_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mvc"},{"model_identifier":"1k3m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-10-03","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1k3m_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1k3m"},{"model_identifier":"2juu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-03","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2juu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2juu"},{"model_identifier":"1hiq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1993-03-05","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hiq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hiq"},{"model_identifier":"2juv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-05","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2juv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2juv"},{"model_identifier":"2rn5","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2rn5_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2rn5"},{"model_identifier":"2kxk","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-05-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kxk_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kxk"},{"model_identifier":"2hiu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-08","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hiu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hiu"},{"model_identifier":"2l1y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-08-09","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2l1y_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2l1y"},{"model_identifier":"2l1z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-08-09","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2l1z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2l1z"},{"model_identifier":"2kju","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-06-10","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kju_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kju"},{"model_identifier":"1xgl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-10","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xgl_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xgl"},{"model_identifier":"1jco","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-06-11","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jco_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jco"},{"model_identifier":"2jv1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jv1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jv1"},{"model_identifier":"2kqq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-13","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kqq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kqq"},{"model_identifier":"1fu2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-09-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1fu2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1fu2"},{"model_identifier":"1kmf","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-12-14","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1kmf_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1kmf"},{"model_identifier":"1vkt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-14","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1vkt_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1vkt"},{"model_identifier":"1fub","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-09-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1fub_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1fub"},{"model_identifier":"2n2x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2x_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2x"},{"model_identifier":"2n2v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2v_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2v"},{"model_identifier":"2n2w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2w_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2w"},{"model_identifier":"1t1k","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1k_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1k"},{"model_identifier":"1t1p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1p_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1p"},{"model_identifier":"1t1q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1q_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1q"},{"model_identifier":"2mpg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-17","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mpg_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mpg"},{"model_identifier":"1sf1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-02-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sf1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sf1"},{"model_identifier":"2mpi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-19","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mpi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mpi"},{"model_identifier":"2jmn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-11-21","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jmn_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jmn"},{"model_identifier":"2k9r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-10-23","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2k9r_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2k9r"},{"model_identifier":"6x4x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-05-24","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6x4x_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6x4x"},{"model_identifier":"1lkq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-04-25","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1lkq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1lkq"},{"model_identifier":"2m1d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-26","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m1d_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m1d"},{"model_identifier":"2m1e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-26","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m1e_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m1e"},{"model_identifier":"2mli","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-02-27","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mli_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mli"},{"model_identifier":"2hh4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-06-27","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hh4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hh4"},{"model_identifier":"2m2m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2m_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2m"},{"model_identifier":"2aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2aiy"},{"model_identifier":"1hit","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1992-02-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hit_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hit"},{"model_identifier":"2hho","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-06-28","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hho_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hho"},{"model_identifier":"1hls","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1995-06-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hls_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hls"},{"model_identifier":"2m2n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2n_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2n"},{"model_identifier":"2m2o","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2o_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2o"},{"model_identifier":"2m2p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2p_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2p"},{"model_identifier":"3aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3aiy"},{"model_identifier":"4aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4aiy"},{"model_identifier":"5aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5aiy"},{"model_identifier":"2kjj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-05-29","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kjj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kjj"},{"model_identifier":"2k91","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-09-29","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2k91_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2k91"},{"model_identifier":"1ai0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-04-30","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ai0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ai0"},{"model_identifier":"1aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-04-30","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1aiy"},{"model_identifier":"2h67","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-05-30","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2h67_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2h67"},{"model_identifier":"1mhi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-11-30","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mhi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mhi"},{"model_identifier":"2jum","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-31","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jum_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jum"},{"model_identifier":"1sjt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-10-09","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":53,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sjt_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sjt"},{"model_identifier":"1a7f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-03-12","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":53,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1a7f_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1a7f"},{"model_identifier":"1iog","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-08-13","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":53,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1iog_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1iog"},{"model_identifier":"1ioh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-08-13","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":53,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ioh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ioh"},{"model_identifier":"1mhj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-11-30","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mhj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mhj"},{"model_identifier":"1hui","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-03-29","sequence_identity":89.0,"uniprot_start":26,"uniprot_end":53,"resolution":null,"coverage":32.56,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hui_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hui"},{"model_identifier":"1his","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1992-02-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":null,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1his_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1his"},{"model_identifier":"2mvc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-10-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mvc_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mvc"},{"model_identifier":"2mvd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-10-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mvd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mvd"},{"model_identifier":"1k3m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-10-03","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1k3m_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1k3m"},{"model_identifier":"2juu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-03","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2juu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2juu"},{"model_identifier":"1hiq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1993-03-05","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hiq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hiq"},{"model_identifier":"2juv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-05","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2juv_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2juv"},{"model_identifier":"2rn5","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2rn5_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2rn5"},{"model_identifier":"2kxk","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-05-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kxk_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kxk"},{"model_identifier":"2hiu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-08","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hiu_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hiu"},{"model_identifier":"2l1z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-08-09","sequence_identity":86.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2l1z_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2l1z"},{"model_identifier":"2l1y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-08-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2l1y_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2l1y"},{"model_identifier":"1sjt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-10-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sjt_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sjt"},{"model_identifier":"2kju","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-06-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kju_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kju"},{"model_identifier":"1xgl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xgl_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xgl"},{"model_identifier":"1jco","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-06-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jco_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jco"},{"model_identifier":"2jv1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jv1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jv1"},{"model_identifier":"1a7f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-03-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1a7f_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1a7f"},{"model_identifier":"1iog","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-08-13","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1iog_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1iog"},{"model_identifier":"1ioh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-08-13","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ioh_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ioh"},{"model_identifier":"2kqq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kqq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kqq"},{"model_identifier":"1fu2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-09-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1fu2_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1fu2"},{"model_identifier":"1kmf","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-12-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1kmf_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1kmf"},{"model_identifier":"1vkt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-14","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1vkt_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1vkt"},{"model_identifier":"1fub","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-09-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1fub_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1fub"},{"model_identifier":"2n2v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2v_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2v"},{"model_identifier":"2n2w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2w_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2w"},{"model_identifier":"2n2x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2x_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2x"},{"model_identifier":"1t1k","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1k_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1k"},{"model_identifier":"1t1p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1p_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1p"},{"model_identifier":"1t1q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1q_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1q"},{"model_identifier":"2mpg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mpg_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mpg"},{"model_identifier":"1sf1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-02-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sf1_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sf1"},{"model_identifier":"5mwq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-19","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mwq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mwq"},{"model_identifier":"2mpi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mpi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mpi"},{"model_identifier":"2jmn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-11-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jmn_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jmn"},{"model_identifier":"2k9r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-10-23","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2k9r_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2k9r"},{"model_identifier":"6x4x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-05-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6x4x_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6x4x"},{"model_identifier":"5mhd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-11-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mhd_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mhd"},{"model_identifier":"1lkq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-04-25","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1lkq_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1lkq"},{"model_identifier":"2lgb","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-07-25","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2lgb_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2lgb"},{"model_identifier":"2m1d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-26","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m1d_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m1d"},{"model_identifier":"2m1e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-26","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m1e_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m1e"},{"model_identifier":"2mli","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-02-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mli_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mli"},{"model_identifier":"2hh4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-06-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hh4_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hh4"},{"model_identifier":"2m2m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2m_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2m"},{"model_identifier":"2aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2aiy"},{"model_identifier":"1his","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1992-02-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1his_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1his"},{"model_identifier":"1hit","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1992-02-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hit_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hit"},{"model_identifier":"2hho","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-06-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hho_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hho"},{"model_identifier":"1hls","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1995-06-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hls_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hls"},{"model_identifier":"2m2n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2n_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2n"},{"model_identifier":"2m2o","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2o_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2o"},{"model_identifier":"2m2p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2p_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2p"},{"model_identifier":"3aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3aiy"},{"model_identifier":"4aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4aiy"},{"model_identifier":"5aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5aiy"},{"model_identifier":"1hui","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-03-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hui_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hui"},{"model_identifier":"2kjj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-05-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kjj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kjj"},{"model_identifier":"2k91","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-09-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2k91_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2k91"},{"model_identifier":"1ai0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-04-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ai0_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ai0"},{"model_identifier":"1aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-04-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1aiy_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1aiy"},{"model_identifier":"2h67","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-05-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2h67_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2h67"},{"model_identifier":"1mhi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-11-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mhi_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mhi"},{"model_identifier":"1mhj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-11-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mhj_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mhj"},{"model_identifier":"2jum","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-31","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jum_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jum"},{"model_identifier":"6k59","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":null,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6k59_updated.cif","model_format":"MMCIF","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6k59"},{"model_identifier":"PED00094e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00094e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00094","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00094e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00095e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00095e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00095","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00095e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00104e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00104e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00104","number_of_conformers":50,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00104e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00104e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00104e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00104","number_of_conformers":50,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00104e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00103e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00103e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00103","number_of_conformers":30,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00103e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00102e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00102e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00102","number_of_conformers":40,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00102e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00093e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00093e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00093","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00093e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00094e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00094e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00094","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00094e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00093e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00093e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00093","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00093e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00101e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00101e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00101","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00101e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00096e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00096e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00096","number_of_conformers":35,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00096e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00096e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00096e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00096","number_of_conformers":35,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00096e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00095e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00095e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00095","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00095e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00101e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":26,"uniprot_end":53,"model_url":"https://proteinensemble.org/api/ensemble/PED00101e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00101","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00101e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00102e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00102e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00102","number_of_conformers":40,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00102e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00103e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00103e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00103","number_of_conformers":30,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00103e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"61401d20ccef3f8332871ea3","model_category":"TEMPLATE-BASED","provider":"SWISS-MODEL","created":"2021-09-14","sequence_identity":1.0,"uniprot_start":25,"uniprot_end":110,"coverage":0.782,"confidence_version":"4.2.0","confidence_avg_local_score":0.526,"model_url":"https://swissmodel.expasy.org/3d-beacons/uniprot/P01308.pdb?range=25-110&template=2lwz.1.A&provider=swissmodel","model_format":"PDB","confidence_type":"QMEANDisCo"},{"model_identifier":"AF-P01308-F1","model_category":"DEEP-LEARNING","provider":"AlphaFold DB","created":"2021-07-01","sequence_identity":1.0,"uniprot_start":1,"uniprot_end":110,"coverage":100.0,"model_url":"https://alphafold.ebi.ac.uk/files/AF-P01308-F1-model_v1.cif","model_format":"MMCIF","model_page_url":"https://alphafold.ebi.ac.uk/entry/P01308"},{"model_identifier":"2400","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2018-11-11","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDE25_fit1_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDE25"},{"model_identifier":"2396","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2018-11-11","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDE25_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDE25"},{"model_identifier":"2452","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEV5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEV5"},{"model_identifier":"2453","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEV5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEV5"},{"model_identifier":"2456","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEW5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEW5"},{"model_identifier":"2457","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEW5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEW5"},{"model_identifier":"2459","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEX5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEX5"},{"model_identifier":"2460","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEX5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEX5"},{"model_identifier":"2462","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEY5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEY5"},{"model_identifier":"2463","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEY5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEY5"},{"model_identifier":"2465","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEZ5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEZ5"},{"model_identifier":"2467","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEZ5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEZ5"},{"model_identifier":"2469","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDE26_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDE26"},{"model_identifier":"2470","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDE26_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDE26"},{"model_identifier":"4420","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2020-12-18","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDJY3_fit1_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDJY3"},{"model_identifier":"4421","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2020-12-18","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDJY3_fit1_model2.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDJY3"},{"model_identifier":"4422","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2020-12-18","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDJZ3_fit1_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDJZ3"},{"model_identifier":"4423","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2020-12-18","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDJZ3_fit1_model2.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDJZ3"}]}
\ No newline at end of file
+{"uniprot_entry":{"sequence_length":110,"ac":"P01308","id":"INS_HUMAN"},"structures":[{"model_identifier":"3w7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":0.92,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w7y_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w7y"},{"model_identifier":"3w7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":0.92,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w7y_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w7y"},{"model_identifier":"5e7w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-10-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":0.9519,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5e7w_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5e7w"},{"model_identifier":"5e7w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-10-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":0.9519,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5e7w_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5e7w"},{"model_identifier":"5hqi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":0.97,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hqi_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hqi"},{"model_identifier":"5hqi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":0.97,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hqi_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hqi"},{"model_identifier":"1mso","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-09-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mso_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mso"},{"model_identifier":"1mso","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-09-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mso_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mso"},{"model_identifier":"3hyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-06-22","sequence_identity":100.0,"uniprot_start":35,"uniprot_end":41,"resolution":1.0,"coverage":8.14,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3hyd_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3hyd"},{"model_identifier":"6ver","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":91.0,"uniprot_start":25,"uniprot_end":46,"resolution":1.047,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ver_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ver"},{"model_identifier":"6ver","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.047,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ver_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ver"},{"model_identifier":"4fka","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-06-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.08,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4fka_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4fka"},{"model_identifier":"4fka","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-06-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.08,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4fka_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4fka"},{"model_identifier":"3tt8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-09-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.12,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3tt8_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3tt8"},{"model_identifier":"3tt8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-09-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.12,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3tt8_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3tt8"},{"model_identifier":"3w7z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.15,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w7z_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w7z"},{"model_identifier":"3w7z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.15,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w7z_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w7z"},{"model_identifier":"5usp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.174,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5usp_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5usp"},{"model_identifier":"5usp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.174,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5usp_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5usp"},{"model_identifier":"5uoz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.17463871031,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uoz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uoz"},{"model_identifier":"5uoz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.17463871031,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uoz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uoz"},{"model_identifier":"5urt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-12","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.18,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5urt_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5urt"},{"model_identifier":"5urt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.18,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5urt_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5urt"},{"model_identifier":"1g7a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-11-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1g7a_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1g7a"},{"model_identifier":"4ajx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.2,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ajx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ajx"},{"model_identifier":"1g7a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-11-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1g7a_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1g7a"},{"model_identifier":"4ajx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ajx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ajx"},{"model_identifier":"5uu2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-15","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.223,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu2"},{"model_identifier":"5uu2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.223,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu2"},{"model_identifier":"6gv0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-06-20","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.26,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6gv0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6gv0"},{"model_identifier":"6gv0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-06-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.26,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6gv0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6gv0"},{"model_identifier":"5hrq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-24","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.28,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hrq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hrq"},{"model_identifier":"5hrq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.28,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hrq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hrq"},{"model_identifier":"1g7b","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-11-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1g7b_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1g7b"},{"model_identifier":"5usv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-14","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5usv_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5usv"},{"model_identifier":"3bxq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-01-14","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3bxq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3bxq"},{"model_identifier":"1g7b","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-11-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1g7b_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1g7b"},{"model_identifier":"5usv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5usv_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5usv"},{"model_identifier":"3bxq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-01-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3bxq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3bxq"},{"model_identifier":"5uqa","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.31000248093,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uqa_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uqa"},{"model_identifier":"5uqa","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.31000248093,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uqa_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uqa"},{"model_identifier":"5hpr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.33,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hpr_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hpr"},{"model_identifier":"5hpr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.33,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hpr_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hpr"},{"model_identifier":"5udp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-12-28","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.348,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5udp_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5udp"},{"model_identifier":"5udp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-12-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.348,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5udp_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5udp"},{"model_identifier":"3fq9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-01-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.35,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3fq9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3fq9"},{"model_identifier":"5ena","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.35,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5ena_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5ena"},{"model_identifier":"3exx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-10-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.35,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3exx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3exx"},{"model_identifier":"6s34","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-24","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.35,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s34_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s34"},{"model_identifier":"5ena","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.35,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5ena_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5ena"},{"model_identifier":"3exx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-10-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.35,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3exx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3exx"},{"model_identifier":"6s34","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.35,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s34_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s34"},{"model_identifier":"3fq9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-01-07","sequence_identity":95.0,"uniprot_start":91,"uniprot_end":110,"resolution":1.35,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3fq9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3fq9"},{"model_identifier":"6tc2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-11-04","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":1.36,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6tc2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6tc2"},{"model_identifier":"2omh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.36,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omh_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omh"},{"model_identifier":"2omh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.36,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omh_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omh"},{"model_identifier":"4nib","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-11-05","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4nib_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4nib"},{"model_identifier":"4cy7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-10","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cy7_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cy7"},{"model_identifier":"3w80","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w80_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w80"},{"model_identifier":"1ben","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-02-15","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ben_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ben"},{"model_identifier":"7nhu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2021-02-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.4,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7nhu_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7nhu"},{"model_identifier":"4nib","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-11-05","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4nib_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4nib"},{"model_identifier":"4cy7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cy7_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cy7"},{"model_identifier":"7nhu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2021-02-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7nhu_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7nhu"},{"model_identifier":"3w80","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-03-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w80_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w80"},{"model_identifier":"1ben","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-02-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ben_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ben"},{"model_identifier":"6vet","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":91.0,"uniprot_start":25,"uniprot_end":46,"resolution":1.46,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6vet_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6vet"},{"model_identifier":"6vet","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.46,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6vet_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6vet"},{"model_identifier":"4ey1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.471,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ey1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ey1"},{"model_identifier":"4ey9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.471,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ey9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ey9"},{"model_identifier":"4eyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.471,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyd_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyd"},{"model_identifier":"4ey1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.471,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ey1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ey1"},{"model_identifier":"4ey9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.471,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ey9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ey9"},{"model_identifier":"4eyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.471,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyd_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyd"},{"model_identifier":"4xc4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-12-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.499,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4xc4_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4xc4"},{"model_identifier":"4xc4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-12-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.499,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4xc4_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4xc4"},{"model_identifier":"1zeh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-05-01","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1zeh_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1zeh"},{"model_identifier":"2wrx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrx"},{"model_identifier":"2ws6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws6"},{"model_identifier":"2ws6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws6"},{"model_identifier":"4cxl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-07","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cxl_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cxl"},{"model_identifier":"5en9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5en9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5en9"},{"model_identifier":"4p65","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-03-21","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4p65_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4p65"},{"model_identifier":"2c8r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2005-12-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.5,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2c8r_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2c8r"},{"model_identifier":"6s4j","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-28","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.5,"coverage":32.56,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s4j_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s4j"},{"model_identifier":"1zeh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1zeh_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1zeh"},{"model_identifier":"2wrx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrx"},{"model_identifier":"2ws6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws6"},{"model_identifier":"2c8r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2005-12-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2c8r_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2c8r"},{"model_identifier":"4cxl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cxl_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cxl"},{"model_identifier":"5en9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5en9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5en9"},{"model_identifier":"4p65","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-03-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4p65_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4p65"},{"model_identifier":"6s4j","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-28","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s4j_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s4j"},{"model_identifier":"6s4i","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.511,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s4i_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s4i"},{"model_identifier":"6s4i","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-06-28","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.511,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6s4i_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6s4i"},{"model_identifier":"2omg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.52,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omg_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omg"},{"model_identifier":"2omg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.52,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omg_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omg"},{"model_identifier":"4eyn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.532,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyn_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyn"},{"model_identifier":"4eyn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.532,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyn_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyn"},{"model_identifier":"5bqq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-29","sequence_identity":96.0,"uniprot_start":25,"uniprot_end":52,"resolution":1.54,"coverage":32.56,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bqq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bqq"},{"model_identifier":"5bqq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.54,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bqq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bqq"},{"model_identifier":"4exx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.55,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4exx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4exx"},{"model_identifier":"5t7r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-09-05","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.55,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5t7r_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5t7r"},{"model_identifier":"4exx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.55,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4exx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4exx"},{"model_identifier":"5t7r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-09-05","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.55,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5t7r_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5t7r"},{"model_identifier":"2wru","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":1.57,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wru_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wru"},{"model_identifier":"2wru","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.57,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wru_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wru"},{"model_identifier":"6o17","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.58,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6o17_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6o17"},{"model_identifier":"6o17","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.58,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6o17_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6o17"},{"model_identifier":"4une","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.59,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4une_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4une"},{"model_identifier":"4une","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.59,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4une_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4une"},{"model_identifier":"4eyp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.591,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyp_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyp"},{"model_identifier":"4f1b","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.591,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1b_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1b"},{"model_identifier":"4eyp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.591,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eyp_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eyp"},{"model_identifier":"4f1b","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.591,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1b_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1b"},{"model_identifier":"1zeg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-05-01","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1zeg_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1zeg"},{"model_identifier":"2ws1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws1"},{"model_identifier":"3zu1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-07-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zu1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zu1"},{"model_identifier":"1trz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1993-11-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1trz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1trz"},{"model_identifier":"4iuz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-22","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.6,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iuz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iuz"},{"model_identifier":"3i3z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-07-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.6,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3i3z_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3i3z"},{"model_identifier":"1uz9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-03-08","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.6,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1uz9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1uz9"},{"model_identifier":"3e7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-08-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.6,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3e7y_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3e7y"},{"model_identifier":"3i3z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-07-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3i3z_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3i3z"},{"model_identifier":"1zeg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-05-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1zeg_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1zeg"},{"model_identifier":"2ws1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws1"},{"model_identifier":"1uz9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-03-08","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1uz9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1uz9"},{"model_identifier":"3zu1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-07-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zu1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zu1"},{"model_identifier":"3e7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-08-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3e7y_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3e7y"},{"model_identifier":"1trz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1993-11-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1trz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1trz"},{"model_identifier":"4iuz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-22","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.6,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iuz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iuz"},{"model_identifier":"6tyh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-08","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.60001899481,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6tyh_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6tyh"},{"model_identifier":"6tyh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-08","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.60001899481,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6tyh_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6tyh"},{"model_identifier":"6nwv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-07","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.601,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6nwv_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6nwv"},{"model_identifier":"6nwv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.601,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6nwv_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6nwv"},{"model_identifier":"1guj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-01-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.62,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1guj_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1guj"},{"model_identifier":"1guj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-01-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.62,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1guj_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1guj"},{"model_identifier":"4f1d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1d_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1d"},{"model_identifier":"4f1g","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1g_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1g"},{"model_identifier":"4f4t","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f4t_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f4t"},{"model_identifier":"4f4v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f4v_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f4v"},{"model_identifier":"4f51","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.637,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f51_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f51"},{"model_identifier":"4f1d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1d_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1d"},{"model_identifier":"4f1g","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1g_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1g"},{"model_identifier":"4f4t","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f4t_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f4t"},{"model_identifier":"4f4v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f4v_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f4v"},{"model_identifier":"4f51","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.637,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f51_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f51"},{"model_identifier":"4ex1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.657,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ex1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ex1"},{"model_identifier":"4ex1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.657,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ex1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ex1"},{"model_identifier":"4iyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.66,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iyd_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iyd"},{"model_identifier":"4iyd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":1.66,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iyd_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iyd"},{"model_identifier":"3utq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-11-26","sequence_identity":100.0,"uniprot_start":15,"uniprot_end":24,"resolution":1.67,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3utq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3utq"},{"model_identifier":"4f0o","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-04","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.672,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f0o_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f0o"},{"model_identifier":"4f0o","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.672,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f0o_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f0o"},{"model_identifier":"4f8f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.676,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f8f_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f8f"},{"model_identifier":"4f8f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.676,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f8f_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f8f"},{"model_identifier":"4f0n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-04","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.679,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f0n_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f0n"},{"model_identifier":"4f0n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.679,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f0n_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f0n"},{"model_identifier":"5c0d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-06-12","sequence_identity":90.0,"uniprot_start":15,"uniprot_end":24,"resolution":1.68,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5c0d_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5c0d"},{"model_identifier":"4f1f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.684,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1f_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1f"},{"model_identifier":"4f1f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.684,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1f_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1f"},{"model_identifier":"3zi3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-02","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zi3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zi3"},{"model_identifier":"4f1c","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1c_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1c"},{"model_identifier":"4cxn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-07","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cxn_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cxn"},{"model_identifier":"5cny","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5cny_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5cny"},{"model_identifier":"5co2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co2"},{"model_identifier":"2oly","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2oly_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2oly"},{"model_identifier":"2olz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2olz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2olz"},{"model_identifier":"5boq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-27","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.7,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5boq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5boq"},{"model_identifier":"5viz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-04-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.7,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5viz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5viz"},{"model_identifier":"3e7z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-08-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.7,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3e7z_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3e7z"},{"model_identifier":"3zi3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zi3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zi3"},{"model_identifier":"4f1c","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1c_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1c"},{"model_identifier":"4cxn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-04-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4cxn_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4cxn"},{"model_identifier":"5cny","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5cny_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5cny"},{"model_identifier":"3e7z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-08-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3e7z_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3e7z"},{"model_identifier":"5co2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co2"},{"model_identifier":"2oly","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2oly_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2oly"},{"model_identifier":"2olz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2olz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2olz"},{"model_identifier":"5boq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5boq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5boq"},{"model_identifier":"5viz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-04-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":1.7,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5viz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5viz"},{"model_identifier":"4rxw","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-12-12","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.73,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4rxw_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4rxw"},{"model_identifier":"4rxw","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-12-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.73,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4rxw_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4rxw"},{"model_identifier":"5bts","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-06-03","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.77,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bts_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bts"},{"model_identifier":"5bts","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-06-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.77,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bts_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bts"},{"model_identifier":"4gbc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.778,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbc_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbc"},{"model_identifier":"4gbc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.778,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbc_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbc"},{"model_identifier":"1ev3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.78,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ev3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ev3"},{"model_identifier":"1ev3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.78,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ev3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ev3"},{"model_identifier":"4ewz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.791,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ewz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ewz"},{"model_identifier":"4ewz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.791,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ewz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ewz"},{"model_identifier":"4f1a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1a_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1a"},{"model_identifier":"2vjz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2vjz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2vjz"},{"model_identifier":"1rwe","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-12-16","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1rwe_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1rwe"},{"model_identifier":"5co6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co6"},{"model_identifier":"6p4z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-05-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6p4z_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6p4z"},{"model_identifier":"1xda","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-12-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.8,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xda_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xda"},{"model_identifier":"4ajz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.8,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ajz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ajz"},{"model_identifier":"4iyf","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.8,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iyf_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iyf"},{"model_identifier":"2ceu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-02-10","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":1.8,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ceu_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ceu"},{"model_identifier":"4f1a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-05-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4f1a_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4f1a"},{"model_identifier":"2ceu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-02-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ceu_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ceu"},{"model_identifier":"2vjz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2vjz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2vjz"},{"model_identifier":"1rwe","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-12-16","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1rwe_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1rwe"},{"model_identifier":"1xda","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-12-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xda_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xda"},{"model_identifier":"5co6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co6"},{"model_identifier":"4ajz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ajz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ajz"},{"model_identifier":"6p4z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-05-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6p4z_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6p4z"},{"model_identifier":"4iyf","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2013-01-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":1.8,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4iyf_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4iyf"},{"model_identifier":"4ung","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.81,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ung_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ung"},{"model_identifier":"4ung","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.81,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ung_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ung"},{"model_identifier":"6h3m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-07-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.821,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6h3m_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6h3m"},{"model_identifier":"6h3m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-07-19","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.821,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6h3m_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6h3m"},{"model_identifier":"3inc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-12","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.85,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3inc_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3inc"},{"model_identifier":"3i40","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-07-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.85,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3i40_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3i40"},{"model_identifier":"6ves","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":95.0,"uniprot_start":25,"uniprot_end":46,"resolution":1.85,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ves_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ves"},{"model_identifier":"3i40","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-07-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.85,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3i40_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3i40"},{"model_identifier":"6ves","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.85,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ves_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ves"},{"model_identifier":"3inc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.85,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3inc_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3inc"},{"model_identifier":"4z77","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-04-06","sequence_identity":89.0,"uniprot_start":39,"uniprot_end":47,"resolution":1.85,"coverage":10.47,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4z77_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4z77"},{"model_identifier":"4ex0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.86,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ex0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ex0"},{"model_identifier":"4ex0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.86,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ex0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ex0"},{"model_identifier":"4gbn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.872,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbn_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbn"},{"model_identifier":"4gbn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.872,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbn_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbn"},{"model_identifier":"5mt9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.88,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mt9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mt9"},{"model_identifier":"5mt9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.88,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mt9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mt9"},{"model_identifier":"4z76","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-04-06","sequence_identity":89.0,"uniprot_start":39,"uniprot_end":47,"resolution":1.88,"coverage":10.47,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4z76_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4z76"},{"model_identifier":"3ilg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3ilg_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3ilg"},{"model_identifier":"3zqr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-06-10","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zqr_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zqr"},{"model_identifier":"3kq6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-17","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3kq6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3kq6"},{"model_identifier":"1ev6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ev6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ev6"},{"model_identifier":"1evr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1evr_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1evr"},{"model_identifier":"1tyl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-06-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1tyl_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1tyl"},{"model_identifier":"1tym","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-06-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1tym_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1tym"},{"model_identifier":"5bpo","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-28","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bpo_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bpo"},{"model_identifier":"1htv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-01-01","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":51,"resolution":1.9,"coverage":31.4,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1htv_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1htv"},{"model_identifier":"2ws4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":1.9,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws4_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws4"},{"model_identifier":"1htv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-01-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1htv_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1htv"},{"model_identifier":"2ws4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws4_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws4"},{"model_identifier":"3ilg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3ilg_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3ilg"},{"model_identifier":"3zqr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-06-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zqr_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zqr"},{"model_identifier":"3kq6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-17","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3kq6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3kq6"},{"model_identifier":"1ev6","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ev6_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ev6"},{"model_identifier":"1evr","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-04-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1evr_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1evr"},{"model_identifier":"1tyl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-06-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1tyl_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1tyl"},{"model_identifier":"1tym","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-06-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1tym_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1tym"},{"model_identifier":"5bpo","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5bpo_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5bpo"},{"model_identifier":"5co9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.92,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co9"},{"model_identifier":"5co9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.92,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5co9_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5co9"},{"model_identifier":"1os3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-03-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.95,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1os3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1os3"},{"model_identifier":"2c8q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2005-12-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.95,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2c8q_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2c8q"},{"model_identifier":"2c8q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2005-12-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.95,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2c8q_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2c8q"},{"model_identifier":"1os3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-03-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.95,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1os3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1os3"},{"model_identifier":"2om1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.97,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2om1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2om1"},{"model_identifier":"3zs2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-06-21","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.97,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zs2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zs2"},{"model_identifier":"2om1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.97,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2om1_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2om1"},{"model_identifier":"3zs2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-06-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.97,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3zs2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3zs2"},{"model_identifier":"5uu4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-16","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":1.973,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu4_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu4"},{"model_identifier":"5uu4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.973,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu4_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu4"},{"model_identifier":"3u4n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-10-10","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":53,"resolution":1.98,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3u4n_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3u4n"},{"model_identifier":"4efx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-03-30","sequence_identity":96.0,"uniprot_start":25,"uniprot_end":52,"resolution":1.98,"coverage":32.56,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4efx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4efx"},{"model_identifier":"3u4n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-10-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.98,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3u4n_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3u4n"},{"model_identifier":"4efx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-03-30","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":1.98,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4efx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4efx"},{"model_identifier":"1q4v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-08-04","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1q4v_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1q4v"},{"model_identifier":"3p2x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-10-04","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3p2x_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3p2x"},{"model_identifier":"2qiu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-07-05","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2qiu_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2qiu"},{"model_identifier":"3v19","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-12-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3v19_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3v19"},{"model_identifier":"1j73","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-05-15","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1j73_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1j73"},{"model_identifier":"1qiz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qiz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qiz"},{"model_identifier":"1znj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-09-23","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1znj_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1znj"},{"model_identifier":"2r36","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.0,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r36_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r36"},{"model_identifier":"2w44","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-11-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":2.0,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2w44_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2w44"},{"model_identifier":"2qiu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-07-05","sequence_identity":100.0,"uniprot_start":89,"uniprot_end":110,"resolution":2.0,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2qiu_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2qiu"},{"model_identifier":"2r36","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":89,"uniprot_end":110,"resolution":2.0,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r36_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r36"},{"model_identifier":"1q4v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-08-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1q4v_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1q4v"},{"model_identifier":"3p2x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-10-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3p2x_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3p2x"},{"model_identifier":"3v19","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-12-09","sequence_identity":86.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3v19_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3v19"},{"model_identifier":"1j73","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-05-15","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1j73_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1j73"},{"model_identifier":"1qiz","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qiz_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qiz"},{"model_identifier":"1znj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-09-23","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.0,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1znj_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1znj"},{"model_identifier":"2w44","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-11-21","sequence_identity":100.0,"uniprot_start":94,"uniprot_end":110,"resolution":2.0,"coverage":19.77,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2w44_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2w44"},{"model_identifier":"2omq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":36,"uniprot_end":41,"resolution":2.0,"coverage":6.98,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omq"},{"model_identifier":"4fg3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-06-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.001,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4fg3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4fg3"},{"model_identifier":"4fg3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-06-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.001,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4fg3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4fg3"},{"model_identifier":"4akj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-23","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":2.01,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4akj_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4akj"},{"model_identifier":"4akj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-23","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.01,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4akj_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4akj"},{"model_identifier":"5mt3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.02,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mt3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mt3"},{"model_identifier":"5mt3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.02,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mt3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mt3"},{"model_identifier":"2om0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.05,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2om0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2om0"},{"model_identifier":"3q6e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-12-31","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.05,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3q6e_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3q6e"},{"model_identifier":"2om0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-20","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.05,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2om0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2om0"},{"model_identifier":"3q6e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-12-31","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.05,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3q6e_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3q6e"},{"model_identifier":"5uss","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.061,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uss_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uss"},{"model_identifier":"5uss","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.061,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uss_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uss"},{"model_identifier":"1w8p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-09-24","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.08,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1w8p_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1w8p"},{"model_identifier":"2r35","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.08,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r35_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r35"},{"model_identifier":"2r35","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":89,"uniprot_end":110,"resolution":2.08,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r35_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r35"},{"model_identifier":"1w8p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-09-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.08,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1w8p_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1w8p"},{"model_identifier":"2ws0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.1,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws0"},{"model_identifier":"2ws0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.1,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws0"},{"model_identifier":"2wrv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":2.15,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrv_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrv"},{"model_identifier":"2wrv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.15,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrv_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrv"},{"model_identifier":"6z7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-06-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6z7y_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6z7y"},{"model_identifier":"5mam","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-11-03","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mam_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mam"},{"model_identifier":"3v1g","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-12-09","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3v1g_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3v1g"},{"model_identifier":"2vk0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2vk0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2vk0"},{"model_identifier":"3ir0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3ir0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3ir0"},{"model_identifier":"5hpu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hpu_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hpu"},{"model_identifier":"2g56","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-02-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2g56_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2g56"},{"model_identifier":"6gnq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-05-31","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6gnq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6gnq"},{"model_identifier":"6z7y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-06-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6z7y_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6z7y"},{"model_identifier":"5mam","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-11-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mam_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mam"},{"model_identifier":"3v1g","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-12-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3v1g_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3v1g"},{"model_identifier":"2vk0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2vk0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2vk0"},{"model_identifier":"3ir0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-08-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3ir0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3ir0"},{"model_identifier":"5hpu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-01-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hpu_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hpu"},{"model_identifier":"6gnq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-05-31","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6gnq_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6gnq"},{"model_identifier":"4ewx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.201,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ewx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ewx"},{"model_identifier":"4ewx","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.201,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ewx_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ewx"},{"model_identifier":"2omi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.24,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omi_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omi"},{"model_identifier":"2omi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-01-22","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.24,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2omi_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2omi"},{"model_identifier":"5uu3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-16","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu3"},{"model_identifier":"1os4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-03-18","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1os4_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1os4"},{"model_identifier":"2g54","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-02-22","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2g54_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2g54"},{"model_identifier":"6ck2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-27","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ck2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ck2"},{"model_identifier":"2r34","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.25,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r34_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r34"},{"model_identifier":"2r34","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-29","sequence_identity":100.0,"uniprot_start":89,"uniprot_end":110,"resolution":2.25,"coverage":25.58,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2r34_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2r34"},{"model_identifier":"5uu3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.25,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uu3_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uu3"},{"model_identifier":"1os4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2003-03-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.25,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1os4_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1os4"},{"model_identifier":"6ck2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.25,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ck2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ck2"},{"model_identifier":"4ak0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-21","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":53,"resolution":2.28,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ak0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ak0"},{"model_identifier":"4ak0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-02-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.28,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4ak0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4ak0"},{"model_identifier":"3p33","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-10-04","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3p33_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3p33"},{"model_identifier":"5ems","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-06","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5ems_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5ems"},{"model_identifier":"1qiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qiy_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qiy"},{"model_identifier":"1lph","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1995-04-19","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1lph_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1lph"},{"model_identifier":"3rov","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-04-26","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3rov_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3rov"},{"model_identifier":"4eww","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eww_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eww"},{"model_identifier":"1xw7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-10-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xw7_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xw7"},{"model_identifier":"3p33","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-10-04","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3p33_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3p33"},{"model_identifier":"5ems","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-11-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5ems_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5ems"},{"model_identifier":"1qiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qiy_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qiy"},{"model_identifier":"1lph","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1995-04-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1lph_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1lph"},{"model_identifier":"3rov","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-04-26","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3rov_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3rov"},{"model_identifier":"4eww","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-04-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4eww_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4eww"},{"model_identifier":"1xw7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-10-29","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xw7_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xw7"},{"model_identifier":"4z78","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-04-06","sequence_identity":100.0,"uniprot_start":39,"uniprot_end":48,"resolution":2.304,"coverage":11.63,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4z78_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4z78"},{"model_identifier":"4wdi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-09-08","sequence_identity":100.0,"uniprot_start":39,"uniprot_end":47,"resolution":2.313,"coverage":10.47,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4wdi_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4wdi"},{"model_identifier":"1qj0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qj0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qj0"},{"model_identifier":"4gbk","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.4,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbk_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbk"},{"model_identifier":"1qj0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1999-06-18","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1qj0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1qj0"},{"model_identifier":"4gbk","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbk_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbk"},{"model_identifier":"1jk8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-07-11","sequence_identity":100.0,"uniprot_start":35,"uniprot_end":47,"resolution":2.4,"coverage":15.12,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jk8_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jk8"},{"model_identifier":"5uru","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.41,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uru_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uru"},{"model_identifier":"2wrw","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":2.41,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrw_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrw"},{"model_identifier":"2wrw","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.41,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wrw_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wrw"},{"model_identifier":"5uru","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-02-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.41,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5uru_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5uru"},{"model_identifier":"6z7w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-06-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.42,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6z7w_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6z7w"},{"model_identifier":"6z7w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-06-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.42,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6z7w_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6z7w"},{"model_identifier":"1jca","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-06-08","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jca_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jca"},{"model_identifier":"3jsd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-10","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3jsd_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3jsd"},{"model_identifier":"1b9e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-11-12","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1b9e_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1b9e"},{"model_identifier":"4gbl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbl_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbl"},{"model_identifier":"1jca","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-06-08","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jca_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jca"},{"model_identifier":"3jsd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3jsd_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3jsd"},{"model_identifier":"1b9e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-11-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1b9e_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1b9e"},{"model_identifier":"4gbl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbl_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbl"},{"model_identifier":"4y19","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-02-07","sequence_identity":100.0,"uniprot_start":75,"uniprot_end":90,"resolution":2.5,"coverage":18.6,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4y19_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4y19"},{"model_identifier":"4gbi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.502,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbi_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbi"},{"model_identifier":"4gbi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-07-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.502,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4gbi_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4gbi"},{"model_identifier":"2ws7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":96.0,"uniprot_start":25,"uniprot_end":50,"resolution":2.59,"coverage":30.23,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws7_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws7"},{"model_identifier":"2ws7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-09-03","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.59,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2ws7_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2ws7"},{"model_identifier":"2wby","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-03-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":2.6,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wby_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wby"},{"model_identifier":"2wby","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-03-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":43,"resolution":2.6,"coverage":22.09,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wby_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wby"},{"model_identifier":"3utt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-11-26","sequence_identity":100.0,"uniprot_start":15,"uniprot_end":24,"resolution":2.6,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3utt_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3utt"},{"model_identifier":"3uts","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-11-26","sequence_identity":100.0,"uniprot_start":15,"uniprot_end":24,"resolution":2.712,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3uts_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3uts"},{"model_identifier":"4unh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.75,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4unh_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4unh"},{"model_identifier":"4unh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.75,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4unh_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4unh"},{"model_identifier":"2wc0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-03-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.8,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wc0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wc0"},{"model_identifier":"2wc0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-03-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.8,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2wc0_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2wc0"},{"model_identifier":"5wdm","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-07-05","sequence_identity":57.0,"uniprot_start":25,"uniprot_end":110,"resolution":2.803,"coverage":66.28,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5wdm_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5wdm"},{"model_identifier":"6vep","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":2.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6vep_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6vep"},{"model_identifier":"6vep","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-01-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":2.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6vep_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6vep"},{"model_identifier":"5hyj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-02-01","sequence_identity":90.0,"uniprot_start":15,"uniprot_end":24,"resolution":3.06,"coverage":0.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5hyj_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5hyj"},{"model_identifier":"6hn5","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-09-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":3.2,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6hn5_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6hn5"},{"model_identifier":"6hn5","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-09-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":3.2,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6hn5_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6hn5"},{"model_identifier":"5cjo","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-07-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":3.287,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5cjo_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5cjo"},{"model_identifier":"4oga","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-01-15","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":3.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4oga_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4oga"},{"model_identifier":"4oga","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-01-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":3.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4oga_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4oga"},{"model_identifier":"6b70","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-10-03","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":3.7,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6b70_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6b70"},{"model_identifier":"6b3q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-09-22","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":3.7,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6b3q_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6b3q"},{"model_identifier":"6bfc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-10-26","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":3.7,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6bfc_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6bfc"},{"model_identifier":"7bw8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-04-14","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":110,"resolution":3.8,"coverage":86.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7bw8_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7bw8"},{"model_identifier":"3w11","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":3.9,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w11_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w11"},{"model_identifier":"3w11","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":3.9,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w11_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w11"},{"model_identifier":"5wob","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-08-01","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":3.95,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5wob_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5wob"},{"model_identifier":"4y1a","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-02-07","sequence_identity":100.0,"uniprot_start":75,"uniprot_end":90,"resolution":4.0,"coverage":18.6,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4y1a_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4y1a"},{"model_identifier":"7bw7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-04-13","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":110,"resolution":4.1,"coverage":86.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7bw7_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7bw7"},{"model_identifier":"6sof","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":4.3,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6sof_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6sof"},{"model_identifier":"6ce9","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ce9_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ce9"},{"model_identifier":"6sof","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.3,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6sof_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6sof"},{"model_identifier":"3w12","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":4.301,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w12_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w12"},{"model_identifier":"3w12","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.301,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w12_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w12"},{"model_identifier":"3w13","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":4.303,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w13_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w13"},{"model_identifier":"3w13","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.303,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3w13_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3w13"},{"model_identifier":"6jk8","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-02-27","sequence_identity":100.0,"uniprot_start":1,"uniprot_end":110,"resolution":4.7,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6jk8_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6jk8"},{"model_identifier":"6ceb","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":4.7,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ceb_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ceb"},{"model_identifier":"7bwa","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-04-14","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":110,"resolution":4.9,"coverage":86.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/7bwa_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/7bwa"},{"model_identifier":"6ce7","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2018-02-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":7.4,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6ce7_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6ce7"},{"model_identifier":"6jr3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-04-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":14.5,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6jr3_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6jr3"},{"model_identifier":"6jr3","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-04-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":14.5,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6jr3_updated.cif","model_format":"MMCIF","experimental_method":"ELECTRON MICROSCOPY","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6jr3"},{"model_identifier":"2kqp","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-12","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":110,"resolution":null,"coverage":100.0,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kqp_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kqp"},{"model_identifier":"1efe","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-02-08","sequence_identity":65.0,"uniprot_start":25,"uniprot_end":110,"resolution":null,"coverage":69.77,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1efe_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1efe"},{"model_identifier":"6u46","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-08-23","sequence_identity":61.0,"uniprot_start":25,"uniprot_end":109,"resolution":null,"coverage":67.44,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6u46_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6u46"},{"model_identifier":"1sju","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-10-09","sequence_identity":56.0,"uniprot_start":25,"uniprot_end":110,"resolution":null,"coverage":58.14,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sju_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sju"},{"model_identifier":"5mwq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-19","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":56,"resolution":null,"coverage":37.21,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mwq_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mwq"},{"model_identifier":"6k59","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-05-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":56,"resolution":null,"coverage":37.21,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6k59_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6k59"},{"model_identifier":"1t0c","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-08","sequence_identity":100.0,"uniprot_start":57,"uniprot_end":87,"resolution":null,"coverage":36.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t0c_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t0c"},{"model_identifier":"5mhd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-11-24","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":55,"resolution":null,"coverage":36.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mhd_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mhd"},{"model_identifier":"2lgb","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-07-25","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":55,"resolution":null,"coverage":36.05,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2lgb_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2lgb"},{"model_identifier":"2mvd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-10-02","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mvd_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mvd"},{"model_identifier":"2mvc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-10-02","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mvc_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mvc"},{"model_identifier":"1k3m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-10-03","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1k3m_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1k3m"},{"model_identifier":"2juu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-03","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2juu_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2juu"},{"model_identifier":"1hiq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1993-03-05","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hiq_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hiq"},{"model_identifier":"2juv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-05","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2juv_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2juv"},{"model_identifier":"2rn5","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-06","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2rn5_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2rn5"},{"model_identifier":"2kxk","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-05-07","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kxk_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kxk"},{"model_identifier":"2hiu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-08","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hiu_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hiu"},{"model_identifier":"2l1y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-08-09","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2l1y_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2l1y"},{"model_identifier":"2l1z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-08-09","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2l1z_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2l1z"},{"model_identifier":"2kju","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-06-10","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kju_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kju"},{"model_identifier":"1xgl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-10","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xgl_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xgl"},{"model_identifier":"1jco","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-06-11","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jco_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jco"},{"model_identifier":"2jv1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-11","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jv1_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jv1"},{"model_identifier":"2kqq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-13","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kqq_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kqq"},{"model_identifier":"1fu2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-09-13","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1fu2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY POWDER DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1fu2"},{"model_identifier":"1kmf","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-12-14","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1kmf_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1kmf"},{"model_identifier":"1vkt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-14","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1vkt_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1vkt"},{"model_identifier":"1fub","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-09-14","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1fub_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY POWDER DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1fub"},{"model_identifier":"2n2x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2x_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2x"},{"model_identifier":"2n2v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2v_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2v"},{"model_identifier":"2n2w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2w_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2w"},{"model_identifier":"1t1k","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1k_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1k"},{"model_identifier":"1t1p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1p_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1p"},{"model_identifier":"1t1q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1q_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1q"},{"model_identifier":"2mpg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-17","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mpg_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mpg"},{"model_identifier":"1sf1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-02-19","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sf1_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sf1"},{"model_identifier":"2mpi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-19","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mpi_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mpi"},{"model_identifier":"2jmn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-11-21","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jmn_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jmn"},{"model_identifier":"2k9r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-10-23","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2k9r_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2k9r"},{"model_identifier":"6x4x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-05-24","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6x4x_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6x4x"},{"model_identifier":"1lkq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-04-25","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1lkq_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1lkq"},{"model_identifier":"2m1d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-26","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m1d_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m1d"},{"model_identifier":"2m1e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-26","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m1e_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m1e"},{"model_identifier":"2mli","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-02-27","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mli_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mli"},{"model_identifier":"2hh4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-06-27","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hh4_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hh4"},{"model_identifier":"2m2m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2m_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2m"},{"model_identifier":"2aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2aiy"},{"model_identifier":"1hit","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1992-02-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hit_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hit"},{"model_identifier":"2hho","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-06-28","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hho_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hho"},{"model_identifier":"1hls","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1995-06-28","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hls_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hls"},{"model_identifier":"2m2n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2n_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2n"},{"model_identifier":"2m2o","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2o_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2o"},{"model_identifier":"2m2p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2p_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2p"},{"model_identifier":"3aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3aiy"},{"model_identifier":"4aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4aiy"},{"model_identifier":"5aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5aiy"},{"model_identifier":"2kjj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-05-29","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kjj_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kjj"},{"model_identifier":"2k91","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-09-29","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2k91_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2k91"},{"model_identifier":"1ai0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-04-30","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ai0_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ai0"},{"model_identifier":"1aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-04-30","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1aiy"},{"model_identifier":"2h67","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-05-30","sequence_identity":87.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2h67_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2h67"},{"model_identifier":"1mhi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-11-30","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mhi_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mhi"},{"model_identifier":"2jum","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-31","sequence_identity":90.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":34.88,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jum_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jum"},{"model_identifier":"1sjt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-10-09","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":53,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sjt_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sjt"},{"model_identifier":"1a7f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-03-12","sequence_identity":93.0,"uniprot_start":25,"uniprot_end":53,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1a7f_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1a7f"},{"model_identifier":"1iog","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-08-13","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":53,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1iog_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1iog"},{"model_identifier":"1ioh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-08-13","sequence_identity":86.0,"uniprot_start":25,"uniprot_end":53,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ioh_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ioh"},{"model_identifier":"1mhj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-11-30","sequence_identity":97.0,"uniprot_start":25,"uniprot_end":54,"resolution":null,"coverage":33.72,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mhj_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mhj"},{"model_identifier":"1hui","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-03-29","sequence_identity":89.0,"uniprot_start":26,"uniprot_end":53,"resolution":null,"coverage":32.56,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hui_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hui"},{"model_identifier":"1his","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1992-02-28","sequence_identity":100.0,"uniprot_start":25,"uniprot_end":49,"resolution":null,"coverage":29.07,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1his_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1his"},{"model_identifier":"2mvc","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-10-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mvc_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mvc"},{"model_identifier":"2mvd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-10-02","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mvd_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mvd"},{"model_identifier":"1k3m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-10-03","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1k3m_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1k3m"},{"model_identifier":"2juu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-03","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2juu_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2juu"},{"model_identifier":"1hiq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1993-03-05","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hiq_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hiq"},{"model_identifier":"2juv","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-05","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2juv_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2juv"},{"model_identifier":"2rn5","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-12-06","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2rn5_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2rn5"},{"model_identifier":"2kxk","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-05-07","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kxk_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kxk"},{"model_identifier":"2hiu","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-08","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hiu_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hiu"},{"model_identifier":"2l1z","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-08-09","sequence_identity":86.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2l1z_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2l1z"},{"model_identifier":"2l1y","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2010-08-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2l1y_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2l1y"},{"model_identifier":"1sjt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-10-09","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sjt_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sjt"},{"model_identifier":"2kju","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-06-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kju_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kju"},{"model_identifier":"1xgl","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-10","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1xgl_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1xgl"},{"model_identifier":"1jco","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-06-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1jco_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1jco"},{"model_identifier":"2jv1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-09-11","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jv1_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jv1"},{"model_identifier":"1a7f","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-03-12","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1a7f_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1a7f"},{"model_identifier":"1iog","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-08-13","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1iog_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1iog"},{"model_identifier":"1ioh","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-08-13","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ioh_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ioh"},{"model_identifier":"2kqq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-11-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kqq_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kqq"},{"model_identifier":"1fu2","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-09-13","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1fu2_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY POWDER DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1fu2"},{"model_identifier":"1kmf","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2001-12-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1kmf_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1kmf"},{"model_identifier":"1vkt","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-10-14","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1vkt_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1vkt"},{"model_identifier":"1fub","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2000-09-14","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1fub_updated.cif","model_format":"MMCIF","experimental_method":"X-RAY POWDER DIFFRACTION","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1fub"},{"model_identifier":"2n2v","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2v_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2v"},{"model_identifier":"2n2w","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2w_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2w"},{"model_identifier":"2n2x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2015-05-15","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2n2x_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2n2x"},{"model_identifier":"1t1k","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1k_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1k"},{"model_identifier":"1t1p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1p_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1p"},{"model_identifier":"1t1q","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-04-16","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1t1q_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1t1q"},{"model_identifier":"2mpg","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-17","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mpg_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mpg"},{"model_identifier":"1sf1","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2004-02-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1sf1_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1sf1"},{"model_identifier":"5mwq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2017-01-19","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mwq_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mwq"},{"model_identifier":"2mpi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-05-19","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mpi_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mpi"},{"model_identifier":"2jmn","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-11-21","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jmn_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jmn"},{"model_identifier":"2k9r","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-10-23","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2k9r_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2k9r"},{"model_identifier":"6x4x","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2020-05-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6x4x_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6x4x"},{"model_identifier":"5mhd","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2016-11-24","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5mhd_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5mhd"},{"model_identifier":"1lkq","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2002-04-25","sequence_identity":90.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1lkq_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1lkq"},{"model_identifier":"2lgb","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2011-07-25","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2lgb_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2lgb"},{"model_identifier":"2m1d","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-26","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m1d_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m1d"},{"model_identifier":"2m1e","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-11-26","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m1e_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m1e"},{"model_identifier":"2mli","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2014-02-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2mli_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2mli"},{"model_identifier":"2hh4","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-06-27","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hh4_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hh4"},{"model_identifier":"2m2m","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2m_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2m"},{"model_identifier":"2aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2aiy"},{"model_identifier":"1his","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1992-02-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1his_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1his"},{"model_identifier":"1hit","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1992-02-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hit_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hit"},{"model_identifier":"2hho","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-06-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2hho_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2hho"},{"model_identifier":"1hls","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1995-06-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hls_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hls"},{"model_identifier":"2m2n","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2n_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2n"},{"model_identifier":"2m2o","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2o_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2o"},{"model_identifier":"2m2p","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2012-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2m2p_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2m2p"},{"model_identifier":"3aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/3aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/3aiy"},{"model_identifier":"4aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/4aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/4aiy"},{"model_identifier":"5aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1998-12-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/5aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/5aiy"},{"model_identifier":"1hui","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1996-03-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1hui_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1hui"},{"model_identifier":"2kjj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2009-05-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2kjj_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2kjj"},{"model_identifier":"2k91","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2008-09-29","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2k91_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2k91"},{"model_identifier":"1ai0","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-04-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1ai0_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1ai0"},{"model_identifier":"1aiy","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1997-04-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1aiy_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1aiy"},{"model_identifier":"2h67","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2006-05-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2h67_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2h67"},{"model_identifier":"1mhi","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-11-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mhi_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mhi"},{"model_identifier":"1mhj","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"1994-11-30","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/1mhj_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/1mhj"},{"model_identifier":"2jum","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2007-08-31","sequence_identity":95.0,"uniprot_start":90,"uniprot_end":110,"resolution":null,"coverage":24.42,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/2jum_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/2jum"},{"model_identifier":"6k59","model_category":"EXPERIMENTALLY DETERMINED","provider":"PDBe","created":"2019-05-28","sequence_identity":100.0,"uniprot_start":90,"uniprot_end":109,"resolution":null,"coverage":23.26,"model_url":"https://www.ebi.ac.uk/pdbe/static/entry/6k59_updated.cif","model_format":"MMCIF","experimental_method":"SOLUTION NMR","model_page_url":"https://www.ebi.ac.uk/pdbe/entry/pdb/6k59"},{"model_identifier":"PED00101e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":26,"uniprot_end":53,"model_url":"https://proteinensemble.org/api/ensemble/PED00101e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00101","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00101e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00095e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00095e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00095","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00095e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00102e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00102e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00102","number_of_conformers":40,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00102e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00103e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00103e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00103","number_of_conformers":30,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00103e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00093e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00093e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00093","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00093e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00094e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00094e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00094","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00094e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00096e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00096e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00096","number_of_conformers":35,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00096e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00096e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00096e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00096","number_of_conformers":35,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00096e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00101e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00101e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00101","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00101e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00103e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00103e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00103","number_of_conformers":30,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00103e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00093e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00093e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00093","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00093e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00102e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00102e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00102","number_of_conformers":40,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00102e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00104e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":90,"uniprot_end":110,"model_url":"https://proteinensemble.org/api/ensemble/PED00104e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00104","number_of_conformers":50,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00104e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00095e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00095e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00095","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00095e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00094e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00094e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00094","number_of_conformers":25,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00094e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"PED00104e000","model_category":"CONFORMATIONAL ENSEMBLE","provider":"PED","created":"2020-10-01","uniprot_start":25,"uniprot_end":54,"model_url":"https://proteinensemble.org/api/ensemble/PED00104e000","model_format":"PDB","model_page_url":"https://proteinensemble.org/PED00104","number_of_conformers":50,"ensemble_sample_url":"https://proteinensemble.org/api/ensemble_sample/PED00104e000","ensemble_sample_format":"MMCIF"},{"model_identifier":"614833d3963a0435809066a9","model_category":"TEMPLATE-BASED","provider":"SWISS-MODEL","created":"2021-09-20","sequence_identity":1.0,"uniprot_start":25,"uniprot_end":110,"coverage":0.782,"confidence_version":"4.2.0","confidence_avg_local_score":0.526,"model_url":"https://swissmodel.expasy.org/3d-beacons/uniprot/P01308.pdb?range=25-110&template=2lwz.1.A&provider=swissmodel","model_format":"PDB","model_page_url":"https://swissmodel.expasy.org/repository/uniprot/P01308?provider=swissmodelrange=25-110&template=2lwz.1.A","confidence_type":"QMEANDisCo"},{"model_identifier":"AF-P01308-F1","model_category":"DEEP-LEARNING","provider":"AlphaFold DB","created":"2021-07-01","sequence_identity":1.0,"uniprot_start":1,"uniprot_end":110,"coverage":100.0,"model_url":"https://alphafold.ebi.ac.uk/files/AF-P01308-F1-model_v1.cif","model_format":"MMCIF","model_page_url":"https://alphafold.ebi.ac.uk/entry/P01308"},{"model_identifier":"2400","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2018-11-11","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDE25_fit1_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDE25"},{"model_identifier":"2396","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2018-11-11","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDE25_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDE25"},{"model_identifier":"2452","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEV5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEV5"},{"model_identifier":"2453","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEV5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEV5"},{"model_identifier":"2456","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEW5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEW5"},{"model_identifier":"2457","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEW5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEW5"},{"model_identifier":"2459","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEX5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEX5"},{"model_identifier":"2460","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEX5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEX5"},{"model_identifier":"2462","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEY5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEY5"},{"model_identifier":"2463","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEY5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEY5"},{"model_identifier":"2465","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEZ5_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEZ5"},{"model_identifier":"2467","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDEZ5_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDEZ5"},{"model_identifier":"2469","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDE26_fit2_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDE26"},{"model_identifier":"2470","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2019-04-07","uniprot_start":25,"uniprot_end":609,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDE26_fit3_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDE26"},{"model_identifier":"4420","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2020-12-18","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDJY3_fit1_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDJY3"},{"model_identifier":"4421","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2020-12-18","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDJY3_fit1_model2.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDJY3"},{"model_identifier":"4422","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2020-12-18","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDJZ3_fit1_model1.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDJZ3"},{"model_identifier":"4423","model_category":"EXPERIMENTALLY DETERMINED","provider":"SASBDB","created":"2020-12-18","uniprot_start":25,"uniprot_end":110,"model_url":"https://www.sasbdb.org/media/pdb_file/SASDJZ3_fit1_model2.pdb","model_format":"PDB","model_page_url":"https://www.sasbdb.org/data/SASDJZ3"}]}
index 4685e4c..a87e1c6 100644 (file)
@@ -131,6 +131,7 @@ public class StructureChooserTest
 
     SequenceI[] selectedSeqs = new SequenceI[] { seq };
     StructureChooser sc = new StructureChooser(selectedSeqs, seq, null);
+    ThreadwaitFor(200, sc);
     
     // if structures are not discovered then don't
     // populate filter options
@@ -169,6 +170,9 @@ public class StructureChooserTest
     PDBFTSRestClient.unMock((FTSRestClient) PDBFTSRestClient.getInstance());
     SequenceI[] selectedSeqs = new SequenceI[] { seq };
     StructureChooser sc = new StructureChooser(selectedSeqs, seq, null);
+    // not mocked, wait for 2s 
+    ThreadwaitFor(2000, sc);
+    
     sc.fetchStructuresMetaData();
     Collection<FTSData> ss = (Collection<FTSData>) PA.getValue(sc,
             "discoveredStructuresSet");
@@ -183,6 +187,8 @@ public class StructureChooserTest
     PDBFTSRestClientTest.setMock();
     SequenceI[] selectedSeqs = new SequenceI[] { upSeq };
     StructureChooser sc = new StructureChooser(selectedSeqs, seq, null);
+    ThreadwaitFor(500, sc);
+    
     sc.fetchStructuresMetaData();
     Collection<FTSData> ss = (Collection<FTSData>) PA.getValue(sc,
             "discoveredStructuresSet");
@@ -190,6 +196,22 @@ public class StructureChooserTest
     assertTrue(ss.size() > 0);
   }
 
+  private void ThreadwaitFor(int i, StructureChooser sc)
+  {
+    long timeout = i+System.currentTimeMillis();
+    while (!sc.isDialogVisible() && timeout > System.currentTimeMillis())
+    {
+      try {
+        Thread.sleep(50);
+      } catch (InterruptedException x)
+      {
+        
+      }
+    }
+    
+  }
+
+
   @Test(groups = { "Functional" })
   public void sanitizeSeqNameTest()
   {
index b04cddd..ee853f3 100644 (file)
@@ -3,9 +3,9 @@ package jalview.io;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.fail;
-import static org.testng.AssertJUnit.assertNull;
 
 import java.io.File;
 import java.io.IOException;
@@ -14,8 +14,10 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import jalview.bin.Cache;
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.Mapping;
 import jalview.datamodel.Sequence.DBModList;
@@ -26,6 +28,12 @@ import jalview.util.MapList;
 
 public class EmblFlatFileTest
 {
+  @BeforeClass(alwaysRun = true)
+  public void setUp()
+  {
+    Cache.initLogger();
+  }
+
   /**
    * A fairly tough test, using J03321 (circular DNA), which has 8 CDS features,
    * one of them reverse strand
@@ -39,7 +47,6 @@ public class EmblFlatFileTest
     File dataFile = new File("test/jalview/io/J03321.embl.txt");
     FileParse fp = new FileParse(dataFile, DataSourceType.FILE);
     EmblFlatFile parser = new EmblFlatFile(fp, "EmblTest");
-    parser.parse();
     List<SequenceI> seqs = parser.getSeqs();
 
     assertEquals(seqs.size(), 1);
@@ -255,7 +262,6 @@ public class EmblFlatFileTest
             + "     ggatGcgtaa gttagacgaa attttgtctt tgcgcacaga        40\n";
     FileParse fp = new FileParse(data, DataSourceType.PASTE);
     EmblFlatFile parser = new EmblFlatFile(fp, "EmblTest");
-    parser.parse();
     List<SequenceI> seqs = parser.getSeqs();
     assertEquals(seqs.size(), 1);
     SequenceI seq = seqs.get(0);
index 53f18bf..3d25bf1 100644 (file)
@@ -1,5 +1,7 @@
 package jalview.io;
 
+import java.util.Locale;
+
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotEquals;
@@ -31,14 +33,15 @@ public class FileFormatsTest
   public void testIsIdentifiable()
   {
     FileFormats formats = FileFormats.getInstance();
-    assertTrue(formats.isIdentifiable(formats.forName(FileFormat.Fasta
-            .getName())));
-    assertTrue(formats.isIdentifiable(formats.forName(FileFormat.MMCif
-            .getName())));
-    assertTrue(formats.isIdentifiable(formats.forName(FileFormat.Jnet
-            .getName())));
-    assertTrue(formats.isIdentifiable(formats.forName(FileFormat.Jalview
-            .getName())));
+    assertTrue(formats
+            .isIdentifiable(formats.forName(FileFormat.Fasta.getName())));
+    assertTrue(formats
+            .isIdentifiable(formats.forName(FileFormat.MMCif.getName())));
+    assertTrue(formats
+            .isIdentifiable(formats.forName(FileFormat.Jnet.getName())));
+    assertTrue(formats
+            .isIdentifiable(formats.forName(FileFormat.Jalview.getName())));
+    // GenBank/ENA
     assertFalse(formats.isIdentifiable(null));
 
     /*
@@ -55,7 +58,7 @@ public class FileFormatsTest
   @Test(groups = "Functional")
   public void testGetReadableFormats()
   {
-    String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview]";
+    String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview]";
     FileFormats formats = FileFormats.getInstance();
     assertEquals(formats.getReadableFormats().toString(), expected);
   }
@@ -74,14 +77,14 @@ public class FileFormatsTest
   public void testDeregisterFileFormat()
   {
     String writable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]";
-    String readable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview]";
+    String readable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview]";
     FileFormats formats = FileFormats.getInstance();
     assertEquals(formats.getWritableFormats(true).toString(), writable);
     assertEquals(formats.getReadableFormats().toString(), readable);
 
     formats.deregisterFileFormat(FileFormat.Fasta.getName());
     writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]";
-    readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview]";
+    readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview]";
     assertEquals(formats.getWritableFormats(true).toString(), writable);
     assertEquals(formats.getReadableFormats().toString(), readable);
 
@@ -90,7 +93,7 @@ public class FileFormatsTest
      */
     formats.registerFileFormat(FileFormat.Fasta);
     writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Fasta]";
-    readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, Fasta]";
+    readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview, Fasta]";
     assertEquals(formats.getWritableFormats(true).toString(), writable);
     assertEquals(formats.getReadableFormats().toString(), readable);
   }
@@ -102,8 +105,8 @@ public class FileFormatsTest
     for (FileFormatI ff : FileFormat.values())
     {
       assertSame(ff, formats.forName(ff.getName()));
-      assertSame(ff, formats.forName(ff.getName().toUpperCase()));
-      assertSame(ff, formats.forName(ff.getName().toLowerCase()));
+      assertSame(ff, formats.forName(ff.getName().toUpperCase(Locale.ROOT)));
+      assertSame(ff, formats.forName(ff.getName().toLowerCase(Locale.ROOT)));
     }
     assertNull(formats.forName(null));
     assertNull(formats.forName("rubbish"));
@@ -144,8 +147,7 @@ public class FileFormatsTest
      * verify the list of file formats registered matches the enum values
      */
     FileFormats instance = FileFormats.getInstance();
-    Iterator<FileFormatI> formats = instance.getFormats()
-            .iterator();
+    Iterator<FileFormatI> formats = instance.getFormats().iterator();
     FileFormatI[] builtIn = FileFormat.values();
 
     for (FileFormatI ff : builtIn)
diff --git a/test/jalview/io/GenBankFileTest.java b/test/jalview/io/GenBankFileTest.java
new file mode 100644 (file)
index 0000000..89f0d0e
--- /dev/null
@@ -0,0 +1,202 @@
+package jalview.io;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertNull;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.List;
+import java.util.Set;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import jalview.bin.Cache;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.Mapping;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.datamodel.features.SequenceFeatures;
+import jalview.util.MapList;
+
+public class GenBankFileTest
+{
+  @BeforeClass(alwaysRun = true)
+  public void setUp()
+  {
+    Cache.initLogger();
+  }
+
+  /**
+   * A fairly tough test, using J03321 (circular DNA), which has 8 CDS features,
+   * one of them reverse strand
+   * 
+   * @throws MalformedURLException
+   * @throws IOException
+   */
+  @Test(groups = "Functional")
+  public void testParse() throws MalformedURLException, IOException
+  {
+    File dataFile = new File("test/jalview/io/J03321.gb");
+    FileParse fp = new FileParse(dataFile.getAbsolutePath(),
+            DataSourceType.FILE);
+    FlatFile parser = new GenBankFile(fp, "GenBankTest");
+    List<SequenceI> seqs = parser.getSeqs();
+
+    assertEquals(seqs.size(), 1);
+    SequenceI seq = seqs.get(0);
+    assertEquals(seq.getName(), "GenBankTest|J03321");
+    assertEquals(seq.getLength(), 7502);
+    assertEquals(seq.getDescription(),
+            "Chlamydia trachomatis plasmid pCHL1, complete sequence");
+
+    /*
+     * should be 9 CDS features (one is a 'join' of two exons)
+     */
+    Set<String> featureTypes = seq.getFeatures().getFeatureTypes();
+    assertEquals(featureTypes.size(), 1);
+    assertTrue(featureTypes.contains("CDS"));
+
+    /*
+     * inspect some features (sorted just for convenience of test assertions)
+     */
+    List<SequenceFeature> features = seq.getFeatures()
+            .getAllFeatures("CDS");
+    SequenceFeatures.sortFeatures(features, true);
+    assertEquals(features.size(), 9);
+
+    SequenceFeature sf = features.get(0);
+    assertEquals(sf.getBegin(), 1);
+    assertEquals(sf.getEnd(), 437);
+    assertEquals(sf.getDescription(),
+            "Exon 2 for protein EMBLCDS:AAA91567.1");
+    assertEquals(sf.getFeatureGroup(), "GenBankTest");
+    assertEquals(sf.getEnaLocation(), "join(7022..7502,1..437)");
+    assertEquals(sf.getPhase(), "0");
+    assertEquals(sf.getStrand(), 1);
+    assertEquals(sf.getValue("note"), "pGP7-D");
+    // this is the second exon of circular CDS!
+    assertEquals(sf.getValue("exon number"), 2);
+    assertEquals(sf.getValue("product"), "hypothetical protein");
+    assertEquals(sf.getValue("transl_table"), "11");
+
+    sf = features.get(1);
+    assertEquals(sf.getBegin(), 488);
+    assertEquals(sf.getEnd(), 1480);
+    assertEquals(sf.getDescription(),
+            "Exon 1 for protein EMBLCDS:AAA91568.1");
+    assertEquals(sf.getFeatureGroup(), "GenBankTest");
+    assertEquals(sf.getEnaLocation(), "complement(488..1480)");
+    assertEquals(sf.getPhase(), "0");
+    assertEquals(sf.getStrand(), -1); // reverse strand!
+    assertEquals(sf.getValue("note"), "pGP8-D");
+    assertEquals(sf.getValue("exon number"), 1);
+    assertEquals(sf.getValue("product"), "hypothetical protein");
+
+    sf = features.get(7);
+    assertEquals(sf.getBegin(), 6045);
+    assertEquals(sf.getEnd(), 6788);
+    assertEquals(sf.getDescription(),
+            "Exon 1 for protein EMBLCDS:AAA91574.1");
+    assertEquals(sf.getFeatureGroup(), "GenBankTest");
+    assertEquals(sf.getEnaLocation(), "6045..6788");
+    assertEquals(sf.getPhase(), "0");
+    assertEquals(sf.getStrand(), 1);
+    assertEquals(sf.getValue("note"), "pGP6-D (gtg start codon)");
+    assertEquals(sf.getValue("exon number"), 1);
+    assertEquals(sf.getValue("product"), "hypothetical protein");
+
+    /*
+     * CDS at 7022-7502 is the first exon of the circular CDS
+     */
+    sf = features.get(8);
+    assertEquals(sf.getBegin(), 7022);
+    assertEquals(sf.getEnd(), 7502);
+    assertEquals(sf.getDescription(),
+            "Exon 1 for protein EMBLCDS:AAA91567.1");
+    assertEquals(sf.getFeatureGroup(), "GenBankTest");
+    assertEquals(sf.getEnaLocation(), "join(7022..7502,1..437)");
+    assertEquals(sf.getPhase(), "0");
+    assertEquals(sf.getStrand(), 1);
+    assertEquals(sf.getValue("note"), "pGP7-D");
+    assertEquals(sf.getValue("exon number"), 1);
+    assertEquals(sf.getValue("product"), "hypothetical protein");
+
+    /*
+     * GenBank doesn't declare accession or CDS xrefs;
+     * dbrefs are added by Jalview for 
+     * xref to self : 1
+     * protein products: 8
+     */
+    List<DBRefEntry> dbrefs = seq.getDBRefs();
+
+    assertEquals(dbrefs.size(), 9);
+    // xref to 'self':
+    DBRefEntry selfRef = new DBRefEntry("GENBANKTEST", "1", "J03321");
+    int[] range = new int[] { 1, seq.getLength() };
+    selfRef.setMap(new Mapping(null, range, range, 1, 1));
+    assertTrue(dbrefs.contains(selfRef));
+
+    /*
+     * dna should have dbref to itself, and to EMBLCDSPROTEIN
+     * for each /protein_id (synthesized as no UNIPROT xref)
+     */
+    // TODO check if we should synthesize EMBLCDSPROTEIN dbrefs
+    DBRefEntry dbref = dbrefs.get(0);
+    assertEquals(dbref.getSource(), "GENBANKTEST");
+    assertEquals(dbref.getAccessionId(), "J03321");
+    Mapping mapping = dbref.getMap();
+    assertNull(mapping.getTo());
+    MapList map = mapping.getMap();
+    assertEquals(map.getFromLowest(), 1);
+    assertEquals(map.getFromHighest(), 7502);
+    assertEquals(map.getToLowest(), 1);
+    assertEquals(map.getToHighest(), 7502);
+    assertEquals(map.getFromRatio(), 1);
+    assertEquals(map.getToRatio(), 1);
+
+    // dbref to inferred EMBLCDSPROTEIN for first CDS
+    dbref = dbrefs.get(1);
+    assertEquals(dbref.getSource(), "EMBLCDSPROTEIN");
+    assertEquals(dbref.getAccessionId(), "AAA91567.1");
+    mapping = dbref.getMap();
+    SequenceI mapTo = mapping.getTo();
+    assertEquals(mapTo.getName(), "AAA91567.1");
+    // the /product qualifier transfers to protein product description
+    assertEquals(mapTo.getDescription(), "hypothetical protein");
+    String seqString = mapTo.getSequenceAsString();
+    assertEquals(seqString.length(), 305);
+    assertTrue(seqString.startsWith("MGSMAF"));
+    assertTrue(seqString.endsWith("QTPTIL"));
+    map = mapping.getMap();
+    assertEquals(map.getFromLowest(), 1);
+    assertEquals(map.getFromHighest(), 7502);
+    assertEquals(map.getToLowest(), 1);
+    assertEquals(map.getToHighest(), 305);
+    assertEquals(map.getFromRatio(), 3);
+    assertEquals(map.getToRatio(), 1);
+
+    // dbref to inferred EMBLCDSPROTEIN for last CDS
+    dbref = dbrefs.get(8);
+    assertEquals(dbref.getSource(), "EMBLCDSPROTEIN");
+    assertEquals(dbref.getAccessionId(), "AAA91574.1");
+    mapping = dbref.getMap();
+    mapTo = mapping.getTo();
+    assertEquals(mapTo.getName(), "AAA91574.1");
+    // the /product qualifier transfers to protein product description
+    assertEquals(mapTo.getDescription(), "hypothetical protein");
+    seqString = mapTo.getSequenceAsString();
+    assertEquals(seqString.length(), 247);
+    assertTrue(seqString.startsWith("MNKLK"));
+    assertTrue(seqString.endsWith("FKQKS"));
+    map = mapping.getMap();
+    assertEquals(map.getFromLowest(), 6045);
+    assertEquals(map.getFromHighest(), 6788);
+    assertEquals(map.getToLowest(), 1);
+    assertEquals(map.getToHighest(), 247);
+    assertEquals(map.getFromRatio(), 3);
+    assertEquals(map.getToRatio(), 1);
+  }
+}
index cf7f58f..68c099e 100644 (file)
@@ -24,13 +24,13 @@ import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
 
-import jalview.gui.JvOptionPane;
-
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
+import jalview.gui.JvOptionPane;
+
 public class IdentifyFileTest
 {
 
@@ -102,6 +102,8 @@ public class IdentifyFileTest
         { "examples/testdata/test.html", FileFormat.Html },
         { "examples/testdata/test.pileup", FileFormat.Pileup },
         { "examples/testdata/test.blc", FileFormat.BLC },
+        { "test/jalview/io/J03321.embl.txt", FileFormat.Embl },
+        { "test/jalview/io/J03321.gb", FileFormat.GenBank },
         { "examples/exampleFeatures.txt", FileFormat.Features },
         { "examples/testdata/simpleGff3.gff", FileFormat.Features },
         { "examples/testdata/test.jvp", FileFormat.Jalview },
index 92065b9..555c2b5 100644 (file)
@@ -48,7 +48,9 @@ FT                   /serotype="D"
 FT                   /mol_type="genomic DNA"
 FT                   /isolation_source="trachoma"
 FT                   /db_xref="taxon:813"
-FT   CDS             join(7022..7502,1..437)
+XX   next line artificially split for test purposes!
+FT   CDS             join(7022..7502,
+FT                   1..437)
 FT                   /codon_start=1
 FT                   /transl_table=11
 FT                   /product="hypothetical protein"
diff --git a/test/jalview/io/J03321.gb b/test/jalview/io/J03321.gb
new file mode 100644 (file)
index 0000000..99729e4
--- /dev/null
@@ -0,0 +1,258 @@
+LOCUS       CH1L1CG                 7502 bp    DNA     circular BCT 06-APR-2020
+DEFINITION  Chlamydia trachomatis plasmid pCHL1, complete sequence.
+ACCESSION   J03321
+VERSION     J03321.1
+DBLINK      BioSample: SAMN14225621
+KEYWORDS    .
+SOURCE      Chlamydia trachomatis
+  ORGANISM  Chlamydia trachomatis
+            Bacteria; Chlamydiae; Chlamydiales; Chlamydiaceae;
+            Chlamydia/Chlamydophila group; Chlamydia.
+REFERENCE   1  (bases 1 to 7502)
+  AUTHORS   Comanducci,M., Ricci,S., Cevenini,R. and Ratti,G.
+  TITLE     Diversity of the Chlamydia trachomatis common plasmid in biovars
+            with different pathogenicity
+  JOURNAL   Plasmid 23 (2), 149-154 (1990)
+   PUBMED   2194229
+REFERENCE   2  (bases 1 to 7502)
+  AUTHORS   Comanducci,M., Ricci,S., Cevenini,R. and Ratti,G.
+  TITLE     Direct Submission
+  JOURNAL   Submitted (23-JUN-2010) Sclavo Research Centre, Siena, Italy
+COMMENT     Draft entry and computer-readable sequence kindly submitted by
+            G.Ratti, 28-MAR-1990.
+            ! CDS location split below (and this line added), for Jalview test purposes !
+FEATURES             Location/Qualifiers
+     source          1..7502
+                     /organism="Chlamydia trachomatis"
+                     /mol_type="genomic DNA"
+                     /serotype="D"
+                     /isolate="G0/86"
+                     /isolation_source="trachoma"
+                     /db_xref="taxon:813"
+                     /plasmid="pCHL1"
+     CDS             join(7022..7502,
+                     1..437)
+                     /note="pGP7-D"
+                     /codon_start=1
+                     /transl_table=11
+                     /product="hypothetical protein"
+                     /protein_id="AAA91567.1"
+                     /translation="MGSMAFHKSRLFLTFGDASEIWLSTLSYLTRKNYASGINFLVSL
+                     EILDLSETLIKAISLDHSESLFKIKSLDVFNGKVVSEASKQARAACYISFTKFLYRLT
+                     KGYIKPAIPLKDFGNTTFFKIRDKIKTESISKQEWTVFFEALRIVNYRDYLIGKLIVQ
+                     GIRKLDEILSLRTDDLFFASNQISFRIKKRQNKETKILITFPISLMEELQKYTCGRNG
+                     RVFVSKIGIPVTTSQVAHNFRLAEFHSAMKIKITPRVLRASALIHLKQIGLKDEEIMR
+                     ISCLSSRQSVCSYCSGEEVIPLVQTPTIL"
+     CDS             complement(488..1480)
+                     /note="pGP8-D"
+                     /codon_start=1
+                     /transl_table=11
+                     /product="hypothetical protein"
+                     /protein_id="AAA91568.1"
+                     /translation="MGKGILSLQQEMSLEYSEKSYQEVLKIRQESYWKRMKSFSLFEV
+                     IMHWTASLNKHTCRSYRGSFLSLEKIGLLSLDMNLQEFSLLNHNLILDAIKKVSSAKT
+                     SWTEGTKQVRAASYISLTRFLNRMTQGIVAIAQPSKQENSRTFFKTREIVKTDAMNSL
+                     QTASFLKELKKINARDWLIAQTMLQGGKRSSEVLSLEISQICFQQATISFSQLKNRQT
+                     EKRIIITYPQKFMHFLQEYIGQRRGFVFVTRSGKMVGLRQIARTFSQAGLQAAIPFKI
+                     TPHVLRATAVTEYKRLGCSDSDIMKVTGHATAKMIFAYDKSSREDNASKKMALI"
+     CDS             1579..2934
+                     /note="pGP1-D"
+                     /codon_start=1
+                     /transl_table=11
+                     /product="hypothetical protein"
+                     /protein_id="AAA91569.1"
+                     /translation="MKTRSEIENRMQDIEYALLGKALIFEDSTEYILRQLANYEFKCS
+                     HHKNIFIVFKHLKDNGLPITVDSAWEELLRRRIKDMDKSYLGLMLHDALSNDKLRSVS
+                     HTVFLDDLSVCSAEENLSNFIFRSFNEYNENPLRRSPFLLLERIKGRLDSAIAKTFSI
+                     RSARGRSIYDIFSQSEIGVLARIKKRRVAFSENQNSFFDGFPTGYKDIDDKGVILAKG
+                     NFVIIAARPSIGKTALAIDMAINLAVTQQRRVGFLSLEMSAGQIVERIIANLTGISGE
+                     KLQRGDLSKEELFRVEEAGETVRESHFYICSDSQYKLNLIANQIRLLRKEDRVDVIFI
+                     DYLQLINSSVGENRQNEIADISRTLRGLASELNIPIVCLSQLSRKVEDRANKVPMLSD
+                     LRDSGQIEQDADVILFINRKESSSNCEITVGKNRHGSVFSSVLHFDPKISKFSAIKKV
+                     W"
+     CDS             2928..3992
+                     /note="pGP2-D"
+                     /codon_start=1
+                     /transl_table=11
+                     /product="hypothetical protein"
+                     /protein_id="AAA91570.1"
+                     /translation="MVNYSNCHFIKSPIHLENQKFGRRPGQSIKISPKLAQNGMVEVI
+                     GLDFLSSHYHALAAIQRLLTATNYKGNTKGVVLSRESNSFQFEGWIPRIRFTKTEFLE
+                     AYGVKRYKTSRNKYEFSGKEAETALEALYHLGHQPFLIVATRTRWTNGTQIVDRYQTL
+                     SPIIRIYEGWEGLTDEENIDIDLTPFNSPPTRKHKGFVVEPCPILVDQIESYFVIKPA
+                     NVYQEIKMRFPNASKYAYTFIDWVITAAAKKRRKLTKDNSWPENLLLNVNVKSLAYIL
+                     RMNRYICTRNWKKIELAIDKCIEIAIQLGWLSRRKRIEFLDSSKLSKKEILYLNKERF
+                     EEITKKSKEQMEQLEQESIN"
+     CDS             4054..4848
+                     /note="pGP3-D"
+                     /codon_start=1
+                     /transl_table=11
+                     /product="hypothetical protein"
+                     /protein_id="AAA91571.1"
+                     /translation="MGNSGFYLYNTENCVFADNIKVGQMTEPLKDQQIILGTTSTPVA
+                     AKMTASDGISLTVSNNSSTNASITIGLDAEKAYQLILEKLGDQILDGIADTIVDSTVQ
+                     DILDKIKTDPSLGLLKAFNNFPITNKIQCNGLFTPSNIETLLGGTEIGKFTVTPKSSG
+                     SMFLVSADIIASRMEGGVVLALVREGDSKPCAISYGYSSGIPNLCSLRTSITNTGLTP
+                     TTYSLRVGGLESGVVWVNALSNGNDILGITNTSNVSFLEVIPQTNA"
+     CDS             4918..5226
+                     /note="pGP4-D"
+                     /codon_start=1
+                     /transl_table=11
+                     /product="hypothetical protein"
+                     /protein_id="AAA91572.1"
+                     /translation="MQNKRKVRDDFIKIVKDVKKDFPELDLKIRVNKEKVTFLNSPLE
+                     LYHKSVSLILGLLQQIENSLGLFPDSPVLEKLEDNSLKLKKALIMLILSRKDMFSKAE
+                     "
+     CDS             5317..6048
+                     /note="pGP5-D (gtg start codon)"
+                     /codon_start=1
+                     /transl_table=11
+                     /product="hypothetical protein"
+                     /protein_id="AAA91573.1"
+                     /translation="MGCNLAQFLGKKVLLADLDPQSNLSSGLGASVRSDQKGLHDIVY
+                     TSNDLKSIICETKKDSVDLIPASFSSEQFRELDIHRGPSNNLKLFLNEYCAPFYDICI
+                     IDTPPSLGGLTKEAFVAGDKLIACLTPEPFSILGLQKIREFLSSVGKPEEEHILGIAL
+                     SFWDDRNSTNQMYIDIIESIYKNKLFSTKIRRDISLSRSLLKEDSVANVYPNSRAAED
+                     ILKLTHEIANILHIEYERDYSQRTT"
+     CDS             6045..6788
+                     /note="pGP6-D (gtg start codon)"
+                     /codon_start=1
+                     /transl_table=11
+                     /product="hypothetical protein"
+                     /protein_id="AAA91574.1"
+                     /translation="MNKLKKEADVFFKKNQTAASLDFKKTLPSIELFSATLNSEESQS
+                     LDRLFLSESQNYSDEEFYQEDILAVKLLTGQIKSIQKQHVLLLGEKIYNARKILSKDH
+                     FSSTTFSSWIELVFRTKSSAYNALAYYELFINLPNQTLQKEFQSIPYKSAYILAARKG
+                     DLKTKVDVIGKVCGMSNSSAIRVLDQFLPSSRNKDVRETIDKSDSEKNRQLSDFLIEI
+                     LRIMCSGVSLSSYNENLLQQLFELFKQKS"
+     repeat_region   6857..6945
+                     /note="four tandem 22bp repeats"
+ORIGIN      
+        1 ggatccgtaa gttagacgaa attttgtctt tgcgcacaga cgatctattt tttgcatcca
+       61 atcagatttc ctttcgcatt aaaaaaagac agaataaaga aaccaaaatt ctaatcacat
+      121 ttcctatcag cttaatggaa gagttgcaaa aatacacttg tgggagaaat gggagagtat
+      181 ttgtttctaa aatagggatt cctgtaacaa caagtcaggt tgcgcataat tttaggcttg
+      241 cagagttcca tagtgctatg aaaataaaaa ttactcccag agtacttcgt gcaagcgctt
+      301 tgattcattt aaagcaaata ggattaaaag atgaggaaat catgcgtatt tcctgtcttt
+      361 catcgagaca aagtgtgtgt tcttattgtt ctggggaaga ggtaattcct ctagtacaaa
+      421 cacccacaat attgtgatat aattaaaatt atattcatat tctgttgcca gaaaaaacac
+      481 ctttaggcta tattagagcc atcttctttg aagcgttgtc ttctcgagaa gatttatcgt
+      541 acgcaaatat catctttgcg gttgcgtgtc ctgtgacctt cattatgtcg gagtctgagc
+      601 accctaggcg tttgtactcc gtcacagcgg ttgctcgaag cacgtgcggg gttattttaa
+      661 aagggattgc agcttgtagt cctgcttgag agaacgtgcg ggcgatttgc cttaacccca
+      721 ccatttttcc ggagcgagtt acgaagacaa aacctcttcg ttgaccgatg tactcttgta
+      781 gaaagtgcat aaacttctga ggataagtta taataatcct cttttctgtc tgacggttct
+      841 taagctggga gaaagaaatg gtagcttgtt ggaaacaaat ctgactaatc tccaagctta
+      901 agacttcaga ggagcgttta cctccttgga gcattgtctg ggcgatcaac caatcccggg
+      961 cattgatttt ttttagctct tttaggaagg atgctgtttg caaactgttc atcgcatccg
+     1021 tttttactat ttccctggtt ttaaaaaatg ttcgactatt ttcttgttta gaaggttgcg
+     1081 ctatagcgac tattccttga gtcatcctgt ttaggaatct tgttaaggaa atatagcttg
+     1141 ctgctcgaac ttgtttagta ccttcggtcc aagaagtctt ggcagaggaa acttttttaa
+     1201 tcgcatctag gattagatta tgatttaaaa gggaaaactc ttgcagattc atatccaagg
+     1261 acaatagacc aatcttttct aaagacaaaa aagatcctcg atatgatcta caagtatgtt
+     1321 tgttgagtga tgcggtccaa tgcataataa cttcgaataa ggagaagctt ttcatgcgtt
+     1381 tccaatagga ttcttggcga atttttaaaa cttcctgata agacttttca ctatattcta
+     1441 acgacatttc ttgctgcaaa gataaaatcc ctttacccat gaaatccctc gtgatataac
+     1501 ctatccgtaa aatgtcctga ttagtgaaat aatcaggttg ttaacaggat agcacgctcg
+     1561 gtattttttt atataaacat gaaaactcgt tccgaaatag aaaatcgcat gcaagatatc
+     1621 gagtatgcgt tgttaggtaa agctctgata tttgaagact ctactgagta tattctgagg
+     1681 cagcttgcta attatgagtt taagtgttct catcataaaa acatattcat agtatttaaa
+     1741 cacttaaaag acaatggatt acctataact gtagactcgg cttgggaaga gcttttgcgg
+     1801 cgtcgtatca aagatatgga caaatcgtat ctcgggttaa tgttgcatga tgctttatca
+     1861 aatgacaagc ttagatccgt ttctcatacg gttttcctcg atgatttgag cgtgtgtagc
+     1921 gctgaagaaa atttgagtaa tttcattttc cgctcgttta atgagtacaa tgaaaatcca
+     1981 ttgcgtagat ctccgtttct attgcttgag cgtataaagg gaaggcttga tagtgctata
+     2041 gcaaagactt tttctattcg cagcgctaga ggccggtcta tttatgatat attctcacag
+     2101 tcagaaattg gagtgctggc tcgtataaaa aaaagacgag tagcgttctc tgagaatcaa
+     2161 aattctttct ttgatggctt cccaacagga tacaaggata ttgatgataa aggagttatc
+     2221 ttagctaaag gtaatttcgt gattatagca gctagaccat ctatagggaa aacagcttta
+     2281 gctatagaca tggcgataaa tcttgcggtt actcaacagc gtagagttgg tttcctatct
+     2341 ctagaaatga gcgcaggtca aattgttgag cggattattg ctaatttaac aggaatatct
+     2401 ggtgaaaaat tacaaagagg ggatctctct aaagaagaat tattccgagt agaagaagct
+     2461 ggagaaacgg ttagagaatc acatttttat atctgcagtg atagtcagta taagcttaac
+     2521 ttaatcgcga atcagatccg gttgctgaga aaagaagatc gagtagacgt aatatttatc
+     2581 gattacttgc agttgatcaa ctcatcggtt ggagaaaatc gtcaaaatga aatagcagat
+     2641 atatctagaa ccttaagagg tttagcctca gagctaaaca ttcctatagt ttgtttatcc
+     2701 caactatcta gaaaagttga ggatagagca aataaagttc ccatgctttc agatttgcga
+     2761 gacagcggtc aaatagagca agacgcagat gtgattttgt ttatcaatag gaaggaatcg
+     2821 tcttctaatt gtgagataac tgttgggaaa aatagacatg gatcggtttt ctcttcggta
+     2881 ttacatttcg atccaaaaat tagtaaattc tccgctatta aaaaagtatg gtaaattata
+     2941 gtaactgcca cttcatcaaa agtcctatcc accttgaaaa tcagaagttt ggaagaagac
+     3001 ctggtcaatc tattaagata tctcccaaat tggctcaaaa tgggatggta gaagttatag
+     3061 gtcttgattt tctttcatct cattaccatg cattagcagc tatccaaaga ttactgaccg
+     3121 caacgaatta caaggggaac acaaaagggg ttgttttatc cagagaatca aatagttttc
+     3181 aatttgaagg atggatacca agaatccgtt ttacaaaaac tgaattctta gaggcttatg
+     3241 gagttaagcg gtataaaaca tccagaaata agtatgagtt tagtggaaaa gaagctgaaa
+     3301 ctgctttaga agccttatac catttaggac atcaaccgtt tttaatagtg gcaactagaa
+     3361 ctcgatggac taatggaaca caaatagtag accgttacca aactctttct ccgatcatta
+     3421 ggatttacga aggatgggaa ggtttaactg acgaagaaaa tatagatata gacttaacac
+     3481 cttttaattc accacctaca cggaaacata aagggttcgt tgtagagcca tgtcctatct
+     3541 tggtagatca aatagaatcc tactttgtaa tcaagcctgc aaatgtatac caagaaataa
+     3601 aaatgcgttt cccaaatgca tcaaagtatg cttacacatt tatcgactgg gtgattacag
+     3661 cagctgcgaa aaagagacga aaattaacta aggataattc ttggccagaa aacttgttat
+     3721 taaacgttaa cgttaaaagt cttgcatata ttttaaggat gaatcggtac atctgtacaa
+     3781 ggaactggaa aaaaatcgag ttagctatcg ataaatgtat agaaatcgcc attcagcttg
+     3841 gctggttatc tagaagaaaa cgcattgaat ttctggattc ttctaaactc tctaaaaaag
+     3901 aaattctata tctaaataaa gagcgctttg aagaaataac taagaaatct aaagaacaaa
+     3961 tggaacaatt agaacaagaa tctattaatt aatagcaagc ttgaaactaa aaacctaatt
+     4021 tatttaaagc tcaaaataaa aaagagtttt aaaatgggaa attctggttt ttatttgtat
+     4081 aacactgaaa actgcgtctt tgctgataat atcaaagttg ggcaaatgac agagccgctc
+     4141 aaggaccagc aaataatcct tgggacaaca tcaacacctg tcgcagccaa aatgacagct
+     4201 tctgatggaa tatctttaac agtctccaat aattcatcaa ccaatgcttc tattacaatt
+     4261 ggtttggatg cggaaaaagc ttaccagctt attctagaaa agttgggaga tcaaattctt
+     4321 gatggaattg ctgatactat tgttgatagt acagtccaag atattttaga caaaatcaaa
+     4381 acagaccctt ctctaggttt gttgaaagct tttaacaact ttccaatcac taataaaatt
+     4441 caatgcaacg ggttattcac tcccagtaac attgaaactt tattaggagg aactgaaata
+     4501 ggaaaattca cagtcacacc caaaagctct gggagcatgt tcttagtctc agcagatatt
+     4561 attgcatcaa gaatggaagg cggcgttgtt ctagctttgg tacgagaagg tgattctaag
+     4621 ccctgcgcga ttagttatgg atactcatca ggcattccta atttatgtag tctaagaacc
+     4681 agtattacta atacaggatt gactccgaca acgtattcat tacgtgtagg cggtttagaa
+     4741 agcggtgtgg tatgggttaa tgccctttct aatggcaatg atattttagg aataacaaat
+     4801 acttctaatg tatctttttt agaggtaata cctcaaacaa acgcttaaac aatttttatt
+     4861 ggatttttct tataggtttt atatttagag aaaacagttc gaattacggg gtttgttatg
+     4921 caaaataaaa gaaaagtgag ggacgatttt attaaaattg ttaaagatgt gaaaaaagat
+     4981 ttccccgaat tagacctaaa aatacgagta aacaaggaaa aagtaacttt cttaaattct
+     5041 cccttagaac tctaccataa aagtgtctca ctaattctag gactgcttca acaaatagaa
+     5101 aactctttag gattattccc agactctcct gttcttgaaa aattagagga taacagttta
+     5161 aagctaaaaa aggctttgat tatgcttatc ttgtctagaa aagacatgtt ttccaaggct
+     5221 gaatagacaa cttactctaa cgttggagtt gatttgcaca ccttagtttt ttgctctttt
+     5281 aagggaggaa ctggaaaaac aacactttct ctaaacgtgg gatgcaactt ggcccaattt
+     5341 ttagggaaaa aagtgttact tgctgaccta gacccgcaat ccaatttatc ttctggattg
+     5401 ggggctagtg tcagaagtga ccaaaaaggc ttgcacgaca tagtatacac atcaaacgat
+     5461 ttaaaatcaa tcatttgcga aacaaaaaaa gatagtgtgg acctaattcc tgcatcattt
+     5521 tcatccgaac agtttagaga attggatatt catagaggac ctagtaacaa cttaaagtta
+     5581 tttctgaatg agtactgcgc tcctttttat gacatctgca taatagacac tccacctagc
+     5641 ctaggagggt taacgaaaga agcttttgtt gcaggagaca aattaattgc ttgtttaact
+     5701 ccagaacctt tttctattct agggttacaa aagatacgtg aattcttaag ttcggtcgga
+     5761 aaacctgaag aagaacacat tcttggaata gctttgtctt tttgggatga tcgtaactcg
+     5821 actaaccaaa tgtatataga cattatcgag tctatttaca aaaacaagct tttttcaaca
+     5881 aaaattcgtc gagatatttc tctcagccgt tctcttctta aagaagattc tgtagctaat
+     5941 gtctatccaa attctagggc cgcagaagat attctgaagt taacgcatga aatagcaaat
+     6001 attttgcata tcgaatatga acgagattac tctcagagga caacgtgaac aaactaaaaa
+     6061 aagaagcgga tgtctttttt aaaaaaaatc aaactgccgc ttctctagat tttaagaaga
+     6121 cgcttccctc cattgaacta ttctcagcaa ctttgaattc tgaggaaagt cagagtttgg
+     6181 atcgattatt tttatcagag tcccaaaact attcggatga agaattttat caagaagaca
+     6241 tcctagcggt aaaactgctt actggtcaga taaaatccat acagaagcaa cacgtacttc
+     6301 ttttaggaga aaaaatctat aatgctagaa aaatcctgag taaggatcac ttctcctcaa
+     6361 caactttttc atcttggata gagttagttt ttagaactaa gtcttctgct tacaatgctc
+     6421 ttgcatatta cgagcttttt ataaacctcc ccaaccaaac tctacaaaaa gagtttcaat
+     6481 cgatccccta taaatccgca tatattttgg ccgctagaaa aggcgattta aaaaccaagg
+     6541 tcgatgtgat agggaaagta tgtggaatgt cgaactcatc ggcgataagg gtgttggatc
+     6601 aatttcttcc ttcatctaga aacaaagacg ttagagaaac gatagataag tctgattcag
+     6661 agaagaatcg ccaattatct gatttcttaa tagagatact tcgcatcatg tgttccggag
+     6721 tttctttgtc ctcctataac gaaaatcttc tacaacagct ttttgaactt tttaagcaaa
+     6781 agagctgatc ctccgtcagc tcatatatat atatctatta tatatatata tttagggatt
+     6841 tgatttcacg agagagattt gcaactcttg gtggtagact ttgcaactct tggtggtaga
+     6901 ctttgcaact cttggtggta gactttgcaa ctcttggtgg tagacttggt cataatggac
+     6961 ttttgttaaa aaatttatta aaatcttaga gctccgattt tgaatagctt tggttaagaa
+     7021 aatgggctcg atggctttcc ataaaagtag attgttttta acttttgggg acgcgtcgga
+     7081 aatttggtta tctactttat cttatctaac tagaaaaaat tatgcgtctg ggattaactt
+     7141 tcttgtttct ttagagattc tggatttatc ggaaaccttg ataaaggcta tttctcttga
+     7201 ccacagcgaa tctttgttta aaatcaagtc tctagatgtt tttaatggaa aagttgtttc
+     7261 agaggcatct aaacaggcta gagcggcatg ctacatatct ttcacaaagt ttttgtatag
+     7321 attgaccaag ggatatatta aacccgctat tccattgaaa gattttggaa acactacatt
+     7381 ttttaaaatc cgagacaaaa tcaaaacaga atcgatttct aagcaggaat ggacagtttt
+     7441 ttttgaagcg ctccggatag tgaattatag agactattta atcggtaaat tgattgtaca
+     7501 ag
+//
+
index 80b48c3..2318971 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.gui;
 
+import java.util.Locale;
+
 import jalview.bin.Cache;
 import jalview.gui.JvOptionPane;
 import jalview.gui.WsJobParameters;
@@ -66,7 +68,7 @@ public class Jws2ParamView
   public static List<String> presetTests = new ArrayList<String>();
   static
   {
-    serviceTests.add("AAConWS".toLowerCase());
+    serviceTests.add("AAConWS".toLowerCase(Locale.ROOT));
   }
 
   public static Jws2Discoverer disc = null;
@@ -91,7 +93,7 @@ public class Jws2ParamView
     for (Jws2Instance service : disc.getServices())
     {
       if (serviceTests.size() == 0
-              || serviceTests.contains(service.serviceType.toLowerCase()))
+              || serviceTests.contains(service.serviceType.toLowerCase(Locale.ROOT)))
       {
         List<Preset> prl = null;
         Preset pr = null;
index e8b6c2b..d13dc0f 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.jabaws;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertNotNull;
 import static org.testng.AssertJUnit.assertTrue;
 
@@ -85,7 +87,7 @@ public class DisorderAnnotExportImport
     iupreds = new ArrayList<Jws2Instance>();
     for (Jws2Instance svc : disc.getServices())
     {
-      if (svc.getServiceTypeURI().toLowerCase().contains("iupredws"))
+      if (svc.getServiceTypeURI().toLowerCase(Locale.ROOT).contains("iupredws"))
       {
         iupreds.add(svc);
       }
index 889c003..cc9aba0 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.jabaws;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertNotNull;
 import static org.testng.AssertJUnit.assertTrue;
 
@@ -98,7 +100,7 @@ public class RNAStructExportImport
     for (Jws2Instance svc : disc.getServices())
     {
 
-      if (svc.getServiceTypeURI().toLowerCase().contains("rnaalifoldws"))
+      if (svc.getServiceTypeURI().toLowerCase(Locale.ROOT).contains("rnaalifoldws"))
       {
         rnaalifoldws = svc;
       }
index c0aa2ee..51ff19c 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ws.jws2;
 
+import java.util.Locale;
+
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertTrue;
@@ -68,7 +70,7 @@ public class ParameterUtilsTest
   @BeforeClass(alwaysRun = true)
   public static void setUpBeforeClass() throws Exception
   {
-    serviceTests.add("AAConWS".toLowerCase());
+    serviceTests.add("AAConWS".toLowerCase(Locale.ROOT));
     Cache.loadProperties("test/jalview/io/testProps.jvprops");
     Cache.initLogger();
     disc = JalviewJabawsTestUtils.getJabawsDiscoverer();
@@ -131,7 +133,7 @@ public class ParameterUtilsTest
   public boolean isForTesting(Jws2Instance service)
   {
     return serviceTests.size() == 0
-            || serviceTests.contains(service.serviceType.toLowerCase());
+            || serviceTests.contains(service.serviceType.toLowerCase(Locale.ROOT));
   }
 
   @Test(groups = { "Network" })
index 23f1c6e..c5c0f04 100644 (file)
@@ -15,6 +15,8 @@
  */
 package junit.extensions;
 
+import java.util.Locale;
+
 import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
@@ -432,7 +434,7 @@ final class PrivilegedAccessor
       {
         return false;
       }
-      if (className.startsWith(className.substring(0, 1).toUpperCase()))
+      if (className.startsWith(className.substring(0, 1).toUpperCase(Locale.ROOT)))
       {
         return true;
       }
index 14ec1e7..0f748ce 100644 (file)
@@ -68,7 +68,7 @@ public class PDBChainTest
   {
     System.out.println("setup");
     StructureImportSettings.setShowSeqFeatures(true);
-    c = new PDBChain("1GAQ", "A", false);
+    c = new PDBChain("1GAQ", "A");
   }
 
   @Test(groups = { "Functional" })
diff --git a/utils/debian/build_gradle.patch b/utils/debian/build_gradle.patch
new file mode 100644 (file)
index 0000000..1527c79
--- /dev/null
@@ -0,0 +1,2909 @@
+--- a/build.gradle     2021-09-21 09:52:04.653972716 +0100
++++ b/build.gradle     2021-09-21 09:52:18.117985307 +0100
+@@ -2,56 +2,12 @@
+  * For properties set within build.gradle, use camelCaseNoSpace.
+  */
+ import org.apache.tools.ant.filters.ReplaceTokens
+-import org.gradle.internal.os.OperatingSystem
+-import org.gradle.plugins.ide.internal.generator.PropertiesPersistableConfigurationObject
+-import org.gradle.api.internal.PropertiesTransformer
+-import org.gradle.util.ConfigureUtil
+-import org.gradle.plugins.ide.eclipse.model.Output
+-import org.gradle.plugins.ide.eclipse.model.Library
+-import java.security.MessageDigest
+-import groovy.transform.ExternalizeMethods
+-import groovy.util.XmlParser
+-import groovy.xml.XmlUtil
+-import com.vladsch.flexmark.util.ast.Node
+-import com.vladsch.flexmark.html.HtmlRenderer
+-import com.vladsch.flexmark.parser.Parser
+-import com.vladsch.flexmark.util.data.MutableDataSet
+-import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension
+-import com.vladsch.flexmark.ext.tables.TablesExtension
+-import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension
+-import com.vladsch.flexmark.ext.autolink.AutolinkExtension
+-import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension
+-import com.vladsch.flexmark.ext.toc.TocExtension
+-
+-buildscript {
+-  repositories {
+-    mavenCentral()
+-    mavenLocal()
+-  }
+-  dependencies {
+-    classpath "com.vladsch.flexmark:flexmark-all:0.62.0"
+-  }
+-}
+-
+ plugins {
+   id 'java'
+   id 'application'
+-  id 'eclipse'
+-  id "com.diffplug.gradle.spotless" version "3.28.0"
+-  id 'com.github.johnrengelman.shadow' version '4.0.3'
+-  id 'com.install4j.gradle' version '8.0.10'
+-  id 'com.dorongold.task-tree' version '1.5' // only needed to display task dependency tree with  gradle task1 [task2 ...] taskTree
+-  id 'com.palantir.git-version' version '0.12.3'
+-}
+-
+-repositories {
+-  jcenter()
+-  mavenCentral()
+-  mavenLocal()
+ }
+-
+ // in ext the values are cast to Object. Ensure string values are cast as String (and not GStringImpl) for later use
+ def string(Object o) {
+   return o == null ? "" : o.toString()
+@@ -92,23 +48,15 @@
+   }
+ }
+-ext {
++project.ext {
+   jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath()
+   jalviewDirRelativePath = jalviewDir
+-  getdownChannelName = CHANNEL.toLowerCase()
+-  // default to "default". Currently only has different cosmetics for "develop", "release", "default"
+-  propertiesChannelName = ["develop", "release", "test-release", "jalviewjs", "jalviewjs-release" ].contains(getdownChannelName) ? getdownChannelName : "default"
+-  // Import channel_properties
++  propertiesChannelName = "release"
+   channelDir = string("${jalviewDir}/${channel_properties_dir}/${propertiesChannelName}")
+   channelGradleProperties = string("${channelDir}/channel_gradle.properties")
+   overrideProperties(channelGradleProperties, false)
+-  // local build environment properties
+-  // can be "projectDir/local.properties"
+-  overrideProperties("${projectDir}/local.properties", true)
+-  // or "../projectDir_local.properties"
+-  overrideProperties(projectDir.getParent() + "/" + projectDir.getName() + "_local.properties", true)
+-
++  
+   ////  
+   // Import releaseProps from the RELEASE file
+   // or a file specified via JALVIEW_RELEASE_FILE if defined
+@@ -128,41 +76,6 @@
+   if (findProperty("JALVIEW_VERSION")==null || "".equals(JALVIEW_VERSION)) {
+     JALVIEW_VERSION = releaseProps.get("jalview.version")
+   }
+-  
+-  // this property set when running Eclipse headlessly
+-  j2sHeadlessBuildProperty = string("net.sf.j2s.core.headlessbuild")
+-  // this property set by Eclipse
+-  eclipseApplicationProperty = string("eclipse.application")
+-  // CHECK IF RUNNING FROM WITHIN ECLIPSE
+-  def eclipseApplicationPropertyVal = System.properties[eclipseApplicationProperty]
+-  IN_ECLIPSE = eclipseApplicationPropertyVal != null && eclipseApplicationPropertyVal.startsWith("org.eclipse.ui.")
+-  // BUT WITHOUT THE HEADLESS BUILD PROPERTY SET
+-  if (System.properties[j2sHeadlessBuildProperty].equals("true")) {
+-    println("Setting IN_ECLIPSE to ${IN_ECLIPSE} as System.properties['${j2sHeadlessBuildProperty}'] == '${System.properties[j2sHeadlessBuildProperty]}'")
+-    IN_ECLIPSE = false
+-  }
+-  if (IN_ECLIPSE) {
+-    println("WITHIN ECLIPSE IDE")
+-  } else {
+-    println("HEADLESS BUILD")
+-  }
+-  
+-  J2S_ENABLED = (project.hasProperty('j2s.compiler.status') && project['j2s.compiler.status'] != null && project['j2s.compiler.status'] == "enable")
+-  if (J2S_ENABLED) {
+-    println("J2S ENABLED")
+-  } 
+-  /* *-/
+-  System.properties.sort { it.key }.each {
+-    key, val -> println("SYSTEM PROPERTY ${key}='${val}'")
+-  }
+-  /-* *-/
+-  if (false && IN_ECLIPSE) {
+-    jalviewDir = jalviewDirAbsolutePath
+-  }
+-  */
+-
+-  // datestamp
+-  buildDate = new Date().format("yyyyMMdd")
+   // essentials
+   bareSourceDir = string(source_dir)
+@@ -173,218 +86,18 @@
+   classesDir = string("${jalviewDir}/${classes_dir}")
+-  // clover
+-  useClover = clover.equals("true")
+-  cloverBuildDir = "${buildDir}/clover"
+-  cloverInstrDir = file("${cloverBuildDir}/clover-instr")
+-  cloverClassesDir = file("${cloverBuildDir}/clover-classes")
+-  cloverReportDir = file("${buildDir}/reports/clover")
+-  cloverTestInstrDir = file("${cloverBuildDir}/clover-test-instr")
+-  cloverTestClassesDir = file("${cloverBuildDir}/clover-test-classes")
+-  //cloverTestClassesDir = cloverClassesDir
+-  cloverDb = string("${cloverBuildDir}/clover.db")
+-
+-  testSourceDir = useClover ? cloverTestInstrDir : testDir
+-  testClassesDir = useClover ? cloverTestClassesDir : "${jalviewDir}/${test_output_dir}"
+-
+-  getdownWebsiteDir = string("${jalviewDir}/${getdown_website_dir}/${JAVA_VERSION}")
+-  buildDist = true
+-  buildProperties = null
+-
+-  // the following values might be overridden by the CHANNEL switch
+-  getdownDir = string("${getdownChannelName}/${JAVA_VERSION}")
+-  getdownAppBase = string("${getdown_channel_base}/${getdownDir}")
+-  getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}")
+-  getdownAppDistDir = getdown_app_dir_alt
+-  getdownImagesDir = string("${jalviewDir}/${getdown_images_dir}")
+-  getdownSetAppBaseProperty = false // whether to pass the appbase and appdistdir to the application
+-  reportRsyncCommand = false
+-  jvlChannelName = CHANNEL.toLowerCase()
+-  install4jSuffix = CHANNEL.substring(0, 1).toUpperCase() + CHANNEL.substring(1).toLowerCase(); // BUILD -> Build
+-  install4jDMGDSStore = "${install4j_images_dir}/${install4j_dmg_ds_store}"
+-  install4jDMGBackgroundImage = "${install4j_images_dir}/${install4j_dmg_background}"
+-  install4jInstallerName = "${jalview_name} Non-Release Installer"
+-  install4jExecutableName = install4j_executable_name
+-  install4jExtraScheme = "jalviewx"
+-  install4jMacIconsFile = string("${install4j_images_dir}/${install4j_mac_icons_file}")
+-  install4jWindowsIconsFile = string("${install4j_images_dir}/${install4j_windows_icons_file}")
+-  install4jPngIconFile = string("${install4j_images_dir}/${install4j_png_icon_file}")
+-  install4jBackground = string("${install4j_images_dir}/${install4j_background}")
+-  switch (CHANNEL) {
+-
+-    case "BUILD":
+-    // TODO: get bamboo build artifact URL for getdown artifacts
+-    getdown_channel_base = bamboo_channelbase
+-    getdownChannelName = string("${bamboo_planKey}/${JAVA_VERSION}")
+-    getdownAppBase = string("${bamboo_channelbase}/${bamboo_planKey}${bamboo_getdown_channel_suffix}/${JAVA_VERSION}")
+-    jvlChannelName += "_${getdownChannelName}"
+-    // automatically add the test group Not-bamboo for exclusion 
+-    if ("".equals(testng_excluded_groups)) { 
+-      testng_excluded_groups = "Not-bamboo"
+-    }
+-    install4jExtraScheme = "jalviewb"
+-    break
++  useClover = false
+-    case [ "RELEASE", "JALVIEWJS-RELEASE" ]:
+-    getdownAppDistDir = getdown_app_dir_release
+-    reportRsyncCommand = true
+-    install4jSuffix = ""
+-    install4jInstallerName = "${jalview_name} Installer"
+-    break
+-
+-    case "ARCHIVE":
+-    getdownChannelName = CHANNEL.toLowerCase()+"/${JALVIEW_VERSION}"
+-    getdownDir = string("${getdownChannelName}/${JAVA_VERSION}")
+-    getdownAppBase = string("${getdown_channel_base}/${getdownDir}")
+-    if (!file("${ARCHIVEDIR}/${package_dir}").exists()) {
+-      throw new GradleException("Must provide an ARCHIVEDIR value to produce an archive distribution")
+-    } else {
+-      package_dir = string("${ARCHIVEDIR}/${package_dir}")
+-      buildProperties = string("${ARCHIVEDIR}/${classes_dir}/${build_properties_file}")
+-      buildDist = false
+-    }
+-    reportRsyncCommand = true
+-    install4jExtraScheme = "jalviewa"
+-    break
+-
+-    case "ARCHIVELOCAL":
+-    getdownChannelName = string("archive/${JALVIEW_VERSION}")
+-    getdownDir = string("${getdownChannelName}/${JAVA_VERSION}")
+-    getdownAppBase = file(getdownWebsiteDir).toURI().toString()
+-    if (!file("${ARCHIVEDIR}/${package_dir}").exists()) {
+-      throw new GradleException("Must provide an ARCHIVEDIR value to produce an archive distribution")
+-    } else {
+-      package_dir = string("${ARCHIVEDIR}/${package_dir}")
+-      buildProperties = string("${ARCHIVEDIR}/${classes_dir}/${build_properties_file}")
+-      buildDist = false
+-    }
+-    reportRsyncCommand = true
+-    getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
+-    install4jSuffix = "Archive"
+-    install4jExtraScheme = "jalviewa"
+-    break
+-
+-    case "DEVELOP":
+-    reportRsyncCommand = true
+-    getdownSetAppBaseProperty = true
+-    // DEVELOP-RELEASE is usually associated with a Jalview release series so set the version
+-    JALVIEW_VERSION=JALVIEW_VERSION+"-d${buildDate}"
+-    
+-    install4jSuffix = "Develop"
+-    install4jExtraScheme = "jalviewd"
+-    install4jInstallerName = "${jalview_name} Develop Installer"
+-    break
+-
+-    case "TEST-RELEASE":
+-    reportRsyncCommand = true
+-    // Don't ignore transpile errors for release build
+-    if (jalviewjs_ignore_transpile_errors.equals("true")) {
+-      jalviewjs_ignore_transpile_errors = "false"
+-      println("Setting jalviewjs_ignore_transpile_errors to 'false'")
+-    }
+-    JALVIEW_VERSION = JALVIEW_VERSION+"-test"
+-    install4jSuffix = "Test"
+-    install4jExtraScheme = "jalviewt"
+-    install4jInstallerName = "${jalview_name} Test Installer"
+-    break
+-
+-    case ~/^SCRATCH(|-[-\w]*)$/:
+-    getdownChannelName = CHANNEL
+-    JALVIEW_VERSION = JALVIEW_VERSION+"-"+CHANNEL
+-    
+-    getdownDir = string("${getdownChannelName}/${JAVA_VERSION}")
+-    getdownAppBase = string("${getdown_channel_base}/${getdownDir}")
+-    reportRsyncCommand = true
+-    install4jSuffix = "Scratch"
+-    break
+-
+-    case "TEST-LOCAL":
+-    if (!file("${LOCALDIR}").exists()) {
+-      throw new GradleException("Must provide a LOCALDIR value to produce a local distribution")
+-    } else {
+-      getdownAppBase = file(file("${LOCALDIR}").getAbsolutePath()).toURI().toString()
+-      getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
+-    }
+-    JALVIEW_VERSION = "TEST"
+-    install4jSuffix = "Test-Local"
+-    install4jExtraScheme = "jalviewt"
+-    install4jInstallerName = "${jalview_name} Test Installer"
+-    break
+-
+-    case [ "LOCAL", "JALVIEWJS" ]:
+-    JALVIEW_VERSION = "TEST"
+-    getdownAppBase = file(getdownWebsiteDir).toURI().toString()
+-    getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
+-    install4jExtraScheme = "jalviewl"
+-    break
+-
+-    default: // something wrong specified
+-    throw new GradleException("CHANNEL must be one of BUILD, RELEASE, ARCHIVE, DEVELOP, TEST-RELEASE, SCRATCH-..., LOCAL [default]")
+-    break
+-
+-  }
+-  // override getdownAppBase if requested
+-  if (findProperty("getdown_appbase_override") != null) {
+-    // revert to LOCAL if empty string
+-    if (string(getdown_appbase_override) == "") {
+-      getdownAppBase = file(getdownWebsiteDir).toURI().toString()
+-      getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
+-    } else if (string(getdown_appbase_override).startsWith("file://")) {
+-      getdownAppBase = string(getdown_appbase_override)
+-      getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
+-    } else {
+-      getdownAppBase = string(getdown_appbase_override)
+-    }
+-    println("Overriding getdown appbase with '${getdownAppBase}'")
+-  }
+-  // sanitise file name for jalview launcher file for this channel
+-  jvlChannelName = jvlChannelName.replaceAll("[^\\w\\-]+", "_")
+-  // install4j application and folder names
+-  if (install4jSuffix == "") {
+-    install4jApplicationName = "${jalview_name}"
+-    install4jBundleId = "${install4j_bundle_id}"
+-    install4jWinApplicationId = install4j_release_win_application_id
+-  } else {
+-    install4jApplicationName = "${jalview_name} ${install4jSuffix}"
+-    install4jBundleId = "${install4j_bundle_id}-" + install4jSuffix.toLowerCase()
+-    // add int hash of install4jSuffix to the last part of the application_id
+-    def id = install4j_release_win_application_id
+-    def idsplitreverse = id.split("-").reverse()
+-    idsplitreverse[0] = idsplitreverse[0].toInteger() + install4jSuffix.hashCode()
+-    install4jWinApplicationId = idsplitreverse.reverse().join("-")
+-  }
+-  // sanitise folder and id names
+-  // install4jApplicationFolder = e.g. "Jalview Build"
+-  install4jApplicationFolder = install4jApplicationName
+-                                    .replaceAll("[\"'~:/\\\\\\s]", "_") // replace all awkward filename chars " ' ~ : / \
+-                                    .replaceAll("_+", "_") // collapse __
+-  install4jInternalId = install4jApplicationName
+-                                    .replaceAll(" ","_")
+-                                    .replaceAll("[^\\w\\-\\.]", "_") // replace other non [alphanumeric,_,-,.]
+-                                    .replaceAll("_+", "") // collapse __
+-                                    //.replaceAll("_*-_*", "-") // collapse _-_
+-  install4jUnixApplicationFolder = install4jApplicationName
+-                                    .replaceAll(" ","_")
+-                                    .replaceAll("[^\\w\\-\\.]", "_") // replace other non [alphanumeric,_,-,.]
+-                                    .replaceAll("_+", "_") // collapse __
+-                                    .replaceAll("_*-_*", "-") // collapse _-_
+-                                    .toLowerCase()
+-
+-  getdownWrapperLink = install4jUnixApplicationFolder // e.g. "jalview_local"
+-  getdownAppDir = string("${getdownWebsiteDir}/${getdownAppDistDir}")
+-  //getdownJ11libDir = "${getdownWebsiteDir}/${getdown_j11lib_dir}"
+-  getdownResourceDir = string("${getdownWebsiteDir}/${getdown_resource_dir}")
+-  getdownInstallDir = string("${getdownWebsiteDir}/${getdown_install_dir}")
+-  getdownFilesDir = string("${jalviewDir}/${getdown_files_dir}/${JAVA_VERSION}/")
+-  getdownFilesInstallDir = string("${getdownFilesDir}/${getdown_install_dir}")
+-  /* compile without modules -- using classpath libraries
+-  modules_compileClasspath = fileTree(dir: "${jalviewDir}/${j11modDir}", include: ["*.jar"])
+-  modules_runtimeClasspath = modules_compileClasspath
+-  */
+-  def details = versionDetails()
+-  gitHash = details.gitHash
+-  gitBranch = details.branchName
++  resourceClassesDir = classesDir
++
++  testSourceDir = testDir
++  testClassesDir = "${jalviewDir}/${test_output_dir}"
++  buildProperties = string("${classesDir}/${build_properties_file}")
++  getdownSetAppBaseProperty = false // whether to pass the appbase and appdistdir to the application
++
++  install4jApplicationName = "${jalview_name}"
++  
+   println("Using a ${CHANNEL} profile.")
+   additional_compiler_args = []
+@@ -396,71 +109,16 @@
+     libDistDir = j8libDir
+     compile_source_compatibility = 1.8
+     compile_target_compatibility = 1.8
+-    // these are getdown.txt properties defined dependent on the JAVA_VERSION
+-    getdownAltJavaMinVersion = string(findProperty("getdown_alt_java8_min_version"))
+-    getdownAltJavaMaxVersion = string(findProperty("getdown_alt_java8_max_version"))
+-    // this property is assigned below and expanded to multiple lines in the getdown task
+-    getdownAltMultiJavaLocation = string(findProperty("getdown_alt_java8_txt_multi_java_location"))
+-    // this property is for the Java library used in eclipse
+-    eclipseJavaRuntimeName = string("JavaSE-1.8")
+   } else if (JAVA_VERSION.equals("11")) {
+     JAVA_INTEGER_VERSION = string("11")
+     libDir = j11libDir
+     libDistDir = j11libDir
+     compile_source_compatibility = 11
+     compile_target_compatibility = 11
+-    getdownAltJavaMinVersion = string(findProperty("getdown_alt_java11_min_version"))
+-    getdownAltJavaMaxVersion = string(findProperty("getdown_alt_java11_max_version"))
+-    getdownAltMultiJavaLocation = string(findProperty("getdown_alt_java11_txt_multi_java_location"))
+-    eclipseJavaRuntimeName = string("JavaSE-11")
+-    /* compile without modules -- using classpath libraries
+-    additional_compiler_args += [
+-    '--module-path', modules_compileClasspath.asPath,
+-    '--add-modules', j11modules
+-    ]
+-     */
+-  } else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) {
+-    JAVA_INTEGER_VERSION = JAVA_VERSION
+-    libDir = j11libDir
+-    libDistDir = j11libDir
+-    compile_source_compatibility = JAVA_VERSION
+-    compile_target_compatibility = JAVA_VERSION
+-    getdownAltJavaMinVersion = string(findProperty("getdown_alt_java11_min_version"))
+-    getdownAltJavaMaxVersion = string(findProperty("getdown_alt_java11_max_version"))
+-    getdownAltMultiJavaLocation = string(findProperty("getdown_alt_java11_txt_multi_java_location"))
+-    eclipseJavaRuntimeName = string("JavaSE-11")
+-    /* compile without modules -- using classpath libraries
+-    additional_compiler_args += [
+-    '--module-path', modules_compileClasspath.asPath,
+-    '--add-modules', j11modules
+-    ]
+-     */
+   } else {
+     throw new GradleException("JAVA_VERSION=${JAVA_VERSION} not currently supported by Jalview")
+   }
+-
+-  // for install4j
+-  JAVA_MIN_VERSION = JAVA_VERSION
+-  JAVA_MAX_VERSION = JAVA_VERSION
+-  def jreInstallsDir = string(jre_installs_dir)
+-  if (jreInstallsDir.startsWith("~/")) {
+-    jreInstallsDir = System.getProperty("user.home") + jreInstallsDir.substring(1)
+-  }
+-  macosJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-mac-x64/jre")
+-  macosJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-mac-x64.tar.gz")
+-  windowsJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-windows-x64/jre")
+-  windowsJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-windows-x64.tar.gz")
+-  linuxJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-linux-x64/jre")
+-  linuxJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-linux-x64.tar.gz")
+-  install4jDir = string("${jalviewDir}/${install4j_utils_dir}")
+-  install4jConfFileName = string("jalview-install4j-conf.install4j")
+-  install4jConfFile = file("${install4jDir}/${install4jConfFileName}")
+-  install4jHomeDir = install4j_home_dir
+-  if (install4jHomeDir.startsWith("~/")) {
+-    install4jHomeDir = System.getProperty("user.home") + install4jHomeDir.substring(1)
+-  }
+-
+   resourceBuildDir = string("${buildDir}/resources")
+   resourcesBuildDir = string("${resourceBuildDir}/resources_build")
+   helpBuildDir = string("${resourceBuildDir}/help_build")
+@@ -474,31 +132,6 @@
+   helpSourceDir = string("${helpParentDir}/${help_dir}")
+   helpFile = string("${helpBuildDir}/${help_dir}/help.jhm")
+-
+-  relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath())
+-  jalviewjsBuildDir = string("${relativeBuildDir}/jalviewjs")
+-  jalviewjsSiteDir = string("${jalviewjsBuildDir}/${jalviewjs_site_dir}")
+-  if (IN_ECLIPSE) {
+-    jalviewjsTransferSiteJsDir = string(jalviewjsSiteDir)
+-  } else {
+-    jalviewjsTransferSiteJsDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_js")
+-  }
+-  jalviewjsTransferSiteLibDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_lib")
+-  jalviewjsTransferSiteSwingJsDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_swingjs")
+-  jalviewjsTransferSiteCoreDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_core")
+-  jalviewjsJalviewCoreHtmlFile = string("")
+-  jalviewjsJalviewCoreName = string(jalviewjs_core_name)
+-  jalviewjsCoreClasslists = []
+-  jalviewjsJalviewTemplateName = string(jalviewjs_name)
+-  jalviewjsJ2sSettingsFileName = string("${jalviewDir}/${jalviewjs_j2s_settings}")
+-  jalviewjsJ2sAltSettingsFileName = string("${jalviewDir}/${jalviewjs_j2s_alt_settings}")
+-  jalviewjsJ2sProps = null
+-  jalviewjsJ2sPlugin = jalviewjs_j2s_plugin
+-
+-  eclipseWorkspace = null
+-  eclipseBinary = string("")
+-  eclipseVersion = string("")
+-  eclipseDebug = false
+   // ENDEXT
+ }
+@@ -517,27 +150,12 @@
+     compileClasspath = files(sourceSets.main.java.outputDir)
+     compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"])
+-    runtimeClasspath = compileClasspath
+-    runtimeClasspath += files(sourceSets.main.resources.srcDirs)
+-  }
+-
+-  clover {
+-    java {
+-      srcDirs cloverInstrDir
+-      outputDir = cloverClassesDir
+-    }
+-
+-    resources {
+-      srcDirs = sourceSets.main.resources.srcDirs
+-    }
+-    compileClasspath = files( sourceSets.clover.java.outputDir )
+-    //compileClasspath += files( testClassesDir )
++    compileClasspath = files(sourceSets.main.java.outputDir)
+     compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"])
+-    compileClasspath += fileTree(dir: "${jalviewDir}/${clover_lib_dir}", include: ["*.jar"])
+-    compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["**/*.jar"])
+     runtimeClasspath = compileClasspath
++    runtimeClasspath += files(sourceSets.main.resources.srcDirs)
+   }
+   test {
+@@ -557,453 +175,41 @@
+     runtimeClasspath = compileClasspath
+     runtimeClasspath += files(sourceSets.test.resources.srcDirs)
+   }
+-
+-}
+-
+-
+-// eclipse project and settings files creation, also used by buildship
+-eclipse {
+-  project {
+-    name = eclipse_project_name
+-
+-    natures 'org.eclipse.jdt.core.javanature',
+-    'org.eclipse.jdt.groovy.core.groovyNature',
+-    'org.eclipse.buildship.core.gradleprojectnature'
+-
+-    buildCommand 'org.eclipse.jdt.core.javabuilder'
+-    buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'
+-  }
+-
+-  classpath {
+-    //defaultOutputDir = sourceSets.main.java.outputDir
+-    configurations.each{ c->
+-      if (c.isCanBeResolved()) {
+-        minusConfigurations += [c]
+-      }
+-    }
+-
+-    plusConfigurations = [ ]
+-    file {
+-
+-      whenMerged { cp ->
+-        def removeTheseToo = []
+-        HashMap<String, Boolean> alreadyAddedSrcPath = new HashMap<>();
+-        cp.entries.each { entry ->
+-          // This conditional removes all src classpathentries that a) have already been added or b) aren't "src" or "test".
+-          // e.g. this removes the resources dir being copied into bin/main, bin/test AND bin/clover
+-          // we add the resources and help/help dirs in as libs afterwards (see below)
+-          if (entry.kind == 'src') {
+-            if (alreadyAddedSrcPath.getAt(entry.path) || !(entry.path == bareSourceDir || entry.path == bareTestSourceDir)) {
+-              removeTheseToo += entry
+-            } else {
+-              alreadyAddedSrcPath.putAt(entry.path, true)
+-            }
+-          }
+-
+-        }
+-        cp.entries.removeAll(removeTheseToo)
+-
+-        //cp.entries += new Output("${eclipse_bin_dir}/main")
+-        if (file(helpParentDir).isDirectory()) {
+-          cp.entries += new Library(fileReference(helpParentDir))
+-        }
+-        if (file(resourceDir).isDirectory()) {
+-          cp.entries += new Library(fileReference(resourceDir))
+-        }
+-
+-        HashMap<String, Boolean> alreadyAddedLibPath = new HashMap<>();
+-
+-        sourceSets.main.compileClasspath.findAll { it.name.endsWith(".jar") }.any {
+-          //don't want to add outputDir as eclipse is using its own output dir in bin/main
+-          if (it.isDirectory() || ! it.exists()) {
+-            // don't add dirs to classpath, especially if they don't exist
+-            return false // groovy "continue" in .any closure
+-          }
+-          def itPath = it.toString()
+-          if (itPath.startsWith("${jalviewDirAbsolutePath}/")) {
+-            // make relative path
+-            itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
+-          }
+-          if (alreadyAddedLibPath.get(itPath)) {
+-            //println("Not adding duplicate entry "+itPath)
+-          } else {
+-            //println("Adding entry "+itPath)
+-            cp.entries += new Library(fileReference(itPath))
+-            alreadyAddedLibPath.put(itPath, true)
+-          }
+-        }
+-
+-        sourceSets.test.compileClasspath.findAll { it.name.endsWith(".jar") }.any {
+-          //no longer want to add outputDir as eclipse is using its own output dir in bin/main
+-          if (it.isDirectory() || ! it.exists()) {
+-            // don't add dirs to classpath
+-            return false // groovy "continue" in .any closure
+-          }
+-
+-          def itPath = it.toString()
+-          if (itPath.startsWith("${jalviewDirAbsolutePath}/")) {
+-            itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
+-          }
+-          if (alreadyAddedLibPath.get(itPath)) {
+-            // don't duplicate
+-          } else {
+-            def lib = new Library(fileReference(itPath))
+-            lib.entryAttributes["test"] = "true"
+-            cp.entries += lib
+-            alreadyAddedLibPath.put(itPath, true)
+-          }
+-        }
+-
+-      } // whenMerged
+-
+-    } // file
+-
+-    containers 'org.eclipse.buildship.core.gradleclasspathcontainer'
+-
+-  } // classpath
+-
+-  jdt {
+-    // for the IDE, use java 11 compatibility
+-    sourceCompatibility = compile_source_compatibility
+-    targetCompatibility = compile_target_compatibility
+-    javaRuntimeName = eclipseJavaRuntimeName
+-
+-    // add in jalview project specific properties/preferences into eclipse core preferences
+-    file {
+-      withProperties { props ->
+-        def jalview_prefs = new Properties()
+-        def ins = new FileInputStream("${jalviewDirAbsolutePath}/${eclipse_extra_jdt_prefs_file}")
+-        jalview_prefs.load(ins)
+-        ins.close()
+-        jalview_prefs.forEach { t, v ->
+-          if (props.getAt(t) == null) {
+-            props.putAt(t, v)
+-          }
+-        }
+-        // codestyle file -- overrides previous formatter prefs
+-        def csFile = file("${jalviewDirAbsolutePath}/${eclipse_codestyle_file}")
+-        if (csFile.exists()) {
+-          XmlParser parser = new XmlParser()
+-          def profiles = parser.parse(csFile)
+-          def profile = profiles.'profile'.find { p -> (p.'@kind' == "CodeFormatterProfile" && p.'@name' == "Jalview") }
+-          if (profile != null) {
+-            profile.'setting'.each { s ->
+-              def id = s.'@id'
+-              def value = s.'@value'
+-              if (id != null && value != null) {
+-                props.putAt(id, value)
+-              }
+-            }
+-          }
+-        }
+-      }
+-    }
+-
+-  } // jdt
+-
+-  if (IN_ECLIPSE) {
+-    // Don't want these to be activated if in headless build
+-    synchronizationTasks "eclipseSynchronizationTask"
+-    //autoBuildTasks "eclipseAutoBuildTask"
+-
+-  }
+-}
+-
+-
+-/* hack to change eclipse prefs in .settings files other than org.eclipse.jdt.core.prefs */
+-// Class to allow updating arbitrary properties files
+-class PropertiesFile extends PropertiesPersistableConfigurationObject {
+-  public PropertiesFile(PropertiesTransformer t) { super(t); }
+-  @Override protected void load(Properties properties) { }
+-  @Override protected void store(Properties properties) { }
+-  @Override protected String getDefaultResourceName() { return ""; }
+-  // This is necessary, because PropertiesPersistableConfigurationObject fails
+-  // if no default properties file exists.
+-  @Override public void loadDefaults() { load(new StringBufferInputStream("")); }
+-}
+-
+-// Task to update arbitrary properties files (set outputFile)
+-class PropertiesFileTask extends PropertiesGeneratorTask<PropertiesFile> {
+-  private final PropertiesFileContentMerger file;
+-  public PropertiesFileTask() { file = new PropertiesFileContentMerger(getTransformer()); }
+-  protected PropertiesFile create() { return new PropertiesFile(getTransformer()); }
+-  protected void configure(PropertiesFile props) {
+-    file.getBeforeMerged().execute(props); file.getWhenMerged().execute(props);
+-  }
+-  public void file(Closure closure) { ConfigureUtil.configure(closure, file); }
+-}
+-
+-task eclipseUIPreferences(type: PropertiesFileTask) {
+-  description = "Generate Eclipse additional settings"
+-  def filename = "org.eclipse.jdt.ui.prefs"
+-  outputFile = "$projectDir/.settings/${filename}" as File
+-  file {
+-    withProperties {
+-      it.load new FileInputStream("$projectDir/utils/eclipse/${filename}" as String)
++ /*  test {
++    java {
++      srcDirs testSourceDir
++      outputDir = file(testClassesDir)
+     }
+-  }
+-}
+-task eclipseGroovyCorePreferences(type: PropertiesFileTask) {
+-  description = "Generate Eclipse additional settings"
+-  def filename = "org.eclipse.jdt.groovy.core.prefs"
+-  outputFile = "$projectDir/.settings/${filename}" as File
+-  file {
+-    withProperties {
+-      it.load new FileInputStream("$projectDir/utils/eclipse/${filename}" as String)
++    resources {
++      srcDirs = sourceSets.main.resources.srcDirs
+     }
+-  }
+-}
+-
+-task eclipseAllPreferences {
+-  dependsOn eclipseJdt
+-  dependsOn eclipseUIPreferences
+-  dependsOn eclipseGroovyCorePreferences
+-}
+-
+-eclipseUIPreferences.mustRunAfter eclipseJdt
+-eclipseGroovyCorePreferences.mustRunAfter eclipseJdt
+-
+-/* end of eclipse preferences hack */
+-
+-
+-// clover bits
+-
+-
+-task cleanClover {
+-  doFirst {
+-    delete cloverBuildDir
+-    delete cloverReportDir
+-  }
+-}
+-
+-
+-task cloverInstrJava(type: JavaExec) {
+-  group = "Verification"
+-  description = "Create clover instrumented source java files"
+-
+-  dependsOn cleanClover
+-
+-  inputs.files(sourceSets.main.allJava)
+-  outputs.dir(cloverInstrDir)
+-
+-  //classpath = fileTree(dir: "${jalviewDir}/${clover_lib_dir}", include: ["*.jar"])
+-  classpath = sourceSets.clover.compileClasspath
+-  main = "com.atlassian.clover.CloverInstr"
+-
+-  def argsList = [
+-    "--encoding",
+-    "UTF-8",
+-    "--initstring",
+-    cloverDb,
+-    "--destdir",
+-    cloverInstrDir.getPath(),
+-  ]
+-  def srcFiles = sourceSets.main.allJava.files
+-  argsList.addAll(
+-    srcFiles.collect(
+-      { file -> file.absolutePath }
+-    )
+-  )
+-  args argsList.toArray()
+-
+-  doFirst {
+-    delete cloverInstrDir
+-    println("Clover: About to instrument "+srcFiles.size() +" files")
+-  }
+-}
+-
+-
+-task cloverInstrTests(type: JavaExec) {
+-  group = "Verification"
+-  description = "Create clover instrumented source test files"
+-
+-  dependsOn cleanClover
+-
+-  inputs.files(testDir)
+-  outputs.dir(cloverTestInstrDir)
+-
+-  classpath = sourceSets.clover.compileClasspath
+-  main = "com.atlassian.clover.CloverInstr"
+-
+-  def argsList = [
+-    "--encoding",
+-    "UTF-8",
+-    "--initstring",
+-    cloverDb,
+-    "--srcdir",
+-    testDir,
+-    "--destdir",
+-    cloverTestInstrDir.getPath(),
+-  ]
+-  args argsList.toArray()
+-
+-  doFirst {
+-    delete cloverTestInstrDir
+-    println("Clover: About to instrument test files")
+-  }
+-}
+-
+-
+-task cloverInstr {
+-  group = "Verification"
+-  description = "Create clover instrumented all source files"
+-
+-  dependsOn cloverInstrJava
+-  dependsOn cloverInstrTests
+-}
+-
+-
+-cloverClasses.dependsOn cloverInstr
+-
+-
+-task cloverConsoleReport(type: JavaExec) {
+-  group = "Verification"
+-  description = "Creates clover console report"
+-
+-  onlyIf {
+-    file(cloverDb).exists()
+-  }
+-
+-  inputs.dir cloverClassesDir
+-
+-  classpath = sourceSets.clover.runtimeClasspath
+-  main = "com.atlassian.clover.reporters.console.ConsoleReporter"
+-
+-  if (cloverreport_mem.length() > 0) {
+-    maxHeapSize = cloverreport_mem
+-  }
+-  if (cloverreport_jvmargs.length() > 0) {
+-    jvmArgs Arrays.asList(cloverreport_jvmargs.split(" "))
+-  }
+-
+-  def argsList = [
+-    "--alwaysreport",
+-    "--initstring",
+-    cloverDb,
+-    "--unittests"
+-  ]
+-
+-  args argsList.toArray()
+-}
+-
+-
+-task cloverHtmlReport(type: JavaExec) {
+-  group = "Verification"
+-  description = "Creates clover HTML report"
+-
+-  onlyIf {
+-    file(cloverDb).exists()
+-  }
+-
+-  def cloverHtmlDir = cloverReportDir
+-  inputs.dir cloverClassesDir
+-  outputs.dir cloverHtmlDir
+-
+-  classpath = sourceSets.clover.runtimeClasspath
+-  main = "com.atlassian.clover.reporters.html.HtmlReporter"
+-
+-  if (cloverreport_mem.length() > 0) {
+-    maxHeapSize = cloverreport_mem
+-  }
+-  if (cloverreport_jvmargs.length() > 0) {
+-    jvmArgs Arrays.asList(cloverreport_jvmargs.split(" "))
+-  }
+-
+-  def argsList = [
+-    "--alwaysreport",
+-    "--initstring",
+-    cloverDb,
+-    "--outputdir",
+-    cloverHtmlDir
+-  ]
+-
+-  if (cloverreport_html_options.length() > 0) {
+-    argsList += cloverreport_html_options.split(" ")
+-  }
+-
+-  args argsList.toArray()
+-}
+-
+-
+-task cloverXmlReport(type: JavaExec) {
+-  group = "Verification"
+-  description = "Creates clover XML report"
+-
+-  onlyIf {
+-    file(cloverDb).exists()
+-  }
+-
+-  def cloverXmlFile = "${cloverReportDir}/clover.xml"
+-  inputs.dir cloverClassesDir
+-  outputs.file cloverXmlFile
+-
+-  classpath = sourceSets.clover.runtimeClasspath
+-  main = "com.atlassian.clover.reporters.xml.XMLReporter"
+-
+-  if (cloverreport_mem.length() > 0) {
+-    maxHeapSize = cloverreport_mem
+-  }
+-  if (cloverreport_jvmargs.length() > 0) {
+-    jvmArgs Arrays.asList(cloverreport_jvmargs.split(" "))
+-  }
+-
+-  def argsList = [
+-    "--alwaysreport",
+-    "--initstring",
+-    cloverDb,
+-    "--outfile",
+-    cloverXmlFile
+-  ]
+-
+-  if (cloverreport_xml_options.length() > 0) {
+-    argsList += cloverreport_xml_options.split(" ")
+-  }
+-
+-  args argsList.toArray()
+-}
++    compileClasspath = files( sourceSets.test.java.outputDir )
++    compileClasspath += sourceSets.main.compileClasspath
++    compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["**   REMOVE_THIS_GAP  /*.jar"])
+-task cloverReport {
+-  group = "Verification"
+-  description = "Creates clover reports"
+-
+-  dependsOn cloverXmlReport
+-  dependsOn cloverHtmlReport
+-}
+-
+-
+-compileCloverJava {
+-
+-  doFirst {
+-    sourceCompatibility = compile_source_compatibility
+-    targetCompatibility = compile_target_compatibility
+-    options.compilerArgs += additional_compiler_args
+-    print ("Setting target compatibility to "+targetCompatibility+"\n")
++    runtimeClasspath = compileClasspath
+   }
+-  //classpath += configurations.cloverRuntime
++*/
+ }
+-// end clover bits
+ compileJava {
+-  // JBP->BS should the print statement in doFirst refer to compile_target_compatibility ?
+   sourceCompatibility = compile_source_compatibility
+   targetCompatibility = compile_target_compatibility
+   options.compilerArgs = additional_compiler_args
+-  options.encoding = "UTF-8"
+   doFirst {
+     print ("Setting target compatibility to "+compile_target_compatibility+"\n")
+   }
+-
+ }
+ compileTestJava {
+-  sourceCompatibility = compile_source_compatibility
+-  targetCompatibility = compile_target_compatibility
+-  options.compilerArgs = additional_compiler_args
+   doFirst {
++    sourceCompatibility = compile_source_compatibility
++    targetCompatibility = compile_target_compatibility
++    options.compilerArgs = additional_compiler_args
+     print ("Setting target compatibility to "+targetCompatibility+"\n")
+   }
+ }
+@@ -1017,7 +223,6 @@
+ cleanTest {
+-  dependsOn cleanClover
+   doFirst {
+     delete sourceSets.test.java.outputDir
+   }
+@@ -1031,85 +236,6 @@
+ }
+-def convertMdToHtml (FileTree mdFiles, File cssFile) {
+-  MutableDataSet options = new MutableDataSet()
+-
+-  def extensions = new ArrayList<>()
+-  extensions.add(AnchorLinkExtension.create()) 
+-  extensions.add(AutolinkExtension.create())
+-  extensions.add(StrikethroughExtension.create())
+-  extensions.add(TaskListExtension.create())
+-  extensions.add(TablesExtension.create())
+-  extensions.add(TocExtension.create())
+-  
+-  options.set(Parser.EXTENSIONS, extensions)
+-
+-  // set GFM table parsing options
+-  options.set(TablesExtension.WITH_CAPTION, false)
+-  options.set(TablesExtension.COLUMN_SPANS, false)
+-  options.set(TablesExtension.MIN_HEADER_ROWS, 1)
+-  options.set(TablesExtension.MAX_HEADER_ROWS, 1)
+-  options.set(TablesExtension.APPEND_MISSING_COLUMNS, true)
+-  options.set(TablesExtension.DISCARD_EXTRA_COLUMNS, true)
+-  options.set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true)
+-  // GFM anchor links
+-  options.set(AnchorLinkExtension.ANCHORLINKS_SET_ID, false)
+-  options.set(AnchorLinkExtension.ANCHORLINKS_ANCHOR_CLASS, "anchor")
+-  options.set(AnchorLinkExtension.ANCHORLINKS_SET_NAME, true)
+-  options.set(AnchorLinkExtension.ANCHORLINKS_TEXT_PREFIX, "<span class=\"octicon octicon-link\"></span>")
+-
+-  Parser parser = Parser.builder(options).build()
+-  HtmlRenderer renderer = HtmlRenderer.builder(options).build()
+-
+-  mdFiles.each { mdFile ->
+-    // add table of contents
+-    def mdText = "[TOC]\n"+mdFile.text
+-
+-    // grab the first top-level title
+-    def title = null
+-    def titleRegex = /(?m)^#(\s+|([^#]))(.*)/
+-    def matcher = mdText =~ titleRegex
+-    if (matcher.size() > 0) {
+-      // matcher[0][2] is the first character of the title if there wasn't any whitespace after the #
+-      title = (matcher[0][2] != null ? matcher[0][2] : "")+matcher[0][3]
+-    }
+-    // or use the filename if none found
+-    if (title == null) {
+-      title = mdFile.getName()
+-    }
+-
+-    Node document = parser.parse(mdText)
+-    String htmlBody = renderer.render(document)
+-    def htmlText = '''<html>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+-<html xmlns="http://www.w3.org/1999/xhtml">
+-  <head>
+-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+-    <meta http-equiv="Content-Style-Type" content="text/css" />
+-    <meta name="generator" content="flexmark" />
+-'''
+-    htmlText += ((title != null) ? "  <title>${title}</title>" : '' )
+-    htmlText += '''
+-    <style type="text/css">code{white-space: pre;}</style>
+-'''
+-    htmlText += ((cssFile != null) ? cssFile.text : '')
+-    htmlText += '''</head>
+-  <body>
+-'''
+-    htmlText += htmlBody
+-    htmlText += '''
+-  </body>
+-</html>
+-'''
+-
+-    def htmlFilePath = mdFile.getPath().replaceAll(/\..*?$/, ".html")
+-    def htmlFile = file(htmlFilePath)
+-    println("Creating ${htmlFilePath}")
+-    htmlFile.text = htmlText
+-  }
+-}
+-
+-
+ task copyDocs(type: Copy) {
+   def inputDir = "${jalviewDir}/${doc_dir}"
+   def outputDir = "${docBuildDir}/${doc_dir}"
+@@ -1140,27 +266,6 @@
+ }
+-task convertMdFiles {
+-  dependsOn copyDocs
+-  def mdFiles = fileTree(dir: docBuildDir, include: "**/*.md")
+-  def cssFile = file("${jalviewDir}/${flexmark_css}")
+-
+-  doLast {
+-    convertMdToHtml(mdFiles, cssFile)
+-  }
+-
+-  inputs.files(mdFiles)
+-  inputs.file(cssFile)
+-
+-  def htmlFiles = []
+-  mdFiles.each { mdFile ->
+-    def htmlFilePath = mdFile.getPath().replaceAll(/\..*?$/, ".html")
+-    htmlFiles.add(file(htmlFilePath))
+-  }
+-  outputs.files(htmlFiles)
+-}
+-
+-
+ task copyHelp(type: Copy) {
+   def inputDir = helpSourceDir
+   def outputDir = "${helpBuildDir}/${help_dir}"
+@@ -1242,24 +347,15 @@
+   outputs.dir(outputDir)
+ }
+-task createBuildProperties(type: WriteProperties) {
+-  dependsOn copyResources
+-  group = "build"
+-  description = "Create the ${buildProperties} file"
+-  
+-  inputs.dir(sourceDir)
+-  inputs.dir(resourcesBuildDir)
+-  outputFile (buildProperties)
+-  // taking time specific comment out to allow better incremental builds
+-  comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
+-  //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
+-  property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy")
+-  property "VERSION", JALVIEW_VERSION
+-  property "INSTALLATION", INSTALLATION+" git-commit:"+gitHash+" ["+gitBranch+"]"
+-  if (getdownSetAppBaseProperty) {
+-    property "GETDOWNAPPBASE", getdownAppBase
+-    property "GETDOWNAPPDISTDIR", getdownAppDistDir
+-  }
++task createBuildProperties(type: Copy) {
++  // using the build_properties already included in the source tarball
++  def inputFile = "build_properties"
++  def outputFile = buildProperties
++  from inputFile
++  into file(outputFile).getParent()
++  rename(file(inputFile).getName(), file(outputFile).getName())
++
++  inputs.file(inputFile)
+   outputs.file(outputFile)
+ }
+@@ -1293,7 +389,6 @@
+   dependsOn buildResources
+   dependsOn copyDocs
+   dependsOn copyHelp
+-  dependsOn convertMdFiles
+   dependsOn buildIndices
+ }
+@@ -1306,12 +401,7 @@
+ //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
+ test {
+   dependsOn prepare
+-
+-  if (useClover) {
+-    dependsOn cloverClasses
+-   } else { //?
+-    dependsOn compileJava //?
+-  }
++  dependsOn compileJava //?
+   useTestNG() {
+     includeGroups testng_groups
+@@ -1323,6 +413,7 @@
+   maxHeapSize = "1024m"
+   workingDir = jalviewDir
++  //systemProperties 'clover.jar' System.properties.clover.jar
+   def testLaf = project.findProperty("test_laf")
+   if (testLaf != null) {
+     println("Setting Test LaF to '${testLaf}'")
+@@ -1338,9 +429,6 @@
+   jvmArgs += additional_compiler_args
+   doFirst {
+-    if (useClover) {
+-      println("Running tests " + (useClover?"WITH":"WITHOUT") + " clover")
+-    }
+   }
+ }
+@@ -1420,1752 +508,7 @@
+   sourceSets.main.resources.srcDirs.each{ dir ->
+     inputs.dir(dir)
+   }
+-  outputs.file("${outputDir}/${archiveFileName}")
+-}
+-
+-
+-task copyJars(type: Copy) {
+-  from fileTree(dir: classesDir, include: "**/*.jar").files
+-  into "${jalviewDir}/${package_dir}"
+-}
+-
+-
+-// doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well
+-task syncJars(type: Sync) {
+-  dependsOn jar
+-  from fileTree(dir: "${jalviewDir}/${libDistDir}", include: "**/*.jar").files
+-  into "${jalviewDir}/${package_dir}"
+-  preserve {
+-    include jar.archiveFileName.getOrNull()
+-  }
+-}
+-
+-
+-task makeDist {
+-  group = "build"
+-  description = "Put all required libraries in dist"
+-  // order of "cleanPackageDir", "copyJars", "jar" important!
+-  jar.mustRunAfter cleanPackageDir
+-  syncJars.mustRunAfter cleanPackageDir
+-  dependsOn cleanPackageDir
+-  dependsOn syncJars
+-  dependsOn jar
+-  outputs.dir("${jalviewDir}/${package_dir}")
+-}
+-
+-
+-task cleanDist {
+-  dependsOn cleanPackageDir
+-  dependsOn cleanTest
+-  dependsOn clean
+-}
+-
+-
+-shadowJar {
+-  group = "distribution"
+-  description = "Create a single jar file with all dependency libraries merged. Can be run with java -jar"
+-  if (buildDist) {
+-    dependsOn makeDist
+-  }
+-  from ("${jalviewDir}/${libDistDir}") {
+-    include("*.jar")
+-  }
+-  manifest {
+-    attributes "Implementation-Version": JALVIEW_VERSION,
+-    "Application-Name": install4jApplicationName
+-  }
+-  mainClassName = shadow_jar_main_class
+-  mergeServiceFiles()
+-  classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION
+-  minimize()
+-}
+-
+-
+-task getdownWebsite() {
+-  group = "distribution"
+-  description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer"
+-  if (buildDist) {
+-    dependsOn makeDist
+-  }
+-
+-  def getdownWebsiteResourceFilenames = []
+-  def getdownTextString = ""
+-  def getdownResourceDir = getdownResourceDir
+-  def getdownResourceFilenames = []
+-
+-  doFirst {
+-    // clean the getdown website and files dir before creating getdown folders
+-    delete getdownWebsiteDir
+-    delete getdownFilesDir
+-
+-    copy {
+-      from buildProperties
+-      rename(file(buildProperties).getName(), getdown_build_properties)
+-      into getdownAppDir
+-    }
+-    getdownWebsiteResourceFilenames += "${getdownAppDistDir}/${getdown_build_properties}"
+-
+-    // set some getdown_txt_ properties then go through all properties looking for getdown_txt_...
+-    def props = project.properties.sort { it.key }
+-    if (getdownAltJavaMinVersion != null && getdownAltJavaMinVersion.length() > 0) {
+-      props.put("getdown_txt_java_min_version", getdownAltJavaMinVersion)
+-    }
+-    if (getdownAltJavaMaxVersion != null && getdownAltJavaMaxVersion.length() > 0) {
+-      props.put("getdown_txt_java_max_version", getdownAltJavaMaxVersion)
+-    }
+-    if (getdownAltMultiJavaLocation != null && getdownAltMultiJavaLocation.length() > 0) {
+-      props.put("getdown_txt_multi_java_location", getdownAltMultiJavaLocation)
+-    }
+-    if (getdownImagesDir != null && file(getdownImagesDir).exists()) {
+-      props.put("getdown_txt_ui.background_image", "${getdownImagesDir}/${getdown_background_image}")
+-      props.put("getdown_txt_ui.instant_background_image", "${getdownImagesDir}/${getdown_instant_background_image}")
+-      props.put("getdown_txt_ui.error_background", "${getdownImagesDir}/${getdown_error_background}")
+-      props.put("getdown_txt_ui.progress_image", "${getdownImagesDir}/${getdown_progress_image}")
+-      props.put("getdown_txt_ui.icon", "${getdownImagesDir}/${getdown_icon}")
+-      props.put("getdown_txt_ui.mac_dock_icon", "${getdownImagesDir}/${getdown_mac_dock_icon}")
+-    }
+-
+-    props.put("getdown_txt_title", jalview_name)
+-    props.put("getdown_txt_ui.name", install4jApplicationName)
+-
+-    // start with appbase
+-    getdownTextString += "appbase = ${getdownAppBase}\n"
+-    props.each{ prop, val ->
+-      if (prop.startsWith("getdown_txt_") && val != null) {
+-        if (prop.startsWith("getdown_txt_multi_")) {
+-          def key = prop.substring(18)
+-          val.split(",").each{ v ->
+-            def line = "${key} = ${v}\n"
+-            getdownTextString += line
+-          }
+-        } else {
+-          // file values rationalised
+-          if (val.indexOf('/') > -1 || prop.startsWith("getdown_txt_resource")) {
+-            def r = null
+-            if (val.indexOf('/') == 0) {
+-              // absolute path
+-              r = file(val)
+-            } else if (val.indexOf('/') > 0) {
+-              // relative path (relative to jalviewDir)
+-              r = file( "${jalviewDir}/${val}" )
+-            }
+-            if (r.exists()) {
+-              val = "${getdown_resource_dir}/" + r.getName()
+-              getdownWebsiteResourceFilenames += val
+-              getdownResourceFilenames += r.getPath()
+-            }
+-          }
+-          if (! prop.startsWith("getdown_txt_resource")) {
+-            def line = prop.substring(12) + " = ${val}\n"
+-            getdownTextString += line
+-          }
+-        }
+-      }
+-    }
+-
+-    getdownWebsiteResourceFilenames.each{ filename ->
+-      getdownTextString += "resource = ${filename}\n"
+-    }
+-    getdownResourceFilenames.each{ filename ->
+-      copy {
+-        from filename
+-        into getdownResourceDir
+-      }
+-    }
+-    
+-    def getdownWrapperScripts = [ getdown_bash_wrapper_script, getdown_powershell_wrapper_script, getdown_batch_wrapper_script ]
+-    getdownWrapperScripts.each{ script ->
+-      def s = file( "${jalviewDir}/utils/getdown/${getdown_wrapper_script_dir}/${script}" )
+-      if (s.exists()) {
+-        copy {
+-          from s
+-          into "${getdownWebsiteDir}/${getdown_wrapper_script_dir}"
+-        }
+-        getdownTextString += "resource = ${getdown_wrapper_script_dir}/${script}\n"
+-      }
+-    }
+-
+-    def codeFiles = []
+-    fileTree(file(package_dir)).each{ f ->
+-      if (f.isDirectory()) {
+-        def files = fileTree(dir: f, include: ["*"]).getFiles()
+-        codeFiles += files
+-      } else if (f.exists()) {
+-        codeFiles += f
+-      }
+-    }
+-    codeFiles.sort().each{f ->
+-      def name = f.getName()
+-      def line = "code = ${getdownAppDistDir}/${name}\n"
+-      getdownTextString += line
+-      copy {
+-        from f.getPath()
+-        into getdownAppDir
+-      }
+-    }
+-
+-    // NOT USING MODULES YET, EVERYTHING SHOULD BE IN dist
+-    /*
+-    if (JAVA_VERSION.equals("11")) {
+-    def j11libFiles = fileTree(dir: "${jalviewDir}/${j11libDir}", include: ["*.jar"]).getFiles()
+-    j11libFiles.sort().each{f ->
+-    def name = f.getName()
+-    def line = "code = ${getdown_j11lib_dir}/${name}\n"
+-    getdownTextString += line
+-    copy {
+-    from f.getPath()
+-    into getdownJ11libDir
+-    }
+-    }
+-    }
+-     */
+-
+-    // getdown-launcher.jar should not be in main application class path so the main application can move it when updated.  Listed as a resource so it gets updated.
+-    //getdownTextString += "class = " + file(getdownLauncher).getName() + "\n"
+-    getdownTextString += "resource = ${getdown_launcher_new}\n"
+-    getdownTextString += "class = ${main_class}\n"
+-    // Not setting these properties in general so that getdownappbase and getdowndistdir will default to release version in jalview.bin.Cache
+-    if (getdownSetAppBaseProperty) {
+-      getdownTextString += "jvmarg = -Dgetdowndistdir=${getdownAppDistDir}\n"
+-      getdownTextString += "jvmarg = -Dgetdownappbase=${getdownAppBase}\n"
+-    }
+-
+-    def getdown_txt = file("${getdownWebsiteDir}/getdown.txt")
+-    getdown_txt.write(getdownTextString)
+-
+-    def getdownLaunchJvl = getdown_launch_jvl_name + ( (jvlChannelName != null && jvlChannelName.length() > 0)?"-${jvlChannelName}":"" ) + ".jvl"
+-    def launchJvl = file("${getdownWebsiteDir}/${getdownLaunchJvl}")
+-    launchJvl.write("appbase=${getdownAppBase}")
+-
+-    // files going into the getdown website dir: getdown-launcher.jar
+-    copy {
+-      from getdownLauncher
+-      rename(file(getdownLauncher).getName(), getdown_launcher_new)
+-      into getdownWebsiteDir
+-    }
+-
+-    // files going into the getdown website dir: getdown-launcher(-local).jar
+-    copy {
+-      from getdownLauncher
+-      if (file(getdownLauncher).getName() != getdown_launcher) {
+-        rename(file(getdownLauncher).getName(), getdown_launcher)
+-      }
+-      into getdownWebsiteDir
+-    }
+-
+-    // files going into the getdown website dir: ./install dir and files
+-    if (! (CHANNEL.startsWith("ARCHIVE") || CHANNEL.startsWith("DEVELOP"))) {
+-      copy {
+-        from getdown_txt
+-        from getdownLauncher
+-        from "${getdownAppDir}/${getdown_build_properties}"
+-        if (file(getdownLauncher).getName() != getdown_launcher) {
+-          rename(file(getdownLauncher).getName(), getdown_launcher)
+-        }
+-        into getdownInstallDir
+-      }
+-
+-      // and make a copy in the getdown files dir (these are not downloaded by getdown)
+-      copy {
+-        from getdownInstallDir
+-        into getdownFilesInstallDir
+-      }
+-    }
+-
+-    // files going into the getdown files dir: getdown.txt, getdown-launcher.jar, channel-launch.jvl, build_properties
+-    copy {
+-      from getdown_txt
+-      from launchJvl
+-      from getdownLauncher
+-      from "${getdownWebsiteDir}/${getdown_build_properties}"
+-      if (file(getdownLauncher).getName() != getdown_launcher) {
+-        rename(file(getdownLauncher).getName(), getdown_launcher)
+-      }
+-      into getdownFilesDir
+-    }
+-
+-    // and ./resources (not all downloaded by getdown)
+-    copy {
+-      from getdownResourceDir
+-      into "${getdownFilesDir}/${getdown_resource_dir}"
+-    }
+-  }
+-
+-  if (buildDist) {
+-    inputs.dir("${jalviewDir}/${package_dir}")
+-  }
+-  outputs.dir(getdownWebsiteDir)
+-  outputs.dir(getdownFilesDir)
+-}
+-
+-
+-// a helper task to allow getdown digest of any dir: `gradle getdownDigestDir -PDIGESTDIR=/path/to/my/random/getdown/dir
+-task getdownDigestDir(type: JavaExec) {
+-  group "Help"
+-  description "A task to run a getdown Digest on a dir with getdown.txt. Provide a DIGESTDIR property via -PDIGESTDIR=..."
+-
+-  def digestDirPropertyName = "DIGESTDIR"
+-  doFirst {
+-    classpath = files(getdownLauncher)
+-    def digestDir = findProperty(digestDirPropertyName)
+-    if (digestDir == null) {
+-      throw new GradleException("Must provide a DIGESTDIR value to produce an alternative getdown digest")
+-    }
+-    args digestDir
+-  }
+-  main = "com.threerings.getdown.tools.Digester"
+-}
+-
+-
+-task getdownDigest(type: JavaExec) {
+-  group = "distribution"
+-  description = "Digest the getdown website folder"
+-  dependsOn getdownWebsite
+-  doFirst {
+-    classpath = files(getdownLauncher)
+-  }
+-  main = "com.threerings.getdown.tools.Digester"
+-  args getdownWebsiteDir
+-  inputs.dir(getdownWebsiteDir)
+-  outputs.file("${getdownWebsiteDir}/digest2.txt")
+-}
+-
+-
+-task getdown() {
+-  group = "distribution"
+-  description = "Create the minimal and full getdown app folder for installers and website and create digest file"
+-  dependsOn getdownDigest
+-  doLast {
+-    if (reportRsyncCommand) {
+-      def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith('/')?'':'/')
+-      def toDir = "${getdown_rsync_dest}/${getdownDir}" + (getdownDir.endsWith('/')?'':'/')
+-      println "LIKELY RSYNC COMMAND:"
+-      println "mkdir -p '$toDir'\nrsync -avh --delete '$fromDir' '$toDir'"
+-      if (RUNRSYNC == "true") {
+-        exec {
+-          commandLine "mkdir", "-p", toDir
+-        }
+-        exec {
+-          commandLine "rsync", "-avh", "--delete", fromDir, toDir
+-        }
+-      }
+-    }
+-  }
+-}
+-
+-
+-tasks.withType(JavaCompile) {
+-      options.encoding = 'UTF-8'
+-}
+-
+-
+-clean {
+-  doFirst {
+-    delete getdownWebsiteDir
+-    delete getdownFilesDir
+-  }
+-}
+-
+-
+-install4j {
+-  if (file(install4jHomeDir).exists()) {
+-    // good to go!
+-  } else if (file(System.getProperty("user.home")+"/buildtools/install4j").exists()) {
+-    install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
+-  } else if (file("/Applications/install4j.app/Contents/Resources/app").exists()) {
+-    install4jHomeDir = "/Applications/install4j.app/Contents/Resources/app"
+-  }
+-  installDir(file(install4jHomeDir))
+-
+-  mediaTypes = Arrays.asList(install4j_media_types.split(","))
+-}
+-
+-
+-task copyInstall4jTemplate {
+-  def install4jTemplateFile = file("${install4jDir}/${install4j_template}")
+-  def install4jFileAssociationsFile = file("${install4jDir}/${install4j_installer_file_associations}")
+-  inputs.file(install4jTemplateFile)
+-  inputs.file(install4jFileAssociationsFile)
+-  inputs.property("CHANNEL", { CHANNEL })
+-  outputs.file(install4jConfFile)
+-
+-  doLast {
+-    def install4jConfigXml = new XmlParser().parse(install4jTemplateFile)
+-
+-    // turn off code signing if no OSX_KEYPASS
+-    if (OSX_KEYPASS == "") {
+-      install4jConfigXml.'**'.codeSigning.each { codeSigning ->
+-        codeSigning.'@macEnabled' = "false"
+-      }
+-      install4jConfigXml.'**'.windows.each { windows ->
+-        windows.'@runPostProcessor' = "false"
+-      }
+-    }
+-
+-    // turn off checksum creation for LOCAL channel
+-    def e = install4jConfigXml.application[0]
+-    if (CHANNEL == "LOCAL") {
+-      e.'@createChecksums' = "false"
+-    } else {
+-      e.'@createChecksums' = "true"
+-    }
+-
+-    // put file association actions where placeholder action is
+-    def install4jFileAssociationsText = install4jFileAssociationsFile.text
+-    def fileAssociationActions = new XmlParser().parseText("<actions>${install4jFileAssociationsText}</actions>")
+-    install4jConfigXml.'**'.action.any { a -> // .any{} stops after the first one that returns true
+-      if (a.'@name' == 'EXTENSIONS_REPLACED_BY_GRADLE') {
+-        def parent = a.parent()
+-        parent.remove(a)
+-        fileAssociationActions.each { faa ->
+-            parent.append(faa)
+-        }
+-        // don't need to continue in .any loop once replacements have been made
+-        return true
+-      }
+-    }
+-
+-    // use Windows Program Group with Examples folder for RELEASE, and Program Group without Examples for everything else
+-    // NB we're deleting the /other/ one!
+-    // Also remove the examples subdir from non-release versions
+-    def customizedIdToDelete = "PROGRAM_GROUP_RELEASE"
+-    // 2.11.1.0 NOT releasing with the Examples folder in the Program Group
+-    if (false && CHANNEL=="RELEASE") { // remove 'false && ' to include Examples folder in RELEASE channel
+-      customizedIdToDelete = "PROGRAM_GROUP_NON_RELEASE"
+-    } else {
+-      // remove the examples subdir from Full File Set
+-      def files = install4jConfigXml.files[0]
+-      def fileset = files.filesets.fileset.find { fs -> fs.'@customizedId' == "FULL_FILE_SET" }
+-      def root = files.roots.root.find { r -> r.'@fileset' == fileset.'@id' }
+-      def mountPoint = files.mountPoints.mountPoint.find { mp -> mp.'@root' == root.'@id' }
+-      def dirEntry = files.entries.dirEntry.find { de -> de.'@mountPoint' == mountPoint.'@id' && de.'@subDirectory' == "examples" }
+-      dirEntry.parent().remove(dirEntry)
+-    }
+-    install4jConfigXml.'**'.action.any { a ->
+-      if (a.'@customizedId' == customizedIdToDelete) {
+-        def parent = a.parent()
+-        parent.remove(a)
+-        return true
+-      }
+-    }
+-
+-    // write install4j file
+-    install4jConfFile.text = XmlUtil.serialize(install4jConfigXml)
+-  }
+-}
+-
+-
+-clean {
+-  doFirst {
+-    delete install4jConfFile
+-  }
+-}
+-
+-
+-task installers(type: com.install4j.gradle.Install4jTask) {
+-  group = "distribution"
+-  description = "Create the install4j installers"
+-  dependsOn getdown
+-  dependsOn copyInstall4jTemplate
+-
+-  projectFile = install4jConfFile
+-
+-  // create an md5 for the input files to use as version for install4j conf file
+-  def digest = MessageDigest.getInstance("MD5")
+-  digest.update(
+-    (file("${install4jDir}/${install4j_template}").text + 
+-    file("${install4jDir}/${install4j_info_plist_file_associations}").text +
+-    file("${install4jDir}/${install4j_installer_file_associations}").text).bytes)
+-  def filesMd5 = new BigInteger(1, digest.digest()).toString(16)
+-  if (filesMd5.length() >= 8) {
+-    filesMd5 = filesMd5.substring(0,8)
+-  }
+-  def install4jTemplateVersion = "${JALVIEW_VERSION}_F${filesMd5}_C${gitHash}"
+-  // make install4jBuildDir relative to jalviewDir
+-  def install4jBuildDir = "${install4j_build_dir}/${JAVA_VERSION}"
+-
+-  variables = [
+-    'JALVIEW_NAME': jalview_name,
+-    'JALVIEW_APPLICATION_NAME': install4jApplicationName,
+-    'JALVIEW_DIR': "../..",
+-    'OSX_KEYSTORE': OSX_KEYSTORE,
+-    'OSX_APPLEID': OSX_APPLEID,
+-    'OSX_ALTOOLPASS': OSX_ALTOOLPASS,
+-    'JSIGN_SH': JSIGN_SH,
+-    'JRE_DIR': getdown_app_dir_java,
+-    'INSTALLER_TEMPLATE_VERSION': install4jTemplateVersion,
+-    'JALVIEW_VERSION': JALVIEW_VERSION,
+-    'JAVA_MIN_VERSION': JAVA_MIN_VERSION,
+-    'JAVA_MAX_VERSION': JAVA_MAX_VERSION,
+-    'JAVA_VERSION': JAVA_VERSION,
+-    'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION,
+-    'VERSION': JALVIEW_VERSION,
+-    'MACOS_JAVA_VM_DIR': macosJavaVMDir,
+-    'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir,
+-    'LINUX_JAVA_VM_DIR': linuxJavaVMDir,
+-    'MACOS_JAVA_VM_TGZ': macosJavaVMTgz,
+-    'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz,
+-    'LINUX_JAVA_VM_TGZ': linuxJavaVMTgz,
+-    'COPYRIGHT_MESSAGE': install4j_copyright_message,
+-    'BUNDLE_ID': install4jBundleId,
+-    'INTERNAL_ID': install4jInternalId,
+-    'WINDOWS_APPLICATION_ID': install4jWinApplicationId,
+-    'MACOS_DMG_DS_STORE': install4jDMGDSStore,
+-    'MACOS_DMG_BG_IMAGE': install4jDMGBackgroundImage,
+-    'WRAPPER_LINK': getdownWrapperLink,
+-    'BASH_WRAPPER_SCRIPT': getdown_bash_wrapper_script,
+-    'POWERSHELL_WRAPPER_SCRIPT': getdown_powershell_wrapper_script,
+-    'WRAPPER_SCRIPT_BIN_DIR': getdown_wrapper_script_dir,
+-    'INSTALLER_NAME': install4jInstallerName,
+-    'INSTALL4J_UTILS_DIR': install4j_utils_dir,
+-    'GETDOWN_WEBSITE_DIR': getdown_website_dir,
+-    'GETDOWN_FILES_DIR': getdown_files_dir,
+-    'GETDOWN_RESOURCE_DIR': getdown_resource_dir,
+-    'GETDOWN_DIST_DIR': getdownAppDistDir,
+-    'GETDOWN_ALT_DIR': getdown_app_dir_alt,
+-    'GETDOWN_INSTALL_DIR': getdown_install_dir,
+-    'INFO_PLIST_FILE_ASSOCIATIONS_FILE': install4j_info_plist_file_associations,
+-    'BUILD_DIR': install4jBuildDir,
+-    'APPLICATION_CATEGORIES': install4j_application_categories,
+-    'APPLICATION_FOLDER': install4jApplicationFolder,
+-    'UNIX_APPLICATION_FOLDER': install4jUnixApplicationFolder,
+-    'EXECUTABLE_NAME': install4jExecutableName,
+-    'EXTRA_SCHEME': install4jExtraScheme,
+-    'MAC_ICONS_FILE': install4jMacIconsFile,
+-    'WINDOWS_ICONS_FILE': install4jWindowsIconsFile,
+-    'PNG_ICON_FILE': install4jPngIconFile,
+-    'BACKGROUND': install4jBackground,
+-
+-  ]
+-
+-  //println("INSTALL4J VARIABLES:")
+-  //variables.each{k,v->println("${k}=${v}")}
+-
+-  destination = "${jalviewDir}/${install4jBuildDir}"
+-  buildSelected = true
+-
+-  if (install4j_faster.equals("true") || CHANNEL.startsWith("LOCAL")) {
+-    faster = true
+-    disableSigning = true
+-    disableNotarization = true
+-  }
+-
+-  if (OSX_KEYPASS) {
+-    macKeystorePassword = OSX_KEYPASS
+-  } 
+-  
+-  if (OSX_ALTOOLPASS) {
+-    appleIdPassword = OSX_ALTOOLPASS
+-    disableNotarization = false
+-  } else {
+-    disableNotarization = true
+-  }
+-
+-  doFirst {
+-    println("Using projectFile "+projectFile)
+-    if (!disableNotarization) { println("Will notarize OSX App DMG") }
+-  }
+-  //verbose=true
+-
+-  inputs.dir(getdownWebsiteDir)
+-  inputs.file(install4jConfFile)
+-  inputs.file("${install4jDir}/${install4j_info_plist_file_associations}")
+-  inputs.dir(macosJavaVMDir)
+-  inputs.dir(windowsJavaVMDir)
+-  outputs.dir("${jalviewDir}/${install4j_build_dir}/${JAVA_VERSION}")
+-}
+-
+-
+-spotless {
+-  java {
+-    eclipse().configFile(eclipse_codestyle_file)
+-  }
+-}
+-
+-
+-task sourceDist(type: Tar) {
+-  group "distribution"
+-  description "Create a source .tar.gz file for distribution"
+-
+-  dependsOn createBuildProperties
+-  dependsOn convertMdFiles
+-
+-  def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
+-  def outputFileName = "${project.name}_${VERSION_UNDERSCORES}.tar.gz"
+-  archiveFileName = outputFileName
+-  
+-  compression Compression.GZIP
+-  
+-  into project.name
+-
+-  def EXCLUDE_FILES=[
+-    "build/*",
+-    "bin/*",
+-    "test-output/",
+-    "test-reports",
+-    "tests",
+-    "clover*/*",
+-    ".*",
+-    "benchmarking/*",
+-    "**/.*",
+-    "*.class",
+-    "**/*.class","$j11modDir/**/*.jar","appletlib","**/*locales",
+-    "*locales/**",
+-    "utils/InstallAnywhere",
+-    "**/*.log",
+-  ] 
+-  def PROCESS_FILES=[
+-    "AUTHORS",
+-    "CITATION",
+-    "FEATURETODO",
+-    "JAVA-11-README",
+-    "FEATURETODO",
+-    "LICENSE",
+-    "**/README",
+-    "RELEASE",
+-    "THIRDPARTYLIBS",
+-    "TESTNG",
+-    "build.gradle",
+-    "gradle.properties",
+-    "**/*.java",
+-    "**/*.html",
+-    "**/*.xml",
+-    "**/*.gradle",
+-    "**/*.groovy",
+-    "**/*.properties",
+-    "**/*.perl",
+-    "**/*.sh",
+-  ]
+-  def INCLUDE_FILES=[
+-    ".settings/org.eclipse.jdt.core.jalview.prefs",
+-  ]
+-
+-  from(jalviewDir) {
+-    exclude (EXCLUDE_FILES)
+-    include (PROCESS_FILES)
+-    filter(ReplaceTokens,
+-      beginToken: '$$',
+-      endToken: '$$',
+-      tokens: [
+-        'Version-Rel': JALVIEW_VERSION,
+-        'Year-Rel': getDate("yyyy")
+-      ]
+-    )
+-  }
+-  from(jalviewDir) {
+-    exclude (EXCLUDE_FILES)
+-    exclude (PROCESS_FILES)
+-    exclude ("appletlib")
+-    exclude ("**/*locales")
+-    exclude ("*locales/**")
+-    exclude ("utils/InstallAnywhere")
+-
+-    exclude (getdown_files_dir)
+-    exclude (getdown_website_dir)
+-
+-    // exluding these as not using jars as modules yet
+-    exclude ("${j11modDir}/**/*.jar")
+-  }
+-  from(jalviewDir) {
+-    include(INCLUDE_FILES)
+-  }
+-//  from (jalviewDir) {
+-//    // explicit includes for stuff that seemed to not get included
+-//    include(fileTree("test/**/*."))
+-//    exclude(EXCLUDE_FILES)
+-//    exclude(PROCESS_FILES)
+-//  }
+-
+-  from(file(buildProperties).getParent()) {
+-    include(file(buildProperties).getName())
+-    rename(file(buildProperties).getName(), "build_properties")
+-    filter({ line ->
+-      line.replaceAll("^INSTALLATION=.*\$","INSTALLATION=Source Release"+" git-commit\\\\:"+gitHash+" ["+gitBranch+"]")
+-    })
+-  }
+-
+-}
+-
+-
+-task helppages {
+-  dependsOn copyHelp
+-  dependsOn pubhtmlhelp
+-  
+-  inputs.dir("${helpBuildDir}/${help_dir}")
+-  outputs.dir("${buildDir}/distributions/${help_dir}")
+-}
+-
+-
+-task j2sSetHeadlessBuild {
+-  doFirst {
+-    IN_ECLIPSE = false
+-  }
+-}
+-
+-
+-task jalviewjsEnableAltFileProperty(type: WriteProperties) {
+-  group "jalviewjs"
+-  description "Enable the alternative J2S Config file for headless build"
+-
+-  outputFile = jalviewjsJ2sSettingsFileName
+-  def j2sPropsFile = file(jalviewjsJ2sSettingsFileName)
+-  def j2sProps = new Properties()
+-  if (j2sPropsFile.exists()) {
+-    try {
+-      def j2sPropsFileFIS = new FileInputStream(j2sPropsFile)
+-      j2sProps.load(j2sPropsFileFIS)
+-      j2sPropsFileFIS.close()
+-
+-      j2sProps.each { prop, val ->
+-        property(prop, val)
+-      }
+-    } catch (Exception e) {
+-      println("Exception reading ${jalviewjsJ2sSettingsFileName}")
+-      e.printStackTrace()
+-    }
+-  }
+-  if (! j2sProps.stringPropertyNames().contains(jalviewjs_j2s_alt_file_property_config)) {
+-    property(jalviewjs_j2s_alt_file_property_config, jalviewjs_j2s_alt_file_property)
+-  }
+-}
+-
+-
+-task jalviewjsSetEclipseWorkspace {
+-  def propKey = "jalviewjs_eclipse_workspace"
+-  def propVal = null
+-  if (project.hasProperty(propKey)) {
+-    propVal = project.getProperty(propKey)
+-    if (propVal.startsWith("~/")) {
+-      propVal = System.getProperty("user.home") + propVal.substring(1)
+-    }
+-  }
+-  def propsFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_workspace_location_file}"
+-  def propsFile = file(propsFileName)
+-  def eclipseWsDir = propVal
+-  def props = new Properties()
+-
+-  def writeProps = true
+-  if (( eclipseWsDir == null || !file(eclipseWsDir).exists() ) && propsFile.exists()) {
+-    def ins = new FileInputStream(propsFileName)
+-    props.load(ins)
+-    ins.close()
+-    if (props.getProperty(propKey, null) != null) {
+-      eclipseWsDir = props.getProperty(propKey)
+-      writeProps = false
+-    }
+-  }
+-
+-  if (eclipseWsDir == null || !file(eclipseWsDir).exists()) {
+-    def tempDir = File.createTempDir()
+-    eclipseWsDir = tempDir.getAbsolutePath()
+-    writeProps = true
+-  }
+-  eclipseWorkspace = file(eclipseWsDir)
+-
+-  doFirst {
+-    // do not run a headless transpile when we claim to be in Eclipse
+-    if (IN_ECLIPSE) {
+-      println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+-      throw new StopExecutionException("Not running headless transpile whilst IN_ECLIPSE is '${IN_ECLIPSE}'")
+-    } else {
+-      println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+-    }
+-
+-    if (writeProps) {
+-      props.setProperty(propKey, eclipseWsDir)
+-      propsFile.parentFile.mkdirs()
+-      def bytes = new ByteArrayOutputStream()
+-      props.store(bytes, null)
+-      def propertiesString = bytes.toString()
+-      propsFile.text = propertiesString
+-      print("NEW ")
+-    } else {
+-      print("EXISTING ")
+-    }
+-
+-    println("ECLIPSE WORKSPACE: "+eclipseWorkspace.getPath())
+-  }
+-
+-  //inputs.property(propKey, eclipseWsDir) // eclipseWsDir only gets set once this task runs, so will be out-of-date
+-  outputs.file(propsFileName)
+-  outputs.upToDateWhen { eclipseWorkspace.exists() && propsFile.exists() }
+-}
+-
+-
+-task jalviewjsEclipsePaths {
+-  def eclipseProduct
+-
+-  def eclipseRoot = jalviewjs_eclipse_root
+-  if (eclipseRoot.startsWith("~/")) {
+-    eclipseRoot = System.getProperty("user.home") + eclipseRoot.substring(1)
+-  }
+-  if (OperatingSystem.current().isMacOsX()) {
+-    eclipseRoot += "/Eclipse.app"
+-    eclipseBinary = "${eclipseRoot}/Contents/MacOS/eclipse"
+-    eclipseProduct = "${eclipseRoot}/Contents/Eclipse/.eclipseproduct"
+-  } else if (OperatingSystem.current().isWindows()) { // check these paths!!
+-    if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) {
+-      eclipseRoot += "/eclipse"
+-    }
+-    eclipseBinary = "${eclipseRoot}/eclipse.exe"
+-    eclipseProduct = "${eclipseRoot}/.eclipseproduct"
+-  } else { // linux or unix
+-    if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) {
+-      eclipseRoot += "/eclipse"
+-println("eclipseDir exists")
+-    }
+-    eclipseBinary = "${eclipseRoot}/eclipse"
+-    eclipseProduct = "${eclipseRoot}/.eclipseproduct"
+-  }
+-
+-  eclipseVersion = "4.13" // default
+-  def assumedVersion = true
+-  if (file(eclipseProduct).exists()) {
+-    def fis = new FileInputStream(eclipseProduct)
+-    def props = new Properties()
+-    props.load(fis)
+-    eclipseVersion = props.getProperty("version")
+-    fis.close()
+-    assumedVersion = false
+-  }
+-  
+-  def propKey = "eclipse_debug"
+-  eclipseDebug = (project.hasProperty(propKey) && project.getProperty(propKey).equals("true"))
+-
+-  doFirst {
+-    // do not run a headless transpile when we claim to be in Eclipse
+-    if (IN_ECLIPSE) {
+-      println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+-      throw new StopExecutionException("Not running headless transpile whilst IN_ECLIPSE is '${IN_ECLIPSE}'")
+-    } else {
+-      println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+-    }
+-
+-    if (!assumedVersion) {
+-      println("ECLIPSE VERSION=${eclipseVersion}")
+-    }
+-  }
+-}
+-
+-
+-task printProperties {
+-  group "Debug"
+-  description "Output to console all System.properties"
+-  doFirst {
+-    System.properties.each { key, val -> System.out.println("Property: ${key}=${val}") }
+-  }
+-}
+-
+-
+-task eclipseSetup {
+-  dependsOn eclipseProject
+-  dependsOn eclipseClasspath
+-  dependsOn eclipseJdt
+-}
+-
+-
+-// this version (type: Copy) will delete anything in the eclipse dropins folder that isn't in fromDropinsDir
+-task jalviewjsEclipseCopyDropins(type: Copy) {
+-  dependsOn jalviewjsEclipsePaths
+-
+-  def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_eclipse_dropins_dir}", include: "*.jar")
+-  inputFiles += file("${jalviewDir}/${jalviewjsJ2sPlugin}")
+-  def outputDir = "${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}"
+-
+-  from inputFiles
+-  into outputDir
+-}
+-
+-
+-// this eclipse -clean doesn't actually work
+-task jalviewjsCleanEclipse(type: Exec) {
+-  dependsOn eclipseSetup
+-  dependsOn jalviewjsEclipsePaths
+-  dependsOn jalviewjsEclipseCopyDropins
+-
+-  executable(eclipseBinary)
+-  args(["-nosplash", "--launcher.suppressErrors", "-data", eclipseWorkspace.getPath(), "-clean", "-console", "-consoleLog"])
+-  if (eclipseDebug) {
+-    args += "-debug"
+-  }
+-  args += "-l"
+-
+-  def inputString = """exit
+-y
+-"""
+-  def inputByteStream = new ByteArrayInputStream(inputString.getBytes())
+-  standardInput = inputByteStream
+-}
+-
+-/* not really working yet
+-jalviewjsEclipseCopyDropins.finalizedBy jalviewjsCleanEclipse
+-*/
+-
+-
+-task jalviewjsTransferUnzipSwingJs {
+-  def file_zip = "${jalviewDir}/${jalviewjs_swingjs_zip}"
+-
+-  doLast {
+-    copy {
+-      from zipTree(file_zip)
+-      into "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}"
+-    }
+-  }
+-
+-  inputs.file file_zip
+-  outputs.dir "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}"
+-}
+-
+-
+-task jalviewjsTransferUnzipLib {
+-  def zipFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_libjs_dir}", include: "*.zip")
+-
+-  doLast {
+-    zipFiles.each { file_zip -> 
+-      copy {
+-        from zipTree(file_zip)
+-        into "${jalviewDir}/${jalviewjsTransferSiteLibDir}"
+-      }
+-    }
+-  }
+-
+-  inputs.files zipFiles
+-  outputs.dir "${jalviewDir}/${jalviewjsTransferSiteLibDir}"
+-}
+-
+-
+-task jalviewjsTransferUnzipAllLibs {
+-  dependsOn jalviewjsTransferUnzipSwingJs
+-  dependsOn jalviewjsTransferUnzipLib
+-}
+-
+-
+-task jalviewjsCreateJ2sSettings(type: WriteProperties) {
+-  group "JalviewJS"
+-  description "Create the alternative j2s file from the j2s.* properties"
+-
+-  jalviewjsJ2sProps = project.properties.findAll { it.key.startsWith("j2s.") }.sort { it.key }
+-  def siteDirProperty = "j2s.site.directory"
+-  def setSiteDir = false
+-  jalviewjsJ2sProps.each { prop, val ->
+-    if (val != null) {
+-      if (prop == siteDirProperty) {
+-        if (!(val.startsWith('/') || val.startsWith("file://") )) {
+-          val = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${val}"
+-        }
+-        setSiteDir = true
+-      }
+-      property(prop,val)
+-    }
+-    if (!setSiteDir) { // default site location, don't override specifically set property
+-      property(siteDirProperty,"${jalviewDirRelativePath}/${jalviewjsTransferSiteJsDir}")
+-    }
+-  }
+-  outputFile = jalviewjsJ2sAltSettingsFileName
+-
+-  if (! IN_ECLIPSE) {
+-    inputs.properties(jalviewjsJ2sProps)
+-    outputs.file(jalviewjsJ2sAltSettingsFileName)
+-  }
+-}
+-
+-
+-task jalviewjsEclipseSetup {
+-  dependsOn jalviewjsEclipseCopyDropins
+-  dependsOn jalviewjsSetEclipseWorkspace
+-  dependsOn jalviewjsCreateJ2sSettings
+-}
+-
+-
+-task jalviewjsSyncAllLibs (type: Sync) {
+-  dependsOn jalviewjsTransferUnzipAllLibs
+-  def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteLibDir}")
+-  inputFiles += fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}")
+-  def outputDir = "${jalviewDir}/${jalviewjsSiteDir}"
+-
+-  from inputFiles
+-  into outputDir
+-  def outputFiles = []
+-  rename { filename ->
+-    outputFiles += "${outputDir}/${filename}"
+-    null
+-  }
+-  preserve {
+-    include "**"
+-  }
+-  outputs.files outputFiles
+-  inputs.files inputFiles
+-}
+-
+-
+-task jalviewjsSyncResources (type: Sync) {
+-  dependsOn buildResources
+-
+-  def inputFiles = fileTree(dir: resourcesBuildDir)
+-  def outputDir = "${jalviewDir}/${jalviewjsSiteDir}/${jalviewjs_j2s_subdir}"
+-
+-  from inputFiles
+-  into outputDir
+-  def outputFiles = []
+-  rename { filename ->
+-    outputFiles += "${outputDir}/${filename}"
+-    null
+-  }
+-  preserve {
+-    include "**"
+-  }
+-  outputs.files outputFiles
+-  inputs.files inputFiles
+-}
+-
+-
+-task jalviewjsSyncSiteResources (type: Sync) {
+-  def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_site_resource_dir}")
+-  def outputDir = "${jalviewDir}/${jalviewjsSiteDir}"
+-
+-  from inputFiles
+-  into outputDir
+-  def outputFiles = []
+-  rename { filename ->
+-    outputFiles += "${outputDir}/${filename}"
+-    null
+-  }
+-  preserve {
+-    include "**"
+-  }
+-  outputs.files outputFiles
+-  inputs.files inputFiles
+-}
+-
+-
+-task jalviewjsSyncBuildProperties (type: Sync) {
+-  dependsOn createBuildProperties
+-  def inputFiles = [file(buildProperties)]
+-  def outputDir = "${jalviewDir}/${jalviewjsSiteDir}/${jalviewjs_j2s_subdir}"
+-
+-  from inputFiles
+-  into outputDir
+-  def outputFiles = []
+-  rename { filename ->
+-    outputFiles += "${outputDir}/${filename}"
+-    null
+-  }
+-  preserve {
+-    include "**"
+-  }
+-  outputs.files outputFiles
+-  inputs.files inputFiles
+-}
+-
+-
+-task jalviewjsProjectImport(type: Exec) {
+-  dependsOn eclipseSetup
+-  dependsOn jalviewjsEclipsePaths
+-  dependsOn jalviewjsEclipseSetup
+-
+-  doFirst {
+-    // do not run a headless import when we claim to be in Eclipse
+-    if (IN_ECLIPSE) {
+-      println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+-      throw new StopExecutionException("Not running headless import whilst IN_ECLIPSE is '${IN_ECLIPSE}'")
+-    } else {
+-      println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+-    }
+-  }
+-  //def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview/org.eclipse.jdt.core"
+-  def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview"
+-  executable(eclipseBinary)
+-  args(["-nosplash", "--launcher.suppressErrors", "-application", "com.seeq.eclipse.importprojects.headlessimport", "-data", eclipseWorkspace.getPath(), "-import", jalviewDirAbsolutePath])
+-  if (eclipseDebug) {
+-    args += "-debug"
+-  }
+-  args += [ "--launcher.appendVmargs", "-vmargs", "-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" ]
+-  if (!IN_ECLIPSE) {
+-    args += [ "-D${j2sHeadlessBuildProperty}=true" ]
+-    args += [ "-D${jalviewjs_j2s_alt_file_property}=${jalviewjsJ2sAltSettingsFileName}" ]
+-  }
+-
+-  inputs.file("${jalviewDir}/.project")
+-  outputs.upToDateWhen { 
+-    file(projdir).exists()
+-  }
+-}
+-
+-
+-task jalviewjsTranspile(type: Exec) {
+-  dependsOn jalviewjsEclipseSetup 
+-  dependsOn jalviewjsProjectImport
+-  dependsOn jalviewjsEclipsePaths
+-  if (!IN_ECLIPSE) {
+-    dependsOn jalviewjsEnableAltFileProperty
+-  }
+-
+-  doFirst {
+-    // do not run a headless transpile when we claim to be in Eclipse
+-    if (IN_ECLIPSE) {
+-      println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+-      throw new StopExecutionException("Not running headless transpile whilst IN_ECLIPSE is '${IN_ECLIPSE}'")
+-    } else {
+-      println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+-    }
+-  }
+-
+-  executable(eclipseBinary)
+-  args(["-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.jdt.apt.core.aptBuild", "-data", eclipseWorkspace, "-${jalviewjs_eclipse_build_arg}", eclipse_project_name ])
+-  if (eclipseDebug) {
+-    args += "-debug"
+-  }
+-  args += [ "--launcher.appendVmargs", "-vmargs", "-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" ]
+-  if (!IN_ECLIPSE) {
+-    args += [ "-D${j2sHeadlessBuildProperty}=true" ]
+-    args += [ "-D${jalviewjs_j2s_alt_file_property}=${jalviewjsJ2sAltSettingsFileName}" ]
+-  }
+-
+-  def stdout
+-  def stderr
+-  doFirst {
+-    stdout = new ByteArrayOutputStream()
+-    stderr = new ByteArrayOutputStream()
+-
+-    def logOutFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}"
+-    def logOutFile = file(logOutFileName)
+-    logOutFile.createNewFile()
+-    logOutFile.text = """ROOT: ${jalviewjs_eclipse_root}
+-BINARY: ${eclipseBinary}
+-VERSION: ${eclipseVersion}
+-WORKSPACE: ${eclipseWorkspace}
+-DEBUG: ${eclipseDebug}
+-----
+-"""
+-    def logOutFOS = new FileOutputStream(logOutFile, true) // true == append
+-    // combine stdout and stderr
+-    def logErrFOS = logOutFOS
+-
+-    if (jalviewjs_j2s_to_console.equals("true")) {
+-      standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+-        new org.apache.tools.ant.util.TeeOutputStream(
+-          logOutFOS,
+-          stdout),
+-        System.out)
+-      errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+-        new org.apache.tools.ant.util.TeeOutputStream(
+-          logErrFOS,
+-          stderr),
+-        System.err)
+-    } else {
+-      standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+-        logOutFOS,
+-        stdout)
+-      errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+-        logErrFOS,
+-        stderr)
+-    }
+-  }
+-
+-  doLast {
+-    if (stdout.toString().contains("Error processing ")) {
+-      // j2s did not complete transpile
+-      //throw new TaskExecutionException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'")
+-      if (jalviewjs_ignore_transpile_errors.equals("true")) {
+-        println("IGNORING TRANSPILE ERRORS")
+-        println("See eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'")
+-      } else {
+-        throw new GradleException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'")
+-      }
+-    }
+-  }
+-
+-  inputs.dir("${jalviewDir}/${sourceDir}")
+-  outputs.dir("${jalviewDir}/${jalviewjsTransferSiteJsDir}")
+-  outputs.upToDateWhen( { file("${jalviewDir}/${jalviewjsTransferSiteJsDir}${jalviewjs_server_resource}").exists() } )
+-}
+-
+-
+-def jalviewjsCallCore(String name, FileCollection list, String prefixFile, String suffixFile, String jsfile, String zjsfile, File logOutFile, Boolean logOutConsole) {
+-
+-  def stdout = new ByteArrayOutputStream()
+-  def stderr = new ByteArrayOutputStream()
+-
+-  def coreFile = file(jsfile)
+-  def msg = ""
+-  msg = "Creating core for ${name}...\nGenerating ${jsfile}"
+-  println(msg)
+-  logOutFile.createNewFile()
+-  logOutFile.append(msg+"\n")
+-
+-  def coreTop = file(prefixFile)
+-  def coreBottom = file(suffixFile)
+-  coreFile.getParentFile().mkdirs()
+-  coreFile.createNewFile()
+-  coreFile.write( coreTop.getText("UTF-8") )
+-  list.each {
+-    f ->
+-    if (f.exists()) {
+-      def t = f.getText("UTF-8")
+-      t.replaceAll("Clazz\\.([^_])","Clazz_${1}")
+-      coreFile.append( t )
+-    } else {
+-      msg = "...file '"+f.getPath()+"' does not exist, skipping"
+-      println(msg)
+-      logOutFile.append(msg+"\n")
+-    }
+-  }
+-  coreFile.append( coreBottom.getText("UTF-8") )
+-
+-  msg = "Generating ${zjsfile}"
+-  println(msg)
+-  logOutFile.append(msg+"\n")
+-  def logOutFOS = new FileOutputStream(logOutFile, true) // true == append
+-  def logErrFOS = logOutFOS
+-
+-  javaexec {
+-    classpath = files(["${jalviewDir}/${jalviewjs_closure_compiler}"])
+-    main = "com.google.javascript.jscomp.CommandLineRunner"
+-    jvmArgs = [ "-Dfile.encoding=UTF-8" ]
+-    args = [ "--compilation_level", "SIMPLE_OPTIMIZATIONS", "--warning_level", "QUIET", "--charset", "UTF-8", "--js", jsfile, "--js_output_file", zjsfile ]
+-    maxHeapSize = "2g"
+-
+-    msg = "\nRunning '"+commandLine.join(' ')+"'\n"
+-    println(msg)
+-    logOutFile.append(msg+"\n")
+-
+-    if (logOutConsole) {
+-      standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+-        new org.apache.tools.ant.util.TeeOutputStream(
+-          logOutFOS,
+-          stdout),
+-        standardOutput)
+-        errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+-          new org.apache.tools.ant.util.TeeOutputStream(
+-            logErrFOS,
+-            stderr),
+-          errorOutput)
+-    } else {
+-      standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+-        logOutFOS,
+-        stdout)
+-        errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+-          logErrFOS,
+-          stderr)
+-    }
+-  }
+-  msg = "--"
+-  println(msg)
+-  logOutFile.append(msg+"\n")
+-}
+-
+-
+-task jalviewjsBuildAllCores {
+-  group "JalviewJS"
+-  description "Build the core js lib closures listed in the classlists dir"
+-  dependsOn jalviewjsTranspile
+-  dependsOn jalviewjsTransferUnzipSwingJs
+-
+-  def j2sDir = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${jalviewjs_j2s_subdir}"
+-  def swingJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_j2s_subdir}"
+-  def libJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteLibDir}/${jalviewjs_j2s_subdir}"
+-  def jsDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_js_subdir}"
+-  def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}/${jalviewjs_j2s_subdir}/core"
+-  def prefixFile = "${jsDir}/core/coretop2.js"
+-  def suffixFile = "${jsDir}/core/corebottom2.js"
+-
+-  inputs.file prefixFile
+-  inputs.file suffixFile
+-
+-  def classlistFiles = []
+-  // add the classlists found int the jalviewjs_classlists_dir
+-  fileTree(dir: "${jalviewDir}/${jalviewjs_classlists_dir}", include: "*.txt").each {
+-    file ->
+-    def name = file.getName() - ".txt"
+-    classlistFiles += [
+-      'file': file,
+-      'name': name
+-    ]
+-  }
+-
+-  // _jmol and _jalview cores. Add any other peculiar classlist.txt files here
+-  //classlistFiles += [ 'file': file("${jalviewDir}/${jalviewjs_classlist_jmol}"), 'name': "_jvjmol" ]
+-  classlistFiles += [ 'file': file("${jalviewDir}/${jalviewjs_classlist_jalview}"), 'name': jalviewjsJalviewCoreName ]
+-
+-  jalviewjsCoreClasslists = []
+-
+-  classlistFiles.each {
+-    hash ->
+-
+-    def file = hash['file']
+-    if (! file.exists()) {
+-      //println("...classlist file '"+file.getPath()+"' does not exist, skipping")
+-      return false // this is a "continue" in groovy .each closure
+-    }
+-    def name = hash['name']
+-    if (name == null) {
+-      name = file.getName() - ".txt"
+-    }
+-
+-    def filelist = []
+-    file.eachLine {
+-      line ->
+-        filelist += line
+-    }
+-    def list = fileTree(dir: j2sDir, includes: filelist)
+-
+-    def jsfile = "${outputDir}/core${name}.js"
+-    def zjsfile = "${outputDir}/core${name}.z.js"
+-
+-    jalviewjsCoreClasslists += [
+-      'jsfile': jsfile,
+-      'zjsfile': zjsfile,
+-      'list': list,
+-      'name': name
+-    ]
+-
+-    inputs.file(file)
+-    inputs.files(list)
+-    outputs.file(jsfile)
+-    outputs.file(zjsfile)
+-  }
+-  
+-  // _stevesoft core. add any cores without a classlist here (and the inputs and outputs)
+-  def stevesoftClasslistName = "_stevesoft"
+-  def stevesoftClasslist = [
+-    'jsfile': "${outputDir}/core${stevesoftClasslistName}.js",
+-    'zjsfile': "${outputDir}/core${stevesoftClasslistName}.z.js",
+-    'list': fileTree(dir: j2sDir, include: "com/stevesoft/pat/**/*.js"),
+-    'name': stevesoftClasslistName
+-  ]
+-  jalviewjsCoreClasslists += stevesoftClasslist
+-  inputs.files(stevesoftClasslist['list'])
+-  outputs.file(stevesoftClasslist['jsfile'])
+-  outputs.file(stevesoftClasslist['zjsfile'])
+-
+-  // _all core
+-  def allClasslistName = "_all"
+-  def allJsFiles = fileTree(dir: j2sDir, include: "**/*.js")
+-  allJsFiles += fileTree(
+-    dir: libJ2sDir,
+-    include: "**/*.js",
+-    excludes: [
+-      // these exlusions are files that the closure-compiler produces errors for. Should fix them
+-      "**/org/jmol/jvxl/readers/IsoIntersectFileReader.js",
+-      "**/org/jmol/export/JSExporter.js"
+-    ]
+-  )
+-  allJsFiles += fileTree(
+-    dir: swingJ2sDir,
+-    include: "**/*.js",
+-    excludes: [
+-      // these exlusions are files that the closure-compiler produces errors for. Should fix them
+-      "**/sun/misc/Unsafe.js",
+-      "**/swingjs/jquery/jquery-editable-select.js",
+-      "**/swingjs/jquery/j2sComboBox.js",
+-      "**/sun/misc/FloatingDecimal.js"
+-    ]
+-  )
+-  def allClasslist = [
+-    'jsfile': "${outputDir}/core${allClasslistName}.js",
+-    'zjsfile': "${outputDir}/core${allClasslistName}.z.js",
+-    'list': allJsFiles,
+-    'name': allClasslistName
+-  ]
+-  // not including this version of "all" core at the moment
+-  //jalviewjsCoreClasslists += allClasslist
+-  inputs.files(allClasslist['list'])
+-  outputs.file(allClasslist['jsfile'])
+-  outputs.file(allClasslist['zjsfile'])
+-
+-  doFirst {
+-    def logOutFile = file("${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_closure_stdout}")
+-    logOutFile.getParentFile().mkdirs()
+-    logOutFile.createNewFile()
+-    logOutFile.write(getDate("yyyy-MM-dd HH:mm:ss")+" jalviewjsBuildAllCores\n----\n")
+-
+-    jalviewjsCoreClasslists.each {
+-      jalviewjsCallCore(it.name, it.list, prefixFile, suffixFile, it.jsfile, it.zjsfile, logOutFile, jalviewjs_j2s_to_console.equals("true"))
+-    }
+-  }
+-
+-}
+-
+-
+-def jalviewjsPublishCoreTemplate(String coreName, String templateName, File inputFile, String outputFile) {
+-  copy {
+-    from inputFile
+-    into file(outputFile).getParentFile()
+-    rename { filename ->
+-      if (filename.equals(inputFile.getName())) {
+-        return file(outputFile).getName()
+-      }
+-      return null
+-    }
+-    filter(ReplaceTokens,
+-      beginToken: '_',
+-      endToken: '_',
+-      tokens: [
+-        'MAIN': '"'+main_class+'"',
+-        'CODE': "null",
+-        'NAME': jalviewjsJalviewTemplateName+" [core ${coreName}]",
+-        'COREKEY': jalviewjs_core_key,
+-        'CORENAME': coreName
+-      ]
+-    )
+-  }
+-}
+-
+-
+-task jalviewjsPublishCoreTemplates {
+-  dependsOn jalviewjsBuildAllCores
+-  def inputFileName = "${jalviewDir}/${j2s_coretemplate_html}"
+-  def inputFile = file(inputFileName)
+-  def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}"
+-
+-  def outputFiles = []
+-  jalviewjsCoreClasslists.each { cl ->
+-    def outputFile = "${outputDir}/${jalviewjsJalviewTemplateName}_${cl.name}.html"
+-    cl['outputfile'] = outputFile
+-    outputFiles += outputFile
+-  }
+-
+-  doFirst {
+-    jalviewjsCoreClasslists.each { cl ->
+-      jalviewjsPublishCoreTemplate(cl.name, jalviewjsJalviewTemplateName, inputFile, cl.outputfile)
+-    }
+-  }
+-  inputs.file(inputFile)
+-  outputs.files(outputFiles)
+-}
+-
+-
+-task jalviewjsSyncCore (type: Sync) {
+-  dependsOn jalviewjsBuildAllCores
+-  dependsOn jalviewjsPublishCoreTemplates
+-  def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteCoreDir}")
+-  def outputDir = "${jalviewDir}/${jalviewjsSiteDir}"
+-
+-  from inputFiles
+-  into outputDir
+-  def outputFiles = []
+-  rename { filename ->
+-    outputFiles += "${outputDir}/${filename}"
+-    null
+-  }
+-  preserve {
+-    include "**"
+-  }
+-  outputs.files outputFiles
+-  inputs.files inputFiles
+-}
+-
+-
+-// this Copy version of TransferSiteJs will delete anything else in the target dir
+-task jalviewjsCopyTransferSiteJs(type: Copy) {
+-  dependsOn jalviewjsTranspile
+-  from "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
+-  into "${jalviewDir}/${jalviewjsSiteDir}"
+-}
+-
+-
+-// this Sync version of TransferSite is used by buildship to keep the website automatically up to date when a file changes
+-task jalviewjsSyncTransferSiteJs(type: Sync) {
+-  from "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
+-  include "**/*.*"
+-  into "${jalviewDir}/${jalviewjsSiteDir}"
+-  preserve {
+-    include "**"
+-  }
+-}
+-
+-
+-jalviewjsSyncAllLibs.mustRunAfter jalviewjsCopyTransferSiteJs
+-jalviewjsSyncResources.mustRunAfter jalviewjsCopyTransferSiteJs
+-jalviewjsSyncSiteResources.mustRunAfter jalviewjsCopyTransferSiteJs
+-jalviewjsSyncBuildProperties.mustRunAfter jalviewjsCopyTransferSiteJs
+-
+-jalviewjsSyncAllLibs.mustRunAfter jalviewjsSyncTransferSiteJs
+-jalviewjsSyncResources.mustRunAfter jalviewjsSyncTransferSiteJs
+-jalviewjsSyncSiteResources.mustRunAfter jalviewjsSyncTransferSiteJs
+-jalviewjsSyncBuildProperties.mustRunAfter jalviewjsSyncTransferSiteJs
+-
+-
+-task jalviewjsPrepareSite {
+-  group "JalviewJS"
+-  description "Prepares the website folder including unzipping files and copying resources"
+-  dependsOn jalviewjsSyncAllLibs
+-  dependsOn jalviewjsSyncResources
+-  dependsOn jalviewjsSyncSiteResources
+-  dependsOn jalviewjsSyncBuildProperties
+-  dependsOn jalviewjsSyncCore
+-}
+-
+-
+-task jalviewjsBuildSite {
+-  group "JalviewJS"
+-  description "Builds the whole website including transpiled code"
+-  dependsOn jalviewjsCopyTransferSiteJs
+-  dependsOn jalviewjsPrepareSite
+-}
+-
+-
+-task cleanJalviewjsTransferSite {
+-  doFirst {
+-    delete "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
+-    delete "${jalviewDir}/${jalviewjsTransferSiteLibDir}"
+-    delete "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}"
+-    delete "${jalviewDir}/${jalviewjsTransferSiteCoreDir}"
+-  }
+-}
+-
+-
+-task cleanJalviewjsSite {
+-  dependsOn cleanJalviewjsTransferSite
+-  doFirst {
+-    delete "${jalviewDir}/${jalviewjsSiteDir}"
+-  }
+-}
+-
+-
+-task jalviewjsSiteTar(type: Tar) {
+-  group "JalviewJS"
+-  description "Creates a tar.gz file for the website"
+-  dependsOn jalviewjsBuildSite
+-  def outputFilename = "jalviewjs-site-${JALVIEW_VERSION}.tar.gz"
+-  archiveFileName = outputFilename
+-
+-  compression Compression.GZIP
+-
+-  from "${jalviewDir}/${jalviewjsSiteDir}"
+-  into jalviewjs_site_dir // this is inside the tar file
+-
+-  inputs.dir("${jalviewDir}/${jalviewjsSiteDir}")
+-}
+-
+-
+-task jalviewjsServer {
+-  group "JalviewJS"
+-  def filename = "jalviewjsTest.html"
+-  description "Starts a webserver on localhost to test the website. See ${filename} to access local site on most recently used port."
+-  def htmlFile = "${jalviewDirAbsolutePath}/${filename}"
+-  doLast {
+-
+-    def factory
+-    try {
+-      def f = Class.forName("org.gradle.plugins.javascript.envjs.http.simple.SimpleHttpFileServerFactory")
+-      factory = f.newInstance()
+-    } catch (ClassNotFoundException e) {
+-      throw new GradleException("Unable to create SimpleHttpFileServerFactory")
+-    }
+-    def port = Integer.valueOf(jalviewjs_server_port)
+-    def start = port
+-    def running = false
+-    def url
+-    def jalviewjsServer
+-    while(port < start+1000 && !running) {
+-      try {
+-        def doc_root = new File("${jalviewDirAbsolutePath}/${jalviewjsSiteDir}")
+-        jalviewjsServer = factory.start(doc_root, port)
+-        running = true
+-        url = jalviewjsServer.getResourceUrl(jalviewjs_server_resource)
+-        println("SERVER STARTED with document root ${doc_root}.")
+-        println("Go to "+url+" . Run  gradle --stop  to stop (kills all gradle daemons).")
+-        println("For debug: "+url+"?j2sdebug")
+-        println("For verbose: "+url+"?j2sverbose")
+-      } catch (Exception e) {
+-        port++;
+-      }
+-    }
+-    def htmlText = """
+-      <p><a href="${url}">JalviewJS Test. &lt;${url}&gt;</a></p>
+-      <p><a href="${url}?j2sdebug">JalviewJS Test with debug. &lt;${url}?j2sdebug&gt;</a></p>
+-      <p><a href="${url}?j2sverbose">JalviewJS Test with verbose. &lt;${url}?j2sdebug&gt;</a></p>
+-      """
+-    jalviewjsCoreClasslists.each { cl ->
+-      def urlcore = jalviewjsServer.getResourceUrl(file(cl.outputfile).getName())
+-      htmlText += """
+-      <p><a href="${urlcore}">${jalviewjsJalviewTemplateName} [core ${cl.name}]. &lt;${urlcore}&gt;</a></p>
+-      """
+-      println("For core ${cl.name}: "+urlcore)
+-    }
+-
+-    file(htmlFile).text = htmlText
+-  }
+-
+-  outputs.file(htmlFile)
+-  outputs.upToDateWhen({false})
+-}
+-
+-
+-task cleanJalviewjsAll {
+-  group "JalviewJS"
+-  description "Delete all configuration and build artifacts to do with JalviewJS build"
+-  dependsOn cleanJalviewjsSite
+-  dependsOn jalviewjsEclipsePaths
+-  
+-  doFirst {
+-    delete "${jalviewDir}/${jalviewjsBuildDir}"
+-    delete "${jalviewDir}/${eclipse_bin_dir}"
+-    if (eclipseWorkspace != null && file(eclipseWorkspace.getAbsolutePath()+"/.metadata").exists()) {
+-      delete file(eclipseWorkspace.getAbsolutePath()+"/.metadata")
+-    }
+-    delete jalviewjsJ2sAltSettingsFileName
+-  }
+-
+-  outputs.upToDateWhen( { false } )
+-}
+-
+-
+-task jalviewjsIDE_checkJ2sPlugin {
+-  group "00 JalviewJS in Eclipse"
+-  description "Compare the swingjs/net.sf.j2s.core(-j11)?.jar file with the Eclipse IDE's plugin version (found in the 'dropins' dir)"
+-
+-  doFirst {
+-    def j2sPlugin = string("${jalviewDir}/${jalviewjsJ2sPlugin}")
+-    def j2sPluginFile = file(j2sPlugin)
+-    def eclipseHome = System.properties["eclipse.home.location"]
+-    if (eclipseHome == null || ! IN_ECLIPSE) {
+-      throw new StopExecutionException("Cannot find running Eclipse home from System.properties['eclipse.home.location']. Skipping J2S Plugin Check.")
+-    }
+-    def eclipseJ2sPluginDirs = [ "${eclipseHome}/dropins" ]
+-    def altPluginsDir = System.properties["org.eclipse.equinox.p2.reconciler.dropins.directory"]
+-    if (altPluginsDir != null && file(altPluginsDir).exists()) {
+-      eclipseJ2sPluginDirs += altPluginsDir
+-    }
+-    def foundPlugin = false
+-    def j2sPluginFileName = j2sPluginFile.getName()
+-    def eclipseJ2sPlugin
+-    def eclipseJ2sPluginFile
+-    eclipseJ2sPluginDirs.any { dir ->
+-      eclipseJ2sPlugin = "${dir}/${j2sPluginFileName}"
+-      eclipseJ2sPluginFile = file(eclipseJ2sPlugin)
+-      if (eclipseJ2sPluginFile.exists()) {
+-        foundPlugin = true
+-        return true
+-      }
+-    }
+-    if (!foundPlugin) {
+-      def msg = "Eclipse J2S Plugin is not installed (could not find '${j2sPluginFileName}' in\n"+eclipseJ2sPluginDirs.join("\n")+"\n)\nTry running task jalviewjsIDE_copyJ2sPlugin"
+-      System.err.println(msg)
+-      throw new StopExecutionException(msg)
+-    }
+-
+-    def digest = MessageDigest.getInstance("MD5")
+-
+-    digest.update(j2sPluginFile.text.bytes)
+-    def j2sPluginMd5 = new BigInteger(1, digest.digest()).toString(16).padLeft(32, '0')
+-
+-    digest.update(eclipseJ2sPluginFile.text.bytes)
+-    def eclipseJ2sPluginMd5 = new BigInteger(1, digest.digest()).toString(16).padLeft(32, '0')
+-     
+-    if (j2sPluginMd5 != eclipseJ2sPluginMd5) {
+-      def msg = "WARNING! Eclipse J2S Plugin '${eclipseJ2sPlugin}' is different to this commit's version '${j2sPlugin}'"
+-      System.err.println(msg)
+-      throw new StopExecutionException(msg)
+-    } else {
+-      def msg = "Eclipse J2S Plugin '${eclipseJ2sPlugin}' is the same as '${j2sPlugin}' (this is good)"
+-      println(msg)
+-    }
+-  }
+-}
+-
+-task jalviewjsIDE_copyJ2sPlugin {
+-  group "00 JalviewJS in Eclipse"
+-  description "Copy the swingjs/net.sf.j2s.core(-j11)?.jar file into the Eclipse IDE's 'dropins' dir"
+-
+-  doFirst {
+-    def j2sPlugin = string("${jalviewDir}/${jalviewjsJ2sPlugin}")
+-    def j2sPluginFile = file(j2sPlugin)
+-    def eclipseHome = System.properties["eclipse.home.location"]
+-    if (eclipseHome == null || ! IN_ECLIPSE) {
+-      throw new StopExecutionException("Cannot find running Eclipse home from System.properties['eclipse.home.location']. NOT copying J2S Plugin.")
+-    }
+-    def eclipseJ2sPlugin = "${eclipseHome}/dropins/${j2sPluginFile.getName()}"
+-    def eclipseJ2sPluginFile = file(eclipseJ2sPlugin)
+-    def msg = "WARNING! Copying this commit's j2s plugin '${j2sPlugin}' to Eclipse J2S Plugin '${eclipseJ2sPlugin}'\n* May require an Eclipse restart"
+-    System.err.println(msg)
+-    copy {
+-      from j2sPlugin
+-      eclipseJ2sPluginFile.getParentFile().mkdirs()
+-      into eclipseJ2sPluginFile.getParent()
+-    }
+-  }
+-}
+-
+-
+-task jalviewjsIDE_j2sFile {
+-  group "00 JalviewJS in Eclipse"
+-  description "Creates the .j2s file"
+-  dependsOn jalviewjsCreateJ2sSettings
+-}
+-
+-
+-task jalviewjsIDE_SyncCore {
+-  group "00 JalviewJS in Eclipse"
+-  description "Build the core js lib closures listed in the classlists dir and publish core html from template"
+-  dependsOn jalviewjsSyncCore
+-}
+-
+-
+-task jalviewjsIDE_SyncSiteAll {
+-  dependsOn jalviewjsSyncAllLibs
+-  dependsOn jalviewjsSyncResources
+-  dependsOn jalviewjsSyncSiteResources
+-  dependsOn jalviewjsSyncBuildProperties
+-}
+-
+-
+-cleanJalviewjsTransferSite.mustRunAfter jalviewjsIDE_SyncSiteAll
+-
+-
+-task jalviewjsIDE_PrepareSite {
+-  group "00 JalviewJS in Eclipse"
+-  description "Sync libs and resources to site dir, but not closure cores"
+-
+-  dependsOn jalviewjsIDE_SyncSiteAll
+-  //dependsOn cleanJalviewjsTransferSite // not sure why this clean is here -- will slow down a re-run of this task
+-}
+-
+-
+-task jalviewjsIDE_AssembleSite {
+-  group "00 JalviewJS in Eclipse"
+-  description "Assembles unzipped supporting zipfiles, resources, site resources and closure cores into the Eclipse transpiled site"
+-  dependsOn jalviewjsPrepareSite
+-}
+-
+-
+-task jalviewjsIDE_SiteClean {
+-  group "00 JalviewJS in Eclipse"
+-  description "Deletes the Eclipse transpiled site"
+-  dependsOn cleanJalviewjsSite
+-}
+-
+-
+-task jalviewjsIDE_Server {
+-  group "00 JalviewJS in Eclipse"
+-  description "Starts a webserver on localhost to test the website"
+-  dependsOn jalviewjsServer
+-}
+-
+-
+-// buildship runs this at import or gradle refresh
+-task eclipseSynchronizationTask {
+-  //dependsOn eclipseSetup
+-  dependsOn createBuildProperties
+-  if (J2S_ENABLED) {
+-    dependsOn jalviewjsIDE_j2sFile
+-    dependsOn jalviewjsIDE_checkJ2sPlugin
+-    dependsOn jalviewjsIDE_PrepareSite
+-  }
+-}
+-
+-
+-// buildship runs this at build time or project refresh
+-task eclipseAutoBuildTask {
+-  //dependsOn jalviewjsIDE_checkJ2sPlugin
+-  //dependsOn jalviewjsIDE_PrepareSite
++  outputs.file("${outputDir}/${archiveFileName}")
+ }
+-
+-task jalviewjs {
+-  group "JalviewJS"
+-  description "Build the site"
+-  dependsOn jalviewjsBuildSite
+-}
diff --git a/utils/debian/debian_build.gradle b/utils/debian/debian_build.gradle
new file mode 100644 (file)
index 0000000..a0e8cd9
--- /dev/null
@@ -0,0 +1,514 @@
+/* Convention for properties.  Read from gradle.properties, use lower_case_underlines for property names.
+ * For properties set within build.gradle, use camelCaseNoSpace.
+ */
+import org.apache.tools.ant.filters.ReplaceTokens
+
+plugins {
+  id 'java'
+  id 'application'
+}
+
+// in ext the values are cast to Object. Ensure string values are cast as String (and not GStringImpl) for later use
+def string(Object o) {
+  return o == null ? "" : o.toString()
+}
+
+def overrideProperties(String propsFileName, boolean output = false) {
+  if (propsFileName == null) {
+    return
+  }
+  def propsFile = file(propsFileName)
+  if (propsFile != null && propsFile.exists()) {
+    println("Using properties from file '${propsFileName}'")
+    try {
+      def p = new Properties()
+      def localPropsFIS = new FileInputStream(propsFile)
+      p.load(localPropsFIS)
+      localPropsFIS.close()
+      p.each {
+        key, val -> 
+          def oldval
+          if (project.hasProperty(key)) {
+            oldval = project.findProperty(key)
+            project.setProperty(key, val)
+            if (output) {
+              println("Overriding property '${key}' ('${oldval}') with ${file(propsFile).getName()} value '${val}'")
+            }
+          } else {
+            ext.setProperty(key, val)
+            if (output) {
+              println("Setting ext property '${key}' with ${file(propsFile).getName()}s value '${val}'")
+            }
+          }
+      }
+    } catch (Exception e) {
+      println("Exception reading local.properties")
+      e.printStackTrace()
+    }
+  }
+}
+
+project.ext {
+  jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath()
+  jalviewDirRelativePath = jalviewDir
+
+  propertiesChannelName = "release"
+  channelDir = string("${jalviewDir}/${channel_properties_dir}/${propertiesChannelName}")
+  channelGradleProperties = string("${channelDir}/channel_gradle.properties")
+  overrideProperties(channelGradleProperties, false)
+  
+  ////  
+  // Import releaseProps from the RELEASE file
+  // or a file specified via JALVIEW_RELEASE_FILE if defined
+  // Expect jalview.version and target release branch in jalview.release        
+  def releaseProps = new Properties();
+  def releasePropFile = findProperty("JALVIEW_RELEASE_FILE");
+  def defaultReleasePropFile = "${jalviewDirAbsolutePath}/RELEASE";
+  try {
+    (new File(releasePropFile!=null ? releasePropFile : defaultReleasePropFile)).withInputStream { 
+     releaseProps.load(it)
+    }
+  } catch (Exception fileLoadError) {
+    throw new Error("Couldn't load release properties file "+(releasePropFile==null ? defaultReleasePropFile : "from custom location: releasePropFile"),fileLoadError);
+  }
+  ////
+  // Set JALVIEW_VERSION if it is not already set
+  if (findProperty("JALVIEW_VERSION")==null || "".equals(JALVIEW_VERSION)) {
+    JALVIEW_VERSION = releaseProps.get("jalview.version")
+  }
+
+  // essentials
+  bareSourceDir = string(source_dir)
+  sourceDir = string("${jalviewDir}/${bareSourceDir}")
+  resourceDir = string("${jalviewDir}/${resource_dir}")
+  bareTestSourceDir = string(test_source_dir)
+  testDir = string("${jalviewDir}/${bareTestSourceDir}")
+
+  classesDir = string("${jalviewDir}/${classes_dir}")
+
+  useClover = false
+
+  resourceClassesDir = classesDir
+
+  testSourceDir = testDir
+  testClassesDir = "${jalviewDir}/${test_output_dir}"
+
+  buildProperties = string("${classesDir}/${build_properties_file}")
+  getdownSetAppBaseProperty = false // whether to pass the appbase and appdistdir to the application
+
+  install4jApplicationName = "${jalview_name}"
+  
+  println("Using a ${CHANNEL} profile.")
+
+  additional_compiler_args = []
+  // configure classpath/args for j8/j11 compilation
+  if (JAVA_VERSION.equals("1.8")) {
+    JAVA_INTEGER_VERSION = string("8")
+    //libDir = j8libDir
+    libDir = j11libDir
+    libDistDir = j8libDir
+    compile_source_compatibility = 1.8
+    compile_target_compatibility = 1.8
+  } else if (JAVA_VERSION.equals("11")) {
+    JAVA_INTEGER_VERSION = string("11")
+    libDir = j11libDir
+    libDistDir = j11libDir
+    compile_source_compatibility = 11
+    compile_target_compatibility = 11
+  } else {
+    throw new GradleException("JAVA_VERSION=${JAVA_VERSION} not currently supported by Jalview")
+  }
+
+  resourceBuildDir = string("${buildDir}/resources")
+  resourcesBuildDir = string("${resourceBuildDir}/resources_build")
+  helpBuildDir = string("${resourceBuildDir}/help_build")
+  docBuildDir = string("${resourceBuildDir}/doc_build")
+
+  if (buildProperties == null) {
+    buildProperties = string("${resourcesBuildDir}/${build_properties_file}")
+  }
+  buildingHTML = string("${jalviewDir}/${doc_dir}/building.html")
+  helpParentDir = string("${jalviewDir}/${help_parent_dir}")
+  helpSourceDir = string("${helpParentDir}/${help_dir}")
+  helpFile = string("${helpBuildDir}/${help_dir}/help.jhm")
+
+  // ENDEXT
+}
+
+
+sourceSets {
+  main {
+    java {
+      srcDirs sourceDir
+      outputDir = file(classesDir)
+    }
+
+    resources {
+      srcDirs = [ resourcesBuildDir, docBuildDir, helpBuildDir ]
+    }
+
+    compileClasspath = files(sourceSets.main.java.outputDir)
+    compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"])
+
+
+    compileClasspath = files(sourceSets.main.java.outputDir)
+    compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"])
+
+    runtimeClasspath = compileClasspath
+    runtimeClasspath += files(sourceSets.main.resources.srcDirs)
+  }
+
+  test {
+    java {
+      srcDirs testSourceDir
+      outputDir = file(testClassesDir)
+    }
+
+    resources {
+      srcDirs = useClover ? sourceSets.clover.resources.srcDirs : sourceSets.main.resources.srcDirs
+    }
+
+    compileClasspath = files( sourceSets.test.java.outputDir )
+    compileClasspath += useClover ? sourceSets.clover.compileClasspath : sourceSets.main.compileClasspath
+    compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["**/*.jar"])
+
+    runtimeClasspath = compileClasspath
+    runtimeClasspath += files(sourceSets.test.resources.srcDirs)
+  }
+ /*  test {
+    java {
+      srcDirs testSourceDir
+      outputDir = file(testClassesDir)
+    }
+
+    resources {
+      srcDirs = sourceSets.main.resources.srcDirs
+    }
+
+    compileClasspath = files( sourceSets.test.java.outputDir )
+    compileClasspath += sourceSets.main.compileClasspath
+    compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["**   REMOVE_THIS_GAP  /*.jar"])
+
+    runtimeClasspath = compileClasspath
+  }
+*/
+}
+
+
+compileJava {
+  sourceCompatibility = compile_source_compatibility
+  targetCompatibility = compile_target_compatibility
+  options.compilerArgs = additional_compiler_args
+  doFirst {
+    print ("Setting target compatibility to "+compile_target_compatibility+"\n")
+  }
+}
+
+
+compileTestJava {
+  doFirst {
+    sourceCompatibility = compile_source_compatibility
+    targetCompatibility = compile_target_compatibility
+    options.compilerArgs = additional_compiler_args
+    print ("Setting target compatibility to "+targetCompatibility+"\n")
+  }
+}
+
+
+clean {
+  doFirst {
+    delete sourceSets.main.java.outputDir
+  }
+}
+
+
+cleanTest {
+  doFirst {
+    delete sourceSets.test.java.outputDir
+  }
+}
+
+
+// format is a string like date.format("dd MMMM yyyy")
+def getDate(format) {
+  def date = new Date()
+  return date.format(format)
+}
+
+
+task copyDocs(type: Copy) {
+  def inputDir = "${jalviewDir}/${doc_dir}"
+  def outputDir = "${docBuildDir}/${doc_dir}"
+  from(inputDir) {
+    include('**/*.txt')
+    include('**/*.md')
+    include('**/*.html')
+    include('**/*.xml')
+    filter(ReplaceTokens,
+      beginToken: '$$',
+      endToken: '$$',
+      tokens: [
+        'Version-Rel': JALVIEW_VERSION,
+        'Year-Rel': getDate("yyyy")
+      ]
+    )
+  }
+  from(inputDir) {
+    exclude('**/*.txt')
+    exclude('**/*.md')
+    exclude('**/*.html')
+    exclude('**/*.xml')
+  }
+  into outputDir
+
+  inputs.dir(inputDir)
+  outputs.dir(outputDir)
+}
+
+
+task copyHelp(type: Copy) {
+  def inputDir = helpSourceDir
+  def outputDir = "${helpBuildDir}/${help_dir}"
+  from(inputDir) {
+    include('**/*.txt')
+    include('**/*.md')
+    include('**/*.html')
+    include('**/*.hs')
+    include('**/*.xml')
+    include('**/*.jhm')
+    filter(ReplaceTokens,
+      beginToken: '$$',
+      endToken: '$$',
+      tokens: [
+        'Version-Rel': JALVIEW_VERSION,
+        'Year-Rel': getDate("yyyy")
+      ]
+    )
+  }
+  from(inputDir) {
+    exclude('**/*.txt')
+    exclude('**/*.md')
+    exclude('**/*.html')
+    exclude('**/*.hs')
+    exclude('**/*.xml')
+    exclude('**/*.jhm')
+  }
+  into outputDir
+
+  inputs.dir(inputDir)
+  outputs.files(helpFile)
+  outputs.dir(outputDir)
+}
+
+
+task copyResources(type: Copy) {
+  group = "build"
+  description = "Copy (and make text substitutions in) the resources dir to the build area"
+
+  def inputDir = resourceDir
+  def outputDir = resourcesBuildDir
+  from(inputDir) {
+    include('**/*.txt')
+    include('**/*.md')
+    include('**/*.html')
+    include('**/*.xml')
+    filter(ReplaceTokens,
+      beginToken: '$$',
+      endToken: '$$',
+      tokens: [
+        'Version-Rel': JALVIEW_VERSION,
+        'Year-Rel': getDate("yyyy")
+      ]
+    )
+  }
+  from(inputDir) {
+    exclude('**/*.txt')
+    exclude('**/*.md')
+    exclude('**/*.html')
+    exclude('**/*.xml')
+  }
+  into outputDir
+
+  inputs.dir(inputDir)
+  outputs.dir(outputDir)
+}
+
+task copyChannelResources(type: Copy) {
+  dependsOn copyResources
+  group = "build"
+  description = "Copy the channel resources dir to the build resources area"
+
+  def inputDir = "${channelDir}/${resource_dir}"
+  def outputDir = resourcesBuildDir
+  from inputDir
+  into outputDir
+
+  inputs.dir(inputDir)
+  outputs.dir(outputDir)
+}
+
+task createBuildProperties(type: Copy) {
+  // using the build_properties already included in the source tarball
+  def inputFile = "build_properties"
+  def outputFile = buildProperties
+  from inputFile
+  into file(outputFile).getParent()
+  rename(file(inputFile).getName(), file(outputFile).getName())
+
+  inputs.file(inputFile)
+  outputs.file(outputFile)
+}
+
+
+task buildIndices(type: JavaExec) {
+  dependsOn copyHelp
+  classpath = sourceSets.main.compileClasspath
+  main = "com.sun.java.help.search.Indexer"
+  workingDir = "${helpBuildDir}/${help_dir}"
+  def argDir = "html"
+  args = [ argDir ]
+  inputs.dir("${workingDir}/${argDir}")
+
+  outputs.dir("${classesDir}/doc")
+  outputs.dir("${classesDir}/help")
+  outputs.file("${workingDir}/JavaHelpSearch/DOCS")
+  outputs.file("${workingDir}/JavaHelpSearch/DOCS.TAB")
+  outputs.file("${workingDir}/JavaHelpSearch/OFFSETS")
+  outputs.file("${workingDir}/JavaHelpSearch/POSITIONS")
+  outputs.file("${workingDir}/JavaHelpSearch/SCHEMA")
+  outputs.file("${workingDir}/JavaHelpSearch/TMAP")
+}
+
+task buildResources {
+  dependsOn copyResources
+  dependsOn copyChannelResources
+  dependsOn createBuildProperties
+}
+
+task prepare {
+  dependsOn buildResources
+  dependsOn copyDocs
+  dependsOn copyHelp
+  dependsOn buildIndices
+}
+
+
+compileJava.dependsOn prepare
+run.dependsOn compileJava
+//run.dependsOn prepare
+
+
+//testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
+test {
+  dependsOn prepare
+  dependsOn compileJava //?
+
+  useTestNG() {
+    includeGroups testng_groups
+    excludeGroups testng_excluded_groups
+    preserveOrder true
+    useDefaultListeners=true
+  }
+
+  maxHeapSize = "1024m"
+
+  workingDir = jalviewDir
+  //systemProperties 'clover.jar' System.properties.clover.jar
+  def testLaf = project.findProperty("test_laf")
+  if (testLaf != null) {
+    println("Setting Test LaF to '${testLaf}'")
+    systemProperty "laf", testLaf
+  }
+  def testHiDPIScale = project.findProperty("test_HiDPIScale")
+  if (testHiDPIScale != null) {
+    println("Setting Test HiDPI Scale to '${testHiDPIScale}'")
+    systemProperty "sun.java2d.uiScale", testHiDPIScale
+  }
+  sourceCompatibility = compile_source_compatibility
+  targetCompatibility = compile_target_compatibility
+  jvmArgs += additional_compiler_args
+
+  doFirst {
+  }
+}
+
+
+task compileLinkCheck(type: JavaCompile) {
+  options.fork = true
+  classpath = files("${jalviewDir}/${utils_dir}")
+  destinationDir = file("${jalviewDir}/${utils_dir}")
+  source = fileTree(dir: "${jalviewDir}/${utils_dir}", include: ["HelpLinksChecker.java", "BufferedLineReader.java"])
+
+  inputs.file("${jalviewDir}/${utils_dir}/HelpLinksChecker.java")
+  inputs.file("${jalviewDir}/${utils_dir}/HelpLinksChecker.java")
+  outputs.file("${jalviewDir}/${utils_dir}/HelpLinksChecker.class")
+  outputs.file("${jalviewDir}/${utils_dir}/BufferedLineReader.class")
+}
+
+
+task linkCheck(type: JavaExec) {
+  dependsOn prepare
+  dependsOn compileLinkCheck
+
+  def helpLinksCheckerOutFile = file("${jalviewDir}/${utils_dir}/HelpLinksChecker.out")
+  classpath = files("${jalviewDir}/${utils_dir}")
+  main = "HelpLinksChecker"
+  workingDir = jalviewDir
+  args = [ "${helpBuildDir}/${help_dir}", "-nointernet" ]
+
+  def outFOS = new FileOutputStream(helpLinksCheckerOutFile, false) // false == don't append
+  standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+    outFOS,
+    System.out)
+  errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+    outFOS,
+    System.err)
+
+  inputs.dir(helpBuildDir)
+  outputs.file(helpLinksCheckerOutFile)
+}
+
+
+// import the pubhtmlhelp target
+ant.properties.basedir = "${jalviewDir}"
+ant.properties.helpBuildDir = "${helpBuildDir}/${help_dir}"
+ant.importBuild "${utils_dir}/publishHelp.xml"
+
+
+task cleanPackageDir(type: Delete) {
+  doFirst {
+    delete fileTree(dir: "${jalviewDir}/${package_dir}", include: "*.jar")
+  }
+}
+
+
+jar {
+  dependsOn prepare
+  dependsOn linkCheck
+
+  manifest {
+    attributes "Main-Class": main_class,
+    "Permissions": "all-permissions",
+    "Application-Name": install4jApplicationName,
+    "Codebase": application_codebase,
+    "Implementation-Version": JALVIEW_VERSION
+  }
+
+  def outputDir = "${jalviewDir}/${package_dir}"
+  destinationDirectory = file(outputDir)
+  archiveFileName = rootProject.name+".jar"
+
+  exclude "cache*/**"
+  exclude "*.jar"
+  exclude "*.jar.*"
+  exclude "**/*.jar"
+  exclude "**/*.jar.*"
+
+  inputs.dir(sourceSets.main.java.outputDir)
+  sourceSets.main.resources.srcDirs.each{ dir ->
+    inputs.dir(dir)
+  }
+
+  outputs.file("${outputDir}/${archiveFileName}")
+}
+